/ Hex Artifact Content
Login

Artifact 4b593855fb962534718b7f2cf1427d8c32d6d7743ea7e6debd0674345ca50812:


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 20 62 65  is an integer be
10d0: 74 77 65 65 6e 20 32 20 61 6e 64 20 34 2e 20 20  tween 2 and 4.  
10e0: 32 20 69 6e 64 69 63 61 74 65 73 20 61 20 6f 72  2 indicates a or
10f0: 64 69 6e 61 72 79 20 74 77 6f 2d 77 61 79 0a 2a  dinary two-way.*
1100: 2a 20 62 72 61 6e 63 68 20 28 49 3d 30 20 6d 65  * branch (I=0 me
1110: 61 6e 73 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ans fall through
1120: 20 61 6e 64 20 49 3d 31 20 6d 65 61 6e 73 20 74   and I=1 means t
1130: 61 6b 65 6e 29 2e 20 20 33 20 69 6e 64 69 63 61  aken).  3 indica
1140: 74 65 73 0a 2a 2a 20 61 20 33 2d 77 61 79 20 62  tes.** a 3-way b
1150: 72 61 6e 63 68 20 77 68 65 72 65 20 74 68 65 20  ranch where the 
1160: 74 68 69 72 64 20 77 61 79 20 69 73 20 77 68 65  third way is whe
1170: 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 6f 70 65  n one of the ope
1180: 72 61 6e 64 73 20 69 73 0a 2a 2a 20 4e 55 4c 4c  rands is.** NULL
1190: 2e 20 20 34 20 69 6e 64 69 63 61 74 65 73 20 74  .  4 indicates t
11a0: 68 65 20 4f 50 5f 4a 75 6d 70 20 69 6e 73 74 72  he OP_Jump instr
11b0: 75 63 74 69 6f 6e 20 77 68 69 63 68 20 68 61 73  uction which has
11c0: 20 74 68 72 65 65 20 64 65 73 74 69 6e 61 74 69   three destinati
11d0: 6f 6e 73 0a 2a 2a 20 64 65 70 65 6e 64 69 6e 67  ons.** depending
11e0: 20 6f 6e 20 77 68 65 74 68 65 72 20 74 68 65 20   on whether the 
11f0: 66 69 72 73 74 20 6f 70 65 72 61 6e 64 20 69 73  first operand is
1200: 20 6c 65 73 73 20 74 68 61 6e 2c 20 65 71 75 61   less than, equa
1210: 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61 74 65 72  l to, or greater
1220: 0a 2a 2a 20 74 68 61 6e 20 74 68 65 20 73 65 63  .** than the sec
1230: 6f 6e 64 2e 20 0a 2a 2a 0a 2a 2a 20 69 53 72 63  ond. .**.** iSrc
1240: 4c 69 6e 65 20 69 73 20 74 68 65 20 73 6f 75 72  Line is the sour
1250: 63 65 20 63 6f 64 65 20 6c 69 6e 65 20 28 66 72  ce code line (fr
1260: 6f 6d 20 74 68 65 20 5f 5f 4c 49 4e 45 5f 5f 20  om the __LINE__ 
1270: 6d 61 63 72 6f 29 20 74 68 61 74 0a 2a 2a 20 67  macro) that.** g
1280: 65 6e 65 72 61 74 65 64 20 74 68 65 20 56 44 42  enerated the VDB
1290: 45 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f  E instruction co
12a0: 6d 62 69 6e 65 64 20 77 69 74 68 20 66 6c 61 67  mbined with flag
12b0: 20 62 69 74 73 2e 20 20 54 68 65 20 73 6f 75 72   bits.  The sour
12c0: 63 65 0a 2a 2a 20 63 6f 64 65 20 6c 69 6e 65 20  ce.** code line 
12d0: 6e 75 6d 62 65 72 20 69 73 20 69 6e 20 74 68 65  number is in the
12e0: 20 6c 6f 77 65 72 20 32 34 20 62 69 74 73 20 6f   lower 24 bits o
12f0: 66 20 69 53 72 63 4c 69 6e 65 20 61 6e 64 20 74  f iSrcLine and t
1300: 68 65 20 75 70 70 65 72 0a 2a 2a 20 38 20 62 79  he upper.** 8 by
1310: 74 65 73 20 61 72 65 20 66 6c 61 67 73 2e 20 20  tes are flags.  
1320: 54 68 65 20 6c 6f 77 65 72 20 74 68 72 65 65 20  The lower three 
1330: 62 69 74 73 20 6f 66 20 74 68 65 20 66 6c 61 67  bits of the flag
1340: 73 20 69 6e 64 69 63 61 74 65 0a 2a 2a 20 76 61  s indicate.** va
1350: 6c 75 65 73 20 66 6f 72 20 49 20 74 68 61 74 20  lues for I that 
1360: 73 68 6f 75 6c 64 20 6e 65 76 65 72 20 6f 63 63  should never occ
1370: 75 72 2e 20 20 46 6f 72 20 65 78 61 6d 70 6c 65  ur.  For example
1380: 2c 20 69 66 20 74 68 65 20 62 72 61 6e 63 68 20  , if the branch 
1390: 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 74 61 6b  is.** always tak
13a0: 65 6e 2c 20 74 68 65 20 66 6c 61 67 73 20 73 68  en, the flags sh
13b0: 6f 75 6c 64 20 62 65 20 30 78 30 35 20 73 69 6e  ould be 0x05 sin
13c0: 63 65 20 74 68 65 20 66 61 6c 6c 2d 74 68 72 6f  ce the fall-thro
13d0: 75 67 68 20 61 6e 64 0a 2a 2a 20 61 6c 74 65 72  ugh and.** alter
13e0: 6e 61 74 65 20 62 72 61 6e 63 68 20 61 72 65 20  nate branch are 
13f0: 6e 65 76 65 72 20 74 61 6b 65 6e 2e 20 20 49 66  never taken.  If
1400: 20 61 20 62 72 61 6e 63 68 20 69 73 20 6e 65 76   a branch is nev
1410: 65 72 20 74 61 6b 65 6e 20 74 68 65 6e 0a 2a 2a  er taken then.**
1420: 20 66 6c 61 67 73 20 73 68 6f 75 6c 64 20 62 65   flags should be
1430: 20 30 78 30 36 20 73 69 6e 63 65 20 6f 6e 6c 79   0x06 since only
1440: 20 74 68 65 20 66 61 6c 6c 2d 74 68 72 6f 75 67   the fall-throug
1450: 68 20 61 70 70 72 6f 61 63 68 20 69 73 20 61 6c  h approach is al
1460: 6c 6f 77 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 69 74  lowed..**.** Bit
1470: 20 30 78 30 34 20 6f 66 20 74 68 65 20 66 6c 61   0x04 of the fla
1480: 67 73 20 69 6e 64 69 63 61 74 65 73 20 61 6e 20  gs indicates an 
1490: 4f 50 5f 4a 75 6d 70 20 6f 70 63 6f 64 65 20 74  OP_Jump opcode t
14a0: 68 61 74 20 69 73 20 6f 6e 6c 79 0a 2a 2a 20 69  hat is only.** i
14b0: 6e 74 65 72 65 73 74 65 64 20 69 6e 20 65 71 75  nterested in equ
14c0: 61 6c 20 6f 72 20 6e 6f 74 2d 65 71 75 61 6c 2e  al or not-equal.
14d0: 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
14e0: 2c 20 49 3d 3d 30 20 61 6e 64 20 49 3d 3d 32 0a  , I==0 and I==2.
14f0: 2a 2a 20 73 68 6f 75 6c 64 20 62 65 20 74 72 65  ** should be tre
1500: 61 74 65 64 20 74 68 65 20 73 61 6d 65 2e 0a 2a  ated the same..*
1510: 2a 0a 2a 2a 20 53 69 6e 63 65 20 6f 6e 6c 79 20  *.** Since only 
1520: 61 20 6c 69 6e 65 20 6e 75 6d 62 65 72 20 69 73  a line number is
1530: 20 72 65 74 61 69 6e 65 64 2c 20 6e 6f 74 20 74   retained, not t
1540: 68 65 20 66 69 6c 65 6e 61 6d 65 2c 20 74 68 69  he filename, thi
1550: 73 20 6d 61 63 72 6f 0a 2a 2a 20 6f 6e 6c 79 20  s macro.** only 
1560: 77 6f 72 6b 73 20 66 6f 72 20 61 6d 61 6c 67 61  works for amalga
1570: 6d 61 74 69 6f 6e 20 62 75 69 6c 64 73 2e 20 20  mation builds.  
1580: 42 75 74 20 74 68 61 74 20 69 73 20 6f 6b 2c 20  But that is ok, 
1590: 73 69 6e 63 65 20 74 68 65 73 65 20 6d 61 63 72  since these macr
15a0: 6f 73 0a 2a 2a 20 73 68 6f 75 6c 64 20 62 65 20  os.** should be 
15b0: 6e 6f 2d 6f 70 73 20 65 78 63 65 70 74 20 66 6f  no-ops except fo
15c0: 72 20 73 70 65 63 69 61 6c 20 62 75 69 6c 64 73  r special builds
15d0: 20 75 73 65 64 20 74 6f 20 6d 65 61 73 75 72 65   used to measure
15e0: 20 74 65 73 74 20 63 6f 76 65 72 61 67 65 2e 0a   test coverage..
15f0: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
1600: 53 51 4c 49 54 45 5f 56 44 42 45 5f 43 4f 56 45  SQLITE_VDBE_COVE
1610: 52 41 47 45 29 0a 23 20 64 65 66 69 6e 65 20 56  RAGE).# define V
1620: 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 49  dbeBranchTaken(I
1630: 2c 4d 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  ,M).#else.# defi
1640: 6e 65 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  ne VdbeBranchTak
1650: 65 6e 28 49 2c 4d 29 20 76 64 62 65 54 61 6b 65  en(I,M) vdbeTake
1660: 42 72 61 6e 63 68 28 70 4f 70 2d 3e 69 53 72 63  Branch(pOp->iSrc
1670: 4c 69 6e 65 2c 49 2c 4d 29 0a 20 20 73 74 61 74  Line,I,M).  stat
1680: 69 63 20 76 6f 69 64 20 76 64 62 65 54 61 6b 65  ic void vdbeTake
1690: 42 72 61 6e 63 68 28 75 33 32 20 69 53 72 63 4c  Branch(u32 iSrcL
16a0: 69 6e 65 2c 20 75 38 20 49 2c 20 75 38 20 4d 29  ine, u8 I, u8 M)
16b0: 7b 0a 20 20 20 20 75 38 20 6d 4e 65 76 65 72 3b  {.    u8 mNever;
16c0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 49 3c 3d  .    assert( I<=
16d0: 32 20 29 3b 20 20 2f 2a 20 30 3a 20 66 61 6c 6c  2 );  /* 0: fall
16e0: 20 74 68 72 6f 75 67 68 2c 20 20 31 3a 20 74 61   through,  1: ta
16f0: 6b 65 6e 2c 20 20 32 3a 20 61 6c 74 65 72 6e 61  ken,  2: alterna
1700: 74 65 20 74 61 6b 65 6e 20 2a 2f 0a 20 20 20 20  te taken */.    
1710: 61 73 73 65 72 74 28 20 4d 3c 3d 34 20 29 3b 20  assert( M<=4 ); 
1720: 20 2f 2a 20 32 3a 20 74 77 6f 2d 77 61 79 20 62   /* 2: two-way b
1730: 72 61 6e 63 68 2c 20 33 3a 20 74 68 72 65 65 2d  ranch, 3: three-
1740: 77 61 79 20 62 72 61 6e 63 68 2c 20 34 3a 20 4f  way branch, 4: O
1750: 50 5f 4a 75 6d 70 20 2a 2f 0a 20 20 20 20 61 73  P_Jump */.    as
1760: 73 65 72 74 28 20 49 3c 4d 20 29 3b 20 20 20 2f  sert( I<M );   /
1770: 2a 20 49 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20  * I can only be 
1780: 32 20 69 66 20 4d 20 69 73 20 33 20 6f 72 20 34  2 if M is 3 or 4
1790: 20 2a 2f 0a 20 20 20 20 2f 2a 20 54 72 61 6e 73   */.    /* Trans
17a0: 66 6f 72 6d 20 49 20 66 72 6f 6d 20 61 20 69 6e  form I from a in
17b0: 74 65 67 65 72 20 5b 30 2c 31 2c 32 5d 20 69 6e  teger [0,1,2] in
17c0: 74 6f 20 61 20 62 69 74 6d 61 73 6b 20 6f 66 20  to a bitmask of 
17d0: 5b 31 2c 32 2c 34 5d 20 2a 2f 0a 20 20 20 20 49  [1,2,4] */.    I
17e0: 20 3d 20 31 3c 3c 49 3b 0a 20 20 20 20 2f 2a 20   = 1<<I;.    /* 
17f0: 54 68 65 20 75 70 70 65 72 20 38 20 62 69 74 73  The upper 8 bits
1800: 20 6f 66 20 69 53 72 63 4c 69 6e 65 20 61 72 65   of iSrcLine are
1810: 20 66 6c 61 67 73 2e 20 20 54 68 65 20 6c 6f 77   flags.  The low
1820: 65 72 20 74 68 72 65 65 20 62 69 74 73 20 6f 66  er three bits of
1830: 0a 20 20 20 20 2a 2a 20 74 68 65 20 66 6c 61 67  .    ** the flag
1840: 73 20 69 6e 64 69 63 61 74 65 20 64 69 72 65 63  s indicate direc
1850: 74 69 6f 6e 73 20 74 68 61 74 20 74 68 65 20 62  tions that the b
1860: 72 61 6e 63 68 20 63 61 6e 20 6e 65 76 65 72 20  ranch can never 
1870: 67 6f 2e 20 20 49 66 0a 20 20 20 20 2a 2a 20 61  go.  If.    ** a
1880: 20 62 72 61 6e 63 68 20 72 65 61 6c 6c 79 20 64   branch really d
1890: 6f 65 73 20 67 6f 20 69 6e 20 6f 6e 65 20 6f 66  oes go in one of
18a0: 20 74 68 6f 73 65 20 64 69 72 65 63 74 69 6f 6e   those direction
18b0: 73 2c 20 61 73 73 65 72 74 20 72 69 67 68 74 0a  s, assert right.
18c0: 20 20 20 20 2a 2a 20 61 77 61 79 2e 20 2a 2f 0a      ** away. */.
18d0: 20 20 20 20 6d 4e 65 76 65 72 20 3d 20 69 53 72      mNever = iSr
18e0: 63 4c 69 6e 65 20 3e 3e 20 32 34 3b 0a 20 20 20  cLine >> 24;.   
18f0: 20 61 73 73 65 72 74 28 20 28 49 20 26 20 6d 4e   assert( (I & mN
1900: 65 76 65 72 29 3d 3d 30 20 29 3b 0a 20 20 20 20  ever)==0 );.    
1910: 69 66 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61  if( sqlite3Globa
1920: 6c 43 6f 6e 66 69 67 2e 78 56 64 62 65 42 72 61  lConfig.xVdbeBra
1930: 6e 63 68 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b  nch==0 ) return;
1940: 20 20 2f 2a 4e 4f 5f 54 45 53 54 2a 2f 0a 20 20    /*NO_TEST*/.  
1950: 20 20 49 20 7c 3d 20 6d 4e 65 76 65 72 3b 0a 20    I |= mNever;. 
1960: 20 20 20 69 66 28 20 4d 3d 3d 32 20 29 20 49 20     if( M==2 ) I 
1970: 7c 3d 20 30 78 30 34 3b 0a 20 20 20 20 69 66 28  |= 0x04;.    if(
1980: 20 4d 3d 3d 34 20 29 7b 0a 20 20 20 20 20 20 49   M==4 ){.      I
1990: 20 7c 3d 20 30 78 30 38 3b 0a 20 20 20 20 20 20   |= 0x08;.      
19a0: 69 66 28 20 28 6d 4e 65 76 65 72 26 30 78 30 38  if( (mNever&0x08
19b0: 29 21 3d 30 20 26 26 20 28 49 26 30 78 30 35 29  )!=0 && (I&0x05)
19c0: 21 3d 30 29 20 49 20 7c 3d 20 30 78 30 35 3b 20  !=0) I |= 0x05; 
19d0: 2f 2a 4e 4f 5f 54 45 53 54 2a 2f 0a 20 20 20 20  /*NO_TEST*/.    
19e0: 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 47 6c 6f  }.    sqlite3Glo
19f0: 62 61 6c 43 6f 6e 66 69 67 2e 78 56 64 62 65 42  balConfig.xVdbeB
1a00: 72 61 6e 63 68 28 73 71 6c 69 74 65 33 47 6c 6f  ranch(sqlite3Glo
1a10: 62 61 6c 43 6f 6e 66 69 67 2e 70 56 64 62 65 42  balConfig.pVdbeB
1a20: 72 61 6e 63 68 41 72 67 2c 0a 20 20 20 20 20 20  ranchArg,.      
1a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 53                iS
1a50: 72 63 4c 69 6e 65 26 30 78 66 66 66 66 66 66 2c  rcLine&0xffffff,
1a60: 20 49 2c 20 4d 29 3b 0a 20 20 7d 0a 23 65 6e 64   I, M);.  }.#end
1a70: 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72  if../*.** Conver
1a80: 74 20 74 68 65 20 67 69 76 65 6e 20 72 65 67 69  t the given regi
1a90: 73 74 65 72 20 69 6e 74 6f 20 61 20 73 74 72 69  ster into a stri
1aa0: 6e 67 20 69 66 20 69 74 20 69 73 6e 27 74 20 6f  ng if it isn't o
1ab0: 6e 65 0a 2a 2a 20 61 6c 72 65 61 64 79 2e 20 52  ne.** already. R
1ac0: 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69  eturn non-zero i
1ad0: 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69  f a malloc() fai
1ae0: 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ls..*/.#define S
1af0: 74 72 69 6e 67 69 66 79 28 50 2c 20 65 6e 63 29  tringify(P, enc)
1b00: 20 5c 0a 20 20 20 69 66 28 28 28 50 29 2d 3e 66   \.   if(((P)->f
1b10: 6c 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c 4d 45  lags&(MEM_Str|ME
1b20: 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 26 26 20 73  M_Blob))==0 && s
1b30: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72  qlite3VdbeMemStr
1b40: 69 6e 67 69 66 79 28 50 2c 65 6e 63 2c 30 29 29  ingify(P,enc,0))
1b50: 20 5c 0a 20 20 20 20 20 7b 20 67 6f 74 6f 20 6e   \.     { goto n
1b60: 6f 5f 6d 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a 2a 20  o_mem; }../*.** 
1b70: 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72  An ephemeral str
1b80: 69 6e 67 20 76 61 6c 75 65 20 28 73 69 67 6e 69  ing value (signi
1b90: 66 69 65 64 20 62 79 20 74 68 65 20 4d 45 4d 5f  fied by the MEM_
1ba0: 45 70 68 65 6d 20 66 6c 61 67 29 20 63 6f 6e 74  Ephem flag) cont
1bb0: 61 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e 74 65  ains.** a pointe
1bc0: 72 20 74 6f 20 61 20 64 79 6e 61 6d 69 63 61 6c  r to a dynamical
1bd0: 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 74 72  ly allocated str
1be0: 69 6e 67 20 77 68 65 72 65 20 73 6f 6d 65 20 6f  ing where some o
1bf0: 74 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a 20 69  ther entity.** i
1c00: 73 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f  s responsible fo
1c10: 72 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74  r deallocating t
1c20: 68 61 74 20 73 74 72 69 6e 67 2e 20 20 42 65 63  hat string.  Bec
1c30: 61 75 73 65 20 74 68 65 20 72 65 67 69 73 74 65  ause the registe
1c40: 72 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20 63 6f  r.** does not co
1c50: 6e 74 72 6f 6c 20 74 68 65 20 73 74 72 69 6e 67  ntrol the string
1c60: 2c 20 69 74 20 6d 69 67 68 74 20 62 65 20 64 65  , it might be de
1c70: 6c 65 74 65 64 20 77 69 74 68 6f 75 74 20 74 68  leted without th
1c80: 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6b 6e  e register.** kn
1c90: 6f 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a 2a 20  owing it..**.** 
1ca0: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 63 6f 6e  This routine con
1cb0: 76 65 72 74 73 20 61 6e 20 65 70 68 65 6d 65 72  verts an ephemer
1cc0: 61 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61  al string into a
1cd0: 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c   dynamically all
1ce0: 6f 63 61 74 65 64 0a 2a 2a 20 73 74 72 69 6e 67  ocated.** string
1cf0: 20 74 68 61 74 20 74 68 65 20 72 65 67 69 73 74   that the regist
1d00: 65 72 20 69 74 73 65 6c 66 20 63 6f 6e 74 72 6f  er itself contro
1d10: 6c 73 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  ls.  In other wo
1d20: 72 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e 76 65  rds, it.** conve
1d30: 72 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68 65 6d  rts an MEM_Ephem
1d40: 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20 73   string into a s
1d50: 74 72 69 6e 67 20 77 69 74 68 20 50 2e 7a 3d 3d  tring with P.z==
1d60: 50 2e 7a 4d 61 6c 6c 6f 63 2e 0a 2a 2f 0a 23 64  P.zMalloc..*/.#d
1d70: 65 66 69 6e 65 20 44 65 65 70 68 65 6d 65 72 61  efine Deephemera
1d80: 6c 69 7a 65 28 50 29 20 5c 0a 20 20 20 69 66 28  lize(P) \.   if(
1d90: 20 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d   ((P)->flags&MEM
1da0: 5f 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20 20 20  _Ephem)!=0 \.   
1db0: 20 20 20 20 26 26 20 73 71 6c 69 74 65 33 56 64      && sqlite3Vd
1dc0: 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62  beMemMakeWriteab
1dd0: 6c 65 28 50 29 20 29 7b 20 67 6f 74 6f 20 6e 6f  le(P) ){ goto no
1de0: 5f 6d 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74 75 72  _mem;}../* Retur
1df0: 6e 20 74 72 75 65 20 69 66 20 74 68 65 20 63 75  n true if the cu
1e00: 72 73 6f 72 20 77 61 73 20 6f 70 65 6e 65 64 20  rsor was opened 
1e10: 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 4f 70 65  using the OP_Ope
1e20: 6e 53 6f 72 74 65 72 20 6f 70 63 6f 64 65 2e 20  nSorter opcode. 
1e30: 2a 2f 0a 23 64 65 66 69 6e 65 20 69 73 53 6f 72  */.#define isSor
1e40: 74 65 72 28 78 29 20 28 28 78 29 2d 3e 65 43 75  ter(x) ((x)->eCu
1e50: 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 53  rType==CURTYPE_S
1e60: 4f 52 54 45 52 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c  ORTER)../*.** Al
1e70: 6c 6f 63 61 74 65 20 56 64 62 65 43 75 72 73 6f  locate VdbeCurso
1e80: 72 20 6e 75 6d 62 65 72 20 69 43 75 72 2e 20 20  r number iCur.  
1e90: 52 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65 72  Return a pointer
1ea0: 20 74 6f 20 69 74 2e 20 20 52 65 74 75 72 6e 20   to it.  Return 
1eb0: 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77 65 20 72 75  NULL.** if we ru
1ec0: 6e 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 2e  n out of memory.
1ed0: 0a 2a 2f 0a 73 74 61 74 69 63 20 56 64 62 65 43  .*/.static VdbeC
1ee0: 75 72 73 6f 72 20 2a 61 6c 6c 6f 63 61 74 65 43  ursor *allocateC
1ef0: 75 72 73 6f 72 28 0a 20 20 56 64 62 65 20 2a 70  ursor(.  Vdbe *p
1f00: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
1f10: 2a 20 54 68 65 20 76 69 72 74 75 61 6c 20 6d 61  * The virtual ma
1f20: 63 68 69 6e 65 20 2a 2f 0a 20 20 69 6e 74 20 69  chine */.  int i
1f30: 43 75 72 2c 20 20 20 20 20 20 20 20 20 20 20 20  Cur,            
1f40: 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65   /* Index of the
1f50: 20 6e 65 77 20 56 64 62 65 43 75 72 73 6f 72 20   new VdbeCursor 
1f60: 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 2c  */.  int nField,
1f70: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1f80: 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69  mber of fields i
1f90: 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  n the table or i
1fa0: 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 69 44  ndex */.  int iD
1fb0: 62 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b,              
1fc0: 2f 2a 20 44 61 74 61 62 61 73 65 20 74 68 65 20  /* Database the 
1fd0: 63 75 72 73 6f 72 20 62 65 6c 6f 6e 67 73 20 74  cursor belongs t
1fe0: 6f 2c 20 6f 72 20 2d 31 20 2a 2f 0a 20 20 75 38  o, or -1 */.  u8
1ff0: 20 65 43 75 72 54 79 70 65 20 20 20 20 20 20 20   eCurType       
2000: 20 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 74      /* Type of t
2010: 68 65 20 6e 65 77 20 63 75 72 73 6f 72 20 2a 2f  he new cursor */
2020: 0a 29 7b 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68  .){.  /* Find th
2030: 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68  e memory cell th
2040: 61 74 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20  at will be used 
2050: 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62 6c 6f  to store the blo
2060: 62 20 6f 66 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a  b of memory.  **
2070: 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68   required for th
2080: 69 73 20 56 64 62 65 43 75 72 73 6f 72 20 73 74  is VdbeCursor st
2090: 72 75 63 74 75 72 65 2e 20 49 74 20 69 73 20 63  ructure. It is c
20a0: 6f 6e 76 65 6e 69 65 6e 74 20 74 6f 20 75 73 65  onvenient to use
20b0: 20 61 20 0a 20 20 2a 2a 20 76 64 62 65 20 6d 65   a .  ** vdbe me
20c0: 6d 6f 72 79 20 63 65 6c 6c 20 74 6f 20 6d 61 6e  mory cell to man
20d0: 61 67 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 61  age the memory a
20e0: 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 69 72  llocation requir
20f0: 65 64 20 66 6f 72 20 61 0a 20 20 2a 2a 20 56 64  ed for a.  ** Vd
2100: 62 65 43 75 72 73 6f 72 20 73 74 72 75 63 74 75  beCursor structu
2110: 72 65 20 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f  re for the follo
2120: 77 69 6e 67 20 72 65 61 73 6f 6e 73 3a 0a 20 20  wing reasons:.  
2130: 2a 2a 0a 20 20 2a 2a 20 20 20 2a 20 53 6f 6d 65  **.  **   * Some
2140: 74 69 6d 65 73 20 63 75 72 73 6f 72 20 6e 75 6d  times cursor num
2150: 62 65 72 73 20 61 72 65 20 75 73 65 64 20 66 6f  bers are used fo
2160: 72 20 61 20 63 6f 75 70 6c 65 20 6f 66 20 64 69  r a couple of di
2170: 66 66 65 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20  fferent.  **    
2180: 20 70 75 72 70 6f 73 65 73 20 69 6e 20 61 20 76   purposes in a v
2190: 64 62 65 20 70 72 6f 67 72 61 6d 2e 20 54 68 65  dbe program. The
21a0: 20 64 69 66 66 65 72 65 6e 74 20 75 73 65 73 20   different uses 
21b0: 6d 69 67 68 74 20 72 65 71 75 69 72 65 0a 20 20  might require.  
21c0: 2a 2a 20 20 20 20 20 64 69 66 66 65 72 65 6e 74  **     different
21d0: 20 73 69 7a 65 64 20 61 6c 6c 6f 63 61 74 69 6f   sized allocatio
21e0: 6e 73 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73  ns. Memory cells
21f0: 20 70 72 6f 76 69 64 65 20 67 72 6f 77 61 62 6c   provide growabl
2200: 65 0a 20 20 2a 2a 20 20 20 20 20 61 6c 6c 6f 63  e.  **     alloc
2210: 61 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a  ations..  **.  *
2220: 2a 20 20 20 2a 20 57 68 65 6e 20 75 73 69 6e 67  *   * When using
2230: 20 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d   ENABLE_MEMORY_M
2240: 41 4e 41 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72  ANAGEMENT, memor
2250: 79 20 63 65 6c 6c 20 62 75 66 66 65 72 73 20 63  y cell buffers c
2260: 61 6e 0a 20 20 2a 2a 20 20 20 20 20 62 65 20 66  an.  **     be f
2270: 72 65 65 64 20 6c 61 7a 69 6c 79 20 76 69 61 20  reed lazily via 
2280: 74 68 65 20 73 71 6c 69 74 65 33 5f 72 65 6c 65  the sqlite3_rele
2290: 61 73 65 5f 6d 65 6d 6f 72 79 28 29 20 41 50 49  ase_memory() API
22a0: 2e 20 54 68 69 73 0a 20 20 2a 2a 20 20 20 20 20  . This.  **     
22b0: 6d 69 6e 69 6d 69 7a 65 73 20 74 68 65 20 6e 75  minimizes the nu
22c0: 6d 62 65 72 20 6f 66 20 6d 61 6c 6c 6f 63 20 63  mber of malloc c
22d0: 61 6c 6c 73 20 6d 61 64 65 20 62 79 20 74 68 65  alls made by the
22e0: 20 73 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20   system..  **.  
22f0: 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 63 65  ** The memory ce
2300: 6c 6c 20 66 6f 72 20 63 75 72 73 6f 72 20 30 20  ll for cursor 0 
2310: 69 73 20 61 4d 65 6d 5b 30 5d 2e 20 54 68 65 20  is aMem[0]. The 
2320: 72 65 73 74 20 61 72 65 20 61 6c 6c 6f 63 61 74  rest are allocat
2330: 65 64 20 66 72 6f 6d 0a 20 20 2a 2a 20 74 68 65  ed from.  ** the
2340: 20 74 6f 70 20 6f 66 20 74 68 65 20 72 65 67 69   top of the regi
2350: 73 74 65 72 20 73 70 61 63 65 2e 20 20 43 75 72  ster space.  Cur
2360: 73 6f 72 20 31 20 69 73 20 61 74 20 4d 65 6d 5b  sor 1 is at Mem[
2370: 70 2d 3e 6e 4d 65 6d 2d 31 5d 2e 0a 20 20 2a 2a  p->nMem-1]..  **
2380: 20 43 75 72 73 6f 72 20 32 20 69 73 20 61 74 20   Cursor 2 is at 
2390: 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d 32 5d 2e 20  Mem[p->nMem-2]. 
23a0: 41 6e 64 20 73 6f 20 66 6f 72 74 68 2e 0a 20 20  And so forth..  
23b0: 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d  */.  Mem *pMem =
23c0: 20 69 43 75 72 3e 30 20 3f 20 26 70 2d 3e 61 4d   iCur>0 ? &p->aM
23d0: 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72 5d  em[p->nMem-iCur]
23e0: 20 3a 20 70 2d 3e 61 4d 65 6d 3b 0a 0a 20 20 69   : p->aMem;..  i
23f0: 6e 74 20 6e 42 79 74 65 3b 0a 20 20 56 64 62 65  nt nByte;.  Vdbe
2400: 43 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b  Cursor *pCx = 0;
2410: 0a 20 20 6e 42 79 74 65 20 3d 20 0a 20 20 20 20  .  nByte = .    
2420: 20 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28    ROUND8(sizeof(
2430: 56 64 62 65 43 75 72 73 6f 72 29 29 20 2b 20 32  VdbeCursor)) + 2
2440: 2a 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69  *sizeof(u32)*nFi
2450: 65 6c 64 20 2b 20 0a 20 20 20 20 20 20 28 65 43  eld + .      (eC
2460: 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
2470: 42 54 52 45 45 3f 73 71 6c 69 74 65 33 42 74 72  BTREE?sqlite3Btr
2480: 65 65 43 75 72 73 6f 72 53 69 7a 65 28 29 3a 30  eeCursorSize():0
2490: 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 43  );..  assert( iC
24a0: 75 72 3e 3d 30 20 26 26 20 69 43 75 72 3c 70 2d  ur>=0 && iCur<p-
24b0: 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66  >nCursor );.  if
24c0: 28 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d  ( p->apCsr[iCur]
24d0: 20 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49   ){ /*OPTIMIZATI
24e0: 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20  ON-IF-FALSE*/.  
24f0: 20 20 2f 2a 20 42 65 66 6f 72 65 20 63 61 6c 6c    /* Before call
2500: 69 6e 67 20 73 71 6c 69 74 65 33 56 64 62 65 46  ing sqlite3VdbeF
2510: 72 65 65 43 75 72 73 6f 72 28 29 2c 20 65 6e 73  reeCursor(), ens
2520: 75 72 65 20 74 68 65 20 69 73 45 70 68 65 6d 65  ure the isEpheme
2530: 72 61 6c 20 66 6c 61 67 0a 20 20 20 20 2a 2a 20  ral flag.    ** 
2540: 69 73 20 63 6c 65 61 72 2e 20 4f 74 68 65 72 77  is clear. Otherw
2550: 69 73 65 2c 20 69 66 20 74 68 69 73 20 69 73 20  ise, if this is 
2560: 61 6e 20 65 70 68 65 6d 65 72 61 6c 20 63 75 72  an ephemeral cur
2570: 73 6f 72 20 63 72 65 61 74 65 64 20 62 79 20 0a  sor created by .
2580: 20 20 20 20 2a 2a 20 4f 50 5f 4f 70 65 6e 44 75      ** OP_OpenDu
2590: 70 2c 20 74 68 65 20 63 75 72 73 6f 72 20 77 69  p, the cursor wi
25a0: 6c 6c 20 6e 6f 74 20 62 65 20 63 6c 6f 73 65 64  ll not be closed
25b0: 20 61 6e 64 20 77 69 6c 6c 20 73 74 69 6c 6c 20   and will still 
25c0: 62 65 20 70 61 72 74 0a 20 20 20 20 2a 2a 20 6f  be part.    ** o
25d0: 66 20 61 20 42 74 53 68 61 72 65 64 2e 70 43 75  f a BtShared.pCu
25e0: 72 73 6f 72 20 6c 69 73 74 2e 20 20 2a 2f 0a 20  rsor list.  */. 
25f0: 20 20 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72     p->apCsr[iCur
2600: 5d 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c 20 3d  ]->isEphemeral =
2610: 20 30 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   0;.    sqlite3V
2620: 64 62 65 46 72 65 65 43 75 72 73 6f 72 28 70 2c  dbeFreeCursor(p,
2630: 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 29   p->apCsr[iCur])
2640: 3b 0a 20 20 20 20 70 2d 3e 61 70 43 73 72 5b 69  ;.    p->apCsr[i
2650: 43 75 72 5d 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  Cur] = 0;.  }.  
2660: 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d 73  if( SQLITE_OK==s
2670: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c 65  qlite3VdbeMemCle
2680: 61 72 41 6e 64 52 65 73 69 7a 65 28 70 4d 65 6d  arAndResize(pMem
2690: 2c 20 6e 42 79 74 65 29 20 29 7b 0a 20 20 20 20  , nByte) ){.    
26a0: 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d  p->apCsr[iCur] =
26b0: 20 70 43 78 20 3d 20 28 56 64 62 65 43 75 72 73   pCx = (VdbeCurs
26c0: 6f 72 2a 29 70 4d 65 6d 2d 3e 7a 3b 0a 20 20 20  or*)pMem->z;.   
26d0: 20 6d 65 6d 73 65 74 28 70 43 78 2c 20 30 2c 20   memset(pCx, 0, 
26e0: 6f 66 66 73 65 74 6f 66 28 56 64 62 65 43 75 72  offsetof(VdbeCur
26f0: 73 6f 72 2c 70 41 6c 74 43 75 72 73 6f 72 29 29  sor,pAltCursor))
2700: 3b 0a 20 20 20 20 70 43 78 2d 3e 65 43 75 72 54  ;.    pCx->eCurT
2710: 79 70 65 20 3d 20 65 43 75 72 54 79 70 65 3b 0a  ype = eCurType;.
2720: 20 20 20 20 70 43 78 2d 3e 69 44 62 20 3d 20 69      pCx->iDb = i
2730: 44 62 3b 0a 20 20 20 20 70 43 78 2d 3e 6e 46 69  Db;.    pCx->nFi
2740: 65 6c 64 20 3d 20 6e 46 69 65 6c 64 3b 0a 20 20  eld = nField;.  
2750: 20 20 70 43 78 2d 3e 61 4f 66 66 73 65 74 20 3d    pCx->aOffset =
2760: 20 26 70 43 78 2d 3e 61 54 79 70 65 5b 6e 46 69   &pCx->aType[nFi
2770: 65 6c 64 5d 3b 0a 20 20 20 20 69 66 28 20 65 43  eld];.    if( eC
2780: 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
2790: 42 54 52 45 45 20 29 7b 0a 20 20 20 20 20 20 70  BTREE ){.      p
27a0: 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f 72 20 3d  Cx->uc.pCursor =
27b0: 20 28 42 74 43 75 72 73 6f 72 2a 29 0a 20 20 20   (BtCursor*).   
27c0: 20 20 20 20 20 20 20 26 70 4d 65 6d 2d 3e 7a 5b         &pMem->z[
27d0: 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 56 64  ROUND8(sizeof(Vd
27e0: 62 65 43 75 72 73 6f 72 29 29 2b 32 2a 73 69 7a  beCursor))+2*siz
27f0: 65 6f 66 28 75 33 32 29 2a 6e 46 69 65 6c 64 5d  eof(u32)*nField]
2800: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 42  ;.      sqlite3B
2810: 74 72 65 65 43 75 72 73 6f 72 5a 65 72 6f 28 70  treeCursorZero(p
2820: 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b  Cx->uc.pCursor);
2830: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74  .    }.  }.  ret
2840: 75 72 6e 20 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a 2a  urn pCx;.}../*.*
2850: 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74  * Try to convert
2860: 20 61 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20   a value into a 
2870: 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73 65 6e  numeric represen
2880: 74 61 74 69 6f 6e 20 69 66 20 77 65 20 63 61 6e  tation if we can
2890: 0a 2a 2a 20 64 6f 20 73 6f 20 77 69 74 68 6f 75  .** do so withou
28a0: 74 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d  t loss of inform
28b0: 61 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72  ation.  In other
28c0: 20 77 6f 72 64 73 2c 20 69 66 20 74 68 65 20 73   words, if the s
28d0: 74 72 69 6e 67 0a 2a 2a 20 6c 6f 6f 6b 73 20 6c  tring.** looks l
28e0: 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 63 6f  ike a number, co
28f0: 6e 76 65 72 74 20 69 74 20 69 6e 74 6f 20 61 20  nvert it into a 
2900: 6e 75 6d 62 65 72 2e 20 20 49 66 20 69 74 20 64  number.  If it d
2910: 6f 65 73 20 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b 20  oes not.** look 
2920: 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 6c  like a number, l
2930: 65 61 76 65 20 69 74 20 61 6c 6f 6e 65 2e 0a 2a  eave it alone..*
2940: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 62 54 72 79  *.** If the bTry
2950: 46 6f 72 49 6e 74 20 66 6c 61 67 20 69 73 20 74  ForInt flag is t
2960: 72 75 65 2c 20 74 68 65 6e 20 65 78 74 72 61 20  rue, then extra 
2970: 65 66 66 6f 72 74 20 69 73 20 6d 61 64 65 20 74  effort is made t
2980: 6f 20 67 69 76 65 0a 2a 2a 20 61 6e 20 69 6e 74  o give.** an int
2990: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
29a0: 69 6f 6e 2e 20 20 53 74 72 69 6e 67 73 20 74 68  ion.  Strings th
29b0: 61 74 20 6c 6f 6f 6b 20 6c 69 6b 65 20 66 6c 6f  at look like flo
29c0: 61 74 69 6e 67 20 70 6f 69 6e 74 0a 2a 2a 20 76  ating point.** v
29d0: 61 6c 75 65 73 20 62 75 74 20 77 68 69 63 68 20  alues but which 
29e0: 68 61 76 65 20 6e 6f 20 66 72 61 63 74 69 6f 6e  have no fraction
29f0: 61 6c 20 63 6f 6d 70 6f 6e 65 6e 74 20 28 65 78  al component (ex
2a00: 61 6d 70 6c 65 3a 20 27 34 38 2e 30 30 27 29 0a  ample: '48.00').
2a10: 2a 2a 20 77 69 6c 6c 20 68 61 76 65 20 61 20 4d  ** will have a M
2a20: 45 4d 5f 49 6e 74 20 72 65 70 72 65 73 65 6e 74  EM_Int represent
2a30: 61 74 69 6f 6e 20 77 68 65 6e 20 62 54 72 79 46  ation when bTryF
2a40: 6f 72 49 6e 74 20 69 73 20 74 72 75 65 2e 0a 2a  orInt is true..*
2a50: 2a 0a 2a 2a 20 49 66 20 62 54 72 79 46 6f 72 49  *.** If bTryForI
2a60: 6e 74 20 69 73 20 66 61 6c 73 65 2c 20 74 68 65  nt is false, the
2a70: 6e 20 69 66 20 74 68 65 20 69 6e 70 75 74 20 73  n if the input s
2a80: 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 73 20 61  tring contains a
2a90: 20 64 65 63 69 6d 61 6c 0a 2a 2a 20 70 6f 69 6e   decimal.** poin
2aa0: 74 20 6f 72 20 65 78 70 6f 6e 65 6e 74 69 61 6c  t or exponential
2ab0: 20 6e 6f 74 61 74 69 6f 6e 2c 20 74 68 65 20 72   notation, the r
2ac0: 65 73 75 6c 74 20 69 73 20 6f 6e 6c 79 20 4d 45  esult is only ME
2ad0: 4d 5f 52 65 61 6c 2c 20 65 76 65 6e 0a 2a 2a 20  M_Real, even.** 
2ae0: 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 65  if there is an e
2af0: 78 61 63 74 20 69 6e 74 65 67 65 72 20 72 65 70  xact integer rep
2b00: 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
2b10: 68 65 20 71 75 61 6e 74 69 74 79 2e 0a 2a 2f 0a  he quantity..*/.
2b20: 73 74 61 74 69 63 20 76 6f 69 64 20 61 70 70 6c  static void appl
2b30: 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  yNumericAffinity
2b40: 28 4d 65 6d 20 2a 70 52 65 63 2c 20 69 6e 74 20  (Mem *pRec, int 
2b50: 62 54 72 79 46 6f 72 49 6e 74 29 7b 0a 20 20 64  bTryForInt){.  d
2b60: 6f 75 62 6c 65 20 72 56 61 6c 75 65 3b 0a 20 20  ouble rValue;.  
2b70: 69 36 34 20 69 56 61 6c 75 65 3b 0a 20 20 75 38  i64 iValue;.  u8
2b80: 20 65 6e 63 20 3d 20 70 52 65 63 2d 3e 65 6e 63   enc = pRec->enc
2b90: 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 52 65  ;.  assert( (pRe
2ba0: 63 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  c->flags & (MEM_
2bb0: 53 74 72 7c 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f  Str|MEM_Int|MEM_
2bc0: 52 65 61 6c 29 29 3d 3d 4d 45 4d 5f 53 74 72 20  Real))==MEM_Str 
2bd0: 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
2be0: 41 74 6f 46 28 70 52 65 63 2d 3e 7a 2c 20 26 72  AtoF(pRec->z, &r
2bf0: 56 61 6c 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20  Value, pRec->n, 
2c00: 65 6e 63 29 3d 3d 30 20 29 20 72 65 74 75 72 6e  enc)==0 ) return
2c10: 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74  ;.  if( 0==sqlit
2c20: 65 33 41 74 6f 69 36 34 28 70 52 65 63 2d 3e 7a  e3Atoi64(pRec->z
2c30: 2c 20 26 69 56 61 6c 75 65 2c 20 70 52 65 63 2d  , &iValue, pRec-
2c40: 3e 6e 2c 20 65 6e 63 29 20 29 7b 0a 20 20 20 20  >n, enc) ){.    
2c50: 70 52 65 63 2d 3e 75 2e 69 20 3d 20 69 56 61 6c  pRec->u.i = iVal
2c60: 75 65 3b 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c  ue;.    pRec->fl
2c70: 61 67 73 20 7c 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  ags |= MEM_Int;.
2c80: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 52 65    }else{.    pRe
2c90: 63 2d 3e 75 2e 72 20 3d 20 72 56 61 6c 75 65 3b  c->u.r = rValue;
2ca0: 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73  .    pRec->flags
2cb0: 20 7c 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20   |= MEM_Real;.  
2cc0: 20 20 69 66 28 20 62 54 72 79 46 6f 72 49 6e 74    if( bTryForInt
2cd0: 20 29 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   ) sqlite3VdbeIn
2ce0: 74 65 67 65 72 41 66 66 69 6e 69 74 79 28 70 52  tegerAffinity(pR
2cf0: 65 63 29 3b 0a 20 20 7d 0a 20 20 2f 2a 20 54 45  ec);.  }.  /* TE
2d00: 58 54 2d 3e 4e 55 4d 45 52 49 43 20 69 73 20 6d  XT->NUMERIC is m
2d10: 61 6e 79 2d 3e 6f 6e 65 2e 20 20 48 65 6e 63 65  any->one.  Hence
2d20: 2c 20 69 74 20 69 73 20 69 6d 70 6f 72 74 61 6e  , it is importan
2d30: 74 20 74 6f 20 69 6e 76 61 6c 69 64 61 74 65 20  t to invalidate 
2d40: 74 68 65 0a 20 20 2a 2a 20 73 74 72 69 6e 67 20  the.  ** string 
2d50: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 61  representation a
2d60: 66 74 65 72 20 63 6f 6d 70 75 74 69 6e 67 20 61  fter computing a
2d70: 20 6e 75 6d 65 72 69 63 20 65 71 75 69 76 61 6c   numeric equival
2d80: 65 6e 74 2c 20 62 65 63 61 75 73 65 20 74 68 65  ent, because the
2d90: 0a 20 20 2a 2a 20 73 74 72 69 6e 67 20 72 65 70  .  ** string rep
2da0: 72 65 73 65 6e 74 61 74 69 6f 6e 20 6d 69 67 68  resentation migh
2db0: 74 20 6e 6f 74 20 62 65 20 74 68 65 20 63 61 6e  t not be the can
2dc0: 6f 6e 69 63 61 6c 20 72 65 70 72 65 73 65 6e 74  onical represent
2dd0: 61 74 69 6f 6e 20 66 6f 72 20 74 68 65 0a 20 20  ation for the.  
2de0: 2a 2a 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65  ** numeric value
2df0: 2e 20 20 54 69 63 6b 65 74 20 5b 33 34 33 36 33  .  Ticket [34363
2e00: 34 39 34 32 64 64 35 34 61 62 35 37 62 37 30 32  4942dd54ab57b702
2e10: 34 5d 20 32 30 31 38 2d 30 31 2d 33 31 2e 20 2a  4] 2018-01-31. *
2e20: 2f 0a 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20  /.  pRec->flags 
2e30: 26 3d 20 7e 4d 45 4d 5f 53 74 72 3b 0a 7d 0a 0a  &= ~MEM_Str;.}..
2e40: 2f 2a 0a 2a 2a 20 50 72 6f 63 65 73 73 69 6e 67  /*.** Processing
2e50: 20 69 73 20 64 65 74 65 72 6d 69 6e 65 20 62 79   is determine by
2e60: 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 70 61   the affinity pa
2e70: 72 61 6d 65 74 65 72 3a 0a 2a 2a 0a 2a 2a 20 53  rameter:.**.** S
2e80: 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45  QLITE_AFF_INTEGE
2e90: 52 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46  R:.** SQLITE_AFF
2ea0: 5f 52 45 41 4c 3a 0a 2a 2a 20 53 51 4c 49 54 45  _REAL:.** SQLITE
2eb0: 5f 41 46 46 5f 4e 55 4d 45 52 49 43 3a 0a 2a 2a  _AFF_NUMERIC:.**
2ec0: 20 20 20 20 54 72 79 20 74 6f 20 63 6f 6e 76 65      Try to conve
2ed0: 72 74 20 70 52 65 63 20 74 6f 20 61 6e 20 69 6e  rt pRec to an in
2ee0: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
2ef0: 74 69 6f 6e 20 6f 72 20 61 20 0a 2a 2a 20 20 20  tion or a .**   
2f00: 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20   floating-point 
2f10: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69  representation i
2f20: 66 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70  f an integer rep
2f30: 72 65 73 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20 20  resentation.**  
2f40: 20 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c    is not possibl
2f50: 65 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68  e.  Note that th
2f60: 65 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73  e integer repres
2f70: 65 6e 74 61 74 69 6f 6e 20 69 73 0a 2a 2a 20 20  entation is.**  
2f80: 20 20 61 6c 77 61 79 73 20 70 72 65 66 65 72 72    always preferr
2f90: 65 64 2c 20 65 76 65 6e 20 69 66 20 74 68 65 20  ed, even if the 
2fa0: 61 66 66 69 6e 69 74 79 20 69 73 20 52 45 41 4c  affinity is REAL
2fb0: 2c 20 62 65 63 61 75 73 65 0a 2a 2a 20 20 20 20  , because.**    
2fc0: 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65  an integer repre
2fd0: 73 65 6e 74 61 74 69 6f 6e 20 69 73 20 6d 6f 72  sentation is mor
2fe0: 65 20 73 70 61 63 65 20 65 66 66 69 63 69 65 6e  e space efficien
2ff0: 74 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2a 0a 2a 2a  t on disk..**.**
3000: 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54   SQLITE_AFF_TEXT
3010: 3a 0a 2a 2a 20 20 20 20 43 6f 6e 76 65 72 74 20  :.**    Convert 
3020: 70 52 65 63 20 74 6f 20 61 20 74 65 78 74 20 72  pRec to a text r
3030: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 2a  epresentation..*
3040: 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f  *.** SQLITE_AFF_
3050: 42 4c 4f 42 3a 0a 2a 2a 20 20 20 20 4e 6f 2d 6f  BLOB:.**    No-o
3060: 70 2e 20 20 70 52 65 63 20 69 73 20 75 6e 63 68  p.  pRec is unch
3070: 61 6e 67 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63  anged..*/.static
3080: 20 76 6f 69 64 20 61 70 70 6c 79 41 66 66 69 6e   void applyAffin
3090: 69 74 79 28 0a 20 20 4d 65 6d 20 2a 70 52 65 63  ity(.  Mem *pRec
30a0: 2c 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ,          /* Th
30b0: 65 20 76 61 6c 75 65 20 74 6f 20 61 70 70 6c 79  e value to apply
30c0: 20 61 66 66 69 6e 69 74 79 20 74 6f 20 2a 2f 0a   affinity to */.
30d0: 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 2c    char affinity,
30e0: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66        /* The aff
30f0: 69 6e 69 74 79 20 74 6f 20 62 65 20 61 70 70 6c  inity to be appl
3100: 69 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 20  ied */.  u8 enc 
3110: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
3120: 55 73 65 20 74 68 69 73 20 74 65 78 74 20 65 6e  Use this text en
3130: 63 6f 64 69 6e 67 20 2a 2f 0a 29 7b 0a 20 20 69  coding */.){.  i
3140: 66 28 20 61 66 66 69 6e 69 74 79 3e 3d 53 51 4c  f( affinity>=SQL
3150: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20  ITE_AFF_NUMERIC 
3160: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 61  ){.    assert( a
3170: 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f  ffinity==SQLITE_
3180: 41 46 46 5f 49 4e 54 45 47 45 52 20 7c 7c 20 61  AFF_INTEGER || a
3190: 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f  ffinity==SQLITE_
31a0: 41 46 46 5f 52 45 41 4c 0a 20 20 20 20 20 20 20  AFF_REAL.       
31b0: 20 20 20 20 20 20 7c 7c 20 61 66 66 69 6e 69 74        || affinit
31c0: 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  y==SQLITE_AFF_NU
31d0: 4d 45 52 49 43 20 29 3b 0a 20 20 20 20 69 66 28  MERIC );.    if(
31e0: 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20   (pRec->flags & 
31f0: 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 20 2f  MEM_Int)==0 ){ /
3200: 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49 46  *OPTIMIZATION-IF
3210: 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20 20 20 69  -FALSE*/.      i
3220: 66 28 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 20  f( (pRec->flags 
3230: 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29  & MEM_Real)==0 )
3240: 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 52  {.        if( pR
3250: 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ec->flags & MEM_
3260: 53 74 72 20 29 20 61 70 70 6c 79 4e 75 6d 65 72  Str ) applyNumer
3270: 69 63 41 66 66 69 6e 69 74 79 28 70 52 65 63 2c  icAffinity(pRec,
3280: 31 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  1);.      }else{
3290: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
32a0: 56 64 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e  VdbeIntegerAffin
32b0: 69 74 79 28 70 52 65 63 29 3b 0a 20 20 20 20 20  ity(pRec);.     
32c0: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65   }.    }.  }else
32d0: 20 69 66 28 20 61 66 66 69 6e 69 74 79 3d 3d 53   if( affinity==S
32e0: 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20 29  QLITE_AFF_TEXT )
32f0: 7b 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 74  {.    /* Only at
3300: 74 65 6d 70 74 20 74 68 65 20 63 6f 6e 76 65 72  tempt the conver
3310: 73 69 6f 6e 20 74 6f 20 54 45 58 54 20 69 66 20  sion to TEXT if 
3320: 74 68 65 72 65 20 69 73 20 61 6e 20 69 6e 74 65  there is an inte
3330: 67 65 72 20 6f 72 20 72 65 61 6c 0a 20 20 20 20  ger or real.    
3340: 2a 2a 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  ** representatio
3350: 6e 20 28 62 6c 6f 62 20 61 6e 64 20 4e 55 4c 4c  n (blob and NULL
3360: 20 64 6f 20 6e 6f 74 20 67 65 74 20 63 6f 6e 76   do not get conv
3370: 65 72 74 65 64 29 20 62 75 74 20 6e 6f 20 73 74  erted) but no st
3380: 72 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65 70 72  ring.    ** repr
3390: 65 73 65 6e 74 61 74 69 6f 6e 2e 20 20 49 74 20  esentation.  It 
33a0: 77 6f 75 6c 64 20 62 65 20 68 61 72 6d 6c 65 73  would be harmles
33b0: 73 20 74 6f 20 72 65 70 65 61 74 20 74 68 65 20  s to repeat the 
33c0: 63 6f 6e 76 65 72 73 69 6f 6e 20 69 66 20 0a 20  conversion if . 
33d0: 20 20 20 2a 2a 20 74 68 65 72 65 20 69 73 20 61     ** there is a
33e0: 6c 72 65 61 64 79 20 61 20 73 74 72 69 6e 67 20  lready a string 
33f0: 72 65 70 2c 20 62 75 74 20 69 74 20 69 73 20 70  rep, but it is p
3400: 6f 69 6e 74 6c 65 73 73 20 74 6f 20 77 61 73 74  ointless to wast
3410: 65 20 74 68 6f 73 65 0a 20 20 20 20 2a 2a 20 43  e those.    ** C
3420: 50 55 20 63 79 63 6c 65 73 2e 20 2a 2f 0a 20 20  PU cycles. */.  
3430: 20 20 69 66 28 20 30 3d 3d 28 70 52 65 63 2d 3e    if( 0==(pRec->
3440: 66 6c 61 67 73 26 4d 45 4d 5f 53 74 72 29 20 29  flags&MEM_Str) )
3450: 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e  { /*OPTIMIZATION
3460: 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20  -IF-FALSE*/.    
3470: 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61    if( (pRec->fla
3480: 67 73 26 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d  gs&(MEM_Real|MEM
3490: 5f 49 6e 74 29 29 20 29 7b 0a 20 20 20 20 20 20  _Int)) ){.      
34a0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
34b0: 53 74 72 69 6e 67 69 66 79 28 70 52 65 63 2c 20  Stringify(pRec, 
34c0: 65 6e 63 2c 20 31 29 3b 0a 20 20 20 20 20 20 7d  enc, 1);.      }
34d0: 0a 20 20 20 20 7d 0a 20 20 20 20 70 52 65 63 2d  .    }.    pRec-
34e0: 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f  >flags &= ~(MEM_
34f0: 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 3b 0a 20  Real|MEM_Int);. 
3500: 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20   }.}../*.** Try 
3510: 74 6f 20 63 6f 6e 76 65 72 74 20 74 68 65 20 74  to convert the t
3520: 79 70 65 20 6f 66 20 61 20 66 75 6e 63 74 69 6f  ype of a functio
3530: 6e 20 61 72 67 75 6d 65 6e 74 20 6f 72 20 61 20  n argument or a 
3540: 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 0a 2a 2a  result column.**
3550: 20 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63 20   into a numeric 
3560: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20  representation. 
3570: 20 55 73 65 20 65 69 74 68 65 72 20 49 4e 54 45   Use either INTE
3580: 47 45 52 20 6f 72 20 52 45 41 4c 20 77 68 69 63  GER or REAL whic
3590: 68 65 76 65 72 0a 2a 2a 20 69 73 20 61 70 70 72  hever.** is appr
35a0: 6f 70 72 69 61 74 65 2e 20 20 42 75 74 20 6f 6e  opriate.  But on
35b0: 6c 79 20 64 6f 20 74 68 65 20 63 6f 6e 76 65 72  ly do the conver
35c0: 73 69 6f 6e 20 69 66 20 69 74 20 69 73 20 70 6f  sion if it is po
35d0: 73 73 69 62 6c 65 20 77 69 74 68 6f 75 74 0a 2a  ssible without.*
35e0: 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d  * loss of inform
35f0: 61 74 69 6f 6e 20 61 6e 64 20 72 65 74 75 72 6e  ation and return
3600: 20 74 68 65 20 72 65 76 69 73 65 64 20 74 79 70   the revised typ
3610: 65 20 6f 66 20 74 68 65 20 61 72 67 75 6d 65 6e  e of the argumen
3620: 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  t..*/.int sqlite
3630: 33 5f 76 61 6c 75 65 5f 6e 75 6d 65 72 69 63 5f  3_value_numeric_
3640: 74 79 70 65 28 73 71 6c 69 74 65 33 5f 76 61 6c  type(sqlite3_val
3650: 75 65 20 2a 70 56 61 6c 29 7b 0a 20 20 69 6e 74  ue *pVal){.  int
3660: 20 65 54 79 70 65 20 3d 20 73 71 6c 69 74 65 33   eType = sqlite3
3670: 5f 76 61 6c 75 65 5f 74 79 70 65 28 70 56 61 6c  _value_type(pVal
3680: 29 3b 0a 20 20 69 66 28 20 65 54 79 70 65 3d 3d  );.  if( eType==
3690: 53 51 4c 49 54 45 5f 54 45 58 54 20 29 7b 0a 20  SQLITE_TEXT ){. 
36a0: 20 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20 28     Mem *pMem = (
36b0: 4d 65 6d 2a 29 70 56 61 6c 3b 0a 20 20 20 20 61  Mem*)pVal;.    a
36c0: 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
36d0: 69 74 79 28 70 4d 65 6d 2c 20 30 29 3b 0a 20 20  ity(pMem, 0);.  
36e0: 20 20 65 54 79 70 65 20 3d 20 73 71 6c 69 74 65    eType = sqlite
36f0: 33 5f 76 61 6c 75 65 5f 74 79 70 65 28 70 56 61  3_value_type(pVa
3700: 6c 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  l);.  }.  return
3710: 20 65 54 79 70 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a   eType;.}../*.**
3720: 20 45 78 70 6f 72 74 65 64 20 76 65 72 73 69 6f   Exported versio
3730: 6e 20 6f 66 20 61 70 70 6c 79 41 66 66 69 6e 69  n of applyAffini
3740: 74 79 28 29 2e 20 54 68 69 73 20 6f 6e 65 20 77  ty(). This one w
3750: 6f 72 6b 73 20 6f 6e 20 73 71 6c 69 74 65 33 5f  orks on sqlite3_
3760: 76 61 6c 75 65 2a 2c 20 0a 2a 2a 20 6e 6f 74 20  value*, .** not 
3770: 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 4d 65 6d  the internal Mem
3780: 2a 20 74 79 70 65 2e 0a 2a 2f 0a 76 6f 69 64 20  * type..*/.void 
3790: 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70 6c  sqlite3ValueAppl
37a0: 79 41 66 66 69 6e 69 74 79 28 0a 20 20 73 71 6c  yAffinity(.  sql
37b0: 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c  ite3_value *pVal
37c0: 2c 20 0a 20 20 75 38 20 61 66 66 69 6e 69 74 79  , .  u8 affinity
37d0: 2c 20 0a 20 20 75 38 20 65 6e 63 0a 29 7b 0a 20  , .  u8 enc.){. 
37e0: 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 28   applyAffinity((
37f0: 4d 65 6d 20 2a 29 70 56 61 6c 2c 20 61 66 66 69  Mem *)pVal, affi
3800: 6e 69 74 79 2c 20 65 6e 63 29 3b 0a 7d 0a 0a 2f  nity, enc);.}../
3810: 2a 0a 2a 2a 20 70 4d 65 6d 20 63 75 72 72 65 6e  *.** pMem curren
3820: 74 6c 79 20 6f 6e 6c 79 20 68 6f 6c 64 73 20 61  tly only holds a
3830: 20 73 74 72 69 6e 67 20 74 79 70 65 20 28 6f 72   string type (or
3840: 20 6d 61 79 62 65 20 61 20 42 4c 4f 42 20 74 68   maybe a BLOB th
3850: 61 74 20 77 65 20 63 61 6e 0a 2a 2a 20 69 6e 74  at we can.** int
3860: 65 72 70 72 65 74 20 61 73 20 61 20 73 74 72 69  erpret as a stri
3870: 6e 67 20 69 66 20 77 65 20 77 61 6e 74 20 74 6f  ng if we want to
3880: 29 2e 20 20 43 6f 6d 70 75 74 65 20 69 74 73 20  ).  Compute its 
3890: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 0a 2a 2a  corresponding.**
38a0: 20 6e 75 6d 65 72 69 63 20 74 79 70 65 2c 20 69   numeric type, i
38b0: 66 20 68 61 73 20 6f 6e 65 2e 20 20 53 65 74 20  f has one.  Set 
38c0: 74 68 65 20 70 4d 65 6d 2d 3e 75 2e 72 20 61 6e  the pMem->u.r an
38d0: 64 20 70 4d 65 6d 2d 3e 75 2e 69 20 66 69 65 6c  d pMem->u.i fiel
38e0: 64 73 0a 2a 2a 20 61 63 63 6f 72 64 69 6e 67 6c  ds.** accordingl
38f0: 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 75 31 36  y..*/.static u16
3900: 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45   SQLITE_NOINLINE
3910: 20 63 6f 6d 70 75 74 65 4e 75 6d 65 72 69 63 54   computeNumericT
3920: 79 70 65 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b 0a  ype(Mem *pMem){.
3930: 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d    assert( (pMem-
3940: 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e  >flags & (MEM_In
3950: 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 3d 3d 30 20  t|MEM_Real))==0 
3960: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d  );.  assert( (pM
3970: 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  em->flags & (MEM
3980: 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 21  _Str|MEM_Blob))!
3990: 3d 30 20 29 3b 0a 20 20 45 78 70 61 6e 64 42 6c  =0 );.  ExpandBl
39a0: 6f 62 28 70 4d 65 6d 29 3b 0a 20 20 69 66 28 20  ob(pMem);.  if( 
39b0: 73 71 6c 69 74 65 33 41 74 6f 46 28 70 4d 65 6d  sqlite3AtoF(pMem
39c0: 2d 3e 7a 2c 20 26 70 4d 65 6d 2d 3e 75 2e 72 2c  ->z, &pMem->u.r,
39d0: 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d 3e   pMem->n, pMem->
39e0: 65 6e 63 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72  enc)==0 ){.    r
39f0: 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 69  eturn 0;.  }.  i
3a00: 66 28 20 73 71 6c 69 74 65 33 41 74 6f 69 36 34  f( sqlite3Atoi64
3a10: 28 70 4d 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d  (pMem->z, &pMem-
3a20: 3e 75 2e 69 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70  >u.i, pMem->n, p
3a30: 4d 65 6d 2d 3e 65 6e 63 29 3d 3d 30 20 29 7b 0a  Mem->enc)==0 ){.
3a40: 20 20 20 20 72 65 74 75 72 6e 20 4d 45 4d 5f 49      return MEM_I
3a50: 6e 74 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  nt;.  }.  return
3a60: 20 4d 45 4d 5f 52 65 61 6c 3b 0a 7d 0a 0a 2f 2a   MEM_Real;.}../*
3a70: 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e  .** Return the n
3a80: 75 6d 65 72 69 63 20 74 79 70 65 20 66 6f 72 20  umeric type for 
3a90: 70 4d 65 6d 2c 20 65 69 74 68 65 72 20 4d 45 4d  pMem, either MEM
3aa0: 5f 49 6e 74 20 6f 72 20 4d 45 4d 5f 52 65 61 6c  _Int or MEM_Real
3ab0: 20 6f 72 20 62 6f 74 68 20 6f 72 0a 2a 2a 20 6e   or both or.** n
3ac0: 6f 6e 65 2e 20 20 0a 2a 2a 0a 2a 2a 20 55 6e 6c  one.  .**.** Unl
3ad0: 69 6b 65 20 61 70 70 6c 79 4e 75 6d 65 72 69 63  ike applyNumeric
3ae0: 41 66 66 69 6e 69 74 79 28 29 2c 20 74 68 69 73  Affinity(), this
3af0: 20 72 6f 75 74 69 6e 65 20 64 6f 65 73 20 6e 6f   routine does no
3b00: 74 20 6d 6f 64 69 66 79 20 70 4d 65 6d 2d 3e 66  t modify pMem->f
3b10: 6c 61 67 73 2e 0a 2a 2a 20 42 75 74 20 69 74 20  lags..** But it 
3b20: 64 6f 65 73 20 73 65 74 20 70 4d 65 6d 2d 3e 75  does set pMem->u
3b30: 2e 72 20 61 6e 64 20 70 4d 65 6d 2d 3e 75 2e 69  .r and pMem->u.i
3b40: 20 61 70 70 72 6f 70 72 69 61 74 65 6c 79 2e 0a   appropriately..
3b50: 2a 2f 0a 73 74 61 74 69 63 20 75 31 36 20 6e 75  */.static u16 nu
3b60: 6d 65 72 69 63 54 79 70 65 28 4d 65 6d 20 2a 70  mericType(Mem *p
3b70: 4d 65 6d 29 7b 0a 20 20 69 66 28 20 70 4d 65 6d  Mem){.  if( pMem
3b80: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49  ->flags & (MEM_I
3b90: 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 20 29 7b 0a  nt|MEM_Real) ){.
3ba0: 20 20 20 20 72 65 74 75 72 6e 20 70 4d 65 6d 2d      return pMem-
3bb0: 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e  >flags & (MEM_In
3bc0: 74 7c 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20 20 7d  t|MEM_Real);.  }
3bd0: 0a 20 20 69 66 28 20 70 4d 65 6d 2d 3e 66 6c 61  .  if( pMem->fla
3be0: 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45  gs & (MEM_Str|ME
3bf0: 4d 5f 42 6c 6f 62 29 20 29 7b 0a 20 20 20 20 72  M_Blob) ){.    r
3c00: 65 74 75 72 6e 20 63 6f 6d 70 75 74 65 4e 75 6d  eturn computeNum
3c10: 65 72 69 63 54 79 70 65 28 70 4d 65 6d 29 3b 0a  ericType(pMem);.
3c20: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a    }.  return 0;.
3c30: 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  }..#ifdef SQLITE
3c40: 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 57 72 69  _DEBUG./*.** Wri
3c50: 74 65 20 61 20 6e 69 63 65 20 73 74 72 69 6e 67  te a nice string
3c60: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
3c70: 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20  of the contents 
3c80: 6f 66 20 63 65 6c 6c 20 70 4d 65 6d 0a 2a 2a 20  of cell pMem.** 
3c90: 69 6e 74 6f 20 62 75 66 66 65 72 20 7a 42 75 66  into buffer zBuf
3ca0: 2c 20 6c 65 6e 67 74 68 20 6e 42 75 66 2e 0a 2a  , length nBuf..*
3cb0: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64  /.void sqlite3Vd
3cc0: 62 65 4d 65 6d 50 72 65 74 74 79 50 72 69 6e 74  beMemPrettyPrint
3cd0: 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20 63 68 61 72  (Mem *pMem, char
3ce0: 20 2a 7a 42 75 66 29 7b 0a 20 20 63 68 61 72 20   *zBuf){.  char 
3cf0: 2a 7a 43 73 72 20 3d 20 7a 42 75 66 3b 0a 20 20  *zCsr = zBuf;.  
3d00: 69 6e 74 20 66 20 3d 20 70 4d 65 6d 2d 3e 66 6c  int f = pMem->fl
3d10: 61 67 73 3b 0a 0a 20 20 73 74 61 74 69 63 20 63  ags;..  static c
3d20: 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73 74  onst char *const
3d30: 20 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b 22   encnames[] = {"
3d40: 28 58 29 22 2c 20 22 28 38 29 22 2c 20 22 28 31  (X)", "(8)", "(1
3d50: 36 4c 45 29 22 2c 20 22 28 31 36 42 45 29 22 7d  6LE)", "(16BE)"}
3d60: 3b 0a 0a 20 20 69 66 28 20 66 26 4d 45 4d 5f 42  ;..  if( f&MEM_B
3d70: 6c 6f 62 20 29 7b 0a 20 20 20 20 69 6e 74 20 69  lob ){.    int i
3d80: 3b 0a 20 20 20 20 63 68 61 72 20 63 3b 0a 20 20  ;.    char c;.  
3d90: 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44 79    if( f & MEM_Dy
3da0: 6e 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20 27  n ){.      c = '
3db0: 7a 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  z';.      assert
3dc0: 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74  ( (f & (MEM_Stat
3dd0: 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d  ic|MEM_Ephem))==
3de0: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  0 );.    }else i
3df0: 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 61 74 69  f( f & MEM_Stati
3e00: 63 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20 27  c ){.      c = '
3e10: 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  t';.      assert
3e20: 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c  ( (f & (MEM_Dyn|
3e30: 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29  MEM_Ephem))==0 )
3e40: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
3e50: 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b  f & MEM_Ephem ){
3e60: 0a 20 20 20 20 20 20 63 20 3d 20 27 65 27 3b 0a  .      c = 'e';.
3e70: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66        assert( (f
3e80: 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d   & (MEM_Static|M
3e90: 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a 20  EM_Dyn))==0 );. 
3ea0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
3eb0: 63 20 3d 20 27 73 27 3b 0a 20 20 20 20 7d 0a 20  c = 's';.    }. 
3ec0: 20 20 20 2a 28 7a 43 73 72 2b 2b 29 20 3d 20 63     *(zCsr++) = c
3ed0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ;.    sqlite3_sn
3ee0: 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72  printf(100, zCsr
3ef0: 2c 20 22 25 64 5b 22 2c 20 70 4d 65 6d 2d 3e 6e  , "%d[", pMem->n
3f00: 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  );.    zCsr += s
3f10: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
3f20: 43 73 72 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d  Csr);.    for(i=
3f30: 30 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d 65  0; i<16 && i<pMe
3f40: 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  m->n; i++){.    
3f50: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
3f60: 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25  tf(100, zCsr, "%
3f70: 30 32 58 22 2c 20 28 28 69 6e 74 29 70 4d 65 6d  02X", ((int)pMem
3f80: 2d 3e 7a 5b 69 5d 20 26 20 30 78 46 46 29 29 3b  ->z[i] & 0xFF));
3f90: 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  .      zCsr += s
3fa0: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
3fb0: 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  Csr);.    }.    
3fc0: 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26  for(i=0; i<16 &&
3fd0: 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29   i<pMem->n; i++)
3fe0: 7b 0a 20 20 20 20 20 20 63 68 61 72 20 7a 20 3d  {.      char z =
3ff0: 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20 20   pMem->z[i];.   
4000: 20 20 20 69 66 28 20 7a 3c 33 32 20 7c 7c 20 7a     if( z<32 || z
4010: 3e 31 32 36 20 29 20 2a 7a 43 73 72 2b 2b 20 3d  >126 ) *zCsr++ =
4020: 20 27 2e 27 3b 0a 20 20 20 20 20 20 65 6c 73 65   '.';.      else
4030: 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20 20   *zCsr++ = z;.  
4040: 20 20 7d 0a 20 20 20 20 2a 28 7a 43 73 72 2b 2b    }.    *(zCsr++
4050: 29 20 3d 20 27 5d 27 3b 0a 20 20 20 20 69 66 28  ) = ']';.    if(
4060: 20 66 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b   f & MEM_Zero ){
4070: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73  .      sqlite3_s
4080: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
4090: 72 2c 22 2b 25 64 7a 22 2c 70 4d 65 6d 2d 3e 75  r,"+%dz",pMem->u
40a0: 2e 6e 5a 65 72 6f 29 3b 0a 20 20 20 20 20 20 7a  .nZero);.      z
40b0: 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74  Csr += sqlite3St
40c0: 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20  rlen30(zCsr);.  
40d0: 20 20 7d 0a 20 20 20 20 2a 7a 43 73 72 20 3d 20    }.    *zCsr = 
40e0: 27 5c 30 27 3b 0a 20 20 7d 65 6c 73 65 20 69 66  '\0';.  }else if
40f0: 28 20 66 20 26 20 4d 45 4d 5f 53 74 72 20 29 7b  ( f & MEM_Str ){
4100: 0a 20 20 20 20 69 6e 74 20 6a 2c 20 6b 3b 0a 20  .    int j, k;. 
4110: 20 20 20 7a 42 75 66 5b 30 5d 20 3d 20 27 20 27     zBuf[0] = ' '
4120: 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d 45  ;.    if( f & ME
4130: 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20 7a  M_Dyn ){.      z
4140: 42 75 66 5b 31 5d 20 3d 20 27 7a 27 3b 0a 20 20  Buf[1] = 'z';.  
4150: 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26      assert( (f &
4160: 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d   (MEM_Static|MEM
4170: 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20  _Ephem))==0 );. 
4180: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26     }else if( f &
4190: 20 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20   MEM_Static ){. 
41a0: 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27       zBuf[1] = '
41b0: 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  t';.      assert
41c0: 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c  ( (f & (MEM_Dyn|
41d0: 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29  MEM_Ephem))==0 )
41e0: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
41f0: 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b  f & MEM_Ephem ){
4200: 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d  .      zBuf[1] =
4210: 20 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65   'e';.      asse
4220: 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74  rt( (f & (MEM_St
4230: 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d  atic|MEM_Dyn))==
4240: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  0 );.    }else{.
4250: 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20        zBuf[1] = 
4260: 27 73 27 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6b  's';.    }.    k
4270: 20 3d 20 32 3b 0a 20 20 20 20 73 71 6c 69 74 65   = 2;.    sqlite
4280: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
4290: 26 7a 42 75 66 5b 6b 5d 2c 20 22 25 64 22 2c 20  &zBuf[k], "%d", 
42a0: 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 6b 20  pMem->n);.    k 
42b0: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
42c0: 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20  30(&zBuf[k]);.  
42d0: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5b    zBuf[k++] = '[
42e0: 27 3b 0a 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20  ';.    for(j=0; 
42f0: 6a 3c 31 35 20 26 26 20 6a 3c 70 4d 65 6d 2d 3e  j<15 && j<pMem->
4300: 6e 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 75  n; j++){.      u
4310: 38 20 63 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d  8 c = pMem->z[j]
4320: 3b 0a 20 20 20 20 20 20 69 66 28 20 63 3e 3d 30  ;.      if( c>=0
4330: 78 32 30 20 26 26 20 63 3c 30 78 37 66 20 29 7b  x20 && c<0x7f ){
4340: 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b  .        zBuf[k+
4350: 2b 5d 20 3d 20 63 3b 0a 20 20 20 20 20 20 7d 65  +] = c;.      }e
4360: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 42 75  lse{.        zBu
4370: 66 5b 6b 2b 2b 5d 20 3d 20 27 2e 27 3b 0a 20 20  f[k++] = '.';.  
4380: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
4390: 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5d 27 3b  zBuf[k++] = ']';
43a0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
43b0: 72 69 6e 74 66 28 31 30 30 2c 26 7a 42 75 66 5b  rintf(100,&zBuf[
43c0: 6b 5d 2c 20 65 6e 63 6e 61 6d 65 73 5b 70 4d 65  k], encnames[pMe
43d0: 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20 20 20 6b 20  m->enc]);.    k 
43e0: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
43f0: 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20  30(&zBuf[k]);.  
4400: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 30 3b    zBuf[k++] = 0;
4410: 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23  .  }.}.#endif..#
4420: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
4430: 55 47 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 74  UG./*.** Print t
4440: 68 65 20 76 61 6c 75 65 20 6f 66 20 61 20 72 65  he value of a re
4450: 67 69 73 74 65 72 20 66 6f 72 20 74 72 61 63 69  gister for traci
4460: 6e 67 20 70 75 72 70 6f 73 65 73 3a 0a 2a 2f 0a  ng purposes:.*/.
4470: 73 74 61 74 69 63 20 76 6f 69 64 20 6d 65 6d 54  static void memT
4480: 72 61 63 65 50 72 69 6e 74 28 4d 65 6d 20 2a 70  racePrint(Mem *p
4490: 29 7b 0a 20 20 69 66 28 20 70 2d 3e 66 6c 61 67  ){.  if( p->flag
44a0: 73 20 26 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65  s & MEM_Undefine
44b0: 64 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28  d ){.    printf(
44c0: 22 20 75 6e 64 65 66 69 6e 65 64 22 29 3b 0a 20  " undefined");. 
44d0: 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c   }else if( p->fl
44e0: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
44f0: 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 70 2d 3e  {.    printf(p->
4500: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f  flags & MEM_Zero
4510: 20 3f 20 22 20 4e 55 4c 4c 2d 6e 6f 63 68 6e 67   ? " NULL-nochng
4520: 22 20 3a 20 22 20 4e 55 4c 4c 22 29 3b 0a 20 20  " : " NULL");.  
4530: 7d 65 6c 73 65 20 69 66 28 20 28 70 2d 3e 66 6c  }else if( (p->fl
4540: 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d  ags & (MEM_Int|M
4550: 45 4d 5f 53 74 72 29 29 3d 3d 28 4d 45 4d 5f 49  EM_Str))==(MEM_I
4560: 6e 74 7c 4d 45 4d 5f 53 74 72 29 20 29 7b 0a 20  nt|MEM_Str) ){. 
4570: 20 20 20 70 72 69 6e 74 66 28 22 20 73 69 3a 25     printf(" si:%
4580: 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a 20  lld", p->u.i);. 
4590: 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c   }else if( p->fl
45a0: 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b  ags & MEM_Int ){
45b0: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 69 3a  .    printf(" i:
45c0: 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a  %lld", p->u.i);.
45d0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
45e0: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
45f0: 4e 54 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  NT.  }else if( p
4600: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65  ->flags & MEM_Re
4610: 61 6c 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66  al ){.    printf
4620: 28 22 20 72 3a 25 67 22 2c 20 70 2d 3e 75 2e 72  (" r:%g", p->u.r
4630: 29 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 65 6c 73  );.#endif.  }els
4640: 65 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62  e if( sqlite3Vdb
4650: 65 4d 65 6d 49 73 52 6f 77 53 65 74 28 70 29 20  eMemIsRowSet(p) 
4660: 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20  ){.    printf(" 
4670: 28 72 6f 77 73 65 74 29 22 29 3b 0a 20 20 7d 65  (rowset)");.  }e
4680: 6c 73 65 7b 0a 20 20 20 20 63 68 61 72 20 7a 42  lse{.    char zB
4690: 75 66 5b 32 30 30 5d 3b 0a 20 20 20 20 73 71 6c  uf[200];.    sql
46a0: 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74  ite3VdbeMemPrett
46b0: 79 50 72 69 6e 74 28 70 2c 20 7a 42 75 66 29 3b  yPrint(p, zBuf);
46c0: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 25 73  .    printf(" %s
46d0: 22 2c 20 7a 42 75 66 29 3b 0a 20 20 7d 0a 20 20  ", zBuf);.  }.  
46e0: 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d  if( p->flags & M
46f0: 45 4d 5f 53 75 62 74 79 70 65 20 29 20 70 72 69  EM_Subtype ) pri
4700: 6e 74 66 28 22 20 73 75 62 74 79 70 65 3d 30 78  ntf(" subtype=0x
4710: 25 30 32 78 22 2c 20 70 2d 3e 65 53 75 62 74 79  %02x", p->eSubty
4720: 70 65 29 3b 0a 7d 0a 73 74 61 74 69 63 20 76 6f  pe);.}.static vo
4730: 69 64 20 72 65 67 69 73 74 65 72 54 72 61 63 65  id registerTrace
4740: 28 69 6e 74 20 69 52 65 67 2c 20 4d 65 6d 20 2a  (int iReg, Mem *
4750: 70 29 7b 0a 20 20 70 72 69 6e 74 66 28 22 52 45  p){.  printf("RE
4760: 47 5b 25 64 5d 20 3d 20 22 2c 20 69 52 65 67 29  G[%d] = ", iReg)
4770: 3b 0a 20 20 6d 65 6d 54 72 61 63 65 50 72 69 6e  ;.  memTracePrin
4780: 74 28 70 29 3b 0a 20 20 70 72 69 6e 74 66 28 22  t(p);.  printf("
4790: 5c 6e 22 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  \n");.  sqlite3V
47a0: 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72  dbeCheckMemInvar
47b0: 69 61 6e 74 73 28 70 29 3b 0a 7d 0a 23 65 6e 64  iants(p);.}.#end
47c0: 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
47d0: 45 5f 44 45 42 55 47 0a 23 20 20 64 65 66 69 6e  E_DEBUG.#  defin
47e0: 65 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45  e REGISTER_TRACE
47f0: 28 52 2c 4d 29 20 69 66 28 64 62 2d 3e 66 6c 61  (R,M) if(db->fla
4800: 67 73 26 53 51 4c 49 54 45 5f 56 64 62 65 54 72  gs&SQLITE_VdbeTr
4810: 61 63 65 29 72 65 67 69 73 74 65 72 54 72 61 63  ace)registerTrac
4820: 65 28 52 2c 4d 29 0a 23 65 6c 73 65 0a 23 20 20  e(R,M).#else.#  
4830: 64 65 66 69 6e 65 20 52 45 47 49 53 54 45 52 5f  define REGISTER_
4840: 54 52 41 43 45 28 52 2c 4d 29 0a 23 65 6e 64 69  TRACE(R,M).#endi
4850: 66 0a 0a 0a 23 69 66 64 65 66 20 56 44 42 45 5f  f...#ifdef VDBE_
4860: 50 52 4f 46 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a 20  PROFILE../* .** 
4870: 68 77 74 69 6d 65 2e 68 20 63 6f 6e 74 61 69 6e  hwtime.h contain
4880: 73 20 69 6e 6c 69 6e 65 20 61 73 73 65 6d 62 6c  s inline assembl
4890: 65 72 20 63 6f 64 65 20 66 6f 72 20 69 6d 70 6c  er code for impl
48a0: 65 6d 65 6e 74 69 6e 67 20 0a 2a 2a 20 68 69 67  ementing .** hig
48b0: 68 2d 70 65 72 66 6f 72 6d 61 6e 63 65 20 74 69  h-performance ti
48c0: 6d 69 6e 67 20 72 6f 75 74 69 6e 65 73 2e 0a 2a  ming routines..*
48d0: 2f 0a 23 69 6e 63 6c 75 64 65 20 22 68 77 74 69  /.#include "hwti
48e0: 6d 65 2e 68 22 0a 0a 23 65 6e 64 69 66 0a 0a 23  me.h"..#endif..#
48f0: 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 2f 2a  ifndef NDEBUG./*
4900: 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f  .** This functio
4910: 6e 20 69 73 20 6f 6e 6c 79 20 63 61 6c 6c 65 64  n is only called
4920: 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e 20   from within an 
4930: 61 73 73 65 72 74 28 29 20 65 78 70 72 65 73 73  assert() express
4940: 69 6f 6e 2e 20 49 74 0a 2a 2a 20 63 68 65 63 6b  ion. It.** check
4950: 73 20 74 68 61 74 20 74 68 65 20 73 71 6c 69 74  s that the sqlit
4960: 65 33 2e 6e 54 72 61 6e 73 61 63 74 69 6f 6e 20  e3.nTransaction 
4970: 76 61 72 69 61 62 6c 65 20 69 73 20 63 6f 72 72  variable is corr
4980: 65 63 74 6c 79 20 73 65 74 20 74 6f 0a 2a 2a 20  ectly set to.** 
4990: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6e 6f  the number of no
49a0: 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61  n-transaction sa
49b0: 76 65 70 6f 69 6e 74 73 20 63 75 72 72 65 6e 74  vepoints current
49c0: 6c 79 20 69 6e 20 74 68 65 20 0a 2a 2a 20 6c 69  ly in the .** li
49d0: 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74 69  nked list starti
49e0: 6e 67 20 61 74 20 73 71 6c 69 74 65 33 2e 70 53  ng at sqlite3.pS
49f0: 61 76 65 70 6f 69 6e 74 2e 0a 2a 2a 20 0a 2a 2a  avepoint..** .**
4a00: 20 55 73 61 67 65 3a 0a 2a 2a 0a 2a 2a 20 20 20   Usage:.**.**   
4a10: 20 20 61 73 73 65 72 74 28 20 63 68 65 63 6b 53    assert( checkS
4a20: 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62  avepointCount(db
4a30: 29 20 29 3b 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ) );.*/.static i
4a40: 6e 74 20 63 68 65 63 6b 53 61 76 65 70 6f 69 6e  nt checkSavepoin
4a50: 74 43 6f 75 6e 74 28 73 71 6c 69 74 65 33 20 2a  tCount(sqlite3 *
4a60: 64 62 29 7b 0a 20 20 69 6e 74 20 6e 20 3d 20 30  db){.  int n = 0
4a70: 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70  ;.  Savepoint *p
4a80: 3b 0a 20 20 66 6f 72 28 70 3d 64 62 2d 3e 70 53  ;.  for(p=db->pS
4a90: 61 76 65 70 6f 69 6e 74 3b 20 70 3b 20 70 3d 70  avepoint; p; p=p
4aa0: 2d 3e 70 4e 65 78 74 29 20 6e 2b 2b 3b 0a 20 20  ->pNext) n++;.  
4ab0: 61 73 73 65 72 74 28 20 6e 3d 3d 28 64 62 2d 3e  assert( n==(db->
4ac0: 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d  nSavepoint + db-
4ad0: 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61  >isTransactionSa
4ae0: 76 65 70 6f 69 6e 74 29 20 29 3b 0a 20 20 72 65  vepoint) );.  re
4af0: 74 75 72 6e 20 31 3b 0a 7d 0a 23 65 6e 64 69 66  turn 1;.}.#endif
4b00: 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74  ../*.** Return t
4b10: 68 65 20 72 65 67 69 73 74 65 72 20 6f 66 20 70  he register of p
4b20: 4f 70 2d 3e 70 32 20 61 66 74 65 72 20 66 69 72  Op->p2 after fir
4b30: 73 74 20 70 72 65 70 61 72 69 6e 67 20 69 74 20  st preparing it 
4b40: 74 6f 20 62 65 0a 2a 2a 20 6f 76 65 72 77 72 69  to be.** overwri
4b50: 74 74 65 6e 20 77 69 74 68 20 61 6e 20 69 6e 74  tten with an int
4b60: 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2f 0a 73  eger value..*/.s
4b70: 74 61 74 69 63 20 53 51 4c 49 54 45 5f 4e 4f 49  tatic SQLITE_NOI
4b80: 4e 4c 49 4e 45 20 4d 65 6d 20 2a 6f 75 74 32 50  NLINE Mem *out2P
4b90: 72 65 72 65 6c 65 61 73 65 57 69 74 68 43 6c 65  rereleaseWithCle
4ba0: 61 72 28 4d 65 6d 20 2a 70 4f 75 74 29 7b 0a 20  ar(Mem *pOut){. 
4bb0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
4bc0: 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
4bd0: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
4be0: 4d 5f 49 6e 74 3b 0a 20 20 72 65 74 75 72 6e 20  M_Int;.  return 
4bf0: 70 4f 75 74 3b 0a 7d 0a 73 74 61 74 69 63 20 4d  pOut;.}.static M
4c00: 65 6d 20 2a 6f 75 74 32 50 72 65 72 65 6c 65 61  em *out2Prerelea
4c10: 73 65 28 56 64 62 65 20 2a 70 2c 20 56 64 62 65  se(Vdbe *p, Vdbe
4c20: 4f 70 20 2a 70 4f 70 29 7b 0a 20 20 4d 65 6d 20  Op *pOp){.  Mem 
4c30: 2a 70 4f 75 74 3b 0a 20 20 61 73 73 65 72 74 28  *pOut;.  assert(
4c40: 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20   pOp->p2>0 );.  
4c50: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c  assert( pOp->p2<
4c60: 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
4c70: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70  >nCursor) );.  p
4c80: 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70  Out = &p->aMem[p
4c90: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 6d 65 6d 41 62  Op->p2];.  memAb
4ca0: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
4cb0: 4f 75 74 29 3b 0a 20 20 69 66 28 20 56 64 62 65  Out);.  if( Vdbe
4cc0: 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74 29  MemDynamic(pOut)
4cd0: 20 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49   ){ /*OPTIMIZATI
4ce0: 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20  ON-IF-FALSE*/.  
4cf0: 20 20 72 65 74 75 72 6e 20 6f 75 74 32 50 72 65    return out2Pre
4d00: 72 65 6c 65 61 73 65 57 69 74 68 43 6c 65 61 72  releaseWithClear
4d10: 28 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b  (pOut);.  }else{
4d20: 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  .    pOut->flags
4d30: 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20   = MEM_Int;.    
4d40: 72 65 74 75 72 6e 20 70 4f 75 74 3b 0a 20 20 7d  return pOut;.  }
4d50: 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63 75  .}.../*.** Execu
4d60: 74 65 20 61 73 20 6d 75 63 68 20 6f 66 20 61 20  te as much of a 
4d70: 56 44 42 45 20 70 72 6f 67 72 61 6d 20 61 73 20  VDBE program as 
4d80: 77 65 20 63 61 6e 2e 0a 2a 2a 20 54 68 69 73 20  we can..** This 
4d90: 69 73 20 74 68 65 20 63 6f 72 65 20 6f 66 20 73  is the core of s
4da0: 71 6c 69 74 65 33 5f 73 74 65 70 28 29 2e 20 20  qlite3_step().  
4db0: 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  .*/.int sqlite3V
4dc0: 64 62 65 45 78 65 63 28 0a 20 20 56 64 62 65 20  dbeExec(.  Vdbe 
4dd0: 2a 70 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *p              
4de0: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42        /* The VDB
4df0: 45 20 2a 2f 0a 29 7b 0a 20 20 4f 70 20 2a 61 4f  E */.){.  Op *aO
4e00: 70 20 3d 20 70 2d 3e 61 4f 70 3b 20 20 20 20 20  p = p->aOp;     
4e10: 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20       /* Copy of 
4e20: 70 2d 3e 61 4f 70 20 2a 2f 0a 20 20 4f 70 20 2a  p->aOp */.  Op *
4e30: 70 4f 70 20 3d 20 61 4f 70 3b 20 20 20 20 20 20  pOp = aOp;      
4e40: 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e         /* Curren
4e50: 74 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 23  t operation */.#
4e60: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
4e70: 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69  E_DEBUG) || defi
4e80: 6e 65 64 28 56 44 42 45 5f 50 52 4f 46 49 4c 45  ned(VDBE_PROFILE
4e90: 29 0a 20 20 4f 70 20 2a 70 4f 72 69 67 4f 70 3b  ).  Op *pOrigOp;
4ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4eb0: 2a 20 56 61 6c 75 65 20 6f 66 20 70 4f 70 20 61  * Value of pOp a
4ec0: 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65  t the top of the
4ed0: 20 6c 6f 6f 70 20 2a 2f 0a 23 65 6e 64 69 66 0a   loop */.#endif.
4ee0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
4ef0: 42 55 47 0a 20 20 69 6e 74 20 6e 45 78 74 72 61  BUG.  int nExtra
4f00: 44 65 6c 65 74 65 20 3d 20 30 3b 20 20 20 20 20  Delete = 0;     
4f10: 20 2f 2a 20 56 65 72 69 66 69 65 73 20 46 4f 52   /* Verifies FOR
4f20: 44 45 4c 45 54 45 20 61 6e 64 20 41 55 58 44 45  DELETE and AUXDE
4f30: 4c 45 54 45 20 66 6c 61 67 73 20 2a 2f 0a 23 65  LETE flags */.#e
4f40: 6e 64 69 66 0a 20 20 69 6e 74 20 72 63 20 3d 20  ndif.  int rc = 
4f50: 53 51 4c 49 54 45 5f 4f 4b 3b 20 20 20 20 20 20  SQLITE_OK;      
4f60: 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65    /* Value to re
4f70: 74 75 72 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65  turn */.  sqlite
4f80: 33 20 2a 64 62 20 3d 20 70 2d 3e 64 62 3b 20 20  3 *db = p->db;  
4f90: 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61       /* The data
4fa0: 62 61 73 65 20 2a 2f 0a 20 20 75 38 20 72 65 73  base */.  u8 res
4fb0: 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20  etSchemaOnFault 
4fc0: 3d 20 30 3b 20 2f 2a 20 52 65 73 65 74 20 73 63  = 0; /* Reset sc
4fd0: 68 65 6d 61 20 61 66 74 65 72 20 61 6e 20 65 72  hema after an er
4fe0: 72 6f 72 20 69 66 20 70 6f 73 69 74 69 76 65 20  ror if positive 
4ff0: 2a 2f 0a 20 20 75 38 20 65 6e 63 6f 64 69 6e 67  */.  u8 encoding
5000: 20 3d 20 45 4e 43 28 64 62 29 3b 20 20 20 20 20   = ENC(db);     
5010: 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20  /* The database 
5020: 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e  encoding */.  in
5030: 74 20 69 43 6f 6d 70 61 72 65 20 3d 20 30 3b 20  t iCompare = 0; 
5040: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75           /* Resu
5050: 6c 74 20 6f 66 20 6c 61 73 74 20 63 6f 6d 70 61  lt of last compa
5060: 72 69 73 6f 6e 20 2a 2f 0a 20 20 75 6e 73 69 67  rison */.  unsig
5070: 6e 65 64 20 6e 56 6d 53 74 65 70 20 3d 20 30 3b  ned nVmStep = 0;
5080: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
5090: 6f 66 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  of virtual machi
50a0: 6e 65 20 73 74 65 70 73 20 2a 2f 0a 23 69 66 6e  ne steps */.#ifn
50b0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
50c0: 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43  PROGRESS_CALLBAC
50d0: 4b 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 50 72  K.  unsigned nPr
50e0: 6f 67 72 65 73 73 4c 69 6d 69 74 3b 20 20 20 2f  ogressLimit;   /
50f0: 2a 20 49 6e 76 6f 6b 65 20 78 50 72 6f 67 72 65  * Invoke xProgre
5100: 73 73 28 29 20 77 68 65 6e 20 6e 56 6d 53 74 65  ss() when nVmSte
5110: 70 20 72 65 61 63 68 65 73 20 74 68 69 73 20 2a  p reaches this *
5120: 2f 0a 23 65 6e 64 69 66 0a 20 20 4d 65 6d 20 2a  /.#endif.  Mem *
5130: 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 20  aMem = p->aMem; 
5140: 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66        /* Copy of
5150: 20 70 2d 3e 61 4d 65 6d 20 2a 2f 0a 20 20 4d 65   p->aMem */.  Me
5160: 6d 20 2a 70 49 6e 31 20 3d 20 30 3b 20 20 20 20  m *pIn1 = 0;    
5170: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20           /* 1st 
5180: 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f  input operand */
5190: 0a 20 20 4d 65 6d 20 2a 70 49 6e 32 20 3d 20 30  .  Mem *pIn2 = 0
51a0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
51b0: 20 32 6e 64 20 69 6e 70 75 74 20 6f 70 65 72 61   2nd input opera
51c0: 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e  nd */.  Mem *pIn
51d0: 33 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  3 = 0;          
51e0: 20 20 20 2f 2a 20 33 72 64 20 69 6e 70 75 74 20     /* 3rd input 
51f0: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d  operand */.  Mem
5200: 20 2a 70 4f 75 74 20 3d 20 30 3b 20 20 20 20 20   *pOut = 0;     
5210: 20 20 20 20 20 20 20 20 2f 2a 20 4f 75 74 70 75          /* Outpu
5220: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 23 69 66  t operand */.#if
5230: 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45  def VDBE_PROFILE
5240: 0a 20 20 75 36 34 20 73 74 61 72 74 3b 20 20 20  .  u64 start;   
5250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
5260: 20 43 50 55 20 63 6c 6f 63 6b 20 63 6f 75 6e 74   CPU clock count
5270: 20 61 74 20 73 74 61 72 74 20 6f 66 20 6f 70 63   at start of opc
5280: 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ode */.#endif.  
5290: 2f 2a 2a 2a 20 49 4e 53 45 52 54 20 53 54 41 43  /*** INSERT STAC
52a0: 4b 20 55 4e 49 4f 4e 20 48 45 52 45 20 2a 2a 2a  K UNION HERE ***
52b0: 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  /..  assert( p->
52c0: 6d 61 67 69 63 3d 3d 56 44 42 45 5f 4d 41 47 49  magic==VDBE_MAGI
52d0: 43 5f 52 55 4e 20 29 3b 20 20 2f 2a 20 73 71 6c  C_RUN );  /* sql
52e0: 69 74 65 33 5f 73 74 65 70 28 29 20 76 65 72 69  ite3_step() veri
52f0: 66 69 65 73 20 74 68 69 73 20 2a 2f 0a 20 20 73  fies this */.  s
5300: 71 6c 69 74 65 33 56 64 62 65 45 6e 74 65 72 28  qlite3VdbeEnter(
5310: 70 29 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63 3d  p);.  if( p->rc=
5320: 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b  =SQLITE_NOMEM ){
5330: 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 68 61 70  .    /* This hap
5340: 70 65 6e 73 20 69 66 20 61 20 6d 61 6c 6c 6f 63  pens if a malloc
5350: 28 29 20 69 6e 73 69 64 65 20 61 20 63 61 6c 6c  () inside a call
5360: 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75   to sqlite3_colu
5370: 6d 6e 5f 74 65 78 74 28 29 20 6f 72 0a 20 20 20  mn_text() or.   
5380: 20 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75   ** sqlite3_colu
5390: 6d 6e 5f 74 65 78 74 31 36 28 29 20 66 61 69 6c  mn_text16() fail
53a0: 65 64 2e 20 20 2a 2f 0a 20 20 20 20 67 6f 74 6f  ed.  */.    goto
53b0: 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 61   no_mem;.  }.  a
53c0: 73 73 65 72 74 28 20 70 2d 3e 72 63 3d 3d 53 51  ssert( p->rc==SQ
53d0: 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 2d 3e 72  LITE_OK || (p->r
53e0: 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f  c&0xff)==SQLITE_
53f0: 42 55 53 59 20 29 3b 0a 20 20 61 73 73 65 72 74  BUSY );.  assert
5400: 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 7c  ( p->bIsReader |
5410: 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 21 3d 30  | p->readOnly!=0
5420: 20 29 3b 0a 20 20 70 2d 3e 69 43 75 72 72 65 6e   );.  p->iCurren
5430: 74 54 69 6d 65 20 3d 20 30 3b 0a 20 20 61 73 73  tTime = 0;.  ass
5440: 65 72 74 28 20 70 2d 3e 65 78 70 6c 61 69 6e 3d  ert( p->explain=
5450: 3d 30 20 29 3b 0a 20 20 70 2d 3e 70 52 65 73 75  =0 );.  p->pResu
5460: 6c 74 53 65 74 20 3d 20 30 3b 0a 20 20 64 62 2d  ltSet = 0;.  db-
5470: 3e 62 75 73 79 48 61 6e 64 6c 65 72 2e 6e 42 75  >busyHandler.nBu
5480: 73 79 20 3d 20 30 3b 0a 20 20 69 66 28 20 64 62  sy = 0;.  if( db
5490: 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74  ->u1.isInterrupt
54a0: 65 64 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  ed ) goto abort_
54b0: 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74  due_to_interrupt
54c0: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 49  ;.  sqlite3VdbeI
54d0: 4f 54 72 61 63 65 53 71 6c 28 70 29 3b 0a 23 69  OTraceSql(p);.#i
54e0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
54f0: 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42  T_PROGRESS_CALLB
5500: 41 43 4b 0a 20 20 69 66 28 20 64 62 2d 3e 78 50  ACK.  if( db->xP
5510: 72 6f 67 72 65 73 73 20 29 7b 0a 20 20 20 20 75  rogress ){.    u
5520: 33 32 20 69 50 72 69 6f 72 20 3d 20 70 2d 3e 61  32 iPrior = p->a
5530: 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53  Counter[SQLITE_S
5540: 54 4d 54 53 54 41 54 55 53 5f 56 4d 5f 53 54 45  TMTSTATUS_VM_STE
5550: 50 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  P];.    assert( 
5560: 30 20 3c 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73  0 < db->nProgres
5570: 73 4f 70 73 20 29 3b 0a 20 20 20 20 6e 50 72 6f  sOps );.    nPro
5580: 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 64 62 2d  gressLimit = db-
5590: 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 2d 20  >nProgressOps - 
55a0: 28 69 50 72 69 6f 72 20 25 20 64 62 2d 3e 6e 50  (iPrior % db->nP
55b0: 72 6f 67 72 65 73 73 4f 70 73 29 3b 0a 20 20 7d  rogressOps);.  }
55c0: 65 6c 73 65 7b 0a 20 20 20 20 6e 50 72 6f 67 72  else{.    nProgr
55d0: 65 73 73 4c 69 6d 69 74 20 3d 20 30 78 66 66 66  essLimit = 0xfff
55e0: 66 66 66 66 66 3b 0a 20 20 7d 0a 23 65 6e 64 69  fffff;.  }.#endi
55f0: 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
5600: 44 45 42 55 47 0a 20 20 73 71 6c 69 74 65 33 42  DEBUG.  sqlite3B
5610: 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  eginBenignMalloc
5620: 28 29 3b 0a 20 20 69 66 28 20 70 2d 3e 70 63 3d  ();.  if( p->pc=
5630: 3d 30 0a 20 20 20 26 26 20 28 70 2d 3e 64 62 2d  =0.   && (p->db-
5640: 3e 66 6c 61 67 73 20 26 20 28 53 51 4c 49 54 45  >flags & (SQLITE
5650: 5f 56 64 62 65 4c 69 73 74 69 6e 67 7c 53 51 4c  _VdbeListing|SQL
5660: 49 54 45 5f 56 64 62 65 45 51 50 7c 53 51 4c 49  ITE_VdbeEQP|SQLI
5670: 54 45 5f 56 64 62 65 54 72 61 63 65 29 29 21 3d  TE_VdbeTrace))!=
5680: 30 0a 20 20 29 7b 0a 20 20 20 20 69 6e 74 20 69  0.  ){.    int i
5690: 3b 0a 20 20 20 20 69 6e 74 20 6f 6e 63 65 20 3d  ;.    int once =
56a0: 20 31 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   1;.    sqlite3V
56b0: 64 62 65 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a  dbePrintSql(p);.
56c0: 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66      if( p->db->f
56d0: 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64  lags & SQLITE_Vd
56e0: 62 65 4c 69 73 74 69 6e 67 20 29 7b 0a 20 20 20  beListing ){.   
56f0: 20 20 20 70 72 69 6e 74 66 28 22 56 44 42 45 20     printf("VDBE 
5700: 50 72 6f 67 72 61 6d 20 4c 69 73 74 69 6e 67 3a  Program Listing:
5710: 5c 6e 22 29 3b 0a 20 20 20 20 20 20 66 6f 72 28  \n");.      for(
5720: 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69  i=0; i<p->nOp; i
5730: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  ++){.        sql
5740: 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28  ite3VdbePrintOp(
5750: 73 74 64 6f 75 74 2c 20 69 2c 20 26 61 4f 70 5b  stdout, i, &aOp[
5760: 69 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  i]);.      }.   
5770: 20 7d 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62   }.    if( p->db
5780: 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
5790: 5f 56 64 62 65 45 51 50 20 29 7b 0a 20 20 20 20  _VdbeEQP ){.    
57a0: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e    for(i=0; i<p->
57b0: 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  nOp; i++){.     
57c0: 20 20 20 69 66 28 20 61 4f 70 5b 69 5d 2e 6f 70     if( aOp[i].op
57d0: 63 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e  code==OP_Explain
57e0: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66   ){.          if
57f0: 28 20 6f 6e 63 65 20 29 20 70 72 69 6e 74 66 28  ( once ) printf(
5800: 22 56 44 42 45 20 51 75 65 72 79 20 50 6c 61 6e  "VDBE Query Plan
5810: 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 20  :\n");.         
5820: 20 70 72 69 6e 74 66 28 22 25 73 5c 6e 22 2c 20   printf("%s\n", 
5830: 61 4f 70 5b 69 5d 2e 70 34 2e 7a 29 3b 0a 20 20  aOp[i].p4.z);.  
5840: 20 20 20 20 20 20 20 20 6f 6e 63 65 20 3d 20 30          once = 0
5850: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
5860: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66    }.    }.    if
5870: 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26  ( p->db->flags &
5880: 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63   SQLITE_VdbeTrac
5890: 65 20 29 20 20 70 72 69 6e 74 66 28 22 56 44 42  e )  printf("VDB
58a0: 45 20 54 72 61 63 65 3a 5c 6e 22 29 3b 0a 20 20  E Trace:\n");.  
58b0: 7d 0a 20 20 73 71 6c 69 74 65 33 45 6e 64 42 65  }.  sqlite3EndBe
58c0: 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 23 65  nignMalloc();.#e
58d0: 6e 64 69 66 0a 20 20 66 6f 72 28 70 4f 70 3d 26  ndif.  for(pOp=&
58e0: 61 4f 70 5b 70 2d 3e 70 63 5d 3b 20 31 3b 20 70  aOp[p->pc]; 1; p
58f0: 4f 70 2b 2b 29 7b 0a 20 20 20 20 2f 2a 20 45 72  Op++){.    /* Er
5900: 72 6f 72 73 20 61 72 65 20 64 65 74 65 63 74 65  rors are detecte
5910: 64 20 62 79 20 69 6e 64 69 76 69 64 75 61 6c 20  d by individual 
5920: 6f 70 63 6f 64 65 73 2c 20 77 69 74 68 20 61 6e  opcodes, with an
5930: 20 69 6d 6d 65 64 69 61 74 65 0a 20 20 20 20 2a   immediate.    *
5940: 2a 20 6a 75 6d 70 73 20 74 6f 20 61 62 6f 72 74  * jumps to abort
5950: 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 2e 20 2a  _due_to_error. *
5960: 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63  /.    assert( rc
5970: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 0a  ==SQLITE_OK );..
5980: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 3e      assert( pOp>
5990: 3d 61 4f 70 20 26 26 20 70 4f 70 3c 26 61 4f 70  =aOp && pOp<&aOp
59a0: 5b 70 2d 3e 6e 4f 70 5d 29 3b 0a 23 69 66 64 65  [p->nOp]);.#ifde
59b0: 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20  f VDBE_PROFILE. 
59c0: 20 20 20 73 74 61 72 74 20 3d 20 73 71 6c 69 74     start = sqlit
59d0: 65 33 4e 50 72 6f 66 69 6c 65 43 6e 74 20 3f 20  e3NProfileCnt ? 
59e0: 73 71 6c 69 74 65 33 4e 50 72 6f 66 69 6c 65 43  sqlite3NProfileC
59f0: 6e 74 20 3a 20 73 71 6c 69 74 65 33 48 77 74 69  nt : sqlite3Hwti
5a00: 6d 65 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20  me();.#endif.   
5a10: 20 6e 56 6d 53 74 65 70 2b 2b 3b 0a 23 69 66 64   nVmStep++;.#ifd
5a20: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
5a30: 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54 55 53  _STMT_SCANSTATUS
5a40: 0a 20 20 20 20 69 66 28 20 70 2d 3e 61 6e 45 78  .    if( p->anEx
5a50: 65 63 20 29 20 70 2d 3e 61 6e 45 78 65 63 5b 28  ec ) p->anExec[(
5a60: 69 6e 74 29 28 70 4f 70 2d 61 4f 70 29 5d 2b 2b  int)(pOp-aOp)]++
5a70: 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a  ;.#endif..    /*
5a80: 20 4f 6e 6c 79 20 61 6c 6c 6f 77 20 74 72 61 63   Only allow trac
5a90: 69 6e 67 20 69 66 20 53 51 4c 49 54 45 5f 44 45  ing if SQLITE_DE
5aa0: 42 55 47 20 69 73 20 64 65 66 69 6e 65 64 2e 0a  BUG is defined..
5ab0: 20 20 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51      */.#ifdef SQ
5ac0: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69  LITE_DEBUG.    i
5ad0: 66 28 20 64 62 2d 3e 66 6c 61 67 73 20 26 20 53  f( db->flags & S
5ae0: 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 20  QLITE_VdbeTrace 
5af0: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
5b00: 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74 64 6f  VdbePrintOp(stdo
5b10: 75 74 2c 20 28 69 6e 74 29 28 70 4f 70 20 2d 20  ut, (int)(pOp - 
5b20: 61 4f 70 29 2c 20 70 4f 70 29 3b 0a 20 20 20 20  aOp), pOp);.    
5b30: 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 20 0a  }.#endif.      .
5b40: 0a 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 74 6f  .    /* Check to
5b50: 20 73 65 65 20 69 66 20 77 65 20 6e 65 65 64 20   see if we need 
5b60: 74 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69  to simulate an i
5b70: 6e 74 65 72 72 75 70 74 2e 20 20 54 68 69 73 20  nterrupt.  This 
5b80: 6f 6e 6c 79 20 68 61 70 70 65 6e 73 0a 20 20 20  only happens.   
5b90: 20 2a 2a 20 69 66 20 77 65 20 68 61 76 65 20 61   ** if we have a
5ba0: 20 73 70 65 63 69 61 6c 20 74 65 73 74 20 62 75   special test bu
5bb0: 69 6c 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64  ild..    */.#ifd
5bc0: 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
5bd0: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69     if( sqlite3_i
5be0: 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 3e 30  nterrupt_count>0
5bf0: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
5c00: 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e  3_interrupt_coun
5c10: 74 2d 2d 3b 0a 20 20 20 20 20 20 69 66 28 20 73  t--;.      if( s
5c20: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
5c30: 5f 63 6f 75 6e 74 3d 3d 30 20 29 7b 0a 20 20 20  _count==0 ){.   
5c40: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74       sqlite3_int
5c50: 65 72 72 75 70 74 28 64 62 29 3b 0a 20 20 20 20  errupt(db);.    
5c60: 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66    }.    }.#endif
5c70: 0a 0a 20 20 20 20 2f 2a 20 53 61 6e 69 74 79 20  ..    /* Sanity 
5c80: 63 68 65 63 6b 69 6e 67 20 6f 6e 20 6f 74 68 65  checking on othe
5c90: 72 20 6f 70 65 72 61 6e 64 73 20 2a 2f 0a 23 69  r operands */.#i
5ca0: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
5cb0: 47 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 75 38  G.    {.      u8
5cc0: 20 6f 70 50 72 6f 70 65 72 74 79 20 3d 20 73 71   opProperty = sq
5cd0: 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f 70 65  lite3OpcodePrope
5ce0: 72 74 79 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65 5d  rty[pOp->opcode]
5cf0: 3b 0a 20 20 20 20 20 20 69 66 28 20 28 6f 70 50  ;.      if( (opP
5d00: 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f  roperty & OPFLG_
5d10: 49 4e 31 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  IN1)!=0 ){.     
5d20: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5d30: 70 31 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20  p1>0 );.        
5d40: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c  assert( pOp->p1<
5d50: 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
5d60: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
5d70: 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d       assert( mem
5d80: 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f  IsValid(&aMem[pO
5d90: 70 2d 3e 70 31 5d 29 20 29 3b 0a 20 20 20 20 20  p->p1]) );.     
5da0: 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
5db0: 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e  e3VdbeCheckMemIn
5dc0: 76 61 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70  variants(&aMem[p
5dd0: 4f 70 2d 3e 70 31 5d 29 20 29 3b 0a 20 20 20 20  Op->p1]) );.    
5de0: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
5df0: 43 45 28 70 4f 70 2d 3e 70 31 2c 20 26 61 4d 65  CE(pOp->p1, &aMe
5e00: 6d 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20 20  m[pOp->p1]);.   
5e10: 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28     }.      if( (
5e20: 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46  opProperty & OPF
5e30: 4c 47 5f 49 4e 32 29 21 3d 30 20 29 7b 0a 20 20  LG_IN2)!=0 ){.  
5e40: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5e50: 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20  p->p2>0 );.     
5e60: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5e70: 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  p2<=(p->nMem+1 -
5e80: 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a   p->nCursor) );.
5e90: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
5ea0: 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d  memIsValid(&aMem
5eb0: 5b 70 4f 70 2d 3e 70 32 5d 29 20 29 3b 0a 20 20  [pOp->p2]) );.  
5ec0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
5ed0: 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65  lite3VdbeCheckMe
5ee0: 6d 49 6e 76 61 72 69 61 6e 74 73 28 26 61 4d 65  mInvariants(&aMe
5ef0: 6d 5b 70 4f 70 2d 3e 70 32 5d 29 20 29 3b 0a 20  m[pOp->p2]) );. 
5f00: 20 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f         REGISTER_
5f10: 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 26  TRACE(pOp->p2, &
5f20: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a  aMem[pOp->p2]);.
5f30: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
5f40: 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20  ( (opProperty & 
5f50: 4f 50 46 4c 47 5f 49 4e 33 29 21 3d 30 20 29 7b  OPFLG_IN3)!=0 ){
5f60: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
5f70: 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20   pOp->p3>0 );.  
5f80: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5f90: 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p->p3<=(p->nMem+
5fa0: 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20  1 - p->nCursor) 
5fb0: 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
5fc0: 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61  t( memIsValid(&a
5fd0: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b  Mem[pOp->p3]) );
5fe0: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
5ff0: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63   sqlite3VdbeChec
6000: 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 26  kMemInvariants(&
6010: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29  aMem[pOp->p3]) )
6020: 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49 53 54  ;.        REGIST
6030: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
6040: 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  , &aMem[pOp->p3]
6050: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
6060: 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72 74 79   if( (opProperty
6070: 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32 29 21 3d   & OPFLG_OUT2)!=
6080: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  0 ){.        ass
6090: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29  ert( pOp->p2>0 )
60a0: 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
60b0: 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e  ( pOp->p2<=(p->n
60c0: 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
60d0: 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 6d  or) );.        m
60e0: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
60f0: 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  p, &aMem[pOp->p2
6100: 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ]);.      }.    
6110: 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72 74    if( (opPropert
6120: 79 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33 29 21  y & OPFLG_OUT3)!
6130: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73  =0 ){.        as
6140: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
6150: 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
6160: 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e  t( pOp->p3<=(p->
6170: 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
6180: 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20  sor) );.        
6190: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
61a0: 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  (p, &aMem[pOp->p
61b0: 33 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  3]);.      }.   
61c0: 20 7d 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65   }.#endif.#if de
61d0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
61e0: 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 56  UG) || defined(V
61f0: 44 42 45 5f 50 52 4f 46 49 4c 45 29 0a 20 20 20  DBE_PROFILE).   
6200: 20 70 4f 72 69 67 4f 70 20 3d 20 70 4f 70 3b 0a   pOrigOp = pOp;.
6210: 23 65 6e 64 69 66 0a 20 20 0a 20 20 20 20 73 77  #endif.  .    sw
6220: 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  itch( pOp->opcod
6230: 65 20 29 7b 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a  e ){../*********
6240: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6250: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6260: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6270: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6280: 2a 2a 2a 2a 0a 2a 2a 20 57 68 61 74 20 66 6f 6c  ****.** What fol
6290: 6c 6f 77 73 20 69 73 20 61 20 6d 61 73 73 69 76  lows is a massiv
62a0: 65 20 73 77 69 74 63 68 20 73 74 61 74 65 6d 65  e switch stateme
62b0: 6e 74 20 77 68 65 72 65 20 65 61 63 68 20 63 61  nt where each ca
62c0: 73 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 0a  se implements a.
62d0: 2a 2a 20 73 65 70 61 72 61 74 65 20 69 6e 73 74  ** separate inst
62e0: 72 75 63 74 69 6f 6e 20 69 6e 20 74 68 65 20 76  ruction in the v
62f0: 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20  irtual machine. 
6300: 20 49 66 20 77 65 20 66 6f 6c 6c 6f 77 20 74 68   If we follow th
6310: 65 20 75 73 75 61 6c 0a 2a 2a 20 69 6e 64 65 6e  e usual.** inden
6320: 74 61 74 69 6f 6e 20 63 6f 6e 76 65 6e 74 69 6f  tation conventio
6330: 6e 73 2c 20 65 61 63 68 20 63 61 73 65 20 73 68  ns, each case sh
6340: 6f 75 6c 64 20 62 65 20 69 6e 64 65 6e 74 65 64  ould be indented
6350: 20 62 79 20 36 20 73 70 61 63 65 73 2e 20 20 42   by 6 spaces.  B
6360: 75 74 0a 2a 2a 20 74 68 61 74 20 69 73 20 61 20  ut.** that is a 
6370: 6c 6f 74 20 6f 66 20 77 61 73 74 65 64 20 73 70  lot of wasted sp
6380: 61 63 65 20 6f 6e 20 74 68 65 20 6c 65 66 74 20  ace on the left 
6390: 6d 61 72 67 69 6e 2e 20 20 53 6f 20 74 68 65 20  margin.  So the 
63a0: 63 6f 64 65 20 77 69 74 68 69 6e 0a 2a 2a 20 74  code within.** t
63b0: 68 65 20 73 77 69 74 63 68 20 73 74 61 74 65 6d  he switch statem
63c0: 65 6e 74 20 77 69 6c 6c 20 62 72 65 61 6b 20 77  ent will break w
63d0: 69 74 68 20 63 6f 6e 76 65 6e 74 69 6f 6e 20 61  ith convention a
63e0: 6e 64 20 62 65 20 66 6c 75 73 68 2d 6c 65 66 74  nd be flush-left
63f0: 2e 20 41 6e 6f 74 68 65 72 0a 2a 2a 20 62 69 67  . Another.** big
6400: 20 63 6f 6d 6d 65 6e 74 20 28 73 69 6d 69 6c 61   comment (simila
6410: 72 20 74 6f 20 74 68 69 73 20 6f 6e 65 29 20 77  r to this one) w
6420: 69 6c 6c 20 6d 61 72 6b 20 74 68 65 20 70 6f 69  ill mark the poi
6430: 6e 74 20 69 6e 20 74 68 65 20 63 6f 64 65 20 77  nt in the code w
6440: 68 65 72 65 0a 2a 2a 20 77 65 20 74 72 61 6e 73  here.** we trans
6450: 69 74 69 6f 6e 20 62 61 63 6b 20 74 6f 20 6e 6f  ition back to no
6460: 72 6d 61 6c 20 69 6e 64 65 6e 74 61 74 69 6f 6e  rmal indentation
6470: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 72 6d  ..**.** The form
6480: 61 74 74 69 6e 67 20 6f 66 20 65 61 63 68 20 63  atting of each c
6490: 61 73 65 20 69 73 20 69 6d 70 6f 72 74 61 6e 74  ase is important
64a0: 2e 20 20 54 68 65 20 6d 61 6b 65 66 69 6c 65 20  .  The makefile 
64b0: 66 6f 72 20 53 51 4c 69 74 65 0a 2a 2a 20 67 65  for SQLite.** ge
64c0: 6e 65 72 61 74 65 73 20 74 77 6f 20 43 20 66 69  nerates two C fi
64d0: 6c 65 73 20 22 6f 70 63 6f 64 65 73 2e 68 22 20  les "opcodes.h" 
64e0: 61 6e 64 20 22 6f 70 63 6f 64 65 73 2e 63 22 20  and "opcodes.c" 
64f0: 62 79 20 73 63 61 6e 6e 69 6e 67 20 74 68 69 73  by scanning this
6500: 0a 2a 2a 20 66 69 6c 65 20 6c 6f 6f 6b 69 6e 67  .** file looking
6510: 20 66 6f 72 20 6c 69 6e 65 73 20 74 68 61 74 20   for lines that 
6520: 62 65 67 69 6e 20 77 69 74 68 20 22 63 61 73 65  begin with "case
6530: 20 4f 50 5f 22 2e 20 20 54 68 65 20 6f 70 63 6f   OP_".  The opco
6540: 64 65 73 2e 68 20 66 69 6c 65 73 0a 2a 2a 20 77  des.h files.** w
6550: 69 6c 6c 20 62 65 20 66 69 6c 6c 65 64 20 77 69  ill be filled wi
6560: 74 68 20 23 64 65 66 69 6e 65 73 20 74 68 61 74  th #defines that
6570: 20 67 69 76 65 20 75 6e 69 71 75 65 20 69 6e 74   give unique int
6580: 65 67 65 72 20 76 61 6c 75 65 73 20 74 6f 20 65  eger values to e
6590: 61 63 68 0a 2a 2a 20 6f 70 63 6f 64 65 20 61 6e  ach.** opcode an
65a0: 64 20 74 68 65 20 6f 70 63 6f 64 65 73 2e 63 20  d the opcodes.c 
65b0: 66 69 6c 65 20 69 73 20 66 69 6c 6c 65 64 20 77  file is filled w
65c0: 69 74 68 20 61 6e 20 61 72 72 61 79 20 6f 66 20  ith an array of 
65d0: 73 74 72 69 6e 67 73 20 77 68 65 72 65 0a 2a 2a  strings where.**
65e0: 20 65 61 63 68 20 73 74 72 69 6e 67 20 69 73 20   each string is 
65f0: 74 68 65 20 73 79 6d 62 6f 6c 69 63 20 6e 61 6d  the symbolic nam
6600: 65 20 66 6f 72 20 74 68 65 20 63 6f 72 72 65 73  e for the corres
6610: 70 6f 6e 64 69 6e 67 20 6f 70 63 6f 64 65 2e 20  ponding opcode. 
6620: 20 49 66 20 74 68 65 0a 2a 2a 20 63 61 73 65 20   If the.** case 
6630: 73 74 61 74 65 6d 65 6e 74 20 69 73 20 66 6f 6c  statement is fol
6640: 6c 6f 77 65 64 20 62 79 20 61 20 63 6f 6d 6d 65  lowed by a comme
6650: 6e 74 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22  nt of the form "
6660: 2f 23 20 73 61 6d 65 20 61 73 20 2e 2e 2e 20 23  /# same as ... #
6670: 2f 22 0a 2a 2a 20 74 68 61 74 20 63 6f 6d 6d 65  /".** that comme
6680: 6e 74 20 69 73 20 75 73 65 64 20 74 6f 20 64 65  nt is used to de
6690: 74 65 72 6d 69 6e 65 20 74 68 65 20 70 61 72 74  termine the part
66a0: 69 63 75 6c 61 72 20 76 61 6c 75 65 20 6f 66 20  icular value of 
66b0: 74 68 65 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a  the opcode..**.*
66c0: 2a 20 4f 74 68 65 72 20 6b 65 79 77 6f 72 64 73  * Other keywords
66d0: 20 69 6e 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20   in the comment 
66e0: 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20 65 61 63  that follows eac
66f0: 68 20 63 61 73 65 20 61 72 65 20 75 73 65 64 20  h case are used 
6700: 74 6f 0a 2a 2a 20 63 6f 6e 73 74 72 75 63 74 20  to.** construct 
6710: 74 68 65 20 4f 50 46 4c 47 5f 49 4e 49 54 49 41  the OPFLG_INITIA
6720: 4c 49 5a 45 52 20 76 61 6c 75 65 20 74 68 61 74  LIZER value that
6730: 20 69 6e 69 74 69 61 6c 69 7a 65 73 20 6f 70 63   initializes opc
6740: 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d 2e 0a 2a  odeProperty[]..*
6750: 2a 20 4b 65 79 77 6f 72 64 73 20 69 6e 63 6c 75  * Keywords inclu
6760: 64 65 3a 20 69 6e 31 2c 20 69 6e 32 2c 20 69 6e  de: in1, in2, in
6770: 33 2c 20 6f 75 74 32 2c 20 6f 75 74 33 2e 20 20  3, out2, out3.  
6780: 53 65 65 0a 2a 2a 20 74 68 65 20 6d 6b 6f 70 63  See.** the mkopc
6790: 6f 64 65 68 2e 61 77 6b 20 73 63 72 69 70 74 20  odeh.awk script 
67a0: 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
67b0: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nformation..**.*
67c0: 2a 20 44 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20  * Documentation 
67d0: 61 62 6f 75 74 20 56 44 42 45 20 6f 70 63 6f 64  about VDBE opcod
67e0: 65 73 20 69 73 20 67 65 6e 65 72 61 74 65 64 20  es is generated 
67f0: 62 79 20 73 63 61 6e 6e 69 6e 67 20 74 68 69 73  by scanning this
6800: 20 66 69 6c 65 0a 2a 2a 20 66 6f 72 20 6c 69 6e   file.** for lin
6810: 65 73 20 6f 66 20 74 68 61 74 20 63 6f 6e 74 61  es of that conta
6820: 69 6e 20 22 4f 70 63 6f 64 65 3a 22 2e 20 20 54  in "Opcode:".  T
6830: 68 61 74 20 6c 69 6e 65 20 61 6e 64 20 61 6c 6c  hat line and all
6840: 20 73 75 62 73 65 71 75 65 6e 74 0a 2a 2a 20 63   subsequent.** c
6850: 6f 6d 6d 65 6e 74 20 6c 69 6e 65 73 20 61 72 65  omment lines are
6860: 20 75 73 65 64 20 69 6e 20 74 68 65 20 67 65 6e   used in the gen
6870: 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6f  eration of the o
6880: 70 63 6f 64 65 2e 68 74 6d 6c 20 64 6f 63 75 6d  pcode.html docum
6890: 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20 66 69 6c 65  entation.** file
68a0: 2e 0a 2a 2a 0a 2a 2a 20 53 55 4d 4d 41 52 59 3a  ..**.** SUMMARY:
68b0: 0a 2a 2a 0a 2a 2a 20 20 20 20 20 46 6f 72 6d 61  .**.**     Forma
68c0: 74 74 69 6e 67 20 69 73 20 69 6d 70 6f 72 74 61  tting is importa
68d0: 6e 74 20 74 6f 20 73 63 72 69 70 74 73 20 74 68  nt to scripts th
68e0: 61 74 20 73 63 61 6e 20 74 68 69 73 20 66 69 6c  at scan this fil
68f0: 65 2e 0a 2a 2a 20 20 20 20 20 44 6f 20 6e 6f 74  e..**     Do not
6900: 20 64 65 76 69 61 74 65 20 66 72 6f 6d 20 74 68   deviate from th
6910: 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 73 74 79  e formatting sty
6920: 6c 65 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20  le currently in 
6930: 75 73 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a  use..**.********
6940: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6950: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6960: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6970: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6980: 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64  *****/../* Opcod
6990: 65 3a 20 20 47 6f 74 6f 20 2a 20 50 32 20 2a 20  e:  Goto * P2 * 
69a0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6e 20 75 6e 63  * *.**.** An unc
69b0: 6f 6e 64 69 74 69 6f 6e 61 6c 20 6a 75 6d 70 20  onditional jump 
69c0: 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a  to address P2..*
69d0: 2a 20 54 68 65 20 6e 65 78 74 20 69 6e 73 74 72  * The next instr
69e0: 75 63 74 69 6f 6e 20 65 78 65 63 75 74 65 64 20  uction executed 
69f0: 77 69 6c 6c 20 62 65 20 0a 2a 2a 20 74 68 65 20  will be .** the 
6a00: 6f 6e 65 20 61 74 20 69 6e 64 65 78 20 50 32 20  one at index P2 
6a10: 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69  from the beginni
6a20: 6e 67 20 6f 66 0a 2a 2a 20 74 68 65 20 70 72 6f  ng of.** the pro
6a30: 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  gram..**.** The 
6a40: 50 31 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  P1 parameter is 
6a50: 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 75 73 65  not actually use
6a60: 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65  d by this opcode
6a70: 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 74 0a 2a  .  However, it.*
6a80: 2a 20 69 73 20 73 6f 6d 65 74 69 6d 65 73 20 73  * is sometimes s
6a90: 65 74 20 74 6f 20 31 20 69 6e 73 74 65 61 64 20  et to 1 instead 
6aa0: 6f 66 20 30 20 61 73 20 61 20 68 69 6e 74 20 74  of 0 as a hint t
6ab0: 6f 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69  o the command-li
6ac0: 6e 65 20 73 68 65 6c 6c 0a 2a 2a 20 74 68 61 74  ne shell.** that
6ad0: 20 74 68 69 73 20 47 6f 74 6f 20 69 73 20 74 68   this Goto is th
6ae0: 65 20 62 6f 74 74 6f 6d 20 6f 66 20 61 20 6c 6f  e bottom of a lo
6af0: 6f 70 20 61 6e 64 20 74 68 61 74 20 74 68 65 20  op and that the 
6b00: 6c 69 6e 65 73 20 66 72 6f 6d 20 50 32 20 64 6f  lines from P2 do
6b10: 77 6e 0a 2a 2a 20 74 6f 20 74 68 65 20 63 75 72  wn.** to the cur
6b20: 72 65 6e 74 20 6c 69 6e 65 20 73 68 6f 75 6c 64  rent line should
6b30: 20 62 65 20 69 6e 64 65 6e 74 65 64 20 66 6f 72   be indented for
6b40: 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74 2e   EXPLAIN output.
6b50: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 74 6f  .*/.case OP_Goto
6b60: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
6b70: 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 6a 75 6d 70 5f  /* jump */.jump_
6b80: 74 6f 5f 70 32 5f 61 6e 64 5f 63 68 65 63 6b 5f  to_p2_and_check_
6b90: 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20  for_interrupt:. 
6ba0: 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d   pOp = &aOp[pOp-
6bb0: 3e 70 32 20 2d 20 31 5d 3b 0a 0a 20 20 2f 2a 20  >p2 - 1];..  /* 
6bc0: 4f 70 63 6f 64 65 73 20 74 68 61 74 20 61 72 65  Opcodes that are
6bd0: 20 75 73 65 64 20 61 73 20 74 68 65 20 62 6f 74   used as the bot
6be0: 74 6f 6d 20 6f 66 20 61 20 6c 6f 6f 70 20 28 4f  tom of a loop (O
6bf0: 50 5f 4e 65 78 74 2c 20 4f 50 5f 50 72 65 76 2c  P_Next, OP_Prev,
6c00: 0a 20 20 2a 2a 20 4f 50 5f 56 4e 65 78 74 2c 20  .  ** OP_VNext, 
6c10: 6f 72 20 4f 50 5f 53 6f 72 74 65 72 4e 65 78 74  or OP_SorterNext
6c20: 29 20 61 6c 6c 20 6a 75 6d 70 20 68 65 72 65 20  ) all jump here 
6c30: 75 70 6f 6e 0a 20 20 2a 2a 20 63 6f 6d 70 6c 65  upon.  ** comple
6c40: 74 69 6f 6e 2e 20 20 43 68 65 63 6b 20 74 6f 20  tion.  Check to 
6c50: 73 65 65 20 69 66 20 73 71 6c 69 74 65 33 5f 69  see if sqlite3_i
6c60: 6e 74 65 72 72 75 70 74 28 29 20 68 61 73 20 62  nterrupt() has b
6c70: 65 65 6e 20 63 61 6c 6c 65 64 0a 20 20 2a 2a 20  een called.  ** 
6c80: 6f 72 20 69 66 20 74 68 65 20 70 72 6f 67 72 65  or if the progre
6c90: 73 73 20 63 61 6c 6c 62 61 63 6b 20 6e 65 65 64  ss callback need
6ca0: 73 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65 64 2e  s to be invoked.
6cb0: 20 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 69 73   .  **.  ** This
6cc0: 20 63 6f 64 65 20 75 73 65 73 20 75 6e 73 74 72   code uses unstr
6cd0: 75 63 74 75 72 65 64 20 22 67 6f 74 6f 22 20 73  uctured "goto" s
6ce0: 74 61 74 65 6d 65 6e 74 73 20 61 6e 64 20 64 6f  tatements and do
6cf0: 65 73 20 6e 6f 74 20 6c 6f 6f 6b 20 63 6c 65 61  es not look clea
6d00: 6e 2e 0a 20 20 2a 2a 20 42 75 74 20 74 68 61 74  n..  ** But that
6d10: 20 69 73 20 6e 6f 74 20 64 75 65 20 74 6f 20 73   is not due to s
6d20: 6c 6f 70 70 79 20 63 6f 64 69 6e 67 20 68 61 62  loppy coding hab
6d30: 69 74 73 2e 20 54 68 65 20 63 6f 64 65 20 69 73  its. The code is
6d40: 20 77 72 69 74 74 65 6e 20 74 68 69 73 0a 20 20   written this.  
6d50: 2a 2a 20 77 61 79 20 66 6f 72 20 70 65 72 66 6f  ** way for perfo
6d60: 72 6d 61 6e 63 65 2c 20 74 6f 20 61 76 6f 69 64  rmance, to avoid
6d70: 20 68 61 76 69 6e 67 20 74 6f 20 72 75 6e 20 74   having to run t
6d80: 68 65 20 69 6e 74 65 72 72 75 70 74 20 61 6e 64  he interrupt and
6d90: 20 70 72 6f 67 72 65 73 73 0a 20 20 2a 2a 20 63   progress.  ** c
6da0: 68 65 63 6b 73 20 6f 6e 20 65 76 65 72 79 20 6f  hecks on every o
6db0: 70 63 6f 64 65 2e 20 20 54 68 69 73 20 68 65 6c  pcode.  This hel
6dc0: 70 73 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  ps sqlite3_step(
6dd0: 29 20 74 6f 20 72 75 6e 20 61 62 6f 75 74 20 31  ) to run about 1
6de0: 2e 35 25 0a 20 20 2a 2a 20 66 61 73 74 65 72 20  .5%.  ** faster 
6df0: 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 22 76 61  according to "va
6e00: 6c 67 72 69 6e 64 20 2d 2d 74 6f 6f 6c 3d 63 61  lgrind --tool=ca
6e10: 63 68 65 67 72 69 6e 64 22 20 2a 2f 0a 63 68 65  chegrind" */.che
6e20: 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74  ck_for_interrupt
6e30: 3a 0a 20 20 69 66 28 20 64 62 2d 3e 75 31 2e 69  :.  if( db->u1.i
6e40: 73 49 6e 74 65 72 72 75 70 74 65 64 20 29 20 67  sInterrupted ) g
6e50: 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
6e60: 5f 69 6e 74 65 72 72 75 70 74 3b 0a 23 69 66 6e  _interrupt;.#ifn
6e70: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
6e80: 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43  PROGRESS_CALLBAC
6e90: 4b 0a 20 20 2f 2a 20 43 61 6c 6c 20 74 68 65 20  K.  /* Call the 
6ea0: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
6eb0: 6b 20 69 66 20 69 74 20 69 73 20 63 6f 6e 66 69  k if it is confi
6ec0: 67 75 72 65 64 20 61 6e 64 20 74 68 65 20 72 65  gured and the re
6ed0: 71 75 69 72 65 64 20 6e 75 6d 62 65 72 0a 20 20  quired number.  
6ee0: 2a 2a 20 6f 66 20 56 44 42 45 20 6f 70 73 20 68  ** of VDBE ops h
6ef0: 61 76 65 20 62 65 65 6e 20 65 78 65 63 75 74 65  ave been execute
6f00: 64 20 28 65 69 74 68 65 72 20 73 69 6e 63 65 20  d (either since 
6f10: 74 68 69 73 20 69 6e 76 6f 63 61 74 69 6f 6e 20  this invocation 
6f20: 6f 66 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56  of.  ** sqlite3V
6f30: 64 62 65 45 78 65 63 28 29 20 6f 72 20 73 69 6e  dbeExec() or sin
6f40: 63 65 20 6c 61 73 74 20 74 69 6d 65 20 74 68 65  ce last time the
6f50: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
6f60: 63 6b 20 77 61 73 20 63 61 6c 6c 65 64 29 2e 0a  ck was called)..
6f70: 20 20 2a 2a 20 49 66 20 74 68 65 20 70 72 6f 67    ** If the prog
6f80: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 72 65  ress callback re
6f90: 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  turns non-zero, 
6fa0: 65 78 69 74 20 74 68 65 20 76 69 72 74 75 61 6c  exit the virtual
6fb0: 20 6d 61 63 68 69 6e 65 20 77 69 74 68 0a 20 20   machine with.  
6fc0: 2a 2a 20 61 20 72 65 74 75 72 6e 20 63 6f 64 65  ** a return code
6fd0: 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 2e 0a 20   SQLITE_ABORT.. 
6fe0: 20 2a 2f 0a 20 20 69 66 28 20 6e 56 6d 53 74 65   */.  if( nVmSte
6ff0: 70 3e 3d 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69  p>=nProgressLimi
7000: 74 20 26 26 20 64 62 2d 3e 78 50 72 6f 67 72 65  t && db->xProgre
7010: 73 73 21 3d 30 20 29 7b 0a 20 20 20 20 61 73 73  ss!=0 ){.    ass
7020: 65 72 74 28 20 64 62 2d 3e 6e 50 72 6f 67 72 65  ert( db->nProgre
7030: 73 73 4f 70 73 21 3d 30 20 29 3b 0a 20 20 20 20  ssOps!=0 );.    
7040: 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d  nProgressLimit =
7050: 20 6e 56 6d 53 74 65 70 20 2b 20 64 62 2d 3e 6e   nVmStep + db->n
7060: 50 72 6f 67 72 65 73 73 4f 70 73 20 2d 20 28 6e  ProgressOps - (n
7070: 56 6d 53 74 65 70 25 64 62 2d 3e 6e 50 72 6f 67  VmStep%db->nProg
7080: 72 65 73 73 4f 70 73 29 3b 0a 20 20 20 20 69 66  ressOps);.    if
7090: 28 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 28  ( db->xProgress(
70a0: 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41 72 67  db->pProgressArg
70b0: 29 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  ) ){.      rc = 
70c0: 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54  SQLITE_INTERRUPT
70d0: 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f  ;.      goto abo
70e0: 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
70f0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69  .    }.  }.#endi
7100: 66 0a 20 20 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  f.  .  break;.}.
7110: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 73  ./* Opcode:  Gos
7120: 75 62 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ub P1 P2 * * *.*
7130: 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63  *.** Write the c
7140: 75 72 72 65 6e 74 20 61 64 64 72 65 73 73 20 6f  urrent address o
7150: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 31 0a  nto register P1.
7160: 2a 2a 20 61 6e 64 20 74 68 65 6e 20 6a 75 6d 70  ** and then jump
7170: 20 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e 0a   to address P2..
7180: 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 73 75 62  */.case OP_Gosub
7190: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
71a0: 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65  * jump */.  asse
71b0: 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26  rt( pOp->p1>0 &&
71c0: 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d   pOp->p1<=(p->nM
71d0: 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
71e0: 72 29 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26  r) );.  pIn1 = &
71f0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
7200: 20 61 73 73 65 72 74 28 20 56 64 62 65 4d 65 6d   assert( VdbeMem
7210: 44 79 6e 61 6d 69 63 28 70 49 6e 31 29 3d 3d 30  Dynamic(pIn1)==0
7220: 20 29 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f   );.  memAboutTo
7230: 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b  Change(p, pIn1);
7240: 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d  .  pIn1->flags =
7250: 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 49 6e 31   MEM_Int;.  pIn1
7260: 2d 3e 75 2e 69 20 3d 20 28 69 6e 74 29 28 70 4f  ->u.i = (int)(pO
7270: 70 2d 61 4f 70 29 3b 0a 20 20 52 45 47 49 53 54  p-aOp);.  REGIST
7280: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31  ER_TRACE(pOp->p1
7290: 2c 20 70 49 6e 31 29 3b 0a 0a 20 20 2f 2a 20 4d  , pIn1);..  /* M
72a0: 6f 73 74 20 6a 75 6d 70 20 6f 70 65 72 61 74 69  ost jump operati
72b0: 6f 6e 73 20 64 6f 20 61 20 67 6f 74 6f 20 74 6f  ons do a goto to
72c0: 20 74 68 69 73 20 73 70 6f 74 20 69 6e 20 6f 72   this spot in or
72d0: 64 65 72 20 74 6f 20 75 70 64 61 74 65 0a 20 20  der to update.  
72e0: 2a 2a 20 74 68 65 20 70 4f 70 20 70 6f 69 6e 74  ** the pOp point
72f0: 65 72 2e 20 2a 2f 0a 6a 75 6d 70 5f 74 6f 5f 70  er. */.jump_to_p
7300: 32 3a 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b  2:.  pOp = &aOp[
7310: 70 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20 20  pOp->p2 - 1];.  
7320: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
7330: 6f 64 65 3a 20 20 52 65 74 75 72 6e 20 50 31 20  ode:  Return P1 
7340: 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75  * * * *.**.** Ju
7350: 6d 70 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  mp to the next i
7360: 6e 73 74 72 75 63 74 69 6f 6e 20 61 66 74 65 72  nstruction after
7370: 20 74 68 65 20 61 64 64 72 65 73 73 20 69 6e 20   the address in 
7380: 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 41 66  register P1.  Af
7390: 74 65 72 0a 2a 2a 20 74 68 65 20 6a 75 6d 70 2c  ter.** the jump,
73a0: 20 72 65 67 69 73 74 65 72 20 50 31 20 62 65 63   register P1 bec
73b0: 6f 6d 65 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a  omes undefined..
73c0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 74 75 72  */.case OP_Retur
73d0: 6e 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  n: {           /
73e0: 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  * in1 */.  pIn1 
73f0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
7400: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  ;.  assert( pIn1
7410: 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74  ->flags==MEM_Int
7420: 20 29 3b 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70   );.  pOp = &aOp
7430: 5b 70 49 6e 31 2d 3e 75 2e 69 5d 3b 0a 20 20 70  [pIn1->u.i];.  p
7440: 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  In1->flags = MEM
7450: 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62 72  _Undefined;.  br
7460: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
7470: 65 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65  e: InitCoroutine
7480: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
7490: 0a 2a 2a 20 53 65 74 20 75 70 20 72 65 67 69 73  .** Set up regis
74a0: 74 65 72 20 50 31 20 73 6f 20 74 68 61 74 20 69  ter P1 so that i
74b0: 74 20 77 69 6c 6c 20 59 69 65 6c 64 20 74 6f 20  t will Yield to 
74c0: 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 0a 2a 2a  the coroutine.**
74d0: 20 6c 6f 63 61 74 65 64 20 61 74 20 61 64 64 72   located at addr
74e0: 65 73 73 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66  ess P3..**.** If
74f0: 20 50 32 21 3d 30 20 74 68 65 6e 20 74 68 65 20   P2!=0 then the 
7500: 63 6f 72 6f 75 74 69 6e 65 20 69 6d 70 6c 65 6d  coroutine implem
7510: 65 6e 74 61 74 69 6f 6e 20 69 6d 6d 65 64 69 61  entation immedia
7520: 74 65 6c 79 20 66 6f 6c 6c 6f 77 73 0a 2a 2a 20  tely follows.** 
7530: 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 53 6f  this opcode.  So
7540: 20 6a 75 6d 70 20 6f 76 65 72 20 74 68 65 20 63   jump over the c
7550: 6f 72 6f 75 74 69 6e 65 20 69 6d 70 6c 65 6d 65  oroutine impleme
7560: 6e 74 61 74 69 6f 6e 20 74 6f 0a 2a 2a 20 61 64  ntation to.** ad
7570: 64 72 65 73 73 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  dress P2..**.** 
7580: 53 65 65 20 61 6c 73 6f 3a 20 45 6e 64 43 6f 72  See also: EndCor
7590: 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f  outine.*/.case O
75a0: 50 5f 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65 3a  P_InitCoroutine:
75b0: 20 7b 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a   {     /* jump *
75c0: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
75d0: 3e 70 31 3e 30 20 26 26 20 20 70 4f 70 2d 3e 70  >p1>0 &&  pOp->p
75e0: 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  1<=(p->nMem+1 - 
75f0: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
7600: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
7610: 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c 70  >=0 && pOp->p2<p
7620: 2d 3e 6e 4f 70 20 29 3b 0a 20 20 61 73 73 65 72  ->nOp );.  asser
7630: 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30 20 26 26  t( pOp->p3>=0 &&
7640: 20 70 4f 70 2d 3e 70 33 3c 70 2d 3e 6e 4f 70 20   pOp->p3<p->nOp 
7650: 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  );.  pOut = &aMe
7660: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
7670: 73 65 72 74 28 20 21 56 64 62 65 4d 65 6d 44 79  sert( !VdbeMemDy
7680: 6e 61 6d 69 63 28 70 4f 75 74 29 20 29 3b 0a 20  namic(pOut) );. 
7690: 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 4f 70   pOut->u.i = pOp
76a0: 2d 3e 70 33 20 2d 20 31 3b 0a 20 20 70 4f 75 74  ->p3 - 1;.  pOut
76b0: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
76c0: 74 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  t;.  if( pOp->p2
76d0: 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f   ) goto jump_to_
76e0: 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  p2;.  break;.}..
76f0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 45 6e 64 43  /* Opcode:  EndC
7700: 6f 72 6f 75 74 69 6e 65 20 50 31 20 2a 20 2a 20  oroutine P1 * * 
7710: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e  * *.**.** The in
7720: 73 74 72 75 63 74 69 6f 6e 20 61 74 20 74 68 65  struction at the
7730: 20 61 64 64 72 65 73 73 20 69 6e 20 72 65 67 69   address in regi
7740: 73 74 65 72 20 50 31 20 69 73 20 61 20 59 69 65  ster P1 is a Yie
7750: 6c 64 2e 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74  ld..** Jump to t
7760: 68 65 20 50 32 20 70 61 72 61 6d 65 74 65 72 20  he P2 parameter 
7770: 6f 66 20 74 68 61 74 20 59 69 65 6c 64 2e 0a 2a  of that Yield..*
7780: 2a 20 41 66 74 65 72 20 74 68 65 20 6a 75 6d 70  * After the jump
7790: 2c 20 72 65 67 69 73 74 65 72 20 50 31 20 62 65  , register P1 be
77a0: 63 6f 6d 65 73 20 75 6e 64 65 66 69 6e 65 64 2e  comes undefined.
77b0: 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
77c0: 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65 0a 2a   InitCoroutine.*
77d0: 2f 0a 63 61 73 65 20 4f 50 5f 45 6e 64 43 6f 72  /.case OP_EndCor
77e0: 6f 75 74 69 6e 65 3a 20 7b 20 20 20 20 20 20 20  outine: {       
77f0: 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20      /* in1 */.  
7800: 56 64 62 65 4f 70 20 2a 70 43 61 6c 6c 65 72 3b  VdbeOp *pCaller;
7810: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
7820: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
7830: 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3d  rt( pIn1->flags=
7840: 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73  =MEM_Int );.  as
7850: 73 65 72 74 28 20 70 49 6e 31 2d 3e 75 2e 69 3e  sert( pIn1->u.i>
7860: 3d 30 20 26 26 20 70 49 6e 31 2d 3e 75 2e 69 3c  =0 && pIn1->u.i<
7870: 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 43 61 6c  p->nOp );.  pCal
7880: 6c 65 72 20 3d 20 26 61 4f 70 5b 70 49 6e 31 2d  ler = &aOp[pIn1-
7890: 3e 75 2e 69 5d 3b 0a 20 20 61 73 73 65 72 74 28  >u.i];.  assert(
78a0: 20 70 43 61 6c 6c 65 72 2d 3e 6f 70 63 6f 64 65   pCaller->opcode
78b0: 3d 3d 4f 50 5f 59 69 65 6c 64 20 29 3b 0a 20 20  ==OP_Yield );.  
78c0: 61 73 73 65 72 74 28 20 70 43 61 6c 6c 65 72 2d  assert( pCaller-
78d0: 3e 70 32 3e 3d 30 20 26 26 20 70 43 61 6c 6c 65  >p2>=0 && pCalle
78e0: 72 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a  r->p2<p->nOp );.
78f0: 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 43 61    pOp = &aOp[pCa
7900: 6c 6c 65 72 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20  ller->p2 - 1];. 
7910: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d   pIn1->flags = M
7920: 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20  EM_Undefined;.  
7930: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
7940: 6f 64 65 3a 20 20 59 69 65 6c 64 20 50 31 20 50  ode:  Yield P1 P
7950: 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 77  2 * * *.**.** Sw
7960: 61 70 20 74 68 65 20 70 72 6f 67 72 61 6d 20 63  ap the program c
7970: 6f 75 6e 74 65 72 20 77 69 74 68 20 74 68 65 20  ounter with the 
7980: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
7990: 72 20 50 31 2e 20 20 54 68 69 73 0a 2a 2a 20 68  r P1.  This.** h
79a0: 61 73 20 74 68 65 20 65 66 66 65 63 74 20 6f 66  as the effect of
79b0: 20 79 69 65 6c 64 69 6e 67 20 74 6f 20 61 20 63   yielding to a c
79c0: 6f 72 6f 75 74 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20  oroutine..**.** 
79d0: 49 66 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65  If the coroutine
79e0: 20 74 68 61 74 20 69 73 20 6c 61 75 6e 63 68 65   that is launche
79f0: 64 20 62 79 20 74 68 69 73 20 69 6e 73 74 72 75  d by this instru
7a00: 63 74 69 6f 6e 20 65 6e 64 73 20 77 69 74 68 0a  ction ends with.
7a10: 2a 2a 20 59 69 65 6c 64 20 6f 72 20 52 65 74 75  ** Yield or Retu
7a20: 72 6e 20 74 68 65 6e 20 63 6f 6e 74 69 6e 75 65  rn then continue
7a30: 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
7a40: 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69  truction.  But i
7a50: 66 0a 2a 2a 20 74 68 65 20 63 6f 72 6f 75 74 69  f.** the corouti
7a60: 6e 65 20 6c 61 75 6e 63 68 65 64 20 62 79 20 74  ne launched by t
7a70: 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
7a80: 65 6e 64 73 20 77 69 74 68 0a 2a 2a 20 45 6e 64  ends with.** End
7a90: 43 6f 72 6f 75 74 69 6e 65 2c 20 74 68 65 6e 20  Coroutine, then 
7aa0: 6a 75 6d 70 20 74 6f 20 50 32 20 72 61 74 68 65  jump to P2 rathe
7ab0: 72 20 74 68 61 6e 20 63 6f 6e 74 69 6e 75 69 6e  r than continuin
7ac0: 67 20 77 69 74 68 20 74 68 65 0a 2a 2a 20 6e 65  g with the.** ne
7ad0: 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  xt instruction..
7ae0: 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
7af0: 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f  InitCoroutine.*/
7b00: 0a 63 61 73 65 20 4f 50 5f 59 69 65 6c 64 3a 20  .case OP_Yield: 
7b10: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
7b20: 69 6e 31 2c 20 6a 75 6d 70 20 2a 2f 0a 20 20 69  in1, jump */.  i
7b30: 6e 74 20 70 63 44 65 73 74 3b 0a 20 20 70 49 6e  nt pcDest;.  pIn
7b40: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
7b50: 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 56 64  1];.  assert( Vd
7b60: 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 49 6e  beMemDynamic(pIn
7b70: 31 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 2d  1)==0 );.  pIn1-
7b80: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
7b90: 3b 0a 20 20 70 63 44 65 73 74 20 3d 20 28 69 6e  ;.  pcDest = (in
7ba0: 74 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70  t)pIn1->u.i;.  p
7bb0: 49 6e 31 2d 3e 75 2e 69 20 3d 20 28 69 6e 74 29  In1->u.i = (int)
7bc0: 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 52  (pOp - aOp);.  R
7bd0: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
7be0: 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20  p->p1, pIn1);.  
7bf0: 70 4f 70 20 3d 20 26 61 4f 70 5b 70 63 44 65 73  pOp = &aOp[pcDes
7c00: 74 5d 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t];.  break;.}..
7c10: 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61 6c 74  /* Opcode:  Halt
7c20: 49 66 4e 75 6c 6c 20 20 50 31 20 50 32 20 50 33  IfNull  P1 P2 P3
7c30: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
7c40: 69 73 3a 20 69 66 20 72 5b 50 33 5d 3d 6e 75 6c  is: if r[P3]=nul
7c50: 6c 20 68 61 6c 74 0a 2a 2a 0a 2a 2a 20 43 68 65  l halt.**.** Che
7c60: 63 6b 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ck the value in 
7c70: 72 65 67 69 73 74 65 72 20 50 33 2e 20 20 49 66  register P3.  If
7c80: 20 69 74 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e   it is NULL then
7c90: 20 48 61 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 70   Halt using.** p
7ca0: 61 72 61 6d 65 74 65 72 20 50 31 2c 20 50 32 2c  arameter P1, P2,
7cb0: 20 61 6e 64 20 50 34 20 61 73 20 69 66 20 74 68   and P4 as if th
7cc0: 69 73 20 77 65 72 65 20 61 20 48 61 6c 74 20 69  is were a Halt i
7cd0: 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 49 66 20  nstruction.  If 
7ce0: 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20  the.** value in 
7cf0: 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 6e  register P3 is n
7d00: 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68  ot NULL, then th
7d10: 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20 61 20  is routine is a 
7d20: 6e 6f 2d 6f 70 2e 0a 2a 2a 20 54 68 65 20 50 35  no-op..** The P5
7d30: 20 70 61 72 61 6d 65 74 65 72 20 73 68 6f 75 6c   parameter shoul
7d40: 64 20 62 65 20 31 2e 0a 2a 2f 0a 63 61 73 65 20  d be 1..*/.case 
7d50: 4f 50 5f 48 61 6c 74 49 66 4e 75 6c 6c 3a 20 7b  OP_HaltIfNull: {
7d60: 20 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a        /* in3 */.
7d70: 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
7d80: 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20  Op->p3];.#ifdef 
7d90: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69  SQLITE_DEBUG.  i
7da0: 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 4f 45 5f 41  f( pOp->p2==OE_A
7db0: 62 6f 72 74 20 29 7b 20 73 71 6c 69 74 65 33 56  bort ){ sqlite3V
7dc0: 64 62 65 41 73 73 65 72 74 41 62 6f 72 74 61 62  dbeAssertAbortab
7dd0: 6c 65 28 70 29 3b 20 7d 0a 23 65 6e 64 69 66 0a  le(p); }.#endif.
7de0: 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61    if( (pIn3->fla
7df0: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d  gs & MEM_Null)==
7e00: 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f 2a 20  0 ) break;.  /* 
7e10: 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74  Fall through int
7e20: 6f 20 4f 50 5f 48 61 6c 74 20 2a 2f 0a 7d 0a 0a  o OP_Halt */.}..
7e30: 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61 6c 74  /* Opcode:  Halt
7e40: 20 50 31 20 50 32 20 2a 20 50 34 20 50 35 0a 2a   P1 P2 * P4 P5.*
7e50: 2a 0a 2a 2a 20 45 78 69 74 20 69 6d 6d 65 64 69  *.** Exit immedi
7e60: 61 74 65 6c 79 2e 20 20 41 6c 6c 20 6f 70 65 6e  ately.  All open
7e70: 20 63 75 72 73 6f 72 73 2c 20 65 74 63 20 61 72   cursors, etc ar
7e80: 65 20 63 6c 6f 73 65 64 0a 2a 2a 20 61 75 74 6f  e closed.** auto
7e90: 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a  matically..**.**
7ea0: 20 50 31 20 69 73 20 74 68 65 20 72 65 73 75 6c   P1 is the resul
7eb0: 74 20 63 6f 64 65 20 72 65 74 75 72 6e 65 64 20  t code returned 
7ec0: 62 79 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28  by sqlite3_exec(
7ed0: 29 2c 20 73 71 6c 69 74 65 33 5f 72 65 73 65 74  ), sqlite3_reset
7ee0: 28 29 2c 0a 2a 2a 20 6f 72 20 73 71 6c 69 74 65  (),.** or sqlite
7ef0: 33 5f 66 69 6e 61 6c 69 7a 65 28 29 2e 20 20 46  3_finalize().  F
7f00: 6f 72 20 61 20 6e 6f 72 6d 61 6c 20 68 61 6c 74  or a normal halt
7f10: 2c 20 74 68 69 73 20 73 68 6f 75 6c 64 20 62 65  , this should be
7f20: 20 53 51 4c 49 54 45 5f 4f 4b 20 28 30 29 2e 0a   SQLITE_OK (0)..
7f30: 2a 2a 20 46 6f 72 20 65 72 72 6f 72 73 2c 20 69  ** For errors, i
7f40: 74 20 63 61 6e 20 62 65 20 73 6f 6d 65 20 6f 74  t can be some ot
7f50: 68 65 72 20 76 61 6c 75 65 2e 20 20 49 66 20 50  her value.  If P
7f60: 31 21 3d 30 20 74 68 65 6e 20 50 32 20 77 69 6c  1!=0 then P2 wil
7f70: 6c 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77  l determine.** w
7f80: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 6f  hether or not to
7f90: 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 63 75   rollback the cu
7fa0: 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  rrent transactio
7fb0: 6e 2e 20 20 44 6f 20 6e 6f 74 20 72 6f 6c 6c 62  n.  Do not rollb
7fc0: 61 63 6b 0a 2a 2a 20 69 66 20 50 32 3d 3d 4f 45  ack.** if P2==OE
7fd0: 5f 46 61 69 6c 2e 20 44 6f 20 74 68 65 20 72 6f  _Fail. Do the ro
7fe0: 6c 6c 62 61 63 6b 20 69 66 20 50 32 3d 3d 4f 45  llback if P2==OE
7ff0: 5f 52 6f 6c 6c 62 61 63 6b 2e 20 20 49 66 20 50  _Rollback.  If P
8000: 32 3d 3d 4f 45 5f 41 62 6f 72 74 2c 0a 2a 2a 20  2==OE_Abort,.** 
8010: 74 68 65 6e 20 62 61 63 6b 20 6f 75 74 20 61 6c  then back out al
8020: 6c 20 63 68 61 6e 67 65 73 20 74 68 61 74 20 68  l changes that h
8030: 61 76 65 20 6f 63 63 75 72 72 65 64 20 64 75 72  ave occurred dur
8040: 69 6e 67 20 74 68 69 73 20 65 78 65 63 75 74 69  ing this executi
8050: 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 56 44 42  on of the.** VDB
8060: 45 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20 72 6f  E, but do not ro
8070: 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e 73  llback the trans
8080: 61 63 74 69 6f 6e 2e 20 0a 2a 2a 0a 2a 2a 20 49  action. .**.** I
8090: 66 20 50 34 20 69 73 20 6e 6f 74 20 6e 75 6c 6c  f P4 is not null
80a0: 20 74 68 65 6e 20 69 74 20 69 73 20 61 6e 20 65   then it is an e
80b0: 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74 72  rror message str
80c0: 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 50 35 20 69 73  ing..**.** P5 is
80d0: 20 61 20 76 61 6c 75 65 20 62 65 74 77 65 65 6e   a value between
80e0: 20 30 20 61 6e 64 20 34 2c 20 69 6e 63 6c 75 73   0 and 4, inclus
80f0: 69 76 65 2c 20 74 68 61 74 20 6d 6f 64 69 66 69  ive, that modifi
8100: 65 73 20 74 68 65 20 50 34 20 73 74 72 69 6e 67  es the P4 string
8110: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 30 3a 20 20 28  ..**.**    0:  (
8120: 6e 6f 20 63 68 61 6e 67 65 29 0a 2a 2a 20 20 20  no change).**   
8130: 20 31 3a 20 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f   1:  NOT NULL co
8140: 6e 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20  ntraint failed: 
8150: 50 34 0a 2a 2a 20 20 20 20 32 3a 20 20 55 4e 49  P4.**    2:  UNI
8160: 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 66  QUE constraint f
8170: 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20  ailed: P4.**    
8180: 33 3a 20 20 43 48 45 43 4b 20 63 6f 6e 73 74 72  3:  CHECK constr
8190: 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a  aint failed: P4.
81a0: 2a 2a 20 20 20 20 34 3a 20 20 46 4f 52 45 49 47  **    4:  FOREIG
81b0: 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e 74  N KEY constraint
81c0: 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 0a 2a   failed: P4.**.*
81d0: 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 74 20 7a  * If P5 is not z
81e0: 65 72 6f 20 61 6e 64 20 50 34 20 69 73 20 4e 55  ero and P4 is NU
81f0: 4c 4c 2c 20 74 68 65 6e 20 65 76 65 72 79 74 68  LL, then everyth
8200: 69 6e 67 20 61 66 74 65 72 20 74 68 65 20 22 3a  ing after the ":
8210: 22 20 69 73 0a 2a 2a 20 6f 6d 69 74 74 65 64 2e  " is.** omitted.
8220: 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 69 73 20  .**.** There is 
8230: 61 6e 20 69 6d 70 6c 69 65 64 20 22 48 61 6c 74  an implied "Halt
8240: 20 30 20 30 20 30 22 20 69 6e 73 74 72 75 63 74   0 0 0" instruct
8250: 69 6f 6e 20 69 6e 73 65 72 74 65 64 20 61 74 20  ion inserted at 
8260: 74 68 65 20 76 65 72 79 20 65 6e 64 20 6f 66 0a  the very end of.
8270: 2a 2a 20 65 76 65 72 79 20 70 72 6f 67 72 61 6d  ** every program
8280: 2e 20 20 53 6f 20 61 20 6a 75 6d 70 20 70 61 73  .  So a jump pas
8290: 74 20 74 68 65 20 6c 61 73 74 20 69 6e 73 74 72  t the last instr
82a0: 75 63 74 69 6f 6e 20 6f 66 20 74 68 65 20 70 72  uction of the pr
82b0: 6f 67 72 61 6d 0a 2a 2a 20 69 73 20 74 68 65 20  ogram.** is the 
82c0: 73 61 6d 65 20 61 73 20 65 78 65 63 75 74 69 6e  same as executin
82d0: 67 20 48 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20  g Halt..*/.case 
82e0: 4f 50 5f 48 61 6c 74 3a 20 7b 0a 20 20 56 64 62  OP_Halt: {.  Vdb
82f0: 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a  eFrame *pFrame;.
8300: 20 20 69 6e 74 20 70 63 78 3b 0a 0a 20 20 70 63    int pcx;..  pc
8310: 78 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20  x = (int)(pOp - 
8320: 61 4f 70 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  aOp);.#ifdef SQL
8330: 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20  ITE_DEBUG.  if( 
8340: 70 4f 70 2d 3e 70 32 3d 3d 4f 45 5f 41 62 6f 72  pOp->p2==OE_Abor
8350: 74 20 29 7b 20 73 71 6c 69 74 65 33 56 64 62 65  t ){ sqlite3Vdbe
8360: 41 73 73 65 72 74 41 62 6f 72 74 61 62 6c 65 28  AssertAbortable(
8370: 70 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 69  p); }.#endif.  i
8380: 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 53 51 4c 49  f( pOp->p1==SQLI
8390: 54 45 5f 4f 4b 20 26 26 20 70 2d 3e 70 46 72 61  TE_OK && p->pFra
83a0: 6d 65 20 29 7b 0a 20 20 20 20 2f 2a 20 48 61 6c  me ){.    /* Hal
83b0: 74 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61  t the sub-progra
83c0: 6d 2e 20 52 65 74 75 72 6e 20 63 6f 6e 74 72 6f  m. Return contro
83d0: 6c 20 74 6f 20 74 68 65 20 70 61 72 65 6e 74 20  l to the parent 
83e0: 66 72 61 6d 65 2e 20 2a 2f 0a 20 20 20 20 70 46  frame. */.    pF
83f0: 72 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65  rame = p->pFrame
8400: 3b 0a 20 20 20 20 70 2d 3e 70 46 72 61 6d 65 20  ;.    p->pFrame 
8410: 3d 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e  = pFrame->pParen
8420: 74 3b 0a 20 20 20 20 70 2d 3e 6e 46 72 61 6d 65  t;.    p->nFrame
8430: 2d 2d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  --;.    sqlite3V
8440: 64 62 65 53 65 74 43 68 61 6e 67 65 73 28 64 62  dbeSetChanges(db
8450: 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20  , p->nChange);. 
8460: 20 20 20 70 63 78 20 3d 20 73 71 6c 69 74 65 33     pcx = sqlite3
8470: 56 64 62 65 46 72 61 6d 65 52 65 73 74 6f 72 65  VdbeFrameRestore
8480: 28 70 46 72 61 6d 65 29 3b 0a 20 20 20 20 69 66  (pFrame);.    if
8490: 28 20 70 4f 70 2d 3e 70 32 3d 3d 4f 45 5f 49 67  ( pOp->p2==OE_Ig
84a0: 6e 6f 72 65 20 29 7b 0a 20 20 20 20 20 20 2f 2a  nore ){.      /*
84b0: 20 49 6e 73 74 72 75 63 74 69 6f 6e 20 70 63 78   Instruction pcx
84c0: 20 69 73 20 74 68 65 20 4f 50 5f 50 72 6f 67 72   is the OP_Progr
84d0: 61 6d 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20  am that invoked 
84e0: 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  the sub-program 
84f0: 0a 20 20 20 20 20 20 2a 2a 20 63 75 72 72 65 6e  .      ** curren
8500: 74 6c 79 20 62 65 69 6e 67 20 68 61 6c 74 65 64  tly being halted
8510: 2e 20 49 66 20 74 68 65 20 70 32 20 69 6e 73 74  . If the p2 inst
8520: 72 75 63 74 69 6f 6e 20 6f 66 20 74 68 69 73 20  ruction of this 
8530: 4f 50 5f 48 61 6c 74 0a 20 20 20 20 20 20 2a 2a  OP_Halt.      **
8540: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20   instruction is 
8550: 73 65 74 20 74 6f 20 4f 45 5f 49 67 6e 6f 72 65  set to OE_Ignore
8560: 2c 20 74 68 65 6e 20 74 68 65 20 73 75 62 2d 70  , then the sub-p
8570: 72 6f 67 72 61 6d 20 69 73 20 74 68 72 6f 77 69  rogram is throwi
8580: 6e 67 0a 20 20 20 20 20 20 2a 2a 20 61 6e 20 49  ng.      ** an I
8590: 47 4e 4f 52 45 20 65 78 63 65 70 74 69 6f 6e 2e  GNORE exception.
85a0: 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 6a 75   In this case ju
85b0: 6d 70 20 74 6f 20 74 68 65 20 61 64 64 72 65 73  mp to the addres
85c0: 73 20 73 70 65 63 69 66 69 65 64 0a 20 20 20 20  s specified.    
85d0: 20 20 2a 2a 20 61 73 20 74 68 65 20 70 32 20 6f    ** as the p2 o
85e0: 66 20 74 68 65 20 63 61 6c 6c 69 6e 67 20 4f 50  f the calling OP
85f0: 5f 50 72 6f 67 72 61 6d 2e 20 20 2a 2f 0a 20 20  _Program.  */.  
8600: 20 20 20 20 70 63 78 20 3d 20 70 2d 3e 61 4f 70      pcx = p->aOp
8610: 5b 70 63 78 5d 2e 70 32 2d 31 3b 0a 20 20 20 20  [pcx].p2-1;.    
8620: 7d 0a 20 20 20 20 61 4f 70 20 3d 20 70 2d 3e 61  }.    aOp = p->a
8630: 4f 70 3b 0a 20 20 20 20 61 4d 65 6d 20 3d 20 70  Op;.    aMem = p
8640: 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 70 4f 70 20  ->aMem;.    pOp 
8650: 3d 20 26 61 4f 70 5b 70 63 78 5d 3b 0a 20 20 20  = &aOp[pcx];.   
8660: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 2d   break;.  }.  p-
8670: 3e 72 63 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  >rc = pOp->p1;. 
8680: 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20   p->errorAction 
8690: 3d 20 28 75 38 29 70 4f 70 2d 3e 70 32 3b 0a 20  = (u8)pOp->p2;. 
86a0: 20 70 2d 3e 70 63 20 3d 20 70 63 78 3b 0a 20 20   p->pc = pcx;.  
86b0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c  assert( pOp->p5<
86c0: 3d 34 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 72  =4 );.  if( p->r
86d0: 63 20 29 7b 0a 20 20 20 20 69 66 28 20 70 4f 70  c ){.    if( pOp
86e0: 2d 3e 70 35 20 29 7b 0a 20 20 20 20 20 20 73 74  ->p5 ){.      st
86f0: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
8700: 2a 20 63 6f 6e 73 74 20 61 7a 54 79 70 65 5b 5d  * const azType[]
8710: 20 3d 20 7b 20 22 4e 4f 54 20 4e 55 4c 4c 22 2c   = { "NOT NULL",
8720: 20 22 55 4e 49 51 55 45 22 2c 20 22 43 48 45 43   "UNIQUE", "CHEC
8730: 4b 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  K",.            
8740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8760: 20 22 46 4f 52 45 49 47 4e 20 4b 45 59 22 20 7d   "FOREIGN KEY" }
8770: 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65  ;.      testcase
8780: 28 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a  ( pOp->p5==1 );.
8790: 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
87a0: 70 4f 70 2d 3e 70 35 3d 3d 32 20 29 3b 0a 20 20  pOp->p5==2 );.  
87b0: 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70 4f      testcase( pO
87c0: 70 2d 3e 70 35 3d 3d 33 20 29 3b 0a 20 20 20 20  p->p5==3 );.    
87d0: 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
87e0: 3e 70 35 3d 3d 34 20 29 3b 0a 20 20 20 20 20 20  >p5==4 );.      
87f0: 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72  sqlite3VdbeError
8800: 28 70 2c 20 22 25 73 20 63 6f 6e 73 74 72 61 69  (p, "%s constrai
8810: 6e 74 20 66 61 69 6c 65 64 22 2c 20 61 7a 54 79  nt failed", azTy
8820: 70 65 5b 70 4f 70 2d 3e 70 35 2d 31 5d 29 3b 0a  pe[pOp->p5-1]);.
8830: 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70        if( pOp->p
8840: 34 2e 7a 20 29 7b 0a 20 20 20 20 20 20 20 20 70  4.z ){.        p
8850: 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69  ->zErrMsg = sqli
8860: 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 20 22  te3MPrintf(db, "
8870: 25 7a 3a 20 25 73 22 2c 20 70 2d 3e 7a 45 72 72  %z: %s", p->zErr
8880: 4d 73 67 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  Msg, pOp->p4.z);
8890: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
88a0: 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  se{.      sqlite
88b0: 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 25  3VdbeError(p, "%
88c0: 73 22 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  s", pOp->p4.z);.
88d0: 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
88e0: 33 5f 6c 6f 67 28 70 4f 70 2d 3e 70 31 2c 20 22  3_log(pOp->p1, "
88f0: 61 62 6f 72 74 20 61 74 20 25 64 20 69 6e 20 5b  abort at %d in [
8900: 25 73 5d 3a 20 25 73 22 2c 20 70 63 78 2c 20 70  %s]: %s", pcx, p
8910: 2d 3e 7a 53 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d  ->zSql, p->zErrM
8920: 73 67 29 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20  sg);.  }.  rc = 
8930: 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28  sqlite3VdbeHalt(
8940: 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63  p);.  assert( rc
8950: 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 7c 7c  ==SQLITE_BUSY ||
8960: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c   rc==SQLITE_OK |
8970: 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 45 52 52  | rc==SQLITE_ERR
8980: 4f 52 20 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  OR );.  if( rc==
8990: 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20  SQLITE_BUSY ){. 
89a0: 20 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c 49 54     p->rc = SQLIT
89b0: 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65 7b  E_BUSY;.  }else{
89c0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d  .    assert( rc=
89d0: 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70  =SQLITE_OK || (p
89e0: 2d 3e 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49  ->rc&0xff)==SQLI
89f0: 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 29 3b  TE_CONSTRAINT );
8a00: 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d  .    assert( rc=
8a10: 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 64 62  =SQLITE_OK || db
8a20: 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3e  ->nDeferredCons>
8a30: 30 20 7c 7c 20 64 62 2d 3e 6e 44 65 66 65 72 72  0 || db->nDeferr
8a40: 65 64 49 6d 6d 43 6f 6e 73 3e 30 20 29 3b 0a 20  edImmCons>0 );. 
8a50: 20 20 20 72 63 20 3d 20 70 2d 3e 72 63 20 3f 20     rc = p->rc ? 
8a60: 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 3a 20 53  SQLITE_ERROR : S
8a70: 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 7d 0a  QLITE_DONE;.  }.
8a80: 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
8a90: 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  rn;.}../* Opcode
8aa0: 3a 20 49 6e 74 65 67 65 72 20 50 31 20 50 32 20  : Integer P1 P2 
8ab0: 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
8ac0: 73 3a 20 72 5b 50 32 5d 3d 50 31 0a 2a 2a 0a 2a  s: r[P2]=P1.**.*
8ad0: 2a 20 54 68 65 20 33 32 2d 62 69 74 20 69 6e 74  * The 32-bit int
8ae0: 65 67 65 72 20 76 61 6c 75 65 20 50 31 20 69 73  eger value P1 is
8af0: 20 77 72 69 74 74 65 6e 20 69 6e 74 6f 20 72 65   written into re
8b00: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61  gister P2..*/.ca
8b10: 73 65 20 4f 50 5f 49 6e 74 65 67 65 72 3a 20 7b  se OP_Integer: {
8b20: 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
8b30: 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74   */.  pOut = out
8b40: 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
8b50: 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  Op);.  pOut->u.i
8b60: 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 62 72   = pOp->p1;.  br
8b70: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
8b80: 65 3a 20 49 6e 74 36 34 20 2a 20 50 32 20 2a 20  e: Int64 * P2 * 
8b90: 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
8ba0: 3a 20 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a  : r[P2]=P4.**.**
8bb0: 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
8bc0: 20 74 6f 20 61 20 36 34 2d 62 69 74 20 69 6e 74   to a 64-bit int
8bd0: 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2a 20 57  eger value..** W
8be0: 72 69 74 65 20 74 68 61 74 20 76 61 6c 75 65 20  rite that value 
8bf0: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
8c00: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74  ..*/.case OP_Int
8c10: 36 34 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  64: {           
8c20: 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70 4f 75  /* out2 */.  pOu
8c30: 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
8c40: 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73  se(p, pOp);.  as
8c50: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 70 49  sert( pOp->p4.pI
8c60: 36 34 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d  64!=0 );.  pOut-
8c70: 3e 75 2e 69 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e  >u.i = *pOp->p4.
8c80: 70 49 36 34 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  pI64;.  break;.}
8c90: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
8ca0: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
8cb0: 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  OINT./* Opcode: 
8cc0: 52 65 61 6c 20 2a 20 50 32 20 2a 20 50 34 20 2a  Real * P2 * P4 *
8cd0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
8ce0: 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20  P2]=P4.**.** P4 
8cf0: 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
8d00: 61 20 36 34 2d 62 69 74 20 66 6c 6f 61 74 69 6e  a 64-bit floatin
8d10: 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 2a  g point value..*
8d20: 2a 20 57 72 69 74 65 20 74 68 61 74 20 76 61 6c  * Write that val
8d30: 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  ue into register
8d40: 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
8d50: 52 65 61 6c 3a 20 7b 20 20 20 20 20 20 20 20 20  Real: {         
8d60: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
8d70: 5f 46 4c 4f 41 54 2c 20 6f 75 74 32 20 2a 2f 0a  _FLOAT, out2 */.
8d80: 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
8d90: 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
8da0: 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
8db0: 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 61 73 73   MEM_Real;.  ass
8dc0: 65 72 74 28 20 21 73 71 6c 69 74 65 33 49 73 4e  ert( !sqlite3IsN
8dd0: 61 4e 28 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61  aN(*pOp->p4.pRea
8de0: 6c 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  l) );.  pOut->u.
8df0: 72 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 52 65  r = *pOp->p4.pRe
8e00: 61 6c 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  al;.  break;.}.#
8e10: 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65  endif../* Opcode
8e20: 3a 20 53 74 72 69 6e 67 38 20 2a 20 50 32 20 2a  : String8 * P2 *
8e30: 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
8e40: 73 3a 20 72 5b 50 32 5d 3d 27 50 34 27 0a 2a 2a  s: r[P2]='P4'.**
8e50: 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20 74 6f  .** P4 points to
8e60: 20 61 20 6e 75 6c 20 74 65 72 6d 69 6e 61 74 65   a nul terminate
8e70: 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67 2e 20  d UTF-8 string. 
8e80: 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 74  This opcode is t
8e90: 72 61 6e 73 66 6f 72 6d 65 64 20 0a 2a 2a 20 69  ransformed .** i
8ea0: 6e 74 6f 20 61 20 53 74 72 69 6e 67 20 6f 70 63  nto a String opc
8eb0: 6f 64 65 20 62 65 66 6f 72 65 20 69 74 20 69 73  ode before it is
8ec0: 20 65 78 65 63 75 74 65 64 20 66 6f 72 20 74 68   executed for th
8ed0: 65 20 66 69 72 73 74 20 74 69 6d 65 2e 20 20 44  e first time.  D
8ee0: 75 72 69 6e 67 0a 2a 2a 20 74 68 69 73 20 74 72  uring.** this tr
8ef0: 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68  ansformation, th
8f00: 65 20 6c 65 6e 67 74 68 20 6f 66 20 73 74 72 69  e length of stri
8f10: 6e 67 20 50 34 20 69 73 20 63 6f 6d 70 75 74 65  ng P4 is compute
8f20: 64 20 61 6e 64 20 73 74 6f 72 65 64 0a 2a 2a 20  d and stored.** 
8f30: 61 73 20 74 68 65 20 50 31 20 70 61 72 61 6d 65  as the P1 parame
8f40: 74 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ter..*/.case OP_
8f50: 53 74 72 69 6e 67 38 3a 20 7b 20 20 20 20 20 20  String8: {      
8f60: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
8f70: 5f 53 54 52 49 4e 47 2c 20 6f 75 74 32 20 2a 2f  _STRING, out2 */
8f80: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
8f90: 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 75  p4.z!=0 );.  pOu
8fa0: 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
8fb0: 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f  se(p, pOp);.  pO
8fc0: 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 53  p->opcode = OP_S
8fd0: 74 72 69 6e 67 3b 0a 20 20 70 4f 70 2d 3e 70 31  tring;.  pOp->p1
8fe0: 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e   = sqlite3Strlen
8ff0: 33 30 28 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 0a  30(pOp->p4.z);..
9000: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
9010: 4d 49 54 5f 55 54 46 31 36 0a 20 20 69 66 28 20  MIT_UTF16.  if( 
9020: 65 6e 63 6f 64 69 6e 67 21 3d 53 51 4c 49 54 45  encoding!=SQLITE
9030: 5f 55 54 46 38 20 29 7b 0a 20 20 20 20 72 63 20  _UTF8 ){.    rc 
9040: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  = sqlite3VdbeMem
9050: 53 65 74 53 74 72 28 70 4f 75 74 2c 20 70 4f 70  SetStr(pOut, pOp
9060: 2d 3e 70 34 2e 7a 2c 20 2d 31 2c 20 53 51 4c 49  ->p4.z, -1, SQLI
9070: 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f  TE_UTF8, SQLITE_
9080: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 61 73 73  STATIC);.    ass
9090: 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
90a0: 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45  OK || rc==SQLITE
90b0: 5f 54 4f 4f 42 49 47 20 29 3b 0a 20 20 20 20 69  _TOOBIG );.    i
90c0: 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 73 71  f( SQLITE_OK!=sq
90d0: 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45  lite3VdbeChangeE
90e0: 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e  ncoding(pOut, en
90f0: 63 6f 64 69 6e 67 29 20 29 20 67 6f 74 6f 20 6e  coding) ) goto n
9100: 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61 73 73 65 72  o_mem;.    asser
9110: 74 28 20 70 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f  t( pOut->szMallo
9120: 63 3e 30 20 26 26 20 70 4f 75 74 2d 3e 7a 4d 61  c>0 && pOut->zMa
9130: 6c 6c 6f 63 3d 3d 70 4f 75 74 2d 3e 7a 20 29 3b  lloc==pOut->z );
9140: 0a 20 20 20 20 61 73 73 65 72 74 28 20 56 64 62  .    assert( Vdb
9150: 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74  eMemDynamic(pOut
9160: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 70 4f 75 74  )==0 );.    pOut
9170: 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a  ->szMalloc = 0;.
9180: 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
9190: 7c 3d 20 4d 45 4d 5f 53 74 61 74 69 63 3b 0a 20  |= MEM_Static;. 
91a0: 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79     if( pOp->p4ty
91b0: 70 65 3d 3d 50 34 5f 44 59 4e 41 4d 49 43 20 29  pe==P4_DYNAMIC )
91c0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44  {.      sqlite3D
91d0: 62 46 72 65 65 28 64 62 2c 20 70 4f 70 2d 3e 70  bFree(db, pOp->p
91e0: 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  4.z);.    }.    
91f0: 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20 50 34  pOp->p4type = P4
9200: 5f 44 59 4e 41 4d 49 43 3b 0a 20 20 20 20 70 4f  _DYNAMIC;.    pO
9210: 70 2d 3e 70 34 2e 7a 20 3d 20 70 4f 75 74 2d 3e  p->p4.z = pOut->
9220: 7a 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 31 20 3d  z;.    pOp->p1 =
9230: 20 70 4f 75 74 2d 3e 6e 3b 0a 20 20 7d 0a 20 20   pOut->n;.  }.  
9240: 74 65 73 74 63 61 73 65 28 20 72 63 3d 3d 53 51  testcase( rc==SQ
9250: 4c 49 54 45 5f 54 4f 4f 42 49 47 20 29 3b 0a 23  LITE_TOOBIG );.#
9260: 65 6e 64 69 66 0a 20 20 69 66 28 20 70 4f 70 2d  endif.  if( pOp-
9270: 3e 70 31 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  >p1>db->aLimit[S
9280: 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
9290: 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  TH] ){.    goto 
92a0: 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 61  too_big;.  }.  a
92b0: 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
92c0: 45 5f 4f 4b 20 29 3b 0a 20 20 2f 2a 20 46 61 6c  E_OK );.  /* Fal
92d0: 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
92e0: 20 6e 65 78 74 20 63 61 73 65 2c 20 4f 50 5f 53   next case, OP_S
92f0: 74 72 69 6e 67 20 2a 2f 0a 7d 0a 20 20 0a 2f 2a  tring */.}.  ./*
9300: 20 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e 67 20   Opcode: String 
9310: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
9320: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
9330: 5d 3d 27 50 34 27 20 28 6c 65 6e 3d 50 31 29 0a  ]='P4' (len=P1).
9340: 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e 67  **.** The string
9350: 20 76 61 6c 75 65 20 50 34 20 6f 66 20 6c 65 6e   value P4 of len
9360: 67 74 68 20 50 31 20 28 62 79 74 65 73 29 20 69  gth P1 (bytes) i
9370: 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
9380: 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49  ster P2..**.** I
9390: 66 20 50 33 20 69 73 20 6e 6f 74 20 7a 65 72 6f  f P3 is not zero
93a0: 20 61 6e 64 20 74 68 65 20 63 6f 6e 74 65 6e 74   and the content
93b0: 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20   of register P3 
93c0: 69 73 20 65 71 75 61 6c 20 74 6f 20 50 35 2c 20  is equal to P5, 
93d0: 74 68 65 6e 0a 2a 2a 20 74 68 65 20 64 61 74 61  then.** the data
93e0: 74 79 70 65 20 6f 66 20 74 68 65 20 72 65 67 69  type of the regi
93f0: 73 74 65 72 20 50 32 20 69 73 20 63 6f 6e 76 65  ster P2 is conve
9400: 72 74 65 64 20 74 6f 20 42 4c 4f 42 2e 20 20 54  rted to BLOB.  T
9410: 68 65 20 63 6f 6e 74 65 6e 74 20 69 73 0a 2a 2a  he content is.**
9420: 20 74 68 65 20 73 61 6d 65 20 73 65 71 75 65 6e   the same sequen
9430: 63 65 20 6f 66 20 62 79 74 65 73 2c 20 69 74 20  ce of bytes, it 
9440: 69 73 20 6d 65 72 65 6c 79 20 69 6e 74 65 72 70  is merely interp
9450: 72 65 74 65 64 20 61 73 20 61 20 42 4c 4f 42 20  reted as a BLOB 
9460: 69 6e 73 74 65 61 64 0a 2a 2a 20 6f 66 20 61 20  instead.** of a 
9470: 73 74 72 69 6e 67 2c 20 61 73 20 69 66 20 69 74  string, as if it
9480: 20 68 61 64 20 62 65 65 6e 20 43 41 53 54 2e 20   had been CAST. 
9490: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 3a   In other words:
94a0: 0a 2a 2a 0a 2a 2a 20 69 66 28 20 50 33 21 3d 30  .**.** if( P3!=0
94b0: 20 61 6e 64 20 72 65 67 5b 50 33 5d 3d 3d 50 35   and reg[P3]==P5
94c0: 20 29 20 72 65 67 5b 50 32 5d 20 3a 3d 20 43 41   ) reg[P2] := CA
94d0: 53 54 28 72 65 67 5b 50 32 5d 20 61 73 20 42 4c  ST(reg[P2] as BL
94e0: 4f 42 29 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  OB).*/.case OP_S
94f0: 74 72 69 6e 67 3a 20 7b 20 20 20 20 20 20 20 20  tring: {        
9500: 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 61    /* out2 */.  a
9510: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a  ssert( pOp->p4.z
9520: 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20  !=0 );.  pOut = 
9530: 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
9540: 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e  , pOp);.  pOut->
9550: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c  flags = MEM_Str|
9560: 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54  MEM_Static|MEM_T
9570: 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d  erm;.  pOut->z =
9580: 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 70 4f   pOp->p4.z;.  pO
9590: 75 74 2d 3e 6e 20 3d 20 70 4f 70 2d 3e 70 31 3b  ut->n = pOp->p1;
95a0: 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65  .  pOut->enc = e
95b0: 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54  ncoding;.  UPDAT
95c0: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
95d0: 4f 75 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  Out);.#ifndef SQ
95e0: 4c 49 54 45 5f 4c 49 4b 45 5f 44 4f 45 53 4e 54  LITE_LIKE_DOESNT
95f0: 5f 4d 41 54 43 48 5f 42 4c 4f 42 53 0a 20 20 69  _MATCH_BLOBS.  i
9600: 66 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a  f( pOp->p3>0 ){.
9610: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
9620: 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  >p3<=(p->nMem+1 
9630: 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  - p->nCursor) );
9640: 0a 20 20 20 20 70 49 6e 33 20 3d 20 26 61 4d 65  .    pIn3 = &aMe
9650: 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20  m[pOp->p3];.    
9660: 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c  assert( pIn3->fl
9670: 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b  ags & MEM_Int );
9680: 0a 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 75  .    if( pIn3->u
9690: 2e 69 3d 3d 70 4f 70 2d 3e 70 35 20 29 20 70 4f  .i==pOp->p5 ) pO
96a0: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
96b0: 42 6c 6f 62 7c 4d 45 4d 5f 53 74 61 74 69 63 7c  Blob|MEM_Static|
96c0: 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 7d 0a 23 65  MEM_Term;.  }.#e
96d0: 6e 64 69 66 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ndif.  break;.}.
96e0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c  ./* Opcode: Null
96f0: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
9700: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 2e   Synopsis: r[P2.
9710: 2e 50 33 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20  .P3]=NULL.**.** 
9720: 57 72 69 74 65 20 61 20 4e 55 4c 4c 20 69 6e 74  Write a NULL int
9730: 6f 20 72 65 67 69 73 74 65 72 73 20 50 32 2e 20  o registers P2. 
9740: 20 49 66 20 50 33 20 67 72 65 61 74 65 72 20 74   If P3 greater t
9750: 68 61 6e 20 50 32 2c 20 74 68 65 6e 20 61 6c 73  han P2, then als
9760: 6f 20 77 72 69 74 65 0a 2a 2a 20 4e 55 4c 4c 20  o write.** NULL 
9770: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33  into register P3
9780: 20 61 6e 64 20 65 76 65 72 79 20 72 65 67 69 73   and every regis
9790: 74 65 72 20 69 6e 20 62 65 74 77 65 65 6e 20 50  ter in between P
97a0: 32 20 61 6e 64 20 50 33 2e 20 20 49 66 20 50 33  2 and P3.  If P3
97b0: 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e  .** is less than
97c0: 20 50 32 20 28 74 79 70 69 63 61 6c 6c 79 20 50   P2 (typically P
97d0: 33 20 69 73 20 7a 65 72 6f 29 20 74 68 65 6e 20  3 is zero) then 
97e0: 6f 6e 6c 79 20 72 65 67 69 73 74 65 72 20 50 32  only register P2
97f0: 20 69 73 0a 2a 2a 20 73 65 74 20 74 6f 20 4e 55   is.** set to NU
9800: 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  LL..**.** If the
9810: 20 50 31 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e   P1 value is non
9820: 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61 6c 73 6f  -zero, then also
9830: 20 73 65 74 20 74 68 65 20 4d 45 4d 5f 43 6c 65   set the MEM_Cle
9840: 61 72 65 64 20 66 6c 61 67 20 73 6f 20 74 68 61  ared flag so tha
9850: 74 0a 2a 2a 20 4e 55 4c 4c 20 76 61 6c 75 65 73  t.** NULL values
9860: 20 77 69 6c 6c 20 6e 6f 74 20 63 6f 6d 70 61 72   will not compar
9870: 65 20 65 71 75 61 6c 20 65 76 65 6e 20 69 66 20  e equal even if 
9880: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73  SQLITE_NULLEQ is
9890: 20 73 65 74 20 6f 6e 0a 2a 2a 20 4f 50 5f 4e 65   set on.** OP_Ne
98a0: 20 6f 72 20 4f 50 5f 45 71 2e 0a 2a 2f 0a 63 61   or OP_Eq..*/.ca
98b0: 73 65 20 4f 50 5f 4e 75 6c 6c 3a 20 7b 20 20 20  se OP_Null: {   
98c0: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
98d0: 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b 0a 20 20  */.  int cnt;.  
98e0: 75 31 36 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20  u16 nullFlag;.  
98f0: 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
9900: 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
9910: 20 63 6e 74 20 3d 20 70 4f 70 2d 3e 70 33 2d 70   cnt = pOp->p3-p
9920: 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74  Op->p2;.  assert
9930: 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  ( pOp->p3<=(p->n
9940: 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
9950: 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66  or) );.  pOut->f
9960: 6c 61 67 73 20 3d 20 6e 75 6c 6c 46 6c 61 67 20  lags = nullFlag 
9970: 3d 20 70 4f 70 2d 3e 70 31 20 3f 20 28 4d 45 4d  = pOp->p1 ? (MEM
9980: 5f 4e 75 6c 6c 7c 4d 45 4d 5f 43 6c 65 61 72 65  _Null|MEM_Cleare
9990: 64 29 20 3a 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  d) : MEM_Null;. 
99a0: 20 70 4f 75 74 2d 3e 6e 20 3d 20 30 3b 0a 23 69   pOut->n = 0;.#i
99b0: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
99c0: 47 0a 20 20 70 4f 75 74 2d 3e 75 54 65 6d 70 20  G.  pOut->uTemp 
99d0: 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20 77 68  = 0;.#endif.  wh
99e0: 69 6c 65 28 20 63 6e 74 3e 30 20 29 7b 0a 20 20  ile( cnt>0 ){.  
99f0: 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 20 20 6d 65    pOut++;.    me
9a00: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
9a10: 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 73 71 6c  , pOut);.    sql
9a20: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
9a30: 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 70 4f  ll(pOut);.    pO
9a40: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e 75 6c 6c  ut->flags = null
9a50: 46 6c 61 67 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  Flag;.    pOut->
9a60: 6e 20 3d 20 30 3b 0a 20 20 20 20 63 6e 74 2d 2d  n = 0;.    cnt--
9a70: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
9a80: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 66  ../* Opcode: Sof
9a90: 74 4e 75 6c 6c 20 50 31 20 2a 20 2a 20 2a 20 2a  tNull P1 * * * *
9aa0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
9ab0: 50 31 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20 53  P1]=NULL.**.** S
9ac0: 65 74 20 72 65 67 69 73 74 65 72 20 50 31 20 74  et register P1 t
9ad0: 6f 20 68 61 76 65 20 74 68 65 20 76 61 6c 75 65  o have the value
9ae0: 20 4e 55 4c 4c 20 61 73 20 73 65 65 6e 20 62 79   NULL as seen by
9af0: 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f   the OP_MakeReco
9b00: 72 64 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f  rd.** instructio
9b10: 6e 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20 66 72  n, but do not fr
9b20: 65 65 20 61 6e 79 20 73 74 72 69 6e 67 20 6f 72  ee any string or
9b30: 20 62 6c 6f 62 20 6d 65 6d 6f 72 79 20 61 73 73   blob memory ass
9b40: 6f 63 69 61 74 65 64 20 77 69 74 68 0a 2a 2a 20  ociated with.** 
9b50: 74 68 65 20 72 65 67 69 73 74 65 72 2c 20 73 6f  the register, so
9b60: 20 74 68 61 74 20 69 66 20 74 68 65 20 76 61 6c   that if the val
9b70: 75 65 20 77 61 73 20 61 20 73 74 72 69 6e 67 20  ue was a string 
9b80: 6f 72 20 62 6c 6f 62 20 74 68 61 74 20 77 61 73  or blob that was
9b90: 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79 20 63  .** previously c
9ba0: 6f 70 69 65 64 20 75 73 69 6e 67 20 4f 50 5f 53  opied using OP_S
9bb0: 43 6f 70 79 2c 20 74 68 65 20 63 6f 70 69 65 73  Copy, the copies
9bc0: 20 77 69 6c 6c 20 63 6f 6e 74 69 6e 75 65 20 74   will continue t
9bd0: 6f 20 62 65 20 76 61 6c 69 64 2e 0a 2a 2f 0a 63  o be valid..*/.c
9be0: 61 73 65 20 4f 50 5f 53 6f 66 74 4e 75 6c 6c 3a  ase OP_SoftNull:
9bf0: 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   {.  assert( pOp
9c00: 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p1>0 && pOp->p
9c10: 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  1<=(p->nMem+1 - 
9c20: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
9c30: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
9c40: 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 2d 3e  p->p1];.  pOut->
9c50: 66 6c 61 67 73 20 3d 20 28 70 4f 75 74 2d 3e 66  flags = (pOut->f
9c60: 6c 61 67 73 26 7e 28 4d 45 4d 5f 55 6e 64 65 66  lags&~(MEM_Undef
9c70: 69 6e 65 64 7c 4d 45 4d 5f 41 66 66 4d 61 73 6b  ined|MEM_AffMask
9c80: 29 29 7c 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 62  ))|MEM_Null;.  b
9c90: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
9ca0: 64 65 3a 20 42 6c 6f 62 20 50 31 20 50 32 20 2a  de: Blob P1 P2 *
9cb0: 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
9cc0: 73 3a 20 72 5b 50 32 5d 3d 50 34 20 28 6c 65 6e  s: r[P2]=P4 (len
9cd0: 3d 50 31 29 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f  =P1).**.** P4 po
9ce0: 69 6e 74 73 20 74 6f 20 61 20 62 6c 6f 62 20 6f  ints to a blob o
9cf0: 66 20 64 61 74 61 20 50 31 20 62 79 74 65 73 20  f data P1 bytes 
9d00: 6c 6f 6e 67 2e 20 20 53 74 6f 72 65 20 74 68 69  long.  Store thi
9d10: 73 0a 2a 2a 20 62 6c 6f 62 20 69 6e 20 72 65 67  s.** blob in reg
9d20: 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73  ister P2..*/.cas
9d30: 65 20 4f 50 5f 42 6c 6f 62 3a 20 7b 20 20 20 20  e OP_Blob: {    
9d40: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
9d50: 75 74 32 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ut2 */.  assert(
9d60: 20 70 4f 70 2d 3e 70 31 20 3c 3d 20 53 51 4c 49   pOp->p1 <= SQLI
9d70: 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 20 29 3b  TE_MAX_LENGTH );
9d80: 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
9d90: 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
9da0: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
9db0: 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20 70  emSetStr(pOut, p
9dc0: 4f 70 2d 3e 70 34 2e 7a 2c 20 70 4f 70 2d 3e 70  Op->p4.z, pOp->p
9dd0: 31 2c 20 30 2c 20 30 29 3b 0a 20 20 70 4f 75 74  1, 0, 0);.  pOut
9de0: 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67  ->enc = encoding
9df0: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
9e00: 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
9e10: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
9e20: 63 6f 64 65 3a 20 56 61 72 69 61 62 6c 65 20 50  code: Variable P
9e30: 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53  1 P2 * P4 *.** S
9e40: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 70  ynopsis: r[P2]=p
9e50: 61 72 61 6d 65 74 65 72 28 50 31 2c 50 34 29 0a  arameter(P1,P4).
9e60: 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72 20 74  **.** Transfer t
9e70: 68 65 20 76 61 6c 75 65 73 20 6f 66 20 62 6f 75  he values of bou
9e80: 6e 64 20 70 61 72 61 6d 65 74 65 72 20 50 31 20  nd parameter P1 
9e90: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
9ea0: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 70 61  .**.** If the pa
9eb0: 72 61 6d 65 74 65 72 20 69 73 20 6e 61 6d 65 64  rameter is named
9ec0: 2c 20 74 68 65 6e 20 69 74 73 20 6e 61 6d 65 20  , then its name 
9ed0: 61 70 70 65 61 72 73 20 69 6e 20 50 34 2e 0a 2a  appears in P4..*
9ee0: 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65 20 69  * The P4 value i
9ef0: 73 20 75 73 65 64 20 62 79 20 73 71 6c 69 74 65  s used by sqlite
9f00: 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  3_bind_parameter
9f10: 5f 6e 61 6d 65 28 29 2e 0a 2a 2f 0a 63 61 73 65  _name()..*/.case
9f20: 20 4f 50 5f 56 61 72 69 61 62 6c 65 3a 20 7b 20   OP_Variable: { 
9f30: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
9f40: 74 32 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 56 61  t2 */.  Mem *pVa
9f50: 72 3b 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75  r;       /* Valu
9f60: 65 20 62 65 69 6e 67 20 74 72 61 6e 73 66 65 72  e being transfer
9f70: 72 65 64 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74  red */..  assert
9f80: 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70  ( pOp->p1>0 && p
9f90: 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 56 61 72 20  Op->p1<=p->nVar 
9fa0: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
9fb0: 2d 3e 70 34 2e 7a 3d 3d 30 20 7c 7c 20 70 4f 70  ->p4.z==0 || pOp
9fc0: 2d 3e 70 34 2e 7a 3d 3d 73 71 6c 69 74 65 33 56  ->p4.z==sqlite3V
9fd0: 4c 69 73 74 4e 75 6d 54 6f 4e 61 6d 65 28 70 2d  ListNumToName(p-
9fe0: 3e 70 56 4c 69 73 74 2c 70 4f 70 2d 3e 70 31 29  >pVList,pOp->p1)
9ff0: 20 29 3b 0a 20 20 70 56 61 72 20 3d 20 26 70 2d   );.  pVar = &p-
a000: 3e 61 56 61 72 5b 70 4f 70 2d 3e 70 31 20 2d 20  >aVar[pOp->p1 - 
a010: 31 5d 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  1];.  if( sqlite
a020: 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70  3VdbeMemTooBig(p
a030: 56 61 72 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  Var) ){.    goto
a040: 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20   too_big;.  }.  
a050: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
a060: 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33  ->p2];.  sqlite3
a070: 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f  VdbeMemShallowCo
a080: 70 79 28 70 4f 75 74 2c 20 70 56 61 72 2c 20 4d  py(pOut, pVar, M
a090: 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 55 50  EM_Static);.  UP
a0a0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
a0b0: 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  E(pOut);.  break
a0c0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
a0d0: 4d 6f 76 65 20 50 31 20 50 32 20 50 33 20 2a 20  Move P1 P2 P3 * 
a0e0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
a0f0: 5b 50 32 40 50 33 5d 3d 72 5b 50 31 40 50 33 5d  [P2@P3]=r[P1@P3]
a100: 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20  .**.** Move the 
a110: 50 33 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  P3 values in reg
a120: 69 73 74 65 72 20 50 31 2e 2e 50 31 2b 50 33 2d  ister P1..P1+P3-
a130: 31 20 6f 76 65 72 20 69 6e 74 6f 0a 2a 2a 20 72  1 over into.** r
a140: 65 67 69 73 74 65 72 73 20 50 32 2e 2e 50 32 2b  egisters P2..P2+
a150: 50 33 2d 31 2e 20 20 52 65 67 69 73 74 65 72 73  P3-1.  Registers
a160: 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20 61 72 65   P1..P1+P3-1 are
a170: 0a 2a 2a 20 6c 65 66 74 20 68 6f 6c 64 69 6e 67  .** left holding
a180: 20 61 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20   a NULL.  It is 
a190: 61 6e 20 65 72 72 6f 72 20 66 6f 72 20 72 65 67  an error for reg
a1a0: 69 73 74 65 72 20 72 61 6e 67 65 73 0a 2a 2a 20  ister ranges.** 
a1b0: 50 31 2e 2e 50 31 2b 50 33 2d 31 20 61 6e 64 20  P1..P1+P3-1 and 
a1c0: 50 32 2e 2e 50 32 2b 50 33 2d 31 20 74 6f 20 6f  P2..P2+P3-1 to o
a1d0: 76 65 72 6c 61 70 2e 20 20 49 74 20 69 73 20 61  verlap.  It is a
a1e0: 6e 20 65 72 72 6f 72 0a 2a 2a 20 66 6f 72 20 50  n error.** for P
a1f0: 33 20 74 6f 20 62 65 20 6c 65 73 73 20 74 68 61  3 to be less tha
a200: 6e 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  n 1..*/.case OP_
a210: 4d 6f 76 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b  Move: {.  int n;
a220: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
a230: 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74 65 72  mber of register
a240: 73 20 6c 65 66 74 20 74 6f 20 63 6f 70 79 20 2a  s left to copy *
a250: 2f 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20  /.  int p1;     
a260: 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
a270: 20 74 6f 20 63 6f 70 79 20 66 72 6f 6d 20 2a 2f   to copy from */
a280: 0a 20 20 69 6e 74 20 70 32 3b 20 20 20 20 20 20  .  int p2;      
a290: 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
a2a0: 74 6f 20 63 6f 70 79 20 74 6f 20 2a 2f 0a 0a 20  to copy to */.. 
a2b0: 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20   n = pOp->p3;.  
a2c0: 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  p1 = pOp->p1;.  
a2d0: 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  p2 = pOp->p2;.  
a2e0: 61 73 73 65 72 74 28 20 6e 3e 30 20 26 26 20 70  assert( n>0 && p
a2f0: 31 3e 30 20 26 26 20 70 32 3e 30 20 29 3b 0a 20  1>0 && p2>0 );. 
a300: 20 61 73 73 65 72 74 28 20 70 31 2b 6e 3c 3d 70   assert( p1+n<=p
a310: 32 20 7c 7c 20 70 32 2b 6e 3c 3d 70 31 20 29 3b  2 || p2+n<=p1 );
a320: 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
a330: 5b 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26  [p1];.  pOut = &
a340: 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 64 6f 7b 0a  aMem[p2];.  do{.
a350: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 75 74      assert( pOut
a360: 3c 3d 26 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d  <=&aMem[(p->nMem
a370: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
a380: 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ] );.    assert(
a390: 20 70 49 6e 31 3c 3d 26 61 4d 65 6d 5b 28 70 2d   pIn1<=&aMem[(p-
a3a0: 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
a3b0: 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73  rsor)] );.    as
a3c0: 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
a3d0: 28 70 49 6e 31 29 20 29 3b 0a 20 20 20 20 6d 65  (pIn1) );.    me
a3e0: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
a3f0: 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 73 71 6c  , pOut);.    sql
a400: 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28  ite3VdbeMemMove(
a410: 70 4f 75 74 2c 20 70 49 6e 31 29 3b 0a 23 69 66  pOut, pIn1);.#if
a420: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
a430: 0a 20 20 20 20 69 66 28 20 70 4f 75 74 2d 3e 70  .    if( pOut->p
a440: 53 63 6f 70 79 46 72 6f 6d 3e 3d 26 61 4d 65 6d  ScopyFrom>=&aMem
a450: 5b 70 31 5d 20 26 26 20 70 4f 75 74 2d 3e 70 53  [p1] && pOut->pS
a460: 63 6f 70 79 46 72 6f 6d 3c 70 4f 75 74 20 29 7b  copyFrom<pOut ){
a470: 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 70 53 63  .      pOut->pSc
a480: 6f 70 79 46 72 6f 6d 20 2b 3d 20 70 4f 70 2d 3e  opyFrom += pOp->
a490: 70 32 20 2d 20 70 31 3b 0a 20 20 20 20 7d 0a 23  p2 - p1;.    }.#
a4a0: 65 6e 64 69 66 0a 20 20 20 20 44 65 65 70 68 65  endif.    Deephe
a4b0: 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a  meralize(pOut);.
a4c0: 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
a4d0: 43 45 28 70 32 2b 2b 2c 20 70 4f 75 74 29 3b 0a  CE(p2++, pOut);.
a4e0: 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 20 20      pIn1++;.    
a4f0: 70 4f 75 74 2b 2b 3b 0a 20 20 7d 77 68 69 6c 65  pOut++;.  }while
a500: 28 20 2d 2d 6e 20 29 3b 0a 20 20 62 72 65 61 6b  ( --n );.  break
a510: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
a520: 43 6f 70 79 20 50 31 20 50 32 20 50 33 20 2a 20  Copy P1 P2 P3 * 
a530: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
a540: 5b 50 32 40 50 33 2b 31 5d 3d 72 5b 50 31 40 50  [P2@P3+1]=r[P1@P
a550: 33 2b 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20  3+1].**.** Make 
a560: 61 20 63 6f 70 79 20 6f 66 20 72 65 67 69 73 74  a copy of regist
a570: 65 72 73 20 50 31 2e 2e 50 31 2b 50 33 20 69 6e  ers P1..P1+P3 in
a580: 74 6f 20 72 65 67 69 73 74 65 72 73 20 50 32 2e  to registers P2.
a590: 2e 50 32 2b 50 33 2e 0a 2a 2a 0a 2a 2a 20 54 68  .P2+P3..**.** Th
a5a0: 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d  is instruction m
a5b0: 61 6b 65 73 20 61 20 64 65 65 70 20 63 6f 70 79  akes a deep copy
a5c0: 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20   of the value.  
a5d0: 41 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20 69  A duplicate.** i
a5e0: 73 20 6d 61 64 65 20 6f 66 20 61 6e 79 20 73 74  s made of any st
a5f0: 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 63 6f 6e  ring or blob con
a600: 73 74 61 6e 74 2e 20 20 53 65 65 20 61 6c 73 6f  stant.  See also
a610: 20 4f 50 5f 53 43 6f 70 79 2e 0a 2a 2f 0a 63 61   OP_SCopy..*/.ca
a620: 73 65 20 4f 50 5f 43 6f 70 79 3a 20 7b 0a 20 20  se OP_Copy: {.  
a630: 69 6e 74 20 6e 3b 0a 0a 20 20 6e 20 3d 20 70 4f  int n;..  n = pO
a640: 70 2d 3e 70 33 3b 0a 20 20 70 49 6e 31 20 3d 20  p->p3;.  pIn1 = 
a650: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
a660: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
a670: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72  Op->p2];.  asser
a680: 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b  t( pOut!=pIn1 );
a690: 0a 20 20 77 68 69 6c 65 28 20 31 20 29 7b 0a 20  .  while( 1 ){. 
a6a0: 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
a6b0: 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20  nge(p, pOut);.  
a6c0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
a6d0: 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74  ShallowCopy(pOut
a6e0: 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65  , pIn1, MEM_Ephe
a6f0: 6d 29 3b 0a 20 20 20 20 44 65 65 70 68 65 6d 65  m);.    Deepheme
a700: 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 23 69  ralize(pOut);.#i
a710: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
a720: 47 0a 20 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f  G.    pOut->pSco
a730: 70 79 46 72 6f 6d 20 3d 20 30 3b 0a 23 65 6e 64  pyFrom = 0;.#end
a740: 69 66 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  if.    REGISTER_
a750: 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b 70 4f  TRACE(pOp->p2+pO
a760: 70 2d 3e 70 33 2d 6e 2c 20 70 4f 75 74 29 3b 0a  p->p3-n, pOut);.
a770: 20 20 20 20 69 66 28 20 28 6e 2d 2d 29 3d 3d 30      if( (n--)==0
a780: 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 70 4f   ) break;.    pO
a790: 75 74 2b 2b 3b 0a 20 20 20 20 70 49 6e 31 2b 2b  ut++;.    pIn1++
a7a0: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
a7b0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 43 6f  ../* Opcode: SCo
a7c0: 70 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  py P1 P2 * * *.*
a7d0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
a7e0: 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61  ]=r[P1].**.** Ma
a7f0: 6b 65 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70  ke a shallow cop
a800: 79 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31  y of register P1
a810: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
a820: 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  2..**.** This in
a830: 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20  struction makes 
a840: 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f  a shallow copy o
a850: 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20 49 66  f the value.  If
a860: 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73   the value.** is
a870: 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f   a string or blo
a880: 62 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 70 79  b, then the copy
a890: 20 69 73 20 6f 6e 6c 79 20 61 20 70 6f 69 6e 74   is only a point
a8a0: 65 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6f 72 69  er to the.** ori
a8b0: 67 69 6e 61 6c 20 61 6e 64 20 68 65 6e 63 65 20  ginal and hence 
a8c0: 69 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20  if the original 
a8d0: 63 68 61 6e 67 65 73 20 73 6f 20 77 69 6c 6c 20  changes so will 
a8e0: 74 68 65 20 63 6f 70 79 2e 0a 2a 2a 20 57 6f 72  the copy..** Wor
a8f0: 73 65 2c 20 69 66 20 74 68 65 20 6f 72 69 67 69  se, if the origi
a900: 6e 61 6c 20 69 73 20 64 65 61 6c 6c 6f 63 61 74  nal is deallocat
a910: 65 64 2c 20 74 68 65 20 63 6f 70 79 20 62 65 63  ed, the copy bec
a920: 6f 6d 65 73 20 69 6e 76 61 6c 69 64 2e 0a 2a 2a  omes invalid..**
a930: 20 54 68 75 73 20 74 68 65 20 70 72 6f 67 72 61   Thus the progra
a940: 6d 20 6d 75 73 74 20 67 75 61 72 61 6e 74 65 65  m must guarantee
a950: 20 74 68 61 74 20 74 68 65 20 6f 72 69 67 69 6e   that the origin
a960: 61 6c 20 77 69 6c 6c 20 6e 6f 74 20 63 68 61 6e  al will not chan
a970: 67 65 0a 2a 2a 20 64 75 72 69 6e 67 20 74 68 65  ge.** during the
a980: 20 6c 69 66 65 74 69 6d 65 20 6f 66 20 74 68 65   lifetime of the
a990: 20 63 6f 70 79 2e 20 20 55 73 65 20 4f 50 5f 43   copy.  Use OP_C
a9a0: 6f 70 79 20 74 6f 20 6d 61 6b 65 20 61 20 63 6f  opy to make a co
a9b0: 6d 70 6c 65 74 65 0a 2a 2a 20 63 6f 70 79 2e 0a  mplete.** copy..
a9c0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 43 6f 70 79  */.case OP_SCopy
a9d0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
a9e0: 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31  * out2 */.  pIn1
a9f0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
aa00: 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ];.  pOut = &aMe
aa10: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73  m[pOp->p2];.  as
aa20: 73 65 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31  sert( pOut!=pIn1
aa30: 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62   );.  sqlite3Vdb
aa40: 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28  eMemShallowCopy(
aa50: 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f  pOut, pIn1, MEM_
aa60: 45 70 68 65 6d 29 3b 0a 23 69 66 64 65 66 20 53  Ephem);.#ifdef S
aa70: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 4f  QLITE_DEBUG.  pO
aa80: 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 3d  ut->pScopyFrom =
aa90: 20 70 49 6e 31 3b 0a 20 20 70 4f 75 74 2d 3e 6d   pIn1;.  pOut->m
aaa0: 53 63 6f 70 79 46 6c 61 67 73 20 3d 20 70 49 6e  ScopyFlags = pIn
aab0: 31 2d 3e 66 6c 61 67 73 3b 0a 23 65 6e 64 69 66  1->flags;.#endif
aac0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
aad0: 4f 70 63 6f 64 65 3a 20 49 6e 74 43 6f 70 79 20  Opcode: IntCopy 
aae0: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
aaf0: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72  ynopsis: r[P2]=r
ab00: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73  [P1].**.** Trans
ab10: 66 65 72 20 74 68 65 20 69 6e 74 65 67 65 72 20  fer the integer 
ab20: 76 61 6c 75 65 20 68 65 6c 64 20 69 6e 20 72 65  value held in re
ab30: 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20 72  gister P1 into r
ab40: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
ab50: 2a 20 54 68 69 73 20 69 73 20 61 6e 20 6f 70 74  * This is an opt
ab60: 69 6d 69 7a 65 64 20 76 65 72 73 69 6f 6e 20 6f  imized version o
ab70: 66 20 53 43 6f 70 79 20 74 68 61 74 20 77 6f 72  f SCopy that wor
ab80: 6b 73 20 6f 6e 6c 79 20 66 6f 72 20 69 6e 74 65  ks only for inte
ab90: 67 65 72 0a 2a 2a 20 76 61 6c 75 65 73 2e 0a 2a  ger.** values..*
aba0: 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 43 6f 70  /.case OP_IntCop
abb0: 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  y: {            
abc0: 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e  /* out2 */.  pIn
abd0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
abe0: 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70  1];.  assert( (p
abf0: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
ac00: 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 70 4f  _Int)!=0 );.  pO
ac10: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
ac20: 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  p2];.  sqlite3Vd
ac30: 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4f  beMemSetInt64(pO
ac40: 75 74 2c 20 70 49 6e 31 2d 3e 75 2e 69 29 3b 0a  ut, pIn1->u.i);.
ac50: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
ac60: 70 63 6f 64 65 3a 20 52 65 73 75 6c 74 52 6f 77  pcode: ResultRow
ac70: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
ac80: 53 79 6e 6f 70 73 69 73 3a 20 6f 75 74 70 75 74  Synopsis: output
ac90: 3d 72 5b 50 31 40 50 32 5d 0a 2a 2a 0a 2a 2a 20  =r[P1@P2].**.** 
aca0: 54 68 65 20 72 65 67 69 73 74 65 72 73 20 50 31  The registers P1
acb0: 20 74 68 72 6f 75 67 68 20 50 31 2b 50 32 2d 31   through P1+P2-1
acc0: 20 63 6f 6e 74 61 69 6e 20 61 20 73 69 6e 67 6c   contain a singl
acd0: 65 20 72 6f 77 20 6f 66 0a 2a 2a 20 72 65 73 75  e row of.** resu
ace0: 6c 74 73 2e 20 54 68 69 73 20 6f 70 63 6f 64 65  lts. This opcode
acf0: 20 63 61 75 73 65 73 20 74 68 65 20 73 71 6c 69   causes the sqli
ad00: 74 65 33 5f 73 74 65 70 28 29 20 63 61 6c 6c 20  te3_step() call 
ad10: 74 6f 20 74 65 72 6d 69 6e 61 74 65 0a 2a 2a 20  to terminate.** 
ad20: 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 52  with an SQLITE_R
ad30: 4f 57 20 72 65 74 75 72 6e 20 63 6f 64 65 20 61  OW return code a
ad40: 6e 64 20 69 74 20 73 65 74 73 20 75 70 20 74 68  nd it sets up th
ad50: 65 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 0a 2a  e sqlite3_stmt.*
ad60: 2a 20 73 74 72 75 63 74 75 72 65 20 74 6f 20 70  * structure to p
ad70: 72 6f 76 69 64 65 20 61 63 63 65 73 73 20 74 6f  rovide access to
ad80: 20 74 68 65 20 72 28 50 31 29 2e 2e 72 28 50 31   the r(P1)..r(P1
ad90: 2b 50 32 2d 31 29 20 76 61 6c 75 65 73 20 61 73  +P2-1) values as
ada0: 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 20 72  .** the result r
adb0: 6f 77 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  ow..*/.case OP_R
adc0: 65 73 75 6c 74 52 6f 77 3a 20 7b 0a 20 20 4d 65  esultRow: {.  Me
add0: 6d 20 2a 70 4d 65 6d 3b 0a 20 20 69 6e 74 20 69  m *pMem;.  int i
ade0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6e  ;.  assert( p->n
adf0: 52 65 73 43 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e  ResColumn==pOp->
ae00: 70 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  p2 );.  assert( 
ae10: 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 61  pOp->p1>0 );.  a
ae20: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 2b 70  ssert( pOp->p1+p
ae30: 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p2<=(p->nMem
ae40: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
ae50: 2b 31 20 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53  +1 );..#ifndef S
ae60: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52  QLITE_OMIT_PROGR
ae70: 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 2f  ESS_CALLBACK.  /
ae80: 2a 20 52 75 6e 20 74 68 65 20 70 72 6f 67 72 65  * Run the progre
ae90: 73 73 20 63 6f 75 6e 74 65 72 20 6a 75 73 74 20  ss counter just 
aea0: 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67  before returning
aeb0: 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d  ..  */.  if( db-
aec0: 3e 78 50 72 6f 67 72 65 73 73 21 3d 30 0a 20 20  >xProgress!=0.  
aed0: 20 26 26 20 6e 56 6d 53 74 65 70 3e 3d 6e 50 72   && nVmStep>=nPr
aee0: 6f 67 72 65 73 73 4c 69 6d 69 74 20 0a 20 20 20  ogressLimit .   
aef0: 26 26 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73  && db->xProgress
af00: 28 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41 72  (db->pProgressAr
af10: 67 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 72  g)!=0.  ){.    r
af20: 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52  c = SQLITE_INTER
af30: 52 55 50 54 3b 0a 20 20 20 20 67 6f 74 6f 20 61  RUPT;.    goto a
af40: 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
af50: 72 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20  r;.  }.#endif.. 
af60: 20 2f 2a 20 49 66 20 74 68 69 73 20 73 74 61 74   /* If this stat
af70: 65 6d 65 6e 74 20 68 61 73 20 76 69 6f 6c 61 74  ement has violat
af80: 65 64 20 69 6d 6d 65 64 69 61 74 65 20 66 6f 72  ed immediate for
af90: 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
afa0: 69 6e 74 73 2c 20 64 6f 0a 20 20 2a 2a 20 6e 6f  ints, do.  ** no
afb0: 74 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d  t return the num
afc0: 62 65 72 20 6f 66 20 72 6f 77 73 20 6d 6f 64 69  ber of rows modi
afd0: 66 69 65 64 2e 20 41 6e 64 20 64 6f 20 6e 6f 74  fied. And do not
afe0: 20 52 45 4c 45 41 53 45 20 74 68 65 20 73 74 61   RELEASE the sta
aff0: 74 65 6d 65 6e 74 0a 20 20 2a 2a 20 74 72 61 6e  tement.  ** tran
b000: 73 61 63 74 69 6f 6e 2e 20 49 74 20 6e 65 65 64  saction. It need
b010: 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62  s to be rolled b
b020: 61 63 6b 2e 20 20 2a 2f 0a 20 20 69 66 28 20 53  ack.  */.  if( S
b030: 51 4c 49 54 45 5f 4f 4b 21 3d 28 72 63 20 3d 20  QLITE_OK!=(rc = 
b040: 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b  sqlite3VdbeCheck
b050: 46 6b 28 70 2c 20 30 29 29 20 29 7b 0a 20 20 20  Fk(p, 0)) ){.   
b060: 20 61 73 73 65 72 74 28 20 64 62 2d 3e 66 6c 61   assert( db->fla
b070: 67 73 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52  gs&SQLITE_CountR
b080: 6f 77 73 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ows );.    asser
b090: 74 28 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f  t( p->usesStmtJo
b0a0: 75 72 6e 61 6c 20 29 3b 0a 20 20 20 20 67 6f 74  urnal );.    got
b0b0: 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
b0c0: 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  rror;.  }..  /* 
b0d0: 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 43 6f  If the SQLITE_Co
b0e0: 75 6e 74 52 6f 77 73 20 66 6c 61 67 20 69 73 20  untRows flag is 
b0f0: 73 65 74 20 69 6e 20 73 71 6c 69 74 65 33 2e 66  set in sqlite3.f
b100: 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20  lags mask, then 
b110: 0a 20 20 2a 2a 20 44 4d 4c 20 73 74 61 74 65 6d  .  ** DML statem
b120: 65 6e 74 73 20 69 6e 76 6f 6b 65 20 74 68 69 73  ents invoke this
b130: 20 6f 70 63 6f 64 65 20 74 6f 20 72 65 74 75 72   opcode to retur
b140: 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
b150: 72 6f 77 73 20 0a 20 20 2a 2a 20 6d 6f 64 69 66  rows .  ** modif
b160: 69 65 64 20 74 6f 20 74 68 65 20 75 73 65 72 2e  ied to the user.
b170: 20 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c   This is the onl
b180: 79 20 77 61 79 20 74 68 61 74 20 61 20 56 4d 20  y way that a VM 
b190: 74 68 61 74 0a 20 20 2a 2a 20 6f 70 65 6e 73 20  that.  ** opens 
b1a0: 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  a statement tran
b1b0: 73 61 63 74 69 6f 6e 20 6d 61 79 20 69 6e 76 6f  saction may invo
b1c0: 6b 65 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a  ke this opcode..
b1d0: 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 63 61 73    **.  ** In cas
b1e0: 65 20 74 68 69 73 20 69 73 20 73 75 63 68 20 61  e this is such a
b1f0: 20 73 74 61 74 65 6d 65 6e 74 2c 20 63 6c 6f 73   statement, clos
b200: 65 20 61 6e 79 20 73 74 61 74 65 6d 65 6e 74 20  e any statement 
b210: 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20 2a 2a  transaction.  **
b220: 20 6f 70 65 6e 65 64 20 62 79 20 74 68 69 73 20   opened by this 
b230: 56 4d 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e  VM before return
b240: 69 6e 67 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74  ing control to t
b250: 68 65 20 75 73 65 72 2e 20 54 68 69 73 20 69 73  he user. This is
b260: 20 74 6f 0a 20 20 2a 2a 20 65 6e 73 75 72 65 20   to.  ** ensure 
b270: 74 68 61 74 20 73 74 61 74 65 6d 65 6e 74 2d 74  that statement-t
b280: 72 61 6e 73 61 63 74 69 6f 6e 73 20 61 72 65 20  ransactions are 
b290: 61 6c 77 61 79 73 20 6e 65 73 74 65 64 2c 20 6e  always nested, n
b2a0: 6f 74 20 6f 76 65 72 6c 61 70 70 69 6e 67 2e 0a  ot overlapping..
b2b0: 20 20 2a 2a 20 49 66 20 74 68 65 20 6f 70 65 6e    ** If the open
b2c0: 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73   statement-trans
b2d0: 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 63 6c  action is not cl
b2e0: 6f 73 65 64 20 68 65 72 65 2c 20 74 68 65 6e 20  osed here, then 
b2f0: 74 68 65 20 75 73 65 72 0a 20 20 2a 2a 20 6d 61  the user.  ** ma
b300: 79 20 73 74 65 70 20 61 6e 6f 74 68 65 72 20 56  y step another V
b310: 4d 20 74 68 61 74 20 6f 70 65 6e 73 20 69 74 73  M that opens its
b320: 20 6f 77 6e 20 73 74 61 74 65 6d 65 6e 74 20 74   own statement t
b330: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 54 68 69 73  ransaction. This
b340: 0a 20 20 2a 2a 20 6d 61 79 20 6c 65 61 64 20 74  .  ** may lead t
b350: 6f 20 6f 76 65 72 6c 61 70 70 69 6e 67 20 73 74  o overlapping st
b360: 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
b370: 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ions..  **.  ** 
b380: 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72  The statement tr
b390: 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 65 76  ansaction is nev
b3a0: 65 72 20 61 20 74 6f 70 2d 6c 65 76 65 6c 20 74  er a top-level t
b3b0: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 48 65 6e  ransaction.  Hen
b3c0: 63 65 0a 20 20 2a 2a 20 74 68 65 20 52 45 4c 45  ce.  ** the RELE
b3d0: 41 53 45 20 63 61 6c 6c 20 62 65 6c 6f 77 20 63  ASE call below c
b3e0: 61 6e 20 6e 65 76 65 72 20 66 61 69 6c 2e 0a 20  an never fail.. 
b3f0: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 2d   */.  assert( p-
b400: 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 7c  >iStatement==0 |
b410: 7c 20 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49  | db->flags&SQLI
b420: 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a  TE_CountRows );.
b430: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
b440: 62 65 43 6c 6f 73 65 53 74 61 74 65 6d 65 6e 74  beCloseStatement
b450: 28 70 2c 20 53 41 56 45 50 4f 49 4e 54 5f 52 45  (p, SAVEPOINT_RE
b460: 4c 45 41 53 45 29 3b 0a 20 20 61 73 73 65 72 74  LEASE);.  assert
b470: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
b480: 29 3b 0a 0a 20 20 2f 2a 20 49 6e 76 61 6c 69 64  );..  /* Invalid
b490: 61 74 65 20 61 6c 6c 20 65 70 68 65 6d 65 72 61  ate all ephemera
b4a0: 6c 20 63 75 72 73 6f 72 20 72 6f 77 20 63 61 63  l cursor row cac
b4b0: 68 65 73 20 2a 2f 0a 20 20 70 2d 3e 63 61 63 68  hes */.  p->cach
b4c0: 65 43 74 72 20 3d 20 28 70 2d 3e 63 61 63 68 65  eCtr = (p->cache
b4d0: 43 74 72 20 2b 20 32 29 7c 31 3b 0a 0a 20 20 2f  Ctr + 2)|1;..  /
b4e0: 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20  * Make sure the 
b4f0: 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63  results of the c
b500: 75 72 72 65 6e 74 20 72 6f 77 20 61 72 65 20 5c  urrent row are \
b510: 30 30 30 20 74 65 72 6d 69 6e 61 74 65 64 0a 20  000 terminated. 
b520: 20 2a 2a 20 61 6e 64 20 68 61 76 65 20 61 6e 20   ** and have an 
b530: 61 73 73 69 67 6e 65 64 20 74 79 70 65 2e 20 20  assigned type.  
b540: 54 68 65 20 72 65 73 75 6c 74 73 20 61 72 65 20  The results are 
b550: 64 65 2d 65 70 68 65 6d 65 72 61 6c 69 7a 65 64  de-ephemeralized
b560: 20 61 73 0a 20 20 2a 2a 20 61 20 73 69 64 65 20   as.  ** a side 
b570: 65 66 66 65 63 74 2e 0a 20 20 2a 2f 0a 20 20 70  effect..  */.  p
b580: 4d 65 6d 20 3d 20 70 2d 3e 70 52 65 73 75 6c 74  Mem = p->pResult
b590: 53 65 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Set = &aMem[pOp-
b5a0: 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b  >p1];.  for(i=0;
b5b0: 20 69 3c 70 4f 70 2d 3e 70 32 3b 20 69 2b 2b 29   i<pOp->p2; i++)
b5c0: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  {.    assert( me
b5d0: 6d 49 73 56 61 6c 69 64 28 26 70 4d 65 6d 5b 69  mIsValid(&pMem[i
b5e0: 5d 29 20 29 3b 0a 20 20 20 20 44 65 65 70 68 65  ]) );.    Deephe
b5f0: 6d 65 72 61 6c 69 7a 65 28 26 70 4d 65 6d 5b 69  meralize(&pMem[i
b600: 5d 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  ]);.    assert( 
b610: 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73 20 26  (pMem[i].flags &
b620: 20 4d 45 4d 5f 45 70 68 65 6d 29 3d 3d 30 0a 20   MEM_Ephem)==0. 
b630: 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 28 70             || (p
b640: 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73 20 26 20 28  Mem[i].flags & (
b650: 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62  MEM_Str|MEM_Blob
b660: 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c  ))==0 );.    sql
b670: 69 74 65 33 56 64 62 65 4d 65 6d 4e 75 6c 54 65  ite3VdbeMemNulTe
b680: 72 6d 69 6e 61 74 65 28 26 70 4d 65 6d 5b 69 5d  rminate(&pMem[i]
b690: 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  );.    REGISTER_
b6a0: 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2b 69 2c  TRACE(pOp->p1+i,
b6b0: 20 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 7d 0a   &pMem[i]);.  }.
b6c0: 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63    if( db->malloc
b6d0: 46 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f  Failed ) goto no
b6e0: 5f 6d 65 6d 3b 0a 0a 20 20 69 66 28 20 64 62 2d  _mem;..  if( db-
b6f0: 3e 6d 54 72 61 63 65 20 26 20 53 51 4c 49 54 45  >mTrace & SQLITE
b700: 5f 54 52 41 43 45 5f 52 4f 57 20 29 7b 0a 20 20  _TRACE_ROW ){.  
b710: 20 20 64 62 2d 3e 78 54 72 61 63 65 28 53 51 4c    db->xTrace(SQL
b720: 49 54 45 5f 54 52 41 43 45 5f 52 4f 57 2c 20 64  ITE_TRACE_ROW, d
b730: 62 2d 3e 70 54 72 61 63 65 41 72 67 2c 20 70 2c  b->pTraceArg, p,
b740: 20 30 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52   0);.  }..  /* R
b750: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 52 4f 57  eturn SQLITE_ROW
b760: 0a 20 20 2a 2f 0a 20 20 70 2d 3e 70 63 20 3d 20  .  */.  p->pc = 
b770: 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29  (int)(pOp - aOp)
b780: 20 2b 20 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c   + 1;.  rc = SQL
b790: 49 54 45 5f 52 4f 57 3b 0a 20 20 67 6f 74 6f 20  ITE_ROW;.  goto 
b7a0: 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a  vdbe_return;.}..
b7b0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6e 63 61  /* Opcode: Conca
b7c0: 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
b7d0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
b7e0: 5d 3d 72 5b 50 32 5d 2b 72 5b 50 31 5d 0a 2a 2a  ]=r[P2]+r[P1].**
b7f0: 0a 2a 2a 20 41 64 64 20 74 68 65 20 74 65 78 74  .** Add the text
b800: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
b810: 6f 6e 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20  onto the end of 
b820: 74 68 65 20 74 65 78 74 20 69 6e 0a 2a 2a 20 72  the text in.** r
b830: 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 73  egister P2 and s
b840: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
b850: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
b860: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 74 68 65  ** If either the
b870: 20 50 31 20 6f 72 20 50 32 20 74 65 78 74 20 61   P1 or P2 text a
b880: 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f  re NULL then sto
b890: 72 65 20 4e 55 4c 4c 20 69 6e 20 50 33 2e 0a 2a  re NULL in P3..*
b8a0: 2a 0a 2a 2a 20 20 20 50 33 20 3d 20 50 32 20 7c  *.**   P3 = P2 |
b8b0: 7c 20 50 31 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73  | P1.**.** It is
b8c0: 20 69 6c 6c 65 67 61 6c 20 66 6f 72 20 50 31 20   illegal for P1 
b8d0: 61 6e 64 20 50 33 20 74 6f 20 62 65 20 74 68 65  and P3 to be the
b8e0: 20 73 61 6d 65 20 72 65 67 69 73 74 65 72 2e 20   same register. 
b8f0: 53 6f 6d 65 74 69 6d 65 73 2c 0a 2a 2a 20 69 66  Sometimes,.** if
b900: 20 50 33 20 69 73 20 74 68 65 20 73 61 6d 65 20   P3 is the same 
b910: 72 65 67 69 73 74 65 72 20 61 73 20 50 32 2c 20  register as P2, 
b920: 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  the implementati
b930: 6f 6e 20 69 73 20 61 62 6c 65 0a 2a 2a 20 74 6f  on is able.** to
b940: 20 61 76 6f 69 64 20 61 20 6d 65 6d 63 70 79 28   avoid a memcpy(
b950: 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f  )..*/.case OP_Co
b960: 6e 63 61 74 3a 20 7b 20 20 20 20 20 20 20 20 20  ncat: {         
b970: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
b980: 43 4f 4e 43 41 54 2c 20 69 6e 31 2c 20 69 6e 32  CONCAT, in1, in2
b990: 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20  , out3 */.  i64 
b9a0: 6e 42 79 74 65 3b 0a 0a 20 20 70 49 6e 31 20 3d  nByte;..  pIn1 =
b9b0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
b9c0: 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
b9d0: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74  pOp->p2];.  pOut
b9e0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
b9f0: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
ba00: 31 21 3d 70 4f 75 74 20 29 3b 0a 20 20 69 66 28  1!=pOut );.  if(
ba10: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20   (pIn1->flags | 
ba20: 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d  pIn2->flags) & M
ba30: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73  EM_Null ){.    s
ba40: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
ba50: 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20  Null(pOut);.    
ba60: 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 66 28  break;.  }.  if(
ba70: 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31   ExpandBlob(pIn1
ba80: 29 20 7c 7c 20 45 78 70 61 6e 64 42 6c 6f 62 28  ) || ExpandBlob(
ba90: 70 49 6e 32 29 20 29 20 67 6f 74 6f 20 6e 6f 5f  pIn2) ) goto no_
baa0: 6d 65 6d 3b 0a 20 20 53 74 72 69 6e 67 69 66 79  mem;.  Stringify
bab0: 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29  (pIn1, encoding)
bac0: 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70 49  ;.  Stringify(pI
bad0: 6e 32 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  n2, encoding);. 
bae0: 20 6e 42 79 74 65 20 3d 20 70 49 6e 31 2d 3e 6e   nByte = pIn1->n
baf0: 20 2b 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 69 66   + pIn2->n;.  if
bb00: 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d  ( nByte>db->aLim
bb10: 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
bb20: 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67  LENGTH] ){.    g
bb30: 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d  oto too_big;.  }
bb40: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64  .  if( sqlite3Vd
bb50: 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20  beMemGrow(pOut, 
bb60: 28 69 6e 74 29 6e 42 79 74 65 2b 32 2c 20 70 4f  (int)nByte+2, pO
bb70: 75 74 3d 3d 70 49 6e 32 29 20 29 7b 0a 20 20 20  ut==pIn2) ){.   
bb80: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
bb90: 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  }.  MemSetTypeFl
bba0: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 53 74 72  ag(pOut, MEM_Str
bbb0: 29 3b 0a 20 20 69 66 28 20 70 4f 75 74 21 3d 70  );.  if( pOut!=p
bbc0: 49 6e 32 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70  In2 ){.    memcp
bbd0: 79 28 70 4f 75 74 2d 3e 7a 2c 20 70 49 6e 32 2d  y(pOut->z, pIn2-
bbe0: 3e 7a 2c 20 70 49 6e 32 2d 3e 6e 29 3b 0a 20 20  >z, pIn2->n);.  
bbf0: 7d 0a 20 20 6d 65 6d 63 70 79 28 26 70 4f 75 74  }.  memcpy(&pOut
bc00: 2d 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c 20 70 49  ->z[pIn2->n], pI
bc10: 6e 31 2d 3e 7a 2c 20 70 49 6e 31 2d 3e 6e 29 3b  n1->z, pIn1->n);
bc20: 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65  .  pOut->z[nByte
bc30: 5d 3d 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e  ]=0;.  pOut->z[n
bc40: 42 79 74 65 2b 31 5d 20 3d 20 30 3b 0a 20 20 70  Byte+1] = 0;.  p
bc50: 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45  Out->flags |= ME
bc60: 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e  M_Term;.  pOut->
bc70: 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a  n = (int)nByte;.
bc80: 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e    pOut->enc = en
bc90: 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45  coding;.  UPDATE
bca0: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
bcb0: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
bcc0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 20  ./* Opcode: Add 
bcd0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
bce0: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d  Synopsis: r[P3]=
bcf0: 72 5b 50 31 5d 2b 72 5b 50 32 5d 0a 2a 2a 0a 2a  r[P1]+r[P2].**.*
bd00: 2a 20 41 64 64 20 74 68 65 20 76 61 6c 75 65 20  * Add the value 
bd10: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
bd20: 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  o the value in r
bd30: 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e  egister P2.** an
bd40: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
bd50: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
bd60: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
bd70: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
bd80: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
bd90: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
bda0: 20 4d 75 6c 74 69 70 6c 79 20 50 31 20 50 32 20   Multiply P1 P2 
bdb0: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
bdc0: 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 2a  is: r[P3]=r[P1]*
bdd0: 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d  r[P2].**.**.** M
bde0: 75 6c 74 69 70 6c 79 20 74 68 65 20 76 61 6c 75  ultiply the valu
bdf0: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
be00: 20 62 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e   by the value in
be10: 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20   register P2.** 
be20: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
be30: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
be40: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
be50: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
be60: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
be70: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
be80: 65 3a 20 53 75 62 74 72 61 63 74 20 50 31 20 50  e: Subtract P1 P
be90: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
bea0: 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32  psis: r[P3]=r[P2
beb0: 5d 2d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 75  ]-r[P1].**.** Su
bec0: 62 74 72 61 63 74 20 74 68 65 20 76 61 6c 75 65  btract the value
bed0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
bee0: 66 72 6f 6d 20 74 68 65 20 76 61 6c 75 65 20 69  from the value i
bef0: 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a  n register P2.**
bf00: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
bf10: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
bf20: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
bf30: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
bf40: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
bf50: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
bf60: 64 65 3a 20 44 69 76 69 64 65 20 50 31 20 50 32  de: Divide P1 P2
bf70: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
bf80: 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d  sis: r[P3]=r[P2]
bf90: 2f 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 44 69 76  /r[P1].**.** Div
bfa0: 69 64 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  ide the value in
bfb0: 20 72 65 67 69 73 74 65 72 20 50 31 20 62 79 20   register P1 by 
bfc0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
bfd0: 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20  ister P2.** and 
bfe0: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
bff0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
c000: 28 50 33 3d 50 32 2f 50 31 29 2e 20 49 66 20 74  (P3=P2/P1). If t
c010: 68 65 20 76 61 6c 75 65 20 69 6e 20 0a 2a 2a 20  he value in .** 
c020: 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 7a  register P1 is z
c030: 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 72 65  ero, then the re
c040: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 20 49 66  sult is NULL. If
c050: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
c060: 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 20 72   .** NULL, the r
c070: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
c080: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6d  /./* Opcode: Rem
c090: 61 69 6e 64 65 72 20 50 31 20 50 32 20 50 33 20  ainder P1 P2 P3 
c0a0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
c0b0: 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 25 72 5b 50   r[P3]=r[P2]%r[P
c0c0: 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 75 74 65  1].**.** Compute
c0d0: 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20 61   the remainder a
c0e0: 66 74 65 72 20 69 6e 74 65 67 65 72 20 72 65 67  fter integer reg
c0f0: 69 73 74 65 72 20 50 32 20 69 73 20 64 69 76 69  ister P2 is divi
c100: 64 65 64 20 62 79 20 0a 2a 2a 20 72 65 67 69 73  ded by .** regis
c110: 74 65 72 20 50 31 20 61 6e 64 20 73 74 6f 72 65  ter P1 and store
c120: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
c130: 65 67 69 73 74 65 72 20 50 33 2e 20 0a 2a 2a 20  egister P3. .** 
c140: 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  If the value in 
c150: 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 7a  register P1 is z
c160: 65 72 6f 20 74 68 65 20 72 65 73 75 6c 74 20 69  ero the result i
c170: 73 20 4e 55 4c 4c 2e 0a 2a 2a 20 49 66 20 65 69  s NULL..** If ei
c180: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
c190: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
c1a0: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73   is NULL..*/.cas
c1b0: 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20  e OP_Add:       
c1c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
c1d0: 61 6d 65 20 61 73 20 54 4b 5f 50 4c 55 53 2c 20  ame as TK_PLUS, 
c1e0: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
c1f0: 2f 0a 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61  /.case OP_Subtra
c200: 63 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  ct:             
c210: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4d   /* same as TK_M
c220: 49 4e 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  INUS, in1, in2, 
c230: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
c240: 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 20 20 20  Multiply:       
c250: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
c260: 73 20 54 4b 5f 53 54 41 52 2c 20 69 6e 31 2c 20  s TK_STAR, in1, 
c270: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
c280: 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 20 20 20  e OP_Divide:    
c290: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
c2a0: 61 6d 65 20 61 73 20 54 4b 5f 53 4c 41 53 48 2c  ame as TK_SLASH,
c2b0: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
c2c0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 6d 61 69  */.case OP_Remai
c2d0: 6e 64 65 72 3a 20 7b 20 20 20 20 20 20 20 20 20  nder: {         
c2e0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
c2f0: 52 45 4d 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  REM, in1, in2, o
c300: 75 74 33 20 2a 2f 0a 20 20 63 68 61 72 20 62 49  ut3 */.  char bI
c310: 6e 74 69 6e 74 3b 20 20 20 2f 2a 20 53 74 61 72  ntint;   /* Star
c320: 74 65 64 20 6f 75 74 20 61 73 20 74 77 6f 20 69  ted out as two i
c330: 6e 74 65 67 65 72 20 6f 70 65 72 61 6e 64 73 20  nteger operands 
c340: 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 3b 20  */.  u16 flags; 
c350: 20 20 20 20 20 2f 2a 20 43 6f 6d 62 69 6e 65 64       /* Combined
c360: 20 4d 45 4d 5f 2a 20 66 6c 61 67 73 20 66 72 6f   MEM_* flags fro
c370: 6d 20 62 6f 74 68 20 69 6e 70 75 74 73 20 2a 2f  m both inputs */
c380: 0a 20 20 75 31 36 20 74 79 70 65 31 3b 20 20 20  .  u16 type1;   
c390: 20 20 20 2f 2a 20 4e 75 6d 65 72 69 63 20 74 79     /* Numeric ty
c3a0: 70 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61  pe of left opera
c3b0: 6e 64 20 2a 2f 0a 20 20 75 31 36 20 74 79 70 65  nd */.  u16 type
c3c0: 32 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 65 72  2;      /* Numer
c3d0: 69 63 20 74 79 70 65 20 6f 66 20 72 69 67 68 74  ic type of right
c3e0: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36   operand */.  i6
c3f0: 34 20 69 41 3b 20 20 20 20 20 20 20 20 20 2f 2a  4 iA;         /*
c400: 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f   Integer value o
c410: 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a  f left operand *
c420: 2f 0a 20 20 69 36 34 20 69 42 3b 20 20 20 20 20  /.  i64 iB;     
c430: 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76      /* Integer v
c440: 61 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70  alue of right op
c450: 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c  erand */.  doubl
c460: 65 20 72 41 3b 20 20 20 20 20 20 2f 2a 20 52 65  e rA;      /* Re
c470: 61 6c 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74  al value of left
c480: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f   operand */.  do
c490: 75 62 6c 65 20 72 42 3b 20 20 20 20 20 20 2f 2a  uble rB;      /*
c4a0: 20 52 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 72   Real value of r
c4b0: 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  ight operand */.
c4c0: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
c4d0: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 74 79 70 65  pOp->p1];.  type
c4e0: 31 20 3d 20 6e 75 6d 65 72 69 63 54 79 70 65 28  1 = numericType(
c4f0: 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20  pIn1);.  pIn2 = 
c500: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
c510: 20 20 74 79 70 65 32 20 3d 20 6e 75 6d 65 72 69    type2 = numeri
c520: 63 54 79 70 65 28 70 49 6e 32 29 3b 0a 20 20 70  cType(pIn2);.  p
c530: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
c540: 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 20 3d 20  >p3];.  flags = 
c550: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49  pIn1->flags | pI
c560: 6e 32 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28  n2->flags;.  if(
c570: 20 28 74 79 70 65 31 20 26 20 74 79 70 65 32 20   (type1 & type2 
c580: 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 7b  & MEM_Int)!=0 ){
c590: 0a 20 20 20 20 69 41 20 3d 20 70 49 6e 31 2d 3e  .    iA = pIn1->
c5a0: 75 2e 69 3b 0a 20 20 20 20 69 42 20 3d 20 70 49  u.i;.    iB = pI
c5b0: 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 62 49 6e  n2->u.i;.    bIn
c5c0: 74 69 6e 74 20 3d 20 31 3b 0a 20 20 20 20 73 77  tint = 1;.    sw
c5d0: 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  itch( pOp->opcod
c5e0: 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20  e ){.      case 
c5f0: 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 69 66  OP_Add:       if
c600: 28 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36  ( sqlite3AddInt6
c610: 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f  4(&iB,iA) ) goto
c620: 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b   fp_math;  break
c630: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
c640: 53 75 62 74 72 61 63 74 3a 20 20 69 66 28 20 73  Subtract:  if( s
c650: 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34 28 26  qlite3SubInt64(&
c660: 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70  iB,iA) ) goto fp
c670: 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20  _math;  break;. 
c680: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c       case OP_Mul
c690: 74 69 70 6c 79 3a 20 20 69 66 28 20 73 71 6c 69  tiply:  if( sqli
c6a0: 74 65 33 4d 75 6c 49 6e 74 36 34 28 26 69 42 2c  te3MulInt64(&iB,
c6b0: 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61  iA) ) goto fp_ma
c6c0: 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20  th;  break;.    
c6d0: 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65    case OP_Divide
c6e0: 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20  : {.        if( 
c6f0: 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69  iA==0 ) goto ari
c700: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
c710: 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20  s_null;.        
c720: 69 66 28 20 69 41 3d 3d 2d 31 20 26 26 20 69 42  if( iA==-1 && iB
c730: 3d 3d 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34  ==SMALLEST_INT64
c740: 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b   ) goto fp_math;
c750: 0a 20 20 20 20 20 20 20 20 69 42 20 2f 3d 20 69  .        iB /= i
c760: 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  A;.        break
c770: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
c780: 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20  default: {.     
c790: 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67     if( iA==0 ) g
c7a0: 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72  oto arithmetic_r
c7b0: 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20  esult_is_null;. 
c7c0: 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d         if( iA==-
c7d0: 31 20 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20  1 ) iA = 1;.    
c7e0: 20 20 20 20 69 42 20 25 3d 20 69 41 3b 0a 20 20      iB %= iA;.  
c7f0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
c800: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70     }.    }.    p
c810: 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 42 3b 0a 20  Out->u.i = iB;. 
c820: 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
c830: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
c840: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 28 66  ;.  }else if( (f
c850: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
c860: 21 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  !=0 ){.    goto 
c870: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
c880: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 7d 65 6c  t_is_null;.  }el
c890: 73 65 7b 0a 20 20 20 20 62 49 6e 74 69 6e 74 20  se{.    bIntint 
c8a0: 3d 20 30 3b 0a 66 70 5f 6d 61 74 68 3a 0a 20 20  = 0;.fp_math:.  
c8b0: 20 20 72 41 20 3d 20 73 71 6c 69 74 65 33 56 64    rA = sqlite3Vd
c8c0: 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 31  beRealValue(pIn1
c8d0: 29 3b 0a 20 20 20 20 72 42 20 3d 20 73 71 6c 69  );.    rB = sqli
c8e0: 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65  te3VdbeRealValue
c8f0: 28 70 49 6e 32 29 3b 0a 20 20 20 20 73 77 69 74  (pIn2);.    swit
c900: 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  ch( pOp->opcode 
c910: 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  ){.      case OP
c920: 5f 41 64 64 3a 20 20 20 20 20 20 20 20 20 72 42  _Add:         rB
c930: 20 2b 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72   += rA;       br
c940: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
c950: 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20  OP_Subtract:    
c960: 72 42 20 2d 3d 20 72 41 3b 20 20 20 20 20 20 20  rB -= rA;       
c970: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
c980: 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20  e OP_Multiply:  
c990: 20 20 72 42 20 2a 3d 20 72 41 3b 20 20 20 20 20    rB *= rA;     
c9a0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
c9b0: 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b  ase OP_Divide: {
c9c0: 0a 20 20 20 20 20 20 20 20 2f 2a 20 28 64 6f 75  .        /* (dou
c9d0: 62 6c 65 29 30 20 49 6e 20 63 61 73 65 20 6f 66  ble)0 In case of
c9e0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
c9f0: 41 54 49 4e 47 5f 50 4f 49 4e 54 2e 2e 2e 20 2a  ATING_POINT... *
ca00: 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 41  /.        if( rA
ca10: 3d 3d 28 64 6f 75 62 6c 65 29 30 20 29 20 67 6f  ==(double)0 ) go
ca20: 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65  to arithmetic_re
ca30: 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20  sult_is_null;.  
ca40: 20 20 20 20 20 20 72 42 20 2f 3d 20 72 41 3b 0a        rB /= rA;.
ca50: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
ca60: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66       }.      def
ca70: 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20  ault: {.        
ca80: 69 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  iA = sqlite3Vdbe
ca90: 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a  IntValue(pIn1);.
caa0: 20 20 20 20 20 20 20 20 69 42 20 3d 20 73 71 6c          iB = sql
cab0: 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
cac0: 28 70 49 6e 32 29 3b 0a 20 20 20 20 20 20 20 20  (pIn2);.        
cad0: 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f  if( iA==0 ) goto
cae0: 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75   arithmetic_resu
caf0: 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20  lt_is_null;.    
cb00: 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 29      if( iA==-1 )
cb10: 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20 20   iA = 1;.       
cb20: 20 72 42 20 3d 20 28 64 6f 75 62 6c 65 29 28 69   rB = (double)(i
cb30: 42 20 25 20 69 41 29 3b 0a 20 20 20 20 20 20 20  B % iA);.       
cb40: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
cb50: 20 20 20 20 7d 0a 23 69 66 64 65 66 20 53 51 4c      }.#ifdef SQL
cb60: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
cb70: 47 5f 50 4f 49 4e 54 0a 20 20 20 20 70 4f 75 74  G_POINT.    pOut
cb80: 2d 3e 75 2e 69 20 3d 20 72 42 3b 0a 20 20 20 20  ->u.i = rB;.    
cb90: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
cba0: 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 23  Out, MEM_Int);.#
cbb0: 65 6c 73 65 0a 20 20 20 20 69 66 28 20 73 71 6c  else.    if( sql
cbc0: 69 74 65 33 49 73 4e 61 4e 28 72 42 29 20 29 7b  ite3IsNaN(rB) ){
cbd0: 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 72 69 74  .      goto arit
cbe0: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
cbf0: 5f 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a 20 20 20  _null;.    }.   
cc00: 20 70 4f 75 74 2d 3e 75 2e 72 20 3d 20 72 42 3b   pOut->u.r = rB;
cc10: 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46  .    MemSetTypeF
cc20: 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 52 65  lag(pOut, MEM_Re
cc30: 61 6c 29 3b 0a 20 20 20 20 69 66 28 20 28 28 74  al);.    if( ((t
cc40: 79 70 65 31 7c 74 79 70 65 32 29 26 4d 45 4d 5f  ype1|type2)&MEM_
cc50: 52 65 61 6c 29 3d 3d 30 20 26 26 20 21 62 49 6e  Real)==0 && !bIn
cc60: 74 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 73 71  tint ){.      sq
cc70: 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67 65 72  lite3VdbeInteger
cc80: 41 66 66 69 6e 69 74 79 28 70 4f 75 74 29 3b 0a  Affinity(pOut);.
cc90: 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d      }.#endif.  }
cca0: 0a 20 20 62 72 65 61 6b 3b 0a 0a 61 72 69 74 68  .  break;..arith
ccb0: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
ccc0: 6e 75 6c 6c 3a 0a 20 20 73 71 6c 69 74 65 33 56  null:.  sqlite3V
ccd0: 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f  dbeMemSetNull(pO
cce0: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
ccf0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 6c  ./* Opcode: Coll
cd00: 53 65 71 20 50 31 20 2a 20 2a 20 50 34 0a 2a 2a  Seq P1 * * P4.**
cd10: 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
cd20: 74 65 72 20 74 6f 20 61 20 43 6f 6c 6c 53 65 71  ter to a CollSeq
cd30: 20 6f 62 6a 65 63 74 2e 20 49 66 20 74 68 65 20   object. If the 
cd40: 6e 65 78 74 20 63 61 6c 6c 20 74 6f 20 61 20 75  next call to a u
cd50: 73 65 72 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20  ser function.** 
cd60: 6f 72 20 61 67 67 72 65 67 61 74 65 20 63 61 6c  or aggregate cal
cd70: 6c 73 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e  ls sqlite3GetFun
cd80: 63 43 6f 6c 6c 53 65 71 28 29 2c 20 74 68 69 73  cCollSeq(), this
cd90: 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
cda0: 6e 63 65 20 77 69 6c 6c 0a 2a 2a 20 62 65 20 72  nce will.** be r
cdb0: 65 74 75 72 6e 65 64 2e 20 54 68 69 73 20 69 73  eturned. This is
cdc0: 20 75 73 65 64 20 62 79 20 74 68 65 20 62 75 69   used by the bui
cdd0: 6c 74 2d 69 6e 20 6d 69 6e 28 29 2c 20 6d 61 78  lt-in min(), max
cde0: 28 29 20 61 6e 64 20 6e 75 6c 6c 69 66 28 29 0a  () and nullif().
cdf0: 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a  ** functions..**
ce00: 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 74  .** If P1 is not
ce10: 20 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74 20 69   zero, then it i
ce20: 73 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61  s a register tha
ce30: 74 20 61 20 73 75 62 73 65 71 75 65 6e 74 20 6d  t a subsequent m
ce40: 69 6e 28 29 20 6f 72 0a 2a 2a 20 6d 61 78 28 29  in() or.** max()
ce50: 20 61 67 67 72 65 67 61 74 65 20 77 69 6c 6c 20   aggregate will 
ce60: 73 65 74 20 74 6f 20 31 20 69 66 20 74 68 65 20  set to 1 if the 
ce70: 63 75 72 72 65 6e 74 20 72 6f 77 20 69 73 20 6e  current row is n
ce80: 6f 74 20 74 68 65 20 6d 69 6e 69 6d 75 6d 20 6f  ot the minimum o
ce90: 72 0a 2a 2a 20 6d 61 78 69 6d 75 6d 2e 20 20 54  r.** maximum.  T
cea0: 68 65 20 50 31 20 72 65 67 69 73 74 65 72 20 69  he P1 register i
ceb0: 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f  s initialized to
cec0: 20 30 20 62 79 20 74 68 69 73 20 69 6e 73 74 72   0 by this instr
ced0: 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  uction..**.** Th
cee0: 65 20 69 6e 74 65 72 66 61 63 65 20 75 73 65 64  e interface used
cef0: 20 62 79 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e   by the implemen
cf00: 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 61 66  tation of the af
cf10: 6f 72 65 6d 65 6e 74 69 6f 6e 65 64 20 66 75 6e  orementioned fun
cf20: 63 74 69 6f 6e 73 0a 2a 2a 20 74 6f 20 72 65 74  ctions.** to ret
cf30: 72 69 65 76 65 20 74 68 65 20 63 6f 6c 6c 61 74  rieve the collat
cf40: 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 73 65 74  ion sequence set
cf50: 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20   by this opcode 
cf60: 69 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65  is not available
cf70: 0a 2a 2a 20 70 75 62 6c 69 63 6c 79 2e 20 20 4f  .** publicly.  O
cf80: 6e 6c 79 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e  nly built-in fun
cf90: 63 74 69 6f 6e 73 20 68 61 76 65 20 61 63 63 65  ctions have acce
cfa0: 73 73 20 74 6f 20 74 68 69 73 20 66 65 61 74 75  ss to this featu
cfb0: 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  re..*/.case OP_C
cfc0: 6f 6c 6c 53 65 71 3a 20 7b 0a 20 20 61 73 73 65  ollSeq: {.  asse
cfd0: 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
cfe0: 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20  =P4_COLLSEQ );. 
cff0: 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a   if( pOp->p1 ){.
d000: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
d010: 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d  emSetInt64(&aMem
d020: 5b 70 4f 70 2d 3e 70 31 5d 2c 20 30 29 3b 0a 20  [pOp->p1], 0);. 
d030: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
d040: 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 41 6e 64  * Opcode: BitAnd
d050: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
d060: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
d070: 3d 72 5b 50 31 5d 26 72 5b 50 32 5d 0a 2a 2a 0a  =r[P1]&r[P2].**.
d080: 2a 2a 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d  ** Take the bit-
d090: 77 69 73 65 20 41 4e 44 20 6f 66 20 74 68 65 20  wise AND of the 
d0a0: 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74  values in regist
d0b0: 65 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64  er P1 and P2 and
d0c0: 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65  .** store the re
d0d0: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
d0e0: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
d0f0: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
d100: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
d110: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
d120: 65 3a 20 42 69 74 4f 72 20 50 31 20 50 32 20 50  e: BitOr P1 P2 P
d130: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
d140: 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 7c 72  s: r[P3]=r[P1]|r
d150: 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20  [P2].**.** Take 
d160: 74 68 65 20 62 69 74 2d 77 69 73 65 20 4f 52 20  the bit-wise OR 
d170: 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  of the values in
d180: 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64   register P1 and
d190: 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65   P2 and.** store
d1a0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
d1b0: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
d1c0: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
d1d0: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
d1e0: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
d1f0: 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 4c  * Opcode: ShiftL
d200: 65 66 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  eft P1 P2 P3 * *
d210: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
d220: 50 33 5d 3d 72 5b 50 32 5d 3c 3c 72 5b 50 31 5d  P3]=r[P2]<<r[P1]
d230: 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65  .**.** Shift the
d240: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69   integer value i
d250: 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f  n register P2 to
d260: 20 74 68 65 20 6c 65 66 74 20 62 79 20 74 68 65   the left by the
d270: 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69  .** number of bi
d280: 74 73 20 73 70 65 63 69 66 69 65 64 20 62 79 20  ts specified by 
d290: 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72  the integer in r
d2a0: 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53  egister P1..** S
d2b0: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
d2c0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
d2d0: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
d2e0: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
d2f0: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
d300: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68  */./* Opcode: Sh
d310: 69 66 74 52 69 67 68 74 20 50 31 20 50 32 20 50  iftRight P1 P2 P
d320: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
d330: 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 3e 3e  s: r[P3]=r[P2]>>
d340: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69 66  r[P1].**.** Shif
d350: 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61  t the integer va
d360: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
d370: 50 32 20 74 6f 20 74 68 65 20 72 69 67 68 74 20  P2 to the right 
d380: 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72  by the.** number
d390: 20 6f 66 20 62 69 74 73 20 73 70 65 63 69 66 69   of bits specifi
d3a0: 65 64 20 62 79 20 74 68 65 20 69 6e 74 65 67 65  ed by the intege
d3b0: 72 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  r in register P1
d3c0: 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72  ..** Store the r
d3d0: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
d3e0: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
d3f0: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
d400: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
d410: 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
d420: 5f 42 69 74 41 6e 64 3a 20 20 20 20 20 20 20 20  _BitAnd:        
d430: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
d440: 20 61 73 20 54 4b 5f 42 49 54 41 4e 44 2c 20 69   as TK_BITAND, i
d450: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
d460: 0a 63 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a 20  .case OP_BitOr: 
d470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d480: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42   /* same as TK_B
d490: 49 54 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  ITOR, in1, in2, 
d4a0: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
d4b0: 53 68 69 66 74 4c 65 66 74 3a 20 20 20 20 20 20  ShiftLeft:      
d4c0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
d4d0: 61 73 20 54 4b 5f 4c 53 48 49 46 54 2c 20 69 6e  as TK_LSHIFT, in
d4e0: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
d4f0: 63 61 73 65 20 4f 50 5f 53 68 69 66 74 52 69 67  case OP_ShiftRig
d500: 68 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ht: {           
d510: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 53  /* same as TK_RS
d520: 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  HIFT, in1, in2, 
d530: 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 69 41  out3 */.  i64 iA
d540: 3b 0a 20 20 75 36 34 20 75 41 3b 0a 20 20 69 36  ;.  u64 uA;.  i6
d550: 34 20 69 42 3b 0a 20 20 75 38 20 6f 70 3b 0a 0a  4 iB;.  u8 op;..
d560: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
d570: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20  Op->p1];.  pIn2 
d580: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
d590: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
d5a0: 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28  [pOp->p3];.  if(
d5b0: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20   (pIn1->flags | 
d5c0: 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d  pIn2->flags) & M
d5d0: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73  EM_Null ){.    s
d5e0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
d5f0: 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20  Null(pOut);.    
d600: 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 41 20  break;.  }.  iA 
d610: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
d620: 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 69  Value(pIn2);.  i
d630: 42 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  B = sqlite3VdbeI
d640: 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20  ntValue(pIn1);. 
d650: 20 6f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64   op = pOp->opcod
d660: 65 3b 0a 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f  e;.  if( op==OP_
d670: 42 69 74 41 6e 64 20 29 7b 0a 20 20 20 20 69 41  BitAnd ){.    iA
d680: 20 26 3d 20 69 42 3b 0a 20 20 7d 65 6c 73 65 20   &= iB;.  }else 
d690: 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 4f 72  if( op==OP_BitOr
d6a0: 20 29 7b 0a 20 20 20 20 69 41 20 7c 3d 20 69 42   ){.    iA |= iB
d6b0: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 69 42  ;.  }else if( iB
d6c0: 21 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72  !=0 ){.    asser
d6d0: 74 28 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 52  t( op==OP_ShiftR
d6e0: 69 67 68 74 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53  ight || op==OP_S
d6f0: 68 69 66 74 4c 65 66 74 20 29 3b 0a 0a 20 20 20  hiftLeft );..   
d700: 20 2f 2a 20 49 66 20 73 68 69 66 74 69 6e 67 20   /* If shifting 
d710: 62 79 20 61 20 6e 65 67 61 74 69 76 65 20 61 6d  by a negative am
d720: 6f 75 6e 74 2c 20 73 68 69 66 74 20 69 6e 20 74  ount, shift in t
d730: 68 65 20 6f 74 68 65 72 20 64 69 72 65 63 74 69  he other directi
d740: 6f 6e 20 2a 2f 0a 20 20 20 20 69 66 28 20 69 42  on */.    if( iB
d750: 3c 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  <0 ){.      asse
d760: 72 74 28 20 4f 50 5f 53 68 69 66 74 52 69 67 68  rt( OP_ShiftRigh
d770: 74 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 2b  t==OP_ShiftLeft+
d780: 31 20 29 3b 0a 20 20 20 20 20 20 6f 70 20 3d 20  1 );.      op = 
d790: 32 2a 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 2b  2*OP_ShiftLeft +
d7a0: 20 31 20 2d 20 6f 70 3b 0a 20 20 20 20 20 20 69   1 - op;.      i
d7b0: 42 20 3d 20 69 42 3e 28 2d 36 34 29 20 3f 20 2d  B = iB>(-64) ? -
d7c0: 69 42 20 3a 20 36 34 3b 0a 20 20 20 20 7d 0a 0a  iB : 64;.    }..
d7d0: 20 20 20 20 69 66 28 20 69 42 3e 3d 36 34 20 29      if( iB>=64 )
d7e0: 7b 0a 20 20 20 20 20 20 69 41 20 3d 20 28 69 41  {.      iA = (iA
d7f0: 3e 3d 30 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68  >=0 || op==OP_Sh
d800: 69 66 74 4c 65 66 74 29 20 3f 20 30 20 3a 20 2d  iftLeft) ? 0 : -
d810: 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  1;.    }else{.  
d820: 20 20 20 20 6d 65 6d 63 70 79 28 26 75 41 2c 20      memcpy(&uA, 
d830: 26 69 41 2c 20 73 69 7a 65 6f 66 28 75 41 29 29  &iA, sizeof(uA))
d840: 3b 0a 20 20 20 20 20 20 69 66 28 20 6f 70 3d 3d  ;.      if( op==
d850: 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 29 7b 0a  OP_ShiftLeft ){.
d860: 20 20 20 20 20 20 20 20 75 41 20 3c 3c 3d 20 69          uA <<= i
d870: 42 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  B;.      }else{.
d880: 20 20 20 20 20 20 20 20 75 41 20 3e 3e 3d 20 69          uA >>= i
d890: 42 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 69  B;.        /* Si
d8a0: 67 6e 2d 65 78 74 65 6e 64 20 6f 6e 20 61 20 72  gn-extend on a r
d8b0: 69 67 68 74 20 73 68 69 66 74 20 6f 66 20 61 20  ight shift of a 
d8c0: 6e 65 67 61 74 69 76 65 20 6e 75 6d 62 65 72 20  negative number 
d8d0: 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 69  */.        if( i
d8e0: 41 3c 30 20 29 20 75 41 20 7c 3d 20 28 28 28 28  A<0 ) uA |= ((((
d8f0: 75 36 34 29 30 78 66 66 66 66 66 66 66 66 29 3c  u64)0xffffffff)<
d900: 3c 33 32 29 7c 30 78 66 66 66 66 66 66 66 66 29  <32)|0xffffffff)
d910: 20 3c 3c 20 28 36 34 2d 69 42 29 3b 0a 20 20 20   << (64-iB);.   
d920: 20 20 20 7d 0a 20 20 20 20 20 20 6d 65 6d 63 70     }.      memcp
d930: 79 28 26 69 41 2c 20 26 75 41 2c 20 73 69 7a 65  y(&iA, &uA, size
d940: 6f 66 28 69 41 29 29 3b 0a 20 20 20 20 7d 0a 20  of(iA));.    }. 
d950: 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d   }.  pOut->u.i =
d960: 20 69 41 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70   iA;.  MemSetTyp
d970: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
d980: 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Int);.  break;.}
d990: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64  ../* Opcode: Add
d9a0: 49 6d 6d 20 20 50 31 20 50 32 20 2a 20 2a 20 2a  Imm  P1 P2 * * *
d9b0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
d9c0: 50 31 5d 3d 72 5b 50 31 5d 2b 50 32 0a 2a 2a 20  P1]=r[P1]+P2.** 
d9d0: 0a 2a 2a 20 41 64 64 20 74 68 65 20 63 6f 6e 73  .** Add the cons
d9e0: 74 61 6e 74 20 50 32 20 74 6f 20 74 68 65 20 76  tant P2 to the v
d9f0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
da00: 20 50 31 2e 0a 2a 2a 20 54 68 65 20 72 65 73 75   P1..** The resu
da10: 6c 74 20 69 73 20 61 6c 77 61 79 73 20 61 6e 20  lt is always an 
da20: 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54  integer..**.** T
da30: 6f 20 66 6f 72 63 65 20 61 6e 79 20 72 65 67 69  o force any regi
da40: 73 74 65 72 20 74 6f 20 62 65 20 61 6e 20 69 6e  ster to be an in
da50: 74 65 67 65 72 2c 20 6a 75 73 74 20 61 64 64 20  teger, just add 
da60: 30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64  0..*/.case OP_Ad
da70: 64 49 6d 6d 3a 20 7b 20 20 20 20 20 20 20 20 20  dImm: {         
da80: 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70     /* in1 */.  p
da90: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
daa0: 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  >p1];.  memAbout
dab0: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31  ToChange(p, pIn1
dac0: 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
dad0: 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49  MemIntegerify(pI
dae0: 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69  n1);.  pIn1->u.i
daf0: 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 62   += pOp->p2;.  b
db00: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
db10: 64 65 3a 20 4d 75 73 74 42 65 49 6e 74 20 50 31  de: MustBeInt P1
db20: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a   P2 * * *.** .**
db30: 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65   Force the value
db40: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
db50: 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72  to be an integer
db60: 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a  .  If the value.
db70: 2a 2a 20 69 6e 20 50 31 20 69 73 20 6e 6f 74 20  ** in P1 is not 
db80: 61 6e 20 69 6e 74 65 67 65 72 20 61 6e 64 20 63  an integer and c
db90: 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74  annot be convert
dba0: 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67  ed into an integ
dbb0: 65 72 0a 2a 2a 20 77 69 74 68 6f 75 74 20 64 61  er.** without da
dbc0: 74 61 20 6c 6f 73 73 2c 20 74 68 65 6e 20 6a 75  ta loss, then ju
dbd0: 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
dbe0: 6f 20 50 32 2c 20 6f 72 20 69 66 20 50 32 3d 3d  o P2, or if P2==
dbf0: 30 0a 2a 2a 20 72 61 69 73 65 20 61 6e 20 53 51  0.** raise an SQ
dc00: 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 20 65 78  LITE_MISMATCH ex
dc10: 63 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ception..*/.case
dc20: 20 4f 50 5f 4d 75 73 74 42 65 49 6e 74 3a 20 7b   OP_MustBeInt: {
dc30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
dc40: 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
dc50: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
dc60: 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  p1];.  if( (pIn1
dc70: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
dc80: 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61 70 70  t)==0 ){.    app
dc90: 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c  lyAffinity(pIn1,
dca0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45   SQLITE_AFF_NUME
dcb0: 52 49 43 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  RIC, encoding);.
dcc0: 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
dcd0: 6b 65 6e 28 28 70 49 6e 31 2d 3e 66 6c 61 67 73  ken((pIn1->flags
dce0: 26 4d 45 4d 5f 49 6e 74 29 3d 3d 30 2c 20 32 29  &MEM_Int)==0, 2)
dcf0: 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d  ;.    if( (pIn1-
dd00: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
dd10: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66  )==0 ){.      if
dd20: 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a  ( pOp->p2==0 ){.
dd30: 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c          rc = SQL
dd40: 49 54 45 5f 4d 49 53 4d 41 54 43 48 3b 0a 20 20  ITE_MISMATCH;.  
dd50: 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
dd60: 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
dd70: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
dd80: 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f      goto jump_to
dd90: 5f 70 32 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  _p2;.      }.   
dda0: 20 7d 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54   }.  }.  MemSetT
ddb0: 79 70 65 46 6c 61 67 28 70 49 6e 31 2c 20 4d 45  ypeFlag(pIn1, ME
ddc0: 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b  M_Int);.  break;
ddd0: 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .}..#ifndef SQLI
dde0: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
ddf0: 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65  _POINT./* Opcode
de00: 3a 20 52 65 61 6c 41 66 66 69 6e 69 74 79 20 50  : RealAffinity P
de10: 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
de20: 49 66 20 72 65 67 69 73 74 65 72 20 50 31 20 68  If register P1 h
de30: 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20  olds an integer 
de40: 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20  convert it to a 
de50: 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a  real value..**.*
de60: 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73  * This opcode is
de70: 20 75 73 65 64 20 77 68 65 6e 20 65 78 74 72 61   used when extra
de80: 63 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f  cting informatio
de90: 6e 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20  n from a column 
dea0: 74 68 61 74 0a 2a 2a 20 68 61 73 20 52 45 41 4c  that.** has REAL
deb0: 20 61 66 66 69 6e 69 74 79 2e 20 20 53 75 63 68   affinity.  Such
dec0: 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 20 6d   column values m
ded0: 61 79 20 73 74 69 6c 6c 20 62 65 20 73 74 6f 72  ay still be stor
dee0: 65 64 20 61 73 0a 2a 2a 20 69 6e 74 65 67 65 72  ed as.** integer
def0: 73 2c 20 66 6f 72 20 73 70 61 63 65 20 65 66 66  s, for space eff
df00: 69 63 69 65 6e 63 79 2c 20 62 75 74 20 61 66 74  iciency, but aft
df10: 65 72 20 65 78 74 72 61 63 74 69 6f 6e 20 77 65  er extraction we
df20: 20 77 61 6e 74 20 74 68 65 6d 0a 2a 2a 20 74 6f   want them.** to
df30: 20 68 61 76 65 20 6f 6e 6c 79 20 61 20 72 65 61   have only a rea
df40: 6c 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65  l value..*/.case
df50: 20 4f 50 5f 52 65 61 6c 41 66 66 69 6e 69 74 79   OP_RealAffinity
df60: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
df70: 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20       /* in1 */. 
df80: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
df90: 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49  p->p1];.  if( pI
dfa0: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
dfb0: 49 6e 74 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  Int ){.    sqlit
dfc0: 65 33 56 64 62 65 4d 65 6d 52 65 61 6c 69 66 79  e3VdbeMemRealify
dfd0: 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72  (pIn1);.  }.  br
dfe0: 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23  eak;.}.#endif..#
dff0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
e000: 49 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63 6f 64  IT_CAST./* Opcod
e010: 65 3a 20 43 61 73 74 20 50 31 20 50 32 20 2a 20  e: Cast P1 P2 * 
e020: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
e030: 20 61 66 66 69 6e 69 74 79 28 72 5b 50 31 5d 29   affinity(r[P1])
e040: 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65  .**.** Force the
e050: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
e060: 65 72 20 50 31 20 74 6f 20 62 65 20 74 68 65 20  er P1 to be the 
e070: 74 79 70 65 20 64 65 66 69 6e 65 64 20 62 79 20  type defined by 
e080: 50 32 2e 0a 2a 2a 20 0a 2a 2a 20 3c 75 6c 3e 0a  P2..** .** <ul>.
e090: 2a 2a 20 3c 6c 69 3e 20 50 32 3d 3d 27 41 27 20  ** <li> P2=='A' 
e0a0: 26 72 61 72 72 3b 20 42 4c 4f 42 0a 2a 2a 20 3c  &rarr; BLOB.** <
e0b0: 6c 69 3e 20 50 32 3d 3d 27 42 27 20 26 72 61 72  li> P2=='B' &rar
e0c0: 72 3b 20 54 45 58 54 0a 2a 2a 20 3c 6c 69 3e 20  r; TEXT.** <li> 
e0d0: 50 32 3d 3d 27 43 27 20 26 72 61 72 72 3b 20 4e  P2=='C' &rarr; N
e0e0: 55 4d 45 52 49 43 0a 2a 2a 20 3c 6c 69 3e 20 50  UMERIC.** <li> P
e0f0: 32 3d 3d 27 44 27 20 26 72 61 72 72 3b 20 49 4e  2=='D' &rarr; IN
e100: 54 45 47 45 52 0a 2a 2a 20 3c 6c 69 3e 20 50 32  TEGER.** <li> P2
e110: 3d 3d 27 45 27 20 26 72 61 72 72 3b 20 52 45 41  =='E' &rarr; REA
e120: 4c 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a  L.** </ul>.**.**
e130: 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73   A NULL value is
e140: 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20   not changed by 
e150: 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49  this routine.  I
e160: 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a  t remains NULL..
e170: 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 61 73 74 3a  */.case OP_Cast:
e180: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
e190: 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20      /* in1 */.  
e1a0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
e1b0: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42  =SQLITE_AFF_BLOB
e1c0: 20 26 26 20 70 4f 70 2d 3e 70 32 3c 3d 53 51 4c   && pOp->p2<=SQL
e1d0: 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 29 3b 0a  ITE_AFF_REAL );.
e1e0: 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
e1f0: 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  >p2==SQLITE_AFF_
e200: 54 45 58 54 20 29 3b 0a 20 20 74 65 73 74 63 61  TEXT );.  testca
e210: 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c  se( pOp->p2==SQL
e220: 49 54 45 5f 41 46 46 5f 42 4c 4f 42 20 29 3b 0a  ITE_AFF_BLOB );.
e230: 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
e240: 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  >p2==SQLITE_AFF_
e250: 4e 55 4d 45 52 49 43 20 29 3b 0a 20 20 74 65 73  NUMERIC );.  tes
e260: 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d  tcase( pOp->p2==
e270: 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47  SQLITE_AFF_INTEG
e280: 45 52 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  ER );.  testcase
e290: 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54  ( pOp->p2==SQLIT
e2a0: 45 5f 41 46 46 5f 52 45 41 4c 20 29 3b 0a 20 20  E_AFF_REAL );.  
e2b0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
e2c0: 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75  ->p1];.  memAbou
e2d0: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e  tToChange(p, pIn
e2e0: 31 29 3b 0a 20 20 72 63 20 3d 20 45 78 70 61 6e  1);.  rc = Expan
e2f0: 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 73  dBlob(pIn1);.  s
e300: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 61 73  qlite3VdbeMemCas
e310: 74 28 70 49 6e 31 2c 20 70 4f 70 2d 3e 70 32 2c  t(pIn1, pOp->p2,
e320: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50   encoding);.  UP
e330: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
e340: 45 28 70 49 6e 31 29 3b 0a 20 20 69 66 28 20 72  E(pIn1);.  if( r
e350: 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
e360: 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62  ue_to_error;.  b
e370: 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
e380: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41  * SQLITE_OMIT_CA
e390: 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ST */../* Opcode
e3a0: 3a 20 45 71 20 50 31 20 50 32 20 50 33 20 50 34  : Eq P1 P2 P3 P4
e3b0: 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
e3c0: 20 49 46 20 72 5b 50 33 5d 3d 3d 72 5b 50 31 5d   IF r[P3]==r[P1]
e3d0: 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74  .**.** Compare t
e3e0: 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
e3f0: 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 33 2e  ister P1 and P3.
e400: 20 20 49 66 20 72 65 67 28 50 33 29 3d 3d 72 65    If reg(P3)==re
e410: 67 28 50 31 29 20 74 68 65 6e 0a 2a 2a 20 6a 75  g(P1) then.** ju
e420: 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20 50 32  mp to address P2
e430: 2e 20 20 4f 72 20 69 66 20 74 68 65 20 53 51 4c  .  Or if the SQL
e440: 49 54 45 5f 53 54 4f 52 45 50 32 20 66 6c 61 67  ITE_STOREP2 flag
e450: 20 69 73 20 73 65 74 20 69 6e 20 50 35 2c 20 74   is set in P5, t
e460: 68 65 6e 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65  hen.** store the
e470: 20 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61   result of compa
e480: 72 69 73 6f 6e 20 69 6e 20 72 65 67 69 73 74 65  rison in registe
e490: 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  r P2..**.** The 
e4a0: 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20  SQLITE_AFF_MASK 
e4b0: 70 6f 72 74 69 6f 6e 20 6f 66 20 50 35 20 6d 75  portion of P5 mu
e4c0: 73 74 20 62 65 20 61 6e 20 61 66 66 69 6e 69 74  st be an affinit
e4d0: 79 20 63 68 61 72 61 63 74 65 72 20 2d 0a 2a 2a  y character -.**
e4e0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54   SQLITE_AFF_TEXT
e4f0: 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  , SQLITE_AFF_INT
e500: 45 47 45 52 2c 20 61 6e 64 20 73 6f 20 66 6f 72  EGER, and so for
e510: 74 68 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 69  th. An attempt i
e520: 73 20 6d 61 64 65 20 0a 2a 2a 20 74 6f 20 63 6f  s made .** to co
e530: 65 72 63 65 20 62 6f 74 68 20 69 6e 70 75 74 73  erce both inputs
e540: 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68   according to th
e550: 69 73 20 61 66 66 69 6e 69 74 79 20 62 65 66 6f  is affinity befo
e560: 72 65 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72  re the.** compar
e570: 69 73 6f 6e 20 69 73 20 6d 61 64 65 2e 20 49 66  ison is made. If
e580: 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   the SQLITE_AFF_
e590: 4d 41 53 4b 20 69 73 20 30 78 30 30 2c 20 74 68  MASK is 0x00, th
e5a0: 65 6e 20 6e 75 6d 65 72 69 63 0a 2a 2a 20 61 66  en numeric.** af
e5b0: 66 69 6e 69 74 79 20 69 73 20 75 73 65 64 2e 20  finity is used. 
e5c0: 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 61 66  Note that the af
e5d0: 66 69 6e 69 74 79 20 63 6f 6e 76 65 72 73 69 6f  finity conversio
e5e0: 6e 73 20 61 72 65 20 73 74 6f 72 65 64 0a 2a 2a  ns are stored.**
e5f0: 20 62 61 63 6b 20 69 6e 74 6f 20 74 68 65 20 69   back into the i
e600: 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 20 50  nput registers P
e610: 31 20 61 6e 64 20 50 33 2e 20 20 53 6f 20 74 68  1 and P3.  So th
e620: 69 73 20 6f 70 63 6f 64 65 20 63 61 6e 20 63 61  is opcode can ca
e630: 75 73 65 0a 2a 2a 20 70 65 72 73 69 73 74 65 6e  use.** persisten
e640: 74 20 63 68 61 6e 67 65 73 20 74 6f 20 72 65 67  t changes to reg
e650: 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33  isters P1 and P3
e660: 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79  ..**.** Once any
e670: 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 68 61 76   conversions hav
e680: 65 20 74 61 6b 65 6e 20 70 6c 61 63 65 2c 20 61  e taken place, a
e690: 6e 64 20 6e 65 69 74 68 65 72 20 76 61 6c 75 65  nd neither value
e6a0: 20 69 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68   is NULL, .** th
e6b0: 65 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6d  e values are com
e6c0: 70 61 72 65 64 2e 20 49 66 20 62 6f 74 68 20 76  pared. If both v
e6d0: 61 6c 75 65 73 20 61 72 65 20 62 6c 6f 62 73 20  alues are blobs 
e6e0: 74 68 65 6e 20 6d 65 6d 63 6d 70 28 29 20 69 73  then memcmp() is
e6f0: 0a 2a 2a 20 75 73 65 64 20 74 6f 20 64 65 74 65  .** used to dete
e700: 72 6d 69 6e 65 20 74 68 65 20 72 65 73 75 6c 74  rmine the result
e710: 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69  s of the compari
e720: 73 6f 6e 2e 20 20 49 66 20 62 6f 74 68 20 76 61  son.  If both va
e730: 6c 75 65 73 0a 2a 2a 20 61 72 65 20 74 65 78 74  lues.** are text
e740: 2c 20 74 68 65 6e 20 74 68 65 20 61 70 70 72 6f  , then the appro
e750: 70 72 69 61 74 65 20 63 6f 6c 6c 61 74 69 6e 67  priate collating
e760: 20 66 75 6e 63 74 69 6f 6e 20 73 70 65 63 69 66   function specif
e770: 69 65 64 20 69 6e 0a 2a 2a 20 50 34 20 69 73 20  ied in.** P4 is 
e780: 75 73 65 64 20 74 6f 20 64 6f 20 74 68 65 20 63  used to do the c
e790: 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 50  omparison.  If P
e7a0: 34 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66 69  4 is not specifi
e7b0: 65 64 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d  ed then.** memcm
e7c0: 70 28 29 20 69 73 20 75 73 65 64 20 74 6f 20 63  p() is used to c
e7d0: 6f 6d 70 61 72 65 20 74 65 78 74 20 73 74 72 69  ompare text stri
e7e0: 6e 67 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c  ng.  If both val
e7f0: 75 65 73 20 61 72 65 0a 2a 2a 20 6e 75 6d 65 72  ues are.** numer
e800: 69 63 2c 20 74 68 65 6e 20 61 20 6e 75 6d 65 72  ic, then a numer
e810: 69 63 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  ic comparison is
e820: 20 75 73 65 64 2e 20 49 66 20 74 68 65 20 74 77   used. If the tw
e830: 6f 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20  o values.** are 
e840: 6f 66 20 64 69 66 66 65 72 65 6e 74 20 74 79 70  of different typ
e850: 65 73 2c 20 74 68 65 6e 20 6e 75 6d 62 65 72 73  es, then numbers
e860: 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20   are considered 
e870: 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 73 74 72  less than.** str
e880: 69 6e 67 73 20 61 6e 64 20 73 74 72 69 6e 67 73  ings and strings
e890: 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20   are considered 
e8a0: 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e  less than blobs.
e8b0: 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45  .**.** If SQLITE
e8c0: 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20 69  _NULLEQ is set i
e8d0: 6e 20 50 35 20 74 68 65 6e 20 74 68 65 20 72 65  n P5 then the re
e8e0: 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73  sult of comparis
e8f0: 6f 6e 20 69 73 20 61 6c 77 61 79 73 20 65 69 74  on is always eit
e900: 68 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72 20 66  her.** true or f
e910: 61 6c 73 65 20 61 6e 64 20 69 73 20 6e 65 76 65  alse and is neve
e920: 72 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f 74 68  r NULL.  If both
e930: 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55   operands are NU
e940: 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  LL then the resu
e950: 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61 72 69  lt.** of compari
e960: 73 6f 6e 20 69 73 20 74 72 75 65 2e 20 20 49 66  son is true.  If
e970: 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
e980: 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65  is NULL then the
e990: 20 72 65 73 75 6c 74 20 69 73 20 66 61 6c 73 65   result is false
e9a0: 2e 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65 72 20  ..** If neither 
e9b0: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20  operand is NULL 
e9c0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 74 68  the result is th
e9d0: 65 20 73 61 6d 65 20 61 73 20 69 74 20 77 6f 75  e same as it wou
e9e0: 6c 64 20 62 65 20 69 66 0a 2a 2a 20 74 68 65 20  ld be if.** the 
e9f0: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 66 6c  SQLITE_NULLEQ fl
ea00: 61 67 20 77 65 72 65 20 6f 6d 69 74 74 65 64 20  ag were omitted 
ea10: 66 72 6f 6d 20 50 35 2e 0a 2a 2a 0a 2a 2a 20 49  from P5..**.** I
ea20: 66 20 62 6f 74 68 20 53 51 4c 49 54 45 5f 53 54  f both SQLITE_ST
ea30: 4f 52 45 50 32 20 61 6e 64 20 53 51 4c 49 54 45  OREP2 and SQLITE
ea40: 5f 4b 45 45 50 4e 55 4c 4c 20 66 6c 61 67 73 20  _KEEPNULL flags 
ea50: 61 72 65 20 73 65 74 20 74 68 65 6e 20 74 68 65  are set then the
ea60: 0a 2a 2a 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  .** content of r
ea70: 5b 50 32 5d 20 69 73 20 6f 6e 6c 79 20 63 68 61  [P2] is only cha
ea80: 6e 67 65 64 20 69 66 20 74 68 65 20 6e 65 77 20  nged if the new 
ea90: 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 20 6f 72  value is NULL or
eaa0: 20 30 20 28 66 61 6c 73 65 29 2e 0a 2a 2a 20 49   0 (false)..** I
eab0: 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 61  n other words, a
eac0: 20 70 72 69 6f 72 20 72 5b 50 32 5d 20 76 61 6c   prior r[P2] val
ead0: 75 65 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20 6f  ue will not be o
eae0: 76 65 72 77 72 69 74 74 65 6e 20 62 79 20 31 20  verwritten by 1 
eaf0: 28 74 72 75 65 29 2e 0a 2a 2f 0a 2f 2a 20 4f 70  (true)..*/./* Op
eb00: 63 6f 64 65 3a 20 4e 65 20 50 31 20 50 32 20 50  code: Ne P1 P2 P
eb10: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
eb20: 73 69 73 3a 20 49 46 20 72 5b 50 33 5d 21 3d 72  sis: IF r[P3]!=r
eb30: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  [P1].**.** This 
eb40: 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
eb50: 74 68 65 20 45 71 20 6f 70 63 6f 64 65 20 65 78  the Eq opcode ex
eb60: 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75  cept that the ju
eb70: 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a  mp is taken if.*
eb80: 2a 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20 69  * the operands i
eb90: 6e 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61  n registers P1 a
eba0: 6e 64 20 50 33 20 61 72 65 20 6e 6f 74 20 65 71  nd P3 are not eq
ebb0: 75 61 6c 2e 20 20 53 65 65 20 74 68 65 20 45 71  ual.  See the Eq
ebc0: 20 6f 70 63 6f 64 65 20 66 6f 72 0a 2a 2a 20 61   opcode for.** a
ebd0: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
ebe0: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ation..**.** If 
ebf0: 62 6f 74 68 20 53 51 4c 49 54 45 5f 53 54 4f 52  both SQLITE_STOR
ec00: 45 50 32 20 61 6e 64 20 53 51 4c 49 54 45 5f 4b  EP2 and SQLITE_K
ec10: 45 45 50 4e 55 4c 4c 20 66 6c 61 67 73 20 61 72  EEPNULL flags ar
ec20: 65 20 73 65 74 20 74 68 65 6e 20 74 68 65 0a 2a  e set then the.*
ec30: 2a 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 5b 50  * content of r[P
ec40: 32 5d 20 69 73 20 6f 6e 6c 79 20 63 68 61 6e 67  2] is only chang
ec50: 65 64 20 69 66 20 74 68 65 20 6e 65 77 20 76 61  ed if the new va
ec60: 6c 75 65 20 69 73 20 4e 55 4c 4c 20 6f 72 20 31  lue is NULL or 1
ec70: 20 28 74 72 75 65 29 2e 0a 2a 2a 20 49 6e 20 6f   (true)..** In o
ec80: 74 68 65 72 20 77 6f 72 64 73 2c 20 61 20 70 72  ther words, a pr
ec90: 69 6f 72 20 72 5b 50 32 5d 20 76 61 6c 75 65 20  ior r[P2] value 
eca0: 77 69 6c 6c 20 6e 6f 74 20 62 65 20 6f 76 65 72  will not be over
ecb0: 77 72 69 74 74 65 6e 20 62 79 20 30 20 28 66 61  written by 0 (fa
ecc0: 6c 73 65 29 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  lse)..*/./* Opco
ecd0: 64 65 3a 20 4c 74 20 50 31 20 50 32 20 50 33 20  de: Lt P1 P2 P3 
ece0: 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
ecf0: 73 3a 20 49 46 20 72 5b 50 33 5d 3c 72 5b 50 31  s: IF r[P3]<r[P1
ed00: 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20  ].**.** Compare 
ed10: 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65  the values in re
ed20: 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 33  gister P1 and P3
ed30: 2e 20 20 49 66 20 72 65 67 28 50 33 29 3c 72 65  .  If reg(P3)<re
ed40: 67 28 50 31 29 20 74 68 65 6e 0a 2a 2a 20 6a 75  g(P1) then.** ju
ed50: 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20 50 32  mp to address P2
ed60: 2e 20 20 4f 72 20 69 66 20 74 68 65 20 53 51 4c  .  Or if the SQL
ed70: 49 54 45 5f 53 54 4f 52 45 50 32 20 66 6c 61 67  ITE_STOREP2 flag
ed80: 20 69 73 20 73 65 74 20 69 6e 20 50 35 20 73 74   is set in P5 st
ed90: 6f 72 65 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c  ore.** the resul
eda0: 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20  t of comparison 
edb0: 28 30 20 6f 72 20 31 20 6f 72 20 4e 55 4c 4c 29  (0 or 1 or NULL)
edc0: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
edd0: 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  2..**.** If the 
ede0: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
edf0: 4c 20 62 69 74 20 6f 66 20 50 35 20 69 73 20 73  L bit of P5 is s
ee00: 65 74 20 61 6e 64 20 65 69 74 68 65 72 20 72 65  et and either re
ee10: 67 28 50 31 29 20 6f 72 0a 2a 2a 20 72 65 67 28  g(P1) or.** reg(
ee20: 50 33 29 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e  P3) is NULL then
ee30: 20 74 68 65 20 74 61 6b 65 20 74 68 65 20 6a 75   the take the ju
ee40: 6d 70 2e 20 20 49 66 20 74 68 65 20 53 51 4c 49  mp.  If the SQLI
ee50: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 0a 2a  TE_JUMPIFNULL .*
ee60: 2a 20 62 69 74 20 69 73 20 63 6c 65 61 72 20 74  * bit is clear t
ee70: 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  hen fall through
ee80: 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61   if either opera
ee90: 6e 64 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a  nd is NULL..**.*
eea0: 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46  * The SQLITE_AFF
eeb0: 5f 4d 41 53 4b 20 70 6f 72 74 69 6f 6e 20 6f 66  _MASK portion of
eec0: 20 50 35 20 6d 75 73 74 20 62 65 20 61 6e 20 61   P5 must be an a
eed0: 66 66 69 6e 69 74 79 20 63 68 61 72 61 63 74 65  ffinity characte
eee0: 72 20 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46  r -.** SQLITE_AF
eef0: 46 5f 54 45 58 54 2c 20 53 51 4c 49 54 45 5f 41  F_TEXT, SQLITE_A
ef00: 46 46 5f 49 4e 54 45 47 45 52 2c 20 61 6e 64 20  FF_INTEGER, and 
ef10: 73 6f 20 66 6f 72 74 68 2e 20 41 6e 20 61 74 74  so forth. An att
ef20: 65 6d 70 74 20 69 73 20 6d 61 64 65 20 0a 2a 2a  empt is made .**
ef30: 20 74 6f 20 63 6f 65 72 63 65 20 62 6f 74 68 20   to coerce both 
ef40: 69 6e 70 75 74 73 20 61 63 63 6f 72 64 69 6e 67  inputs according
ef50: 20 74 6f 20 74 68 69 73 20 61 66 66 69 6e 69 74   to this affinit
ef60: 79 20 62 65 66 6f 72 65 20 74 68 65 0a 2a 2a 20  y before the.** 
ef70: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 6d 61  comparison is ma
ef80: 64 65 2e 20 49 66 20 74 68 65 20 53 51 4c 49 54  de. If the SQLIT
ef90: 45 5f 41 46 46 5f 4d 41 53 4b 20 69 73 20 30 78  E_AFF_MASK is 0x
efa0: 30 30 2c 20 74 68 65 6e 20 6e 75 6d 65 72 69 63  00, then numeric
efb0: 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 69 73 20  .** affinity is 
efc0: 75 73 65 64 2e 20 4e 6f 74 65 20 74 68 61 74 20  used. Note that 
efd0: 74 68 65 20 61 66 66 69 6e 69 74 79 20 63 6f 6e  the affinity con
efe0: 76 65 72 73 69 6f 6e 73 20 61 72 65 20 73 74 6f  versions are sto
eff0: 72 65 64 0a 2a 2a 20 62 61 63 6b 20 69 6e 74 6f  red.** back into
f000: 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73   the input regis
f010: 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e 20  ters P1 and P3. 
f020: 20 53 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20   So this opcode 
f030: 63 61 6e 20 63 61 75 73 65 0a 2a 2a 20 70 65 72  can cause.** per
f040: 73 69 73 74 65 6e 74 20 63 68 61 6e 67 65 73 20  sistent changes 
f050: 74 6f 20 72 65 67 69 73 74 65 72 73 20 50 31 20  to registers P1 
f060: 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e  and P3..**.** On
f070: 63 65 20 61 6e 79 20 63 6f 6e 76 65 72 73 69 6f  ce any conversio
f080: 6e 73 20 68 61 76 65 20 74 61 6b 65 6e 20 70 6c  ns have taken pl
f090: 61 63 65 2c 20 61 6e 64 20 6e 65 69 74 68 65 72  ace, and neither
f0a0: 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20   value is NULL, 
f0b0: 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20 61  .** the values a
f0c0: 72 65 20 63 6f 6d 70 61 72 65 64 2e 20 49 66 20  re compared. If 
f0d0: 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65 20  both values are 
f0e0: 62 6c 6f 62 73 20 74 68 65 6e 20 6d 65 6d 63 6d  blobs then memcm
f0f0: 70 28 29 20 69 73 0a 2a 2a 20 75 73 65 64 20 74  p() is.** used t
f100: 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20  o determine the 
f110: 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63  results of the c
f120: 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 62  omparison.  If b
f130: 6f 74 68 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72  oth values.** ar
f140: 65 20 74 65 78 74 2c 20 74 68 65 6e 20 74 68 65  e text, then the
f150: 20 61 70 70 72 6f 70 72 69 61 74 65 20 63 6f 6c   appropriate col
f160: 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20  lating function 
f170: 73 70 65 63 69 66 69 65 64 20 69 6e 0a 2a 2a 20  specified in.** 
f180: 50 34 20 69 73 20 20 75 73 65 64 20 74 6f 20 64  P4 is  used to d
f190: 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  o the comparison
f1a0: 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20  .  If P4 is not 
f1b0: 73 70 65 63 69 66 69 65 64 20 74 68 65 6e 0a 2a  specified then.*
f1c0: 2a 20 6d 65 6d 63 6d 70 28 29 20 69 73 20 75 73  * memcmp() is us
f1d0: 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 20 74 65  ed to compare te
f1e0: 78 74 20 73 74 72 69 6e 67 2e 20 20 49 66 20 62  xt string.  If b
f1f0: 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65 0a 2a  oth values are.*
f200: 2a 20 6e 75 6d 65 72 69 63 2c 20 74 68 65 6e 20  * numeric, then 
f210: 61 20 6e 75 6d 65 72 69 63 20 63 6f 6d 70 61 72  a numeric compar
f220: 69 73 6f 6e 20 69 73 20 75 73 65 64 2e 20 49 66  ison is used. If
f230: 20 74 68 65 20 74 77 6f 20 76 61 6c 75 65 73 0a   the two values.
f240: 2a 2a 20 61 72 65 20 6f 66 20 64 69 66 66 65 72  ** are of differ
f250: 65 6e 74 20 74 79 70 65 73 2c 20 74 68 65 6e 20  ent types, then 
f260: 6e 75 6d 62 65 72 73 20 61 72 65 20 63 6f 6e 73  numbers are cons
f270: 69 64 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e  idered less than
f280: 0a 2a 2a 20 73 74 72 69 6e 67 73 20 61 6e 64 20  .** strings and 
f290: 73 74 72 69 6e 67 73 20 61 72 65 20 63 6f 6e 73  strings are cons
f2a0: 69 64 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e  idered less than
f2b0: 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70   blobs..*/./* Op
f2c0: 63 6f 64 65 3a 20 4c 65 20 50 31 20 50 32 20 50  code: Le P1 P2 P
f2d0: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
f2e0: 73 69 73 3a 20 49 46 20 72 5b 50 33 5d 3c 3d 72  sis: IF r[P3]<=r
f2f0: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  [P1].**.** This 
f300: 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
f310: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78  the Lt opcode ex
f320: 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75  cept that the ju
f330: 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a  mp is taken if.*
f340: 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  * the content of
f350: 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
f360: 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75  less than or equ
f370: 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e  al to the conten
f380: 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72  t of.** register
f390: 20 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74   P1.  See the Lt
f3a0: 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69   opcode for addi
f3b0: 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
f3c0: 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  on..*/./* Opcode
f3d0: 3a 20 47 74 20 50 31 20 50 32 20 50 33 20 50 34  : Gt P1 P2 P3 P4
f3e0: 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
f3f0: 20 49 46 20 72 5b 50 33 5d 3e 72 5b 50 31 5d 0a   IF r[P3]>r[P1].
f400: 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73  **.** This works
f410: 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c   just like the L
f420: 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20  t opcode except 
f430: 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73  that the jump is
f440: 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65   taken if.** the
f450: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
f460: 73 74 65 72 20 50 33 20 69 73 20 67 72 65 61 74  ster P3 is great
f470: 65 72 20 74 68 61 6e 20 74 68 65 20 63 6f 6e 74  er than the cont
f480: 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74  ent of.** regist
f490: 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20  er P1.  See the 
f4a0: 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64  Lt opcode for ad
f4b0: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
f4c0: 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tion..*/./* Opco
f4d0: 64 65 3a 20 47 65 20 50 31 20 50 32 20 50 33 20  de: Ge P1 P2 P3 
f4e0: 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
f4f0: 73 3a 20 49 46 20 72 5b 50 33 5d 3e 3d 72 5b 50  s: IF r[P3]>=r[P
f500: 31 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f  1].**.** This wo
f510: 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68  rks just like th
f520: 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65  e Lt opcode exce
f530: 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70  pt that the jump
f540: 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20   is taken if.** 
f550: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
f560: 65 67 69 73 74 65 72 20 50 33 20 69 73 20 67 72  egister P3 is gr
f570: 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71  eater than or eq
f580: 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74 65  ual to the conte
f590: 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65  nt of.** registe
f5a0: 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c  r P1.  See the L
f5b0: 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64  t opcode for add
f5c0: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
f5d0: 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
f5e0: 45 71 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  Eq:             
f5f0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
f600: 45 51 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69  EQ, jump, in1, i
f610: 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65  n3 */.case OP_Ne
f620: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
f630: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 45  /* same as TK_NE
f640: 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  , jump, in1, in3
f650: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 74 3a 20   */.case OP_Lt: 
f660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
f670: 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 54 2c 20   same as TK_LT, 
f680: 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
f690: 2f 0a 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20  /.case OP_Le:   
f6a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
f6b0: 61 6d 65 20 61 73 20 54 4b 5f 4c 45 2c 20 6a 75  ame as TK_LE, ju
f6c0: 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
f6d0: 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20 20 20  case OP_Gt:     
f6e0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
f6f0: 65 20 61 73 20 54 4b 5f 47 54 2c 20 6a 75 6d 70  e as TK_GT, jump
f700: 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61  , in1, in3 */.ca
f710: 73 65 20 4f 50 5f 47 65 3a 20 7b 20 20 20 20 20  se OP_Ge: {     
f720: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
f730: 61 73 20 54 4b 5f 47 45 2c 20 6a 75 6d 70 2c 20  as TK_GE, jump, 
f740: 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e  in1, in3 */.  in
f750: 74 20 72 65 73 2c 20 72 65 73 32 3b 20 20 20 20  t res, res2;    
f760: 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 74    /* Result of t
f770: 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66  he comparison of
f780: 20 70 49 6e 31 20 61 67 61 69 6e 73 74 20 70 49   pIn1 against pI
f790: 6e 33 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66  n3 */.  char aff
f7a0: 69 6e 69 74 79 3b 20 20 20 20 20 20 2f 2a 20 41  inity;      /* A
f7b0: 66 66 69 6e 69 74 79 20 74 6f 20 75 73 65 20 66  ffinity to use f
f7c0: 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e 20 2a 2f  or comparison */
f7d0: 0a 20 20 75 31 36 20 66 6c 61 67 73 31 3b 20 20  .  u16 flags1;  
f7e0: 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f         /* Copy o
f7f0: 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20  f initial value 
f800: 6f 66 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 2a  of pIn1->flags *
f810: 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 33 3b 20  /.  u16 flags3; 
f820: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20          /* Copy 
f830: 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65  of initial value
f840: 20 6f 66 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20   of pIn3->flags 
f850: 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  */..  pIn1 = &aM
f860: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
f870: 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
f880: 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 31 20 3d  >p3];.  flags1 =
f890: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3b 0a 20 20   pIn1->flags;.  
f8a0: 66 6c 61 67 73 33 20 3d 20 70 49 6e 33 2d 3e 66  flags3 = pIn3->f
f8b0: 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 66 6c 61  lags;.  if( (fla
f8c0: 67 73 31 20 7c 20 66 6c 61 67 73 33 29 26 4d 45  gs1 | flags3)&ME
f8d0: 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 2f 2a  M_Null ){.    /*
f8e0: 20 4f 6e 65 20 6f 72 20 62 6f 74 68 20 6f 70 65   One or both ope
f8f0: 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20 2a  rands are NULL *
f900: 2f 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  /.    if( pOp->p
f910: 35 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45  5 & SQLITE_NULLE
f920: 51 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66  Q ){.      /* If
f930: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69   SQLITE_NULLEQ i
f940: 73 20 73 65 74 20 28 77 68 69 63 68 20 77 69 6c  s set (which wil
f950: 6c 20 6f 6e 6c 79 20 68 61 70 70 65 6e 20 69 66  l only happen if
f960: 20 74 68 65 20 6f 70 65 72 61 74 6f 72 20 69 73   the operator is
f970: 0a 20 20 20 20 20 20 2a 2a 20 4f 50 5f 45 71 20  .      ** OP_Eq 
f980: 6f 72 20 4f 50 5f 4e 65 29 20 74 68 65 6e 20 74  or OP_Ne) then t
f990: 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 6f 72 20  ake the jump or 
f9a0: 6e 6f 74 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  not depending on
f9b0: 20 77 68 65 74 68 65 72 0a 20 20 20 20 20 20 2a   whether.      *
f9c0: 2a 20 6f 72 20 6e 6f 74 20 62 6f 74 68 20 6f 70  * or not both op
f9d0: 65 72 61 6e 64 73 20 61 72 65 20 6e 75 6c 6c 2e  erands are null.
f9e0: 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
f9f0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
fa00: 6f 64 65 3d 3d 4f 50 5f 45 71 20 7c 7c 20 70 4f  ode==OP_Eq || pO
fa10: 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65  p->opcode==OP_Ne
fa20: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
fa30: 28 20 28 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f  ( (flags1 & MEM_
fa40: 43 6c 65 61 72 65 64 29 3d 3d 30 20 29 3b 0a 20  Cleared)==0 );. 
fa50: 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70 4f       assert( (pO
fa60: 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4a  p->p5 & SQLITE_J
fa70: 55 4d 50 49 46 4e 55 4c 4c 29 3d 3d 30 20 7c 7c  UMPIFNULL)==0 ||
fa80: 20 43 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a 20   CORRUPT_DB );. 
fa90: 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 28       testcase( (
faa0: 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45  pOp->p5 & SQLITE
fab0: 5f 4a 55 4d 50 49 46 4e 55 4c 4c 29 21 3d 30 20  _JUMPIFNULL)!=0 
fac0: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 28 66 6c  );.      if( (fl
fad0: 61 67 73 31 26 66 6c 61 67 73 33 26 4d 45 4d 5f  ags1&flags3&MEM_
fae0: 4e 75 6c 6c 29 21 3d 30 0a 20 20 20 20 20 20 20  Null)!=0.       
faf0: 26 26 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f 43  && (flags3&MEM_C
fb00: 6c 65 61 72 65 64 29 3d 3d 30 0a 20 20 20 20 20  leared)==0.     
fb10: 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 73 20   ){.        res 
fb20: 3d 20 30 3b 20 20 2f 2a 20 4f 70 65 72 61 6e 64  = 0;  /* Operand
fb30: 73 20 61 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20  s are equal */. 
fb40: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
fb50: 20 20 20 20 72 65 73 20 3d 20 31 3b 20 20 2f 2a      res = 1;  /*
fb60: 20 4f 70 65 72 61 6e 64 73 20 61 72 65 20 6e 6f   Operands are no
fb70: 74 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20  t equal */.     
fb80: 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20   }.    }else{.  
fb90: 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4e 55      /* SQLITE_NU
fba0: 4c 4c 45 51 20 69 73 20 63 6c 65 61 72 20 61 6e  LLEQ is clear an
fbb0: 64 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 20 6f  d at least one o
fbc0: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 0a  perand is NULL,.
fbd0: 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 74 68        ** then th
fbe0: 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c 77 61  e result is alwa
fbf0: 79 73 20 4e 55 4c 4c 2e 0a 20 20 20 20 20 20 2a  ys NULL..      *
fc00: 2a 20 54 68 65 20 6a 75 6d 70 20 69 73 20 74 61  * The jump is ta
fc10: 6b 65 6e 20 69 66 20 74 68 65 20 53 51 4c 49 54  ken if the SQLIT
fc20: 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74  E_JUMPIFNULL bit
fc30: 20 69 73 20 73 65 74 2e 0a 20 20 20 20 20 20 2a   is set..      *
fc40: 2f 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d  /.      if( pOp-
fc50: 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f  >p5 & SQLITE_STO
fc60: 52 45 50 32 20 29 7b 0a 20 20 20 20 20 20 20 20  REP2 ){.        
fc70: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
fc80: 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20 20 20 69  ->p2];.        i
fc90: 43 6f 6d 70 61 72 65 20 3d 20 31 3b 20 20 20 20  Compare = 1;    
fca0: 2f 2a 20 4f 70 65 72 61 6e 64 73 20 61 72 65 20  /* Operands are 
fcb0: 6e 6f 74 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20  not equal */.   
fcc0: 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43       memAboutToC
fcd0: 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a  hange(p, pOut);.
fce0: 20 20 20 20 20 20 20 20 4d 65 6d 53 65 74 54 79          MemSetTy
fcf0: 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
fd00: 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20 20 20 20 20  _Null);.        
fd10: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
fd20: 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20  Op->p2, pOut);. 
fd30: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
fd40: 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
fd50: 6b 65 6e 28 32 2c 33 29 3b 0a 20 20 20 20 20 20  ken(2,3);.      
fd60: 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
fd70: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
fd80: 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67  L ){.          g
fd90: 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
fda0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
fdb0: 7d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  }.      break;. 
fdc0: 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
fdd0: 20 20 2f 2a 20 4e 65 69 74 68 65 72 20 6f 70 65    /* Neither ope
fde0: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 20 20 44  rand is NULL.  D
fdf0: 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  o a comparison. 
fe00: 2a 2f 0a 20 20 20 20 61 66 66 69 6e 69 74 79 20  */.    affinity 
fe10: 3d 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  = pOp->p5 & SQLI
fe20: 54 45 5f 41 46 46 5f 4d 41 53 4b 3b 0a 20 20 20  TE_AFF_MASK;.   
fe30: 20 69 66 28 20 61 66 66 69 6e 69 74 79 3e 3d 53   if( affinity>=S
fe40: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
fe50: 43 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28  C ){.      if( (
fe60: 66 6c 61 67 73 31 20 7c 20 66 6c 61 67 73 33 29  flags1 | flags3)
fe70: 26 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20  &MEM_Str ){.    
fe80: 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 31 20      if( (flags1 
fe90: 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  & (MEM_Int|MEM_R
fea0: 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d  eal|MEM_Str))==M
feb0: 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 20 20  EM_Str ){.      
fec0: 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63      applyNumeric
fed0: 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 30 29  Affinity(pIn1,0)
fee0: 3b 0a 20 20 20 20 20 20 20 20 20 20 61 73 73 65  ;.          asse
fef0: 72 74 28 20 66 6c 61 67 73 33 3d 3d 70 49 6e 33  rt( flags3==pIn3
ff00: 2d 3e 66 6c 61 67 73 20 29 3b 0a 20 20 20 20 20  ->flags );.     
ff10: 20 20 20 20 20 2f 2a 20 74 65 73 74 63 61 73 65       /* testcase
ff20: 28 20 66 6c 61 67 73 33 21 3d 70 49 6e 33 2d 3e  ( flags3!=pIn3->
ff30: 66 6c 61 67 73 20 29 3b 0a 20 20 20 20 20 20 20  flags );.       
ff40: 20 20 20 2a 2a 20 74 68 69 73 20 75 73 65 64 20     ** this used 
ff50: 74 6f 20 62 65 20 70 6f 73 73 69 62 6c 65 20 77  to be possible w
ff60: 69 74 68 20 70 49 6e 31 3d 3d 70 49 6e 33 2c 20  ith pIn1==pIn3, 
ff70: 62 75 74 20 6e 6f 74 20 73 69 6e 63 65 0a 20 20  but not since.  
ff80: 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 20 63          ** the c
ff90: 6f 6c 75 6d 6e 20 63 61 63 68 65 20 77 61 73 20  olumn cache was 
ffa0: 72 65 6d 6f 76 65 64 2e 20 20 54 68 65 20 66 6f  removed.  The fo
ffb0: 6c 6c 6f 77 69 6e 67 20 61 73 73 69 67 6e 6d 65  llowing assignme
ffc0: 6e 74 0a 20 20 20 20 20 20 20 20 20 20 2a 2a 20  nt.          ** 
ffd0: 69 73 20 65 73 73 65 6e 74 69 61 6c 6c 79 20 61  is essentially a
ffe0: 20 6e 6f 2d 6f 70 2e 20 20 42 75 74 2c 20 69 74   no-op.  But, it
fff0: 20 70 72 6f 76 69 64 65 73 20 64 65 66 65 6e 73   provides defens
10000 65 2d 69 6e 2d 64 65 70 74 68 0a 20 20 20 20 20  e-in-depth.     
10010 20 20 20 20 20 2a 2a 20 69 6e 20 63 61 73 65 20       ** in case 
10020 6f 75 72 20 61 6e 61 6c 79 73 69 73 20 69 73 20  our analysis is 
10030 69 6e 63 6f 72 72 65 63 74 2c 20 73 6f 20 69 74  incorrect, so it
10040 20 69 73 20 6c 65 66 74 20 69 6e 2e 20 2a 2f 0a   is left in. */.
10050 20 20 20 20 20 20 20 20 20 20 66 6c 61 67 73 33            flags3
10060 20 3d 20 70 49 6e 33 2d 3e 66 6c 61 67 73 3b 0a   = pIn3->flags;.
10070 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
10080 20 20 69 66 28 20 28 66 6c 61 67 73 33 20 26 20    if( (flags3 & 
10090 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61  (MEM_Int|MEM_Rea
100a0 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d  l|MEM_Str))==MEM
100b0 5f 53 74 72 20 29 7b 0a 20 20 20 20 20 20 20 20  _Str ){.        
100c0 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66    applyNumericAf
100d0 66 69 6e 69 74 79 28 70 49 6e 33 2c 30 29 3b 0a  finity(pIn3,0);.
100e0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
100f0 7d 0a 20 20 20 20 20 20 2f 2a 20 48 61 6e 64 6c  }.      /* Handl
10100 65 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73  e the common cas
10110 65 20 6f 66 20 69 6e 74 65 67 65 72 20 63 6f 6d  e of integer com
10120 70 61 72 69 73 6f 6e 20 68 65 72 65 2c 20 61 73  parison here, as
10130 20 61 6e 0a 20 20 20 20 20 20 2a 2a 20 6f 70 74   an.      ** opt
10140 69 6d 69 7a 61 74 69 6f 6e 2c 20 74 6f 20 61 76  imization, to av
10150 6f 69 64 20 61 20 63 61 6c 6c 20 74 6f 20 73 71  oid a call to sq
10160 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28  lite3MemCompare(
10170 29 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28  ) */.      if( (
10180 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 70 49  pIn1->flags & pI
10190 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
101a0 49 6e 74 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  Int)!=0 ){.     
101b0 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e 69     if( pIn3->u.i
101c0 20 3e 20 70 49 6e 31 2d 3e 75 2e 69 20 29 7b 20   > pIn1->u.i ){ 
101d0 72 65 73 20 3d 20 2b 31 3b 20 67 6f 74 6f 20 63  res = +1; goto c
101e0 6f 6d 70 61 72 65 5f 6f 70 3b 20 7d 0a 20 20 20  ompare_op; }.   
101f0 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 75       if( pIn3->u
10200 2e 69 20 3c 20 70 49 6e 31 2d 3e 75 2e 69 20 29  .i < pIn1->u.i )
10210 7b 20 72 65 73 20 3d 20 2d 31 3b 20 67 6f 74 6f  { res = -1; goto
10220 20 63 6f 6d 70 61 72 65 5f 6f 70 3b 20 7d 0a 20   compare_op; }. 
10230 20 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a         res = 0;.
10240 20 20 20 20 20 20 20 20 67 6f 74 6f 20 63 6f 6d          goto com
10250 70 61 72 65 5f 6f 70 3b 0a 20 20 20 20 20 20 7d  pare_op;.      }
10260 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 61  .    }else if( a
10270 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f  ffinity==SQLITE_
10280 41 46 46 5f 54 45 58 54 20 29 7b 0a 20 20 20 20  AFF_TEXT ){.    
10290 20 20 69 66 28 20 28 66 6c 61 67 73 31 20 26 20    if( (flags1 & 
102a0 4d 45 4d 5f 53 74 72 29 3d 3d 30 20 26 26 20 28  MEM_Str)==0 && (
102b0 66 6c 61 67 73 31 20 26 20 28 4d 45 4d 5f 49 6e  flags1 & (MEM_In
102c0 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 21 3d 30 20  t|MEM_Real))!=0 
102d0 29 7b 0a 20 20 20 20 20 20 20 20 74 65 73 74 63  ){.        testc
102e0 61 73 65 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ase( pIn1->flags
102f0 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20   & MEM_Int );.  
10300 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
10310 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
10320 4d 5f 52 65 61 6c 20 29 3b 0a 20 20 20 20 20 20  M_Real );.      
10330 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
10340 53 74 72 69 6e 67 69 66 79 28 70 49 6e 31 2c 20  Stringify(pIn1, 
10350 65 6e 63 6f 64 69 6e 67 2c 20 31 29 3b 0a 20 20  encoding, 1);.  
10360 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
10370 28 66 6c 61 67 73 31 26 4d 45 4d 5f 44 79 6e 29  (flags1&MEM_Dyn)
10380 20 21 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73   != (pIn1->flags
10390 26 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 20  &MEM_Dyn) );.   
103a0 20 20 20 20 20 66 6c 61 67 73 31 20 3d 20 28 70       flags1 = (p
103b0 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 7e 4d 45  In1->flags & ~ME
103c0 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c 20 28 66  M_TypeMask) | (f
103d0 6c 61 67 73 31 20 26 20 4d 45 4d 5f 54 79 70 65  lags1 & MEM_Type
103e0 4d 61 73 6b 29 3b 0a 20 20 20 20 20 20 20 20 61  Mask);.        a
103f0 73 73 65 72 74 28 20 70 49 6e 31 21 3d 70 49 6e  ssert( pIn1!=pIn
10400 33 20 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  3 );.      }.   
10410 20 20 20 69 66 28 20 28 66 6c 61 67 73 33 20 26     if( (flags3 &
10420 20 4d 45 4d 5f 53 74 72 29 3d 3d 30 20 26 26 20   MEM_Str)==0 && 
10430 28 66 6c 61 67 73 33 20 26 20 28 4d 45 4d 5f 49  (flags3 & (MEM_I
10440 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 21 3d 30  nt|MEM_Real))!=0
10450 20 29 7b 0a 20 20 20 20 20 20 20 20 74 65 73 74   ){.        test
10460 63 61 73 65 28 20 70 49 6e 33 2d 3e 66 6c 61 67  case( pIn3->flag
10470 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  s & MEM_Int );. 
10480 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28         testcase(
10490 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn3->flags & M
104a0 45 4d 5f 52 65 61 6c 20 29 3b 0a 20 20 20 20 20  EM_Real );.     
104b0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
104c0 6d 53 74 72 69 6e 67 69 66 79 28 70 49 6e 33 2c  mStringify(pIn3,
104d0 20 65 6e 63 6f 64 69 6e 67 2c 20 31 29 3b 0a 20   encoding, 1);. 
104e0 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28         testcase(
104f0 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f 44 79 6e   (flags3&MEM_Dyn
10500 29 20 21 3d 20 28 70 49 6e 33 2d 3e 66 6c 61 67  ) != (pIn3->flag
10510 73 26 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20  s&MEM_Dyn) );.  
10520 20 20 20 20 20 20 66 6c 61 67 73 33 20 3d 20 28        flags3 = (
10530 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 7e 4d  pIn3->flags & ~M
10540 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c 20 28  EM_TypeMask) | (
10550 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f 54 79 70  flags3 & MEM_Typ
10560 65 4d 61 73 6b 29 3b 0a 20 20 20 20 20 20 7d 0a  eMask);.      }.
10570 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74      }.    assert
10580 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
10590 34 5f 43 4f 4c 4c 53 45 51 20 7c 7c 20 70 4f 70  4_COLLSEQ || pOp
105a0 2d 3e 70 34 2e 70 43 6f 6c 6c 3d 3d 30 20 29 3b  ->p4.pColl==0 );
105b0 0a 20 20 20 20 72 65 73 20 3d 20 73 71 6c 69 74  .    res = sqlit
105c0 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 70 49 6e  e3MemCompare(pIn
105d0 33 2c 20 70 49 6e 31 2c 20 70 4f 70 2d 3e 70 34  3, pIn1, pOp->p4
105e0 2e 70 43 6f 6c 6c 29 3b 0a 20 20 7d 0a 63 6f 6d  .pColl);.  }.com
105f0 70 61 72 65 5f 6f 70 3a 0a 20 20 2f 2a 20 41 74  pare_op:.  /* At
10600 20 74 68 69 73 20 70 6f 69 6e 74 2c 20 72 65 73   this point, res
10610 20 69 73 20 6e 65 67 61 74 69 76 65 2c 20 7a 65   is negative, ze
10620 72 6f 2c 20 6f 72 20 70 6f 73 69 74 69 76 65 20  ro, or positive 
10630 69 66 20 72 65 67 5b 50 31 5d 20 69 73 0a 20 20  if reg[P1] is.  
10640 2a 2a 20 6c 65 73 73 20 74 68 61 6e 2c 20 65 71  ** less than, eq
10650 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61 74  ual to, or great
10660 65 72 20 74 68 61 6e 20 72 65 67 5b 50 33 5d 2c  er than reg[P3],
10670 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20   respectively.  
10680 43 6f 6d 70 75 74 65 0a 20 20 2a 2a 20 74 68 65  Compute.  ** the
10690 20 61 6e 73 77 65 72 20 74 6f 20 74 68 69 73 20   answer to this 
106a0 6f 70 65 72 61 74 6f 72 20 69 6e 20 72 65 73 32  operator in res2
106b0 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77  , depending on w
106c0 68 61 74 20 74 68 65 20 63 6f 6d 70 61 72 69 73  hat the comparis
106d0 6f 6e 0a 20 20 2a 2a 20 6f 70 65 72 61 74 6f 72  on.  ** operator
106e0 20 61 63 74 75 61 6c 6c 79 20 69 73 2e 20 20 54   actually is.  T
106f0 68 65 20 6e 65 78 74 20 62 6c 6f 63 6b 20 6f 66  he next block of
10700 20 63 6f 64 65 20 64 65 70 65 6e 64 73 20 6f 6e   code depends on
10710 20 74 68 65 20 66 61 63 74 0a 20 20 2a 2a 20 74   the fact.  ** t
10720 68 61 74 20 74 68 65 20 36 20 63 6f 6d 70 61 72  hat the 6 compar
10730 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 73 20 61  ison operators a
10740 72 65 20 63 6f 6e 73 65 63 75 74 69 76 65 20 69  re consecutive i
10750 6e 74 65 67 65 72 73 20 69 6e 20 74 68 69 73 0a  ntegers in this.
10760 20 20 2a 2a 20 6f 72 64 65 72 3a 20 20 4e 45 2c    ** order:  NE,
10770 20 45 51 2c 20 47 54 2c 20 4c 45 2c 20 4c 54 2c   EQ, GT, LE, LT,
10780 20 47 45 20 2a 2f 0a 20 20 61 73 73 65 72 74 28   GE */.  assert(
10790 20 4f 50 5f 45 71 3d 3d 4f 50 5f 4e 65 2b 31 20   OP_Eq==OP_Ne+1 
107a0 29 3b 20 61 73 73 65 72 74 28 20 4f 50 5f 47 74  ); assert( OP_Gt
107b0 3d 3d 4f 50 5f 4e 65 2b 32 20 29 3b 20 61 73 73  ==OP_Ne+2 ); ass
107c0 65 72 74 28 20 4f 50 5f 4c 65 3d 3d 4f 50 5f 4e  ert( OP_Le==OP_N
107d0 65 2b 33 20 29 3b 0a 20 20 61 73 73 65 72 74 28  e+3 );.  assert(
107e0 20 4f 50 5f 4c 74 3d 3d 4f 50 5f 4e 65 2b 34 20   OP_Lt==OP_Ne+4 
107f0 29 3b 20 61 73 73 65 72 74 28 20 4f 50 5f 47 65  ); assert( OP_Ge
10800 3d 3d 4f 50 5f 4e 65 2b 35 20 29 3b 0a 20 20 69  ==OP_Ne+5 );.  i
10810 66 28 20 72 65 73 3c 30 20 29 7b 20 20 20 20 20  f( res<0 ){     
10820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10830 20 20 20 2f 2a 20 6e 65 2c 20 65 71 2c 20 67 74     /* ne, eq, gt
10840 2c 20 6c 65 2c 20 6c 74 2c 20 67 65 20 2a 2f 0a  , le, lt, ge */.
10850 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
10860 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 61   unsigned char a
10870 4c 54 62 5b 5d 20 3d 20 7b 20 31 2c 20 20 30 2c  LTb[] = { 1,  0,
10880 20 20 30 2c 20 20 31 2c 20 20 31 2c 20 20 30 20    0,  1,  1,  0 
10890 7d 3b 0a 20 20 20 20 72 65 73 32 20 3d 20 61 4c  };.    res2 = aL
108a0 54 62 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 2d  Tb[pOp->opcode -
108b0 20 4f 50 5f 4e 65 5d 3b 0a 20 20 7d 65 6c 73 65   OP_Ne];.  }else
108c0 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20   if( res==0 ){. 
108d0 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
108e0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 61 45  unsigned char aE
108f0 51 62 5b 5d 20 3d 20 7b 20 30 2c 20 20 31 2c 20  Qb[] = { 0,  1, 
10900 20 30 2c 20 20 31 2c 20 20 30 2c 20 20 31 20 7d   0,  1,  0,  1 }
10910 3b 0a 20 20 20 20 72 65 73 32 20 3d 20 61 45 51  ;.    res2 = aEQ
10920 62 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 2d 20  b[pOp->opcode - 
10930 4f 50 5f 4e 65 5d 3b 0a 20 20 7d 65 6c 73 65 7b  OP_Ne];.  }else{
10940 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73  .    static cons
10950 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
10960 61 47 54 62 5b 5d 20 3d 20 7b 20 31 2c 20 20 30  aGTb[] = { 1,  0
10970 2c 20 20 31 2c 20 20 30 2c 20 20 30 2c 20 20 31  ,  1,  0,  0,  1
10980 20 7d 3b 0a 20 20 20 20 72 65 73 32 20 3d 20 61   };.    res2 = a
10990 47 54 62 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  GTb[pOp->opcode 
109a0 2d 20 4f 50 5f 4e 65 5d 3b 0a 20 20 7d 0a 0a 20  - OP_Ne];.  }.. 
109b0 20 2f 2a 20 55 6e 64 6f 20 61 6e 79 20 63 68 61   /* Undo any cha
109c0 6e 67 65 73 20 6d 61 64 65 20 62 79 20 61 70 70  nges made by app
109d0 6c 79 41 66 66 69 6e 69 74 79 28 29 20 74 6f 20  lyAffinity() to 
109e0 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73 74  the input regist
109f0 65 72 73 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74  ers. */.  assert
10a00 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
10a10 20 4d 45 4d 5f 44 79 6e 29 20 3d 3d 20 28 66 6c   MEM_Dyn) == (fl
10a20 61 67 73 31 20 26 20 4d 45 4d 5f 44 79 6e 29 20  ags1 & MEM_Dyn) 
10a30 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73  );.  pIn1->flags
10a40 20 3d 20 66 6c 61 67 73 31 3b 0a 20 20 61 73 73   = flags1;.  ass
10a50 65 72 74 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67  ert( (pIn3->flag
10a60 73 20 26 20 4d 45 4d 5f 44 79 6e 29 20 3d 3d 20  s & MEM_Dyn) == 
10a70 28 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f 44 79  (flags3 & MEM_Dy
10a80 6e 29 20 29 3b 0a 20 20 70 49 6e 33 2d 3e 66 6c  n) );.  pIn3->fl
10a90 61 67 73 20 3d 20 66 6c 61 67 73 33 3b 0a 0a 20  ags = flags3;.. 
10aa0 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53   if( pOp->p5 & S
10ab0 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b  QLITE_STOREP2 ){
10ac0 0a 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  .    pOut = &aMe
10ad0 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20  m[pOp->p2];.    
10ae0 69 43 6f 6d 70 61 72 65 20 3d 20 72 65 73 3b 0a  iCompare = res;.
10af0 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 70 35      if( (pOp->p5
10b00 20 26 20 53 51 4c 49 54 45 5f 4b 45 45 50 4e 55   & SQLITE_KEEPNU
10b10 4c 4c 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  LL)!=0 ){.      
10b20 2f 2a 20 54 68 65 20 4b 45 45 50 4e 55 4c 4c 20  /* The KEEPNULL 
10b30 66 6c 61 67 20 70 72 65 76 65 6e 74 73 20 4f 50  flag prevents OP
10b40 5f 45 71 20 66 72 6f 6d 20 6f 76 65 72 77 72 69  _Eq from overwri
10b50 74 69 6e 67 20 61 20 4e 55 4c 4c 20 77 69 74 68  ting a NULL with
10b60 20 31 0a 20 20 20 20 20 20 2a 2a 20 61 6e 64 20   1.      ** and 
10b70 70 72 65 76 65 6e 74 73 20 4f 50 5f 4e 65 20 66  prevents OP_Ne f
10b80 72 6f 6d 20 6f 76 65 72 77 72 69 74 69 6e 67 20  rom overwriting 
10b90 4e 55 4c 4c 20 77 69 74 68 20 30 2e 20 20 54 68  NULL with 0.  Th
10ba0 69 73 20 66 6c 61 67 0a 20 20 20 20 20 20 2a 2a  is flag.      **
10bb0 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e   is only used in
10bc0 20 63 6f 6e 74 65 78 74 73 20 77 68 65 72 65 20   contexts where 
10bd0 65 69 74 68 65 72 3a 0a 20 20 20 20 20 20 2a 2a  either:.      **
10be0 20 20 20 28 31 29 20 6f 70 3d 3d 4f 50 5f 45 71     (1) op==OP_Eq
10bf0 20 26 26 20 28 72 5b 50 32 5d 3d 3d 4e 55 4c 4c   && (r[P2]==NULL
10c00 20 7c 7c 20 72 5b 50 32 5d 3d 3d 30 29 0a 20 20   || r[P2]==0).  
10c10 20 20 20 20 2a 2a 20 20 20 28 32 29 20 6f 70 3d      **   (2) op=
10c20 3d 4f 50 5f 4e 65 20 26 26 20 28 72 5b 50 32 5d  =OP_Ne && (r[P2]
10c30 3d 3d 4e 55 4c 4c 20 7c 7c 20 72 5b 50 32 5d 3d  ==NULL || r[P2]=
10c40 3d 31 29 0a 20 20 20 20 20 20 2a 2a 20 54 68 65  =1).      ** The
10c50 72 65 66 6f 72 65 20 69 74 20 69 73 20 6e 6f 74  refore it is not
10c60 20 6e 65 63 65 73 73 61 72 79 20 74 6f 20 63 68   necessary to ch
10c70 65 63 6b 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  eck the content 
10c80 6f 66 20 72 5b 50 32 5d 20 66 6f 72 0a 20 20 20  of r[P2] for.   
10c90 20 20 20 2a 2a 20 4e 55 4c 4c 2e 20 2a 2f 0a 20     ** NULL. */. 
10ca0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
10cb0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20  ->opcode==OP_Ne 
10cc0 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
10cd0 4f 50 5f 45 71 20 29 3b 0a 20 20 20 20 20 20 61  OP_Eq );.      a
10ce0 73 73 65 72 74 28 20 72 65 73 32 3d 3d 30 20 7c  ssert( res2==0 |
10cf0 7c 20 72 65 73 32 3d 3d 31 20 29 3b 0a 20 20 20  | res2==1 );.   
10d00 20 20 20 74 65 73 74 63 61 73 65 28 20 72 65 73     testcase( res
10d10 32 3d 3d 30 20 26 26 20 70 4f 70 2d 3e 6f 70 63  2==0 && pOp->opc
10d20 6f 64 65 3d 3d 4f 50 5f 45 71 20 29 3b 0a 20 20  ode==OP_Eq );.  
10d30 20 20 20 20 74 65 73 74 63 61 73 65 28 20 72 65      testcase( re
10d40 73 32 3d 3d 31 20 26 26 20 70 4f 70 2d 3e 6f 70  s2==1 && pOp->op
10d50 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 29 3b 0a 20  code==OP_Eq );. 
10d60 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 72       testcase( r
10d70 65 73 32 3d 3d 30 20 26 26 20 70 4f 70 2d 3e 6f  es2==0 && pOp->o
10d80 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a  pcode==OP_Ne );.
10d90 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
10da0 72 65 73 32 3d 3d 31 20 26 26 20 70 4f 70 2d 3e  res2==1 && pOp->
10db0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b  opcode==OP_Ne );
10dc0 0a 20 20 20 20 20 20 69 66 28 20 28 70 4f 70 2d  .      if( (pOp-
10dd0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 29 3d  >opcode==OP_Eq)=
10de0 3d 72 65 73 32 20 29 20 62 72 65 61 6b 3b 0a 20  =res2 ) break;. 
10df0 20 20 20 7d 0a 20 20 20 20 6d 65 6d 41 62 6f 75     }.    memAbou
10e00 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75  tToChange(p, pOu
10e10 74 29 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79  t);.    MemSetTy
10e20 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
10e30 5f 49 6e 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d  _Int);.    pOut-
10e40 3e 75 2e 69 20 3d 20 72 65 73 32 3b 0a 20 20 20  >u.i = res2;.   
10e50 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
10e60 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a  pOp->p2, pOut);.
10e70 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62    }else{.    Vdb
10e80 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73  eBranchTaken(res
10e90 21 3d 30 2c 20 28 70 4f 70 2d 3e 70 35 20 26 20  !=0, (pOp->p5 & 
10ea0 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 29 3f 32  SQLITE_NULLEQ)?2
10eb0 3a 33 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73  :3);.    if( res
10ec0 32 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  2 ){.      goto 
10ed0 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20  jump_to_p2;.    
10ee0 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
10ef0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 6c 73  ../* Opcode: Els
10f00 65 4e 6f 74 45 71 20 2a 20 50 32 20 2a 20 2a 20  eNotEq * P2 * * 
10f10 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  *.**.** This opc
10f20 6f 64 65 20 6d 75 73 74 20 69 6d 6d 65 64 69 61  ode must immedia
10f30 74 65 6c 79 20 66 6f 6c 6c 6f 77 20 61 6e 20 4f  tely follow an O
10f40 50 5f 4c 74 20 6f 72 20 4f 50 5f 47 74 20 63 6f  P_Lt or OP_Gt co
10f50 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f  mparison operato
10f60 72 2e 0a 2a 2a 20 49 66 20 72 65 73 75 6c 74 20  r..** If result 
10f70 6f 66 20 61 6e 20 4f 50 5f 45 71 20 63 6f 6d 70  of an OP_Eq comp
10f80 61 72 69 73 6f 6e 20 6f 6e 20 74 68 65 20 73 61  arison on the sa
10f90 6d 65 20 74 77 6f 20 6f 70 65 72 61 6e 64 73 0a  me two operands.
10fa0 2a 2a 20 77 6f 75 6c 64 20 68 61 76 65 20 62 65  ** would have be
10fb0 20 4e 55 4c 4c 20 6f 72 20 66 61 6c 73 65 20 28   NULL or false (
10fc0 30 29 2c 20 74 68 65 6e 20 74 68 65 6e 20 6a 75  0), then then ju
10fd0 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 20 49 66  mp to P2. .** If
10fe0 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61   the result of a
10ff0 6e 20 4f 50 5f 45 71 20 63 6f 6d 70 61 72 69 73  n OP_Eq comparis
11000 6f 6e 20 6f 6e 20 74 68 65 20 74 77 6f 20 70 72  on on the two pr
11010 65 76 69 6f 75 73 20 6f 70 65 72 61 6e 64 73 0a  evious operands.
11020 2a 2a 20 77 6f 75 6c 64 20 68 61 76 65 20 62 65  ** would have be
11030 65 6e 20 74 72 75 65 20 28 31 29 2c 20 74 68 65  en true (1), the
11040 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 2e 0a  n fall through..
11050 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 6c 73 65 4e  */.case OP_ElseN
11060 6f 74 45 71 3a 20 7b 20 20 20 20 20 20 20 2f 2a  otEq: {       /*
11070 20 73 61 6d 65 20 61 73 20 54 4b 5f 45 53 43 41   same as TK_ESCA
11080 50 45 2c 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73  PE, jump */.  as
11090 73 65 72 74 28 20 70 4f 70 3e 61 4f 70 20 29 3b  sert( pOp>aOp );
110a0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d  .  assert( pOp[-
110b0 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4c 74  1].opcode==OP_Lt
110c0 20 7c 7c 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f   || pOp[-1].opco
110d0 64 65 3d 3d 4f 50 5f 47 74 20 29 3b 0a 20 20 61  de==OP_Gt );.  a
110e0 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 70  ssert( pOp[-1].p
110f0 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f 52 45  5 & SQLITE_STORE
11100 50 32 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e  P2 );.  VdbeBran
11110 63 68 54 61 6b 65 6e 28 69 43 6f 6d 70 61 72 65  chTaken(iCompare
11120 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 69  !=0, 2);.  if( i
11130 43 6f 6d 70 61 72 65 21 3d 30 20 29 20 67 6f 74  Compare!=0 ) got
11140 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
11150 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70  break;.}.../* Op
11160 63 6f 64 65 3a 20 50 65 72 6d 75 74 61 74 69 6f  code: Permutatio
11170 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a  n * * * P4 *.**.
11180 2a 2a 20 53 65 74 20 74 68 65 20 70 65 72 6d 75  ** Set the permu
11190 74 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74  tation used by t
111a0 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70  he OP_Compare op
111b0 65 72 61 74 6f 72 20 69 6e 20 74 68 65 20 6e 65  erator in the ne
111c0 78 74 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f  xt.** instructio
111d0 6e 2e 20 20 54 68 65 20 70 65 72 6d 75 74 61 74  n.  The permutat
111e0 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ion is stored in
111f0 20 74 68 65 20 50 34 20 6f 70 65 72 61 6e 64 2e   the P4 operand.
11200 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 65 72 6d 75  .**.** The permu
11210 74 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 76  tation is only v
11220 61 6c 69 64 20 75 6e 74 69 6c 20 74 68 65 20 6e  alid until the n
11230 65 78 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 74  ext OP_Compare t
11240 68 61 74 20 68 61 73 0a 2a 2a 20 74 68 65 20 4f  hat has.** the O
11250 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69  PFLAG_PERMUTE bi
11260 74 20 73 65 74 20 69 6e 20 50 35 2e 20 54 79 70  t set in P5. Typ
11270 69 63 61 6c 6c 79 20 74 68 65 20 4f 50 5f 50 65  ically the OP_Pe
11280 72 6d 75 74 61 74 69 6f 6e 20 73 68 6f 75 6c 64  rmutation should
11290 20 0a 2a 2a 20 6f 63 63 75 72 20 69 6d 6d 65 64   .** occur immed
112a0 69 61 74 65 6c 79 20 70 72 69 6f 72 20 74 6f 20  iately prior to 
112b0 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 2e 0a  the OP_Compare..
112c0 2a 2a 0a 2a 2a 20 54 68 65 20 66 69 72 73 74 20  **.** The first 
112d0 69 6e 74 65 67 65 72 20 69 6e 20 74 68 65 20 50  integer in the P
112e0 34 20 69 6e 74 65 67 65 72 20 61 72 72 61 79 20  4 integer array 
112f0 69 73 20 74 68 65 20 6c 65 6e 67 74 68 20 6f 66  is the length of
11300 20 74 68 65 20 61 72 72 61 79 0a 2a 2a 20 61 6e   the array.** an
11310 64 20 64 6f 65 73 20 6e 6f 74 20 62 65 63 6f 6d  d does not becom
11320 65 20 70 61 72 74 20 6f 66 20 74 68 65 20 70 65  e part of the pe
11330 72 6d 75 74 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  rmutation..*/.ca
11340 73 65 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f  se OP_Permutatio
11350 6e 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70  n: {.  assert( p
11360 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
11370 4e 54 41 52 52 41 59 20 29 3b 0a 20 20 61 73 73  NTARRAY );.  ass
11380 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 61 69 20  ert( pOp->p4.ai 
11390 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
113a0 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43  [1].opcode==OP_C
113b0 6f 6d 70 61 72 65 20 29 3b 0a 20 20 61 73 73 65  ompare );.  asse
113c0 72 74 28 20 70 4f 70 5b 31 5d 2e 70 35 20 26 20  rt( pOp[1].p5 & 
113d0 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 29  OPFLAG_PERMUTE )
113e0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
113f0 20 4f 70 63 6f 64 65 3a 20 43 6f 6d 70 61 72 65   Opcode: Compare
11400 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
11410 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
11420 31 40 50 33 5d 20 3c 2d 3e 20 72 5b 50 32 40 50  1@P3] <-> r[P2@P
11430 33 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65  3].**.** Compare
11440 20 74 77 6f 20 76 65 63 74 6f 72 73 20 6f 66 20   two vectors of 
11450 72 65 67 69 73 74 65 72 73 20 69 6e 20 72 65 67  registers in reg
11460 28 50 31 29 2e 2e 72 65 67 28 50 31 2b 50 33 2d  (P1)..reg(P1+P3-
11470 31 29 20 28 63 61 6c 6c 20 74 68 69 73 0a 2a 2a  1) (call this.**
11480 20 76 65 63 74 6f 72 20 22 41 22 29 20 61 6e 64   vector "A") and
11490 20 69 6e 20 72 65 67 28 50 32 29 2e 2e 72 65 67   in reg(P2)..reg
114a0 28 50 32 2b 50 33 2d 31 29 20 28 22 42 22 29 2e  (P2+P3-1) ("B").
114b0 20 20 53 61 76 65 20 74 68 65 20 72 65 73 75 6c    Save the resul
114c0 74 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6d 70  t of.** the comp
114d0 61 72 69 73 6f 6e 20 66 6f 72 20 75 73 65 20 62  arison for use b
114e0 79 20 74 68 65 20 6e 65 78 74 20 4f 50 5f 4a 75  y the next OP_Ju
114f0 6d 70 20 69 6e 73 74 72 75 63 74 2e 0a 2a 2a 0a  mp instruct..**.
11500 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74 68 65  ** If P5 has the
11510 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20   OPFLAG_PERMUTE 
11520 62 69 74 20 73 65 74 2c 20 74 68 65 6e 20 74 68  bit set, then th
11530 65 20 6f 72 64 65 72 20 6f 66 20 63 6f 6d 70 61  e order of compa
11540 72 69 73 6f 6e 20 69 73 0a 2a 2a 20 64 65 74 65  rison is.** dete
11550 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 6d 6f  rmined by the mo
11560 73 74 20 72 65 63 65 6e 74 20 4f 50 5f 50 65 72  st recent OP_Per
11570 6d 75 74 61 74 69 6f 6e 20 6f 70 65 72 61 74 6f  mutation operato
11580 72 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 4f 50  r.  If the.** OP
11590 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74  FLAG_PERMUTE bit
115a0 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e 20   is clear, then 
115b0 72 65 67 69 73 74 65 72 20 61 72 65 20 63 6f 6d  register are com
115c0 70 61 72 65 64 20 69 6e 20 73 65 71 75 65 6e 74  pared in sequent
115d0 69 61 6c 0a 2a 2a 20 6f 72 64 65 72 2e 0a 2a 2a  ial.** order..**
115e0 0a 2a 2a 20 50 34 20 69 73 20 61 20 4b 65 79 49  .** P4 is a KeyI
115f0 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 74 68  nfo structure th
11600 61 74 20 64 65 66 69 6e 65 73 20 63 6f 6c 6c 61  at defines colla
11610 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 61  ting sequences a
11620 6e 64 20 73 6f 72 74 0a 2a 2a 20 6f 72 64 65 72  nd sort.** order
11630 73 20 66 6f 72 20 74 68 65 20 63 6f 6d 70 61 72  s for the compar
11640 69 73 6f 6e 2e 20 20 54 68 65 20 70 65 72 6d 75  ison.  The permu
11650 74 61 74 69 6f 6e 20 61 70 70 6c 69 65 73 20 74  tation applies t
11660 6f 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 6f  o registers.** o
11670 6e 6c 79 2e 20 20 54 68 65 20 4b 65 79 49 6e 66  nly.  The KeyInf
11680 6f 20 65 6c 65 6d 65 6e 74 73 20 61 72 65 20 75  o elements are u
11690 73 65 64 20 73 65 71 75 65 6e 74 69 61 6c 6c 79  sed sequentially
116a0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 70  ..**.** The comp
116b0 61 72 69 73 6f 6e 20 69 73 20 61 20 73 6f 72 74  arison is a sort
116c0 20 63 6f 6d 70 61 72 69 73 6f 6e 2c 20 73 6f 20   comparison, so 
116d0 4e 55 4c 4c 73 20 63 6f 6d 70 61 72 65 20 65 71  NULLs compare eq
116e0 75 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73 20 61 72  ual,.** NULLs ar
116f0 65 20 6c 65 73 73 20 74 68 61 6e 20 6e 75 6d 62  e less than numb
11700 65 72 73 2c 20 6e 75 6d 62 65 72 73 20 61 72 65  ers, numbers are
11710 20 6c 65 73 73 20 74 68 61 6e 20 73 74 72 69 6e   less than strin
11720 67 73 2c 0a 2a 2a 20 61 6e 64 20 73 74 72 69 6e  gs,.** and strin
11730 67 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e  gs are less than
11740 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 63 61 73 65 20   blobs..*/.case 
11750 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20  OP_Compare: {.  
11760 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a  int n;.  int i;.
11770 20 20 69 6e 74 20 70 31 3b 0a 20 20 69 6e 74 20    int p1;.  int 
11780 70 32 3b 0a 20 20 63 6f 6e 73 74 20 4b 65 79 49  p2;.  const KeyI
11790 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20  nfo *pKeyInfo;. 
117a0 20 69 6e 74 20 69 64 78 3b 0a 20 20 43 6f 6c 6c   int idx;.  Coll
117b0 53 65 71 20 2a 70 43 6f 6c 6c 3b 20 20 20 20 2f  Seq *pColl;    /
117c0 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  * Collating sequ
117d0 65 6e 63 65 20 74 6f 20 75 73 65 20 6f 6e 20 74  ence to use on t
117e0 68 69 73 20 74 65 72 6d 20 2a 2f 0a 20 20 69 6e  his term */.  in
117f0 74 20 62 52 65 76 3b 20 20 20 20 20 20 20 20 20  t bRev;         
11800 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 44 45 53   /* True for DES
11810 43 45 4e 44 49 4e 47 20 73 6f 72 74 20 6f 72 64  CENDING sort ord
11820 65 72 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 50 65  er */.  int *aPe
11830 72 6d 75 74 65 3b 20 20 20 20 20 2f 2a 20 54 68  rmute;     /* Th
11840 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 2a 2f  e permutation */
11850 0a 0a 20 20 69 66 28 20 28 70 4f 70 2d 3e 70 35  ..  if( (pOp->p5
11860 20 26 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54   & OPFLAG_PERMUT
11870 45 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61 50 65  E)==0 ){.    aPe
11880 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20 7d 65 6c  rmute = 0;.  }el
11890 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
118a0 70 4f 70 3e 61 4f 70 20 29 3b 0a 20 20 20 20 61  pOp>aOp );.    a
118b0 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f  ssert( pOp[-1].o
118c0 70 63 6f 64 65 3d 3d 4f 50 5f 50 65 72 6d 75 74  pcode==OP_Permut
118d0 61 74 69 6f 6e 20 29 3b 0a 20 20 20 20 61 73 73  ation );.    ass
118e0 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 70 34 74  ert( pOp[-1].p4t
118f0 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52 52 41 59  ype==P4_INTARRAY
11900 20 29 3b 0a 20 20 20 20 61 50 65 72 6d 75 74 65   );.    aPermute
11910 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e 61 69   = pOp[-1].p4.ai
11920 20 2b 20 31 3b 0a 20 20 20 20 61 73 73 65 72 74   + 1;.    assert
11930 28 20 61 50 65 72 6d 75 74 65 21 3d 30 20 29 3b  ( aPermute!=0 );
11940 0a 20 20 7d 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e  .  }.  n = pOp->
11950 70 33 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d  p3;.  pKeyInfo =
11960 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66   pOp->p4.pKeyInf
11970 6f 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 30  o;.  assert( n>0
11980 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4b   );.  assert( pK
11990 65 79 49 6e 66 6f 21 3d 30 20 29 3b 0a 20 20 70  eyInfo!=0 );.  p
119a0 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70  1 = pOp->p1;.  p
119b0 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 23 69 66  2 = pOp->p2;.#if
119c0 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
119d0 0a 20 20 69 66 28 20 61 50 65 72 6d 75 74 65 20  .  if( aPermute 
119e0 29 7b 0a 20 20 20 20 69 6e 74 20 6b 2c 20 6d 78  ){.    int k, mx
119f0 20 3d 20 30 3b 0a 20 20 20 20 66 6f 72 28 6b 3d   = 0;.    for(k=
11a00 30 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29 20 69 66 28  0; k<n; k++) if(
11a10 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3e 6d 78 20   aPermute[k]>mx 
11a20 29 20 6d 78 20 3d 20 61 50 65 72 6d 75 74 65 5b  ) mx = aPermute[
11a30 6b 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  k];.    assert( 
11a40 70 31 3e 30 20 26 26 20 70 31 2b 6d 78 3c 3d 28  p1>0 && p1+mx<=(
11a50 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
11a60 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 20  Cursor)+1 );.   
11a70 20 61 73 73 65 72 74 28 20 70 32 3e 30 20 26 26   assert( p2>0 &&
11a80 20 70 32 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d   p2+mx<=(p->nMem
11a90 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
11aa0 2b 31 20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  +1 );.  }else{. 
11ab0 20 20 20 61 73 73 65 72 74 28 20 70 31 3e 30 20     assert( p1>0 
11ac0 26 26 20 70 31 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65  && p1+n<=(p->nMe
11ad0 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
11ae0 29 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72  )+1 );.    asser
11af0 74 28 20 70 32 3e 30 20 26 26 20 70 32 2b 6e 3c  t( p2>0 && p2+n<
11b00 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
11b10 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20  >nCursor)+1 );. 
11b20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c   }.#endif /* SQL
11b30 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 20 20 66  ITE_DEBUG */.  f
11b40 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b  or(i=0; i<n; i++
11b50 29 7b 0a 20 20 20 20 69 64 78 20 3d 20 61 50 65  ){.    idx = aPe
11b60 72 6d 75 74 65 20 3f 20 61 50 65 72 6d 75 74 65  rmute ? aPermute
11b70 5b 69 5d 20 3a 20 69 3b 0a 20 20 20 20 61 73 73  [i] : i;.    ass
11b80 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
11b90 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 20 29  &aMem[p1+idx]) )
11ba0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  ;.    assert( me
11bb0 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70  mIsValid(&aMem[p
11bc0 32 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20 20 52  2+idx]) );.    R
11bd0 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 31  EGISTER_TRACE(p1
11be0 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70 31 2b 69  +idx, &aMem[p1+i
11bf0 64 78 5d 29 3b 0a 20 20 20 20 52 45 47 49 53 54  dx]);.    REGIST
11c00 45 52 5f 54 52 41 43 45 28 70 32 2b 69 64 78 2c  ER_TRACE(p2+idx,
11c10 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 3b   &aMem[p2+idx]);
11c20 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 3c 70  .    assert( i<p
11c30 4b 65 79 49 6e 66 6f 2d 3e 6e 4b 65 79 46 69 65  KeyInfo->nKeyFie
11c40 6c 64 20 29 3b 0a 20 20 20 20 70 43 6f 6c 6c 20  ld );.    pColl 
11c50 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 43 6f 6c  = pKeyInfo->aCol
11c60 6c 5b 69 5d 3b 0a 20 20 20 20 62 52 65 76 20 3d  l[i];.    bRev =
11c70 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 53 6f 72 74   pKeyInfo->aSort
11c80 4f 72 64 65 72 5b 69 5d 3b 0a 20 20 20 20 69 43  Order[i];.    iC
11c90 6f 6d 70 61 72 65 20 3d 20 73 71 6c 69 74 65 33  ompare = sqlite3
11ca0 4d 65 6d 43 6f 6d 70 61 72 65 28 26 61 4d 65 6d  MemCompare(&aMem
11cb0 5b 70 31 2b 69 64 78 5d 2c 20 26 61 4d 65 6d 5b  [p1+idx], &aMem[
11cc0 70 32 2b 69 64 78 5d 2c 20 70 43 6f 6c 6c 29 3b  p2+idx], pColl);
11cd0 0a 20 20 20 20 69 66 28 20 69 43 6f 6d 70 61 72  .    if( iCompar
11ce0 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 62  e ){.      if( b
11cf0 52 65 76 20 29 20 69 43 6f 6d 70 61 72 65 20 3d  Rev ) iCompare =
11d00 20 2d 69 43 6f 6d 70 61 72 65 3b 0a 20 20 20 20   -iCompare;.    
11d10 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
11d20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
11d30 2a 20 4f 70 63 6f 64 65 3a 20 4a 75 6d 70 20 50  * Opcode: Jump P
11d40 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
11d50 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 69 6e  * Jump to the in
11d60 73 74 72 75 63 74 69 6f 6e 20 61 74 20 61 64 64  struction at add
11d70 72 65 73 73 20 50 31 2c 20 50 32 2c 20 6f 72 20  ress P1, P2, or 
11d80 50 33 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  P3 depending on 
11d90 77 68 65 74 68 65 72 0a 2a 2a 20 69 6e 20 74 68  whether.** in th
11da0 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f 50  e most recent OP
11db0 5f 43 6f 6d 70 61 72 65 20 69 6e 73 74 72 75 63  _Compare instruc
11dc0 74 69 6f 6e 20 74 68 65 20 50 31 20 76 65 63 74  tion the P1 vect
11dd0 6f 72 20 77 61 73 20 6c 65 73 73 20 74 68 61 6e  or was less than
11de0 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 2c 20 6f 72  .** equal to, or
11df0 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68   greater than th
11e00 65 20 50 32 20 76 65 63 74 6f 72 2c 20 72 65 73  e P2 vector, res
11e10 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 63 61  pectively..*/.ca
11e20 73 65 20 4f 50 5f 4a 75 6d 70 3a 20 7b 20 20 20  se OP_Jump: {   
11e30 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
11e40 70 20 2a 2f 0a 20 20 69 66 28 20 69 43 6f 6d 70  p */.  if( iComp
11e50 61 72 65 3c 30 20 29 7b 0a 20 20 20 20 56 64 62  are<0 ){.    Vdb
11e60 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c 34  eBranchTaken(0,4
11e70 29 3b 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f  ); pOp = &aOp[pO
11e80 70 2d 3e 70 31 20 2d 20 31 5d 3b 0a 20 20 7d 65  p->p1 - 1];.  }e
11e90 6c 73 65 20 69 66 28 20 69 43 6f 6d 70 61 72 65  lse if( iCompare
11ea0 3d 3d 30 20 29 7b 0a 20 20 20 20 56 64 62 65 42  ==0 ){.    VdbeB
11eb0 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 34 29 3b  ranchTaken(1,4);
11ec0 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d   pOp = &aOp[pOp-
11ed0 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 7d 65 6c 73  >p2 - 1];.  }els
11ee0 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  e{.    VdbeBranc
11ef0 68 54 61 6b 65 6e 28 32 2c 34 29 3b 20 70 4f 70  hTaken(2,4); pOp
11f00 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 33 20   = &aOp[pOp->p3 
11f10 2d 20 31 5d 3b 0a 20 20 7d 0a 20 20 62 72 65 61  - 1];.  }.  brea
11f20 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
11f30 20 41 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20   And P1 P2 P3 * 
11f40 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
11f50 5b 50 33 5d 3d 28 72 5b 50 31 5d 20 26 26 20 72  [P3]=(r[P1] && r
11f60 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65  [P2]).**.** Take
11f70 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 41 4e 44   the logical AND
11f80 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69   of the values i
11f90 6e 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61  n registers P1 a
11fa0 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 77 72 69  nd P2 and.** wri
11fb0 74 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  te the result in
11fc0 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  to register P3..
11fd0 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  **.** If either 
11fe0 50 31 20 6f 72 20 50 32 20 69 73 20 30 20 28 66  P1 or P2 is 0 (f
11ff0 61 6c 73 65 29 20 74 68 65 6e 20 74 68 65 20 72  alse) then the r
12000 65 73 75 6c 74 20 69 73 20 30 20 65 76 65 6e 20  esult is 0 even 
12010 69 66 0a 2a 2a 20 74 68 65 20 6f 74 68 65 72 20  if.** the other 
12020 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20  input is NULL.  
12030 41 20 4e 55 4c 4c 20 61 6e 64 20 74 72 75 65 20  A NULL and true 
12040 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 20 67 69 76  or two NULLs giv
12050 65 0a 2a 2a 20 61 20 4e 55 4c 4c 20 6f 75 74 70  e.** a NULL outp
12060 75 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  ut..*/./* Opcode
12070 3a 20 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20  : Or P1 P2 P3 * 
12080 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
12090 5b 50 33 5d 3d 28 72 5b 50 31 5d 20 7c 7c 20 72  [P3]=(r[P1] || r
120a0 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65  [P2]).**.** Take
120b0 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 4f 52 20   the logical OR 
120c0 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  of the values in
120d0 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64   register P1 and
120e0 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65   P2 and.** store
120f0 20 74 68 65 20 61 6e 73 77 65 72 20 69 6e 20 72   the answer in r
12100 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a  egister P3..**.*
12110 2a 20 49 66 20 65 69 74 68 65 72 20 50 31 20 6f  * If either P1 o
12120 72 20 50 32 20 69 73 20 6e 6f 6e 7a 65 72 6f 20  r P2 is nonzero 
12130 28 74 72 75 65 29 20 74 68 65 6e 20 74 68 65 20  (true) then the 
12140 72 65 73 75 6c 74 20 69 73 20 31 20 28 74 72 75  result is 1 (tru
12150 65 29 0a 2a 2a 20 65 76 65 6e 20 69 66 20 74 68  e).** even if th
12160 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20 69 73  e other input is
12170 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61   NULL.  A NULL a
12180 6e 64 20 66 61 6c 73 65 20 6f 72 20 74 77 6f 20  nd false or two 
12190 4e 55 4c 4c 73 0a 2a 2a 20 67 69 76 65 20 61 20  NULLs.** give a 
121a0 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a  NULL output..*/.
121b0 63 61 73 65 20 4f 50 5f 41 6e 64 3a 20 20 20 20  case OP_And:    
121c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
121d0 65 20 61 73 20 54 4b 5f 41 4e 44 2c 20 69 6e 31  e as TK_AND, in1
121e0 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
121f0 61 73 65 20 4f 50 5f 4f 72 3a 20 7b 20 20 20 20  ase OP_Or: {    
12200 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
12210 20 61 73 20 54 4b 5f 4f 52 2c 20 69 6e 31 2c 20   as TK_OR, in1, 
12220 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69  in2, out3 */.  i
12230 6e 74 20 76 31 3b 20 20 20 20 2f 2a 20 4c 65 66  nt v1;    /* Lef
12240 74 20 6f 70 65 72 61 6e 64 3a 20 20 30 3d 3d 46  t operand:  0==F
12250 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32  ALSE, 1==TRUE, 2
12260 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c  ==UNKNOWN or NUL
12270 4c 20 2a 2f 0a 20 20 69 6e 74 20 76 32 3b 20 20  L */.  int v2;  
12280 20 20 2f 2a 20 52 69 67 68 74 20 6f 70 65 72 61    /* Right opera
12290 6e 64 3a 20 30 3d 3d 46 41 4c 53 45 2c 20 31 3d  nd: 0==FALSE, 1=
122a0 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57  =TRUE, 2==UNKNOW
122b0 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 20 20  N or NULL */..  
122c0 76 31 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  v1 = sqlite3Vdbe
122d0 42 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 26 61 4d  BooleanValue(&aM
122e0 65 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20 32 29 3b  em[pOp->p1], 2);
122f0 0a 20 20 76 32 20 3d 20 73 71 6c 69 74 65 33 56  .  v2 = sqlite3V
12300 64 62 65 42 6f 6f 6c 65 61 6e 56 61 6c 75 65 28  dbeBooleanValue(
12310 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 2c 20  &aMem[pOp->p2], 
12320 32 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f  2);.  if( pOp->o
12330 70 63 6f 64 65 3d 3d 4f 50 5f 41 6e 64 20 29 7b  pcode==OP_And ){
12340 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73  .    static cons
12350 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
12360 61 6e 64 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20  and_logic[] = { 
12370 30 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c 20 32  0, 0, 0, 0, 1, 2
12380 2c 20 30 2c 20 32 2c 20 32 20 7d 3b 0a 20 20 20  , 0, 2, 2 };.   
12390 20 76 31 20 3d 20 61 6e 64 5f 6c 6f 67 69 63 5b   v1 = and_logic[
123a0 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 65 6c 73  v1*3+v2];.  }els
123b0 65 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f  e{.    static co
123c0 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
123d0 72 20 6f 72 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b  r or_logic[] = {
123e0 20 30 2c 20 31 2c 20 32 2c 20 31 2c 20 31 2c 20   0, 1, 2, 1, 1, 
123f0 31 2c 20 32 2c 20 31 2c 20 32 20 7d 3b 0a 20 20  1, 2, 1, 2 };.  
12400 20 20 76 31 20 3d 20 6f 72 5f 6c 6f 67 69 63 5b    v1 = or_logic[
12410 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 0a 20 20  v1*3+v2];.  }.  
12420 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
12430 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 76 31 3d  ->p3];.  if( v1=
12440 3d 32 20 29 7b 0a 20 20 20 20 4d 65 6d 53 65 74  =2 ){.    MemSet
12450 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
12460 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 7d 65 6c 73  EM_Null);.  }els
12470 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  e{.    pOut->u.i
12480 20 3d 20 76 31 3b 0a 20 20 20 20 4d 65 6d 53 65   = v1;.    MemSe
12490 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
124a0 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20 20  MEM_Int);.  }.  
124b0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
124c0 6f 64 65 3a 20 49 73 54 72 75 65 20 50 31 20 50  ode: IsTrue P1 P
124d0 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
124e0 6f 70 73 69 73 3a 20 72 5b 50 32 5d 20 3d 20 63  opsis: r[P2] = c
124f0 6f 61 6c 65 73 63 65 28 72 5b 50 31 5d 3d 3d 54  oalesce(r[P1]==T
12500 52 55 45 2c 50 33 29 20 5e 20 50 34 0a 2a 2a 0a  RUE,P3) ^ P4.**.
12510 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
12520 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 49 53  mplements the IS
12530 20 54 52 55 45 2c 20 49 53 20 46 41 4c 53 45 2c   TRUE, IS FALSE,
12540 20 49 53 20 4e 4f 54 20 54 52 55 45 2c 20 61 6e   IS NOT TRUE, an
12550 64 0a 2a 2a 20 49 53 20 4e 4f 54 20 46 41 4c 53  d.** IS NOT FALS
12560 45 20 6f 70 65 72 61 74 6f 72 73 2e 0a 2a 2a 0a  E operators..**.
12570 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
12580 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
12590 65 72 20 50 31 20 61 73 20 61 20 62 6f 6f 6c 65  er P1 as a boole
125a0 61 6e 20 76 61 6c 75 65 2e 20 20 53 74 6f 72 65  an value.  Store
125b0 20 74 68 61 74 0a 2a 2a 20 62 6f 6f 6c 65 61 6e   that.** boolean
125c0 20 28 61 20 30 20 6f 72 20 31 29 20 69 6e 20 72   (a 0 or 1) in r
125d0 65 67 69 73 74 65 72 20 50 32 2e 20 20 4f 72 20  egister P2.  Or 
125e0 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  if the value in 
125f0 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 0a  register P1 is .
12600 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68  ** NULL, then th
12610 65 20 50 33 20 69 73 20 73 74 6f 72 65 64 20 69  e P3 is stored i
12620 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20  n register P2.  
12630 49 6e 76 65 72 74 20 74 68 65 20 61 6e 73 77 65  Invert the answe
12640 72 20 69 66 20 50 34 0a 2a 2a 20 69 73 20 31 2e  r if P4.** is 1.
12650 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6c 6f 67 69 63  .**.** The logic
12660 20 69 73 20 73 75 6d 6d 61 72 69 7a 65 64 20 6c   is summarized l
12670 69 6b 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a 2a 20  ike this:.**.** 
12680 3c 75 6c 3e 20 0a 2a 2a 20 3c 6c 69 3e 20 49 66  <ul> .** <li> If
12690 20 50 33 3d 3d 30 20 61 6e 64 20 50 34 3d 3d 30   P3==0 and P4==0
126a0 20 20 74 68 65 6e 20 20 72 5b 50 32 5d 20 3a 3d    then  r[P2] :=
126b0 20 72 5b 50 31 5d 20 49 53 20 54 52 55 45 0a 2a   r[P1] IS TRUE.*
126c0 2a 20 3c 6c 69 3e 20 49 66 20 50 33 3d 3d 31 20  * <li> If P3==1 
126d0 61 6e 64 20 50 34 3d 3d 31 20 20 74 68 65 6e 20  and P4==1  then 
126e0 20 72 5b 50 32 5d 20 3a 3d 20 72 5b 50 31 5d 20   r[P2] := r[P1] 
126f0 49 53 20 46 41 4c 53 45 0a 2a 2a 20 3c 6c 69 3e  IS FALSE.** <li>
12700 20 49 66 20 50 33 3d 3d 30 20 61 6e 64 20 50 34   If P3==0 and P4
12710 3d 3d 31 20 20 74 68 65 6e 20 20 72 5b 50 32 5d  ==1  then  r[P2]
12720 20 3a 3d 20 72 5b 50 31 5d 20 49 53 20 4e 4f 54   := r[P1] IS NOT
12730 20 54 52 55 45 0a 2a 2a 20 3c 6c 69 3e 20 49 66   TRUE.** <li> If
12740 20 50 33 3d 3d 31 20 61 6e 64 20 50 34 3d 3d 30   P3==1 and P4==0
12750 20 20 74 68 65 6e 20 20 72 5b 50 32 5d 20 3a 3d    then  r[P2] :=
12760 20 72 5b 50 31 5d 20 49 53 20 4e 4f 54 20 46 41   r[P1] IS NOT FA
12770 4c 53 45 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2f 0a  LSE.** </ul>.*/.
12780 63 61 73 65 20 4f 50 5f 49 73 54 72 75 65 3a 20  case OP_IsTrue: 
12790 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
127a0 2f 2a 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a  /* in1, out2 */.
127b0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
127c0 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
127d0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
127e0 2d 3e 70 34 2e 69 3d 3d 30 20 7c 7c 20 70 4f 70  ->p4.i==0 || pOp
127f0 2d 3e 70 34 2e 69 3d 3d 31 20 29 3b 0a 20 20 61  ->p4.i==1 );.  a
12800 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d 3d  ssert( pOp->p3==
12810 30 20 7c 7c 20 70 4f 70 2d 3e 70 33 3d 3d 31 20  0 || pOp->p3==1 
12820 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
12830 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65  MemSetInt64(&aMe
12840 6d 5b 70 4f 70 2d 3e 70 32 5d 2c 0a 20 20 20 20  m[pOp->p2],.    
12850 20 20 73 71 6c 69 74 65 33 56 64 62 65 42 6f 6f    sqlite3VdbeBoo
12860 6c 65 61 6e 56 61 6c 75 65 28 26 61 4d 65 6d 5b  leanValue(&aMem[
12870 70 4f 70 2d 3e 70 31 5d 2c 20 70 4f 70 2d 3e 70  pOp->p1], pOp->p
12880 33 29 20 5e 20 70 4f 70 2d 3e 70 34 2e 69 29 3b  3) ^ pOp->p4.i);
12890 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
128a0 4f 70 63 6f 64 65 3a 20 4e 6f 74 20 50 31 20 50  Opcode: Not P1 P
128b0 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
128c0 73 69 73 3a 20 72 5b 50 32 5d 3d 20 21 72 5b 50  sis: r[P2]= !r[P
128d0 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72  1].**.** Interpr
128e0 65 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  et the value in 
128f0 72 65 67 69 73 74 65 72 20 50 31 20 61 73 20 61  register P1 as a
12900 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2e 20   boolean value. 
12910 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20 62 6f   Store the.** bo
12920 6f 6c 65 61 6e 20 63 6f 6d 70 6c 65 6d 65 6e 74  olean complement
12930 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
12940 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69    If the value i
12950 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
12960 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 6e 20   .** NULL, then 
12970 61 20 4e 55 4c 4c 20 69 73 20 73 74 6f 72 65 64  a NULL is stored
12980 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20   in P2..*/.case 
12990 4f 50 5f 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20  OP_Not: {       
129a0 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
129b0 20 61 73 20 54 4b 5f 4e 4f 54 2c 20 69 6e 31 2c   as TK_NOT, in1,
129c0 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20   out2 */.  pIn1 
129d0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
129e0 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
129f0 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28  [pOp->p2];.  if(
12a00 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
12a10 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a  MEM_Null)==0 ){.
12a20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
12a30 65 6d 53 65 74 49 6e 74 36 34 28 70 4f 75 74 2c  emSetInt64(pOut,
12a40 20 21 73 71 6c 69 74 65 33 56 64 62 65 42 6f 6f   !sqlite3VdbeBoo
12a50 6c 65 61 6e 56 61 6c 75 65 28 70 49 6e 31 2c 30  leanValue(pIn1,0
12a60 29 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ));.  }else{.   
12a70 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
12a80 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
12a90 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
12aa0 20 4f 70 63 6f 64 65 3a 20 42 69 74 4e 6f 74 20   Opcode: BitNot 
12ab0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
12ac0 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 20  ynopsis: r[P2]= 
12ad0 7e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74  ~r[P1].**.** Int
12ae0 65 72 70 72 65 74 20 74 68 65 20 63 6f 6e 74 65  erpret the conte
12af0 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
12b00 31 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72 2e  1 as an integer.
12b10 20 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20 6f    Store the.** o
12b20 6e 65 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 6f  nes-complement o
12b30 66 20 74 68 65 20 50 31 20 76 61 6c 75 65 20 69  f the P1 value i
12b40 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
12b50 20 20 49 66 20 50 31 20 68 6f 6c 64 73 0a 2a 2a    If P1 holds.**
12b60 20 61 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f   a NULL then sto
12b70 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20 50 32 2e  re a NULL in P2.
12b80 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 4e  .*/.case OP_BitN
12b90 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ot: {           
12ba0 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
12bb0 42 49 54 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74  BITNOT, in1, out
12bc0 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  2 */.  pIn1 = &a
12bd0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
12be0 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
12bf0 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33  ->p2];.  sqlite3
12c00 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
12c10 4f 75 74 29 3b 0a 20 20 69 66 28 20 28 70 49 6e  Out);.  if( (pIn
12c20 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
12c30 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70  ull)==0 ){.    p
12c40 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
12c50 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  _Int;.    pOut->
12c60 75 2e 69 20 3d 20 7e 73 71 6c 69 74 65 33 56 64  u.i = ~sqlite3Vd
12c70 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29  beIntValue(pIn1)
12c80 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
12c90 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 6e 63  ../* Opcode: Onc
12ca0 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  e P1 P2 * * *.**
12cb0 0a 2a 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68  .** Fall through
12cc0 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
12cd0 74 72 75 63 74 69 6f 6e 20 74 68 65 20 66 69 72  truction the fir
12ce0 73 74 20 74 69 6d 65 20 74 68 69 73 20 6f 70 63  st time this opc
12cf0 6f 64 65 20 69 73 0a 2a 2a 20 65 6e 63 6f 75 6e  ode is.** encoun
12d00 74 65 72 65 64 20 6f 6e 20 65 61 63 68 20 69 6e  tered on each in
12d10 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  vocation of the 
12d20 62 79 74 65 2d 63 6f 64 65 20 70 72 6f 67 72 61  byte-code progra
12d30 6d 2e 20 20 4a 75 6d 70 20 74 6f 20 50 32 0a 2a  m.  Jump to P2.*
12d40 2a 20 6f 6e 20 74 68 65 20 73 65 63 6f 6e 64 20  * on the second 
12d50 61 6e 64 20 61 6c 6c 20 73 75 62 73 65 71 75 65  and all subseque
12d60 6e 74 20 65 6e 63 6f 75 6e 74 65 72 73 20 64 75  nt encounters du
12d70 72 69 6e 67 20 74 68 65 20 73 61 6d 65 20 69 6e  ring the same in
12d80 76 6f 63 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  vocation..**.** 
12d90 54 6f 70 2d 6c 65 76 65 6c 20 70 72 6f 67 72 61  Top-level progra
12da0 6d 73 20 64 65 74 65 72 6d 69 6e 65 20 66 69 72  ms determine fir
12db0 73 74 20 69 6e 76 6f 63 61 74 69 6f 6e 20 62 79  st invocation by
12dc0 20 63 6f 6d 70 61 72 69 6e 67 20 74 68 65 20 50   comparing the P
12dd0 31 0a 2a 2a 20 6f 70 65 72 61 6e 64 20 61 67 61  1.** operand aga
12de0 69 6e 73 74 20 74 68 65 20 50 31 20 6f 70 65 72  inst the P1 oper
12df0 61 6e 64 20 6f 6e 20 74 68 65 20 4f 50 5f 49 6e  and on the OP_In
12e00 69 74 20 6f 70 63 6f 64 65 20 61 74 20 74 68 65  it opcode at the
12e10 20 62 65 67 69 6e 6e 69 6e 67 0a 2a 2a 20 6f 66   beginning.** of
12e20 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 20 20 49   the program.  I
12e30 66 20 74 68 65 20 50 31 20 76 61 6c 75 65 73 20  f the P1 values 
12e40 64 69 66 66 65 72 2c 20 74 68 65 6e 20 66 61 6c  differ, then fal
12e50 6c 20 74 68 72 6f 75 67 68 20 61 6e 64 20 6d 61  l through and ma
12e60 6b 65 0a 2a 2a 20 74 68 65 20 50 31 20 6f 66 20  ke.** the P1 of 
12e70 74 68 69 73 20 6f 70 63 6f 64 65 20 65 71 75 61  this opcode equa
12e80 6c 20 74 6f 20 74 68 65 20 50 31 20 6f 66 20 4f  l to the P1 of O
12e90 50 5f 49 6e 69 74 2e 20 20 49 66 20 50 31 20 76  P_Init.  If P1 v
12ea0 61 6c 75 65 73 20 61 72 65 0a 2a 2a 20 74 68 65  alues are.** the
12eb0 20 73 61 6d 65 20 74 68 65 6e 20 74 61 6b 65 20   same then take 
12ec0 74 68 65 20 6a 75 6d 70 2e 0a 2a 2a 0a 2a 2a 20  the jump..**.** 
12ed0 46 6f 72 20 73 75 62 70 72 6f 67 72 61 6d 73 2c  For subprograms,
12ee0 20 74 68 65 72 65 20 69 73 20 61 20 62 69 74 6d   there is a bitm
12ef0 61 73 6b 20 69 6e 20 74 68 65 20 56 64 62 65 46  ask in the VdbeF
12f00 72 61 6d 65 20 74 68 61 74 20 64 65 74 65 72 6d  rame that determ
12f10 69 6e 65 73 0a 2a 2a 20 77 68 65 74 68 65 72 20  ines.** whether 
12f20 6f 72 20 6e 6f 74 20 74 68 65 20 6a 75 6d 70 20  or not the jump 
12f30 73 68 6f 75 6c 64 20 62 65 20 74 61 6b 65 6e 2e  should be taken.
12f40 20 20 54 68 65 20 62 69 74 6d 61 73 6b 20 69 73    The bitmask is
12f50 20 6e 65 63 65 73 73 61 72 79 0a 2a 2a 20 62 65   necessary.** be
12f60 63 61 75 73 65 20 74 68 65 20 73 65 6c 66 2d 61  cause the self-a
12f70 6c 74 65 72 69 6e 67 20 63 6f 64 65 20 74 72 69  ltering code tri
12f80 63 6b 20 64 6f 65 73 20 6e 6f 74 20 77 6f 72 6b  ck does not work
12f90 20 66 6f 72 20 72 65 63 75 72 73 69 76 65 0a 2a   for recursive.*
12fa0 2a 20 74 72 69 67 67 65 72 73 2e 0a 2a 2f 0a 63  * triggers..*/.c
12fb0 61 73 65 20 4f 50 5f 4f 6e 63 65 3a 20 7b 20 20  ase OP_Once: {  
12fc0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
12fd0 6d 70 20 2a 2f 0a 20 20 75 33 32 20 69 41 64 64  mp */.  u32 iAdd
12fe0 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
12ff0 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20    /* Address of 
13000 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
13010 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 2d   */.  assert( p-
13020 3e 61 4f 70 5b 30 5d 2e 6f 70 63 6f 64 65 3d 3d  >aOp[0].opcode==
13030 4f 50 5f 49 6e 69 74 20 29 3b 0a 20 20 69 66 28  OP_Init );.  if(
13040 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20   p->pFrame ){.  
13050 20 20 69 41 64 64 72 20 3d 20 28 69 6e 74 29 28    iAddr = (int)(
13060 70 4f 70 20 2d 20 70 2d 3e 61 4f 70 29 3b 0a 20  pOp - p->aOp);. 
13070 20 20 20 69 66 28 20 28 70 2d 3e 70 46 72 61 6d     if( (p->pFram
13080 65 2d 3e 61 4f 6e 63 65 5b 69 41 64 64 72 2f 38  e->aOnce[iAddr/8
13090 5d 20 26 20 28 31 3c 3c 28 69 41 64 64 72 20 26  ] & (1<<(iAddr &
130a0 20 37 29 29 29 21 3d 30 20 29 7b 0a 20 20 20 20   7)))!=0 ){.    
130b0 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
130c0 6e 28 31 2c 20 32 29 3b 0a 20 20 20 20 20 20 67  n(1, 2);.      g
130d0 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
130e0 20 20 20 20 7d 0a 20 20 20 20 70 2d 3e 70 46 72      }.    p->pFr
130f0 61 6d 65 2d 3e 61 4f 6e 63 65 5b 69 41 64 64 72  ame->aOnce[iAddr
13100 2f 38 5d 20 7c 3d 20 31 3c 3c 28 69 41 64 64 72  /8] |= 1<<(iAddr
13110 20 26 20 37 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a   & 7);.  }else{.
13120 20 20 20 20 69 66 28 20 70 2d 3e 61 4f 70 5b 30      if( p->aOp[0
13130 5d 2e 70 31 3d 3d 70 4f 70 2d 3e 70 31 20 29 7b  ].p1==pOp->p1 ){
13140 0a 20 20 20 20 20 20 56 64 62 65 42 72 61 6e 63  .      VdbeBranc
13150 68 54 61 6b 65 6e 28 31 2c 20 32 29 3b 0a 20 20  hTaken(1, 2);.  
13160 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f      goto jump_to
13170 5f 70 32 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  _p2;.    }.  }. 
13180 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
13190 28 30 2c 20 32 29 3b 0a 20 20 70 4f 70 2d 3e 70  (0, 2);.  pOp->p
131a0 31 20 3d 20 70 2d 3e 61 4f 70 5b 30 5d 2e 70 31  1 = p->aOp[0].p1
131b0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
131c0 20 4f 70 63 6f 64 65 3a 20 49 66 20 50 31 20 50   Opcode: If P1 P
131d0 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a  2 P3 * *.**.** J
131e0 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
131f0 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
13200 65 72 20 50 31 20 69 73 20 74 72 75 65 2e 20 20  er P1 is true.  
13210 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20  The value.** is 
13220 63 6f 6e 73 69 64 65 72 65 64 20 74 72 75 65 20  considered true 
13230 69 66 20 69 74 20 69 73 20 6e 75 6d 65 72 69 63  if it is numeric
13240 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20   and non-zero.  
13250 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20  If the value.** 
13260 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74 68  in P1 is NULL th
13270 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70  en take the jump
13280 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20   if and only if 
13290 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a  P3 is non-zero..
132a0 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 3a 20 20  */.case OP_If:  
132b0 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
132c0 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  /* jump, in1 */.
132d0 20 20 69 6e 74 20 63 3b 0a 20 20 63 20 3d 20 73    int c;.  c = s
132e0 71 6c 69 74 65 33 56 64 62 65 42 6f 6f 6c 65 61  qlite3VdbeBoolea
132f0 6e 56 61 6c 75 65 28 26 61 4d 65 6d 5b 70 4f 70  nValue(&aMem[pOp
13300 2d 3e 70 31 5d 2c 20 70 4f 70 2d 3e 70 33 29 3b  ->p1], pOp->p3);
13310 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
13320 65 6e 28 63 21 3d 30 2c 20 32 29 3b 0a 20 20 69  en(c!=0, 2);.  i
13330 66 28 20 63 20 29 20 67 6f 74 6f 20 6a 75 6d 70  f( c ) goto jump
13340 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b  _to_p2;.  break;
13350 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
13360 66 4e 6f 74 20 50 31 20 50 32 20 50 33 20 2a 20  fNot P1 P2 P3 * 
13370 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20  *.**.** Jump to 
13380 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20  P2 if the value 
13390 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
133a0 73 20 46 61 6c 73 65 2e 20 20 54 68 65 20 76 61  s False.  The va
133b0 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64  lue.** is consid
133c0 65 72 65 64 20 66 61 6c 73 65 20 69 66 20 69 74  ered false if it
133d0 20 68 61 73 20 61 20 6e 75 6d 65 72 69 63 20 76   has a numeric v
133e0 61 6c 75 65 20 6f 66 20 7a 65 72 6f 2e 20 20 49  alue of zero.  I
133f0 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69  f the value.** i
13400 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74 68 65  n P1 is NULL the
13410 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20  n take the jump 
13420 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 50  if and only if P
13430 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a  3 is non-zero..*
13440 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74 3a  /.case OP_IfNot:
13450 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
13460 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
13470 69 6e 74 20 63 3b 0a 20 20 63 20 3d 20 21 73 71  int c;.  c = !sq
13480 6c 69 74 65 33 56 64 62 65 42 6f 6f 6c 65 61 6e  lite3VdbeBoolean
13490 56 61 6c 75 65 28 26 61 4d 65 6d 5b 70 4f 70 2d  Value(&aMem[pOp-
134a0 3e 70 31 5d 2c 20 21 70 4f 70 2d 3e 70 33 29 3b  >p1], !pOp->p3);
134b0 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
134c0 65 6e 28 63 21 3d 30 2c 20 32 29 3b 0a 20 20 69  en(c!=0, 2);.  i
134d0 66 28 20 63 20 29 20 67 6f 74 6f 20 6a 75 6d 70  f( c ) goto jump
134e0 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b  _to_p2;.  break;
134f0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
13500 73 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20  sNull P1 P2 * * 
13510 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
13520 66 20 72 5b 50 31 5d 3d 3d 4e 55 4c 4c 20 67 6f  f r[P1]==NULL go
13530 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  to P2.**.** Jump
13540 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61   to P2 if the va
13550 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
13560 50 31 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63  P1 is NULL..*/.c
13570 61 73 65 20 4f 50 5f 49 73 4e 75 6c 6c 3a 20 7b  ase OP_IsNull: {
13580 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
13590 61 6d 65 20 61 73 20 54 4b 5f 49 53 4e 55 4c 4c  ame as TK_ISNULL
135a0 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  , jump, in1 */. 
135b0 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
135c0 70 2d 3e 70 31 5d 3b 0a 20 20 56 64 62 65 42 72  p->p1];.  VdbeBr
135d0 61 6e 63 68 54 61 6b 65 6e 28 20 28 70 49 6e 31  anchTaken( (pIn1
135e0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
135f0 6c 6c 29 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66  ll)!=0, 2);.  if
13600 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
13610 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b   MEM_Null)!=0 ){
13620 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  .    goto jump_t
13630 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61  o_p2;.  }.  brea
13640 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
13650 20 4e 6f 74 4e 75 6c 6c 20 50 31 20 50 32 20 2a   NotNull P1 P2 *
13660 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
13670 3a 20 69 66 20 72 5b 50 31 5d 21 3d 4e 55 4c 4c  : if r[P1]!=NULL
13680 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a   goto P2.**.** J
13690 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
136a0 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
136b0 65 72 20 50 31 20 69 73 20 6e 6f 74 20 4e 55 4c  er P1 is not NUL
136c0 4c 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  L.  .*/.case OP_
136d0 4e 6f 74 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20  NotNull: {      
136e0 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
136f0 20 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c 20 6a 75 6d   TK_NOTNULL, jum
13700 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  p, in1 */.  pIn1
13710 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
13720 5d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  ];.  VdbeBranchT
13730 61 6b 65 6e 28 20 28 70 49 6e 31 2d 3e 66 6c 61  aken( (pIn1->fla
13740 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d  gs & MEM_Null)==
13750 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 28 70 49  0, 2);.  if( (pI
13760 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
13770 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Null)==0 ){.    
13780 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
13790 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
137a0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 75  ./* Opcode: IfNu
137b0 6c 6c 52 6f 77 20 50 31 20 50 32 20 50 33 20 2a  llRow P1 P2 P3 *
137c0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
137d0 69 66 20 50 31 2e 6e 75 6c 6c 52 6f 77 20 74 68  if P1.nullRow th
137e0 65 6e 20 72 5b 50 33 5d 3d 4e 55 4c 4c 2c 20 67  en r[P3]=NULL, g
137f0 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 43 68 65  oto P2.**.** Che
13800 63 6b 20 74 68 65 20 63 75 72 73 6f 72 20 50 31  ck the cursor P1
13810 20 74 6f 20 73 65 65 20 69 66 20 69 74 20 69 73   to see if it is
13820 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
13830 69 6e 67 20 61 74 20 61 20 4e 55 4c 4c 20 72 6f  ing at a NULL ro
13840 77 2e 0a 2a 2a 20 49 66 20 69 74 20 69 73 2c 20  w..** If it is, 
13850 74 68 65 6e 20 73 65 74 20 72 65 67 69 73 74 65  then set registe
13860 72 20 50 33 20 74 6f 20 4e 55 4c 4c 20 61 6e 64  r P3 to NULL and
13870 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
13880 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50  y to P2..** If P
13890 31 20 69 73 20 6e 6f 74 20 6f 6e 20 61 20 4e 55  1 is not on a NU
138a0 4c 4c 20 72 6f 77 2c 20 74 68 65 6e 20 66 61 6c  LL row, then fal
138b0 6c 20 74 68 72 6f 75 67 68 20 77 69 74 68 6f 75  l through withou
138c0 74 20 6d 61 6b 69 6e 67 20 61 6e 79 0a 2a 2a 20  t making any.** 
138d0 63 68 61 6e 67 65 73 2e 0a 2a 2f 0a 63 61 73 65  changes..*/.case
138e0 20 4f 50 5f 49 66 4e 75 6c 6c 52 6f 77 3a 20 7b   OP_IfNullRow: {
138f0 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
13900 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
13910 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
13920 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
13930 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61  ;.  assert( p->a
13940 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30  pCsr[pOp->p1]!=0
13950 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61 70 43   );.  if( p->apC
13960 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 6e 75 6c  sr[pOp->p1]->nul
13970 6c 52 6f 77 20 29 7b 0a 20 20 20 20 73 71 6c 69  lRow ){.    sqli
13980 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
13990 6c 28 61 4d 65 6d 20 2b 20 70 4f 70 2d 3e 70 33  l(aMem + pOp->p3
139a0 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  );.    goto jump
139b0 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72  _to_p2;.  }.  br
139c0 65 61 6b 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53  eak;.}..#ifdef S
139d0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4f 46 46  QLITE_ENABLE_OFF
139e0 53 45 54 5f 53 51 4c 5f 46 55 4e 43 0a 2f 2a 20  SET_SQL_FUNC./* 
139f0 4f 70 63 6f 64 65 3a 20 4f 66 66 73 65 74 20 50  Opcode: Offset P
13a00 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
13a10 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 20 3d  ynopsis: r[P3] =
13a20 20 73 71 6c 69 74 65 5f 6f 66 66 73 65 74 28 50   sqlite_offset(P
13a30 31 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 69  1).**.** Store i
13a40 6e 20 72 65 67 69 73 74 65 72 20 72 5b 50 33 5d  n register r[P3]
13a50 20 74 68 65 20 62 79 74 65 20 6f 66 66 73 65 74   the byte offset
13a60 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61   into the databa
13a70 73 65 20 66 69 6c 65 20 74 68 61 74 20 69 73 20  se file that is 
13a80 74 68 65 0a 2a 2a 20 73 74 61 72 74 20 6f 66 20  the.** start of 
13a90 74 68 65 20 70 61 79 6c 6f 61 64 20 66 6f 72 20  the payload for 
13aa0 74 68 65 20 72 65 63 6f 72 64 20 61 74 20 77 68  the record at wh
13ab0 69 63 68 20 74 68 61 74 20 63 75 72 73 6f 72 20  ich that cursor 
13ac0 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 0a  P1 is currently.
13ad0 2a 2a 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a  ** pointing..**.
13ae0 2a 2a 20 50 32 20 69 73 20 74 68 65 20 63 6f 6c  ** P2 is the col
13af0 75 6d 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74  umn number for t
13b00 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  he argument to t
13b10 68 65 20 73 71 6c 69 74 65 5f 6f 66 66 73 65 74  he sqlite_offset
13b20 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 20  () function..** 
13b30 54 68 69 73 20 6f 70 63 6f 64 65 20 64 6f 65 73  This opcode does
13b40 20 6e 6f 74 20 75 73 65 20 50 32 20 69 74 73 65   not use P2 itse
13b50 6c 66 2c 20 62 75 74 20 74 68 65 20 50 32 20 76  lf, but the P2 v
13b60 61 6c 75 65 20 69 73 20 75 73 65 64 20 62 79 20  alue is used by 
13b70 74 68 65 0a 2a 2a 20 63 6f 64 65 20 67 65 6e 65  the.** code gene
13b80 72 61 74 6f 72 2e 20 20 54 68 65 20 50 31 2c 20  rator.  The P1, 
13b90 50 32 2c 20 61 6e 64 20 50 33 20 6f 70 65 72 61  P2, and P3 opera
13ba0 6e 64 73 20 74 6f 20 74 68 69 73 20 6f 70 63 6f  nds to this opco
13bb0 64 65 20 61 72 65 20 74 68 65 0a 2a 2a 20 73 61  de are the.** sa
13bc0 6d 65 20 61 73 20 66 6f 72 20 4f 50 5f 43 6f 6c  me as for OP_Col
13bd0 75 6d 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  umn..**.** This 
13be0 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 61  opcode is only a
13bf0 76 61 69 6c 61 62 6c 65 20 69 66 20 53 51 4c 69  vailable if SQLi
13c00 74 65 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 77  te is compiled w
13c10 69 74 68 20 74 68 65 0a 2a 2a 20 2d 44 53 51 4c  ith the.** -DSQL
13c20 49 54 45 5f 45 4e 41 42 4c 45 5f 4f 46 46 53 45  ITE_ENABLE_OFFSE
13c30 54 5f 53 51 4c 5f 46 55 4e 43 20 6f 70 74 69 6f  T_SQL_FUNC optio
13c40 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 66  n..*/.case OP_Of
13c50 66 73 65 74 3a 20 7b 20 20 20 20 20 20 20 20 20  fset: {         
13c60 20 2f 2a 20 6f 75 74 33 20 2a 2f 0a 20 20 56 64   /* out3 */.  Vd
13c70 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20  beCursor *pC;   
13c80 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75 72   /* The VDBE cur
13c90 73 6f 72 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  sor */.  assert(
13ca0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
13cb0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
13cc0 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
13cd0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
13ce0 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d   pOut = &p->aMem
13cf0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28  [pOp->p3];.  if(
13d00 20 4e 45 56 45 52 28 70 43 3d 3d 30 29 20 7c 7c   NEVER(pC==0) ||
13d10 20 70 43 2d 3e 65 43 75 72 54 79 70 65 21 3d 43   pC->eCurType!=C
13d20 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 7b 0a  URTYPE_BTREE ){.
13d30 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
13d40 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b  emSetNull(pOut);
13d50 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71  .  }else{.    sq
13d60 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49  lite3VdbeMemSetI
13d70 6e 74 36 34 28 70 4f 75 74 2c 20 73 71 6c 69 74  nt64(pOut, sqlit
13d80 65 33 42 74 72 65 65 4f 66 66 73 65 74 28 70 43  e3BtreeOffset(pC
13d90 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 29 3b 0a  ->uc.pCursor));.
13da0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
13db0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
13dc0 45 4e 41 42 4c 45 5f 4f 46 46 53 45 54 5f 53 51  ENABLE_OFFSET_SQ
13dd0 4c 5f 46 55 4e 43 20 2a 2f 0a 0a 2f 2a 20 4f 70  L_FUNC */../* Op
13de0 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e 20 50 31 20  code: Column P1 
13df0 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
13e00 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 50  ynopsis: r[P3]=P
13e10 58 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65  X.**.** Interpre
13e20 74 20 74 68 65 20 64 61 74 61 20 74 68 61 74 20  t the data that 
13e30 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74 73  cursor P1 points
13e40 20 74 6f 20 61 73 20 61 20 73 74 72 75 63 74 75   to as a structu
13e50 72 65 20 62 75 69 6c 74 20 75 73 69 6e 67 0a 2a  re built using.*
13e60 2a 20 74 68 65 20 4d 61 6b 65 52 65 63 6f 72 64  * the MakeRecord
13e70 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 28   instruction.  (
13e80 53 65 65 20 74 68 65 20 4d 61 6b 65 52 65 63 6f  See the MakeReco
13e90 72 64 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64  rd opcode for ad
13ea0 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 69 6e 66 6f  ditional.** info
13eb0 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68  rmation about th
13ec0 65 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20  e format of the 
13ed0 64 61 74 61 2e 29 20 20 45 78 74 72 61 63 74 20  data.)  Extract 
13ee0 74 68 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e  the P2-th column
13ef0 0a 2a 2a 20 66 72 6f 6d 20 74 68 69 73 20 72 65  .** from this re
13f00 63 6f 72 64 2e 20 20 49 66 20 74 68 65 72 65 20  cord.  If there 
13f10 61 72 65 20 6c 65 73 73 20 74 68 61 74 20 28 50  are less that (P
13f20 32 2b 31 29 20 0a 2a 2a 20 76 61 6c 75 65 73 20  2+1) .** values 
13f30 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2c 20 65  in the record, e
13f40 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 0a 2a  xtract a NULL..*
13f50 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 65  *.** The value e
13f60 78 74 72 61 63 74 65 64 20 69 73 20 73 74 6f 72  xtracted is stor
13f70 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
13f80 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  3..**.** If the 
13f90 72 65 63 6f 72 64 20 63 6f 6e 74 61 69 6e 73 20  record contains 
13fa0 66 65 77 65 72 20 74 68 61 6e 20 50 32 20 66 69  fewer than P2 fi
13fb0 65 6c 64 73 2c 20 74 68 65 6e 20 65 78 74 72 61  elds, then extra
13fc0 63 74 20 61 20 4e 55 4c 4c 2e 20 20 4f 72 2c 0a  ct a NULL.  Or,.
13fd0 2a 2a 20 69 66 20 74 68 65 20 50 34 20 61 72 67  ** if the P4 arg
13fe0 75 6d 65 6e 74 20 69 73 20 61 20 50 34 5f 4d 45  ument is a P4_ME
13ff0 4d 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20  M use the value 
14000 6f 66 20 74 68 65 20 50 34 20 61 72 67 75 6d 65  of the P4 argume
14010 6e 74 20 61 73 0a 2a 2a 20 74 68 65 20 72 65 73  nt as.** the res
14020 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ult..**.** If th
14030 65 20 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43 41  e OPFLAG_CLEARCA
14040 43 48 45 20 62 69 74 20 69 73 20 73 65 74 20 6f  CHE bit is set o
14050 6e 20 50 35 20 61 6e 64 20 50 31 20 69 73 20 61  n P5 and P1 is a
14060 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 75   pseudo-table cu
14070 72 73 6f 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68  rsor,.** then th
14080 65 20 63 61 63 68 65 20 6f 66 20 74 68 65 20 63  e cache of the c
14090 75 72 73 6f 72 20 69 73 20 72 65 73 65 74 20 70  ursor is reset p
140a0 72 69 6f 72 20 74 6f 20 65 78 74 72 61 63 74 69  rior to extracti
140b0 6e 67 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a 2a  ng the column..*
140c0 2a 20 54 68 65 20 66 69 72 73 74 20 4f 50 5f 43  * The first OP_C
140d0 6f 6c 75 6d 6e 20 61 67 61 69 6e 73 74 20 61 20  olumn against a 
140e0 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 61 66 74  pseudo-table aft
140f0 65 72 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  er the value of 
14100 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 72  the content.** r
14110 65 67 69 73 74 65 72 20 68 61 73 20 63 68 61 6e  egister has chan
14120 67 65 64 20 73 68 6f 75 6c 64 20 68 61 76 65 20  ged should have 
14130 74 68 69 73 20 62 69 74 20 73 65 74 2e 0a 2a 2a  this bit set..**
14140 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41  .** If the OPFLA
14150 47 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20  G_LENGTHARG and 
14160 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47  OPFLAG_TYPEOFARG
14170 20 62 69 74 73 20 61 72 65 20 73 65 74 20 6f 6e   bits are set on
14180 20 50 35 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20   P5 then.** the 
14190 72 65 73 75 6c 74 20 69 73 20 67 75 61 72 61 6e  result is guaran
141a0 74 65 65 64 20 74 6f 20 6f 6e 6c 79 20 62 65 20  teed to only be 
141b0 75 73 65 64 20 61 73 20 74 68 65 20 61 72 67 75  used as the argu
141c0 6d 65 6e 74 20 6f 66 20 61 20 6c 65 6e 67 74 68  ment of a length
141d0 28 29 0a 2a 2a 20 6f 72 20 74 79 70 65 6f 66 28  ().** or typeof(
141e0 29 20 66 75 6e 63 74 69 6f 6e 2c 20 72 65 73 70  ) function, resp
141f0 65 63 74 69 76 65 6c 79 2e 20 20 54 68 65 20 6c  ectively.  The l
14200 6f 61 64 69 6e 67 20 6f 66 20 6c 61 72 67 65 20  oading of large 
14210 62 6c 6f 62 73 20 63 61 6e 20 62 65 0a 2a 2a 20  blobs can be.** 
14220 73 6b 69 70 70 65 64 20 66 6f 72 20 6c 65 6e 67  skipped for leng
14230 74 68 28 29 20 61 6e 64 20 61 6c 6c 20 63 6f 6e  th() and all con
14240 74 65 6e 74 20 6c 6f 61 64 69 6e 67 20 63 61 6e  tent loading can
14250 20 62 65 20 73 6b 69 70 70 65 64 20 66 6f 72 20   be skipped for 
14260 74 79 70 65 6f 66 28 29 2e 0a 2a 2f 0a 63 61 73  typeof()..*/.cas
14270 65 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20  e OP_Column: {. 
14280 20 69 6e 74 20 70 32 3b 20 20 20 20 20 20 20 20   int p2;        
14290 20 20 20 20 2f 2a 20 63 6f 6c 75 6d 6e 20 6e 75      /* column nu
142a0 6d 62 65 72 20 74 6f 20 72 65 74 72 69 65 76 65  mber to retrieve
142b0 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
142c0 20 2a 70 43 3b 20 20 20 20 2f 2a 20 54 68 65 20   *pC;    /* The 
142d0 56 44 42 45 20 63 75 72 73 6f 72 20 2a 2f 0a 20  VDBE cursor */. 
142e0 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
142f0 3b 20 20 20 2f 2a 20 54 68 65 20 42 54 72 65 65  ;   /* The BTree
14300 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 75 33 32   cursor */.  u32
14310 20 2a 61 4f 66 66 73 65 74 3b 20 20 20 20 20 20   *aOffset;      
14320 2f 2a 20 61 4f 66 66 73 65 74 5b 69 5d 20 69 73  /* aOffset[i] is
14330 20 6f 66 66 73 65 74 20 74 6f 20 73 74 61 72 74   offset to start
14340 20 6f 66 20 64 61 74 61 20 66 6f 72 20 69 2d 74   of data for i-t
14350 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e  h column */.  in
14360 74 20 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20  t len;          
14370 20 2f 2a 20 54 68 65 20 6c 65 6e 67 74 68 20 6f   /* The length o
14380 66 20 74 68 65 20 73 65 72 69 61 6c 69 7a 65 64  f the serialized
14390 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 63 6f   data for the co
143a0 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 3b  lumn */.  int i;
143b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
143c0 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  Loop counter */.
143d0 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 20 20 20    Mem *pDest;   
143e0 20 20 20 20 20 2f 2a 20 57 68 65 72 65 20 74 6f       /* Where to
143f0 20 77 72 69 74 65 20 74 68 65 20 65 78 74 72 61   write the extra
14400 63 74 65 64 20 76 61 6c 75 65 20 2a 2f 0a 20 20  cted value */.  
14410 4d 65 6d 20 73 4d 65 6d 3b 20 20 20 20 20 20 20  Mem sMem;       
14420 20 20 20 2f 2a 20 46 6f 72 20 73 74 6f 72 69 6e     /* For storin
14430 67 20 74 68 65 20 72 65 63 6f 72 64 20 62 65 69  g the record bei
14440 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20  ng decoded */.  
14450 63 6f 6e 73 74 20 75 38 20 2a 7a 44 61 74 61 3b  const u8 *zData;
14460 20 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 74 68     /* Part of th
14470 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64  e record being d
14480 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73  ecoded */.  cons
14490 74 20 75 38 20 2a 7a 48 64 72 3b 20 20 20 20 2f  t u8 *zHdr;    /
144a0 2a 20 4e 65 78 74 20 75 6e 70 61 72 73 65 64 20  * Next unparsed 
144b0 62 79 74 65 20 6f 66 20 74 68 65 20 68 65 61 64  byte of the head
144c0 65 72 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38  er */.  const u8
144d0 20 2a 7a 45 6e 64 48 64 72 3b 20 2f 2a 20 50 6f   *zEndHdr; /* Po
144e0 69 6e 74 65 72 20 74 6f 20 66 69 72 73 74 20 62  inter to first b
144f0 79 74 65 20 61 66 74 65 72 20 74 68 65 20 68 65  yte after the he
14500 61 64 65 72 20 2a 2f 0a 20 20 75 36 34 20 6f 66  ader */.  u64 of
14510 66 73 65 74 36 34 3b 20 20 20 20 20 20 2f 2a 20  fset64;      /* 
14520 36 34 2d 62 69 74 20 6f 66 66 73 65 74 20 2a 2f  64-bit offset */
14530 0a 20 20 75 33 32 20 74 3b 20 20 20 20 20 20 20  .  u32 t;       
14540 20 20 20 20 20 20 2f 2a 20 41 20 74 79 70 65 20        /* A type 
14550 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20 72 65  code from the re
14560 63 6f 72 64 20 68 65 61 64 65 72 20 2a 2f 0a 20  cord header */. 
14570 20 4d 65 6d 20 2a 70 52 65 67 3b 20 20 20 20 20   Mem *pReg;     
14580 20 20 20 20 2f 2a 20 50 73 65 75 64 6f 54 61 62      /* PseudoTab
14590 6c 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65  le input registe
145a0 72 20 2a 2f 0a 0a 20 20 70 43 20 3d 20 70 2d 3e  r */..  pC = p->
145b0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
145c0 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a    p2 = pOp->p2;.
145d0 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 63 75 72  .  /* If the cur
145e0 73 6f 72 20 63 61 63 68 65 20 69 73 20 73 74 61  sor cache is sta
145f0 6c 65 20 28 6d 65 61 6e 69 6e 67 20 69 74 20 69  le (meaning it i
14600 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20  s not currently 
14610 70 6f 69 6e 74 20 61 74 0a 20 20 2a 2a 20 74 68  point at.  ** th
14620 65 20 63 6f 72 72 65 63 74 20 72 6f 77 29 20 74  e correct row) t
14630 68 65 6e 20 62 72 69 6e 67 20 69 74 20 75 70 2d  hen bring it up-
14640 74 6f 2d 64 61 74 65 20 62 79 20 64 6f 69 6e 67  to-date by doing
14650 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 20 0a   the necessary .
14660 20 20 2a 2a 20 42 2d 54 72 65 65 20 73 65 65 6b    ** B-Tree seek
14670 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69  . */.  rc = sqli
14680 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76  te3VdbeCursorMov
14690 65 74 6f 28 26 70 43 2c 20 26 70 32 29 3b 0a 20  eto(&pC, &p2);. 
146a0 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
146b0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
146c0 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  r;..  assert( pO
146d0 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
146e0 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  p3<=(p->nMem+1 -
146f0 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a   p->nCursor) );.
14700 20 20 70 44 65 73 74 20 3d 20 26 61 4d 65 6d 5b    pDest = &aMem[
14710 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41  pOp->p3];.  memA
14720 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
14730 70 44 65 73 74 29 3b 0a 20 20 61 73 73 65 72 74  pDest);.  assert
14740 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
14750 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
14760 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
14770 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
14780 74 28 20 70 32 3c 70 43 2d 3e 6e 46 69 65 6c 64  t( p2<pC->nField
14790 20 29 3b 0a 20 20 61 4f 66 66 73 65 74 20 3d 20   );.  aOffset = 
147a0 70 43 2d 3e 61 4f 66 66 73 65 74 3b 0a 20 20 61  pC->aOffset;.  a
147b0 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
147c0 79 70 65 21 3d 43 55 52 54 59 50 45 5f 56 54 41  ype!=CURTYPE_VTA
147d0 42 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  B );.  assert( p
147e0 43 2d 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52  C->eCurType!=CUR
147f0 54 59 50 45 5f 50 53 45 55 44 4f 20 7c 7c 20 70  TYPE_PSEUDO || p
14800 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20 20  C->nullRow );.  
14810 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
14820 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f 53 4f  Type!=CURTYPE_SO
14830 52 54 45 52 20 29 3b 0a 0a 20 20 69 66 28 20 70  RTER );..  if( p
14840 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 21 3d  C->cacheStatus!=
14850 70 2d 3e 63 61 63 68 65 43 74 72 20 29 7b 20 20  p->cacheCtr ){  
14860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
14870 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d  OPTIMIZATION-IF-
14880 46 41 4c 53 45 2a 2f 0a 20 20 20 20 69 66 28 20  FALSE*/.    if( 
14890 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  pC->nullRow ){. 
148a0 20 20 20 20 20 69 66 28 20 70 43 2d 3e 65 43 75       if( pC->eCu
148b0 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 50  rType==CURTYPE_P
148c0 53 45 55 44 4f 20 29 7b 0a 20 20 20 20 20 20 20  SEUDO ){.       
148d0 20 2f 2a 20 46 6f 72 20 74 68 65 20 73 70 65 63   /* For the spec
148e0 69 61 6c 20 63 61 73 65 20 6f 66 20 61 73 20 70  ial case of as p
148f0 73 65 75 64 6f 2d 63 75 72 73 6f 72 2c 20 74 68  seudo-cursor, th
14900 65 20 73 65 65 6b 52 65 73 75 6c 74 20 66 69 65  e seekResult fie
14910 6c 64 0a 20 20 20 20 20 20 20 20 2a 2a 20 69 64  ld.        ** id
14920 65 6e 74 69 66 69 65 73 20 74 68 65 20 72 65 67  entifies the reg
14930 69 73 74 65 72 20 74 68 61 74 20 68 6f 6c 64 73  ister that holds
14940 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
14950 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
14960 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 3e 30 20  C->seekResult>0 
14970 29 3b 0a 20 20 20 20 20 20 20 20 70 52 65 67 20  );.        pReg 
14980 3d 20 26 61 4d 65 6d 5b 70 43 2d 3e 73 65 65 6b  = &aMem[pC->seek
14990 52 65 73 75 6c 74 5d 3b 0a 20 20 20 20 20 20 20  Result];.       
149a0 20 61 73 73 65 72 74 28 20 70 52 65 67 2d 3e 66   assert( pReg->f
149b0 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20  lags & MEM_Blob 
149c0 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
149d0 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52  t( memIsValid(pR
149e0 65 67 29 20 29 3b 0a 20 20 20 20 20 20 20 20 70  eg) );.        p
149f0 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d  C->payloadSize =
14a00 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 70 52 65   pC->szRow = pRe
14a10 67 2d 3e 6e 3b 0a 20 20 20 20 20 20 20 20 70 43  g->n;.        pC
14a20 2d 3e 61 52 6f 77 20 3d 20 28 75 38 2a 29 70 52  ->aRow = (u8*)pR
14a30 65 67 2d 3e 7a 3b 0a 20 20 20 20 20 20 7d 65 6c  eg->z;.      }el
14a40 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  se{.        sqli
14a50 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
14a60 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20  l(pDest);.      
14a70 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e    goto op_column
14a80 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20  _out;.      }.  
14a90 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70    }else{.      p
14aa0 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43  Crsr = pC->uc.pC
14ab0 75 72 73 6f 72 3b 0a 20 20 20 20 20 20 61 73 73  ursor;.      ass
14ac0 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
14ad0 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
14ae0 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
14af0 28 20 70 43 72 73 72 20 29 3b 0a 20 20 20 20 20  ( pCrsr );.     
14b00 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
14b10 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c  BtreeCursorIsVal
14b20 69 64 28 70 43 72 73 72 29 20 29 3b 0a 20 20 20  id(pCrsr) );.   
14b30 20 20 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69     pC->payloadSi
14b40 7a 65 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  ze = sqlite3Btre
14b50 65 50 61 79 6c 6f 61 64 53 69 7a 65 28 70 43 72  ePayloadSize(pCr
14b60 73 72 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e 61  sr);.      pC->a
14b70 52 6f 77 20 3d 20 73 71 6c 69 74 65 33 42 74 72  Row = sqlite3Btr
14b80 65 65 50 61 79 6c 6f 61 64 46 65 74 63 68 28 70  eePayloadFetch(p
14b90 43 72 73 72 2c 20 26 70 43 2d 3e 73 7a 52 6f 77  Crsr, &pC->szRow
14ba0 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
14bb0 20 70 43 2d 3e 73 7a 52 6f 77 3c 3d 70 43 2d 3e   pC->szRow<=pC->
14bc0 70 61 79 6c 6f 61 64 53 69 7a 65 20 29 3b 0a 20  payloadSize );. 
14bd0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d       assert( pC-
14be0 3e 73 7a 52 6f 77 3c 3d 36 35 35 33 36 20 29 3b  >szRow<=65536 );
14bf0 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 70 61 67    /* Maximum pag
14c00 65 20 73 69 7a 65 20 69 73 20 36 34 4b 69 42 20  e size is 64KiB 
14c10 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d  */.      if( pC-
14c20 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3e 20 28  >payloadSize > (
14c30 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  u32)db->aLimit[S
14c40 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
14c50 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 67  TH] ){.        g
14c60 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20  oto too_big;.   
14c70 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70     }.    }.    p
14c80 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
14c90 20 70 2d 3e 63 61 63 68 65 43 74 72 3b 0a 20 20   p->cacheCtr;.  
14ca0 20 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74    pC->iHdrOffset
14cb0 20 3d 20 67 65 74 56 61 72 69 6e 74 33 32 28 70   = getVarint32(p
14cc0 43 2d 3e 61 52 6f 77 2c 20 61 4f 66 66 73 65 74  C->aRow, aOffset
14cd0 5b 30 5d 29 3b 0a 20 20 20 20 70 43 2d 3e 6e 48  [0]);.    pC->nH
14ce0 64 72 50 61 72 73 65 64 20 3d 20 30 3b 0a 0a 0a  drParsed = 0;...
14cf0 20 20 20 20 69 66 28 20 70 43 2d 3e 73 7a 52 6f      if( pC->szRo
14d00 77 3c 61 4f 66 66 73 65 74 5b 30 5d 20 29 7b 20  w<aOffset[0] ){ 
14d10 20 20 20 20 20 2f 2a 4f 50 54 49 4d 49 5a 41 54       /*OPTIMIZAT
14d20 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20  ION-IF-FALSE*/. 
14d30 20 20 20 20 20 2f 2a 20 70 43 2d 3e 61 52 6f 77       /* pC->aRow
14d40 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 74   does not have t
14d50 6f 20 68 6f 6c 64 20 74 68 65 20 65 6e 74 69 72  o hold the entir
14d60 65 20 72 6f 77 2c 20 62 75 74 20 69 74 20 64 6f  e row, but it do
14d70 65 73 20 61 74 20 6c 65 61 73 74 0a 20 20 20 20  es at least.    
14d80 20 20 2a 2a 20 6e 65 65 64 20 74 6f 20 63 6f 76    ** need to cov
14d90 65 72 20 74 68 65 20 68 65 61 64 65 72 20 6f 66  er the header of
14da0 20 74 68 65 20 72 65 63 6f 72 64 2e 20 20 49 66   the record.  If
14db0 20 70 43 2d 3e 61 52 6f 77 20 64 6f 65 73 20 6e   pC->aRow does n
14dc0 6f 74 20 63 6f 6e 74 61 69 6e 0a 20 20 20 20 20  ot contain.     
14dd0 20 2a 2a 20 74 68 65 20 63 6f 6d 70 6c 65 74 65   ** the complete
14de0 20 68 65 61 64 65 72 2c 20 74 68 65 6e 20 73 65   header, then se
14df0 74 20 69 74 20 74 6f 20 7a 65 72 6f 2c 20 66 6f  t it to zero, fo
14e00 72 63 69 6e 67 20 74 68 65 20 68 65 61 64 65 72  rcing the header
14e10 20 74 6f 20 62 65 0a 20 20 20 20 20 20 2a 2a 20   to be.      ** 
14e20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
14e30 63 61 74 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20  cated. */.      
14e40 70 43 2d 3e 61 52 6f 77 20 3d 20 30 3b 0a 20 20  pC->aRow = 0;.  
14e50 20 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20      pC->szRow = 
14e60 30 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b  0;..      /* Mak
14e70 65 20 73 75 72 65 20 61 20 63 6f 72 72 75 70 74  e sure a corrupt
14e80 20 64 61 74 61 62 61 73 65 20 68 61 73 20 6e 6f   database has no
14e90 74 20 67 69 76 65 6e 20 75 73 20 61 6e 20 6f 76  t given us an ov
14ea0 65 72 73 69 7a 65 20 68 65 61 64 65 72 2e 0a 20  ersize header.. 
14eb0 20 20 20 20 20 2a 2a 20 44 6f 20 74 68 69 73 20       ** Do this 
14ec0 6e 6f 77 20 74 6f 20 61 76 6f 69 64 20 61 6e 20  now to avoid an 
14ed0 6f 76 65 72 73 69 7a 65 20 6d 65 6d 6f 72 79 20  oversize memory 
14ee0 61 6c 6c 6f 63 61 74 69 6f 6e 2e 0a 20 20 20 20  allocation..    
14ef0 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 54 79    **.      ** Ty
14f00 70 65 20 65 6e 74 72 69 65 73 20 63 61 6e 20 62  pe entries can b
14f10 65 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20  e between 1 and 
14f20 35 20 62 79 74 65 73 20 65 61 63 68 2e 20 20 42  5 bytes each.  B
14f30 75 74 20 34 20 61 6e 64 20 35 20 62 79 74 65 0a  ut 4 and 5 byte.
14f40 20 20 20 20 20 20 2a 2a 20 74 79 70 65 73 20 75        ** types u
14f50 73 65 20 73 6f 20 6d 75 63 68 20 64 61 74 61 20  se so much data 
14f60 73 70 61 63 65 20 74 68 61 74 20 74 68 65 72 65  space that there
14f70 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 34 30 39   can only be 409
14f80 36 20 61 6e 64 20 33 32 20 6f 66 0a 20 20 20 20  6 and 32 of.    
14f90 20 20 2a 2a 20 74 68 65 6d 2c 20 72 65 73 70 65    ** them, respe
14fa0 63 74 69 76 65 6c 79 2e 20 20 53 6f 20 74 68 65  ctively.  So the
14fb0 20 6d 61 78 69 6d 75 6d 20 68 65 61 64 65 72 20   maximum header 
14fc0 6c 65 6e 67 74 68 20 72 65 73 75 6c 74 73 20 66  length results f
14fd0 72 6f 6d 20 61 0a 20 20 20 20 20 20 2a 2a 20 33  rom a.      ** 3
14fe0 2d 62 79 74 65 20 74 79 70 65 20 66 6f 72 20 65  -byte type for e
14ff0 61 63 68 20 6f 66 20 74 68 65 20 6d 61 78 69 6d  ach of the maxim
15000 75 6d 20 6f 66 20 33 32 37 36 38 20 63 6f 6c 75  um of 32768 colu
15010 6d 6e 73 20 70 6c 75 73 20 74 68 72 65 65 0a 20  mns plus three. 
15020 20 20 20 20 20 2a 2a 20 65 78 74 72 61 20 62 79       ** extra by
15030 74 65 73 20 66 6f 72 20 74 68 65 20 68 65 61 64  tes for the head
15040 65 72 20 6c 65 6e 67 74 68 20 69 74 73 65 6c 66  er length itself
15050 2e 20 20 33 32 37 36 38 2a 33 20 2b 20 33 20 3d  .  32768*3 + 3 =
15060 20 39 38 33 30 37 2e 0a 20 20 20 20 20 20 2a 2f   98307..      */
15070 0a 20 20 20 20 20 20 69 66 28 20 61 4f 66 66 73  .      if( aOffs
15080 65 74 5b 30 5d 20 3e 20 39 38 33 30 37 20 7c 7c  et[0] > 98307 ||
15090 20 61 4f 66 66 73 65 74 5b 30 5d 20 3e 20 70 43   aOffset[0] > pC
150a0 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 29 7b  ->payloadSize ){
150b0 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70  .        goto op
150c0 5f 63 6f 6c 75 6d 6e 5f 63 6f 72 72 75 70 74 3b  _column_corrupt;
150d0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
150e0 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 54 68 69  se{.      /* Thi
150f0 73 20 69 73 20 61 6e 20 6f 70 74 69 6d 69 7a 61  s is an optimiza
15100 74 69 6f 6e 2e 20 20 42 79 20 73 6b 69 70 70 69  tion.  By skippi
15110 6e 67 20 6f 76 65 72 20 74 68 65 20 66 69 72 73  ng over the firs
15120 74 20 66 65 77 20 74 65 73 74 73 0a 20 20 20 20  t few tests.    
15130 20 20 2a 2a 20 28 65 78 3a 20 70 43 2d 3e 6e 48    ** (ex: pC->nH
15140 64 72 50 61 72 73 65 64 3c 3d 70 32 29 20 69 6e  drParsed<=p2) in
15150 20 74 68 65 20 6e 65 78 74 20 73 65 63 74 69 6f   the next sectio
15160 6e 2c 20 77 65 20 61 63 68 69 65 76 65 20 61 0a  n, we achieve a.
15170 20 20 20 20 20 20 2a 2a 20 6d 65 61 73 75 72 61        ** measura
15180 62 6c 65 20 70 65 72 66 6f 72 6d 61 6e 63 65 20  ble performance 
15190 67 61 69 6e 2e 0a 20 20 20 20 20 20 2a 2a 0a 20  gain..      **. 
151a0 20 20 20 20 20 2a 2a 20 54 68 69 73 20 62 72 61       ** This bra
151b0 6e 63 68 20 69 73 20 74 61 6b 65 6e 20 65 76 65  nch is taken eve
151c0 6e 20 69 66 20 61 4f 66 66 73 65 74 5b 30 5d 3d  n if aOffset[0]=
151d0 3d 30 2e 20 20 53 75 63 68 20 61 20 72 65 63 6f  =0.  Such a reco
151e0 72 64 20 69 73 20 6e 65 76 65 72 0a 20 20 20 20  rd is never.    
151f0 20 20 2a 2a 20 67 65 6e 65 72 61 74 65 64 20 62    ** generated b
15200 79 20 53 51 4c 69 74 65 2c 20 61 6e 64 20 63 6f  y SQLite, and co
15210 75 6c 64 20 62 65 20 63 6f 6e 73 69 64 65 72 65  uld be considere
15220 64 20 63 6f 72 72 75 70 74 69 6f 6e 2c 20 62 75  d corruption, bu
15230 74 20 77 65 0a 20 20 20 20 20 20 2a 2a 20 61 63  t we.      ** ac
15240 63 65 70 74 20 69 74 20 66 6f 72 20 68 69 73 74  cept it for hist
15250 6f 72 69 63 61 6c 20 72 65 61 73 6f 6e 73 2e 20  orical reasons. 
15260 20 57 68 65 6e 20 61 4f 66 66 73 65 74 5b 30 5d   When aOffset[0]
15270 3d 3d 30 2c 20 74 68 65 20 63 6f 64 65 20 74 68  ==0, the code th
15280 69 73 0a 20 20 20 20 20 20 2a 2a 20 62 72 61 6e  is.      ** bran
15290 63 68 20 6a 75 6d 70 73 20 74 6f 20 72 65 61 64  ch jumps to read
152a0 73 20 70 61 73 74 20 74 68 65 20 65 6e 64 20 6f  s past the end o
152b0 66 20 74 68 65 20 72 65 63 6f 72 64 2c 20 62 75  f the record, bu
152c0 74 20 6e 65 76 65 72 20 6d 6f 72 65 0a 20 20 20  t never more.   
152d0 20 20 20 2a 2a 20 74 68 61 6e 20 61 20 66 65 77     ** than a few
152e0 20 62 79 74 65 73 2e 20 20 45 76 65 6e 20 69 66   bytes.  Even if
152f0 20 74 68 65 20 72 65 63 6f 72 64 20 6f 63 63 75   the record occu
15300 72 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66  rs at the end of
15310 20 74 68 65 20 70 61 67 65 0a 20 20 20 20 20 20   the page.      
15320 2a 2a 20 63 6f 6e 74 65 6e 74 20 61 72 65 61 2c  ** content area,
15330 20 74 68 65 20 22 70 61 67 65 20 68 65 61 64 65   the "page heade
15340 72 22 20 63 6f 6d 65 73 20 61 66 74 65 72 20 74  r" comes after t
15350 68 65 20 70 61 67 65 20 63 6f 6e 74 65 6e 74 20  he page content 
15360 61 6e 64 20 73 6f 0a 20 20 20 20 20 20 2a 2a 20  and so.      ** 
15370 74 68 69 73 20 6f 76 65 72 72 65 61 64 20 69 73  this overread is
15380 20 68 61 72 6d 6c 65 73 73 2e 20 20 53 69 6d 69   harmless.  Simi
15390 6c 61 72 20 6f 76 65 72 72 65 61 64 73 20 63 61  lar overreads ca
153a0 6e 20 6f 63 63 75 72 20 66 6f 72 20 61 20 63 6f  n occur for a co
153b0 72 72 75 70 74 0a 20 20 20 20 20 20 2a 2a 20 64  rrupt.      ** d
153c0 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20  atabase file..  
153d0 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 7a 44 61      */.      zDa
153e0 74 61 20 3d 20 70 43 2d 3e 61 52 6f 77 3b 0a 20  ta = pC->aRow;. 
153f0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d       assert( pC-
15400 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d 70 32 20  >nHdrParsed<=p2 
15410 29 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f  );         /* Co
15420 6e 64 69 74 69 6f 6e 61 6c 20 73 6b 69 70 70 65  nditional skippe
15430 64 20 2a 2f 0a 20 20 20 20 20 20 74 65 73 74 63  d */.      testc
15440 61 73 65 28 20 61 4f 66 66 73 65 74 5b 30 5d 3d  ase( aOffset[0]=
15450 3d 30 20 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f  =0 );.      goto
15460 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 72 65 61 64 5f   op_column_read_
15470 68 65 61 64 65 72 3b 0a 20 20 20 20 7d 0a 20 20  header;.    }.  
15480 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72  }..  /* Make sur
15490 65 20 61 74 20 6c 65 61 73 74 20 74 68 65 20 66  e at least the f
154a0 69 72 73 74 20 70 32 2b 31 20 65 6e 74 72 69 65  irst p2+1 entrie
154b0 73 20 6f 66 20 74 68 65 20 68 65 61 64 65 72 20  s of the header 
154c0 68 61 76 65 20 62 65 65 6e 0a 20 20 2a 2a 20 70  have been.  ** p
154d0 61 72 73 65 64 20 61 6e 64 20 76 61 6c 69 64 20  arsed and valid 
154e0 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 69  information is i
154f0 6e 20 61 4f 66 66 73 65 74 5b 5d 20 61 6e 64 20  n aOffset[] and 
15500 70 43 2d 3e 61 54 79 70 65 5b 5d 2e 0a 20 20 2a  pC->aType[]..  *
15510 2f 0a 20 20 69 66 28 20 70 43 2d 3e 6e 48 64 72  /.  if( pC->nHdr
15520 50 61 72 73 65 64 3c 3d 70 32 20 29 7b 0a 20 20  Parsed<=p2 ){.  
15530 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73    /* If there is
15540 20 6d 6f 72 65 20 68 65 61 64 65 72 20 61 76 61   more header ava
15550 69 6c 61 62 6c 65 20 66 6f 72 20 70 61 72 73 69  ilable for parsi
15560 6e 67 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  ng in the record
15570 2c 20 74 72 79 0a 20 20 20 20 2a 2a 20 74 6f 20  , try.    ** to 
15580 65 78 74 72 61 63 74 20 61 64 64 69 74 69 6f 6e  extract addition
15590 61 6c 20 66 69 65 6c 64 73 20 75 70 20 74 68 72  al fields up thr
155a0 6f 75 67 68 20 74 68 65 20 70 32 2b 31 2d 74 68  ough the p2+1-th
155b0 20 66 69 65 6c 64 20 0a 20 20 20 20 2a 2f 0a 20   field .    */. 
155c0 20 20 20 69 66 28 20 70 43 2d 3e 69 48 64 72 4f     if( pC->iHdrO
155d0 66 66 73 65 74 3c 61 4f 66 66 73 65 74 5b 30 5d  ffset<aOffset[0]
155e0 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b   ){.      /* Mak
155f0 65 20 73 75 72 65 20 7a 44 61 74 61 20 70 6f 69  e sure zData poi
15600 6e 74 73 20 74 6f 20 65 6e 6f 75 67 68 20 6f 66  nts to enough of
15610 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 63   the record to c
15620 6f 76 65 72 20 74 68 65 20 68 65 61 64 65 72 2e  over the header.
15630 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 43   */.      if( pC
15640 2d 3e 61 52 6f 77 3d 3d 30 20 29 7b 0a 20 20 20  ->aRow==0 ){.   
15650 20 20 20 20 20 6d 65 6d 73 65 74 28 26 73 4d 65       memset(&sMe
15660 6d 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65  m, 0, sizeof(sMe
15670 6d 29 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20  m));.        rc 
15680 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  = sqlite3VdbeMem
15690 46 72 6f 6d 42 74 72 65 65 28 70 43 2d 3e 75 63  FromBtree(pC->uc
156a0 2e 70 43 75 72 73 6f 72 2c 20 30 2c 20 61 4f 66  .pCursor, 0, aOf
156b0 66 73 65 74 5b 30 5d 2c 20 26 73 4d 65 6d 29 3b  fset[0], &sMem);
156c0 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21  .        if( rc!
156d0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74  =SQLITE_OK ) got
156e0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
156f0 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7a 44  rror;.        zD
15700 61 74 61 20 3d 20 28 75 38 2a 29 73 4d 65 6d 2e  ata = (u8*)sMem.
15710 7a 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  z;.      }else{.
15720 20 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20          zData = 
15730 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20 20 20 20  pC->aRow;.      
15740 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 46 69  }.  .      /* Fi
15750 6c 6c 20 69 6e 20 70 43 2d 3e 61 54 79 70 65 5b  ll in pC->aType[
15760 69 5d 20 61 6e 64 20 61 4f 66 66 73 65 74 5b 69  i] and aOffset[i
15770 5d 20 76 61 6c 75 65 73 20 74 68 72 6f 75 67 68  ] values through
15780 20 74 68 65 20 70 32 2d 74 68 20 66 69 65 6c 64   the p2-th field
15790 2e 20 2a 2f 0a 20 20 20 20 6f 70 5f 63 6f 6c 75  . */.    op_colu
157a0 6d 6e 5f 72 65 61 64 5f 68 65 61 64 65 72 3a 0a  mn_read_header:.
157b0 20 20 20 20 20 20 69 20 3d 20 70 43 2d 3e 6e 48        i = pC->nH
157c0 64 72 50 61 72 73 65 64 3b 0a 20 20 20 20 20 20  drParsed;.      
157d0 6f 66 66 73 65 74 36 34 20 3d 20 61 4f 66 66 73  offset64 = aOffs
157e0 65 74 5b 69 5d 3b 0a 20 20 20 20 20 20 7a 48 64  et[i];.      zHd
157f0 72 20 3d 20 7a 44 61 74 61 20 2b 20 70 43 2d 3e  r = zData + pC->
15800 69 48 64 72 4f 66 66 73 65 74 3b 0a 20 20 20 20  iHdrOffset;.    
15810 20 20 7a 45 6e 64 48 64 72 20 3d 20 7a 44 61 74    zEndHdr = zDat
15820 61 20 2b 20 61 4f 66 66 73 65 74 5b 30 5d 3b 0a  a + aOffset[0];.
15830 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
15840 7a 48 64 72 3e 3d 7a 45 6e 64 48 64 72 20 29 3b  zHdr>=zEndHdr );
15850 0a 20 20 20 20 20 20 64 6f 7b 0a 20 20 20 20 20  .      do{.     
15860 20 20 20 69 66 28 20 28 74 20 3d 20 7a 48 64 72     if( (t = zHdr
15870 5b 30 5d 29 3c 30 78 38 30 20 29 7b 0a 20 20 20  [0])<0x80 ){.   
15880 20 20 20 20 20 20 20 7a 48 64 72 2b 2b 3b 0a 20         zHdr++;. 
15890 20 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 36           offset6
158a0 34 20 2b 3d 20 73 71 6c 69 74 65 33 56 64 62 65  4 += sqlite3Vdbe
158b0 4f 6e 65 42 79 74 65 53 65 72 69 61 6c 54 79 70  OneByteSerialTyp
158c0 65 4c 65 6e 28 74 29 3b 0a 20 20 20 20 20 20 20  eLen(t);.       
158d0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
158e0 20 20 7a 48 64 72 20 2b 3d 20 73 71 6c 69 74 65    zHdr += sqlite
158f0 33 47 65 74 56 61 72 69 6e 74 33 32 28 7a 48 64  3GetVarint32(zHd
15900 72 2c 20 26 74 29 3b 0a 20 20 20 20 20 20 20 20  r, &t);.        
15910 20 20 6f 66 66 73 65 74 36 34 20 2b 3d 20 73 71    offset64 += sq
15920 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54  lite3VdbeSerialT
15930 79 70 65 4c 65 6e 28 74 29 3b 0a 20 20 20 20 20  ypeLen(t);.     
15940 20 20 20 7d 0a 20 20 20 20 20 20 20 20 70 43 2d     }.        pC-
15950 3e 61 54 79 70 65 5b 69 2b 2b 5d 20 3d 20 74 3b  >aType[i++] = t;
15960 0a 20 20 20 20 20 20 20 20 61 4f 66 66 73 65 74  .        aOffset
15970 5b 69 5d 20 3d 20 28 75 33 32 29 28 6f 66 66 73  [i] = (u32)(offs
15980 65 74 36 34 20 26 20 30 78 66 66 66 66 66 66 66  et64 & 0xfffffff
15990 66 29 3b 0a 20 20 20 20 20 20 7d 77 68 69 6c 65  f);.      }while
159a0 28 20 69 3c 3d 70 32 20 26 26 20 7a 48 64 72 3c  ( i<=p2 && zHdr<
159b0 7a 45 6e 64 48 64 72 20 29 3b 0a 0a 20 20 20 20  zEndHdr );..    
159c0 20 20 2f 2a 20 54 68 65 20 72 65 63 6f 72 64 20    /* The record 
159d0 69 73 20 63 6f 72 72 75 70 74 20 69 66 20 61 6e  is corrupt if an
159e0 79 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  y of the followi
159f0 6e 67 20 61 72 65 20 74 72 75 65 3a 0a 20 20 20  ng are true:.   
15a00 20 20 20 2a 2a 20 28 31 29 20 74 68 65 20 62 79     ** (1) the by
15a10 74 65 73 20 6f 66 20 74 68 65 20 68 65 61 64 65  tes of the heade
15a20 72 20 65 78 74 65 6e 64 20 70 61 73 74 20 74 68  r extend past th
15a30 65 20 64 65 63 6c 61 72 65 64 20 68 65 61 64 65  e declared heade
15a40 72 20 73 69 7a 65 0a 20 20 20 20 20 20 2a 2a 20  r size.      ** 
15a50 28 32 29 20 74 68 65 20 65 6e 74 69 72 65 20 68  (2) the entire h
15a60 65 61 64 65 72 20 77 61 73 20 75 73 65 64 20 62  eader was used b
15a70 75 74 20 6e 6f 74 20 61 6c 6c 20 64 61 74 61 20  ut not all data 
15a80 77 61 73 20 75 73 65 64 0a 20 20 20 20 20 20 2a  was used.      *
15a90 2a 20 28 33 29 20 74 68 65 20 65 6e 64 20 6f 66  * (3) the end of
15aa0 20 74 68 65 20 64 61 74 61 20 65 78 74 65 6e 64   the data extend
15ab0 73 20 62 65 79 6f 6e 64 20 74 68 65 20 65 6e 64  s beyond the end
15ac0 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 2e 0a   of the record..
15ad0 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69        */.      i
15ae0 66 28 20 28 7a 48 64 72 3e 3d 7a 45 6e 64 48 64  f( (zHdr>=zEndHd
15af0 72 20 26 26 20 28 7a 48 64 72 3e 7a 45 6e 64 48  r && (zHdr>zEndH
15b00 64 72 20 7c 7c 20 6f 66 66 73 65 74 36 34 21 3d  dr || offset64!=
15b10 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 29  pC->payloadSize)
15b20 29 0a 20 20 20 20 20 20 20 7c 7c 20 28 6f 66 66  ).       || (off
15b30 73 65 74 36 34 20 3e 20 70 43 2d 3e 70 61 79 6c  set64 > pC->payl
15b40 6f 61 64 53 69 7a 65 29 0a 20 20 20 20 20 20 29  oadSize).      )
15b50 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 61 4f  {.        if( aO
15b60 66 66 73 65 74 5b 30 5d 3d 3d 30 20 29 7b 0a 20  ffset[0]==0 ){. 
15b70 20 20 20 20 20 20 20 20 20 69 20 3d 20 30 3b 0a           i = 0;.
15b80 20 20 20 20 20 20 20 20 20 20 7a 48 64 72 20 3d            zHdr =
15b90 20 7a 45 6e 64 48 64 72 3b 0a 20 20 20 20 20 20   zEndHdr;.      
15ba0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
15bb0 20 20 20 69 66 28 20 70 43 2d 3e 61 52 6f 77 3d     if( pC->aRow=
15bc0 3d 30 20 29 20 73 71 6c 69 74 65 33 56 64 62 65  =0 ) sqlite3Vdbe
15bd0 4d 65 6d 52 65 6c 65 61 73 65 28 26 73 4d 65 6d  MemRelease(&sMem
15be0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74  );.          got
15bf0 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 63 6f 72 72  o op_column_corr
15c00 75 70 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  upt;.        }. 
15c10 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 70 43       }..      pC
15c20 2d 3e 6e 48 64 72 50 61 72 73 65 64 20 3d 20 69  ->nHdrParsed = i
15c30 3b 0a 20 20 20 20 20 20 70 43 2d 3e 69 48 64 72  ;.      pC->iHdr
15c40 4f 66 66 73 65 74 20 3d 20 28 75 33 32 29 28 7a  Offset = (u32)(z
15c50 48 64 72 20 2d 20 7a 44 61 74 61 29 3b 0a 20 20  Hdr - zData);.  
15c60 20 20 20 20 69 66 28 20 70 43 2d 3e 61 52 6f 77      if( pC->aRow
15c70 3d 3d 30 20 29 20 73 71 6c 69 74 65 33 56 64 62  ==0 ) sqlite3Vdb
15c80 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 73 4d 65  eMemRelease(&sMe
15c90 6d 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  m);.    }else{. 
15ca0 20 20 20 20 20 74 20 3d 20 30 3b 0a 20 20 20 20       t = 0;.    
15cb0 7d 0a 0a 20 20 20 20 2f 2a 20 49 66 20 61 66 74  }..    /* If aft
15cc0 65 72 20 74 72 79 69 6e 67 20 74 6f 20 65 78 74  er trying to ext
15cd0 72 61 63 74 20 6e 65 77 20 65 6e 74 72 69 65 73  ract new entries
15ce0 20 66 72 6f 6d 20 74 68 65 20 68 65 61 64 65 72   from the header
15cf0 2c 20 6e 48 64 72 50 61 72 73 65 64 20 69 73 0a  , nHdrParsed is.
15d00 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20 6e 6f 74      ** still not
15d10 20 75 70 20 74 6f 20 70 32 2c 20 74 68 61 74 20   up to p2, that 
15d20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 72  means that the r
15d30 65 63 6f 72 64 20 68 61 73 20 66 65 77 65 72 20  ecord has fewer 
15d40 74 68 61 6e 20 70 32 0a 20 20 20 20 2a 2a 20 63  than p2.    ** c
15d50 6f 6c 75 6d 6e 73 2e 20 20 53 6f 20 74 68 65 20  olumns.  So the 
15d60 72 65 73 75 6c 74 20 77 69 6c 6c 20 62 65 20 65  result will be e
15d70 69 74 68 65 72 20 74 68 65 20 64 65 66 61 75 6c  ither the defaul
15d80 74 20 76 61 6c 75 65 20 6f 72 20 61 20 4e 55 4c  t value or a NUL
15d90 4c 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  L..    */.    if
15da0 28 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64  ( pC->nHdrParsed
15db0 3c 3d 70 32 20 29 7b 0a 20 20 20 20 20 20 69 66  <=p2 ){.      if
15dc0 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
15dd0 34 5f 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20 20  4_MEM ){.       
15de0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
15df0 68 61 6c 6c 6f 77 43 6f 70 79 28 70 44 65 73 74  hallowCopy(pDest
15e00 2c 20 70 4f 70 2d 3e 70 34 2e 70 4d 65 6d 2c 20  , pOp->p4.pMem, 
15e10 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 20  MEM_Static);.   
15e20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
15e30 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
15e40 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a  SetNull(pDest);.
15e50 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 67 6f        }.      go
15e60 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74  to op_column_out
15e70 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
15e80 0a 20 20 20 20 74 20 3d 20 70 43 2d 3e 61 54 79  .    t = pC->aTy
15e90 70 65 5b 70 32 5d 3b 0a 20 20 7d 0a 0a 20 20 2f  pe[p2];.  }..  /
15ea0 2a 20 45 78 74 72 61 63 74 20 74 68 65 20 63 6f  * Extract the co
15eb0 6e 74 65 6e 74 20 66 6f 72 20 74 68 65 20 70 32  ntent for the p2
15ec0 2b 31 2d 74 68 20 63 6f 6c 75 6d 6e 2e 20 20 43  +1-th column.  C
15ed0 6f 6e 74 72 6f 6c 20 63 61 6e 20 6f 6e 6c 79 0a  ontrol can only.
15ee0 20 20 2a 2a 20 72 65 61 63 68 20 74 68 69 73 20    ** reach this 
15ef0 70 6f 69 6e 74 20 69 66 20 61 4f 66 66 73 65 74  point if aOffset
15f00 5b 70 32 5d 2c 20 61 4f 66 66 73 65 74 5b 70 32  [p2], aOffset[p2
15f10 2b 31 5d 2c 20 61 6e 64 20 70 43 2d 3e 61 54 79  +1], and pC->aTy
15f20 70 65 5b 70 32 5d 20 61 72 65 0a 20 20 2a 2a 20  pe[p2] are.  ** 
15f30 61 6c 6c 20 76 61 6c 69 64 2e 0a 20 20 2a 2f 0a  all valid..  */.
15f40 20 20 61 73 73 65 72 74 28 20 70 32 3c 70 43 2d    assert( p2<pC-
15f50 3e 6e 48 64 72 50 61 72 73 65 64 20 29 3b 0a 20  >nHdrParsed );. 
15f60 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
15f70 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 61 73 73 65  ITE_OK );.  asse
15f80 72 74 28 20 73 71 6c 69 74 65 33 56 64 62 65 43  rt( sqlite3VdbeC
15f90 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74  heckMemInvariant
15fa0 73 28 70 44 65 73 74 29 20 29 3b 0a 20 20 69 66  s(pDest) );.  if
15fb0 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63  ( VdbeMemDynamic
15fc0 28 70 44 65 73 74 29 20 29 7b 0a 20 20 20 20 73  (pDest) ){.    s
15fd0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
15fe0 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 7d  Null(pDest);.  }
15ff0 0a 20 20 61 73 73 65 72 74 28 20 74 3d 3d 70 43  .  assert( t==pC
16000 2d 3e 61 54 79 70 65 5b 70 32 5d 20 29 3b 0a 20  ->aType[p2] );. 
16010 20 69 66 28 20 70 43 2d 3e 73 7a 52 6f 77 3e 3d   if( pC->szRow>=
16020 61 4f 66 66 73 65 74 5b 70 32 2b 31 5d 20 29 7b  aOffset[p2+1] ){
16030 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20  .    /* This is 
16040 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20  the common case 
16050 77 68 65 72 65 20 74 68 65 20 64 65 73 69 72 65  where the desire
16060 64 20 63 6f 6e 74 65 6e 74 20 66 69 74 73 20 6f  d content fits o
16070 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 20  n the original. 
16080 20 20 20 2a 2a 20 70 61 67 65 20 2d 20 77 68 65     ** page - whe
16090 72 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 69  re the content i
160a0 73 20 6e 6f 74 20 6f 6e 20 61 6e 20 6f 76 65 72  s not on an over
160b0 66 6c 6f 77 20 70 61 67 65 20 2a 2f 0a 20 20 20  flow page */.   
160c0 20 7a 44 61 74 61 20 3d 20 70 43 2d 3e 61 52 6f   zData = pC->aRo
160d0 77 20 2b 20 61 4f 66 66 73 65 74 5b 70 32 5d 3b  w + aOffset[p2];
160e0 0a 20 20 20 20 69 66 28 20 74 3c 31 32 20 29 7b  .    if( t<12 ){
160f0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
16100 62 65 53 65 72 69 61 6c 47 65 74 28 7a 44 61 74  beSerialGet(zDat
16110 61 2c 20 74 2c 20 70 44 65 73 74 29 3b 0a 20 20  a, t, pDest);.  
16120 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f    }else{.      /
16130 2a 20 49 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  * If the column 
16140 76 61 6c 75 65 20 69 73 20 61 20 73 74 72 69 6e  value is a strin
16150 67 2c 20 77 65 20 6e 65 65 64 20 61 20 70 65 72  g, we need a per
16160 73 69 73 74 65 6e 74 20 76 61 6c 75 65 2c 20 6e  sistent value, n
16170 6f 74 0a 20 20 20 20 20 20 2a 2a 20 61 20 4d 45  ot.      ** a ME
16180 4d 5f 45 70 68 65 6d 20 76 61 6c 75 65 2e 20 20  M_Ephem value.  
16190 54 68 69 73 20 62 72 61 6e 63 68 20 69 73 20 61  This branch is a
161a0 20 66 61 73 74 20 73 68 6f 72 74 2d 63 75 74 20   fast short-cut 
161b0 74 68 61 74 20 69 73 20 65 71 75 69 76 61 6c 65  that is equivale
161c0 6e 74 0a 20 20 20 20 20 20 2a 2a 20 74 6f 20 63  nt.      ** to c
161d0 61 6c 6c 69 6e 67 20 73 71 6c 69 74 65 33 56 64  alling sqlite3Vd
161e0 62 65 53 65 72 69 61 6c 47 65 74 28 29 20 61 6e  beSerialGet() an
161f0 64 20 73 71 6c 69 74 65 33 56 64 62 65 44 65 65  d sqlite3VdbeDee
16200 70 68 65 6d 65 72 61 6c 69 7a 65 28 29 2e 0a 20  phemeralize().. 
16210 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 74       */.      st
16220 61 74 69 63 20 63 6f 6e 73 74 20 75 31 36 20 61  atic const u16 a
16230 46 6c 61 67 5b 5d 20 3d 20 7b 20 4d 45 4d 5f 42  Flag[] = { MEM_B
16240 6c 6f 62 2c 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d  lob, MEM_Str|MEM
16250 5f 54 65 72 6d 20 7d 3b 0a 20 20 20 20 20 20 70  _Term };.      p
16260 44 65 73 74 2d 3e 6e 20 3d 20 6c 65 6e 20 3d 20  Dest->n = len = 
16270 28 74 2d 31 32 29 2f 32 3b 0a 20 20 20 20 20 20  (t-12)/2;.      
16280 70 44 65 73 74 2d 3e 65 6e 63 20 3d 20 65 6e 63  pDest->enc = enc
16290 6f 64 69 6e 67 3b 0a 20 20 20 20 20 20 69 66 28  oding;.      if(
162a0 20 70 44 65 73 74 2d 3e 73 7a 4d 61 6c 6c 6f 63   pDest->szMalloc
162b0 20 3c 20 6c 65 6e 2b 32 20 29 7b 0a 20 20 20 20   < len+2 ){.    
162c0 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73      pDest->flags
162d0 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20   = MEM_Null;.   
162e0 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
162f0 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 44 65 73  VdbeMemGrow(pDes
16300 74 2c 20 6c 65 6e 2b 32 2c 20 30 29 20 29 20 67  t, len+2, 0) ) g
16310 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20  oto no_mem;.    
16320 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
16330 20 70 44 65 73 74 2d 3e 7a 20 3d 20 70 44 65 73   pDest->z = pDes
16340 74 2d 3e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20  t->zMalloc;.    
16350 20 20 7d 0a 20 20 20 20 20 20 6d 65 6d 63 70 79    }.      memcpy
16360 28 70 44 65 73 74 2d 3e 7a 2c 20 7a 44 61 74 61  (pDest->z, zData
16370 2c 20 6c 65 6e 29 3b 0a 20 20 20 20 20 20 70 44  , len);.      pD
16380 65 73 74 2d 3e 7a 5b 6c 65 6e 5d 20 3d 20 30 3b  est->z[len] = 0;
16390 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e 7a 5b  .      pDest->z[
163a0 6c 65 6e 2b 31 5d 20 3d 20 30 3b 0a 20 20 20 20  len+1] = 0;.    
163b0 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 3d    pDest->flags =
163c0 20 61 46 6c 61 67 5b 74 26 31 5d 3b 0a 20 20 20   aFlag[t&1];.   
163d0 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
163e0 70 44 65 73 74 2d 3e 65 6e 63 20 3d 20 65 6e 63  pDest->enc = enc
163f0 6f 64 69 6e 67 3b 0a 20 20 20 20 2f 2a 20 54 68  oding;.    /* Th
16400 69 73 20 62 72 61 6e 63 68 20 68 61 70 70 65 6e  is branch happen
16410 73 20 6f 6e 6c 79 20 77 68 65 6e 20 63 6f 6e 74  s only when cont
16420 65 6e 74 20 69 73 20 6f 6e 20 6f 76 65 72 66 6c  ent is on overfl
16430 6f 77 20 70 61 67 65 73 20 2a 2f 0a 20 20 20 20  ow pages */.    
16440 69 66 28 20 28 28 70 4f 70 2d 3e 70 35 20 26 20  if( ((pOp->p5 & 
16450 28 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52  (OPFLAG_LENGTHAR
16460 47 7c 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41  G|OPFLAG_TYPEOFA
16470 52 47 29 29 21 3d 30 0a 20 20 20 20 20 20 20 20  RG))!=0.        
16480 20 20 26 26 20 28 28 74 3e 3d 31 32 20 26 26 20    && ((t>=12 && 
16490 28 74 26 31 29 3d 3d 30 29 20 7c 7c 20 28 70 4f  (t&1)==0) || (pO
164a0 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 54  p->p5 & OPFLAG_T
164b0 59 50 45 4f 46 41 52 47 29 21 3d 30 29 29 0a 20  YPEOFARG)!=0)). 
164c0 20 20 20 20 7c 7c 20 28 6c 65 6e 20 3d 20 73 71      || (len = sq
164d0 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54  lite3VdbeSerialT
164e0 79 70 65 4c 65 6e 28 74 29 29 3d 3d 30 0a 20 20  ypeLen(t))==0.  
164f0 20 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 43 6f    ){.      /* Co
16500 6e 74 65 6e 74 20 69 73 20 69 72 72 65 6c 65 76  ntent is irrelev
16510 61 6e 74 20 66 6f 72 0a 20 20 20 20 20 20 2a 2a  ant for.      **
16520 20 20 20 20 31 2e 20 74 68 65 20 74 79 70 65 6f      1. the typeo
16530 66 28 29 20 66 75 6e 63 74 69 6f 6e 2c 0a 20 20  f() function,.  
16540 20 20 20 20 2a 2a 20 20 20 20 32 2e 20 74 68 65      **    2. the
16550 20 6c 65 6e 67 74 68 28 58 29 20 66 75 6e 63 74   length(X) funct
16560 69 6f 6e 20 69 66 20 58 20 69 73 20 61 20 62 6c  ion if X is a bl
16570 6f 62 2c 20 61 6e 64 0a 20 20 20 20 20 20 2a 2a  ob, and.      **
16580 20 20 20 20 33 2e 20 69 66 20 74 68 65 20 63 6f      3. if the co
16590 6e 74 65 6e 74 20 6c 65 6e 67 74 68 20 69 73 20  ntent length is 
165a0 7a 65 72 6f 2e 0a 20 20 20 20 20 20 2a 2a 20 53  zero..      ** S
165b0 6f 20 77 65 20 6d 69 67 68 74 20 61 73 20 77 65  o we might as we
165c0 6c 6c 20 75 73 65 20 62 6f 67 75 73 20 63 6f 6e  ll use bogus con
165d0 74 65 6e 74 20 72 61 74 68 65 72 20 74 68 61 6e  tent rather than
165e0 20 72 65 61 64 69 6e 67 0a 20 20 20 20 20 20 2a   reading.      *
165f0 2a 20 63 6f 6e 74 65 6e 74 20 66 72 6f 6d 20 64  * content from d
16600 69 73 6b 2e 20 0a 20 20 20 20 20 20 2a 2a 0a 20  isk. .      **. 
16610 20 20 20 20 20 2a 2a 20 41 6c 74 68 6f 75 67 68       ** Although
16620 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
16630 61 6c 47 65 74 28 29 20 6d 61 79 20 72 65 61 64  alGet() may read
16640 20 61 74 20 6d 6f 73 74 20 38 20 62 79 74 65 73   at most 8 bytes
16650 20 66 72 6f 6d 20 74 68 65 0a 20 20 20 20 20 20   from the.      
16660 2a 2a 20 62 75 66 66 65 72 20 70 61 73 73 65 64  ** buffer passed
16670 20 74 6f 20 69 74 2c 20 64 65 62 75 67 67 69 6e   to it, debuggin
16680 67 20 66 75 6e 63 74 69 6f 6e 20 56 64 62 65 4d  g function VdbeM
16690 65 6d 50 72 65 74 74 79 50 72 69 6e 74 28 29 20  emPrettyPrint() 
166a0 6d 61 79 0a 20 20 20 20 20 20 2a 2a 20 72 65 61  may.      ** rea
166b0 64 20 75 70 20 74 6f 20 31 36 2e 20 53 6f 20 31  d up to 16. So 1
166c0 36 20 62 79 74 65 73 20 6f 66 20 62 6f 67 75 73  6 bytes of bogus
166d0 20 63 6f 6e 74 65 6e 74 20 69 73 20 73 75 70 70   content is supp
166e0 6c 69 65 64 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  lied..      */. 
166f0 20 20 20 20 20 73 74 61 74 69 63 20 75 38 20 61       static u8 a
16700 5a 65 72 6f 5b 31 36 5d 3b 20 20 2f 2a 20 54 68  Zero[16];  /* Th
16710 69 73 20 69 73 20 74 68 65 20 62 6f 67 75 73 20  is is the bogus 
16720 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20 20 20 20  content */.     
16730 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
16740 61 6c 47 65 74 28 61 5a 65 72 6f 2c 20 74 2c 20  alGet(aZero, t, 
16750 70 44 65 73 74 29 3b 0a 20 20 20 20 7d 65 6c 73  pDest);.    }els
16760 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  e{.      rc = sq
16770 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d  lite3VdbeMemFrom
16780 42 74 72 65 65 28 70 43 2d 3e 75 63 2e 70 43 75  Btree(pC->uc.pCu
16790 72 73 6f 72 2c 20 61 4f 66 66 73 65 74 5b 70 32  rsor, aOffset[p2
167a0 5d 2c 20 6c 65 6e 2c 20 70 44 65 73 74 29 3b 0a  ], len, pDest);.
167b0 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
167c0 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
167d0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
167e0 72 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  r;.      sqlite3
167f0 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 28 63  VdbeSerialGet((c
16800 6f 6e 73 74 20 75 38 2a 29 70 44 65 73 74 2d 3e  onst u8*)pDest->
16810 7a 2c 20 74 2c 20 70 44 65 73 74 29 3b 0a 20 20  z, t, pDest);.  
16820 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73      pDest->flags
16830 20 26 3d 20 7e 4d 45 4d 5f 45 70 68 65 6d 3b 0a   &= ~MEM_Ephem;.
16840 20 20 20 20 7d 0a 20 20 7d 0a 0a 6f 70 5f 63 6f      }.  }..op_co
16850 6c 75 6d 6e 5f 6f 75 74 3a 0a 20 20 55 50 44 41  lumn_out:.  UPDA
16860 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
16870 70 44 65 73 74 29 3b 0a 20 20 52 45 47 49 53 54  pDest);.  REGIST
16880 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
16890 2c 20 70 44 65 73 74 29 3b 0a 20 20 62 72 65 61  , pDest);.  brea
168a0 6b 3b 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 63 6f  k;..op_column_co
168b0 72 72 75 70 74 3a 0a 20 20 69 66 28 20 61 4f 70  rrupt:.  if( aOp
168c0 5b 30 5d 2e 70 33 3e 30 20 29 7b 0a 20 20 20 20  [0].p3>0 ){.    
168d0 70 4f 70 20 3d 20 26 61 4f 70 5b 61 4f 70 5b 30  pOp = &aOp[aOp[0
168e0 5d 2e 70 33 2d 31 5d 3b 0a 20 20 20 20 62 72 65  ].p3-1];.    bre
168f0 61 6b 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ak;.  }else{.   
16900 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52   rc = SQLITE_COR
16910 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 67  RUPT_BKPT;.    g
16920 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
16930 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 7d 0a 0a 2f  _error;.  }.}../
16940 2a 20 4f 70 63 6f 64 65 3a 20 41 66 66 69 6e 69  * Opcode: Affini
16950 74 79 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a  ty P1 P2 * P4 *.
16960 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 66 66  ** Synopsis: aff
16970 69 6e 69 74 79 28 72 5b 50 31 40 50 32 5d 29 0a  inity(r[P1@P2]).
16980 2a 2a 0a 2a 2a 20 41 70 70 6c 79 20 61 66 66 69  **.** Apply affi
16990 6e 69 74 69 65 73 20 74 6f 20 61 20 72 61 6e 67  nities to a rang
169a0 65 20 6f 66 20 50 32 20 72 65 67 69 73 74 65 72  e of P2 register
169b0 73 20 73 74 61 72 74 69 6e 67 20 77 69 74 68 20  s starting with 
169c0 50 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  P1..**.** P4 is 
169d0 61 20 73 74 72 69 6e 67 20 74 68 61 74 20 69 73  a string that is
169e0 20 50 32 20 63 68 61 72 61 63 74 65 72 73 20 6c   P2 characters l
169f0 6f 6e 67 2e 20 54 68 65 20 4e 2d 74 68 20 63 68  ong. The N-th ch
16a00 61 72 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a  aracter of the.*
16a10 2a 20 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74  * string indicat
16a20 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66  es the column af
16a30 66 69 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75  finity that shou
16a40 6c 64 20 62 65 20 75 73 65 64 20 66 6f 72 20 74  ld be used for t
16a50 68 65 20 4e 2d 74 68 0a 2a 2a 20 6d 65 6d 6f 72  he N-th.** memor
16a60 79 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 72 61  y cell in the ra
16a70 6e 67 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  nge..*/.case OP_
16a80 41 66 66 69 6e 69 74 79 3a 20 7b 0a 20 20 63 6f  Affinity: {.  co
16a90 6e 73 74 20 63 68 61 72 20 2a 7a 41 66 66 69 6e  nst char *zAffin
16aa0 69 74 79 3b 20 20 20 2f 2a 20 54 68 65 20 61 66  ity;   /* The af
16ab0 66 69 6e 69 74 79 20 74 6f 20 62 65 20 61 70 70  finity to be app
16ac0 6c 69 65 64 20 2a 2f 0a 0a 20 20 7a 41 66 66 69  lied */..  zAffi
16ad0 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  nity = pOp->p4.z
16ae0 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 41 66 66  ;.  assert( zAff
16af0 69 6e 69 74 79 21 3d 30 20 29 3b 0a 20 20 61 73  inity!=0 );.  as
16b00 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
16b10 29 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 41 66  );.  assert( zAf
16b20 66 69 6e 69 74 79 5b 70 4f 70 2d 3e 70 32 5d 3d  finity[pOp->p2]=
16b30 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26  =0 );.  pIn1 = &
16b40 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
16b50 20 64 6f 7b 0a 20 20 20 20 61 73 73 65 72 74 28   do{.    assert(
16b60 20 70 49 6e 31 20 3c 3d 20 26 70 2d 3e 61 4d 65   pIn1 <= &p->aMe
16b70 6d 5b 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  m[(p->nMem+1 - p
16b80 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20  ->nCursor)] );. 
16b90 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
16ba0 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20  Valid(pIn1) );. 
16bb0 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79     applyAffinity
16bc0 28 70 49 6e 31 2c 20 2a 28 7a 41 66 66 69 6e 69  (pIn1, *(zAffini
16bd0 74 79 2b 2b 29 2c 20 65 6e 63 6f 64 69 6e 67 29  ty++), encoding)
16be0 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20  ;.    pIn1++;.  
16bf0 7d 77 68 69 6c 65 28 20 7a 41 66 66 69 6e 69 74  }while( zAffinit
16c00 79 5b 30 5d 20 29 3b 0a 20 20 62 72 65 61 6b 3b  y[0] );.  break;
16c10 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d  .}../* Opcode: M
16c20 61 6b 65 52 65 63 6f 72 64 20 50 31 20 50 32 20  akeRecord P1 P2 
16c30 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
16c40 73 69 73 3a 20 72 5b 50 33 5d 3d 6d 6b 72 65 63  sis: r[P3]=mkrec
16c50 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a  (r[P1@P2]).**.**
16c60 20 43 6f 6e 76 65 72 74 20 50 32 20 72 65 67 69   Convert P2 regi
16c70 73 74 65 72 73 20 62 65 67 69 6e 6e 69 6e 67 20  sters beginning 
16c80 77 69 74 68 20 50 31 20 69 6e 74 6f 20 74 68 65  with P1 into the
16c90 20 5b 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 5d   [record format]
16ca0 0a 2a 2a 20 75 73 65 20 61 73 20 61 20 64 61 74  .** use as a dat
16cb0 61 20 72 65 63 6f 72 64 20 69 6e 20 61 20 64 61  a record in a da
16cc0 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
16cd0 61 73 20 61 20 6b 65 79 0a 2a 2a 20 69 6e 20 61  as a key.** in a
16ce0 6e 20 69 6e 64 65 78 2e 20 20 54 68 65 20 4f 50  n index.  The OP
16cf0 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 20 63  _Column opcode c
16d00 61 6e 20 64 65 63 6f 64 65 20 74 68 65 20 72 65  an decode the re
16d10 63 6f 72 64 20 6c 61 74 65 72 2e 0a 2a 2a 0a 2a  cord later..**.*
16d20 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20 73 74  * P4 may be a st
16d30 72 69 6e 67 20 74 68 61 74 20 69 73 20 50 32 20  ring that is P2 
16d40 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e  characters long.
16d50 20 20 54 68 65 20 4e 2d 74 68 20 63 68 61 72 61    The N-th chara
16d60 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73  cter of the.** s
16d70 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20  tring indicates 
16d80 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e  the column affin
16d90 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20  ity that should 
16da0 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20  be used for the 
16db0 4e 2d 74 68 0a 2a 2a 20 66 69 65 6c 64 20 6f 66  N-th.** field of
16dc0 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79 2e 0a   the index key..
16dd0 2a 2a 0a 2a 2a 20 54 68 65 20 6d 61 70 70 69 6e  **.** The mappin
16de0 67 20 66 72 6f 6d 20 63 68 61 72 61 63 74 65 72  g from character
16df0 20 74 6f 20 61 66 66 69 6e 69 74 79 20 69 73 20   to affinity is 
16e00 67 69 76 65 6e 20 62 79 20 74 68 65 20 53 51 4c  given by the SQL
16e10 49 54 45 5f 41 46 46 5f 0a 2a 2a 20 6d 61 63 72  ITE_AFF_.** macr
16e20 6f 73 20 64 65 66 69 6e 65 64 20 69 6e 20 73 71  os defined in sq
16e30 6c 69 74 65 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a  liteInt.h..**.**
16e40 20 49 66 20 50 34 20 69 73 20 4e 55 4c 4c 20 74   If P4 is NULL t
16e50 68 65 6e 20 61 6c 6c 20 69 6e 64 65 78 20 66 69  hen all index fi
16e60 65 6c 64 73 20 68 61 76 65 20 74 68 65 20 61 66  elds have the af
16e70 66 69 6e 69 74 79 20 42 4c 4f 42 2e 0a 2a 2f 0a  finity BLOB..*/.
16e80 63 61 73 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f  case OP_MakeReco
16e90 72 64 3a 20 7b 0a 20 20 75 38 20 2a 7a 4e 65 77  rd: {.  u8 *zNew
16ea0 52 65 63 6f 72 64 3b 20 20 20 20 20 20 20 20 2f  Record;        /
16eb0 2a 20 41 20 62 75 66 66 65 72 20 74 6f 20 68 6f  * A buffer to ho
16ec0 6c 64 20 74 68 65 20 64 61 74 61 20 66 6f 72 20  ld the data for 
16ed0 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a  the new record *
16ee0 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 20 20  /.  Mem *pRec;  
16ef0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
16f00 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a  e new record */.
16f10 20 20 75 36 34 20 6e 44 61 74 61 3b 20 20 20 20    u64 nData;    
16f20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
16f30 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64  er of bytes of d
16f40 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 69  ata space */.  i
16f50 6e 74 20 6e 48 64 72 3b 20 20 20 20 20 20 20 20  nt nHdr;        
16f60 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
16f70 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61 64  of bytes of head
16f80 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 36  er space */.  i6
16f90 34 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20  4 nByte;        
16fa0 20 20 20 20 20 2f 2a 20 44 61 74 61 20 73 70 61       /* Data spa
16fb0 63 65 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  ce required for 
16fc0 74 68 69 73 20 72 65 63 6f 72 64 20 2a 2f 0a 20  this record */. 
16fd0 20 69 36 34 20 6e 5a 65 72 6f 3b 20 20 20 20 20   i64 nZero;     
16fe0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
16ff0 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73 20  r of zero bytes 
17000 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
17010 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
17020 74 20 6e 56 61 72 69 6e 74 3b 20 20 20 20 20 20  t nVarint;      
17030 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
17040 66 20 62 79 74 65 73 20 69 6e 20 61 20 76 61 72  f bytes in a var
17050 69 6e 74 20 2a 2f 0a 20 20 75 33 32 20 73 65 72  int */.  u32 ser
17060 69 61 6c 5f 74 79 70 65 3b 20 20 20 20 20 20 20  ial_type;       
17070 2f 2a 20 54 79 70 65 20 66 69 65 6c 64 20 2a 2f  /* Type field */
17080 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 30 3b 20  .  Mem *pData0; 
17090 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
170a0 73 74 20 66 69 65 6c 64 20 74 6f 20 62 65 20 63  st field to be c
170b0 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20 74 68 65  ombined into the
170c0 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d   record */.  Mem
170d0 20 2a 70 4c 61 73 74 3b 20 20 20 20 20 20 20 20   *pLast;        
170e0 20 20 20 20 2f 2a 20 4c 61 73 74 20 66 69 65 6c      /* Last fiel
170f0 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  d of the record 
17100 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b  */.  int nField;
17110 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
17120 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20  umber of fields 
17130 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  in the record */
17140 0a 20 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69  .  char *zAffini
17150 74 79 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ty;       /* The
17160 20 61 66 66 69 6e 69 74 79 20 73 74 72 69 6e 67   affinity string
17170 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20   for the record 
17180 2a 2f 0a 20 20 69 6e 74 20 66 69 6c 65 5f 66 6f  */.  int file_fo
17190 72 6d 61 74 3b 20 20 20 20 20 20 20 2f 2a 20 46  rmat;       /* F
171a0 69 6c 65 20 66 6f 72 6d 61 74 20 74 6f 20 75 73  ile format to us
171b0 65 20 66 6f 72 20 65 6e 63 6f 64 69 6e 67 20 2a  e for encoding *
171c0 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20  /.  int i;      
171d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70             /* Sp
171e0 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65 77  ace used in zNew
171f0 52 65 63 6f 72 64 5b 5d 20 68 65 61 64 65 72 20  Record[] header 
17200 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20 20  */.  int j;     
17210 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
17220 70 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65  pace used in zNe
17230 77 52 65 63 6f 72 64 5b 5d 20 63 6f 6e 74 65 6e  wRecord[] conten
17240 74 20 2a 2f 0a 20 20 75 33 32 20 6c 65 6e 3b 20  t */.  u32 len; 
17250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
17260 20 4c 65 6e 67 74 68 20 6f 66 20 61 20 66 69 65   Length of a fie
17270 6c 64 20 2a 2f 0a 0a 20 20 2f 2a 20 41 73 73 75  ld */..  /* Assu
17280 6d 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20  ming the record 
17290 63 6f 6e 74 61 69 6e 73 20 4e 20 66 69 65 6c 64  contains N field
172a0 73 2c 20 74 68 65 20 72 65 63 6f 72 64 20 66 6f  s, the record fo
172b0 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20  rmat looks.  ** 
172c0 6c 69 6b 65 20 74 68 69 73 3a 0a 20 20 2a 2a 0a  like this:.  **.
172d0 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d    ** -----------
172e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
172f0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17300 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17310 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20  -------------.  
17320 2a 2a 20 7c 20 68 64 72 2d 73 69 7a 65 20 7c 20  ** | hdr-size | 
17330 74 79 70 65 20 30 20 7c 20 74 79 70 65 20 31 20  type 0 | type 1 
17340 7c 20 2e 2e 2e 20 7c 20 74 79 70 65 20 4e 2d 31  | ... | type N-1
17350 20 7c 20 64 61 74 61 30 20 7c 20 2e 2e 2e 20 7c   | data0 | ... |
17360 20 64 61 74 61 20 4e 2d 31 20 7c 20 0a 20 20 2a   data N-1 | .  *
17370 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  * --------------
17380 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17390 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
173a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
173b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a  ----------.  **.
173c0 20 20 2a 2a 20 44 61 74 61 28 30 29 20 69 73 20    ** Data(0) is 
173d0 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73  taken from regis
173e0 74 65 72 20 50 31 2e 20 20 44 61 74 61 28 31 29  ter P1.  Data(1)
173f0 20 63 6f 6d 65 73 20 66 72 6f 6d 20 72 65 67 69   comes from regi
17400 73 74 65 72 20 50 31 2b 31 0a 20 20 2a 2a 20 61  ster P1+1.  ** a
17410 6e 64 20 73 6f 20 66 6f 72 74 68 2e 0a 20 20 2a  nd so forth..  *
17420 2a 0a 20 20 2a 2a 20 45 61 63 68 20 74 79 70 65  *.  ** Each type
17430 20 66 69 65 6c 64 20 69 73 20 61 20 76 61 72 69   field is a vari
17440 6e 74 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20  nt representing 
17450 74 68 65 20 73 65 72 69 61 6c 20 74 79 70 65 20  the serial type 
17460 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20 63 6f 72  of the .  ** cor
17470 72 65 73 70 6f 6e 64 69 6e 67 20 64 61 74 61 20  responding data 
17480 65 6c 65 6d 65 6e 74 20 28 73 65 65 20 73 71 6c  element (see sql
17490 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
174a0 70 65 28 29 29 2e 20 54 68 65 0a 20 20 2a 2a 20  pe()). The.  ** 
174b0 68 64 72 2d 73 69 7a 65 20 66 69 65 6c 64 20 69  hdr-size field i
174c0 73 20 61 6c 73 6f 20 61 20 76 61 72 69 6e 74 20  s also a varint 
174d0 77 68 69 63 68 20 69 73 20 74 68 65 20 6f 66 66  which is the off
174e0 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67  set from the beg
174f0 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66 20 74  inning.  ** of t
17500 68 65 20 72 65 63 6f 72 64 20 74 6f 20 64 61 74  he record to dat
17510 61 30 2e 0a 20 20 2a 2f 0a 20 20 6e 44 61 74 61  a0..  */.  nData
17520 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a   = 0;         /*
17530 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
17540 20 6f 66 20 64 61 74 61 20 73 70 61 63 65 20 2a   of data space *
17550 2f 0a 20 20 6e 48 64 72 20 3d 20 30 3b 20 20 20  /.  nHdr = 0;   
17560 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
17570 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61   of bytes of hea
17580 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e  der space */.  n
17590 5a 65 72 6f 20 3d 20 30 3b 20 20 20 20 20 20 20  Zero = 0;       
175a0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a    /* Number of z
175b0 65 72 6f 20 62 79 74 65 73 20 61 74 20 74 68 65  ero bytes at the
175c0 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f   end of the reco
175d0 72 64 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20 3d  rd */.  nField =
175e0 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41 66 66   pOp->p1;.  zAff
175f0 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e  inity = pOp->p4.
17600 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69  z;.  assert( nFi
17610 65 6c 64 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32  eld>0 && pOp->p2
17620 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 46  >0 && pOp->p2+nF
17630 69 65 6c 64 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ield<=(p->nMem+1
17640 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31   - p->nCursor)+1
17650 20 29 3b 0a 20 20 70 44 61 74 61 30 20 3d 20 26   );.  pData0 = &
17660 61 4d 65 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20  aMem[nField];.  
17670 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 32  nField = pOp->p2
17680 3b 0a 20 20 70 4c 61 73 74 20 3d 20 26 70 44 61  ;.  pLast = &pDa
17690 74 61 30 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20  ta0[nField-1];. 
176a0 20 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70   file_format = p
176b0 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f  ->minWriteFileFo
176c0 72 6d 61 74 3b 0a 0a 20 20 2f 2a 20 49 64 65 6e  rmat;..  /* Iden
176d0 74 69 66 79 20 74 68 65 20 6f 75 74 70 75 74 20  tify the output 
176e0 72 65 67 69 73 74 65 72 20 2a 2f 0a 20 20 61 73  register */.  as
176f0 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f  sert( pOp->p3<pO
17700 70 2d 3e 70 31 20 7c 7c 20 70 4f 70 2d 3e 70 33  p->p1 || pOp->p3
17710 3e 3d 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70  >=pOp->p1+pOp->p
17720 32 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  2 );.  pOut = &a
17730 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
17740 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
17750 28 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a  (p, pOut);..  /*
17760 20 41 70 70 6c 79 20 74 68 65 20 72 65 71 75 65   Apply the reque
17770 73 74 65 64 20 61 66 66 69 6e 69 74 79 20 74 6f  sted affinity to
17780 20 61 6c 6c 20 69 6e 70 75 74 73 0a 20 20 2a 2f   all inputs.  */
17790 0a 20 20 61 73 73 65 72 74 28 20 70 44 61 74 61  .  assert( pData
177a0 30 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 69 66  0<=pLast );.  if
177b0 28 20 7a 41 66 66 69 6e 69 74 79 20 29 7b 0a 20  ( zAffinity ){. 
177c0 20 20 20 70 52 65 63 20 3d 20 70 44 61 74 61 30     pRec = pData0
177d0 3b 0a 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20  ;.    do{.      
177e0 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 52  applyAffinity(pR
177f0 65 63 2b 2b 2c 20 2a 28 7a 41 66 66 69 6e 69 74  ec++, *(zAffinit
17800 79 2b 2b 29 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  y++), encoding);
17810 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 7a  .      assert( z
17820 41 66 66 69 6e 69 74 79 5b 30 5d 3d 3d 30 20 7c  Affinity[0]==0 |
17830 7c 20 70 52 65 63 3c 3d 70 4c 61 73 74 20 29 3b  | pRec<=pLast );
17840 0a 20 20 20 20 7d 77 68 69 6c 65 28 20 7a 41 66  .    }while( zAf
17850 66 69 6e 69 74 79 5b 30 5d 20 29 3b 0a 20 20 7d  finity[0] );.  }
17860 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
17870 45 4e 41 42 4c 45 5f 4e 55 4c 4c 5f 54 52 49 4d  ENABLE_NULL_TRIM
17880 0a 20 20 2f 2a 20 4e 55 4c 4c 73 20 63 61 6e 20  .  /* NULLs can 
17890 62 65 20 73 61 66 65 6c 79 20 74 72 69 6d 6d 65  be safely trimme
178a0 64 20 66 72 6f 6d 20 74 68 65 20 65 6e 64 20 6f  d from the end o
178b0 66 20 74 68 65 20 72 65 63 6f 72 64 2c 20 61 73  f the record, as
178c0 20 6c 6f 6e 67 20 61 73 0a 20 20 2a 2a 20 61 73   long as.  ** as
178d0 20 74 68 65 20 73 63 68 65 6d 61 20 66 6f 72 6d   the schema form
178e0 61 74 20 69 73 20 32 20 6f 72 20 6d 6f 72 65 20  at is 2 or more 
178f0 61 6e 64 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20  and none of the 
17900 6f 6d 69 74 74 65 64 20 63 6f 6c 75 6d 6e 73 0a  omitted columns.
17910 20 20 2a 2a 20 68 61 76 65 20 61 20 6e 6f 6e 2d    ** have a non-
17920 4e 55 4c 4c 20 64 65 66 61 75 6c 74 20 76 61 6c  NULL default val
17930 75 65 2e 20 20 41 6c 73 6f 2c 20 74 68 65 20 72  ue.  Also, the r
17940 65 63 6f 72 64 20 6d 75 73 74 20 62 65 20 6c 65  ecord must be le
17950 66 74 20 77 69 74 68 0a 20 20 2a 2a 20 61 74 20  ft with.  ** at 
17960 6c 65 61 73 74 20 6f 6e 65 20 66 69 65 6c 64 2e  least one field.
17970 20 20 49 66 20 50 35 3e 30 20 74 68 65 6e 20 69    If P5>0 then i
17980 74 20 77 69 6c 6c 20 62 65 20 6f 6e 65 20 6d 6f  t will be one mo
17990 72 65 20 74 68 61 6e 20 74 68 65 0a 20 20 2a 2a  re than the.  **
179a0 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 72 69   index of the ri
179b0 67 68 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e 20  ght-most column 
179c0 77 69 74 68 20 61 20 6e 6f 6e 2d 4e 55 4c 4c 20  with a non-NULL 
179d0 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 2a 2f  default value */
179e0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29  .  if( pOp->p5 )
179f0 7b 0a 20 20 20 20 77 68 69 6c 65 28 20 28 70 4c  {.    while( (pL
17a00 61 73 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ast->flags & MEM
17a10 5f 4e 75 6c 6c 29 21 3d 30 20 26 26 20 6e 46 69  _Null)!=0 && nFi
17a20 65 6c 64 3e 70 4f 70 2d 3e 70 35 20 29 7b 0a 20  eld>pOp->p5 ){. 
17a30 20 20 20 20 20 70 4c 61 73 74 2d 2d 3b 0a 20 20       pLast--;.  
17a40 20 20 20 20 6e 46 69 65 6c 64 2d 2d 3b 0a 20 20      nField--;.  
17a50 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a    }.  }.#endif..
17a60 20 20 2f 2a 20 4c 6f 6f 70 20 74 68 72 6f 75 67    /* Loop throug
17a70 68 20 74 68 65 20 65 6c 65 6d 65 6e 74 73 20 74  h the elements t
17a80 68 61 74 20 77 69 6c 6c 20 6d 61 6b 65 20 75 70  hat will make up
17a90 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 66   the record to f
17aa0 69 67 75 72 65 0a 20 20 2a 2a 20 6f 75 74 20 68  igure.  ** out h
17ab0 6f 77 20 6d 75 63 68 20 73 70 61 63 65 20 69 73  ow much space is
17ac0 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68   required for th
17ad0 65 20 6e 65 77 20 72 65 63 6f 72 64 2e 0a 20 20  e new record..  
17ae0 2a 2f 0a 20 20 70 52 65 63 20 3d 20 70 4c 61 73  */.  pRec = pLas
17af0 74 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 61 73 73  t;.  do{.    ass
17b00 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
17b10 70 52 65 63 29 20 29 3b 0a 20 20 20 20 73 65 72  pRec) );.    ser
17b20 69 61 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69 74  ial_type = sqlit
17b30 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65  e3VdbeSerialType
17b40 28 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d  (pRec, file_form
17b50 61 74 2c 20 26 6c 65 6e 29 3b 0a 20 20 20 20 69  at, &len);.    i
17b60 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26  f( pRec->flags &
17b70 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20   MEM_Zero ){.   
17b80 20 20 20 69 66 28 20 73 65 72 69 61 6c 5f 74 79     if( serial_ty
17b90 70 65 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  pe==0 ){.       
17ba0 20 2f 2a 20 56 61 6c 75 65 73 20 77 69 74 68 20   /* Values with 
17bb0 4d 45 4d 5f 4e 75 6c 6c 20 61 6e 64 20 4d 45 4d  MEM_Null and MEM
17bc0 5f 5a 65 72 6f 20 61 72 65 20 63 72 65 61 74 65  _Zero are create
17bd0 64 20 62 79 20 78 43 6f 6c 75 6d 6e 20 76 69 72  d by xColumn vir
17be0 74 75 61 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20  tual.        ** 
17bf0 74 61 62 6c 65 20 6d 65 74 68 6f 64 73 20 74 68  table methods th
17c00 61 74 20 6e 65 76 65 72 20 69 6e 76 6f 6b 65 20  at never invoke 
17c10 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 78  sqlite3_result_x
17c20 78 78 78 78 28 29 20 77 68 69 6c 65 0a 20 20 20  xxxx() while.   
17c30 20 20 20 20 20 2a 2a 20 63 6f 6d 70 75 74 69 6e       ** computin
17c40 67 20 61 6e 20 75 6e 63 68 61 6e 67 69 6e 67 20  g an unchanging 
17c50 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 69 6e 20  column value in 
17c60 61 6e 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  an UPDATE statem
17c70 65 6e 74 2e 0a 20 20 20 20 20 20 20 20 2a 2a 20  ent..        ** 
17c80 47 69 76 65 20 73 75 63 68 20 76 61 6c 75 65 73  Give such values
17c90 20 61 20 73 70 65 63 69 61 6c 20 69 6e 74 65 72   a special inter
17ca0 6e 61 6c 2d 75 73 65 2d 6f 6e 6c 79 20 73 65 72  nal-use-only ser
17cb0 69 61 6c 2d 74 79 70 65 20 6f 66 20 31 30 0a 20  ial-type of 10. 
17cc0 20 20 20 20 20 20 20 2a 2a 20 73 6f 20 74 68 61         ** so tha
17cd0 74 20 74 68 65 79 20 63 61 6e 20 62 65 20 70 61  t they can be pa
17ce0 73 73 65 64 20 74 68 72 6f 75 67 68 20 74 6f 20  ssed through to 
17cf0 78 55 70 64 61 74 65 20 61 6e 64 20 68 61 76 65  xUpdate and have
17d00 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 20 74 72  .        ** a tr
17d10 75 65 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ue sqlite3_value
17d20 5f 6e 6f 63 68 61 6e 67 65 28 29 2e 20 2a 2f 0a  _nochange(). */.
17d30 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
17d40 70 4f 70 2d 3e 70 35 3d 3d 4f 50 46 4c 41 47 5f  pOp->p5==OPFLAG_
17d50 4e 4f 43 48 4e 47 5f 4d 41 47 49 43 20 7c 7c 20  NOCHNG_MAGIC || 
17d60 43 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a 20 20  CORRUPT_DB );.  
17d70 20 20 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70        serial_typ
17d80 65 20 3d 20 31 30 3b 0a 20 20 20 20 20 20 7d 65  e = 10;.      }e
17d90 6c 73 65 20 69 66 28 20 6e 44 61 74 61 20 29 7b  lse if( nData ){
17da0 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 71 6c  .        if( sql
17db0 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61 6e  ite3VdbeMemExpan
17dc0 64 42 6c 6f 62 28 70 52 65 63 29 20 29 20 67 6f  dBlob(pRec) ) go
17dd0 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20  to no_mem;.     
17de0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
17df0 6e 5a 65 72 6f 20 2b 3d 20 70 52 65 63 2d 3e 75  nZero += pRec->u
17e00 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20 20 20 20 20  .nZero;.        
17e10 6c 65 6e 20 2d 3d 20 70 52 65 63 2d 3e 75 2e 6e  len -= pRec->u.n
17e20 5a 65 72 6f 3b 0a 20 20 20 20 20 20 7d 0a 20 20  Zero;.      }.  
17e30 20 20 7d 0a 20 20 20 20 6e 44 61 74 61 20 2b 3d    }.    nData +=
17e40 20 6c 65 6e 3b 0a 20 20 20 20 74 65 73 74 63 61   len;.    testca
17e50 73 65 28 20 73 65 72 69 61 6c 5f 74 79 70 65 3d  se( serial_type=
17e60 3d 31 32 37 20 29 3b 0a 20 20 20 20 74 65 73 74  =127 );.    test
17e70 63 61 73 65 28 20 73 65 72 69 61 6c 5f 74 79 70  case( serial_typ
17e80 65 3d 3d 31 32 38 20 29 3b 0a 20 20 20 20 6e 48  e==128 );.    nH
17e90 64 72 20 2b 3d 20 73 65 72 69 61 6c 5f 74 79 70  dr += serial_typ
17ea0 65 3c 3d 31 32 37 20 3f 20 31 20 3a 20 73 71 6c  e<=127 ? 1 : sql
17eb0 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 73 65  ite3VarintLen(se
17ec0 72 69 61 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20  rial_type);.    
17ed0 70 52 65 63 2d 3e 75 54 65 6d 70 20 3d 20 73 65  pRec->uTemp = se
17ee0 72 69 61 6c 5f 74 79 70 65 3b 0a 20 20 20 20 69  rial_type;.    i
17ef0 66 28 20 70 52 65 63 3d 3d 70 44 61 74 61 30 20  f( pRec==pData0 
17f00 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 70 52 65  ) break;.    pRe
17f10 63 2d 2d 3b 0a 20 20 7d 77 68 69 6c 65 28 31 29  c--;.  }while(1)
17f20 3b 0a 0a 20 20 2f 2a 20 45 56 49 44 45 4e 43 45  ;..  /* EVIDENCE
17f30 2d 4f 46 3a 20 52 2d 32 32 35 36 34 2d 31 31 36  -OF: R-22564-116
17f40 34 37 20 54 68 65 20 68 65 61 64 65 72 20 62 65  47 The header be
17f50 67 69 6e 73 20 77 69 74 68 20 61 20 73 69 6e 67  gins with a sing
17f60 6c 65 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20 77  le varint.  ** w
17f70 68 69 63 68 20 64 65 74 65 72 6d 69 6e 65 73 20  hich determines 
17f80 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72  the total number
17f90 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65   of bytes in the
17fa0 20 68 65 61 64 65 72 2e 20 54 68 65 20 76 61 72   header. The var
17fb0 69 6e 74 0a 20 20 2a 2a 20 76 61 6c 75 65 20 69  int.  ** value i
17fc0 73 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68  s the size of th
17fd0 65 20 68 65 61 64 65 72 20 69 6e 20 62 79 74 65  e header in byte
17fe0 73 20 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20  s including the 
17ff0 73 69 7a 65 20 76 61 72 69 6e 74 0a 20 20 2a 2a  size varint.  **
18000 20 69 74 73 65 6c 66 2e 20 2a 2f 0a 20 20 74 65   itself. */.  te
18010 73 74 63 61 73 65 28 20 6e 48 64 72 3d 3d 31 32  stcase( nHdr==12
18020 36 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  6 );.  testcase(
18030 20 6e 48 64 72 3d 3d 31 32 37 20 29 3b 0a 20 20   nHdr==127 );.  
18040 69 66 28 20 6e 48 64 72 3c 3d 31 32 36 20 29 7b  if( nHdr<=126 ){
18050 0a 20 20 20 20 2f 2a 20 54 68 65 20 63 6f 6d 6d  .    /* The comm
18060 6f 6e 20 63 61 73 65 20 2a 2f 0a 20 20 20 20 6e  on case */.    n
18070 48 64 72 20 2b 3d 20 31 3b 0a 20 20 7d 65 6c 73  Hdr += 1;.  }els
18080 65 7b 0a 20 20 20 20 2f 2a 20 52 61 72 65 20 63  e{.    /* Rare c
18090 61 73 65 20 6f 66 20 61 20 72 65 61 6c 6c 79 20  ase of a really 
180a0 6c 61 72 67 65 20 68 65 61 64 65 72 20 2a 2f 0a  large header */.
180b0 20 20 20 20 6e 56 61 72 69 6e 74 20 3d 20 73 71      nVarint = sq
180c0 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e  lite3VarintLen(n
180d0 48 64 72 29 3b 0a 20 20 20 20 6e 48 64 72 20 2b  Hdr);.    nHdr +
180e0 3d 20 6e 56 61 72 69 6e 74 3b 0a 20 20 20 20 69  = nVarint;.    i
180f0 66 28 20 6e 56 61 72 69 6e 74 3c 73 71 6c 69 74  f( nVarint<sqlit
18100 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72  e3VarintLen(nHdr
18110 29 20 29 20 6e 48 64 72 2b 2b 3b 0a 20 20 7d 0a  ) ) nHdr++;.  }.
18120 20 20 6e 42 79 74 65 20 3d 20 6e 48 64 72 2b 6e    nByte = nHdr+n
18130 44 61 74 61 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65  Data;..  /* Make
18140 20 73 75 72 65 20 74 68 65 20 6f 75 74 70 75 74   sure the output
18150 20 72 65 67 69 73 74 65 72 20 68 61 73 20 61 20   register has a 
18160 62 75 66 66 65 72 20 6c 61 72 67 65 20 65 6e 6f  buffer large eno
18170 75 67 68 20 74 6f 20 73 74 6f 72 65 20 0a 20 20  ugh to store .  
18180 2a 2a 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72  ** the new recor
18190 64 2e 20 54 68 65 20 6f 75 74 70 75 74 20 72 65  d. The output re
181a0 67 69 73 74 65 72 20 28 70 4f 70 2d 3e 70 33 29  gister (pOp->p3)
181b0 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20   is not allowed 
181c0 74 6f 0a 20 20 2a 2a 20 62 65 20 6f 6e 65 20 6f  to.  ** be one o
181d0 66 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69  f the input regi
181e0 73 74 65 72 73 20 28 62 65 63 61 75 73 65 20 74  sters (because t
181f0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c  he following cal
18200 6c 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69 74 65  l to.  ** sqlite
18210 33 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64  3VdbeMemClearAnd
18220 52 65 73 69 7a 65 28 29 20 63 6f 75 6c 64 20 63  Resize() could c
18230 6c 6f 62 62 65 72 20 74 68 65 20 76 61 6c 75 65  lobber the value
18240 20 62 65 66 6f 72 65 20 69 74 20 69 73 20 75 73   before it is us
18250 65 64 29 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  ed)..  */.  if( 
18260 6e 42 79 74 65 2b 6e 5a 65 72 6f 3c 3d 70 4f 75  nByte+nZero<=pOu
18270 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 29 7b 0a 20  t->szMalloc ){. 
18280 20 20 20 2f 2a 20 54 68 65 20 6f 75 74 70 75 74     /* The output
18290 20 72 65 67 69 73 74 65 72 20 69 73 20 61 6c 72   register is alr
182a0 65 61 64 79 20 6c 61 72 67 65 20 65 6e 6f 75 67  eady large enoug
182b0 68 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 72 65  h to hold the re
182c0 63 6f 72 64 2e 0a 20 20 20 20 2a 2a 20 4e 6f 20  cord..    ** No 
182d0 65 72 72 6f 72 20 63 68 65 63 6b 73 20 6f 72 20  error checks or 
182e0 62 75 66 66 65 72 20 65 6e 6c 61 72 67 65 6d 65  buffer enlargeme
182f0 6e 74 20 69 73 20 72 65 71 75 69 72 65 64 20 2a  nt is required *
18300 2f 0a 20 20 20 20 70 4f 75 74 2d 3e 7a 20 3d 20  /.    pOut->z = 
18310 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3b 0a 20  pOut->zMalloc;. 
18320 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 4e   }else{.    /* N
18330 65 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 65  eed to make sure
18340 20 74 68 61 74 20 74 68 65 20 6f 75 74 70 75 74   that the output
18350 20 69 73 20 6e 6f 74 20 74 6f 6f 20 62 69 67 20   is not too big 
18360 61 6e 64 20 74 68 65 6e 20 65 6e 6c 61 72 67 65  and then enlarge
18370 0a 20 20 20 20 2a 2a 20 74 68 65 20 6f 75 74 70  .    ** the outp
18380 75 74 20 72 65 67 69 73 74 65 72 20 74 6f 20 68  ut register to h
18390 6f 6c 64 20 74 68 65 20 66 75 6c 6c 20 72 65 73  old the full res
183a0 75 6c 74 20 2a 2f 0a 20 20 20 20 69 66 28 20 6e  ult */.    if( n
183b0 42 79 74 65 2b 6e 5a 65 72 6f 3e 64 62 2d 3e 61  Byte+nZero>db->a
183c0 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
183d0 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20  IT_LENGTH] ){.  
183e0 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
183f0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
18400 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c  sqlite3VdbeMemCl
18410 65 61 72 41 6e 64 52 65 73 69 7a 65 28 70 4f 75  earAndResize(pOu
18420 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 29 20 29  t, (int)nByte) )
18430 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f  {.      goto no_
18440 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  mem;.    }.  }. 
18450 20 7a 4e 65 77 52 65 63 6f 72 64 20 3d 20 28 75   zNewRecord = (u
18460 38 20 2a 29 70 4f 75 74 2d 3e 7a 3b 0a 0a 20 20  8 *)pOut->z;..  
18470 2f 2a 20 57 72 69 74 65 20 74 68 65 20 72 65 63  /* Write the rec
18480 6f 72 64 20 2a 2f 0a 20 20 69 20 3d 20 70 75 74  ord */.  i = put
18490 56 61 72 69 6e 74 33 32 28 7a 4e 65 77 52 65 63  Varint32(zNewRec
184a0 6f 72 64 2c 20 6e 48 64 72 29 3b 0a 20 20 6a 20  ord, nHdr);.  j 
184b0 3d 20 6e 48 64 72 3b 0a 20 20 61 73 73 65 72 74  = nHdr;.  assert
184c0 28 20 70 44 61 74 61 30 3c 3d 70 4c 61 73 74 20  ( pData0<=pLast 
184d0 29 3b 0a 20 20 70 52 65 63 20 3d 20 70 44 61 74  );.  pRec = pDat
184e0 61 30 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 73 65  a0;.  do{.    se
184f0 72 69 61 6c 5f 74 79 70 65 20 3d 20 70 52 65 63  rial_type = pRec
18500 2d 3e 75 54 65 6d 70 3b 0a 20 20 20 20 2f 2a 20  ->uTemp;.    /* 
18510 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 30  EVIDENCE-OF: R-0
18520 36 35 32 39 2d 34 37 33 36 32 20 46 6f 6c 6c 6f  6529-47362 Follo
18530 77 69 6e 67 20 74 68 65 20 73 69 7a 65 20 76 61  wing the size va
18540 72 69 6e 74 20 61 72 65 20 6f 6e 65 20 6f 72 20  rint are one or 
18550 6d 6f 72 65 0a 20 20 20 20 2a 2a 20 61 64 64 69  more.    ** addi
18560 74 69 6f 6e 61 6c 20 76 61 72 69 6e 74 73 2c 20  tional varints, 
18570 6f 6e 65 20 70 65 72 20 63 6f 6c 75 6d 6e 2e 20  one per column. 
18580 2a 2f 0a 20 20 20 20 69 20 2b 3d 20 70 75 74 56  */.    i += putV
18590 61 72 69 6e 74 33 32 28 26 7a 4e 65 77 52 65 63  arint32(&zNewRec
185a0 6f 72 64 5b 69 5d 2c 20 73 65 72 69 61 6c 5f 74  ord[i], serial_t
185b0 79 70 65 29 3b 20 20 20 20 20 20 20 20 20 20 20  ype);           
185c0 20 2f 2a 20 73 65 72 69 61 6c 20 74 79 70 65 20   /* serial type 
185d0 2a 2f 0a 20 20 20 20 2f 2a 20 45 56 49 44 45 4e  */.    /* EVIDEN
185e0 43 45 2d 4f 46 3a 20 52 2d 36 34 35 33 36 2d 35  CE-OF: R-64536-5
185f0 31 37 32 38 20 54 68 65 20 76 61 6c 75 65 73 20  1728 The values 
18600 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20  for each column 
18610 69 6e 20 74 68 65 20 72 65 63 6f 72 64 0a 20 20  in the record.  
18620 20 20 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79    ** immediately
18630 20 66 6f 6c 6c 6f 77 20 74 68 65 20 68 65 61 64   follow the head
18640 65 72 2e 20 2a 2f 0a 20 20 20 20 6a 20 2b 3d 20  er. */.    j += 
18650 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
18660 6c 50 75 74 28 26 7a 4e 65 77 52 65 63 6f 72 64  lPut(&zNewRecord
18670 5b 6a 5d 2c 20 70 52 65 63 2c 20 73 65 72 69 61  [j], pRec, seria
18680 6c 5f 74 79 70 65 29 3b 20 2f 2a 20 63 6f 6e 74  l_type); /* cont
18690 65 6e 74 20 2a 2f 0a 20 20 7d 77 68 69 6c 65 28  ent */.  }while(
186a0 20 28 2b 2b 70 52 65 63 29 3c 3d 70 4c 61 73 74   (++pRec)<=pLast
186b0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3d   );.  assert( i=
186c0 3d 6e 48 64 72 20 29 3b 0a 20 20 61 73 73 65 72  =nHdr );.  asser
186d0 74 28 20 6a 3d 3d 6e 42 79 74 65 20 29 3b 0a 0a  t( j==nByte );..
186e0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
186f0 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
18700 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
18710 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f  nCursor) );.  pO
18720 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79  ut->n = (int)nBy
18730 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67  te;.  pOut->flag
18740 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 3b 0a 20 20  s = MEM_Blob;.  
18750 69 66 28 20 6e 5a 65 72 6f 20 29 7b 0a 20 20 20  if( nZero ){.   
18760 20 70 4f 75 74 2d 3e 75 2e 6e 5a 65 72 6f 20 3d   pOut->u.nZero =
18770 20 6e 5a 65 72 6f 3b 0a 20 20 20 20 70 4f 75 74   nZero;.    pOut
18780 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 5a  ->flags |= MEM_Z
18790 65 72 6f 3b 0a 20 20 7d 0a 20 20 52 45 47 49 53  ero;.  }.  REGIS
187a0 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
187b0 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50 44 41  3, pOut);.  UPDA
187c0 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
187d0 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
187e0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
187f0 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  unt P1 P2 * * *.
18800 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
18810 32 5d 3d 63 6f 75 6e 74 28 29 0a 2a 2a 0a 2a 2a  2]=count().**.**
18820 20 53 74 6f 72 65 20 74 68 65 20 6e 75 6d 62 65   Store the numbe
18830 72 20 6f 66 20 65 6e 74 72 69 65 73 20 28 61 6e  r of entries (an
18840 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 29 20   integer value) 
18850 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  in the table or 
18860 69 6e 64 65 78 20 0a 2a 2a 20 6f 70 65 6e 65 64  index .** opened
18870 20 62 79 20 63 75 72 73 6f 72 20 50 31 20 69 6e   by cursor P1 in
18880 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2f 0a   register P2.*/.
18890 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
188a0 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a 63  MIT_BTREECOUNT.c
188b0 61 73 65 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b 20  ase OP_Count: { 
188c0 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
188d0 2a 2f 0a 20 20 69 36 34 20 6e 45 6e 74 72 79 3b  */.  i64 nEntry;
188e0 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
188f0 73 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  sr;..  assert( p
18900 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
18910 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
18920 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 70  YPE_BTREE );.  p
18930 43 72 73 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b  Crsr = p->apCsr[
18940 70 4f 70 2d 3e 70 31 5d 2d 3e 75 63 2e 70 43 75  pOp->p1]->uc.pCu
18950 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20  rsor;.  assert( 
18960 70 43 72 73 72 20 29 3b 0a 20 20 6e 45 6e 74 72  pCrsr );.  nEntr
18970 79 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e  y = 0;  /* Not n
18980 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65  eeded.  Only use
18990 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77  d to silence a w
189a0 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72 63 20  arning. */.  rc 
189b0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6f  = sqlite3BtreeCo
189c0 75 6e 74 28 70 43 72 73 72 2c 20 26 6e 45 6e 74  unt(pCrsr, &nEnt
189d0 72 79 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  ry);.  if( rc ) 
189e0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
189f0 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 4f 75 74 20  o_error;.  pOut 
18a00 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
18a10 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74  (p, pOp);.  pOut
18a20 2d 3e 75 2e 69 20 3d 20 6e 45 6e 74 72 79 3b 0a  ->u.i = nEntry;.
18a30 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
18a40 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 61  f../* Opcode: Sa
18a50 76 65 70 6f 69 6e 74 20 50 31 20 2a 20 2a 20 50  vepoint P1 * * P
18a60 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c 20  4 *.**.** Open, 
18a70 72 65 6c 65 61 73 65 20 6f 72 20 72 6f 6c 6c 62  release or rollb
18a80 61 63 6b 20 74 68 65 20 73 61 76 65 70 6f 69 6e  ack the savepoin
18a90 74 20 6e 61 6d 65 64 20 62 79 20 70 61 72 61 6d  t named by param
18aa0 65 74 65 72 20 50 34 2c 20 64 65 70 65 6e 64 69  eter P4, dependi
18ab0 6e 67 0a 2a 2a 20 6f 6e 20 74 68 65 20 76 61 6c  ng.** on the val
18ac0 75 65 20 6f 66 20 50 31 2e 20 54 6f 20 6f 70 65  ue of P1. To ope
18ad0 6e 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e  n a new savepoin
18ae0 74 2c 20 50 31 3d 3d 30 2e 20 54 6f 20 72 65 6c  t, P1==0. To rel
18af0 65 61 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 6e  ease (commit) an
18b00 0a 2a 2a 20 65 78 69 73 74 69 6e 67 20 73 61 76  .** existing sav
18b10 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 31 2c 20 6f  epoint, P1==1, o
18b20 72 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e  r to rollback an
18b30 20 65 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f   existing savepo
18b40 69 6e 74 20 50 31 3d 3d 32 2e 0a 2a 2f 0a 63 61  int P1==2..*/.ca
18b50 73 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 3a  se OP_Savepoint:
18b60 20 7b 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20   {.  int p1;    
18b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b80 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f 66       /* Value of
18b90 20 50 31 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20   P1 operand */. 
18ba0 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
18bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18bc0 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 73 61 76 65   /* Name of save
18bd0 70 6f 69 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e  point */.  int n
18be0 4e 61 6d 65 3b 0a 20 20 53 61 76 65 70 6f 69 6e  Name;.  Savepoin
18bf0 74 20 2a 70 4e 65 77 3b 0a 20 20 53 61 76 65 70  t *pNew;.  Savep
18c00 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74  oint *pSavepoint
18c10 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70  ;.  Savepoint *p
18c20 54 6d 70 3b 0a 20 20 69 6e 74 20 69 53 61 76 65  Tmp;.  int iSave
18c30 70 6f 69 6e 74 3b 0a 20 20 69 6e 74 20 69 69 3b  point;.  int ii;
18c40 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31  ..  p1 = pOp->p1
18c50 3b 0a 20 20 7a 4e 61 6d 65 20 3d 20 70 4f 70 2d  ;.  zName = pOp-
18c60 3e 70 34 2e 7a 3b 0a 0a 20 20 2f 2a 20 41 73 73  >p4.z;..  /* Ass
18c70 65 72 74 20 74 68 61 74 20 74 68 65 20 70 31 20  ert that the p1 
18c80 70 61 72 61 6d 65 74 65 72 20 69 73 20 76 61 6c  parameter is val
18c90 69 64 2e 20 41 6c 73 6f 20 74 68 61 74 20 69 66  id. Also that if
18ca0 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65   there is no ope
18cb0 6e 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63 74 69  n.  ** transacti
18cc0 6f 6e 2c 20 74 68 65 6e 20 74 68 65 72 65 20 63  on, then there c
18cd0 61 6e 6e 6f 74 20 62 65 20 61 6e 79 20 73 61 76  annot be any sav
18ce0 65 70 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f 0a 20  epoints. .  */. 
18cf0 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61   assert( db->pSa
18d00 76 65 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20 64 62  vepoint==0 || db
18d10 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20  ->autoCommit==0 
18d20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31 3d  );.  assert( p1=
18d30 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e  =SAVEPOINT_BEGIN
18d40 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ||p1==SAVEPOINT_
18d50 52 45 4c 45 41 53 45 7c 7c 70 31 3d 3d 53 41 56  RELEASE||p1==SAV
18d60 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20  EPOINT_ROLLBACK 
18d70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  );.  assert( db-
18d80 3e 70 53 61 76 65 70 6f 69 6e 74 20 7c 7c 20 64  >pSavepoint || d
18d90 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  b->isTransaction
18da0 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a  Savepoint==0 );.
18db0 20 20 61 73 73 65 72 74 28 20 63 68 65 63 6b 53    assert( checkS
18dc0 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62  avepointCount(db
18dd0 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ) );.  assert( p
18de0 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 0a  ->bIsReader );..
18df0 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f    if( p1==SAVEPO
18e00 49 4e 54 5f 42 45 47 49 4e 20 29 7b 0a 20 20 20  INT_BEGIN ){.   
18e10 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 57 72   if( db->nVdbeWr
18e20 69 74 65 3e 30 20 29 7b 0a 20 20 20 20 20 20 2f  ite>0 ){.      /
18e30 2a 20 41 20 6e 65 77 20 73 61 76 65 70 6f 69 6e  * A new savepoin
18e40 74 20 63 61 6e 6e 6f 74 20 62 65 20 63 72 65 61  t cannot be crea
18e50 74 65 64 20 69 66 20 74 68 65 72 65 20 61 72 65  ted if there are
18e60 20 61 63 74 69 76 65 20 77 72 69 74 65 20 0a 20   active write . 
18e70 20 20 20 20 20 2a 2a 20 73 74 61 74 65 6d 65 6e       ** statemen
18e80 74 73 20 28 69 2e 65 2e 20 6f 70 65 6e 20 72 65  ts (i.e. open re
18e90 61 64 2f 77 72 69 74 65 20 69 6e 63 72 65 6d 65  ad/write increme
18ea0 6e 74 61 6c 20 62 6c 6f 62 20 68 61 6e 64 6c 65  ntal blob handle
18eb0 73 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  s)..      */.   
18ec0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
18ed0 72 6f 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20 6f  ror(p, "cannot o
18ee0 70 65 6e 20 73 61 76 65 70 6f 69 6e 74 20 2d 20  pen savepoint - 
18ef0 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69  SQL statements i
18f00 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20  n progress");.  
18f10 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
18f20 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  BUSY;.    }else{
18f30 0a 20 20 20 20 20 20 6e 4e 61 6d 65 20 3d 20 73  .      nName = s
18f40 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
18f50 4e 61 6d 65 29 3b 0a 0a 23 69 66 6e 64 65 66 20  Name);..#ifndef 
18f60 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
18f70 55 41 4c 54 41 42 4c 45 0a 20 20 20 20 20 20 2f  UALTABLE.      /
18f80 2a 20 54 68 69 73 20 63 61 6c 6c 20 69 73 20 4f  * This call is O
18f90 6b 20 65 76 65 6e 20 69 66 20 74 68 69 73 20 73  k even if this s
18fa0 61 76 65 70 6f 69 6e 74 20 69 73 20 61 63 74 75  avepoint is actu
18fb0 61 6c 6c 79 20 61 20 74 72 61 6e 73 61 63 74 69  ally a transacti
18fc0 6f 6e 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65  on.      ** save
18fd0 70 6f 69 6e 74 20 28 61 6e 64 20 74 68 65 72 65  point (and there
18fe0 66 6f 72 65 20 73 68 6f 75 6c 64 20 6e 6f 74 20  fore should not 
18ff0 70 72 6f 6d 70 74 20 78 53 61 76 65 70 6f 69 6e  prompt xSavepoin
19000 74 28 29 29 20 63 61 6c 6c 62 61 63 6b 73 2e 0a  t()) callbacks..
19010 20 20 20 20 20 20 2a 2a 20 49 66 20 74 68 69 73        ** If this
19020 20 69 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f   is a transactio
19030 6e 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e  n savepoint bein
19040 67 20 6f 70 65 6e 65 64 2c 20 69 74 20 69 73 20  g opened, it is 
19050 67 75 61 72 61 6e 74 65 65 64 0a 20 20 20 20 20  guaranteed.     
19060 20 2a 2a 20 74 68 61 74 20 74 68 65 20 64 62 2d   ** that the db-
19070 3e 61 56 54 72 61 6e 73 5b 5d 20 61 72 72 61 79  >aVTrans[] array
19080 20 69 73 20 65 6d 70 74 79 2e 20 20 2a 2f 0a 20   is empty.  */. 
19090 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d       assert( db-
190a0 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c  >autoCommit==0 |
190b0 7c 20 64 62 2d 3e 6e 56 54 72 61 6e 73 3d 3d 30  | db->nVTrans==0
190c0 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   );.      rc = s
190d0 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f  qlite3VtabSavepo
190e0 69 6e 74 28 64 62 2c 20 53 41 56 45 50 4f 49 4e  int(db, SAVEPOIN
190f0 54 5f 42 45 47 49 4e 2c 0a 20 20 20 20 20 20 20  T_BEGIN,.       
19100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19110 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 74           db->nSt
19120 61 74 65 6d 65 6e 74 2b 64 62 2d 3e 6e 53 61 76  atement+db->nSav
19130 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 69  epoint);.      i
19140 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
19150 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
19160 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64  e_to_error;.#end
19170 69 66 0a 0a 20 20 20 20 20 20 2f 2a 20 43 72 65  if..      /* Cre
19180 61 74 65 20 61 20 6e 65 77 20 73 61 76 65 70 6f  ate a new savepo
19190 69 6e 74 20 73 74 72 75 63 74 75 72 65 2e 20 2a  int structure. *
191a0 2f 0a 20 20 20 20 20 20 70 4e 65 77 20 3d 20 73  /.      pNew = s
191b0 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
191c0 77 4e 4e 28 64 62 2c 20 73 69 7a 65 6f 66 28 53  wNN(db, sizeof(S
191d0 61 76 65 70 6f 69 6e 74 29 2b 6e 4e 61 6d 65 2b  avepoint)+nName+
191e0 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4e  1);.      if( pN
191f0 65 77 20 29 7b 0a 20 20 20 20 20 20 20 20 70 4e  ew ){.        pN
19200 65 77 2d 3e 7a 4e 61 6d 65 20 3d 20 28 63 68 61  ew->zName = (cha
19210 72 20 2a 29 26 70 4e 65 77 5b 31 5d 3b 0a 20 20  r *)&pNew[1];.  
19220 20 20 20 20 20 20 6d 65 6d 63 70 79 28 70 4e 65        memcpy(pNe
19230 77 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 2c  w->zName, zName,
19240 20 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 0a   nName+1);.    .
19250 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68          /* If th
19260 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 20 74  ere is no open t
19270 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e  ransaction, then
19280 20 6d 61 72 6b 20 74 68 69 73 20 61 73 20 61 20   mark this as a 
19290 73 70 65 63 69 61 6c 0a 20 20 20 20 20 20 20 20  special.        
192a0 2a 2a 20 22 74 72 61 6e 73 61 63 74 69 6f 6e 20  ** "transaction 
192b0 73 61 76 65 70 6f 69 6e 74 22 2e 20 2a 2f 0a 20  savepoint". */. 
192c0 20 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61         if( db->a
192d0 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20  utoCommit ){.   
192e0 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43         db->autoC
192f0 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20 20  ommit = 0;.     
19300 20 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73       db->isTrans
19310 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20  actionSavepoint 
19320 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  = 1;.        }el
19330 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62  se{.          db
19340 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a  ->nSavepoint++;.
19350 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20          }..     
19360 20 20 20 2f 2a 20 4c 69 6e 6b 20 74 68 65 20 6e     /* Link the n
19370 65 77 20 73 61 76 65 70 6f 69 6e 74 20 69 6e 74  ew savepoint int
19380 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  o the database h
19390 61 6e 64 6c 65 27 73 20 6c 69 73 74 2e 20 2a 2f  andle's list. */
193a0 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 70  .        pNew->p
193b0 4e 65 78 74 20 3d 20 64 62 2d 3e 70 53 61 76 65  Next = db->pSave
193c0 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20 20 64  point;.        d
193d0 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20  b->pSavepoint = 
193e0 70 4e 65 77 3b 0a 20 20 20 20 20 20 20 20 70 4e  pNew;.        pN
193f0 65 77 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  ew->nDeferredCon
19400 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65  s = db->nDeferre
19410 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 20 20 70  dCons;.        p
19420 4e 65 77 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d  New->nDeferredIm
19430 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66  mCons = db->nDef
19440 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20  erredImmCons;.  
19450 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65      }.    }.  }e
19460 6c 73 65 7b 0a 20 20 20 20 69 53 61 76 65 70 6f  lse{.    iSavepo
19470 69 6e 74 20 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a  int = 0;..    /*
19480 20 46 69 6e 64 20 74 68 65 20 6e 61 6d 65 64 20   Find the named 
19490 73 61 76 65 70 6f 69 6e 74 2e 20 49 66 20 74 68  savepoint. If th
194a0 65 72 65 20 69 73 20 6e 6f 20 73 75 63 68 20 73  ere is no such s
194b0 61 76 65 70 6f 69 6e 74 2c 20 74 68 65 6e 20 61  avepoint, then a
194c0 6e 0a 20 20 20 20 2a 2a 20 61 6e 20 65 72 72 6f  n.    ** an erro
194d0 72 20 69 73 20 72 65 74 75 72 6e 65 64 20 74 6f  r is returned to
194e0 20 74 68 65 20 75 73 65 72 2e 20 20 2a 2f 0a 20   the user.  */. 
194f0 20 20 20 66 6f 72 28 0a 20 20 20 20 20 20 70 53     for(.      pS
19500 61 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 70  avepoint = db->p
19510 53 61 76 65 70 6f 69 6e 74 3b 20 0a 20 20 20 20  Savepoint; .    
19520 20 20 70 53 61 76 65 70 6f 69 6e 74 20 26 26 20    pSavepoint && 
19530 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 70  sqlite3StrICmp(p
19540 53 61 76 65 70 6f 69 6e 74 2d 3e 7a 4e 61 6d 65  Savepoint->zName
19550 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20  , zName);.      
19560 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61  pSavepoint = pSa
19570 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 0a 20  vepoint->pNext. 
19580 20 20 20 29 7b 0a 20 20 20 20 20 20 69 53 61 76     ){.      iSav
19590 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a  epoint++;.    }.
195a0 20 20 20 20 69 66 28 20 21 70 53 61 76 65 70 6f      if( !pSavepo
195b0 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  int ){.      sql
195c0 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
195d0 20 22 6e 6f 20 73 75 63 68 20 73 61 76 65 70 6f   "no such savepo
195e0 69 6e 74 3a 20 25 73 22 2c 20 7a 4e 61 6d 65 29  int: %s", zName)
195f0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  ;.      rc = SQL
19600 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d  ITE_ERROR;.    }
19610 65 6c 73 65 20 69 66 28 20 64 62 2d 3e 6e 56 64  else if( db->nVd
19620 62 65 57 72 69 74 65 3e 30 20 26 26 20 70 31 3d  beWrite>0 && p1=
19630 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41  =SAVEPOINT_RELEA
19640 53 45 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49  SE ){.      /* I
19650 74 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c  t is not possibl
19660 65 20 74 6f 20 72 65 6c 65 61 73 65 20 28 63 6f  e to release (co
19670 6d 6d 69 74 29 20 61 20 73 61 76 65 70 6f 69 6e  mmit) a savepoin
19680 74 20 69 66 20 74 68 65 72 65 20 61 72 65 20 0a  t if there are .
19690 20 20 20 20 20 20 2a 2a 20 61 63 74 69 76 65 20        ** active 
196a0 77 72 69 74 65 20 73 74 61 74 65 6d 65 6e 74 73  write statements
196b0 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
196c0 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f   sqlite3VdbeErro
196d0 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20 72 65 6c  r(p, "cannot rel
196e0 65 61 73 65 20 73 61 76 65 70 6f 69 6e 74 20 2d  ease savepoint -
196f0 20 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   ".             
19700 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53 51               "SQ
19710 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  L statements in 
19720 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20  progress");.    
19730 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55    rc = SQLITE_BU
19740 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 0a  SY;.    }else{..
19750 20 20 20 20 20 20 2f 2a 20 44 65 74 65 72 6d 69        /* Determi
19760 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ne whether or no
19770 74 20 74 68 69 73 20 69 73 20 61 20 74 72 61 6e  t this is a tran
19780 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e  saction savepoin
19790 74 2e 20 49 66 20 73 6f 2c 0a 20 20 20 20 20 20  t. If so,.      
197a0 2a 2a 20 61 6e 64 20 74 68 69 73 20 69 73 20 61  ** and this is a
197b0 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64   RELEASE command
197c0 2c 20 74 68 65 6e 20 74 68 65 20 63 75 72 72 65  , then the curre
197d0 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 0a  nt transaction .
197e0 20 20 20 20 20 20 2a 2a 20 69 73 20 63 6f 6d 6d        ** is comm
197f0 69 74 74 65 64 2e 20 0a 20 20 20 20 20 20 2a 2f  itted. .      */
19800 0a 20 20 20 20 20 20 69 6e 74 20 69 73 54 72 61  .      int isTra
19810 6e 73 61 63 74 69 6f 6e 20 3d 20 70 53 61 76 65  nsaction = pSave
19820 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3d 3d 30 20  point->pNext==0 
19830 26 26 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63  && db->isTransac
19840 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 0a 20  tionSavepoint;. 
19850 20 20 20 20 20 69 66 28 20 69 73 54 72 61 6e 73       if( isTrans
19860 61 63 74 69 6f 6e 20 26 26 20 70 31 3d 3d 53 41  action && p1==SA
19870 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20  VEPOINT_RELEASE 
19880 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28  ){.        if( (
19890 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
198a0 43 68 65 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d  CheckFk(p, 1))!=
198b0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
198c0 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65         goto vdbe
198d0 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20  _return;.       
198e0 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 61   }.        db->a
198f0 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20  utoCommit = 1;. 
19900 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74         if( sqlit
19910 65 33 56 64 62 65 48 61 6c 74 28 70 29 3d 3d 53  e3VdbeHalt(p)==S
19920 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20  QLITE_BUSY ){.  
19930 20 20 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20          p->pc = 
19940 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29  (int)(pOp - aOp)
19950 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  ;.          db->
19960 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a  autoCommit = 0;.
19970 20 20 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20            p->rc 
19980 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55  = rc = SQLITE_BU
19990 53 59 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f  SY;.          go
199a0 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
199b0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
199c0 20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74    db->isTransact
199d0 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20 30  ionSavepoint = 0
199e0 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 70  ;.        rc = p
199f0 2d 3e 72 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73  ->rc;.      }els
19a00 65 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69  e{.        int i
19a10 73 53 63 68 65 6d 61 43 68 61 6e 67 65 3b 0a 20  sSchemaChange;. 
19a20 20 20 20 20 20 20 20 69 53 61 76 65 70 6f 69 6e         iSavepoin
19a30 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69  t = db->nSavepoi
19a40 6e 74 20 2d 20 69 53 61 76 65 70 6f 69 6e 74 20  nt - iSavepoint 
19a50 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28  - 1;.        if(
19a60 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52   p1==SAVEPOINT_R
19a70 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20 20 20 20 20  OLLBACK ){.     
19a80 20 20 20 20 20 69 73 53 63 68 65 6d 61 43 68 61       isSchemaCha
19a90 6e 67 65 20 3d 20 28 64 62 2d 3e 6d 44 62 46 6c  nge = (db->mDbFl
19aa0 61 67 73 20 26 20 44 42 46 4c 41 47 5f 53 63 68  ags & DBFLAG_Sch
19ab0 65 6d 61 43 68 61 6e 67 65 29 21 3d 30 3b 0a 20  emaChange)!=0;. 
19ac0 20 20 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d           for(ii=
19ad0 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69  0; ii<db->nDb; i
19ae0 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  i++){.          
19af0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
19b00 72 65 65 54 72 69 70 41 6c 6c 43 75 72 73 6f 72  reeTripAllCursor
19b10 73 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42  s(db->aDb[ii].pB
19b20 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t,.             
19b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b40 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45            SQLITE
19b50 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 2c  _ABORT_ROLLBACK,
19b60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b80 20 20 20 20 20 20 20 20 69 73 53 63 68 65 6d 61          isSchema
19b90 43 68 61 6e 67 65 3d 3d 30 29 3b 0a 20 20 20 20  Change==0);.    
19ba0 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d          if( rc!=
19bb0 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
19bc0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
19bd0 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  ror;.          }
19be0 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
19bf0 20 20 20 20 20 20 20 20 20 20 69 73 53 63 68 65            isSche
19c00 6d 61 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20  maChange = 0;.  
19c10 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
19c20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d  for(ii=0; ii<db-
19c30 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20  >nDb; ii++){.   
19c40 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
19c50 74 65 33 42 74 72 65 65 53 61 76 65 70 6f 69 6e  te3BtreeSavepoin
19c60 74 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42  t(db->aDb[ii].pB
19c70 74 2c 20 70 31 2c 20 69 53 61 76 65 70 6f 69 6e  t, p1, iSavepoin
19c80 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66  t);.          if
19c90 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
19ca0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 67  ){.            g
19cb0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
19cc0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20  _error;.        
19cd0 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20    }.        }.  
19ce0 20 20 20 20 20 20 69 66 28 20 69 73 53 63 68 65        if( isSche
19cf0 6d 61 43 68 61 6e 67 65 20 29 7b 0a 20 20 20 20  maChange ){.    
19d00 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 78 70        sqlite3Exp
19d10 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65  irePreparedState
19d20 6d 65 6e 74 73 28 64 62 2c 20 30 29 3b 0a 20 20  ments(db, 0);.  
19d30 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 52          sqlite3R
19d40 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66  esetAllSchemasOf
19d50 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a  Connection(db);.
19d60 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6d 44            db->mD
19d70 62 46 6c 61 67 73 20 7c 3d 20 44 42 46 4c 41 47  bFlags |= DBFLAG
19d80 5f 53 63 68 65 6d 61 43 68 61 6e 67 65 3b 0a 20  _SchemaChange;. 
19d90 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
19da0 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 52 65 67  .  .      /* Reg
19db0 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68  ardless of wheth
19dc0 65 72 20 74 68 69 73 20 69 73 20 61 20 52 45 4c  er this is a REL
19dd0 45 41 53 45 20 6f 72 20 52 4f 4c 4c 42 41 43 4b  EASE or ROLLBACK
19de0 2c 20 64 65 73 74 72 6f 79 20 61 6c 6c 20 0a 20  , destroy all . 
19df0 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e       ** savepoin
19e00 74 73 20 6e 65 73 74 65 64 20 69 6e 73 69 64 65  ts nested inside
19e10 20 6f 66 20 74 68 65 20 73 61 76 65 70 6f 69 6e   of the savepoin
19e20 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64  t being operated
19e30 20 6f 6e 2e 20 2a 2f 0a 20 20 20 20 20 20 77 68   on. */.      wh
19e40 69 6c 65 28 20 64 62 2d 3e 70 53 61 76 65 70 6f  ile( db->pSavepo
19e50 69 6e 74 21 3d 70 53 61 76 65 70 6f 69 6e 74 20  int!=pSavepoint 
19e60 29 7b 0a 20 20 20 20 20 20 20 20 70 54 6d 70 20  ){.        pTmp 
19e70 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  = db->pSavepoint
19e80 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53  ;.        db->pS
19e90 61 76 65 70 6f 69 6e 74 20 3d 20 70 54 6d 70 2d  avepoint = pTmp-
19ea0 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 20 20  >pNext;.        
19eb0 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
19ec0 2c 20 70 54 6d 70 29 3b 0a 20 20 20 20 20 20 20  , pTmp);.       
19ed0 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d   db->nSavepoint-
19ee0 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  -;.      }..    
19ef0 20 20 2f 2a 20 49 66 20 69 74 20 69 73 20 61 20    /* If it is a 
19f00 52 45 4c 45 41 53 45 2c 20 74 68 65 6e 20 64 65  RELEASE, then de
19f10 73 74 72 6f 79 20 74 68 65 20 73 61 76 65 70 6f  stroy the savepo
19f20 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74  int being operat
19f30 65 64 20 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20  ed on .      ** 
19f40 74 6f 6f 2e 20 49 66 20 69 74 20 69 73 20 61 20  too. If it is a 
19f50 52 4f 4c 4c 42 41 43 4b 20 54 4f 2c 20 74 68 65  ROLLBACK TO, the
19f60 6e 20 73 65 74 20 74 68 65 20 6e 75 6d 62 65 72  n set the number
19f70 20 6f 66 20 64 65 66 65 72 72 65 64 20 0a 20 20   of deferred .  
19f80 20 20 20 20 2a 2a 20 63 6f 6e 73 74 72 61 69 6e      ** constrain
19f90 74 20 76 69 6f 6c 61 74 69 6f 6e 73 20 70 72 65  t violations pre
19fa0 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61  sent in the data
19fb0 62 61 73 65 20 74 6f 20 74 68 65 20 76 61 6c 75  base to the valu
19fc0 65 20 73 74 6f 72 65 64 0a 20 20 20 20 20 20 2a  e stored.      *
19fd0 2a 20 77 68 65 6e 20 74 68 65 20 73 61 76 65 70  * when the savep
19fe0 6f 69 6e 74 20 77 61 73 20 63 72 65 61 74 65 64  oint was created
19ff0 2e 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20  .  */.      if( 
1a000 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45  p1==SAVEPOINT_RE
1a010 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20  LEASE ){.       
1a020 20 61 73 73 65 72 74 28 20 70 53 61 76 65 70 6f   assert( pSavepo
1a030 69 6e 74 3d 3d 64 62 2d 3e 70 53 61 76 65 70 6f  int==db->pSavepo
1a040 69 6e 74 20 29 3b 0a 20 20 20 20 20 20 20 20 64  int );.        d
1a050 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20  b->pSavepoint = 
1a060 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78  pSavepoint->pNex
1a070 74 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  t;.        sqlit
1a080 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 53 61  e3DbFree(db, pSa
1a090 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20  vepoint);.      
1a0a0 20 20 69 66 28 20 21 69 73 54 72 61 6e 73 61 63    if( !isTransac
1a0b0 74 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20  tion ){.        
1a0c0 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74    db->nSavepoint
1a0d0 2d 2d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  --;.        }.  
1a0e0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1a0f0 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64     db->nDeferred
1a100 43 6f 6e 73 20 3d 20 70 53 61 76 65 70 6f 69 6e  Cons = pSavepoin
1a110 74 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  t->nDeferredCons
1a120 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 44  ;.        db->nD
1a130 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d  eferredImmCons =
1a140 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65   pSavepoint->nDe
1a150 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20  ferredImmCons;. 
1a160 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 69 66       }..      if
1a170 28 20 21 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  ( !isTransaction
1a180 20 7c 7c 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e   || p1==SAVEPOIN
1a190 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20 20  T_ROLLBACK ){.  
1a1a0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1a1b0 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28  e3VtabSavepoint(
1a1c0 64 62 2c 20 70 31 2c 20 69 53 61 76 65 70 6f 69  db, p1, iSavepoi
1a1d0 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  nt);.        if(
1a1e0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
1a1f0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1a200 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
1a210 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66  }.    }.  }.  if
1a220 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
1a230 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1a240 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1a250 4f 70 63 6f 64 65 3a 20 41 75 74 6f 43 6f 6d 6d  Opcode: AutoComm
1a260 69 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  it P1 P2 * * *.*
1a270 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 64 61 74  *.** Set the dat
1a280 61 62 61 73 65 20 61 75 74 6f 2d 63 6f 6d 6d 69  abase auto-commi
1a290 74 20 66 6c 61 67 20 74 6f 20 50 31 20 28 31 20  t flag to P1 (1 
1a2a0 6f 72 20 30 29 2e 20 49 66 20 50 32 20 69 73 20  or 0). If P2 is 
1a2b0 74 72 75 65 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61  true, roll.** ba
1a2c0 63 6b 20 61 6e 79 20 63 75 72 72 65 6e 74 6c 79  ck any currently
1a2d0 20 61 63 74 69 76 65 20 62 74 72 65 65 20 74 72   active btree tr
1a2e0 61 6e 73 61 63 74 69 6f 6e 73 2e 20 49 66 20 74  ansactions. If t
1a2f0 68 65 72 65 20 61 72 65 20 61 6e 79 20 61 63 74  here are any act
1a300 69 76 65 0a 2a 2a 20 56 4d 73 20 28 61 70 61 72  ive.** VMs (apar
1a310 74 20 66 72 6f 6d 20 74 68 69 73 20 6f 6e 65 29  t from this one)
1a320 2c 20 74 68 65 6e 20 61 20 52 4f 4c 4c 42 41 43  , then a ROLLBAC
1a330 4b 20 66 61 69 6c 73 2e 20 20 41 20 43 4f 4d 4d  K fails.  A COMM
1a340 49 54 20 66 61 69 6c 73 20 69 66 0a 2a 2a 20 74  IT fails if.** t
1a350 68 65 72 65 20 61 72 65 20 61 63 74 69 76 65 20  here are active 
1a360 77 72 69 74 69 6e 67 20 56 4d 73 20 6f 72 20 61  writing VMs or a
1a370 63 74 69 76 65 20 56 4d 73 20 74 68 61 74 20 75  ctive VMs that u
1a380 73 65 20 73 68 61 72 65 64 20 63 61 63 68 65 2e  se shared cache.
1a390 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74  .**.** This inst
1a3a0 72 75 63 74 69 6f 6e 20 63 61 75 73 65 73 20 74  ruction causes t
1a3b0 68 65 20 56 4d 20 74 6f 20 68 61 6c 74 2e 0a 2a  he VM to halt..*
1a3c0 2f 0a 63 61 73 65 20 4f 50 5f 41 75 74 6f 43 6f  /.case OP_AutoCo
1a3d0 6d 6d 69 74 3a 20 7b 0a 20 20 69 6e 74 20 64 65  mmit: {.  int de
1a3e0 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b  siredAutoCommit;
1a3f0 0a 20 20 69 6e 74 20 69 52 6f 6c 6c 62 61 63 6b  .  int iRollback
1a400 3b 0a 0a 20 20 64 65 73 69 72 65 64 41 75 74 6f  ;..  desiredAuto
1a410 43 6f 6d 6d 69 74 20 3d 20 70 4f 70 2d 3e 70 31  Commit = pOp->p1
1a420 3b 0a 20 20 69 52 6f 6c 6c 62 61 63 6b 20 3d 20  ;.  iRollback = 
1a430 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72  pOp->p2;.  asser
1a440 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  t( desiredAutoCo
1a450 6d 6d 69 74 3d 3d 31 20 7c 7c 20 64 65 73 69 72  mmit==1 || desir
1a460 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20  edAutoCommit==0 
1a470 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65 73  );.  assert( des
1a480 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d  iredAutoCommit==
1a490 31 20 7c 7c 20 69 52 6f 6c 6c 62 61 63 6b 3d 3d  1 || iRollback==
1a4a0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64  0 );.  assert( d
1a4b0 62 2d 3e 6e 56 64 62 65 41 63 74 69 76 65 3e 30  b->nVdbeActive>0
1a4c0 20 29 3b 20 20 2f 2a 20 41 74 20 6c 65 61 73 74   );  /* At least
1a4d0 20 74 68 69 73 20 6f 6e 65 20 56 4d 20 69 73 20   this one VM is 
1a4e0 61 63 74 69 76 65 20 2a 2f 0a 20 20 61 73 73 65  active */.  asse
1a4f0 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
1a500 20 29 3b 0a 0a 20 20 69 66 28 20 64 65 73 69 72   );..  if( desir
1a510 65 64 41 75 74 6f 43 6f 6d 6d 69 74 21 3d 64 62  edAutoCommit!=db
1a520 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a  ->autoCommit ){.
1a530 20 20 20 20 69 66 28 20 69 52 6f 6c 6c 62 61 63      if( iRollbac
1a540 6b 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  k ){.      asser
1a550 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  t( desiredAutoCo
1a560 6d 6d 69 74 3d 3d 31 20 29 3b 0a 20 20 20 20 20  mmit==1 );.     
1a570 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b   sqlite3Rollback
1a580 41 6c 6c 28 64 62 2c 20 53 51 4c 49 54 45 5f 41  All(db, SQLITE_A
1a590 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 29 3b 0a  BORT_ROLLBACK);.
1a5a0 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
1a5b0 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 7d 65  mmit = 1;.    }e
1a5c0 6c 73 65 20 69 66 28 20 64 65 73 69 72 65 64 41  lse if( desiredA
1a5d0 75 74 6f 43 6f 6d 6d 69 74 20 26 26 20 64 62 2d  utoCommit && db-
1a5e0 3e 6e 56 64 62 65 57 72 69 74 65 3e 30 20 29 7b  >nVdbeWrite>0 ){
1a5f0 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 69  .      /* If thi
1a600 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d  s instruction im
1a610 70 6c 65 6d 65 6e 74 73 20 61 20 43 4f 4d 4d 49  plements a COMMI
1a620 54 20 61 6e 64 20 6f 74 68 65 72 20 56 4d 73 20  T and other VMs 
1a630 61 72 65 20 77 72 69 74 69 6e 67 0a 20 20 20 20  are writing.    
1a640 20 20 2a 2a 20 72 65 74 75 72 6e 20 61 6e 20 65    ** return an e
1a650 72 72 6f 72 20 69 6e 64 69 63 61 74 69 6e 67 20  rror indicating 
1a660 74 68 61 74 20 74 68 65 20 6f 74 68 65 72 20 56  that the other V
1a670 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65  Ms must complete
1a680 20 66 69 72 73 74 2e 20 0a 20 20 20 20 20 20 2a   first. .      *
1a690 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  /.      sqlite3V
1a6a0 64 62 65 45 72 72 6f 72 28 70 2c 20 22 63 61 6e  dbeError(p, "can
1a6b0 6e 6f 74 20 63 6f 6d 6d 69 74 20 74 72 61 6e 73  not commit trans
1a6c0 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20 20  action - ".     
1a6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a6e0 20 20 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d       "SQL statem
1a6f0 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73  ents in progress
1a700 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53  ");.      rc = S
1a710 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20  QLITE_BUSY;.    
1a720 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
1a730 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d  _to_error;.    }
1a740 65 6c 73 65 20 69 66 28 20 28 72 63 20 3d 20 73  else if( (rc = s
1a750 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 46  qlite3VdbeCheckF
1a760 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49 54 45  k(p, 1))!=SQLITE
1a770 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  _OK ){.      got
1a780 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
1a790 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1a7a0 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
1a7b0 20 28 75 38 29 64 65 73 69 72 65 64 41 75 74 6f   (u8)desiredAuto
1a7c0 43 6f 6d 6d 69 74 3b 0a 20 20 20 20 7d 0a 20 20  Commit;.    }.  
1a7d0 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
1a7e0 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45  eHalt(p)==SQLITE
1a7f0 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 70  _BUSY ){.      p
1a800 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f 70  ->pc = (int)(pOp
1a810 20 2d 20 61 4f 70 29 3b 0a 20 20 20 20 20 20 64   - aOp);.      d
1a820 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
1a830 28 75 38 29 28 31 2d 64 65 73 69 72 65 64 41 75  (u8)(1-desiredAu
1a840 74 6f 43 6f 6d 6d 69 74 29 3b 0a 20 20 20 20 20  toCommit);.     
1a850 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51   p->rc = rc = SQ
1a860 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20  LITE_BUSY;.     
1a870 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
1a880 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73  n;.    }.    ass
1a890 65 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d  ert( db->nStatem
1a8a0 65 6e 74 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71  ent==0 );.    sq
1a8b0 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f  lite3CloseSavepo
1a8c0 69 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 69 66  ints(db);.    if
1a8d0 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f  ( p->rc==SQLITE_
1a8e0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  OK ){.      rc =
1a8f0 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20   SQLITE_DONE;.  
1a900 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
1a910 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
1a920 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f  ;.    }.    goto
1a930 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
1a940 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74  }else{.    sqlit
1a950 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 0a 20  e3VdbeError(p,. 
1a960 20 20 20 20 20 20 20 28 21 64 65 73 69 72 65 64         (!desired
1a970 41 75 74 6f 43 6f 6d 6d 69 74 29 3f 22 63 61 6e  AutoCommit)?"can
1a980 6e 6f 74 20 73 74 61 72 74 20 61 20 74 72 61 6e  not start a tran
1a990 73 61 63 74 69 6f 6e 20 77 69 74 68 69 6e 20 61  saction within a
1a9a0 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 3a 28 0a   transaction":(.
1a9b0 20 20 20 20 20 20 20 20 28 69 52 6f 6c 6c 62 61          (iRollba
1a9c0 63 6b 29 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c  ck)?"cannot roll
1a9d0 62 61 63 6b 20 2d 20 6e 6f 20 74 72 61 6e 73 61  back - no transa
1a9e0 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22  ction is active"
1a9f0 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :.              
1aa00 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 63 6f 6d       "cannot com
1aa10 6d 69 74 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63  mit - no transac
1aa20 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22 29  tion is active")
1aa30 29 3b 0a 20 20 20 20 20 20 20 20 20 0a 20 20 20  );.         .   
1aa40 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
1aa50 4f 52 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f  OR;.    goto abo
1aa60 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1aa70 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
1aa80 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61 6e  ./* Opcode: Tran
1aa90 73 61 63 74 69 6f 6e 20 50 31 20 50 32 20 50 33  saction P1 P2 P3
1aaa0 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42 65 67   P4 P5.**.** Beg
1aab0 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  in a transaction
1aac0 20 6f 6e 20 64 61 74 61 62 61 73 65 20 50 31 20   on database P1 
1aad0 69 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  if a transaction
1aae0 20 69 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 0a   is not already.
1aaf0 2a 2a 20 61 63 74 69 76 65 2e 0a 2a 2a 20 49 66  ** active..** If
1ab00 20 50 32 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c   P2 is non-zero,
1ab10 20 74 68 65 6e 20 61 20 77 72 69 74 65 2d 74 72   then a write-tr
1ab20 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61  ansaction is sta
1ab30 72 74 65 64 2c 20 6f 72 20 69 66 20 61 20 0a 2a  rted, or if a .*
1ab40 2a 20 72 65 61 64 2d 74 72 61 6e 73 61 63 74 69  * read-transacti
1ab50 6f 6e 20 69 73 20 61 6c 72 65 61 64 79 20 61 63  on is already ac
1ab60 74 69 76 65 2c 20 69 74 20 69 73 20 75 70 67 72  tive, it is upgr
1ab70 61 64 65 64 20 74 6f 20 61 20 77 72 69 74 65 2d  aded to a write-
1ab80 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2a 20  transaction..** 
1ab90 49 66 20 50 32 20 69 73 20 7a 65 72 6f 2c 20 74  If P2 is zero, t
1aba0 68 65 6e 20 61 20 72 65 61 64 2d 74 72 61 6e 73  hen a read-trans
1abb0 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65  action is starte
1abc0 64 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74  d..**.** P1 is t
1abd0 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
1abe0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6f 6e  database file on
1abf0 20 77 68 69 63 68 20 74 68 65 20 74 72 61 6e 73   which the trans
1ac00 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 73 74 61  action is.** sta
1ac10 72 74 65 64 2e 20 20 49 6e 64 65 78 20 30 20 69  rted.  Index 0 i
1ac20 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  s the main datab
1ac30 61 73 65 20 66 69 6c 65 20 61 6e 64 20 69 6e 64  ase file and ind
1ac40 65 78 20 31 20 69 73 20 74 68 65 0a 2a 2a 20 66  ex 1 is the.** f
1ac50 69 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65 6d  ile used for tem
1ac60 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20 20  porary tables.  
1ac70 49 6e 64 69 63 65 73 20 6f 66 20 32 20 6f 72 20  Indices of 2 or 
1ac80 6d 6f 72 65 20 61 72 65 20 75 73 65 64 20 66 6f  more are used fo
1ac90 72 0a 2a 2a 20 61 74 74 61 63 68 65 64 20 64 61  r.** attached da
1aca0 74 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 49  tabases..**.** I
1acb0 66 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61  f a write-transa
1acc0 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64  ction is started
1acd0 20 61 6e 64 20 74 68 65 20 56 64 62 65 2e 75 73   and the Vdbe.us
1ace0 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 66 6c  esStmtJournal fl
1acf0 61 67 20 69 73 0a 2a 2a 20 74 72 75 65 20 28 74  ag is.** true (t
1ad00 68 69 73 20 66 6c 61 67 20 69 73 20 73 65 74 20  his flag is set 
1ad10 69 66 20 74 68 65 20 56 64 62 65 20 6d 61 79 20  if the Vdbe may 
1ad20 6d 6f 64 69 66 79 20 6d 6f 72 65 20 74 68 61 6e  modify more than
1ad30 20 6f 6e 65 20 72 6f 77 20 61 6e 64 20 6d 61 79   one row and may
1ad40 0a 2a 2a 20 74 68 72 6f 77 20 61 6e 20 41 42 4f  .** throw an ABO
1ad50 52 54 20 65 78 63 65 70 74 69 6f 6e 29 2c 20 61  RT exception), a
1ad60 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
1ad70 61 63 74 69 6f 6e 20 6d 61 79 20 61 6c 73 6f 20  action may also 
1ad80 62 65 20 6f 70 65 6e 65 64 2e 0a 2a 2a 20 4d 6f  be opened..** Mo
1ad90 72 65 20 73 70 65 63 69 66 69 63 61 6c 6c 79 2c  re specifically,
1ada0 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61   a statement tra
1adb0 6e 73 61 63 74 69 6f 6e 20 69 73 20 6f 70 65 6e  nsaction is open
1adc0 65 64 20 69 66 66 20 74 68 65 20 64 61 74 61 62  ed iff the datab
1add0 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f  ase.** connectio
1ade0 6e 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 6e  n is currently n
1adf0 6f 74 20 69 6e 20 61 75 74 6f 63 6f 6d 6d 69 74  ot in autocommit
1ae00 20 6d 6f 64 65 2c 20 6f 72 20 69 66 20 74 68 65   mode, or if the
1ae10 72 65 20 61 72 65 20 6f 74 68 65 72 0a 2a 2a 20  re are other.** 
1ae20 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74  active statement
1ae30 73 2e 20 41 20 73 74 61 74 65 6d 65 6e 74 20 74  s. A statement t
1ae40 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c 6c 6f 77  ransaction allow
1ae50 73 20 74 68 65 20 63 68 61 6e 67 65 73 20 6d 61  s the changes ma
1ae60 64 65 20 62 79 20 74 68 69 73 0a 2a 2a 20 56 44  de by this.** VD
1ae70 42 45 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20  BE to be rolled 
1ae80 62 61 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72  back after an er
1ae90 72 6f 72 20 77 69 74 68 6f 75 74 20 68 61 76 69  ror without havi
1aea0 6e 67 20 74 6f 20 72 6f 6c 6c 20 62 61 63 6b 20  ng to roll back 
1aeb0 74 68 65 0a 2a 2a 20 65 6e 74 69 72 65 20 74 72  the.** entire tr
1aec0 61 6e 73 61 63 74 69 6f 6e 2e 20 49 66 20 6e 6f  ansaction. If no
1aed0 20 65 72 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e   error is encoun
1aee0 74 65 72 65 64 2c 20 74 68 65 20 73 74 61 74 65  tered, the state
1aef0 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
1af00 0a 2a 2a 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74  .** will automat
1af10 69 63 61 6c 6c 79 20 63 6f 6d 6d 69 74 20 77 68  ically commit wh
1af20 65 6e 20 74 68 65 20 56 44 42 45 20 68 61 6c 74  en the VDBE halt
1af30 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d  s..**.** If P5!=
1af40 30 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f  0 then this opco
1af50 64 65 20 61 6c 73 6f 20 63 68 65 63 6b 73 20 74  de also checks t
1af60 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65  he schema cookie
1af70 20 61 67 61 69 6e 73 74 20 50 33 0a 2a 2a 20 61   against P3.** a
1af80 6e 64 20 74 68 65 20 73 63 68 65 6d 61 20 67 65  nd the schema ge
1af90 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72  neration counter
1afa0 20 61 67 61 69 6e 73 74 20 50 34 2e 0a 2a 2a 20   against P4..** 
1afb0 54 68 65 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67  The cookie chang
1afc0 65 73 20 69 74 73 20 76 61 6c 75 65 20 77 68 65  es its value whe
1afd0 6e 65 76 65 72 20 74 68 65 20 64 61 74 61 62 61  never the databa
1afe0 73 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65  se schema change
1aff0 73 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61  s..** This opera
1b000 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20  tion is used to 
1b010 64 65 74 65 63 74 20 77 68 65 6e 20 74 68 61 74  detect when that
1b020 20 74 68 65 20 63 6f 6f 6b 69 65 20 68 61 73 20   the cookie has 
1b030 63 68 61 6e 67 65 64 0a 2a 2a 20 61 6e 64 20 74  changed.** and t
1b040 68 61 74 20 74 68 65 20 63 75 72 72 65 6e 74 20  hat the current 
1b050 70 72 6f 63 65 73 73 20 6e 65 65 64 73 20 74 6f  process needs to
1b060 20 72 65 72 65 61 64 20 74 68 65 20 73 63 68 65   reread the sche
1b070 6d 61 2e 20 20 49 66 20 74 68 65 20 73 63 68 65  ma.  If the sche
1b080 6d 61 0a 2a 2a 20 63 6f 6f 6b 69 65 20 69 6e 20  ma.** cookie in 
1b090 50 33 20 64 69 66 66 65 72 73 20 66 72 6f 6d 20  P3 differs from 
1b0a0 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69  the schema cooki
1b0b0 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  e in the databas
1b0c0 65 20 68 65 61 64 65 72 20 6f 72 0a 2a 2a 20 69  e header or.** i
1b0d0 66 20 74 68 65 20 73 63 68 65 6d 61 20 67 65 6e  f the schema gen
1b0e0 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20  eration counter 
1b0f0 69 6e 20 50 34 20 64 69 66 66 65 72 73 20 66 72  in P4 differs fr
1b100 6f 6d 20 74 68 65 20 63 75 72 72 65 6e 74 0a 2a  om the current.*
1b110 2a 20 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75  * generation cou
1b120 6e 74 65 72 2c 20 74 68 65 6e 20 61 6e 20 53 51  nter, then an SQ
1b130 4c 49 54 45 5f 53 43 48 45 4d 41 20 65 72 72 6f  LITE_SCHEMA erro
1b140 72 20 69 73 20 72 61 69 73 65 64 20 61 6e 64 20  r is raised and 
1b150 65 78 65 63 75 74 69 6f 6e 0a 2a 2a 20 68 61 6c  execution.** hal
1b160 74 73 2e 20 20 54 68 65 20 73 71 6c 69 74 65 33  ts.  The sqlite3
1b170 5f 73 74 65 70 28 29 20 77 72 61 70 70 65 72 20  _step() wrapper 
1b180 66 75 6e 63 74 69 6f 6e 20 6d 69 67 68 74 20 74  function might t
1b190 68 65 6e 20 72 65 70 72 65 70 61 72 65 20 74 68  hen reprepare th
1b1a0 65 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 61  e.** statement a
1b1b0 6e 64 20 72 65 72 75 6e 20 69 74 20 66 72 6f 6d  nd rerun it from
1b1c0 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 0a   the beginning..
1b1d0 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 72 61 6e 73  */.case OP_Trans
1b1e0 61 63 74 69 6f 6e 3a 20 7b 0a 20 20 42 74 72 65  action: {.  Btre
1b1f0 65 20 2a 70 42 74 3b 0a 20 20 69 6e 74 20 69 4d  e *pBt;.  int iM
1b200 65 74 61 20 3d 20 30 3b 0a 0a 20 20 61 73 73 65  eta = 0;..  asse
1b210 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
1b220 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
1b230 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 7c 7c 20  >readOnly==0 || 
1b240 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 3b 0a 20 20  pOp->p2==0 );.  
1b250 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1b260 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62  =0 && pOp->p1<db
1b270 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
1b280 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d  t( DbMaskTest(p-
1b290 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d  >btreeMask, pOp-
1b2a0 3e 70 31 29 20 29 3b 0a 20 20 69 66 28 20 70 4f  >p1) );.  if( pO
1b2b0 70 2d 3e 70 32 20 26 26 20 28 64 62 2d 3e 66 6c  p->p2 && (db->fl
1b2c0 61 67 73 20 26 20 53 51 4c 49 54 45 5f 51 75 65  ags & SQLITE_Que
1b2d0 72 79 4f 6e 6c 79 29 21 3d 30 20 29 7b 0a 20 20  ryOnly)!=0 ){.  
1b2e0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 52 45    rc = SQLITE_RE
1b2f0 41 44 4f 4e 4c 59 3b 0a 20 20 20 20 67 6f 74 6f  ADONLY;.    goto
1b300 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1b310 72 6f 72 3b 0a 20 20 7d 0a 20 20 70 42 74 20 3d  ror;.  }.  pBt =
1b320 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31   db->aDb[pOp->p1
1b330 5d 2e 70 42 74 3b 0a 0a 20 20 69 66 28 20 70 42  ].pBt;..  if( pB
1b340 74 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  t ){.    rc = sq
1b350 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 54  lite3BtreeBeginT
1b360 72 61 6e 73 28 70 42 74 2c 20 70 4f 70 2d 3e 70  rans(pBt, pOp->p
1b370 32 2c 20 26 69 4d 65 74 61 29 3b 0a 20 20 20 20  2, &iMeta);.    
1b380 74 65 73 74 63 61 73 65 28 20 72 63 3d 3d 53 51  testcase( rc==SQ
1b390 4c 49 54 45 5f 42 55 53 59 5f 53 4e 41 50 53 48  LITE_BUSY_SNAPSH
1b3a0 4f 54 20 29 3b 0a 20 20 20 20 74 65 73 74 63 61  OT );.    testca
1b3b0 73 65 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42  se( rc==SQLITE_B
1b3c0 55 53 59 5f 52 45 43 4f 56 45 52 59 20 29 3b 0a  USY_RECOVERY );.
1b3d0 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
1b3e0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 69  TE_OK ){.      i
1b3f0 66 28 20 28 72 63 26 30 78 66 66 29 3d 3d 53 51  f( (rc&0xff)==SQ
1b400 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20  LITE_BUSY ){.   
1b410 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e       p->pc = (in
1b420 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20  t)(pOp - aOp);. 
1b430 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72         p->rc = r
1b440 63 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  c;.        goto 
1b450 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20  vdbe_return;.   
1b460 20 20 20 7d 0a 20 20 20 20 20 20 67 6f 74 6f 20     }.      goto 
1b470 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1b480 6f 72 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69  or;.    }..    i
1b490 66 28 20 70 4f 70 2d 3e 70 32 20 26 26 20 70 2d  f( pOp->p2 && p-
1b4a0 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c  >usesStmtJournal
1b4b0 20 0a 20 20 20 20 20 26 26 20 28 64 62 2d 3e 61   .     && (db->a
1b4c0 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20  utoCommit==0 || 
1b4d0 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 3e 31 29  db->nVdbeRead>1)
1b4e0 20 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 61   .    ){.      a
1b4f0 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74  ssert( sqlite3Bt
1b500 72 65 65 49 73 49 6e 54 72 61 6e 73 28 70 42 74  reeIsInTrans(pBt
1b510 29 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  ) );.      if( p
1b520 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20  ->iStatement==0 
1b530 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ){.        asser
1b540 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e  t( db->nStatemen
1b550 74 3e 3d 30 20 26 26 20 64 62 2d 3e 6e 53 61 76  t>=0 && db->nSav
1b560 65 70 6f 69 6e 74 3e 3d 30 20 29 3b 0a 20 20 20  epoint>=0 );.   
1b570 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d       db->nStatem
1b580 65 6e 74 2b 2b 3b 20 0a 20 20 20 20 20 20 20 20  ent++; .        
1b590 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 20 3d 20  p->iStatement = 
1b5a0 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b  db->nSavepoint +
1b5b0 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3b   db->nStatement;
1b5c0 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
1b5d0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62  rc = sqlite3Vtab
1b5e0 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 53 41  Savepoint(db, SA
1b5f0 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 2c 20 70  VEPOINT_BEGIN, p
1b600 2d 3e 69 53 74 61 74 65 6d 65 6e 74 2d 31 29 3b  ->iStatement-1);
1b610 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53  .      if( rc==S
1b620 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
1b630 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1b640 42 74 72 65 65 42 65 67 69 6e 53 74 6d 74 28 70  BtreeBeginStmt(p
1b650 42 74 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e  Bt, p->iStatemen
1b660 74 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  t);.      }..   
1b670 20 20 20 2f 2a 20 53 74 6f 72 65 20 74 68 65 20     /* Store the 
1b680 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20 6f 66  current value of
1b690 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61   the database ha
1b6a0 6e 64 6c 65 73 20 64 65 66 65 72 72 65 64 20 63  ndles deferred c
1b6b0 6f 6e 73 74 72 61 69 6e 74 0a 20 20 20 20 20 20  onstraint.      
1b6c0 2a 2a 20 63 6f 75 6e 74 65 72 2e 20 49 66 20 74  ** counter. If t
1b6d0 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  he statement tra
1b6e0 6e 73 61 63 74 69 6f 6e 20 6e 65 65 64 73 20 74  nsaction needs t
1b6f0 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b  o be rolled back
1b700 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 76  ,.      ** the v
1b710 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 75  alue of this cou
1b720 6e 74 65 72 20 6e 65 65 64 73 20 74 6f 20 62 65  nter needs to be
1b730 20 72 65 73 74 6f 72 65 64 20 74 6f 6f 2e 20 20   restored too.  
1b740 2a 2f 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74 6d  */.      p->nStm
1b750 74 44 65 66 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e  tDefCons = db->n
1b760 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20  DeferredCons;.  
1b770 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66 49      p->nStmtDefI
1b780 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65  mmCons = db->nDe
1b790 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20  ferredImmCons;. 
1b7a0 20 20 20 7d 0a 20 20 7d 0a 20 20 61 73 73 65 72     }.  }.  asser
1b7b0 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c  t( pOp->p5==0 ||
1b7c0 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
1b7d0 5f 49 4e 54 33 32 20 29 3b 0a 20 20 69 66 28 20  _INT32 );.  if( 
1b7e0 70 4f 70 2d 3e 70 35 0a 20 20 20 26 26 20 28 69  pOp->p5.   && (i
1b7f0 4d 65 74 61 21 3d 70 4f 70 2d 3e 70 33 0a 20 20  Meta!=pOp->p3.  
1b800 20 20 20 20 7c 7c 20 64 62 2d 3e 61 44 62 5b 70      || db->aDb[p
1b810 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d  Op->p1].pSchema-
1b820 3e 69 47 65 6e 65 72 61 74 69 6f 6e 21 3d 70 4f  >iGeneration!=pO
1b830 70 2d 3e 70 34 2e 69 29 0a 20 20 29 7b 0a 20 20  p->p4.i).  ){.  
1b840 20 20 2f 2a 0a 20 20 20 20 2a 2a 20 49 4d 50 4c    /*.    ** IMPL
1b850 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52  EMENTATION-OF: R
1b860 2d 30 33 31 38 39 2d 35 31 31 33 35 20 41 73 20  -03189-51135 As 
1b870 65 61 63 68 20 53 51 4c 20 73 74 61 74 65 6d 65  each SQL stateme
1b880 6e 74 20 72 75 6e 73 2c 20 74 68 65 20 73 63 68  nt runs, the sch
1b890 65 6d 61 0a 20 20 20 20 2a 2a 20 76 65 72 73 69  ema.    ** versi
1b8a0 6f 6e 20 69 73 20 63 68 65 63 6b 65 64 20 74 6f  on is checked to
1b8b0 20 65 6e 73 75 72 65 20 74 68 61 74 20 74 68 65   ensure that the
1b8c0 20 73 63 68 65 6d 61 20 68 61 73 20 6e 6f 74 20   schema has not 
1b8d0 63 68 61 6e 67 65 64 20 73 69 6e 63 65 20 74 68  changed since th
1b8e0 65 0a 20 20 20 20 2a 2a 20 53 51 4c 20 73 74 61  e.    ** SQL sta
1b8f0 74 65 6d 65 6e 74 20 77 61 73 20 70 72 65 70 61  tement was prepa
1b900 72 65 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  red..    */.    
1b910 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
1b920 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20  , p->zErrMsg);. 
1b930 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20     p->zErrMsg = 
1b940 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70 28  sqlite3DbStrDup(
1b950 64 62 2c 20 22 64 61 74 61 62 61 73 65 20 73 63  db, "database sc
1b960 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65 64  hema has changed
1b970 22 29 3b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68  ");.    /* If th
1b980 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69 65 20  e schema-cookie 
1b990 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
1b9a0 65 20 66 69 6c 65 20 6d 61 74 63 68 65 73 20 74  e file matches t
1b9b0 68 65 20 63 6f 6f 6b 69 65 20 0a 20 20 20 20 2a  he cookie .    *
1b9c0 2a 20 73 74 6f 72 65 64 20 77 69 74 68 20 74 68  * stored with th
1b9d0 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 72 65 70 72  e in-memory repr
1b9e0 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
1b9f0 65 20 73 63 68 65 6d 61 2c 20 64 6f 0a 20 20 20  e schema, do.   
1ba00 20 2a 2a 20 6e 6f 74 20 72 65 6c 6f 61 64 20 74   ** not reload t
1ba10 68 65 20 73 63 68 65 6d 61 20 66 72 6f 6d 20 74  he schema from t
1ba20 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
1ba30 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  ..    **.    ** 
1ba40 49 66 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65  If virtual-table
1ba50 73 20 61 72 65 20 69 6e 20 75 73 65 2c 20 74 68  s are in use, th
1ba60 69 73 20 69 73 20 6e 6f 74 20 6a 75 73 74 20 61  is is not just a
1ba70 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a  n optimization..
1ba80 20 20 20 20 2a 2a 20 4f 66 74 65 6e 2c 20 76 2d      ** Often, v-
1ba90 74 61 62 6c 65 73 20 73 74 6f 72 65 20 74 68 65  tables store the
1baa0 69 72 20 64 61 74 61 20 69 6e 20 6f 74 68 65 72  ir data in other
1bab0 20 53 51 4c 69 74 65 20 74 61 62 6c 65 73 2c 20   SQLite tables, 
1bac0 77 68 69 63 68 0a 20 20 20 20 2a 2a 20 61 72 65  which.    ** are
1bad0 20 71 75 65 72 69 65 64 20 66 72 6f 6d 20 77 69   queried from wi
1bae0 74 68 69 6e 20 78 4e 65 78 74 28 29 20 61 6e 64  thin xNext() and
1baf0 20 6f 74 68 65 72 20 76 2d 74 61 62 6c 65 20 6d   other v-table m
1bb00 65 74 68 6f 64 73 20 75 73 69 6e 67 0a 20 20 20  ethods using.   
1bb10 20 2a 2a 20 70 72 65 70 61 72 65 64 20 71 75 65   ** prepared que
1bb20 72 69 65 73 2e 20 49 66 20 73 75 63 68 20 61 20  ries. If such a 
1bb30 71 75 65 72 79 20 69 73 20 6f 75 74 2d 6f 66 2d  query is out-of-
1bb40 64 61 74 65 2c 20 77 65 20 64 6f 20 6e 6f 74 20  date, we do not 
1bb50 77 61 6e 74 20 74 6f 0a 20 20 20 20 2a 2a 20 64  want to.    ** d
1bb60 69 73 63 61 72 64 20 74 68 65 20 64 61 74 61 62  iscard the datab
1bb70 61 73 65 20 73 63 68 65 6d 61 2c 20 61 73 20 74  ase schema, as t
1bb80 68 65 20 75 73 65 72 20 63 6f 64 65 20 69 6d 70  he user code imp
1bb90 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65 0a 20 20  lementing the.  
1bba0 20 20 2a 2a 20 76 2d 74 61 62 6c 65 20 77 6f 75    ** v-table wou
1bbb0 6c 64 20 68 61 76 65 20 74 6f 20 62 65 20 72 65  ld have to be re
1bbc0 61 64 79 20 66 6f 72 20 74 68 65 20 73 71 6c 69  ady for the sqli
1bbd0 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75  te3_vtab structu
1bbe0 72 65 20 69 74 73 65 6c 66 0a 20 20 20 20 2a 2a  re itself.    **
1bbf0 20 74 6f 20 62 65 20 69 6e 76 61 6c 69 64 61 74   to be invalidat
1bc00 65 64 20 77 68 65 6e 65 76 65 72 20 73 71 6c 69  ed whenever sqli
1bc10 74 65 33 5f 73 74 65 70 28 29 20 69 73 20 63 61  te3_step() is ca
1bc20 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  lled from within
1bc30 20 0a 20 20 20 20 2a 2a 20 61 20 76 2d 74 61 62   .    ** a v-tab
1bc40 6c 65 20 6d 65 74 68 6f 64 2e 0a 20 20 20 20 2a  le method..    *
1bc50 2f 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44  /.    if( db->aD
1bc60 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65  b[pOp->p1].pSche
1bc70 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69  ma->schema_cooki
1bc80 65 21 3d 69 4d 65 74 61 20 29 7b 0a 20 20 20 20  e!=iMeta ){.    
1bc90 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e    sqlite3ResetOn
1bca0 65 53 63 68 65 6d 61 28 64 62 2c 20 70 4f 70 2d  eSchema(db, pOp-
1bcb0 3e 70 31 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  >p1);.    }.    
1bcc0 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31 3b 0a  p->expired = 1;.
1bcd0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
1bce0 53 43 48 45 4d 41 3b 0a 20 20 7d 0a 20 20 69 66  SCHEMA;.  }.  if
1bcf0 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
1bd00 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1bd10 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1bd20 70 63 6f 64 65 3a 20 52 65 61 64 43 6f 6f 6b 69  pcode: ReadCooki
1bd30 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  e P1 P2 P3 * *.*
1bd40 2a 0a 2a 2a 20 52 65 61 64 20 63 6f 6f 6b 69 65  *.** Read cookie
1bd50 20 6e 75 6d 62 65 72 20 50 33 20 66 72 6f 6d 20   number P3 from 
1bd60 64 61 74 61 62 61 73 65 20 50 31 20 61 6e 64 20  database P1 and 
1bd70 77 72 69 74 65 20 69 74 20 69 6e 74 6f 20 72 65  write it into re
1bd80 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 50 33  gister P2..** P3
1bd90 3d 3d 31 20 69 73 20 74 68 65 20 73 63 68 65 6d  ==1 is the schem
1bda0 61 20 76 65 72 73 69 6f 6e 2e 20 20 50 33 3d 3d  a version.  P3==
1bdb0 32 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73  2 is the databas
1bdc0 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50 33 3d  e format..** P3=
1bdd0 3d 33 20 69 73 20 74 68 65 20 72 65 63 6f 6d 6d  =3 is the recomm
1bde0 65 6e 64 65 64 20 70 61 67 65 72 20 63 61 63 68  ended pager cach
1bdf0 65 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66  e size, and so f
1be00 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69 73 0a  orth.  P1==0 is.
1be10 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  ** the main data
1be20 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50 31  base file and P1
1be30 3d 3d 31 20 69 73 20 74 68 65 20 64 61 74 61 62  ==1 is the datab
1be40 61 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f  ase file used to
1be50 20 73 74 6f 72 65 0a 2a 2a 20 74 65 6d 70 6f 72   store.** tempor
1be60 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a  ary tables..**.*
1be70 2a 20 54 68 65 72 65 20 6d 75 73 74 20 62 65 20  * There must be 
1be80 61 20 72 65 61 64 2d 6c 6f 63 6b 20 6f 6e 20 74  a read-lock on t
1be90 68 65 20 64 61 74 61 62 61 73 65 20 28 65 69 74  he database (eit
1bea0 68 65 72 20 61 20 74 72 61 6e 73 61 63 74 69 6f  her a transactio
1beb0 6e 0a 2a 2a 20 6d 75 73 74 20 62 65 20 73 74 61  n.** must be sta
1bec0 72 74 65 64 20 6f 72 20 74 68 65 72 65 20 6d 75  rted or there mu
1bed0 73 74 20 62 65 20 61 6e 20 6f 70 65 6e 20 63 75  st be an open cu
1bee0 72 73 6f 72 29 20 62 65 66 6f 72 65 0a 2a 2a 20  rsor) before.** 
1bef0 65 78 65 63 75 74 69 6e 67 20 74 68 69 73 20 69  executing this i
1bf00 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63  nstruction..*/.c
1bf10 61 73 65 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69  ase OP_ReadCooki
1bf20 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  e: {            
1bf30 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
1bf40 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69 6e 74  int iMeta;.  int
1bf50 20 69 44 62 3b 0a 20 20 69 6e 74 20 69 43 6f 6f   iDb;.  int iCoo
1bf60 6b 69 65 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  kie;..  assert( 
1bf70 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a  p->bIsReader );.
1bf80 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b    iDb = pOp->p1;
1bf90 0a 20 20 69 43 6f 6f 6b 69 65 20 3d 20 70 4f 70  .  iCookie = pOp
1bfa0 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p3;.  assert( 
1bfb0 70 4f 70 2d 3e 70 33 3c 53 51 4c 49 54 45 5f 4e  pOp->p3<SQLITE_N
1bfc0 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20  _BTREE_META );. 
1bfd0 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20   assert( iDb>=0 
1bfe0 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29  && iDb<db->nDb )
1bff0 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e  ;.  assert( db->
1c000 61 44 62 5b 69 44 62 5d 2e 70 42 74 21 3d 30 20  aDb[iDb].pBt!=0 
1c010 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d  );.  assert( DbM
1c020 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65  askTest(p->btree
1c030 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a 0a 20  Mask, iDb) );.. 
1c040 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65 74   sqlite3BtreeGet
1c050 4d 65 74 61 28 64 62 2d 3e 61 44 62 5b 69 44 62  Meta(db->aDb[iDb
1c060 5d 2e 70 42 74 2c 20 69 43 6f 6f 6b 69 65 2c 20  ].pBt, iCookie, 
1c070 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a  (u32 *)&iMeta);.
1c080 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
1c090 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
1c0a0 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69  .  pOut->u.i = i
1c0b0 4d 65 74 61 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Meta;.  break;.}
1c0c0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 74  ../* Opcode: Set
1c0d0 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33 20  Cookie P1 P2 P3 
1c0e0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  * *.**.** Write 
1c0f0 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  the integer valu
1c100 65 20 50 33 20 69 6e 74 6f 20 63 6f 6f 6b 69 65  e P3 into cookie
1c110 20 6e 75 6d 62 65 72 20 50 32 20 6f 66 20 64 61   number P2 of da
1c120 74 61 62 61 73 65 20 50 31 2e 0a 2a 2a 20 50 32  tabase P1..** P2
1c130 3d 3d 31 20 69 73 20 74 68 65 20 73 63 68 65 6d  ==1 is the schem
1c140 61 20 76 65 72 73 69 6f 6e 2e 20 20 50 32 3d 3d  a version.  P2==
1c150 32 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73  2 is the databas
1c160 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50 32 3d  e format..** P2=
1c170 3d 33 20 69 73 20 74 68 65 20 72 65 63 6f 6d 6d  =3 is the recomm
1c180 65 6e 64 65 64 20 70 61 67 65 72 20 63 61 63 68  ended pager cach
1c190 65 20 0a 2a 2a 20 73 69 7a 65 2c 20 61 6e 64 20  e .** size, and 
1c1a0 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30  so forth.  P1==0
1c1b0 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74   is the main dat
1c1c0 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50  abase file and P
1c1d0 31 3d 3d 31 20 69 73 20 74 68 65 20 0a 2a 2a 20  1==1 is the .** 
1c1e0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 75 73  database file us
1c1f0 65 64 20 74 6f 20 73 74 6f 72 65 20 74 65 6d 70  ed to store temp
1c200 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a  orary tables..**
1c210 0a 2a 2a 20 41 20 74 72 61 6e 73 61 63 74 69 6f  .** A transactio
1c220 6e 20 6d 75 73 74 20 62 65 20 73 74 61 72 74 65  n must be starte
1c230 64 20 62 65 66 6f 72 65 20 65 78 65 63 75 74 69  d before executi
1c240 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a  ng this opcode..
1c250 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 74 43 6f  */.case OP_SetCo
1c260 6f 6b 69 65 3a 20 7b 0a 20 20 44 62 20 2a 70 44  okie: {.  Db *pD
1c270 62 3b 0a 0a 20 20 73 71 6c 69 74 65 33 56 64 62  b;..  sqlite3Vdb
1c280 65 49 6e 63 72 57 72 69 74 65 43 6f 75 6e 74 65  eIncrWriteCounte
1c290 72 28 70 2c 20 30 29 3b 0a 20 20 61 73 73 65 72  r(p, 0);.  asser
1c2a0 74 28 20 70 4f 70 2d 3e 70 32 3c 53 51 4c 49 54  t( pOp->p2<SQLIT
1c2b0 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29  E_N_BTREE_META )
1c2c0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1c2d0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1c2e0 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  1<db->nDb );.  a
1c2f0 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73  ssert( DbMaskTes
1c300 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20  t(p->btreeMask, 
1c310 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73  pOp->p1) );.  as
1c320 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
1c330 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20  y==0 );.  pDb = 
1c340 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31  &db->aDb[pOp->p1
1c350 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44 62  ];.  assert( pDb
1c360 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73  ->pBt!=0 );.  as
1c370 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68  sert( sqlite3Sch
1c380 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c  emaMutexHeld(db,
1c390 20 70 4f 70 2d 3e 70 31 2c 20 30 29 20 29 3b 0a   pOp->p1, 0) );.
1c3a0 20 20 2f 2a 20 53 65 65 20 6e 6f 74 65 20 61 62    /* See note ab
1c3b0 6f 75 74 20 69 6e 64 65 78 20 73 68 69 66 74 69  out index shifti
1c3c0 6e 67 20 6f 6e 20 4f 50 5f 52 65 61 64 43 6f 6f  ng on OP_ReadCoo
1c3d0 6b 69 65 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71  kie */.  rc = sq
1c3e0 6c 69 74 65 33 42 74 72 65 65 55 70 64 61 74 65  lite3BtreeUpdate
1c3f0 4d 65 74 61 28 70 44 62 2d 3e 70 42 74 2c 20 70  Meta(pDb->pBt, p
1c400 4f 70 2d 3e 70 32 2c 20 70 4f 70 2d 3e 70 33 29  Op->p2, pOp->p3)
1c410 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d  ;.  if( pOp->p2=
1c420 3d 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56 45  =BTREE_SCHEMA_VE
1c430 52 53 49 4f 4e 20 29 7b 0a 20 20 20 20 2f 2a 20  RSION ){.    /* 
1c440 57 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20  When the schema 
1c450 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 2c 20  cookie changes, 
1c460 72 65 63 6f 72 64 20 74 68 65 20 6e 65 77 20 63  record the new c
1c470 6f 6f 6b 69 65 20 69 6e 74 65 72 6e 61 6c 6c 79  ookie internally
1c480 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63   */.    pDb->pSc
1c490 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f  hema->schema_coo
1c4a0 6b 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  kie = pOp->p3;. 
1c4b0 20 20 20 64 62 2d 3e 6d 44 62 46 6c 61 67 73 20     db->mDbFlags 
1c4c0 7c 3d 20 44 42 46 4c 41 47 5f 53 63 68 65 6d 61  |= DBFLAG_Schema
1c4d0 43 68 61 6e 67 65 3b 0a 20 20 7d 65 6c 73 65 20  Change;.  }else 
1c4e0 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52  if( pOp->p2==BTR
1c4f0 45 45 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 29  EE_FILE_FORMAT )
1c500 7b 0a 20 20 20 20 2f 2a 20 52 65 63 6f 72 64 20  {.    /* Record 
1c510 63 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20 66  changes in the f
1c520 69 6c 65 20 66 6f 72 6d 61 74 20 2a 2f 0a 20 20  ile format */.  
1c530 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e    pDb->pSchema->
1c540 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70 4f  file_format = pO
1c550 70 2d 3e 70 33 3b 0a 20 20 7d 0a 20 20 69 66 28  p->p3;.  }.  if(
1c560 20 70 4f 70 2d 3e 70 31 3d 3d 31 20 29 7b 0a 20   pOp->p1==1 ){. 
1c570 20 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65     /* Invalidate
1c580 20 61 6c 6c 20 70 72 65 70 61 72 65 64 20 73 74   all prepared st
1c590 61 74 65 6d 65 6e 74 73 20 77 68 65 6e 65 76 65  atements wheneve
1c5a0 72 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62  r the TEMP datab
1c5b0 61 73 65 0a 20 20 20 20 2a 2a 20 73 63 68 65 6d  ase.    ** schem
1c5c0 61 20 69 73 20 63 68 61 6e 67 65 64 2e 20 20 54  a is changed.  T
1c5d0 69 63 6b 65 74 20 23 31 36 34 34 20 2a 2f 0a 20  icket #1644 */. 
1c5e0 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65     sqlite3Expire
1c5f0 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e  PreparedStatemen
1c600 74 73 28 64 62 2c 20 30 29 3b 0a 20 20 20 20 70  ts(db, 0);.    p
1c610 2d 3e 65 78 70 69 72 65 64 20 3d 20 30 3b 0a 20  ->expired = 0;. 
1c620 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f   }.  if( rc ) go
1c630 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1c640 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a  error;.  break;.
1c650 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70  }../* Opcode: Op
1c660 65 6e 52 65 61 64 20 50 31 20 50 32 20 50 33 20  enRead P1 P2 P3 
1c670 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
1c680 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50  s: root=P2 iDb=P
1c690 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72  3.**.** Open a r
1c6a0 65 61 64 2d 6f 6e 6c 79 20 63 75 72 73 6f 72 20  ead-only cursor 
1c6b0 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65  for the database
1c6c0 20 74 61 62 6c 65 20 77 68 6f 73 65 20 72 6f 6f   table whose roo
1c6d0 74 20 70 61 67 65 20 69 73 0a 2a 2a 20 50 32 20  t page is.** P2 
1c6e0 69 6e 20 61 20 64 61 74 61 62 61 73 65 20 66 69  in a database fi
1c6f0 6c 65 2e 20 20 54 68 65 20 64 61 74 61 62 61 73  le.  The databas
1c700 65 20 66 69 6c 65 20 69 73 20 64 65 74 65 72 6d  e file is determ
1c710 69 6e 65 64 20 62 79 20 50 33 2e 20 0a 2a 2a 20  ined by P3. .** 
1c720 50 33 3d 3d 30 20 6d 65 61 6e 73 20 74 68 65 20  P3==0 means the 
1c730 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20 50  main database, P
1c740 33 3d 3d 31 20 6d 65 61 6e 73 20 74 68 65 20 64  3==1 means the d
1c750 61 74 61 62 61 73 65 20 75 73 65 64 20 66 6f 72  atabase used for
1c760 20 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 74   .** temporary t
1c770 61 62 6c 65 73 2c 20 61 6e 64 20 50 33 3e 31 20  ables, and P3>1 
1c780 6d 65 61 6e 73 20 75 73 65 64 20 74 68 65 20 63  means used the c
1c790 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 61 74 74  orresponding att
1c7a0 61 63 68 65 64 0a 2a 2a 20 64 61 74 61 62 61 73  ached.** databas
1c7b0 65 2e 20 20 47 69 76 65 20 74 68 65 20 6e 65 77  e.  Give the new
1c7c0 20 63 75 72 73 6f 72 20 61 6e 20 69 64 65 6e 74   cursor an ident
1c7d0 69 66 69 65 72 20 6f 66 20 50 31 2e 20 20 54 68  ifier of P1.  Th
1c7e0 65 20 50 31 0a 2a 2a 20 76 61 6c 75 65 73 20 6e  e P1.** values n
1c7f0 65 65 64 20 6e 6f 74 20 62 65 20 63 6f 6e 74 69  eed not be conti
1c800 67 75 6f 75 73 20 62 75 74 20 61 6c 6c 20 50 31  guous but all P1
1c810 20 76 61 6c 75 65 73 20 73 68 6f 75 6c 64 20 62   values should b
1c820 65 20 73 6d 61 6c 6c 20 69 6e 74 65 67 65 72 73  e small integers
1c830 2e 0a 2a 2a 20 49 74 20 69 73 20 61 6e 20 65 72  ..** It is an er
1c840 72 6f 72 20 66 6f 72 20 50 31 20 74 6f 20 62 65  ror for P1 to be
1c850 20 6e 65 67 61 74 69 76 65 2e 0a 2a 2a 0a 2a 2a   negative..**.**
1c860 20 41 6c 6c 6f 77 65 64 20 50 35 20 62 69 74 73   Allowed P5 bits
1c870 3a 0a 2a 2a 20 3c 75 6c 3e 0a 2a 2a 20 3c 6c 69  :.** <ul>.** <li
1c880 3e 20 20 3c 62 3e 30 78 30 32 20 4f 50 46 4c 41  >  <b>0x02 OPFLA
1c890 47 5f 53 45 45 4b 45 51 3c 2f 62 3e 3a 20 54 68  G_SEEKEQ</b>: Th
1c8a0 69 73 20 63 75 72 73 6f 72 20 77 69 6c 6c 20 6f  is cursor will o
1c8b0 6e 6c 79 20 62 65 20 75 73 65 64 20 66 6f 72 0a  nly be used for.
1c8c0 2a 2a 20 20 20 20 20 20 20 65 71 75 61 6c 69 74  **       equalit
1c8d0 79 20 6c 6f 6f 6b 75 70 73 20 28 69 6d 70 6c 65  y lookups (imple
1c8e0 6d 65 6e 74 65 64 20 61 73 20 61 20 70 61 69 72  mented as a pair
1c8f0 20 6f 66 20 6f 70 63 6f 64 65 73 20 4f 50 5f 53   of opcodes OP_S
1c900 65 65 6b 47 45 2f 4f 50 5f 49 64 78 47 54 0a 2a  eekGE/OP_IdxGT.*
1c910 2a 20 20 20 20 20 20 20 6f 66 20 4f 50 5f 53 65  *       of OP_Se
1c920 65 6b 4c 45 2f 4f 50 5f 49 64 78 47 54 29 0a 2a  ekLE/OP_IdxGT).*
1c930 2a 20 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a 20 54 68  * </ul>.**.** Th
1c940 65 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62  e P4 value may b
1c950 65 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65  e either an inte
1c960 67 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f  ger (P4_INT32) o
1c970 72 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a  r a pointer to.*
1c980 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75  * a KeyInfo stru
1c990 63 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46  cture (P4_KEYINF
1c9a0 4f 29 2e 20 49 66 20 69 74 20 69 73 20 61 20 70  O). If it is a p
1c9b0 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49  ointer to a KeyI
1c9c0 6e 66 6f 20 0a 2a 2a 20 6f 62 6a 65 63 74 2c 20  nfo .** object, 
1c9d0 74 68 65 6e 20 74 61 62 6c 65 20 62 65 69 6e 67  then table being
1c9e0 20 6f 70 65 6e 65 64 20 6d 75 73 74 20 62 65 20   opened must be 
1c9f0 61 6e 20 5b 69 6e 64 65 78 20 62 2d 74 72 65 65  an [index b-tree
1ca00 5d 20 77 68 65 72 65 20 74 68 65 0a 2a 2a 20 4b  ] where the.** K
1ca10 65 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20 64 65  eyInfo object de
1ca20 66 69 6e 65 73 20 74 68 65 20 63 6f 6e 74 65 6e  fines the conten
1ca30 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20  t and collating 
1ca40 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f 66 20  .** sequence of 
1ca50 74 68 61 74 20 69 6e 64 65 78 20 62 2d 74 72 65  that index b-tre
1ca60 65 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66  e. Otherwise, if
1ca70 20 50 34 20 69 73 20 61 6e 20 69 6e 74 65 67 65   P4 is an intege
1ca80 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 74 68 65  r .** value, the
1ca90 6e 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  n the table bein
1caa0 67 20 6f 70 65 6e 65 64 20 6d 75 73 74 20 62 65  g opened must be
1cab0 20 61 20 5b 74 61 62 6c 65 20 62 2d 74 72 65 65   a [table b-tree
1cac0 5d 20 77 69 74 68 20 61 0a 2a 2a 20 6e 75 6d 62  ] with a.** numb
1cad0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 6e 6f  er of columns no
1cae0 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 76   less than the v
1caf0 61 6c 75 65 20 6f 66 20 50 34 2e 0a 2a 2a 0a 2a  alue of P4..**.*
1cb00 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4f 70 65 6e  * See also: Open
1cb10 57 72 69 74 65 2c 20 52 65 6f 70 65 6e 49 64 78  Write, ReopenIdx
1cb20 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .*/./* Opcode: R
1cb30 65 6f 70 65 6e 49 64 78 20 50 31 20 50 32 20 50  eopenIdx P1 P2 P
1cb40 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
1cb50 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62  sis: root=P2 iDb
1cb60 3d 50 33 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 65  =P3.**.** The Re
1cb70 6f 70 65 6e 49 64 78 20 6f 70 63 6f 64 65 20 77  openIdx opcode w
1cb80 6f 72 6b 73 20 6c 69 6b 65 20 4f 50 5f 4f 70 65  orks like OP_Ope
1cb90 6e 52 65 61 64 20 65 78 63 65 70 74 20 74 68 61  nRead except tha
1cba0 74 20 69 74 20 66 69 72 73 74 0a 2a 2a 20 63 68  t it first.** ch
1cbb0 65 63 6b 73 20 74 6f 20 73 65 65 20 69 66 20 74  ecks to see if t
1cbc0 68 65 20 63 75 72 73 6f 72 20 6f 6e 20 50 31 20  he cursor on P1 
1cbd0 69 73 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 20  is already open 
1cbe0 6f 6e 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 62  on the same.** b
1cbf0 2d 74 72 65 65 20 61 6e 64 20 69 66 20 69 74 20  -tree and if it 
1cc00 69 73 20 74 68 69 73 20 6f 70 63 6f 64 65 20 62  is this opcode b
1cc10 65 63 6f 6d 65 73 20 61 20 6e 6f 2d 6f 70 2e 20  ecomes a no-op. 
1cc20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
1cc30 0a 2a 2a 20 69 66 20 74 68 65 20 63 75 72 73 6f  .** if the curso
1cc40 72 20 69 73 20 61 6c 72 65 61 64 79 20 6f 70 65  r is already ope
1cc50 6e 2c 20 64 6f 20 6e 6f 74 20 72 65 6f 70 65 6e  n, do not reopen
1cc60 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52   it..**.** The R
1cc70 65 6f 70 65 6e 49 64 78 20 6f 70 63 6f 64 65 20  eopenIdx opcode 
1cc80 6d 61 79 20 6f 6e 6c 79 20 62 65 20 75 73 65 64  may only be used
1cc90 20 77 69 74 68 20 50 35 3d 3d 30 20 6f 72 20 50   with P5==0 or P
1cca0 35 3d 3d 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51  5==OPFLAG_SEEKEQ
1ccb0 0a 2a 2a 20 61 6e 64 20 77 69 74 68 20 50 34 20  .** and with P4 
1ccc0 62 65 69 6e 67 20 61 20 50 34 5f 4b 45 59 49 4e  being a P4_KEYIN
1ccd0 46 4f 20 6f 62 6a 65 63 74 2e 20 20 46 75 72 74  FO object.  Furt
1cce0 68 65 72 6d 6f 72 65 2c 20 74 68 65 20 50 33 20  hermore, the P3 
1ccf0 76 61 6c 75 65 20 6d 75 73 74 0a 2a 2a 20 62 65  value must.** be
1cd00 20 74 68 65 20 73 61 6d 65 20 61 73 20 65 76 65   the same as eve
1cd10 72 79 20 6f 74 68 65 72 20 52 65 6f 70 65 6e 49  ry other ReopenI
1cd20 64 78 20 6f 72 20 4f 70 65 6e 52 65 61 64 20 66  dx or OpenRead f
1cd30 6f 72 20 74 68 65 20 73 61 6d 65 20 63 75 72 73  or the same curs
1cd40 6f 72 0a 2a 2a 20 6e 75 6d 62 65 72 2e 0a 2a 2a  or.** number..**
1cd50 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 50 35 20 62  .** Allowed P5 b
1cd60 69 74 73 3a 0a 2a 2a 20 3c 75 6c 3e 0a 2a 2a 20  its:.** <ul>.** 
1cd70 3c 6c 69 3e 20 20 3c 62 3e 30 78 30 32 20 4f 50  <li>  <b>0x02 OP
1cd80 46 4c 41 47 5f 53 45 45 4b 45 51 3c 2f 62 3e 3a  FLAG_SEEKEQ</b>:
1cd90 20 54 68 69 73 20 63 75 72 73 6f 72 20 77 69 6c   This cursor wil
1cda0 6c 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 66  l only be used f
1cdb0 6f 72 0a 2a 2a 20 20 20 20 20 20 20 65 71 75 61  or.**       equa
1cdc0 6c 69 74 79 20 6c 6f 6f 6b 75 70 73 20 28 69 6d  lity lookups (im
1cdd0 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61 20 70  plemented as a p
1cde0 61 69 72 20 6f 66 20 6f 70 63 6f 64 65 73 20 4f  air of opcodes O
1cdf0 50 5f 53 65 65 6b 47 45 2f 4f 50 5f 49 64 78 47  P_SeekGE/OP_IdxG
1ce00 54 0a 2a 2a 20 20 20 20 20 20 20 6f 66 20 4f 50  T.**       of OP
1ce10 5f 53 65 65 6b 4c 45 2f 4f 50 5f 49 64 78 47 54  _SeekLE/OP_IdxGT
1ce20 29 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a  ).** </ul>.**.**
1ce30 20 53 65 65 20 61 6c 73 6f 3a 20 4f 50 5f 4f 70   See also: OP_Op
1ce40 65 6e 52 65 61 64 2c 20 4f 50 5f 4f 70 65 6e 57  enRead, OP_OpenW
1ce50 72 69 74 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  rite.*/./* Opcod
1ce60 65 3a 20 4f 70 65 6e 57 72 69 74 65 20 50 31 20  e: OpenWrite P1 
1ce70 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
1ce80 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50 32  ynopsis: root=P2
1ce90 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 70   iDb=P3.**.** Op
1cea0 65 6e 20 61 20 72 65 61 64 2f 77 72 69 74 65 20  en a read/write 
1ceb0 63 75 72 73 6f 72 20 6e 61 6d 65 64 20 50 31 20  cursor named P1 
1cec0 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  on the table or 
1ced0 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74  index whose root
1cee0 0a 2a 2a 20 70 61 67 65 20 69 73 20 50 32 20 28  .** page is P2 (
1cef0 6f 72 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61  or whose root pa
1cf00 67 65 20 69 73 20 68 65 6c 64 20 69 6e 20 72 65  ge is held in re
1cf10 67 69 73 74 65 72 20 50 32 20 69 66 20 74 68 65  gister P2 if the
1cf20 0a 2a 2a 20 4f 50 46 4c 41 47 5f 50 32 49 53 52  .** OPFLAG_P2ISR
1cf30 45 47 20 62 69 74 20 69 73 20 73 65 74 20 69 6e  EG bit is set in
1cf40 20 50 35 20 2d 20 73 65 65 20 62 65 6c 6f 77 29   P5 - see below)
1cf50 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76  ..**.** The P4 v
1cf60 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69 74 68  alue may be eith
1cf70 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50  er an integer (P
1cf80 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f  4_INT32) or a po
1cf90 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65  inter to.** a Ke
1cfa0 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20  yInfo structure 
1cfb0 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66  (P4_KEYINFO). If
1cfc0 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72   it is a pointer
1cfd0 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a   to a KeyInfo .*
1cfe0 2a 20 6f 62 6a 65 63 74 2c 20 74 68 65 6e 20 74  * object, then t
1cff0 61 62 6c 65 20 62 65 69 6e 67 20 6f 70 65 6e 65  able being opene
1d000 64 20 6d 75 73 74 20 62 65 20 61 6e 20 5b 69 6e  d must be an [in
1d010 64 65 78 20 62 2d 74 72 65 65 5d 20 77 68 65 72  dex b-tree] wher
1d020 65 20 74 68 65 0a 2a 2a 20 4b 65 79 49 6e 66 6f  e the.** KeyInfo
1d030 20 6f 62 6a 65 63 74 20 64 65 66 69 6e 65 73 20   object defines 
1d040 74 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20  the content and 
1d050 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65  collating .** se
1d060 71 75 65 6e 63 65 20 6f 66 20 74 68 61 74 20 69  quence of that i
1d070 6e 64 65 78 20 62 2d 74 72 65 65 2e 20 4f 74 68  ndex b-tree. Oth
1d080 65 72 77 69 73 65 2c 20 69 66 20 50 34 20 69 73  erwise, if P4 is
1d090 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20   an integer .** 
1d0a0 76 61 6c 75 65 2c 20 74 68 65 6e 20 74 68 65 20  value, then the 
1d0b0 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70 65 6e  table being open
1d0c0 65 64 20 6d 75 73 74 20 62 65 20 61 20 5b 74 61  ed must be a [ta
1d0d0 62 6c 65 20 62 2d 74 72 65 65 5d 20 77 69 74 68  ble b-tree] with
1d0e0 20 61 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20   a.** number of 
1d0f0 63 6f 6c 75 6d 6e 73 20 6e 6f 20 6c 65 73 73 20  columns no less 
1d100 74 68 61 6e 20 74 68 65 20 76 61 6c 75 65 20 6f  than the value o
1d110 66 20 50 34 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f  f P4..**.** Allo
1d120 77 65 64 20 50 35 20 62 69 74 73 3a 0a 2a 2a 20  wed P5 bits:.** 
1d130 3c 75 6c 3e 0a 2a 2a 20 3c 6c 69 3e 20 20 3c 62  <ul>.** <li>  <b
1d140 3e 30 78 30 32 20 4f 50 46 4c 41 47 5f 53 45 45  >0x02 OPFLAG_SEE
1d150 4b 45 51 3c 2f 62 3e 3a 20 54 68 69 73 20 63 75  KEQ</b>: This cu
1d160 72 73 6f 72 20 77 69 6c 6c 20 6f 6e 6c 79 20 62  rsor will only b
1d170 65 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20 20 20  e used for.**   
1d180 20 20 20 20 65 71 75 61 6c 69 74 79 20 6c 6f 6f      equality loo
1d190 6b 75 70 73 20 28 69 6d 70 6c 65 6d 65 6e 74 65  kups (implemente
1d1a0 64 20 61 73 20 61 20 70 61 69 72 20 6f 66 20 6f  d as a pair of o
1d1b0 70 63 6f 64 65 73 20 4f 50 5f 53 65 65 6b 47 45  pcodes OP_SeekGE
1d1c0 2f 4f 50 5f 49 64 78 47 54 0a 2a 2a 20 20 20 20  /OP_IdxGT.**    
1d1d0 20 20 20 6f 66 20 4f 50 5f 53 65 65 6b 4c 45 2f     of OP_SeekLE/
1d1e0 4f 50 5f 49 64 78 47 54 29 0a 2a 2a 20 3c 6c 69  OP_IdxGT).** <li
1d1f0 3e 20 20 3c 62 3e 30 78 30 38 20 4f 50 46 4c 41  >  <b>0x08 OPFLA
1d200 47 5f 46 4f 52 44 45 4c 45 54 45 3c 2f 62 3e 3a  G_FORDELETE</b>:
1d210 20 54 68 69 73 20 63 75 72 73 6f 72 20 69 73 20   This cursor is 
1d220 75 73 65 64 20 6f 6e 6c 79 20 74 6f 20 73 65 65  used only to see
1d230 6b 0a 2a 2a 20 20 20 20 20 20 20 61 6e 64 20 73  k.**       and s
1d240 75 62 73 65 71 75 65 6e 74 6c 79 20 64 65 6c 65  ubsequently dele
1d250 74 65 20 65 6e 74 72 69 65 73 20 69 6e 20 61 6e  te entries in an
1d260 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20 54   index btree.  T
1d270 68 69 73 20 69 73 20 61 0a 2a 2a 20 20 20 20 20  his is a.**     
1d280 20 20 68 69 6e 74 20 74 6f 20 74 68 65 20 73 74    hint to the st
1d290 6f 72 61 67 65 20 65 6e 67 69 6e 65 20 74 68 61  orage engine tha
1d2a0 74 20 74 68 65 20 73 74 6f 72 61 67 65 20 65 6e  t the storage en
1d2b0 67 69 6e 65 20 69 73 20 61 6c 6c 6f 77 65 64 20  gine is allowed 
1d2c0 74 6f 0a 2a 2a 20 20 20 20 20 20 20 69 67 6e 6f  to.**       igno
1d2d0 72 65 2e 20 20 54 68 65 20 68 69 6e 74 20 69 73  re.  The hint is
1d2e0 20 6e 6f 74 20 75 73 65 64 20 62 79 20 74 68 65   not used by the
1d2f0 20 6f 66 66 69 63 69 61 6c 20 53 51 4c 69 74 65   official SQLite
1d300 20 62 2a 74 72 65 65 20 73 74 6f 72 61 67 65 0a   b*tree storage.
1d310 2a 2a 20 20 20 20 20 20 20 65 6e 67 69 6e 65 2c  **       engine,
1d320 20 62 75 74 20 69 73 20 75 73 65 64 20 62 79 20   but is used by 
1d330 43 4f 4d 44 42 32 2e 0a 2a 2a 20 3c 6c 69 3e 20  COMDB2..** <li> 
1d340 20 3c 62 3e 30 78 31 30 20 4f 50 46 4c 41 47 5f   <b>0x10 OPFLAG_
1d350 50 32 49 53 52 45 47 3c 2f 62 3e 3a 20 55 73 65  P2ISREG</b>: Use
1d360 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
1d370 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 20  register P2.**  
1d380 20 20 20 20 20 61 73 20 74 68 65 20 72 6f 6f 74       as the root
1d390 20 70 61 67 65 2c 20 6e 6f 74 20 74 68 65 20 76   page, not the v
1d3a0 61 6c 75 65 20 6f 66 20 50 32 20 69 74 73 65 6c  alue of P2 itsel
1d3b0 66 2e 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2a 0a 2a  f..** </ul>.**.*
1d3c0 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
1d3d0 6f 6e 20 77 6f 72 6b 73 20 6c 69 6b 65 20 4f 70  on works like Op
1d3e0 65 6e 52 65 61 64 20 65 78 63 65 70 74 20 74 68  enRead except th
1d3f0 61 74 20 69 74 20 6f 70 65 6e 73 20 74 68 65 20  at it opens the 
1d400 63 75 72 73 6f 72 0a 2a 2a 20 69 6e 20 72 65 61  cursor.** in rea
1d410 64 2f 77 72 69 74 65 20 6d 6f 64 65 2e 0a 2a 2a  d/write mode..**
1d420 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4f 50  .** See also: OP
1d430 5f 4f 70 65 6e 52 65 61 64 2c 20 4f 50 5f 52 65  _OpenRead, OP_Re
1d440 6f 70 65 6e 49 64 78 0a 2a 2f 0a 63 61 73 65 20  openIdx.*/.case 
1d450 4f 50 5f 52 65 6f 70 65 6e 49 64 78 3a 20 7b 0a  OP_ReopenIdx: {.
1d460 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20    int nField;.  
1d470 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66  KeyInfo *pKeyInf
1d480 6f 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20 69  o;.  int p2;.  i
1d490 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 77 72  nt iDb;.  int wr
1d4a0 46 6c 61 67 3b 0a 20 20 42 74 72 65 65 20 2a 70  Flag;.  Btree *p
1d4b0 58 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  X;.  VdbeCursor 
1d4c0 2a 70 43 75 72 3b 0a 20 20 44 62 20 2a 70 44 62  *pCur;.  Db *pDb
1d4d0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
1d4e0 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e  ->p5==0 || pOp->
1d4f0 70 35 3d 3d 4f 50 46 4c 41 47 5f 53 45 45 4b 45  p5==OPFLAG_SEEKE
1d500 51 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Q );.  assert( p
1d510 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b  Op->p4type==P4_K
1d520 45 59 49 4e 46 4f 20 29 3b 0a 20 20 70 43 75 72  EYINFO );.  pCur
1d530 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
1d540 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 43 75 72  >p1];.  if( pCur
1d550 20 26 26 20 70 43 75 72 2d 3e 70 67 6e 6f 52 6f   && pCur->pgnoRo
1d560 6f 74 3d 3d 28 75 33 32 29 70 4f 70 2d 3e 70 32  ot==(u32)pOp->p2
1d570 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
1d580 70 43 75 72 2d 3e 69 44 62 3d 3d 70 4f 70 2d 3e  pCur->iDb==pOp->
1d590 70 33 20 29 3b 20 20 20 20 20 20 2f 2a 20 47 75  p3 );      /* Gu
1d5a0 61 72 61 6e 74 65 65 64 20 62 79 20 74 68 65 20  aranteed by the 
1d5b0 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 2a  code generator *
1d5c0 2f 0a 20 20 20 20 67 6f 74 6f 20 6f 70 65 6e 5f  /.    goto open_
1d5d0 63 75 72 73 6f 72 5f 73 65 74 5f 68 69 6e 74 73  cursor_set_hints
1d5e0 3b 0a 20 20 7d 0a 20 20 2f 2a 20 49 66 20 74 68  ;.  }.  /* If th
1d5f0 65 20 63 75 72 73 6f 72 20 69 73 20 6e 6f 74 20  e cursor is not 
1d600 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 6f  currently open o
1d610 72 20 69 73 20 6f 70 65 6e 20 6f 6e 20 61 20 64  r is open on a d
1d620 69 66 66 65 72 65 6e 74 0a 20 20 2a 2a 20 69 6e  ifferent.  ** in
1d630 64 65 78 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74  dex, then fall t
1d640 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 4f  hrough into OP_O
1d650 70 65 6e 52 65 61 64 20 74 6f 20 66 6f 72 63 65  penRead to force
1d660 20 61 20 72 65 6f 70 65 6e 20 2a 2f 0a 63 61 73   a reopen */.cas
1d670 65 20 4f 50 5f 4f 70 65 6e 52 65 61 64 3a 0a 63  e OP_OpenRead:.c
1d680 61 73 65 20 4f 50 5f 4f 70 65 6e 57 72 69 74 65  ase OP_OpenWrite
1d690 3a 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  :..  assert( pOp
1d6a0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65  ->opcode==OP_Ope
1d6b0 6e 57 72 69 74 65 20 7c 7c 20 70 4f 70 2d 3e 70  nWrite || pOp->p
1d6c0 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d  5==0 || pOp->p5=
1d6d0 3d 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 29  =OPFLAG_SEEKEQ )
1d6e0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62  ;.  assert( p->b
1d6f0 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 61 73  IsReader );.  as
1d700 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
1d710 65 3d 3d 4f 50 5f 4f 70 65 6e 52 65 61 64 20 7c  e==OP_OpenRead |
1d720 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
1d730 50 5f 52 65 6f 70 65 6e 49 64 78 0a 20 20 20 20  P_ReopenIdx.    
1d740 20 20 20 20 20 20 7c 7c 20 70 2d 3e 72 65 61 64        || p->read
1d750 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 69 66  Only==0 );..  if
1d760 28 20 70 2d 3e 65 78 70 69 72 65 64 3d 3d 31 20  ( p->expired==1 
1d770 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
1d780 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43  TE_ABORT_ROLLBAC
1d790 4b 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  K;.    goto abor
1d7a0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1d7b0 20 20 7d 0a 0a 20 20 6e 46 69 65 6c 64 20 3d 20    }..  nField = 
1d7c0 30 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20  0;.  pKeyInfo = 
1d7d0 30 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70  0;.  p2 = pOp->p
1d7e0 32 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e  2;.  iDb = pOp->
1d7f0 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44  p3;.  assert( iD
1d800 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e  b>=0 && iDb<db->
1d810 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
1d820 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
1d830 74 72 65 65 4d 61 73 6b 2c 20 69 44 62 29 20 29  treeMask, iDb) )
1d840 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61  ;.  pDb = &db->a
1d850 44 62 5b 69 44 62 5d 3b 0a 20 20 70 58 20 3d 20  Db[iDb];.  pX = 
1d860 70 44 62 2d 3e 70 42 74 3b 0a 20 20 61 73 73 65  pDb->pBt;.  asse
1d870 72 74 28 20 70 58 21 3d 30 20 29 3b 0a 20 20 69  rt( pX!=0 );.  i
1d880 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
1d890 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20 29 7b 0a  OP_OpenWrite ){.
1d8a0 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c      assert( OPFL
1d8b0 41 47 5f 46 4f 52 44 45 4c 45 54 45 3d 3d 42 54  AG_FORDELETE==BT
1d8c0 52 45 45 5f 46 4f 52 44 45 4c 45 54 45 20 29 3b  REE_FORDELETE );
1d8d0 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20 42 54  .    wrFlag = BT
1d8e0 52 45 45 5f 57 52 43 53 52 20 7c 20 28 70 4f 70  REE_WRCSR | (pOp
1d8f0 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 46 4f  ->p5 & OPFLAG_FO
1d900 52 44 45 4c 45 54 45 29 3b 0a 20 20 20 20 61 73  RDELETE);.    as
1d910 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68  sert( sqlite3Sch
1d920 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c  emaMutexHeld(db,
1d930 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20   iDb, 0) );.    
1d940 69 66 28 20 70 44 62 2d 3e 70 53 63 68 65 6d 61  if( pDb->pSchema
1d950 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3c 20  ->file_format < 
1d960 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46  p->minWriteFileF
1d970 6f 72 6d 61 74 20 29 7b 0a 20 20 20 20 20 20 70  ormat ){.      p
1d980 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f  ->minWriteFileFo
1d990 72 6d 61 74 20 3d 20 70 44 62 2d 3e 70 53 63 68  rmat = pDb->pSch
1d9a0 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74  ema->file_format
1d9b0 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
1d9c0 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20 30 3b  .    wrFlag = 0;
1d9d0 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .  }.  if( pOp->
1d9e0 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 32 49 53  p5 & OPFLAG_P2IS
1d9f0 52 45 47 20 29 7b 0a 20 20 20 20 61 73 73 65 72  REG ){.    asser
1da00 74 28 20 70 32 3e 30 20 29 3b 0a 20 20 20 20 61  t( p2>0 );.    a
1da10 73 73 65 72 74 28 20 70 32 3c 3d 28 70 2d 3e 6e  ssert( p2<=(p->n
1da20 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
1da30 6f 72 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72  or) );.    asser
1da40 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
1da50 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20 29 3b 0a  OP_OpenWrite );.
1da60 20 20 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d      pIn2 = &aMem
1da70 5b 70 32 5d 3b 0a 20 20 20 20 61 73 73 65 72 74  [p2];.    assert
1da80 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e  ( memIsValid(pIn
1da90 32 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  2) );.    assert
1daa0 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26  ( (pIn2->flags &
1dab0 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a   MEM_Int)!=0 );.
1dac0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
1dad0 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
1dae0 32 29 3b 0a 20 20 20 20 70 32 20 3d 20 28 69 6e  2);.    p2 = (in
1daf0 74 29 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20  t)pIn2->u.i;.   
1db00 20 2f 2a 20 54 68 65 20 70 32 20 76 61 6c 75 65   /* The p2 value
1db10 20 61 6c 77 61 79 73 20 63 6f 6d 65 73 20 66 72   always comes fr
1db20 6f 6d 20 61 20 70 72 69 6f 72 20 4f 50 5f 43 72  om a prior OP_Cr
1db30 65 61 74 65 42 74 72 65 65 20 6f 70 63 6f 64 65  eateBtree opcode
1db40 20 61 6e 64 0a 20 20 20 20 2a 2a 20 74 68 61 74   and.    ** that
1db50 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77   opcode will alw
1db60 61 79 73 20 73 65 74 20 74 68 65 20 70 32 20 76  ays set the p2 v
1db70 61 6c 75 65 20 74 6f 20 32 20 6f 72 20 6d 6f 72  alue to 2 or mor
1db80 65 20 6f 72 20 65 6c 73 65 20 66 61 69 6c 2e 0a  e or else fail..
1db90 20 20 20 20 2a 2a 20 49 66 20 74 68 65 72 65 20      ** If there 
1dba0 77 65 72 65 20 61 20 66 61 69 6c 75 72 65 2c 20  were a failure, 
1dbb0 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61  the prepared sta
1dbc0 74 65 6d 65 6e 74 20 77 6f 75 6c 64 20 68 61 76  tement would hav
1dbd0 65 20 68 61 6c 74 65 64 0a 20 20 20 20 2a 2a 20  e halted.    ** 
1dbe0 62 65 66 6f 72 65 20 72 65 61 63 68 69 6e 67 20  before reaching 
1dbf0 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
1dc00 2e 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28  . */.    assert(
1dc10 20 70 32 3e 3d 32 20 29 3b 0a 20 20 7d 0a 20 20   p2>=2 );.  }.  
1dc20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  if( pOp->p4type=
1dc30 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 7b 0a 20  =P4_KEYINFO ){. 
1dc40 20 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f     pKeyInfo = pO
1dc50 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a  p->p4.pKeyInfo;.
1dc60 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79      assert( pKey
1dc70 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64  Info->enc==ENC(d
1dc80 62 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  b) );.    assert
1dc90 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d  ( pKeyInfo->db==
1dca0 64 62 20 29 3b 0a 20 20 20 20 6e 46 69 65 6c 64  db );.    nField
1dcb0 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 41 6c   = pKeyInfo->nAl
1dcc0 6c 46 69 65 6c 64 3b 0a 20 20 7d 65 6c 73 65 20  lField;.  }else 
1dcd0 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  if( pOp->p4type=
1dce0 3d 50 34 5f 49 4e 54 33 32 20 29 7b 0a 20 20 20  =P4_INT32 ){.   
1dcf0 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70   nField = pOp->p
1dd00 34 2e 69 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  4.i;.  }.  asser
1dd10 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b  t( pOp->p1>=0 );
1dd20 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c  .  assert( nFiel
1dd30 64 3e 3d 30 20 29 3b 0a 20 20 74 65 73 74 63 61  d>=0 );.  testca
1dd40 73 65 28 20 6e 46 69 65 6c 64 3d 3d 30 20 29 3b  se( nField==0 );
1dd50 20 20 2f 2a 20 54 61 62 6c 65 20 77 69 74 68 20    /* Table with 
1dd60 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
1dd70 4b 45 59 20 61 6e 64 20 6e 6f 74 68 69 6e 67 20  KEY and nothing 
1dd80 65 6c 73 65 20 2a 2f 0a 20 20 70 43 75 72 20 3d  else */.  pCur =
1dd90 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28   allocateCursor(
1dda0 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 6e 46 69 65  p, pOp->p1, nFie
1ddb0 6c 64 2c 20 69 44 62 2c 20 43 55 52 54 59 50 45  ld, iDb, CURTYPE
1ddc0 5f 42 54 52 45 45 29 3b 0a 20 20 69 66 28 20 70  _BTREE);.  if( p
1ddd0 43 75 72 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  Cur==0 ) goto no
1dde0 5f 6d 65 6d 3b 0a 20 20 70 43 75 72 2d 3e 6e 75  _mem;.  pCur->nu
1ddf0 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 75  llRow = 1;.  pCu
1de00 72 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d 20 31  r->isOrdered = 1
1de10 3b 0a 20 20 70 43 75 72 2d 3e 70 67 6e 6f 52 6f  ;.  pCur->pgnoRo
1de20 6f 74 20 3d 20 70 32 3b 0a 23 69 66 64 65 66 20  ot = p2;.#ifdef 
1de30 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70  SQLITE_DEBUG.  p
1de40 43 75 72 2d 3e 77 72 46 6c 61 67 20 3d 20 77 72  Cur->wrFlag = wr
1de50 46 6c 61 67 3b 0a 23 65 6e 64 69 66 0a 20 20 72  Flag;.#endif.  r
1de60 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1de70 43 75 72 73 6f 72 28 70 58 2c 20 70 32 2c 20 77  Cursor(pX, p2, w
1de80 72 46 6c 61 67 2c 20 70 4b 65 79 49 6e 66 6f 2c  rFlag, pKeyInfo,
1de90 20 70 43 75 72 2d 3e 75 63 2e 70 43 75 72 73 6f   pCur->uc.pCurso
1dea0 72 29 3b 0a 20 20 70 43 75 72 2d 3e 70 4b 65 79  r);.  pCur->pKey
1deb0 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f 3b  Info = pKeyInfo;
1dec0 0a 20 20 2f 2a 20 53 65 74 20 74 68 65 20 56 64  .  /* Set the Vd
1ded0 62 65 43 75 72 73 6f 72 2e 69 73 54 61 62 6c 65  beCursor.isTable
1dee0 20 76 61 72 69 61 62 6c 65 2e 20 50 72 65 76 69   variable. Previ
1def0 6f 75 73 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a  ous versions of.
1df00 20 20 2a 2a 20 53 51 4c 69 74 65 20 75 73 65 64    ** SQLite used
1df10 20 74 6f 20 63 68 65 63 6b 20 69 66 20 74 68 65   to check if the
1df20 20 72 6f 6f 74 2d 70 61 67 65 20 66 6c 61 67 73   root-page flags
1df30 20 77 65 72 65 20 73 61 6e 65 20 61 74 20 74 68   were sane at th
1df40 69 73 20 70 6f 69 6e 74 0a 20 20 2a 2a 20 61 6e  is point.  ** an
1df50 64 20 72 65 70 6f 72 74 20 64 61 74 61 62 61 73  d report databas
1df60 65 20 63 6f 72 72 75 70 74 69 6f 6e 20 69 66 20  e corruption if 
1df70 74 68 65 79 20 77 65 72 65 20 6e 6f 74 2c 20 62  they were not, b
1df80 75 74 20 74 68 69 73 20 63 68 65 63 6b 20 68 61  ut this check ha
1df90 73 0a 20 20 2a 2a 20 73 69 6e 63 65 20 6d 6f 76  s.  ** since mov
1dfa0 65 64 20 69 6e 74 6f 20 74 68 65 20 62 74 72 65  ed into the btre
1dfb0 65 20 6c 61 79 65 72 2e 20 20 2a 2f 20 20 0a 20  e layer.  */  . 
1dfc0 20 70 43 75 72 2d 3e 69 73 54 61 62 6c 65 20 3d   pCur->isTable =
1dfd0 20 70 4f 70 2d 3e 70 34 74 79 70 65 21 3d 50 34   pOp->p4type!=P4
1dfe0 5f 4b 45 59 49 4e 46 4f 3b 0a 0a 6f 70 65 6e 5f  _KEYINFO;..open_
1dff0 63 75 72 73 6f 72 5f 73 65 74 5f 68 69 6e 74 73  cursor_set_hints
1e000 3a 0a 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c  :.  assert( OPFL
1e010 41 47 5f 42 55 4c 4b 43 53 52 3d 3d 42 54 52 45  AG_BULKCSR==BTRE
1e020 45 5f 42 55 4c 4b 4c 4f 41 44 20 29 3b 0a 20 20  E_BULKLOAD );.  
1e030 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 53  assert( OPFLAG_S
1e040 45 45 4b 45 51 3d 3d 42 54 52 45 45 5f 53 45 45  EEKEQ==BTREE_SEE
1e050 4b 5f 45 51 20 29 3b 0a 20 20 74 65 73 74 63 61  K_EQ );.  testca
1e060 73 65 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50  se( pOp->p5 & OP
1e070 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 29 3b 0a  FLAG_BULKCSR );.
1e080 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
1e090 41 42 4c 45 5f 43 55 52 53 4f 52 5f 48 49 4e 54  ABLE_CURSOR_HINT
1e0a0 53 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f  S.  testcase( pO
1e0b0 70 2d 3e 70 32 20 26 20 4f 50 46 4c 41 47 5f 53  p->p2 & OPFLAG_S
1e0c0 45 45 4b 45 51 20 29 3b 0a 23 65 6e 64 69 66 0a  EEKEQ );.#endif.
1e0d0 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75    sqlite3BtreeCu
1e0e0 72 73 6f 72 48 69 6e 74 46 6c 61 67 73 28 70 43  rsorHintFlags(pC
1e0f0 75 72 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 0a  ur->uc.pCursor,.
1e100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
1e120 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46 4c 41  pOp->p5 & (OPFLA
1e130 47 5f 42 55 4c 4b 43 53 52 7c 4f 50 46 4c 41 47  G_BULKCSR|OPFLAG
1e140 5f 53 45 45 4b 45 51 29 29 29 3b 0a 20 20 69 66  _SEEKEQ)));.  if
1e150 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
1e160 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1e170 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1e180 70 63 6f 64 65 3a 20 4f 70 65 6e 44 75 70 20 50  pcode: OpenDup P
1e190 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
1e1a0 20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75 72 73   Open a new curs
1e1b0 6f 72 20 50 31 20 74 68 61 74 20 70 6f 69 6e 74  or P1 that point
1e1c0 73 20 74 6f 20 74 68 65 20 73 61 6d 65 20 65 70  s to the same ep
1e1d0 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 61 73  hemeral table as
1e1e0 0a 2a 2a 20 63 75 72 73 6f 72 20 50 32 2e 20 20  .** cursor P2.  
1e1f0 54 68 65 20 50 32 20 63 75 72 73 6f 72 20 6d 75  The P2 cursor mu
1e200 73 74 20 68 61 76 65 20 62 65 65 6e 20 6f 70 65  st have been ope
1e210 6e 65 64 20 62 79 20 61 20 70 72 69 6f 72 20 4f  ned by a prior O
1e220 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 0a  P_OpenEphemeral.
1e230 2a 2a 20 6f 70 63 6f 64 65 2e 20 20 4f 6e 6c 79  ** opcode.  Only
1e240 20 65 70 68 65 6d 65 72 61 6c 20 63 75 72 73 6f   ephemeral curso
1e250 72 73 20 6d 61 79 20 62 65 20 64 75 70 6c 69 63  rs may be duplic
1e260 61 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 44 75 70 6c  ated..**.** Dupl
1e270 69 63 61 74 65 20 65 70 68 65 6d 65 72 61 6c 20  icate ephemeral 
1e280 63 75 72 73 6f 72 73 20 61 72 65 20 75 73 65 64  cursors are used
1e290 20 66 6f 72 20 73 65 6c 66 2d 6a 6f 69 6e 73 20   for self-joins 
1e2a0 6f 66 20 6d 61 74 65 72 69 61 6c 69 7a 65 64 20  of materialized 
1e2b0 76 69 65 77 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  views..*/.case O
1e2c0 50 5f 4f 70 65 6e 44 75 70 3a 20 7b 0a 20 20 56  P_OpenDup: {.  V
1e2d0 64 62 65 43 75 72 73 6f 72 20 2a 70 4f 72 69 67  dbeCursor *pOrig
1e2e0 3b 20 20 20 20 2f 2a 20 54 68 65 20 6f 72 69 67  ;    /* The orig
1e2f0 69 6e 61 6c 20 63 75 72 73 6f 72 20 74 6f 20 62  inal cursor to b
1e300 65 20 64 75 70 6c 69 63 61 74 65 64 20 2a 2f 0a  e duplicated */.
1e310 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1e320 78 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e  x;      /* The n
1e330 65 77 20 63 75 72 73 6f 72 20 2a 2f 0a 0a 20 20  ew cursor */..  
1e340 70 4f 72 69 67 20 3d 20 70 2d 3e 61 70 43 73 72  pOrig = p->apCsr
1e350 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73  [pOp->p2];.  ass
1e360 65 72 74 28 20 70 4f 72 69 67 2d 3e 70 42 74 78  ert( pOrig->pBtx
1e370 21 3d 30 20 29 3b 20 20 2f 2a 20 4f 6e 6c 79 20  !=0 );  /* Only 
1e380 65 70 68 65 6d 65 72 61 6c 20 63 75 72 73 6f 72  ephemeral cursor
1e390 73 20 63 61 6e 20 62 65 20 64 75 70 6c 69 63 61  s can be duplica
1e3a0 74 65 64 20 2a 2f 0a 0a 20 20 70 43 78 20 3d 20  ted */..  pCx = 
1e3b0 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70  allocateCursor(p
1e3c0 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 72 69 67  , pOp->p1, pOrig
1e3d0 2d 3e 6e 46 69 65 6c 64 2c 20 2d 31 2c 20 43 55  ->nField, -1, CU
1e3e0 52 54 59 50 45 5f 42 54 52 45 45 29 3b 0a 20 20  RTYPE_BTREE);.  
1e3f0 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74  if( pCx==0 ) got
1e400 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d  o no_mem;.  pCx-
1e410 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20  >nullRow = 1;.  
1e420 70 43 78 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c  pCx->isEphemeral
1e430 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 70 4b 65   = 1;.  pCx->pKe
1e440 79 49 6e 66 6f 20 3d 20 70 4f 72 69 67 2d 3e 70  yInfo = pOrig->p
1e450 4b 65 79 49 6e 66 6f 3b 0a 20 20 70 43 78 2d 3e  KeyInfo;.  pCx->
1e460 69 73 54 61 62 6c 65 20 3d 20 70 4f 72 69 67 2d  isTable = pOrig-
1e470 3e 69 73 54 61 62 6c 65 3b 0a 20 20 70 43 78 2d  >isTable;.  pCx-
1e480 3e 70 67 6e 6f 52 6f 6f 74 20 3d 20 70 4f 72 69  >pgnoRoot = pOri
1e490 67 2d 3e 70 67 6e 6f 52 6f 6f 74 3b 0a 20 20 72  g->pgnoRoot;.  r
1e4a0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1e4b0 43 75 72 73 6f 72 28 70 4f 72 69 67 2d 3e 70 42  Cursor(pOrig->pB
1e4c0 74 78 2c 20 70 43 78 2d 3e 70 67 6e 6f 52 6f 6f  tx, pCx->pgnoRoo
1e4d0 74 2c 20 42 54 52 45 45 5f 57 52 43 53 52 2c 0a  t, BTREE_WRCSR,.
1e4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e4f0 20 20 20 20 20 20 20 20 20 20 70 43 78 2d 3e 70            pCx->p
1e500 4b 65 79 49 6e 66 6f 2c 20 70 43 78 2d 3e 75 63  KeyInfo, pCx->uc
1e510 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 2f 2a 20  .pCursor);.  /* 
1e520 54 68 65 20 73 71 6c 69 74 65 33 42 74 72 65 65  The sqlite3Btree
1e530 43 75 72 73 6f 72 28 29 20 72 6f 75 74 69 6e 65  Cursor() routine
1e540 20 63 61 6e 20 6f 6e 6c 79 20 66 61 69 6c 20 66   can only fail f
1e550 6f 72 20 74 68 65 20 66 69 72 73 74 20 63 75 72  or the first cur
1e560 73 6f 72 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 20  sor.  ** opened 
1e570 66 6f 72 20 61 20 64 61 74 61 62 61 73 65 2e 20  for a database. 
1e580 20 53 69 6e 63 65 20 74 68 65 72 65 20 69 73 20   Since there is 
1e590 61 6c 72 65 61 64 79 20 61 6e 20 6f 70 65 6e 20  already an open 
1e5a0 63 75 72 73 6f 72 20 77 68 65 6e 20 74 68 69 73  cursor when this
1e5b0 0a 20 20 2a 2a 20 6f 70 63 6f 64 65 20 69 73 20  .  ** opcode is 
1e5c0 72 75 6e 2c 20 74 68 65 20 73 71 6c 69 74 65 33  run, the sqlite3
1e5d0 42 74 72 65 65 43 75 72 73 6f 72 28 29 20 63 61  BtreeCursor() ca
1e5e0 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a 20 20 61  nnot fail */.  a
1e5f0 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
1e600 45 5f 4f 4b 20 29 3b 0a 20 20 62 72 65 61 6b 3b  E_OK );.  break;
1e610 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  .}.../* Opcode: 
1e620 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 50 31  OpenEphemeral P1
1e630 20 50 32 20 2a 20 50 34 20 50 35 0a 2a 2a 20 53   P2 * P4 P5.** S
1e640 79 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e  ynopsis: nColumn
1e650 3d 50 32 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61  =P2.**.** Open a
1e660 20 6e 65 77 20 63 75 72 73 6f 72 20 50 31 20 74   new cursor P1 t
1e670 6f 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61  o a transient ta
1e680 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73  ble..** The curs
1e690 6f 72 20 69 73 20 61 6c 77 61 79 73 20 6f 70 65  or is always ope
1e6a0 6e 65 64 20 72 65 61 64 2f 77 72 69 74 65 20 65  ned read/write e
1e6b0 76 65 6e 20 69 66 20 0a 2a 2a 20 74 68 65 20 6d  ven if .** the m
1e6c0 61 69 6e 20 64 61 74 61 62 61 73 65 20 69 73 20  ain database is 
1e6d0 72 65 61 64 2d 6f 6e 6c 79 2e 20 20 54 68 65 20  read-only.  The 
1e6e0 65 70 68 65 6d 65 72 61 6c 0a 2a 2a 20 74 61 62  ephemeral.** tab
1e6f0 6c 65 20 69 73 20 64 65 6c 65 74 65 64 20 61 75  le is deleted au
1e700 74 6f 6d 61 74 69 63 61 6c 6c 79 20 77 68 65 6e  tomatically when
1e710 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 63   the cursor is c
1e720 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  losed..**.** If 
1e730 74 68 65 20 63 75 72 73 6f 72 20 50 31 20 69 73  the cursor P1 is
1e740 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 65 64 20   already opened 
1e750 6f 6e 20 61 6e 20 65 70 68 65 6d 65 72 61 6c 20  on an ephemeral 
1e760 74 61 62 6c 65 2c 20 74 68 65 20 74 61 62 6c 65  table, the table
1e770 0a 2a 2a 20 69 73 20 63 6c 65 61 72 65 64 20 28  .** is cleared (
1e780 61 6c 6c 20 63 6f 6e 74 65 6e 74 20 69 73 20 65  all content is e
1e790 72 61 73 65 64 29 2e 0a 2a 2a 0a 2a 2a 20 50 32  rased)..**.** P2
1e7a0 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   is the number o
1e7b0 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
1e7c0 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65   ephemeral table
1e7d0 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20  ..** The cursor 
1e7e0 70 6f 69 6e 74 73 20 74 6f 20 61 20 42 54 72 65  points to a BTre
1e7f0 65 20 74 61 62 6c 65 20 69 66 20 50 34 3d 3d 30  e table if P4==0
1e800 20 61 6e 64 20 74 6f 20 61 20 42 54 72 65 65 20   and to a BTree 
1e810 69 6e 64 65 78 0a 2a 2a 20 69 66 20 50 34 20 69  index.** if P4 i
1e820 73 20 6e 6f 74 20 30 2e 20 20 49 66 20 50 34 20  s not 0.  If P4 
1e830 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 74 20  is not NULL, it 
1e840 70 6f 69 6e 74 73 20 74 6f 20 61 20 4b 65 79 49  points to a KeyI
1e850 6e 66 6f 20 73 74 72 75 63 74 75 72 65 0a 2a 2a  nfo structure.**
1e860 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 74 68   that defines th
1e870 65 20 66 6f 72 6d 61 74 20 6f 66 20 6b 65 79 73  e format of keys
1e880 20 69 6e 20 74 68 65 20 69 6e 64 65 78 2e 0a 2a   in the index..*
1e890 2a 0a 2a 2a 20 54 68 65 20 50 35 20 70 61 72 61  *.** The P5 para
1e8a0 6d 65 74 65 72 20 63 61 6e 20 62 65 20 61 20 6d  meter can be a m
1e8b0 61 73 6b 20 6f 66 20 74 68 65 20 42 54 52 45 45  ask of the BTREE
1e8c0 5f 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64  _* flags defined
1e8d0 0a 2a 2a 20 69 6e 20 62 74 72 65 65 2e 68 2e 20  .** in btree.h. 
1e8e0 20 54 68 65 73 65 20 66 6c 61 67 73 20 63 6f 6e   These flags con
1e8f0 74 72 6f 6c 20 61 73 70 65 63 74 73 20 6f 66 20  trol aspects of 
1e900 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66  the operation of
1e910 0a 2a 2a 20 74 68 65 20 62 74 72 65 65 2e 20 20  .** the btree.  
1e920 54 68 65 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a  The BTREE_OMIT_J
1e930 4f 55 52 4e 41 4c 20 61 6e 64 20 42 54 52 45 45  OURNAL and BTREE
1e940 5f 53 49 4e 47 4c 45 20 66 6c 61 67 73 20 61 72  _SINGLE flags ar
1e950 65 0a 2a 2a 20 61 64 64 65 64 20 61 75 74 6f 6d  e.** added autom
1e960 61 74 69 63 61 6c 6c 79 2e 0a 2a 2f 0a 2f 2a 20  atically..*/./* 
1e970 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 41 75 74 6f  Opcode: OpenAuto
1e980 69 6e 64 65 78 20 50 31 20 50 32 20 2a 20 50 34  index P1 P2 * P4
1e990 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
1e9a0 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a  nColumn=P2.**.**
1e9b0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72   This opcode wor
1e9c0 6b 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 4f  ks the same as O
1e9d0 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 2e  P_OpenEphemeral.
1e9e0 20 20 49 74 20 68 61 73 20 61 0a 2a 2a 20 64 69    It has a.** di
1e9f0 66 66 65 72 65 6e 74 20 6e 61 6d 65 20 74 6f 20  fferent name to 
1ea00 64 69 73 74 69 6e 67 75 69 73 68 20 69 74 73 20  distinguish its 
1ea10 75 73 65 2e 20 20 54 61 62 6c 65 73 20 63 72 65  use.  Tables cre
1ea20 61 74 65 64 20 75 73 69 6e 67 0a 2a 2a 20 62 79  ated using.** by
1ea30 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c   this opcode wil
1ea40 6c 20 62 65 20 75 73 65 64 20 66 6f 72 20 61 75  l be used for au
1ea50 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61  tomatically crea
1ea60 74 65 64 20 74 72 61 6e 73 69 65 6e 74 0a 2a 2a  ted transient.**
1ea70 20 69 6e 64 69 63 65 73 20 69 6e 20 6a 6f 69 6e   indices in join
1ea80 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70  s..*/.case OP_Op
1ea90 65 6e 41 75 74 6f 69 6e 64 65 78 3a 20 0a 63 61  enAutoindex: .ca
1eaa0 73 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65  se OP_OpenEpheme
1eab0 72 61 6c 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  ral: {.  VdbeCur
1eac0 73 6f 72 20 2a 70 43 78 3b 0a 20 20 4b 65 79 49  sor *pCx;.  KeyI
1ead0 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 0a  nfo *pKeyInfo;..
1eae0 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 69    static const i
1eaf0 6e 74 20 76 66 73 46 6c 61 67 73 20 3d 20 0a 20  nt vfsFlags = . 
1eb00 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e       SQLITE_OPEN
1eb10 5f 52 45 41 44 57 52 49 54 45 20 7c 0a 20 20 20  _READWRITE |.   
1eb20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 43     SQLITE_OPEN_C
1eb30 52 45 41 54 45 20 7c 0a 20 20 20 20 20 20 53 51  REATE |.      SQ
1eb40 4c 49 54 45 5f 4f 50 45 4e 5f 45 58 43 4c 55 53  LITE_OPEN_EXCLUS
1eb50 49 56 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49  IVE |.      SQLI
1eb60 54 45 5f 4f 50 45 4e 5f 44 45 4c 45 54 45 4f 4e  TE_OPEN_DELETEON
1eb70 43 4c 4f 53 45 20 7c 0a 20 20 20 20 20 20 53 51  CLOSE |.      SQ
1eb80 4c 49 54 45 5f 4f 50 45 4e 5f 54 52 41 4e 53 49  LITE_OPEN_TRANSI
1eb90 45 4e 54 5f 44 42 3b 0a 20 20 61 73 73 65 72 74  ENT_DB;.  assert
1eba0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a  ( pOp->p1>=0 );.
1ebb0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1ebc0 32 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20  2>=0 );.  pCx = 
1ebd0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1ebe0 5d 3b 0a 20 20 69 66 28 20 70 43 78 20 29 7b 0a  ];.  if( pCx ){.
1ebf0 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 65 70      /* If the ep
1ec00 68 65 72 6d 65 72 61 6c 20 74 61 62 6c 65 20 69  hermeral table i
1ec10 73 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 2c 20  s already open, 
1ec20 65 72 61 73 65 20 61 6c 6c 20 65 78 69 73 74 69  erase all existi
1ec30 6e 67 20 63 6f 6e 74 65 6e 74 0a 20 20 20 20 2a  ng content.    *
1ec40 2a 20 73 6f 20 74 68 61 74 20 74 68 65 20 74 61  * so that the ta
1ec50 62 6c 65 20 69 73 20 65 6d 70 74 79 20 61 67 61  ble is empty aga
1ec60 69 6e 2c 20 72 61 74 68 65 72 20 74 68 61 6e 20  in, rather than 
1ec70 63 72 65 61 74 69 6e 67 20 61 20 6e 65 77 20 74  creating a new t
1ec80 61 62 6c 65 2e 20 2a 2f 0a 20 20 20 20 72 63 20  able. */.    rc 
1ec90 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c  = sqlite3BtreeCl
1eca0 65 61 72 54 61 62 6c 65 28 70 43 78 2d 3e 70 42  earTable(pCx->pB
1ecb0 74 78 2c 20 70 43 78 2d 3e 70 67 6e 6f 52 6f 6f  tx, pCx->pgnoRoo
1ecc0 74 2c 20 30 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  t, 0);.  }else{.
1ecd0 20 20 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61      pCx = alloca
1ece0 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d  teCursor(p, pOp-
1ecf0 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31  >p1, pOp->p2, -1
1ed00 2c 20 43 55 52 54 59 50 45 5f 42 54 52 45 45 29  , CURTYPE_BTREE)
1ed10 3b 0a 20 20 20 20 69 66 28 20 70 43 78 3d 3d 30  ;.    if( pCx==0
1ed20 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
1ed30 20 20 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77      pCx->nullRow
1ed40 20 3d 20 31 3b 0a 20 20 20 20 70 43 78 2d 3e 69   = 1;.    pCx->i
1ed50 73 45 70 68 65 6d 65 72 61 6c 20 3d 20 31 3b 0a  sEphemeral = 1;.
1ed60 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1ed70 42 74 72 65 65 4f 70 65 6e 28 64 62 2d 3e 70 56  BtreeOpen(db->pV
1ed80 66 73 2c 20 30 2c 20 64 62 2c 20 26 70 43 78 2d  fs, 0, db, &pCx-
1ed90 3e 70 42 74 78 2c 20 0a 20 20 20 20 20 20 20 20  >pBtx, .        
1eda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1edb0 20 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55    BTREE_OMIT_JOU
1edc0 52 4e 41 4c 20 7c 20 42 54 52 45 45 5f 53 49 4e  RNAL | BTREE_SIN
1edd0 47 4c 45 20 7c 20 70 4f 70 2d 3e 70 35 2c 0a 20  GLE | pOp->p5,. 
1ede0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1edf0 20 20 20 20 20 20 20 20 20 76 66 73 46 6c 61 67           vfsFlag
1ee00 73 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  s);.    if( rc==
1ee10 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1ee20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1ee30 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70  treeBeginTrans(p
1ee40 43 78 2d 3e 70 42 74 78 2c 20 31 2c 20 30 29 3b  Cx->pBtx, 1, 0);
1ee50 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 72  .    }.    if( r
1ee60 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
1ee70 20 20 20 20 20 20 2f 2a 20 49 66 20 61 20 74 72        /* If a tr
1ee80 61 6e 73 69 65 6e 74 20 69 6e 64 65 78 20 69 73  ansient index is
1ee90 20 72 65 71 75 69 72 65 64 2c 20 63 72 65 61 74   required, creat
1eea0 65 20 69 74 20 62 79 20 63 61 6c 6c 69 6e 67 0a  e it by calling.
1eeb0 20 20 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33        ** sqlite3
1eec0 42 74 72 65 65 43 72 65 61 74 65 54 61 62 6c 65  BtreeCreateTable
1eed0 28 29 20 77 69 74 68 20 74 68 65 20 42 54 52 45  () with the BTRE
1eee0 45 5f 42 4c 4f 42 4b 45 59 20 66 6c 61 67 20 62  E_BLOBKEY flag b
1eef0 65 66 6f 72 65 0a 20 20 20 20 20 20 2a 2a 20 6f  efore.      ** o
1ef00 70 65 6e 69 6e 67 20 69 74 2e 20 49 66 20 61 20  pening it. If a 
1ef10 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 20  transient table 
1ef20 69 73 20 72 65 71 75 69 72 65 64 2c 20 6a 75 73  is required, jus
1ef30 74 20 75 73 65 20 74 68 65 0a 20 20 20 20 20 20  t use the.      
1ef40 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ** automatically
1ef50 20 63 72 65 61 74 65 64 20 74 61 62 6c 65 20 77   created table w
1ef60 69 74 68 20 72 6f 6f 74 2d 70 61 67 65 20 31 20  ith root-page 1 
1ef70 28 61 6e 20 42 4c 4f 42 5f 49 4e 54 4b 45 59 20  (an BLOB_INTKEY 
1ef80 74 61 62 6c 65 29 2e 0a 20 20 20 20 20 20 2a 2f  table)..      */
1ef90 0a 20 20 20 20 20 20 69 66 28 20 28 70 43 78 2d  .      if( (pCx-
1efa0 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79  >pKeyInfo = pKey
1efb0 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Info = pOp->p4.p
1efc0 4b 65 79 49 6e 66 6f 29 21 3d 30 20 29 7b 0a 20  KeyInfo)!=0 ){. 
1efd0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
1efe0 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b  Op->p4type==P4_K
1eff0 45 59 49 4e 46 4f 20 29 3b 0a 20 20 20 20 20 20  EYINFO );.      
1f000 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1f010 72 65 65 43 72 65 61 74 65 54 61 62 6c 65 28 70  reeCreateTable(p
1f020 43 78 2d 3e 70 42 74 78 2c 20 28 69 6e 74 2a 29  Cx->pBtx, (int*)
1f030 26 70 43 78 2d 3e 70 67 6e 6f 52 6f 6f 74 2c 0a  &pCx->pgnoRoot,.
1f040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f060 20 20 20 20 20 42 54 52 45 45 5f 42 4c 4f 42 4b       BTREE_BLOBK
1f070 45 59 20 7c 20 70 4f 70 2d 3e 70 35 29 3b 20 0a  EY | pOp->p5); .
1f080 20 20 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d          if( rc==
1f090 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1f0a0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
1f0b0 43 78 2d 3e 70 67 6e 6f 52 6f 6f 74 3d 3d 4d 41  Cx->pgnoRoot==MA
1f0c0 53 54 45 52 5f 52 4f 4f 54 2b 31 20 29 3b 0a 20  STER_ROOT+1 );. 
1f0d0 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28           assert(
1f0e0 20 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64   pKeyInfo->db==d
1f0f0 62 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 61  b );.          a
1f100 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d  ssert( pKeyInfo-
1f110 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b  >enc==ENC(db) );
1f120 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20  .          rc = 
1f130 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
1f140 6f 72 28 70 43 78 2d 3e 70 42 74 78 2c 20 70 43  or(pCx->pBtx, pC
1f150 78 2d 3e 70 67 6e 6f 52 6f 6f 74 2c 20 42 54 52  x->pgnoRoot, BTR
1f160 45 45 5f 57 52 43 53 52 2c 0a 20 20 20 20 20 20  EE_WRCSR,.      
1f170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f180 20 20 20 20 20 20 20 20 20 20 20 20 70 4b 65 79              pKey
1f190 49 6e 66 6f 2c 20 70 43 78 2d 3e 75 63 2e 70 43  Info, pCx->uc.pC
1f1a0 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 20 20  ursor);.        
1f1b0 7d 0a 20 20 20 20 20 20 20 20 70 43 78 2d 3e 69  }.        pCx->i
1f1c0 73 54 61 62 6c 65 20 3d 20 30 3b 0a 20 20 20 20  sTable = 0;.    
1f1d0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
1f1e0 20 70 43 78 2d 3e 70 67 6e 6f 52 6f 6f 74 20 3d   pCx->pgnoRoot =
1f1f0 20 4d 41 53 54 45 52 5f 52 4f 4f 54 3b 0a 20 20   MASTER_ROOT;.  
1f200 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1f210 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 43  e3BtreeCursor(pC
1f220 78 2d 3e 70 42 74 78 2c 20 4d 41 53 54 45 52 5f  x->pBtx, MASTER_
1f230 52 4f 4f 54 2c 20 42 54 52 45 45 5f 57 52 43 53  ROOT, BTREE_WRCS
1f240 52 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  R,.             
1f250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f260 20 20 20 30 2c 20 70 43 78 2d 3e 75 63 2e 70 43     0, pCx->uc.pC
1f270 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 20 20  ursor);.        
1f280 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31  pCx->isTable = 1
1f290 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
1f2a0 20 20 20 20 70 43 78 2d 3e 69 73 4f 72 64 65 72      pCx->isOrder
1f2b0 65 64 20 3d 20 28 70 4f 70 2d 3e 70 35 21 3d 42  ed = (pOp->p5!=B
1f2c0 54 52 45 45 5f 55 4e 4f 52 44 45 52 45 44 29 3b  TREE_UNORDERED);
1f2d0 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20  .  }.  if( rc ) 
1f2e0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1f2f0 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b  o_error;.  break
1f300 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1f310 53 6f 72 74 65 72 4f 70 65 6e 20 50 31 20 50 32  SorterOpen P1 P2
1f320 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54   P3 P4 *.**.** T
1f330 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73  his opcode works
1f340 20 6c 69 6b 65 20 4f 50 5f 4f 70 65 6e 45 70 68   like OP_OpenEph
1f350 65 6d 65 72 61 6c 20 65 78 63 65 70 74 20 74 68  emeral except th
1f360 61 74 20 69 74 20 6f 70 65 6e 73 0a 2a 2a 20 61  at it opens.** a
1f370 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 64 65 78   transient index
1f380 20 74 68 61 74 20 69 73 20 73 70 65 63 69 66 69   that is specifi
1f390 63 61 6c 6c 79 20 64 65 73 69 67 6e 65 64 20 74  cally designed t
1f3a0 6f 20 73 6f 72 74 20 6c 61 72 67 65 0a 2a 2a 20  o sort large.** 
1f3b0 74 61 62 6c 65 73 20 75 73 69 6e 67 20 61 6e 20  tables using an 
1f3c0 65 78 74 65 72 6e 61 6c 20 6d 65 72 67 65 2d 73  external merge-s
1f3d0 6f 72 74 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 2a  ort algorithm..*
1f3e0 2a 0a 2a 2a 20 49 66 20 61 72 67 75 6d 65 6e 74  *.** If argument
1f3f0 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c   P3 is non-zero,
1f400 20 74 68 65 6e 20 69 74 20 69 6e 64 69 63 61 74   then it indicat
1f410 65 73 20 74 68 61 74 20 74 68 65 20 73 6f 72 74  es that the sort
1f420 65 72 20 6d 61 79 0a 2a 2a 20 61 73 73 75 6d 65  er may.** assume
1f430 20 74 68 61 74 20 61 20 73 74 61 62 6c 65 20 73   that a stable s
1f440 6f 72 74 20 63 6f 6e 73 69 64 65 72 69 6e 67 20  ort considering 
1f450 74 68 65 20 66 69 72 73 74 20 50 33 20 66 69 65  the first P3 fie
1f460 6c 64 73 20 6f 66 20 65 61 63 68 0a 2a 2a 20 6b  lds of each.** k
1f470 65 79 20 69 73 20 73 75 66 66 69 63 69 65 6e 74  ey is sufficient
1f480 20 74 6f 20 70 72 6f 64 75 63 65 20 74 68 65 20   to produce the 
1f490 72 65 71 75 69 72 65 64 20 72 65 73 75 6c 74 73  required results
1f4a0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72  ..*/.case OP_Sor
1f4b0 74 65 72 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62  terOpen: {.  Vdb
1f4c0 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 20  eCursor *pCx;.. 
1f4d0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1f4e0 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  >=0 );.  assert(
1f4f0 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a 20   pOp->p2>=0 );. 
1f500 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43   pCx = allocateC
1f510 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31  ursor(p, pOp->p1
1f520 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 43  , pOp->p2, -1, C
1f530 55 52 54 59 50 45 5f 53 4f 52 54 45 52 29 3b 0a  URTYPE_SORTER);.
1f540 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67    if( pCx==0 ) g
1f550 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43  oto no_mem;.  pC
1f560 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f  x->pKeyInfo = pO
1f570 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a  p->p4.pKeyInfo;.
1f580 20 20 61 73 73 65 72 74 28 20 70 43 78 2d 3e 70    assert( pCx->p
1f590 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20  KeyInfo->db==db 
1f5a0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 78  );.  assert( pCx
1f5b0 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d  ->pKeyInfo->enc=
1f5c0 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20 20 72 63  =ENC(db) );.  rc
1f5d0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f   = sqlite3VdbeSo
1f5e0 72 74 65 72 49 6e 69 74 28 64 62 2c 20 70 4f 70  rterInit(db, pOp
1f5f0 2d 3e 70 33 2c 20 70 43 78 29 3b 0a 20 20 69 66  ->p3, pCx);.  if
1f600 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
1f610 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1f620 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1f630 70 63 6f 64 65 3a 20 53 65 71 75 65 6e 63 65 54  pcode: SequenceT
1f640 65 73 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  est P1 P2 * * *.
1f650 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 28  ** Synopsis: if(
1f660 20 63 75 72 73 6f 72 5b 50 31 5d 2e 63 74 72 2b   cursor[P1].ctr+
1f670 2b 20 29 20 70 63 20 3d 20 50 32 0a 2a 2a 0a 2a  + ) pc = P2.**.*
1f680 2a 20 50 31 20 69 73 20 61 20 73 6f 72 74 65 72  * P1 is a sorter
1f690 20 63 75 72 73 6f 72 2e 20 49 66 20 74 68 65 20   cursor. If the 
1f6a0 73 65 71 75 65 6e 63 65 20 63 6f 75 6e 74 65 72  sequence counter
1f6b0 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 7a 65   is currently ze
1f6c0 72 6f 2c 20 6a 75 6d 70 0a 2a 2a 20 74 6f 20 50  ro, jump.** to P
1f6d0 32 2e 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66  2. Regardless of
1f6e0 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
1f6f0 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
1f700 6e 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 65  n, increment the
1f710 0a 2a 2a 20 74 68 65 20 73 65 71 75 65 6e 63 65  .** the sequence
1f720 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20   value..*/.case 
1f730 4f 50 5f 53 65 71 75 65 6e 63 65 54 65 73 74 3a  OP_SequenceTest:
1f740 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
1f750 2a 70 43 3b 0a 20 20 61 73 73 65 72 74 28 20 70  *pC;.  assert( p
1f760 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
1f770 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
1f780 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
1f790 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
1f7a0 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28  ssert( isSorter(
1f7b0 70 43 29 20 29 3b 0a 20 20 69 66 28 20 28 70 43  pC) );.  if( (pC
1f7c0 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b 29 3d 3d 30  ->seqCount++)==0
1f7d0 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d   ){.    goto jum
1f7e0 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62  p_to_p2;.  }.  b
1f7f0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
1f800 64 65 3a 20 4f 70 65 6e 50 73 65 75 64 6f 20 50  de: OpenPseudo P
1f810 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
1f820 79 6e 6f 70 73 69 73 3a 20 50 33 20 63 6f 6c 75  ynopsis: P3 colu
1f830 6d 6e 73 20 69 6e 20 72 5b 50 32 5d 0a 2a 2a 0a  mns in r[P2].**.
1f840 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75  ** Open a new cu
1f850 72 73 6f 72 20 74 68 61 74 20 70 6f 69 6e 74 73  rsor that points
1f860 20 74 6f 20 61 20 66 61 6b 65 20 74 61 62 6c 65   to a fake table
1f870 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61   that contains a
1f880 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f   single.** row o
1f890 66 20 64 61 74 61 2e 20 20 54 68 65 20 63 6f 6e  f data.  The con
1f8a0 74 65 6e 74 20 6f 66 20 74 68 61 74 20 6f 6e 65  tent of that one
1f8b0 20 72 6f 77 20 69 73 20 74 68 65 20 63 6f 6e 74   row is the cont
1f8c0 65 6e 74 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a  ent of memory.**
1f8d0 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49   register P2.  I
1f8e0 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 63  n other words, c
1f8f0 75 72 73 6f 72 20 50 31 20 62 65 63 6f 6d 65 73  ursor P1 becomes
1f900 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68   an alias for th
1f910 65 20 0a 2a 2a 20 4d 45 4d 5f 42 6c 6f 62 20 63  e .** MEM_Blob c
1f920 6f 6e 74 65 6e 74 20 63 6f 6e 74 61 69 6e 65 64  ontent contained
1f930 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
1f940 0a 2a 2a 0a 2a 2a 20 41 20 70 73 65 75 64 6f 2d  .**.** A pseudo-
1f950 74 61 62 6c 65 20 63 72 65 61 74 65 64 20 62 79  table created by
1f960 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   this opcode is 
1f970 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 61 20 73  used to hold a s
1f980 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 75 74  ingle.** row out
1f990 70 75 74 20 66 72 6f 6d 20 74 68 65 20 73 6f 72  put from the sor
1f9a0 74 65 72 20 73 6f 20 74 68 61 74 20 74 68 65 20  ter so that the 
1f9b0 72 6f 77 20 63 61 6e 20 62 65 20 64 65 63 6f 6d  row can be decom
1f9c0 70 6f 73 65 64 20 69 6e 74 6f 0a 2a 2a 20 69 6e  posed into.** in
1f9d0 64 69 76 69 64 75 61 6c 20 63 6f 6c 75 6d 6e 73  dividual columns
1f9e0 20 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 43 6f   using the OP_Co
1f9f0 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 20 20 54 68  lumn opcode.  Th
1fa00 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f  e OP_Column opco
1fa10 64 65 0a 2a 2a 20 69 73 20 74 68 65 20 6f 6e 6c  de.** is the onl
1fa20 79 20 63 75 72 73 6f 72 20 6f 70 63 6f 64 65 20  y cursor opcode 
1fa30 74 68 61 74 20 77 6f 72 6b 73 20 77 69 74 68 20  that works with 
1fa40 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a  a pseudo-table..
1fa50 2a 2a 0a 2a 2a 20 50 33 20 69 73 20 74 68 65 20  **.** P3 is the 
1fa60 6e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73  number of fields
1fa70 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 73 20   in the records 
1fa80 74 68 61 74 20 77 69 6c 6c 20 62 65 20 73 74 6f  that will be sto
1fa90 72 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 70 73  red by.** the ps
1faa0 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63  eudo-table..*/.c
1fab0 61 73 65 20 4f 50 5f 4f 70 65 6e 50 73 65 75 64  ase OP_OpenPseud
1fac0 6f 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  o: {.  VdbeCurso
1fad0 72 20 2a 70 43 78 3b 0a 0a 20 20 61 73 73 65 72  r *pCx;..  asser
1fae0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b  t( pOp->p1>=0 );
1faf0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1fb00 70 33 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d  p3>=0 );.  pCx =
1fb10 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28   allocateCursor(
1fb20 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  p, pOp->p1, pOp-
1fb30 3e 70 33 2c 20 2d 31 2c 20 43 55 52 54 59 50 45  >p3, -1, CURTYPE
1fb40 5f 50 53 45 55 44 4f 29 3b 0a 20 20 69 66 28 20  _PSEUDO);.  if( 
1fb50 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  pCx==0 ) goto no
1fb60 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c  _mem;.  pCx->nul
1fb70 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d  lRow = 1;.  pCx-
1fb80 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 70 4f  >seekResult = pO
1fb90 70 2d 3e 70 32 3b 0a 20 20 70 43 78 2d 3e 69 73  p->p2;.  pCx->is
1fba0 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 2f 2a 20  Table = 1;.  /* 
1fbb0 47 69 76 65 20 74 68 69 73 20 70 73 65 75 64 6f  Give this pseudo
1fbc0 2d 63 75 72 73 6f 72 20 61 20 66 61 6b 65 20 42  -cursor a fake B
1fbd0 74 43 75 72 73 6f 72 20 70 6f 69 6e 74 65 72 20  tCursor pointer 
1fbe0 73 6f 20 74 68 61 74 20 70 43 78 0a 20 20 2a 2a  so that pCx.  **
1fbf0 20 63 61 6e 20 62 65 20 73 61 66 65 6c 79 20 70   can be safely p
1fc00 61 73 73 65 64 20 74 6f 20 73 71 6c 69 74 65 33  assed to sqlite3
1fc10 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f  VdbeCursorMoveto
1fc20 28 29 2e 20 20 54 68 69 73 20 61 76 6f 69 64 73  ().  This avoids
1fc30 20 61 20 74 65 73 74 0a 20 20 2a 2a 20 66 6f 72   a test.  ** for
1fc40 20 70 43 78 2d 3e 65 43 75 72 54 79 70 65 3d 3d   pCx->eCurType==
1fc50 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 69 6e  CURTYPE_BTREE in
1fc60 73 69 64 65 20 6f 66 20 73 71 6c 69 74 65 33 56  side of sqlite3V
1fc70 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  dbeCursorMoveto(
1fc80 29 0a 20 20 2a 2a 20 77 68 69 63 68 20 69 73 20  ).  ** which is 
1fc90 61 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 6f 70  a performance op
1fca0 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20  timization */.  
1fcb0 70 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f 72 20  pCx->uc.pCursor 
1fcc0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 46 61  = sqlite3BtreeFa
1fcd0 6b 65 56 61 6c 69 64 43 75 72 73 6f 72 28 29 3b  keValidCursor();
1fce0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1fcf0 70 35 3d 3d 30 20 29 3b 0a 20 20 62 72 65 61 6b  p5==0 );.  break
1fd00 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1fd10 43 6c 6f 73 65 20 50 31 20 2a 20 2a 20 2a 20 2a  Close P1 * * * *
1fd20 0a 2a 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61 20 63  .**.** Close a c
1fd30 75 72 73 6f 72 20 70 72 65 76 69 6f 75 73 6c 79  ursor previously
1fd40 20 6f 70 65 6e 65 64 20 61 73 20 50 31 2e 20 20   opened as P1.  
1fd50 49 66 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20  If P1 is not.** 
1fd60 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 2c 20  currently open, 
1fd70 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
1fd80 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a   is a no-op..*/.
1fd90 63 61 73 65 20 4f 50 5f 43 6c 6f 73 65 3a 20 7b  case OP_Close: {
1fda0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1fdb0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
1fdc0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1fdd0 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65 65   sqlite3VdbeFree
1fde0 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43  Cursor(p, p->apC
1fdf0 73 72 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20  sr[pOp->p1]);.  
1fe00 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1fe10 5d 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a  ] = 0;.  break;.
1fe20 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  }..#ifdef SQLITE
1fe30 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 55  _ENABLE_COLUMN_U
1fe40 53 45 44 5f 4d 41 53 4b 0a 2f 2a 20 4f 70 63 6f  SED_MASK./* Opco
1fe50 64 65 3a 20 43 6f 6c 75 6d 6e 73 55 73 65 64 20  de: ColumnsUsed 
1fe60 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
1fe70 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 28 77  * This opcode (w
1fe80 68 69 63 68 20 6f 6e 6c 79 20 65 78 69 73 74 73  hich only exists
1fe90 20 69 66 20 53 51 4c 69 74 65 20 77 61 73 20 63   if SQLite was c
1fea0 6f 6d 70 69 6c 65 64 20 77 69 74 68 0a 2a 2a 20  ompiled with.** 
1feb0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f  SQLITE_ENABLE_CO
1fec0 4c 55 4d 4e 5f 55 53 45 44 5f 4d 41 53 4b 29 20  LUMN_USED_MASK) 
1fed0 69 64 65 6e 74 69 66 69 65 73 20 77 68 69 63 68  identifies which
1fee0 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 0a   columns of the.
1fef0 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  ** table or inde
1ff00 78 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31 20  x for cursor P1 
1ff10 61 72 65 20 75 73 65 64 2e 20 20 50 34 20 69 73  are used.  P4 is
1ff20 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65   a 64-bit intege
1ff30 72 0a 2a 2a 20 28 50 34 5f 49 4e 54 36 34 29 20  r.** (P4_INT64) 
1ff40 69 6e 20 77 68 69 63 68 20 74 68 65 20 66 69 72  in which the fir
1ff50 73 74 20 36 33 20 62 69 74 73 20 61 72 65 20 6f  st 63 bits are o
1ff60 6e 65 20 66 6f 72 20 65 61 63 68 20 6f 66 20 74  ne for each of t
1ff70 68 65 0a 2a 2a 20 66 69 72 73 74 20 36 33 20 63  he.** first 63 c
1ff80 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20 74 61  olumns of the ta
1ff90 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 74 68 61  ble or index tha
1ffa0 74 20 61 72 65 20 61 63 74 75 61 6c 6c 79 20 75  t are actually u
1ffb0 73 65 64 0a 2a 2a 20 62 79 20 74 68 65 20 63 75  sed.** by the cu
1ffc0 72 73 6f 72 2e 20 20 54 68 65 20 68 69 67 68 2d  rsor.  The high-
1ffd0 6f 72 64 65 72 20 62 69 74 20 69 73 20 73 65 74  order bit is set
1ffe0 20 69 66 20 61 6e 79 20 63 6f 6c 75 6d 6e 20 61   if any column a
1fff0 66 74 65 72 0a 2a 2a 20 74 68 65 20 36 34 74 68  fter.** the 64th
20000 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 63 61 73   is used..*/.cas
20010 65 20 4f 50 5f 43 6f 6c 75 6d 6e 73 55 73 65 64  e OP_ColumnsUsed
20020 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
20030 20 2a 70 43 3b 0a 20 20 70 43 20 3d 20 70 2d 3e   *pC;.  pC = p->
20040 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
20050 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
20060 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
20070 42 54 52 45 45 20 29 3b 0a 20 20 70 43 2d 3e 6d  BTREE );.  pC->m
20080 61 73 6b 55 73 65 64 20 3d 20 2a 28 75 36 34 2a  askUsed = *(u64*
20090 29 70 4f 70 2d 3e 70 34 2e 70 49 36 34 3b 0a 20  )pOp->p4.pI64;. 
200a0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
200b0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65  ../* Opcode: See
200c0 6b 47 45 20 50 31 20 50 32 20 50 33 20 50 34 20  kGE P1 P2 P3 P4 
200d0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  *.** Synopsis: k
200e0 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
200f0 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72  * If cursor P1 r
20100 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20  efers to an SQL 
20110 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68  table (B-Tree th
20120 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20  at uses integer 
20130 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74  keys), .** use t
20140 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
20150 73 74 65 72 20 50 33 20 61 73 20 74 68 65 20 6b  ster P3 as the k
20160 65 79 2e 20 20 49 66 20 63 75 72 73 6f 72 20 50  ey.  If cursor P
20170 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20  1 refers .** to 
20180 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68  an SQL index, th
20190 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72  en P3 is the fir
201a0 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f  st in an array o
201b0 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a  f P4 registers .
201c0 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64  ** that are used
201d0 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20   as an unpacked 
201e0 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a  index key. .**.*
201f0 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72  * Reposition cur
20200 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 20  sor P1 so that  
20210 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
20220 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79 20   smallest entry 
20230 74 68 61 74 20 0a 2a 2a 20 69 73 20 67 72 65 61  that .** is grea
20240 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ter than or equa
20250 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c  l to the key val
20260 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65  ue. If there are
20270 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20   no records .** 
20280 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20  greater than or 
20290 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79  equal to the key
202a0 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a   and P2 is not z
202b0 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74  ero, then jump t
202c0 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  o P2..**.** If t
202d0 68 65 20 63 75 72 73 6f 72 20 50 31 20 77 61 73  he cursor P1 was
202e0 20 6f 70 65 6e 65 64 20 75 73 69 6e 67 20 74 68   opened using th
202f0 65 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20  e OPFLAG_SEEKEQ 
20300 66 6c 61 67 2c 20 74 68 65 6e 20 74 68 69 73 0a  flag, then this.
20310 2a 2a 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61  ** opcode will a
20320 6c 77 61 79 73 20 6c 61 6e 64 20 6f 6e 20 61 20  lways land on a 
20330 72 65 63 6f 72 64 20 74 68 61 74 20 65 71 75 61  record that equa
20340 6c 6c 79 20 65 71 75 61 6c 73 20 74 68 65 20 6b  lly equals the k
20350 65 79 2c 20 6f 72 0a 2a 2a 20 65 6c 73 65 20 6a  ey, or.** else j
20360 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ump immediately 
20370 74 6f 20 50 32 2e 20 20 57 68 65 6e 20 74 68 65  to P2.  When the
20380 20 63 75 72 73 6f 72 20 69 73 20 4f 50 46 4c 41   cursor is OPFLA
20390 47 5f 53 45 45 4b 45 51 2c 20 74 68 69 73 0a 2a  G_SEEKEQ, this.*
203a0 2a 20 6f 70 63 6f 64 65 20 6d 75 73 74 20 62 65  * opcode must be
203b0 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20   followed by an 
203c0 49 64 78 4c 45 20 6f 70 63 6f 64 65 20 77 69 74  IdxLE opcode wit
203d0 68 20 74 68 65 20 73 61 6d 65 20 61 72 67 75 6d  h the same argum
203e0 65 6e 74 73 2e 0a 2a 2a 20 54 68 65 20 49 64 78  ents..** The Idx
203f0 4c 45 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62  LE opcode will b
20400 65 20 73 6b 69 70 70 65 64 20 69 66 20 74 68 69  e skipped if thi
20410 73 20 6f 70 63 6f 64 65 20 73 75 63 63 65 65 64  s opcode succeed
20420 73 2c 20 62 75 74 20 74 68 65 0a 2a 2a 20 49 64  s, but the.** Id
20430 78 4c 45 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20  xLE opcode will 
20440 62 65 20 75 73 65 64 20 6f 6e 20 73 75 62 73 65  be used on subse
20450 71 75 65 6e 74 20 6c 6f 6f 70 20 69 74 65 72 61  quent loop itera
20460 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  tions..**.** Thi
20470 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20  s opcode leaves 
20480 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69  the cursor confi
20490 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e  gured to move in
204a0 20 66 6f 72 77 61 72 64 20 6f 72 64 65 72 2c 0a   forward order,.
204b0 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69  ** from the begi
204c0 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20 74 68 65  nning toward the
204d0 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72 20   end.  In other 
204e0 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f  words, the curso
204f0 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72  r is.** configur
20500 65 64 20 74 6f 20 75 73 65 20 4e 65 78 74 2c 20  ed to use Next, 
20510 6e 6f 74 20 50 72 65 76 2e 0a 2a 2a 0a 2a 2a 20  not Prev..**.** 
20520 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
20530 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 4c   NotFound, SeekL
20540 74 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 4c  t, SeekGt, SeekL
20550 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  e.*/./* Opcode: 
20560 53 65 65 6b 47 54 20 50 31 20 50 32 20 50 33 20  SeekGT P1 P2 P3 
20570 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
20580 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
20590 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50  *.** If cursor P
205a0 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53  1 refers to an S
205b0 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65  QL table (B-Tree
205c0 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67   that uses integ
205d0 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73  er keys), .** us
205e0 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
205f0 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20  egister P3 as a 
20600 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50  key. If cursor P
20610 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20  1 refers .** to 
20620 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68  an SQL index, th
20630 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72  en P3 is the fir
20640 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f  st in an array o
20650 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a  f P4 registers .
20660 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64  ** that are used
20670 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20   as an unpacked 
20680 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a  index key. .**.*
20690 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72  * Reposition cur
206a0 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 20  sor P1 so that  
206b0 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
206c0 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79 20   smallest entry 
206d0 74 68 61 74 20 0a 2a 2a 20 69 73 20 67 72 65 61  that .** is grea
206e0 74 65 72 20 74 68 61 6e 20 74 68 65 20 6b 65 79  ter than the key
206f0 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65   value. If there
20700 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20   are no records 
20710 67 72 65 61 74 65 72 20 74 68 61 6e 20 0a 2a 2a  greater than .**
20720 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20   the key and P2 
20730 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65  is not zero, the
20740 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  n jump to P2..**
20750 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
20760 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f  leaves the curso
20770 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  r configured to 
20780 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61 72 64 20  move in forward 
20790 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74  order,.** from t
207a0 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77  he beginning tow
207b0 61 72 64 20 74 68 65 20 65 6e 64 2e 20 20 49 6e  ard the end.  In
207c0 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
207d0 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63  e cursor is.** c
207e0 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65  onfigured to use
207f0 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e   Next, not Prev.
20800 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
20810 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64   Found, NotFound
20820 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47 65  , SeekLt, SeekGe
20830 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f  , SeekLe.*/./* O
20840 70 63 6f 64 65 3a 20 53 65 65 6b 4c 54 20 50 31  pcode: SeekLT P1
20850 20 50 32 20 50 33 20 50 34 20 2a 20 0a 2a 2a 20   P2 P3 P4 * .** 
20860 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
20870 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20  P3@P4].**.** If 
20880 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
20890 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65   to an SQL table
208a0 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73   (B-Tree that us
208b0 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29  es integer keys)
208c0 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61  , .** use the va
208d0 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
208e0 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20  P3 as a key. If 
208f0 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
20900 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69   .** to an SQL i
20910 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73  ndex, then P3 is
20920 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e   the first in an
20930 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67   array of P4 reg
20940 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20  isters .** that 
20950 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75  are used as an u
20960 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65  npacked index ke
20970 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69  y. .**.** Reposi
20980 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73  tion cursor P1 s
20990 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74  o that  it point
209a0 73 20 74 6f 20 74 68 65 20 6c 61 72 67 65 73 74  s to the largest
209b0 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20   entry that .** 
209c0 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65  is less than the
209d0 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74   key value. If t
209e0 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f  here are no reco
209f0 72 64 73 20 6c 65 73 73 20 74 68 61 6e 20 0a 2a  rds less than .*
20a00 2a 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32  * the key and P2
20a10 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
20a20 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a  en jump to P2..*
20a30 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
20a40 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73   leaves the curs
20a50 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  or configured to
20a60 20 6d 6f 76 65 20 69 6e 20 72 65 76 65 72 73 65   move in reverse
20a70 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20   order,.** from 
20a80 74 68 65 20 65 6e 64 20 74 6f 77 61 72 64 20 74  the end toward t
20a90 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20 49  he beginning.  I
20aa0 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
20ab0 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20  he cursor is.** 
20ac0 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73  configured to us
20ad0 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65 78 74  e Prev, not Next
20ae0 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
20af0 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e  : Found, NotFoun
20b00 64 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 47  d, SeekGt, SeekG
20b10 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20  e, SeekLe.*/./* 
20b20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c 45 20 50  Opcode: SeekLE P
20b30 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20  1 P2 P3 P4 *.** 
20b40 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
20b50 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20  P3@P4].**.** If 
20b60 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
20b70 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65   to an SQL table
20b80 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73   (B-Tree that us
20b90 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29  es integer keys)
20ba0 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61  , .** use the va
20bb0 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
20bc0 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20  P3 as a key. If 
20bd0 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
20be0 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69   .** to an SQL i
20bf0 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73  ndex, then P3 is
20c00 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e   the first in an
20c10 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67   array of P4 reg
20c20 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20  isters .** that 
20c30 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75  are used as an u
20c40 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65  npacked index ke
20c50 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69  y. .**.** Reposi
20c60 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73  tion cursor P1 s
20c70 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73  o that it points
20c80 20 74 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20   to the largest 
20c90 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69  entry that .** i
20ca0 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65  s less than or e
20cb0 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20  qual to the key 
20cc0 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20  value. If there 
20cd0 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a  are no records .
20ce0 2a 2a 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20  ** less than or 
20cf0 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79  equal to the key
20d00 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a   and P2 is not z
20d10 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74  ero, then jump t
20d20 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  o P2..**.** This
20d30 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74   opcode leaves t
20d40 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67  he cursor config
20d50 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20  ured to move in 
20d60 72 65 76 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a  reverse order,.*
20d70 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e 64 20 74  * from the end t
20d80 6f 77 61 72 64 20 74 68 65 20 62 65 67 69 6e 6e  oward the beginn
20d90 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  ing.  In other w
20da0 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72  ords, the cursor
20db0 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65   is.** configure
20dc0 64 20 74 6f 20 75 73 65 20 50 72 65 76 2c 20 6e  d to use Prev, n
20dd0 6f 74 20 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 49  ot Next..**.** I
20de0 66 20 74 68 65 20 63 75 72 73 6f 72 20 50 31 20  f the cursor P1 
20df0 77 61 73 20 6f 70 65 6e 65 64 20 75 73 69 6e 67  was opened using
20e00 20 74 68 65 20 4f 50 46 4c 41 47 5f 53 45 45 4b   the OPFLAG_SEEK
20e10 45 51 20 66 6c 61 67 2c 20 74 68 65 6e 20 74 68  EQ flag, then th
20e20 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 20 77 69 6c  is.** opcode wil
20e30 6c 20 61 6c 77 61 79 73 20 6c 61 6e 64 20 6f 6e  l always land on
20e40 20 61 20 72 65 63 6f 72 64 20 74 68 61 74 20 65   a record that e
20e50 71 75 61 6c 6c 79 20 65 71 75 61 6c 73 20 74 68  qually equals th
20e60 65 20 6b 65 79 2c 20 6f 72 0a 2a 2a 20 65 6c 73  e key, or.** els
20e70 65 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  e jump immediate
20e80 6c 79 20 74 6f 20 50 32 2e 20 20 57 68 65 6e 20  ly to P2.  When 
20e90 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 4f 50  the cursor is OP
20ea0 46 4c 41 47 5f 53 45 45 4b 45 51 2c 20 74 68 69  FLAG_SEEKEQ, thi
20eb0 73 0a 2a 2a 20 6f 70 63 6f 64 65 20 6d 75 73 74  s.** opcode must
20ec0 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20   be followed by 
20ed0 61 6e 20 49 64 78 47 45 20 6f 70 63 6f 64 65 20  an IdxGE opcode 
20ee0 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 61 72  with the same ar
20ef0 67 75 6d 65 6e 74 73 2e 0a 2a 2a 20 54 68 65 20  guments..** The 
20f00 49 64 78 47 45 20 6f 70 63 6f 64 65 20 77 69 6c  IdxGE opcode wil
20f10 6c 20 62 65 20 73 6b 69 70 70 65 64 20 69 66 20  l be skipped if 
20f20 74 68 69 73 20 6f 70 63 6f 64 65 20 73 75 63 63  this opcode succ
20f30 65 65 64 73 2c 20 62 75 74 20 74 68 65 0a 2a 2a  eeds, but the.**
20f40 20 49 64 78 47 45 20 6f 70 63 6f 64 65 20 77 69   IdxGE opcode wi
20f50 6c 6c 20 62 65 20 75 73 65 64 20 6f 6e 20 73 75  ll be used on su
20f60 62 73 65 71 75 65 6e 74 20 6c 6f 6f 70 20 69 74  bsequent loop it
20f70 65 72 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20  erations..**.** 
20f80 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
20f90 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 47   NotFound, SeekG
20fa0 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c  t, SeekGe, SeekL
20fb0 74 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65  t.*/.case OP_See
20fc0 6b 4c 54 3a 20 20 20 20 20 20 20 20 20 2f 2a 20  kLT:         /* 
20fd0 6a 75 6d 70 2c 20 69 6e 33 2c 20 67 72 6f 75 70  jump, in3, group
20fe0 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b   */.case OP_Seek
20ff0 4c 45 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  LE:         /* j
21000 75 6d 70 2c 20 69 6e 33 2c 20 67 72 6f 75 70 20  ump, in3, group 
21010 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 47  */.case OP_SeekG
21020 45 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  E:         /* ju
21030 6d 70 2c 20 69 6e 33 2c 20 67 72 6f 75 70 20 2a  mp, in3, group *
21040 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 47 54  /.case OP_SeekGT
21050 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  : {       /* jum
21060 70 2c 20 69 6e 33 2c 20 67 72 6f 75 70 20 2a 2f  p, in3, group */
21070 0a 20 20 69 6e 74 20 72 65 73 3b 20 20 20 20 20  .  int res;     
21080 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 61 72 69        /* Compari
21090 73 6f 6e 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20  son result */.  
210a0 69 6e 74 20 6f 63 3b 20 20 20 20 20 20 20 20 20  int oc;         
210b0 20 20 20 2f 2a 20 4f 70 63 6f 64 65 20 2a 2f 0a     /* Opcode */.
210c0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
210d0 3b 20 20 20 20 2f 2a 20 54 68 65 20 63 75 72 73  ;    /* The curs
210e0 6f 72 20 74 6f 20 73 65 65 6b 20 2a 2f 0a 20 20  or to seek */.  
210f0 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72  UnpackedRecord r
21100 3b 20 20 2f 2a 20 54 68 65 20 6b 65 79 20 74 6f  ;  /* The key to
21110 20 73 65 65 6b 20 66 6f 72 20 2a 2f 0a 20 20 69   seek for */.  i
21120 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20  nt nField;      
21130 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
21140 6f 6c 75 6d 6e 73 20 6f 72 20 66 69 65 6c 64 73  olumns or fields
21150 20 69 6e 20 74 68 65 20 6b 65 79 20 2a 2f 0a 20   in the key */. 
21160 20 69 36 34 20 69 4b 65 79 3b 20 20 20 20 20 20   i64 iKey;      
21170 20 20 20 20 2f 2a 20 54 68 65 20 72 6f 77 69 64      /* The rowid
21180 20 77 65 20 61 72 65 20 74 6f 20 73 65 65 6b 20   we are to seek 
21190 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 65 71 4f 6e  to */.  int eqOn
211a0 6c 79 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e  ly;        /* On
211b0 6c 79 20 69 6e 74 65 72 65 73 74 65 64 20 69 6e  ly interested in
211c0 20 3d 3d 20 72 65 73 75 6c 74 73 20 2a 2f 0a 0a   == results */..
211d0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
211e0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
211f0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
21200 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 21  assert( pOp->p2!
21210 3d 30 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  =0 );.  pC = p->
21220 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
21230 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
21240 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
21250 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
21260 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73  PE_BTREE );.  as
21270 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 45 20  sert( OP_SeekLE 
21280 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 31 20 29  == OP_SeekLT+1 )
21290 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53  ;.  assert( OP_S
212a0 65 65 6b 47 45 20 3d 3d 20 4f 50 5f 53 65 65 6b  eekGE == OP_Seek
212b0 4c 54 2b 32 20 29 3b 0a 20 20 61 73 73 65 72 74  LT+2 );.  assert
212c0 28 20 4f 50 5f 53 65 65 6b 47 54 20 3d 3d 20 4f  ( OP_SeekGT == O
212d0 50 5f 53 65 65 6b 4c 54 2b 33 20 29 3b 0a 20 20  P_SeekLT+3 );.  
212e0 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 4f 72  assert( pC->isOr
212f0 64 65 72 65 64 20 29 3b 0a 20 20 61 73 73 65 72  dered );.  asser
21300 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  t( pC->uc.pCurso
21310 72 21 3d 30 20 29 3b 0a 20 20 6f 63 20 3d 20 70  r!=0 );.  oc = p
21320 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 65 71  Op->opcode;.  eq
21330 4f 6e 6c 79 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  Only = 0;.  pC->
21340 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 23 69 66  nullRow = 0;.#if
21350 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
21360 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20  .  pC->seekOp = 
21370 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e  pOp->opcode;.#en
21380 64 69 66 0a 0a 20 20 69 66 28 20 70 43 2d 3e 69  dif..  if( pC->i
21390 73 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a  sTable ){.    /*
213a0 20 54 68 65 20 42 54 52 45 45 5f 53 45 45 4b 5f   The BTREE_SEEK_
213b0 45 51 20 66 6c 61 67 20 69 73 20 6f 6e 6c 79 20  EQ flag is only 
213c0 73 65 74 20 6f 6e 20 69 6e 64 65 78 20 63 75 72  set on index cur
213d0 73 6f 72 73 20 2a 2f 0a 20 20 20 20 61 73 73 65  sors */.    asse
213e0 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65  rt( sqlite3Btree
213f0 43 75 72 73 6f 72 48 61 73 48 69 6e 74 28 70 43  CursorHasHint(pC
21400 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 42 54  ->uc.pCursor, BT
21410 52 45 45 5f 53 45 45 4b 5f 45 51 29 3d 3d 30 0a  REE_SEEK_EQ)==0.
21420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c                ||
21430 20 43 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a 0a   CORRUPT_DB );..
21440 20 20 20 20 2f 2a 20 54 68 65 20 69 6e 70 75 74      /* The input
21450 20 76 61 6c 75 65 20 69 6e 20 50 33 20 6d 69 67   value in P3 mig
21460 68 74 20 62 65 20 6f 66 20 61 6e 79 20 74 79 70  ht be of any typ
21470 65 3a 20 69 6e 74 65 67 65 72 2c 20 72 65 61 6c  e: integer, real
21480 2c 20 73 74 72 69 6e 67 2c 0a 20 20 20 20 2a 2a  , string,.    **
21490 20 62 6c 6f 62 2c 20 6f 72 20 4e 55 4c 4c 2e 20   blob, or NULL. 
214a0 20 42 75 74 20 69 74 20 6e 65 65 64 73 20 74 6f   But it needs to
214b0 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 20 62   be an integer b
214c0 65 66 6f 72 65 20 77 65 20 63 61 6e 20 64 6f 0a  efore we can do.
214d0 20 20 20 20 2a 2a 20 74 68 65 20 73 65 65 6b 2c      ** the seek,
214e0 20 73 6f 20 63 6f 6e 76 65 72 74 20 69 74 2e 20   so convert it. 
214f0 2a 2f 0a 20 20 20 20 70 49 6e 33 20 3d 20 26 61  */.    pIn3 = &a
21500 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
21510 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61    if( (pIn3->fla
21520 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45  gs & (MEM_Int|ME
21530 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29  M_Real|MEM_Str))
21540 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20  ==MEM_Str ){.   
21550 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41     applyNumericA
21560 66 66 69 6e 69 74 79 28 70 49 6e 33 2c 20 30 29  ffinity(pIn3, 0)
21570 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 4b 65 79  ;.    }.    iKey
21580 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
21590 74 56 61 6c 75 65 28 70 49 6e 33 29 3b 0a 0a 20  tValue(pIn3);.. 
215a0 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20     /* If the P3 
215b0 76 61 6c 75 65 20 63 6f 75 6c 64 20 6e 6f 74 20  value could not 
215c0 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74  be converted int
215d0 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 77 69 74  o an integer wit
215e0 68 6f 75 74 0a 20 20 20 20 2a 2a 20 6c 6f 73 73  hout.    ** loss
215f0 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c   of information,
21600 20 74 68 65 6e 20 73 70 65 63 69 61 6c 20 70 72   then special pr
21610 6f 63 65 73 73 69 6e 67 20 69 73 20 72 65 71 75  ocessing is requ
21620 69 72 65 64 2e 2e 2e 20 2a 2f 0a 20 20 20 20 69  ired... */.    i
21630 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20  f( (pIn3->flags 
21640 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b  & MEM_Int)==0 ){
21650 0a 20 20 20 20 20 20 69 66 28 20 28 70 49 6e 33  .      if( (pIn3
21660 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65  ->flags & MEM_Re
21670 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  al)==0 ){.      
21680 20 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20 76    /* If the P3 v
21690 61 6c 75 65 20 63 61 6e 6e 6f 74 20 62 65 20 63  alue cannot be c
216a0 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e  onverted into an
216b0 79 20 6b 69 6e 64 20 6f 66 20 61 20 6e 75 6d 62  y kind of a numb
216c0 65 72 2c 0a 20 20 20 20 20 20 20 20 2a 2a 20 74  er,.        ** t
216d0 68 65 6e 20 74 68 65 20 73 65 65 6b 20 69 73 20  hen the seek is 
216e0 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2c 20 73 6f  not possible, so
216f0 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20   jump to P2 */. 
21700 20 20 20 20 20 20 20 56 64 62 65 42 72 61 6e 63         VdbeBranc
21710 68 54 61 6b 65 6e 28 31 2c 32 29 3b 20 67 6f 74  hTaken(1,2); got
21720 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
21730 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
21740 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49     }..      /* I
21750 66 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74  f the approximat
21760 69 6f 6e 20 69 4b 65 79 20 69 73 20 6c 61 72 67  ion iKey is larg
21770 65 72 20 74 68 61 6e 20 74 68 65 20 61 63 74 75  er than the actu
21780 61 6c 20 72 65 61 6c 20 73 65 61 72 63 68 0a 20  al real search. 
21790 20 20 20 20 20 2a 2a 20 74 65 72 6d 2c 20 73 75       ** term, su
217a0 62 73 74 69 74 75 74 65 20 3e 3d 20 66 6f 72 20  bstitute >= for 
217b0 3e 20 61 6e 64 20 3c 20 66 6f 72 20 3c 3d 2e 20  > and < for <=. 
217c0 65 2e 67 2e 20 69 66 20 74 68 65 20 73 65 61 72  e.g. if the sear
217d0 63 68 20 74 65 72 6d 0a 20 20 20 20 20 20 2a 2a  ch term.      **
217e0 20 69 73 20 34 2e 39 20 61 6e 64 20 74 68 65 20   is 4.9 and the 
217f0 69 6e 74 65 67 65 72 20 61 70 70 72 6f 78 69 6d  integer approxim
21800 61 74 69 6f 6e 20 35 3a 0a 20 20 20 20 20 20 2a  ation 5:.      *
21810 2a 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20 20  *.      **      
21820 20 20 28 78 20 3e 20 20 34 2e 39 29 20 20 20 20    (x >  4.9)    
21830 2d 3e 20 20 20 20 20 28 78 20 3e 3d 20 35 29 0a  ->     (x >= 5).
21840 20 20 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20        **        
21850 28 78 20 3c 3d 20 34 2e 39 29 20 20 20 20 2d 3e  (x <= 4.9)    ->
21860 20 20 20 20 20 28 78 20 3c 20 20 35 29 0a 20 20       (x <  5).  
21870 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28      */.      if(
21880 20 70 49 6e 33 2d 3e 75 2e 72 3c 28 64 6f 75 62   pIn3->u.r<(doub
21890 6c 65 29 69 4b 65 79 20 29 7b 0a 20 20 20 20 20  le)iKey ){.     
218a0 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65     assert( OP_Se
218b0 65 6b 47 45 3d 3d 28 4f 50 5f 53 65 65 6b 47 54  ekGE==(OP_SeekGT
218c0 2d 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61  -1) );.        a
218d0 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 54  ssert( OP_SeekLT
218e0 3d 3d 28 4f 50 5f 53 65 65 6b 4c 45 2d 31 29 20  ==(OP_SeekLE-1) 
218f0 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
21900 74 28 20 28 4f 50 5f 53 65 65 6b 4c 45 20 26 20  t( (OP_SeekLE & 
21910 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65  0x0001)==(OP_See
21920 6b 47 54 20 26 20 30 78 30 30 30 31 29 20 29 3b  kGT & 0x0001) );
21930 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 6f 63  .        if( (oc
21940 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f   & 0x0001)==(OP_
21950 53 65 65 6b 47 54 20 26 20 30 78 30 30 30 31 29  SeekGT & 0x0001)
21960 20 29 20 6f 63 2d 2d 3b 0a 20 20 20 20 20 20 7d   ) oc--;.      }
21970 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68  ..      /* If th
21980 65 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20  e approximation 
21990 69 4b 65 79 20 69 73 20 73 6d 61 6c 6c 65 72 20  iKey is smaller 
219a0 74 68 61 6e 20 74 68 65 20 61 63 74 75 61 6c 20  than the actual 
219b0 72 65 61 6c 20 73 65 61 72 63 68 0a 20 20 20 20  real search.    
219c0 20 20 2a 2a 20 74 65 72 6d 2c 20 73 75 62 73 74    ** term, subst
219d0 69 74 75 74 65 20 3c 3d 20 66 6f 72 20 3c 20 61  itute <= for < a
219e0 6e 64 20 3e 20 66 6f 72 20 3e 3d 2e 20 20 2a 2f  nd > for >=.  */
219f0 0a 20 20 20 20 20 20 65 6c 73 65 20 69 66 28 20  .      else if( 
21a00 70 49 6e 33 2d 3e 75 2e 72 3e 28 64 6f 75 62 6c  pIn3->u.r>(doubl
21a10 65 29 69 4b 65 79 20 29 7b 0a 20 20 20 20 20 20  e)iKey ){.      
21a20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65    assert( OP_See
21a30 6b 4c 45 3d 3d 28 4f 50 5f 53 65 65 6b 4c 54 2b  kLE==(OP_SeekLT+
21a40 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  1) );.        as
21a50 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 54 3d  sert( OP_SeekGT=
21a60 3d 28 4f 50 5f 53 65 65 6b 47 45 2b 31 29 20 29  =(OP_SeekGE+1) )
21a70 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
21a80 28 20 28 4f 50 5f 53 65 65 6b 4c 54 20 26 20 30  ( (OP_SeekLT & 0
21a90 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b  x0001)==(OP_Seek
21aa0 47 45 20 26 20 30 78 30 30 30 31 29 20 29 3b 0a  GE & 0x0001) );.
21ab0 20 20 20 20 20 20 20 20 69 66 28 20 28 6f 63 20          if( (oc 
21ac0 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53  & 0x0001)==(OP_S
21ad0 65 65 6b 4c 54 20 26 20 30 78 30 30 30 31 29 20  eekLT & 0x0001) 
21ae0 29 20 6f 63 2b 2b 3b 0a 20 20 20 20 20 20 7d 0a  ) oc++;.      }.
21af0 20 20 20 20 7d 20 0a 20 20 20 20 72 63 20 3d 20      } .    rc = 
21b00 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
21b10 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 75  toUnpacked(pC->u
21b20 63 2e 70 43 75 72 73 6f 72 2c 20 30 2c 20 28 75  c.pCursor, 0, (u
21b30 36 34 29 69 4b 65 79 2c 20 30 2c 20 26 72 65 73  64)iKey, 0, &res
21b40 29 3b 0a 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74  );.    pC->movet
21b50 6f 54 61 72 67 65 74 20 3d 20 69 4b 65 79 3b 20  oTarget = iKey; 
21b60 20 2f 2a 20 55 73 65 64 20 62 79 20 4f 50 5f 44   /* Used by OP_D
21b70 65 6c 65 74 65 20 2a 2f 0a 20 20 20 20 69 66 28  elete */.    if(
21b80 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
21b90 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f  {.      goto abo
21ba0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
21bb0 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
21bc0 20 20 20 20 2f 2a 20 46 6f 72 20 61 20 63 75 72      /* For a cur
21bd0 73 6f 72 20 77 69 74 68 20 74 68 65 20 42 54 52  sor with the BTR
21be0 45 45 5f 53 45 45 4b 5f 45 51 20 68 69 6e 74 2c  EE_SEEK_EQ hint,
21bf0 20 6f 6e 6c 79 20 74 68 65 20 4f 50 5f 53 65 65   only the OP_See
21c00 6b 47 45 20 61 6e 64 0a 20 20 20 20 2a 2a 20 4f  kGE and.    ** O
21c10 50 5f 53 65 65 6b 4c 45 20 6f 70 63 6f 64 65 73  P_SeekLE opcodes
21c20 20 61 72 65 20 61 6c 6c 6f 77 65 64 2c 20 61 6e   are allowed, an
21c30 64 20 74 68 65 73 65 20 6d 75 73 74 20 62 65 20  d these must be 
21c40 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c  immediately foll
21c50 6f 77 65 64 0a 20 20 20 20 2a 2a 20 62 79 20 61  owed.    ** by a
21c60 6e 20 4f 50 5f 49 64 78 47 54 20 6f 72 20 4f 50  n OP_IdxGT or OP
21c70 5f 49 64 78 4c 54 20 6f 70 63 6f 64 65 2c 20 72  _IdxLT opcode, r
21c80 65 73 70 65 63 74 69 76 65 6c 79 2c 20 77 69 74  espectively, wit
21c90 68 20 74 68 65 20 73 61 6d 65 20 6b 65 79 2e 0a  h the same key..
21ca0 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 73      */.    if( s
21cb0 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
21cc0 72 48 61 73 48 69 6e 74 28 70 43 2d 3e 75 63 2e  rHasHint(pC->uc.
21cd0 70 43 75 72 73 6f 72 2c 20 42 54 52 45 45 5f 53  pCursor, BTREE_S
21ce0 45 45 4b 5f 45 51 29 20 29 7b 0a 20 20 20 20 20  EEK_EQ) ){.     
21cf0 20 65 71 4f 6e 6c 79 20 3d 20 31 3b 0a 20 20 20   eqOnly = 1;.   
21d00 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
21d10 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b 47  opcode==OP_SeekG
21d20 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  E || pOp->opcode
21d30 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 3b 0a 20  ==OP_SeekLE );. 
21d40 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
21d50 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  [1].opcode==OP_I
21d60 64 78 4c 54 20 7c 7c 20 70 4f 70 5b 31 5d 2e 6f  dxLT || pOp[1].o
21d70 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20  pcode==OP_IdxGT 
21d80 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
21d90 20 70 4f 70 5b 31 5d 2e 70 31 3d 3d 70 4f 70 5b   pOp[1].p1==pOp[
21da0 30 5d 2e 70 31 20 29 3b 0a 20 20 20 20 20 20 61  0].p1 );.      a
21db0 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70 32  ssert( pOp[1].p2
21dc0 3d 3d 70 4f 70 5b 30 5d 2e 70 32 20 29 3b 0a 20  ==pOp[0].p2 );. 
21dd0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
21de0 5b 31 5d 2e 70 33 3d 3d 70 4f 70 5b 30 5d 2e 70  [1].p3==pOp[0].p
21df0 33 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  3 );.      asser
21e00 74 28 20 70 4f 70 5b 31 5d 2e 70 34 2e 69 3d 3d  t( pOp[1].p4.i==
21e10 70 4f 70 5b 30 5d 2e 70 34 2e 69 20 29 3b 0a 20  pOp[0].p4.i );. 
21e20 20 20 20 7d 0a 0a 20 20 20 20 6e 46 69 65 6c 64     }..    nField
21e30 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20   = pOp->p4.i;.  
21e40 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
21e50 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
21e60 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6e  );.    assert( n
21e70 46 69 65 6c 64 3e 30 20 29 3b 0a 20 20 20 20 72  Field>0 );.    r
21e80 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e  .pKeyInfo = pC->
21e90 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e  pKeyInfo;.    r.
21ea0 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 6e 46  nField = (u16)nF
21eb0 69 65 6c 64 3b 0a 0a 20 20 20 20 2f 2a 20 54 68  ield;..    /* Th
21ec0 65 20 6e 65 78 74 20 6c 69 6e 65 20 6f 66 20 63  e next line of c
21ed0 6f 64 65 20 63 6f 6d 70 75 74 65 73 20 61 73 20  ode computes as 
21ee0 66 6f 6c 6c 6f 77 73 2c 20 6f 6e 6c 79 20 66 61  follows, only fa
21ef0 73 74 65 72 3a 0a 20 20 20 20 2a 2a 20 20 20 69  ster:.    **   i
21f00 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54  f( oc==OP_SeekGT
21f10 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c   || oc==OP_SeekL
21f20 45 20 29 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20  E ){.    **     
21f30 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2d  r.default_rc = -
21f40 31 3b 0a 20 20 20 20 2a 2a 20 20 20 7d 65 6c 73  1;.    **   }els
21f50 65 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20 72 2e  e{.    **     r.
21f60 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2b 31 3b  default_rc = +1;
21f70 0a 20 20 20 20 2a 2a 20 20 20 7d 0a 20 20 20 20  .    **   }.    
21f80 2a 2f 0a 20 20 20 20 72 2e 64 65 66 61 75 6c 74  */.    r.default
21f90 5f 72 63 20 3d 20 28 28 31 20 26 20 28 6f 63 20  _rc = ((1 & (oc 
21fa0 2d 20 4f 50 5f 53 65 65 6b 4c 54 29 29 20 3f 20  - OP_SeekLT)) ? 
21fb0 2d 31 20 3a 20 2b 31 29 3b 0a 20 20 20 20 61 73  -1 : +1);.    as
21fc0 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65  sert( oc!=OP_See
21fd0 6b 47 54 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74  kGT || r.default
21fe0 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20 20 20 20 61  _rc==-1 );.    a
21ff0 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65  ssert( oc!=OP_Se
22000 65 6b 4c 45 20 7c 7c 20 72 2e 64 65 66 61 75 6c  ekLE || r.defaul
22010 74 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20 20 20 20  t_rc==-1 );.    
22020 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53  assert( oc!=OP_S
22030 65 65 6b 47 45 20 7c 7c 20 72 2e 64 65 66 61 75  eekGE || r.defau
22040 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a 20 20 20  lt_rc==+1 );.   
22050 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f   assert( oc!=OP_
22060 53 65 65 6b 4c 54 20 7c 7c 20 72 2e 64 65 66 61  SeekLT || r.defa
22070 75 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a 0a 20  ult_rc==+1 );.. 
22080 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65     r.aMem = &aMe
22090 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64  m[pOp->p3];.#ifd
220a0 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
220b0 20 20 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72      { int i; for
220c0 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64  (i=0; i<r.nField
220d0 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d  ; i++) assert( m
220e0 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65  emIsValid(&r.aMe
220f0 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69  m[i]) ); }.#endi
22100 66 0a 20 20 20 20 72 2e 65 71 53 65 65 6e 20 3d  f.    r.eqSeen =
22110 20 30 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   0;.    rc = sql
22120 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
22130 6e 70 61 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70  npacked(pC->uc.p
22140 43 75 72 73 6f 72 2c 20 26 72 2c 20 30 2c 20 30  Cursor, &r, 0, 0
22150 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 69 66 28  , &res);.    if(
22160 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
22170 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f  {.      goto abo
22180 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
22190 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 65  .    }.    if( e
221a0 71 4f 6e 6c 79 20 26 26 20 72 2e 65 71 53 65 65  qOnly && r.eqSee
221b0 6e 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73  n==0 ){.      as
221c0 73 65 72 74 28 20 72 65 73 21 3d 30 20 29 3b 0a  sert( res!=0 );.
221d0 20 20 20 20 20 20 67 6f 74 6f 20 73 65 65 6b 5f        goto seek_
221e0 6e 6f 74 5f 66 6f 75 6e 64 3b 0a 20 20 20 20 7d  not_found;.    }
221f0 0a 20 20 7d 0a 20 20 70 43 2d 3e 64 65 66 65 72  .  }.  pC->defer
22200 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20  redMoveto = 0;. 
22210 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
22220 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
22230 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
22240 53 54 0a 20 20 73 71 6c 69 74 65 33 5f 73 65 61  ST.  sqlite3_sea
22250 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e  rch_count++;.#en
22260 64 69 66 0a 20 20 69 66 28 20 6f 63 3e 3d 4f 50  dif.  if( oc>=OP
22270 5f 53 65 65 6b 47 45 20 29 7b 20 20 61 73 73 65  _SeekGE ){  asse
22280 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47  rt( oc==OP_SeekG
22290 45 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  E || oc==OP_Seek
222a0 47 54 20 29 3b 0a 20 20 20 20 69 66 28 20 72 65  GT );.    if( re
222b0 73 3c 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26  s<0 || (res==0 &
222c0 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 29  & oc==OP_SeekGT)
222d0 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20   ){.      res = 
222e0 30 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  0;.      rc = sq
222f0 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74 28 70  lite3BtreeNext(p
22300 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 30  C->uc.pCursor, 0
22310 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21  );.      if( rc!
22320 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
22330 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
22340 4c 49 54 45 5f 44 4f 4e 45 20 29 7b 0a 20 20 20  LITE_DONE ){.   
22350 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
22360 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 20 20 20  TE_OK;.         
22370 20 72 65 73 20 3d 20 31 3b 0a 20 20 20 20 20 20   res = 1;.      
22380 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
22390 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
223a0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
223b0 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
223c0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
223d0 65 73 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20  es = 0;.    }.  
223e0 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
223f0 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 54  t( oc==OP_SeekLT
22400 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c   || oc==OP_SeekL
22410 45 20 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73  E );.    if( res
22420 3e 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26  >0 || (res==0 &&
22430 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 54 29 20   oc==OP_SeekLT) 
22440 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 30  ){.      res = 0
22450 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
22460 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75  ite3BtreePreviou
22470 73 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  s(pC->uc.pCursor
22480 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20  , 0);.      if( 
22490 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
224a0 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63 3d  .        if( rc=
224b0 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 7b 0a  =SQLITE_DONE ){.
224c0 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 53            rc = S
224d0 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20  QLITE_OK;.      
224e0 20 20 20 20 72 65 73 20 3d 20 31 3b 0a 20 20 20      res = 1;.   
224f0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
22500 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
22510 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
22520 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
22530 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
22540 20 20 2f 2a 20 72 65 73 20 6d 69 67 68 74 20 62    /* res might b
22550 65 20 6e 65 67 61 74 69 76 65 20 62 65 63 61 75  e negative becau
22560 73 65 20 74 68 65 20 74 61 62 6c 65 20 69 73 20  se the table is 
22570 65 6d 70 74 79 2e 20 20 43 68 65 63 6b 20 74 6f  empty.  Check to
22580 0a 20 20 20 20 20 20 2a 2a 20 73 65 65 20 69 66  .      ** see if
22590 20 74 68 69 73 20 69 73 20 74 68 65 20 63 61 73   this is the cas
225a0 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  e..      */.    
225b0 20 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33 42    res = sqlite3B
225c0 74 72 65 65 45 6f 66 28 70 43 2d 3e 75 63 2e 70  treeEof(pC->uc.p
225d0 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20  Cursor);.    }. 
225e0 20 7d 0a 73 65 65 6b 5f 6e 6f 74 5f 66 6f 75 6e   }.seek_not_foun
225f0 64 3a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  d:.  assert( pOp
22600 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 56 64 62 65  ->p2>0 );.  Vdbe
22610 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21  BranchTaken(res!
22620 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73  =0,2);.  if( res
22630 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d   ){.    goto jum
22640 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65  p_to_p2;.  }else
22650 20 69 66 28 20 65 71 4f 6e 6c 79 20 29 7b 0a 20   if( eqOnly ){. 
22660 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31     assert( pOp[1
22670 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ].opcode==OP_Idx
22680 4c 54 20 7c 7c 20 70 4f 70 5b 31 5d 2e 6f 70 63  LT || pOp[1].opc
22690 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b  ode==OP_IdxGT );
226a0 0a 20 20 20 20 70 4f 70 2b 2b 3b 20 2f 2a 20 53  .    pOp++; /* S
226b0 6b 69 70 20 74 68 65 20 4f 50 5f 49 64 78 4c 74  kip the OP_IdxLt
226c0 20 6f 72 20 4f 50 5f 49 64 78 47 54 20 74 68 61   or OP_IdxGT tha
226d0 74 20 66 6f 6c 6c 6f 77 73 20 2a 2f 0a 20 20 7d  t follows */.  }
226e0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
226f0 4f 70 63 6f 64 65 3a 20 53 65 65 6b 48 69 74 20  Opcode: SeekHit 
22700 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
22710 79 6e 6f 70 73 69 73 3a 20 73 65 65 6b 48 69 74  ynopsis: seekHit
22720 3d 50 32 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68  =P2.**.** Set th
22730 65 20 73 65 65 6b 48 69 74 20 66 6c 61 67 20 6f  e seekHit flag o
22740 6e 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20 74  n cursor P1 to t
22750 68 65 20 76 61 6c 75 65 20 69 6e 20 50 32 2e 0a  he value in P2..
22760 2a 2a 20 54 68 65 20 73 65 65 6b 48 69 74 20 66  ** The seekHit f
22770 6c 61 67 20 69 73 20 75 73 65 64 20 62 79 20 74  lag is used by t
22780 68 65 20 49 66 4e 6f 48 6f 70 65 20 6f 70 63 6f  he IfNoHope opco
22790 64 65 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d 75 73  de..**.** P1 mus
227a0 74 20 62 65 20 61 20 76 61 6c 69 64 20 62 2d 74  t be a valid b-t
227b0 72 65 65 20 63 75 72 73 6f 72 2e 20 20 50 32 20  ree cursor.  P2 
227c0 6d 75 73 74 20 62 65 20 61 20 62 6f 6f 6c 65 61  must be a boolea
227d0 6e 20 76 61 6c 75 65 2c 0a 2a 2a 20 65 69 74 68  n value,.** eith
227e0 65 72 20 30 20 6f 72 20 31 2e 0a 2a 2f 0a 63 61  er 0 or 1..*/.ca
227f0 73 65 20 4f 50 5f 53 65 65 6b 48 69 74 3a 20 7b  se OP_SeekHit: {
22800 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
22810 43 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  C;.  assert( pOp
22820 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
22830 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
22840 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
22850 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
22860 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
22870 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d  assert( pOp->p2=
22880 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 31  =0 || pOp->p2==1
22890 20 29 3b 0a 20 20 70 43 2d 3e 73 65 65 6b 48 69   );.  pC->seekHi
228a0 74 20 3d 20 70 4f 70 2d 3e 70 32 20 26 20 31 3b  t = pOp->p2 & 1;
228b0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
228c0 4f 70 63 6f 64 65 3a 20 46 6f 75 6e 64 20 50 31  Opcode: Found P1
228d0 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
228e0 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
228f0 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50  3@P4].**.** If P
22900 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74  4==0 then regist
22910 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c  er P3 holds a bl
22920 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62  ob constructed b
22930 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49  y MakeRecord.  I
22940 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72  f.** P4>0 then r
22950 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68  egister P3 is th
22960 65 20 66 69 72 73 74 20 6f 66 20 50 34 20 72 65  e first of P4 re
22970 67 69 73 74 65 72 73 20 74 68 61 74 20 66 6f 72  gisters that for
22980 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a  m an unpacked.**
22990 20 72 65 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a 20 43   record..**.** C
229a0 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61  ursor P1 is on a
229b0 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20  n index btree.  
229c0 49 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 64  If the record id
229d0 65 6e 74 69 66 69 65 64 20 62 79 20 50 33 20 61  entified by P3 a
229e0 6e 64 20 50 34 0a 2a 2a 20 69 73 20 61 20 70 72  nd P4.** is a pr
229f0 65 66 69 78 20 6f 66 20 61 6e 79 20 65 6e 74 72  efix of any entr
22a00 79 20 69 6e 20 50 31 20 74 68 65 6e 20 61 20 6a  y in P1 then a j
22a10 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50  ump is made to P
22a20 32 20 61 6e 64 0a 2a 2a 20 50 31 20 69 73 20 6c  2 and.** P1 is l
22a30 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20  eft pointing at 
22a40 74 68 65 20 6d 61 74 63 68 69 6e 67 20 65 6e 74  the matching ent
22a50 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  ry..**.** This o
22a60 70 65 72 61 74 69 6f 6e 20 6c 65 61 76 65 73 20  peration leaves 
22a70 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20  the cursor in a 
22a80 73 74 61 74 65 20 77 68 65 72 65 20 69 74 20 63  state where it c
22a90 61 6e 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65  an be.** advance
22aa0 64 20 69 6e 20 74 68 65 20 66 6f 72 77 61 72 64  d in the forward
22ab0 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 54 68 65   direction.  The
22ac0 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   Next instructio
22ad0 6e 20 77 69 6c 6c 20 77 6f 72 6b 2c 0a 2a 2a 20  n will work,.** 
22ae0 62 75 74 20 6e 6f 74 20 74 68 65 20 50 72 65 76  but not the Prev
22af0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
22b00 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f  .** See also: No
22b10 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69  tFound, NoConfli
22b20 63 74 2c 20 4e 6f 74 45 78 69 73 74 73 2e 20 53  ct, NotExists. S
22b30 65 65 6b 47 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  eekGe.*/./* Opco
22b40 64 65 3a 20 4e 6f 74 46 6f 75 6e 64 20 50 31 20  de: NotFound P1 
22b50 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
22b60 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
22b70 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  @P4].**.** If P4
22b80 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74 65  ==0 then registe
22b90 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f  r P3 holds a blo
22ba0 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79  b constructed by
22bb0 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66   MakeRecord.  If
22bc0 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65  .** P4>0 then re
22bd0 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65  gister P3 is the
22be0 20 66 69 72 73 74 20 6f 66 20 50 34 20 72 65 67   first of P4 reg
22bf0 69 73 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d  isters that form
22c00 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20   an unpacked.** 
22c10 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43  record..** .** C
22c20 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61  ursor P1 is on a
22c30 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20  n index btree.  
22c40 49 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 64  If the record id
22c50 65 6e 74 69 66 69 65 64 20 62 79 20 50 33 20 61  entified by P3 a
22c60 6e 64 20 50 34 0a 2a 2a 20 69 73 20 6e 6f 74 20  nd P4.** is not 
22c70 74 68 65 20 70 72 65 66 69 78 20 6f 66 20 61 6e  the prefix of an
22c80 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74 68  y entry in P1 th
22c90 65 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d 61 64  en a jump is mad
22ca0 65 20 74 6f 20 50 32 2e 20 20 49 66 20 50 31 20  e to P2.  If P1 
22cb0 0a 2a 2a 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e  .** does contain
22cc0 20 61 6e 20 65 6e 74 72 79 20 77 68 6f 73 65 20   an entry whose 
22cd0 70 72 65 66 69 78 20 6d 61 74 63 68 65 73 20 74  prefix matches t
22ce0 68 65 20 50 33 2f 50 34 20 72 65 63 6f 72 64 20  he P3/P4 record 
22cf0 74 68 65 6e 20 63 6f 6e 74 72 6f 6c 0a 2a 2a 20  then control.** 
22d00 66 61 6c 6c 73 20 74 68 72 6f 75 67 68 20 74 6f  falls through to
22d10 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
22d20 63 74 69 6f 6e 20 61 6e 64 20 50 31 20 69 73 20  ction and P1 is 
22d30 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74  left pointing at
22d40 20 74 68 65 0a 2a 2a 20 6d 61 74 63 68 69 6e 67   the.** matching
22d50 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68   entry..**.** Th
22d60 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61  is operation lea
22d70 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 69  ves the cursor i
22d80 6e 20 61 20 73 74 61 74 65 20 77 68 65 72 65 20  n a state where 
22d90 69 74 20 63 61 6e 6e 6f 74 20 62 65 0a 2a 2a 20  it cannot be.** 
22da0 61 64 76 61 6e 63 65 64 20 69 6e 20 65 69 74 68  advanced in eith
22db0 65 72 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49  er direction.  I
22dc0 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
22dd0 68 65 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76  he Next and Prev
22de0 0a 2a 2a 20 6f 70 63 6f 64 65 73 20 64 6f 20 6e  .** opcodes do n
22df0 6f 74 20 77 6f 72 6b 20 61 66 74 65 72 20 74 68  ot work after th
22e00 69 73 20 6f 70 65 72 61 74 69 6f 6e 2e 0a 2a 2a  is operation..**
22e10 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
22e20 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73 2c 20  und, NotExists, 
22e30 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20 49 66 4e 6f  NoConflict, IfNo
22e40 48 6f 70 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  Hope.*/./* Opcod
22e50 65 3a 20 49 66 4e 6f 48 6f 70 65 20 50 31 20 50  e: IfNoHope P1 P
22e60 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
22e70 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
22e80 50 34 5d 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74  P4].**.** Regist
22e90 65 72 20 50 33 20 69 73 20 74 68 65 20 66 69 72  er P3 is the fir
22ea0 73 74 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  st of P4 registe
22eb0 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20  rs that form an 
22ec0 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f  unpacked.** reco
22ed0 72 64 2e 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72  rd..**.** Cursor
22ee0 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64   P1 is on an ind
22ef0 65 78 20 62 74 72 65 65 2e 20 20 49 66 20 74 68  ex btree.  If th
22f00 65 20 73 65 65 6b 48 69 74 20 66 6c 61 67 20 69  e seekHit flag i
22f10 73 20 73 65 74 20 6f 6e 20 50 31 2c 20 74 68 65  s set on P1, the
22f20 6e 0a 2a 2a 20 74 68 69 73 20 6f 70 63 6f 64 65  n.** this opcode
22f30 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 42 75   is a no-op.  Bu
22f40 74 20 69 66 20 74 68 65 20 73 65 65 6b 48 69 74  t if the seekHit
22f50 20 66 6c 61 67 20 6f 66 20 50 31 20 69 73 20 63   flag of P1 is c
22f60 6c 65 61 72 2c 20 74 68 65 6e 0a 2a 2a 20 63 68  lear, then.** ch
22f70 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74 68  eck to see if th
22f80 65 72 65 20 69 73 20 61 6e 79 20 65 6e 74 72 79  ere is any entry
22f90 20 69 6e 20 50 31 20 74 68 61 74 20 6d 61 74 63   in P1 that matc
22fa0 68 65 73 20 74 68 65 0a 2a 2a 20 70 72 65 66 69  hes the.** prefi
22fb0 78 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  x identified by 
22fc0 50 33 20 61 6e 64 20 50 34 2e 20 20 49 66 20 6e  P3 and P4.  If n
22fd0 6f 20 65 6e 74 72 79 20 6d 61 74 63 68 65 73 20  o entry matches 
22fe0 74 68 65 20 70 72 65 66 69 78 2c 0a 2a 2a 20 6a  the prefix,.** j
22ff0 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74 68 65  ump to P2.  Othe
23000 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75  rwise fall throu
23010 67 68 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  gh..**.** This o
23020 70 63 6f 64 65 20 62 65 68 61 76 65 73 20 6c 69  pcode behaves li
23030 6b 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 69  ke OP_NotFound i
23040 66 20 74 68 65 20 73 65 65 6b 48 69 74 0a 2a 2a  f the seekHit.**
23050 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 20 61   flag is clear a
23060 6e 64 20 69 74 20 62 65 68 61 76 65 73 20 6c 69  nd it behaves li
23070 6b 65 20 4f 50 5f 4e 6f 6f 70 20 69 66 20 74 68  ke OP_Noop if th
23080 65 20 73 65 65 6b 48 69 74 20 66 6c 61 67 20 69  e seekHit flag i
23090 73 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  s set..**.** Thi
230a0 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64  s opcode is used
230b0 20 69 6e 20 49 4e 20 63 6c 61 75 73 65 20 70 72   in IN clause pr
230c0 6f 63 65 73 73 69 6e 67 20 66 6f 72 20 61 20 6d  ocessing for a m
230d0 75 6c 74 69 2d 63 6f 6c 75 6d 6e 20 6b 65 79 2e  ulti-column key.
230e0 0a 2a 2a 20 49 66 20 61 6e 20 49 4e 20 63 6c 61  .** If an IN cla
230f0 75 73 65 20 69 73 20 61 74 74 61 63 68 65 64 20  use is attached 
23100 74 6f 20 61 6e 20 65 6c 65 6d 65 6e 74 20 6f 66  to an element of
23110 20 74 68 65 20 6b 65 79 20 6f 74 68 65 72 20 74   the key other t
23120 68 61 6e 20 74 68 65 0a 2a 2a 20 6c 65 66 74 2d  han the.** left-
23130 6d 6f 73 74 20 65 6c 65 6d 65 6e 74 2c 20 61 6e  most element, an
23140 64 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6e  d if there are n
23150 6f 20 6d 61 74 63 68 65 73 20 6f 6e 20 74 68 65  o matches on the
23160 20 6d 6f 73 74 20 72 65 63 65 6e 74 0a 2a 2a 20   most recent.** 
23170 73 65 65 6b 20 6f 76 65 72 20 74 68 65 20 77 68  seek over the wh
23180 6f 6c 65 20 6b 65 79 2c 20 74 68 65 6e 20 69 74  ole key, then it
23190 20 6d 69 67 68 74 20 62 65 20 74 68 61 74 20 6f   might be that o
231a0 6e 65 20 6f 66 20 74 68 65 20 6b 65 79 20 65 6c  ne of the key el
231b0 65 6d 65 6e 74 0a 2a 2a 20 74 6f 20 74 68 65 20  ement.** to the 
231c0 6c 65 66 74 20 69 73 20 70 72 6f 68 69 62 69 74  left is prohibit
231d0 69 6e 67 20 61 20 6d 61 74 63 68 2c 20 61 6e 64  ing a match, and
231e0 20 68 65 6e 63 65 20 74 68 65 72 65 20 69 73 20   hence there is 
231f0 22 6e 6f 20 68 6f 70 65 22 20 6f 66 0a 2a 2a 20  "no hope" of.** 
23200 61 6e 79 20 6d 61 74 63 68 20 72 65 67 61 72 64  any match regard
23210 6c 65 73 73 20 6f 66 20 68 6f 77 20 6d 61 6e 79  less of how many
23220 20 49 4e 20 63 6c 61 75 73 65 20 65 6c 65 6d 65   IN clause eleme
23230 6e 74 73 20 61 72 65 20 63 68 65 63 6b 65 64 2e  nts are checked.
23240 0a 2a 2a 20 49 6e 20 73 75 63 68 20 61 20 63 61  .** In such a ca
23250 73 65 2c 20 77 65 20 61 62 61 6e 64 6f 6e 20 74  se, we abandon t
23260 68 65 20 49 4e 20 63 6c 61 75 73 65 20 73 65 61  he IN clause sea
23270 72 63 68 20 65 61 72 6c 79 2c 20 75 73 69 6e 67  rch early, using
23280 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 2e   this.** opcode.
23290 20 20 54 68 65 20 6f 70 63 6f 64 65 20 6e 61 6d    The opcode nam
232a0 65 20 63 6f 6d 65 73 20 66 72 6f 6d 20 74 68 65  e comes from the
232b0 20 66 61 63 74 20 74 68 61 74 20 74 68 65 0a 2a   fact that the.*
232c0 2a 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  * jump is taken 
232d0 69 66 20 74 68 65 72 65 20 69 73 20 22 6e 6f 20  if there is "no 
232e0 68 6f 70 65 22 20 6f 66 20 61 63 68 69 65 76 69  hope" of achievi
232f0 6e 67 20 61 20 6d 61 74 63 68 2e 0a 2a 2a 0a 2a  ng a match..**.*
23300 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46  * See also: NotF
23310 6f 75 6e 64 2c 20 53 65 65 6b 48 69 74 0a 2a 2f  ound, SeekHit.*/
23320 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 43 6f  ./* Opcode: NoCo
23330 6e 66 6c 69 63 74 20 50 31 20 50 32 20 50 33 20  nflict P1 P2 P3 
23340 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
23350 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
23360 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68  *.** If P4==0 th
23370 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 68  en register P3 h
23380 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73  olds a blob cons
23390 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52  tructed by MakeR
233a0 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34  ecord.  If.** P4
233b0 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72  >0 then register
233c0 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74   P3 is the first
233d0 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73   of P4 registers
233e0 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e   that form an un
233f0 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64  packed.** record
23400 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f 72 20  ..** .** Cursor 
23410 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65  P1 is on an inde
23420 78 20 62 74 72 65 65 2e 20 20 49 66 20 74 68 65  x btree.  If the
23430 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69   record identifi
23440 65 64 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a  ed by P3 and P4.
23450 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61 6e 79 20  ** contains any 
23460 4e 55 4c 4c 20 76 61 6c 75 65 2c 20 6a 75 6d 70  NULL value, jump
23470 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
23480 50 32 2e 20 20 49 66 20 61 6c 6c 20 74 65 72 6d  P2.  If all term
23490 73 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 63 6f  s of the.** reco
234a0 72 64 20 61 72 65 20 6e 6f 74 2d 4e 55 4c 4c 20  rd are not-NULL 
234b0 74 68 65 6e 20 61 20 63 68 65 63 6b 20 69 73 20  then a check is 
234c0 64 6f 6e 65 20 74 6f 20 64 65 74 65 72 6d 69 6e  done to determin
234d0 65 20 69 66 20 61 6e 79 20 72 6f 77 20 69 6e 20  e if any row in 
234e0 74 68 65 0a 2a 2a 20 50 31 20 69 6e 64 65 78 20  the.** P1 index 
234f0 62 74 72 65 65 20 68 61 73 20 61 20 6d 61 74 63  btree has a matc
23500 68 69 6e 67 20 6b 65 79 20 70 72 65 66 69 78 2e  hing key prefix.
23510 20 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e    If there are n
23520 6f 20 6d 61 74 63 68 65 73 2c 20 6a 75 6d 70 0a  o matches, jump.
23530 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  ** immediately t
23540 6f 20 50 32 2e 20 20 49 66 20 74 68 65 72 65 20  o P2.  If there 
23550 69 73 20 61 20 6d 61 74 63 68 2c 20 66 61 6c 6c  is a match, fall
23560 20 74 68 72 6f 75 67 68 20 61 6e 64 20 6c 65 61   through and lea
23570 76 65 20 74 68 65 20 50 31 0a 2a 2a 20 63 75 72  ve the P1.** cur
23580 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20  sor pointing to 
23590 74 68 65 20 6d 61 74 63 68 69 6e 67 20 72 6f 77  the matching row
235a0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
235b0 6f 64 65 20 69 73 20 73 69 6d 69 6c 61 72 20 74  ode is similar t
235c0 6f 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 77 69  o OP_NotFound wi
235d0 74 68 20 74 68 65 20 65 78 63 65 70 74 69 6f 6e  th the exception
235e0 73 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 62 72  s that the.** br
235f0 61 6e 63 68 20 69 73 20 61 6c 77 61 79 73 20 74  anch is always t
23600 61 6b 65 6e 20 69 66 20 61 6e 79 20 70 61 72 74  aken if any part
23610 20 6f 66 20 74 68 65 20 73 65 61 72 63 68 20 6b   of the search k
23620 65 79 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  ey input is NULL
23630 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65  ..**.** This ope
23640 72 61 74 69 6f 6e 20 6c 65 61 76 65 73 20 74 68  ration leaves th
23650 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74  e cursor in a st
23660 61 74 65 20 77 68 65 72 65 20 69 74 20 63 61 6e  ate where it can
23670 6e 6f 74 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63  not be.** advanc
23680 65 64 20 69 6e 20 65 69 74 68 65 72 20 64 69 72  ed in either dir
23690 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65  ection.  In othe
236a0 72 20 77 6f 72 64 73 2c 20 74 68 65 20 4e 65 78  r words, the Nex
236b0 74 20 61 6e 64 20 50 72 65 76 0a 2a 2a 20 6f 70  t and Prev.** op
236c0 63 6f 64 65 73 20 64 6f 20 6e 6f 74 20 77 6f 72  codes do not wor
236d0 6b 20 61 66 74 65 72 20 74 68 69 73 20 6f 70 65  k after this ope
236e0 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65  ration..**.** Se
236f0 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64  e also: NotFound
23700 2c 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73  , Found, NotExis
23710 74 73 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66  ts.*/.case OP_If
23720 4e 6f 48 6f 70 65 3a 20 7b 20 20 20 20 20 2f 2a  NoHope: {     /*
23730 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20   jump, in3 */.  
23740 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
23750 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
23760 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
23770 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
23780 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
23790 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
237a0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66 28  ( pC!=0 );.  if(
237b0 20 70 43 2d 3e 73 65 65 6b 48 69 74 20 29 20 62   pC->seekHit ) b
237c0 72 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20  reak;.  /* Fall 
237d0 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f  through into OP_
237e0 4e 6f 74 46 6f 75 6e 64 20 2a 2f 0a 7d 0a 63 61  NotFound */.}.ca
237f0 73 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74  se OP_NoConflict
23800 3a 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69  :     /* jump, i
23810 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f  n3 */.case OP_No
23820 74 46 6f 75 6e 64 3a 20 20 20 20 20 20 20 2f 2a  tFound:       /*
23830 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61   jump, in3 */.ca
23840 73 65 20 4f 50 5f 46 6f 75 6e 64 3a 20 7b 20 20  se OP_Found: {  
23850 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
23860 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 61 6c 72 65  n3 */.  int alre
23870 61 64 79 45 78 69 73 74 73 3b 0a 20 20 69 6e 74  adyExists;.  int
23880 20 74 61 6b 65 4a 75 6d 70 3b 0a 20 20 69 6e 74   takeJump;.  int
23890 20 69 69 3b 0a 20 20 56 64 62 65 43 75 72 73 6f   ii;.  VdbeCurso
238a0 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73  r *pC;.  int res
238b0 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ;.  UnpackedReco
238c0 72 64 20 2a 70 46 72 65 65 3b 0a 20 20 55 6e 70  rd *pFree;.  Unp
238d0 61 63 6b 65 64 52 65 63 6f 72 64 20 2a 70 49 64  ackedRecord *pId
238e0 78 4b 65 79 3b 0a 20 20 55 6e 70 61 63 6b 65 64  xKey;.  Unpacked
238f0 52 65 63 6f 72 64 20 72 3b 0a 0a 23 69 66 64 65  Record r;..#ifde
23900 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
23910 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21  if( pOp->opcode!
23920 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20 29  =OP_NoConflict )
23930 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f 63   sqlite3_found_c
23940 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a  ount++;.#endif..
23950 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
23960 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
23970 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
23980 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
23990 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b  ype==P4_INT32 );
239a0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
239b0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
239c0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 23 69  ert( pC!=0 );.#i
239d0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
239e0 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d  G.  pC->seekOp =
239f0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65   pOp->opcode;.#e
23a00 6e 64 69 66 0a 20 20 70 49 6e 33 20 3d 20 26 61  ndif.  pIn3 = &a
23a10 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
23a20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
23a30 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
23a40 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28  REE );.  assert(
23a50 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21   pC->uc.pCursor!
23a60 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
23a70 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29  pC->isTable==0 )
23a80 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e  ;.  if( pOp->p4.
23a90 69 3e 30 20 29 7b 0a 20 20 20 20 72 2e 70 4b 65  i>0 ){.    r.pKe
23aa0 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79  yInfo = pC->pKey
23ab0 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65  Info;.    r.nFie
23ac0 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70  ld = (u16)pOp->p
23ad0 34 2e 69 3b 0a 20 20 20 20 72 2e 61 4d 65 6d 20  4.i;.    r.aMem 
23ae0 3d 20 70 49 6e 33 3b 0a 23 69 66 64 65 66 20 53  = pIn3;.#ifdef S
23af0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
23b00 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 72 2e 6e  for(ii=0; ii<r.n
23b10 46 69 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20 20  Field; ii++){.  
23b20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
23b30 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69  sValid(&r.aMem[i
23b40 69 5d 29 20 29 3b 0a 20 20 20 20 20 20 61 73 73  i]) );.      ass
23b50 65 72 74 28 20 28 72 2e 61 4d 65 6d 5b 69 69 5d  ert( (r.aMem[ii]
23b60 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72  .flags & MEM_Zer
23b70 6f 29 3d 3d 30 20 7c 7c 20 72 2e 61 4d 65 6d 5b  o)==0 || r.aMem[
23b80 69 69 5d 2e 6e 3d 3d 30 20 29 3b 0a 20 20 20 20  ii].n==0 );.    
23b90 20 20 69 66 28 20 69 69 20 29 20 52 45 47 49 53    if( ii ) REGIS
23ba0 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
23bb0 33 2b 69 69 2c 20 26 72 2e 61 4d 65 6d 5b 69 69  3+ii, &r.aMem[ii
23bc0 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  ]);.    }.#endif
23bd0 0a 20 20 20 20 70 49 64 78 4b 65 79 20 3d 20 26  .    pIdxKey = &
23be0 72 3b 0a 20 20 20 20 70 46 72 65 65 20 3d 20 30  r;.    pFree = 0
23bf0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
23c00 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61  ssert( pIn3->fla
23c10 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b  gs & MEM_Blob );
23c20 0a 20 20 20 20 72 63 20 3d 20 45 78 70 61 6e 64  .    rc = Expand
23c30 42 6c 6f 62 28 70 49 6e 33 29 3b 0a 20 20 20 20  Blob(pIn3);.    
23c40 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
23c50 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c  TE_OK || rc==SQL
23c60 49 54 45 5f 4e 4f 4d 45 4d 20 29 3b 0a 20 20 20  ITE_NOMEM );.   
23c70 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 6e   if( rc ) goto n
23c80 6f 5f 6d 65 6d 3b 0a 20 20 20 20 70 46 72 65 65  o_mem;.    pFree
23c90 20 3d 20 70 49 64 78 4b 65 79 20 3d 20 73 71 6c   = pIdxKey = sql
23ca0 69 74 65 33 56 64 62 65 41 6c 6c 6f 63 55 6e 70  ite3VdbeAllocUnp
23cb0 61 63 6b 65 64 52 65 63 6f 72 64 28 70 43 2d 3e  ackedRecord(pC->
23cc0 70 4b 65 79 49 6e 66 6f 29 3b 0a 20 20 20 20 69  pKeyInfo);.    i
23cd0 66 28 20 70 49 64 78 4b 65 79 3d 3d 30 20 29 20  f( pIdxKey==0 ) 
23ce0 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20  goto no_mem;.   
23cf0 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 63 6f   sqlite3VdbeReco
23d00 72 64 55 6e 70 61 63 6b 28 70 43 2d 3e 70 4b 65  rdUnpack(pC->pKe
23d10 79 49 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e 2c 20  yInfo, pIn3->n, 
23d20 70 49 6e 33 2d 3e 7a 2c 20 70 49 64 78 4b 65 79  pIn3->z, pIdxKey
23d30 29 3b 0a 20 20 7d 0a 20 20 70 49 64 78 4b 65 79  );.  }.  pIdxKey
23d40 2d 3e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30  ->default_rc = 0
23d50 3b 0a 20 20 74 61 6b 65 4a 75 6d 70 20 3d 20 30  ;.  takeJump = 0
23d60 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  ;.  if( pOp->opc
23d70 6f 64 65 3d 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69  ode==OP_NoConfli
23d80 63 74 20 29 7b 0a 20 20 20 20 2f 2a 20 46 6f 72  ct ){.    /* For
23d90 20 74 68 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69   the OP_NoConfli
23da0 63 74 20 6f 70 63 6f 64 65 2c 20 74 61 6b 65 20  ct opcode, take 
23db0 74 68 65 20 6a 75 6d 70 20 69 66 20 61 6e 79 20  the jump if any 
23dc0 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 69 6e  of the.    ** in
23dd0 70 75 74 20 66 69 65 6c 64 73 20 61 72 65 20 4e  put fields are N
23de0 55 4c 4c 2c 20 73 69 6e 63 65 20 61 6e 79 20 6b  ULL, since any k
23df0 65 79 20 77 69 74 68 20 61 20 4e 55 4c 4c 20 77  ey with a NULL w
23e00 69 6c 6c 20 6e 6f 74 0a 20 20 20 20 2a 2a 20 63  ill not.    ** c
23e10 6f 6e 66 6c 69 63 74 20 2a 2f 0a 20 20 20 20 66  onflict */.    f
23e20 6f 72 28 69 69 3d 30 3b 20 69 69 3c 70 49 64 78  or(ii=0; ii<pIdx
23e30 4b 65 79 2d 3e 6e 46 69 65 6c 64 3b 20 69 69 2b  Key->nField; ii+
23e40 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 49  +){.      if( pI
23e50 64 78 4b 65 79 2d 3e 61 4d 65 6d 5b 69 69 5d 2e  dxKey->aMem[ii].
23e60 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
23e70 20 29 7b 0a 20 20 20 20 20 20 20 20 74 61 6b 65   ){.        take
23e80 4a 75 6d 70 20 3d 20 31 3b 0a 20 20 20 20 20 20  Jump = 1;.      
23e90 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
23ea0 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 63 20  .    }.  }.  rc 
23eb0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
23ec0 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d  vetoUnpacked(pC-
23ed0 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 70 49 64  >uc.pCursor, pId
23ee0 78 4b 65 79 2c 20 30 2c 20 30 2c 20 26 72 65 73  xKey, 0, 0, &res
23ef0 29 3b 0a 20 20 69 66 28 20 70 46 72 65 65 20 29  );.  if( pFree )
23f00 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 4e 4e   sqlite3DbFreeNN
23f10 28 64 62 2c 20 70 46 72 65 65 29 3b 0a 20 20 69  (db, pFree);.  i
23f20 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
23f30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f   ){.    goto abo
23f40 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
23f50 0a 20 20 7d 0a 20 20 70 43 2d 3e 73 65 65 6b 52  .  }.  pC->seekR
23f60 65 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20 61  esult = res;.  a
23f70 6c 72 65 61 64 79 45 78 69 73 74 73 20 3d 20 28  lreadyExists = (
23f80 72 65 73 3d 3d 30 29 3b 0a 20 20 70 43 2d 3e 6e  res==0);.  pC->n
23f90 75 6c 6c 52 6f 77 20 3d 20 31 2d 61 6c 72 65 61  ullRow = 1-alrea
23fa0 64 79 45 78 69 73 74 73 3b 0a 20 20 70 43 2d 3e  dyExists;.  pC->
23fb0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
23fc0 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   0;.  pC->cacheS
23fd0 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
23fe0 41 4c 45 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  ALE;.  if( pOp->
23ff0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64  opcode==OP_Found
24000 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e   ){.    VdbeBran
24010 63 68 54 61 6b 65 6e 28 61 6c 72 65 61 64 79 45  chTaken(alreadyE
24020 78 69 73 74 73 21 3d 30 2c 32 29 3b 0a 20 20 20  xists!=0,2);.   
24030 20 69 66 28 20 61 6c 72 65 61 64 79 45 78 69 73   if( alreadyExis
24040 74 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  ts ) goto jump_t
24050 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  o_p2;.  }else{. 
24060 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
24070 65 6e 28 74 61 6b 65 4a 75 6d 70 7c 7c 61 6c 72  en(takeJump||alr
24080 65 61 64 79 45 78 69 73 74 73 3d 3d 30 2c 32 29  eadyExists==0,2)
24090 3b 0a 20 20 20 20 69 66 28 20 74 61 6b 65 4a 75  ;.    if( takeJu
240a0 6d 70 20 7c 7c 20 21 61 6c 72 65 61 64 79 45 78  mp || !alreadyEx
240b0 69 73 74 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70  ists ) goto jump
240c0 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72  _to_p2;.  }.  br
240d0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
240e0 65 3a 20 53 65 65 6b 52 6f 77 69 64 20 50 31 20  e: SeekRowid P1 
240f0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
24100 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72 5b  opsis: intkey=r[
24110 50 33 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  P3].**.** P1 is 
24120 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20 63  the index of a c
24130 75 72 73 6f 72 20 6f 70 65 6e 20 6f 6e 20 61 6e  ursor open on an
24140 20 53 51 4c 20 74 61 62 6c 65 20 62 74 72 65 65   SQL table btree
24150 20 28 77 69 74 68 20 69 6e 74 65 67 65 72 0a 2a   (with integer.*
24160 2a 20 6b 65 79 73 29 2e 20 20 49 66 20 72 65 67  * keys).  If reg
24170 69 73 74 65 72 20 50 33 20 64 6f 65 73 20 6e 6f  ister P3 does no
24180 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74  t contain an int
24190 65 67 65 72 20 6f 72 20 69 66 20 50 31 20 64 6f  eger or if P1 do
241a0 65 73 20 6e 6f 74 0a 2a 2a 20 63 6f 6e 74 61 69  es not.** contai
241b0 6e 20 61 20 72 65 63 6f 72 64 20 77 69 74 68 20  n a record with 
241c0 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20 6a 75  rowid P3 then ju
241d0 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
241e0 6f 20 50 32 2e 20 20 0a 2a 2a 20 4f 72 2c 20 69  o P2.  .** Or, i
241f0 66 20 50 32 20 69 73 20 30 2c 20 72 61 69 73 65  f P2 is 0, raise
24200 20 61 6e 20 53 51 4c 49 54 45 5f 43 4f 52 52 55   an SQLITE_CORRU
24210 50 54 20 65 72 72 6f 72 2e 20 49 66 20 50 31 20  PT error. If P1 
24220 64 6f 65 73 20 63 6f 6e 74 61 69 6e 0a 2a 2a 20  does contain.** 
24230 61 20 72 65 63 6f 72 64 20 77 69 74 68 20 72 6f  a record with ro
24240 77 69 64 20 50 33 20 74 68 65 6e 20 0a 2a 2a 20  wid P3 then .** 
24250 6c 65 61 76 65 20 74 68 65 20 63 75 72 73 6f 72  leave the cursor
24260 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 61   pointing at tha
24270 74 20 72 65 63 6f 72 64 20 61 6e 64 20 66 61 6c  t record and fal
24280 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
24290 20 6e 65 78 74 0a 2a 2a 20 69 6e 73 74 72 75 63   next.** instruc
242a0 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  tion..**.** The 
242b0 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 70 63  OP_NotExists opc
242c0 6f 64 65 20 70 65 72 66 6f 72 6d 73 20 74 68 65  ode performs the
242d0 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 2c   same operation,
242e0 20 62 75 74 20 77 69 74 68 20 4f 50 5f 4e 6f 74   but with OP_Not
242f0 45 78 69 73 74 73 0a 2a 2a 20 74 68 65 20 50 33  Exists.** the P3
24300 20 72 65 67 69 73 74 65 72 20 6d 75 73 74 20 62   register must b
24310 65 20 67 75 61 72 61 6e 74 65 65 64 20 74 6f 20  e guaranteed to 
24320 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67  contain an integ
24330 65 72 20 76 61 6c 75 65 2e 20 20 57 69 74 68 20  er value.  With 
24340 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 2c 20  this.** opcode, 
24350 72 65 67 69 73 74 65 72 20 50 33 20 6d 69 67 68  register P3 migh
24360 74 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e  t not contain an
24370 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20   integer..**.** 
24380 54 68 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20  The OP_NotFound 
24390 6f 70 63 6f 64 65 20 70 65 72 66 6f 72 6d 73 20  opcode performs 
243a0 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69  the same operati
243b0 6f 6e 20 6f 6e 20 69 6e 64 65 78 20 62 74 72 65  on on index btre
243c0 65 73 0a 2a 2a 20 28 77 69 74 68 20 61 72 62 69  es.** (with arbi
243d0 74 72 61 72 79 20 6d 75 6c 74 69 2d 76 61 6c 75  trary multi-valu
243e0 65 20 6b 65 79 73 29 2e 0a 2a 2a 0a 2a 2a 20 54  e keys)..**.** T
243f0 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65  his opcode leave
24400 73 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20  s the cursor in 
24410 61 20 73 74 61 74 65 20 77 68 65 72 65 20 69 74  a state where it
24420 20 63 61 6e 6e 6f 74 20 62 65 20 61 64 76 61 6e   cannot be advan
24430 63 65 64 0a 2a 2a 20 69 6e 20 65 69 74 68 65 72  ced.** in either
24440 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20   direction.  In 
24450 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
24460 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76 20 6f   Next and Prev o
24470 70 63 6f 64 65 73 20 77 69 6c 6c 0a 2a 2a 20 6e  pcodes will.** n
24480 6f 74 20 77 6f 72 6b 20 66 6f 6c 6c 6f 77 69 6e  ot work followin
24490 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a  g this opcode..*
244a0 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
244b0 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20  ound, NotFound, 
244c0 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20 53 65 65 6b  NoConflict, Seek
244d0 52 6f 77 69 64 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  Rowid.*/./* Opco
244e0 64 65 3a 20 4e 6f 74 45 78 69 73 74 73 20 50 31  de: NotExists P1
244f0 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
24500 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72  nopsis: intkey=r
24510 5b 50 33 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  [P3].**.** P1 is
24520 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20   the index of a 
24530 63 75 72 73 6f 72 20 6f 70 65 6e 20 6f 6e 20 61  cursor open on a
24540 6e 20 53 51 4c 20 74 61 62 6c 65 20 62 74 72 65  n SQL table btre
24550 65 20 28 77 69 74 68 20 69 6e 74 65 67 65 72 0a  e (with integer.
24560 2a 2a 20 6b 65 79 73 29 2e 20 20 50 33 20 69 73  ** keys).  P3 is
24570 20 61 6e 20 69 6e 74 65 67 65 72 20 72 6f 77 69   an integer rowi
24580 64 2e 20 20 49 66 20 50 31 20 64 6f 65 73 20 6e  d.  If P1 does n
24590 6f 74 20 63 6f 6e 74 61 69 6e 20 61 20 72 65 63  ot contain a rec
245a0 6f 72 64 20 77 69 74 68 0a 2a 2a 20 72 6f 77 69  ord with.** rowi
245b0 64 20 50 33 20 74 68 65 6e 20 6a 75 6d 70 20 69  d P3 then jump i
245c0 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
245d0 2e 20 20 4f 72 2c 20 69 66 20 50 32 20 69 73 20  .  Or, if P2 is 
245e0 30 2c 20 72 61 69 73 65 20 61 6e 0a 2a 2a 20 53  0, raise an.** S
245f0 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 20 65 72  QLITE_CORRUPT er
24600 72 6f 72 2e 20 49 66 20 50 31 20 64 6f 65 73 20  ror. If P1 does 
24610 63 6f 6e 74 61 69 6e 20 61 20 72 65 63 6f 72 64  contain a record
24620 20 77 69 74 68 20 72 6f 77 69 64 20 50 33 20 74   with rowid P3 t
24630 68 65 6e 20 0a 2a 2a 20 6c 65 61 76 65 20 74 68  hen .** leave th
24640 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e  e cursor pointin
24650 67 20 61 74 20 74 68 61 74 20 72 65 63 6f 72 64  g at that record
24660 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67   and fall throug
24670 68 20 74 6f 20 74 68 65 20 6e 65 78 74 0a 2a 2a  h to the next.**
24680 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
24690 0a 2a 2a 20 54 68 65 20 4f 50 5f 53 65 65 6b 52  .** The OP_SeekR
246a0 6f 77 69 64 20 6f 70 63 6f 64 65 20 70 65 72 66  owid opcode perf
246b0 6f 72 6d 73 20 74 68 65 20 73 61 6d 65 20 6f 70  orms the same op
246c0 65 72 61 74 69 6f 6e 20 62 75 74 20 61 6c 73 6f  eration but also
246d0 20 61 6c 6c 6f 77 73 20 74 68 65 0a 2a 2a 20 50   allows the.** P
246e0 33 20 72 65 67 69 73 74 65 72 20 74 6f 20 63 6f  3 register to co
246f0 6e 74 61 69 6e 20 61 20 6e 6f 6e 2d 69 6e 74 65  ntain a non-inte
24700 67 65 72 20 76 61 6c 75 65 2c 20 69 6e 20 77 68  ger value, in wh
24710 69 63 68 20 63 61 73 65 20 74 68 65 20 6a 75 6d  ich case the jum
24720 70 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 74  p is.** always t
24730 61 6b 65 6e 2e 20 20 54 68 69 73 20 6f 70 63 6f  aken.  This opco
24740 64 65 20 72 65 71 75 69 72 65 73 20 74 68 61 74  de requires that
24750 20 50 33 20 61 6c 77 61 79 73 20 63 6f 6e 74 61   P3 always conta
24760 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a  in an integer..*
24770 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e 6f 74 46  *.** The OP_NotF
24780 6f 75 6e 64 20 6f 70 63 6f 64 65 20 70 65 72 66  ound opcode perf
24790 6f 72 6d 73 20 74 68 65 20 73 61 6d 65 20 6f 70  orms the same op
247a0 65 72 61 74 69 6f 6e 20 6f 6e 20 69 6e 64 65 78  eration on index
247b0 20 62 74 72 65 65 73 0a 2a 2a 20 28 77 69 74 68   btrees.** (with
247c0 20 61 72 62 69 74 72 61 72 79 20 6d 75 6c 74 69   arbitrary multi
247d0 2d 76 61 6c 75 65 20 6b 65 79 73 29 2e 0a 2a 2a  -value keys)..**
247e0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
247f0 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f  leaves the curso
24800 72 20 69 6e 20 61 20 73 74 61 74 65 20 77 68 65  r in a state whe
24810 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 20  re it cannot be 
24820 61 64 76 61 6e 63 65 64 0a 2a 2a 20 69 6e 20 65  advanced.** in e
24830 69 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e  ither direction.
24840 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
24850 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50  , the Next and P
24860 72 65 76 20 6f 70 63 6f 64 65 73 20 77 69 6c 6c  rev opcodes will
24870 0a 2a 2a 20 6e 6f 74 20 77 6f 72 6b 20 66 6f 6c  .** not work fol
24880 6c 6f 77 69 6e 67 20 74 68 69 73 20 6f 70 63 6f  lowing this opco
24890 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  de..**.** See al
248a0 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f  so: Found, NotFo
248b0 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c  und, NoConflict,
248c0 20 53 65 65 6b 52 6f 77 69 64 0a 2a 2f 0a 63 61   SeekRowid.*/.ca
248d0 73 65 20 4f 50 5f 53 65 65 6b 52 6f 77 69 64 3a  se OP_SeekRowid:
248e0 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
248f0 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 56 64 62 65  p, in3 */.  Vdbe
24900 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74  Cursor *pC;.  Bt
24910 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
24920 20 69 6e 74 20 72 65 73 3b 0a 20 20 75 36 34 20   int res;.  u64 
24930 69 4b 65 79 3b 0a 0a 20 20 70 49 6e 33 20 3d 20  iKey;..  pIn3 = 
24940 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
24950 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61    if( (pIn3->fla
24960 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30  gs & MEM_Int)==0
24970 20 29 7b 0a 20 20 20 20 2f 2a 20 4d 61 6b 65 20   ){.    /* Make 
24980 73 75 72 65 20 70 49 6e 33 2d 3e 75 2e 69 20 63  sure pIn3->u.i c
24990 6f 6e 74 61 69 6e 73 20 61 20 76 61 6c 69 64 20  ontains a valid 
249a0 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e  integer represen
249b0 74 61 74 69 6f 6e 20 6f 66 0a 20 20 20 20 2a 2a  tation of.    **
249c0 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2c 20   the key value, 
249d0 62 75 74 20 64 6f 20 6e 6f 74 20 63 68 61 6e 67  but do not chang
249e0 65 20 74 68 65 20 64 61 74 61 74 79 70 65 20 6f  e the datatype o
249f0 66 20 74 68 65 20 72 65 67 69 73 74 65 72 2c 20  f the register, 
24a00 61 73 0a 20 20 20 20 2a 2a 20 6f 74 68 65 72 20  as.    ** other 
24a10 70 61 72 74 73 20 6f 66 20 74 68 65 20 70 65 72  parts of the per
24a20 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20  pared statement 
24a30 6d 69 67 68 74 20 62 65 20 64 65 70 65 6e 64 69  might be dependi
24a40 6e 67 20 6f 6e 20 74 68 65 0a 20 20 20 20 2a 2a  ng on the.    **
24a50 20 63 75 72 72 65 6e 74 20 64 61 74 61 74 79 70   current datatyp
24a60 65 2e 20 2a 2f 0a 20 20 20 20 75 31 36 20 6f 72  e. */.    u16 or
24a70 69 67 46 6c 61 67 73 20 3d 20 70 49 6e 33 2d 3e  igFlags = pIn3->
24a80 66 6c 61 67 73 3b 0a 20 20 20 20 69 6e 74 20 69  flags;.    int i
24a90 73 4e 6f 74 49 6e 74 3b 0a 20 20 20 20 61 70 70  sNotInt;.    app
24aa0 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 33 2c  lyAffinity(pIn3,
24ab0 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45   SQLITE_AFF_NUME
24ac0 52 49 43 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  RIC, encoding);.
24ad0 20 20 20 20 69 73 4e 6f 74 49 6e 74 20 3d 20 28      isNotInt = (
24ae0 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
24af0 4d 5f 49 6e 74 29 3d 3d 30 3b 0a 20 20 20 20 70  M_Int)==0;.    p
24b00 49 6e 33 2d 3e 66 6c 61 67 73 20 3d 20 6f 72 69  In3->flags = ori
24b10 67 46 6c 61 67 73 3b 0a 20 20 20 20 69 66 28 20  gFlags;.    if( 
24b20 69 73 4e 6f 74 49 6e 74 20 29 20 67 6f 74 6f 20  isNotInt ) goto 
24b30 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a  jump_to_p2;.  }.
24b40 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67    /* Fall throug
24b50 68 20 69 6e 74 6f 20 4f 50 5f 4e 6f 74 45 78 69  h into OP_NotExi
24b60 73 74 73 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  sts */.case OP_N
24b70 6f 74 45 78 69 73 74 73 3a 20 20 20 20 20 20 20  otExists:       
24b80 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
24b90 2a 2f 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65  */.  pIn3 = &aMe
24ba0 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73  m[pOp->p3];.  as
24bb0 73 65 72 74 28 20 28 70 49 6e 33 2d 3e 66 6c 61  sert( (pIn3->fla
24bc0 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  gs & MEM_Int)!=0
24bd0 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
24be0 3d 4f 50 5f 53 65 65 6b 52 6f 77 69 64 20 29 3b  =OP_SeekRowid );
24bf0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
24c00 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
24c10 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
24c20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
24c30 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
24c40 74 28 20 70 43 21 3d 30 20 29 3b 0a 23 69 66 64  t( pC!=0 );.#ifd
24c50 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
24c60 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
24c70 65 3d 3d 4f 50 5f 53 65 65 6b 52 6f 77 69 64 20  e==OP_SeekRowid 
24c80 29 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 4f  ) pC->seekOp = O
24c90 50 5f 53 65 65 6b 52 6f 77 69 64 3b 0a 23 65 6e  P_SeekRowid;.#en
24ca0 64 69 66 0a 20 20 61 73 73 65 72 74 28 20 70 43  dif.  assert( pC
24cb0 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 61  ->isTable );.  a
24cc0 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
24cd0 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
24ce0 45 45 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20  EE );.  pCrsr = 
24cf0 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a  pC->uc.pCursor;.
24d00 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72 21    assert( pCrsr!
24d10 3d 30 20 29 3b 0a 20 20 72 65 73 20 3d 20 30 3b  =0 );.  res = 0;
24d20 0a 20 20 69 4b 65 79 20 3d 20 70 49 6e 33 2d 3e  .  iKey = pIn3->
24d30 75 2e 69 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  u.i;.  rc = sqli
24d40 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e  te3BtreeMovetoUn
24d50 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20 30 2c  packed(pCrsr, 0,
24d60 20 69 4b 65 79 2c 20 30 2c 20 26 72 65 73 29 3b   iKey, 0, &res);
24d70 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53  .  assert( rc==S
24d80 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 65 73 3d  QLITE_OK || res=
24d90 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 6d 6f 76 65  =0 );.  pC->move
24da0 74 6f 54 61 72 67 65 74 20 3d 20 69 4b 65 79 3b  toTarget = iKey;
24db0 20 20 2f 2a 20 55 73 65 64 20 62 79 20 4f 50 5f    /* Used by OP_
24dc0 44 65 6c 65 74 65 20 2a 2f 0a 20 20 70 43 2d 3e  Delete */.  pC->
24dd0 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 70  nullRow = 0;.  p
24de0 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
24df0 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
24e00 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
24e10 74 6f 20 3d 20 30 3b 0a 20 20 56 64 62 65 42 72  to = 0;.  VdbeBr
24e20 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30  anchTaken(res!=0
24e30 2c 32 29 3b 0a 20 20 70 43 2d 3e 73 65 65 6b 52  ,2);.  pC->seekR
24e40 65 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20 69  esult = res;.  i
24e50 66 28 20 72 65 73 21 3d 30 20 29 7b 0a 20 20 20  f( res!=0 ){.   
24e60 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
24e70 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 20 20 69 66  ITE_OK );.    if
24e80 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a  ( pOp->p2==0 ){.
24e90 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
24ea0 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a  E_CORRUPT_BKPT;.
24eb0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
24ec0 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
24ed0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66  ;.    }.  }.  if
24ee0 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
24ef0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
24f00 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
24f10 70 63 6f 64 65 3a 20 53 65 71 75 65 6e 63 65 20  pcode: Sequence 
24f20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
24f30 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 63  ynopsis: r[P2]=c
24f40 75 72 73 6f 72 5b 50 31 5d 2e 63 74 72 2b 2b 0a  ursor[P1].ctr++.
24f50 2a 2a 0a 2a 2a 20 46 69 6e 64 20 74 68 65 20 6e  **.** Find the n
24f60 65 78 74 20 61 76 61 69 6c 61 62 6c 65 20 73 65  ext available se
24f70 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 66 6f  quence number fo
24f80 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20  r cursor P1..** 
24f90 57 72 69 74 65 20 74 68 65 20 73 65 71 75 65 6e  Write the sequen
24fa0 63 65 20 6e 75 6d 62 65 72 20 69 6e 74 6f 20 72  ce number into r
24fb0 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 54  egister P2..** T
24fc0 68 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62  he sequence numb
24fd0 65 72 20 6f 6e 20 74 68 65 20 63 75 72 73 6f 72  er on the cursor
24fe0 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
24ff0 61 66 74 65 72 20 74 68 69 73 0a 2a 2a 20 69 6e  after this.** in
25000 73 74 72 75 63 74 69 6f 6e 2e 20 20 0a 2a 2f 0a  struction.  .*/.
25010 63 61 73 65 20 4f 50 5f 53 65 71 75 65 6e 63 65  case OP_Sequence
25020 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
25030 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73 73 65 72   out2 */.  asser
25040 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
25050 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
25060 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
25070 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
25080 31 5d 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  1]!=0 );.  asser
25090 74 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d  t( p->apCsr[pOp-
250a0 3e 70 31 5d 2d 3e 65 43 75 72 54 79 70 65 21 3d  >p1]->eCurType!=
250b0 43 55 52 54 59 50 45 5f 56 54 41 42 20 29 3b 0a  CURTYPE_VTAB );.
250c0 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
250d0 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
250e0 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70  .  pOut->u.i = p
250f0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
25100 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b 3b 0a 20 20  ->seqCount++;.  
25110 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70  break;.}.../* Op
25120 63 6f 64 65 3a 20 4e 65 77 52 6f 77 69 64 20 50  code: NewRowid P
25130 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
25140 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72  ynopsis: r[P2]=r
25150 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 47 65 74 20 61  owid.**.** Get a
25160 20 6e 65 77 20 69 6e 74 65 67 65 72 20 72 65 63   new integer rec
25170 6f 72 64 20 6e 75 6d 62 65 72 20 28 61 2e 6b 2e  ord number (a.k.
25180 61 20 22 72 6f 77 69 64 22 29 20 75 73 65 64 20  a "rowid") used 
25190 61 73 20 74 68 65 20 6b 65 79 20 74 6f 20 61 20  as the key to a 
251a0 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 72 65  table..** The re
251b0 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20 6e  cord number is n
251c0 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73  ot previously us
251d0 65 64 20 61 73 20 61 20 6b 65 79 20 69 6e 20 74  ed as a key in t
251e0 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 74  he database.** t
251f0 61 62 6c 65 20 74 68 61 74 20 63 75 72 73 6f 72  able that cursor
25200 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20   P1 points to.  
25210 54 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 6e  The new record n
25220 75 6d 62 65 72 20 69 73 20 77 72 69 74 74 65 6e  umber is written
25230 0a 2a 2a 20 77 72 69 74 74 65 6e 20 74 6f 20 72  .** written to r
25240 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
25250 2a 20 49 66 20 50 33 3e 30 20 74 68 65 6e 20 50  * If P3>0 then P
25260 33 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20  3 is a register 
25270 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61 6d  in the root fram
25280 65 20 6f 66 20 74 68 69 73 20 56 44 42 45 20 74  e of this VDBE t
25290 68 61 74 20 68 6f 6c 64 73 20 0a 2a 2a 20 74 68  hat holds .** th
252a0 65 20 6c 61 72 67 65 73 74 20 70 72 65 76 69 6f  e largest previo
252b0 75 73 6c 79 20 67 65 6e 65 72 61 74 65 64 20 72  usly generated r
252c0 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 4e 6f  ecord number. No
252d0 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62   new record numb
252e0 65 72 73 20 61 72 65 0a 2a 2a 20 61 6c 6c 6f 77  ers are.** allow
252f0 65 64 20 74 6f 20 62 65 20 6c 65 73 73 20 74 68  ed to be less th
25300 61 6e 20 74 68 69 73 20 76 61 6c 75 65 2e 20 57  an this value. W
25310 68 65 6e 20 74 68 69 73 20 76 61 6c 75 65 20 72  hen this value r
25320 65 61 63 68 65 73 20 69 74 73 20 6d 61 78 69 6d  eaches its maxim
25330 75 6d 2c 20 0a 2a 2a 20 61 6e 20 53 51 4c 49 54  um, .** an SQLIT
25340 45 5f 46 55 4c 4c 20 65 72 72 6f 72 20 69 73 20  E_FULL error is 
25350 67 65 6e 65 72 61 74 65 64 2e 20 54 68 65 20 50  generated. The P
25360 33 20 72 65 67 69 73 74 65 72 20 69 73 20 75 70  3 register is up
25370 64 61 74 65 64 20 77 69 74 68 20 74 68 65 20 27  dated with the '
25380 0a 2a 2a 20 67 65 6e 65 72 61 74 65 64 20 72 65  .** generated re
25390 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 54 68 69  cord number. Thi
253a0 73 20 50 33 20 6d 65 63 68 61 6e 69 73 6d 20 69  s P3 mechanism i
253b0 73 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69  s used to help i
253c0 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20  mplement the.** 
253d0 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 66 65  AUTOINCREMENT fe
253e0 61 74 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ature..*/.case O
253f0 50 5f 4e 65 77 52 6f 77 69 64 3a 20 7b 20 20 20  P_NewRowid: {   
25400 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
25410 2a 2f 0a 20 20 69 36 34 20 76 3b 20 20 20 20 20  */.  i64 v;     
25420 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
25430 68 65 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a  he new rowid */.
25440 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
25450 3b 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73  ;        /* Curs
25460 6f 72 20 6f 66 20 74 61 62 6c 65 20 74 6f 20 67  or of table to g
25470 65 74 20 74 68 65 20 6e 65 77 20 72 6f 77 69 64  et the new rowid
25480 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20 20   */.  int res;  
25490 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
254a0 52 65 73 75 6c 74 20 6f 66 20 61 6e 20 73 71 6c  Result of an sql
254b0 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 29 20  ite3BtreeLast() 
254c0 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b 20 20 20  */.  int cnt;   
254d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
254e0 6f 75 6e 74 65 72 20 74 6f 20 6c 69 6d 69 74 20  ounter to limit 
254f0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 73 65  the number of se
25500 61 72 63 68 65 73 20 2a 2f 0a 20 20 4d 65 6d 20  arches */.  Mem 
25510 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20  *pMem;          
25520 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68     /* Register h
25530 6f 6c 64 69 6e 67 20 6c 61 72 67 65 73 74 20 72  olding largest r
25540 6f 77 69 64 20 66 6f 72 20 41 55 54 4f 49 4e 43  owid for AUTOINC
25550 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 56 64 62 65  REMENT */.  Vdbe
25560 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20  Frame *pFrame;  
25570 20 20 20 2f 2a 20 52 6f 6f 74 20 66 72 61 6d 65     /* Root frame
25580 20 6f 66 20 56 44 42 45 20 2a 2f 0a 0a 20 20 76   of VDBE */..  v
25590 20 3d 20 30 3b 0a 20 20 72 65 73 20 3d 20 30 3b   = 0;.  res = 0;
255a0 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
255b0 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
255c0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
255d0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
255e0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
255f0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
25600 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
25610 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
25620 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
25630 6c 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  le );.  assert( 
25640 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
25650 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
25660 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e   assert( pC->uc.
25670 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20  pCursor!=0 );.  
25680 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78  {.    /* The nex
25690 74 20 72 6f 77 69 64 20 6f 72 20 72 65 63 6f 72  t rowid or recor
256a0 64 20 6e 75 6d 62 65 72 20 28 64 69 66 66 65 72  d number (differ
256b0 65 6e 74 20 74 65 72 6d 73 20 66 6f 72 20 74 68  ent terms for th
256c0 65 20 73 61 6d 65 0a 20 20 20 20 2a 2a 20 74 68  e same.    ** th
256d0 69 6e 67 29 20 69 73 20 6f 62 74 61 69 6e 65 64  ing) is obtained
256e0 20 69 6e 20 61 20 74 77 6f 2d 73 74 65 70 20 61   in a two-step a
256f0 6c 67 6f 72 69 74 68 6d 2e 0a 20 20 20 20 2a 2a  lgorithm..    **
25700 0a 20 20 20 20 2a 2a 20 46 69 72 73 74 20 77 65  .    ** First we
25710 20 61 74 74 65 6d 70 74 20 74 6f 20 66 69 6e 64   attempt to find
25720 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 78 69   the largest exi
25730 73 74 69 6e 67 20 72 6f 77 69 64 20 61 6e 64 20  sting rowid and 
25740 61 64 64 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 74  add one.    ** t
25750 6f 20 74 68 61 74 2e 20 20 42 75 74 20 69 66 20  o that.  But if 
25760 74 68 65 20 6c 61 72 67 65 73 74 20 65 78 69 73  the largest exis
25770 74 69 6e 67 20 72 6f 77 69 64 20 69 73 20 61 6c  ting rowid is al
25780 72 65 61 64 79 20 74 68 65 20 6d 61 78 69 6d 75  ready the maximu
25790 6d 0a 20 20 20 20 2a 2a 20 70 6f 73 69 74 69 76  m.    ** positiv
257a0 65 20 69 6e 74 65 67 65 72 2c 20 77 65 20 68 61  e integer, we ha
257b0 76 65 20 74 6f 20 66 61 6c 6c 20 74 68 72 6f 75  ve to fall throu
257c0 67 68 20 74 6f 20 74 68 65 20 73 65 63 6f 6e 64  gh to the second
257d0 0a 20 20 20 20 2a 2a 20 70 72 6f 62 61 62 69 6c  .    ** probabil
257e0 69 73 74 69 63 20 61 6c 67 6f 72 69 74 68 6d 0a  istic algorithm.
257f0 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 68      **.    ** Th
25800 65 20 73 65 63 6f 6e 64 20 61 6c 67 6f 72 69 74  e second algorit
25810 68 6d 20 69 73 20 74 6f 20 73 65 6c 65 63 74 20  hm is to select 
25820 61 20 72 6f 77 69 64 20 61 74 20 72 61 6e 64 6f  a rowid at rando
25830 6d 20 61 6e 64 20 73 65 65 20 69 66 0a 20 20 20  m and see if.   
25840 20 2a 2a 20 69 74 20 61 6c 72 65 61 64 79 20 65   ** it already e
25850 78 69 73 74 73 20 69 6e 20 74 68 65 20 74 61 62  xists in the tab
25860 6c 65 2e 20 20 49 66 20 69 74 20 64 6f 65 73 20  le.  If it does 
25870 6e 6f 74 20 65 78 69 73 74 2c 20 77 65 20 68 61  not exist, we ha
25880 76 65 0a 20 20 20 20 2a 2a 20 73 75 63 63 65 65  ve.    ** succee
25890 64 65 64 2e 20 20 49 66 20 74 68 65 20 72 61 6e  ded.  If the ran
258a0 64 6f 6d 20 72 6f 77 69 64 20 64 6f 65 73 20 65  dom rowid does e
258b0 78 69 73 74 2c 20 77 65 20 73 65 6c 65 63 74 20  xist, we select 
258c0 61 20 6e 65 77 20 6f 6e 65 0a 20 20 20 20 2a 2a  a new one.    **
258d0 20 61 6e 64 20 74 72 79 20 61 67 61 69 6e 2c 20   and try again, 
258e0 75 70 20 74 6f 20 31 30 30 20 74 69 6d 65 73 2e  up to 100 times.
258f0 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65  .    */.    asse
25900 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  rt( pC->isTable 
25910 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  );..#ifdef SQLIT
25920 45 5f 33 32 42 49 54 5f 52 4f 57 49 44 0a 23 20  E_32BIT_ROWID.# 
25930 20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57    define MAX_ROW
25940 49 44 20 30 78 37 66 66 66 66 66 66 66 0a 23 65  ID 0x7fffffff.#e
25950 6c 73 65 0a 20 20 20 20 2f 2a 20 53 6f 6d 65 20  lse.    /* Some 
25960 63 6f 6d 70 69 6c 65 72 73 20 63 6f 6d 70 6c 61  compilers compla
25970 69 6e 20 61 62 6f 75 74 20 63 6f 6e 73 74 61 6e  in about constan
25980 74 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 30  ts of the form 0
25990 78 37 66 66 66 66 66 66 66 66 66 66 66 66 66 66  x7ffffffffffffff
259a0 66 2e 0a 20 20 20 20 2a 2a 20 4f 74 68 65 72 73  f..    ** Others
259b0 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20   complain about 
259c0 30 78 37 66 66 66 66 66 66 66 66 66 66 66 66 66  0x7fffffffffffff
259d0 66 66 66 4c 4c 2e 20 20 54 68 65 20 66 6f 6c 6c  fffLL.  The foll
259e0 6f 77 69 6e 67 20 6d 61 63 72 6f 20 73 65 65 6d  owing macro seem
259f0 73 0a 20 20 20 20 2a 2a 20 74 6f 20 70 72 6f 76  s.    ** to prov
25a00 69 64 65 20 74 68 65 20 63 6f 6e 73 74 61 6e 74  ide the constant
25a10 20 77 68 69 6c 65 20 6d 61 6b 69 6e 67 20 61 6c   while making al
25a20 6c 20 63 6f 6d 70 69 6c 65 72 73 20 68 61 70 70  l compilers happ
25a30 79 2e 0a 20 20 20 20 2a 2f 0a 23 20 20 20 64 65  y..    */.#   de
25a40 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 20  fine MAX_ROWID  
25a50 28 69 36 34 29 28 20 28 28 28 75 36 34 29 30 78  (i64)( (((u64)0x
25a60 37 66 66 66 66 66 66 66 29 3c 3c 33 32 29 20 7c  7fffffff)<<32) |
25a70 20 28 75 36 34 29 30 78 66 66 66 66 66 66 66 66   (u64)0xffffffff
25a80 20 29 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 69   ).#endif..    i
25a90 66 28 20 21 70 43 2d 3e 75 73 65 52 61 6e 64 6f  f( !pC->useRando
25aa0 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20  mRowid ){.      
25ab0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
25ac0 65 4c 61 73 74 28 70 43 2d 3e 75 63 2e 70 43 75  eLast(pC->uc.pCu
25ad0 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20  rsor, &res);.   
25ae0 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
25af0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
25b00 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
25b10 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  o_error;.      }
25b20 0a 20 20 20 20 20 20 69 66 28 20 72 65 73 20 29  .      if( res )
25b30 7b 0a 20 20 20 20 20 20 20 20 76 20 3d 20 31 3b  {.        v = 1;
25b40 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 36 31 39     /* IMP: R-619
25b50 31 34 2d 34 38 30 37 34 20 2a 2f 0a 20 20 20 20  14-48074 */.    
25b60 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
25b70 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
25b80 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c  BtreeCursorIsVal
25b90 69 64 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  id(pC->uc.pCurso
25ba0 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 76 20  r) );.        v 
25bb0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e  = sqlite3BtreeIn
25bc0 74 65 67 65 72 4b 65 79 28 70 43 2d 3e 75 63 2e  tegerKey(pC->uc.
25bd0 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20  pCursor);.      
25be0 20 20 69 66 28 20 76 3e 3d 4d 41 58 5f 52 4f 57    if( v>=MAX_ROW
25bf0 49 44 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  ID ){.          
25c00 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77  pC->useRandomRow
25c10 69 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  id = 1;.        
25c20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
25c30 20 76 2b 2b 3b 20 20 20 2f 2a 20 49 4d 50 3a 20   v++;   /* IMP: 
25c40 52 2d 32 39 35 33 38 2d 33 34 39 38 37 20 2a 2f  R-29538-34987 */
25c50 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
25c60 20 7d 0a 20 20 20 20 7d 0a 0a 23 69 66 6e 64 65   }.    }..#ifnde
25c70 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
25c80 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 20 20  TOINCREMENT.    
25c90 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20  if( pOp->p3 ){. 
25ca0 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74       /* Assert t
25cb0 68 61 74 20 50 33 20 69 73 20 61 20 76 61 6c 69  hat P3 is a vali
25cc0 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a  d memory cell. *
25cd0 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  /.      assert( 
25ce0 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20  pOp->p3>0 );.   
25cf0 20 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65     if( p->pFrame
25d00 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 28   ){.        for(
25d10 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65  pFrame=p->pFrame
25d20 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e  ; pFrame->pParen
25d30 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65  t; pFrame=pFrame
25d40 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20  ->pParent);.    
25d50 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68      /* Assert th
25d60 61 74 20 50 33 20 69 73 20 61 20 76 61 6c 69 64  at P3 is a valid
25d70 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f   memory cell. */
25d80 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
25d90 20 70 4f 70 2d 3e 70 33 3c 3d 70 46 72 61 6d 65   pOp->p3<=pFrame
25da0 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20  ->nMem );.      
25db0 20 20 70 4d 65 6d 20 3d 20 26 70 46 72 61 6d 65    pMem = &pFrame
25dc0 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b  ->aMem[pOp->p3];
25dd0 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
25de0 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20        /* Assert 
25df0 74 68 61 74 20 50 33 20 69 73 20 61 20 76 61 6c  that P3 is a val
25e00 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20  id memory cell. 
25e10 2a 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  */.        asser
25e20 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e  t( pOp->p3<=(p->
25e30 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
25e40 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20  sor) );.        
25e50 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pMem = &aMem[pOp
25e60 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 20 20 6d  ->p3];.        m
25e70 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
25e80 70 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20  p, pMem);.      
25e90 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  }.      assert( 
25ea0 6d 65 6d 49 73 56 61 6c 69 64 28 70 4d 65 6d 29  memIsValid(pMem)
25eb0 20 29 3b 0a 0a 20 20 20 20 20 20 52 45 47 49 53   );..      REGIS
25ec0 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
25ed0 33 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20  3, pMem);.      
25ee0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
25ef0 74 65 67 65 72 69 66 79 28 70 4d 65 6d 29 3b 0a  tegerify(pMem);.
25f00 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70        assert( (p
25f10 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Mem->flags & MEM
25f20 5f 49 6e 74 29 21 3d 30 20 29 3b 20 20 2f 2a 20  _Int)!=0 );  /* 
25f30 6d 65 6d 28 50 33 29 20 68 6f 6c 64 73 20 61 6e  mem(P3) holds an
25f40 20 69 6e 74 65 67 65 72 20 2a 2f 0a 20 20 20 20   integer */.    
25f50 20 20 69 66 28 20 70 4d 65 6d 2d 3e 75 2e 69 3d    if( pMem->u.i=
25f60 3d 4d 41 58 5f 52 4f 57 49 44 20 7c 7c 20 70 43  =MAX_ROWID || pC
25f70 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64  ->useRandomRowid
25f80 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
25f90 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20   SQLITE_FULL;   
25fa0 2f 2a 20 49 4d 50 3a 20 52 2d 31 37 38 31 37 2d  /* IMP: R-17817-
25fb0 30 30 36 33 30 20 2a 2f 0a 20 20 20 20 20 20 20  00630 */.       
25fc0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
25fd0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
25fe0 7d 0a 20 20 20 20 20 20 69 66 28 20 76 3c 70 4d  }.      if( v<pM
25ff0 65 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a 20 20 20  em->u.i+1 ){.   
26000 20 20 20 20 20 76 20 3d 20 70 4d 65 6d 2d 3e 75       v = pMem->u
26010 2e 69 20 2b 20 31 3b 0a 20 20 20 20 20 20 7d 0a  .i + 1;.      }.
26020 20 20 20 20 20 20 70 4d 65 6d 2d 3e 75 2e 69 20        pMem->u.i 
26030 3d 20 76 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69  = v;.    }.#endi
26040 66 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 75 73  f.    if( pC->us
26050 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a  eRandomRowid ){.
26060 20 20 20 20 20 20 2f 2a 20 49 4d 50 4c 45 4d 45        /* IMPLEME
26070 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 30 37  NTATION-OF: R-07
26080 36 37 37 2d 34 31 38 38 31 20 49 66 20 74 68 65  677-41881 If the
26090 20 6c 61 72 67 65 73 74 20 52 4f 57 49 44 20 69   largest ROWID i
260a0 73 20 65 71 75 61 6c 20 74 6f 20 74 68 65 0a 20  s equal to the. 
260b0 20 20 20 20 20 2a 2a 20 6c 61 72 67 65 73 74 20       ** largest 
260c0 70 6f 73 73 69 62 6c 65 20 69 6e 74 65 67 65 72  possible integer
260d0 20 28 39 32 32 33 33 37 32 30 33 36 38 35 34 37   (92233720368547
260e0 37 35 38 30 37 29 20 74 68 65 6e 20 74 68 65 20  75807) then the 
260f0 64 61 74 61 62 61 73 65 0a 20 20 20 20 20 20 2a  database.      *
26100 2a 20 65 6e 67 69 6e 65 20 73 74 61 72 74 73 20  * engine starts 
26110 70 69 63 6b 69 6e 67 20 70 6f 73 69 74 69 76 65  picking positive
26120 20 63 61 6e 64 69 64 61 74 65 20 52 4f 57 49 44   candidate ROWID
26130 73 20 61 74 20 72 61 6e 64 6f 6d 20 75 6e 74 69  s at random unti
26140 6c 0a 20 20 20 20 20 20 2a 2a 20 69 74 20 66 69  l.      ** it fi
26150 6e 64 73 20 6f 6e 65 20 74 68 61 74 20 69 73 20  nds one that is 
26160 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75  not previously u
26170 73 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73  sed. */.      as
26180 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d 3d 30  sert( pOp->p3==0
26190 20 29 3b 20 20 2f 2a 20 57 65 20 63 61 6e 6e 6f   );  /* We canno
261a0 74 20 62 65 20 69 6e 20 72 61 6e 64 6f 6d 20 72  t be in random r
261b0 6f 77 69 64 20 6d 6f 64 65 20 69 66 20 74 68 69  owid mode if thi
261c0 73 20 69 73 0a 20 20 20 20 20 20 20 20 20 20 20  s is.           
261d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
261e0 20 20 2a 2a 20 61 6e 20 41 55 54 4f 49 4e 43 52    ** an AUTOINCR
261f0 45 4d 45 4e 54 20 74 61 62 6c 65 2e 20 2a 2f 0a  EMENT table. */.
26200 20 20 20 20 20 20 63 6e 74 20 3d 20 30 3b 0a 20        cnt = 0;. 
26210 20 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20       do{.       
26220 20 73 71 6c 69 74 65 33 5f 72 61 6e 64 6f 6d 6e   sqlite3_randomn
26230 65 73 73 28 73 69 7a 65 6f 66 28 76 29 2c 20 26  ess(sizeof(v), &
26240 76 29 3b 0a 20 20 20 20 20 20 20 20 76 20 26 3d  v);.        v &=
26250 20 28 4d 41 58 5f 52 4f 57 49 44 3e 3e 31 29 3b   (MAX_ROWID>>1);
26260 20 76 2b 2b 3b 20 20 2f 2a 20 45 6e 73 75 72 65   v++;  /* Ensure
26270 20 74 68 61 74 20 76 20 69 73 20 67 72 65 61 74   that v is great
26280 65 72 20 74 68 61 6e 20 7a 65 72 6f 20 2a 2f 0a  er than zero */.
26290 20 20 20 20 20 20 7d 77 68 69 6c 65 28 20 20 28        }while(  (
262a0 28 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72  (rc = sqlite3Btr
262b0 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
262c0 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
262d0 20 30 2c 20 28 75 36 34 29 76 2c 0a 20 20 20 20   0, (u64)v,.    
262e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
262f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26300 20 20 20 20 20 20 20 20 20 20 20 20 20 30 2c 20               0, 
26310 26 72 65 73 29 29 3d 3d 53 51 4c 49 54 45 5f 4f  &res))==SQLITE_O
26320 4b 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 26  K).            &
26330 26 20 28 72 65 73 3d 3d 30 29 0a 20 20 20 20 20  & (res==0).     
26340 20 20 20 20 20 20 20 26 26 20 28 2b 2b 63 6e 74         && (++cnt
26350 3c 31 30 30 29 29 3b 0a 20 20 20 20 20 20 69 66  <100));.      if
26360 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
26370 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
26380 20 20 20 20 20 20 69 66 28 20 72 65 73 3d 3d 30        if( res==0
26390 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
263a0 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20   SQLITE_FULL;   
263b0 2f 2a 20 49 4d 50 3a 20 52 2d 33 38 32 31 39 2d  /* IMP: R-38219-
263c0 35 33 30 30 32 20 2a 2f 0a 20 20 20 20 20 20 20  53002 */.       
263d0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
263e0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
263f0 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  }.      assert( 
26400 76 3e 30 20 29 3b 20 20 2f 2a 20 45 56 3a 20 52  v>0 );  /* EV: R
26410 2d 34 30 38 31 32 2d 30 33 35 37 30 20 2a 2f 0a  -40812-03570 */.
26420 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 64 65      }.    pC->de
26430 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
26440 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53  ;.    pC->cacheS
26450 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
26460 41 4c 45 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d  ALE;.  }.  pOut-
26470 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65 61  >u.i = v;.  brea
26480 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
26490 20 49 6e 73 65 72 74 20 50 31 20 50 32 20 50 33   Insert P1 P2 P3
264a0 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
264b0 69 73 3a 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d  is: intkey=r[P3]
264c0 20 64 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a   data=r[P2].**.*
264d0 2a 20 57 72 69 74 65 20 61 6e 20 65 6e 74 72 79  * Write an entry
264e0 20 69 6e 74 6f 20 74 68 65 20 74 61 62 6c 65 20   into the table 
264f0 6f 66 20 63 75 72 73 6f 72 20 50 31 2e 20 20 41  of cursor P1.  A
26500 20 6e 65 77 20 65 6e 74 72 79 20 69 73 0a 2a 2a   new entry is.**
26510 20 63 72 65 61 74 65 64 20 69 66 20 69 74 20 64   created if it d
26520 6f 65 73 6e 27 74 20 61 6c 72 65 61 64 79 20 65  oesn't already e
26530 78 69 73 74 20 6f 72 20 74 68 65 20 64 61 74 61  xist or the data
26540 20 66 6f 72 20 61 6e 20 65 78 69 73 74 69 6e 67   for an existing
26550 0a 2a 2a 20 65 6e 74 72 79 20 69 73 20 6f 76 65  .** entry is ove
26560 72 77 72 69 74 74 65 6e 2e 20 20 54 68 65 20 64  rwritten.  The d
26570 61 74 61 20 69 73 20 74 68 65 20 76 61 6c 75 65  ata is the value
26580 20 4d 45 4d 5f 42 6c 6f 62 20 73 74 6f 72 65 64   MEM_Blob stored
26590 20 69 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a 20   in register.** 
265a0 6e 75 6d 62 65 72 20 50 32 2e 20 54 68 65 20 6b  number P2. The k
265b0 65 79 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ey is stored in 
265c0 72 65 67 69 73 74 65 72 20 50 33 2e 20 54 68 65  register P3. The
265d0 20 6b 65 79 20 6d 75 73 74 0a 2a 2a 20 62 65 20   key must.** be 
265e0 61 20 4d 45 4d 5f 49 6e 74 2e 0a 2a 2a 0a 2a 2a  a MEM_Int..**.**
265f0 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e   If the OPFLAG_N
26600 43 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50  CHANGE flag of P
26610 35 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74  5 is set, then t
26620 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20 63 6f  he row change co
26630 75 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d  unt is.** increm
26640 65 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73 65  ented (otherwise
26650 20 6e 6f 74 29 2e 20 20 49 66 20 74 68 65 20 4f   not).  If the O
26660 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20  PFLAG_LASTROWID 
26670 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65  flag of P5 is se
26680 74 2c 0a 2a 2a 20 74 68 65 6e 20 72 6f 77 69 64  t,.** then rowid
26690 20 69 73 20 73 74 6f 72 65 64 20 66 6f 72 20 73   is stored for s
266a0 75 62 73 65 71 75 65 6e 74 20 72 65 74 75 72 6e  ubsequent return
266b0 20 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74   by the.** sqlit
266c0 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72  e3_last_insert_r
266d0 6f 77 69 64 28 29 20 66 75 6e 63 74 69 6f 6e 20  owid() function 
266e0 28 6f 74 68 65 72 77 69 73 65 20 69 74 20 69 73  (otherwise it is
266f0 20 75 6e 6d 6f 64 69 66 69 65 64 29 2e 0a 2a 2a   unmodified)..**
26700 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41  .** If the OPFLA
26710 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20  G_USESEEKRESULT 
26720 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65  flag of P5 is se
26730 74 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  t, the implement
26740 61 74 69 6f 6e 20 6d 69 67 68 74 0a 2a 2a 20 72  ation might.** r
26750 75 6e 20 66 61 73 74 65 72 20 62 79 20 61 76 6f  un faster by avo
26760 69 64 69 6e 67 20 61 6e 20 75 6e 6e 65 63 65 73  iding an unneces
26770 73 61 72 79 20 73 65 65 6b 20 6f 6e 20 63 75 72  sary seek on cur
26780 73 6f 72 20 50 31 2e 20 20 48 6f 77 65 76 65 72  sor P1.  However
26790 2c 0a 2a 2a 20 74 68 65 20 4f 50 46 4c 41 47 5f  ,.** the OPFLAG_
267a0 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c  USESEEKRESULT fl
267b0 61 67 20 6d 75 73 74 20 6f 6e 6c 79 20 62 65 20  ag must only be 
267c0 73 65 74 20 69 66 20 74 68 65 72 65 20 68 61 76  set if there hav
267d0 65 20 62 65 65 6e 20 6e 6f 20 70 72 69 6f 72 0a  e been no prior.
267e0 2a 2a 20 73 65 65 6b 73 20 6f 6e 20 74 68 65 20  ** seeks on the 
267f0 63 75 72 73 6f 72 20 6f 72 20 69 66 20 74 68 65  cursor or if the
26800 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 73 65 65   most recent see
26810 6b 20 75 73 65 64 20 61 20 6b 65 79 20 65 71 75  k used a key equ
26820 61 6c 20 74 6f 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  al to P3..**.** 
26830 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 49 53  If the OPFLAG_IS
26840 55 50 44 41 54 45 20 66 6c 61 67 20 69 73 20 73  UPDATE flag is s
26850 65 74 2c 20 74 68 65 6e 20 74 68 69 73 20 6f 70  et, then this op
26860 63 6f 64 65 20 69 73 20 70 61 72 74 20 6f 66 20  code is part of 
26870 61 6e 0a 2a 2a 20 55 50 44 41 54 45 20 6f 70 65  an.** UPDATE ope
26880 72 61 74 69 6f 6e 2e 20 20 4f 74 68 65 72 77 69  ration.  Otherwi
26890 73 65 20 28 69 66 20 74 68 65 20 66 6c 61 67 20  se (if the flag 
268a0 69 73 20 63 6c 65 61 72 29 20 74 68 65 6e 20 74  is clear) then t
268b0 68 69 73 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73  his opcode.** is
268c0 20 70 61 72 74 20 6f 66 20 61 6e 20 49 4e 53 45   part of an INSE
268d0 52 54 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 54  RT operation.  T
268e0 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 69 73  he difference is
268f0 20 6f 6e 6c 79 20 69 6d 70 6f 72 74 61 6e 74 20   only important 
26900 74 6f 0a 2a 2a 20 74 68 65 20 75 70 64 61 74 65  to.** the update
26910 20 68 6f 6f 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61 72   hook..**.** Par
26920 61 6d 65 74 65 72 20 50 34 20 6d 61 79 20 70 6f  ameter P4 may po
26930 69 6e 74 20 74 6f 20 61 20 54 61 62 6c 65 20 73  int to a Table s
26940 74 72 75 63 74 75 72 65 2c 20 6f 72 20 6d 61 79  tructure, or may
26950 20 62 65 20 4e 55 4c 4c 2e 20 49 66 20 69 74 20   be NULL. If it 
26960 69 73 20 0a 2a 2a 20 6e 6f 74 20 4e 55 4c 4c 2c  is .** not NULL,
26970 20 74 68 65 6e 20 74 68 65 20 75 70 64 61 74 65   then the update
26980 2d 68 6f 6f 6b 20 28 73 71 6c 69 74 65 33 2e 78  -hook (sqlite3.x
26990 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 20  UpdateCallback) 
269a0 69 73 20 69 6e 76 6f 6b 65 64 20 0a 2a 2a 20 66  is invoked .** f
269b0 6f 6c 6c 6f 77 69 6e 67 20 61 20 73 75 63 63 65  ollowing a succe
269c0 73 73 66 75 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a  ssful insert..**
269d0 0a 2a 2a 20 28 57 41 52 4e 49 4e 47 2f 54 4f 44  .** (WARNING/TOD
269e0 4f 3a 20 49 66 20 50 31 20 69 73 20 61 20 70 73  O: If P1 is a ps
269f0 65 75 64 6f 2d 63 75 72 73 6f 72 20 61 6e 64 20  eudo-cursor and 
26a00 50 32 20 69 73 20 64 79 6e 61 6d 69 63 61 6c 6c  P2 is dynamicall
26a10 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20  y.** allocated, 
26a20 74 68 65 6e 20 6f 77 6e 65 72 73 68 69 70 20 6f  then ownership o
26a30 66 20 50 32 20 69 73 20 74 72 61 6e 73 66 65 72  f P2 is transfer
26a40 72 65 64 20 74 6f 20 74 68 65 20 70 73 65 75 64  red to the pseud
26a50 6f 2d 63 75 72 73 6f 72 0a 2a 2a 20 61 6e 64 20  o-cursor.** and 
26a60 72 65 67 69 73 74 65 72 20 50 32 20 62 65 63 6f  register P2 beco
26a70 6d 65 73 20 65 70 68 65 6d 65 72 61 6c 2e 20 20  mes ephemeral.  
26a80 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  If the cursor is
26a90 20 63 68 61 6e 67 65 64 2c 20 74 68 65 0a 2a 2a   changed, the.**
26aa0 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74   value of regist
26ab0 65 72 20 50 32 20 77 69 6c 6c 20 74 68 65 6e 20  er P2 will then 
26ac0 63 68 61 6e 67 65 2e 20 20 4d 61 6b 65 20 73 75  change.  Make su
26ad0 72 65 20 74 68 69 73 20 64 6f 65 73 20 6e 6f 74  re this does not
26ae0 0a 2a 2a 20 63 61 75 73 65 20 61 6e 79 20 70 72  .** cause any pr
26af0 6f 62 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54  oblems.).**.** T
26b00 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
26b10 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 74 61  only works on ta
26b20 62 6c 65 73 2e 20 20 54 68 65 20 65 71 75 69 76  bles.  The equiv
26b30 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f  alent instructio
26b40 6e 0a 2a 2a 20 66 6f 72 20 69 6e 64 69 63 65 73  n.** for indices
26b50 20 69 73 20 4f 50 5f 49 64 78 49 6e 73 65 72 74   is OP_IdxInsert
26b60 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
26b70 49 6e 73 65 72 74 49 6e 74 20 50 31 20 50 32 20  InsertInt P1 P2 
26b80 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
26b90 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d 50 33 20  psis: intkey=P3 
26ba0 64 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  data=r[P2].**.**
26bb0 20 54 68 69 73 20 77 6f 72 6b 73 20 65 78 61 63   This works exac
26bc0 74 6c 79 20 6c 69 6b 65 20 4f 50 5f 49 6e 73 65  tly like OP_Inse
26bd0 72 74 20 65 78 63 65 70 74 20 74 68 61 74 20 74  rt except that t
26be0 68 65 20 6b 65 79 20 69 73 20 74 68 65 0a 2a 2a  he key is the.**
26bf0 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50   integer value P
26c00 33 2c 20 6e 6f 74 20 74 68 65 20 76 61 6c 75 65  3, not the value
26c10 20 6f 66 20 74 68 65 20 69 6e 74 65 67 65 72 20   of the integer 
26c20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
26c30 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P3..*/.case O
26c40 50 5f 49 6e 73 65 72 74 3a 20 0a 63 61 73 65 20  P_Insert: .case 
26c50 4f 50 5f 49 6e 73 65 72 74 49 6e 74 3a 20 7b 0a  OP_InsertInt: {.
26c60 20 20 4d 65 6d 20 2a 70 44 61 74 61 3b 20 20 20    Mem *pData;   
26c70 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20      /* MEM cell 
26c80 68 6f 6c 64 69 6e 67 20 64 61 74 61 20 66 6f 72  holding data for
26c90 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 62   the record to b
26ca0 65 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20  e inserted */.  
26cb0 4d 65 6d 20 2a 70 4b 65 79 3b 20 20 20 20 20 20  Mem *pKey;      
26cc0 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f    /* MEM cell ho
26cd0 6c 64 69 6e 67 20 6b 65 79 20 20 66 6f 72 20 74  lding key  for t
26ce0 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 56  he record */.  V
26cf0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20  dbeCursor *pC;  
26d00 20 2f 2a 20 43 75 72 73 6f 72 20 74 6f 20 74 61   /* Cursor to ta
26d10 62 6c 65 20 69 6e 74 6f 20 77 68 69 63 68 20 69  ble into which i
26d20 6e 73 65 72 74 20 69 73 20 77 72 69 74 74 65 6e  nsert is written
26d30 20 2a 2f 0a 20 20 69 6e 74 20 73 65 65 6b 52 65   */.  int seekRe
26d40 73 75 6c 74 3b 20 20 20 2f 2a 20 52 65 73 75 6c  sult;   /* Resul
26d50 74 20 6f 66 20 70 72 69 6f 72 20 73 65 65 6b 20  t of prior seek 
26d60 6f 72 20 30 20 69 66 20 6e 6f 20 55 53 45 53 45  or 0 if no USESE
26d70 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 2a 2f  EKRESULT flag */
26d80 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
26d90 44 62 3b 20 20 2f 2a 20 64 61 74 61 62 61 73 65  Db;  /* database
26da0 20 6e 61 6d 65 20 2d 20 75 73 65 64 20 62 79 20   name - used by 
26db0 74 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 20  the update hook 
26dc0 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62  */.  Table *pTab
26dd0 3b 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20  ;      /* Table 
26de0 73 74 72 75 63 74 75 72 65 20 2d 20 75 73 65 64  structure - used
26df0 20 62 79 20 75 70 64 61 74 65 20 61 6e 64 20 70   by update and p
26e00 72 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b 73 20  re-update hooks 
26e10 2a 2f 0a 20 20 42 74 72 65 65 50 61 79 6c 6f 61  */.  BtreePayloa
26e20 64 20 78 3b 20 20 20 2f 2a 20 50 61 79 6c 6f 61  d x;   /* Payloa
26e30 64 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64  d to be inserted
26e40 20 2a 2f 0a 0a 20 20 70 44 61 74 61 20 3d 20 26   */..  pData = &
26e50 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
26e60 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
26e70 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
26e80 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
26e90 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
26ea0 64 28 70 44 61 74 61 29 20 29 3b 0a 20 20 70 43  d(pData) );.  pC
26eb0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
26ec0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
26ed0 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
26ee0 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
26ef0 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
26f00 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
26f10 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  uc.pCursor!=0 );
26f20 0a 20 20 61 73 73 65 72 74 28 20 28 70 4f 70 2d  .  assert( (pOp-
26f30 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 4e  >p5 & OPFLAG_ISN
26f40 4f 4f 50 29 20 7c 7c 20 70 43 2d 3e 69 73 54 61  OOP) || pC->isTa
26f50 62 6c 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ble );.  assert(
26f60 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
26f70 5f 54 41 42 4c 45 20 7c 7c 20 70 4f 70 2d 3e 70  _TABLE || pOp->p
26f80 34 74 79 70 65 3e 3d 50 34 5f 53 54 41 54 49 43  4type>=P4_STATIC
26f90 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54   );.  REGISTER_T
26fa0 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 44  RACE(pOp->p2, pD
26fb0 61 74 61 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  ata);.  sqlite3V
26fc0 64 62 65 49 6e 63 72 57 72 69 74 65 43 6f 75 6e  dbeIncrWriteCoun
26fd0 74 65 72 28 70 2c 20 70 43 29 3b 0a 0a 20 20 69  ter(p, pC);..  i
26fe0 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
26ff0 4f 50 5f 49 6e 73 65 72 74 20 29 7b 0a 20 20 20  OP_Insert ){.   
27000 20 70 4b 65 79 20 3d 20 26 61 4d 65 6d 5b 70 4f   pKey = &aMem[pO
27010 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 61 73 73 65  p->p3];.    asse
27020 72 74 28 20 70 4b 65 79 2d 3e 66 6c 61 67 73 20  rt( pKey->flags 
27030 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20  & MEM_Int );.   
27040 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
27050 6c 69 64 28 70 4b 65 79 29 20 29 3b 0a 20 20 20  lid(pKey) );.   
27060 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
27070 70 4f 70 2d 3e 70 33 2c 20 70 4b 65 79 29 3b 0a  pOp->p3, pKey);.
27080 20 20 20 20 78 2e 6e 4b 65 79 20 3d 20 70 4b 65      x.nKey = pKe
27090 79 2d 3e 75 2e 69 3b 0a 20 20 7d 65 6c 73 65 7b  y->u.i;.  }else{
270a0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
270b0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73  ->opcode==OP_Ins
270c0 65 72 74 49 6e 74 20 29 3b 0a 20 20 20 20 78 2e  ertInt );.    x.
270d0 6e 4b 65 79 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  nKey = pOp->p3;.
270e0 20 20 7d 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e    }..  if( pOp->
270f0 70 34 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45  p4type==P4_TABLE
27100 20 26 26 20 48 41 53 5f 55 50 44 41 54 45 5f 48   && HAS_UPDATE_H
27110 4f 4f 4b 28 64 62 29 20 29 7b 0a 20 20 20 20 61  OOK(db) ){.    a
27120 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d  ssert( pC->iDb>=
27130 30 20 29 3b 0a 20 20 20 20 7a 44 62 20 3d 20 64  0 );.    zDb = d
27140 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e  b->aDb[pC->iDb].
27150 7a 44 62 53 4e 61 6d 65 3b 0a 20 20 20 20 70 54  zDbSName;.    pT
27160 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 54 61  ab = pOp->p4.pTa
27170 62 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28  b;.    assert( (
27180 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
27190 5f 49 53 4e 4f 4f 50 29 20 7c 7c 20 48 61 73 52  _ISNOOP) || HasR
271a0 6f 77 69 64 28 70 54 61 62 29 20 29 3b 0a 20 20  owid(pTab) );.  
271b0 7d 65 6c 73 65 7b 0a 20 20 20 20 70 54 61 62 20  }else{.    pTab 
271c0 3d 20 30 3b 0a 20 20 20 20 7a 44 62 20 3d 20 30  = 0;.    zDb = 0
271d0 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64  ;  /* Not needed
271e0 2e 20 20 53 69 6c 65 6e 63 65 20 61 20 63 6f 6d  .  Silence a com
271f0 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 2e 20 2a  piler warning. *
27200 2f 0a 20 20 7d 0a 0a 23 69 66 64 65 66 20 53 51  /.  }..#ifdef SQ
27210 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55  LITE_ENABLE_PREU
27220 50 44 41 54 45 5f 48 4f 4f 4b 0a 20 20 2f 2a 20  PDATE_HOOK.  /* 
27230 49 6e 76 6f 6b 65 20 74 68 65 20 70 72 65 2d 75  Invoke the pre-u
27240 70 64 61 74 65 20 68 6f 6f 6b 2c 20 69 66 20 61  pdate hook, if a
27250 6e 79 20 2a 2f 0a 20 20 69 66 28 20 70 54 61 62  ny */.  if( pTab
27260 20 29 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e   ){.    if( db->
27270 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61  xPreUpdateCallba
27280 63 6b 20 26 26 20 21 28 70 4f 70 2d 3e 70 35 20  ck && !(pOp->p5 
27290 26 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54  & OPFLAG_ISUPDAT
272a0 45 29 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  E) ){.      sqli
272b0 74 65 33 56 64 62 65 50 72 65 55 70 64 61 74 65  te3VdbePreUpdate
272c0 48 6f 6f 6b 28 70 2c 20 70 43 2c 20 53 51 4c 49  Hook(p, pC, SQLI
272d0 54 45 5f 49 4e 53 45 52 54 2c 20 7a 44 62 2c 20  TE_INSERT, zDb, 
272e0 70 54 61 62 2c 20 78 2e 6e 4b 65 79 2c 70 4f 70  pTab, x.nKey,pOp
272f0 2d 3e 70 32 29 3b 0a 20 20 20 20 7d 0a 20 20 20  ->p2);.    }.   
27300 20 69 66 28 20 64 62 2d 3e 78 55 70 64 61 74 65   if( db->xUpdate
27310 43 61 6c 6c 62 61 63 6b 3d 3d 30 20 7c 7c 20 70  Callback==0 || p
27320 54 61 62 2d 3e 61 43 6f 6c 3d 3d 30 20 29 7b 0a  Tab->aCol==0 ){.
27330 20 20 20 20 20 20 2f 2a 20 50 72 65 76 65 6e 74        /* Prevent
27340 20 70 6f 73 74 2d 75 70 64 61 74 65 20 68 6f 6f   post-update hoo
27350 6b 20 66 72 6f 6d 20 72 75 6e 6e 69 6e 67 20 69  k from running i
27360 6e 20 63 61 73 65 73 20 77 68 65 6e 20 69 74 20  n cases when it 
27370 73 68 6f 75 6c 64 20 6e 6f 74 20 2a 2f 0a 20 20  should not */.  
27380 20 20 20 20 70 54 61 62 20 3d 20 30 3b 0a 20 20      pTab = 0;.  
27390 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f    }.  }.  if( pO
273a0 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49  p->p5 & OPFLAG_I
273b0 53 4e 4f 4f 50 20 29 20 62 72 65 61 6b 3b 0a 23  SNOOP ) break;.#
273c0 65 6e 64 69 66 0a 0a 20 20 69 66 28 20 70 4f 70  endif..  if( pOp
273d0 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4e 43  ->p5 & OPFLAG_NC
273e0 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e  HANGE ) p->nChan
273f0 67 65 2b 2b 3b 0a 20 20 69 66 28 20 70 4f 70 2d  ge++;.  if( pOp-
27400 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4c 41 53  >p5 & OPFLAG_LAS
27410 54 52 4f 57 49 44 20 29 20 64 62 2d 3e 6c 61 73  TROWID ) db->las
27420 74 52 6f 77 69 64 20 3d 20 78 2e 6e 4b 65 79 3b  tRowid = x.nKey;
27430 0a 20 20 61 73 73 65 72 74 28 20 70 44 61 74 61  .  assert( pData
27440 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42  ->flags & (MEM_B
27450 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 20 29 3b 0a  lob|MEM_Str) );.
27460 20 20 78 2e 70 44 61 74 61 20 3d 20 70 44 61 74    x.pData = pDat
27470 61 2d 3e 7a 3b 0a 20 20 78 2e 6e 44 61 74 61 20  a->z;.  x.nData 
27480 3d 20 70 44 61 74 61 2d 3e 6e 3b 0a 20 20 73 65  = pData->n;.  se
27490 65 6b 52 65 73 75 6c 74 20 3d 20 28 28 70 4f 70  ekResult = ((pOp
274a0 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 55 53  ->p5 & OPFLAG_US
274b0 45 53 45 45 4b 52 45 53 55 4c 54 29 20 3f 20 70  ESEEKRESULT) ? p
274c0 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a 20  C->seekResult : 
274d0 30 29 3b 0a 20 20 69 66 28 20 70 44 61 74 61 2d  0);.  if( pData-
274e0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72  >flags & MEM_Zer
274f0 6f 20 29 7b 0a 20 20 20 20 78 2e 6e 5a 65 72 6f  o ){.    x.nZero
27500 20 3d 20 70 44 61 74 61 2d 3e 75 2e 6e 5a 65 72   = pData->u.nZer
27510 6f 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  o;.  }else{.    
27520 78 2e 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 7d  x.nZero = 0;.  }
27530 0a 20 20 78 2e 70 4b 65 79 20 3d 20 30 3b 0a 20  .  x.pKey = 0;. 
27540 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
27550 65 65 49 6e 73 65 72 74 28 70 43 2d 3e 75 63 2e  eeInsert(pC->uc.
27560 70 43 75 72 73 6f 72 2c 20 26 78 2c 0a 20 20 20  pCursor, &x,.   
27570 20 20 20 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f     (pOp->p5 & (O
27580 50 46 4c 41 47 5f 41 50 50 45 4e 44 7c 4f 50 46  PFLAG_APPEND|OPF
27590 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e  LAG_SAVEPOSITION
275a0 29 29 2c 20 73 65 65 6b 52 65 73 75 6c 74 0a 20  )), seekResult. 
275b0 20 29 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72   );.  pC->deferr
275c0 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
275d0 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
275e0 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a  = CACHE_STALE;..
275f0 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
27600 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72  update-hook if r
27610 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66  equired. */.  if
27620 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
27630 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
27640 20 20 69 66 28 20 70 54 61 62 20 29 7b 0a 20 20    if( pTab ){.  
27650 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 78 55    assert( db->xU
27660 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 21 3d 30  pdateCallback!=0
27670 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
27680 70 54 61 62 2d 3e 61 43 6f 6c 21 3d 30 20 29 3b  pTab->aCol!=0 );
27690 0a 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65  .    db->xUpdate
276a0 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70  Callback(db->pUp
276b0 64 61 74 65 41 72 67 2c 0a 20 20 20 20 20 20 20  dateArg,.       
276c0 20 20 20 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f      (pOp->p5 & O
276d0 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20  PFLAG_ISUPDATE) 
276e0 3f 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20  ? SQLITE_UPDATE 
276f0 3a 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 2c  : SQLITE_INSERT,
27700 0a 20 20 20 20 20 20 20 20 20 20 20 7a 44 62 2c  .           zDb,
27710 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c 20 78 2e   pTab->zName, x.
27720 6e 4b 65 79 29 3b 0a 20 20 7d 0a 20 20 62 72 65  nKey);.  }.  bre
27730 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
27740 3a 20 44 65 6c 65 74 65 20 50 31 20 50 32 20 50  : Delete P1 P2 P
27750 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 44 65  3 P4 P5.**.** De
27760 6c 65 74 65 20 74 68 65 20 72 65 63 6f 72 64 20  lete the record 
27770 61 74 20 77 68 69 63 68 20 74 68 65 20 50 31 20  at which the P1 
27780 63 75 72 73 6f 72 20 69 73 20 63 75 72 72 65 6e  cursor is curren
27790 74 6c 79 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a  tly pointing..**
277a0 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41  .** If the OPFLA
277b0 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 62  G_SAVEPOSITION b
277c0 69 74 20 6f 66 20 74 68 65 20 50 35 20 70 61 72  it of the P5 par
277d0 61 6d 65 74 65 72 20 69 73 20 73 65 74 2c 20 74  ameter is set, t
277e0 68 65 6e 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f  hen.** the curso
277f0 72 20 77 69 6c 6c 20 62 65 20 6c 65 66 74 20 70  r will be left p
27800 6f 69 6e 74 69 6e 67 20 61 74 20 20 65 69 74 68  ointing at  eith
27810 65 72 20 74 68 65 20 6e 65 78 74 20 6f 72 20 74  er the next or t
27820 68 65 20 70 72 65 76 69 6f 75 73 0a 2a 2a 20 72  he previous.** r
27830 65 63 6f 72 64 20 69 6e 20 74 68 65 20 74 61 62  ecord in the tab
27840 6c 65 2e 20 49 66 20 69 74 20 69 73 20 6c 65 66  le. If it is lef
27850 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68  t pointing at th
27860 65 20 6e 65 78 74 20 72 65 63 6f 72 64 2c 20 74  e next record, t
27870 68 65 6e 0a 2a 2a 20 74 68 65 20 6e 65 78 74 20  hen.** the next 
27880 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  Next instruction
27890 20 77 69 6c 6c 20 62 65 20 61 20 6e 6f 2d 6f 70   will be a no-op
278a0 2e 20 41 73 20 61 20 72 65 73 75 6c 74 2c 20 69  . As a result, i
278b0 6e 20 74 68 69 73 20 63 61 73 65 0a 2a 2a 20 69  n this case.** i
278c0 74 20 69 73 20 6f 6b 20 74 6f 20 64 65 6c 65 74  t is ok to delet
278d0 65 20 61 20 72 65 63 6f 72 64 20 66 72 6f 6d 20  e a record from 
278e0 77 69 74 68 69 6e 20 61 20 4e 65 78 74 20 6c 6f  within a Next lo
278f0 6f 70 2e 20 49 66 20 0a 2a 2a 20 4f 50 46 4c 41  op. If .** OPFLA
27900 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 62  G_SAVEPOSITION b
27910 69 74 20 6f 66 20 50 35 20 69 73 20 63 6c 65 61  it of P5 is clea
27920 72 2c 20 74 68 65 6e 20 74 68 65 20 63 75 72 73  r, then the curs
27930 6f 72 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 6c 65  or will be.** le
27940 66 74 20 69 6e 20 61 6e 20 75 6e 64 65 66 69 6e  ft in an undefin
27950 65 64 20 73 74 61 74 65 2e 0a 2a 2a 0a 2a 2a 20  ed state..**.** 
27960 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 41 55  If the OPFLAG_AU
27970 58 44 45 4c 45 54 45 20 62 69 74 20 69 73 20 73  XDELETE bit is s
27980 65 74 20 6f 6e 20 50 35 2c 20 74 68 61 74 20 69  et on P5, that i
27990 6e 64 69 63 61 74 65 73 20 74 68 61 74 20 74 68  ndicates that th
279a0 69 73 0a 2a 2a 20 64 65 6c 65 74 65 20 6f 6e 65  is.** delete one
279b0 20 6f 66 20 73 65 76 65 72 61 6c 20 61 73 73 6f   of several asso
279c0 63 69 61 74 65 64 20 77 69 74 68 20 64 65 6c 65  ciated with dele
279d0 74 69 6e 67 20 61 20 74 61 62 6c 65 20 72 6f 77  ting a table row
279e0 20 61 6e 64 20 61 6c 6c 20 69 74 73 0a 2a 2a 20   and all its.** 
279f0 61 73 73 6f 63 69 61 74 65 64 20 69 6e 64 65 78  associated index
27a00 20 65 6e 74 72 69 65 73 2e 20 20 45 78 61 63 74   entries.  Exact
27a10 6c 79 20 6f 6e 65 20 6f 66 20 74 68 6f 73 65 20  ly one of those 
27a20 64 65 6c 65 74 65 73 20 69 73 20 74 68 65 20 22  deletes is the "
27a30 70 72 69 6d 61 72 79 22 0a 2a 2a 20 64 65 6c 65  primary".** dele
27a40 74 65 2e 20 20 54 68 65 20 6f 74 68 65 72 73 20  te.  The others 
27a50 61 72 65 20 61 6c 6c 20 6f 6e 20 4f 50 46 4c 41  are all on OPFLA
27a60 47 5f 46 4f 52 44 45 4c 45 54 45 20 63 75 72 73  G_FORDELETE curs
27a70 6f 72 73 20 6f 72 20 65 6c 73 65 20 61 72 65 0a  ors or else are.
27a80 2a 2a 20 6d 61 72 6b 65 64 20 77 69 74 68 20 74  ** marked with t
27a90 68 65 20 41 55 58 44 45 4c 45 54 45 20 66 6c 61  he AUXDELETE fla
27aa0 67 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  g..**.** If the 
27ab0 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66  OPFLAG_NCHANGE f
27ac0 6c 61 67 20 6f 66 20 50 32 20 28 4e 42 3a 20 50  lag of P2 (NB: P
27ad0 32 20 6e 6f 74 20 50 35 29 20 69 73 20 73 65 74  2 not P5) is set
27ae0 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77 0a 2a  , then the row.*
27af0 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69  * change count i
27b00 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f  s incremented (o
27b10 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e 0a 2a  therwise not)..*
27b20 2a 0a 2a 2a 20 50 31 20 6d 75 73 74 20 6e 6f 74  *.** P1 must not
27b30 20 62 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65   be pseudo-table
27b40 2e 20 20 49 74 20 68 61 73 20 74 6f 20 62 65 20  .  It has to be 
27b50 61 20 72 65 61 6c 20 74 61 62 6c 65 20 77 69 74  a real table wit
27b60 68 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 72 6f  h.** multiple ro
27b70 77 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20  ws..**.** If P4 
27b80 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 74 68 65 6e  is not NULL then
27b90 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20   it points to a 
27ba0 54 61 62 6c 65 20 6f 62 6a 65 63 74 2e 20 49 6e  Table object. In
27bb0 20 74 68 69 73 20 63 61 73 65 20 65 69 74 68 65   this case eithe
27bc0 72 20 0a 2a 2a 20 74 68 65 20 75 70 64 61 74 65  r .** the update
27bd0 20 6f 72 20 70 72 65 2d 75 70 64 61 74 65 20 68   or pre-update h
27be0 6f 6f 6b 2c 20 6f 72 20 62 6f 74 68 2c 20 6d 61  ook, or both, ma
27bf0 79 20 62 65 20 69 6e 76 6f 6b 65 64 2e 20 54 68  y be invoked. Th
27c00 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74  e P1 cursor must
27c10 0a 2a 2a 20 68 61 76 65 20 62 65 65 6e 20 70 6f  .** have been po
27c20 73 69 74 69 6f 6e 65 64 20 75 73 69 6e 67 20 4f  sitioned using O
27c30 50 5f 4e 6f 74 46 6f 75 6e 64 20 70 72 69 6f 72  P_NotFound prior
27c40 20 74 6f 20 69 6e 76 6f 6b 69 6e 67 20 74 68 69   to invoking thi
27c50 73 20 6f 70 63 6f 64 65 20 69 6e 20 0a 2a 2a 20  s opcode in .** 
27c60 74 68 69 73 20 63 61 73 65 2e 20 53 70 65 63 69  this case. Speci
27c70 66 69 63 61 6c 6c 79 2c 20 69 66 20 6f 6e 65 20  fically, if one 
27c80 69 73 20 63 6f 6e 66 69 67 75 72 65 64 2c 20 74  is configured, t
27c90 68 65 20 70 72 65 2d 75 70 64 61 74 65 20 68 6f  he pre-update ho
27ca0 6f 6b 20 69 73 20 0a 2a 2a 20 69 6e 76 6f 6b 65  ok is .** invoke
27cb0 64 20 69 66 20 50 34 20 69 73 20 6e 6f 74 20 4e  d if P4 is not N
27cc0 55 4c 4c 2e 20 54 68 65 20 75 70 64 61 74 65 2d  ULL. The update-
27cd0 68 6f 6f 6b 20 69 73 20 69 6e 76 6f 6b 65 64 20  hook is invoked 
27ce0 69 66 20 6f 6e 65 20 69 73 20 63 6f 6e 66 69 67  if one is config
27cf0 75 72 65 64 2c 20 0a 2a 2a 20 50 34 20 69 73 20  ured, .** P4 is 
27d00 6e 6f 74 20 4e 55 4c 4c 2c 20 61 6e 64 20 74 68  not NULL, and th
27d10 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  e OPFLAG_NCHANGE
27d20 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20   flag is set in 
27d30 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  P2..**.** If the
27d40 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45   OPFLAG_ISUPDATE
27d50 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20   flag is set in 
27d60 50 32 2c 20 74 68 65 6e 20 50 33 20 63 6f 6e 74  P2, then P3 cont
27d70 61 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73  ains the address
27d80 0a 2a 2a 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72  .** of the memor
27d90 79 20 63 65 6c 6c 20 74 68 61 74 20 63 6f 6e 74  y cell that cont
27da0 61 69 6e 73 20 74 68 65 20 76 61 6c 75 65 20 74  ains the value t
27db0 68 61 74 20 74 68 65 20 72 6f 77 69 64 20 6f 66  hat the rowid of
27dc0 20 74 68 65 20 72 6f 77 20 77 69 6c 6c 0a 2a 2a   the row will.**
27dd0 20 62 65 20 73 65 74 20 74 6f 20 62 79 20 74 68   be set to by th
27de0 65 20 75 70 64 61 74 65 2e 0a 2a 2f 0a 63 61 73  e update..*/.cas
27df0 65 20 4f 50 5f 44 65 6c 65 74 65 3a 20 7b 0a 20  e OP_Delete: {. 
27e00 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
27e10 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
27e20 44 62 3b 0a 20 20 54 61 62 6c 65 20 2a 70 54 61  Db;.  Table *pTa
27e30 62 3b 0a 20 20 69 6e 74 20 6f 70 66 6c 61 67 73  b;.  int opflags
27e40 3b 0a 0a 20 20 6f 70 66 6c 61 67 73 20 3d 20 70  ;..  opflags = p
27e50 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74  Op->p2;.  assert
27e60 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
27e70 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
27e80 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
27e90 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
27ea0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
27eb0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
27ec0 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
27ed0 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73  PE_BTREE );.  as
27ee0 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75  sert( pC->uc.pCu
27ef0 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73  rsor!=0 );.  ass
27f00 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
27f10 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
27f20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 63 72 57  sqlite3VdbeIncrW
27f30 72 69 74 65 43 6f 75 6e 74 65 72 28 70 2c 20 70  riteCounter(p, p
27f40 43 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  C);..#ifdef SQLI
27f50 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 70  TE_DEBUG.  if( p
27f60 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54  Op->p4type==P4_T
27f70 41 42 4c 45 20 26 26 20 48 61 73 52 6f 77 69 64  ABLE && HasRowid
27f80 28 70 4f 70 2d 3e 70 34 2e 70 54 61 62 29 20 26  (pOp->p4.pTab) &
27f90 26 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 7b 0a  & pOp->p5==0 ){.
27fa0 20 20 20 20 2f 2a 20 49 66 20 70 35 20 69 73 20      /* If p5 is 
27fb0 7a 65 72 6f 2c 20 74 68 65 20 73 65 65 6b 20 6f  zero, the seek o
27fc0 70 65 72 61 74 69 6f 6e 20 74 68 61 74 20 70 6f  peration that po
27fd0 73 69 74 69 6f 6e 65 64 20 74 68 65 20 63 75 72  sitioned the cur
27fe0 73 6f 72 20 70 72 69 6f 72 20 74 6f 0a 20 20 20  sor prior to.   
27ff0 20 2a 2a 20 4f 50 5f 44 65 6c 65 74 65 20 77 69   ** OP_Delete wi
28000 6c 6c 20 68 61 76 65 20 61 6c 73 6f 20 73 65 74  ll have also set
28010 20 74 68 65 20 70 43 2d 3e 6d 6f 76 65 74 6f 54   the pC->movetoT
28020 61 72 67 65 74 20 66 69 65 6c 64 20 74 6f 20 74  arget field to t
28030 68 65 20 72 6f 77 69 64 20 6f 66 0a 20 20 20 20  he rowid of.    
28040 2a 2a 20 74 68 65 20 72 6f 77 20 74 68 61 74 20  ** the row that 
28050 69 73 20 62 65 69 6e 67 20 64 65 6c 65 74 65 64  is being deleted
28060 20 2a 2f 0a 20 20 20 20 69 36 34 20 69 4b 65 79   */.    i64 iKey
28070 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49   = sqlite3BtreeI
28080 6e 74 65 67 65 72 4b 65 79 28 70 43 2d 3e 75 63  ntegerKey(pC->uc
28090 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 61  .pCursor);.    a
280a0 73 73 65 72 74 28 20 70 43 2d 3e 6d 6f 76 65 74  ssert( pC->movet
280b0 6f 54 61 72 67 65 74 3d 3d 69 4b 65 79 20 29 3b  oTarget==iKey );
280c0 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f  .  }.#endif..  /
280d0 2a 20 49 66 20 74 68 65 20 75 70 64 61 74 65 2d  * If the update-
280e0 68 6f 6f 6b 20 6f 72 20 70 72 65 2d 75 70 64 61  hook or pre-upda
280f0 74 65 2d 68 6f 6f 6b 20 77 69 6c 6c 20 62 65 20  te-hook will be 
28100 69 6e 76 6f 6b 65 64 2c 20 73 65 74 20 7a 44 62  invoked, set zDb
28110 20 74 6f 0a 20 20 2a 2a 20 74 68 65 20 6e 61 6d   to.  ** the nam
28120 65 20 6f 66 20 74 68 65 20 64 62 20 74 6f 20 70  e of the db to p
28130 61 73 73 20 61 73 20 74 6f 20 69 74 2e 20 41 6c  ass as to it. Al
28140 73 6f 20 73 65 74 20 6c 6f 63 61 6c 20 70 54 61  so set local pTa
28150 62 20 74 6f 20 61 20 63 6f 70 79 0a 20 20 2a 2a  b to a copy.  **
28160 20 6f 66 20 70 34 2e 70 54 61 62 2e 20 46 69 6e   of p4.pTab. Fin
28170 61 6c 6c 79 2c 20 69 66 20 70 35 20 69 73 20 74  ally, if p5 is t
28180 72 75 65 2c 20 69 6e 64 69 63 61 74 69 6e 67 20  rue, indicating 
28190 74 68 61 74 20 74 68 69 73 20 63 75 72 73 6f 72  that this cursor
281a0 20 77 61 73 0a 20 20 2a 2a 20 6c 61 73 74 20 6d   was.  ** last m
281b0 6f 76 65 64 20 77 69 74 68 20 4f 50 5f 4e 65 78  oved with OP_Nex
281c0 74 20 6f 72 20 4f 50 5f 50 72 65 76 2c 20 6e 6f  t or OP_Prev, no
281d0 74 20 53 65 65 6b 20 6f 72 20 4e 6f 74 46 6f 75  t Seek or NotFou
281e0 6e 64 2c 20 73 65 74 20 0a 20 20 2a 2a 20 56 64  nd, set .  ** Vd
281f0 62 65 43 75 72 73 6f 72 2e 6d 6f 76 65 74 6f 54  beCursor.movetoT
28200 61 72 67 65 74 20 74 6f 20 74 68 65 20 63 75 72  arget to the cur
28210 72 65 6e 74 20 72 6f 77 69 64 2e 20 20 2a 2f 0a  rent rowid.  */.
28220 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70    if( pOp->p4typ
28230 65 3d 3d 50 34 5f 54 41 42 4c 45 20 26 26 20 48  e==P4_TABLE && H
28240 41 53 5f 55 50 44 41 54 45 5f 48 4f 4f 4b 28 64  AS_UPDATE_HOOK(d
28250 62 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  b) ){.    assert
28260 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a  ( pC->iDb>=0 );.
28270 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
28280 3e 70 34 2e 70 54 61 62 21 3d 30 20 29 3b 0a 20  >p4.pTab!=0 );. 
28290 20 20 20 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62     zDb = db->aDb
282a0 5b 70 43 2d 3e 69 44 62 5d 2e 7a 44 62 53 4e 61  [pC->iDb].zDbSNa
282b0 6d 65 3b 0a 20 20 20 20 70 54 61 62 20 3d 20 70  me;.    pTab = p
282c0 4f 70 2d 3e 70 34 2e 70 54 61 62 3b 0a 20 20 20  Op->p4.pTab;.   
282d0 20 69 66 28 20 28 70 4f 70 2d 3e 70 35 20 26 20   if( (pOp->p5 & 
282e0 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54  OPFLAG_SAVEPOSIT
282f0 49 4f 4e 29 21 3d 30 20 26 26 20 70 43 2d 3e 69  ION)!=0 && pC->i
28300 73 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 20 20  sTable ){.      
28310 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74  pC->movetoTarget
28320 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49   = sqlite3BtreeI
28330 6e 74 65 67 65 72 4b 65 79 28 70 43 2d 3e 75 63  ntegerKey(pC->uc
28340 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d  .pCursor);.    }
28350 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 7a 44  .  }else{.    zD
28360 62 20 3d 20 30 3b 20 20 20 2f 2a 20 4e 6f 74 20  b = 0;   /* Not 
28370 6e 65 65 64 65 64 2e 20 20 53 69 6c 65 6e 63 65  needed.  Silence
28380 20 61 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e   a compiler warn
28390 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 70 54 61 62  ing. */.    pTab
283a0 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65   = 0;  /* Not ne
283b0 65 64 65 64 2e 20 20 53 69 6c 65 6e 63 65 20 61  eded.  Silence a
283c0 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e   compiler warnin
283d0 67 2e 20 2a 2f 0a 20 20 7d 0a 0a 23 69 66 64 65  g. */.  }..#ifde
283e0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
283f0 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20  PREUPDATE_HOOK. 
28400 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 70   /* Invoke the p
28410 72 65 2d 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69  re-update-hook i
28420 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20  f required. */. 
28430 20 69 66 28 20 64 62 2d 3e 78 50 72 65 55 70 64   if( db->xPreUpd
28440 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 70  ateCallback && p
28450 4f 70 2d 3e 70 34 2e 70 54 61 62 20 29 7b 0a 20  Op->p4.pTab ){. 
28460 20 20 20 61 73 73 65 72 74 28 20 21 28 6f 70 66     assert( !(opf
28470 6c 61 67 73 20 26 20 4f 50 46 4c 41 47 5f 49 53  lags & OPFLAG_IS
28480 55 50 44 41 54 45 29 20 0a 20 20 20 20 20 20 20  UPDATE) .       
28490 20 20 7c 7c 20 48 61 73 52 6f 77 69 64 28 70 54    || HasRowid(pT
284a0 61 62 29 3d 3d 30 20 0a 20 20 20 20 20 20 20 20  ab)==0 .        
284b0 20 7c 7c 20 28 61 4d 65 6d 5b 70 4f 70 2d 3e 70   || (aMem[pOp->p
284c0 33 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  3].flags & MEM_I
284d0 6e 74 29 20 0a 20 20 20 20 29 3b 0a 20 20 20 20  nt) .    );.    
284e0 73 71 6c 69 74 65 33 56 64 62 65 50 72 65 55 70  sqlite3VdbePreUp
284f0 64 61 74 65 48 6f 6f 6b 28 70 2c 20 70 43 2c 0a  dateHook(p, pC,.
28500 20 20 20 20 20 20 20 20 28 6f 70 66 6c 61 67 73          (opflags
28510 20 26 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41   & OPFLAG_ISUPDA
28520 54 45 29 20 3f 20 53 51 4c 49 54 45 5f 55 50 44  TE) ? SQLITE_UPD
28530 41 54 45 20 3a 20 53 51 4c 49 54 45 5f 44 45 4c  ATE : SQLITE_DEL
28540 45 54 45 2c 20 0a 20 20 20 20 20 20 20 20 7a 44  ETE, .        zD
28550 62 2c 20 70 54 61 62 2c 20 70 43 2d 3e 6d 6f 76  b, pTab, pC->mov
28560 65 74 6f 54 61 72 67 65 74 2c 0a 20 20 20 20 20  etoTarget,.     
28570 20 20 20 70 4f 70 2d 3e 70 33 0a 20 20 20 20 29     pOp->p3.    )
28580 3b 0a 20 20 7d 0a 20 20 69 66 28 20 6f 70 66 6c  ;.  }.  if( opfl
28590 61 67 73 20 26 20 4f 50 46 4c 41 47 5f 49 53 4e  ags & OPFLAG_ISN
285a0 4f 4f 50 20 29 20 62 72 65 61 6b 3b 0a 23 65 6e  OOP ) break;.#en
285b0 64 69 66 0a 20 0a 20 20 2f 2a 20 4f 6e 6c 79 20  dif. .  /* Only 
285c0 66 6c 61 67 73 20 74 68 61 74 20 63 61 6e 20 62  flags that can b
285d0 65 20 73 65 74 20 61 72 65 20 53 41 56 45 50 4f  e set are SAVEPO
285e0 49 53 54 49 4f 4e 20 61 6e 64 20 41 55 58 44 45  ISTION and AUXDE
285f0 4c 45 54 45 20 2a 2f 20 0a 20 20 61 73 73 65 72  LETE */ .  asser
28600 74 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 7e 28  t( (pOp->p5 & ~(
28610 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54  OPFLAG_SAVEPOSIT
28620 49 4f 4e 7c 4f 50 46 4c 41 47 5f 41 55 58 44 45  ION|OPFLAG_AUXDE
28630 4c 45 54 45 29 29 3d 3d 30 20 29 3b 0a 20 20 61  LETE))==0 );.  a
28640 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 53 41  ssert( OPFLAG_SA
28650 56 45 50 4f 53 49 54 49 4f 4e 3d 3d 42 54 52 45  VEPOSITION==BTRE
28660 45 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 29  E_SAVEPOSITION )
28670 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c  ;.  assert( OPFL
28680 41 47 5f 41 55 58 44 45 4c 45 54 45 3d 3d 42 54  AG_AUXDELETE==BT
28690 52 45 45 5f 41 55 58 44 45 4c 45 54 45 20 29 3b  REE_AUXDELETE );
286a0 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
286b0 44 45 42 55 47 0a 20 20 69 66 28 20 70 2d 3e 70  DEBUG.  if( p->p
286c0 46 72 61 6d 65 3d 3d 30 20 29 7b 0a 20 20 20 20  Frame==0 ){.    
286d0 69 66 28 20 70 43 2d 3e 69 73 45 70 68 65 6d 65  if( pC->isEpheme
286e0 72 61 6c 3d 3d 30 0a 20 20 20 20 20 20 20 20 26  ral==0.        &
286f0 26 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  & (pOp->p5 & OPF
28700 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 29 3d 3d  LAG_AUXDELETE)==
28710 30 0a 20 20 20 20 20 20 20 20 26 26 20 28 70 43  0.        && (pC
28720 2d 3e 77 72 46 6c 61 67 20 26 20 4f 50 46 4c 41  ->wrFlag & OPFLA
28730 47 5f 46 4f 52 44 45 4c 45 54 45 29 3d 3d 30 0a  G_FORDELETE)==0.
28740 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20 20 6e        ){.      n
28750 45 78 74 72 61 44 65 6c 65 74 65 2b 2b 3b 0a 20  ExtraDelete++;. 
28760 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 4f 70     }.    if( pOp
28770 2d 3e 70 32 20 26 20 4f 50 46 4c 41 47 5f 4e 43  ->p2 & OPFLAG_NC
28780 48 41 4e 47 45 20 29 7b 0a 20 20 20 20 20 20 6e  HANGE ){.      n
28790 45 78 74 72 61 44 65 6c 65 74 65 2d 2d 3b 0a 20  ExtraDelete--;. 
287a0 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a     }.  }.#endif.
287b0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
287c0 74 72 65 65 44 65 6c 65 74 65 28 70 43 2d 3e 75  treeDelete(pC->u
287d0 63 2e 70 43 75 72 73 6f 72 2c 20 70 4f 70 2d 3e  c.pCursor, pOp->
287e0 70 35 29 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  p5);.  pC->cache
287f0 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
28800 54 41 4c 45 3b 0a 20 20 70 43 2d 3e 73 65 65 6b  TALE;.  pC->seek
28810 52 65 73 75 6c 74 20 3d 20 30 3b 0a 20 20 69 66  Result = 0;.  if
28820 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
28830 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
28840 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65  .  /* Invoke the
28850 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20   update-hook if 
28860 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69  required. */.  i
28870 66 28 20 6f 70 66 6c 61 67 73 20 26 20 4f 50 46  f( opflags & OPF
28880 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 7b 0a 20  LAG_NCHANGE ){. 
28890 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b     p->nChange++;
288a0 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 78 55 70  .    if( db->xUp
288b0 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20  dateCallback && 
288c0 48 61 73 52 6f 77 69 64 28 70 54 61 62 29 20 29  HasRowid(pTab) )
288d0 7b 0a 20 20 20 20 20 20 64 62 2d 3e 78 55 70 64  {.      db->xUpd
288e0 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e  ateCallback(db->
288f0 70 55 70 64 61 74 65 41 72 67 2c 20 53 51 4c 49  pUpdateArg, SQLI
28900 54 45 5f 44 45 4c 45 54 45 2c 20 7a 44 62 2c 20  TE_DELETE, zDb, 
28910 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20  pTab->zName,.   
28920 20 20 20 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74         pC->movet
28930 6f 54 61 72 67 65 74 29 3b 0a 20 20 20 20 20 20  oTarget);.      
28940 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e  assert( pC->iDb>
28950 3d 30 20 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  =0 );.    }.  }.
28960 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 2f 2a 20 4f  .  break;.}./* O
28970 70 63 6f 64 65 3a 20 52 65 73 65 74 43 6f 75 6e  pcode: ResetCoun
28980 74 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  t * * * * *.**.*
28990 2a 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20 74  * The value of t
289a0 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65  he change counte
289b0 72 20 69 73 20 63 6f 70 69 65 64 20 74 6f 20 74  r is copied to t
289c0 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  he database hand
289d0 6c 65 0a 2a 2a 20 63 68 61 6e 67 65 20 63 6f 75  le.** change cou
289e0 6e 74 65 72 20 28 72 65 74 75 72 6e 65 64 20 62  nter (returned b
289f0 79 20 73 75 62 73 65 71 75 65 6e 74 20 63 61 6c  y subsequent cal
28a00 6c 73 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 68  ls to sqlite3_ch
28a10 61 6e 67 65 73 28 29 29 2e 0a 2a 2a 20 54 68 65  anges())..** The
28a20 6e 20 74 68 65 20 56 4d 73 20 69 6e 74 65 72 6e  n the VMs intern
28a30 61 6c 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65  al change counte
28a40 72 20 72 65 73 65 74 73 20 74 6f 20 30 2e 0a 2a  r resets to 0..*
28a50 2a 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62  * This is used b
28a60 79 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  y trigger progra
28a70 6d 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  ms..*/.case OP_R
28a80 65 73 65 74 43 6f 75 6e 74 3a 20 7b 0a 20 20 73  esetCount: {.  s
28a90 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 68 61  qlite3VdbeSetCha
28aa0 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61  nges(db, p->nCha
28ab0 6e 67 65 29 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e  nge);.  p->nChan
28ac0 67 65 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b  ge = 0;.  break;
28ad0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
28ae0 6f 72 74 65 72 43 6f 6d 70 61 72 65 20 50 31 20  orterCompare P1 
28af0 50 32 20 50 33 20 50 34 0a 2a 2a 20 53 79 6e 6f  P2 P3 P4.** Syno
28b00 70 73 69 73 3a 20 69 66 20 6b 65 79 28 50 31 29  psis: if key(P1)
28b10 21 3d 74 72 69 6d 28 72 5b 50 33 5d 2c 50 34 29  !=trim(r[P3],P4)
28b20 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 50   goto P2.**.** P
28b30 31 20 69 73 20 61 20 73 6f 72 74 65 72 20 63 75  1 is a sorter cu
28b40 72 73 6f 72 2e 20 54 68 69 73 20 69 6e 73 74 72  rsor. This instr
28b50 75 63 74 69 6f 6e 20 63 6f 6d 70 61 72 65 73 20  uction compares 
28b60 61 20 70 72 65 66 69 78 20 6f 66 20 74 68 65 0a  a prefix of the.
28b70 2a 2a 20 72 65 63 6f 72 64 20 62 6c 6f 62 20 69  ** record blob i
28b80 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61 67  n register P3 ag
28b90 61 69 6e 73 74 20 61 20 70 72 65 66 69 78 20 6f  ainst a prefix o
28ba0 66 20 74 68 65 20 65 6e 74 72 79 20 74 68 61 74  f the entry that
28bb0 20 0a 2a 2a 20 74 68 65 20 73 6f 72 74 65 72 20   .** the sorter 
28bc0 63 75 72 73 6f 72 20 63 75 72 72 65 6e 74 6c 79  cursor currently
28bd0 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20 4f 6e 6c   points to.  Onl
28be0 79 20 74 68 65 20 66 69 72 73 74 20 50 34 20 66  y the first P4 f
28bf0 69 65 6c 64 73 0a 2a 2a 20 6f 66 20 72 5b 50 33  ields.** of r[P3
28c00 5d 20 61 6e 64 20 74 68 65 20 73 6f 72 74 65 72  ] and the sorter
28c10 20 72 65 63 6f 72 64 20 61 72 65 20 63 6f 6d 70   record are comp
28c20 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65  ared..**.** If e
28c30 69 74 68 65 72 20 50 33 20 6f 72 20 74 68 65 20  ither P3 or the 
28c40 73 6f 72 74 65 72 20 63 6f 6e 74 61 69 6e 73 20  sorter contains 
28c50 61 20 4e 55 4c 4c 20 69 6e 20 6f 6e 65 20 6f 66  a NULL in one of
28c60 20 74 68 65 69 72 20 73 69 67 6e 69 66 69 63 61   their significa
28c70 6e 74 0a 2a 2a 20 66 69 65 6c 64 73 20 28 6e 6f  nt.** fields (no
28c80 74 20 63 6f 75 6e 74 69 6e 67 20 74 68 65 20 50  t counting the P
28c90 34 20 66 69 65 6c 64 73 20 61 74 20 74 68 65 20  4 fields at the 
28ca0 65 6e 64 20 77 68 69 63 68 20 61 72 65 20 69 67  end which are ig
28cb0 6e 6f 72 65 64 29 20 74 68 65 6e 0a 2a 2a 20 74  nored) then.** t
28cc0 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  he comparison is
28cd0 20 61 73 73 75 6d 65 64 20 74 6f 20 62 65 20 65   assumed to be e
28ce0 71 75 61 6c 2e 0a 2a 2a 0a 2a 2a 20 46 61 6c 6c  qual..**.** Fall
28cf0 20 74 68 72 6f 75 67 68 20 74 6f 20 6e 65 78 74   through to next
28d00 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 66 20   instruction if 
28d10 74 68 65 20 74 77 6f 20 72 65 63 6f 72 64 73 20  the two records 
28d20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 20 74 6f  compare equal to
28d30 0a 2a 2a 20 65 61 63 68 20 6f 74 68 65 72 2e 20  .** each other. 
28d40 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74   Jump to P2 if t
28d50 68 65 79 20 61 72 65 20 64 69 66 66 65 72 65 6e  hey are differen
28d60 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f  t..*/.case OP_So
28d70 72 74 65 72 43 6f 6d 70 61 72 65 3a 20 7b 0a 20  rterCompare: {. 
28d80 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
28d90 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e  .  int res;.  in
28da0 74 20 6e 4b 65 79 43 6f 6c 3b 0a 0a 20 20 70 43  t nKeyCol;..  pC
28db0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
28dc0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
28dd0 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a  isSorter(pC) );.
28de0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
28df0 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
28e00 29 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65  );.  pIn3 = &aMe
28e10 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6e 4b  m[pOp->p3];.  nK
28e20 65 79 43 6f 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e  eyCol = pOp->p4.
28e30 69 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20  i;.  res = 0;.  
28e40 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
28e50 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 28 70 43  SorterCompare(pC
28e60 2c 20 70 49 6e 33 2c 20 6e 4b 65 79 43 6f 6c 2c  , pIn3, nKeyCol,
28e70 20 26 72 65 73 29 3b 0a 20 20 56 64 62 65 42 72   &res);.  VdbeBr
28e80 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30  anchTaken(res!=0
28e90 2c 32 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  ,2);.  if( rc ) 
28ea0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
28eb0 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 72  o_error;.  if( r
28ec0 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  es ) goto jump_t
28ed0 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  o_p2;.  break;.}
28ee0 3b 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f  ;../* Opcode: So
28ef0 72 74 65 72 44 61 74 61 20 50 31 20 50 32 20 50  rterData P1 P2 P
28f00 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
28f10 73 3a 20 72 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a  s: r[P2]=data.**
28f20 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72  .** Write into r
28f30 65 67 69 73 74 65 72 20 50 32 20 74 68 65 20 63  egister P2 the c
28f40 75 72 72 65 6e 74 20 73 6f 72 74 65 72 20 64 61  urrent sorter da
28f50 74 61 20 66 6f 72 20 73 6f 72 74 65 72 20 63 75  ta for sorter cu
28f60 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65 6e  rsor P1..** Then
28f70 20 63 6c 65 61 72 20 74 68 65 20 63 6f 6c 75 6d   clear the colum
28f80 6e 20 68 65 61 64 65 72 20 63 61 63 68 65 20 6f  n header cache o
28f90 6e 20 63 75 72 73 6f 72 20 50 33 2e 0a 2a 2a 0a  n cursor P3..**.
28fa0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
28fb0 73 20 6e 6f 72 6d 61 6c 6c 79 20 75 73 65 20 74  s normally use t
28fc0 6f 20 6d 6f 76 65 20 61 20 72 65 63 6f 72 64 20  o move a record 
28fd0 6f 75 74 20 6f 66 20 74 68 65 20 73 6f 72 74 65  out of the sorte
28fe0 72 20 61 6e 64 20 69 6e 74 6f 0a 2a 2a 20 61 20  r and into.** a 
28ff0 72 65 67 69 73 74 65 72 20 74 68 61 74 20 69 73  register that is
29000 20 74 68 65 20 73 6f 75 72 63 65 20 66 6f 72 20   the source for 
29010 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63  a pseudo-table c
29020 75 72 73 6f 72 20 63 72 65 61 74 65 64 20 75 73  ursor created us
29030 69 6e 67 0a 2a 2a 20 4f 70 65 6e 50 73 65 75 64  ing.** OpenPseud
29040 6f 2e 20 20 54 68 61 74 20 70 73 65 75 64 6f 2d  o.  That pseudo-
29050 74 61 62 6c 65 20 63 75 72 73 6f 72 20 69 73 20  table cursor is 
29060 74 68 65 20 6f 6e 65 20 74 68 61 74 20 69 73 20  the one that is 
29070 69 64 65 6e 74 69 66 69 65 64 20 62 79 0a 2a 2a  identified by.**
29080 20 70 61 72 61 6d 65 74 65 72 20 50 33 2e 20 20   parameter P3.  
29090 43 6c 65 61 72 69 6e 67 20 74 68 65 20 50 33 20  Clearing the P3 
290a0 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20 61 73 20  column cache as 
290b0 70 61 72 74 20 6f 66 20 74 68 69 73 20 6f 70 63  part of this opc
290c0 6f 64 65 20 73 61 76 65 73 0a 2a 2a 20 75 73 20  ode saves.** us 
290d0 66 72 6f 6d 20 68 61 76 69 6e 67 20 74 6f 20 69  from having to i
290e0 73 73 75 65 20 61 20 73 65 70 61 72 61 74 65 20  ssue a separate 
290f0 4e 75 6c 6c 52 6f 77 20 69 6e 73 74 72 75 63 74  NullRow instruct
29100 69 6f 6e 20 74 6f 20 63 6c 65 61 72 20 74 68 61  ion to clear tha
29110 74 20 63 61 63 68 65 2e 0a 2a 2f 0a 63 61 73 65  t cache..*/.case
29120 20 4f 50 5f 53 6f 72 74 65 72 44 61 74 61 3a 20   OP_SorterData: 
29130 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
29140 70 43 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61  pC;..  pOut = &a
29150 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
29160 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
29170 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
29180 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29  ( isSorter(pC) )
29190 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
291a0 56 64 62 65 53 6f 72 74 65 72 52 6f 77 6b 65 79  VdbeSorterRowkey
291b0 28 70 43 2c 20 70 4f 75 74 29 3b 0a 20 20 61 73  (pC, pOut);.  as
291c0 73 65 72 74 28 20 72 63 21 3d 53 51 4c 49 54 45  sert( rc!=SQLITE
291d0 5f 4f 4b 20 7c 7c 20 28 70 4f 75 74 2d 3e 66 6c  _OK || (pOut->fl
291e0 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 29 20  ags & MEM_Blob) 
291f0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
29200 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
29210 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
29220 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
29230 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
29240 72 6f 72 3b 0a 20 20 70 2d 3e 61 70 43 73 72 5b  ror;.  p->apCsr[
29250 70 4f 70 2d 3e 70 33 5d 2d 3e 63 61 63 68 65 53  pOp->p3]->cacheS
29260 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
29270 41 4c 45 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ALE;.  break;.}.
29280 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 44  ./* Opcode: RowD
29290 61 74 61 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ata P1 P2 P3 * *
292a0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
292b0 50 32 5d 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57  P2]=data.**.** W
292c0 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74  rite into regist
292d0 65 72 20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65  er P2 the comple
292e0 74 65 20 72 6f 77 20 63 6f 6e 74 65 6e 74 20 66  te row content f
292f0 6f 72 20 74 68 65 20 72 6f 77 20 61 74 20 0a 2a  or the row at .*
29300 2a 20 77 68 69 63 68 20 63 75 72 73 6f 72 20 50  * which cursor P
29310 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70  1 is currently p
29320 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 20 54 68 65 72  ointing..** Ther
29330 65 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72 65  e is no interpre
29340 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61  tation of the da
29350 74 61 2e 20 20 0a 2a 2a 20 49 74 20 69 73 20 6a  ta.  .** It is j
29360 75 73 74 20 63 6f 70 69 65 64 20 6f 6e 74 6f 20  ust copied onto 
29370 74 68 65 20 50 32 20 72 65 67 69 73 74 65 72 20  the P2 register 
29380 65 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20 69  exactly as .** i
29390 74 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74 68  t is found in th
293a0 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
293b0 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72  .**.** If cursor
293c0 20 50 31 20 69 73 20 61 6e 20 69 6e 64 65 78 2c   P1 is an index,
293d0 20 74 68 65 6e 20 74 68 65 20 63 6f 6e 74 65 6e   then the conten
293e0 74 20 69 73 20 74 68 65 20 6b 65 79 20 6f 66 20  t is the key of 
293f0 74 68 65 20 72 6f 77 2e 0a 2a 2a 20 49 66 20 63  the row..** If c
29400 75 72 73 6f 72 20 50 32 20 69 73 20 61 20 74 61  ursor P2 is a ta
29410 62 6c 65 2c 20 74 68 65 6e 20 74 68 65 20 63 6f  ble, then the co
29420 6e 74 65 6e 74 20 65 78 74 72 61 63 74 65 64 20  ntent extracted 
29430 69 73 20 74 68 65 20 64 61 74 61 2e 0a 2a 2a 0a  is the data..**.
29440 2a 2a 20 49 66 20 74 68 65 20 50 31 20 63 75 72  ** If the P1 cur
29450 73 6f 72 20 6d 75 73 74 20 62 65 20 70 6f 69 6e  sor must be poin
29460 74 69 6e 67 20 74 6f 20 61 20 76 61 6c 69 64 20  ting to a valid 
29470 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c 20  row (not a NULL 
29480 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65 61  row).** of a rea
29490 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70  l table, not a p
294a0 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a  seudo-table..**.
294b0 2a 2a 20 49 66 20 50 33 21 3d 30 20 74 68 65 6e  ** If P3!=0 then
294c0 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   this opcode is 
294d0 61 6c 6c 6f 77 65 64 20 74 6f 20 6d 61 6b 65 20  allowed to make 
294e0 61 6e 20 65 70 68 65 6d 65 72 61 6c 20 70 6f 69  an ephemeral poi
294f0 6e 74 65 72 0a 2a 2a 20 69 6e 74 6f 20 74 68 65  nter.** into the
29500 20 64 61 74 61 62 61 73 65 20 70 61 67 65 2e 20   database page. 
29510 20 54 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74   That means that
29520 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
29530 74 68 65 20 6f 75 74 70 75 74 0a 2a 2a 20 72 65  the output.** re
29540 67 69 73 74 65 72 20 77 69 6c 6c 20 62 65 20 69  gister will be i
29550 6e 76 61 6c 69 64 61 74 65 64 20 61 73 20 73 6f  nvalidated as so
29560 6f 6e 20 61 73 20 74 68 65 20 63 75 72 73 6f 72  on as the cursor
29570 20 6d 6f 76 65 73 20 2d 20 69 6e 63 6c 75 64 69   moves - includi
29580 6e 67 0a 2a 2a 20 6d 6f 76 65 73 20 63 61 75 73  ng.** moves caus
29590 65 64 20 62 79 20 6f 74 68 65 72 20 63 75 72 73  ed by other curs
295a0 6f 72 73 20 74 68 61 74 20 22 73 61 76 65 22 20  ors that "save" 
295b0 74 68 65 20 63 75 72 72 65 6e 74 20 63 75 72 73  the current curs
295c0 6f 72 73 0a 2a 2a 20 70 6f 73 69 74 69 6f 6e 20  ors.** position 
295d0 69 6e 20 6f 72 64 65 72 20 74 68 61 74 20 74 68  in order that th
295e0 65 79 20 63 61 6e 20 77 72 69 74 65 20 74 6f 20  ey can write to 
295f0 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65 2e 20  the same table. 
29600 20 49 66 20 50 33 3d 3d 30 0a 2a 2a 20 74 68 65   If P3==0.** the
29610 6e 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20  n a copy of the 
29620 64 61 74 61 20 69 73 20 6d 61 64 65 20 69 6e 74  data is made int
29630 6f 20 6d 65 6d 6f 72 79 2e 20 20 50 33 21 3d 30  o memory.  P3!=0
29640 20 69 73 20 66 61 73 74 65 72 2c 20 62 75 74 0a   is faster, but.
29650 2a 2a 20 50 33 3d 3d 30 20 69 73 20 73 61 66 65  ** P3==0 is safe
29660 72 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 21 3d  r..**.** If P3!=
29670 30 20 74 68 65 6e 20 74 68 65 20 63 6f 6e 74 65  0 then the conte
29680 6e 74 20 6f 66 20 74 68 65 20 50 32 20 72 65 67  nt of the P2 reg
29690 69 73 74 65 72 20 69 73 20 75 6e 73 75 69 74 61  ister is unsuita
296a0 62 6c 65 20 66 6f 72 20 75 73 65 0a 2a 2a 20 69  ble for use.** i
296b0 6e 20 4f 50 5f 52 65 73 75 6c 74 20 61 6e 64 20  n OP_Result and 
296c0 61 6e 79 20 4f 50 5f 52 65 73 75 6c 74 20 77 69  any OP_Result wi
296d0 6c 6c 20 69 6e 76 61 6c 69 64 61 74 65 20 74 68  ll invalidate th
296e0 65 20 50 32 20 72 65 67 69 73 74 65 72 20 63 6f  e P2 register co
296f0 6e 74 65 6e 74 2e 0a 2a 2a 20 54 68 65 20 50 32  ntent..** The P2
29700 20 72 65 67 69 73 74 65 72 20 63 6f 6e 74 65 6e   register conten
29710 74 20 69 73 20 69 6e 76 61 6c 69 64 61 74 65 64  t is invalidated
29720 20 62 79 20 6f 70 63 6f 64 65 73 20 6c 69 6b 65   by opcodes like
29730 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 20 6f 72 0a   OP_Function or.
29740 2a 2a 20 62 79 20 61 6e 79 20 75 73 65 20 6f 66  ** by any use of
29750 20 61 6e 6f 74 68 65 72 20 63 75 72 73 6f 72 20   another cursor 
29760 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 65 20  pointing to the 
29770 73 61 6d 65 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63  same table..*/.c
29780 61 73 65 20 4f 50 5f 52 6f 77 44 61 74 61 3a 20  ase OP_RowData: 
29790 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
297a0 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
297b0 70 43 72 73 72 3b 0a 20 20 75 33 32 20 6e 3b 0a  pCrsr;.  u32 n;.
297c0 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
297d0 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
297e0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
297f0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
29800 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
29810 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
29820 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
29830 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
29840 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
29850 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
29860 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28  REE );.  assert(
29870 20 69 73 53 6f 72 74 65 72 28 70 43 29 3d 3d 30   isSorter(pC)==0
29880 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
29890 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d 30 20 29 3b 0a  ->nullRow==0 );.
298a0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63    assert( pC->uc
298b0 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  .pCursor!=0 );. 
298c0 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e   pCrsr = pC->uc.
298d0 70 43 75 72 73 6f 72 3b 0a 0a 20 20 2f 2a 20 54  pCursor;..  /* T
298e0 68 65 20 4f 50 5f 52 6f 77 44 61 74 61 20 6f 70  he OP_RowData op
298f0 63 6f 64 65 73 20 61 6c 77 61 79 73 20 66 6f 6c  codes always fol
29900 6c 6f 77 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73  low OP_NotExists
29910 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f 53 65 65 6b   or.  ** OP_Seek
29920 52 6f 77 69 64 20 6f 72 20 4f 50 5f 52 65 77 69  Rowid or OP_Rewi
29930 6e 64 2f 4f 70 5f 4e 65 78 74 20 77 69 74 68 20  nd/Op_Next with 
29940 6e 6f 20 69 6e 74 65 72 76 65 6e 69 6e 67 20 69  no intervening i
29950 6e 73 74 72 75 63 74 69 6f 6e 73 0a 20 20 2a 2a  nstructions.  **
29960 20 74 68 61 74 20 6d 69 67 68 74 20 69 6e 76 61   that might inva
29970 6c 69 64 61 74 65 20 74 68 65 20 63 75 72 73 6f  lidate the curso
29980 72 2e 0a 20 20 2a 2a 20 49 66 20 74 68 69 73 20  r..  ** If this 
29990 77 68 65 72 65 20 6e 6f 74 20 74 68 65 20 63 61  where not the ca
299a0 73 65 2c 20 6f 6e 20 6f 66 20 74 68 65 20 66 6f  se, on of the fo
299b0 6c 6c 6f 77 69 6e 67 20 61 73 73 65 72 74 28 29  llowing assert()
299c0 73 0a 20 20 2a 2a 20 77 6f 75 6c 64 20 66 61 69  s.  ** would fai
299d0 6c 2e 20 20 53 68 6f 75 6c 64 20 74 68 69 73 20  l.  Should this 
299e0 65 76 65 72 20 63 68 61 6e 67 65 20 28 62 65 63  ever change (bec
299f0 61 75 73 65 20 6f 66 20 63 68 61 6e 67 65 73 20  ause of changes 
29a00 69 6e 20 74 68 65 20 63 6f 64 65 0a 20 20 2a 2a  in the code.  **
29a10 20 67 65 6e 65 72 61 74 6f 72 29 20 74 68 65 6e   generator) then
29a20 20 74 68 65 20 66 69 78 20 77 6f 75 6c 64 20 62   the fix would b
29a30 65 20 74 6f 20 69 6e 73 65 72 74 20 61 20 63 61  e to insert a ca
29a40 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69 74  ll to.  ** sqlit
29a50 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
29a60 74 6f 28 29 2e 0a 20 20 2a 2f 0a 20 20 61 73 73  to()..  */.  ass
29a70 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
29a80 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
29a90 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42  assert( sqlite3B
29aa0 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69  treeCursorIsVali
29ab0 64 28 70 43 72 73 72 29 20 29 3b 0a 23 69 66 20  d(pCrsr) );.#if 
29ac0 30 20 20 2f 2a 20 4e 6f 74 20 72 65 71 75 69 72  0  /* Not requir
29ad0 65 64 20 64 75 65 20 74 6f 20 74 68 65 20 70 72  ed due to the pr
29ae0 65 76 69 6f 75 73 20 74 6f 20 61 73 73 65 72 74  evious to assert
29af0 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 2a 2f  () statements */
29b00 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
29b10 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  dbeCursorMoveto(
29b20 70 43 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53  pC);.  if( rc!=S
29b30 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20  QLITE_OK ) goto 
29b40 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
29b50 6f 72 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 6e 20  or;.#endif..  n 
29b60 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61  = sqlite3BtreePa
29b70 79 6c 6f 61 64 53 69 7a 65 28 70 43 72 73 72 29  yloadSize(pCrsr)
29b80 3b 0a 20 20 69 66 28 20 6e 3e 28 75 33 32 29 64  ;.  if( n>(u32)d
29b90 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
29ba0 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29  _LIMIT_LENGTH] )
29bb0 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62  {.    goto too_b
29bc0 69 67 3b 0a 20 20 7d 0a 20 20 74 65 73 74 63 61  ig;.  }.  testca
29bd0 73 65 28 20 6e 3d 3d 30 20 29 3b 0a 20 20 72 63  se( n==0 );.  rc
29be0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   = sqlite3VdbeMe
29bf0 6d 46 72 6f 6d 42 74 72 65 65 28 70 43 72 73 72  mFromBtree(pCrsr
29c00 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 29 3b 0a 20  , 0, n, pOut);. 
29c10 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
29c20 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
29c30 72 3b 0a 20 20 69 66 28 20 21 70 4f 70 2d 3e 70  r;.  if( !pOp->p
29c40 33 20 29 20 44 65 65 70 68 65 6d 65 72 61 6c 69  3 ) Deephemerali
29c50 7a 65 28 70 4f 75 74 29 3b 0a 20 20 55 50 44 41  ze(pOut);.  UPDA
29c60 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
29c70 70 4f 75 74 29 3b 0a 20 20 52 45 47 49 53 54 45  pOut);.  REGISTE
29c80 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c  R_TRACE(pOp->p2,
29c90 20 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b   pOut);.  break;
29ca0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
29cb0 6f 77 69 64 20 50 31 20 50 32 20 2a 20 2a 20 2a  owid P1 P2 * * *
29cc0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
29cd0 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20  P2]=rowid.**.** 
29ce0 53 74 6f 72 65 20 69 6e 20 72 65 67 69 73 74 65  Store in registe
29cf0 72 20 50 32 20 61 6e 20 69 6e 74 65 67 65 72 20  r P2 an integer 
29d00 77 68 69 63 68 20 69 73 20 74 68 65 20 6b 65 79  which is the key
29d10 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 65 6e   of the table en
29d20 74 72 79 20 74 68 61 74 0a 2a 2a 20 50 31 20 69  try that.** P1 i
29d30 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  s currently poin
29d40 74 20 74 6f 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 63  t to..**.** P1 c
29d50 61 6e 20 62 65 20 65 69 74 68 65 72 20 61 6e 20  an be either an 
29d60 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65 20 6f  ordinary table o
29d70 72 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  r a virtual tabl
29d80 65 2e 20 20 54 68 65 72 65 20 75 73 65 64 20 74  e.  There used t
29d90 6f 0a 2a 2a 20 62 65 20 61 20 73 65 70 61 72 61  o.** be a separa
29da0 74 65 20 4f 50 5f 56 52 6f 77 69 64 20 6f 70 63  te OP_VRowid opc
29db0 6f 64 65 20 66 6f 72 20 75 73 65 20 77 69 74 68  ode for use with
29dc0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 2c   virtual tables,
29dd0 20 62 75 74 20 74 68 69 73 0a 2a 2a 20 6f 6e 65   but this.** one
29de0 20 6f 70 63 6f 64 65 20 6e 6f 77 20 77 6f 72 6b   opcode now work
29df0 73 20 66 6f 72 20 62 6f 74 68 20 74 61 62 6c 65  s for both table
29e00 20 74 79 70 65 73 2e 0a 2a 2f 0a 63 61 73 65 20   types..*/.case 
29e10 4f 50 5f 52 6f 77 69 64 3a 20 7b 20 20 20 20 20  OP_Rowid: {     
29e20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
29e30 75 74 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ut2 */.  VdbeCur
29e40 73 6f 72 20 2a 70 43 3b 0a 20 20 69 36 34 20 76  sor *pC;.  i64 v
29e50 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  ;.  sqlite3_vtab
29e60 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74   *pVtab;.  const
29e70 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
29e80 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 70 4f 75  *pModule;..  pOu
29e90 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
29ea0 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73  se(p, pOp);.  as
29eb0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
29ec0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
29ed0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
29ee0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
29ef0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
29f00 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
29f10 20 70 43 2d 3e 65 43 75 72 54 79 70 65 21 3d 43   pC->eCurType!=C
29f20 55 52 54 59 50 45 5f 50 53 45 55 44 4f 20 7c 7c  URTYPE_PSEUDO ||
29f30 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 0a   pC->nullRow );.
29f40 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f    if( pC->nullRo
29f50 77 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  w ){.    pOut->f
29f60 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b  lags = MEM_Null;
29f70 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 65  .    break;.  }e
29f80 6c 73 65 20 69 66 28 20 70 43 2d 3e 64 65 66 65  lse if( pC->defe
29f90 72 72 65 64 4d 6f 76 65 74 6f 20 29 7b 0a 20 20  rredMoveto ){.  
29fa0 20 20 76 20 3d 20 70 43 2d 3e 6d 6f 76 65 74 6f    v = pC->moveto
29fb0 54 61 72 67 65 74 3b 0a 23 69 66 6e 64 65 66 20  Target;.#ifndef 
29fc0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
29fd0 55 41 4c 54 41 42 4c 45 0a 20 20 7d 65 6c 73 65  UALTABLE.  }else
29fe0 20 69 66 28 20 70 43 2d 3e 65 43 75 72 54 79 70   if( pC->eCurTyp
29ff0 65 3d 3d 43 55 52 54 59 50 45 5f 56 54 41 42 20  e==CURTYPE_VTAB 
2a000 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
2a010 43 2d 3e 75 63 2e 70 56 43 75 72 21 3d 30 20 29  C->uc.pVCur!=0 )
2a020 3b 0a 20 20 20 20 70 56 74 61 62 20 3d 20 70 43  ;.    pVtab = pC
2a030 2d 3e 75 63 2e 70 56 43 75 72 2d 3e 70 56 74 61  ->uc.pVCur->pVta
2a040 62 3b 0a 20 20 20 20 70 4d 6f 64 75 6c 65 20 3d  b;.    pModule =
2a050 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b   pVtab->pModule;
2a060 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4d 6f  .    assert( pMo
2a070 64 75 6c 65 2d 3e 78 52 6f 77 69 64 20 29 3b 0a  dule->xRowid );.
2a080 20 20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65      rc = pModule
2a090 2d 3e 78 52 6f 77 69 64 28 70 43 2d 3e 75 63 2e  ->xRowid(pC->uc.
2a0a0 70 56 43 75 72 2c 20 26 76 29 3b 0a 20 20 20 20  pVCur, &v);.    
2a0b0 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72  sqlite3VtabImpor
2a0c0 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62  tErrmsg(p, pVtab
2a0d0 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20  );.    if( rc ) 
2a0e0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
2a0f0 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66 20  o_error;.#endif 
2a100 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
2a110 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 20  IRTUALTABLE */. 
2a120 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
2a130 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
2a140 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
2a150 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
2a160 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30  C->uc.pCursor!=0
2a170 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   );.    rc = sql
2a180 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 52 65  ite3VdbeCursorRe
2a190 73 74 6f 72 65 28 70 43 29 3b 0a 20 20 20 20 69  store(pC);.    i
2a1a0 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
2a1b0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
2a1c0 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c  .    if( pC->nul
2a1d0 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20 20 70 4f  lRow ){.      pO
2a1e0 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
2a1f0 4e 75 6c 6c 3b 0a 20 20 20 20 20 20 62 72 65 61  Null;.      brea
2a200 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 76 20 3d  k;.    }.    v =
2a210 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 74   sqlite3BtreeInt
2a220 65 67 65 72 4b 65 79 28 70 43 2d 3e 75 63 2e 70  egerKey(pC->uc.p
2a230 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 70  Cursor);.  }.  p
2a240 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20  Out->u.i = v;.  
2a250 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2a260 6f 64 65 3a 20 4e 75 6c 6c 52 6f 77 20 50 31 20  ode: NullRow P1 
2a270 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f  * * * *.**.** Mo
2a280 76 65 20 74 68 65 20 63 75 72 73 6f 72 20 50 31  ve the cursor P1
2a290 20 74 6f 20 61 20 6e 75 6c 6c 20 72 6f 77 2e 20   to a null row. 
2a2a0 20 41 6e 79 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f   Any OP_Column o
2a2b0 70 65 72 61 74 69 6f 6e 73 0a 2a 2a 20 74 68 61  perations.** tha
2a2c0 74 20 6f 63 63 75 72 20 77 68 69 6c 65 20 74 68  t occur while th
2a2d0 65 20 63 75 72 73 6f 72 20 69 73 20 6f 6e 20 74  e cursor is on t
2a2e0 68 65 20 6e 75 6c 6c 20 72 6f 77 20 77 69 6c 6c  he null row will
2a2f0 20 61 6c 77 61 79 73 0a 2a 2a 20 77 72 69 74 65   always.** write
2a300 20 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65   a NULL..*/.case
2a310 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3a 20 7b 0a 20   OP_NullRow: {. 
2a320 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
2a330 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
2a340 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
2a350 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
2a360 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
2a370 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
2a380 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70  rt( pC!=0 );.  p
2a390 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a  C->nullRow = 1;.
2a3a0 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
2a3b0 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
2a3c0 0a 20 20 69 66 28 20 70 43 2d 3e 65 43 75 72 54  .  if( pC->eCurT
2a3d0 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
2a3e0 45 45 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  EE ){.    assert
2a3f0 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  ( pC->uc.pCursor
2a400 21 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74  !=0 );.    sqlit
2a410 65 33 42 74 72 65 65 43 6c 65 61 72 43 75 72 73  e3BtreeClearCurs
2a420 6f 72 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  or(pC->uc.pCurso
2a430 72 29 3b 0a 20 20 7d 0a 23 69 66 64 65 66 20 53  r);.  }.#ifdef S
2a440 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66  QLITE_DEBUG.  if
2a450 28 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 30 20  ( pC->seekOp==0 
2a460 29 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 4f  ) pC->seekOp = O
2a470 50 5f 4e 75 6c 6c 52 6f 77 3b 0a 23 65 6e 64 69  P_NullRow;.#endi
2a480 66 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  f.  break;.}../*
2a490 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 45 6e 64   Opcode: SeekEnd
2a4a0 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
2a4b0 2a 20 50 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f  * Position curso
2a4c0 72 20 50 31 20 61 74 20 74 68 65 20 65 6e 64 20  r P1 at the end 
2a4d0 6f 66 20 74 68 65 20 62 74 72 65 65 20 66 6f 72  of the btree for
2a4e0 20 74 68 65 20 70 75 72 70 6f 73 65 20 6f 66 0a   the purpose of.
2a4f0 2a 2a 20 61 70 70 65 6e 64 69 6e 67 20 61 20 6e  ** appending a n
2a500 65 77 20 65 6e 74 72 79 20 6f 6e 74 6f 20 74 68  ew entry onto th
2a510 65 20 62 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49  e btree..**.** I
2a520 74 20 69 73 20 61 73 73 75 6d 65 64 20 74 68 61  t is assumed tha
2a530 74 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  t the cursor is 
2a540 75 73 65 64 20 6f 6e 6c 79 20 66 6f 72 20 61 70  used only for ap
2a550 70 65 6e 64 69 6e 67 20 61 6e 64 20 73 6f 0a 2a  pending and so.*
2a560 2a 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20  * if the cursor 
2a570 69 73 20 76 61 6c 69 64 2c 20 74 68 65 6e 20 74  is valid, then t
2a580 68 65 20 63 75 72 73 6f 72 20 6d 75 73 74 20 61  he cursor must a
2a590 6c 72 65 61 64 79 20 62 65 20 70 6f 69 6e 74 69  lready be pointi
2a5a0 6e 67 0a 2a 2a 20 61 74 20 74 68 65 20 65 6e 64  ng.** at the end
2a5b0 20 6f 66 20 74 68 65 20 62 74 72 65 65 20 61 6e   of the btree an
2a5c0 64 20 73 6f 20 6e 6f 20 63 68 61 6e 67 65 73 20  d so no changes 
2a5d0 61 72 65 20 6d 61 64 65 20 74 6f 0a 2a 2a 20 74  are made to.** t
2a5e0 68 65 20 63 75 72 73 6f 72 2e 0a 2a 2f 0a 2f 2a  he cursor..*/./*
2a5f0 20 4f 70 63 6f 64 65 3a 20 4c 61 73 74 20 50 31   Opcode: Last P1
2a600 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
2a610 54 68 65 20 6e 65 78 74 20 75 73 65 20 6f 66 20  The next use of 
2a620 74 68 65 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c  the Rowid or Col
2a630 75 6d 6e 20 6f 72 20 50 72 65 76 20 69 6e 73 74  umn or Prev inst
2a640 72 75 63 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a  ruction for P1 .
2a650 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72 20 74 6f  ** will refer to
2a660 20 74 68 65 20 6c 61 73 74 20 65 6e 74 72 79 20   the last entry 
2a670 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
2a680 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a  table or index..
2a690 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65 20  ** If the table 
2a6a0 6f 72 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74  or index is empt
2a6b0 79 20 61 6e 64 20 50 32 3e 30 2c 20 74 68 65 6e  y and P2>0, then
2a6c0 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
2a6d0 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50  y to P2..** If P
2a6e0 32 20 69 73 20 30 20 6f 72 20 69 66 20 74 68 65  2 is 0 or if the
2a6f0 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
2a700 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61  is not empty, fa
2a710 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f  ll through.** to
2a720 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69   the following i
2a730 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
2a740 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65  * This opcode le
2a750 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20  aves the cursor 
2a760 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f  configured to mo
2a770 76 65 20 69 6e 20 72 65 76 65 72 73 65 20 6f 72  ve in reverse or
2a780 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65  der,.** from the
2a790 20 65 6e 64 20 74 6f 77 61 72 64 20 74 68 65 20   end toward the 
2a7a0 62 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f  beginning.  In o
2a7b0 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
2a7c0 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e  cursor is.** con
2a7d0 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 50  figured to use P
2a7e0 72 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a  rev, not Next..*
2a7f0 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 45 6e  /.case OP_SeekEn
2a800 64 3a 0a 63 61 73 65 20 4f 50 5f 4c 61 73 74 3a  d:.case OP_Last:
2a810 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
2a820 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  p */.  VdbeCurso
2a830 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f  r *pC;.  BtCurso
2a840 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20  r *pCrsr;.  int 
2a850 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  res;..  assert( 
2a860 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
2a870 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
2a880 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
2a890 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
2a8a0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
2a8b0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65  .  assert( pC->e
2a8c0 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
2a8d0 5f 42 54 52 45 45 20 29 3b 0a 20 20 70 43 72 73  _BTREE );.  pCrs
2a8e0 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  r = pC->uc.pCurs
2a8f0 6f 72 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20  or;.  res = 0;. 
2a900 20 61 73 73 65 72 74 28 20 70 43 72 73 72 21 3d   assert( pCrsr!=
2a910 30 20 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  0 );.#ifdef SQLI
2a920 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73  TE_DEBUG.  pC->s
2a930 65 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63  eekOp = pOp->opc
2a940 6f 64 65 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66  ode;.#endif.  if
2a950 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
2a960 50 5f 53 65 65 6b 45 6e 64 20 29 7b 0a 20 20 20  P_SeekEnd ){.   
2a970 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
2a980 3d 3d 30 20 29 3b 0a 20 20 20 20 70 43 2d 3e 73  ==0 );.    pC->s
2a990 65 65 6b 52 65 73 75 6c 74 20 3d 20 2d 31 3b 0a  eekResult = -1;.
2a9a0 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 42      if( sqlite3B
2a9b0 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69  treeCursorIsVali
2a9c0 64 4e 4e 28 70 43 72 73 72 29 20 29 7b 0a 20 20  dNN(pCrsr) ){.  
2a9d0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
2a9e0 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69  .  }.  rc = sqli
2a9f0 74 65 33 42 74 72 65 65 4c 61 73 74 28 70 43 72  te3BtreeLast(pCr
2aa00 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 70 43 2d  sr, &res);.  pC-
2aa10 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72  >nullRow = (u8)r
2aa20 65 73 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72  es;.  pC->deferr
2aa30 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
2aa40 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
2aa50 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
2aa60 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
2aa70 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
2aa80 72 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  r;.  if( pOp->p2
2aa90 3e 30 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72  >0 ){.    VdbeBr
2aaa0 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30  anchTaken(res!=0
2aab0 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73  ,2);.    if( res
2aac0 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f   ) goto jump_to_
2aad0 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  p2;.  }.  break;
2aae0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
2aaf0 66 53 6d 61 6c 6c 65 72 20 50 31 20 50 32 20 50  fSmaller P1 P2 P
2ab00 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 45 73 74 69  3 * *.**.** Esti
2ab10 6d 61 74 65 20 74 68 65 20 6e 75 6d 62 65 72 20  mate the number 
2ab20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74  of rows in the t
2ab30 61 62 6c 65 20 50 31 2e 20 20 4a 75 6d 70 20 74  able P1.  Jump t
2ab40 6f 20 50 32 20 69 66 20 74 68 61 74 0a 2a 2a 20  o P2 if that.** 
2ab50 65 73 74 69 6d 61 74 65 20 69 73 20 6c 65 73 73  estimate is less
2ab60 20 74 68 61 6e 20 61 70 70 72 6f 78 69 6d 61 74   than approximat
2ab70 65 6c 79 20 32 2a 2a 28 30 2e 31 2a 50 33 29 2e  ely 2**(0.1*P3).
2ab80 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 53 6d  .*/.case OP_IfSm
2ab90 61 6c 6c 65 72 3a 20 7b 20 20 20 20 20 20 20 20  aller: {        
2aba0 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62  /* jump */.  Vdb
2abb0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
2abc0 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
2abd0 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 36 34    int res;.  i64
2abe0 20 73 7a 3b 0a 0a 20 20 61 73 73 65 72 74 28 20   sz;..  assert( 
2abf0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
2ac00 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
2ac10 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
2ac20 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
2ac30 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
2ac40 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75  .  pCrsr = pC->u
2ac50 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73  c.pCursor;.  ass
2ac60 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20  ert( pCrsr );.  
2ac70 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
2ac80 65 46 69 72 73 74 28 70 43 72 73 72 2c 20 26 72  eFirst(pCrsr, &r
2ac90 65 73 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  es);.  if( rc ) 
2aca0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
2acb0 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 72  o_error;.  if( r
2acc0 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 73 7a 20  es==0 ){.    sz 
2acd0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 52 6f  = sqlite3BtreeRo
2ace0 77 43 6f 75 6e 74 45 73 74 28 70 43 72 73 72 29  wCountEst(pCrsr)
2acf0 3b 0a 20 20 20 20 69 66 28 20 41 4c 57 41 59 53  ;.    if( ALWAYS
2ad00 28 73 7a 3e 3d 30 29 20 26 26 20 73 71 6c 69 74  (sz>=0) && sqlit
2ad10 65 33 4c 6f 67 45 73 74 28 28 75 36 34 29 73 7a  e3LogEst((u64)sz
2ad20 29 3c 70 4f 70 2d 3e 70 33 20 29 20 72 65 73 20  )<pOp->p3 ) res 
2ad30 3d 20 31 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42  = 1;.  }.  VdbeB
2ad40 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d  ranchTaken(res!=
2ad50 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73 20  0,2);.  if( res 
2ad60 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
2ad70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a  2;.  break;.}...
2ad80 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65  /* Opcode: Sorte
2ad90 72 53 6f 72 74 20 50 31 20 50 32 20 2a 20 2a 20  rSort P1 P2 * * 
2ada0 2a 0a 2a 2a 0a 2a 2a 20 41 66 74 65 72 20 61 6c  *.**.** After al
2adb0 6c 20 72 65 63 6f 72 64 73 20 68 61 76 65 20 62  l records have b
2adc0 65 65 6e 20 69 6e 73 65 72 74 65 64 20 69 6e 74  een inserted int
2add0 6f 20 74 68 65 20 53 6f 72 74 65 72 20 6f 62 6a  o the Sorter obj
2ade0 65 63 74 0a 2a 2a 20 69 64 65 6e 74 69 66 69 65  ect.** identifie
2adf0 64 20 62 79 20 50 31 2c 20 69 6e 76 6f 6b 65 20  d by P1, invoke 
2ae00 74 68 69 73 20 6f 70 63 6f 64 65 20 74 6f 20 61  this opcode to a
2ae10 63 74 75 61 6c 6c 79 20 64 6f 20 74 68 65 20 73  ctually do the s
2ae20 6f 72 74 69 6e 67 2e 0a 2a 2a 20 4a 75 6d 70 20  orting..** Jump 
2ae30 74 6f 20 50 32 20 69 66 20 74 68 65 72 65 20 61  to P2 if there a
2ae40 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 74 6f  re no records to
2ae50 20 62 65 20 73 6f 72 74 65 64 2e 0a 2a 2a 0a 2a   be sorted..**.*
2ae60 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73  * This opcode is
2ae70 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 4f 50   an alias for OP
2ae80 5f 53 6f 72 74 20 61 6e 64 20 4f 50 5f 52 65 77  _Sort and OP_Rew
2ae90 69 6e 64 20 74 68 61 74 20 69 73 20 75 73 65 64  ind that is used
2aea0 0a 2a 2a 20 66 6f 72 20 53 6f 72 74 65 72 20 6f  .** for Sorter o
2aeb0 62 6a 65 63 74 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70  bjects..*/./* Op
2aec0 63 6f 64 65 3a 20 53 6f 72 74 20 50 31 20 50 32  code: Sort P1 P2
2aed0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69   * * *.**.** Thi
2aee0 73 20 6f 70 63 6f 64 65 20 64 6f 65 73 20 65 78  s opcode does ex
2aef0 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20 74  actly the same t
2af00 68 69 6e 67 20 61 73 20 4f 50 5f 52 65 77 69 6e  hing as OP_Rewin
2af10 64 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a 2a  d except that.**
2af20 20 69 74 20 69 6e 63 72 65 6d 65 6e 74 73 20 61   it increments a
2af30 6e 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64 20 67  n undocumented g
2af40 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 75  lobal variable u
2af50 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67 2e  sed for testing.
2af60 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e 67 20 69  .**.** Sorting i
2af70 73 20 61 63 63 6f 6d 70 6c 69 73 68 65 64 20 62  s accomplished b
2af80 79 20 77 72 69 74 69 6e 67 20 72 65 63 6f 72 64  y writing record
2af90 73 20 69 6e 74 6f 20 61 20 73 6f 72 74 69 6e 67  s into a sorting
2afa0 20 69 6e 64 65 78 2c 0a 2a 2a 20 74 68 65 6e 20   index,.** then 
2afb0 72 65 77 69 6e 64 69 6e 67 20 74 68 61 74 20 69  rewinding that i
2afc0 6e 64 65 78 20 61 6e 64 20 70 6c 61 79 69 6e 67  ndex and playing
2afd0 20 69 74 20 62 61 63 6b 20 66 72 6f 6d 20 62 65   it back from be
2afe0 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a 20 65 6e  ginning to.** en
2aff0 64 2e 20 20 57 65 20 75 73 65 20 74 68 65 20 4f  d.  We use the O
2b000 50 5f 53 6f 72 74 20 6f 70 63 6f 64 65 20 69 6e  P_Sort opcode in
2b010 73 74 65 61 64 20 6f 66 20 4f 50 5f 52 65 77 69  stead of OP_Rewi
2b020 6e 64 20 74 6f 20 64 6f 20 74 68 65 0a 2a 2a 20  nd to do the.** 
2b030 72 65 77 69 6e 64 69 6e 67 20 73 6f 20 74 68 61  rewinding so tha
2b040 74 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72  t the global var
2b050 69 61 62 6c 65 20 77 69 6c 6c 20 62 65 20 69 6e  iable will be in
2b060 63 72 65 6d 65 6e 74 65 64 20 61 6e 64 0a 2a 2a  cremented and.**
2b070 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74   regression test
2b080 73 20 63 61 6e 20 64 65 74 65 72 6d 69 6e 65 20  s can determine 
2b090 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
2b0a0 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 69 73 0a  he optimizer is.
2b0b0 2a 2a 20 63 6f 72 72 65 63 74 6c 79 20 6f 70 74  ** correctly opt
2b0c0 69 6d 69 7a 69 6e 67 20 6f 75 74 20 73 6f 72 74  imizing out sort
2b0d0 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f  s..*/.case OP_So
2b0e0 72 74 65 72 53 6f 72 74 3a 20 20 20 20 2f 2a 20  rterSort:    /* 
2b0f0 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  jump */.case OP_
2b100 53 6f 72 74 3a 20 7b 20 20 20 20 20 20 20 20 2f  Sort: {        /
2b110 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64 65 66  * jump */.#ifdef
2b120 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 73   SQLITE_TEST.  s
2b130 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75 6e  qlite3_sort_coun
2b140 74 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73  t++;.  sqlite3_s
2b150 65 61 72 63 68 5f 63 6f 75 6e 74 2d 2d 3b 0a 23  earch_count--;.#
2b160 65 6e 64 69 66 0a 20 20 70 2d 3e 61 43 6f 75 6e  endif.  p->aCoun
2b170 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53  ter[SQLITE_STMTS
2b180 54 41 54 55 53 5f 53 4f 52 54 5d 2b 2b 3b 0a 20  TATUS_SORT]++;. 
2b190 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68   /* Fall through
2b1a0 20 69 6e 74 6f 20 4f 50 5f 52 65 77 69 6e 64 20   into OP_Rewind 
2b1b0 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  */.}./* Opcode: 
2b1c0 52 65 77 69 6e 64 20 50 31 20 50 32 20 2a 20 2a  Rewind P1 P2 * *
2b1d0 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65   P5.**.** The ne
2b1e0 78 74 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f  xt use of the Ro
2b1f0 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72  wid or Column or
2b200 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   Next instructio
2b210 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c  n for P1 .** wil
2b220 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 66  l refer to the f
2b230 69 72 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68  irst entry in th
2b240 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
2b250 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66   or index..** If
2b260 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
2b270 64 65 78 20 69 73 20 65 6d 70 74 79 2c 20 6a 75  dex is empty, ju
2b280 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
2b290 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 74 68 65 20  o P2..** If the 
2b2a0 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69  table or index i
2b2b0 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c  s not empty, fal
2b2c0 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
2b2d0 20 66 6f 6c 6c 6f 77 69 6e 67 20 0a 2a 2a 20 69   following .** i
2b2e0 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
2b2f0 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 6e 2d 7a  * If P5 is non-z
2b300 65 72 6f 20 61 6e 64 20 74 68 65 20 74 61 62 6c  ero and the tabl
2b310 65 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20  e is not empty, 
2b320 74 68 65 6e 20 74 68 65 20 22 73 6b 69 70 2d 6e  then the "skip-n
2b330 65 78 74 22 0a 2a 2a 20 66 6c 61 67 20 69 73 20  ext".** flag is 
2b340 73 65 74 20 6f 6e 20 74 68 65 20 63 75 72 73 6f  set on the curso
2b350 72 20 73 6f 20 74 68 61 74 20 74 68 65 20 6e 65  r so that the ne
2b360 78 74 20 4f 50 5f 4e 65 78 74 20 69 6e 73 74 72  xt OP_Next instr
2b370 75 63 74 69 6f 6e 20 0a 2a 2a 20 65 78 65 63 75  uction .** execu
2b380 74 65 64 20 6f 6e 20 69 74 20 69 73 20 61 20 6e  ted on it is a n
2b390 6f 2d 6f 70 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  o-op..**.** This
2b3a0 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74   opcode leaves t
2b3b0 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67  he cursor config
2b3c0 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20  ured to move in 
2b3d0 66 6f 72 77 61 72 64 20 6f 72 64 65 72 2c 0a 2a  forward order,.*
2b3e0 2a 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e  * from the begin
2b3f0 6e 69 6e 67 20 74 6f 77 61 72 64 20 74 68 65 20  ning toward the 
2b400 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  end.  In other w
2b410 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72  ords, the cursor
2b420 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65   is.** configure
2b430 64 20 74 6f 20 75 73 65 20 4e 65 78 74 2c 20 6e  d to use Next, n
2b440 6f 74 20 50 72 65 76 2e 0a 2a 2f 0a 63 61 73 65  ot Prev..*/.case
2b450 20 4f 50 5f 52 65 77 69 6e 64 3a 20 7b 20 20 20   OP_Rewind: {   
2b460 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
2b470 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
2b480 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
2b490 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  rsr;.  int res;.
2b4a0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2b4b0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
2b4c0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
2b4d0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
2b4e0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
2b4f0 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
2b500 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70  sert( isSorter(p
2b510 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65  C)==(pOp->opcode
2b520 3d 3d 4f 50 5f 53 6f 72 74 65 72 53 6f 72 74 29  ==OP_SorterSort)
2b530 20 29 3b 0a 20 20 72 65 73 20 3d 20 31 3b 0a 23   );.  res = 1;.#
2b540 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
2b550 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20  UG.  pC->seekOp 
2b560 3d 20 4f 50 5f 52 65 77 69 6e 64 3b 0a 23 65 6e  = OP_Rewind;.#en
2b570 64 69 66 0a 20 20 69 66 28 20 69 73 53 6f 72 74  dif.  if( isSort
2b580 65 72 28 70 43 29 20 29 7b 0a 20 20 20 20 72 63  er(pC) ){.    rc
2b590 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f   = sqlite3VdbeSo
2b5a0 72 74 65 72 52 65 77 69 6e 64 28 70 43 2c 20 26  rterRewind(pC, &
2b5b0 72 65 73 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  res);.  }else{. 
2b5c0 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65     assert( pC->e
2b5d0 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
2b5e0 5f 42 54 52 45 45 20 29 3b 0a 20 20 20 20 70 43  _BTREE );.    pC
2b5f0 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75  rsr = pC->uc.pCu
2b600 72 73 6f 72 3b 0a 20 20 20 20 61 73 73 65 72 74  rsor;.    assert
2b610 28 20 70 43 72 73 72 20 29 3b 0a 20 20 20 20 72  ( pCrsr );.    r
2b620 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
2b630 46 69 72 73 74 28 70 43 72 73 72 2c 20 26 72 65  First(pCrsr, &re
2b640 73 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  s);.#ifndef SQLI
2b650 54 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57 46 55  TE_OMIT_WINDOWFU
2b660 4e 43 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  NC.    if( pOp->
2b670 70 35 20 29 20 73 71 6c 69 74 65 33 42 74 72 65  p5 ) sqlite3Btre
2b680 65 53 6b 69 70 4e 65 78 74 28 70 43 72 73 72 29  eSkipNext(pCrsr)
2b690 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 70 43 2d  ;.#endif.    pC-
2b6a0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
2b6b0 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63  = 0;.    pC->cac
2b6c0 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
2b6d0 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 69 66  _STALE;.  }.  if
2b6e0 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
2b6f0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
2b700 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
2b710 28 75 38 29 72 65 73 3b 0a 20 20 61 73 73 65 72  (u8)res;.  asser
2b720 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20  t( pOp->p2>0 && 
2b730 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29  pOp->p2<p->nOp )
2b740 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
2b750 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20  ken(res!=0,2);. 
2b760 20 69 66 28 20 72 65 73 20 29 20 67 6f 74 6f 20   if( res ) goto 
2b770 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72  jump_to_p2;.  br
2b780 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2b790 65 3a 20 4e 65 78 74 20 50 31 20 50 32 20 50 33  e: Next P1 P2 P3
2b7a0 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 41 64 76   P4 P5.**.** Adv
2b7b0 61 6e 63 65 20 63 75 72 73 6f 72 20 50 31 20 73  ance cursor P1 s
2b7c0 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73  o that it points
2b7d0 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6b 65 79   to the next key
2b7e0 2f 64 61 74 61 20 70 61 69 72 20 69 6e 20 69 74  /data pair in it
2b7f0 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e  s.** table or in
2b800 64 65 78 2e 20 20 49 66 20 74 68 65 72 65 20 61  dex.  If there a
2b810 72 65 20 6e 6f 20 6d 6f 72 65 20 6b 65 79 2f 76  re no more key/v
2b820 61 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e 20  alue pairs then 
2b830 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20  fall through.** 
2b840 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  to the following
2b850 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42   instruction.  B
2b860 75 74 20 69 66 20 74 68 65 20 63 75 72 73 6f 72  ut if the cursor
2b870 20 61 64 76 61 6e 63 65 20 77 61 73 20 73 75 63   advance was suc
2b880 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70  cessful,.** jump
2b890 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
2b8a0 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4e 65  P2..**.** The Ne
2b8b0 78 74 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c  xt opcode is onl
2b8c0 79 20 76 61 6c 69 64 20 66 6f 6c 6c 6f 77 69 6e  y valid followin
2b8d0 67 20 61 6e 20 53 65 65 6b 47 54 2c 20 53 65 65  g an SeekGT, See
2b8e0 6b 47 45 2c 20 6f 72 0a 2a 2a 20 4f 50 5f 52 65  kGE, or.** OP_Re
2b8f0 77 69 6e 64 20 6f 70 63 6f 64 65 20 75 73 65 64  wind opcode used
2b900 20 74 6f 20 70 6f 73 69 74 69 6f 6e 20 74 68 65   to position the
2b910 20 63 75 72 73 6f 72 2e 20 20 4e 65 78 74 20 69   cursor.  Next i
2b920 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 0a 2a 2a  s not allowed.**
2b930 20 74 6f 20 66 6f 6c 6c 6f 77 20 53 65 65 6b 4c   to follow SeekL
2b940 54 2c 20 53 65 65 6b 4c 45 2c 20 6f 72 20 4f 50  T, SeekLE, or OP
2b950 5f 4c 61 73 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  _Last..**.** The
2b960 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20   P1 cursor must 
2b970 62 65 20 66 6f 72 20 61 20 72 65 61 6c 20 74 61  be for a real ta
2b980 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64  ble, not a pseud
2b990 6f 2d 74 61 62 6c 65 2e 20 20 50 31 20 6d 75 73  o-table.  P1 mus
2b9a0 74 20 68 61 76 65 0a 2a 2a 20 62 65 65 6e 20 6f  t have.** been o
2b9b0 70 65 6e 65 64 20 70 72 69 6f 72 20 74 6f 20 74  pened prior to t
2b9c0 68 69 73 20 6f 70 63 6f 64 65 20 6f 72 20 74 68  his opcode or th
2b9d0 65 20 70 72 6f 67 72 61 6d 20 77 69 6c 6c 20 73  e program will s
2b9e0 65 67 66 61 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 54  egfault..**.** T
2b9f0 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 61  he P3 value is a
2ba00 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62 74 72   hint to the btr
2ba10 65 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ee implementatio
2ba20 6e 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74 68 61  n. If P3==1, tha
2ba30 74 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69 73  t.** means P1 is
2ba40 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 61 6e   an SQL index an
2ba50 64 20 74 68 61 74 20 74 68 69 73 20 69 6e 73 74  d that this inst
2ba60 72 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68 61  ruction could ha
2ba70 76 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74  ve been.** omitt
2ba80 65 64 20 69 66 20 74 68 61 74 20 69 6e 64 65 78  ed if that index
2ba90 20 68 61 64 20 62 65 65 6e 20 75 6e 69 71 75 65   had been unique
2baa0 2e 20 20 50 33 20 69 73 20 75 73 75 61 6c 6c 79  .  P3 is usually
2bab0 20 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61 6c   0.  P3 is.** al
2bac0 77 61 79 73 20 65 69 74 68 65 72 20 30 20 6f 72  ways either 0 or
2bad0 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20   1..**.** P4 is 
2bae0 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20 50  always of type P
2baf0 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20 66  4_ADVANCE. The f
2bb00 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20  unction pointer 
2bb10 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c  points to.** sql
2bb20 69 74 65 33 42 74 72 65 65 4e 65 78 74 28 29 2e  ite3BtreeNext().
2bb30 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20  .**.** If P5 is 
2bb40 70 6f 73 69 74 69 76 65 20 61 6e 64 20 74 68 65  positive and the
2bb50 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20   jump is taken, 
2bb60 74 68 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74  then event count
2bb70 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d  er.** number P5-
2bb80 31 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65  1 in the prepare
2bb90 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 69  d statement is i
2bba0 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a  ncremented..**.*
2bbb0 2a 20 53 65 65 20 61 6c 73 6f 3a 20 50 72 65 76  * See also: Prev
2bbc0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  .*/./* Opcode: P
2bbd0 72 65 76 20 50 31 20 50 32 20 50 33 20 50 34 20  rev P1 P2 P3 P4 
2bbe0 50 35 0a 2a 2a 0a 2a 2a 20 42 61 63 6b 20 75 70  P5.**.** Back up
2bbf0 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
2bc00 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  at it points to 
2bc10 74 68 65 20 70 72 65 76 69 6f 75 73 20 6b 65 79  the previous key
2bc20 2f 64 61 74 61 20 70 61 69 72 20 69 6e 20 69 74  /data pair in it
2bc30 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e  s.** table or in
2bc40 64 65 78 2e 20 20 49 66 20 74 68 65 72 65 20 69  dex.  If there i
2bc50 73 20 6e 6f 20 70 72 65 76 69 6f 75 73 20 6b 65  s no previous ke
2bc60 79 2f 76 61 6c 75 65 20 70 61 69 72 73 20 74 68  y/value pairs th
2bc70 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a  en fall through.
2bc80 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77  ** to the follow
2bc90 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ing instruction.
2bca0 20 20 42 75 74 20 69 66 20 74 68 65 20 63 75 72    But if the cur
2bcb0 73 6f 72 20 62 61 63 6b 75 70 20 77 61 73 20 73  sor backup was s
2bcc0 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75  uccessful,.** ju
2bcd0 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
2bce0 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 54  o P2..**.**.** T
2bcf0 68 65 20 50 72 65 76 20 6f 70 63 6f 64 65 20 69  he Prev opcode i
2bd00 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 66 6f 6c  s only valid fol
2bd10 6c 6f 77 69 6e 67 20 61 6e 20 53 65 65 6b 4c 54  lowing an SeekLT
2bd20 2c 20 53 65 65 6b 4c 45 2c 20 6f 72 0a 2a 2a 20  , SeekLE, or.** 
2bd30 4f 50 5f 4c 61 73 74 20 6f 70 63 6f 64 65 20 75  OP_Last opcode u
2bd40 73 65 64 20 74 6f 20 70 6f 73 69 74 69 6f 6e 20  sed to position 
2bd50 74 68 65 20 63 75 72 73 6f 72 2e 20 20 50 72 65  the cursor.  Pre
2bd60 76 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64  v is not allowed
2bd70 0a 2a 2a 20 74 6f 20 66 6f 6c 6c 6f 77 20 53 65  .** to follow Se
2bd80 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c 20 6f 72  ekGT, SeekGE, or
2bd90 20 4f 50 5f 52 65 77 69 6e 64 2e 0a 2a 2a 0a 2a   OP_Rewind..**.*
2bda0 2a 20 54 68 65 20 50 31 20 63 75 72 73 6f 72 20  * The P1 cursor 
2bdb0 6d 75 73 74 20 62 65 20 66 6f 72 20 61 20 72 65  must be for a re
2bdc0 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20  al table, not a 
2bdd0 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20 49  pseudo-table.  I
2bde0 66 20 50 31 20 69 73 0a 2a 2a 20 6e 6f 74 20 6f  f P1 is.** not o
2bdf0 70 65 6e 20 74 68 65 6e 20 74 68 65 20 62 65 68  pen then the beh
2be00 61 76 69 6f 72 20 69 73 20 75 6e 64 65 66 69 6e  avior is undefin
2be10 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 33  ed..**.** The P3
2be20 20 76 61 6c 75 65 20 69 73 20 61 20 68 69 6e 74   value is a hint
2be30 20 74 6f 20 74 68 65 20 62 74 72 65 65 20 69 6d   to the btree im
2be40 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 49 66  plementation. If
2be50 20 50 33 3d 3d 31 2c 20 74 68 61 74 0a 2a 2a 20   P3==1, that.** 
2be60 6d 65 61 6e 73 20 50 31 20 69 73 20 61 6e 20 53  means P1 is an S
2be70 51 4c 20 69 6e 64 65 78 20 61 6e 64 20 74 68 61  QL index and tha
2be80 74 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  t this instructi
2be90 6f 6e 20 63 6f 75 6c 64 20 68 61 76 65 20 62 65  on could have be
2bea0 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65 64 20 69 66  en.** omitted if
2beb0 20 74 68 61 74 20 69 6e 64 65 78 20 68 61 64 20   that index had 
2bec0 62 65 65 6e 20 75 6e 69 71 75 65 2e 20 20 50 33  been unique.  P3
2bed0 20 69 73 20 75 73 75 61 6c 6c 79 20 30 2e 20 20   is usually 0.  
2bee0 50 33 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20  P3 is.** always 
2bef0 65 69 74 68 65 72 20 30 20 6f 72 20 31 2e 0a 2a  either 0 or 1..*
2bf00 2a 0a 2a 2a 20 50 34 20 69 73 20 61 6c 77 61 79  *.** P4 is alway
2bf10 73 20 6f 66 20 74 79 70 65 20 50 34 5f 41 44 56  s of type P4_ADV
2bf20 41 4e 43 45 2e 20 54 68 65 20 66 75 6e 63 74 69  ANCE. The functi
2bf30 6f 6e 20 70 6f 69 6e 74 65 72 20 70 6f 69 6e 74  on pointer point
2bf40 73 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 33 42  s to.** sqlite3B
2bf50 74 72 65 65 50 72 65 76 69 6f 75 73 28 29 2e 0a  treePrevious()..
2bf60 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 70  **.** If P5 is p
2bf70 6f 73 69 74 69 76 65 20 61 6e 64 20 74 68 65 20  ositive and the 
2bf80 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 74  jump is taken, t
2bf90 68 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74 65  hen event counte
2bfa0 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31  r.** number P5-1
2bfb0 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64   in the prepared
2bfc0 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 69 6e   statement is in
2bfd0 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2f 0a 2f 2a  cremented..*/./*
2bfe0 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 4e   Opcode: SorterN
2bff0 65 78 74 20 50 31 20 50 32 20 2a 20 2a 20 50 35  ext P1 P2 * * P5
2c000 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
2c010 64 65 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69  de works just li
2c020 6b 65 20 4f 50 5f 4e 65 78 74 20 65 78 63 65 70  ke OP_Next excep
2c030 74 20 74 68 61 74 20 50 31 20 6d 75 73 74 20 62  t that P1 must b
2c040 65 20 61 0a 2a 2a 20 73 6f 72 74 65 72 20 6f 62  e a.** sorter ob
2c050 6a 65 63 74 20 66 6f 72 20 77 68 69 63 68 20 74  ject for which t
2c060 68 65 20 4f 50 5f 53 6f 72 74 65 72 53 6f 72 74  he OP_SorterSort
2c070 20 6f 70 63 6f 64 65 20 68 61 73 20 62 65 65 6e   opcode has been
2c080 0a 2a 2a 20 69 6e 76 6f 6b 65 64 2e 20 20 54 68  .** invoked.  Th
2c090 69 73 20 6f 70 63 6f 64 65 20 61 64 76 61 6e 63  is opcode advanc
2c0a0 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 74 6f  es the cursor to
2c0b0 20 74 68 65 20 6e 65 78 74 20 73 6f 72 74 65 64   the next sorted
2c0c0 0a 2a 2a 20 72 65 63 6f 72 64 2c 20 6f 72 20 6a  .** record, or j
2c0d0 75 6d 70 73 20 74 6f 20 50 32 20 69 66 20 74 68  umps to P2 if th
2c0e0 65 72 65 20 61 72 65 20 6e 6f 20 6d 6f 72 65 20  ere are no more 
2c0f0 73 6f 72 74 65 64 20 72 65 63 6f 72 64 73 2e 0a  sorted records..
2c100 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65  */.case OP_Sorte
2c110 72 4e 65 78 74 3a 20 7b 20 20 2f 2a 20 6a 75 6d  rNext: {  /* jum
2c120 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  p */.  VdbeCurso
2c130 72 20 2a 70 43 3b 0a 0a 20 20 70 43 20 3d 20 70  r *pC;..  pC = p
2c140 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
2c150 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f  ;.  assert( isSo
2c160 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20 72 63  rter(pC) );.  rc
2c170 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f   = sqlite3VdbeSo
2c180 72 74 65 72 4e 65 78 74 28 64 62 2c 20 70 43 29  rterNext(db, pC)
2c190 3b 0a 20 20 67 6f 74 6f 20 6e 65 78 74 5f 74 61  ;.  goto next_ta
2c1a0 69 6c 3b 0a 63 61 73 65 20 4f 50 5f 50 72 65 76  il;.case OP_Prev
2c1b0 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  :          /* ju
2c1c0 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65  mp */.case OP_Ne
2c1d0 78 74 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  xt:          /* 
2c1e0 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74  jump */.  assert
2c1f0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
2c200 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
2c210 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
2c220 70 4f 70 2d 3e 70 35 3c 41 72 72 61 79 53 69 7a  pOp->p5<ArraySiz
2c230 65 28 70 2d 3e 61 43 6f 75 6e 74 65 72 29 20 29  e(p->aCounter) )
2c240 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
2c250 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
2c260 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
2c270 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
2c280 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
2c290 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
2c2a0 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
2c2b0 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73  E_BTREE );.  ass
2c2c0 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
2c2d0 21 3d 4f 50 5f 4e 65 78 74 20 7c 7c 20 70 4f 70  !=OP_Next || pOp
2c2e0 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73  ->p4.xAdvance==s
2c2f0 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74 20  qlite3BtreeNext 
2c300 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
2c310 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65  ->opcode!=OP_Pre
2c320 76 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64  v || pOp->p4.xAd
2c330 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74  vance==sqlite3Bt
2c340 72 65 65 50 72 65 76 69 6f 75 73 20 29 3b 0a 0a  reePrevious );..
2c350 20 20 2f 2a 20 54 68 65 20 4e 65 78 74 20 6f 70    /* The Next op
2c360 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 75 73 65  code is only use
2c370 64 20 61 66 74 65 72 20 53 65 65 6b 47 54 2c 20  d after SeekGT, 
2c380 53 65 65 6b 47 45 2c 20 52 65 77 69 6e 64 2c 20  SeekGE, Rewind, 
2c390 61 6e 64 20 46 6f 75 6e 64 2e 0a 20 20 2a 2a 20  and Found..  ** 
2c3a0 54 68 65 20 50 72 65 76 20 6f 70 63 6f 64 65 20  The Prev opcode 
2c3b0 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 61 66 74  is only used aft
2c3c0 65 72 20 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c  er SeekLT, SeekL
2c3d0 45 2c 20 61 6e 64 20 4c 61 73 74 2e 20 2a 2f 0a  E, and Last. */.
2c3e0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
2c3f0 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 0a 20  pcode!=OP_Next. 
2c400 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65        || pC->see
2c410 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 7c  kOp==OP_SeekGT |
2c420 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50  | pC->seekOp==OP
2c430 5f 53 65 65 6b 47 45 0a 20 20 20 20 20 20 20 7c  _SeekGE.       |
2c440 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50  | pC->seekOp==OP
2c450 5f 52 65 77 69 6e 64 20 7c 7c 20 70 43 2d 3e 73  _Rewind || pC->s
2c460 65 65 6b 4f 70 3d 3d 4f 50 5f 46 6f 75 6e 64 20  eekOp==OP_Found 
2c470 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73  .       || pC->s
2c480 65 65 6b 4f 70 3d 3d 4f 50 5f 4e 75 6c 6c 52 6f  eekOp==OP_NullRo
2c490 77 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d  w|| pC->seekOp==
2c4a0 4f 50 5f 53 65 65 6b 52 6f 77 69 64 29 3b 0a 20  OP_SeekRowid);. 
2c4b0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
2c4c0 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 0a 20 20  code!=OP_Prev.  
2c4d0 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b       || pC->seek
2c4e0 4f 70 3d 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c  Op==OP_SeekLT ||
2c4f0 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f   pC->seekOp==OP_
2c500 53 65 65 6b 4c 45 0a 20 20 20 20 20 20 20 7c 7c  SeekLE.       ||
2c510 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f   pC->seekOp==OP_
2c520 4c 61 73 74 20 0a 20 20 20 20 20 20 20 7c 7c 20  Last .       || 
2c530 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 4e  pC->seekOp==OP_N
2c540 75 6c 6c 52 6f 77 29 3b 0a 0a 20 20 72 63 20 3d  ullRow);..  rc =
2c550 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63   pOp->p4.xAdvanc
2c560 65 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  e(pC->uc.pCursor
2c570 2c 20 70 4f 70 2d 3e 70 33 29 3b 0a 6e 65 78 74  , pOp->p3);.next
2c580 5f 74 61 69 6c 3a 0a 20 20 70 43 2d 3e 63 61 63  _tail:.  pC->cac
2c590 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
2c5a0 5f 53 54 41 4c 45 3b 0a 20 20 56 64 62 65 42 72  _STALE;.  VdbeBr
2c5b0 61 6e 63 68 54 61 6b 65 6e 28 72 63 3d 3d 53 51  anchTaken(rc==SQ
2c5c0 4c 49 54 45 5f 4f 4b 2c 32 29 3b 0a 20 20 69 66  LITE_OK,2);.  if
2c5d0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
2c5e0 29 7b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52  ){.    pC->nullR
2c5f0 6f 77 20 3d 20 30 3b 0a 20 20 20 20 70 2d 3e 61  ow = 0;.    p->a
2c600 43 6f 75 6e 74 65 72 5b 70 4f 70 2d 3e 70 35 5d  Counter[pOp->p5]
2c610 2b 2b 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  ++;.#ifdef SQLIT
2c620 45 5f 54 45 53 54 0a 20 20 20 20 73 71 6c 69 74  E_TEST.    sqlit
2c630 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b  e3_search_count+
2c640 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 67 6f  +;.#endif.    go
2c650 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e  to jump_to_p2_an
2c660 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65  d_check_for_inte
2c670 72 72 75 70 74 3b 0a 20 20 7d 0a 20 20 69 66 28  rrupt;.  }.  if(
2c680 20 72 63 21 3d 53 51 4c 49 54 45 5f 44 4f 4e 45   rc!=SQLITE_DONE
2c690 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
2c6a0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 72 63  e_to_error;.  rc
2c6b0 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
2c6c0 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b  pC->nullRow = 1;
2c6d0 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f  .  goto check_fo
2c6e0 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 0a  r_interrupt;.}..
2c6f0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 49 6e  /* Opcode: IdxIn
2c700 73 65 72 74 20 50 31 20 50 32 20 50 33 20 50 34  sert P1 P2 P3 P4
2c710 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
2c720 20 6b 65 79 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a   key=r[P2].**.**
2c730 20 52 65 67 69 73 74 65 72 20 50 32 20 68 6f 6c   Register P2 hol
2c740 64 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20  ds an SQL index 
2c750 6b 65 79 20 6d 61 64 65 20 75 73 69 6e 67 20 74  key made using t
2c760 68 65 0a 2a 2a 20 4d 61 6b 65 52 65 63 6f 72 64  he.** MakeRecord
2c770 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 2e 20 20   instructions.  
2c780 54 68 69 73 20 6f 70 63 6f 64 65 20 77 72 69 74  This opcode writ
2c790 65 73 20 74 68 61 74 20 6b 65 79 0a 2a 2a 20 69  es that key.** i
2c7a0 6e 74 6f 20 74 68 65 20 69 6e 64 65 78 20 50 31  nto the index P1
2c7b0 2e 20 20 44 61 74 61 20 66 6f 72 20 74 68 65 20  .  Data for the 
2c7c0 65 6e 74 72 79 20 69 73 20 6e 69 6c 2e 0a 2a 2a  entry is nil..**
2c7d0 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74  .** If P4 is not
2c7e0 20 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74 20 69   zero, then it i
2c7f0 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
2c800 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20 75 6e  values in the un
2c810 70 61 63 6b 65 64 0a 2a 2a 20 6b 65 79 20 6f 66  packed.** key of
2c820 20 72 65 67 28 50 32 29 2e 20 20 49 6e 20 74 68   reg(P2).  In th
2c830 61 74 20 63 61 73 65 2c 20 50 33 20 69 73 20 74  at case, P3 is t
2c840 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
2c850 66 69 72 73 74 20 72 65 67 69 73 74 65 72 0a 2a  first register.*
2c860 2a 20 66 6f 72 20 74 68 65 20 75 6e 70 61 63 6b  * for the unpack
2c870 65 64 20 6b 65 79 2e 20 20 54 68 65 20 61 76 61  ed key.  The ava
2c880 69 6c 61 62 69 6c 69 74 79 20 6f 66 20 74 68 65  ilability of the
2c890 20 75 6e 70 61 63 6b 65 64 20 6b 65 79 20 63 61   unpacked key ca
2c8a0 6e 20 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a 20 62  n sometimes.** b
2c8b0 65 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f  e an optimizatio
2c8c0 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68  n..**.** If P5 h
2c8d0 61 73 20 74 68 65 20 4f 50 46 4c 41 47 5f 41 50  as the OPFLAG_AP
2c8e0 50 45 4e 44 20 62 69 74 20 73 65 74 2c 20 74 68  PEND bit set, th
2c8f0 61 74 20 69 73 20 61 20 68 69 6e 74 20 74 6f 20  at is a hint to 
2c900 74 68 65 20 62 2d 74 72 65 65 20 6c 61 79 65 72  the b-tree layer
2c910 0a 2a 2a 20 74 68 61 74 20 74 68 69 73 20 69 6e  .** that this in
2c920 73 65 72 74 20 69 73 20 6c 69 6b 65 6c 79 20 74  sert is likely t
2c930 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64 2e 0a  o be an append..
2c940 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20  **.** If P5 has 
2c950 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  the OPFLAG_NCHAN
2c960 47 45 20 62 69 74 20 73 65 74 2c 20 74 68 65 6e  GE bit set, then
2c970 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e   the change coun
2c980 74 65 72 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d  ter is.** increm
2c990 65 6e 74 65 64 20 62 79 20 74 68 69 73 20 69 6e  ented by this in
2c9a0 73 74 72 75 63 74 69 6f 6e 2e 20 20 49 66 20 74  struction.  If t
2c9b0 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47  he OPFLAG_NCHANG
2c9c0 45 20 62 69 74 20 69 73 20 63 6c 65 61 72 2c 0a  E bit is clear,.
2c9d0 2a 2a 20 74 68 65 6e 20 74 68 65 20 63 68 61 6e  ** then the chan
2c9e0 67 65 20 63 6f 75 6e 74 65 72 20 69 73 20 75 6e  ge counter is un
2c9f0 63 68 61 6e 67 65 64 2e 0a 2a 2a 0a 2a 2a 20 49  changed..**.** I
2ca00 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 55 53 45  f the OPFLAG_USE
2ca10 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20  SEEKRESULT flag 
2ca20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20 74 68  of P5 is set, th
2ca30 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
2ca40 20 6d 69 67 68 74 0a 2a 2a 20 72 75 6e 20 66 61   might.** run fa
2ca50 73 74 65 72 20 62 79 20 61 76 6f 69 64 69 6e 67  ster by avoiding
2ca60 20 61 6e 20 75 6e 6e 65 63 65 73 73 61 72 79 20   an unnecessary 
2ca70 73 65 65 6b 20 6f 6e 20 63 75 72 73 6f 72 20 50  seek on cursor P
2ca80 31 2e 20 20 48 6f 77 65 76 65 72 2c 0a 2a 2a 20  1.  However,.** 
2ca90 74 68 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45  the OPFLAG_USESE
2caa0 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 6d 75  EKRESULT flag mu
2cab0 73 74 20 6f 6e 6c 79 20 62 65 20 73 65 74 20 69  st only be set i
2cac0 66 20 74 68 65 72 65 20 68 61 76 65 20 62 65 65  f there have bee
2cad0 6e 20 6e 6f 20 70 72 69 6f 72 0a 2a 2a 20 73 65  n no prior.** se
2cae0 65 6b 73 20 6f 6e 20 74 68 65 20 63 75 72 73 6f  eks on the curso
2caf0 72 20 6f 72 20 69 66 20 74 68 65 20 6d 6f 73 74  r or if the most
2cb00 20 72 65 63 65 6e 74 20 73 65 65 6b 20 75 73 65   recent seek use
2cb10 64 20 61 20 6b 65 79 20 65 71 75 69 76 61 6c 65  d a key equivale
2cb20 6e 74 0a 2a 2a 20 74 6f 20 50 32 2e 20 0a 2a 2a  nt.** to P2. .**
2cb30 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
2cb40 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  tion only works 
2cb50 66 6f 72 20 69 6e 64 69 63 65 73 2e 20 20 54 68  for indices.  Th
2cb60 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69 6e 73  e equivalent ins
2cb70 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20  truction.** for 
2cb80 74 61 62 6c 65 73 20 69 73 20 4f 50 5f 49 6e 73  tables is OP_Ins
2cb90 65 72 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ert..*/./* Opcod
2cba0 65 3a 20 53 6f 72 74 65 72 49 6e 73 65 72 74 20  e: SorterInsert 
2cbb0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
2cbc0 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
2cbd0 32 5d 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65  2].**.** Registe
2cbe0 72 20 50 32 20 68 6f 6c 64 73 20 61 6e 20 53 51  r P2 holds an SQ
2cbf0 4c 20 69 6e 64 65 78 20 6b 65 79 20 6d 61 64 65  L index key made
2cc00 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 4d 61   using the.** Ma
2cc10 6b 65 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63  keRecord instruc
2cc20 74 69 6f 6e 73 2e 20 20 54 68 69 73 20 6f 70 63  tions.  This opc
2cc30 6f 64 65 20 77 72 69 74 65 73 20 74 68 61 74 20  ode writes that 
2cc40 6b 65 79 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20  key.** into the 
2cc50 73 6f 72 74 65 72 20 50 31 2e 20 20 44 61 74 61  sorter P1.  Data
2cc60 20 66 6f 72 20 74 68 65 20 65 6e 74 72 79 20 69   for the entry i
2cc70 73 20 6e 69 6c 2e 0a 2a 2f 0a 63 61 73 65 20 4f  s nil..*/.case O
2cc80 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 3a 20  P_SorterInsert: 
2cc90 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a        /* in2 */.
2cca0 63 61 73 65 20 4f 50 5f 49 64 78 49 6e 73 65 72  case OP_IdxInser
2ccb0 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69  t: {        /* i
2ccc0 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  n2 */.  VdbeCurs
2ccd0 6f 72 20 2a 70 43 3b 0a 20 20 42 74 72 65 65 50  or *pC;.  BtreeP
2cce0 61 79 6c 6f 61 64 20 78 3b 0a 0a 20 20 61 73 73  ayload x;..  ass
2ccf0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
2cd00 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
2cd10 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
2cd20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
2cd30 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  ];.  sqlite3Vdbe
2cd40 49 6e 63 72 57 72 69 74 65 43 6f 75 6e 74 65 72  IncrWriteCounter
2cd50 28 70 2c 20 70 43 29 3b 0a 20 20 61 73 73 65 72  (p, pC);.  asser
2cd60 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
2cd70 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70  sert( isSorter(p
2cd80 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65  C)==(pOp->opcode
2cd90 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72  ==OP_SorterInser
2cda0 74 29 20 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26  t) );.  pIn2 = &
2cdb0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
2cdc0 20 61 73 73 65 72 74 28 20 70 49 6e 32 2d 3e 66   assert( pIn2->f
2cdd0 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20  lags & MEM_Blob 
2cde0 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  );.  if( pOp->p5
2cdf0 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47   & OPFLAG_NCHANG
2ce00 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b  E ) p->nChange++
2ce10 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
2ce20 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
2ce30 45 5f 42 54 52 45 45 20 7c 7c 20 70 4f 70 2d 3e  E_BTREE || pOp->
2ce40 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65  opcode==OP_Sorte
2ce50 72 49 6e 73 65 72 74 20 29 3b 0a 20 20 61 73 73  rInsert );.  ass
2ce60 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
2ce70 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 45 78  ==0 );.  rc = Ex
2ce80 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 3b 0a  pandBlob(pIn2);.
2ce90 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
2cea0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2ceb0 6f 72 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f  or;.  if( pOp->o
2cec0 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72  pcode==OP_Sorter
2ced0 49 6e 73 65 72 74 20 29 7b 0a 20 20 20 20 72 63  Insert ){.    rc
2cee0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f   = sqlite3VdbeSo
2cef0 72 74 65 72 57 72 69 74 65 28 70 43 2c 20 70 49  rterWrite(pC, pI
2cf00 6e 32 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  n2);.  }else{.  
2cf10 20 20 78 2e 6e 4b 65 79 20 3d 20 70 49 6e 32 2d    x.nKey = pIn2-
2cf20 3e 6e 3b 0a 20 20 20 20 78 2e 70 4b 65 79 20 3d  >n;.    x.pKey =
2cf30 20 70 49 6e 32 2d 3e 7a 3b 0a 20 20 20 20 78 2e   pIn2->z;.    x.
2cf40 61 4d 65 6d 20 3d 20 61 4d 65 6d 20 2b 20 70 4f  aMem = aMem + pO
2cf50 70 2d 3e 70 33 3b 0a 20 20 20 20 78 2e 6e 4d 65  p->p3;.    x.nMe
2cf60 6d 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 34  m = (u16)pOp->p4
2cf70 2e 69 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  .i;.    rc = sql
2cf80 69 74 65 33 42 74 72 65 65 49 6e 73 65 72 74 28  ite3BtreeInsert(
2cf90 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20  pC->uc.pCursor, 
2cfa0 26 78 2c 0a 20 20 20 20 20 20 20 20 20 28 70 4f  &x,.         (pO
2cfb0 70 2d 3e 70 35 20 26 20 28 4f 50 46 4c 41 47 5f  p->p5 & (OPFLAG_
2cfc0 41 50 50 45 4e 44 7c 4f 50 46 4c 41 47 5f 53 41  APPEND|OPFLAG_SA
2cfd0 56 45 50 4f 53 49 54 49 4f 4e 29 29 2c 20 0a 20  VEPOSITION)), . 
2cfe0 20 20 20 20 20 20 20 28 28 70 4f 70 2d 3e 70 35         ((pOp->p5
2cff0 20 26 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45   & OPFLAG_USESEE
2d000 4b 52 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73  KRESULT) ? pC->s
2d010 65 65 6b 52 65 73 75 6c 74 20 3a 20 30 29 0a 20  eekResult : 0). 
2d020 20 20 20 20 20 20 20 29 3b 0a 20 20 20 20 61 73         );.    as
2d030 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
2d040 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
2d050 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74     pC->cacheStat
2d060 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
2d070 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 29 20  ;.  }.  if( rc) 
2d080 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
2d090 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b  o_error;.  break
2d0a0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2d0b0 49 64 78 44 65 6c 65 74 65 20 50 31 20 50 32 20  IdxDelete P1 P2 
2d0c0 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
2d0d0 69 73 3a 20 6b 65 79 3d 72 5b 50 32 40 50 33 5d  is: key=r[P2@P3]
2d0e0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6e 74 65  .**.** The conte
2d0f0 6e 74 20 6f 66 20 50 33 20 72 65 67 69 73 74 65  nt of P3 registe
2d100 72 73 20 73 74 61 72 74 69 6e 67 20 61 74 20 72  rs starting at r
2d110 65 67 69 73 74 65 72 20 50 32 20 66 6f 72 6d 0a  egister P2 form.
2d120 2a 2a 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  ** an unpacked i
2d130 6e 64 65 78 20 6b 65 79 2e 20 54 68 69 73 20 6f  ndex key. This o
2d140 70 63 6f 64 65 20 72 65 6d 6f 76 65 73 20 74 68  pcode removes th
2d150 61 74 20 65 6e 74 72 79 20 66 72 6f 6d 20 74 68  at entry from th
2d160 65 20 0a 2a 2a 20 69 6e 64 65 78 20 6f 70 65 6e  e .** index open
2d170 65 64 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e  ed by cursor P1.
2d180 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 44  .*/.case OP_IdxD
2d190 65 6c 65 74 65 3a 20 7b 0a 20 20 56 64 62 65 43  elete: {.  VdbeC
2d1a0 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
2d1b0 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
2d1c0 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63  int res;.  Unpac
2d1d0 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20  kedRecord r;..  
2d1e0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
2d1f0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
2d200 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d  Op->p2>0 && pOp-
2d210 3e 70 32 2b 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d  >p2+pOp->p3<=(p-
2d220 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
2d230 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 61 73 73  rsor)+1 );.  ass
2d240 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
2d250 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
2d260 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
2d270 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
2d280 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
2d290 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
2d2a0 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
2d2b0 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
2d2c0 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 63 72   sqlite3VdbeIncr
2d2d0 57 72 69 74 65 43 6f 75 6e 74 65 72 28 70 2c 20  WriteCounter(p, 
2d2e0 70 43 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  pC);.  pCrsr = p
2d2f0 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20  C->uc.pCursor;. 
2d300 20 61 73 73 65 72 74 28 20 70 43 72 73 72 21 3d   assert( pCrsr!=
2d310 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
2d320 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20 20 72  Op->p5==0 );.  r
2d330 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e  .pKeyInfo = pC->
2d340 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 72 2e 6e 46  pKeyInfo;.  r.nF
2d350 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d  ield = (u16)pOp-
2d360 3e 70 33 3b 0a 20 20 72 2e 64 65 66 61 75 6c 74  >p3;.  r.default
2d370 5f 72 63 20 3d 20 30 3b 0a 20 20 72 2e 61 4d 65  _rc = 0;.  r.aMe
2d380 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  m = &aMem[pOp->p
2d390 32 5d 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  2];.  rc = sqlit
2d3a0 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
2d3b0 61 63 6b 65 64 28 70 43 72 73 72 2c 20 26 72 2c  acked(pCrsr, &r,
2d3c0 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20   0, 0, &res);.  
2d3d0 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
2d3e0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
2d3f0 3b 0a 20 20 69 66 28 20 72 65 73 3d 3d 30 20 29  ;.  if( res==0 )
2d400 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
2d410 65 33 42 74 72 65 65 44 65 6c 65 74 65 28 70 43  e3BtreeDelete(pC
2d420 72 73 72 2c 20 42 54 52 45 45 5f 41 55 58 44 45  rsr, BTREE_AUXDE
2d430 4c 45 54 45 29 3b 0a 20 20 20 20 69 66 28 20 72  LETE);.    if( r
2d440 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
2d450 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d  ue_to_error;.  }
2d460 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64  .  assert( pC->d
2d470 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
2d480 20 29 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   );.  pC->cacheS
2d490 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
2d4a0 41 4c 45 3b 0a 20 20 70 43 2d 3e 73 65 65 6b 52  ALE;.  pC->seekR
2d4b0 65 73 75 6c 74 20 3d 20 30 3b 0a 20 20 62 72 65  esult = 0;.  bre
2d4c0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2d4d0 3a 20 44 65 66 65 72 72 65 64 53 65 65 6b 20 50  : DeferredSeek P
2d4e0 31 20 2a 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53  1 * P3 P4 *.** S
2d4f0 79 6e 6f 70 73 69 73 3a 20 4d 6f 76 65 20 50 33  ynopsis: Move P3
2d500 20 74 6f 20 50 31 2e 72 6f 77 69 64 20 69 66 20   to P1.rowid if 
2d510 6e 65 65 64 65 64 0a 2a 2a 0a 2a 2a 20 50 31 20  needed.**.** P1 
2d520 69 73 20 61 6e 20 6f 70 65 6e 20 69 6e 64 65 78  is an open index
2d530 20 63 75 72 73 6f 72 20 61 6e 64 20 50 33 20 69   cursor and P3 i
2d540 73 20 61 20 63 75 72 73 6f 72 20 6f 6e 20 74 68  s a cursor on th
2d550 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 0a  e corresponding.
2d560 2a 2a 20 74 61 62 6c 65 2e 20 20 54 68 69 73 20  ** table.  This 
2d570 6f 70 63 6f 64 65 20 64 6f 65 73 20 61 20 64 65  opcode does a de
2d580 66 65 72 72 65 64 20 73 65 65 6b 20 6f 66 20 74  ferred seek of t
2d590 68 65 20 50 33 20 74 61 62 6c 65 20 63 75 72 73  he P3 table curs
2d5a0 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20 72 6f 77  or.** to the row
2d5b0 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e 64   that correspond
2d5c0 73 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74  s to the current
2d5d0 20 72 6f 77 20 6f 66 20 50 31 2e 0a 2a 2a 0a 2a   row of P1..**.*
2d5e0 2a 20 54 68 69 73 20 69 73 20 61 20 64 65 66 65  * This is a defe
2d5f0 72 72 65 64 20 73 65 65 6b 2e 20 20 4e 6f 74 68  rred seek.  Noth
2d600 69 6e 67 20 61 63 74 75 61 6c 6c 79 20 68 61 70  ing actually hap
2d610 70 65 6e 73 20 75 6e 74 69 6c 0a 2a 2a 20 74 68  pens until.** th
2d620 65 20 63 75 72 73 6f 72 20 69 73 20 75 73 65 64  e cursor is used
2d630 20 74 6f 20 72 65 61 64 20 61 20 72 65 63 6f 72   to read a recor
2d640 64 2e 20 20 54 68 61 74 20 77 61 79 2c 20 69 66  d.  That way, if
2d650 20 6e 6f 20 72 65 61 64 73 0a 2a 2a 20 6f 63 63   no reads.** occ
2d660 75 72 2c 20 6e 6f 20 75 6e 6e 65 63 65 73 73 61  ur, no unnecessa
2d670 72 79 20 49 2f 4f 20 68 61 70 70 65 6e 73 2e 0a  ry I/O happens..
2d680 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20  **.** P4 may be 
2d690 61 6e 20 61 72 72 61 79 20 6f 66 20 69 6e 74 65  an array of inte
2d6a0 67 65 72 73 20 28 74 79 70 65 20 50 34 5f 49 4e  gers (type P4_IN
2d6b0 54 41 52 52 41 59 29 20 63 6f 6e 74 61 69 6e 69  TARRAY) containi
2d6c0 6e 67 0a 2a 2a 20 6f 6e 65 20 65 6e 74 72 79 20  ng.** one entry 
2d6d0 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20  for each column 
2d6e0 69 6e 20 74 68 65 20 50 33 20 74 61 62 6c 65 2e  in the P3 table.
2d6f0 20 20 49 66 20 61 72 72 61 79 20 65 6e 74 72 79    If array entry
2d700 20 61 28 69 29 0a 2a 2a 20 69 73 20 6e 6f 6e 2d   a(i).** is non-
2d710 7a 65 72 6f 2c 20 74 68 65 6e 20 72 65 61 64 69  zero, then readi
2d720 6e 67 20 63 6f 6c 75 6d 6e 20 61 28 69 29 2d 31  ng column a(i)-1
2d730 20 66 72 6f 6d 20 63 75 72 73 6f 72 20 50 33 20   from cursor P3 
2d740 69 73 20 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e  is .** equivalen
2d750 74 20 74 6f 20 70 65 72 66 6f 72 6d 69 6e 67 20  t to performing 
2d760 74 68 65 20 64 65 66 65 72 72 65 64 20 73 65 65  the deferred see
2d770 6b 20 61 6e 64 20 74 68 65 6e 20 72 65 61 64 69  k and then readi
2d780 6e 67 20 63 6f 6c 75 6d 6e 20 69 20 0a 2a 2a 20  ng column i .** 
2d790 66 72 6f 6d 20 50 31 2e 20 20 54 68 69 73 20 69  from P1.  This i
2d7a0 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 73 74  nformation is st
2d7b0 6f 72 65 64 20 69 6e 20 50 33 20 61 6e 64 20 75  ored in P3 and u
2d7c0 73 65 64 20 74 6f 20 72 65 64 69 72 65 63 74 0a  sed to redirect.
2d7d0 2a 2a 20 72 65 61 64 73 20 61 67 61 69 6e 73 74  ** reads against
2d7e0 20 50 33 20 6f 76 65 72 20 74 6f 20 50 31 2c 20   P3 over to P1, 
2d7f0 74 68 75 73 20 70 6f 73 73 69 62 6c 79 20 61 76  thus possibly av
2d800 6f 69 64 69 6e 67 20 74 68 65 20 6e 65 65 64 20  oiding the need 
2d810 74 6f 0a 2a 2a 20 73 65 65 6b 20 61 6e 64 20 72  to.** seek and r
2d820 65 61 64 20 63 75 72 73 6f 72 20 50 33 2e 0a 2a  ead cursor P3..*
2d830 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  /./* Opcode: Idx
2d840 52 6f 77 69 64 20 50 31 20 50 32 20 2a 20 2a 20  Rowid P1 P2 * * 
2d850 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
2d860 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a  [P2]=rowid.**.**
2d870 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69   Write into regi
2d880 73 74 65 72 20 50 32 20 61 6e 20 69 6e 74 65 67  ster P2 an integ
2d890 65 72 20 77 68 69 63 68 20 69 73 20 74 68 65 20  er which is the 
2d8a0 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68  last entry in th
2d8b0 65 20 72 65 63 6f 72 64 20 61 74 0a 2a 2a 20 74  e record at.** t
2d8c0 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 69 6e  he end of the in
2d8d0 64 65 78 20 6b 65 79 20 70 6f 69 6e 74 65 64 20  dex key pointed 
2d8e0 74 6f 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e  to by cursor P1.
2d8f0 20 20 54 68 69 73 20 69 6e 74 65 67 65 72 20 73    This integer s
2d900 68 6f 75 6c 64 20 62 65 0a 2a 2a 20 74 68 65 20  hould be.** the 
2d910 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61 62  rowid of the tab
2d920 6c 65 20 65 6e 74 72 79 20 74 6f 20 77 68 69 63  le entry to whic
2d930 68 20 74 68 69 73 20 69 6e 64 65 78 20 65 6e 74  h this index ent
2d940 72 79 20 70 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a  ry points..**.**
2d950 20 53 65 65 20 61 6c 73 6f 3a 20 52 6f 77 69 64   See also: Rowid
2d960 2c 20 4d 61 6b 65 52 65 63 6f 72 64 2e 0a 2a 2f  , MakeRecord..*/
2d970 0a 63 61 73 65 20 4f 50 5f 44 65 66 65 72 72 65  .case OP_Deferre
2d980 64 53 65 65 6b 3a 0a 63 61 73 65 20 4f 50 5f 49  dSeek:.case OP_I
2d990 64 78 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20  dxRowid: {      
2d9a0 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
2d9b0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
2d9c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
2d9d0 20 54 68 65 20 50 31 20 69 6e 64 65 78 20 63 75   The P1 index cu
2d9e0 72 73 6f 72 20 2a 2f 0a 20 20 56 64 62 65 43 75  rsor */.  VdbeCu
2d9f0 72 73 6f 72 20 2a 70 54 61 62 43 75 72 3b 20 20  rsor *pTabCur;  
2da00 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50 32 20        /* The P2 
2da10 74 61 62 6c 65 20 63 75 72 73 6f 72 20 28 4f 50  table cursor (OP
2da20 5f 44 65 66 65 72 72 65 64 53 65 65 6b 20 6f 6e  _DeferredSeek on
2da30 6c 79 29 20 2a 2f 0a 20 20 69 36 34 20 72 6f 77  ly) */.  i64 row
2da40 69 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  id;             
2da50 20 20 20 20 20 2f 2a 20 52 6f 77 69 64 20 74 68       /* Rowid th
2da60 61 74 20 50 31 20 63 75 72 72 65 6e 74 20 70 6f  at P1 current po
2da70 69 6e 74 73 20 74 6f 20 2a 2f 0a 0a 20 20 61 73  ints to */..  as
2da80 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
2da90 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
2daa0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
2dab0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
2dac0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
2dad0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
2dae0 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
2daf0 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
2db00 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63    assert( pC->uc
2db10 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  .pCursor!=0 );. 
2db20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
2db30 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 61 73 73  able==0 );.  ass
2db40 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
2db50 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
2db60 61 73 73 65 72 74 28 20 21 70 43 2d 3e 6e 75 6c  assert( !pC->nul
2db70 6c 52 6f 77 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  lRow || pOp->opc
2db80 6f 64 65 3d 3d 4f 50 5f 49 64 78 52 6f 77 69 64  ode==OP_IdxRowid
2db90 20 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 49 64   );..  /* The Id
2dba0 78 52 6f 77 69 64 20 61 6e 64 20 53 65 65 6b 20  xRowid and Seek 
2dbb0 6f 70 63 6f 64 65 73 20 61 72 65 20 63 6f 6d 62  opcodes are comb
2dbc0 69 6e 65 64 20 62 65 63 61 75 73 65 20 6f 66 20  ined because of 
2dbd0 74 68 65 20 63 6f 6d 6d 6f 6e 61 6c 69 74 79 0a  the commonality.
2dbe0 20 20 2a 2a 20 6f 66 20 73 71 6c 69 74 65 33 56    ** of sqlite3V
2dbf0 64 62 65 43 75 72 73 6f 72 52 65 73 74 6f 72 65  dbeCursorRestore
2dc00 28 29 20 61 6e 64 20 73 71 6c 69 74 65 33 56 64  () and sqlite3Vd
2dc10 62 65 49 64 78 52 6f 77 69 64 28 29 2e 20 2a 2f  beIdxRowid(). */
2dc20 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
2dc30 64 62 65 43 75 72 73 6f 72 52 65 73 74 6f 72 65  dbeCursorRestore
2dc40 28 70 43 29 3b 0a 0a 20 20 2f 2a 20 73 71 6c 69  (pC);..  /* sqli
2dc50 74 65 33 56 62 65 43 75 72 73 6f 72 52 65 73 74  te3VbeCursorRest
2dc60 6f 72 65 28 29 20 63 61 6e 20 6f 6e 6c 79 20 66  ore() can only f
2dc70 61 69 6c 20 69 66 20 74 68 65 20 72 65 63 6f 72  ail if the recor
2dc80 64 20 68 61 73 20 62 65 65 6e 20 64 65 6c 65 74  d has been delet
2dc90 65 64 0a 20 20 2a 2a 20 6f 75 74 20 66 72 6f 6d  ed.  ** out from
2dca0 20 75 6e 64 65 72 20 74 68 65 20 63 75 72 73 6f   under the curso
2dcb0 72 2e 20 20 54 68 61 74 20 77 69 6c 6c 20 6e 65  r.  That will ne
2dcc0 76 65 72 20 68 61 70 70 65 6e 73 20 66 6f 72 20  ver happens for 
2dcd0 61 6e 20 49 64 78 52 6f 77 69 64 0a 20 20 2a 2a  an IdxRowid.  **
2dce0 20 6f 72 20 53 65 65 6b 20 6f 70 63 6f 64 65 20   or Seek opcode 
2dcf0 2a 2f 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72  */.  if( NEVER(r
2dd00 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 20  c!=SQLITE_OK) ) 
2dd10 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
2dd20 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 69 66 28 20  o_error;..  if( 
2dd30 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a  !pC->nullRow ){.
2dd40 20 20 20 20 72 6f 77 69 64 20 3d 20 30 3b 20 20      rowid = 0;  
2dd50 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20  /* Not needed.  
2dd60 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 69 6c  Only used to sil
2dd70 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20  ence a warning. 
2dd80 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  */.    rc = sqli
2dd90 74 65 33 56 64 62 65 49 64 78 52 6f 77 69 64 28  te3VdbeIdxRowid(
2dda0 64 62 2c 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  db, pC->uc.pCurs
2ddb0 6f 72 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20 20  or, &rowid);.   
2ddc0 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
2ddd0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  OK ){.      goto
2dde0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2ddf0 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  ror;.    }.    i
2de00 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
2de10 4f 50 5f 44 65 66 65 72 72 65 64 53 65 65 6b 20  OP_DeferredSeek 
2de20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
2de30 20 70 4f 70 2d 3e 70 33 3e 3d 30 20 26 26 20 70   pOp->p3>=0 && p
2de40 4f 70 2d 3e 70 33 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p3<p->nCurso
2de50 72 20 29 3b 0a 20 20 20 20 20 20 70 54 61 62 43  r );.      pTabC
2de60 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  ur = p->apCsr[pO
2de70 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 61 73  p->p3];.      as
2de80 73 65 72 74 28 20 70 54 61 62 43 75 72 21 3d 30  sert( pTabCur!=0
2de90 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
2dea0 28 20 70 54 61 62 43 75 72 2d 3e 65 43 75 72 54  ( pTabCur->eCurT
2deb0 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
2dec0 45 45 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  EE );.      asse
2ded0 72 74 28 20 70 54 61 62 43 75 72 2d 3e 75 63 2e  rt( pTabCur->uc.
2dee0 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20  pCursor!=0 );.  
2def0 20 20 20 20 61 73 73 65 72 74 28 20 70 54 61 62      assert( pTab
2df00 43 75 72 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a  Cur->isTable );.
2df10 20 20 20 20 20 20 70 54 61 62 43 75 72 2d 3e 6e        pTabCur->n
2df20 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20  ullRow = 0;.    
2df30 20 20 70 54 61 62 43 75 72 2d 3e 6d 6f 76 65 74    pTabCur->movet
2df40 6f 54 61 72 67 65 74 20 3d 20 72 6f 77 69 64 3b  oTarget = rowid;
2df50 0a 20 20 20 20 20 20 70 54 61 62 43 75 72 2d 3e  .      pTabCur->
2df60 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
2df70 20 31 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   1;.      assert
2df80 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
2df90 34 5f 49 4e 54 41 52 52 41 59 20 7c 7c 20 70 4f  4_INTARRAY || pO
2dfa0 70 2d 3e 70 34 2e 61 69 3d 3d 30 20 29 3b 0a 20  p->p4.ai==0 );. 
2dfb0 20 20 20 20 20 70 54 61 62 43 75 72 2d 3e 61 41       pTabCur->aA
2dfc0 6c 74 4d 61 70 20 3d 20 70 4f 70 2d 3e 70 34 2e  ltMap = pOp->p4.
2dfd0 61 69 3b 0a 20 20 20 20 20 20 70 54 61 62 43 75  ai;.      pTabCu
2dfe0 72 2d 3e 70 41 6c 74 43 75 72 73 6f 72 20 3d 20  r->pAltCursor = 
2dff0 70 43 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  pC;.    }else{. 
2e000 20 20 20 20 20 70 4f 75 74 20 3d 20 6f 75 74 32       pOut = out2
2e010 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
2e020 70 29 3b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e  p);.      pOut->
2e030 75 2e 69 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20  u.i = rowid;.   
2e040 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
2e050 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
2e060 6f 64 65 3d 3d 4f 50 5f 49 64 78 52 6f 77 69 64  ode==OP_IdxRowid
2e070 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   );.    sqlite3V
2e080 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 26 61  dbeMemSetNull(&a
2e090 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20  Mem[pOp->p2]);. 
2e0a0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
2e0b0 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 47 45 20  * Opcode: IdxGE 
2e0c0 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
2e0d0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
2e0e0 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54  r[P3@P4].**.** T
2e0f0 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76  he P4 register v
2e100 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20  alues beginning 
2e110 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20  with P3 form an 
2e120 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a  unpacked index .
2e130 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74  ** key that omit
2e140 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  s the PRIMARY KE
2e150 59 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73  Y.  Compare this
2e160 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e   key value again
2e170 73 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a  st the index .**
2e180 20 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72   that P1 is curr
2e190 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74  ently pointing t
2e1a0 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20  o, ignoring the 
2e1b0 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52  PRIMARY KEY or R
2e1c0 4f 57 49 44 20 0a 2a 2a 20 66 69 65 6c 64 73 20  OWID .** fields 
2e1d0 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2a 0a 2a  at the end..**.*
2e1e0 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65  * If the P1 inde
2e1f0 78 20 65 6e 74 72 79 20 69 73 20 67 72 65 61 74  x entry is great
2e200 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  er than or equal
2e210 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75   to the key valu
2e220 65 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74  e.** then jump t
2e230 6f 20 50 32 2e 20 20 4f 74 68 65 72 77 69 73 65  o P2.  Otherwise
2e240 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
2e250 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
2e260 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  ction..*/./* Opc
2e270 6f 64 65 3a 20 49 64 78 47 54 20 50 31 20 50 32  ode: IdxGT P1 P2
2e280 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
2e290 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
2e2a0 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34  P4].**.** The P4
2e2b0 20 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73   register values
2e2c0 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
2e2d0 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63  P3 form an unpac
2e2e0 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65  ked index .** ke
2e2f0 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65  y that omits the
2e300 20 50 52 49 4d 41 52 59 20 4b 45 59 2e 20 20 43   PRIMARY KEY.  C
2e310 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20  ompare this key 
2e320 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68  value against th
2e330 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74  e index .** that
2e340 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
2e350 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67   pointing to, ig
2e360 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41  noring the PRIMA
2e370 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 20  RY KEY or ROWID 
2e380 0a 2a 2a 20 66 69 65 6c 64 73 20 61 74 20 74 68  .** fields at th
2e390 65 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  e end..**.** If 
2e3a0 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74  the P1 index ent
2e3b0 72 79 20 69 73 20 67 72 65 61 74 65 72 20 74 68  ry is greater th
2e3c0 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  an the key value
2e3d0 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  .** then jump to
2e3e0 20 50 32 2e 20 20 4f 74 68 65 72 77 69 73 65 20   P2.  Otherwise 
2e3f0 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
2e400 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
2e410 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tion..*/./* Opco
2e420 64 65 3a 20 49 64 78 4c 54 20 50 31 20 50 32 20  de: IdxLT P1 P2 
2e430 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
2e440 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
2e450 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20  4].**.** The P4 
2e460 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20  register values 
2e470 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50  beginning with P
2e480 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  3 form an unpack
2e490 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79  ed index .** key
2e4a0 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20   that omits the 
2e4b0 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52  PRIMARY KEY or R
2e4c0 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72 65 20 74  OWID.  Compare t
2e4d0 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67  his key value ag
2e4e0 61 69 6e 73 74 0a 2a 2a 20 74 68 65 20 69 6e 64  ainst.** the ind
2e4f0 65 78 20 74 68 61 74 20 50 31 20 69 73 20 63 75  ex that P1 is cu
2e500 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67  rrently pointing
2e510 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68   to, ignoring th
2e520 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72  e PRIMARY KEY or
2e530 0a 2a 2a 20 52 4f 57 49 44 20 6f 6e 20 74 68 65  .** ROWID on the
2e540 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a   P1 index..**.**
2e550 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78   If the P1 index
2e560 20 65 6e 74 72 79 20 69 73 20 6c 65 73 73 20 74   entry is less t
2e570 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75  han the key valu
2e580 65 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  e then jump to P
2e590 32 2e 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 20  2..** Otherwise 
2e5a0 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
2e5b0 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
2e5c0 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tion..*/./* Opco
2e5d0 64 65 3a 20 49 64 78 4c 45 20 50 31 20 50 32 20  de: IdxLE P1 P2 
2e5e0 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
2e5f0 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
2e600 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20  4].**.** The P4 
2e610 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20  register values 
2e620 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50  beginning with P
2e630 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  3 form an unpack
2e640 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79  ed index .** key
2e650 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20   that omits the 
2e660 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52  PRIMARY KEY or R
2e670 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72 65 20 74  OWID.  Compare t
2e680 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67  his key value ag
2e690 61 69 6e 73 74 0a 2a 2a 20 74 68 65 20 69 6e 64  ainst.** the ind
2e6a0 65 78 20 74 68 61 74 20 50 31 20 69 73 20 63 75  ex that P1 is cu
2e6b0 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67  rrently pointing
2e6c0 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68   to, ignoring th
2e6d0 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72  e PRIMARY KEY or
2e6e0 0a 2a 2a 20 52 4f 57 49 44 20 6f 6e 20 74 68 65  .** ROWID on the
2e6f0 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a   P1 index..**.**
2e700 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78   If the P1 index
2e710 20 65 6e 74 72 79 20 69 73 20 6c 65 73 73 20 74   entry is less t
2e720 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
2e730 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20 74 68  the key value th
2e740 65 6e 20 6a 75 6d 70 0a 2a 2a 20 74 6f 20 50 32  en jump.** to P2
2e750 2e 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c  . Otherwise fall
2e760 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
2e770 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
2e780 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78  ..*/.case OP_Idx
2e790 4c 45 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  LE:          /* 
2e7a0 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  jump */.case OP_
2e7b0 49 64 78 47 54 3a 20 20 20 20 20 20 20 20 20 20  IdxGT:          
2e7c0 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20  /* jump */.case 
2e7d0 4f 50 5f 49 64 78 4c 54 3a 20 20 20 20 20 20 20  OP_IdxLT:       
2e7e0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61     /* jump */.ca
2e7f0 73 65 20 4f 50 5f 49 64 78 47 45 3a 20 20 7b 20  se OP_IdxGE:  { 
2e800 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
2e810 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
2e820 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  C;.  int res;.  
2e830 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72  UnpackedRecord r
2e840 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
2e850 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
2e860 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
2e870 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
2e880 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
2e890 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
2e8a0 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 4f 72  assert( pC->isOr
2e8b0 64 65 72 65 64 20 29 3b 0a 20 20 61 73 73 65 72  dered );.  asser
2e8c0 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
2e8d0 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
2e8e0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
2e8f0 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 29 3b 0a  uc.pCursor!=0);.
2e900 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65    assert( pC->de
2e910 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20  ferredMoveto==0 
2e920 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
2e930 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e  ->p5==0 || pOp->
2e940 70 35 3d 3d 31 20 29 3b 0a 20 20 61 73 73 65 72  p5==1 );.  asser
2e950 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
2e960 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 72 2e  P4_INT32 );.  r.
2e970 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70  pKeyInfo = pC->p
2e980 4b 65 79 49 6e 66 6f 3b 0a 20 20 72 2e 6e 46 69  KeyInfo;.  r.nFi
2e990 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e  eld = (u16)pOp->
2e9a0 70 34 2e 69 3b 0a 20 20 69 66 28 20 70 4f 70 2d  p4.i;.  if( pOp-
2e9b0 3e 6f 70 63 6f 64 65 3c 4f 50 5f 49 64 78 4c 54  >opcode<OP_IdxLT
2e9c0 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
2e9d0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
2e9e0 49 64 78 4c 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70  IdxLE || pOp->op
2e9f0 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29  code==OP_IdxGT )
2ea00 3b 0a 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f  ;.    r.default_
2ea10 72 63 20 3d 20 2d 31 3b 0a 20 20 7d 65 6c 73 65  rc = -1;.  }else
2ea20 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
2ea30 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  p->opcode==OP_Id
2ea40 78 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  xGE || pOp->opco
2ea50 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 3b 0a  de==OP_IdxLT );.
2ea60 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63      r.default_rc
2ea70 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 72 2e 61 4d   = 0;.  }.  r.aM
2ea80 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  em = &aMem[pOp->
2ea90 70 33 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  p3];.#ifdef SQLI
2eaa0 54 45 5f 44 45 42 55 47 0a 20 20 7b 0a 20 20 20  TE_DEBUG.  {.   
2eab0 20 69 6e 74 20 69 3b 0a 20 20 20 20 66 6f 72 28   int i;.    for(
2eac0 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b  i=0; i<r.nField;
2ead0 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 73 73   i++){.      ass
2eae0 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
2eaf0 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 0a 20  &r.aMem[i]) );. 
2eb00 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52       REGISTER_TR
2eb10 41 43 45 28 70 4f 70 2d 3e 70 33 2b 69 2c 20 26  ACE(pOp->p3+i, &
2eb20 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 2b 69 5d 29  aMem[pOp->p3+i])
2eb30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64  ;.    }.  }.#end
2eb40 69 66 0a 20 20 72 65 73 20 3d 20 30 3b 20 20 2f  if.  res = 0;  /
2eb50 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f  * Not needed.  O
2eb60 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 69 6c 65  nly used to sile
2eb70 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a  nce a warning. *
2eb80 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  /.  rc = sqlite3
2eb90 56 64 62 65 49 64 78 4b 65 79 43 6f 6d 70 61 72  VdbeIdxKeyCompar
2eba0 65 28 64 62 2c 20 70 43 2c 20 26 72 2c 20 26 72  e(db, pC, &r, &r
2ebb0 65 73 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  es);.  assert( (
2ebc0 4f 50 5f 49 64 78 4c 45 26 31 29 3d 3d 28 4f 50  OP_IdxLE&1)==(OP
2ebd0 5f 49 64 78 4c 54 26 31 29 20 26 26 20 28 4f 50  _IdxLT&1) && (OP
2ebe0 5f 49 64 78 47 45 26 31 29 3d 3d 28 4f 50 5f 49  _IdxGE&1)==(OP_I
2ebf0 64 78 47 54 26 31 29 20 29 3b 0a 20 20 69 66 28  dxGT&1) );.  if(
2ec00 20 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 26 31 29   (pOp->opcode&1)
2ec10 3d 3d 28 4f 50 5f 49 64 78 4c 54 26 31 29 20 29  ==(OP_IdxLT&1) )
2ec20 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
2ec30 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  p->opcode==OP_Id
2ec40 78 4c 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  xLE || pOp->opco
2ec50 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 3b 0a  de==OP_IdxLT );.
2ec60 20 20 20 20 72 65 73 20 3d 20 2d 72 65 73 3b 0a      res = -res;.
2ec70 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
2ec80 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
2ec90 3d 3d 4f 50 5f 49 64 78 47 45 20 7c 7c 20 70 4f  ==OP_IdxGE || pO
2eca0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  p->opcode==OP_Id
2ecb0 78 47 54 20 29 3b 0a 20 20 20 20 72 65 73 2b 2b  xGT );.    res++
2ecc0 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42 72 61 6e  ;.  }.  VdbeBran
2ecd0 63 68 54 61 6b 65 6e 28 72 65 73 3e 30 2c 32 29  chTaken(res>0,2)
2ece0 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
2ecf0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
2ed00 72 72 6f 72 3b 0a 20 20 69 66 28 20 72 65 73 3e  rror;.  if( res>
2ed10 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  0 ) goto jump_to
2ed20 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  _p2;.  break;.}.
2ed30 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 73 74  ./* Opcode: Dest
2ed40 72 6f 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a  roy P1 P2 P3 * *
2ed50 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6e  .**.** Delete an
2ed60 20 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65   entire database
2ed70 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
2ed80 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20  whose root page 
2ed90 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  in the database.
2eda0 2a 2a 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e  ** file is given
2edb0 20 62 79 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68   by P1..**.** Th
2edc0 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64 65  e table being de
2edd0 73 74 72 6f 79 65 64 20 69 73 20 69 6e 20 74 68  stroyed is in th
2ede0 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
2edf0 66 69 6c 65 20 69 66 20 50 33 3d 3d 30 2e 20 20  file if P3==0.  
2ee00 49 66 0a 2a 2a 20 50 33 3d 3d 31 20 74 68 65 6e  If.** P3==1 then
2ee10 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65   the table to be
2ee20 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65   clear is in the
2ee30 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62   auxiliary datab
2ee40 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74  ase file.** that
2ee50 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72   is used to stor
2ee60 65 20 74 61 62 6c 65 73 20 63 72 65 61 74 65 20  e tables create 
2ee70 75 73 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d  using CREATE TEM
2ee80 50 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a  PORARY TABLE..**
2ee90 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41 43 55 55  .** If AUTOVACUU
2eea0 4d 20 69 73 20 65 6e 61 62 6c 65 64 20 74 68 65  M is enabled the
2eeb0 6e 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65  n it is possible
2eec0 20 74 68 61 74 20 61 6e 6f 74 68 65 72 20 72 6f   that another ro
2eed0 6f 74 20 70 61 67 65 0a 2a 2a 20 6d 69 67 68 74  ot page.** might
2eee0 20 62 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74   be moved into t
2eef0 68 65 20 6e 65 77 6c 79 20 64 65 6c 65 74 65 64  he newly deleted
2ef00 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 6f 72   root page in or
2ef10 64 65 72 20 74 6f 20 6b 65 65 70 20 61 6c 6c 0a  der to keep all.
2ef20 2a 2a 20 72 6f 6f 74 20 70 61 67 65 73 20 63 6f  ** root pages co
2ef30 6e 74 69 67 75 6f 75 73 20 61 74 20 74 68 65 20  ntiguous at the 
2ef40 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65  beginning of the
2ef50 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 65 20   database.  The 
2ef60 66 6f 72 6d 65 72 0a 2a 2a 20 76 61 6c 75 65 20  former.** value 
2ef70 6f 66 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65  of the root page
2ef80 20 74 68 61 74 20 6d 6f 76 65 64 20 2d 20 69 74   that moved - it
2ef90 73 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20 74  s value before t
2efa0 68 65 20 6d 6f 76 65 20 6f 63 63 75 72 72 65 64  he move occurred
2efb0 20 2d 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64 20   -.** is stored 
2efc0 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 20  in register P2. 
2efd0 49 66 20 6e 6f 20 70 61 67 65 20 6d 6f 76 65 6d  If no page movem
2efe0 65 6e 74 20 77 61 73 20 72 65 71 75 69 72 65 64  ent was required
2eff0 20 28 62 65 63 61 75 73 65 20 74 68 65 0a 2a 2a   (because the.**
2f000 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64 72 6f   table being dro
2f010 70 70 65 64 20 77 61 73 20 61 6c 72 65 61 64 79  pped was already
2f020 20 74 68 65 20 6c 61 73 74 20 6f 6e 65 20 69 6e   the last one in
2f030 20 74 68 65 20 64 61 74 61 62 61 73 65 29 20 74   the database) t
2f040 68 65 6e 20 61 20 0a 2a 2a 20 7a 65 72 6f 20 69  hen a .** zero i
2f050 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
2f060 73 74 65 72 20 50 32 2e 20 20 49 66 20 41 55 54  ster P2.  If AUT
2f070 4f 56 41 43 55 55 4d 20 69 73 20 64 69 73 61 62  OVACUUM is disab
2f080 6c 65 64 20 74 68 65 6e 20 61 20 7a 65 72 6f 20  led then a zero 
2f090 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64 20 69 6e  .** is stored in
2f0a0 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
2f0b0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
2f0c0 74 68 72 6f 77 73 20 61 6e 20 65 72 72 6f 72 20  throws an error 
2f0d0 69 66 20 74 68 65 72 65 20 61 72 65 20 61 6e 79  if there are any
2f0e0 20 61 63 74 69 76 65 20 72 65 61 64 65 72 20 56   active reader V
2f0f0 4d 73 20 77 68 65 6e 0a 2a 2a 20 69 74 20 69 73  Ms when.** it is
2f100 20 69 6e 76 6f 6b 65 64 2e 20 54 68 69 73 20 69   invoked. This i
2f110 73 20 64 6f 6e 65 20 74 6f 20 61 76 6f 69 64 20  s done to avoid 
2f120 74 68 65 20 64 69 66 66 69 63 75 6c 74 79 20 61  the difficulty a
2f130 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 0a  ssociated with .
2f140 2a 2a 20 75 70 64 61 74 69 6e 67 20 65 78 69 73  ** updating exis
2f150 74 69 6e 67 20 63 75 72 73 6f 72 73 20 77 68 65  ting cursors whe
2f160 6e 20 61 20 72 6f 6f 74 20 70 61 67 65 20 69 73  n a root page is
2f170 20 6d 6f 76 65 64 20 69 6e 20 61 6e 20 41 55 54   moved in an AUT
2f180 4f 56 41 43 55 55 4d 20 0a 2a 2a 20 64 61 74 61  OVACUUM .** data
2f190 62 61 73 65 2e 20 54 68 69 73 20 65 72 72 6f 72  base. This error
2f1a0 20 69 73 20 74 68 72 6f 77 6e 20 65 76 65 6e 20   is thrown even 
2f1b0 69 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  if the database 
2f1c0 69 73 20 6e 6f 74 20 61 6e 20 41 55 54 4f 56 41  is not an AUTOVA
2f1d0 43 55 55 4d 20 0a 2a 2a 20 64 62 20 69 6e 20 6f  CUUM .** db in o
2f1e0 72 64 65 72 20 74 6f 20 61 76 6f 69 64 20 69 6e  rder to avoid in
2f1f0 74 72 6f 64 75 63 69 6e 67 20 61 6e 20 69 6e 63  troducing an inc
2f200 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 62 65 74  ompatibility bet
2f210 77 65 65 6e 20 61 75 74 6f 76 61 63 75 75 6d 20  ween autovacuum 
2f220 0a 2a 2a 20 61 6e 64 20 6e 6f 6e 2d 61 75 74 6f  .** and non-auto
2f230 76 61 63 75 75 6d 20 6d 6f 64 65 73 2e 0a 2a 2a  vacuum modes..**
2f240 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43 6c  .** See also: Cl
2f250 65 61 72 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  ear.*/.case OP_D
2f260 65 73 74 72 6f 79 3a 20 7b 20 20 20 20 20 2f 2a  estroy: {     /*
2f270 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20 69   out2 */.  int i
2f280 4d 6f 76 65 64 3b 0a 20 20 69 6e 74 20 69 44 62  Moved;.  int iDb
2f290 3b 0a 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  ;..  sqlite3Vdbe
2f2a0 49 6e 63 72 57 72 69 74 65 43 6f 75 6e 74 65 72  IncrWriteCounter
2f2b0 28 70 2c 20 30 29 3b 0a 20 20 61 73 73 65 72 74  (p, 0);.  assert
2f2c0 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
2f2d0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
2f2e0 70 2d 3e 70 31 3e 31 20 29 3b 0a 20 20 70 4f 75  p->p1>1 );.  pOu
2f2f0 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
2f300 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f  se(p, pOp);.  pO
2f310 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
2f320 4e 75 6c 6c 3b 0a 20 20 69 66 28 20 64 62 2d 3e  Null;.  if( db->
2f330 6e 56 64 62 65 52 65 61 64 20 3e 20 64 62 2d 3e  nVdbeRead > db->
2f340 6e 56 44 65 73 74 72 6f 79 2b 31 20 29 7b 0a 20  nVDestroy+1 ){. 
2f350 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c     rc = SQLITE_L
2f360 4f 43 4b 45 44 3b 0a 20 20 20 20 70 2d 3e 65 72  OCKED;.    p->er
2f370 72 6f 72 41 63 74 69 6f 6e 20 3d 20 4f 45 5f 41  rorAction = OE_A
2f380 62 6f 72 74 3b 0a 20 20 20 20 67 6f 74 6f 20 61  bort;.    goto a
2f390 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
2f3a0 72 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  r;.  }else{.    
2f3b0 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  iDb = pOp->p3;. 
2f3c0 20 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73     assert( DbMas
2f3d0 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61  kTest(p->btreeMa
2f3e0 73 6b 2c 20 69 44 62 29 20 29 3b 0a 20 20 20 20  sk, iDb) );.    
2f3f0 69 4d 6f 76 65 64 20 3d 20 30 3b 20 20 2f 2a 20  iMoved = 0;  /* 
2f400 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c  Not needed.  Onl
2f410 79 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77  y to silence a w
2f420 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 72  arning. */.    r
2f430 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
2f440 44 72 6f 70 54 61 62 6c 65 28 64 62 2d 3e 61 44  DropTable(db->aD
2f450 62 5b 69 44 62 5d 2e 70 42 74 2c 20 70 4f 70 2d  b[iDb].pBt, pOp-
2f460 3e 70 31 2c 20 26 69 4d 6f 76 65 64 29 3b 0a 20  >p1, &iMoved);. 
2f470 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d     pOut->flags =
2f480 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f   MEM_Int;.    pO
2f490 75 74 2d 3e 75 2e 69 20 3d 20 69 4d 6f 76 65 64  ut->u.i = iMoved
2f4a0 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67  ;.    if( rc ) g
2f4b0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
2f4c0 5f 65 72 72 6f 72 3b 0a 23 69 66 6e 64 65 66 20  _error;.#ifndef 
2f4d0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
2f4e0 56 41 43 55 55 4d 0a 20 20 20 20 69 66 28 20 69  VACUUM.    if( i
2f4f0 4d 6f 76 65 64 21 3d 30 20 29 7b 0a 20 20 20 20  Moved!=0 ){.    
2f500 20 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67    sqlite3RootPag
2f510 65 4d 6f 76 65 64 28 64 62 2c 20 69 44 62 2c 20  eMoved(db, iDb, 
2f520 69 4d 6f 76 65 64 2c 20 70 4f 70 2d 3e 70 31 29  iMoved, pOp->p1)
2f530 3b 0a 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 4f  ;.      /* All O
2f540 50 5f 44 65 73 74 72 6f 79 20 6f 70 65 72 61 74  P_Destroy operat
2f550 69 6f 6e 73 20 6f 63 63 75 72 20 6f 6e 20 74 68  ions occur on th
2f560 65 20 73 61 6d 65 20 62 74 72 65 65 20 2a 2f 0a  e same btree */.
2f570 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72 65        assert( re
2f580 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74  setSchemaOnFault
2f590 3d 3d 30 20 7c 7c 20 72 65 73 65 74 53 63 68 65  ==0 || resetSche
2f5a0 6d 61 4f 6e 46 61 75 6c 74 3d 3d 69 44 62 2b 31  maOnFault==iDb+1
2f5b0 20 29 3b 0a 20 20 20 20 20 20 72 65 73 65 74 53   );.      resetS
2f5c0 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 69  chemaOnFault = i
2f5d0 44 62 2b 31 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  Db+1;.    }.#end
2f5e0 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  if.  }.  break;.
2f5f0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c  }../* Opcode: Cl
2f600 65 61 72 20 50 31 20 50 32 20 50 33 0a 2a 2a 0a  ear P1 P2 P3.**.
2f610 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c 20 63 6f  ** Delete all co
2f620 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 20 64 61  ntents of the da
2f630 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
2f640 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74  index whose root
2f650 20 70 61 67 65 0a 2a 2a 20 69 6e 20 74 68 65 20   page.** in the 
2f660 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 73  database file is
2f670 20 67 69 76 65 6e 20 62 79 20 50 31 2e 20 20 42   given by P1.  B
2f680 75 74 2c 20 75 6e 6c 69 6b 65 20 44 65 73 74 72  ut, unlike Destr
2f690 6f 79 2c 20 64 6f 20 6e 6f 74 0a 2a 2a 20 72 65  oy, do not.** re
2f6a0 6d 6f 76 65 20 74 68 65 20 74 61 62 6c 65 20 6f  move the table o
2f6b0 72 20 69 6e 64 65 78 20 66 72 6f 6d 20 74 68 65  r index from the
2f6c0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
2f6d0 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65 20  **.** The table 
2f6e0 62 65 69 6e 67 20 63 6c 65 61 72 20 69 73 20 69  being clear is i
2f6f0 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
2f700 61 73 65 20 66 69 6c 65 20 69 66 20 50 32 3d 3d  ase file if P2==
2f710 30 2e 20 20 49 66 0a 2a 2a 20 50 32 3d 3d 31 20  0.  If.** P2==1 
2f720 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 74  then the table t
2f730 6f 20 62 65 20 63 6c 65 61 72 20 69 73 20 69 6e  o be clear is in
2f740 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20 64   the auxiliary d
2f750 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20  atabase file.** 
2f760 74 68 61 74 20 69 73 20 75 73 65 64 20 74 6f 20  that is used to 
2f770 73 74 6f 72 65 20 74 61 62 6c 65 73 20 63 72 65  store tables cre
2f780 61 74 65 20 75 73 69 6e 67 20 43 52 45 41 54 45  ate using CREATE
2f790 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45   TEMPORARY TABLE
2f7a0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
2f7b0 33 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a  3 value is non-z
2f7c0 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 74 61  ero, then the ta
2f7d0 62 6c 65 20 72 65 66 65 72 72 65 64 20 74 6f 20  ble referred to 
2f7e0 6d 75 73 74 20 62 65 20 61 6e 0a 2a 2a 20 69 6e  must be an.** in
2f7f0 74 6b 65 79 20 74 61 62 6c 65 20 28 61 6e 20 53  tkey table (an S
2f800 51 4c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 6e  QL table, not an
2f810 20 69 6e 64 65 78 29 2e 20 49 6e 20 74 68 69 73   index). In this
2f820 20 63 61 73 65 20 74 68 65 20 72 6f 77 20 63 68   case the row ch
2f830 61 6e 67 65 20 0a 2a 2a 20 63 6f 75 6e 74 20 69  ange .** count i
2f840 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79  s incremented by
2f850 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
2f860 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  ows in the table
2f870 20 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e 20   being cleared. 
2f880 0a 2a 2a 20 49 66 20 50 33 20 69 73 20 67 72 65  .** If P3 is gre
2f890 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 2c 20  ater than zero, 
2f8a0 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20 73  then the value s
2f8b0 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
2f8c0 72 20 50 33 20 69 73 0a 2a 2a 20 61 6c 73 6f 20  r P3 is.** also 
2f8d0 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74  incremented by t
2f8e0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  he number of row
2f8f0 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62  s in the table b
2f900 65 69 6e 67 20 63 6c 65 61 72 65 64 2e 0a 2a 2a  eing cleared..**
2f910 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 44 65  .** See also: De
2f920 73 74 72 6f 79 0a 2a 2f 0a 63 61 73 65 20 4f 50  stroy.*/.case OP
2f930 5f 43 6c 65 61 72 3a 20 7b 0a 20 20 69 6e 74 20  _Clear: {.  int 
2f940 6e 43 68 61 6e 67 65 3b 0a 20 0a 20 20 73 71 6c  nChange;. .  sql
2f950 69 74 65 33 56 64 62 65 49 6e 63 72 57 72 69 74  ite3VdbeIncrWrit
2f960 65 43 6f 75 6e 74 65 72 28 70 2c 20 30 29 3b 0a  eCounter(p, 0);.
2f970 20 20 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20    nChange = 0;. 
2f980 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
2f990 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 73 73  Only==0 );.  ass
2f9a0 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
2f9b0 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f  p->btreeMask, pO
2f9c0 70 2d 3e 70 32 29 20 29 3b 0a 20 20 72 63 20 3d  p->p2) );.  rc =
2f9d0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65   sqlite3BtreeCle
2f9e0 61 72 54 61 62 6c 65 28 0a 20 20 20 20 20 20 64  arTable(.      d
2f9f0 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 32 5d 2e  b->aDb[pOp->p2].
2fa00 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 28 70  pBt, pOp->p1, (p
2fa10 4f 70 2d 3e 70 33 20 3f 20 26 6e 43 68 61 6e 67  Op->p3 ? &nChang
2fa20 65 20 3a 20 30 29 0a 20 20 29 3b 0a 20 20 69 66  e : 0).  );.  if
2fa30 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20  ( pOp->p3 ){.   
2fa40 20 70 2d 3e 6e 43 68 61 6e 67 65 20 2b 3d 20 6e   p->nChange += n
2fa50 43 68 61 6e 67 65 3b 0a 20 20 20 20 69 66 28 20  Change;.    if( 
2fa60 70 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20 20 20  pOp->p3>0 ){.   
2fa70 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
2fa80 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d  Valid(&aMem[pOp-
2fa90 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20 6d  >p3]) );.      m
2faa0 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
2fab0 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  p, &aMem[pOp->p3
2fac0 5d 29 3b 0a 20 20 20 20 20 20 61 4d 65 6d 5b 70  ]);.      aMem[p
2fad0 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20 2b 3d 20 6e  Op->p3].u.i += n
2fae0 43 68 61 6e 67 65 3b 0a 20 20 20 20 7d 0a 20 20  Change;.    }.  
2faf0 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  }.  if( rc ) got
2fb00 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
2fb10 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  rror;.  break;.}
2fb20 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73  ../* Opcode: Res
2fb30 65 74 53 6f 72 74 65 72 20 50 31 20 2a 20 2a 20  etSorter P1 * * 
2fb40 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65  * *.**.** Delete
2fb50 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 66 72   all contents fr
2fb60 6f 6d 20 74 68 65 20 65 70 68 65 6d 65 72 61 6c  om the ephemeral
2fb70 20 74 61 62 6c 65 20 6f 72 20 73 6f 72 74 65 72   table or sorter
2fb80 0a 2a 2a 20 74 68 61 74 20 69 73 20 6f 70 65 6e  .** that is open
2fb90 20 6f 6e 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a   on cursor P1..*
2fba0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
2fbb0 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20   only works for 
2fbc0 63 75 72 73 6f 72 73 20 75 73 65 64 20 66 6f 72  cursors used for
2fbd0 20 73 6f 72 74 69 6e 67 20 61 6e 64 0a 2a 2a 20   sorting and.** 
2fbe0 6f 70 65 6e 65 64 20 77 69 74 68 20 4f 50 5f 4f  opened with OP_O
2fbf0 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 72 20  penEphemeral or 
2fc00 4f 50 5f 53 6f 72 74 65 72 4f 70 65 6e 2e 0a 2a  OP_SorterOpen..*
2fc10 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65 74 53  /.case OP_ResetS
2fc20 6f 72 74 65 72 3a 20 7b 0a 20 20 56 64 62 65 43  orter: {.  VdbeC
2fc30 75 72 73 6f 72 20 2a 70 43 3b 0a 20 0a 20 20 61  ursor *pC;. .  a
2fc40 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
2fc50 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
2fc60 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
2fc70 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
2fc80 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2fc90 43 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 69 73  C!=0 );.  if( is
2fca0 53 6f 72 74 65 72 28 70 43 29 20 29 7b 0a 20 20  Sorter(pC) ){.  
2fcb0 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72    sqlite3VdbeSor
2fcc0 74 65 72 52 65 73 65 74 28 64 62 2c 20 70 43 2d  terReset(db, pC-
2fcd0 3e 75 63 2e 70 53 6f 72 74 65 72 29 3b 0a 20 20  >uc.pSorter);.  
2fce0 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
2fcf0 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
2fd00 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
2fd10 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
2fd20 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c 20 29 3b  ->isEphemeral );
2fd30 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
2fd40 33 42 74 72 65 65 43 6c 65 61 72 54 61 62 6c 65  3BtreeClearTable
2fd50 4f 66 43 75 72 73 6f 72 28 70 43 2d 3e 75 63 2e  OfCursor(pC->uc.
2fd60 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 69 66  pCursor);.    if
2fd70 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
2fd80 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
2fd90 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
2fda0 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74  /* Opcode: Creat
2fdb0 65 42 74 72 65 65 20 50 31 20 50 32 20 50 33 20  eBtree P1 P2 P3 
2fdc0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
2fdd0 20 72 5b 50 32 5d 3d 72 6f 6f 74 20 69 44 62 3d   r[P2]=root iDb=
2fde0 50 31 20 66 6c 61 67 73 3d 50 33 0a 2a 2a 0a 2a  P1 flags=P3.**.*
2fdf0 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77  * Allocate a new
2fe00 20 62 2d 74 72 65 65 20 69 6e 20 74 68 65 20 6d   b-tree in the m
2fe10 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
2fe20 65 20 69 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e  e if P1==0 or in
2fe30 20 74 68 65 0a 2a 2a 20 54 45 4d 50 20 64 61 74   the.** TEMP dat
2fe40 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31  abase file if P1
2fe50 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61 74 74  ==1 or in an att
2fe60 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20 69  ached database i
2fe70 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 54 68 65 20  f.** P1>1.  The 
2fe80 50 33 20 61 72 67 75 6d 65 6e 74 20 6d 75 73 74  P3 argument must
2fe90 20 62 65 20 31 20 28 42 54 52 45 45 5f 49 4e 54   be 1 (BTREE_INT
2fea0 4b 45 59 29 20 66 6f 72 20 61 20 72 6f 77 69 64  KEY) for a rowid
2feb0 20 74 61 62 6c 65 0a 2a 2a 20 69 74 20 6d 75 73   table.** it mus
2fec0 74 20 62 65 20 32 20 28 42 54 52 45 45 5f 42 4c  t be 2 (BTREE_BL
2fed0 4f 42 4b 45 59 29 20 66 6f 72 20 61 6e 20 69 6e  OBKEY) for an in
2fee0 64 65 78 20 6f 72 20 57 49 54 48 4f 55 54 20 52  dex or WITHOUT R
2fef0 4f 57 49 44 20 74 61 62 6c 65 2e 0a 2a 2a 20 54  OWID table..** T
2ff00 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d  he root page num
2ff10 62 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20 62  ber of the new b
2ff20 2d 74 72 65 65 20 69 73 20 73 74 6f 72 65 64 20  -tree is stored 
2ff30 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
2ff40 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65 61 74  */.case OP_Creat
2ff50 65 42 74 72 65 65 3a 20 7b 20 20 20 20 20 20 20  eBtree: {       
2ff60 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
2ff70 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 44 62 20 2a  int pgno;.  Db *
2ff80 70 44 62 3b 0a 0a 20 20 73 71 6c 69 74 65 33 56  pDb;..  sqlite3V
2ff90 64 62 65 49 6e 63 72 57 72 69 74 65 43 6f 75 6e  dbeIncrWriteCoun
2ffa0 74 65 72 28 70 2c 20 30 29 3b 0a 20 20 70 4f 75  ter(p, 0);.  pOu
2ffb0 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
2ffc0 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 67  se(p, pOp);.  pg
2ffd0 6e 6f 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74  no = 0;.  assert
2ffe0 28 20 70 4f 70 2d 3e 70 33 3d 3d 42 54 52 45 45  ( pOp->p3==BTREE
2fff0 5f 49 4e 54 4b 45 59 20 7c 7c 20 70 4f 70 2d 3e  _INTKEY || pOp->
30000 70 33 3d 3d 42 54 52 45 45 5f 42 4c 4f 42 4b 45  p3==BTREE_BLOBKE
30010 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Y );.  assert( p
30020 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
30030 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
30040 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b    assert( DbMask
30050 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73  Test(p->btreeMas
30060 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20  k, pOp->p1) );. 
30070 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
30080 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62  Only==0 );.  pDb
30090 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d   = &db->aDb[pOp-
300a0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
300b0 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20  pDb->pBt!=0 );. 
300c0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
300d0 65 65 43 72 65 61 74 65 54 61 62 6c 65 28 70 44  eeCreateTable(pD
300e0 62 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20 70  b->pBt, &pgno, p
300f0 4f 70 2d 3e 70 33 29 3b 0a 20 20 69 66 28 20 72  Op->p3);.  if( r
30100 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
30110 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70  ue_to_error;.  p
30120 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 67 6e 6f 3b  Out->u.i = pgno;
30130 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
30140 4f 70 63 6f 64 65 3a 20 53 71 6c 45 78 65 63 20  Opcode: SqlExec 
30150 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  * * * P4 *.**.**
30160 20 52 75 6e 20 74 68 65 20 53 51 4c 20 73 74 61   Run the SQL sta
30170 74 65 6d 65 6e 74 20 6f 72 20 73 74 61 74 65 6d  tement or statem
30180 65 6e 74 73 20 73 70 65 63 69 66 69 65 64 20 69  ents specified i
30190 6e 20 74 68 65 20 50 34 20 73 74 72 69 6e 67 2e  n the P4 string.
301a0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 71 6c 45  .*/.case OP_SqlE
301b0 78 65 63 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  xec: {.  sqlite3
301c0 56 64 62 65 49 6e 63 72 57 72 69 74 65 43 6f 75  VdbeIncrWriteCou
301d0 6e 74 65 72 28 70 2c 20 30 29 3b 0a 20 20 64 62  nter(p, 0);.  db
301e0 2d 3e 6e 53 71 6c 45 78 65 63 2b 2b 3b 0a 20 20  ->nSqlExec++;.  
301f0 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65  rc = sqlite3_exe
30200 63 28 64 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c  c(db, pOp->p4.z,
30210 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20 64 62 2d   0, 0, 0);.  db-
30220 3e 6e 53 71 6c 45 78 65 63 2d 2d 3b 0a 20 20 69  >nSqlExec--;.  i
30230 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
30240 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
30250 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
30260 4f 70 63 6f 64 65 3a 20 50 61 72 73 65 53 63 68  Opcode: ParseSch
30270 65 6d 61 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  ema P1 * * P4 *.
30280 2a 2a 0a 2a 2a 20 52 65 61 64 20 61 6e 64 20 70  **.** Read and p
30290 61 72 73 65 20 61 6c 6c 20 65 6e 74 72 69 65 73  arse all entries
302a0 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 49 54 45   from the SQLITE
302b0 5f 4d 41 53 54 45 52 20 74 61 62 6c 65 20 6f 66  _MASTER table of
302c0 20 64 61 74 61 62 61 73 65 20 50 31 0a 2a 2a 20   database P1.** 
302d0 74 68 61 74 20 6d 61 74 63 68 20 74 68 65 20 57  that match the W
302e0 48 45 52 45 20 63 6c 61 75 73 65 20 50 34 2e 20  HERE clause P4. 
302f0 20 49 66 20 50 34 20 69 73 20 61 20 4e 55 4c 4c   If P4 is a NULL
30300 20 70 6f 69 6e 74 65 72 2c 20 74 68 65 6e 20 74   pointer, then t
30310 68 65 0a 2a 2a 20 65 6e 74 69 72 65 20 73 63 68  he.** entire sch
30320 65 6d 61 20 66 6f 72 20 50 31 20 69 73 20 72 65  ema for P1 is re
30330 70 61 72 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  parsed..**.** Th
30340 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65  is opcode invoke
30350 73 20 74 68 65 20 70 61 72 73 65 72 20 74 6f 20  s the parser to 
30360 63 72 65 61 74 65 20 61 20 6e 65 77 20 76 69 72  create a new vir
30370 74 75 61 6c 20 6d 61 63 68 69 6e 65 2c 0a 2a 2a  tual machine,.**
30380 20 74 68 65 6e 20 72 75 6e 73 20 74 68 65 20 6e   then runs the n
30390 65 77 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  ew virtual machi
303a0 6e 65 2e 20 20 49 74 20 69 73 20 74 68 75 73 20  ne.  It is thus 
303b0 61 20 72 65 2d 65 6e 74 72 61 6e 74 20 6f 70 63  a re-entrant opc
303c0 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ode..*/.case OP_
303d0 50 61 72 73 65 53 63 68 65 6d 61 3a 20 7b 0a 20  ParseSchema: {. 
303e0 20 69 6e 74 20 69 44 62 3b 0a 20 20 63 6f 6e 73   int iDb;.  cons
303f0 74 20 63 68 61 72 20 2a 7a 4d 61 73 74 65 72 3b  t char *zMaster;
30400 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20  .  char *zSql;. 
30410 20 49 6e 69 74 44 61 74 61 20 69 6e 69 74 44 61   InitData initDa
30420 74 61 3b 0a 20 20 69 6e 74 20 62 52 65 6c 65 61  ta;.  int bRelea
30430 73 65 3b 0a 0a 20 20 2f 2a 20 41 6e 79 20 70 72  se;..  /* Any pr
30440 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
30450 20 74 68 61 74 20 69 6e 76 6f 6b 65 73 20 74 68   that invokes th
30460 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 68  is opcode will h
30470 6f 6c 64 20 6d 75 74 65 78 65 73 0a 20 20 2a 2a  old mutexes.  **
30480 20 6f 6e 20 65 76 65 72 79 20 62 74 72 65 65 2e   on every btree.
30490 20 20 54 68 69 73 20 69 73 20 61 20 70 72 65 72    This is a prer
304a0 65 71 75 69 73 69 74 65 20 66 6f 72 20 69 6e 76  equisite for inv
304b0 6f 6b 69 6e 67 20 0a 20 20 2a 2a 20 73 71 6c 69  oking .  ** sqli
304c0 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28  te3InitCallback(
304d0 29 2e 0a 20 20 2a 2f 0a 23 69 66 64 65 66 20 53  )..  */.#ifdef S
304e0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 66 6f  QLITE_DEBUG.  fo
304f0 72 28 69 44 62 3d 30 3b 20 69 44 62 3c 64 62 2d  r(iDb=0; iDb<db-
30500 3e 6e 44 62 3b 20 69 44 62 2b 2b 29 7b 0a 20 20  >nDb; iDb++){.  
30510 20 20 61 73 73 65 72 74 28 20 69 44 62 3d 3d 31    assert( iDb==1
30520 20 7c 7c 20 73 71 6c 69 74 65 33 42 74 72 65 65   || sqlite3Btree
30530 48 6f 6c 64 73 4d 75 74 65 78 28 64 62 2d 3e 61  HoldsMutex(db->a
30540 44 62 5b 69 44 62 5d 2e 70 42 74 29 20 29 3b 0a  Db[iDb].pBt) );.
30550 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 69 44    }.#endif..  iD
30560 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61  b = pOp->p1;.  a
30570 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26  ssert( iDb>=0 &&
30580 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a   iDb<db->nDb );.
30590 20 20 61 73 73 65 72 74 28 20 44 62 48 61 73 50    assert( DbHasP
305a0 72 6f 70 65 72 74 79 28 64 62 2c 20 69 44 62 2c  roperty(db, iDb,
305b0 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64   DB_SchemaLoaded
305c0 29 20 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  ) );..#ifndef SQ
305d0 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54  LITE_OMIT_ALTERT
305e0 41 42 4c 45 0a 20 20 69 66 28 20 70 4f 70 2d 3e  ABLE.  if( pOp->
305f0 70 34 2e 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 73  p4.z==0 ){.    s
30600 71 6c 69 74 65 33 53 63 68 65 6d 61 43 6c 65 61  qlite3SchemaClea
30610 72 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70  r(db->aDb[iDb].p
30620 53 63 68 65 6d 61 29 3b 0a 20 20 20 20 64 62 2d  Schema);.    db-
30630 3e 6d 44 62 46 6c 61 67 73 20 26 3d 20 7e 44 42  >mDbFlags &= ~DB
30640 46 4c 41 47 5f 53 63 68 65 6d 61 4b 6e 6f 77 6e  FLAG_SchemaKnown
30650 4f 6b 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  Ok;.    rc = sql
30660 69 74 65 33 49 6e 69 74 4f 6e 65 28 64 62 2c 20  ite3InitOne(db, 
30670 69 44 62 2c 20 26 70 2d 3e 7a 45 72 72 4d 73 67  iDb, &p->zErrMsg
30680 2c 20 49 4e 49 54 46 4c 41 47 5f 41 6c 74 65 72  , INITFLAG_Alter
30690 54 61 62 6c 65 29 3b 0a 20 20 20 20 64 62 2d 3e  Table);.    db->
306a0 6d 44 62 46 6c 61 67 73 20 7c 3d 20 44 42 46 4c  mDbFlags |= DBFL
306b0 41 47 5f 53 63 68 65 6d 61 43 68 61 6e 67 65 3b  AG_SchemaChange;
306c0 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20  .    p->expired 
306d0 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 0a 23 65 6e  = 0;.  }else.#en
306e0 64 69 66 0a 20 20 7b 0a 20 20 20 20 7a 4d 61 73  dif.  {.    zMas
306f0 74 65 72 20 3d 20 4d 41 53 54 45 52 5f 4e 41 4d  ter = MASTER_NAM
30700 45 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e  E;.    initData.
30710 64 62 20 3d 20 64 62 3b 0a 20 20 20 20 69 6e 69  db = db;.    ini
30720 74 44 61 74 61 2e 69 44 62 20 3d 20 69 44 62 3b  tData.iDb = iDb;
30730 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e 70 7a  .    initData.pz
30740 45 72 72 4d 73 67 20 3d 20 26 70 2d 3e 7a 45 72  ErrMsg = &p->zEr
30750 72 4d 73 67 3b 0a 20 20 20 20 69 6e 69 74 44 61  rMsg;.    initDa
30760 74 61 2e 6d 49 6e 69 74 46 6c 61 67 73 20 3d 20  ta.mInitFlags = 
30770 30 3b 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73 71  0;.    zSql = sq
30780 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c  lite3MPrintf(db,
30790 0a 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20  .       "SELECT 
307a0 6e 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20  name, rootpage, 
307b0 73 71 6c 20 46 52 4f 4d 20 27 25 71 27 2e 25 73  sql FROM '%q'.%s
307c0 20 57 48 45 52 45 20 25 73 20 4f 52 44 45 52 20   WHERE %s ORDER 
307d0 42 59 20 72 6f 77 69 64 22 2c 0a 20 20 20 20 20  BY rowid",.     
307e0 20 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a    db->aDb[iDb].z
307f0 44 62 53 4e 61 6d 65 2c 20 7a 4d 61 73 74 65 72  DbSName, zMaster
30800 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
30810 20 20 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29 7b    if( zSql==0 ){
30820 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
30830 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 3b 0a 20  TE_NOMEM_BKPT;. 
30840 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
30850 62 52 65 6c 65 61 73 65 20 3d 20 73 71 6c 69 74  bRelease = sqlit
30860 65 33 4c 6f 63 6b 52 65 75 73 61 62 6c 65 53 63  e3LockReusableSc
30870 68 65 6d 61 28 64 62 29 3b 0a 20 20 20 20 20 20  hema(db);.      
30880 69 66 28 20 49 73 52 65 75 73 65 53 63 68 65 6d  if( IsReuseSchem
30890 61 28 64 62 29 20 29 7b 0a 20 20 20 20 20 20 20  a(db) ){.       
308a0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 49 6e 69   rc = sqlite3Ini
308b0 74 28 64 62 2c 20 26 70 2d 3e 7a 45 72 72 4d 73  t(db, &p->zErrMs
308c0 67 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  g);.        if( 
308d0 72 63 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  rc ){.          
308e0 73 71 6c 69 74 65 33 55 6e 6c 6f 63 6b 52 65 75  sqlite3UnlockReu
308f0 73 61 62 6c 65 53 63 68 65 6d 61 28 64 62 2c 20  sableSchema(db, 
30900 62 52 65 6c 65 61 73 65 29 3b 0a 20 20 20 20 20  bRelease);.     
30910 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
30920 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
30930 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
30940 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62        assert( db
30950 2d 3e 69 6e 69 74 2e 62 75 73 79 3d 3d 30 20 29  ->init.busy==0 )
30960 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74  ;.      db->init
30970 2e 62 75 73 79 20 3d 20 31 3b 0a 20 20 20 20 20  .busy = 1;.     
30980 20 69 6e 69 74 44 61 74 61 2e 72 63 20 3d 20 53   initData.rc = S
30990 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20  QLITE_OK;.      
309a0 69 6e 69 74 44 61 74 61 2e 6e 49 6e 69 74 52 6f  initData.nInitRo
309b0 77 20 3d 20 30 3b 0a 20 20 20 20 20 20 61 73 73  w = 0;.      ass
309c0 65 72 74 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63  ert( !db->malloc
309d0 46 61 69 6c 65 64 20 29 3b 0a 20 20 20 20 20 20  Failed );.      
309e0 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65  rc = sqlite3_exe
309f0 63 28 64 62 2c 20 7a 53 71 6c 2c 20 73 71 6c 69  c(db, zSql, sqli
30a00 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2c  te3InitCallback,
30a10 20 26 69 6e 69 74 44 61 74 61 2c 20 30 29 3b 0a   &initData, 0);.
30a20 20 20 20 20 20 20 73 71 6c 69 74 65 33 55 6e 6c        sqlite3Unl
30a30 6f 63 6b 52 65 75 73 61 62 6c 65 53 63 68 65 6d  ockReusableSchem
30a40 61 28 64 62 2c 20 62 52 65 6c 65 61 73 65 29 3b  a(db, bRelease);
30a50 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53  .      if( rc==S
30a60 51 4c 49 54 45 5f 4f 4b 20 29 20 72 63 20 3d 20  QLITE_OK ) rc = 
30a70 69 6e 69 74 44 61 74 61 2e 72 63 3b 0a 20 20 20  initData.rc;.   
30a80 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
30a90 45 5f 4f 4b 20 26 26 20 69 6e 69 74 44 61 74 61  E_OK && initData
30aa0 2e 6e 49 6e 69 74 52 6f 77 3d 3d 30 20 29 7b 0a  .nInitRow==0 ){.
30ab0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 4f          /* The O
30ac0 50 5f 50 61 72 73 65 53 63 68 65 6d 61 20 6f 70  P_ParseSchema op
30ad0 63 6f 64 65 20 77 69 74 68 20 61 20 6e 6f 6e 2d  code with a non-
30ae0 4e 55 4c 4c 20 50 34 20 61 72 67 75 6d 65 6e 74  NULL P4 argument
30af0 20 73 68 6f 75 6c 64 20 70 61 72 73 65 0a 20 20   should parse.  
30b00 20 20 20 20 20 20 2a 2a 20 61 74 20 6c 65 61 73        ** at leas
30b10 74 20 6f 6e 65 20 53 51 4c 20 73 74 61 74 65 6d  t one SQL statem
30b20 65 6e 74 2e 20 41 6e 79 20 6c 65 73 73 20 74 68  ent. Any less th
30b30 61 6e 20 74 68 61 74 20 69 6e 64 69 63 61 74 65  an that indicate
30b40 73 20 74 68 61 74 0a 20 20 20 20 20 20 20 20 2a  s that.        *
30b50 2a 20 74 68 65 20 73 71 6c 69 74 65 5f 6d 61 73  * the sqlite_mas
30b60 74 65 72 20 74 61 62 6c 65 20 69 73 20 63 6f 72  ter table is cor
30b70 72 75 70 74 2e 20 2a 2f 0a 20 20 20 20 20 20 20  rupt. */.       
30b80 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52   rc = SQLITE_COR
30b90 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20  RUPT_BKPT;.     
30ba0 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33   }.      sqlite3
30bb0 44 62 46 72 65 65 4e 4e 28 64 62 2c 20 7a 53 71  DbFreeNN(db, zSq
30bc0 6c 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e  l);.      db->in
30bd0 69 74 2e 62 75 73 79 20 3d 20 30 3b 0a 20 20 20  it.busy = 0;.   
30be0 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20   }.  }.  if( rc 
30bf0 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52 65  ){.    sqlite3Re
30c00 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43  setAllSchemasOfC
30c10 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20  onnection(db);. 
30c20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
30c30 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 20  E_NOMEM ){.     
30c40 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
30c50 20 20 7d 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f    }.    goto abo
30c60 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
30c70 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 20 20 0a  .  }.  break;  .
30c80 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  }..#if !defined(
30c90 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c  SQLITE_OMIT_ANAL
30ca0 59 5a 45 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  YZE)./* Opcode: 
30cb0 4c 6f 61 64 41 6e 61 6c 79 73 69 73 20 50 31 20  LoadAnalysis P1 
30cc0 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65  * * * *.**.** Re
30cd0 61 64 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74  ad the sqlite_st
30ce0 61 74 31 20 74 61 62 6c 65 20 66 6f 72 20 64 61  at1 table for da
30cf0 74 61 62 61 73 65 20 50 31 20 61 6e 64 20 6c 6f  tabase P1 and lo
30d00 61 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a  ad the content.*
30d10 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65 20  * of that table 
30d20 69 6e 74 6f 20 74 68 65 20 69 6e 74 65 72 6e 61  into the interna
30d30 6c 20 69 6e 64 65 78 20 68 61 73 68 20 74 61 62  l index hash tab
30d40 6c 65 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63  le.  This will c
30d50 61 75 73 65 0a 2a 2a 20 74 68 65 20 61 6e 61 6c  ause.** the anal
30d60 79 73 69 73 20 74 6f 20 62 65 20 75 73 65 64 20  ysis to be used 
30d70 77 68 65 6e 20 70 72 65 70 61 72 69 6e 67 20 61  when preparing a
30d80 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 20 71 75  ll subsequent qu
30d90 65 72 69 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  eries..*/.case O
30da0 50 5f 4c 6f 61 64 41 6e 61 6c 79 73 69 73 3a 20  P_LoadAnalysis: 
30db0 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  {.  assert( pOp-
30dc0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
30dd0 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 72  1<db->nDb );.  r
30de0 63 20 3d 20 73 71 6c 69 74 65 33 41 6e 61 6c 79  c = sqlite3Analy
30df0 73 69 73 4c 6f 61 64 28 64 62 2c 20 70 4f 70 2d  sisLoad(db, pOp-
30e00 3e 70 31 29 3b 0a 20 20 69 66 28 20 72 63 20 29  >p1);.  if( rc )
30e10 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
30e20 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61  to_error;.  brea
30e30 6b 3b 20 20 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  k;  .}.#endif /*
30e40 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
30e50 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 20 2a  _OMIT_ANALYZE) *
30e60 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72  /../* Opcode: Dr
30e70 6f 70 54 61 62 6c 65 20 50 31 20 2a 20 2a 20 50  opTable P1 * * P
30e80 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65  4 *.**.** Remove
30e90 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69   the internal (i
30ea0 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73  n-memory) data s
30eb0 74 72 75 63 74 75 72 65 73 20 74 68 61 74 20 64  tructures that d
30ec0 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 74  escribe.** the t
30ed0 61 62 6c 65 20 6e 61 6d 65 64 20 50 34 20 69 6e  able named P4 in
30ee0 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 54   database P1.  T
30ef0 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66  his is called af
30f00 74 65 72 20 61 20 74 61 62 6c 65 0a 2a 2a 20 69  ter a table.** i
30f10 73 20 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 64  s dropped from d
30f20 69 73 6b 20 28 75 73 69 6e 67 20 74 68 65 20 44  isk (using the D
30f30 65 73 74 72 6f 79 20 6f 70 63 6f 64 65 29 20 69  estroy opcode) i
30f40 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20  n order to keep 
30f50 0a 2a 2a 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  .** the internal
30f60 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
30f70 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61  of the.** schema
30f80 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68   consistent with
30f90 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b   what is on disk
30fa0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f  ..*/.case OP_Dro
30fb0 70 54 61 62 6c 65 3a 20 7b 0a 20 20 73 71 6c 69  pTable: {.  sqli
30fc0 74 65 33 56 64 62 65 49 6e 63 72 57 72 69 74 65  te3VdbeIncrWrite
30fd0 43 6f 75 6e 74 65 72 28 70 2c 20 30 29 3b 0a 20  Counter(p, 0);. 
30fe0 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
30ff0 64 44 65 6c 65 74 65 54 61 62 6c 65 28 64 62 2c  dDeleteTable(db,
31000 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
31010 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  4.z);.  break;.}
31020 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f  ../* Opcode: Dro
31030 70 49 6e 64 65 78 20 50 31 20 2a 20 2a 20 50 34  pIndex P1 * * P4
31040 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20   *.**.** Remove 
31050 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e  the internal (in
31060 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74  -memory) data st
31070 72 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65  ructures that de
31080 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 69 6e  scribe.** the in
31090 64 65 78 20 6e 61 6d 65 64 20 50 34 20 69 6e 20  dex named P4 in 
310a0 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68  database P1.  Th
310b0 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74  is is called aft
310c0 65 72 20 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 69  er an index.** i
310d0 73 20 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 64  s dropped from d
310e0 69 73 6b 20 28 75 73 69 6e 67 20 74 68 65 20 44  isk (using the D
310f0 65 73 74 72 6f 79 20 6f 70 63 6f 64 65 29 0a 2a  estroy opcode).*
31100 2a 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65  * in order to ke
31110 65 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ep the internal 
31120 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
31130 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20  f the.** schema 
31140 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20  consistent with 
31150 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e  what is on disk.
31160 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70  .*/.case OP_Drop
31170 49 6e 64 65 78 3a 20 7b 0a 20 20 73 71 6c 69 74  Index: {.  sqlit
31180 65 33 56 64 62 65 49 6e 63 72 57 72 69 74 65 43  e3VdbeIncrWriteC
31190 6f 75 6e 74 65 72 28 70 2c 20 30 29 3b 0a 20 20  ounter(p, 0);.  
311a0 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
311b0 44 65 6c 65 74 65 49 6e 64 65 78 28 64 62 2c 20  DeleteIndex(db, 
311c0 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34  pOp->p1, pOp->p4
311d0 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .z);.  break;.}.
311e0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70  ./* Opcode: Drop
311f0 54 72 69 67 67 65 72 20 50 31 20 2a 20 2a 20 50  Trigger P1 * * P
31200 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65  4 *.**.** Remove
31210 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69   the internal (i
31220 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73  n-memory) data s
31230 74 72 75 63 74 75 72 65 73 20 74 68 61 74 20 64  tructures that d
31240 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 74  escribe.** the t
31250 72 69 67 67 65 72 20 6e 61 6d 65 64 20 50 34 20  rigger named P4 
31260 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20  in database P1. 
31270 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20   This is called 
31280 61 66 74 65 72 20 61 20 74 72 69 67 67 65 72 0a  after a trigger.
31290 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 66 72  ** is dropped fr
312a0 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e 67 20 74  om disk (using t
312b0 68 65 20 44 65 73 74 72 6f 79 20 6f 70 63 6f 64  he Destroy opcod
312c0 65 29 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b  e) in order to k
312d0 65 65 70 20 0a 2a 2a 20 74 68 65 20 69 6e 74 65  eep .** the inte
312e0 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74  rnal representat
312f0 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63  ion of the.** sc
31300 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20  hema consistent 
31310 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20  with what is on 
31320 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  disk..*/.case OP
31330 5f 44 72 6f 70 54 72 69 67 67 65 72 3a 20 7b 0a  _DropTrigger: {.
31340 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 63    sqlite3VdbeInc
31350 72 57 72 69 74 65 43 6f 75 6e 74 65 72 28 70 2c  rWriteCounter(p,
31360 20 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 55 6e   0);.  sqlite3Un
31370 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69  linkAndDeleteTri
31380 67 67 65 72 28 64 62 2c 20 70 4f 70 2d 3e 70 31  gger(db, pOp->p1
31390 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
313a0 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64  break;.}...#ifnd
313b0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49  ef SQLITE_OMIT_I
313c0 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 0a 2f  NTEGRITY_CHECK./
313d0 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67 72  * Opcode: Integr
313e0 69 74 79 43 6b 20 50 31 20 50 32 20 50 33 20 50  ityCk P1 P2 P3 P
313f0 34 20 50 35 0a 2a 2a 0a 2a 2a 20 44 6f 20 61 6e  4 P5.**.** Do an
31400 20 61 6e 61 6c 79 73 69 73 20 6f 66 20 74 68 65   analysis of the
31410 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20   currently open 
31420 64 61 74 61 62 61 73 65 2e 20 20 53 74 6f 72 65  database.  Store
31430 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20   in.** register 
31440 50 31 20 74 68 65 20 74 65 78 74 20 6f 66 20 61  P1 the text of a
31450 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  n error message 
31460 64 65 73 63 72 69 62 69 6e 67 20 61 6e 79 20 70  describing any p
31470 72 6f 62 6c 65 6d 73 2e 0a 2a 2a 20 49 66 20 6e  roblems..** If n
31480 6f 20 70 72 6f 62 6c 65 6d 73 20 61 72 65 20 66  o problems are f
31490 6f 75 6e 64 2c 20 73 74 6f 72 65 20 61 20 4e 55  ound, store a NU
314a0 4c 4c 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  LL in register P
314b0 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67  1..**.** The reg
314c0 69 73 74 65 72 20 50 33 20 63 6f 6e 74 61 69 6e  ister P3 contain
314d0 73 20 6f 6e 65 20 6c 65 73 73 20 74 68 61 6e 20  s one less than 
314e0 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62  the maximum numb
314f0 65 72 20 6f 66 20 61 6c 6c 6f 77 65 64 20 65 72  er of allowed er
31500 72 6f 72 73 2e 0a 2a 2a 20 41 74 20 6d 6f 73 74  rors..** At most
31510 20 72 65 67 28 50 33 29 20 65 72 72 6f 72 73 20   reg(P3) errors 
31520 77 69 6c 6c 20 62 65 20 72 65 70 6f 72 74 65 64  will be reported
31530 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f  ..** In other wo
31540 72 64 73 2c 20 74 68 65 20 61 6e 61 6c 79 73 69  rds, the analysi
31550 73 20 73 74 6f 70 73 20 61 73 20 73 6f 6f 6e 20  s stops as soon 
31560 61 73 20 72 65 67 28 50 31 29 20 65 72 72 6f 72  as reg(P1) error
31570 73 20 61 72 65 20 0a 2a 2a 20 73 65 65 6e 2e 20  s are .** seen. 
31580 20 52 65 67 28 50 31 29 20 69 73 20 75 70 64 61   Reg(P1) is upda
31590 74 65 64 20 77 69 74 68 20 74 68 65 20 6e 75 6d  ted with the num
315a0 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65  ber of errors re
315b0 6d 61 69 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54  maining..**.** T
315c0 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d  he root page num
315d0 62 65 72 73 20 6f 66 20 61 6c 6c 20 74 61 62 6c  bers of all tabl
315e0 65 73 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  es in the databa
315f0 73 65 20 61 72 65 20 69 6e 74 65 67 65 72 73 0a  se are integers.
31600 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20 50 34 5f  ** stored in P4_
31610 49 4e 54 41 52 52 41 59 20 61 72 67 75 6d 65 6e  INTARRAY argumen
31620 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69  t..**.** If P5 i
31630 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 20  s not zero, the 
31640 63 68 65 63 6b 20 69 73 20 64 6f 6e 65 20 6f 6e  check is done on
31650 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20 64   the auxiliary d
31660 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65 2c  atabase.** file,
31670 20 6e 6f 74 20 74 68 65 20 6d 61 69 6e 20 64 61   not the main da
31680 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a  tabase file..**.
31690 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
316a0 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d  s used to implem
316b0 65 6e 74 20 74 68 65 20 69 6e 74 65 67 72 69 74  ent the integrit
316c0 79 5f 63 68 65 63 6b 20 70 72 61 67 6d 61 2e 0a  y_check pragma..
316d0 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67  */.case OP_Integ
316e0 72 69 74 79 43 6b 3a 20 7b 0a 20 20 69 6e 74 20  rityCk: {.  int 
316f0 6e 52 6f 6f 74 3b 20 20 20 20 20 20 2f 2a 20 4e  nRoot;      /* N
31700 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20  umber of tables 
31710 74 6f 20 63 68 65 63 6b 2e 20 20 28 4e 75 6d 62  to check.  (Numb
31720 65 72 20 6f 66 20 72 6f 6f 74 20 70 61 67 65 73  er of root pages
31730 2e 29 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 52 6f  .) */.  int *aRo
31740 6f 74 3b 20 20 20 20 20 2f 2a 20 41 72 72 61 79  ot;     /* Array
31750 20 6f 66 20 72 6f 6f 74 70 61 67 65 20 6e 75 6d   of rootpage num
31760 62 65 72 73 20 66 6f 72 20 74 61 62 6c 65 73 20  bers for tables 
31770 74 6f 20 62 65 20 63 68 65 63 6b 65 64 20 2a 2f  to be checked */
31780 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20  .  int nErr;    
31790 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
317a0 65 72 72 6f 72 73 20 72 65 70 6f 72 74 65 64 20  errors reported 
317b0 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 3b 20 20 20  */.  char *z;   
317c0 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20       /* Text of 
317d0 74 68 65 20 65 72 72 6f 72 20 72 65 70 6f 72 74  the error report
317e0 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 6e 45 72 72   */.  Mem *pnErr
317f0 3b 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65  ;     /* Registe
31800 72 20 6b 65 65 70 69 6e 67 20 74 72 61 63 6b 20  r keeping track 
31810 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e  of errors remain
31820 69 6e 67 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74  ing */..  assert
31830 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29  ( p->bIsReader )
31840 3b 0a 20 20 6e 52 6f 6f 74 20 3d 20 70 4f 70 2d  ;.  nRoot = pOp-
31850 3e 70 32 3b 0a 20 20 61 52 6f 6f 74 20 3d 20 70  >p2;.  aRoot = p
31860 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20 20 61 73 73  Op->p4.ai;.  ass
31870 65 72 74 28 20 6e 52 6f 6f 74 3e 30 20 29 3b 0a  ert( nRoot>0 );.
31880 20 20 61 73 73 65 72 74 28 20 61 52 6f 6f 74 5b    assert( aRoot[
31890 30 5d 3d 3d 6e 52 6f 6f 74 20 29 3b 0a 20 20 61  0]==nRoot );.  a
318a0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
318b0 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d   && pOp->p3<=(p-
318c0 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
318d0 72 73 6f 72 29 20 29 3b 0a 20 20 70 6e 45 72 72  rsor) );.  pnErr
318e0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
318f0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e  ];.  assert( (pn
31900 45 72 72 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Err->flags & MEM
31910 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 61 73  _Int)!=0 );.  as
31920 73 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c  sert( (pnErr->fl
31930 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d  ags & (MEM_Str|M
31940 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a  EM_Blob))==0 );.
31950 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
31960 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
31970 74 28 20 70 4f 70 2d 3e 70 35 3c 64 62 2d 3e 6e  t( pOp->p5<db->n
31980 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
31990 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74  DbMaskTest(p->bt
319a0 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 35  reeMask, pOp->p5
319b0 29 20 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74  ) );.  z = sqlit
319c0 65 33 42 74 72 65 65 49 6e 74 65 67 72 69 74 79  e3BtreeIntegrity
319d0 43 68 65 63 6b 28 64 62 2d 3e 61 44 62 5b 70 4f  Check(db->aDb[pO
319e0 70 2d 3e 70 35 5d 2e 70 42 74 2c 20 26 61 52 6f  p->p5].pBt, &aRo
319f0 6f 74 5b 31 5d 2c 20 6e 52 6f 6f 74 2c 0a 20 20  ot[1], nRoot,.  
31a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
31a20 69 6e 74 29 70 6e 45 72 72 2d 3e 75 2e 69 2b 31  int)pnErr->u.i+1
31a30 2c 20 26 6e 45 72 72 29 3b 0a 20 20 73 71 6c 69  , &nErr);.  sqli
31a40 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
31a50 6c 28 70 49 6e 31 29 3b 0a 20 20 69 66 28 20 6e  l(pIn1);.  if( n
31a60 45 72 72 3d 3d 30 20 29 7b 0a 20 20 20 20 61 73  Err==0 ){.    as
31a70 73 65 72 74 28 20 7a 3d 3d 30 20 29 3b 0a 20 20  sert( z==0 );.  
31a80 7d 65 6c 73 65 20 69 66 28 20 7a 3d 3d 30 20 29  }else if( z==0 )
31a90 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65  {.    goto no_me
31aa0 6d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  m;.  }else{.    
31ab0 70 6e 45 72 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45  pnErr->u.i -= nE
31ac0 72 72 2d 31 3b 0a 20 20 20 20 73 71 6c 69 74 65  rr-1;.    sqlite
31ad0 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70  3VdbeMemSetStr(p
31ae0 49 6e 31 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c 49  In1, z, -1, SQLI
31af0 54 45 5f 55 54 46 38 2c 20 73 71 6c 69 74 65 33  TE_UTF8, sqlite3
31b00 5f 66 72 65 65 29 3b 0a 20 20 7d 0a 20 20 55 50  _free);.  }.  UP
31b10 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
31b20 45 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74  E(pIn1);.  sqlit
31b30 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f  e3VdbeChangeEnco
31b40 64 69 6e 67 28 70 49 6e 31 2c 20 65 6e 63 6f 64  ding(pIn1, encod
31b50 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ing);.  break;.}
31b60 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
31b70 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59  E_OMIT_INTEGRITY
31b80 5f 43 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70  _CHECK */../* Op
31b90 63 6f 64 65 3a 20 52 6f 77 53 65 74 41 64 64 20  code: RowSetAdd 
31ba0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
31bb0 79 6e 6f 70 73 69 73 3a 20 72 6f 77 73 65 74 28  ynopsis: rowset(
31bc0 50 31 29 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20  P1)=r[P2].**.** 
31bd0 49 6e 73 65 72 74 20 74 68 65 20 69 6e 74 65 67  Insert the integ
31be0 65 72 20 76 61 6c 75 65 20 68 65 6c 64 20 62 79  er value held by
31bf0 20 72 65 67 69 73 74 65 72 20 50 32 20 69 6e 74   register P2 int
31c00 6f 20 61 20 52 6f 77 53 65 74 20 6f 62 6a 65 63  o a RowSet objec
31c10 74 0a 2a 2a 20 68 65 6c 64 20 69 6e 20 72 65 67  t.** held in reg
31c20 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20  ister P1..**.** 
31c30 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 69  An assertion fai
31c40 6c 73 20 69 66 20 50 32 20 69 73 20 6e 6f 74 20  ls if P2 is not 
31c50 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63  an integer..*/.c
31c60 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 41 64 64  ase OP_RowSetAdd
31c70 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 31  : {       /* in1
31c80 2c 20 69 6e 32 20 2a 2f 0a 20 20 70 49 6e 31 20  , in2 */.  pIn1 
31c90 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
31ca0 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
31cb0 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73  [pOp->p2];.  ass
31cc0 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67  ert( (pIn2->flag
31cd0 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20  s & MEM_Int)!=0 
31ce0 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
31cf0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62  flags & MEM_Blob
31d00 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20  )==0 ){.    if( 
31d10 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
31d20 74 52 6f 77 53 65 74 28 70 49 6e 31 29 20 29 20  tRowSet(pIn1) ) 
31d30 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
31d40 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74  .  assert( sqlit
31d50 65 33 56 64 62 65 4d 65 6d 49 73 52 6f 77 53 65  e3VdbeMemIsRowSe
31d60 74 28 70 49 6e 31 29 20 29 3b 0a 20 20 73 71 6c  t(pIn1) );.  sql
31d70 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74  ite3RowSetInsert
31d80 28 28 52 6f 77 53 65 74 2a 29 70 49 6e 31 2d 3e  ((RowSet*)pIn1->
31d90 7a 2c 20 70 49 6e 32 2d 3e 75 2e 69 29 3b 0a 20  z, pIn2->u.i);. 
31da0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
31db0 63 6f 64 65 3a 20 52 6f 77 53 65 74 52 65 61 64  code: RowSetRead
31dc0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
31dd0 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
31de0 3d 72 6f 77 73 65 74 28 50 31 29 0a 2a 2a 0a 2a  =rowset(P1).**.*
31df0 2a 20 45 78 74 72 61 63 74 20 74 68 65 20 73 6d  * Extract the sm
31e00 61 6c 6c 65 73 74 20 76 61 6c 75 65 20 66 72 6f  allest value fro
31e10 6d 20 74 68 65 20 52 6f 77 53 65 74 20 6f 62 6a  m the RowSet obj
31e20 65 63 74 20 69 6e 20 50 31 0a 2a 2a 20 61 6e 64  ect in P1.** and
31e30 20 70 75 74 20 74 68 61 74 20 76 61 6c 75 65 20   put that value 
31e40 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33  into register P3
31e50 2e 0a 2a 2a 20 4f 72 2c 20 69 66 20 52 6f 77 53  ..** Or, if RowS
31e60 65 74 20 6f 62 6a 65 63 74 20 50 31 20 69 73 20  et object P1 is 
31e70 69 6e 69 74 69 61 6c 6c 79 20 65 6d 70 74 79 2c  initially empty,
31e80 20 6c 65 61 76 65 20 50 33 0a 2a 2a 20 75 6e 63   leave P3.** unc
31e90 68 61 6e 67 65 64 20 61 6e 64 20 6a 75 6d 70 20  hanged and jump 
31ea0 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50  to instruction P
31eb0 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f  2..*/.case OP_Ro
31ec0 77 53 65 74 52 65 61 64 3a 20 7b 20 20 20 20 20  wSetRead: {     
31ed0 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20    /* jump, in1, 
31ee0 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 76 61  out3 */.  i64 va
31ef0 6c 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  l;..  pIn1 = &aM
31f00 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
31f10 73 73 65 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c  ssert( (pIn1->fl
31f20 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 29 3d  ags & MEM_Blob)=
31f30 3d 30 20 7c 7c 20 73 71 6c 69 74 65 33 56 64 62  =0 || sqlite3Vdb
31f40 65 4d 65 6d 49 73 52 6f 77 53 65 74 28 70 49 6e  eMemIsRowSet(pIn
31f50 31 29 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e  1) );.  if( (pIn
31f60 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42  1->flags & MEM_B
31f70 6c 6f 62 29 3d 3d 30 20 0a 20 20 20 7c 7c 20 73  lob)==0 .   || s
31f80 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74  qlite3RowSetNext
31f90 28 28 52 6f 77 53 65 74 2a 29 70 49 6e 31 2d 3e  ((RowSet*)pIn1->
31fa0 7a 2c 20 26 76 61 6c 29 3d 3d 30 0a 20 20 29 7b  z, &val)==0.  ){
31fb0 0a 20 20 20 20 2f 2a 20 54 68 65 20 62 6f 6f 6c  .    /* The bool
31fc0 65 61 6e 20 69 6e 64 65 78 20 69 73 20 65 6d 70  ean index is emp
31fd0 74 79 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65  ty */.    sqlite
31fe0 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
31ff0 70 49 6e 31 29 3b 0a 20 20 20 20 56 64 62 65 42  pIn1);.    VdbeB
32000 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 32 29 3b  ranchTaken(1,2);
32010 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  .    goto jump_t
32020 6f 5f 70 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66  o_p2_and_check_f
32030 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20 20  or_interrupt;.  
32040 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 41 20  }else{.    /* A 
32050 76 61 6c 75 65 20 77 61 73 20 70 75 6c 6c 65 64  value was pulled
32060 20 66 72 6f 6d 20 74 68 65 20 69 6e 64 65 78 20   from the index 
32070 2a 2f 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  */.    VdbeBranc
32080 68 54 61 6b 65 6e 28 30 2c 32 29 3b 0a 20 20 20  hTaken(0,2);.   
32090 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
320a0 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f  etInt64(&aMem[pO
320b0 70 2d 3e 70 33 5d 2c 20 76 61 6c 29 3b 0a 20 20  p->p3], val);.  
320c0 7d 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66  }.  goto check_f
320d0 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a  or_interrupt;.}.
320e0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53  ./* Opcode: RowS
320f0 65 74 54 65 73 74 20 50 31 20 50 32 20 50 33 20  etTest P1 P2 P3 
32100 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P4.** Synopsis: 
32110 69 66 20 72 5b 50 33 5d 20 69 6e 20 72 6f 77 73  if r[P3] in rows
32120 65 74 28 50 31 29 20 67 6f 74 6f 20 50 32 0a 2a  et(P1) goto P2.*
32130 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 33  *.** Register P3
32140 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20 68   is assumed to h
32150 6f 6c 64 20 61 20 36 34 2d 62 69 74 20 69 6e 74  old a 64-bit int
32160 65 67 65 72 20 76 61 6c 75 65 2e 20 49 66 20 72  eger value. If r
32170 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 63 6f  egister P1.** co
32180 6e 74 61 69 6e 73 20 61 20 52 6f 77 53 65 74 20  ntains a RowSet 
32190 6f 62 6a 65 63 74 20 61 6e 64 20 74 68 61 74 20  object and that 
321a0 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 63 6f  RowSet object co
321b0 6e 74 61 69 6e 73 0a 2a 2a 20 74 68 65 20 76 61  ntains.** the va
321c0 6c 75 65 20 68 65 6c 64 20 69 6e 20 50 33 2c 20  lue held in P3, 
321d0 6a 75 6d 70 20 74 6f 20 72 65 67 69 73 74 65 72  jump to register
321e0 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20   P2. Otherwise, 
321f0 69 6e 73 65 72 74 20 74 68 65 0a 2a 2a 20 69 6e  insert the.** in
32200 74 65 67 65 72 20 69 6e 20 50 33 20 69 6e 74 6f  teger in P3 into
32210 20 74 68 65 20 52 6f 77 53 65 74 20 61 6e 64 20   the RowSet and 
32220 63 6f 6e 74 69 6e 75 65 20 6f 6e 20 74 6f 20 74  continue on to t
32230 68 65 0a 2a 2a 20 6e 65 78 74 20 6f 70 63 6f 64  he.** next opcod
32240 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 6f 77  e..**.** The Row
32250 53 65 74 20 6f 62 6a 65 63 74 20 69 73 20 6f 70  Set object is op
32260 74 69 6d 69 7a 65 64 20 66 6f 72 20 74 68 65 20  timized for the 
32270 63 61 73 65 20 77 68 65 72 65 20 73 65 74 73 20  case where sets 
32280 6f 66 20 69 6e 74 65 67 65 72 73 0a 2a 2a 20 61  of integers.** a
32290 72 65 20 69 6e 73 65 72 74 65 64 20 69 6e 20 64  re inserted in d
322a0 69 73 74 69 6e 63 74 20 70 68 61 73 65 73 2c 20  istinct phases, 
322b0 77 68 69 63 68 20 65 61 63 68 20 73 65 74 20 63  which each set c
322c0 6f 6e 74 61 69 6e 73 20 6e 6f 20 64 75 70 6c 69  ontains no dupli
322d0 63 61 74 65 73 2e 0a 2a 2a 20 45 61 63 68 20 73  cates..** Each s
322e0 65 74 20 69 73 20 69 64 65 6e 74 69 66 69 65 64  et is identified
322f0 20 62 79 20 61 20 75 6e 69 71 75 65 20 50 34 20   by a unique P4 
32300 76 61 6c 75 65 2e 20 54 68 65 20 66 69 72 73 74  value. The first
32310 20 73 65 74 0a 2a 2a 20 6d 75 73 74 20 68 61 76   set.** must hav
32320 65 20 50 34 3d 3d 30 2c 20 74 68 65 20 66 69 6e  e P4==0, the fin
32330 61 6c 20 73 65 74 20 6d 75 73 74 20 68 61 76 65  al set must have
32340 20 50 34 3d 3d 2d 31 2c 20 61 6e 64 20 66 6f 72   P4==-1, and for
32350 20 61 6c 6c 20 6f 74 68 65 72 20 73 65 74 73 0a   all other sets.
32360 2a 2a 20 6d 75 73 74 20 68 61 76 65 20 50 34 3e  ** must have P4>
32370 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 61 6c  0..**.** This al
32380 6c 6f 77 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f  lows optimizatio
32390 6e 73 3a 20 28 61 29 20 77 68 65 6e 20 50 34 3d  ns: (a) when P4=
323a0 3d 30 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e  =0 there is no n
323b0 65 65 64 20 74 6f 20 74 65 73 74 0a 2a 2a 20 74  eed to test.** t
323c0 68 65 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74  he RowSet object
323d0 20 66 6f 72 20 50 33 2c 20 61 73 20 69 74 20 69   for P3, as it i
323e0 73 20 67 75 61 72 61 6e 74 65 65 64 20 6e 6f 74  s guaranteed not
323f0 20 74 6f 20 63 6f 6e 74 61 69 6e 20 69 74 2c 0a   to contain it,.
32400 2a 2a 20 28 62 29 20 77 68 65 6e 20 50 34 3d 3d  ** (b) when P4==
32410 2d 31 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e  -1 there is no n
32420 65 65 64 20 74 6f 20 69 6e 73 65 72 74 20 74 68  eed to insert th
32430 65 20 76 61 6c 75 65 2c 20 61 73 20 69 74 20 77  e value, as it w
32440 69 6c 6c 0a 2a 2a 20 6e 65 76 65 72 20 62 65 20  ill.** never be 
32450 74 65 73 74 65 64 20 66 6f 72 2c 20 61 6e 64 20  tested for, and 
32460 28 63 29 20 77 68 65 6e 20 61 20 76 61 6c 75 65  (c) when a value
32470 20 74 68 61 74 20 69 73 20 70 61 72 74 20 6f 66   that is part of
32480 20 73 65 74 20 58 20 69 73 0a 2a 2a 20 69 6e 73   set X is.** ins
32490 65 72 74 65 64 2c 20 74 68 65 72 65 20 69 73 20  erted, there is 
324a0 6e 6f 20 6e 65 65 64 20 74 6f 20 73 65 61 72 63  no need to searc
324b0 68 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 20  h to see if the 
324c0 73 61 6d 65 20 76 61 6c 75 65 20 77 61 73 0a 2a  same value was.*
324d0 2a 20 70 72 65 76 69 6f 75 73 6c 79 20 69 6e 73  * previously ins
324e0 65 72 74 65 64 20 61 73 20 70 61 72 74 20 6f 66  erted as part of
324f0 20 73 65 74 20 58 20 28 6f 6e 6c 79 20 69 66 20   set X (only if 
32500 69 74 20 77 61 73 20 70 72 65 76 69 6f 75 73 6c  it was previousl
32510 79 0a 2a 2a 20 69 6e 73 65 72 74 65 64 20 61 73  y.** inserted as
32520 20 70 61 72 74 20 6f 66 20 73 6f 6d 65 20 6f 74   part of some ot
32530 68 65 72 20 73 65 74 29 2e 0a 2a 2f 0a 63 61 73  her set)..*/.cas
32540 65 20 4f 50 5f 52 6f 77 53 65 74 54 65 73 74 3a  e OP_RowSetTest:
32550 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
32560 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
32570 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e  in1, in3 */.  in
32580 74 20 69 53 65 74 3b 0a 20 20 69 6e 74 20 65 78  t iSet;.  int ex
32590 69 73 74 73 3b 0a 0a 20 20 70 49 6e 31 20 3d 20  ists;..  pIn1 = 
325a0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
325b0 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
325c0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 53 65 74 20  Op->p3];.  iSet 
325d0 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 61  = pOp->p4.i;.  a
325e0 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61  ssert( pIn3->fla
325f0 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 0a 20  gs&MEM_Int );.. 
32600 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20   /* If there is 
32610 61 6e 79 74 68 69 6e 67 20 6f 74 68 65 72 20 74  anything other t
32620 68 61 6e 20 61 20 72 6f 77 73 65 74 20 6f 62 6a  han a rowset obj
32630 65 63 74 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65  ect in memory ce
32640 6c 6c 20 50 31 2c 0a 20 20 2a 2a 20 64 65 6c 65  ll P1,.  ** dele
32650 74 65 20 69 74 20 6e 6f 77 20 61 6e 64 20 69 6e  te it now and in
32660 69 74 69 61 6c 69 7a 65 20 50 31 20 77 69 74 68  itialize P1 with
32670 20 61 6e 20 65 6d 70 74 79 20 72 6f 77 73 65 74   an empty rowset
32680 0a 20 20 2a 2f 0a 20 20 69 66 28 20 28 70 49 6e  .  */.  if( (pIn
32690 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42  1->flags & MEM_B
326a0 6c 6f 62 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69  lob)==0 ){.    i
326b0 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
326c0 6d 53 65 74 52 6f 77 53 65 74 28 70 49 6e 31 29  mSetRowSet(pIn1)
326d0 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
326e0 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 73 71    }.  assert( sq
326f0 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 73 52 6f  lite3VdbeMemIsRo
32700 77 53 65 74 28 70 49 6e 31 29 20 29 3b 0a 20 20  wSet(pIn1) );.  
32710 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
32720 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b  ype==P4_INT32 );
32730 0a 20 20 61 73 73 65 72 74 28 20 69 53 65 74 3d  .  assert( iSet=
32740 3d 2d 31 20 7c 7c 20 69 53 65 74 3e 3d 30 20 29  =-1 || iSet>=0 )
32750 3b 0a 20 20 69 66 28 20 69 53 65 74 20 29 7b 0a  ;.  if( iSet ){.
32760 20 20 20 20 65 78 69 73 74 73 20 3d 20 73 71 6c      exists = sql
32770 69 74 65 33 52 6f 77 53 65 74 54 65 73 74 28 28  ite3RowSetTest((
32780 52 6f 77 53 65 74 2a 29 70 49 6e 31 2d 3e 7a 2c  RowSet*)pIn1->z,
32790 20 69 53 65 74 2c 20 70 49 6e 33 2d 3e 75 2e 69   iSet, pIn3->u.i
327a0 29 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  );.    VdbeBranc
327b0 68 54 61 6b 65 6e 28 65 78 69 73 74 73 21 3d 30  hTaken(exists!=0
327c0 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 65 78 69  ,2);.    if( exi
327d0 73 74 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  sts ) goto jump_
327e0 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 69 66 28  to_p2;.  }.  if(
327f0 20 69 53 65 74 3e 3d 30 20 29 7b 0a 20 20 20 20   iSet>=0 ){.    
32800 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73  sqlite3RowSetIns
32810 65 72 74 28 28 52 6f 77 53 65 74 2a 29 70 49 6e  ert((RowSet*)pIn
32820 31 2d 3e 7a 2c 20 70 49 6e 33 2d 3e 75 2e 69 29  1->z, pIn3->u.i)
32830 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
32840 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ...#ifndef SQLIT
32850 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 0a  E_OMIT_TRIGGER..
32860 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 6f 67 72  /* Opcode: Progr
32870 61 6d 20 50 31 20 50 32 20 50 33 20 50 34 20 50  am P1 P2 P3 P4 P
32880 35 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20  5.**.** Execute 
32890 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67  the trigger prog
328a0 72 61 6d 20 70 61 73 73 65 64 20 61 73 20 50 34  ram passed as P4
328b0 20 28 74 79 70 65 20 50 34 5f 53 55 42 50 52 4f   (type P4_SUBPRO
328c0 47 52 41 4d 29 2e 20 0a 2a 2a 0a 2a 2a 20 50 31  GRAM). .**.** P1
328d0 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64   contains the ad
328e0 64 72 65 73 73 20 6f 66 20 74 68 65 20 6d 65 6d  dress of the mem
328f0 6f 72 79 20 63 65 6c 6c 20 74 68 61 74 20 63 6f  ory cell that co
32900 6e 74 61 69 6e 73 20 74 68 65 20 66 69 72 73 74  ntains the first
32910 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c   memory .** cell
32920 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20   in an array of 
32930 76 61 6c 75 65 73 20 75 73 65 64 20 61 73 20 61  values used as a
32940 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20  rguments to the 
32950 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20 50 32 20  sub-program. P2 
32960 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  .** contains the
32970 20 61 64 64 72 65 73 73 20 74 6f 20 6a 75 6d 70   address to jump
32980 20 74 6f 20 69 66 20 74 68 65 20 73 75 62 2d 70   to if the sub-p
32990 72 6f 67 72 61 6d 20 74 68 72 6f 77 73 20 61 6e  rogram throws an
329a0 20 49 47 4e 4f 52 45 20 0a 2a 2a 20 65 78 63 65   IGNORE .** exce
329b0 70 74 69 6f 6e 20 75 73 69 6e 67 20 74 68 65 20  ption using the 
329c0 52 41 49 53 45 28 29 20 66 75 6e 63 74 69 6f 6e  RAISE() function
329d0 2e 20 52 65 67 69 73 74 65 72 20 50 33 20 63 6f  . Register P3 co
329e0 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64 72 65  ntains the addre
329f0 73 73 20 0a 2a 2a 20 6f 66 20 61 20 6d 65 6d 6f  ss .** of a memo
32a00 72 79 20 63 65 6c 6c 20 69 6e 20 74 68 69 73 20  ry cell in this 
32a10 28 74 68 65 20 70 61 72 65 6e 74 29 20 56 4d 20  (the parent) VM 
32a20 74 68 61 74 20 69 73 20 75 73 65 64 20 74 6f 20  that is used to 
32a30 61 6c 6c 6f 63 61 74 65 20 74 68 65 20 0a 2a 2a  allocate the .**
32a40 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64   memory required
32a50 20 62 79 20 74 68 65 20 73 75 62 2d 76 64 62 65   by the sub-vdbe
32a60 20 61 74 20 72 75 6e 74 69 6d 65 2e 0a 2a 2a 0a   at runtime..**.
32a70 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
32a80 65 72 20 74 6f 20 74 68 65 20 56 4d 20 63 6f 6e  er to the VM con
32a90 74 61 69 6e 69 6e 67 20 74 68 65 20 74 72 69 67  taining the trig
32aa0 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a  ger program..**.
32ab0 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 6e 2d  ** If P5 is non-
32ac0 7a 65 72 6f 2c 20 74 68 65 6e 20 72 65 63 75 72  zero, then recur
32ad0 73 69 76 65 20 70 72 6f 67 72 61 6d 20 69 6e 76  sive program inv
32ae0 6f 63 61 74 69 6f 6e 20 69 73 20 65 6e 61 62 6c  ocation is enabl
32af0 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50  ed..*/.case OP_P
32b00 72 6f 67 72 61 6d 3a 20 7b 20 20 20 20 20 20 20  rogram: {       
32b10 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e   /* jump */.  in
32b20 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20 20  t nMem;         
32b30 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
32b40 6f 66 20 6d 65 6d 6f 72 79 20 72 65 67 69 73 74  of memory regist
32b50 65 72 73 20 66 6f 72 20 73 75 62 2d 70 72 6f 67  ers for sub-prog
32b60 72 61 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 79  ram */.  int nBy
32b70 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  te;             
32b80 20 2f 2a 20 42 79 74 65 73 20 6f 66 20 72 75 6e   /* Bytes of run
32b90 74 69 6d 65 20 73 70 61 63 65 20 72 65 71 75 69  time space requi
32ba0 72 65 64 20 66 6f 72 20 73 75 62 2d 70 72 6f 67  red for sub-prog
32bb0 72 61 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52  ram */.  Mem *pR
32bc0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
32bd0 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20   /* Register to 
32be0 61 6c 6c 6f 63 61 74 65 20 72 75 6e 74 69 6d 65  allocate runtime
32bf0 20 73 70 61 63 65 20 2a 2f 0a 20 20 4d 65 6d 20   space */.  Mem 
32c00 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20  *pMem;          
32c10 20 20 20 20 2f 2a 20 55 73 65 64 20 74 6f 20 69      /* Used to i
32c20 74 65 72 61 74 65 20 74 68 72 6f 75 67 68 20 6d  terate through m
32c30 65 6d 6f 72 79 20 63 65 6c 6c 73 20 2a 2f 0a 20  emory cells */. 
32c40 20 4d 65 6d 20 2a 70 45 6e 64 3b 20 20 20 20 20   Mem *pEnd;     
32c50 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74           /* Last
32c60 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20   memory cell in 
32c70 6e 65 77 20 61 72 72 61 79 20 2a 2f 0a 20 20 56  new array */.  V
32c80 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65  dbeFrame *pFrame
32c90 3b 20 20 20 20 20 20 2f 2a 20 4e 65 77 20 76 64  ;      /* New vd
32ca0 62 65 20 66 72 61 6d 65 20 74 6f 20 65 78 65 63  be frame to exec
32cb0 75 74 65 20 69 6e 20 2a 2f 0a 20 20 53 75 62 50  ute in */.  SubP
32cc0 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d  rogram *pProgram
32cd0 3b 20 20 20 2f 2a 20 53 75 62 2d 70 72 6f 67 72  ;   /* Sub-progr
32ce0 61 6d 20 74 6f 20 65 78 65 63 75 74 65 20 2a 2f  am to execute */
32cf0 0a 20 20 76 6f 69 64 20 2a 74 3b 20 20 20 20 20  .  void *t;     
32d00 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f             /* To
32d10 6b 65 6e 20 69 64 65 6e 74 69 66 79 69 6e 67 20  ken identifying 
32d20 74 72 69 67 67 65 72 20 2a 2f 0a 0a 20 20 70 50  trigger */..  pP
32d30 72 6f 67 72 61 6d 20 3d 20 70 4f 70 2d 3e 70 34  rogram = pOp->p4
32d40 2e 70 50 72 6f 67 72 61 6d 3b 0a 20 20 70 52 74  .pProgram;.  pRt
32d50 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
32d60 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 50 72  ];.  assert( pPr
32d70 6f 67 72 61 6d 2d 3e 6e 4f 70 3e 30 20 29 3b 0a  ogram->nOp>0 );.
32d80 20 20 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 70    .  /* If the p
32d90 35 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 2c  5 flag is clear,
32da0 20 74 68 65 6e 20 72 65 63 75 72 73 69 76 65 20   then recursive 
32db0 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72  invocation of tr
32dc0 69 67 67 65 72 73 20 69 73 20 0a 20 20 2a 2a 20  iggers is .  ** 
32dd0 64 69 73 61 62 6c 65 64 20 66 6f 72 20 62 61 63  disabled for bac
32de0 6b 77 61 72 64 73 20 63 6f 6d 70 61 74 69 62 69  kwards compatibi
32df0 6c 69 74 79 20 28 70 35 20 69 73 20 73 65 74 20  lity (p5 is set 
32e00 69 66 20 74 68 69 73 20 73 75 62 2d 70 72 6f 67  if this sub-prog
32e10 72 61 6d 0a 20 20 2a 2a 20 69 73 20 72 65 61 6c  ram.  ** is real
32e20 6c 79 20 61 20 74 72 69 67 67 65 72 2c 20 6e 6f  ly a trigger, no
32e30 74 20 61 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  t a foreign key 
32e40 61 63 74 69 6f 6e 2c 20 61 6e 64 20 74 68 65 20  action, and the 
32e50 66 6c 61 67 20 73 65 74 0a 20 20 2a 2a 20 61 6e  flag set.  ** an
32e60 64 20 63 6c 65 61 72 65 64 20 62 79 20 74 68 65  d cleared by the
32e70 20 22 50 52 41 47 4d 41 20 72 65 63 75 72 73 69   "PRAGMA recursi
32e80 76 65 5f 74 72 69 67 67 65 72 73 22 20 63 6f 6d  ve_triggers" com
32e90 6d 61 6e 64 20 69 73 20 63 6c 65 61 72 29 2e 0a  mand is clear)..
32ea0 20 20 2a 2a 20 0a 20 20 2a 2a 20 49 74 20 69 73    ** .  ** It is
32eb0 20 72 65 63 75 72 73 69 76 65 20 69 6e 76 6f 63   recursive invoc
32ec0 61 74 69 6f 6e 20 6f 66 20 74 72 69 67 67 65 72  ation of trigger
32ed0 73 2c 20 61 74 20 74 68 65 20 53 51 4c 20 6c 65  s, at the SQL le
32ee0 76 65 6c 2c 20 74 68 61 74 20 69 73 20 0a 20 20  vel, that is .  
32ef0 2a 2a 20 64 69 73 61 62 6c 65 64 2e 20 49 6e 20  ** disabled. In 
32f00 73 6f 6d 65 20 63 61 73 65 73 20 61 20 73 69 6e  some cases a sin
32f10 67 6c 65 20 74 72 69 67 67 65 72 20 6d 61 79 20  gle trigger may 
32f20 67 65 6e 65 72 61 74 65 20 6d 6f 72 65 20 74 68  generate more th
32f30 61 6e 20 6f 6e 65 20 0a 20 20 2a 2a 20 53 75 62  an one .  ** Sub
32f40 50 72 6f 67 72 61 6d 20 28 69 66 20 74 68 65 20  Program (if the 
32f50 74 72 69 67 67 65 72 20 6d 61 79 20 62 65 20 65  trigger may be e
32f60 78 65 63 75 74 65 64 20 77 69 74 68 20 6d 6f 72  xecuted with mor
32f70 65 20 74 68 61 6e 20 6f 6e 65 20 64 69 66 66 65  e than one diffe
32f80 72 65 6e 74 20 0a 20 20 2a 2a 20 4f 4e 20 43 4f  rent .  ** ON CO
32f90 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d  NFLICT algorithm
32fa0 29 2e 20 53 75 62 50 72 6f 67 72 61 6d 20 73 74  ). SubProgram st
32fb0 72 75 63 74 75 72 65 73 20 61 73 73 6f 63 69 61  ructures associa
32fc0 74 65 64 20 77 69 74 68 20 61 0a 20 20 2a 2a 20  ted with a.  ** 
32fd0 73 69 6e 67 6c 65 20 74 72 69 67 67 65 72 20 61  single trigger a
32fe0 6c 6c 20 68 61 76 65 20 74 68 65 20 73 61 6d 65  ll have the same
32ff0 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 53   value for the S
33000 75 62 50 72 6f 67 72 61 6d 2e 74 6f 6b 65 6e 20  ubProgram.token 
33010 0a 20 20 2a 2a 20 76 61 72 69 61 62 6c 65 2e 20  .  ** variable. 
33020 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   */.  if( pOp->p
33030 35 20 29 7b 0a 20 20 20 20 74 20 3d 20 70 50 72  5 ){.    t = pPr
33040 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20  ogram->token;.  
33050 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e    for(pFrame=p->
33060 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 20 26  pFrame; pFrame &
33070 26 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 21  & pFrame->token!
33080 3d 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d  =t; pFrame=pFram
33090 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20  e->pParent);.   
330a0 20 69 66 28 20 70 46 72 61 6d 65 20 29 20 62 72   if( pFrame ) br
330b0 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  eak;.  }..  if( 
330c0 70 2d 3e 6e 46 72 61 6d 65 3e 3d 64 62 2d 3e 61  p->nFrame>=db->a
330d0 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
330e0 49 54 5f 54 52 49 47 47 45 52 5f 44 45 50 54 48  IT_TRIGGER_DEPTH
330f0 5d 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51  ] ){.    rc = SQ
33100 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20  LITE_ERROR;.    
33110 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72  sqlite3VdbeError
33120 28 70 2c 20 22 74 6f 6f 20 6d 61 6e 79 20 6c 65  (p, "too many le
33130 76 65 6c 73 20 6f 66 20 74 72 69 67 67 65 72 20  vels of trigger 
33140 72 65 63 75 72 73 69 6f 6e 22 29 3b 0a 20 20 20  recursion");.   
33150 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
33160 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20  to_error;.  }.. 
33170 20 2f 2a 20 52 65 67 69 73 74 65 72 20 70 52 74   /* Register pRt
33180 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72   is used to stor
33190 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 72 65 71  e the memory req
331a0 75 69 72 65 64 20 74 6f 20 73 61 76 65 20 74 68  uired to save th
331b0 65 20 73 74 61 74 65 0a 20 20 2a 2a 20 6f 66 20  e state.  ** of 
331c0 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 67  the current prog
331d0 72 61 6d 2c 20 61 6e 64 20 74 68 65 20 6d 65 6d  ram, and the mem
331e0 6f 72 79 20 72 65 71 75 69 72 65 64 20 61 74 20  ory required at 
331f0 72 75 6e 74 69 6d 65 20 74 6f 20 65 78 65 63 75  runtime to execu
33200 74 65 0a 20 20 2a 2a 20 74 68 65 20 74 72 69 67  te.  ** the trig
33210 67 65 72 20 70 72 6f 67 72 61 6d 2e 20 49 66 20  ger program. If 
33220 74 68 69 73 20 74 72 69 67 67 65 72 20 68 61 73  this trigger has
33230 20 62 65 65 6e 20 66 69 72 65 64 20 62 65 66 6f   been fired befo
33240 72 65 2c 20 74 68 65 6e 20 70 52 74 20 0a 20 20  re, then pRt .  
33250 2a 2a 20 69 73 20 61 6c 72 65 61 64 79 20 61 6c  ** is already al
33260 6c 6f 63 61 74 65 64 2e 20 4f 74 68 65 72 77 69  located. Otherwi
33270 73 65 2c 20 69 74 20 6d 75 73 74 20 62 65 20 69  se, it must be i
33280 6e 69 74 69 61 6c 69 7a 65 64 2e 20 20 2a 2f 0a  nitialized.  */.
33290 20 20 69 66 28 20 28 70 52 74 2d 3e 66 6c 61 67    if( (pRt->flag
332a0 73 26 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20 29  s&MEM_Blob)==0 )
332b0 7b 0a 20 20 20 20 2f 2a 20 53 75 62 50 72 6f 67  {.    /* SubProg
332c0 72 61 6d 2e 6e 4d 65 6d 20 69 73 20 73 65 74 20  ram.nMem is set 
332d0 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  to the number of
332e0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73   memory cells us
332f0 65 64 20 62 79 20 74 68 65 20 0a 20 20 20 20 2a  ed by the .    *
33300 2a 20 70 72 6f 67 72 61 6d 20 73 74 6f 72 65 64  * program stored
33310 20 69 6e 20 53 75 62 50 72 6f 67 72 61 6d 2e 61   in SubProgram.a
33320 4f 70 2e 20 41 73 20 77 65 6c 6c 20 61 73 20 74  Op. As well as t
33330 68 65 73 65 2c 20 6f 6e 65 20 6d 65 6d 6f 72 79  hese, one memory
33340 0a 20 20 20 20 2a 2a 20 63 65 6c 6c 20 69 73 20  .    ** cell is 
33350 72 65 71 75 69 72 65 64 20 66 6f 72 20 65 61 63  required for eac
33360 68 20 63 75 72 73 6f 72 20 75 73 65 64 20 62 79  h cursor used by
33370 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 20 53 65   the program. Se
33380 74 20 6c 6f 63 61 6c 0a 20 20 20 20 2a 2a 20 76  t local.    ** v
33390 61 72 69 61 62 6c 65 20 6e 4d 65 6d 20 28 61 6e  ariable nMem (an
333a0 64 20 6c 61 74 65 72 2c 20 56 64 62 65 46 72 61  d later, VdbeFra
333b0 6d 65 2e 6e 43 68 69 6c 64 4d 65 6d 29 20 74 6f  me.nChildMem) to
333c0 20 74 68 69 73 20 76 61 6c 75 65 2e 0a 20 20 20   this value..   
333d0 20 2a 2f 0a 20 20 20 20 6e 4d 65 6d 20 3d 20 70   */.    nMem = p
333e0 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 20 2b 20  Program->nMem + 
333f0 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a  pProgram->nCsr;.
33400 20 20 20 20 61 73 73 65 72 74 28 20 6e 4d 65 6d      assert( nMem
33410 3e 30 20 29 3b 0a 20 20 20 20 69 66 28 20 70 50  >0 );.    if( pP
33420 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 30 20  rogram->nCsr==0 
33430 29 20 6e 4d 65 6d 2b 2b 3b 0a 20 20 20 20 6e 42  ) nMem++;.    nB
33440 79 74 65 20 3d 20 52 4f 55 4e 44 38 28 73 69 7a  yte = ROUND8(siz
33450 65 6f 66 28 56 64 62 65 46 72 61 6d 65 29 29 0a  eof(VdbeFrame)).
33460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 20                + 
33470 6e 4d 65 6d 20 2a 20 73 69 7a 65 6f 66 28 4d 65  nMem * sizeof(Me
33480 6d 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  m).             
33490 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73   + pProgram->nCs
334a0 72 20 2a 20 73 69 7a 65 6f 66 28 56 64 62 65 43  r * sizeof(VdbeC
334b0 75 72 73 6f 72 2a 29 0a 20 20 20 20 20 20 20 20  ursor*).        
334c0 20 20 20 20 20 20 2b 20 28 70 50 72 6f 67 72 61        + (pProgra
334d0 6d 2d 3e 6e 4f 70 20 2b 20 37 29 2f 38 3b 0a 20  m->nOp + 7)/8;. 
334e0 20 20 20 70 46 72 61 6d 65 20 3d 20 73 71 6c 69     pFrame = sqli
334f0 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28  te3DbMallocZero(
33500 64 62 2c 20 6e 42 79 74 65 29 3b 0a 20 20 20 20  db, nByte);.    
33510 69 66 28 20 21 70 46 72 61 6d 65 20 29 7b 0a 20  if( !pFrame ){. 
33520 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d       goto no_mem
33530 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
33540 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73  te3VdbeMemReleas
33550 65 28 70 52 74 29 3b 0a 20 20 20 20 70 52 74 2d  e(pRt);.    pRt-
33560 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f  >flags = MEM_Blo
33570 62 7c 4d 45 4d 5f 44 79 6e 3b 0a 20 20 20 20 70  b|MEM_Dyn;.    p
33580 52 74 2d 3e 7a 20 3d 20 28 63 68 61 72 2a 29 70  Rt->z = (char*)p
33590 46 72 61 6d 65 3b 0a 20 20 20 20 70 52 74 2d 3e  Frame;.    pRt->
335a0 6e 20 3d 20 6e 42 79 74 65 3b 0a 20 20 20 20 70  n = nByte;.    p
335b0 52 74 2d 3e 78 44 65 6c 20 3d 20 73 71 6c 69 74  Rt->xDel = sqlit
335c0 65 33 56 64 62 65 46 72 61 6d 65 4d 65 6d 44 65  e3VdbeFrameMemDe
335d0 6c 3b 0a 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  l;..    pFrame->
335e0 76 20 3d 20 70 3b 0a 20 20 20 20 70 46 72 61 6d  v = p;.    pFram
335f0 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 3d 20 6e  e->nChildMem = n
33600 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  Mem;.    pFrame-
33610 3e 6e 43 68 69 6c 64 43 73 72 20 3d 20 70 50 72  >nChildCsr = pPr
33620 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20  ogram->nCsr;.   
33630 20 70 46 72 61 6d 65 2d 3e 70 63 20 3d 20 28 69   pFrame->pc = (i
33640 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a  nt)(pOp - aOp);.
33650 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4d 65 6d      pFrame->aMem
33660 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20   = p->aMem;.    
33670 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 3d 20 70  pFrame->nMem = p
33680 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61  ->nMem;.    pFra
33690 6d 65 2d 3e 61 70 43 73 72 20 3d 20 70 2d 3e 61  me->apCsr = p->a
336a0 70 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d 65  pCsr;.    pFrame
336b0 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 70 2d 3e 6e  ->nCursor = p->n
336c0 43 75 72 73 6f 72 3b 0a 20 20 20 20 70 46 72 61  Cursor;.    pFra
336d0 6d 65 2d 3e 61 4f 70 20 3d 20 70 2d 3e 61 4f 70  me->aOp = p->aOp
336e0 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4f  ;.    pFrame->nO
336f0 70 20 3d 20 70 2d 3e 6e 4f 70 3b 0a 20 20 20 20  p = p->nOp;.    
33700 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 20 3d 20  pFrame->token = 
33710 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b  pProgram->token;
33720 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
33730 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53  NABLE_STMT_SCANS
33740 54 41 54 55 53 0a 20 20 20 20 70 46 72 61 6d 65  TATUS.    pFrame
33750 2d 3e 61 6e 45 78 65 63 20 3d 20 70 2d 3e 61 6e  ->anExec = p->an
33760 45 78 65 63 3b 0a 23 65 6e 64 69 66 0a 23 69 66  Exec;.#endif.#if
33770 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
33780 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 69 46 72  .    pFrame->iFr
33790 61 6d 65 4d 61 67 69 63 20 3d 20 53 51 4c 49 54  ameMagic = SQLIT
337a0 45 5f 46 52 41 4d 45 5f 4d 41 47 49 43 3b 0a 23  E_FRAME_MAGIC;.#
337b0 65 6e 64 69 66 0a 0a 20 20 20 20 70 45 6e 64 20  endif..    pEnd 
337c0 3d 20 26 56 64 62 65 46 72 61 6d 65 4d 65 6d 28  = &VdbeFrameMem(
337d0 70 46 72 61 6d 65 29 5b 70 46 72 61 6d 65 2d 3e  pFrame)[pFrame->
337e0 6e 43 68 69 6c 64 4d 65 6d 5d 3b 0a 20 20 20 20  nChildMem];.    
337f0 66 6f 72 28 70 4d 65 6d 3d 56 64 62 65 46 72 61  for(pMem=VdbeFra
33800 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 3b 20 70  meMem(pFrame); p
33810 4d 65 6d 21 3d 70 45 6e 64 3b 20 70 4d 65 6d 2b  Mem!=pEnd; pMem+
33820 2b 29 7b 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e  +){.      pMem->
33830 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e 64 65  flags = MEM_Unde
33840 66 69 6e 65 64 3b 0a 20 20 20 20 20 20 70 4d 65  fined;.      pMe
33850 6d 2d 3e 64 62 20 3d 20 64 62 3b 0a 20 20 20 20  m->db = db;.    
33860 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  }.  }else{.    p
33870 46 72 61 6d 65 20 3d 20 28 56 64 62 65 46 72 61  Frame = (VdbeFra
33880 6d 65 2a 29 70 52 74 2d 3e 7a 3b 0a 20 20 20 20  me*)pRt->z;.    
33890 61 73 73 65 72 74 28 20 70 52 74 2d 3e 78 44 65  assert( pRt->xDe
338a0 6c 3d 3d 73 71 6c 69 74 65 33 56 64 62 65 46 72  l==sqlite3VdbeFr
338b0 61 6d 65 4d 65 6d 44 65 6c 20 29 3b 0a 20 20 20  ameMemDel );.   
338c0 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61   assert( pProgra
338d0 6d 2d 3e 6e 4d 65 6d 2b 70 50 72 6f 67 72 61 6d  m->nMem+pProgram
338e0 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e  ->nCsr==pFrame->
338f0 6e 43 68 69 6c 64 4d 65 6d 20 0a 20 20 20 20 20  nChildMem .     
33900 20 20 20 7c 7c 20 28 70 50 72 6f 67 72 61 6d 2d     || (pProgram-
33910 3e 6e 43 73 72 3d 3d 30 20 26 26 20 70 50 72 6f  >nCsr==0 && pPro
33920 67 72 61 6d 2d 3e 6e 4d 65 6d 2b 31 3d 3d 70 46  gram->nMem+1==pF
33930 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 29  rame->nChildMem)
33940 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
33950 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d  pProgram->nCsr==
33960 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73  pFrame->nChildCs
33970 72 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  r );.    assert(
33980 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70   (int)(pOp - aOp
33990 29 3d 3d 70 46 72 61 6d 65 2d 3e 70 63 20 29 3b  )==pFrame->pc );
339a0 0a 20 20 7d 0a 0a 20 20 70 2d 3e 6e 46 72 61 6d  .  }..  p->nFram
339b0 65 2b 2b 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 70  e++;.  pFrame->p
339c0 50 61 72 65 6e 74 20 3d 20 70 2d 3e 70 46 72 61  Parent = p->pFra
339d0 6d 65 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6c 61  me;.  pFrame->la
339e0 73 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61  stRowid = db->la
339f0 73 74 52 6f 77 69 64 3b 0a 20 20 70 46 72 61 6d  stRowid;.  pFram
33a00 65 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 70 2d 3e  e->nChange = p->
33a10 6e 43 68 61 6e 67 65 3b 0a 20 20 70 46 72 61 6d  nChange;.  pFram
33a20 65 2d 3e 6e 44 62 43 68 61 6e 67 65 20 3d 20 70  e->nDbChange = p
33a30 2d 3e 64 62 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20  ->db->nChange;. 
33a40 20 61 73 73 65 72 74 28 20 70 46 72 61 6d 65 2d   assert( pFrame-
33a50 3e 70 41 75 78 44 61 74 61 3d 3d 30 20 29 3b 0a  >pAuxData==0 );.
33a60 20 20 70 46 72 61 6d 65 2d 3e 70 41 75 78 44 61    pFrame->pAuxDa
33a70 74 61 20 3d 20 70 2d 3e 70 41 75 78 44 61 74 61  ta = p->pAuxData
33a80 3b 0a 20 20 70 2d 3e 70 41 75 78 44 61 74 61 20  ;.  p->pAuxData 
33a90 3d 20 30 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67  = 0;.  p->nChang
33aa0 65 20 3d 20 30 3b 0a 20 20 70 2d 3e 70 46 72 61  e = 0;.  p->pFra
33ab0 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a 20 20 70  me = pFrame;.  p
33ac0 2d 3e 61 4d 65 6d 20 3d 20 61 4d 65 6d 20 3d 20  ->aMem = aMem = 
33ad0 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72  VdbeFrameMem(pFr
33ae0 61 6d 65 29 3b 0a 20 20 70 2d 3e 6e 4d 65 6d 20  ame);.  p->nMem 
33af0 3d 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64  = pFrame->nChild
33b00 4d 65 6d 3b 0a 20 20 70 2d 3e 6e 43 75 72 73 6f  Mem;.  p->nCurso
33b10 72 20 3d 20 28 75 31 36 29 70 46 72 61 6d 65 2d  r = (u16)pFrame-
33b20 3e 6e 43 68 69 6c 64 43 73 72 3b 0a 20 20 70 2d  >nChildCsr;.  p-
33b30 3e 61 70 43 73 72 20 3d 20 28 56 64 62 65 43 75  >apCsr = (VdbeCu
33b40 72 73 6f 72 20 2a 2a 29 26 61 4d 65 6d 5b 70 2d  rsor **)&aMem[p-
33b50 3e 6e 4d 65 6d 5d 3b 0a 20 20 70 46 72 61 6d 65  >nMem];.  pFrame
33b60 2d 3e 61 4f 6e 63 65 20 3d 20 28 75 38 2a 29 26  ->aOnce = (u8*)&
33b70 70 2d 3e 61 70 43 73 72 5b 70 50 72 6f 67 72 61  p->apCsr[pProgra
33b80 6d 2d 3e 6e 43 73 72 5d 3b 0a 20 20 6d 65 6d 73  m->nCsr];.  mems
33b90 65 74 28 70 46 72 61 6d 65 2d 3e 61 4f 6e 63 65  et(pFrame->aOnce
33ba0 2c 20 30 2c 20 28 70 50 72 6f 67 72 61 6d 2d 3e  , 0, (pProgram->
33bb0 6e 4f 70 20 2b 20 37 29 2f 38 29 3b 0a 20 20 70  nOp + 7)/8);.  p
33bc0 2d 3e 61 4f 70 20 3d 20 61 4f 70 20 3d 20 70 50  ->aOp = aOp = pP
33bd0 72 6f 67 72 61 6d 2d 3e 61 4f 70 3b 0a 20 20 70  rogram->aOp;.  p
33be0 2d 3e 6e 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d  ->nOp = pProgram
33bf0 2d 3e 6e 4f 70 3b 0a 23 69 66 64 65 66 20 53 51  ->nOp;.#ifdef SQ
33c00 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54  LITE_ENABLE_STMT
33c10 5f 53 43 41 4e 53 54 41 54 55 53 0a 20 20 70 2d  _SCANSTATUS.  p-
33c20 3e 61 6e 45 78 65 63 20 3d 20 30 3b 0a 23 65 6e  >anExec = 0;.#en
33c30 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
33c40 45 5f 44 45 42 55 47 0a 20 20 2f 2a 20 56 65 72  E_DEBUG.  /* Ver
33c50 69 66 79 20 74 68 61 74 20 73 65 63 6f 6e 64 20  ify that second 
33c60 61 6e 64 20 73 75 62 73 65 71 75 65 6e 74 20 65  and subsequent e
33c70 78 65 63 75 74 69 6f 6e 73 20 6f 66 20 74 68 65  xecutions of the
33c80 20 73 61 6d 65 20 74 72 69 67 67 65 72 20 64 6f   same trigger do
33c90 20 6e 6f 74 0a 20 20 2a 2a 20 74 72 79 20 74 6f   not.  ** try to
33ca0 20 72 65 75 73 65 20 72 65 67 69 73 74 65 72 20   reuse register 
33cb0 76 61 6c 75 65 73 20 66 72 6f 6d 20 74 68 65 20  values from the 
33cc0 66 69 72 73 74 20 75 73 65 2e 20 2a 2f 0a 20 20  first use. */.  
33cd0 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20  {.    int i;.   
33ce0 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e   for(i=0; i<p->n
33cf0 4d 65 6d 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  Mem; i++){.     
33d00 20 61 4d 65 6d 5b 69 5d 2e 70 53 63 6f 70 79 46   aMem[i].pScopyF
33d10 72 6f 6d 20 3d 20 30 3b 20 20 2f 2a 20 50 72 65  rom = 0;  /* Pre
33d20 76 65 6e 74 20 66 61 6c 73 65 2d 70 6f 73 69 74  vent false-posit
33d30 69 76 65 20 41 62 6f 75 74 54 6f 43 68 61 6e 67  ive AboutToChang
33d40 65 28 29 20 65 72 72 73 20 2a 2f 0a 20 20 20 20  e() errs */.    
33d50 20 20 61 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73 20    aMem[i].flags 
33d60 7c 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64  |= MEM_Undefined
33d70 3b 20 2f 2a 20 43 61 75 73 65 20 61 20 66 61 75  ; /* Cause a fau
33d80 6c 74 20 69 66 20 74 68 69 73 20 72 65 67 20 69  lt if this reg i
33d90 73 20 72 65 75 73 65 64 20 2a 2f 0a 20 20 20 20  s reused */.    
33da0 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 70  }.  }.#endif.  p
33db0 4f 70 20 3d 20 26 61 4f 70 5b 2d 31 5d 3b 0a 0a  Op = &aOp[-1];..
33dc0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
33dd0 70 63 6f 64 65 3a 20 50 61 72 61 6d 20 50 31 20  pcode: Param P1 
33de0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  P2 * * *.**.** T
33df0 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e  his opcode is on
33e00 6c 79 20 65 76 65 72 20 70 72 65 73 65 6e 74 20  ly ever present 
33e10 69 6e 20 73 75 62 2d 70 72 6f 67 72 61 6d 73 20  in sub-programs 
33e20 63 61 6c 6c 65 64 20 76 69 61 20 74 68 65 20 0a  called via the .
33e30 2a 2a 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e  ** OP_Program in
33e40 73 74 72 75 63 74 69 6f 6e 2e 20 43 6f 70 79 20  struction. Copy 
33e50 61 20 76 61 6c 75 65 20 63 75 72 72 65 6e 74 6c  a value currentl
33e60 79 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6d 65  y stored in a me
33e70 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 6f 66  mory .** cell of
33e80 20 74 68 65 20 63 61 6c 6c 69 6e 67 20 28 70 61   the calling (pa
33e90 72 65 6e 74 29 20 66 72 61 6d 65 20 74 6f 20 63  rent) frame to c
33ea0 65 6c 6c 20 50 32 20 69 6e 20 74 68 65 20 63 75  ell P2 in the cu
33eb0 72 72 65 6e 74 20 66 72 61 6d 65 73 20 0a 2a 2a  rrent frames .**
33ec0 20 61 64 64 72 65 73 73 20 73 70 61 63 65 2e 20   address space. 
33ed0 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20  This is used by 
33ee0 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73  trigger programs
33ef0 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 6e   to access the n
33f00 65 77 2e 2a 20 0a 2a 2a 20 61 6e 64 20 6f 6c 64  ew.* .** and old
33f10 2e 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a  .* values..**.**
33f20 20 54 68 65 20 61 64 64 72 65 73 73 20 6f 66 20   The address of 
33f30 74 68 65 20 63 65 6c 6c 20 69 6e 20 74 68 65 20  the cell in the 
33f40 70 61 72 65 6e 74 20 66 72 61 6d 65 20 69 73 20  parent frame is 
33f50 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 61 64  determined by ad
33f60 64 69 6e 67 0a 2a 2a 20 74 68 65 20 76 61 6c 75  ding.** the valu
33f70 65 20 6f 66 20 74 68 65 20 50 31 20 61 72 67 75  e of the P1 argu
33f80 6d 65 6e 74 20 74 6f 20 74 68 65 20 76 61 6c 75  ment to the valu
33f90 65 20 6f 66 20 74 68 65 20 50 31 20 61 72 67 75  e of the P1 argu
33fa0 6d 65 6e 74 20 74 6f 20 74 68 65 0a 2a 2a 20 63  ment to the.** c
33fb0 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61  alling OP_Progra
33fc0 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  m instruction..*
33fd0 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 61 6d 3a  /.case OP_Param:
33fe0 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
33ff0 6f 75 74 32 20 2a 2f 0a 20 20 56 64 62 65 46 72  out2 */.  VdbeFr
34000 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 4d  ame *pFrame;.  M
34010 65 6d 20 2a 70 49 6e 3b 0a 20 20 70 4f 75 74 20  em *pIn;.  pOut 
34020 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
34030 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 46 72 61  (p, pOp);.  pFra
34040 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a  me = p->pFrame;.
34050 20 20 70 49 6e 20 3d 20 26 70 46 72 61 6d 65 2d    pIn = &pFrame-
34060 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 20 2b 20  >aMem[pOp->p1 + 
34070 70 46 72 61 6d 65 2d 3e 61 4f 70 5b 70 46 72 61  pFrame->aOp[pFra
34080 6d 65 2d 3e 70 63 5d 2e 70 31 5d 3b 20 20 20 0a  me->pc].p1];   .
34090 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
340a0 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74  ShallowCopy(pOut
340b0 2c 20 70 49 6e 2c 20 4d 45 4d 5f 45 70 68 65 6d  , pIn, MEM_Ephem
340c0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23  );.  break;.}..#
340d0 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66  endif /* #ifndef
340e0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49   SQLITE_OMIT_TRI
340f0 47 47 45 52 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  GGER */..#ifndef
34100 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52   SQLITE_OMIT_FOR
34110 45 49 47 4e 5f 4b 45 59 0a 2f 2a 20 4f 70 63 6f  EIGN_KEY./* Opco
34120 64 65 3a 20 46 6b 43 6f 75 6e 74 65 72 20 50 31  de: FkCounter P1
34130 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
34140 6f 70 73 69 73 3a 20 66 6b 63 74 72 5b 50 31 5d  opsis: fkctr[P1]
34150 2b 3d 50 32 0a 2a 2a 0a 2a 2a 20 49 6e 63 72 65  +=P2.**.** Incre
34160 6d 65 6e 74 20 61 20 22 63 6f 6e 73 74 72 61 69  ment a "constrai
34170 6e 74 20 63 6f 75 6e 74 65 72 22 20 62 79 20 50  nt counter" by P
34180 32 20 28 50 32 20 6d 61 79 20 62 65 20 6e 65 67  2 (P2 may be neg
34190 61 74 69 76 65 20 6f 72 20 70 6f 73 69 74 69 76  ative or positiv
341a0 65 29 2e 0a 2a 2a 20 49 66 20 50 31 20 69 73 20  e)..** If P1 is 
341b0 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 20 64 61  non-zero, the da
341c0 74 61 62 61 73 65 20 63 6f 6e 73 74 72 61 69 6e  tabase constrain
341d0 74 20 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63  t counter is inc
341e0 72 65 6d 65 6e 74 65 64 20 0a 2a 2a 20 28 64 65  remented .** (de
341f0 66 65 72 72 65 64 20 66 6f 72 65 69 67 6e 20 6b  ferred foreign k
34200 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e  ey constraints).
34210 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50   Otherwise, if P
34220 31 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 20 0a  1 is zero, the .
34230 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 75  ** statement cou
34240 6e 74 65 72 20 69 73 20 69 6e 63 72 65 6d 65 6e  nter is incremen
34250 74 65 64 20 28 69 6d 6d 65 64 69 61 74 65 20 66  ted (immediate f
34260 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
34270 72 61 69 6e 74 73 29 2e 0a 2a 2f 0a 63 61 73 65  raints)..*/.case
34280 20 4f 50 5f 46 6b 43 6f 75 6e 74 65 72 3a 20 7b   OP_FkCounter: {
34290 0a 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73  .  if( db->flags
342a0 20 26 20 53 51 4c 49 54 45 5f 44 65 66 65 72 46   & SQLITE_DeferF
342b0 4b 73 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 44  Ks ){.    db->nD
342c0 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 2b  eferredImmCons +
342d0 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c  = pOp->p2;.  }el
342e0 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29  se if( pOp->p1 )
342f0 7b 0a 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72  {.    db->nDefer
34300 72 65 64 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e  redCons += pOp->
34310 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  p2;.  }else{.   
34320 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e   p->nFkConstrain
34330 74 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  t += pOp->p2;.  
34340 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
34350 20 4f 70 63 6f 64 65 3a 20 46 6b 49 66 5a 65 72   Opcode: FkIfZer
34360 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  o P1 P2 * * *.**
34370 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 66 6b   Synopsis: if fk
34380 63 74 72 5b 50 31 5d 3d 3d 30 20 67 6f 74 6f 20  ctr[P1]==0 goto 
34390 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  P2.**.** This op
343a0 63 6f 64 65 20 74 65 73 74 73 20 69 66 20 61 20  code tests if a 
343b0 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
343c0 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69  traint-counter i
343d0 73 20 63 75 72 72 65 6e 74 6c 79 20 7a 65 72 6f  s currently zero
343e0 2e 0a 2a 2a 20 49 66 20 73 6f 2c 20 6a 75 6d 70  ..** If so, jump
343f0 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   to instruction 
34400 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 66  P2. Otherwise, f
34410 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
34420 68 65 20 6e 65 78 74 20 0a 2a 2a 20 69 6e 73 74  he next .** inst
34430 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49  ruction..**.** I
34440 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P1 is non-zero
34450 2c 20 74 68 65 6e 20 74 68 65 20 6a 75 6d 70 20  , then the jump 
34460 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20  is taken if the 
34470 64 61 74 61 62 61 73 65 20 63 6f 6e 73 74 72 61  database constra
34480 69 6e 74 2d 63 6f 75 6e 74 65 72 0a 2a 2a 20 69  int-counter.** i
34490 73 20 7a 65 72 6f 20 28 74 68 65 20 6f 6e 65 20  s zero (the one 
344a0 74 68 61 74 20 63 6f 75 6e 74 73 20 64 65 66 65  that counts defe
344b0 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 20  rred constraint 
344c0 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 20 49 66 20  violations). If 
344d0 50 31 20 69 73 0a 2a 2a 20 7a 65 72 6f 2c 20 74  P1 is.** zero, t
344e0 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
344f0 20 69 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e   if the statemen
34500 74 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75  t constraint-cou
34510 6e 74 65 72 20 69 73 20 7a 65 72 6f 0a 2a 2a 20  nter is zero.** 
34520 28 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69  (immediate forei
34530 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
34540 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 0a 2a  t violations)..*
34550 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 49 66 5a 65  /.case OP_FkIfZe
34560 72 6f 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a  ro: {         /*
34570 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 70   jump */.  if( p
34580 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 56 64  Op->p1 ){.    Vd
34590 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 64 62  beBranchTaken(db
345a0 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3d  ->nDeferredCons=
345b0 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72  =0 && db->nDefer
345c0 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32  redImmCons==0, 2
345d0 29 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6e  );.    if( db->n
345e0 44 65 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30 20  DeferredCons==0 
345f0 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64  && db->nDeferred
34600 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20 67 6f 74  ImmCons==0 ) got
34610 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
34620 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42  }else{.    VdbeB
34630 72 61 6e 63 68 54 61 6b 65 6e 28 70 2d 3e 6e 46  ranchTaken(p->nF
34640 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20 26  kConstraint==0 &
34650 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49  & db->nDeferredI
34660 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32 29 3b 0a 20  mmCons==0, 2);. 
34670 20 20 20 69 66 28 20 70 2d 3e 6e 46 6b 43 6f 6e     if( p->nFkCon
34680 73 74 72 61 69 6e 74 3d 3d 30 20 26 26 20 64 62  straint==0 && db
34690 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
346a0 6e 73 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d  ns==0 ) goto jum
346b0 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62  p_to_p2;.  }.  b
346c0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
346d0 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  * #ifndef SQLITE
346e0 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
346f0 59 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  Y */..#ifndef SQ
34700 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e  LITE_OMIT_AUTOIN
34710 43 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63 6f 64  CREMENT./* Opcod
34720 65 3a 20 4d 65 6d 4d 61 78 20 50 31 20 50 32 20  e: MemMax P1 P2 
34730 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
34740 73 3a 20 72 5b 50 31 5d 3d 6d 61 78 28 72 5b 50  s: r[P1]=max(r[P
34750 31 5d 2c 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20  1],r[P2]).**.** 
34760 50 31 20 69 73 20 61 20 72 65 67 69 73 74 65 72  P1 is a register
34770 20 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61   in the root fra
34780 6d 65 20 6f 66 20 74 68 69 73 20 56 4d 20 28 74  me of this VM (t
34790 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 69 73  he root frame is
347a0 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74 20 66 72  .** different fr
347b0 6f 6d 20 74 68 65 20 63 75 72 72 65 6e 74 20 66  om the current f
347c0 72 61 6d 65 20 69 66 20 74 68 69 73 20 69 6e 73  rame if this ins
347d0 74 72 75 63 74 69 6f 6e 20 69 73 20 62 65 69 6e  truction is bein
347e0 67 20 65 78 65 63 75 74 65 64 0a 2a 2a 20 77 69  g executed.** wi
347f0 74 68 69 6e 20 61 20 73 75 62 2d 70 72 6f 67 72  thin a sub-progr
34800 61 6d 29 2e 20 53 65 74 20 74 68 65 20 76 61 6c  am). Set the val
34810 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  ue of register P
34820 31 20 74 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d  1 to the maximum
34830 20 6f 66 20 0a 2a 2a 20 69 74 73 20 63 75 72 72   of .** its curr
34840 65 6e 74 20 76 61 6c 75 65 20 61 6e 64 20 74 68  ent value and th
34850 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
34860 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68  ter P2..**.** Th
34870 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74  is instruction t
34880 68 72 6f 77 73 20 61 6e 20 65 72 72 6f 72 20 69  hrows an error i
34890 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c  f the memory cel
348a0 6c 20 69 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c  l is not initial
348b0 6c 79 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72  ly.** an integer
348c0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 65 6d  ..*/.case OP_Mem
348d0 4d 61 78 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  Max: {        /*
348e0 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 46 72   in2 */.  VdbeFr
348f0 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69  ame *pFrame;.  i
34900 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a  f( p->pFrame ){.
34910 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70      for(pFrame=p
34920 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65  ->pFrame; pFrame
34930 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46 72 61 6d  ->pParent; pFram
34940 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e  e=pFrame->pParen
34950 74 29 3b 0a 20 20 20 20 70 49 6e 31 20 3d 20 26  t);.    pIn1 = &
34960 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70  pFrame->aMem[pOp
34970 2d 3e 70 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a  ->p1];.  }else{.
34980 20 20 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d      pIn1 = &aMem
34990 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 0a 20  [pOp->p1];.  }. 
349a0 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
349b0 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 73  lid(pIn1) );.  s
349c0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
349d0 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20  egerify(pIn1);. 
349e0 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
349f0 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65  p->p2];.  sqlite
34a00 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69  3VdbeMemIntegeri
34a10 66 79 28 70 49 6e 32 29 3b 0a 20 20 69 66 28 20  fy(pIn2);.  if( 
34a20 70 49 6e 31 2d 3e 75 2e 69 3c 70 49 6e 32 2d 3e  pIn1->u.i<pIn2->
34a30 75 2e 69 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e  u.i){.    pIn1->
34a40 75 2e 69 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b  u.i = pIn2->u.i;
34a50 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
34a60 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
34a70 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d  _OMIT_AUTOINCREM
34a80 45 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64  ENT */../* Opcod
34a90 65 3a 20 49 66 50 6f 73 20 50 31 20 50 32 20 50  e: IfPos P1 P2 P
34aa0 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
34ab0 73 3a 20 69 66 20 72 5b 50 31 5d 3e 30 20 74 68  s: if r[P1]>0 th
34ac0 65 6e 20 72 5b 50 31 5d 2d 3d 50 33 2c 20 67 6f  en r[P1]-=P3, go
34ad0 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69  to P2.**.** Regi
34ae0 73 74 65 72 20 50 31 20 6d 75 73 74 20 63 6f 6e  ster P1 must con
34af0 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e  tain an integer.
34b00 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65  .** If the value
34b10 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20   of register P1 
34b20 69 73 20 31 20 6f 72 20 67 72 65 61 74 65 72 2c  is 1 or greater,
34b30 20 73 75 62 74 72 61 63 74 20 50 33 20 66 72 6f   subtract P3 fro
34b40 6d 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69  m the.** value i
34b50 6e 20 50 31 20 61 6e 64 20 6a 75 6d 70 20 74 6f  n P1 and jump to
34b60 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68   P2..**.** If th
34b70 65 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20  e initial value 
34b80 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69  of register P1 i
34b90 73 20 6c 65 73 73 20 74 68 61 6e 20 31 2c 20 74  s less than 1, t
34ba0 68 65 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65  hen the.** value
34bb0 20 69 73 20 75 6e 63 68 61 6e 67 65 64 20 61 6e   is unchanged an
34bc0 64 20 63 6f 6e 74 72 6f 6c 20 70 61 73 73 65 73  d control passes
34bd0 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
34be0 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
34bf0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 50  ..*/.case OP_IfP
34c00 6f 73 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  os: {        /* 
34c10 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70  jump, in1 */.  p
34c20 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
34c30 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
34c40 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn1->flags&MEM_
34c50 49 6e 74 20 29 3b 0a 20 20 56 64 62 65 42 72 61  Int );.  VdbeBra
34c60 6e 63 68 54 61 6b 65 6e 28 20 70 49 6e 31 2d 3e  nchTaken( pIn1->
34c70 75 2e 69 3e 30 2c 20 32 29 3b 0a 20 20 69 66 28  u.i>0, 2);.  if(
34c80 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 20 29 7b 0a   pIn1->u.i>0 ){.
34c90 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2d 3d      pIn1->u.i -=
34ca0 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 67 6f   pOp->p3;.    go
34cb0 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
34cc0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
34cd0 2a 20 4f 70 63 6f 64 65 3a 20 4f 66 66 73 65 74  * Opcode: Offset
34ce0 4c 69 6d 69 74 20 50 31 20 50 32 20 50 33 20 2a  Limit P1 P2 P3 *
34cf0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
34d00 69 66 20 72 5b 50 31 5d 3e 30 20 74 68 65 6e 20  if r[P1]>0 then 
34d10 72 5b 50 32 5d 3d 72 5b 50 31 5d 2b 6d 61 78 28  r[P2]=r[P1]+max(
34d20 30 2c 72 5b 50 33 5d 29 20 65 6c 73 65 20 72 5b  0,r[P3]) else r[
34d30 50 32 5d 3d 28 2d 31 29 0a 2a 2a 0a 2a 2a 20 54  P2]=(-1).**.** T
34d40 68 69 73 20 6f 70 63 6f 64 65 20 70 65 72 66 6f  his opcode perfo
34d50 72 6d 73 20 61 20 63 6f 6d 6d 6f 6e 6c 79 20 75  rms a commonly u
34d60 73 65 64 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20  sed computation 
34d70 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 0a  associated with.
34d80 2a 2a 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46 46  ** LIMIT and OFF
34d90 53 45 54 20 70 72 6f 63 65 73 73 2e 20 20 72 5b  SET process.  r[
34da0 50 31 5d 20 68 6f 6c 64 73 20 74 68 65 20 6c 69  P1] holds the li
34db0 6d 69 74 20 63 6f 75 6e 74 65 72 2e 20 20 72 5b  mit counter.  r[
34dc0 50 33 5d 0a 2a 2a 20 68 6f 6c 64 73 20 74 68 65  P3].** holds the
34dd0 20 6f 66 66 73 65 74 20 63 6f 75 6e 74 65 72 2e   offset counter.
34de0 20 20 54 68 65 20 6f 70 63 6f 64 65 20 63 6f 6d    The opcode com
34df0 70 75 74 65 73 20 74 68 65 20 63 6f 6d 62 69 6e  putes the combin
34e00 65 64 20 76 61 6c 75 65 0a 2a 2a 20 6f 66 20 74  ed value.** of t
34e10 68 65 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46 46  he LIMIT and OFF
34e20 53 45 54 20 61 6e 64 20 73 74 6f 72 65 73 20 74  SET and stores t
34e30 68 61 74 20 76 61 6c 75 65 20 69 6e 20 72 5b 50  hat value in r[P
34e40 32 5d 2e 20 20 54 68 65 20 72 5b 50 32 5d 0a 2a  2].  The r[P2].*
34e50 2a 20 76 61 6c 75 65 20 63 6f 6d 70 75 74 65 64  * value computed
34e60 20 69 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75   is the total nu
34e70 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 74 68 61  mber of rows tha
34e80 74 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62  t will need to b
34e90 65 0a 2a 2a 20 76 69 73 69 74 65 64 20 69 6e 20  e.** visited in 
34ea0 6f 72 64 65 72 20 74 6f 20 63 6f 6d 70 6c 65 74  order to complet
34eb0 65 20 74 68 65 20 71 75 65 72 79 2e 0a 2a 2a 0a  e the query..**.
34ec0 2a 2a 20 49 66 20 72 5b 50 33 5d 20 69 73 20 7a  ** If r[P3] is z
34ed0 65 72 6f 20 6f 72 20 6e 65 67 61 74 69 76 65 2c  ero or negative,
34ee0 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 65 72   that means ther
34ef0 65 20 69 73 20 6e 6f 20 4f 46 46 53 45 54 0a 2a  e is no OFFSET.*
34f00 2a 20 61 6e 64 20 72 5b 50 32 5d 20 69 73 20 73  * and r[P2] is s
34f10 65 74 20 74 6f 20 62 65 20 74 68 65 20 76 61 6c  et to be the val
34f20 75 65 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 2c  ue of the LIMIT,
34f30 20 72 5b 50 31 5d 2e 0a 2a 2a 0a 2a 2a 20 69 66   r[P1]..**.** if
34f40 20 72 5b 50 31 5d 20 69 73 20 7a 65 72 6f 20 6f   r[P1] is zero o
34f50 72 20 6e 65 67 61 74 69 76 65 2c 20 74 68 61 74  r negative, that
34f60 20 6d 65 61 6e 73 20 74 68 65 72 65 20 69 73 20   means there is 
34f70 6e 6f 20 4c 49 4d 49 54 0a 2a 2a 20 61 6e 64 20  no LIMIT.** and 
34f80 72 5b 50 32 5d 20 69 73 20 73 65 74 20 74 6f 20  r[P2] is set to 
34f90 2d 31 2e 20 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72  -1. .**.** Other
34fa0 77 69 73 65 2c 20 72 5b 50 32 5d 20 69 73 20 73  wise, r[P2] is s
34fb0 65 74 20 74 6f 20 74 68 65 20 73 75 6d 20 6f 66  et to the sum of
34fc0 20 72 5b 50 31 5d 20 61 6e 64 20 72 5b 50 33 5d   r[P1] and r[P3]
34fd0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 66 66  ..*/.case OP_Off
34fe0 73 65 74 4c 69 6d 69 74 3a 20 7b 20 20 20 20 2f  setLimit: {    /
34ff0 2a 20 69 6e 31 2c 20 6f 75 74 32 2c 20 69 6e 33  * in1, out2, in3
35000 20 2a 2f 0a 20 20 69 36 34 20 78 3b 0a 20 20 70   */.  i64 x;.  p
35010 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
35020 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26  >p1];.  pIn3 = &
35030 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
35040 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
35050 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
35060 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
35070 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
35080 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  );.  assert( pIn
35090 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  3->flags & MEM_I
350a0 6e 74 20 29 3b 0a 20 20 78 20 3d 20 70 49 6e 31  nt );.  x = pIn1
350b0 2d 3e 75 2e 69 3b 0a 20 20 69 66 28 20 78 3c 3d  ->u.i;.  if( x<=
350c0 30 20 7c 7c 20 73 71 6c 69 74 65 33 41 64 64 49  0 || sqlite3AddI
350d0 6e 74 36 34 28 26 78 2c 20 70 49 6e 33 2d 3e 75  nt64(&x, pIn3->u
350e0 2e 69 3e 30 3f 70 49 6e 33 2d 3e 75 2e 69 3a 30  .i>0?pIn3->u.i:0
350f0 29 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74  ) ){.    /* If t
35100 68 65 20 4c 49 4d 49 54 20 69 73 20 6c 65 73 73  he LIMIT is less
35110 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
35120 6f 20 7a 65 72 6f 2c 20 6c 6f 6f 70 20 66 6f 72  o zero, loop for
35130 65 76 65 72 2e 20 20 54 68 69 73 0a 20 20 20 20  ever.  This.    
35140 2a 2a 20 69 73 20 64 6f 63 75 6d 65 6e 74 65 64  ** is documented
35150 2e 20 20 42 75 74 20 61 6c 73 6f 2c 20 69 66 20  .  But also, if 
35160 74 68 65 20 4c 49 4d 49 54 2b 4f 46 46 53 45 54  the LIMIT+OFFSET
35170 20 65 78 63 65 65 64 73 20 32 5e 36 33 20 74 68   exceeds 2^63 th
35180 65 6e 0a 20 20 20 20 2a 2a 20 61 6c 73 6f 20 6c  en.    ** also l
35190 6f 6f 70 20 66 6f 72 65 76 65 72 2e 20 20 54 68  oop forever.  Th
351a0 69 73 20 69 73 20 75 6e 64 6f 63 75 6d 65 6e 74  is is undocument
351b0 65 64 2e 20 20 49 6e 20 66 61 63 74 2c 20 6f 6e  ed.  In fact, on
351c0 65 20 63 6f 75 6c 64 20 61 72 67 75 65 0a 20 20  e could argue.  
351d0 20 20 2a 2a 20 74 68 61 74 20 74 68 65 20 6c 6f    ** that the lo
351e0 6f 70 20 73 68 6f 75 6c 64 20 74 65 72 6d 69 6e  op should termin
351f0 61 74 65 2e 20 20 42 75 74 20 61 73 73 75 6d 69  ate.  But assumi
35200 6e 67 20 31 20 62 69 6c 6c 69 6f 6e 20 69 74 65  ng 1 billion ite
35210 72 61 74 69 6f 6e 73 0a 20 20 20 20 2a 2a 20 70  rations.    ** p
35220 65 72 20 73 65 63 6f 6e 64 20 28 66 61 72 20 65  er second (far e
35230 78 63 65 65 64 69 6e 67 20 74 68 65 20 63 61 70  xceeding the cap
35240 61 62 69 6c 69 74 69 65 73 20 6f 66 20 61 6e 79  abilities of any
35250 20 63 75 72 72 65 6e 74 20 68 61 72 64 77 61 72   current hardwar
35260 65 29 0a 20 20 20 20 2a 2a 20 69 74 20 77 6f 75  e).    ** it wou
35270 6c 64 20 74 61 6b 65 20 6e 65 61 72 6c 79 20 33  ld take nearly 3
35280 30 30 20 79 65 61 72 73 20 74 6f 20 61 63 74 75  00 years to actu
35290 61 6c 6c 79 20 72 65 61 63 68 20 74 68 65 20 6c  ally reach the l
352a0 69 6d 69 74 2e 20 20 53 6f 0a 20 20 20 20 2a 2a  imit.  So.    **
352b0 20 6c 6f 6f 70 69 6e 67 20 66 6f 72 65 76 65 72   looping forever
352c0 20 69 73 20 61 20 72 65 61 73 6f 6e 61 62 6c 65   is a reasonable
352d0 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 2e 20   approximation. 
352e0 2a 2f 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  */.    pOut->u.i
352f0 20 3d 20 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a   = -1;.  }else{.
35300 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
35310 78 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  x;.  }.  break;.
35320 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66  }../* Opcode: If
35330 4e 6f 74 5a 65 72 6f 20 50 31 20 50 32 20 2a 20  NotZero P1 P2 * 
35340 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
35350 20 69 66 20 72 5b 50 31 5d 21 3d 30 20 74 68 65   if r[P1]!=0 the
35360 6e 20 72 5b 50 31 5d 2d 2d 2c 20 67 6f 74 6f 20  n r[P1]--, goto 
35370 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65  P2.**.** Registe
35380 72 20 50 31 20 6d 75 73 74 20 63 6f 6e 74 61 69  r P1 must contai
35390 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49  n an integer.  I
353a0 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  f the content of
353b0 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 0a   register P1 is.
353c0 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 67 72 65  ** initially gre
353d0 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 2c 20  ater than zero, 
353e0 74 68 65 6e 20 64 65 63 72 65 6d 65 6e 74 20 74  then decrement t
353f0 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
35400 73 74 65 72 20 50 31 2e 0a 2a 2a 20 49 66 20 69  ster P1..** If i
35410 74 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 28 6e  t is non-zero (n
35420 65 67 61 74 69 76 65 20 6f 72 20 70 6f 73 69 74  egative or posit
35430 69 76 65 29 20 61 6e 64 20 74 68 65 6e 20 61 6c  ive) and then al
35440 73 6f 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20  so jump to P2.  
35450 0a 2a 2a 20 49 66 20 72 65 67 69 73 74 65 72 20  .** If register 
35460 50 31 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 20  P1 is initially 
35470 7a 65 72 6f 2c 20 6c 65 61 76 65 20 69 74 20 75  zero, leave it u
35480 6e 63 68 61 6e 67 65 64 20 61 6e 64 20 66 61 6c  nchanged and fal
35490 6c 20 74 68 72 6f 75 67 68 2e 0a 2a 2f 0a 63 61  l through..*/.ca
354a0 73 65 20 4f 50 5f 49 66 4e 6f 74 5a 65 72 6f 3a  se OP_IfNotZero:
354b0 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
354c0 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  p, in1 */.  pIn1
354d0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
354e0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
354f0 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74  1->flags&MEM_Int
35500 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68   );.  VdbeBranch
35510 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3c  Taken(pIn1->u.i<
35520 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 49 6e  0, 2);.  if( pIn
35530 31 2d 3e 75 2e 69 20 29 7b 0a 20 20 20 20 20 69  1->u.i ){.     i
35540 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 20 29  f( pIn1->u.i>0 )
35550 20 70 49 6e 31 2d 3e 75 2e 69 2d 2d 3b 0a 20 20   pIn1->u.i--;.  
35560 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
35570 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  p2;.  }.  break;
35580 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  .}../* Opcode: D
35590 65 63 72 4a 75 6d 70 5a 65 72 6f 20 50 31 20 50  ecrJumpZero P1 P
355a0 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
355b0 73 69 73 3a 20 69 66 20 28 2d 2d 72 5b 50 31 5d  sis: if (--r[P1]
355c0 29 3d 3d 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  )==0 goto P2.**.
355d0 2a 2a 20 52 65 67 69 73 74 65 72 20 50 31 20 6d  ** Register P1 m
355e0 75 73 74 20 68 6f 6c 64 20 61 6e 20 69 6e 74 65  ust hold an inte
355f0 67 65 72 2e 20 20 44 65 63 72 65 6d 65 6e 74 20  ger.  Decrement 
35600 74 68 65 20 76 61 6c 75 65 20 69 6e 20 50 31 0a  the value in P1.
35610 2a 2a 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20 50  ** and jump to P
35620 32 20 69 66 20 74 68 65 20 6e 65 77 20 76 61 6c  2 if the new val
35630 75 65 20 69 73 20 65 78 61 63 74 6c 79 20 7a 65  ue is exactly ze
35640 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  ro..*/.case OP_D
35650 65 63 72 4a 75 6d 70 5a 65 72 6f 3a 20 7b 20 20  ecrJumpZero: {  
35660 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
35670 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
35680 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
35690 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
356a0 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  gs&MEM_Int );.  
356b0 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 53 4d  if( pIn1->u.i>SM
356c0 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29 20 70  ALLEST_INT64 ) p
356d0 49 6e 31 2d 3e 75 2e 69 2d 2d 3b 0a 20 20 56 64  In1->u.i--;.  Vd
356e0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 49  beBranchTaken(pI
356f0 6e 31 2d 3e 75 2e 69 3d 3d 30 2c 20 32 29 3b 0a  n1->u.i==0, 2);.
35700 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3d    if( pIn1->u.i=
35710 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  =0 ) goto jump_t
35720 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  o_p2;.  break;.}
35730 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67  .../* Opcode: Ag
35740 67 53 74 65 70 20 2a 20 50 32 20 50 33 20 50 34  gStep * P2 P3 P4
35750 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
35760 20 61 63 63 75 6d 3d 72 5b 50 33 5d 20 73 74 65   accum=r[P3] ste
35770 70 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a  p(r[P2@P5]).**.*
35780 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 78 53  * Execute the xS
35790 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72  tep function for
357a0 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e 0a 2a   an aggregate..*
357b0 2a 20 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 68  * The function h
357c0 61 73 20 50 35 20 61 72 67 75 6d 65 6e 74 73 2e  as P5 arguments.
357d0 20 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65    P4 is a pointe
357e0 72 20 74 6f 20 74 68 65 20 0a 2a 2a 20 46 75 6e  r to the .** Fun
357f0 63 44 65 66 20 73 74 72 75 63 74 75 72 65 20 74  cDef structure t
35800 68 61 74 20 73 70 65 63 69 66 69 65 73 20 74 68  hat specifies th
35810 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20 52 65 67  e function.  Reg
35820 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65 0a  ister P3 is the.
35830 2a 2a 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a  ** accumulator..
35840 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61 72 67  **.** The P5 arg
35850 75 6d 65 6e 74 73 20 61 72 65 20 74 61 6b 65 6e  uments are taken
35860 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50   from register P
35870 32 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63  2 and its.** suc
35880 63 65 73 73 6f 72 73 2e 0a 2a 2f 0a 2f 2a 20 4f  cessors..*/./* O
35890 70 63 6f 64 65 3a 20 41 67 67 49 6e 76 65 72 73  pcode: AggInvers
358a0 65 20 2a 20 50 32 20 50 33 20 50 34 20 50 35 0a  e * P2 P3 P4 P5.
358b0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 63 63  ** Synopsis: acc
358c0 75 6d 3d 72 5b 50 33 5d 20 69 6e 76 65 72 73 65  um=r[P3] inverse
358d0 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a  (r[P2@P5]).**.**
358e0 20 45 78 65 63 75 74 65 20 74 68 65 20 78 49 6e   Execute the xIn
358f0 76 65 72 73 65 20 66 75 6e 63 74 69 6f 6e 20 66  verse function f
35900 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e  or an aggregate.
35910 0a 2a 2a 20 54 68 65 20 66 75 6e 63 74 69 6f 6e  .** The function
35920 20 68 61 73 20 50 35 20 61 72 67 75 6d 65 6e 74   has P5 argument
35930 73 2e 20 20 50 34 20 69 73 20 61 20 70 6f 69 6e  s.  P4 is a poin
35940 74 65 72 20 74 6f 20 74 68 65 20 0a 2a 2a 20 46  ter to the .** F
35950 75 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65  uncDef structure
35960 20 74 68 61 74 20 73 70 65 63 69 66 69 65 73 20   that specifies 
35970 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20 52  the function.  R
35980 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68  egister P3 is th
35990 65 0a 2a 2a 20 61 63 63 75 6d 75 6c 61 74 6f 72  e.** accumulator
359a0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61  ..**.** The P5 a
359b0 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74 61 6b  rguments are tak
359c0 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72  en from register
359d0 20 50 32 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73   P2 and its.** s
359e0 75 63 63 65 73 73 6f 72 73 2e 0a 2a 2f 0a 2f 2a  uccessors..*/./*
359f0 20 4f 70 63 6f 64 65 3a 20 41 67 67 53 74 65 70   Opcode: AggStep
35a00 31 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  1 P1 P2 P3 P4 P5
35a10 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 63  .** Synopsis: ac
35a20 63 75 6d 3d 72 5b 50 33 5d 20 73 74 65 70 28 72  cum=r[P3] step(r
35a30 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 45  [P2@P5]).**.** E
35a40 78 65 63 75 74 65 20 74 68 65 20 78 53 74 65 70  xecute the xStep
35a50 20 28 69 66 20 50 31 3d 3d 30 29 20 6f 72 20 78   (if P1==0) or x
35a60 49 6e 76 65 72 73 65 20 28 69 66 20 50 31 21 3d  Inverse (if P1!=
35a70 30 29 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20  0) function for 
35a80 61 6e 0a 2a 2a 20 61 67 67 72 65 67 61 74 65 2e  an.** aggregate.
35a90 20 20 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 68    The function h
35aa0 61 73 20 50 35 20 61 72 67 75 6d 65 6e 74 73 2e  as P5 arguments.
35ab0 20 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65    P4 is a pointe
35ac0 72 20 74 6f 20 74 68 65 20 0a 2a 2a 20 46 75 6e  r to the .** Fun
35ad0 63 44 65 66 20 73 74 72 75 63 74 75 72 65 20 74  cDef structure t
35ae0 68 61 74 20 73 70 65 63 69 66 69 65 73 20 74 68  hat specifies th
35af0 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20 52 65 67  e function.  Reg
35b00 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65 0a  ister P3 is the.
35b10 2a 2a 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a  ** accumulator..
35b20 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61 72 67  **.** The P5 arg
35b30 75 6d 65 6e 74 73 20 61 72 65 20 74 61 6b 65 6e  uments are taken
35b40 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50   from register P
35b50 32 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63  2 and its.** suc
35b60 63 65 73 73 6f 72 73 2e 0a 2a 2a 0a 2a 2a 20 54  cessors..**.** T
35b70 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 69 6e  his opcode is in
35b80 69 74 69 61 6c 6c 79 20 63 6f 64 65 64 20 61 73  itially coded as
35b90 20 4f 50 5f 41 67 67 53 74 65 70 30 2e 20 20 4f   OP_AggStep0.  O
35ba0 6e 20 66 69 72 73 74 20 65 76 61 6c 75 61 74 69  n first evaluati
35bb0 6f 6e 2c 0a 2a 2a 20 74 68 65 20 46 75 6e 63 44  on,.** the FuncD
35bc0 65 66 20 73 74 6f 72 65 64 20 69 6e 20 50 34 20  ef stored in P4 
35bd0 69 73 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74  is converted int
35be0 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 63 6f 6e  o an sqlite3_con
35bf0 74 65 78 74 20 61 6e 64 0a 2a 2a 20 74 68 65 20  text and.** the 
35c00 6f 70 63 6f 64 65 20 69 73 20 63 68 61 6e 67 65  opcode is change
35c10 64 2e 20 20 49 6e 20 74 68 69 73 20 77 61 79 2c  d.  In this way,
35c20 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74   the initializat
35c30 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 71  ion of the.** sq
35c40 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f 6e  lite3_context on
35c50 6c 79 20 68 61 70 70 65 6e 73 20 6f 6e 63 65 2c  ly happens once,
35c60 20 69 6e 73 74 65 61 64 20 6f 66 20 6f 6e 20 65   instead of on e
35c70 61 63 68 20 63 61 6c 6c 20 74 6f 20 74 68 65 0a  ach call to the.
35c80 2a 2a 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e  ** step function
35c90 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67  ..*/.case OP_Agg
35ca0 49 6e 76 65 72 73 65 3a 0a 63 61 73 65 20 4f 50  Inverse:.case OP
35cb0 5f 41 67 67 53 74 65 70 3a 20 7b 0a 20 20 69 6e  _AggStep: {.  in
35cc0 74 20 6e 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63  t n;.  sqlite3_c
35cd0 6f 6e 74 65 78 74 20 2a 70 43 74 78 3b 0a 0a 20  ontext *pCtx;.. 
35ce0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
35cf0 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46  type==P4_FUNCDEF
35d00 20 29 3b 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70   );.  n = pOp->p
35d10 35 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  5;.  assert( pOp
35d20 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p3>0 && pOp->p
35d30 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  3<=(p->nMem+1 - 
35d40 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
35d50 20 61 73 73 65 72 74 28 20 6e 3d 3d 30 20 7c 7c   assert( n==0 ||
35d60 20 28 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70   (pOp->p2>0 && p
35d70 4f 70 2d 3e 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d  Op->p2+n<=(p->nM
35d80 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
35d90 72 29 2b 31 29 20 29 3b 0a 20 20 61 73 73 65 72  r)+1) );.  asser
35da0 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e  t( pOp->p3<pOp->
35db0 70 32 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70  p2 || pOp->p3>=p
35dc0 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a 20 20 70 43  Op->p2+n );.  pC
35dd0 74 78 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61  tx = sqlite3DbMa
35de0 6c 6c 6f 63 52 61 77 4e 4e 28 64 62 2c 20 6e 2a  llocRawNN(db, n*
35df0 73 69 7a 65 6f 66 28 73 71 6c 69 74 65 33 5f 76  sizeof(sqlite3_v
35e00 61 6c 75 65 2a 29 20 2b 0a 20 20 20 20 20 20 20  alue*) +.       
35e10 20 20 20 20 20 20 20 20 28 73 69 7a 65 6f 66 28          (sizeof(
35e20 70 43 74 78 5b 30 5d 29 20 2b 20 73 69 7a 65 6f  pCtx[0]) + sizeo
35e30 66 28 4d 65 6d 29 20 2d 20 73 69 7a 65 6f 66 28  f(Mem) - sizeof(
35e40 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 29  sqlite3_value*))
35e50 29 3b 0a 20 20 69 66 28 20 70 43 74 78 3d 3d 30  );.  if( pCtx==0
35e60 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
35e70 20 20 70 43 74 78 2d 3e 70 4d 65 6d 20 3d 20 30    pCtx->pMem = 0
35e80 3b 0a 20 20 70 43 74 78 2d 3e 70 4f 75 74 20 3d  ;.  pCtx->pOut =
35e90 20 28 4d 65 6d 2a 29 26 28 70 43 74 78 2d 3e 61   (Mem*)&(pCtx->a
35ea0 72 67 76 5b 6e 5d 29 3b 0a 20 20 73 71 6c 69 74  rgv[n]);.  sqlit
35eb0 65 33 56 64 62 65 4d 65 6d 49 6e 69 74 28 70 43  e3VdbeMemInit(pC
35ec0 74 78 2d 3e 70 4f 75 74 2c 20 64 62 2c 20 4d 45  tx->pOut, db, ME
35ed0 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 70 43 74 78 2d  M_Null);.  pCtx-
35ee0 3e 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34  >pFunc = pOp->p4
35ef0 2e 70 46 75 6e 63 3b 0a 20 20 70 43 74 78 2d 3e  .pFunc;.  pCtx->
35f00 69 4f 70 20 3d 20 28 69 6e 74 29 28 70 4f 70 20  iOp = (int)(pOp 
35f10 2d 20 61 4f 70 29 3b 0a 20 20 70 43 74 78 2d 3e  - aOp);.  pCtx->
35f20 70 56 64 62 65 20 3d 20 70 3b 0a 20 20 70 43 74  pVdbe = p;.  pCt
35f30 78 2d 3e 73 6b 69 70 46 6c 61 67 20 3d 20 30 3b  x->skipFlag = 0;
35f40 0a 20 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72  .  pCtx->isError
35f50 20 3d 20 30 3b 0a 20 20 70 43 74 78 2d 3e 61 72   = 0;.  pCtx->ar
35f60 67 63 20 3d 20 6e 3b 0a 20 20 70 4f 70 2d 3e 70  gc = n;.  pOp->p
35f70 34 74 79 70 65 20 3d 20 50 34 5f 46 55 4e 43 43  4type = P4_FUNCC
35f80 54 58 3b 0a 20 20 70 4f 70 2d 3e 70 34 2e 70 43  TX;.  pOp->p4.pC
35f90 74 78 20 3d 20 70 43 74 78 3b 0a 0a 20 20 2f 2a  tx = pCtx;..  /*
35fa0 20 4f 50 5f 41 67 67 49 6e 76 65 72 73 65 20 6d   OP_AggInverse m
35fb0 75 73 74 20 68 61 76 65 20 50 31 3d 3d 31 20 61  ust have P1==1 a
35fc0 6e 64 20 4f 50 5f 41 67 67 53 74 65 70 20 6d 75  nd OP_AggStep mu
35fd0 73 74 20 68 61 76 65 20 50 31 3d 3d 30 20 2a 2f  st have P1==0 */
35fe0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
35ff0 70 31 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65  p1==(pOp->opcode
36000 3d 3d 4f 50 5f 41 67 67 49 6e 76 65 72 73 65 29  ==OP_AggInverse)
36010 20 29 3b 0a 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f   );..  pOp->opco
36020 64 65 20 3d 20 4f 50 5f 41 67 67 53 74 65 70 31  de = OP_AggStep1
36030 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f  ;.  /* Fall thro
36040 75 67 68 20 69 6e 74 6f 20 4f 50 5f 41 67 67 53  ugh into OP_AggS
36050 74 65 70 20 2a 2f 0a 7d 0a 63 61 73 65 20 4f 50  tep */.}.case OP
36060 5f 41 67 67 53 74 65 70 31 3a 20 7b 0a 20 20 69  _AggStep1: {.  i
36070 6e 74 20 69 3b 0a 20 20 73 71 6c 69 74 65 33 5f  nt i;.  sqlite3_
36080 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 3b 0a 20  context *pCtx;. 
36090 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 0a 20 20 61   Mem *pMem;..  a
360a0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
360b0 70 65 3d 3d 50 34 5f 46 55 4e 43 43 54 58 20 29  pe==P4_FUNCCTX )
360c0 3b 0a 20 20 70 43 74 78 20 3d 20 70 4f 70 2d 3e  ;.  pCtx = pOp->
360d0 70 34 2e 70 43 74 78 3b 0a 20 20 70 4d 65 6d 20  p4.pCtx;.  pMem 
360e0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
360f0 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
36100 5f 44 45 42 55 47 0a 20 20 69 66 28 20 70 4f 70  _DEBUG.  if( pOp
36110 2d 3e 70 31 20 29 7b 0a 20 20 20 20 2f 2a 20 54  ->p1 ){.    /* T
36120 68 69 73 20 69 73 20 61 6e 20 4f 50 5f 41 67 67  his is an OP_Agg
36130 49 6e 76 65 72 73 65 20 63 61 6c 6c 2e 20 20 56  Inverse call.  V
36140 65 72 69 66 79 20 74 68 61 74 20 78 53 74 65 70  erify that xStep
36150 20 68 61 73 20 61 6c 77 61 79 73 0a 20 20 20 20   has always.    
36160 2a 2a 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 61  ** been called a
36170 74 20 6c 65 61 73 74 20 6f 6e 63 65 20 70 72 69  t least once pri
36180 6f 72 20 74 6f 20 61 6e 79 20 78 49 6e 76 65 72  or to any xInver
36190 73 65 20 63 61 6c 6c 2e 20 2a 2f 0a 20 20 20 20  se call. */.    
361a0 61 73 73 65 72 74 28 20 70 4d 65 6d 2d 3e 75 54  assert( pMem->uT
361b0 65 6d 70 3d 3d 30 78 31 31 32 32 65 30 65 33 20  emp==0x1122e0e3 
361c0 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
361d0 2f 2a 20 54 68 69 73 20 69 73 20 61 6e 20 4f 50  /* This is an OP
361e0 5f 41 67 67 53 74 65 70 20 63 61 6c 6c 2e 20 20  _AggStep call.  
361f0 4d 61 72 6b 20 69 74 20 61 73 20 73 75 63 68 2e  Mark it as such.
36200 20 2a 2f 0a 20 20 20 20 70 4d 65 6d 2d 3e 75 54   */.    pMem->uT
36210 65 6d 70 20 3d 20 30 78 31 31 32 32 65 30 65 33  emp = 0x1122e0e3
36220 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20  ;.  }.#endif..  
36230 2f 2a 20 49 66 20 74 68 69 73 20 66 75 6e 63 74  /* If this funct
36240 69 6f 6e 20 69 73 20 69 6e 73 69 64 65 20 6f 66  ion is inside of
36250 20 61 20 74 72 69 67 67 65 72 2c 20 74 68 65 20   a trigger, the 
36260 72 65 67 69 73 74 65 72 20 61 72 72 61 79 20 69  register array i
36270 6e 20 61 4d 65 6d 5b 5d 0a 20 20 2a 2a 20 6d 69  n aMem[].  ** mi
36280 67 68 74 20 63 68 61 6e 67 65 20 66 72 6f 6d 20  ght change from 
36290 6f 6e 65 20 65 76 61 6c 75 61 74 69 6f 6e 20 74  one evaluation t
362a0 6f 20 74 68 65 20 6e 65 78 74 2e 20 20 54 68 65  o the next.  The
362b0 20 6e 65 78 74 20 62 6c 6f 63 6b 20 6f 66 20 63   next block of c
362c0 6f 64 65 0a 20 20 2a 2a 20 63 68 65 63 6b 73 20  ode.  ** checks 
362d0 74 6f 20 73 65 65 20 69 66 20 74 68 65 20 72 65  to see if the re
362e0 67 69 73 74 65 72 20 61 72 72 61 79 20 68 61 73  gister array has
362f0 20 63 68 61 6e 67 65 64 2c 20 61 6e 64 20 69 66   changed, and if
36300 20 73 6f 20 69 74 0a 20 20 2a 2a 20 72 65 69 6e   so it.  ** rein
36310 69 74 69 61 6c 69 7a 65 73 20 74 68 65 20 72 65  itializes the re
36320 6c 61 76 61 6e 74 20 70 61 72 74 73 20 6f 66 20  lavant parts of 
36330 74 68 65 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  the sqlite3_cont
36340 65 78 74 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20  ext object */.  
36350 69 66 28 20 70 43 74 78 2d 3e 70 4d 65 6d 20 21  if( pCtx->pMem !
36360 3d 20 70 4d 65 6d 20 29 7b 0a 20 20 20 20 70 43  = pMem ){.    pC
36370 74 78 2d 3e 70 4d 65 6d 20 3d 20 70 4d 65 6d 3b  tx->pMem = pMem;
36380 0a 20 20 20 20 66 6f 72 28 69 3d 70 43 74 78 2d  .    for(i=pCtx-
36390 3e 61 72 67 63 2d 31 3b 20 69 3e 3d 30 3b 20 69  >argc-1; i>=0; i
363a0 2d 2d 29 20 70 43 74 78 2d 3e 61 72 67 76 5b 69  --) pCtx->argv[i
363b0 5d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  ] = &aMem[pOp->p
363c0 32 2b 69 5d 3b 0a 20 20 7d 0a 0a 23 69 66 64 65  2+i];.  }..#ifde
363d0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
363e0 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 43 74 78   for(i=0; i<pCtx
363f0 2d 3e 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20  ->argc; i++){.  
36400 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
36410 61 6c 69 64 28 70 43 74 78 2d 3e 61 72 67 76 5b  alid(pCtx->argv[
36420 69 5d 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53  i]) );.    REGIS
36430 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
36440 32 2b 69 2c 20 70 43 74 78 2d 3e 61 72 67 76 5b  2+i, pCtx->argv[
36450 69 5d 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  i]);.  }.#endif.
36460 0a 20 20 70 4d 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20  .  pMem->n++;.  
36470 61 73 73 65 72 74 28 20 70 43 74 78 2d 3e 70 4f  assert( pCtx->pO
36480 75 74 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 4e  ut->flags==MEM_N
36490 75 6c 6c 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ull );.  assert(
364a0 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 3d 3d   pCtx->isError==
364b0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
364c0 43 74 78 2d 3e 73 6b 69 70 46 6c 61 67 3d 3d 30  Ctx->skipFlag==0
364d0 20 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   );.#ifndef SQLI
364e0 54 45 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57 46 55  TE_OMIT_WINDOWFU
364f0 4e 43 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31  NC.  if( pOp->p1
36500 20 29 7b 0a 20 20 20 20 28 70 43 74 78 2d 3e 70   ){.    (pCtx->p
36510 46 75 6e 63 2d 3e 78 49 6e 76 65 72 73 65 29 28  Func->xInverse)(
36520 70 43 74 78 2c 70 43 74 78 2d 3e 61 72 67 63 2c  pCtx,pCtx->argc,
36530 70 43 74 78 2d 3e 61 72 67 76 29 3b 0a 20 20 7d  pCtx->argv);.  }
36540 65 6c 73 65 0a 23 65 6e 64 69 66 0a 20 20 28 70  else.#endif.  (p
36550 43 74 78 2d 3e 70 46 75 6e 63 2d 3e 78 53 46 75  Ctx->pFunc->xSFu
36560 6e 63 29 28 70 43 74 78 2c 70 43 74 78 2d 3e 61  nc)(pCtx,pCtx->a
36570 72 67 63 2c 70 43 74 78 2d 3e 61 72 67 76 29 3b  rgc,pCtx->argv);
36580 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 34 35 30 35   /* IMP: R-24505
36590 2d 32 33 32 33 30 20 2a 2f 0a 0a 20 20 69 66 28  -23230 */..  if(
365a0 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 20 29   pCtx->isError )
365b0 7b 0a 20 20 20 20 69 66 28 20 70 43 74 78 2d 3e  {.    if( pCtx->
365c0 69 73 45 72 72 6f 72 3e 30 20 29 7b 0a 20 20 20  isError>0 ){.   
365d0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
365e0 72 6f 72 28 70 2c 20 22 25 73 22 2c 20 73 71 6c  ror(p, "%s", sql
365f0 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
36600 70 43 74 78 2d 3e 70 4f 75 74 29 29 3b 0a 20 20  pCtx->pOut));.  
36610 20 20 20 20 72 63 20 3d 20 70 43 74 78 2d 3e 69      rc = pCtx->i
36620 73 45 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20  sError;.    }.  
36630 20 20 69 66 28 20 70 43 74 78 2d 3e 73 6b 69 70    if( pCtx->skip
36640 46 6c 61 67 20 29 7b 0a 20 20 20 20 20 20 61 73  Flag ){.      as
36650 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70  sert( pOp[-1].op
36660 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71  code==OP_CollSeq
36670 20 29 3b 0a 20 20 20 20 20 20 69 20 3d 20 70 4f   );.      i = pO
36680 70 5b 2d 31 5d 2e 70 31 3b 0a 20 20 20 20 20 20  p[-1].p1;.      
36690 69 66 28 20 69 20 29 20 73 71 6c 69 74 65 33 56  if( i ) sqlite3V
366a0 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26  dbeMemSetInt64(&
366b0 61 4d 65 6d 5b 69 5d 2c 20 31 29 3b 0a 20 20 20  aMem[i], 1);.   
366c0 20 20 20 70 43 74 78 2d 3e 73 6b 69 70 46 6c 61     pCtx->skipFla
366d0 67 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20  g = 0;.    }.   
366e0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
366f0 65 6c 65 61 73 65 28 70 43 74 78 2d 3e 70 4f 75  elease(pCtx->pOu
36700 74 29 3b 0a 20 20 20 20 70 43 74 78 2d 3e 70 4f  t);.    pCtx->pO
36710 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
36720 4e 75 6c 6c 3b 0a 20 20 20 20 70 43 74 78 2d 3e  Null;.    pCtx->
36730 69 73 45 72 72 6f 72 20 3d 20 30 3b 0a 20 20 20  isError = 0;.   
36740 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
36750 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
36760 72 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28  r;.  }.  assert(
36770 20 70 43 74 78 2d 3e 70 4f 75 74 2d 3e 66 6c 61   pCtx->pOut->fla
36780 67 73 3d 3d 4d 45 4d 5f 4e 75 6c 6c 20 29 3b 0a  gs==MEM_Null );.
36790 20 20 61 73 73 65 72 74 28 20 70 43 74 78 2d 3e    assert( pCtx->
367a0 73 6b 69 70 46 6c 61 67 3d 3d 30 20 29 3b 0a 20  skipFlag==0 );. 
367b0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
367c0 63 6f 64 65 3a 20 41 67 67 46 69 6e 61 6c 20 50  code: AggFinal P
367d0 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53  1 P2 * P4 *.** S
367e0 79 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d 72  ynopsis: accum=r
367f0 5b 50 31 5d 20 4e 3d 50 32 0a 2a 2a 0a 2a 2a 20  [P1] N=P2.**.** 
36800 50 31 20 69 73 20 74 68 65 20 6d 65 6d 6f 72 79  P1 is the memory
36810 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 69   location that i
36820 73 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74 6f  s the accumulato
36830 72 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61  r for an aggrega
36840 74 65 0a 2a 2a 20 6f 72 20 77 69 6e 64 6f 77 20  te.** or window 
36850 66 75 6e 63 74 69 6f 6e 2e 20 20 45 78 65 63 75  function.  Execu
36860 74 65 20 74 68 65 20 66 69 6e 61 6c 69 7a 65 72  te the finalizer
36870 20 66 75 6e 63 74 69 6f 6e 20 0a 2a 2a 20 66 6f   function .** fo
36880 72 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 61  r an aggregate a
36890 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
368a0 75 6c 74 20 69 6e 20 50 31 2e 0a 2a 2a 0a 2a 2a  ult in P1..**.**
368b0 20 50 32 20 69 73 20 74 68 65 20 6e 75 6d 62 65   P2 is the numbe
368c0 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74  r of arguments t
368d0 68 61 74 20 74 68 65 20 73 74 65 70 20 66 75 6e  hat the step fun
368e0 63 74 69 6f 6e 20 74 61 6b 65 73 20 61 6e 64 0a  ction takes and.
368f0 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
36900 65 72 20 74 6f 20 74 68 65 20 46 75 6e 63 44 65  er to the FuncDe
36910 66 20 66 6f 72 20 74 68 69 73 20 66 75 6e 63 74  f for this funct
36920 69 6f 6e 2e 20 20 54 68 65 20 50 32 0a 2a 2a 20  ion.  The P2.** 
36930 61 72 67 75 6d 65 6e 74 20 69 73 20 6e 6f 74 20  argument is not 
36940 75 73 65 64 20 62 79 20 74 68 69 73 20 6f 70 63  used by this opc
36950 6f 64 65 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79  ode.  It is only
36960 20 74 68 65 72 65 20 74 6f 20 64 69 73 61 6d 62   there to disamb
36970 69 67 75 61 74 65 0a 2a 2a 20 66 75 6e 63 74 69  iguate.** functi
36980 6f 6e 73 20 74 68 61 74 20 63 61 6e 20 74 61 6b  ons that can tak
36990 65 20 76 61 72 79 69 6e 67 20 6e 75 6d 62 65 72  e varying number
369a0 73 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20  s of arguments. 
369b0 20 54 68 65 0a 2a 2a 20 50 34 20 61 72 67 75 6d   The.** P4 argum
369c0 65 6e 74 20 69 73 20 6f 6e 6c 79 20 6e 65 65 64  ent is only need
369d0 65 64 20 66 6f 72 20 74 68 65 20 63 61 73 65 20  ed for the case 
369e0 77 68 65 72 65 0a 2a 2a 20 74 68 65 20 73 74 65  where.** the ste
369f0 70 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 6e  p function was n
36a00 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 63 61  ot previously ca
36a10 6c 6c 65 64 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  lled..*/./* Opco
36a20 64 65 3a 20 41 67 67 56 61 6c 75 65 20 2a 20 50  de: AggValue * P
36a30 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
36a40 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 76 61 6c  opsis: r[P3]=val
36a50 75 65 20 4e 3d 50 32 0a 2a 2a 0a 2a 2a 20 49 6e  ue N=P2.**.** In
36a60 76 6f 6b 65 20 74 68 65 20 78 56 61 6c 75 65 28  voke the xValue(
36a70 29 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 73  ) function and s
36a80 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
36a90 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
36aa0 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20  **.** P2 is the 
36ab0 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  number of argume
36ac0 6e 74 73 20 74 68 61 74 20 74 68 65 20 73 74 65  nts that the ste
36ad0 70 20 66 75 6e 63 74 69 6f 6e 20 74 61 6b 65 73  p function takes
36ae0 20 61 6e 64 0a 2a 2a 20 50 34 20 69 73 20 61 20   and.** P4 is a 
36af0 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 46  pointer to the F
36b00 75 6e 63 44 65 66 20 66 6f 72 20 74 68 69 73 20  uncDef for this 
36b10 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68 65 20 50  function.  The P
36b20 32 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 69 73  2.** argument is
36b30 20 6e 6f 74 20 75 73 65 64 20 62 79 20 74 68 69   not used by thi
36b40 73 20 6f 70 63 6f 64 65 2e 20 20 49 74 20 69 73  s opcode.  It is
36b50 20 6f 6e 6c 79 20 74 68 65 72 65 20 74 6f 20 64   only there to d
36b60 69 73 61 6d 62 69 67 75 61 74 65 0a 2a 2a 20 66  isambiguate.** f
36b70 75 6e 63 74 69 6f 6e 73 20 74 68 61 74 20 63 61  unctions that ca
36b80 6e 20 74 61 6b 65 20 76 61 72 79 69 6e 67 20 6e  n take varying n
36b90 75 6d 62 65 72 73 20 6f 66 20 61 72 67 75 6d 65  umbers of argume
36ba0 6e 74 73 2e 20 20 54 68 65 0a 2a 2a 20 50 34 20  nts.  The.** P4 
36bb0 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6e 6c 79  argument is only
36bc0 20 6e 65 65 64 65 64 20 66 6f 72 20 74 68 65 20   needed for the 
36bd0 63 61 73 65 20 77 68 65 72 65 0a 2a 2a 20 74 68  case where.** th
36be0 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20  e step function 
36bf0 77 61 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73  was not previous
36c00 6c 79 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 63 61  ly called..*/.ca
36c10 73 65 20 4f 50 5f 41 67 67 56 61 6c 75 65 3a 0a  se OP_AggValue:.
36c20 63 61 73 65 20 4f 50 5f 41 67 67 46 69 6e 61 6c  case OP_AggFinal
36c30 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b  : {.  Mem *pMem;
36c40 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
36c50 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  p1>0 && pOp->p1<
36c60 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
36c70 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 61  >nCursor) );.  a
36c80 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d 3d  ssert( pOp->p3==
36c90 30 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  0 || pOp->opcode
36ca0 3d 3d 4f 50 5f 41 67 67 56 61 6c 75 65 20 29 3b  ==OP_AggValue );
36cb0 0a 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b  .  pMem = &aMem[
36cc0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
36cd0 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73  rt( (pMem->flags
36ce0 20 26 20 7e 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45   & ~(MEM_Null|ME
36cf0 4d 5f 41 67 67 29 29 3d 3d 30 20 29 3b 0a 23 69  M_Agg))==0 );.#i
36d00 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
36d10 54 5f 57 49 4e 44 4f 57 46 55 4e 43 0a 20 20 69  T_WINDOWFUNC.  i
36d20 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20  f( pOp->p3 ){.  
36d30 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
36d40 62 65 4d 65 6d 41 67 67 56 61 6c 75 65 28 70 4d  beMemAggValue(pM
36d50 65 6d 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  em, &aMem[pOp->p
36d60 33 5d 2c 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e  3], pOp->p4.pFun
36d70 63 29 3b 0a 20 20 20 20 70 4d 65 6d 20 3d 20 26  c);.    pMem = &
36d80 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
36d90 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a 20 20   }else.#endif.  
36da0 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
36db0 65 33 56 64 62 65 4d 65 6d 46 69 6e 61 6c 69 7a  e3VdbeMemFinaliz
36dc0 65 28 70 4d 65 6d 2c 20 70 4f 70 2d 3e 70 34 2e  e(pMem, pOp->p4.
36dd0 70 46 75 6e 63 29 3b 0a 20 20 7d 0a 20 20 0a 20  pFunc);.  }.  . 
36de0 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 73   if( rc ){.    s
36df0 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28  qlite3VdbeError(
36e00 70 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33  p, "%s", sqlite3
36e10 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 4d 65 6d  _value_text(pMem
36e20 29 29 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f  ));.    goto abo
36e30 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
36e40 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64  .  }.  sqlite3Vd
36e50 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
36e60 28 70 4d 65 6d 2c 20 65 6e 63 6f 64 69 6e 67 29  (pMem, encoding)
36e70 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
36e80 4c 4f 42 53 49 5a 45 28 70 4d 65 6d 29 3b 0a 20  LOBSIZE(pMem);. 
36e90 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
36ea0 4d 65 6d 54 6f 6f 42 69 67 28 70 4d 65 6d 29 20  MemTooBig(pMem) 
36eb0 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
36ec0 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  big;.  }.  break
36ed0 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ;.}..#ifndef SQL
36ee0 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 2f 2a 20  ITE_OMIT_WAL./* 
36ef0 4f 70 63 6f 64 65 3a 20 43 68 65 63 6b 70 6f 69  Opcode: Checkpoi
36f00 6e 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  nt P1 P2 P3 * *.
36f10 2a 2a 0a 2a 2a 20 43 68 65 63 6b 70 6f 69 6e 74  **.** Checkpoint
36f20 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 54 68   database P1. Th
36f30 69 73 20 69 73 20 61 20 6e 6f 2d 6f 70 20 69 66  is is a no-op if
36f40 20 50 31 20 69 73 20 6e 6f 74 20 63 75 72 72 65   P1 is not curre
36f50 6e 74 6c 79 20 69 6e 0a 2a 2a 20 57 41 4c 20 6d  ntly in.** WAL m
36f60 6f 64 65 2e 20 50 61 72 61 6d 65 74 65 72 20 50  ode. Parameter P
36f70 32 20 69 73 20 6f 6e 65 20 6f 66 20 53 51 4c 49  2 is one of SQLI
36f80 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41  TE_CHECKPOINT_PA
36f90 53 53 49 56 45 2c 20 46 55 4c 4c 2c 0a 2a 2a 20  SSIVE, FULL,.** 
36fa0 52 45 53 54 41 52 54 2c 20 6f 72 20 54 52 55 4e  RESTART, or TRUN
36fb0 43 41 54 45 2e 20 20 57 72 69 74 65 20 31 20 6f  CATE.  Write 1 o
36fc0 72 20 30 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 5d  r 0 into mem[P3]
36fd0 20 69 66 20 74 68 65 20 63 68 65 63 6b 70 6f 69   if the checkpoi
36fe0 6e 74 20 72 65 74 75 72 6e 73 0a 2a 2a 20 53 51  nt returns.** SQ
36ff0 4c 49 54 45 5f 42 55 53 59 20 6f 72 20 6e 6f 74  LITE_BUSY or not
37000 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  , respectively. 
37010 20 57 72 69 74 65 20 74 68 65 20 6e 75 6d 62 65   Write the numbe
37020 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68  r of pages in th
37030 65 0a 2a 2a 20 57 41 4c 20 61 66 74 65 72 20 74  e.** WAL after t
37040 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 20 69 6e  he checkpoint in
37050 74 6f 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64  to mem[P3+1] and
37060 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70   the number of p
37070 61 67 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 57  ages.** in the W
37080 41 4c 20 74 68 61 74 20 68 61 76 65 20 62 65 65  AL that have bee
37090 6e 20 63 68 65 63 6b 70 6f 69 6e 74 65 64 20 61  n checkpointed a
370a0 66 74 65 72 20 74 68 65 20 63 68 65 63 6b 70 6f  fter the checkpo
370b0 69 6e 74 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 73  int.** completes
370c0 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b 32 5d 2e   into mem[P3+2].
370d0 20 20 48 6f 77 65 76 65 72 20 6f 6e 20 61 6e 20    However on an 
370e0 65 72 72 6f 72 2c 20 6d 65 6d 5b 50 33 2b 31 5d  error, mem[P3+1]
370f0 20 61 6e 64 0a 2a 2a 20 6d 65 6d 5b 50 33 2b 32   and.** mem[P3+2
37100 5d 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65  ] are initialize
37110 64 20 74 6f 20 2d 31 2e 0a 2a 2f 0a 63 61 73 65  d to -1..*/.case
37120 20 4f 50 5f 43 68 65 63 6b 70 6f 69 6e 74 3a 20   OP_Checkpoint: 
37130 7b 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20  {.  int i;      
37140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
37150 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e      /* Loop coun
37160 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20 61 52 65  ter */.  int aRe
37170 73 5b 33 5d 3b 20 20 20 20 20 20 20 20 20 20 20  s[3];           
37180 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75           /* Resu
37190 6c 74 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d  lts */.  Mem *pM
371a0 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
371b0 20 20 20 20 20 20 20 20 20 2f 2a 20 57 72 69 74           /* Writ
371c0 65 20 72 65 73 75 6c 74 73 20 68 65 72 65 20 2a  e results here *
371d0 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  /..  assert( p->
371e0 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20  readOnly==0 );. 
371f0 20 61 52 65 73 5b 30 5d 20 3d 20 30 3b 0a 20 20   aRes[0] = 0;.  
37200 61 52 65 73 5b 31 5d 20 3d 20 61 52 65 73 5b 32  aRes[1] = aRes[2
37210 5d 20 3d 20 2d 31 3b 0a 20 20 61 73 73 65 72 74  ] = -1;.  assert
37220 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54  ( pOp->p2==SQLIT
37230 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53  E_CHECKPOINT_PAS
37240 53 49 56 45 0a 20 20 20 20 20 20 20 7c 7c 20 70  SIVE.       || p
37250 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43  Op->p2==SQLITE_C
37260 48 45 43 4b 50 4f 49 4e 54 5f 46 55 4c 4c 0a 20  HECKPOINT_FULL. 
37270 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32        || pOp->p2
37280 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f  ==SQLITE_CHECKPO
37290 49 4e 54 5f 52 45 53 54 41 52 54 0a 20 20 20 20  INT_RESTART.    
372a0 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53     || pOp->p2==S
372b0 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54  QLITE_CHECKPOINT
372c0 5f 54 52 55 4e 43 41 54 45 0a 20 20 29 3b 0a 20  _TRUNCATE.  );. 
372d0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 43 68 65   rc = sqlite3Che
372e0 63 6b 70 6f 69 6e 74 28 64 62 2c 20 70 4f 70 2d  ckpoint(db, pOp-
372f0 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 26 61  >p1, pOp->p2, &a
37300 52 65 73 5b 31 5d 2c 20 26 61 52 65 73 5b 32 5d  Res[1], &aRes[2]
37310 29 3b 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20  );.  if( rc ){. 
37320 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
37330 45 5f 42 55 53 59 20 29 20 67 6f 74 6f 20 61 62  E_BUSY ) goto ab
37340 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
37350 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  ;.    rc = SQLIT
37360 45 5f 4f 4b 3b 0a 20 20 20 20 61 52 65 73 5b 30  E_OK;.    aRes[0
37370 5d 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 66 6f 72  ] = 1;.  }.  for
37380 28 69 3d 30 2c 20 70 4d 65 6d 20 3d 20 26 61 4d  (i=0, pMem = &aM
37390 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 20 69 3c 33  em[pOp->p3]; i<3
373a0 3b 20 69 2b 2b 2c 20 70 4d 65 6d 2b 2b 29 7b 0a  ; i++, pMem++){.
373b0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
373c0 65 6d 53 65 74 49 6e 74 36 34 28 70 4d 65 6d 2c  emSetInt64(pMem,
373d0 20 28 69 36 34 29 61 52 65 73 5b 69 5d 29 3b 0a   (i64)aRes[i]);.
373e0 20 20 7d 20 20 20 20 0a 20 20 62 72 65 61 6b 3b    }    .  break;
373f0 0a 7d 3b 20 20 0a 23 65 6e 64 69 66 0a 0a 23 69  .};  .#endif..#i
37400 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
37410 54 5f 50 52 41 47 4d 41 0a 2f 2a 20 4f 70 63 6f  T_PRAGMA./* Opco
37420 64 65 3a 20 4a 6f 75 72 6e 61 6c 4d 6f 64 65 20  de: JournalMode 
37430 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
37440 2a 2a 20 43 68 61 6e 67 65 20 74 68 65 20 6a 6f  ** Change the jo
37450 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20 64 61  urnal mode of da
37460 74 61 62 61 73 65 20 50 31 20 74 6f 20 50 33 2e  tabase P1 to P3.
37470 20 50 33 20 6d 75 73 74 20 62 65 20 6f 6e 65 20   P3 must be one 
37480 6f 66 20 74 68 65 0a 2a 2a 20 50 41 47 45 52 5f  of the.** PAGER_
37490 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58 58 58 20  JOURNALMODE_XXX 
374a0 76 61 6c 75 65 73 2e 20 49 66 20 63 68 61 6e 67  values. If chang
374b0 69 6e 67 20 62 65 74 77 65 65 6e 20 74 68 65 20  ing between the 
374c0 76 61 72 69 6f 75 73 20 72 6f 6c 6c 62 61 63 6b  various rollback
374d0 0a 2a 2a 20 6d 6f 64 65 73 20 28 64 65 6c 65 74  .** modes (delet
374e0 65 2c 20 74 72 75 6e 63 61 74 65 2c 20 70 65 72  e, truncate, per
374f0 73 69 73 74 2c 20 6f 66 66 20 61 6e 64 20 6d 65  sist, off and me
37500 6d 6f 72 79 29 2c 20 74 68 69 73 20 69 73 20 61  mory), this is a
37510 20 73 69 6d 70 6c 65 0a 2a 2a 20 6f 70 65 72 61   simple.** opera
37520 74 69 6f 6e 2e 20 4e 6f 20 49 4f 20 69 73 20 72  tion. No IO is r
37530 65 71 75 69 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49  equired..**.** I
37540 66 20 63 68 61 6e 67 69 6e 67 20 69 6e 74 6f 20  f changing into 
37550 6f 72 20 6f 75 74 20 6f 66 20 57 41 4c 20 6d 6f  or out of WAL mo
37560 64 65 20 74 68 65 20 70 72 6f 63 65 64 75 72 65  de the procedure
37570 20 69 73 20 6d 6f 72 65 20 63 6f 6d 70 6c 69 63   is more complic
37580 61 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 57 72 69 74  ated..**.** Writ
37590 65 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 74 61  e a string conta
375a0 69 6e 69 6e 67 20 74 68 65 20 66 69 6e 61 6c 20  ining the final 
375b0 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65 20 74 6f 20  journal-mode to 
375c0 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a  register P2..*/.
375d0 63 61 73 65 20 4f 50 5f 4a 6f 75 72 6e 61 6c 4d  case OP_JournalM
375e0 6f 64 65 3a 20 7b 20 20 20 20 2f 2a 20 6f 75 74  ode: {    /* out
375f0 32 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42  2 */.  Btree *pB
37600 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
37610 20 20 20 20 20 20 20 2f 2a 20 42 74 72 65 65 20         /* Btree 
37620 74 6f 20 63 68 61 6e 67 65 20 6a 6f 75 72 6e 61  to change journa
37630 6c 20 6d 6f 64 65 20 6f 66 20 2a 2f 0a 20 20 50  l mode of */.  P
37640 61 67 65 72 20 2a 70 50 61 67 65 72 3b 20 20 20  ager *pPager;   
37650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
37660 2a 20 50 61 67 65 72 20 61 73 73 6f 63 69 61 74  * Pager associat
37670 65 64 20 77 69 74 68 20 70 42 74 20 2a 2f 0a 20  ed with pBt */. 
37680 20 69 6e 74 20 65 4e 65 77 3b 20 20 20 20 20 20   int eNew;      
37690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
376a0 20 2f 2a 20 4e 65 77 20 6a 6f 75 72 6e 61 6c 20   /* New journal 
376b0 6d 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 65 4f  mode */.  int eO
376c0 6c 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ld;             
376d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
376e0 20 6f 6c 64 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64   old journal mod
376f0 65 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  e */.#ifndef SQL
37700 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 63  ITE_OMIT_WAL.  c
37710 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65  onst char *zFile
37720 6e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f  name;          /
37730 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62 61  * Name of databa
37740 73 65 20 66 69 6c 65 20 66 6f 72 20 70 50 61 67  se file for pPag
37750 65 72 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 20 20  er */.#endif..  
37760 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
37770 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
37780 20 65 4e 65 77 20 3d 20 70 4f 70 2d 3e 70 33 3b   eNew = pOp->p3;
37790 0a 20 20 61 73 73 65 72 74 28 20 65 4e 65 77 3d  .  assert( eNew=
377a0 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
377b0 44 45 5f 44 45 4c 45 54 45 20 0a 20 20 20 20 20  DE_DELETE .     
377c0 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52    || eNew==PAGER
377d0 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 54 52 55  _JOURNALMODE_TRU
377e0 4e 43 41 54 45 20 0a 20 20 20 20 20 20 20 7c 7c  NCATE .       ||
377f0 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
37800 52 4e 41 4c 4d 4f 44 45 5f 50 45 52 53 49 53 54  RNALMODE_PERSIST
37810 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77   .       || eNew
37820 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
37830 4f 44 45 5f 4f 46 46 0a 20 20 20 20 20 20 20 7c  ODE_OFF.       |
37840 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
37850 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59  URNALMODE_MEMORY
37860 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d  .       || eNew=
37870 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
37880 44 45 5f 57 41 4c 0a 20 20 20 20 20 20 20 7c 7c  DE_WAL.       ||
37890 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
378a0 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 0a 20  RNALMODE_QUERY. 
378b0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
378c0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
378d0 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
378e0 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
378f0 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 70 42  Only==0 );..  pB
37900 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  t = db->aDb[pOp-
37910 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 70 50 61 67  >p1].pBt;.  pPag
37920 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  er = sqlite3Btre
37930 65 50 61 67 65 72 28 70 42 74 29 3b 0a 20 20 65  ePager(pBt);.  e
37940 4f 6c 64 20 3d 20 73 71 6c 69 74 65 33 50 61 67  Old = sqlite3Pag
37950 65 72 47 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65  erGetJournalMode
37960 28 70 50 61 67 65 72 29 3b 0a 20 20 69 66 28 20  (pPager);.  if( 
37970 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
37980 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 20 29 20  NALMODE_QUERY ) 
37990 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 69  eNew = eOld;.  i
379a0 66 28 20 21 73 71 6c 69 74 65 33 50 61 67 65 72  f( !sqlite3Pager
379b0 4f 6b 54 6f 43 68 61 6e 67 65 4a 6f 75 72 6e 61  OkToChangeJourna
379c0 6c 4d 6f 64 65 28 70 50 61 67 65 72 29 20 29 20  lMode(pPager) ) 
379d0 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 0a 23 69  eNew = eOld;..#i
379e0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
379f0 54 5f 57 41 4c 0a 20 20 7a 46 69 6c 65 6e 61 6d  T_WAL.  zFilenam
37a00 65 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72  e = sqlite3Pager
37a10 46 69 6c 65 6e 61 6d 65 28 70 50 61 67 65 72 2c  Filename(pPager,
37a20 20 31 29 3b 0a 0a 20 20 2f 2a 20 44 6f 20 6e 6f   1);..  /* Do no
37a30 74 20 61 6c 6c 6f 77 20 61 20 74 72 61 6e 73 69  t allow a transi
37a40 74 69 6f 6e 20 74 6f 20 6a 6f 75 72 6e 61 6c 5f  tion to journal_
37a50 6d 6f 64 65 3d 57 41 4c 20 66 6f 72 20 61 20 64  mode=WAL for a d
37a60 61 74 61 62 61 73 65 0a 20 20 2a 2a 20 69 6e 20  atabase.  ** in 
37a70 74 65 6d 70 6f 72 61 72 79 20 73 74 6f 72 61 67  temporary storag
37a80 65 20 6f 72 20 69 66 20 74 68 65 20 56 46 53 20  e or if the VFS 
37a90 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72 74  does not support
37aa0 20 73 68 61 72 65 64 20 6d 65 6d 6f 72 79 20 0a   shared memory .
37ab0 20 20 2a 2f 0a 20 20 69 66 28 20 65 4e 65 77 3d    */.  if( eNew=
37ac0 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
37ad0 44 45 5f 57 41 4c 0a 20 20 20 26 26 20 28 73 71  DE_WAL.   && (sq
37ae0 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 46  lite3Strlen30(zF
37af0 69 6c 65 6e 61 6d 65 29 3d 3d 30 20 20 20 20 20  ilename)==0     
37b00 20 20 20 20 20 20 2f 2a 20 54 65 6d 70 20 66 69        /* Temp fi
37b10 6c 65 20 2a 2f 0a 20 20 20 20 20 20 20 7c 7c 20  le */.       || 
37b20 21 73 71 6c 69 74 65 33 50 61 67 65 72 57 61 6c  !sqlite3PagerWal
37b30 53 75 70 70 6f 72 74 65 64 28 70 50 61 67 65 72  Supported(pPager
37b40 29 29 20 20 20 2f 2a 20 4e 6f 20 73 68 61 72 65  ))   /* No share
37b50 64 2d 6d 65 6d 6f 72 79 20 73 75 70 70 6f 72 74  d-memory support
37b60 20 2a 2f 0a 20 20 29 7b 0a 20 20 20 20 65 4e 65   */.  ){.    eNe
37b70 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a 0a 20  w = eOld;.  }.. 
37b80 20 69 66 28 20 28 65 4e 65 77 21 3d 65 4f 6c 64   if( (eNew!=eOld
37b90 29 0a 20 20 20 26 26 20 28 65 4f 6c 64 3d 3d 50  ).   && (eOld==P
37ba0 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
37bb0 5f 57 41 4c 20 7c 7c 20 65 4e 65 77 3d 3d 50 41  _WAL || eNew==PA
37bc0 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
37bd0 57 41 4c 29 0a 20 20 29 7b 0a 20 20 20 20 69 66  WAL).  ){.    if
37be0 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  ( !db->autoCommi
37bf0 74 20 7c 7c 20 64 62 2d 3e 6e 56 64 62 65 52 65  t || db->nVdbeRe
37c00 61 64 3e 31 20 29 7b 0a 20 20 20 20 20 20 72 63  ad>1 ){.      rc
37c10 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
37c20 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
37c30 62 65 45 72 72 6f 72 28 70 2c 0a 20 20 20 20 20  beError(p,.     
37c40 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 63 68 61       "cannot cha
37c50 6e 67 65 20 25 73 20 77 61 6c 20 6d 6f 64 65 20  nge %s wal mode 
37c60 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 74 72  from within a tr
37c70 61 6e 73 61 63 74 69 6f 6e 22 2c 0a 20 20 20 20  ansaction",.    
37c80 20 20 20 20 20 20 28 65 4e 65 77 3d 3d 50 41 47        (eNew==PAG
37c90 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57  ER_JOURNALMODE_W
37ca0 41 4c 20 3f 20 22 69 6e 74 6f 22 20 3a 20 22 6f  AL ? "into" : "o
37cb0 75 74 20 6f 66 22 29 0a 20 20 20 20 20 20 29 3b  ut of").      );
37cc0 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  .      goto abor
37cd0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
37ce0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 0a 20 20 20      }else{. .   
37cf0 20 20 20 69 66 28 20 65 4f 6c 64 3d 3d 50 41 47     if( eOld==PAG
37d00 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57  ER_JOURNALMODE_W
37d10 41 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a  AL ){.        /*
37d20 20 49 66 20 6c 65 61 76 69 6e 67 20 57 41 4c 20   If leaving WAL 
37d30 6d 6f 64 65 2c 20 63 6c 6f 73 65 20 74 68 65 20  mode, close the 
37d40 6c 6f 67 20 66 69 6c 65 2e 20 49 66 20 73 75 63  log file. If suc
37d50 63 65 73 73 66 75 6c 2c 20 74 68 65 20 63 61 6c  cessful, the cal
37d60 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 6f 20  l.        ** to 
37d70 50 61 67 65 72 43 6c 6f 73 65 57 61 6c 28 29 20  PagerCloseWal() 
37d80 63 68 65 63 6b 70 6f 69 6e 74 73 20 61 6e 64 20  checkpoints and 
37d90 64 65 6c 65 74 65 73 20 74 68 65 20 77 72 69 74  deletes the writ
37da0 65 2d 61 68 65 61 64 2d 6c 6f 67 20 0a 20 20 20  e-ahead-log .   
37db0 20 20 20 20 20 2a 2a 20 66 69 6c 65 2e 20 41 6e       ** file. An
37dc0 20 45 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b 20   EXCLUSIVE lock 
37dd0 6d 61 79 20 73 74 69 6c 6c 20 62 65 20 68 65 6c  may still be hel
37de0 64 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73  d on the databas
37df0 65 20 66 69 6c 65 20 0a 20 20 20 20 20 20 20 20  e file .        
37e00 2a 2a 20 61 66 74 65 72 20 61 20 73 75 63 63 65  ** after a succe
37e10 73 73 66 75 6c 20 72 65 74 75 72 6e 2e 20 0a 20  ssful return. . 
37e20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20         */.      
37e30 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 50 61    rc = sqlite3Pa
37e40 67 65 72 43 6c 6f 73 65 57 61 6c 28 70 50 61 67  gerCloseWal(pPag
37e50 65 72 2c 20 64 62 29 3b 0a 20 20 20 20 20 20 20  er, db);.       
37e60 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
37e70 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  OK ){.          
37e80 73 71 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a  sqlite3PagerSetJ
37e90 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65  ournalMode(pPage
37ea0 72 2c 20 65 4e 65 77 29 3b 0a 20 20 20 20 20 20  r, eNew);.      
37eb0 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 20    }.      }else 
37ec0 69 66 28 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f  if( eOld==PAGER_
37ed0 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f  JOURNALMODE_MEMO
37ee0 52 59 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a  RY ){.        /*
37ef0 20 43 61 6e 6e 6f 74 20 74 72 61 6e 73 69 74 69   Cannot transiti
37f00 6f 6e 20 64 69 72 65 63 74 6c 79 20 66 72 6f 6d  on directly from
37f10 20 4d 45 4d 4f 52 59 20 74 6f 20 57 41 4c 2e 20   MEMORY to WAL. 
37f20 20 55 73 65 20 6d 6f 64 65 20 4f 46 46 0a 20 20   Use mode OFF.  
37f30 20 20 20 20 20 20 2a 2a 20 61 73 20 61 6e 20 69        ** as an i
37f40 6e 74 65 72 6d 65 64 69 61 74 65 20 2a 2f 0a 20  ntermediate */. 
37f50 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61         sqlite3Pa
37f60 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64  gerSetJournalMod
37f70 65 28 70 50 61 67 65 72 2c 20 50 41 47 45 52 5f  e(pPager, PAGER_
37f80 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 29  JOURNALMODE_OFF)
37f90 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20  ;.      }.  .   
37fa0 20 20 20 2f 2a 20 4f 70 65 6e 20 61 20 74 72 61     /* Open a tra
37fb0 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 20  nsaction on the 
37fc0 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 52  database file. R
37fd0 65 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65  egardless of the
37fe0 20 6a 6f 75 72 6e 61 6c 0a 20 20 20 20 20 20 2a   journal.      *
37ff0 2a 20 6d 6f 64 65 2c 20 74 68 69 73 20 74 72 61  * mode, this tra
38000 6e 73 61 63 74 69 6f 6e 20 61 6c 77 61 79 73 20  nsaction always 
38010 75 73 65 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20  uses a rollback 
38020 6a 6f 75 72 6e 61 6c 2e 0a 20 20 20 20 20 20 2a  journal..      *
38030 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  /.      assert( 
38040 73 71 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e  sqlite3BtreeIsIn
38050 54 72 61 6e 73 28 70 42 74 29 3d 3d 30 20 29 3b  Trans(pBt)==0 );
38060 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53  .      if( rc==S
38070 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
38080 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
38090 42 74 72 65 65 53 65 74 56 65 72 73 69 6f 6e 28  BtreeSetVersion(
380a0 70 42 74 2c 20 28 65 4e 65 77 3d 3d 50 41 47 45  pBt, (eNew==PAGE
380b0 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41  R_JOURNALMODE_WA
380c0 4c 20 3f 20 32 20 3a 20 31 29 29 3b 0a 20 20 20  L ? 2 : 1));.   
380d0 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 23     }.    }.  }.#
380e0 65 6e 64 69 66 20 2f 2a 20 69 66 6e 64 65 66 20  endif /* ifndef 
380f0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 20  SQLITE_OMIT_WAL 
38100 2a 2f 0a 0a 20 20 69 66 28 20 72 63 20 29 20 65  */..  if( rc ) e
38110 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 65 4e  New = eOld;.  eN
38120 65 77 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65  ew = sqlite3Page
38130 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28  rSetJournalMode(
38140 70 50 61 67 65 72 2c 20 65 4e 65 77 29 3b 0a 0a  pPager, eNew);..
38150 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
38160 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74 61 74  MEM_Str|MEM_Stat
38170 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70  ic|MEM_Term;.  p
38180 4f 75 74 2d 3e 7a 20 3d 20 28 63 68 61 72 20 2a  Out->z = (char *
38190 29 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d  )sqlite3JournalM
381a0 6f 64 65 6e 61 6d 65 28 65 4e 65 77 29 3b 0a 20  odename(eNew);. 
381b0 20 70 4f 75 74 2d 3e 6e 20 3d 20 73 71 6c 69 74   pOut->n = sqlit
381c0 65 33 53 74 72 6c 65 6e 33 30 28 70 4f 75 74 2d  e3Strlen30(pOut-
381d0 3e 7a 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63  >z);.  pOut->enc
381e0 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 0a   = SQLITE_UTF8;.
381f0 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
38200 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74  ngeEncoding(pOut
38210 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 69  , encoding);.  i
38220 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
38230 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
38240 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a 23 65 6e  .  break;.};.#en
38250 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
38260 49 54 5f 50 52 41 47 4d 41 20 2a 2f 0a 0a 23 69  IT_PRAGMA */..#i
38270 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
38280 45 5f 4f 4d 49 54 5f 56 41 43 55 55 4d 29 20 26  E_OMIT_VACUUM) &
38290 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
382a0 45 5f 4f 4d 49 54 5f 41 54 54 41 43 48 29 0a 2f  E_OMIT_ATTACH)./
382b0 2a 20 4f 70 63 6f 64 65 3a 20 56 61 63 75 75 6d  * Opcode: Vacuum
382c0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
382d0 2a 2a 20 56 61 63 75 75 6d 20 74 68 65 20 65 6e  ** Vacuum the en
382e0 74 69 72 65 20 64 61 74 61 62 61 73 65 20 50 31  tire database P1
382f0 2e 20 20 50 31 20 69 7