/ Hex Artifact Content
Login

Artifact a44a1cd246f808d36ee0ce7dc031d9624a50242db96ac57f65ad93aea65ceaac:


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 73 71 6c 69 74 65 33 56 64 62 65 46 72 65    sqlite3VdbeFre
2500: 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70  eCursor(p, p->ap
2510: 43 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20 20  Csr[iCur]);.    
2520: 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d  p->apCsr[iCur] =
2530: 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53 51   0;.  }.  if( SQ
2540: 4c 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65 33  LITE_OK==sqlite3
2550: 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52  VdbeMemClearAndR
2560: 65 73 69 7a 65 28 70 4d 65 6d 2c 20 6e 42 79 74  esize(pMem, nByt
2570: 65 29 20 29 7b 0a 20 20 20 20 70 2d 3e 61 70 43  e) ){.    p->apC
2580: 73 72 5b 69 43 75 72 5d 20 3d 20 70 43 78 20 3d  sr[iCur] = pCx =
2590: 20 28 56 64 62 65 43 75 72 73 6f 72 2a 29 70 4d   (VdbeCursor*)pM
25a0: 65 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65 6d 73 65  em->z;.    memse
25b0: 74 28 70 43 78 2c 20 30 2c 20 6f 66 66 73 65 74  t(pCx, 0, offset
25c0: 6f 66 28 56 64 62 65 43 75 72 73 6f 72 2c 70 41  of(VdbeCursor,pA
25d0: 6c 74 43 75 72 73 6f 72 29 29 3b 0a 20 20 20 20  ltCursor));.    
25e0: 70 43 78 2d 3e 65 43 75 72 54 79 70 65 20 3d 20  pCx->eCurType = 
25f0: 65 43 75 72 54 79 70 65 3b 0a 20 20 20 20 70 43  eCurType;.    pC
2600: 78 2d 3e 69 44 62 20 3d 20 69 44 62 3b 0a 20 20  x->iDb = iDb;.  
2610: 20 20 70 43 78 2d 3e 6e 46 69 65 6c 64 20 3d 20    pCx->nField = 
2620: 6e 46 69 65 6c 64 3b 0a 20 20 20 20 70 43 78 2d  nField;.    pCx-
2630: 3e 61 4f 66 66 73 65 74 20 3d 20 26 70 43 78 2d  >aOffset = &pCx-
2640: 3e 61 54 79 70 65 5b 6e 46 69 65 6c 64 5d 3b 0a  >aType[nField];.
2650: 20 20 20 20 69 66 28 20 65 43 75 72 54 79 70 65      if( eCurType
2660: 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
2670: 29 7b 0a 20 20 20 20 20 20 70 43 78 2d 3e 75 63  ){.      pCx->uc
2680: 2e 70 43 75 72 73 6f 72 20 3d 20 28 42 74 43 75  .pCursor = (BtCu
2690: 72 73 6f 72 2a 29 0a 20 20 20 20 20 20 20 20 20  rsor*).         
26a0: 20 26 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44 38   &pMem->z[ROUND8
26b0: 28 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73  (sizeof(VdbeCurs
26c0: 6f 72 29 29 2b 32 2a 73 69 7a 65 6f 66 28 75 33  or))+2*sizeof(u3
26d0: 32 29 2a 6e 46 69 65 6c 64 5d 3b 0a 20 20 20 20  2)*nField];.    
26e0: 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75    sqlite3BtreeCu
26f0: 72 73 6f 72 5a 65 72 6f 28 70 43 78 2d 3e 75 63  rsorZero(pCx->uc
2700: 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d  .pCursor);.    }
2710: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 70 43  .  }.  return pC
2720: 78 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20  x;.}../*.** Try 
2730: 74 6f 20 63 6f 6e 76 65 72 74 20 61 20 76 61 6c  to convert a val
2740: 75 65 20 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69  ue into a numeri
2750: 63 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  c representation
2760: 20 69 66 20 77 65 20 63 61 6e 0a 2a 2a 20 64 6f   if we can.** do
2770: 20 73 6f 20 77 69 74 68 6f 75 74 20 6c 6f 73 73   so without loss
2780: 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e   of information.
2790: 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
27a0: 2c 20 69 66 20 74 68 65 20 73 74 72 69 6e 67 0a  , if the string.
27b0: 2a 2a 20 6c 6f 6f 6b 73 20 6c 69 6b 65 20 61 20  ** looks like a 
27c0: 6e 75 6d 62 65 72 2c 20 63 6f 6e 76 65 72 74 20  number, convert 
27d0: 69 74 20 69 6e 74 6f 20 61 20 6e 75 6d 62 65 72  it into a number
27e0: 2e 20 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f  .  If it does no
27f0: 74 0a 2a 2a 20 6c 6f 6f 6b 20 6c 69 6b 65 20 61  t.** look like a
2800: 20 6e 75 6d 62 65 72 2c 20 6c 65 61 76 65 20 69   number, leave i
2810: 74 20 61 6c 6f 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49  t alone..**.** I
2820: 66 20 74 68 65 20 62 54 72 79 46 6f 72 49 6e 74  f the bTryForInt
2830: 20 66 6c 61 67 20 69 73 20 74 72 75 65 2c 20 74   flag is true, t
2840: 68 65 6e 20 65 78 74 72 61 20 65 66 66 6f 72 74  hen extra effort
2850: 20 69 73 20 6d 61 64 65 20 74 6f 20 67 69 76 65   is made to give
2860: 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72 20 72  .** an integer r
2870: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20 20  epresentation.  
2880: 53 74 72 69 6e 67 73 20 74 68 61 74 20 6c 6f 6f  Strings that loo
2890: 6b 20 6c 69 6b 65 20 66 6c 6f 61 74 69 6e 67 20  k like floating 
28a0: 70 6f 69 6e 74 0a 2a 2a 20 76 61 6c 75 65 73 20  point.** values 
28b0: 62 75 74 20 77 68 69 63 68 20 68 61 76 65 20 6e  but which have n
28c0: 6f 20 66 72 61 63 74 69 6f 6e 61 6c 20 63 6f 6d  o fractional com
28d0: 70 6f 6e 65 6e 74 20 28 65 78 61 6d 70 6c 65 3a  ponent (example:
28e0: 20 27 34 38 2e 30 30 27 29 0a 2a 2a 20 77 69 6c   '48.00').** wil
28f0: 6c 20 68 61 76 65 20 61 20 4d 45 4d 5f 49 6e 74  l have a MEM_Int
2900: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
2910: 77 68 65 6e 20 62 54 72 79 46 6f 72 49 6e 74 20  when bTryForInt 
2920: 69 73 20 74 72 75 65 2e 0a 2a 2a 0a 2a 2a 20 49  is true..**.** I
2930: 66 20 62 54 72 79 46 6f 72 49 6e 74 20 69 73 20  f bTryForInt is 
2940: 66 61 6c 73 65 2c 20 74 68 65 6e 20 69 66 20 74  false, then if t
2950: 68 65 20 69 6e 70 75 74 20 73 74 72 69 6e 67 20  he input string 
2960: 63 6f 6e 74 61 69 6e 73 20 61 20 64 65 63 69 6d  contains a decim
2970: 61 6c 0a 2a 2a 20 70 6f 69 6e 74 20 6f 72 20 65  al.** point or e
2980: 78 70 6f 6e 65 6e 74 69 61 6c 20 6e 6f 74 61 74  xponential notat
2990: 69 6f 6e 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ion, the result 
29a0: 69 73 20 6f 6e 6c 79 20 4d 45 4d 5f 52 65 61 6c  is only MEM_Real
29b0: 2c 20 65 76 65 6e 0a 2a 2a 20 69 66 20 74 68 65  , even.** if the
29c0: 72 65 20 69 73 20 61 6e 20 65 78 61 63 74 20 69  re is an exact i
29d0: 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74  nteger represent
29e0: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 71 75 61  ation of the qua
29f0: 6e 74 69 74 79 2e 0a 2a 2f 0a 73 74 61 74 69 63  ntity..*/.static
2a00: 20 76 6f 69 64 20 61 70 70 6c 79 4e 75 6d 65 72   void applyNumer
2a10: 69 63 41 66 66 69 6e 69 74 79 28 4d 65 6d 20 2a  icAffinity(Mem *
2a20: 70 52 65 63 2c 20 69 6e 74 20 62 54 72 79 46 6f  pRec, int bTryFo
2a30: 72 49 6e 74 29 7b 0a 20 20 64 6f 75 62 6c 65 20  rInt){.  double 
2a40: 72 56 61 6c 75 65 3b 0a 20 20 69 36 34 20 69 56  rValue;.  i64 iV
2a50: 61 6c 75 65 3b 0a 20 20 75 38 20 65 6e 63 20 3d  alue;.  u8 enc =
2a60: 20 70 52 65 63 2d 3e 65 6e 63 3b 0a 20 20 61 73   pRec->enc;.  as
2a70: 73 65 72 74 28 20 28 70 52 65 63 2d 3e 66 6c 61  sert( (pRec->fla
2a80: 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45  gs & (MEM_Str|ME
2a90: 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29  M_Int|MEM_Real))
2aa0: 3d 3d 4d 45 4d 5f 53 74 72 20 29 3b 0a 20 20 69  ==MEM_Str );.  i
2ab0: 66 28 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70  f( sqlite3AtoF(p
2ac0: 52 65 63 2d 3e 7a 2c 20 26 72 56 61 6c 75 65 2c  Rec->z, &rValue,
2ad0: 20 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 3d 3d   pRec->n, enc)==
2ae0: 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 69 66  0 ) return;.  if
2af0: 28 20 30 3d 3d 73 71 6c 69 74 65 33 41 74 6f 69  ( 0==sqlite3Atoi
2b00: 36 34 28 70 52 65 63 2d 3e 7a 2c 20 26 69 56 61  64(pRec->z, &iVa
2b10: 6c 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20 65 6e  lue, pRec->n, en
2b20: 63 29 20 29 7b 0a 20 20 20 20 70 52 65 63 2d 3e  c) ){.    pRec->
2b30: 75 2e 69 20 3d 20 69 56 61 6c 75 65 3b 0a 20 20  u.i = iValue;.  
2b40: 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d    pRec->flags |=
2b50: 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 65 6c 73   MEM_Int;.  }els
2b60: 65 7b 0a 20 20 20 20 70 52 65 63 2d 3e 75 2e 72  e{.    pRec->u.r
2b70: 20 3d 20 72 56 61 6c 75 65 3b 0a 20 20 20 20 70   = rValue;.    p
2b80: 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45  Rec->flags |= ME
2b90: 4d 5f 52 65 61 6c 3b 0a 20 20 20 20 69 66 28 20  M_Real;.    if( 
2ba0: 62 54 72 79 46 6f 72 49 6e 74 20 29 20 73 71 6c  bTryForInt ) sql
2bb0: 69 74 65 33 56 64 62 65 49 6e 74 65 67 65 72 41  ite3VdbeIntegerA
2bc0: 66 66 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20  ffinity(pRec);. 
2bd0: 20 7d 0a 20 20 2f 2a 20 54 45 58 54 2d 3e 4e 55   }.  /* TEXT->NU
2be0: 4d 45 52 49 43 20 69 73 20 6d 61 6e 79 2d 3e 6f  MERIC is many->o
2bf0: 6e 65 2e 20 20 48 65 6e 63 65 2c 20 69 74 20 69  ne.  Hence, it i
2c00: 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 69  s important to i
2c10: 6e 76 61 6c 69 64 61 74 65 20 74 68 65 0a 20 20  nvalidate the.  
2c20: 2a 2a 20 73 74 72 69 6e 67 20 72 65 70 72 65 73  ** string repres
2c30: 65 6e 74 61 74 69 6f 6e 20 61 66 74 65 72 20 63  entation after c
2c40: 6f 6d 70 75 74 69 6e 67 20 61 20 6e 75 6d 65 72  omputing a numer
2c50: 69 63 20 65 71 75 69 76 61 6c 65 6e 74 2c 20 62  ic equivalent, b
2c60: 65 63 61 75 73 65 20 74 68 65 0a 20 20 2a 2a 20  ecause the.  ** 
2c70: 73 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74  string represent
2c80: 61 74 69 6f 6e 20 6d 69 67 68 74 20 6e 6f 74 20  ation might not 
2c90: 62 65 20 74 68 65 20 63 61 6e 6f 6e 69 63 61 6c  be the canonical
2ca0: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
2cb0: 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 6e 75 6d  for the.  ** num
2cc0: 65 72 69 63 20 76 61 6c 75 65 2e 20 20 54 69 63  eric value.  Tic
2cd0: 6b 65 74 20 5b 33 34 33 36 33 34 39 34 32 64 64  ket [343634942dd
2ce0: 35 34 61 62 35 37 62 37 30 32 34 5d 20 32 30 31  54ab57b7024] 201
2cf0: 38 2d 30 31 2d 33 31 2e 20 2a 2f 0a 20 20 70 52  8-01-31. */.  pR
2d00: 65 63 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45  ec->flags &= ~ME
2d10: 4d 5f 53 74 72 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  M_Str;.}../*.** 
2d20: 50 72 6f 63 65 73 73 69 6e 67 20 69 73 20 64 65  Processing is de
2d30: 74 65 72 6d 69 6e 65 20 62 79 20 74 68 65 20 61  termine by the a
2d40: 66 66 69 6e 69 74 79 20 70 61 72 61 6d 65 74 65  ffinity paramete
2d50: 72 3a 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f  r:.**.** SQLITE_
2d60: 41 46 46 5f 49 4e 54 45 47 45 52 3a 0a 2a 2a 20  AFF_INTEGER:.** 
2d70: 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 3a  SQLITE_AFF_REAL:
2d80: 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e  .** SQLITE_AFF_N
2d90: 55 4d 45 52 49 43 3a 0a 2a 2a 20 20 20 20 54 72  UMERIC:.**    Tr
2da0: 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 70 52 65  y to convert pRe
2db0: 63 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  c to an integer 
2dc0: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
2dd0: 72 20 61 20 0a 2a 2a 20 20 20 20 66 6c 6f 61 74  r a .**    float
2de0: 69 6e 67 2d 70 6f 69 6e 74 20 72 65 70 72 65 73  ing-point repres
2df0: 65 6e 74 61 74 69 6f 6e 20 69 66 20 61 6e 20 69  entation if an i
2e00: 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74  nteger represent
2e10: 61 74 69 6f 6e 0a 2a 2a 20 20 20 20 69 73 20 6e  ation.**    is n
2e20: 6f 74 20 70 6f 73 73 69 62 6c 65 2e 20 20 4e 6f  ot possible.  No
2e30: 74 65 20 74 68 61 74 20 74 68 65 20 69 6e 74 65  te that the inte
2e40: 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69  ger representati
2e50: 6f 6e 20 69 73 0a 2a 2a 20 20 20 20 61 6c 77 61  on is.**    alwa
2e60: 79 73 20 70 72 65 66 65 72 72 65 64 2c 20 65 76  ys preferred, ev
2e70: 65 6e 20 69 66 20 74 68 65 20 61 66 66 69 6e 69  en if the affini
2e80: 74 79 20 69 73 20 52 45 41 4c 2c 20 62 65 63 61  ty is REAL, beca
2e90: 75 73 65 0a 2a 2a 20 20 20 20 61 6e 20 69 6e 74  use.**    an int
2ea0: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
2eb0: 69 6f 6e 20 69 73 20 6d 6f 72 65 20 73 70 61 63  ion is more spac
2ec0: 65 20 65 66 66 69 63 69 65 6e 74 20 6f 6e 20 64  e efficient on d
2ed0: 69 73 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54  isk..**.** SQLIT
2ee0: 45 5f 41 46 46 5f 54 45 58 54 3a 0a 2a 2a 20 20  E_AFF_TEXT:.**  
2ef0: 20 20 43 6f 6e 76 65 72 74 20 70 52 65 63 20 74    Convert pRec t
2f00: 6f 20 61 20 74 65 78 74 20 72 65 70 72 65 73 65  o a text represe
2f10: 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53  ntation..**.** S
2f20: 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42 3a 0a  QLITE_AFF_BLOB:.
2f30: 2a 2a 20 20 20 20 4e 6f 2d 6f 70 2e 20 20 70 52  **    No-op.  pR
2f40: 65 63 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2e  ec is unchanged.
2f50: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
2f60: 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a 20  applyAffinity(. 
2f70: 20 4d 65 6d 20 2a 70 52 65 63 2c 20 20 20 20 20   Mem *pRec,     
2f80: 20 20 20 20 20 2f 2a 20 54 68 65 20 76 61 6c 75       /* The valu
2f90: 65 20 74 6f 20 61 70 70 6c 79 20 61 66 66 69 6e  e to apply affin
2fa0: 69 74 79 20 74 6f 20 2a 2f 0a 20 20 63 68 61 72  ity to */.  char
2fb0: 20 61 66 66 69 6e 69 74 79 2c 20 20 20 20 20 20   affinity,      
2fc0: 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20  /* The affinity 
2fd0: 74 6f 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f  to be applied */
2fe0: 0a 20 20 75 38 20 65 6e 63 20 20 20 20 20 20 20  .  u8 enc       
2ff0: 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68         /* Use th
3000: 69 73 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67  is text encoding
3010: 20 2a 2f 0a 29 7b 0a 20 20 69 66 28 20 61 66 66   */.){.  if( aff
3020: 69 6e 69 74 79 3e 3d 53 51 4c 49 54 45 5f 41 46  inity>=SQLITE_AF
3030: 46 5f 4e 55 4d 45 52 49 43 20 29 7b 0a 20 20 20  F_NUMERIC ){.   
3040: 20 61 73 73 65 72 74 28 20 61 66 66 69 6e 69 74   assert( affinit
3050: 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  y==SQLITE_AFF_IN
3060: 54 45 47 45 52 20 7c 7c 20 61 66 66 69 6e 69 74  TEGER || affinit
3070: 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52 45  y==SQLITE_AFF_RE
3080: 41 4c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  AL.             
3090: 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c  || affinity==SQL
30a0: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20  ITE_AFF_NUMERIC 
30b0: 29 3b 0a 20 20 20 20 69 66 28 20 28 70 52 65 63  );.    if( (pRec
30c0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
30d0: 74 29 3d 3d 30 20 29 7b 20 2f 2a 4f 50 54 49 4d  t)==0 ){ /*OPTIM
30e0: 49 5a 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45  IZATION-IF-FALSE
30f0: 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28 70 52  */.      if( (pR
3100: 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ec->flags & MEM_
3110: 52 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Real)==0 ){.    
3120: 20 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c      if( pRec->fl
3130: 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 29 20  ags & MEM_Str ) 
3140: 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69  applyNumericAffi
3150: 6e 69 74 79 28 70 52 65 63 2c 31 29 3b 0a 20 20  nity(pRec,1);.  
3160: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
3170: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e     sqlite3VdbeIn
3180: 74 65 67 65 72 41 66 66 69 6e 69 74 79 28 70 52  tegerAffinity(pR
3190: 65 63 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ec);.      }.   
31a0: 20 7d 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 61   }.  }else if( a
31b0: 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f  ffinity==SQLITE_
31c0: 41 46 46 5f 54 45 58 54 20 29 7b 0a 20 20 20 20  AFF_TEXT ){.    
31d0: 2f 2a 20 4f 6e 6c 79 20 61 74 74 65 6d 70 74 20  /* Only attempt 
31e0: 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 74  the conversion t
31f0: 6f 20 54 45 58 54 20 69 66 20 74 68 65 72 65 20  o TEXT if there 
3200: 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72  is an integer or
3210: 20 72 65 61 6c 0a 20 20 20 20 2a 2a 20 72 65 70   real.    ** rep
3220: 72 65 73 65 6e 74 61 74 69 6f 6e 20 28 62 6c 6f  resentation (blo
3230: 62 20 61 6e 64 20 4e 55 4c 4c 20 64 6f 20 6e 6f  b and NULL do no
3240: 74 20 67 65 74 20 63 6f 6e 76 65 72 74 65 64 29  t get converted)
3250: 20 62 75 74 20 6e 6f 20 73 74 72 69 6e 67 0a 20   but no string. 
3260: 20 20 20 2a 2a 20 72 65 70 72 65 73 65 6e 74 61     ** representa
3270: 74 69 6f 6e 2e 20 20 49 74 20 77 6f 75 6c 64 20  tion.  It would 
3280: 62 65 20 68 61 72 6d 6c 65 73 73 20 74 6f 20 72  be harmless to r
3290: 65 70 65 61 74 20 74 68 65 20 63 6f 6e 76 65 72  epeat the conver
32a0: 73 69 6f 6e 20 69 66 20 0a 20 20 20 20 2a 2a 20  sion if .    ** 
32b0: 74 68 65 72 65 20 69 73 20 61 6c 72 65 61 64 79  there is already
32c0: 20 61 20 73 74 72 69 6e 67 20 72 65 70 2c 20 62   a string rep, b
32d0: 75 74 20 69 74 20 69 73 20 70 6f 69 6e 74 6c 65  ut it is pointle
32e0: 73 73 20 74 6f 20 77 61 73 74 65 20 74 68 6f 73  ss to waste thos
32f0: 65 0a 20 20 20 20 2a 2a 20 43 50 55 20 63 79 63  e.    ** CPU cyc
3300: 6c 65 73 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20  les. */.    if( 
3310: 30 3d 3d 28 70 52 65 63 2d 3e 66 6c 61 67 73 26  0==(pRec->flags&
3320: 4d 45 4d 5f 53 74 72 29 20 29 7b 20 2f 2a 4f 50  MEM_Str) ){ /*OP
3330: 54 49 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d 46 41  TIMIZATION-IF-FA
3340: 4c 53 45 2a 2f 0a 20 20 20 20 20 20 69 66 28 20  LSE*/.      if( 
3350: 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 28 4d 45  (pRec->flags&(ME
3360: 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 29  M_Real|MEM_Int))
3370: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
3380: 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67  te3VdbeMemString
3390: 69 66 79 28 70 52 65 63 2c 20 65 6e 63 2c 20 31  ify(pRec, enc, 1
33a0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
33b0: 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73  .    pRec->flags
33c0: 20 26 3d 20 7e 28 4d 45 4d 5f 52 65 61 6c 7c 4d   &= ~(MEM_Real|M
33d0: 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 7d 0a 0a  EM_Int);.  }.}..
33e0: 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e  /*.** Try to con
33f0: 76 65 72 74 20 74 68 65 20 74 79 70 65 20 6f 66  vert the type of
3400: 20 61 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75   a function argu
3410: 6d 65 6e 74 20 6f 72 20 61 20 72 65 73 75 6c 74  ment or a result
3420: 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 69 6e 74 6f 20   column.** into 
3430: 61 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73  a numeric repres
3440: 65 6e 74 61 74 69 6f 6e 2e 20 20 55 73 65 20 65  entation.  Use e
3450: 69 74 68 65 72 20 49 4e 54 45 47 45 52 20 6f 72  ither INTEGER or
3460: 20 52 45 41 4c 20 77 68 69 63 68 65 76 65 72 0a   REAL whichever.
3470: 2a 2a 20 69 73 20 61 70 70 72 6f 70 72 69 61 74  ** is appropriat
3480: 65 2e 20 20 42 75 74 20 6f 6e 6c 79 20 64 6f 20  e.  But only do 
3490: 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69  the conversion i
34a0: 66 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65  f it is possible
34b0: 20 77 69 74 68 6f 75 74 0a 2a 2a 20 6c 6f 73 73   without.** loss
34c0: 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20   of information 
34d0: 61 6e 64 20 72 65 74 75 72 6e 20 74 68 65 20 72  and return the r
34e0: 65 76 69 73 65 64 20 74 79 70 65 20 6f 66 20 74  evised type of t
34f0: 68 65 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a  he argument..*/.
3500: 69 6e 74 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  int sqlite3_valu
3510: 65 5f 6e 75 6d 65 72 69 63 5f 74 79 70 65 28 73  e_numeric_type(s
3520: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56  qlite3_value *pV
3530: 61 6c 29 7b 0a 20 20 69 6e 74 20 65 54 79 70 65  al){.  int eType
3540: 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65   = sqlite3_value
3550: 5f 74 79 70 65 28 70 56 61 6c 29 3b 0a 20 20 69  _type(pVal);.  i
3560: 66 28 20 65 54 79 70 65 3d 3d 53 51 4c 49 54 45  f( eType==SQLITE
3570: 5f 54 45 58 54 20 29 7b 0a 20 20 20 20 4d 65 6d  _TEXT ){.    Mem
3580: 20 2a 70 4d 65 6d 20 3d 20 28 4d 65 6d 2a 29 70   *pMem = (Mem*)p
3590: 56 61 6c 3b 0a 20 20 20 20 61 70 70 6c 79 4e 75  Val;.    applyNu
35a0: 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 4d  mericAffinity(pM
35b0: 65 6d 2c 20 30 29 3b 0a 20 20 20 20 65 54 79 70  em, 0);.    eTyp
35c0: 65 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  e = sqlite3_valu
35d0: 65 5f 74 79 70 65 28 70 56 61 6c 29 3b 0a 20 20  e_type(pVal);.  
35e0: 7d 0a 20 20 72 65 74 75 72 6e 20 65 54 79 70 65  }.  return eType
35f0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 70 6f 72  ;.}../*.** Expor
3600: 74 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 61  ted version of a
3610: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 29 2e 20  pplyAffinity(). 
3620: 54 68 69 73 20 6f 6e 65 20 77 6f 72 6b 73 20 6f  This one works o
3630: 6e 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  n sqlite3_value*
3640: 2c 20 0a 2a 2a 20 6e 6f 74 20 74 68 65 20 69 6e  , .** not the in
3650: 74 65 72 6e 61 6c 20 4d 65 6d 2a 20 74 79 70 65  ternal Mem* type
3660: 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..*/.void sqlite
3670: 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e  3ValueApplyAffin
3680: 69 74 79 28 0a 20 20 73 71 6c 69 74 65 33 5f 76  ity(.  sqlite3_v
3690: 61 6c 75 65 20 2a 70 56 61 6c 2c 20 0a 20 20 75  alue *pVal, .  u
36a0: 38 20 61 66 66 69 6e 69 74 79 2c 20 0a 20 20 75  8 affinity, .  u
36b0: 38 20 65 6e 63 0a 29 7b 0a 20 20 61 70 70 6c 79  8 enc.){.  apply
36c0: 41 66 66 69 6e 69 74 79 28 28 4d 65 6d 20 2a 29  Affinity((Mem *)
36d0: 70 56 61 6c 2c 20 61 66 66 69 6e 69 74 79 2c 20  pVal, affinity, 
36e0: 65 6e 63 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 70  enc);.}../*.** p
36f0: 4d 65 6d 20 63 75 72 72 65 6e 74 6c 79 20 6f 6e  Mem currently on
3700: 6c 79 20 68 6f 6c 64 73 20 61 20 73 74 72 69 6e  ly holds a strin
3710: 67 20 74 79 70 65 20 28 6f 72 20 6d 61 79 62 65  g type (or maybe
3720: 20 61 20 42 4c 4f 42 20 74 68 61 74 20 77 65 20   a BLOB that we 
3730: 63 61 6e 0a 2a 2a 20 69 6e 74 65 72 70 72 65 74  can.** interpret
3740: 20 61 73 20 61 20 73 74 72 69 6e 67 20 69 66 20   as a string if 
3750: 77 65 20 77 61 6e 74 20 74 6f 29 2e 20 20 43 6f  we want to).  Co
3760: 6d 70 75 74 65 20 69 74 73 20 63 6f 72 72 65 73  mpute its corres
3770: 70 6f 6e 64 69 6e 67 0a 2a 2a 20 6e 75 6d 65 72  ponding.** numer
3780: 69 63 20 74 79 70 65 2c 20 69 66 20 68 61 73 20  ic type, if has 
3790: 6f 6e 65 2e 20 20 53 65 74 20 74 68 65 20 70 4d  one.  Set the pM
37a0: 65 6d 2d 3e 75 2e 72 20 61 6e 64 20 70 4d 65 6d  em->u.r and pMem
37b0: 2d 3e 75 2e 69 20 66 69 65 6c 64 73 0a 2a 2a 20  ->u.i fields.** 
37c0: 61 63 63 6f 72 64 69 6e 67 6c 79 2e 0a 2a 2f 0a  accordingly..*/.
37d0: 73 74 61 74 69 63 20 75 31 36 20 53 51 4c 49 54  static u16 SQLIT
37e0: 45 5f 4e 4f 49 4e 4c 49 4e 45 20 63 6f 6d 70 75  E_NOINLINE compu
37f0: 74 65 4e 75 6d 65 72 69 63 54 79 70 65 28 4d 65  teNumericType(Me
3800: 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 61 73 73 65  m *pMem){.  asse
3810: 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73  rt( (pMem->flags
3820: 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f   & (MEM_Int|MEM_
3830: 52 65 61 6c 29 29 3d 3d 30 20 29 3b 0a 20 20 61  Real))==0 );.  a
3840: 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c  ssert( (pMem->fl
3850: 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d  ags & (MEM_Str|M
3860: 45 4d 5f 42 6c 6f 62 29 29 21 3d 30 20 29 3b 0a  EM_Blob))!=0 );.
3870: 20 20 69 66 28 20 73 71 6c 69 74 65 33 41 74 6f    if( sqlite3Ato
3880: 46 28 70 4d 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d  F(pMem->z, &pMem
3890: 2d 3e 75 2e 72 2c 20 70 4d 65 6d 2d 3e 6e 2c 20  ->u.r, pMem->n, 
38a0: 70 4d 65 6d 2d 3e 65 6e 63 29 3d 3d 30 20 29 7b  pMem->enc)==0 ){
38b0: 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20  .    return 0;. 
38c0: 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33   }.  if( sqlite3
38d0: 41 74 6f 69 36 34 28 70 4d 65 6d 2d 3e 7a 2c 20  Atoi64(pMem->z, 
38e0: 26 70 4d 65 6d 2d 3e 75 2e 69 2c 20 70 4d 65 6d  &pMem->u.i, pMem
38f0: 2d 3e 6e 2c 20 70 4d 65 6d 2d 3e 65 6e 63 29 3d  ->n, pMem->enc)=
3900: 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  =0 ){.    return
3910: 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 0a 20 20   MEM_Int;.  }.  
3920: 72 65 74 75 72 6e 20 4d 45 4d 5f 52 65 61 6c 3b  return MEM_Real;
3930: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  .}../*.** Return
3940: 20 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70   the numeric typ
3950: 65 20 66 6f 72 20 70 4d 65 6d 2c 20 65 69 74 68  e for pMem, eith
3960: 65 72 20 4d 45 4d 5f 49 6e 74 20 6f 72 20 4d 45  er MEM_Int or ME
3970: 4d 5f 52 65 61 6c 20 6f 72 20 62 6f 74 68 20 6f  M_Real or both o
3980: 72 0a 2a 2a 20 6e 6f 6e 65 2e 20 20 0a 2a 2a 0a  r.** none.  .**.
3990: 2a 2a 20 55 6e 6c 69 6b 65 20 61 70 70 6c 79 4e  ** Unlike applyN
39a0: 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 29  umericAffinity()
39b0: 2c 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 64  , this routine d
39c0: 6f 65 73 20 6e 6f 74 20 6d 6f 64 69 66 79 20 70  oes not modify p
39d0: 4d 65 6d 2d 3e 66 6c 61 67 73 2e 0a 2a 2a 20 42  Mem->flags..** B
39e0: 75 74 20 69 74 20 64 6f 65 73 20 73 65 74 20 70  ut it does set p
39f0: 4d 65 6d 2d 3e 75 2e 72 20 61 6e 64 20 70 4d 65  Mem->u.r and pMe
3a00: 6d 2d 3e 75 2e 69 20 61 70 70 72 6f 70 72 69 61  m->u.i appropria
3a10: 74 65 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  tely..*/.static 
3a20: 75 31 36 20 6e 75 6d 65 72 69 63 54 79 70 65 28  u16 numericType(
3a30: 4d 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 66  Mem *pMem){.  if
3a40: 28 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20  ( pMem->flags & 
3a50: 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61  (MEM_Int|MEM_Rea
3a60: 6c 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  l) ){.    return
3a70: 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28   pMem->flags & (
3a80: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c  MEM_Int|MEM_Real
3a90: 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4d 65  );.  }.  if( pMe
3aa0: 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  m->flags & (MEM_
3ab0: 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 20 29 7b  Str|MEM_Blob) ){
3ac0: 0a 20 20 20 20 72 65 74 75 72 6e 20 63 6f 6d 70  .    return comp
3ad0: 75 74 65 4e 75 6d 65 72 69 63 54 79 70 65 28 70  uteNumericType(p
3ae0: 4d 65 6d 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75  Mem);.  }.  retu
3af0: 72 6e 20 30 3b 0a 7d 0a 0a 23 69 66 64 65 66 20  rn 0;.}..#ifdef 
3b00: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a  SQLITE_DEBUG./*.
3b10: 2a 2a 20 57 72 69 74 65 20 61 20 6e 69 63 65 20  ** Write a nice 
3b20: 73 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74  string represent
3b30: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e  ation of the con
3b40: 74 65 6e 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d  tents of cell pM
3b50: 65 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65  em.** into buffe
3b60: 72 20 7a 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e  r zBuf, length n
3b70: 42 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c  Buf..*/.void sql
3b80: 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74  ite3VdbeMemPrett
3b90: 79 50 72 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d  yPrint(Mem *pMem
3ba0: 2c 20 63 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20  , char *zBuf){. 
3bb0: 20 63 68 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42   char *zCsr = zB
3bc0: 75 66 3b 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d  uf;.  int f = pM
3bd0: 65 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74  em->flags;..  st
3be0: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
3bf0: 2a 63 6f 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b  *const encnames[
3c00: 5d 20 3d 20 7b 22 28 58 29 22 2c 20 22 28 38 29  ] = {"(X)", "(8)
3c10: 22 2c 20 22 28 31 36 4c 45 29 22 2c 20 22 28 31  ", "(16LE)", "(1
3c20: 36 42 45 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66  6BE)"};..  if( f
3c30: 26 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20  &MEM_Blob ){.   
3c40: 20 69 6e 74 20 69 3b 0a 20 20 20 20 63 68 61 72   int i;.    char
3c50: 20 63 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20   c;.    if( f & 
3c60: 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20  MEM_Dyn ){.     
3c70: 20 63 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20   c = 'z';.      
3c80: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
3c90: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68  M_Static|MEM_Eph
3ca0: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
3cb0: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
3cc0: 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20  _Static ){.     
3cd0: 20 63 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20   c = 't';.      
3ce0: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
3cf0: 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29  M_Dyn|MEM_Ephem)
3d00: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
3d10: 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70  e if( f & MEM_Ep
3d20: 68 65 6d 20 29 7b 0a 20 20 20 20 20 20 63 20 3d  hem ){.      c =
3d30: 20 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65   'e';.      asse
3d40: 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74  rt( (f & (MEM_St
3d50: 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d  atic|MEM_Dyn))==
3d60: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  0 );.    }else{.
3d70: 20 20 20 20 20 20 63 20 3d 20 27 73 27 3b 0a 20        c = 's';. 
3d80: 20 20 20 7d 0a 20 20 20 20 2a 28 7a 43 73 72 2b     }.    *(zCsr+
3d90: 2b 29 20 3d 20 63 3b 0a 20 20 20 20 73 71 6c 69  +) = c;.    sqli
3da0: 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30  te3_snprintf(100
3db0: 2c 20 7a 43 73 72 2c 20 22 25 64 5b 22 2c 20 70  , zCsr, "%d[", p
3dc0: 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 7a 43 73  Mem->n);.    zCs
3dd0: 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c  r += sqlite3Strl
3de0: 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20  en30(zCsr);.    
3df0: 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26  for(i=0; i<16 &&
3e00: 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29   i<pMem->n; i++)
3e10: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
3e20: 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43  snprintf(100, zC
3e30: 73 72 2c 20 22 25 30 32 58 22 2c 20 28 28 69 6e  sr, "%02X", ((in
3e40: 74 29 70 4d 65 6d 2d 3e 7a 5b 69 5d 20 26 20 30  t)pMem->z[i] & 0
3e50: 78 46 46 29 29 3b 0a 20 20 20 20 20 20 7a 43 73  xFF));.      zCs
3e60: 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c  r += sqlite3Strl
3e70: 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20  en30(zCsr);.    
3e80: 7d 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  }.    for(i=0; i
3e90: 3c 31 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e  <16 && i<pMem->n
3ea0: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 63 68  ; i++){.      ch
3eb0: 61 72 20 7a 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 69  ar z = pMem->z[i
3ec0: 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 3c 33  ];.      if( z<3
3ed0: 32 20 7c 7c 20 7a 3e 31 32 36 20 29 20 2a 7a 43  2 || z>126 ) *zC
3ee0: 73 72 2b 2b 20 3d 20 27 2e 27 3b 0a 20 20 20 20  sr++ = '.';.    
3ef0: 20 20 65 6c 73 65 20 2a 7a 43 73 72 2b 2b 20 3d    else *zCsr++ =
3f00: 20 7a 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2a 28   z;.    }.    *(
3f10: 7a 43 73 72 2b 2b 29 20 3d 20 27 5d 27 3b 0a 20  zCsr++) = ']';. 
3f20: 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 5a     if( f & MEM_Z
3f30: 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ero ){.      sql
3f40: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30  ite3_snprintf(10
3f50: 30 2c 20 7a 43 73 72 2c 22 2b 25 64 7a 22 2c 70  0, zCsr,"+%dz",p
3f60: 4d 65 6d 2d 3e 75 2e 6e 5a 65 72 6f 29 3b 0a 20  Mem->u.nZero);. 
3f70: 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c       zCsr += sql
3f80: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73  ite3Strlen30(zCs
3f90: 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2a 7a  r);.    }.    *z
3fa0: 43 73 72 20 3d 20 27 5c 30 27 3b 0a 20 20 7d 65  Csr = '\0';.  }e
3fb0: 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f  lse if( f & MEM_
3fc0: 53 74 72 20 29 7b 0a 20 20 20 20 69 6e 74 20 6a  Str ){.    int j
3fd0: 2c 20 6b 3b 0a 20 20 20 20 7a 42 75 66 5b 30 5d  , k;.    zBuf[0]
3fe0: 20 3d 20 27 20 27 3b 0a 20 20 20 20 69 66 28 20   = ' ';.    if( 
3ff0: 66 20 26 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20  f & MEM_Dyn ){. 
4000: 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27       zBuf[1] = '
4010: 7a 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  z';.      assert
4020: 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74  ( (f & (MEM_Stat
4030: 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d  ic|MEM_Ephem))==
4040: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  0 );.    }else i
4050: 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 61 74 69  f( f & MEM_Stati
4060: 63 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b  c ){.      zBuf[
4070: 31 5d 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20  1] = 't';.      
4080: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
4090: 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29  M_Dyn|MEM_Ephem)
40a0: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
40b0: 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70  e if( f & MEM_Ep
40c0: 68 65 6d 20 29 7b 0a 20 20 20 20 20 20 7a 42 75  hem ){.      zBu
40d0: 66 5b 31 5d 20 3d 20 27 65 27 3b 0a 20 20 20 20  f[1] = 'e';.    
40e0: 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28    assert( (f & (
40f0: 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 44  MEM_Static|MEM_D
4100: 79 6e 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  yn))==0 );.    }
4110: 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a 42 75 66  else{.      zBuf
4120: 5b 31 5d 20 3d 20 27 73 27 3b 0a 20 20 20 20 7d  [1] = 's';.    }
4130: 0a 20 20 20 20 6b 20 3d 20 32 3b 0a 20 20 20 20  .    k = 2;.    
4140: 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
4150: 28 31 30 30 2c 20 26 7a 42 75 66 5b 6b 5d 2c 20  (100, &zBuf[k], 
4160: 22 25 64 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b 0a  "%d", pMem->n);.
4170: 20 20 20 20 6b 20 2b 3d 20 73 71 6c 69 74 65 33      k += sqlite3
4180: 53 74 72 6c 65 6e 33 30 28 26 7a 42 75 66 5b 6b  Strlen30(&zBuf[k
4190: 5d 29 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b  ]);.    zBuf[k++
41a0: 5d 20 3d 20 27 5b 27 3b 0a 20 20 20 20 66 6f 72  ] = '[';.    for
41b0: 28 6a 3d 30 3b 20 6a 3c 31 35 20 26 26 20 6a 3c  (j=0; j<15 && j<
41c0: 70 4d 65 6d 2d 3e 6e 3b 20 6a 2b 2b 29 7b 0a 20  pMem->n; j++){. 
41d0: 20 20 20 20 20 75 38 20 63 20 3d 20 70 4d 65 6d       u8 c = pMem
41e0: 2d 3e 7a 5b 6a 5d 3b 0a 20 20 20 20 20 20 69 66  ->z[j];.      if
41f0: 28 20 63 3e 3d 30 78 32 30 20 26 26 20 63 3c 30  ( c>=0x20 && c<0
4200: 78 37 66 20 29 7b 0a 20 20 20 20 20 20 20 20 7a  x7f ){.        z
4210: 42 75 66 5b 6b 2b 2b 5d 20 3d 20 63 3b 0a 20 20  Buf[k++] = c;.  
4220: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
4230: 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27     zBuf[k++] = '
4240: 2e 27 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  .';.      }.    
4250: 7d 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20  }.    zBuf[k++] 
4260: 3d 20 27 5d 27 3b 0a 20 20 20 20 73 71 6c 69 74  = ']';.    sqlit
4270: 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c  e3_snprintf(100,
4280: 26 7a 42 75 66 5b 6b 5d 2c 20 65 6e 63 6e 61 6d  &zBuf[k], encnam
4290: 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b 0a  es[pMem->enc]);.
42a0: 20 20 20 20 6b 20 2b 3d 20 73 71 6c 69 74 65 33      k += sqlite3
42b0: 53 74 72 6c 65 6e 33 30 28 26 7a 42 75 66 5b 6b  Strlen30(&zBuf[k
42c0: 5d 29 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b  ]);.    zBuf[k++
42d0: 5d 20 3d 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65 6e  ] = 0;.  }.}.#en
42e0: 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
42f0: 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 50  TE_DEBUG./*.** P
4300: 72 69 6e 74 20 74 68 65 20 76 61 6c 75 65 20 6f  rint the value o
4310: 66 20 61 20 72 65 67 69 73 74 65 72 20 66 6f 72  f a register for
4320: 20 74 72 61 63 69 6e 67 20 70 75 72 70 6f 73 65   tracing purpose
4330: 73 3a 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  s:.*/.static voi
4340: 64 20 6d 65 6d 54 72 61 63 65 50 72 69 6e 74 28  d memTracePrint(
4350: 4d 65 6d 20 2a 70 29 7b 0a 20 20 69 66 28 20 70  Mem *p){.  if( p
4360: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 55 6e  ->flags & MEM_Un
4370: 64 65 66 69 6e 65 64 20 29 7b 0a 20 20 20 20 70  defined ){.    p
4380: 72 69 6e 74 66 28 22 20 75 6e 64 65 66 69 6e 65  rintf(" undefine
4390: 64 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  d");.  }else if(
43a0: 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f   p->flags & MEM_
43b0: 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 70 72 69 6e  Null ){.    prin
43c0: 74 66 28 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45  tf(p->flags & ME
43d0: 4d 5f 5a 65 72 6f 20 3f 20 22 20 4e 55 4c 4c 2d  M_Zero ? " NULL-
43e0: 6e 6f 63 68 6e 67 22 20 3a 20 22 20 4e 55 4c 4c  nochng" : " NULL
43f0: 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  ");.  }else if( 
4400: 28 70 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  (p->flags & (MEM
4410: 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d  _Int|MEM_Str))==
4420: 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72  (MEM_Int|MEM_Str
4430: 29 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28  ) ){.    printf(
4440: 22 20 73 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75  " si:%lld", p->u
4450: 2e 69 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  .i);.  }else if(
4460: 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f   p->flags & MEM_
4470: 49 6e 74 20 29 7b 0a 20 20 20 20 70 72 69 6e 74  Int ){.    print
4480: 66 28 22 20 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e  f(" i:%lld", p->
4490: 75 2e 69 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  u.i);.#ifndef SQ
44a0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
44b0: 4e 47 5f 50 4f 49 4e 54 0a 20 20 7d 65 6c 73 65  NG_POINT.  }else
44c0: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
44d0: 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20  MEM_Real ){.    
44e0: 70 72 69 6e 74 66 28 22 20 72 3a 25 67 22 2c 20  printf(" r:%g", 
44f0: 70 2d 3e 75 2e 72 29 3b 0a 23 65 6e 64 69 66 0a  p->u.r);.#endif.
4500: 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66    }else if( p->f
4510: 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65  lags & MEM_RowSe
4520: 74 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28  t ){.    printf(
4530: 22 20 28 72 6f 77 73 65 74 29 22 29 3b 0a 20 20  " (rowset)");.  
4540: 7d 65 6c 73 65 7b 0a 20 20 20 20 63 68 61 72 20  }else{.    char 
4550: 7a 42 75 66 5b 32 30 30 5d 3b 0a 20 20 20 20 73  zBuf[200];.    s
4560: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65  qlite3VdbeMemPre
4570: 74 74 79 50 72 69 6e 74 28 70 2c 20 7a 42 75 66  ttyPrint(p, zBuf
4580: 29 3b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20  );.    printf(" 
4590: 25 73 22 2c 20 7a 42 75 66 29 3b 0a 20 20 7d 0a  %s", zBuf);.  }.
45a0: 20 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26    if( p->flags &
45b0: 20 4d 45 4d 5f 53 75 62 74 79 70 65 20 29 20 70   MEM_Subtype ) p
45c0: 72 69 6e 74 66 28 22 20 73 75 62 74 79 70 65 3d  rintf(" subtype=
45d0: 30 78 25 30 32 78 22 2c 20 70 2d 3e 65 53 75 62  0x%02x", p->eSub
45e0: 74 79 70 65 29 3b 0a 7d 0a 73 74 61 74 69 63 20  type);.}.static 
45f0: 76 6f 69 64 20 72 65 67 69 73 74 65 72 54 72 61  void registerTra
4600: 63 65 28 69 6e 74 20 69 52 65 67 2c 20 4d 65 6d  ce(int iReg, Mem
4610: 20 2a 70 29 7b 0a 20 20 70 72 69 6e 74 66 28 22   *p){.  printf("
4620: 52 45 47 5b 25 64 5d 20 3d 20 22 2c 20 69 52 65  REG[%d] = ", iRe
4630: 67 29 3b 0a 20 20 6d 65 6d 54 72 61 63 65 50 72  g);.  memTracePr
4640: 69 6e 74 28 70 29 3b 0a 20 20 70 72 69 6e 74 66  int(p);.  printf
4650: 28 22 5c 6e 22 29 3b 0a 20 20 73 71 6c 69 74 65  ("\n");.  sqlite
4660: 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76  3VdbeCheckMemInv
4670: 61 72 69 61 6e 74 73 28 70 29 3b 0a 7d 0a 23 65  ariants(p);.}.#e
4680: 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
4690: 49 54 45 5f 44 45 42 55 47 0a 23 20 20 64 65 66  ITE_DEBUG.#  def
46a0: 69 6e 65 20 52 45 47 49 53 54 45 52 5f 54 52 41  ine REGISTER_TRA
46b0: 43 45 28 52 2c 4d 29 20 69 66 28 64 62 2d 3e 66  CE(R,M) if(db->f
46c0: 6c 61 67 73 26 53 51 4c 49 54 45 5f 56 64 62 65  lags&SQLITE_Vdbe
46d0: 54 72 61 63 65 29 72 65 67 69 73 74 65 72 54 72  Trace)registerTr
46e0: 61 63 65 28 52 2c 4d 29 0a 23 65 6c 73 65 0a 23  ace(R,M).#else.#
46f0: 20 20 64 65 66 69 6e 65 20 52 45 47 49 53 54 45    define REGISTE
4700: 52 5f 54 52 41 43 45 28 52 2c 4d 29 0a 23 65 6e  R_TRACE(R,M).#en
4710: 64 69 66 0a 0a 0a 23 69 66 64 65 66 20 56 44 42  dif...#ifdef VDB
4720: 45 5f 50 52 4f 46 49 4c 45 0a 0a 2f 2a 20 0a 2a  E_PROFILE../* .*
4730: 2a 20 68 77 74 69 6d 65 2e 68 20 63 6f 6e 74 61  * hwtime.h conta
4740: 69 6e 73 20 69 6e 6c 69 6e 65 20 61 73 73 65 6d  ins inline assem
4750: 62 6c 65 72 20 63 6f 64 65 20 66 6f 72 20 69 6d  bler code for im
4760: 70 6c 65 6d 65 6e 74 69 6e 67 20 0a 2a 2a 20 68  plementing .** h
4770: 69 67 68 2d 70 65 72 66 6f 72 6d 61 6e 63 65 20  igh-performance 
4780: 74 69 6d 69 6e 67 20 72 6f 75 74 69 6e 65 73 2e  timing routines.
4790: 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 68 77  .*/.#include "hw
47a0: 74 69 6d 65 2e 68 22 0a 0a 23 65 6e 64 69 66 0a  time.h"..#endif.
47b0: 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a  .#ifndef NDEBUG.
47c0: 2f 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74  /*.** This funct
47d0: 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 63 61 6c 6c  ion is only call
47e0: 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61  ed from within a
47f0: 6e 20 61 73 73 65 72 74 28 29 20 65 78 70 72 65  n assert() expre
4800: 73 73 69 6f 6e 2e 20 49 74 0a 2a 2a 20 63 68 65  ssion. It.** che
4810: 63 6b 73 20 74 68 61 74 20 74 68 65 20 73 71 6c  cks that the sql
4820: 69 74 65 33 2e 6e 54 72 61 6e 73 61 63 74 69 6f  ite3.nTransactio
4830: 6e 20 76 61 72 69 61 62 6c 65 20 69 73 20 63 6f  n variable is co
4840: 72 72 65 63 74 6c 79 20 73 65 74 20 74 6f 0a 2a  rrectly set to.*
4850: 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  * the number of 
4860: 6e 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20  non-transaction 
4870: 73 61 76 65 70 6f 69 6e 74 73 20 63 75 72 72 65  savepoints curre
4880: 6e 74 6c 79 20 69 6e 20 74 68 65 20 0a 2a 2a 20  ntly in the .** 
4890: 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72  linked list star
48a0: 74 69 6e 67 20 61 74 20 73 71 6c 69 74 65 33 2e  ting at sqlite3.
48b0: 70 53 61 76 65 70 6f 69 6e 74 2e 0a 2a 2a 20 0a  pSavepoint..** .
48c0: 2a 2a 20 55 73 61 67 65 3a 0a 2a 2a 0a 2a 2a 20  ** Usage:.**.** 
48d0: 20 20 20 20 61 73 73 65 72 74 28 20 63 68 65 63      assert( chec
48e0: 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28  kSavepointCount(
48f0: 64 62 29 20 29 3b 0a 2a 2f 0a 73 74 61 74 69 63  db) );.*/.static
4900: 20 69 6e 74 20 63 68 65 63 6b 53 61 76 65 70 6f   int checkSavepo
4910: 69 6e 74 43 6f 75 6e 74 28 73 71 6c 69 74 65 33  intCount(sqlite3
4920: 20 2a 64 62 29 7b 0a 20 20 69 6e 74 20 6e 20 3d   *db){.  int n =
4930: 20 30 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20   0;.  Savepoint 
4940: 2a 70 3b 0a 20 20 66 6f 72 28 70 3d 64 62 2d 3e  *p;.  for(p=db->
4950: 70 53 61 76 65 70 6f 69 6e 74 3b 20 70 3b 20 70  pSavepoint; p; p
4960: 3d 70 2d 3e 70 4e 65 78 74 29 20 6e 2b 2b 3b 0a  =p->pNext) n++;.
4970: 20 20 61 73 73 65 72 74 28 20 6e 3d 3d 28 64 62    assert( n==(db
4980: 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64  ->nSavepoint + d
4990: 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  b->isTransaction
49a0: 53 61 76 65 70 6f 69 6e 74 29 20 29 3b 0a 20 20  Savepoint) );.  
49b0: 72 65 74 75 72 6e 20 31 3b 0a 7d 0a 23 65 6e 64  return 1;.}.#end
49c0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  if../*.** Return
49d0: 20 74 68 65 20 72 65 67 69 73 74 65 72 20 6f 66   the register of
49e0: 20 70 4f 70 2d 3e 70 32 20 61 66 74 65 72 20 66   pOp->p2 after f
49f0: 69 72 73 74 20 70 72 65 70 61 72 69 6e 67 20 69  irst preparing i
4a00: 74 20 74 6f 20 62 65 0a 2a 2a 20 6f 76 65 72 77  t to be.** overw
4a10: 72 69 74 74 65 6e 20 77 69 74 68 20 61 6e 20 69  ritten with an i
4a20: 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2f  nteger value..*/
4a30: 0a 73 74 61 74 69 63 20 53 51 4c 49 54 45 5f 4e  .static SQLITE_N
4a40: 4f 49 4e 4c 49 4e 45 20 4d 65 6d 20 2a 6f 75 74  OINLINE Mem *out
4a50: 32 50 72 65 72 65 6c 65 61 73 65 57 69 74 68 43  2PrereleaseWithC
4a60: 6c 65 61 72 28 4d 65 6d 20 2a 70 4f 75 74 29 7b  lear(Mem *pOut){
4a70: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
4a80: 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
4a90: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
4aa0: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 72 65 74 75 72  MEM_Int;.  retur
4ab0: 6e 20 70 4f 75 74 3b 0a 7d 0a 73 74 61 74 69 63  n pOut;.}.static
4ac0: 20 4d 65 6d 20 2a 6f 75 74 32 50 72 65 72 65 6c   Mem *out2Prerel
4ad0: 65 61 73 65 28 56 64 62 65 20 2a 70 2c 20 56 64  ease(Vdbe *p, Vd
4ae0: 62 65 4f 70 20 2a 70 4f 70 29 7b 0a 20 20 4d 65  beOp *pOp){.  Me
4af0: 6d 20 2a 70 4f 75 74 3b 0a 20 20 61 73 73 65 72  m *pOut;.  asser
4b00: 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a  t( pOp->p2>0 );.
4b10: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
4b20: 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  2<=(p->nMem+1 - 
4b30: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
4b40: 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d   pOut = &p->aMem
4b50: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 6d 65 6d  [pOp->p2];.  mem
4b60: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
4b70: 20 70 4f 75 74 29 3b 0a 20 20 69 66 28 20 56 64   pOut);.  if( Vd
4b80: 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75  beMemDynamic(pOu
4b90: 74 29 20 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41  t) ){ /*OPTIMIZA
4ba0: 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a  TION-IF-FALSE*/.
4bb0: 20 20 20 20 72 65 74 75 72 6e 20 6f 75 74 32 50      return out2P
4bc0: 72 65 72 65 6c 65 61 73 65 57 69 74 68 43 6c 65  rereleaseWithCle
4bd0: 61 72 28 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73  ar(pOut);.  }els
4be0: 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  e{.    pOut->fla
4bf0: 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
4c00: 20 20 72 65 74 75 72 6e 20 70 4f 75 74 3b 0a 20    return pOut;. 
4c10: 20 7d 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 45 78 65   }.}.../*.** Exe
4c20: 63 75 74 65 20 61 73 20 6d 75 63 68 20 6f 66 20  cute as much of 
4c30: 61 20 56 44 42 45 20 70 72 6f 67 72 61 6d 20 61  a VDBE program a
4c40: 73 20 77 65 20 63 61 6e 2e 0a 2a 2a 20 54 68 69  s we can..** Thi
4c50: 73 20 69 73 20 74 68 65 20 63 6f 72 65 20 6f 66  s is the core of
4c60: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 2e   sqlite3_step().
4c70: 20 20 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65    .*/.int sqlite
4c80: 33 56 64 62 65 45 78 65 63 28 0a 20 20 56 64 62  3VdbeExec(.  Vdb
4c90: 65 20 2a 70 20 20 20 20 20 20 20 20 20 20 20 20  e *p            
4ca0: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56          /* The V
4cb0: 44 42 45 20 2a 2f 0a 29 7b 0a 20 20 4f 70 20 2a  DBE */.){.  Op *
4cc0: 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 20 20 20  aOp = p->aOp;   
4cd0: 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f         /* Copy o
4ce0: 66 20 70 2d 3e 61 4f 70 20 2a 2f 0a 20 20 4f 70  f p->aOp */.  Op
4cf0: 20 2a 70 4f 70 20 3d 20 61 4f 70 3b 20 20 20 20   *pOp = aOp;    
4d00: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72           /* Curr
4d10: 65 6e 74 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f  ent operation */
4d20: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
4d30: 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65  ITE_DEBUG) || de
4d40: 66 69 6e 65 64 28 56 44 42 45 5f 50 52 4f 46 49  fined(VDBE_PROFI
4d50: 4c 45 29 0a 20 20 4f 70 20 2a 70 4f 72 69 67 4f  LE).  Op *pOrigO
4d60: 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
4d70: 20 2f 2a 20 56 61 6c 75 65 20 6f 66 20 70 4f 70   /* Value of pOp
4d80: 20 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74   at the top of t
4d90: 68 65 20 6c 6f 6f 70 20 2a 2f 0a 23 65 6e 64 69  he loop */.#endi
4da0: 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
4db0: 44 45 42 55 47 0a 20 20 69 6e 74 20 6e 45 78 74  DEBUG.  int nExt
4dc0: 72 61 44 65 6c 65 74 65 20 3d 20 30 3b 20 20 20  raDelete = 0;   
4dd0: 20 20 20 2f 2a 20 56 65 72 69 66 69 65 73 20 46     /* Verifies F
4de0: 4f 52 44 45 4c 45 54 45 20 61 6e 64 20 41 55 58  ORDELETE and AUX
4df0: 44 45 4c 45 54 45 20 66 6c 61 67 73 20 2a 2f 0a  DELETE flags */.
4e00: 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 72 63 20  #endif.  int rc 
4e10: 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 20 20 20 20  = SQLITE_OK;    
4e20: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20      /* Value to 
4e30: 72 65 74 75 72 6e 20 2a 2f 0a 20 20 73 71 6c 69  return */.  sqli
4e40: 74 65 33 20 2a 64 62 20 3d 20 70 2d 3e 64 62 3b  te3 *db = p->db;
4e50: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61         /* The da
4e60: 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 38 20 72  tabase */.  u8 r
4e70: 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c  esetSchemaOnFaul
4e80: 74 20 3d 20 30 3b 20 2f 2a 20 52 65 73 65 74 20  t = 0; /* Reset 
4e90: 73 63 68 65 6d 61 20 61 66 74 65 72 20 61 6e 20  schema after an 
4ea0: 65 72 72 6f 72 20 69 66 20 70 6f 73 69 74 69 76  error if positiv
4eb0: 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 6f 64 69  e */.  u8 encodi
4ec0: 6e 67 20 3d 20 45 4e 43 28 64 62 29 3b 20 20 20  ng = ENC(db);   
4ed0: 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73    /* The databas
4ee0: 65 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20  e encoding */.  
4ef0: 69 6e 74 20 69 43 6f 6d 70 61 72 65 20 3d 20 30  int iCompare = 0
4f00: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65  ;          /* Re
4f10: 73 75 6c 74 20 6f 66 20 6c 61 73 74 20 63 6f 6d  sult of last com
4f20: 70 61 72 69 73 6f 6e 20 2a 2f 0a 20 20 75 6e 73  parison */.  uns
4f30: 69 67 6e 65 64 20 6e 56 6d 53 74 65 70 20 3d 20  igned nVmStep = 
4f40: 30 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  0;      /* Numbe
4f50: 72 20 6f 66 20 76 69 72 74 75 61 6c 20 6d 61 63  r of virtual mac
4f60: 68 69 6e 65 20 73 74 65 70 73 20 2a 2f 0a 23 69  hine steps */.#i
4f70: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
4f80: 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42  T_PROGRESS_CALLB
4f90: 41 43 4b 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e  ACK.  unsigned n
4fa0: 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 3b 20 20  ProgressLimit;  
4fb0: 20 2f 2a 20 49 6e 76 6f 6b 65 20 78 50 72 6f 67   /* Invoke xProg
4fc0: 72 65 73 73 28 29 20 77 68 65 6e 20 6e 56 6d 53  ress() when nVmS
4fd0: 74 65 70 20 72 65 61 63 68 65 73 20 74 68 69 73  tep reaches this
4fe0: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 4d 65 6d   */.#endif.  Mem
4ff0: 20 2a 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d   *aMem = p->aMem
5000: 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20  ;       /* Copy 
5010: 6f 66 20 70 2d 3e 61 4d 65 6d 20 2a 2f 0a 20 20  of p->aMem */.  
5020: 4d 65 6d 20 2a 70 49 6e 31 20 3d 20 30 3b 20 20  Mem *pIn1 = 0;  
5030: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73             /* 1s
5040: 74 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20  t input operand 
5050: 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 32 20 3d  */.  Mem *pIn2 =
5060: 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   0;             
5070: 2f 2a 20 32 6e 64 20 69 6e 70 75 74 20 6f 70 65  /* 2nd input ope
5080: 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  rand */.  Mem *p
5090: 49 6e 33 20 3d 20 30 3b 20 20 20 20 20 20 20 20  In3 = 0;        
50a0: 20 20 20 20 20 2f 2a 20 33 72 64 20 69 6e 70 75       /* 3rd inpu
50b0: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d  t operand */.  M
50c0: 65 6d 20 2a 70 4f 75 74 20 3d 20 30 3b 20 20 20  em *pOut = 0;   
50d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 75 74            /* Out
50e0: 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 23  put operand */.#
50f0: 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49  ifdef VDBE_PROFI
5100: 4c 45 0a 20 20 75 36 34 20 73 74 61 72 74 3b 20  LE.  u64 start; 
5110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5120: 2f 2a 20 43 50 55 20 63 6c 6f 63 6b 20 63 6f 75  /* CPU clock cou
5130: 6e 74 20 61 74 20 73 74 61 72 74 20 6f 66 20 6f  nt at start of o
5140: 70 63 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a  pcode */.#endif.
5150: 20 20 2f 2a 2a 2a 20 49 4e 53 45 52 54 20 53 54    /*** INSERT ST
5160: 41 43 4b 20 55 4e 49 4f 4e 20 48 45 52 45 20 2a  ACK UNION HERE *
5170: 2a 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70  **/..  assert( p
5180: 2d 3e 6d 61 67 69 63 3d 3d 56 44 42 45 5f 4d 41  ->magic==VDBE_MA
5190: 47 49 43 5f 52 55 4e 20 29 3b 20 20 2f 2a 20 73  GIC_RUN );  /* s
51a0: 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 76 65  qlite3_step() ve
51b0: 72 69 66 69 65 73 20 74 68 69 73 20 2a 2f 0a 20  rifies this */. 
51c0: 20 73 71 6c 69 74 65 33 56 64 62 65 45 6e 74 65   sqlite3VdbeEnte
51d0: 72 28 70 29 3b 0a 20 20 69 66 28 20 70 2d 3e 72  r(p);.  if( p->r
51e0: 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20  c==SQLITE_NOMEM 
51f0: 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 68  ){.    /* This h
5200: 61 70 70 65 6e 73 20 69 66 20 61 20 6d 61 6c 6c  appens if a mall
5210: 6f 63 28 29 20 69 6e 73 69 64 65 20 61 20 63 61  oc() inside a ca
5220: 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 6f  ll to sqlite3_co
5230: 6c 75 6d 6e 5f 74 65 78 74 28 29 20 6f 72 0a 20  lumn_text() or. 
5240: 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f     ** sqlite3_co
5250: 6c 75 6d 6e 5f 74 65 78 74 31 36 28 29 20 66 61  lumn_text16() fa
5260: 69 6c 65 64 2e 20 20 2a 2f 0a 20 20 20 20 67 6f  iled.  */.    go
5270: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20  to no_mem;.  }. 
5280: 20 61 73 73 65 72 74 28 20 70 2d 3e 72 63 3d 3d   assert( p->rc==
5290: 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 2d  SQLITE_OK || (p-
52a0: 3e 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54  >rc&0xff)==SQLIT
52b0: 45 5f 42 55 53 59 20 29 3b 0a 20 20 61 73 73 65  E_BUSY );.  asse
52c0: 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
52d0: 20 7c 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 21   || p->readOnly!
52e0: 3d 30 20 29 3b 0a 20 20 70 2d 3e 69 43 75 72 72  =0 );.  p->iCurr
52f0: 65 6e 74 54 69 6d 65 20 3d 20 30 3b 0a 20 20 61  entTime = 0;.  a
5300: 73 73 65 72 74 28 20 70 2d 3e 65 78 70 6c 61 69  ssert( p->explai
5310: 6e 3d 3d 30 20 29 3b 0a 20 20 70 2d 3e 70 52 65  n==0 );.  p->pRe
5320: 73 75 6c 74 53 65 74 20 3d 20 30 3b 0a 20 20 64  sultSet = 0;.  d
5330: 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72 2e 6e  b->busyHandler.n
5340: 42 75 73 79 20 3d 20 30 3b 0a 20 20 69 66 28 20  Busy = 0;.  if( 
5350: 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75  db->u1.isInterru
5360: 70 74 65 64 20 29 20 67 6f 74 6f 20 61 62 6f 72  pted ) goto abor
5370: 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75  t_due_to_interru
5380: 70 74 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  pt;.  sqlite3Vdb
5390: 65 49 4f 54 72 61 63 65 53 71 6c 28 70 29 3b 0a  eIOTraceSql(p);.
53a0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
53b0: 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c  MIT_PROGRESS_CAL
53c0: 4c 42 41 43 4b 0a 20 20 69 66 28 20 64 62 2d 3e  LBACK.  if( db->
53d0: 78 50 72 6f 67 72 65 73 73 20 29 7b 0a 20 20 20  xProgress ){.   
53e0: 20 75 33 32 20 69 50 72 69 6f 72 20 3d 20 70 2d   u32 iPrior = p-
53f0: 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45  >aCounter[SQLITE
5400: 5f 53 54 4d 54 53 54 41 54 55 53 5f 56 4d 5f 53  _STMTSTATUS_VM_S
5410: 54 45 50 5d 3b 0a 20 20 20 20 61 73 73 65 72 74  TEP];.    assert
5420: 28 20 30 20 3c 20 64 62 2d 3e 6e 50 72 6f 67 72  ( 0 < db->nProgr
5430: 65 73 73 4f 70 73 20 29 3b 0a 20 20 20 20 6e 50  essOps );.    nP
5440: 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 64  rogressLimit = d
5450: 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20  b->nProgressOps 
5460: 2d 20 28 69 50 72 69 6f 72 20 25 20 64 62 2d 3e  - (iPrior % db->
5470: 6e 50 72 6f 67 72 65 73 73 4f 70 73 29 3b 0a 20  nProgressOps);. 
5480: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e 50 72 6f   }else{.    nPro
5490: 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 30 78 66  gressLimit = 0xf
54a0: 66 66 66 66 66 66 66 3b 0a 20 20 7d 0a 23 65 6e  fffffff;.  }.#en
54b0: 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
54c0: 45 5f 44 45 42 55 47 0a 20 20 73 71 6c 69 74 65  E_DEBUG.  sqlite
54d0: 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c  3BeginBenignMall
54e0: 6f 63 28 29 3b 0a 20 20 69 66 28 20 70 2d 3e 70  oc();.  if( p->p
54f0: 63 3d 3d 30 0a 20 20 20 26 26 20 28 70 2d 3e 64  c==0.   && (p->d
5500: 62 2d 3e 66 6c 61 67 73 20 26 20 28 53 51 4c 49  b->flags & (SQLI
5510: 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 7c 53  TE_VdbeListing|S
5520: 51 4c 49 54 45 5f 56 64 62 65 45 51 50 7c 53 51  QLITE_VdbeEQP|SQ
5530: 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 29 29  LITE_VdbeTrace))
5540: 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 69 6e 74  !=0.  ){.    int
5550: 20 69 3b 0a 20 20 20 20 69 6e 74 20 6f 6e 63 65   i;.    int once
5560: 20 3d 20 31 3b 0a 20 20 20 20 73 71 6c 69 74 65   = 1;.    sqlite
5570: 33 56 64 62 65 50 72 69 6e 74 53 71 6c 28 70 29  3VdbePrintSql(p)
5580: 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d  ;.    if( p->db-
5590: 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
55a0: 56 64 62 65 4c 69 73 74 69 6e 67 20 29 7b 0a 20  VdbeListing ){. 
55b0: 20 20 20 20 20 70 72 69 6e 74 66 28 22 56 44 42       printf("VDB
55c0: 45 20 50 72 6f 67 72 61 6d 20 4c 69 73 74 69 6e  E Program Listin
55d0: 67 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20 66 6f  g:\n");.      fo
55e0: 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b  r(i=0; i<p->nOp;
55f0: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 73   i++){.        s
5600: 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f  qlite3VdbePrintO
5610: 70 28 73 74 64 6f 75 74 2c 20 69 2c 20 26 61 4f  p(stdout, i, &aO
5620: 70 5b 69 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20  p[i]);.      }. 
5630: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 2d 3e     }.    if( p->
5640: 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
5650: 54 45 5f 56 64 62 65 45 51 50 20 29 7b 0a 20 20  TE_VdbeEQP ){.  
5660: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70      for(i=0; i<p
5670: 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20 20  ->nOp; i++){.   
5680: 20 20 20 20 20 69 66 28 20 61 4f 70 5b 69 5d 2e       if( aOp[i].
5690: 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c 61  opcode==OP_Expla
56a0: 69 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  in ){.          
56b0: 69 66 28 20 6f 6e 63 65 20 29 20 70 72 69 6e 74  if( once ) print
56c0: 66 28 22 56 44 42 45 20 51 75 65 72 79 20 50 6c  f("VDBE Query Pl
56d0: 61 6e 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20  an:\n");.       
56e0: 20 20 20 70 72 69 6e 74 66 28 22 25 73 5c 6e 22     printf("%s\n"
56f0: 2c 20 61 4f 70 5b 69 5d 2e 70 34 2e 7a 29 3b 0a  , aOp[i].p4.z);.
5700: 20 20 20 20 20 20 20 20 20 20 6f 6e 63 65 20 3d            once =
5710: 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20   0;.        }.  
5720: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
5730: 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67 73  if( p->db->flags
5740: 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72   & SQLITE_VdbeTr
5750: 61 63 65 20 29 20 20 70 72 69 6e 74 66 28 22 56  ace )  printf("V
5760: 44 42 45 20 54 72 61 63 65 3a 5c 6e 22 29 3b 0a  DBE Trace:\n");.
5770: 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 45 6e 64    }.  sqlite3End
5780: 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a  BenignMalloc();.
5790: 23 65 6e 64 69 66 0a 20 20 66 6f 72 28 70 4f 70  #endif.  for(pOp
57a0: 3d 26 61 4f 70 5b 70 2d 3e 70 63 5d 3b 20 31 3b  =&aOp[p->pc]; 1;
57b0: 20 70 4f 70 2b 2b 29 7b 0a 20 20 20 20 2f 2a 20   pOp++){.    /* 
57c0: 45 72 72 6f 72 73 20 61 72 65 20 64 65 74 65 63  Errors are detec
57d0: 74 65 64 20 62 79 20 69 6e 64 69 76 69 64 75 61  ted by individua
57e0: 6c 20 6f 70 63 6f 64 65 73 2c 20 77 69 74 68 20  l opcodes, with 
57f0: 61 6e 20 69 6d 6d 65 64 69 61 74 65 0a 20 20 20  an immediate.   
5800: 20 2a 2a 20 6a 75 6d 70 73 20 74 6f 20 61 62 6f   ** jumps to abo
5810: 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 2e  rt_due_to_error.
5820: 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20   */.    assert( 
5830: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
5840: 0a 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ..    assert( pO
5850: 70 3e 3d 61 4f 70 20 26 26 20 70 4f 70 3c 26 61  p>=aOp && pOp<&a
5860: 4f 70 5b 70 2d 3e 6e 4f 70 5d 29 3b 0a 23 69 66  Op[p->nOp]);.#if
5870: 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45  def VDBE_PROFILE
5880: 0a 20 20 20 20 73 74 61 72 74 20 3d 20 73 71 6c  .    start = sql
5890: 69 74 65 33 4e 50 72 6f 66 69 6c 65 43 6e 74 20  ite3NProfileCnt 
58a0: 3f 20 73 71 6c 69 74 65 33 4e 50 72 6f 66 69 6c  ? sqlite3NProfil
58b0: 65 43 6e 74 20 3a 20 73 71 6c 69 74 65 33 48 77  eCnt : sqlite3Hw
58c0: 74 69 6d 65 28 29 3b 0a 23 65 6e 64 69 66 0a 20  time();.#endif. 
58d0: 20 20 20 6e 56 6d 53 74 65 70 2b 2b 3b 0a 23 69     nVmStep++;.#i
58e0: 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
58f0: 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54  LE_STMT_SCANSTAT
5900: 55 53 0a 20 20 20 20 69 66 28 20 70 2d 3e 61 6e  US.    if( p->an
5910: 45 78 65 63 20 29 20 70 2d 3e 61 6e 45 78 65 63  Exec ) p->anExec
5920: 5b 28 69 6e 74 29 28 70 4f 70 2d 61 4f 70 29 5d  [(int)(pOp-aOp)]
5930: 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20  ++;.#endif..    
5940: 2f 2a 20 4f 6e 6c 79 20 61 6c 6c 6f 77 20 74 72  /* Only allow tr
5950: 61 63 69 6e 67 20 69 66 20 53 51 4c 49 54 45 5f  acing if SQLITE_
5960: 44 45 42 55 47 20 69 73 20 64 65 66 69 6e 65 64  DEBUG is defined
5970: 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65 66 20  ..    */.#ifdef 
5980: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20  SQLITE_DEBUG.   
5990: 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20 26   if( db->flags &
59a0: 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63   SQLITE_VdbeTrac
59b0: 65 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  e ){.      sqlit
59c0: 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74  e3VdbePrintOp(st
59d0: 64 6f 75 74 2c 20 28 69 6e 74 29 28 70 4f 70 20  dout, (int)(pOp 
59e0: 2d 20 61 4f 70 29 2c 20 70 4f 70 29 3b 0a 20 20  - aOp), pOp);.  
59f0: 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 20    }.#endif.     
5a00: 20 0a 0a 20 20 20 20 2f 2a 20 43 68 65 63 6b 20   ..    /* Check 
5a10: 74 6f 20 73 65 65 20 69 66 20 77 65 20 6e 65 65  to see if we nee
5a20: 64 20 74 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e  d to simulate an
5a30: 20 69 6e 74 65 72 72 75 70 74 2e 20 20 54 68 69   interrupt.  Thi
5a40: 73 20 6f 6e 6c 79 20 68 61 70 70 65 6e 73 0a 20  s only happens. 
5a50: 20 20 20 2a 2a 20 69 66 20 77 65 20 68 61 76 65     ** if we have
5a60: 20 61 20 73 70 65 63 69 61 6c 20 74 65 73 74 20   a special test 
5a70: 62 75 69 6c 64 2e 0a 20 20 20 20 2a 2f 0a 23 69  build..    */.#i
5a80: 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
5a90: 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
5aa0: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
5ab0: 3e 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  >0 ){.      sqli
5ac0: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f  te3_interrupt_co
5ad0: 75 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 69 66 28  unt--;.      if(
5ae0: 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75   sqlite3_interru
5af0: 70 74 5f 63 6f 75 6e 74 3d 3d 30 20 29 7b 0a 20  pt_count==0 ){. 
5b00: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69         sqlite3_i
5b10: 6e 74 65 72 72 75 70 74 28 64 62 29 3b 0a 20 20  nterrupt(db);.  
5b20: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64      }.    }.#end
5b30: 69 66 0a 0a 20 20 20 20 2f 2a 20 53 61 6e 69 74  if..    /* Sanit
5b40: 79 20 63 68 65 63 6b 69 6e 67 20 6f 6e 20 6f 74  y checking on ot
5b50: 68 65 72 20 6f 70 65 72 61 6e 64 73 20 2a 2f 0a  her operands */.
5b60: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
5b70: 42 55 47 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  BUG.    {.      
5b80: 75 38 20 6f 70 50 72 6f 70 65 72 74 79 20 3d 20  u8 opProperty = 
5b90: 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f  sqlite3OpcodePro
5ba0: 70 65 72 74 79 5b 70 4f 70 2d 3e 6f 70 63 6f 64  perty[pOp->opcod
5bb0: 65 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 28 6f  e];.      if( (o
5bc0: 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c  pProperty & OPFL
5bd0: 47 5f 49 4e 31 29 21 3d 30 20 29 7b 0a 20 20 20  G_IN1)!=0 ){.   
5be0: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
5bf0: 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p1>0 );.      
5c00: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
5c10: 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  1<=(p->nMem+1 - 
5c20: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
5c30: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d         assert( m
5c40: 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b  emIsValid(&aMem[
5c50: 70 4f 70 2d 3e 70 31 5d 29 20 29 3b 0a 20 20 20  pOp->p1]) );.   
5c60: 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
5c70: 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d  ite3VdbeCheckMem
5c80: 49 6e 76 61 72 69 61 6e 74 73 28 26 61 4d 65 6d  Invariants(&aMem
5c90: 5b 70 4f 70 2d 3e 70 31 5d 29 20 29 3b 0a 20 20  [pOp->p1]) );.  
5ca0: 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54        REGISTER_T
5cb0: 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 26 61  RACE(pOp->p1, &a
5cc0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20  Mem[pOp->p1]);. 
5cd0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
5ce0: 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f   (opProperty & O
5cf0: 50 46 4c 47 5f 49 4e 32 29 21 3d 30 20 29 7b 0a  PFLG_IN2)!=0 ){.
5d00: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
5d10: 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20  pOp->p2>0 );.   
5d20: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
5d30: 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ->p2<=(p->nMem+1
5d40: 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29   - p->nCursor) )
5d50: 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
5d60: 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d  ( memIsValid(&aM
5d70: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 20 29 3b 0a  em[pOp->p2]) );.
5d80: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
5d90: 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b  sqlite3VdbeCheck
5da0: 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 26 61  MemInvariants(&a
5db0: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 20 29 3b  Mem[pOp->p2]) );
5dc0: 0a 20 20 20 20 20 20 20 20 52 45 47 49 53 54 45  .        REGISTE
5dd0: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c  R_TRACE(pOp->p2,
5de0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29   &aMem[pOp->p2])
5df0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
5e00: 69 66 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20  if( (opProperty 
5e10: 26 20 4f 50 46 4c 47 5f 49 4e 33 29 21 3d 30 20  & OPFLG_IN3)!=0 
5e20: 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ){.        asser
5e30: 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a  t( pOp->p3>0 );.
5e40: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
5e50: 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
5e60: 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
5e70: 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  ) );.        ass
5e80: 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
5e90: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20  &aMem[pOp->p3]) 
5ea0: 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
5eb0: 74 28 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  t( sqlite3VdbeCh
5ec0: 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73  eckMemInvariants
5ed0: 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29  (&aMem[pOp->p3])
5ee0: 20 29 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49   );.        REGI
5ef0: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
5f00: 70 33 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  p3, &aMem[pOp->p
5f10: 33 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  3]);.      }.   
5f20: 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72     if( (opProper
5f30: 74 79 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32 29  ty & OPFLG_OUT2)
5f40: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61  !=0 ){.        a
5f50: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30  ssert( pOp->p2>0
5f60: 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
5f70: 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d  rt( pOp->p2<=(p-
5f80: 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
5f90: 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20  rsor) );.       
5fa0: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
5fb0: 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  e(p, &aMem[pOp->
5fc0: 70 32 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  p2]);.      }.  
5fd0: 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65      if( (opPrope
5fe0: 72 74 79 20 26 20 4f 50 46 4c 47 5f 4f 55 54 33  rty & OPFLG_OUT3
5ff0: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )!=0 ){.        
6000: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
6010: 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  0 );.        ass
6020: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  ert( pOp->p3<=(p
6030: 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
6040: 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20  ursor) );.      
6050: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
6060: 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ge(p, &aMem[pOp-
6070: 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20  >p3]);.      }. 
6080: 20 20 20 7d 0a 23 65 6e 64 69 66 0a 23 69 66 20     }.#endif.#if 
6090: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
60a0: 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64  EBUG) || defined
60b0: 28 56 44 42 45 5f 50 52 4f 46 49 4c 45 29 0a 20  (VDBE_PROFILE). 
60c0: 20 20 20 70 4f 72 69 67 4f 70 20 3d 20 70 4f 70     pOrigOp = pOp
60d0: 3b 0a 23 65 6e 64 69 66 0a 20 20 0a 20 20 20 20  ;.#endif.  .    
60e0: 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63  switch( pOp->opc
60f0: 6f 64 65 20 29 7b 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a  ode ){../*******
6100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6120: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6140: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57 68 61 74 20 66  ******.** What f
6150: 6f 6c 6c 6f 77 73 20 69 73 20 61 20 6d 61 73 73  ollows is a mass
6160: 69 76 65 20 73 77 69 74 63 68 20 73 74 61 74 65  ive switch state
6170: 6d 65 6e 74 20 77 68 65 72 65 20 65 61 63 68 20  ment where each 
6180: 63 61 73 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20  case implements 
6190: 61 0a 2a 2a 20 73 65 70 61 72 61 74 65 20 69 6e  a.** separate in
61a0: 73 74 72 75 63 74 69 6f 6e 20 69 6e 20 74 68 65  struction in the
61b0: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
61c0: 2e 20 20 49 66 20 77 65 20 66 6f 6c 6c 6f 77 20  .  If we follow 
61d0: 74 68 65 20 75 73 75 61 6c 0a 2a 2a 20 69 6e 64  the usual.** ind
61e0: 65 6e 74 61 74 69 6f 6e 20 63 6f 6e 76 65 6e 74  entation convent
61f0: 69 6f 6e 73 2c 20 65 61 63 68 20 63 61 73 65 20  ions, each case 
6200: 73 68 6f 75 6c 64 20 62 65 20 69 6e 64 65 6e 74  should be indent
6210: 65 64 20 62 79 20 36 20 73 70 61 63 65 73 2e 20  ed by 6 spaces. 
6220: 20 42 75 74 0a 2a 2a 20 74 68 61 74 20 69 73 20   But.** that is 
6230: 61 20 6c 6f 74 20 6f 66 20 77 61 73 74 65 64 20  a lot of wasted 
6240: 73 70 61 63 65 20 6f 6e 20 74 68 65 20 6c 65 66  space on the lef
6250: 74 20 6d 61 72 67 69 6e 2e 20 20 53 6f 20 74 68  t margin.  So th
6260: 65 20 63 6f 64 65 20 77 69 74 68 69 6e 0a 2a 2a  e code within.**
6270: 20 74 68 65 20 73 77 69 74 63 68 20 73 74 61 74   the switch stat
6280: 65 6d 65 6e 74 20 77 69 6c 6c 20 62 72 65 61 6b  ement will break
6290: 20 77 69 74 68 20 63 6f 6e 76 65 6e 74 69 6f 6e   with convention
62a0: 20 61 6e 64 20 62 65 20 66 6c 75 73 68 2d 6c 65   and be flush-le
62b0: 66 74 2e 20 41 6e 6f 74 68 65 72 0a 2a 2a 20 62  ft. Another.** b
62c0: 69 67 20 63 6f 6d 6d 65 6e 74 20 28 73 69 6d 69  ig comment (simi
62d0: 6c 61 72 20 74 6f 20 74 68 69 73 20 6f 6e 65 29  lar to this one)
62e0: 20 77 69 6c 6c 20 6d 61 72 6b 20 74 68 65 20 70   will mark the p
62f0: 6f 69 6e 74 20 69 6e 20 74 68 65 20 63 6f 64 65  oint in the code
6300: 20 77 68 65 72 65 0a 2a 2a 20 77 65 20 74 72 61   where.** we tra
6310: 6e 73 69 74 69 6f 6e 20 62 61 63 6b 20 74 6f 20  nsition back to 
6320: 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61 74 69  normal indentati
6330: 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f  on..**.** The fo
6340: 72 6d 61 74 74 69 6e 67 20 6f 66 20 65 61 63 68  rmatting of each
6350: 20 63 61 73 65 20 69 73 20 69 6d 70 6f 72 74 61   case is importa
6360: 6e 74 2e 20 20 54 68 65 20 6d 61 6b 65 66 69 6c  nt.  The makefil
6370: 65 20 66 6f 72 20 53 51 4c 69 74 65 0a 2a 2a 20  e for SQLite.** 
6380: 67 65 6e 65 72 61 74 65 73 20 74 77 6f 20 43 20  generates two C 
6390: 66 69 6c 65 73 20 22 6f 70 63 6f 64 65 73 2e 68  files "opcodes.h
63a0: 22 20 61 6e 64 20 22 6f 70 63 6f 64 65 73 2e 63  " and "opcodes.c
63b0: 22 20 62 79 20 73 63 61 6e 6e 69 6e 67 20 74 68  " by scanning th
63c0: 69 73 0a 2a 2a 20 66 69 6c 65 20 6c 6f 6f 6b 69  is.** file looki
63d0: 6e 67 20 66 6f 72 20 6c 69 6e 65 73 20 74 68 61  ng for lines tha
63e0: 74 20 62 65 67 69 6e 20 77 69 74 68 20 22 63 61  t begin with "ca
63f0: 73 65 20 4f 50 5f 22 2e 20 20 54 68 65 20 6f 70  se OP_".  The op
6400: 63 6f 64 65 73 2e 68 20 66 69 6c 65 73 0a 2a 2a  codes.h files.**
6410: 20 77 69 6c 6c 20 62 65 20 66 69 6c 6c 65 64 20   will be filled 
6420: 77 69 74 68 20 23 64 65 66 69 6e 65 73 20 74 68  with #defines th
6430: 61 74 20 67 69 76 65 20 75 6e 69 71 75 65 20 69  at give unique i
6440: 6e 74 65 67 65 72 20 76 61 6c 75 65 73 20 74 6f  nteger values to
6450: 20 65 61 63 68 0a 2a 2a 20 6f 70 63 6f 64 65 20   each.** opcode 
6460: 61 6e 64 20 74 68 65 20 6f 70 63 6f 64 65 73 2e  and the opcodes.
6470: 63 20 66 69 6c 65 20 69 73 20 66 69 6c 6c 65 64  c file is filled
6480: 20 77 69 74 68 20 61 6e 20 61 72 72 61 79 20 6f   with an array o
6490: 66 20 73 74 72 69 6e 67 73 20 77 68 65 72 65 0a  f strings where.
64a0: 2a 2a 20 65 61 63 68 20 73 74 72 69 6e 67 20 69  ** each string i
64b0: 73 20 74 68 65 20 73 79 6d 62 6f 6c 69 63 20 6e  s the symbolic n
64c0: 61 6d 65 20 66 6f 72 20 74 68 65 20 63 6f 72 72  ame for the corr
64d0: 65 73 70 6f 6e 64 69 6e 67 20 6f 70 63 6f 64 65  esponding opcode
64e0: 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 63 61 73  .  If the.** cas
64f0: 65 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 66  e statement is f
6500: 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 63 6f 6d  ollowed by a com
6510: 6d 65 6e 74 20 6f 66 20 74 68 65 20 66 6f 72 6d  ment of the form
6520: 20 22 2f 23 20 73 61 6d 65 20 61 73 20 2e 2e 2e   "/# same as ...
6530: 20 23 2f 22 0a 2a 2a 20 74 68 61 74 20 63 6f 6d   #/".** that com
6540: 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f 20  ment is used to 
6550: 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 70 61  determine the pa
6560: 72 74 69 63 75 6c 61 72 20 76 61 6c 75 65 20 6f  rticular value o
6570: 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 0a 2a 2a  f the opcode..**
6580: 0a 2a 2a 20 4f 74 68 65 72 20 6b 65 79 77 6f 72  .** Other keywor
6590: 64 73 20 69 6e 20 74 68 65 20 63 6f 6d 6d 65 6e  ds in the commen
65a0: 74 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20 65  t that follows e
65b0: 61 63 68 20 63 61 73 65 20 61 72 65 20 75 73 65  ach case are use
65c0: 64 20 74 6f 0a 2a 2a 20 63 6f 6e 73 74 72 75 63  d to.** construc
65d0: 74 20 74 68 65 20 4f 50 46 4c 47 5f 49 4e 49 54  t the OPFLG_INIT
65e0: 49 41 4c 49 5a 45 52 20 76 61 6c 75 65 20 74 68  IALIZER value th
65f0: 61 74 20 69 6e 69 74 69 61 6c 69 7a 65 73 20 6f  at initializes o
6600: 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d 2e  pcodeProperty[].
6610: 0a 2a 2a 20 4b 65 79 77 6f 72 64 73 20 69 6e 63  .** Keywords inc
6620: 6c 75 64 65 3a 20 69 6e 31 2c 20 69 6e 32 2c 20  lude: in1, in2, 
6630: 69 6e 33 2c 20 6f 75 74 32 2c 20 6f 75 74 33 2e  in3, out2, out3.
6640: 20 20 53 65 65 0a 2a 2a 20 74 68 65 20 6d 6b 6f    See.** the mko
6650: 70 63 6f 64 65 68 2e 61 77 6b 20 73 63 72 69 70  pcodeh.awk scrip
6660: 74 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  t for additional
6670: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a   information..**
6680: 0a 2a 2a 20 44 6f 63 75 6d 65 6e 74 61 74 69 6f  .** Documentatio
6690: 6e 20 61 62 6f 75 74 20 56 44 42 45 20 6f 70 63  n about VDBE opc
66a0: 6f 64 65 73 20 69 73 20 67 65 6e 65 72 61 74 65  odes is generate
66b0: 64 20 62 79 20 73 63 61 6e 6e 69 6e 67 20 74 68  d by scanning th
66c0: 69 73 20 66 69 6c 65 0a 2a 2a 20 66 6f 72 20 6c  is file.** for l
66d0: 69 6e 65 73 20 6f 66 20 74 68 61 74 20 63 6f 6e  ines of that con
66e0: 74 61 69 6e 20 22 4f 70 63 6f 64 65 3a 22 2e 20  tain "Opcode:". 
66f0: 20 54 68 61 74 20 6c 69 6e 65 20 61 6e 64 20 61   That line and a
6700: 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 0a 2a 2a  ll subsequent.**
6710: 20 63 6f 6d 6d 65 6e 74 20 6c 69 6e 65 73 20 61   comment lines a
6720: 72 65 20 75 73 65 64 20 69 6e 20 74 68 65 20 67  re used in the g
6730: 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65  eneration of the
6740: 20 6f 70 63 6f 64 65 2e 68 74 6d 6c 20 64 6f 63   opcode.html doc
6750: 75 6d 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20 66 69  umentation.** fi
6760: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 55 4d 4d 41 52  le..**.** SUMMAR
6770: 59 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 46 6f 72  Y:.**.**     For
6780: 6d 61 74 74 69 6e 67 20 69 73 20 69 6d 70 6f 72  matting is impor
6790: 74 61 6e 74 20 74 6f 20 73 63 72 69 70 74 73 20  tant to scripts 
67a0: 74 68 61 74 20 73 63 61 6e 20 74 68 69 73 20 66  that scan this f
67b0: 69 6c 65 2e 0a 2a 2a 20 20 20 20 20 44 6f 20 6e  ile..**     Do n
67c0: 6f 74 20 64 65 76 69 61 74 65 20 66 72 6f 6d 20  ot deviate from 
67d0: 74 68 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 73  the formatting s
67e0: 74 79 6c 65 20 63 75 72 72 65 6e 74 6c 79 20 69  tyle currently i
67f0: 6e 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a  n use..**.******
6800: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6810: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6820: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6830: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6840: 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 20 4f 70 63  *******/../* Opc
6850: 6f 64 65 3a 20 20 47 6f 74 6f 20 2a 20 50 32 20  ode:  Goto * P2 
6860: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6e 20 75  * * *.**.** An u
6870: 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 6a 75 6d  nconditional jum
6880: 70 20 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e  p to address P2.
6890: 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 69 6e 73  .** The next ins
68a0: 74 72 75 63 74 69 6f 6e 20 65 78 65 63 75 74 65  truction execute
68b0: 64 20 77 69 6c 6c 20 62 65 20 0a 2a 2a 20 74 68  d will be .** th
68c0: 65 20 6f 6e 65 20 61 74 20 69 6e 64 65 78 20 50  e one at index P
68d0: 32 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e  2 from the begin
68e0: 6e 69 6e 67 20 6f 66 0a 2a 2a 20 74 68 65 20 70  ning of.** the p
68f0: 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 54 68  rogram..**.** Th
6900: 65 20 50 31 20 70 61 72 61 6d 65 74 65 72 20 69  e P1 parameter i
6910: 73 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 75  s not actually u
6920: 73 65 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f  sed by this opco
6930: 64 65 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 74  de.  However, it
6940: 0a 2a 2a 20 69 73 20 73 6f 6d 65 74 69 6d 65 73  .** is sometimes
6950: 20 73 65 74 20 74 6f 20 31 20 69 6e 73 74 65 61   set to 1 instea
6960: 64 20 6f 66 20 30 20 61 73 20 61 20 68 69 6e 74  d of 0 as a hint
6970: 20 74 6f 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d   to the command-
6980: 6c 69 6e 65 20 73 68 65 6c 6c 0a 2a 2a 20 74 68  line shell.** th
6990: 61 74 20 74 68 69 73 20 47 6f 74 6f 20 69 73 20  at this Goto is 
69a0: 74 68 65 20 62 6f 74 74 6f 6d 20 6f 66 20 61 20  the bottom of a 
69b0: 6c 6f 6f 70 20 61 6e 64 20 74 68 61 74 20 74 68  loop and that th
69c0: 65 20 6c 69 6e 65 73 20 66 72 6f 6d 20 50 32 20  e lines from P2 
69d0: 64 6f 77 6e 0a 2a 2a 20 74 6f 20 74 68 65 20 63  down.** to the c
69e0: 75 72 72 65 6e 74 20 6c 69 6e 65 20 73 68 6f 75  urrent line shou
69f0: 6c 64 20 62 65 20 69 6e 64 65 6e 74 65 64 20 66  ld be indented f
6a00: 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70 75  or EXPLAIN outpu
6a10: 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f  t..*/.case OP_Go
6a20: 74 6f 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  to: {           
6a30: 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 6a 75 6d    /* jump */.jum
6a40: 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68 65 63  p_to_p2_and_chec
6a50: 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3a  k_for_interrupt:
6a60: 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f  .  pOp = &aOp[pO
6a70: 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a 0a 20 20 2f  p->p2 - 1];..  /
6a80: 2a 20 4f 70 63 6f 64 65 73 20 74 68 61 74 20 61  * Opcodes that a
6a90: 72 65 20 75 73 65 64 20 61 73 20 74 68 65 20 62  re used as the b
6aa0: 6f 74 74 6f 6d 20 6f 66 20 61 20 6c 6f 6f 70 20  ottom of a loop 
6ab0: 28 4f 50 5f 4e 65 78 74 2c 20 4f 50 5f 50 72 65  (OP_Next, OP_Pre
6ac0: 76 2c 0a 20 20 2a 2a 20 4f 50 5f 56 4e 65 78 74  v,.  ** OP_VNext
6ad0: 2c 20 6f 72 20 4f 50 5f 53 6f 72 74 65 72 4e 65  , or OP_SorterNe
6ae0: 78 74 29 20 61 6c 6c 20 6a 75 6d 70 20 68 65 72  xt) all jump her
6af0: 65 20 75 70 6f 6e 0a 20 20 2a 2a 20 63 6f 6d 70  e upon.  ** comp
6b00: 6c 65 74 69 6f 6e 2e 20 20 43 68 65 63 6b 20 74  letion.  Check t
6b10: 6f 20 73 65 65 20 69 66 20 73 71 6c 69 74 65 33  o see if sqlite3
6b20: 5f 69 6e 74 65 72 72 75 70 74 28 29 20 68 61 73  _interrupt() has
6b30: 20 62 65 65 6e 20 63 61 6c 6c 65 64 0a 20 20 2a   been called.  *
6b40: 2a 20 6f 72 20 69 66 20 74 68 65 20 70 72 6f 67  * or if the prog
6b50: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 6e 65  ress callback ne
6b60: 65 64 73 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65  eds to be invoke
6b70: 64 2e 20 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  d. .  **.  ** Th
6b80: 69 73 20 63 6f 64 65 20 75 73 65 73 20 75 6e 73  is code uses uns
6b90: 74 72 75 63 74 75 72 65 64 20 22 67 6f 74 6f 22  tructured "goto"
6ba0: 20 73 74 61 74 65 6d 65 6e 74 73 20 61 6e 64 20   statements and 
6bb0: 64 6f 65 73 20 6e 6f 74 20 6c 6f 6f 6b 20 63 6c  does not look cl
6bc0: 65 61 6e 2e 0a 20 20 2a 2a 20 42 75 74 20 74 68  ean..  ** But th
6bd0: 61 74 20 69 73 20 6e 6f 74 20 64 75 65 20 74 6f  at is not due to
6be0: 20 73 6c 6f 70 70 79 20 63 6f 64 69 6e 67 20 68   sloppy coding h
6bf0: 61 62 69 74 73 2e 20 54 68 65 20 63 6f 64 65 20  abits. The code 
6c00: 69 73 20 77 72 69 74 74 65 6e 20 74 68 69 73 0a  is written this.
6c10: 20 20 2a 2a 20 77 61 79 20 66 6f 72 20 70 65 72    ** way for per
6c20: 66 6f 72 6d 61 6e 63 65 2c 20 74 6f 20 61 76 6f  formance, to avo
6c30: 69 64 20 68 61 76 69 6e 67 20 74 6f 20 72 75 6e  id having to run
6c40: 20 74 68 65 20 69 6e 74 65 72 72 75 70 74 20 61   the interrupt a
6c50: 6e 64 20 70 72 6f 67 72 65 73 73 0a 20 20 2a 2a  nd progress.  **
6c60: 20 63 68 65 63 6b 73 20 6f 6e 20 65 76 65 72 79   checks on every
6c70: 20 6f 70 63 6f 64 65 2e 20 20 54 68 69 73 20 68   opcode.  This h
6c80: 65 6c 70 73 20 73 71 6c 69 74 65 33 5f 73 74 65  elps sqlite3_ste
6c90: 70 28 29 20 74 6f 20 72 75 6e 20 61 62 6f 75 74  p() to run about
6ca0: 20 31 2e 35 25 0a 20 20 2a 2a 20 66 61 73 74 65   1.5%.  ** faste
6cb0: 72 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 22  r according to "
6cc0: 76 61 6c 67 72 69 6e 64 20 2d 2d 74 6f 6f 6c 3d  valgrind --tool=
6cd0: 63 61 63 68 65 67 72 69 6e 64 22 20 2a 2f 0a 63  cachegrind" */.c
6ce0: 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75  heck_for_interru
6cf0: 70 74 3a 0a 20 20 69 66 28 20 64 62 2d 3e 75 31  pt:.  if( db->u1
6d00: 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 20 29  .isInterrupted )
6d10: 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
6d20: 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a 23 69  to_interrupt;.#i
6d30: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
6d40: 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42  T_PROGRESS_CALLB
6d50: 41 43 4b 0a 20 20 2f 2a 20 43 61 6c 6c 20 74 68  ACK.  /* Call th
6d60: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
6d70: 61 63 6b 20 69 66 20 69 74 20 69 73 20 63 6f 6e  ack if it is con
6d80: 66 69 67 75 72 65 64 20 61 6e 64 20 74 68 65 20  figured and the 
6d90: 72 65 71 75 69 72 65 64 20 6e 75 6d 62 65 72 0a  required number.
6da0: 20 20 2a 2a 20 6f 66 20 56 44 42 45 20 6f 70 73    ** of VDBE ops
6db0: 20 68 61 76 65 20 62 65 65 6e 20 65 78 65 63 75   have been execu
6dc0: 74 65 64 20 28 65 69 74 68 65 72 20 73 69 6e 63  ted (either sinc
6dd0: 65 20 74 68 69 73 20 69 6e 76 6f 63 61 74 69 6f  e this invocatio
6de0: 6e 20 6f 66 0a 20 20 2a 2a 20 73 71 6c 69 74 65  n of.  ** sqlite
6df0: 33 56 64 62 65 45 78 65 63 28 29 20 6f 72 20 73  3VdbeExec() or s
6e00: 69 6e 63 65 20 6c 61 73 74 20 74 69 6d 65 20 74  ince last time t
6e10: 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  he progress call
6e20: 62 61 63 6b 20 77 61 73 20 63 61 6c 6c 65 64 29  back was called)
6e30: 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 70 72  ..  ** If the pr
6e40: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
6e50: 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f  returns non-zero
6e60: 2c 20 65 78 69 74 20 74 68 65 20 76 69 72 74 75  , exit the virtu
6e70: 61 6c 20 6d 61 63 68 69 6e 65 20 77 69 74 68 0a  al machine with.
6e80: 20 20 2a 2a 20 61 20 72 65 74 75 72 6e 20 63 6f    ** a return co
6e90: 64 65 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 2e  de SQLITE_ABORT.
6ea0: 0a 20 20 2a 2f 0a 20 20 69 66 28 20 6e 56 6d 53  .  */.  if( nVmS
6eb0: 74 65 70 3e 3d 6e 50 72 6f 67 72 65 73 73 4c 69  tep>=nProgressLi
6ec0: 6d 69 74 20 26 26 20 64 62 2d 3e 78 50 72 6f 67  mit && db->xProg
6ed0: 72 65 73 73 21 3d 30 20 29 7b 0a 20 20 20 20 61  ress!=0 ){.    a
6ee0: 73 73 65 72 74 28 20 64 62 2d 3e 6e 50 72 6f 67  ssert( db->nProg
6ef0: 72 65 73 73 4f 70 73 21 3d 30 20 29 3b 0a 20 20  ressOps!=0 );.  
6f00: 20 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74    nProgressLimit
6f10: 20 3d 20 6e 56 6d 53 74 65 70 20 2b 20 64 62 2d   = nVmStep + db-
6f20: 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 2d 20  >nProgressOps - 
6f30: 28 6e 56 6d 53 74 65 70 25 64 62 2d 3e 6e 50 72  (nVmStep%db->nPr
6f40: 6f 67 72 65 73 73 4f 70 73 29 3b 0a 20 20 20 20  ogressOps);.    
6f50: 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65 73  if( db->xProgres
6f60: 73 28 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41  s(db->pProgressA
6f70: 72 67 29 20 29 7b 0a 20 20 20 20 20 20 72 63 20  rg) ){.      rc 
6f80: 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55  = SQLITE_INTERRU
6f90: 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61  PT;.      goto a
6fa0: 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
6fb0: 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e  r;.    }.  }.#en
6fc0: 64 69 66 0a 20 20 0a 20 20 62 72 65 61 6b 3b 0a  dif.  .  break;.
6fd0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47  }../* Opcode:  G
6fe0: 6f 73 75 62 20 50 31 20 50 32 20 2a 20 2a 20 2a  osub P1 P2 * * *
6ff0: 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65  .**.** Write the
7000: 20 63 75 72 72 65 6e 74 20 61 64 64 72 65 73 73   current address
7010: 20 6f 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   onto register P
7020: 31 0a 2a 2a 20 61 6e 64 20 74 68 65 6e 20 6a 75  1.** and then ju
7030: 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20 50 32  mp to address P2
7040: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 73  ..*/.case OP_Gos
7050: 75 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ub: {           
7060: 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73   /* jump */.  as
7070: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
7080: 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e  && pOp->p1<=(p->
7090: 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
70a0: 73 6f 72 29 20 29 3b 0a 20 20 70 49 6e 31 20 3d  sor) );.  pIn1 =
70b0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
70c0: 0a 20 20 61 73 73 65 72 74 28 20 56 64 62 65 4d  .  assert( VdbeM
70d0: 65 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31 29 3d  emDynamic(pIn1)=
70e0: 3d 30 20 29 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  =0 );.  memAbout
70f0: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31  ToChange(p, pIn1
7100: 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73  );.  pIn1->flags
7110: 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 49   = MEM_Int;.  pI
7120: 6e 31 2d 3e 75 2e 69 20 3d 20 28 69 6e 74 29 28  n1->u.i = (int)(
7130: 70 4f 70 2d 61 4f 70 29 3b 0a 20 20 52 45 47 49  pOp-aOp);.  REGI
7140: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
7150: 70 31 2c 20 70 49 6e 31 29 3b 0a 0a 20 20 2f 2a  p1, pIn1);..  /*
7160: 20 4d 6f 73 74 20 6a 75 6d 70 20 6f 70 65 72 61   Most jump opera
7170: 74 69 6f 6e 73 20 64 6f 20 61 20 67 6f 74 6f 20  tions do a goto 
7180: 74 6f 20 74 68 69 73 20 73 70 6f 74 20 69 6e 20  to this spot in 
7190: 6f 72 64 65 72 20 74 6f 20 75 70 64 61 74 65 0a  order to update.
71a0: 20 20 2a 2a 20 74 68 65 20 70 4f 70 20 70 6f 69    ** the pOp poi
71b0: 6e 74 65 72 2e 20 2a 2f 0a 6a 75 6d 70 5f 74 6f  nter. */.jump_to
71c0: 5f 70 32 3a 0a 20 20 70 4f 70 20 3d 20 26 61 4f  _p2:.  pOp = &aO
71d0: 70 5b 70 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a  p[pOp->p2 - 1];.
71e0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
71f0: 70 63 6f 64 65 3a 20 20 52 65 74 75 72 6e 20 50  pcode:  Return P
7200: 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
7210: 4a 75 6d 70 20 74 6f 20 74 68 65 20 6e 65 78 74  Jump to the next
7220: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 66 74   instruction aft
7230: 65 72 20 74 68 65 20 61 64 64 72 65 73 73 20 69  er the address i
7240: 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20  n register P1.  
7250: 41 66 74 65 72 0a 2a 2a 20 74 68 65 20 6a 75 6d  After.** the jum
7260: 70 2c 20 72 65 67 69 73 74 65 72 20 50 31 20 62  p, register P1 b
7270: 65 63 6f 6d 65 73 20 75 6e 64 65 66 69 6e 65 64  ecomes undefined
7280: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 74  ..*/.case OP_Ret
7290: 75 72 6e 3a 20 7b 20 20 20 20 20 20 20 20 20 20  urn: {          
72a0: 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e   /* in1 */.  pIn
72b0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
72c0: 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  1];.  assert( pI
72d0: 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49  n1->flags==MEM_I
72e0: 6e 74 20 29 3b 0a 20 20 70 4f 70 20 3d 20 26 61  nt );.  pOp = &a
72f0: 4f 70 5b 70 49 6e 31 2d 3e 75 2e 69 5d 3b 0a 20  Op[pIn1->u.i];. 
7300: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d   pIn1->flags = M
7310: 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20  EM_Undefined;.  
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 49 6e 69 74 43 6f 72 6f 75 74 69  ode: InitCorouti
7340: 6e 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ne P1 P2 P3 * *.
7350: 2a 2a 0a 2a 2a 20 53 65 74 20 75 70 20 72 65 67  **.** Set up reg
7360: 69 73 74 65 72 20 50 31 20 73 6f 20 74 68 61 74  ister P1 so that
7370: 20 69 74 20 77 69 6c 6c 20 59 69 65 6c 64 20 74   it will Yield t
7380: 6f 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 0a  o the coroutine.
7390: 2a 2a 20 6c 6f 63 61 74 65 64 20 61 74 20 61 64  ** located at ad
73a0: 64 72 65 73 73 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  dress P3..**.** 
73b0: 49 66 20 50 32 21 3d 30 20 74 68 65 6e 20 74 68  If P2!=0 then th
73c0: 65 20 63 6f 72 6f 75 74 69 6e 65 20 69 6d 70 6c  e coroutine impl
73d0: 65 6d 65 6e 74 61 74 69 6f 6e 20 69 6d 6d 65 64  ementation immed
73e0: 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 73 0a 2a  iately follows.*
73f0: 2a 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20  * this opcode.  
7400: 53 6f 20 6a 75 6d 70 20 6f 76 65 72 20 74 68 65  So jump over the
7410: 20 63 6f 72 6f 75 74 69 6e 65 20 69 6d 70 6c 65   coroutine imple
7420: 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 0a 2a 2a 20  mentation to.** 
7430: 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a 0a 2a  address P2..**.*
7440: 2a 20 53 65 65 20 61 6c 73 6f 3a 20 45 6e 64 43  * See also: EndC
7450: 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73 65  oroutine.*/.case
7460: 20 4f 50 5f 49 6e 69 74 43 6f 72 6f 75 74 69 6e   OP_InitCoroutin
7470: 65 3a 20 7b 20 20 20 20 20 2f 2a 20 6a 75 6d 70  e: {     /* jump
7480: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
7490: 70 2d 3e 70 31 3e 30 20 26 26 20 20 70 4f 70 2d  p->p1>0 &&  pOp-
74a0: 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  >p1<=(p->nMem+1 
74b0: 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  - p->nCursor) );
74c0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
74d0: 70 32 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 32  p2>=0 && pOp->p2
74e0: 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 61 73 73  <p->nOp );.  ass
74f0: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30 20  ert( pOp->p3>=0 
7500: 26 26 20 70 4f 70 2d 3e 70 33 3c 70 2d 3e 6e 4f  && pOp->p3<p->nO
7510: 70 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  p );.  pOut = &a
7520: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
7530: 61 73 73 65 72 74 28 20 21 56 64 62 65 4d 65 6d  assert( !VdbeMem
7540: 44 79 6e 61 6d 69 63 28 70 4f 75 74 29 20 29 3b  Dynamic(pOut) );
7550: 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70  .  pOut->u.i = p
7560: 4f 70 2d 3e 70 33 20 2d 20 31 3b 0a 20 20 70 4f  Op->p3 - 1;.  pO
7570: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
7580: 49 6e 74 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  Int;.  if( pOp->
7590: 70 32 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  p2 ) goto jump_t
75a0: 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  o_p2;.  break;.}
75b0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 45 6e  ../* Opcode:  En
75c0: 64 43 6f 72 6f 75 74 69 6e 65 20 50 31 20 2a 20  dCoroutine P1 * 
75d0: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20  * * *.**.** The 
75e0: 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 20 74  instruction at t
75f0: 68 65 20 61 64 64 72 65 73 73 20 69 6e 20 72 65  he address in re
7600: 67 69 73 74 65 72 20 50 31 20 69 73 20 61 20 59  gister P1 is a Y
7610: 69 65 6c 64 2e 0a 2a 2a 20 4a 75 6d 70 20 74 6f  ield..** Jump to
7620: 20 74 68 65 20 50 32 20 70 61 72 61 6d 65 74 65   the P2 paramete
7630: 72 20 6f 66 20 74 68 61 74 20 59 69 65 6c 64 2e  r of that Yield.
7640: 0a 2a 2a 20 41 66 74 65 72 20 74 68 65 20 6a 75  .** After the ju
7650: 6d 70 2c 20 72 65 67 69 73 74 65 72 20 50 31 20  mp, register P1 
7660: 62 65 63 6f 6d 65 73 20 75 6e 64 65 66 69 6e 65  becomes undefine
7670: 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  d..**.** See als
7680: 6f 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65  o: InitCoroutine
7690: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 6e 64 43  .*/.case OP_EndC
76a0: 6f 72 6f 75 74 69 6e 65 3a 20 7b 20 20 20 20 20  oroutine: {     
76b0: 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a        /* in1 */.
76c0: 20 20 56 64 62 65 4f 70 20 2a 70 43 61 6c 6c 65    VdbeOp *pCalle
76d0: 72 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  r;.  pIn1 = &aMe
76e0: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
76f0: 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
7700: 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  s==MEM_Int );.  
7710: 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 75 2e  assert( pIn1->u.
7720: 69 3e 3d 30 20 26 26 20 70 49 6e 31 2d 3e 75 2e  i>=0 && pIn1->u.
7730: 69 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 43  i<p->nOp );.  pC
7740: 61 6c 6c 65 72 20 3d 20 26 61 4f 70 5b 70 49 6e  aller = &aOp[pIn
7750: 31 2d 3e 75 2e 69 5d 3b 0a 20 20 61 73 73 65 72  1->u.i];.  asser
7760: 74 28 20 70 43 61 6c 6c 65 72 2d 3e 6f 70 63 6f  t( pCaller->opco
7770: 64 65 3d 3d 4f 50 5f 59 69 65 6c 64 20 29 3b 0a  de==OP_Yield );.
7780: 20 20 61 73 73 65 72 74 28 20 70 43 61 6c 6c 65    assert( pCalle
7790: 72 2d 3e 70 32 3e 3d 30 20 26 26 20 70 43 61 6c  r->p2>=0 && pCal
77a0: 6c 65 72 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29  ler->p2<p->nOp )
77b0: 3b 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70  ;.  pOp = &aOp[p
77c0: 43 61 6c 6c 65 72 2d 3e 70 32 20 2d 20 31 5d 3b  Caller->p2 - 1];
77d0: 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d  .  pIn1->flags =
77e0: 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a   MEM_Undefined;.
77f0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
7800: 70 63 6f 64 65 3a 20 20 59 69 65 6c 64 20 50 31  pcode:  Yield P1
7810: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
7820: 53 77 61 70 20 74 68 65 20 70 72 6f 67 72 61 6d  Swap the program
7830: 20 63 6f 75 6e 74 65 72 20 77 69 74 68 20 74 68   counter with th
7840: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
7850: 74 65 72 20 50 31 2e 20 20 54 68 69 73 0a 2a 2a  ter P1.  This.**
7860: 20 68 61 73 20 74 68 65 20 65 66 66 65 63 74 20   has the effect 
7870: 6f 66 20 79 69 65 6c 64 69 6e 67 20 74 6f 20 61  of yielding to a
7880: 20 63 6f 72 6f 75 74 69 6e 65 2e 0a 2a 2a 0a 2a   coroutine..**.*
7890: 2a 20 49 66 20 74 68 65 20 63 6f 72 6f 75 74 69  * If the corouti
78a0: 6e 65 20 74 68 61 74 20 69 73 20 6c 61 75 6e 63  ne that is launc
78b0: 68 65 64 20 62 79 20 74 68 69 73 20 69 6e 73 74  hed by this inst
78c0: 72 75 63 74 69 6f 6e 20 65 6e 64 73 20 77 69 74  ruction ends wit
78d0: 68 0a 2a 2a 20 59 69 65 6c 64 20 6f 72 20 52 65  h.** Yield or Re
78e0: 74 75 72 6e 20 74 68 65 6e 20 63 6f 6e 74 69 6e  turn then contin
78f0: 75 65 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  ue to the next i
7900: 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74  nstruction.  But
7910: 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 72 6f 75   if.** the corou
7920: 74 69 6e 65 20 6c 61 75 6e 63 68 65 64 20 62 79  tine launched by
7930: 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
7940: 6e 20 65 6e 64 73 20 77 69 74 68 0a 2a 2a 20 45  n ends with.** E
7950: 6e 64 43 6f 72 6f 75 74 69 6e 65 2c 20 74 68 65  ndCoroutine, the
7960: 6e 20 6a 75 6d 70 20 74 6f 20 50 32 20 72 61 74  n jump to P2 rat
7970: 68 65 72 20 74 68 61 6e 20 63 6f 6e 74 69 6e 75  her than continu
7980: 69 6e 67 20 77 69 74 68 20 74 68 65 0a 2a 2a 20  ing with the.** 
7990: 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
79a0: 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
79b0: 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65 0a  : InitCoroutine.
79c0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 59 69 65 6c 64  */.case OP_Yield
79d0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
79e0: 2a 20 69 6e 31 2c 20 6a 75 6d 70 20 2a 2f 0a 20  * in1, jump */. 
79f0: 20 69 6e 74 20 70 63 44 65 73 74 3b 0a 20 20 70   int pcDest;.  p
7a00: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
7a10: 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
7a20: 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70  VdbeMemDynamic(p
7a30: 49 6e 31 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e  In1)==0 );.  pIn
7a40: 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  1->flags = MEM_I
7a50: 6e 74 3b 0a 20 20 70 63 44 65 73 74 20 3d 20 28  nt;.  pcDest = (
7a60: 69 6e 74 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20  int)pIn1->u.i;. 
7a70: 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 28 69 6e   pIn1->u.i = (in
7a80: 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20  t)(pOp - aOp);. 
7a90: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
7aa0: 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a  pOp->p1, pIn1);.
7ab0: 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 63 44    pOp = &aOp[pcD
7ac0: 65 73 74 5d 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  est];.  break;.}
7ad0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61  ../* Opcode:  Ha
7ae0: 6c 74 49 66 4e 75 6c 6c 20 20 50 31 20 50 32 20  ltIfNull  P1 P2 
7af0: 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
7b00: 70 73 69 73 3a 20 69 66 20 72 5b 50 33 5d 3d 6e  psis: if r[P3]=n
7b10: 75 6c 6c 20 68 61 6c 74 0a 2a 2a 0a 2a 2a 20 43  ull halt.**.** C
7b20: 68 65 63 6b 20 74 68 65 20 76 61 6c 75 65 20 69  heck the value i
7b30: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 20  n register P3.  
7b40: 49 66 20 69 74 20 69 73 20 4e 55 4c 4c 20 74 68  If it is NULL th
7b50: 65 6e 20 48 61 6c 74 20 75 73 69 6e 67 0a 2a 2a  en Halt using.**
7b60: 20 70 61 72 61 6d 65 74 65 72 20 50 31 2c 20 50   parameter P1, P
7b70: 32 2c 20 61 6e 64 20 50 34 20 61 73 20 69 66 20  2, and P4 as if 
7b80: 74 68 69 73 20 77 65 72 65 20 61 20 48 61 6c 74  this were a Halt
7b90: 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 49   instruction.  I
7ba0: 66 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69  f the.** value i
7bb0: 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  n register P3 is
7bc0: 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20   not NULL, then 
7bd0: 74 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20  this routine is 
7be0: 61 20 6e 6f 2d 6f 70 2e 0a 2a 2a 20 54 68 65 20  a no-op..** The 
7bf0: 50 35 20 70 61 72 61 6d 65 74 65 72 20 73 68 6f  P5 parameter sho
7c00: 75 6c 64 20 62 65 20 31 2e 0a 2a 2f 0a 63 61 73  uld be 1..*/.cas
7c10: 65 20 4f 50 5f 48 61 6c 74 49 66 4e 75 6c 6c 3a  e OP_HaltIfNull:
7c20: 20 7b 20 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a   {      /* in3 *
7c30: 2f 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d  /.  pIn3 = &aMem
7c40: 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65  [pOp->p3];.#ifde
7c50: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
7c60: 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 4f 45   if( pOp->p2==OE
7c70: 5f 41 62 6f 72 74 20 29 7b 20 73 71 6c 69 74 65  _Abort ){ sqlite
7c80: 33 56 64 62 65 41 73 73 65 72 74 41 62 6f 72 74  3VdbeAssertAbort
7c90: 61 62 6c 65 28 70 29 3b 20 7d 0a 23 65 6e 64 69  able(p); }.#endi
7ca0: 66 0a 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66  f.  if( (pIn3->f
7cb0: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
7cc0: 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f  ==0 ) break;.  /
7cd0: 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69  * Fall through i
7ce0: 6e 74 6f 20 4f 50 5f 48 61 6c 74 20 2a 2f 0a 7d  nto OP_Halt */.}
7cf0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61  ../* Opcode:  Ha
7d00: 6c 74 20 50 31 20 50 32 20 2a 20 50 34 20 50 35  lt P1 P2 * P4 P5
7d10: 0a 2a 2a 0a 2a 2a 20 45 78 69 74 20 69 6d 6d 65  .**.** Exit imme
7d20: 64 69 61 74 65 6c 79 2e 20 20 41 6c 6c 20 6f 70  diately.  All op
7d30: 65 6e 20 63 75 72 73 6f 72 73 2c 20 65 74 63 20  en cursors, etc 
7d40: 61 72 65 20 63 6c 6f 73 65 64 0a 2a 2a 20 61 75  are closed.** au
7d50: 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2a 0a  tomatically..**.
7d60: 2a 2a 20 50 31 20 69 73 20 74 68 65 20 72 65 73  ** P1 is the res
7d70: 75 6c 74 20 63 6f 64 65 20 72 65 74 75 72 6e 65  ult code returne
7d80: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 65 78 65  d by sqlite3_exe
7d90: 63 28 29 2c 20 73 71 6c 69 74 65 33 5f 72 65 73  c(), sqlite3_res
7da0: 65 74 28 29 2c 0a 2a 2a 20 6f 72 20 73 71 6c 69  et(),.** or sqli
7db0: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29 2e 20  te3_finalize(). 
7dc0: 20 46 6f 72 20 61 20 6e 6f 72 6d 61 6c 20 68 61   For a normal ha
7dd0: 6c 74 2c 20 74 68 69 73 20 73 68 6f 75 6c 64 20  lt, this should 
7de0: 62 65 20 53 51 4c 49 54 45 5f 4f 4b 20 28 30 29  be SQLITE_OK (0)
7df0: 2e 0a 2a 2a 20 46 6f 72 20 65 72 72 6f 72 73 2c  ..** For errors,
7e00: 20 69 74 20 63 61 6e 20 62 65 20 73 6f 6d 65 20   it can be some 
7e10: 6f 74 68 65 72 20 76 61 6c 75 65 2e 20 20 49 66  other value.  If
7e20: 20 50 31 21 3d 30 20 74 68 65 6e 20 50 32 20 77   P1!=0 then P2 w
7e30: 69 6c 6c 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a  ill determine.**
7e40: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
7e50: 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20  to rollback the 
7e60: 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74  current transact
7e70: 69 6f 6e 2e 20 20 44 6f 20 6e 6f 74 20 72 6f 6c  ion.  Do not rol
7e80: 6c 62 61 63 6b 0a 2a 2a 20 69 66 20 50 32 3d 3d  lback.** if P2==
7e90: 4f 45 5f 46 61 69 6c 2e 20 44 6f 20 74 68 65 20  OE_Fail. Do the 
7ea0: 72 6f 6c 6c 62 61 63 6b 20 69 66 20 50 32 3d 3d  rollback if P2==
7eb0: 4f 45 5f 52 6f 6c 6c 62 61 63 6b 2e 20 20 49 66  OE_Rollback.  If
7ec0: 20 50 32 3d 3d 4f 45 5f 41 62 6f 72 74 2c 0a 2a   P2==OE_Abort,.*
7ed0: 2a 20 74 68 65 6e 20 62 61 63 6b 20 6f 75 74 20  * then back out 
7ee0: 61 6c 6c 20 63 68 61 6e 67 65 73 20 74 68 61 74  all changes that
7ef0: 20 68 61 76 65 20 6f 63 63 75 72 72 65 64 20 64   have occurred d
7f00: 75 72 69 6e 67 20 74 68 69 73 20 65 78 65 63 75  uring this execu
7f10: 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 56  tion of the.** V
7f20: 44 42 45 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20  DBE, but do not 
7f30: 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61  rollback the tra
7f40: 6e 73 61 63 74 69 6f 6e 2e 20 0a 2a 2a 0a 2a 2a  nsaction. .**.**
7f50: 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 6e 75   If P4 is not nu
7f60: 6c 6c 20 74 68 65 6e 20 69 74 20 69 73 20 61 6e  ll then it is an
7f70: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73   error message s
7f80: 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 50 35 20  tring..**.** P5 
7f90: 69 73 20 61 20 76 61 6c 75 65 20 62 65 74 77 65  is a value betwe
7fa0: 65 6e 20 30 20 61 6e 64 20 34 2c 20 69 6e 63 6c  en 0 and 4, incl
7fb0: 75 73 69 76 65 2c 20 74 68 61 74 20 6d 6f 64 69  usive, that modi
7fc0: 66 69 65 73 20 74 68 65 20 50 34 20 73 74 72 69  fies the P4 stri
7fd0: 6e 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 30 3a 20  ng..**.**    0: 
7fe0: 20 28 6e 6f 20 63 68 61 6e 67 65 29 0a 2a 2a 20   (no change).** 
7ff0: 20 20 20 31 3a 20 20 4e 4f 54 20 4e 55 4c 4c 20     1:  NOT NULL 
8000: 63 6f 6e 74 72 61 69 6e 74 20 66 61 69 6c 65 64  contraint failed
8010: 3a 20 50 34 0a 2a 2a 20 20 20 20 32 3a 20 20 55  : P4.**    2:  U
8020: 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74  NIQUE constraint
8030: 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20   failed: P4.**  
8040: 20 20 33 3a 20 20 43 48 45 43 4b 20 63 6f 6e 73    3:  CHECK cons
8050: 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50  traint failed: P
8060: 34 0a 2a 2a 20 20 20 20 34 3a 20 20 46 4f 52 45  4.**    4:  FORE
8070: 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69  IGN KEY constrai
8080: 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a  nt failed: P4.**
8090: 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 74  .** If P5 is not
80a0: 20 7a 65 72 6f 20 61 6e 64 20 50 34 20 69 73 20   zero and P4 is 
80b0: 4e 55 4c 4c 2c 20 74 68 65 6e 20 65 76 65 72 79  NULL, then every
80c0: 74 68 69 6e 67 20 61 66 74 65 72 20 74 68 65 20  thing after the 
80d0: 22 3a 22 20 69 73 0a 2a 2a 20 6f 6d 69 74 74 65  ":" is.** omitte
80e0: 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 69  d..**.** There i
80f0: 73 20 61 6e 20 69 6d 70 6c 69 65 64 20 22 48 61  s an implied "Ha
8100: 6c 74 20 30 20 30 20 30 22 20 69 6e 73 74 72 75  lt 0 0 0" instru
8110: 63 74 69 6f 6e 20 69 6e 73 65 72 74 65 64 20 61  ction inserted a
8120: 74 20 74 68 65 20 76 65 72 79 20 65 6e 64 20 6f  t the very end o
8130: 66 0a 2a 2a 20 65 76 65 72 79 20 70 72 6f 67 72  f.** every progr
8140: 61 6d 2e 20 20 53 6f 20 61 20 6a 75 6d 70 20 70  am.  So a jump p
8150: 61 73 74 20 74 68 65 20 6c 61 73 74 20 69 6e 73  ast the last ins
8160: 74 72 75 63 74 69 6f 6e 20 6f 66 20 74 68 65 20  truction of the 
8170: 70 72 6f 67 72 61 6d 0a 2a 2a 20 69 73 20 74 68  program.** is th
8180: 65 20 73 61 6d 65 20 61 73 20 65 78 65 63 75 74  e same as execut
8190: 69 6e 67 20 48 61 6c 74 2e 0a 2a 2f 0a 63 61 73  ing Halt..*/.cas
81a0: 65 20 4f 50 5f 48 61 6c 74 3a 20 7b 0a 20 20 56  e OP_Halt: {.  V
81b0: 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65  dbeFrame *pFrame
81c0: 3b 0a 20 20 69 6e 74 20 70 63 78 3b 0a 0a 20 20  ;.  int pcx;..  
81d0: 70 63 78 20 3d 20 28 69 6e 74 29 28 70 4f 70 20  pcx = (int)(pOp 
81e0: 2d 20 61 4f 70 29 3b 0a 23 69 66 64 65 66 20 53  - aOp);.#ifdef S
81f0: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66  QLITE_DEBUG.  if
8200: 28 20 70 4f 70 2d 3e 70 32 3d 3d 4f 45 5f 41 62  ( pOp->p2==OE_Ab
8210: 6f 72 74 20 29 7b 20 73 71 6c 69 74 65 33 56 64  ort ){ sqlite3Vd
8220: 62 65 41 73 73 65 72 74 41 62 6f 72 74 61 62 6c  beAssertAbortabl
8230: 65 28 70 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20  e(p); }.#endif. 
8240: 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 53 51   if( pOp->p1==SQ
8250: 4c 49 54 45 5f 4f 4b 20 26 26 20 70 2d 3e 70 46  LITE_OK && p->pF
8260: 72 61 6d 65 20 29 7b 0a 20 20 20 20 2f 2a 20 48  rame ){.    /* H
8270: 61 6c 74 20 74 68 65 20 73 75 62 2d 70 72 6f 67  alt the sub-prog
8280: 72 61 6d 2e 20 52 65 74 75 72 6e 20 63 6f 6e 74  ram. Return cont
8290: 72 6f 6c 20 74 6f 20 74 68 65 20 70 61 72 65 6e  rol to the paren
82a0: 74 20 66 72 61 6d 65 2e 20 2a 2f 0a 20 20 20 20  t frame. */.    
82b0: 70 46 72 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61  pFrame = p->pFra
82c0: 6d 65 3b 0a 20 20 20 20 70 2d 3e 70 46 72 61 6d  me;.    p->pFram
82d0: 65 20 3d 20 70 46 72 61 6d 65 2d 3e 70 50 61 72  e = pFrame->pPar
82e0: 65 6e 74 3b 0a 20 20 20 20 70 2d 3e 6e 46 72 61  ent;.    p->nFra
82f0: 6d 65 2d 2d 3b 0a 20 20 20 20 73 71 6c 69 74 65  me--;.    sqlite
8300: 33 56 64 62 65 53 65 74 43 68 61 6e 67 65 73 28  3VdbeSetChanges(
8310: 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b  db, p->nChange);
8320: 0a 20 20 20 20 70 63 78 20 3d 20 73 71 6c 69 74  .    pcx = sqlit
8330: 65 33 56 64 62 65 46 72 61 6d 65 52 65 73 74 6f  e3VdbeFrameResto
8340: 72 65 28 70 46 72 61 6d 65 29 3b 0a 20 20 20 20  re(pFrame);.    
8350: 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 4f 45 5f  if( pOp->p2==OE_
8360: 49 67 6e 6f 72 65 20 29 7b 0a 20 20 20 20 20 20  Ignore ){.      
8370: 2f 2a 20 49 6e 73 74 72 75 63 74 69 6f 6e 20 70  /* Instruction p
8380: 63 78 20 69 73 20 74 68 65 20 4f 50 5f 50 72 6f  cx is the OP_Pro
8390: 67 72 61 6d 20 74 68 61 74 20 69 6e 76 6f 6b 65  gram that invoke
83a0: 64 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61  d the sub-progra
83b0: 6d 20 0a 20 20 20 20 20 20 2a 2a 20 63 75 72 72  m .      ** curr
83c0: 65 6e 74 6c 79 20 62 65 69 6e 67 20 68 61 6c 74  ently being halt
83d0: 65 64 2e 20 49 66 20 74 68 65 20 70 32 20 69 6e  ed. If the p2 in
83e0: 73 74 72 75 63 74 69 6f 6e 20 6f 66 20 74 68 69  struction of thi
83f0: 73 20 4f 50 5f 48 61 6c 74 0a 20 20 20 20 20 20  s OP_Halt.      
8400: 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  ** instruction i
8410: 73 20 73 65 74 20 74 6f 20 4f 45 5f 49 67 6e 6f  s set to OE_Igno
8420: 72 65 2c 20 74 68 65 6e 20 74 68 65 20 73 75 62  re, then the sub
8430: 2d 70 72 6f 67 72 61 6d 20 69 73 20 74 68 72 6f  -program is thro
8440: 77 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20 61 6e  wing.      ** an
8450: 20 49 47 4e 4f 52 45 20 65 78 63 65 70 74 69 6f   IGNORE exceptio
8460: 6e 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  n. In this case 
8470: 6a 75 6d 70 20 74 6f 20 74 68 65 20 61 64 64 72  jump to the addr
8480: 65 73 73 20 73 70 65 63 69 66 69 65 64 0a 20 20  ess specified.  
8490: 20 20 20 20 2a 2a 20 61 73 20 74 68 65 20 70 32      ** as the p2
84a0: 20 6f 66 20 74 68 65 20 63 61 6c 6c 69 6e 67 20   of the calling 
84b0: 4f 50 5f 50 72 6f 67 72 61 6d 2e 20 20 2a 2f 0a  OP_Program.  */.
84c0: 20 20 20 20 20 20 70 63 78 20 3d 20 70 2d 3e 61        pcx = p->a
84d0: 4f 70 5b 70 63 78 5d 2e 70 32 2d 31 3b 0a 20 20  Op[pcx].p2-1;.  
84e0: 20 20 7d 0a 20 20 20 20 61 4f 70 20 3d 20 70 2d    }.    aOp = p-
84f0: 3e 61 4f 70 3b 0a 20 20 20 20 61 4d 65 6d 20 3d  >aOp;.    aMem =
8500: 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 70 4f   p->aMem;.    pO
8510: 70 20 3d 20 26 61 4f 70 5b 70 63 78 5d 3b 0a 20  p = &aOp[pcx];. 
8520: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
8530: 70 2d 3e 72 63 20 3d 20 70 4f 70 2d 3e 70 31 3b  p->rc = pOp->p1;
8540: 0a 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f  .  p->errorActio
8550: 6e 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70 32 3b  n = (u8)pOp->p2;
8560: 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63 78 3b 0a  .  p->pc = pcx;.
8570: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
8580: 35 3c 3d 34 20 29 3b 0a 20 20 69 66 28 20 70 2d  5<=4 );.  if( p-
8590: 3e 72 63 20 29 7b 0a 20 20 20 20 69 66 28 20 70  >rc ){.    if( p
85a0: 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 20 20  Op->p5 ){.      
85b0: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61  static const cha
85c0: 72 20 2a 20 63 6f 6e 73 74 20 61 7a 54 79 70 65  r * const azType
85d0: 5b 5d 20 3d 20 7b 20 22 4e 4f 54 20 4e 55 4c 4c  [] = { "NOT NULL
85e0: 22 2c 20 22 55 4e 49 51 55 45 22 2c 20 22 43 48  ", "UNIQUE", "CH
85f0: 45 43 4b 22 2c 0a 20 20 20 20 20 20 20 20 20 20  ECK",.          
8600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8620: 20 20 20 22 46 4f 52 45 49 47 4e 20 4b 45 59 22     "FOREIGN KEY"
8630: 20 7d 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61   };.      testca
8640: 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29  se( pOp->p5==1 )
8650: 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65  ;.      testcase
8660: 28 20 70 4f 70 2d 3e 70 35 3d 3d 32 20 29 3b 0a  ( pOp->p5==2 );.
8670: 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
8680: 70 4f 70 2d 3e 70 35 3d 3d 33 20 29 3b 0a 20 20  pOp->p5==3 );.  
8690: 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70 4f      testcase( pO
86a0: 70 2d 3e 70 35 3d 3d 34 20 29 3b 0a 20 20 20 20  p->p5==4 );.    
86b0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72    sqlite3VdbeErr
86c0: 6f 72 28 70 2c 20 22 25 73 20 63 6f 6e 73 74 72  or(p, "%s constr
86d0: 61 69 6e 74 20 66 61 69 6c 65 64 22 2c 20 61 7a  aint failed", az
86e0: 54 79 70 65 5b 70 4f 70 2d 3e 70 35 2d 31 5d 29  Type[pOp->p5-1])
86f0: 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d  ;.      if( pOp-
8700: 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 20 20 20  >p4.z ){.       
8710: 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71   p->zErrMsg = sq
8720: 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c  lite3MPrintf(db,
8730: 20 22 25 7a 3a 20 25 73 22 2c 20 70 2d 3e 7a 45   "%z: %s", p->zE
8740: 72 72 4d 73 67 2c 20 70 4f 70 2d 3e 70 34 2e 7a  rrMsg, pOp->p4.z
8750: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
8760: 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69  else{.      sqli
8770: 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20  te3VdbeError(p, 
8780: 22 25 73 22 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  "%s", pOp->p4.z)
8790: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
87a0: 74 65 33 5f 6c 6f 67 28 70 4f 70 2d 3e 70 31 2c  te3_log(pOp->p1,
87b0: 20 22 61 62 6f 72 74 20 61 74 20 25 64 20 69 6e   "abort at %d in
87c0: 20 5b 25 73 5d 3a 20 25 73 22 2c 20 70 63 78 2c   [%s]: %s", pcx,
87d0: 20 70 2d 3e 7a 53 71 6c 2c 20 70 2d 3e 7a 45 72   p->zSql, p->zEr
87e0: 72 4d 73 67 29 3b 0a 20 20 7d 0a 20 20 72 63 20  rMsg);.  }.  rc 
87f0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c  = sqlite3VdbeHal
8800: 74 28 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20  t(p);.  assert( 
8810: 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20  rc==SQLITE_BUSY 
8820: 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  || rc==SQLITE_OK
8830: 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 45   || rc==SQLITE_E
8840: 52 52 4f 52 20 29 3b 0a 20 20 69 66 28 20 72 63  RROR );.  if( rc
8850: 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b  ==SQLITE_BUSY ){
8860: 0a 20 20 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c  .    p->rc = SQL
8870: 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73  ITE_BUSY;.  }els
8880: 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  e{.    assert( r
8890: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c==SQLITE_OK || 
88a0: 28 70 2d 3e 72 63 26 30 78 66 66 29 3d 3d 53 51  (p->rc&0xff)==SQ
88b0: 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20  LITE_CONSTRAINT 
88c0: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  );.    assert( r
88d0: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c==SQLITE_OK || 
88e0: 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  db->nDeferredCon
88f0: 73 3e 30 20 7c 7c 20 64 62 2d 3e 6e 44 65 66 65  s>0 || db->nDefe
8900: 72 72 65 64 49 6d 6d 43 6f 6e 73 3e 30 20 29 3b  rredImmCons>0 );
8910: 0a 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63 20  .    rc = p->rc 
8920: 3f 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 3a  ? SQLITE_ERROR :
8930: 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20   SQLITE_DONE;.  
8940: 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65  }.  goto vdbe_re
8950: 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  turn;.}../* Opco
8960: 64 65 3a 20 49 6e 74 65 67 65 72 20 50 31 20 50  de: Integer P1 P
8970: 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
8980: 73 69 73 3a 20 72 5b 50 32 5d 3d 50 31 0a 2a 2a  sis: r[P2]=P1.**
8990: 0a 2a 2a 20 54 68 65 20 33 32 2d 62 69 74 20 69  .** The 32-bit i
89a0: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50 31 20  nteger value P1 
89b0: 69 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f 20  is written into 
89c0: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a  register P2..*/.
89d0: 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 65 72 3a  case OP_Integer:
89e0: 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75   {         /* ou
89f0: 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 6f  t2 */.  pOut = o
8a00: 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
8a10: 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75   pOp);.  pOut->u
8a20: 2e 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  .i = pOp->p1;.  
8a30: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
8a40: 6f 64 65 3a 20 49 6e 74 36 34 20 2a 20 50 32 20  ode: Int64 * P2 
8a50: 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  * P4 *.** Synops
8a60: 69 73 3a 20 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a  is: r[P2]=P4.**.
8a70: 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
8a80: 65 72 20 74 6f 20 61 20 36 34 2d 62 69 74 20 69  er to a 64-bit i
8a90: 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2a  nteger value..**
8aa0: 20 57 72 69 74 65 20 74 68 61 74 20 76 61 6c 75   Write that valu
8ab0: 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
8ac0: 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  P2..*/.case OP_I
8ad0: 6e 74 36 34 3a 20 7b 20 20 20 20 20 20 20 20 20  nt64: {         
8ae0: 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70    /* out2 */.  p
8af0: 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
8b00: 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
8b10: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
8b20: 70 49 36 34 21 3d 30 20 29 3b 0a 20 20 70 4f 75  pI64!=0 );.  pOu
8b30: 74 2d 3e 75 2e 69 20 3d 20 2a 70 4f 70 2d 3e 70  t->u.i = *pOp->p
8b40: 34 2e 70 49 36 34 3b 0a 20 20 62 72 65 61 6b 3b  4.pI64;.  break;
8b50: 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .}..#ifndef SQLI
8b60: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
8b70: 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65  _POINT./* Opcode
8b80: 3a 20 52 65 61 6c 20 2a 20 50 32 20 2a 20 50 34  : Real * P2 * P4
8b90: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
8ba0: 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50  r[P2]=P4.**.** P
8bb0: 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
8bc0: 6f 20 61 20 36 34 2d 62 69 74 20 66 6c 6f 61 74  o a 64-bit float
8bd0: 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e  ing point value.
8be0: 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20 76  .** Write that v
8bf0: 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74  alue into regist
8c00: 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
8c10: 50 5f 52 65 61 6c 3a 20 7b 20 20 20 20 20 20 20  P_Real: {       
8c20: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
8c30: 54 4b 5f 46 4c 4f 41 54 2c 20 6f 75 74 32 20 2a  TK_FLOAT, out2 *
8c40: 2f 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  /.  pOut = out2P
8c50: 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
8c60: 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  );.  pOut->flags
8c70: 20 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 61   = MEM_Real;.  a
8c80: 73 73 65 72 74 28 20 21 73 71 6c 69 74 65 33 49  ssert( !sqlite3I
8c90: 73 4e 61 4e 28 2a 70 4f 70 2d 3e 70 34 2e 70 52  sNaN(*pOp->p4.pR
8ca0: 65 61 6c 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e  eal) );.  pOut->
8cb0: 75 2e 72 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70  u.r = *pOp->p4.p
8cc0: 52 65 61 6c 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Real;.  break;.}
8cd0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f  .#endif../* Opco
8ce0: 64 65 3a 20 53 74 72 69 6e 67 38 20 2a 20 50 32  de: String8 * P2
8cf0: 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
8d00: 73 69 73 3a 20 72 5b 50 32 5d 3d 27 50 34 27 0a  sis: r[P2]='P4'.
8d10: 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20  **.** P4 points 
8d20: 74 6f 20 61 20 6e 75 6c 20 74 65 72 6d 69 6e 61  to a nul termina
8d30: 74 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67  ted UTF-8 string
8d40: 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73  . This opcode is
8d50: 20 74 72 61 6e 73 66 6f 72 6d 65 64 20 0a 2a 2a   transformed .**
8d60: 20 69 6e 74 6f 20 61 20 53 74 72 69 6e 67 20 6f   into a String o
8d70: 70 63 6f 64 65 20 62 65 66 6f 72 65 20 69 74 20  pcode before it 
8d80: 69 73 20 65 78 65 63 75 74 65 64 20 66 6f 72 20  is executed for 
8d90: 74 68 65 20 66 69 72 73 74 20 74 69 6d 65 2e 20  the first time. 
8da0: 20 44 75 72 69 6e 67 0a 2a 2a 20 74 68 69 73 20   During.** this 
8db0: 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 2c 20  transformation, 
8dc0: 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 73 74  the length of st
8dd0: 72 69 6e 67 20 50 34 20 69 73 20 63 6f 6d 70 75  ring P4 is compu
8de0: 74 65 64 20 61 6e 64 20 73 74 6f 72 65 64 0a 2a  ted and stored.*
8df0: 2a 20 61 73 20 74 68 65 20 50 31 20 70 61 72 61  * as the P1 para
8e00: 6d 65 74 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f  meter..*/.case O
8e10: 50 5f 53 74 72 69 6e 67 38 3a 20 7b 20 20 20 20  P_String8: {    
8e20: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
8e30: 54 4b 5f 53 54 52 49 4e 47 2c 20 6f 75 74 32 20  TK_STRING, out2 
8e40: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
8e50: 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70  ->p4.z!=0 );.  p
8e60: 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
8e70: 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
8e80: 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50  pOp->opcode = OP
8e90: 5f 53 74 72 69 6e 67 3b 0a 20 20 70 4f 70 2d 3e  _String;.  pOp->
8ea0: 70 31 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c  p1 = sqlite3Strl
8eb0: 65 6e 33 30 28 70 4f 70 2d 3e 70 34 2e 7a 29 3b  en30(pOp->p4.z);
8ec0: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
8ed0: 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 69 66  _OMIT_UTF16.  if
8ee0: 28 20 65 6e 63 6f 64 69 6e 67 21 3d 53 51 4c 49  ( encoding!=SQLI
8ef0: 54 45 5f 55 54 46 38 20 29 7b 0a 20 20 20 20 72  TE_UTF8 ){.    r
8f00: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  c = sqlite3VdbeM
8f10: 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20 70  emSetStr(pOut, p
8f20: 4f 70 2d 3e 70 34 2e 7a 2c 20 2d 31 2c 20 53 51  Op->p4.z, -1, SQ
8f30: 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54  LITE_UTF8, SQLIT
8f40: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 61  E_STATIC);.    a
8f50: 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
8f60: 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c 49  E_OK || rc==SQLI
8f70: 54 45 5f 54 4f 4f 42 49 47 20 29 3b 0a 20 20 20  TE_TOOBIG );.   
8f80: 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d   if( SQLITE_OK!=
8f90: 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
8fa0: 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c 20  eEncoding(pOut, 
8fb0: 65 6e 63 6f 64 69 6e 67 29 20 29 20 67 6f 74 6f  encoding) ) goto
8fc0: 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61 73 73   no_mem;.    ass
8fd0: 65 72 74 28 20 70 4f 75 74 2d 3e 73 7a 4d 61 6c  ert( pOut->szMal
8fe0: 6c 6f 63 3e 30 20 26 26 20 70 4f 75 74 2d 3e 7a  loc>0 && pOut->z
8ff0: 4d 61 6c 6c 6f 63 3d 3d 70 4f 75 74 2d 3e 7a 20  Malloc==pOut->z 
9000: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 56  );.    assert( V
9010: 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f  dbeMemDynamic(pO
9020: 75 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20 70 4f  ut)==0 );.    pO
9030: 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 3d 20 30  ut->szMalloc = 0
9040: 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  ;.    pOut->flag
9050: 73 20 7c 3d 20 4d 45 4d 5f 53 74 61 74 69 63 3b  s |= MEM_Static;
9060: 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34  .    if( pOp->p4
9070: 74 79 70 65 3d 3d 50 34 5f 44 59 4e 41 4d 49 43  type==P4_DYNAMIC
9080: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
9090: 33 44 62 46 72 65 65 28 64 62 2c 20 70 4f 70 2d  3DbFree(db, pOp-
90a0: 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a 20 20  >p4.z);.    }.  
90b0: 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20    pOp->p4type = 
90c0: 50 34 5f 44 59 4e 41 4d 49 43 3b 0a 20 20 20 20  P4_DYNAMIC;.    
90d0: 70 4f 70 2d 3e 70 34 2e 7a 20 3d 20 70 4f 75 74  pOp->p4.z = pOut
90e0: 2d 3e 7a 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 31  ->z;.    pOp->p1
90f0: 20 3d 20 70 4f 75 74 2d 3e 6e 3b 0a 20 20 7d 0a   = pOut->n;.  }.
9100: 20 20 74 65 73 74 63 61 73 65 28 20 72 63 3d 3d    testcase( rc==
9110: 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20 29 3b  SQLITE_TOOBIG );
9120: 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70 4f  .#endif.  if( pO
9130: 70 2d 3e 70 31 3e 64 62 2d 3e 61 4c 69 6d 69 74  p->p1>db->aLimit
9140: 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
9150: 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74  NGTH] ){.    got
9160: 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20  o too_big;.  }. 
9170: 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
9180: 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 2f 2a 20 46  ITE_OK );.  /* F
9190: 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
91a0: 68 65 20 6e 65 78 74 20 63 61 73 65 2c 20 4f 50  he next case, OP
91b0: 5f 53 74 72 69 6e 67 20 2a 2f 0a 7d 0a 20 20 0a  _String */.}.  .
91c0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e  /* Opcode: Strin
91d0: 67 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  g P1 P2 P3 P4 P5
91e0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
91f0: 50 32 5d 3d 27 50 34 27 20 28 6c 65 6e 3d 50 31  P2]='P4' (len=P1
9200: 29 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 69  ).**.** The stri
9210: 6e 67 20 76 61 6c 75 65 20 50 34 20 6f 66 20 6c  ng value P4 of l
9220: 65 6e 67 74 68 20 50 31 20 28 62 79 74 65 73 29  ength P1 (bytes)
9230: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
9240: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
9250: 20 49 66 20 50 33 20 69 73 20 6e 6f 74 20 7a 65   If P3 is not ze
9260: 72 6f 20 61 6e 64 20 74 68 65 20 63 6f 6e 74 65  ro and the conte
9270: 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
9280: 33 20 69 73 20 65 71 75 61 6c 20 74 6f 20 50 35  3 is equal to P5
9290: 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 64 61  , then.** the da
92a0: 74 61 74 79 70 65 20 6f 66 20 74 68 65 20 72 65  tatype of the re
92b0: 67 69 73 74 65 72 20 50 32 20 69 73 20 63 6f 6e  gister P2 is con
92c0: 76 65 72 74 65 64 20 74 6f 20 42 4c 4f 42 2e 20  verted to BLOB. 
92d0: 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 69 73 0a   The content is.
92e0: 2a 2a 20 74 68 65 20 73 61 6d 65 20 73 65 71 75  ** the same sequ
92f0: 65 6e 63 65 20 6f 66 20 62 79 74 65 73 2c 20 69  ence of bytes, i
9300: 74 20 69 73 20 6d 65 72 65 6c 79 20 69 6e 74 65  t is merely inte
9310: 72 70 72 65 74 65 64 20 61 73 20 61 20 42 4c 4f  rpreted as a BLO
9320: 42 20 69 6e 73 74 65 61 64 0a 2a 2a 20 6f 66 20  B instead.** of 
9330: 61 20 73 74 72 69 6e 67 2c 20 61 73 20 69 66 20  a string, as if 
9340: 69 74 20 68 61 64 20 62 65 65 6e 20 43 41 53 54  it had been CAST
9350: 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
9360: 73 3a 0a 2a 2a 0a 2a 2a 20 69 66 28 20 50 33 21  s:.**.** if( P3!
9370: 3d 30 20 61 6e 64 20 72 65 67 5b 50 33 5d 3d 3d  =0 and reg[P3]==
9380: 50 35 20 29 20 72 65 67 5b 50 32 5d 20 3a 3d 20  P5 ) reg[P2] := 
9390: 43 41 53 54 28 72 65 67 5b 50 32 5d 20 61 73 20  CAST(reg[P2] as 
93a0: 42 4c 4f 42 29 0a 2a 2f 0a 63 61 73 65 20 4f 50  BLOB).*/.case OP
93b0: 5f 53 74 72 69 6e 67 3a 20 7b 20 20 20 20 20 20  _String: {      
93c0: 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
93d0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
93e0: 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 20  .z!=0 );.  pOut 
93f0: 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
9400: 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74  (p, pOp);.  pOut
9410: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74  ->flags = MEM_St
9420: 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d  r|MEM_Static|MEM
9430: 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a  _Term;.  pOut->z
9440: 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20   = pOp->p4.z;.  
9450: 70 4f 75 74 2d 3e 6e 20 3d 20 70 4f 70 2d 3e 70  pOut->n = pOp->p
9460: 31 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d  1;.  pOut->enc =
9470: 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44   encoding;.  UPD
9480: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
9490: 28 70 4f 75 74 29 3b 0a 23 69 66 6e 64 65 66 20  (pOut);.#ifndef 
94a0: 53 51 4c 49 54 45 5f 4c 49 4b 45 5f 44 4f 45 53  SQLITE_LIKE_DOES
94b0: 4e 54 5f 4d 41 54 43 48 5f 42 4c 4f 42 53 0a 20  NT_MATCH_BLOBS. 
94c0: 20 69 66 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29   if( pOp->p3>0 )
94d0: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
94e0: 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p->p3<=(p->nMem+
94f0: 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20  1 - p->nCursor) 
9500: 29 3b 0a 20 20 20 20 70 49 6e 33 20 3d 20 26 61  );.    pIn3 = &a
9510: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
9520: 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e    assert( pIn3->
9530: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
9540: 29 3b 0a 20 20 20 20 69 66 28 20 70 49 6e 33 2d  );.    if( pIn3-
9550: 3e 75 2e 69 3d 3d 70 4f 70 2d 3e 70 35 20 29 20  >u.i==pOp->p5 ) 
9560: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
9570: 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 61 74 69  M_Blob|MEM_Stati
9580: 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 7d 0a  c|MEM_Term;.  }.
9590: 23 65 6e 64 69 66 0a 20 20 62 72 65 61 6b 3b 0a  #endif.  break;.
95a0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75  }../* Opcode: Nu
95b0: 6c 6c 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ll P1 P2 P3 * *.
95c0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
95d0: 32 2e 2e 50 33 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a  2..P3]=NULL.**.*
95e0: 2a 20 57 72 69 74 65 20 61 20 4e 55 4c 4c 20 69  * Write a NULL i
95f0: 6e 74 6f 20 72 65 67 69 73 74 65 72 73 20 50 32  nto registers P2
9600: 2e 20 20 49 66 20 50 33 20 67 72 65 61 74 65 72  .  If P3 greater
9610: 20 74 68 61 6e 20 50 32 2c 20 74 68 65 6e 20 61   than P2, then a
9620: 6c 73 6f 20 77 72 69 74 65 0a 2a 2a 20 4e 55 4c  lso write.** NUL
9630: 4c 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  L into register 
9640: 50 33 20 61 6e 64 20 65 76 65 72 79 20 72 65 67  P3 and every reg
9650: 69 73 74 65 72 20 69 6e 20 62 65 74 77 65 65 6e  ister in between
9660: 20 50 32 20 61 6e 64 20 50 33 2e 20 20 49 66 20   P2 and P3.  If 
9670: 50 33 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68  P3.** is less th
9680: 61 6e 20 50 32 20 28 74 79 70 69 63 61 6c 6c 79  an P2 (typically
9690: 20 50 33 20 69 73 20 7a 65 72 6f 29 20 74 68 65   P3 is zero) the
96a0: 6e 20 6f 6e 6c 79 20 72 65 67 69 73 74 65 72 20  n only register 
96b0: 50 32 20 69 73 0a 2a 2a 20 73 65 74 20 74 6f 20  P2 is.** set to 
96c0: 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  NULL..**.** If t
96d0: 68 65 20 50 31 20 76 61 6c 75 65 20 69 73 20 6e  he P1 value is n
96e0: 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61 6c  on-zero, then al
96f0: 73 6f 20 73 65 74 20 74 68 65 20 4d 45 4d 5f 43  so set the MEM_C
9700: 6c 65 61 72 65 64 20 66 6c 61 67 20 73 6f 20 74  leared flag so t
9710: 68 61 74 0a 2a 2a 20 4e 55 4c 4c 20 76 61 6c 75  hat.** NULL valu
9720: 65 73 20 77 69 6c 6c 20 6e 6f 74 20 63 6f 6d 70  es will not comp
9730: 61 72 65 20 65 71 75 61 6c 20 65 76 65 6e 20 69  are equal even i
9740: 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  f SQLITE_NULLEQ 
9750: 69 73 20 73 65 74 20 6f 6e 0a 2a 2a 20 4f 50 5f  is set on.** OP_
9760: 4e 65 20 6f 72 20 4f 50 5f 45 71 2e 0a 2a 2f 0a  Ne or OP_Eq..*/.
9770: 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 3a 20 7b 20  case OP_Null: { 
9780: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
9790: 32 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b 0a  2 */.  int cnt;.
97a0: 20 20 75 31 36 20 6e 75 6c 6c 46 6c 61 67 3b 0a    u16 nullFlag;.
97b0: 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
97c0: 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
97d0: 0a 20 20 63 6e 74 20 3d 20 70 4f 70 2d 3e 70 33  .  cnt = pOp->p3
97e0: 2d 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65  -pOp->p2;.  asse
97f0: 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d  rt( pOp->p3<=(p-
9800: 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
9810: 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 2d  rsor) );.  pOut-
9820: 3e 66 6c 61 67 73 20 3d 20 6e 75 6c 6c 46 6c 61  >flags = nullFla
9830: 67 20 3d 20 70 4f 70 2d 3e 70 31 20 3f 20 28 4d  g = pOp->p1 ? (M
9840: 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 43 6c 65 61  EM_Null|MEM_Clea
9850: 72 65 64 29 20 3a 20 4d 45 4d 5f 4e 75 6c 6c 3b  red) : MEM_Null;
9860: 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 30 3b 0a  .  pOut->n = 0;.
9870: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
9880: 42 55 47 0a 20 20 70 4f 75 74 2d 3e 75 54 65 6d  BUG.  pOut->uTem
9890: 70 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20  p = 0;.#endif.  
98a0: 77 68 69 6c 65 28 20 63 6e 74 3e 30 20 29 7b 0a  while( cnt>0 ){.
98b0: 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 20 20      pOut++;.    
98c0: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
98d0: 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 73  (p, pOut);.    s
98e0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
98f0: 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20  Null(pOut);.    
9900: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e 75  pOut->flags = nu
9910: 6c 6c 46 6c 61 67 3b 0a 20 20 20 20 70 4f 75 74  llFlag;.    pOut
9920: 2d 3e 6e 20 3d 20 30 3b 0a 20 20 20 20 63 6e 74  ->n = 0;.    cnt
9930: 2d 2d 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  --;.  }.  break;
9940: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
9950: 6f 66 74 4e 75 6c 6c 20 50 31 20 2a 20 2a 20 2a  oftNull P1 * * *
9960: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
9970: 72 5b 50 31 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a  r[P1]=NULL.**.**
9980: 20 53 65 74 20 72 65 67 69 73 74 65 72 20 50 31   Set register P1
9990: 20 74 6f 20 68 61 76 65 20 74 68 65 20 76 61 6c   to have the val
99a0: 75 65 20 4e 55 4c 4c 20 61 73 20 73 65 65 6e 20  ue NULL as seen 
99b0: 62 79 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65  by the OP_MakeRe
99c0: 63 6f 72 64 0a 2a 2a 20 69 6e 73 74 72 75 63 74  cord.** instruct
99d0: 69 6f 6e 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20  ion, but do not 
99e0: 66 72 65 65 20 61 6e 79 20 73 74 72 69 6e 67 20  free any string 
99f0: 6f 72 20 62 6c 6f 62 20 6d 65 6d 6f 72 79 20 61  or blob memory a
9a00: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 0a 2a  ssociated with.*
9a10: 2a 20 74 68 65 20 72 65 67 69 73 74 65 72 2c 20  * the register, 
9a20: 73 6f 20 74 68 61 74 20 69 66 20 74 68 65 20 76  so that if the v
9a30: 61 6c 75 65 20 77 61 73 20 61 20 73 74 72 69 6e  alue was a strin
9a40: 67 20 6f 72 20 62 6c 6f 62 20 74 68 61 74 20 77  g or blob that w
9a50: 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79  as.** previously
9a60: 20 63 6f 70 69 65 64 20 75 73 69 6e 67 20 4f 50   copied using OP
9a70: 5f 53 43 6f 70 79 2c 20 74 68 65 20 63 6f 70 69  _SCopy, the copi
9a80: 65 73 20 77 69 6c 6c 20 63 6f 6e 74 69 6e 75 65  es will continue
9a90: 20 74 6f 20 62 65 20 76 61 6c 69 64 2e 0a 2a 2f   to be valid..*/
9aa0: 0a 63 61 73 65 20 4f 50 5f 53 6f 66 74 4e 75 6c  .case OP_SoftNul
9ab0: 6c 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70  l: {.  assert( p
9ac0: 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d  Op->p1>0 && pOp-
9ad0: 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  >p1<=(p->nMem+1 
9ae0: 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  - p->nCursor) );
9af0: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
9b00: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74  pOp->p1];.  pOut
9b10: 2d 3e 66 6c 61 67 73 20 3d 20 28 70 4f 75 74 2d  ->flags = (pOut-
9b20: 3e 66 6c 61 67 73 26 7e 28 4d 45 4d 5f 55 6e 64  >flags&~(MEM_Und
9b30: 65 66 69 6e 65 64 7c 4d 45 4d 5f 41 66 66 4d 61  efined|MEM_AffMa
9b40: 73 6b 29 29 7c 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  sk))|MEM_Null;. 
9b50: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
9b60: 63 6f 64 65 3a 20 42 6c 6f 62 20 50 31 20 50 32  code: Blob P1 P2
9b70: 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
9b80: 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34 20 28 6c  sis: r[P2]=P4 (l
9b90: 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20 50 34 20  en=P1).**.** P4 
9ba0: 70 6f 69 6e 74 73 20 74 6f 20 61 20 62 6c 6f 62  points to a blob
9bb0: 20 6f 66 20 64 61 74 61 20 50 31 20 62 79 74 65   of data P1 byte
9bc0: 73 20 6c 6f 6e 67 2e 20 20 53 74 6f 72 65 20 74  s long.  Store t
9bd0: 68 69 73 0a 2a 2a 20 62 6c 6f 62 20 69 6e 20 72  his.** blob in r
9be0: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63  egister P2..*/.c
9bf0: 61 73 65 20 4f 50 5f 42 6c 6f 62 3a 20 7b 20 20  ase OP_Blob: {  
9c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
9c10: 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73 73 65 72   out2 */.  asser
9c20: 74 28 20 70 4f 70 2d 3e 70 31 20 3c 3d 20 53 51  t( pOp->p1 <= SQ
9c30: 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 20  LITE_MAX_LENGTH 
9c40: 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  );.  pOut = out2
9c50: 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
9c60: 70 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  p);.  sqlite3Vdb
9c70: 65 4d 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c  eMemSetStr(pOut,
9c80: 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70 4f 70 2d   pOp->p4.z, pOp-
9c90: 3e 70 31 2c 20 30 2c 20 30 29 3b 0a 20 20 70 4f  >p1, 0, 0);.  pO
9ca0: 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69  ut->enc = encodi
9cb0: 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  ng;.  UPDATE_MAX
9cc0: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
9cd0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
9ce0: 4f 70 63 6f 64 65 3a 20 56 61 72 69 61 62 6c 65  Opcode: Variable
9cf0: 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
9d00: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
9d10: 3d 70 61 72 61 6d 65 74 65 72 28 50 31 2c 50 34  =parameter(P1,P4
9d20: 29 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72  ).**.** Transfer
9d30: 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 62   the values of b
9d40: 6f 75 6e 64 20 70 61 72 61 6d 65 74 65 72 20 50  ound parameter P
9d50: 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  1 into register 
9d60: 50 32 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  P2.**.** If the 
9d70: 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 61 6d  parameter is nam
9d80: 65 64 2c 20 74 68 65 6e 20 69 74 73 20 6e 61 6d  ed, then its nam
9d90: 65 20 61 70 70 65 61 72 73 20 69 6e 20 50 34 2e  e appears in P4.
9da0: 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65  .** The P4 value
9db0: 20 69 73 20 75 73 65 64 20 62 79 20 73 71 6c 69   is used by sqli
9dc0: 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  te3_bind_paramet
9dd0: 65 72 5f 6e 61 6d 65 28 29 2e 0a 2a 2f 0a 63 61  er_name()..*/.ca
9de0: 73 65 20 4f 50 5f 56 61 72 69 61 62 6c 65 3a 20  se OP_Variable: 
9df0: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
9e00: 6f 75 74 32 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  out2 */.  Mem *p
9e10: 56 61 72 3b 20 20 20 20 20 20 20 2f 2a 20 56 61  Var;       /* Va
9e20: 6c 75 65 20 62 65 69 6e 67 20 74 72 61 6e 73 66  lue being transf
9e30: 65 72 72 65 64 20 2a 2f 0a 0a 20 20 61 73 73 65  erred */..  asse
9e40: 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26  rt( pOp->p1>0 &&
9e50: 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 56 61   pOp->p1<=p->nVa
9e60: 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
9e70: 4f 70 2d 3e 70 34 2e 7a 3d 3d 30 20 7c 7c 20 70  Op->p4.z==0 || p
9e80: 4f 70 2d 3e 70 34 2e 7a 3d 3d 73 71 6c 69 74 65  Op->p4.z==sqlite
9e90: 33 56 4c 69 73 74 4e 75 6d 54 6f 4e 61 6d 65 28  3VListNumToName(
9ea0: 70 2d 3e 70 56 4c 69 73 74 2c 70 4f 70 2d 3e 70  p->pVList,pOp->p
9eb0: 31 29 20 29 3b 0a 20 20 70 56 61 72 20 3d 20 26  1) );.  pVar = &
9ec0: 70 2d 3e 61 56 61 72 5b 70 4f 70 2d 3e 70 31 20  p->aVar[pOp->p1 
9ed0: 2d 20 31 5d 3b 0a 20 20 69 66 28 20 73 71 6c 69  - 1];.  if( sqli
9ee0: 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67  te3VdbeMemTooBig
9ef0: 28 70 56 61 72 29 20 29 7b 0a 20 20 20 20 67 6f  (pVar) ){.    go
9f00: 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
9f10: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
9f20: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74  Op->p2];.  sqlit
9f30: 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77  e3VdbeMemShallow
9f40: 43 6f 70 79 28 70 4f 75 74 2c 20 70 56 61 72 2c  Copy(pOut, pVar,
9f50: 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20   MEM_Static);.  
9f60: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
9f70: 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65  IZE(pOut);.  bre
9f80: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
9f90: 3a 20 4d 6f 76 65 20 50 31 20 50 32 20 50 33 20  : Move P1 P2 P3 
9fa0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
9fb0: 20 72 5b 50 32 40 50 33 5d 3d 72 5b 50 31 40 50   r[P2@P3]=r[P1@P
9fc0: 33 5d 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68  3].**.** Move th
9fd0: 65 20 50 33 20 76 61 6c 75 65 73 20 69 6e 20 72  e P3 values in r
9fe0: 65 67 69 73 74 65 72 20 50 31 2e 2e 50 31 2b 50  egister P1..P1+P
9ff0: 33 2d 31 20 6f 76 65 72 20 69 6e 74 6f 0a 2a 2a  3-1 over into.**
a000: 20 72 65 67 69 73 74 65 72 73 20 50 32 2e 2e 50   registers P2..P
a010: 32 2b 50 33 2d 31 2e 20 20 52 65 67 69 73 74 65  2+P3-1.  Registe
a020: 72 73 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20 61  rs P1..P1+P3-1 a
a030: 72 65 0a 2a 2a 20 6c 65 66 74 20 68 6f 6c 64 69  re.** left holdi
a040: 6e 67 20 61 20 4e 55 4c 4c 2e 20 20 49 74 20 69  ng a NULL.  It i
a050: 73 20 61 6e 20 65 72 72 6f 72 20 66 6f 72 20 72  s an error for r
a060: 65 67 69 73 74 65 72 20 72 61 6e 67 65 73 0a 2a  egister ranges.*
a070: 2a 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20 61 6e  * P1..P1+P3-1 an
a080: 64 20 50 32 2e 2e 50 32 2b 50 33 2d 31 20 74 6f  d P2..P2+P3-1 to
a090: 20 6f 76 65 72 6c 61 70 2e 20 20 49 74 20 69 73   overlap.  It is
a0a0: 20 61 6e 20 65 72 72 6f 72 0a 2a 2a 20 66 6f 72   an error.** for
a0b0: 20 50 33 20 74 6f 20 62 65 20 6c 65 73 73 20 74   P3 to be less t
a0c0: 68 61 6e 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f  han 1..*/.case O
a0d0: 50 5f 4d 6f 76 65 3a 20 7b 0a 20 20 69 6e 74 20  P_Move: {.  int 
a0e0: 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  n;           /* 
a0f0: 4e 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74  Number of regist
a100: 65 72 73 20 6c 65 66 74 20 74 6f 20 63 6f 70 79  ers left to copy
a110: 20 2a 2f 0a 20 20 69 6e 74 20 70 31 3b 20 20 20   */.  int p1;   
a120: 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
a130: 65 72 20 74 6f 20 63 6f 70 79 20 66 72 6f 6d 20  er to copy from 
a140: 2a 2f 0a 20 20 69 6e 74 20 70 32 3b 20 20 20 20  */.  int p2;    
a150: 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
a160: 72 20 74 6f 20 63 6f 70 79 20 74 6f 20 2a 2f 0a  r to copy to */.
a170: 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  .  n = pOp->p3;.
a180: 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a    p1 = pOp->p1;.
a190: 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a    p2 = pOp->p2;.
a1a0: 20 20 61 73 73 65 72 74 28 20 6e 3e 30 20 26 26    assert( n>0 &&
a1b0: 20 70 31 3e 30 20 26 26 20 70 32 3e 30 20 29 3b   p1>0 && p2>0 );
a1c0: 0a 20 20 61 73 73 65 72 74 28 20 70 31 2b 6e 3c  .  assert( p1+n<
a1d0: 3d 70 32 20 7c 7c 20 70 32 2b 6e 3c 3d 70 31 20  =p2 || p2+n<=p1 
a1e0: 29 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  );..  pIn1 = &aM
a1f0: 65 6d 5b 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d  em[p1];.  pOut =
a200: 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 64 6f   &aMem[p2];.  do
a210: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
a220: 75 74 3c 3d 26 61 4d 65 6d 5b 28 70 2d 3e 6e 4d  ut<=&aMem[(p->nM
a230: 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
a240: 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72  r)] );.    asser
a250: 74 28 20 70 49 6e 31 3c 3d 26 61 4d 65 6d 5b 28  t( pIn1<=&aMem[(
a260: 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
a270: 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20  Cursor)] );.    
a280: 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
a290: 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 20 20  id(pIn1) );.    
a2a0: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
a2b0: 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 73  (p, pOut);.    s
a2c0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76  qlite3VdbeMemMov
a2d0: 65 28 70 4f 75 74 2c 20 70 49 6e 31 29 3b 0a 23  e(pOut, pIn1);.#
a2e0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
a2f0: 55 47 0a 20 20 20 20 69 66 28 20 70 4f 75 74 2d  UG.    if( pOut-
a300: 3e 70 53 63 6f 70 79 46 72 6f 6d 3e 3d 26 61 4d  >pScopyFrom>=&aM
a310: 65 6d 5b 70 31 5d 20 26 26 20 70 4f 75 74 2d 3e  em[p1] && pOut->
a320: 70 53 63 6f 70 79 46 72 6f 6d 3c 70 4f 75 74 20  pScopyFrom<pOut 
a330: 29 7b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 70  ){.      pOut->p
a340: 53 63 6f 70 79 46 72 6f 6d 20 2b 3d 20 70 4f 70  ScopyFrom += pOp
a350: 2d 3e 70 32 20 2d 20 70 31 3b 0a 20 20 20 20 7d  ->p2 - p1;.    }
a360: 0a 23 65 6e 64 69 66 0a 20 20 20 20 44 65 65 70  .#endif.    Deep
a370: 68 65 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74 29  hemeralize(pOut)
a380: 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
a390: 52 41 43 45 28 70 32 2b 2b 2c 20 70 4f 75 74 29  RACE(p2++, pOut)
a3a0: 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20  ;.    pIn1++;.  
a3b0: 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 7d 77 68 69    pOut++;.  }whi
a3c0: 6c 65 28 20 2d 2d 6e 20 29 3b 0a 20 20 62 72 65  le( --n );.  bre
a3d0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
a3e0: 3a 20 43 6f 70 79 20 50 31 20 50 32 20 50 33 20  : Copy P1 P2 P3 
a3f0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
a400: 20 72 5b 50 32 40 50 33 2b 31 5d 3d 72 5b 50 31   r[P2@P3+1]=r[P1
a410: 40 50 33 2b 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b  @P3+1].**.** Mak
a420: 65 20 61 20 63 6f 70 79 20 6f 66 20 72 65 67 69  e a copy of regi
a430: 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 33 20  sters P1..P1+P3 
a440: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 73 20 50  into registers P
a450: 32 2e 2e 50 32 2b 50 33 2e 0a 2a 2a 0a 2a 2a 20  2..P2+P3..**.** 
a460: 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
a470: 20 6d 61 6b 65 73 20 61 20 64 65 65 70 20 63 6f   makes a deep co
a480: 70 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e  py of the value.
a490: 20 20 41 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a    A duplicate.**
a4a0: 20 69 73 20 6d 61 64 65 20 6f 66 20 61 6e 79 20   is made of any 
a4b0: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 63  string or blob c
a4c0: 6f 6e 73 74 61 6e 74 2e 20 20 53 65 65 20 61 6c  onstant.  See al
a4d0: 73 6f 20 4f 50 5f 53 43 6f 70 79 2e 0a 2a 2f 0a  so OP_SCopy..*/.
a4e0: 63 61 73 65 20 4f 50 5f 43 6f 70 79 3a 20 7b 0a  case OP_Copy: {.
a4f0: 20 20 69 6e 74 20 6e 3b 0a 0a 20 20 6e 20 3d 20    int n;..  n = 
a500: 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 49 6e 31 20  pOp->p3;.  pIn1 
a510: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
a520: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
a530: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73  [pOp->p2];.  ass
a540: 65 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20  ert( pOut!=pIn1 
a550: 29 3b 0a 20 20 77 68 69 6c 65 28 20 31 20 29 7b  );.  while( 1 ){
a560: 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  .    memAboutToC
a570: 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a  hange(p, pOut);.
a580: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
a590: 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f  emShallowCopy(pO
a5a0: 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70  ut, pIn1, MEM_Ep
a5b0: 68 65 6d 29 3b 0a 20 20 20 20 44 65 65 70 68 65  hem);.    Deephe
a5c0: 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a  meralize(pOut);.
a5d0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
a5e0: 42 55 47 0a 20 20 20 20 70 4f 75 74 2d 3e 70 53  BUG.    pOut->pS
a5f0: 63 6f 70 79 46 72 6f 6d 20 3d 20 30 3b 0a 23 65  copyFrom = 0;.#e
a600: 6e 64 69 66 0a 20 20 20 20 52 45 47 49 53 54 45  ndif.    REGISTE
a610: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b  R_TRACE(pOp->p2+
a620: 70 4f 70 2d 3e 70 33 2d 6e 2c 20 70 4f 75 74 29  pOp->p3-n, pOut)
a630: 3b 0a 20 20 20 20 69 66 28 20 28 6e 2d 2d 29 3d  ;.    if( (n--)=
a640: 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20  =0 ) break;.    
a650: 70 4f 75 74 2b 2b 3b 0a 20 20 20 20 70 49 6e 31  pOut++;.    pIn1
a660: 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  ++;.  }.  break;
a670: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
a680: 43 6f 70 79 20 50 31 20 50 32 20 2a 20 2a 20 2a  Copy P1 P2 * * *
a690: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
a6a0: 50 32 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  P2]=r[P1].**.** 
a6b0: 4d 61 6b 65 20 61 20 73 68 61 6c 6c 6f 77 20 63  Make a shallow c
a6c0: 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65 72 20  opy of register 
a6d0: 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  P1 into register
a6e0: 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P2..**.** This 
a6f0: 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65  instruction make
a700: 73 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79  s a shallow copy
a710: 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20   of the value.  
a720: 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20  If the value.** 
a730: 69 73 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62  is a string or b
a740: 6c 6f 62 2c 20 74 68 65 6e 20 74 68 65 20 63 6f  lob, then the co
a750: 70 79 20 69 73 20 6f 6e 6c 79 20 61 20 70 6f 69  py is only a poi
a760: 6e 74 65 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6f  nter to the.** o
a770: 72 69 67 69 6e 61 6c 20 61 6e 64 20 68 65 6e 63  riginal and henc
a780: 65 20 69 66 20 74 68 65 20 6f 72 69 67 69 6e 61  e if the origina
a790: 6c 20 63 68 61 6e 67 65 73 20 73 6f 20 77 69 6c  l changes so wil
a7a0: 6c 20 74 68 65 20 63 6f 70 79 2e 0a 2a 2a 20 57  l the copy..** W
a7b0: 6f 72 73 65 2c 20 69 66 20 74 68 65 20 6f 72 69  orse, if the ori
a7c0: 67 69 6e 61 6c 20 69 73 20 64 65 61 6c 6c 6f 63  ginal is dealloc
a7d0: 61 74 65 64 2c 20 74 68 65 20 63 6f 70 79 20 62  ated, the copy b
a7e0: 65 63 6f 6d 65 73 20 69 6e 76 61 6c 69 64 2e 0a  ecomes invalid..
a7f0: 2a 2a 20 54 68 75 73 20 74 68 65 20 70 72 6f 67  ** Thus the prog
a800: 72 61 6d 20 6d 75 73 74 20 67 75 61 72 61 6e 74  ram must guarant
a810: 65 65 20 74 68 61 74 20 74 68 65 20 6f 72 69 67  ee that the orig
a820: 69 6e 61 6c 20 77 69 6c 6c 20 6e 6f 74 20 63 68  inal will not ch
a830: 61 6e 67 65 0a 2a 2a 20 64 75 72 69 6e 67 20 74  ange.** during t
a840: 68 65 20 6c 69 66 65 74 69 6d 65 20 6f 66 20 74  he lifetime of t
a850: 68 65 20 63 6f 70 79 2e 20 20 55 73 65 20 4f 50  he copy.  Use OP
a860: 5f 43 6f 70 79 20 74 6f 20 6d 61 6b 65 20 61 20  _Copy to make a 
a870: 63 6f 6d 70 6c 65 74 65 0a 2a 2a 20 63 6f 70 79  complete.** copy
a880: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 43 6f  ..*/.case OP_SCo
a890: 70 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  py: {           
a8a0: 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49   /* out2 */.  pI
a8b0: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
a8c0: 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  p1];.  pOut = &a
a8d0: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
a8e0: 61 73 73 65 72 74 28 20 70 4f 75 74 21 3d 70 49  assert( pOut!=pI
a8f0: 6e 31 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  n1 );.  sqlite3V
a900: 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70  dbeMemShallowCop
a910: 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45  y(pOut, pIn1, ME
a920: 4d 5f 45 70 68 65 6d 29 3b 0a 23 69 66 64 65 66  M_Ephem);.#ifdef
a930: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
a940: 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d  pOut->pScopyFrom
a950: 20 3d 20 70 49 6e 31 3b 0a 20 20 70 4f 75 74 2d   = pIn1;.  pOut-
a960: 3e 6d 53 63 6f 70 79 46 6c 61 67 73 20 3d 20 70  >mScopyFlags = p
a970: 49 6e 31 2d 3e 66 6c 61 67 73 3b 0a 23 65 6e 64  In1->flags;.#end
a980: 69 66 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  if.  break;.}../
a990: 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 43 6f 70  * Opcode: IntCop
a9a0: 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  y P1 P2 * * *.**
a9b0: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
a9c0: 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 72 61  =r[P1].**.** Tra
a9d0: 6e 73 66 65 72 20 74 68 65 20 69 6e 74 65 67 65  nsfer the intege
a9e0: 72 20 76 61 6c 75 65 20 68 65 6c 64 20 69 6e 20  r value held in 
a9f0: 72 65 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f  register P1 into
aa00: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
aa10: 0a 2a 2a 20 54 68 69 73 20 69 73 20 61 6e 20 6f  .** This is an o
aa20: 70 74 69 6d 69 7a 65 64 20 76 65 72 73 69 6f 6e  ptimized version
aa30: 20 6f 66 20 53 43 6f 70 79 20 74 68 61 74 20 77   of SCopy that w
aa40: 6f 72 6b 73 20 6f 6e 6c 79 20 66 6f 72 20 69 6e  orks only for in
aa50: 74 65 67 65 72 0a 2a 2a 20 76 61 6c 75 65 73 2e  teger.** values.
aa60: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 43  .*/.case OP_IntC
aa70: 6f 70 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20  opy: {          
aa80: 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70    /* out2 */.  p
aa90: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
aaa0: 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
aab0: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
aac0: 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20  EM_Int)!=0 );.  
aad0: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
aae0: 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33  ->p2];.  sqlite3
aaf0: 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28  VdbeMemSetInt64(
ab00: 70 4f 75 74 2c 20 70 49 6e 31 2d 3e 75 2e 69 29  pOut, pIn1->u.i)
ab10: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
ab20: 20 4f 70 63 6f 64 65 3a 20 52 65 73 75 6c 74 52   Opcode: ResultR
ab30: 6f 77 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ow P1 P2 * * *.*
ab40: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6f 75 74 70  * Synopsis: outp
ab50: 75 74 3d 72 5b 50 31 40 50 32 5d 0a 2a 2a 0a 2a  ut=r[P1@P2].**.*
ab60: 2a 20 54 68 65 20 72 65 67 69 73 74 65 72 73 20  * The registers 
ab70: 50 31 20 74 68 72 6f 75 67 68 20 50 31 2b 50 32  P1 through P1+P2
ab80: 2d 31 20 63 6f 6e 74 61 69 6e 20 61 20 73 69 6e  -1 contain a sin
ab90: 67 6c 65 20 72 6f 77 20 6f 66 0a 2a 2a 20 72 65  gle row of.** re
aba0: 73 75 6c 74 73 2e 20 54 68 69 73 20 6f 70 63 6f  sults. This opco
abb0: 64 65 20 63 61 75 73 65 73 20 74 68 65 20 73 71  de causes the sq
abc0: 6c 69 74 65 33 5f 73 74 65 70 28 29 20 63 61 6c  lite3_step() cal
abd0: 6c 20 74 6f 20 74 65 72 6d 69 6e 61 74 65 0a 2a  l to terminate.*
abe0: 2a 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45  * with an SQLITE
abf0: 5f 52 4f 57 20 72 65 74 75 72 6e 20 63 6f 64 65  _ROW return code
ac00: 20 61 6e 64 20 69 74 20 73 65 74 73 20 75 70 20   and it sets up 
ac10: 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  the sqlite3_stmt
ac20: 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 74 6f  .** structure to
ac30: 20 70 72 6f 76 69 64 65 20 61 63 63 65 73 73 20   provide access 
ac40: 74 6f 20 74 68 65 20 72 28 50 31 29 2e 2e 72 28  to the r(P1)..r(
ac50: 50 31 2b 50 32 2d 31 29 20 76 61 6c 75 65 73 20  P1+P2-1) values 
ac60: 61 73 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74  as.** the result
ac70: 20 72 6f 77 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50   row..*/.case OP
ac80: 5f 52 65 73 75 6c 74 52 6f 77 3a 20 7b 0a 20 20  _ResultRow: {.  
ac90: 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 69 6e 74  Mem *pMem;.  int
aca0: 20 69 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   i;.  assert( p-
acb0: 3e 6e 52 65 73 43 6f 6c 75 6d 6e 3d 3d 70 4f 70  >nResColumn==pOp
acc0: 2d 3e 70 32 20 29 3b 0a 20 20 61 73 73 65 72 74  ->p2 );.  assert
acd0: 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20  ( pOp->p1>0 );. 
ace0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
acf0: 2b 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d  +pOp->p2<=(p->nM
ad00: 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
ad10: 72 29 2b 31 20 29 3b 0a 0a 23 69 66 6e 64 65 66  r)+1 );..#ifndef
ad20: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
ad30: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20  GRESS_CALLBACK. 
ad40: 20 2f 2a 20 52 75 6e 20 74 68 65 20 70 72 6f 67   /* Run the prog
ad50: 72 65 73 73 20 63 6f 75 6e 74 65 72 20 6a 75 73  ress counter jus
ad60: 74 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69  t before returni
ad70: 6e 67 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64  ng..  */.  if( d
ad80: 62 2d 3e 78 50 72 6f 67 72 65 73 73 21 3d 30 0a  b->xProgress!=0.
ad90: 20 20 20 26 26 20 6e 56 6d 53 74 65 70 3e 3d 6e     && nVmStep>=n
ada0: 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 0a 20  ProgressLimit . 
adb0: 20 20 26 26 20 64 62 2d 3e 78 50 72 6f 67 72 65    && db->xProgre
adc0: 73 73 28 64 62 2d 3e 70 50 72 6f 67 72 65 73 73  ss(db->pProgress
add0: 41 72 67 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20  Arg)!=0.  ){.   
ade0: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54   rc = SQLITE_INT
adf0: 45 52 52 55 50 54 3b 0a 20 20 20 20 67 6f 74 6f  ERRUPT;.    goto
ae00: 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
ae10: 72 6f 72 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  ror;.  }.#endif.
ae20: 0a 20 20 2f 2a 20 49 66 20 74 68 69 73 20 73 74  .  /* If this st
ae30: 61 74 65 6d 65 6e 74 20 68 61 73 20 76 69 6f 6c  atement has viol
ae40: 61 74 65 64 20 69 6d 6d 65 64 69 61 74 65 20 66  ated immediate f
ae50: 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
ae60: 72 61 69 6e 74 73 2c 20 64 6f 0a 20 20 2a 2a 20  raints, do.  ** 
ae70: 6e 6f 74 20 72 65 74 75 72 6e 20 74 68 65 20 6e  not return the n
ae80: 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 6d 6f  umber of rows mo
ae90: 64 69 66 69 65 64 2e 20 41 6e 64 20 64 6f 20 6e  dified. And do n
aea0: 6f 74 20 52 45 4c 45 41 53 45 20 74 68 65 20 73  ot RELEASE the s
aeb0: 74 61 74 65 6d 65 6e 74 0a 20 20 2a 2a 20 74 72  tatement.  ** tr
aec0: 61 6e 73 61 63 74 69 6f 6e 2e 20 49 74 20 6e 65  ansaction. It ne
aed0: 65 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64  eds to be rolled
aee0: 20 62 61 63 6b 2e 20 20 2a 2f 0a 20 20 69 66 28   back.  */.  if(
aef0: 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 28 72 63 20   SQLITE_OK!=(rc 
af00: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65  = sqlite3VdbeChe
af10: 63 6b 46 6b 28 70 2c 20 30 29 29 20 29 7b 0a 20  ckFk(p, 0)) ){. 
af20: 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 66     assert( db->f
af30: 6c 61 67 73 26 53 51 4c 49 54 45 5f 43 6f 75 6e  lags&SQLITE_Coun
af40: 74 52 6f 77 73 20 29 3b 0a 20 20 20 20 61 73 73  tRows );.    ass
af50: 65 72 74 28 20 70 2d 3e 75 73 65 73 53 74 6d 74  ert( p->usesStmt
af60: 4a 6f 75 72 6e 61 6c 20 29 3b 0a 20 20 20 20 67  Journal );.    g
af70: 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
af80: 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f  _error;.  }..  /
af90: 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f  * If the SQLITE_
afa0: 43 6f 75 6e 74 52 6f 77 73 20 66 6c 61 67 20 69  CountRows flag i
afb0: 73 20 73 65 74 20 69 6e 20 73 71 6c 69 74 65 33  s set in sqlite3
afc0: 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65  .flags mask, the
afd0: 6e 20 0a 20 20 2a 2a 20 44 4d 4c 20 73 74 61 74  n .  ** DML stat
afe0: 65 6d 65 6e 74 73 20 69 6e 76 6f 6b 65 20 74 68  ements invoke th
aff0: 69 73 20 6f 70 63 6f 64 65 20 74 6f 20 72 65 74  is opcode to ret
b000: 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  urn the number o
b010: 66 20 72 6f 77 73 20 0a 20 20 2a 2a 20 6d 6f 64  f rows .  ** mod
b020: 69 66 69 65 64 20 74 6f 20 74 68 65 20 75 73 65  ified to the use
b030: 72 2e 20 54 68 69 73 20 69 73 20 74 68 65 20 6f  r. This is the o
b040: 6e 6c 79 20 77 61 79 20 74 68 61 74 20 61 20 56  nly way that a V
b050: 4d 20 74 68 61 74 0a 20 20 2a 2a 20 6f 70 65 6e  M that.  ** open
b060: 73 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72  s a statement tr
b070: 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 69 6e  ansaction may in
b080: 76 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64 65  voke this opcode
b090: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 63  ..  **.  ** In c
b0a0: 61 73 65 20 74 68 69 73 20 69 73 20 73 75 63 68  ase this is such
b0b0: 20 61 20 73 74 61 74 65 6d 65 6e 74 2c 20 63 6c   a statement, cl
b0c0: 6f 73 65 20 61 6e 79 20 73 74 61 74 65 6d 65 6e  ose any statemen
b0d0: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20  t transaction.  
b0e0: 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20 74 68 69  ** opened by thi
b0f0: 73 20 56 4d 20 62 65 66 6f 72 65 20 72 65 74 75  s VM before retu
b100: 72 6e 69 6e 67 20 63 6f 6e 74 72 6f 6c 20 74 6f  rning control to
b110: 20 74 68 65 20 75 73 65 72 2e 20 54 68 69 73 20   the user. This 
b120: 69 73 20 74 6f 0a 20 20 2a 2a 20 65 6e 73 75 72  is to.  ** ensur
b130: 65 20 74 68 61 74 20 73 74 61 74 65 6d 65 6e 74  e that statement
b140: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 61 72  -transactions ar
b150: 65 20 61 6c 77 61 79 73 20 6e 65 73 74 65 64 2c  e always nested,
b160: 20 6e 6f 74 20 6f 76 65 72 6c 61 70 70 69 6e 67   not overlapping
b170: 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 6f 70  ..  ** If the op
b180: 65 6e 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61  en statement-tra
b190: 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20  nsaction is not 
b1a0: 63 6c 6f 73 65 64 20 68 65 72 65 2c 20 74 68 65  closed here, the
b1b0: 6e 20 74 68 65 20 75 73 65 72 0a 20 20 2a 2a 20  n the user.  ** 
b1c0: 6d 61 79 20 73 74 65 70 20 61 6e 6f 74 68 65 72  may step another
b1d0: 20 56 4d 20 74 68 61 74 20 6f 70 65 6e 73 20 69   VM that opens i
b1e0: 74 73 20 6f 77 6e 20 73 74 61 74 65 6d 65 6e 74  ts own statement
b1f0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 54 68   transaction. Th
b200: 69 73 0a 20 20 2a 2a 20 6d 61 79 20 6c 65 61 64  is.  ** may lead
b210: 20 74 6f 20 6f 76 65 72 6c 61 70 70 69 6e 67 20   to overlapping 
b220: 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
b230: 63 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a  ctions..  **.  *
b240: 2a 20 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20  * The statement 
b250: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e  transaction is n
b260: 65 76 65 72 20 61 20 74 6f 70 2d 6c 65 76 65 6c  ever a top-level
b270: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 48   transaction.  H
b280: 65 6e 63 65 0a 20 20 2a 2a 20 74 68 65 20 52 45  ence.  ** the RE
b290: 4c 45 41 53 45 20 63 61 6c 6c 20 62 65 6c 6f 77  LEASE call below
b2a0: 20 63 61 6e 20 6e 65 76 65 72 20 66 61 69 6c 2e   can never fail.
b2b0: 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  .  */.  assert( 
b2c0: 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30  p->iStatement==0
b2d0: 20 7c 7c 20 64 62 2d 3e 66 6c 61 67 73 26 53 51   || db->flags&SQ
b2e0: 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29  LITE_CountRows )
b2f0: 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
b300: 56 64 62 65 43 6c 6f 73 65 53 74 61 74 65 6d 65  VdbeCloseStateme
b310: 6e 74 28 70 2c 20 53 41 56 45 50 4f 49 4e 54 5f  nt(p, SAVEPOINT_
b320: 52 45 4c 45 41 53 45 29 3b 0a 20 20 61 73 73 65  RELEASE);.  asse
b330: 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
b340: 4b 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e 76 61 6c  K );..  /* Inval
b350: 69 64 61 74 65 20 61 6c 6c 20 65 70 68 65 6d 65  idate all epheme
b360: 72 61 6c 20 63 75 72 73 6f 72 20 72 6f 77 20 63  ral cursor row c
b370: 61 63 68 65 73 20 2a 2f 0a 20 20 70 2d 3e 63 61  aches */.  p->ca
b380: 63 68 65 43 74 72 20 3d 20 28 70 2d 3e 63 61 63  cheCtr = (p->cac
b390: 68 65 43 74 72 20 2b 20 32 29 7c 31 3b 0a 0a 20  heCtr + 2)|1;.. 
b3a0: 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68   /* Make sure th
b3b0: 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65  e results of the
b3c0: 20 63 75 72 72 65 6e 74 20 72 6f 77 20 61 72 65   current row are
b3d0: 20 5c 30 30 30 20 74 65 72 6d 69 6e 61 74 65 64   \000 terminated
b3e0: 0a 20 20 2a 2a 20 61 6e 64 20 68 61 76 65 20 61  .  ** and have a
b3f0: 6e 20 61 73 73 69 67 6e 65 64 20 74 79 70 65 2e  n assigned type.
b400: 20 20 54 68 65 20 72 65 73 75 6c 74 73 20 61 72    The results ar
b410: 65 20 64 65 2d 65 70 68 65 6d 65 72 61 6c 69 7a  e de-ephemeraliz
b420: 65 64 20 61 73 0a 20 20 2a 2a 20 61 20 73 69 64  ed as.  ** a sid
b430: 65 20 65 66 66 65 63 74 2e 0a 20 20 2a 2f 0a 20  e effect..  */. 
b440: 20 70 4d 65 6d 20 3d 20 70 2d 3e 70 52 65 73 75   pMem = p->pResu
b450: 6c 74 53 65 74 20 3d 20 26 61 4d 65 6d 5b 70 4f  ltSet = &aMem[pO
b460: 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 69 3d  p->p1];.  for(i=
b470: 30 3b 20 69 3c 70 4f 70 2d 3e 70 32 3b 20 69 2b  0; i<pOp->p2; i+
b480: 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  +){.    assert( 
b490: 6d 65 6d 49 73 56 61 6c 69 64 28 26 70 4d 65 6d  memIsValid(&pMem
b4a0: 5b 69 5d 29 20 29 3b 0a 20 20 20 20 44 65 65 70  [i]) );.    Deep
b4b0: 68 65 6d 65 72 61 6c 69 7a 65 28 26 70 4d 65 6d  hemeralize(&pMem
b4c0: 5b 69 5d 29 3b 0a 20 20 20 20 61 73 73 65 72 74  [i]);.    assert
b4d0: 28 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73  ( (pMem[i].flags
b4e0: 20 26 20 4d 45 4d 5f 45 70 68 65 6d 29 3d 3d 30   & MEM_Ephem)==0
b4f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20  .            || 
b500: 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73 20 26  (pMem[i].flags &
b510: 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c   (MEM_Str|MEM_Bl
b520: 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 73  ob))==0 );.    s
b530: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e 75 6c  qlite3VdbeMemNul
b540: 54 65 72 6d 69 6e 61 74 65 28 26 70 4d 65 6d 5b  Terminate(&pMem[
b550: 69 5d 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45  i]);.    REGISTE
b560: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2b  R_TRACE(pOp->p1+
b570: 69 2c 20 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20  i, &pMem[i]);.  
b580: 7d 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c  }.  if( db->mall
b590: 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74 6f 20  ocFailed ) goto 
b5a0: 6e 6f 5f 6d 65 6d 3b 0a 0a 20 20 69 66 28 20 64  no_mem;..  if( d
b5b0: 62 2d 3e 6d 54 72 61 63 65 20 26 20 53 51 4c 49  b->mTrace & SQLI
b5c0: 54 45 5f 54 52 41 43 45 5f 52 4f 57 20 29 7b 0a  TE_TRACE_ROW ){.
b5d0: 20 20 20 20 64 62 2d 3e 78 54 72 61 63 65 28 53      db->xTrace(S
b5e0: 51 4c 49 54 45 5f 54 52 41 43 45 5f 52 4f 57 2c  QLITE_TRACE_ROW,
b5f0: 20 64 62 2d 3e 70 54 72 61 63 65 41 72 67 2c 20   db->pTraceArg, 
b600: 70 2c 20 30 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  p, 0);.  }..  /*
b610: 20 52 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 52   Return SQLITE_R
b620: 4f 57 0a 20 20 2a 2f 0a 20 20 70 2d 3e 70 63 20  OW.  */.  p->pc 
b630: 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f  = (int)(pOp - aO
b640: 70 29 20 2b 20 31 3b 0a 20 20 72 63 20 3d 20 53  p) + 1;.  rc = S
b650: 51 4c 49 54 45 5f 52 4f 57 3b 0a 20 20 67 6f 74  QLITE_ROW;.  got
b660: 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d  o vdbe_return;.}
b670: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6e  ../* Opcode: Con
b680: 63 61 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  cat P1 P2 P3 * *
b690: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
b6a0: 50 33 5d 3d 72 5b 50 32 5d 2b 72 5b 50 31 5d 0a  P3]=r[P2]+r[P1].
b6b0: 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 74 65  **.** Add the te
b6c0: 78 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  xt in register P
b6d0: 31 20 6f 6e 74 6f 20 74 68 65 20 65 6e 64 20 6f  1 onto the end o
b6e0: 66 20 74 68 65 20 74 65 78 74 20 69 6e 0a 2a 2a  f the text in.**
b6f0: 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64   register P2 and
b700: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
b710: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
b720: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 74  ..** If either t
b730: 68 65 20 50 31 20 6f 72 20 50 32 20 74 65 78 74  he P1 or P2 text
b740: 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 73   are NULL then s
b750: 74 6f 72 65 20 4e 55 4c 4c 20 69 6e 20 50 33 2e  tore NULL in P3.
b760: 0a 2a 2a 0a 2a 2a 20 20 20 50 33 20 3d 20 50 32  .**.**   P3 = P2
b770: 20 7c 7c 20 50 31 0a 2a 2a 0a 2a 2a 20 49 74 20   || P1.**.** It 
b780: 69 73 20 69 6c 6c 65 67 61 6c 20 66 6f 72 20 50  is illegal for P
b790: 31 20 61 6e 64 20 50 33 20 74 6f 20 62 65 20 74  1 and P3 to be t
b7a0: 68 65 20 73 61 6d 65 20 72 65 67 69 73 74 65 72  he same register
b7b0: 2e 20 53 6f 6d 65 74 69 6d 65 73 2c 0a 2a 2a 20  . Sometimes,.** 
b7c0: 69 66 20 50 33 20 69 73 20 74 68 65 20 73 61 6d  if P3 is the sam
b7d0: 65 20 72 65 67 69 73 74 65 72 20 61 73 20 50 32  e register as P2
b7e0: 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  , the implementa
b7f0: 74 69 6f 6e 20 69 73 20 61 62 6c 65 0a 2a 2a 20  tion is able.** 
b800: 74 6f 20 61 76 6f 69 64 20 61 20 6d 65 6d 63 70  to avoid a memcp
b810: 79 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  y()..*/.case OP_
b820: 43 6f 6e 63 61 74 3a 20 7b 20 20 20 20 20 20 20  Concat: {       
b830: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
b840: 4b 5f 43 4f 4e 43 41 54 2c 20 69 6e 31 2c 20 69  K_CONCAT, in1, i
b850: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36  n2, out3 */.  i6
b860: 34 20 6e 42 79 74 65 3b 0a 0a 20 20 70 49 6e 31  4 nByte;..  pIn1
b870: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
b880: 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  ];.  pIn2 = &aMe
b890: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f  m[pOp->p2];.  pO
b8a0: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
b8b0: 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p3];.  assert( p
b8c0: 49 6e 31 21 3d 70 4f 75 74 20 29 3b 0a 20 20 69  In1!=pOut );.  i
b8d0: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
b8e0: 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26  | pIn2->flags) &
b8f0: 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
b900: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
b910: 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
b920: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69    break;.  }.  i
b930: 66 28 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49  f( ExpandBlob(pI
b940: 6e 31 29 20 7c 7c 20 45 78 70 61 6e 64 42 6c 6f  n1) || ExpandBlo
b950: 62 28 70 49 6e 32 29 20 29 20 67 6f 74 6f 20 6e  b(pIn2) ) goto n
b960: 6f 5f 6d 65 6d 3b 0a 20 20 53 74 72 69 6e 67 69  o_mem;.  Stringi
b970: 66 79 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e  fy(pIn1, encodin
b980: 67 29 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28  g);.  Stringify(
b990: 70 49 6e 32 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  pIn2, encoding);
b9a0: 0a 20 20 6e 42 79 74 65 20 3d 20 70 49 6e 31 2d  .  nByte = pIn1-
b9b0: 3e 6e 20 2b 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20  >n + pIn2->n;.  
b9c0: 69 66 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c  if( nByte>db->aL
b9d0: 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
b9e0: 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20  T_LENGTH] ){.   
b9f0: 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
ba00: 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33   }.  if( sqlite3
ba10: 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74  VdbeMemGrow(pOut
ba20: 2c 20 28 69 6e 74 29 6e 42 79 74 65 2b 32 2c 20  , (int)nByte+2, 
ba30: 70 4f 75 74 3d 3d 70 49 6e 32 29 20 29 7b 0a 20  pOut==pIn2) ){. 
ba40: 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
ba50: 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70 65    }.  MemSetType
ba60: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 53  Flag(pOut, MEM_S
ba70: 74 72 29 3b 0a 20 20 69 66 28 20 70 4f 75 74 21  tr);.  if( pOut!
ba80: 3d 70 49 6e 32 20 29 7b 0a 20 20 20 20 6d 65 6d  =pIn2 ){.    mem
ba90: 63 70 79 28 70 4f 75 74 2d 3e 7a 2c 20 70 49 6e  cpy(pOut->z, pIn
baa0: 32 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 6e 29 3b 0a  2->z, pIn2->n);.
bab0: 20 20 7d 0a 20 20 6d 65 6d 63 70 79 28 26 70 4f    }.  memcpy(&pO
bac0: 75 74 2d 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c 20  ut->z[pIn2->n], 
bad0: 70 49 6e 31 2d 3e 7a 2c 20 70 49 6e 31 2d 3e 6e  pIn1->z, pIn1->n
bae0: 29 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79  );.  pOut->z[nBy
baf0: 74 65 5d 3d 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a  te]=0;.  pOut->z
bb00: 5b 6e 42 79 74 65 2b 31 5d 20 3d 20 30 3b 0a 20  [nByte+1] = 0;. 
bb10: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20   pOut->flags |= 
bb20: 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74  MEM_Term;.  pOut
bb30: 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74 65  ->n = (int)nByte
bb40: 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20  ;.  pOut->enc = 
bb50: 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41  encoding;.  UPDA
bb60: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
bb70: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
bb80: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64  }../* Opcode: Ad
bb90: 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  d P1 P2 P3 * *.*
bba0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
bbb0: 5d 3d 72 5b 50 31 5d 2b 72 5b 50 32 5d 0a 2a 2a  ]=r[P1]+r[P2].**
bbc0: 0a 2a 2a 20 41 64 64 20 74 68 65 20 76 61 6c 75  .** Add the valu
bbd0: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
bbe0: 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e   to the value in
bbf0: 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20   register P2.** 
bc00: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
bc10: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
bc20: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
bc30: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
bc40: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
bc50: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
bc60: 65 3a 20 4d 75 6c 74 69 70 6c 79 20 50 31 20 50  e: Multiply P1 P
bc70: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
bc80: 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 31  psis: r[P3]=r[P1
bc90: 5d 2a 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 0a 2a 2a  ]*r[P2].**.**.**
bca0: 20 4d 75 6c 74 69 70 6c 79 20 74 68 65 20 76 61   Multiply the va
bcb0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
bcc0: 50 31 20 62 79 20 74 68 65 20 76 61 6c 75 65 20  P1 by the value 
bcd0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
bce0: 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  * and store the 
bcf0: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
bd00: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
bd10: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
bd20: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
bd30: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
bd40: 6f 64 65 3a 20 53 75 62 74 72 61 63 74 20 50 31  ode: Subtract P1
bd50: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
bd60: 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b  nopsis: r[P3]=r[
bd70: 50 32 5d 2d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  P2]-r[P1].**.** 
bd80: 53 75 62 74 72 61 63 74 20 74 68 65 20 76 61 6c  Subtract the val
bd90: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
bda0: 31 20 66 72 6f 6d 20 74 68 65 20 76 61 6c 75 65  1 from the value
bdb0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a   in register P2.
bdc0: 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  ** and store the
bdd0: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
bde0: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
bdf0: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
be00: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
be10: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s NULL..*/./* Op
be20: 63 6f 64 65 3a 20 44 69 76 69 64 65 20 50 31 20  code: Divide P1 
be30: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
be40: 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50  opsis: r[P3]=r[P
be50: 32 5d 2f 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 44  2]/r[P1].**.** D
be60: 69 76 69 64 65 20 74 68 65 20 76 61 6c 75 65 20  ivide the value 
be70: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 62  in register P1 b
be80: 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  y the value in r
be90: 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e  egister P2.** an
bea0: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
beb0: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
bec0: 33 20 28 50 33 3d 50 32 2f 50 31 29 2e 20 49 66  3 (P3=P2/P1). If
bed0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 0a 2a   the value in .*
bee0: 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  * register P1 is
bef0: 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20   zero, then the 
bf00: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 20  result is NULL. 
bf10: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
bf20: 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65  is .** NULL, the
bf30: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
bf40: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .*/./* Opcode: R
bf50: 65 6d 61 69 6e 64 65 72 20 50 31 20 50 32 20 50  emainder P1 P2 P
bf60: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
bf70: 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 25 72  s: r[P3]=r[P2]%r
bf80: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 75  [P1].**.** Compu
bf90: 74 65 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72  te the remainder
bfa0: 20 61 66 74 65 72 20 69 6e 74 65 67 65 72 20 72   after integer r
bfb0: 65 67 69 73 74 65 72 20 50 32 20 69 73 20 64 69  egister P2 is di
bfc0: 76 69 64 65 64 20 62 79 20 0a 2a 2a 20 72 65 67  vided by .** reg
bfd0: 69 73 74 65 72 20 50 31 20 61 6e 64 20 73 74 6f  ister P1 and sto
bfe0: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
bff0: 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 0a 2a   register P3. .*
c000: 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69  * If the value i
c010: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
c020: 20 7a 65 72 6f 20 74 68 65 20 72 65 73 75 6c 74   zero the result
c030: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 20 49 66 20   is NULL..** If 
c040: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
c050: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
c060: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63  lt is NULL..*/.c
c070: 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20  ase OP_Add:     
c080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c090: 20 73 61 6d 65 20 61 73 20 54 4b 5f 50 4c 55 53   same as TK_PLUS
c0a0: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
c0b0: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 75 62 74   */.case OP_Subt
c0c0: 72 61 63 74 3a 20 20 20 20 20 20 20 20 20 20 20  ract:           
c0d0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
c0e0: 5f 4d 49 4e 55 53 2c 20 69 6e 31 2c 20 69 6e 32  _MINUS, in1, in2
c0f0: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
c100: 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 20  P_Multiply:     
c110: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
c120: 20 61 73 20 54 4b 5f 53 54 41 52 2c 20 69 6e 31   as TK_STAR, in1
c130: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
c140: 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 20  ase OP_Divide:  
c150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c160: 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 4c 41 53   same as TK_SLAS
c170: 48 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  H, in1, in2, out
c180: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 6d  3 */.case OP_Rem
c190: 61 69 6e 64 65 72 3a 20 7b 20 20 20 20 20 20 20  ainder: {       
c1a0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
c1b0: 4b 5f 52 45 4d 2c 20 69 6e 31 2c 20 69 6e 32 2c  K_REM, in1, in2,
c1c0: 20 6f 75 74 33 20 2a 2f 0a 20 20 63 68 61 72 20   out3 */.  char 
c1d0: 62 49 6e 74 69 6e 74 3b 20 20 20 2f 2a 20 53 74  bIntint;   /* St
c1e0: 61 72 74 65 64 20 6f 75 74 20 61 73 20 74 77 6f  arted out as two
c1f0: 20 69 6e 74 65 67 65 72 20 6f 70 65 72 61 6e 64   integer operand
c200: 73 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73  s */.  u16 flags
c210: 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6d 62 69 6e  ;      /* Combin
c220: 65 64 20 4d 45 4d 5f 2a 20 66 6c 61 67 73 20 66  ed MEM_* flags f
c230: 72 6f 6d 20 62 6f 74 68 20 69 6e 70 75 74 73 20  rom both inputs 
c240: 2a 2f 0a 20 20 75 31 36 20 74 79 70 65 31 3b 20  */.  u16 type1; 
c250: 20 20 20 20 20 2f 2a 20 4e 75 6d 65 72 69 63 20       /* Numeric 
c260: 74 79 70 65 20 6f 66 20 6c 65 66 74 20 6f 70 65  type of left ope
c270: 72 61 6e 64 20 2a 2f 0a 20 20 75 31 36 20 74 79  rand */.  u16 ty
c280: 70 65 32 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  pe2;      /* Num
c290: 65 72 69 63 20 74 79 70 65 20 6f 66 20 72 69 67  eric type of rig
c2a0: 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  ht operand */.  
c2b0: 69 36 34 20 69 41 3b 20 20 20 20 20 20 20 20 20  i64 iA;         
c2c0: 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65  /* Integer value
c2d0: 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64   of left operand
c2e0: 20 2a 2f 0a 20 20 69 36 34 20 69 42 3b 20 20 20   */.  i64 iB;   
c2f0: 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72        /* Integer
c300: 20 76 61 6c 75 65 20 6f 66 20 72 69 67 68 74 20   value of right 
c310: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75  operand */.  dou
c320: 62 6c 65 20 72 41 3b 20 20 20 20 20 20 2f 2a 20  ble rA;      /* 
c330: 52 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 6c 65  Real value of le
c340: 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  ft operand */.  
c350: 64 6f 75 62 6c 65 20 72 42 3b 20 20 20 20 20 20  double rB;      
c360: 2f 2a 20 52 65 61 6c 20 76 61 6c 75 65 20 6f 66  /* Real value of
c370: 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a   right operand *
c380: 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  /..  pIn1 = &aMe
c390: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 74 79  m[pOp->p1];.  ty
c3a0: 70 65 31 20 3d 20 6e 75 6d 65 72 69 63 54 79 70  pe1 = numericTyp
c3b0: 65 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20  e(pIn1);.  pIn2 
c3c0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
c3d0: 3b 0a 20 20 74 79 70 65 32 20 3d 20 6e 75 6d 65  ;.  type2 = nume
c3e0: 72 69 63 54 79 70 65 28 70 49 6e 32 29 3b 0a 20  ricType(pIn2);. 
c3f0: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
c400: 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 20  p->p3];.  flags 
c410: 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20  = pIn1->flags | 
c420: 70 49 6e 32 2d 3e 66 6c 61 67 73 3b 0a 20 20 69  pIn2->flags;.  i
c430: 66 28 20 28 74 79 70 65 31 20 26 20 74 79 70 65  f( (type1 & type
c440: 32 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20  2 & MEM_Int)!=0 
c450: 29 7b 0a 20 20 20 20 69 41 20 3d 20 70 49 6e 31  ){.    iA = pIn1
c460: 2d 3e 75 2e 69 3b 0a 20 20 20 20 69 42 20 3d 20  ->u.i;.    iB = 
c470: 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 62  pIn2->u.i;.    b
c480: 49 6e 74 69 6e 74 20 3d 20 31 3b 0a 20 20 20 20  Intint = 1;.    
c490: 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63  switch( pOp->opc
c4a0: 6f 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73  ode ){.      cas
c4b0: 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20  e OP_Add:       
c4c0: 69 66 28 20 73 71 6c 69 74 65 33 41 64 64 49 6e  if( sqlite3AddIn
c4d0: 74 36 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f  t64(&iB,iA) ) go
c4e0: 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65  to fp_math;  bre
c4f0: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
c500: 50 5f 53 75 62 74 72 61 63 74 3a 20 20 69 66 28  P_Subtract:  if(
c510: 20 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34   sqlite3SubInt64
c520: 28 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20  (&iB,iA) ) goto 
c530: 66 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b  fp_math;  break;
c540: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 4d  .      case OP_M
c550: 75 6c 74 69 70 6c 79 3a 20 20 69 66 28 20 73 71  ultiply:  if( sq
c560: 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34 28 26 69  lite3MulInt64(&i
c570: 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f  B,iA) ) goto fp_
c580: 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20  math;  break;.  
c590: 20 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69      case OP_Divi
c5a0: 64 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66  de: {.        if
c5b0: 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61  ( iA==0 ) goto a
c5c0: 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74  rithmetic_result
c5d0: 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20  _is_null;.      
c5e0: 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 26 26 20    if( iA==-1 && 
c5f0: 69 42 3d 3d 53 4d 41 4c 4c 45 53 54 5f 49 4e 54  iB==SMALLEST_INT
c600: 36 34 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74  64 ) goto fp_mat
c610: 68 3b 0a 20 20 20 20 20 20 20 20 69 42 20 2f 3d  h;.        iB /=
c620: 20 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65   iA;.        bre
c630: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
c640: 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20    default: {.   
c650: 20 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29       if( iA==0 )
c660: 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63   goto arithmetic
c670: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b  _result_is_null;
c680: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
c690: 3d 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a 20 20  =-1 ) iA = 1;.  
c6a0: 20 20 20 20 20 20 69 42 20 25 3d 20 69 41 3b 0a        iB %= iA;.
c6b0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
c6c0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
c6d0: 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 42 3b   pOut->u.i = iB;
c6e0: 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46  .    MemSetTypeF
c6f0: 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e  lag(pOut, MEM_In
c700: 74 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  t);.  }else if( 
c710: 28 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  (flags & MEM_Nul
c720: 6c 29 21 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74  l)!=0 ){.    got
c730: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
c740: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 7d  ult_is_null;.  }
c750: 65 6c 73 65 7b 0a 20 20 20 20 62 49 6e 74 69 6e  else{.    bIntin
c760: 74 20 3d 20 30 3b 0a 66 70 5f 6d 61 74 68 3a 0a  t = 0;.fp_math:.
c770: 20 20 20 20 72 41 20 3d 20 73 71 6c 69 74 65 33      rA = sqlite3
c780: 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49  VdbeRealValue(pI
c790: 6e 31 29 3b 0a 20 20 20 20 72 42 20 3d 20 73 71  n1);.    rB = sq
c7a0: 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c  lite3VdbeRealVal
c7b0: 75 65 28 70 49 6e 32 29 3b 0a 20 20 20 20 73 77  ue(pIn2);.    sw
c7c0: 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  itch( pOp->opcod
c7d0: 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20  e ){.      case 
c7e0: 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20 20  OP_Add:         
c7f0: 72 42 20 2b 3d 20 72 41 3b 20 20 20 20 20 20 20  rB += rA;       
c800: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
c810: 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20  e OP_Subtract:  
c820: 20 20 72 42 20 2d 3d 20 72 41 3b 20 20 20 20 20    rB -= rA;     
c830: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
c840: 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a  ase OP_Multiply:
c850: 20 20 20 20 72 42 20 2a 3d 20 72 41 3b 20 20 20      rB *= rA;   
c860: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
c870: 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a   case OP_Divide:
c880: 20 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 28 64   {.        /* (d
c890: 6f 75 62 6c 65 29 30 20 49 6e 20 63 61 73 65 20  ouble)0 In case 
c8a0: 6f 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  of SQLITE_OMIT_F
c8b0: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 2e 2e 2e  LOATING_POINT...
c8c0: 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20   */.        if( 
c8d0: 72 41 3d 3d 28 64 6f 75 62 6c 65 29 30 20 29 20  rA==(double)0 ) 
c8e0: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
c8f0: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
c900: 20 20 20 20 20 20 20 20 72 42 20 2f 3d 20 72 41          rB /= rA
c910: 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
c920: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64  .      }.      d
c930: 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20  efault: {.      
c940: 20 20 69 41 20 3d 20 28 69 36 34 29 72 41 3b 0a    iA = (i64)rA;.
c950: 20 20 20 20 20 20 20 20 69 42 20 3d 20 28 69 36          iB = (i6
c960: 34 29 72 42 3b 0a 20 20 20 20 20 20 20 20 69 66  4)rB;.        if
c970: 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61  ( iA==0 ) goto a
c980: 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74  rithmetic_result
c990: 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20  _is_null;.      
c9a0: 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 29 20 69    if( iA==-1 ) i
c9b0: 41 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 72  A = 1;.        r
c9c0: 42 20 3d 20 28 64 6f 75 62 6c 65 29 28 69 42 20  B = (double)(iB 
c9d0: 25 20 69 41 29 3b 0a 20 20 20 20 20 20 20 20 62  % iA);.        b
c9e0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
c9f0: 20 20 7d 0a 23 69 66 64 65 66 20 53 51 4c 49 54    }.#ifdef SQLIT
ca00: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
ca10: 50 4f 49 4e 54 0a 20 20 20 20 70 4f 75 74 2d 3e  POINT.    pOut->
ca20: 75 2e 69 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65  u.i = rB;.    Me
ca30: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
ca40: 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 23 65 6c  t, MEM_Int);.#el
ca50: 73 65 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74  se.    if( sqlit
ca60: 65 33 49 73 4e 61 4e 28 72 42 29 20 29 7b 0a 20  e3IsNaN(rB) ){. 
ca70: 20 20 20 20 20 67 6f 74 6f 20 61 72 69 74 68 6d       goto arithm
ca80: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
ca90: 75 6c 6c 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70  ull;.    }.    p
caa0: 4f 75 74 2d 3e 75 2e 72 20 3d 20 72 42 3b 0a 20  Out->u.r = rB;. 
cab0: 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
cac0: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 52 65 61 6c  g(pOut, MEM_Real
cad0: 29 3b 0a 20 20 20 20 69 66 28 20 28 28 74 79 70  );.    if( ((typ
cae0: 65 31 7c 74 79 70 65 32 29 26 4d 45 4d 5f 52 65  e1|type2)&MEM_Re
caf0: 61 6c 29 3d 3d 30 20 26 26 20 21 62 49 6e 74 69  al)==0 && !bInti
cb00: 6e 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  nt ){.      sqli
cb10: 74 65 33 56 64 62 65 49 6e 74 65 67 65 72 41 66  te3VdbeIntegerAf
cb20: 66 69 6e 69 74 79 28 70 4f 75 74 29 3b 0a 20 20  finity(pOut);.  
cb30: 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20    }.#endif.  }. 
cb40: 20 62 72 65 61 6b 3b 0a 0a 61 72 69 74 68 6d 65   break;..arithme
cb50: 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75  tic_result_is_nu
cb60: 6c 6c 3a 0a 20 20 73 71 6c 69 74 65 33 56 64 62  ll:.  sqlite3Vdb
cb70: 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74  eMemSetNull(pOut
cb80: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
cb90: 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 6c 53 65  * Opcode: CollSe
cba0: 71 20 50 31 20 2a 20 2a 20 50 34 0a 2a 2a 0a 2a  q P1 * * P4.**.*
cbb0: 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
cbc0: 72 20 74 6f 20 61 20 43 6f 6c 6c 53 65 71 20 6f  r to a CollSeq o
cbd0: 62 6a 65 63 74 2e 20 49 66 20 74 68 65 20 6e 65  bject. If the ne
cbe0: 78 74 20 63 61 6c 6c 20 74 6f 20 61 20 75 73 65  xt call to a use
cbf0: 72 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20 6f 72  r function.** or
cc00: 20 61 67 67 72 65 67 61 74 65 20 63 61 6c 6c 73   aggregate calls
cc10: 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e 63 43   sqlite3GetFuncC
cc20: 6f 6c 6c 53 65 71 28 29 2c 20 74 68 69 73 20 63  ollSeq(), this c
cc30: 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
cc40: 65 20 77 69 6c 6c 0a 2a 2a 20 62 65 20 72 65 74  e will.** be ret
cc50: 75 72 6e 65 64 2e 20 54 68 69 73 20 69 73 20 75  urned. This is u
cc60: 73 65 64 20 62 79 20 74 68 65 20 62 75 69 6c 74  sed by the built
cc70: 2d 69 6e 20 6d 69 6e 28 29 2c 20 6d 61 78 28 29  -in min(), max()
cc80: 20 61 6e 64 20 6e 75 6c 6c 69 66 28 29 0a 2a 2a   and nullif().**
cc90: 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a   functions..**.*
cca0: 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 74 20 7a  * If P1 is not z
ccb0: 65 72 6f 2c 20 74 68 65 6e 20 69 74 20 69 73 20  ero, then it is 
ccc0: 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20  a register that 
ccd0: 61 20 73 75 62 73 65 71 75 65 6e 74 20 6d 69 6e  a subsequent min
cce0: 28 29 20 6f 72 0a 2a 2a 20 6d 61 78 28 29 20 61  () or.** max() a
ccf0: 67 67 72 65 67 61 74 65 20 77 69 6c 6c 20 73 65  ggregate will se
cd00: 74 20 74 6f 20 31 20 69 66 20 74 68 65 20 63 75  t to 1 if the cu
cd10: 72 72 65 6e 74 20 72 6f 77 20 69 73 20 6e 6f 74  rrent row is not
cd20: 20 74 68 65 20 6d 69 6e 69 6d 75 6d 20 6f 72 0a   the minimum or.
cd30: 2a 2a 20 6d 61 78 69 6d 75 6d 2e 20 20 54 68 65  ** maximum.  The
cd40: 20 50 31 20 72 65 67 69 73 74 65 72 20 69 73 20   P1 register is 
cd50: 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 30  initialized to 0
cd60: 20 62 79 20 74 68 69 73 20 69 6e 73 74 72 75 63   by this instruc
cd70: 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  tion..**.** The 
cd80: 69 6e 74 65 72 66 61 63 65 20 75 73 65 64 20 62  interface used b
cd90: 79 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  y the implementa
cda0: 74 69 6f 6e 20 6f 66 20 74 68 65 20 61 66 6f 72  tion of the afor
cdb0: 65 6d 65 6e 74 69 6f 6e 65 64 20 66 75 6e 63 74  ementioned funct
cdc0: 69 6f 6e 73 0a 2a 2a 20 74 6f 20 72 65 74 72 69  ions.** to retri
cdd0: 65 76 65 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f  eve the collatio
cde0: 6e 20 73 65 71 75 65 6e 63 65 20 73 65 74 20 62  n sequence set b
cdf0: 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73  y this opcode is
ce00: 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 0a 2a   not available.*
ce10: 2a 20 70 75 62 6c 69 63 6c 79 2e 20 20 4f 6e 6c  * publicly.  Onl
ce20: 79 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 74  y built-in funct
ce30: 69 6f 6e 73 20 68 61 76 65 20 61 63 63 65 73 73  ions have access
ce40: 20 74 6f 20 74 68 69 73 20 66 65 61 74 75 72 65   to this feature
ce50: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c  ..*/.case OP_Col
ce60: 6c 53 65 71 3a 20 7b 0a 20 20 61 73 73 65 72 74  lSeq: {.  assert
ce70: 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
ce80: 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 69  4_COLLSEQ );.  i
ce90: 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20  f( pOp->p1 ){.  
cea0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
ceb0: 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70  SetInt64(&aMem[p
cec0: 4f 70 2d 3e 70 31 5d 2c 20 30 29 3b 0a 20 20 7d  Op->p1], 0);.  }
ced0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
cee0: 4f 70 63 6f 64 65 3a 20 42 69 74 41 6e 64 20 50  Opcode: BitAnd P
cef0: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
cf00: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72  ynopsis: r[P3]=r
cf10: 5b 50 31 5d 26 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  [P1]&r[P2].**.**
cf20: 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69   Take the bit-wi
cf30: 73 65 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61  se AND of the va
cf40: 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
cf50: 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a   P1 and P2 and.*
cf60: 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  * store the resu
cf70: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
cf80: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
cf90: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
cfa0: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
cfb0: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
cfc0: 20 42 69 74 4f 72 20 50 31 20 50 32 20 50 33 20   BitOr P1 P2 P3 
cfd0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
cfe0: 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 7c 72 5b 50   r[P3]=r[P1]|r[P
cff0: 32 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68  2].**.** Take th
d000: 65 20 62 69 74 2d 77 69 73 65 20 4f 52 20 6f 66  e bit-wise OR of
d010: 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72   the values in r
d020: 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50  egister P1 and P
d030: 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74  2 and.** store t
d040: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
d050: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
d060: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
d070: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
d080: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
d090: 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 4c 65 66  Opcode: ShiftLef
d0a0: 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
d0b0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
d0c0: 5d 3d 72 5b 50 32 5d 3c 3c 72 5b 50 31 5d 0a 2a  ]=r[P2]<<r[P1].*
d0d0: 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20 69  *.** Shift the i
d0e0: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20  nteger value in 
d0f0: 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20 74  register P2 to t
d100: 68 65 20 6c 65 66 74 20 62 79 20 74 68 65 0a 2a  he left by the.*
d110: 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73  * number of bits
d120: 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68   specified by th
d130: 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65 67  e integer in reg
d140: 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f  ister P1..** Sto
d150: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
d160: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
d170: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
d180: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
d190: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
d1a0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69 66  ./* Opcode: Shif
d1b0: 74 52 69 67 68 74 20 50 31 20 50 32 20 50 33 20  tRight P1 P2 P3 
d1c0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
d1d0: 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 3e 3e 72 5b   r[P3]=r[P2]>>r[
d1e0: 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20  P1].**.** Shift 
d1f0: 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  the integer valu
d200: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
d210: 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 62 79   to the right by
d220: 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f   the.** number o
d230: 66 20 62 69 74 73 20 73 70 65 63 69 66 69 65 64  f bits specified
d240: 20 62 79 20 74 68 65 20 69 6e 74 65 67 65 72 20   by the integer 
d250: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
d260: 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72 65 73  ** Store the res
d270: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
d280: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
d290: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
d2a0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
d2b0: 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42  LL..*/.case OP_B
d2c0: 69 74 41 6e 64 3a 20 20 20 20 20 20 20 20 20 20  itAnd:          
d2d0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
d2e0: 73 20 54 4b 5f 42 49 54 41 4e 44 2c 20 69 6e 31  s TK_BITAND, in1
d2f0: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
d300: 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a 20 20 20  ase OP_BitOr:   
d310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d320: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54  * same as TK_BIT
d330: 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  OR, in1, in2, ou
d340: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68  t3 */.case OP_Sh
d350: 69 66 74 4c 65 66 74 3a 20 20 20 20 20 20 20 20  iftLeft:        
d360: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
d370: 20 54 4b 5f 4c 53 48 49 46 54 2c 20 69 6e 31 2c   TK_LSHIFT, in1,
d380: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
d390: 73 65 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74  se OP_ShiftRight
d3a0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
d3b0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 53 48 49   same as TK_RSHI
d3c0: 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  FT, in1, in2, ou
d3d0: 74 33 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b 0a  t3 */.  i64 iA;.
d3e0: 20 20 75 36 34 20 75 41 3b 0a 20 20 69 36 34 20    u64 uA;.  i64 
d3f0: 69 42 3b 0a 20 20 75 38 20 6f 70 3b 0a 0a 20 20  iB;.  u8 op;..  
d400: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
d410: 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20  ->p1];.  pIn2 = 
d420: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
d430: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
d440: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28  Op->p3];.  if( (
d450: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49  pIn1->flags | pI
d460: 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d  n2->flags) & MEM
d470: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c  _Null ){.    sql
d480: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
d490: 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72  ll(pOut);.    br
d4a0: 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 41 20 3d 20  eak;.  }.  iA = 
d4b0: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
d4c0: 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 69 42 20  lue(pIn2);.  iB 
d4d0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
d4e0: 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 6f  Value(pIn1);.  o
d4f0: 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b  p = pOp->opcode;
d500: 0a 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69  .  if( op==OP_Bi
d510: 74 41 6e 64 20 29 7b 0a 20 20 20 20 69 41 20 26  tAnd ){.    iA &
d520: 3d 20 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66  = iB;.  }else if
d530: 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 4f 72 20 29  ( op==OP_BitOr )
d540: 7b 0a 20 20 20 20 69 41 20 7c 3d 20 69 42 3b 0a  {.    iA |= iB;.
d550: 20 20 7d 65 6c 73 65 20 69 66 28 20 69 42 21 3d    }else if( iB!=
d560: 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  0 ){.    assert(
d570: 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 52 69 67   op==OP_ShiftRig
d580: 68 74 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69  ht || op==OP_Shi
d590: 66 74 4c 65 66 74 20 29 3b 0a 0a 20 20 20 20 2f  ftLeft );..    /
d5a0: 2a 20 49 66 20 73 68 69 66 74 69 6e 67 20 62 79  * If shifting by
d5b0: 20 61 20 6e 65 67 61 74 69 76 65 20 61 6d 6f 75   a negative amou
d5c0: 6e 74 2c 20 73 68 69 66 74 20 69 6e 20 74 68 65  nt, shift in the
d5d0: 20 6f 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e   other direction
d5e0: 20 2a 2f 0a 20 20 20 20 69 66 28 20 69 42 3c 30   */.    if( iB<0
d5f0: 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
d600: 28 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74 3d  ( OP_ShiftRight=
d610: 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 2b 31 20  =OP_ShiftLeft+1 
d620: 29 3b 0a 20 20 20 20 20 20 6f 70 20 3d 20 32 2a  );.      op = 2*
d630: 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 2b 20 31  OP_ShiftLeft + 1
d640: 20 2d 20 6f 70 3b 0a 20 20 20 20 20 20 69 42 20   - op;.      iB 
d650: 3d 20 69 42 3e 28 2d 36 34 29 20 3f 20 2d 69 42  = iB>(-64) ? -iB
d660: 20 3a 20 36 34 3b 0a 20 20 20 20 7d 0a 0a 20 20   : 64;.    }..  
d670: 20 20 69 66 28 20 69 42 3e 3d 36 34 20 29 7b 0a    if( iB>=64 ){.
d680: 20 20 20 20 20 20 69 41 20 3d 20 28 69 41 3e 3d        iA = (iA>=
d690: 30 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66  0 || op==OP_Shif
d6a0: 74 4c 65 66 74 29 20 3f 20 30 20 3a 20 2d 31 3b  tLeft) ? 0 : -1;
d6b0: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
d6c0: 20 20 6d 65 6d 63 70 79 28 26 75 41 2c 20 26 69    memcpy(&uA, &i
d6d0: 41 2c 20 73 69 7a 65 6f 66 28 75 41 29 29 3b 0a  A, sizeof(uA));.
d6e0: 20 20 20 20 20 20 69 66 28 20 6f 70 3d 3d 4f 50        if( op==OP
d6f0: 5f 53 68 69 66 74 4c 65 66 74 20 29 7b 0a 20 20  _ShiftLeft ){.  
d700: 20 20 20 20 20 20 75 41 20 3c 3c 3d 20 69 42 3b        uA <<= iB;
d710: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
d720: 20 20 20 20 20 20 75 41 20 3e 3e 3d 20 69 42 3b        uA >>= iB;
d730: 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 69 67 6e  .        /* Sign
d740: 2d 65 78 74 65 6e 64 20 6f 6e 20 61 20 72 69 67  -extend on a rig
d750: 68 74 20 73 68 69 66 74 20 6f 66 20 61 20 6e 65  ht shift of a ne
d760: 67 61 74 69 76 65 20 6e 75 6d 62 65 72 20 2a 2f  gative number */
d770: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3c  .        if( iA<
d780: 30 20 29 20 75 41 20 7c 3d 20 28 28 28 28 75 36  0 ) uA |= ((((u6
d790: 34 29 30 78 66 66 66 66 66 66 66 66 29 3c 3c 33  4)0xffffffff)<<3
d7a0: 32 29 7c 30 78 66 66 66 66 66 66 66 66 29 20 3c  2)|0xffffffff) <
d7b0: 3c 20 28 36 34 2d 69 42 29 3b 0a 20 20 20 20 20  < (64-iB);.     
d7c0: 20 7d 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28   }.      memcpy(
d7d0: 26 69 41 2c 20 26 75 41 2c 20 73 69 7a 65 6f 66  &iA, &uA, sizeof
d7e0: 28 69 41 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  (iA));.    }.  }
d7f0: 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69  .  pOut->u.i = i
d800: 41 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46  A;.  MemSetTypeF
d810: 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e  lag(pOut, MEM_In
d820: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
d830: 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 49 6d  /* Opcode: AddIm
d840: 6d 20 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  m  P1 P2 * * *.*
d850: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31  * Synopsis: r[P1
d860: 5d 3d 72 5b 50 31 5d 2b 50 32 0a 2a 2a 20 0a 2a  ]=r[P1]+P2.** .*
d870: 2a 20 41 64 64 20 74 68 65 20 63 6f 6e 73 74 61  * Add the consta
d880: 6e 74 20 50 32 20 74 6f 20 74 68 65 20 76 61 6c  nt P2 to the val
d890: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
d8a0: 31 2e 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74  1..** The result
d8b0: 20 69 73 20 61 6c 77 61 79 73 20 61 6e 20 69 6e   is always an in
d8c0: 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20  teger..**.** To 
d8d0: 66 6f 72 63 65 20 61 6e 79 20 72 65 67 69 73 74  force any regist
d8e0: 65 72 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65  er to be an inte
d8f0: 67 65 72 2c 20 6a 75 73 74 20 61 64 64 20 30 2e  ger, just add 0.
d900: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 49  .*/.case OP_AddI
d910: 6d 6d 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  mm: {           
d920: 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e   /* in1 */.  pIn
d930: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
d940: 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f  1];.  memAboutTo
d950: 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b  Change(p, pIn1);
d960: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
d970: 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31  mIntegerify(pIn1
d980: 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b  );.  pIn1->u.i +
d990: 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 62 72 65  = pOp->p2;.  bre
d9a0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
d9b0: 3a 20 4d 75 73 74 42 65 49 6e 74 20 50 31 20 50  : MustBeInt P1 P
d9c0: 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 46  2 * * *.** .** F
d9d0: 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20 69  orce the value i
d9e0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f  n register P1 to
d9f0: 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2e 20   be an integer. 
da00: 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a   If the value.**
da10: 20 69 6e 20 50 31 20 69 73 20 6e 6f 74 20 61 6e   in P1 is not an
da20: 20 69 6e 74 65 67 65 72 20 61 6e 64 20 63 61 6e   integer and can
da30: 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64  not be converted
da40: 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72   into an integer
da50: 0a 2a 2a 20 77 69 74 68 6f 75 74 20 64 61 74 61  .** without data
da60: 20 6c 6f 73 73 2c 20 74 68 65 6e 20 6a 75 6d 70   loss, then jump
da70: 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
da80: 50 32 2c 20 6f 72 20 69 66 20 50 32 3d 3d 30 0a  P2, or if P2==0.
da90: 2a 2a 20 72 61 69 73 65 20 61 6e 20 53 51 4c 49  ** raise an SQLI
daa0: 54 45 5f 4d 49 53 4d 41 54 43 48 20 65 78 63 65  TE_MISMATCH exce
dab0: 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ption..*/.case O
dac0: 50 5f 4d 75 73 74 42 65 49 6e 74 3a 20 7b 20 20  P_MustBeInt: {  
dad0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
dae0: 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  p, in1 */.  pIn1
daf0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
db00: 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  ];.  if( (pIn1->
db10: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
db20: 3d 3d 30 20 29 7b 0a 20 20 20 20 61 70 70 6c 79  ==0 ){.    apply
db30: 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 53  Affinity(pIn1, S
db40: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
db50: 43 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  C, encoding);.  
db60: 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
db70: 6e 28 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d  n((pIn1->flags&M
db80: 45 4d 5f 49 6e 74 29 3d 3d 30 2c 20 32 29 3b 0a  EM_Int)==0, 2);.
db90: 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66      if( (pIn1->f
dba0: 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d  lags & MEM_Int)=
dbb0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  =0 ){.      if( 
dbc0: 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20 20  pOp->p2==0 ){.  
dbd0: 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
dbe0: 45 5f 4d 49 53 4d 41 54 43 48 3b 0a 20 20 20 20  E_MISMATCH;.    
dbf0: 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
dc00: 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
dc10: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
dc20: 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
dc30: 32 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  2;.      }.    }
dc40: 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70  .  }.  MemSetTyp
dc50: 65 46 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f  eFlag(pIn1, MEM_
dc60: 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Int);.  break;.}
dc70: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
dc80: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
dc90: 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  OINT./* Opcode: 
dca0: 52 65 61 6c 41 66 66 69 6e 69 74 79 20 50 31 20  RealAffinity P1 
dcb0: 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66  * * * *.**.** If
dcc0: 20 72 65 67 69 73 74 65 72 20 50 31 20 68 6f 6c   register P1 hol
dcd0: 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 63 6f  ds an integer co
dce0: 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20 72 65  nvert it to a re
dcf0: 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20  al value..**.** 
dd00: 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75  This opcode is u
dd10: 73 65 64 20 77 68 65 6e 20 65 78 74 72 61 63 74  sed when extract
dd20: 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ing information 
dd30: 66 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 74 68  from a column th
dd40: 61 74 0a 2a 2a 20 68 61 73 20 52 45 41 4c 20 61  at.** has REAL a
dd50: 66 66 69 6e 69 74 79 2e 20 20 53 75 63 68 20 63  ffinity.  Such c
dd60: 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 20 6d 61 79  olumn values may
dd70: 20 73 74 69 6c 6c 20 62 65 20 73 74 6f 72 65 64   still be stored
dd80: 20 61 73 0a 2a 2a 20 69 6e 74 65 67 65 72 73 2c   as.** integers,
dd90: 20 66 6f 72 20 73 70 61 63 65 20 65 66 66 69 63   for space effic
dda0: 69 65 6e 63 79 2c 20 62 75 74 20 61 66 74 65 72  iency, but after
ddb0: 20 65 78 74 72 61 63 74 69 6f 6e 20 77 65 20 77   extraction we w
ddc0: 61 6e 74 20 74 68 65 6d 0a 2a 2a 20 74 6f 20 68  ant them.** to h
ddd0: 61 76 65 20 6f 6e 6c 79 20 61 20 72 65 61 6c 20  ave only a real 
dde0: 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  value..*/.case O
ddf0: 50 5f 52 65 61 6c 41 66 66 69 6e 69 74 79 3a 20  P_RealAffinity: 
de00: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
de10: 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70     /* in1 */.  p
de20: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
de30: 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31  >p1];.  if( pIn1
de40: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
de50: 74 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  t ){.    sqlite3
de60: 56 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28 70  VdbeMemRealify(p
de70: 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  In1);.  }.  brea
de80: 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66  k;.}.#endif..#if
de90: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
dea0: 5f 43 41 53 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a  _CAST./* Opcode:
deb0: 20 43 61 73 74 20 50 31 20 50 32 20 2a 20 2a 20   Cast P1 P2 * * 
dec0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61  *.** Synopsis: a
ded0: 66 66 69 6e 69 74 79 28 72 5b 50 31 5d 29 0a 2a  ffinity(r[P1]).*
dee0: 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76  *.** Force the v
def0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
df00: 20 50 31 20 74 6f 20 62 65 20 74 68 65 20 74 79   P1 to be the ty
df10: 70 65 20 64 65 66 69 6e 65 64 20 62 79 20 50 32  pe defined by P2
df20: 2e 0a 2a 2a 20 0a 2a 2a 20 3c 75 6c 3e 0a 2a 2a  ..** .** <ul>.**
df30: 20 3c 6c 69 3e 20 50 32 3d 3d 27 41 27 20 26 72   <li> P2=='A' &r
df40: 61 72 72 3b 20 42 4c 4f 42 0a 2a 2a 20 3c 6c 69  arr; BLOB.** <li
df50: 3e 20 50 32 3d 3d 27 42 27 20 26 72 61 72 72 3b  > P2=='B' &rarr;
df60: 20 54 45 58 54 0a 2a 2a 20 3c 6c 69 3e 20 50 32   TEXT.** <li> P2
df70: 3d 3d 27 43 27 20 26 72 61 72 72 3b 20 4e 55 4d  =='C' &rarr; NUM
df80: 45 52 49 43 0a 2a 2a 20 3c 6c 69 3e 20 50 32 3d  ERIC.** <li> P2=
df90: 3d 27 44 27 20 26 72 61 72 72 3b 20 49 4e 54 45  ='D' &rarr; INTE
dfa0: 47 45 52 0a 2a 2a 20 3c 6c 69 3e 20 50 32 3d 3d  GER.** <li> P2==
dfb0: 27 45 27 20 26 72 61 72 72 3b 20 52 45 41 4c 0a  'E' &rarr; REAL.
dfc0: 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a 20 41  ** </ul>.**.** A
dfd0: 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e   NULL value is n
dfe0: 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20 74 68  ot changed by th
dff0: 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20  is routine.  It 
e000: 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f  remains NULL..*/
e010: 0a 63 61 73 65 20 4f 50 5f 43 61 73 74 3a 20 7b  .case OP_Cast: {
e020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e030: 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 61 73    /* in1 */.  as
e040: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 53  sert( pOp->p2>=S
e050: 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42 20 26  QLITE_AFF_BLOB &
e060: 26 20 70 4f 70 2d 3e 70 32 3c 3d 53 51 4c 49 54  & pOp->p2<=SQLIT
e070: 45 5f 41 46 46 5f 52 45 41 4c 20 29 3b 0a 20 20  E_AFF_REAL );.  
e080: 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70  testcase( pOp->p
e090: 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  2==SQLITE_AFF_TE
e0a0: 58 54 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  XT );.  testcase
e0b0: 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54  ( pOp->p2==SQLIT
e0c0: 45 5f 41 46 46 5f 42 4c 4f 42 20 29 3b 0a 20 20  E_AFF_BLOB );.  
e0d0: 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70  testcase( pOp->p
e0e0: 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  2==SQLITE_AFF_NU
e0f0: 4d 45 52 49 43 20 29 3b 0a 20 20 74 65 73 74 63  MERIC );.  testc
e100: 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51  ase( pOp->p2==SQ
e110: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
e120: 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
e130: 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
e140: 41 46 46 5f 52 45 41 4c 20 29 3b 0a 20 20 70 49  AFF_REAL );.  pI
e150: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
e160: 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p1];.  memAboutT
e170: 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29  oChange(p, pIn1)
e180: 3b 0a 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42  ;.  rc = ExpandB
e190: 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c  lob(pIn1);.  sql
e1a0: 69 74 65 33 56 64 62 65 4d 65 6d 43 61 73 74 28  ite3VdbeMemCast(
e1b0: 70 49 6e 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 65  pIn1, pOp->p2, e
e1c0: 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50 44 41  ncoding);.  UPDA
e1d0: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
e1e0: 70 49 6e 31 29 3b 0a 20 20 69 66 28 20 72 63 20  pIn1);.  if( rc 
e1f0: 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
e200: 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65  _to_error;.  bre
e210: 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
e220: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54  SQLITE_OMIT_CAST
e230: 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20   */../* Opcode: 
e240: 45 71 20 50 31 20 50 32 20 50 33 20 50 34 20 50  Eq P1 P2 P3 P4 P
e250: 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49  5.** Synopsis: I
e260: 46 20 72 5b 50 33 5d 3d 3d 72 5b 50 31 5d 0a 2a  F r[P3]==r[P1].*
e270: 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 68 65  *.** Compare the
e280: 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73   values in regis
e290: 74 65 72 20 50 31 20 61 6e 64 20 50 33 2e 20 20  ter P1 and P3.  
e2a0: 49 66 20 72 65 67 28 50 33 29 3d 3d 72 65 67 28  If reg(P3)==reg(
e2b0: 50 31 29 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70  P1) then.** jump
e2c0: 20 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e 20   to address P2. 
e2d0: 20 4f 72 20 69 66 20 74 68 65 20 53 51 4c 49 54   Or if the SQLIT
e2e0: 45 5f 53 54 4f 52 45 50 32 20 66 6c 61 67 20 69  E_STOREP2 flag i
e2f0: 73 20 73 65 74 20 69 6e 20 50 35 2c 20 74 68 65  s set in P5, the
e300: 6e 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 72  n.** store the r
e310: 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69  esult of compari
e320: 73 6f 6e 20 69 6e 20 72 65 67 69 73 74 65 72 20  son in register 
e330: 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51  P2..**.** The SQ
e340: 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 70 6f  LITE_AFF_MASK po
e350: 72 74 69 6f 6e 20 6f 66 20 50 35 20 6d 75 73 74  rtion of P5 must
e360: 20 62 65 20 61 6e 20 61 66 66 69 6e 69 74 79 20   be an affinity 
e370: 63 68 61 72 61 63 74 65 72 20 2d 0a 2a 2a 20 53  character -.** S
e380: 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20  QLITE_AFF_TEXT, 
e390: 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47  SQLITE_AFF_INTEG
e3a0: 45 52 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68  ER, and so forth
e3b0: 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 69 73 20  . An attempt is 
e3c0: 6d 61 64 65 20 0a 2a 2a 20 74 6f 20 63 6f 65 72  made .** to coer
e3d0: 63 65 20 62 6f 74 68 20 69 6e 70 75 74 73 20 61  ce both inputs a
e3e0: 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 69 73  ccording to this
e3f0: 20 61 66 66 69 6e 69 74 79 20 62 65 66 6f 72 65   affinity before
e400: 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73   the.** comparis
e410: 6f 6e 20 69 73 20 6d 61 64 65 2e 20 49 66 20 74  on is made. If t
e420: 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41  he SQLITE_AFF_MA
e430: 53 4b 20 69 73 20 30 78 30 30 2c 20 74 68 65 6e  SK is 0x00, then
e440: 20 6e 75 6d 65 72 69 63 0a 2a 2a 20 61 66 66 69   numeric.** affi
e450: 6e 69 74 79 20 69 73 20 75 73 65 64 2e 20 4e 6f  nity is used. No
e460: 74 65 20 74 68 61 74 20 74 68 65 20 61 66 66 69  te that the affi
e470: 6e 69 74 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73  nity conversions
e480: 20 61 72 65 20 73 74 6f 72 65 64 0a 2a 2a 20 62   are stored.** b
e490: 61 63 6b 20 69 6e 74 6f 20 74 68 65 20 69 6e 70  ack into the inp
e4a0: 75 74 20 72 65 67 69 73 74 65 72 73 20 50 31 20  ut registers P1 
e4b0: 61 6e 64 20 50 33 2e 20 20 53 6f 20 74 68 69 73  and P3.  So this
e4c0: 20 6f 70 63 6f 64 65 20 63 61 6e 20 63 61 75 73   opcode can caus
e4d0: 65 0a 2a 2a 20 70 65 72 73 69 73 74 65 6e 74 20  e.** persistent 
e4e0: 63 68 61 6e 67 65 73 20 74 6f 20 72 65 67 69 73  changes to regis
e4f0: 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e 0a  ters P1 and P3..
e500: 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79 20 63  **.** Once any c
e510: 6f 6e 76 65 72 73 69 6f 6e 73 20 68 61 76 65 20  onversions have 
e520: 74 61 6b 65 6e 20 70 6c 61 63 65 2c 20 61 6e 64  taken place, and
e530: 20 6e 65 69 74 68 65 72 20 76 61 6c 75 65 20 69   neither value i
e540: 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20  s NULL, .** the 
e550: 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6d 70 61  values are compa
e560: 72 65 64 2e 20 49 66 20 62 6f 74 68 20 76 61 6c  red. If both val
e570: 75 65 73 20 61 72 65 20 62 6c 6f 62 73 20 74 68  ues are blobs th
e580: 65 6e 20 6d 65 6d 63 6d 70 28 29 20 69 73 0a 2a  en memcmp() is.*
e590: 2a 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d  * used to determ
e5a0: 69 6e 65 20 74 68 65 20 72 65 73 75 6c 74 73 20  ine the results 
e5b0: 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  of the compariso
e5c0: 6e 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75  n.  If both valu
e5d0: 65 73 0a 2a 2a 20 61 72 65 20 74 65 78 74 2c 20  es.** are text, 
e5e0: 74 68 65 6e 20 74 68 65 20 61 70 70 72 6f 70 72  then the appropr
e5f0: 69 61 74 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66  iate collating f
e600: 75 6e 63 74 69 6f 6e 20 73 70 65 63 69 66 69 65  unction specifie
e610: 64 20 69 6e 0a 2a 2a 20 50 34 20 69 73 20 75 73  d in.** P4 is us
e620: 65 64 20 74 6f 20 64 6f 20 74 68 65 20 63 6f 6d  ed to do the com
e630: 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 50 34 20  parison.  If P4 
e640: 69 73 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64  is not specified
e650: 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28   then.** memcmp(
e660: 29 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d  ) is used to com
e670: 70 61 72 65 20 74 65 78 74 20 73 74 72 69 6e 67  pare text string
e680: 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65  .  If both value
e690: 73 20 61 72 65 0a 2a 2a 20 6e 75 6d 65 72 69 63  s are.** numeric
e6a0: 2c 20 74 68 65 6e 20 61 20 6e 75 6d 65 72 69 63  , then a numeric
e6b0: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 75   comparison is u
e6c0: 73 65 64 2e 20 49 66 20 74 68 65 20 74 77 6f 20  sed. If the two 
e6d0: 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 6f 66  values.** are of
e6e0: 20 64 69 66 66 65 72 65 6e 74 20 74 79 70 65 73   different types
e6f0: 2c 20 74 68 65 6e 20 6e 75 6d 62 65 72 73 20 61  , then numbers a
e700: 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65  re considered le
e710: 73 73 20 74 68 61 6e 0a 2a 2a 20 73 74 72 69 6e  ss than.** strin
e720: 67 73 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61  gs and strings a
e730: 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65  re considered le
e740: 73 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a  ss than blobs..*
e750: 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e  *.** If SQLITE_N
e760: 55 4c 4c 45 51 20 69 73 20 73 65 74 20 69 6e 20  ULLEQ is set in 
e770: 50 35 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  P5 then the resu
e780: 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e  lt of comparison
e790: 20 69 73 20 61 6c 77 61 79 73 20 65 69 74 68 65   is always eithe
e7a0: 72 0a 2a 2a 20 74 72 75 65 20 6f 72 20 66 61 6c  r.** true or fal
e7b0: 73 65 20 61 6e 64 20 69 73 20 6e 65 76 65 72 20  se and is never 
e7c0: 4e 55 4c 4c 2e 20 20 49 66 20 62 6f 74 68 20 6f  NULL.  If both o
e7d0: 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c  perands are NULL
e7e0: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
e7f0: 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f  .** of compariso
e800: 6e 20 69 73 20 74 72 75 65 2e 20 20 49 66 20 65  n is true.  If e
e810: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
e820: 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72   NULL then the r
e830: 65 73 75 6c 74 20 69 73 20 66 61 6c 73 65 2e 0a  esult is false..
e840: 2a 2a 20 49 66 20 6e 65 69 74 68 65 72 20 6f 70  ** If neither op
e850: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68  erand is NULL th
e860: 65 20 72 65 73 75 6c 74 20 69 73 20 74 68 65 20  e result is the 
e870: 73 61 6d 65 20 61 73 20 69 74 20 77 6f 75 6c 64  same as it would
e880: 20 62 65 20 69 66 0a 2a 2a 20 74 68 65 20 53 51   be if.** the SQ
e890: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 66 6c 61 67  LITE_NULLEQ flag
e8a0: 20 77 65 72 65 20 6f 6d 69 74 74 65 64 20 66 72   were omitted fr
e8b0: 6f 6d 20 50 35 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  om P5..**.** If 
e8c0: 62 6f 74 68 20 53 51 4c 49 54 45 5f 53 54 4f 52  both SQLITE_STOR
e8d0: 45 50 32 20 61 6e 64 20 53 51 4c 49 54 45 5f 4b  EP2 and SQLITE_K
e8e0: 45 45 50 4e 55 4c 4c 20 66 6c 61 67 73 20 61 72  EEPNULL flags ar
e8f0: 65 20 73 65 74 20 74 68 65 6e 20 74 68 65 0a 2a  e set then the.*
e900: 2a 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 5b 50  * content of r[P
e910: 32 5d 20 69 73 20 6f 6e 6c 79 20 63 68 61 6e 67  2] is only chang
e920: 65 64 20 69 66 20 74 68 65 20 6e 65 77 20 76 61  ed if the new va
e930: 6c 75 65 20 69 73 20 4e 55 4c 4c 20 6f 72 20 30  lue is NULL or 0
e940: 20 28 66 61 6c 73 65 29 2e 0a 2a 2a 20 49 6e 20   (false)..** In 
e950: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 61 20 70  other words, a p
e960: 72 69 6f 72 20 72 5b 50 32 5d 20 76 61 6c 75 65  rior r[P2] value
e970: 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20 6f 76 65   will not be ove
e980: 72 77 72 69 74 74 65 6e 20 62 79 20 31 20 28 74  rwritten by 1 (t
e990: 72 75 65 29 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  rue)..*/./* Opco
e9a0: 64 65 3a 20 4e 65 20 50 31 20 50 32 20 50 33 20  de: Ne P1 P2 P3 
e9b0: 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
e9c0: 73 3a 20 49 46 20 72 5b 50 33 5d 21 3d 72 5b 50  s: IF r[P3]!=r[P
e9d0: 31 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f  1].**.** This wo
e9e0: 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68  rks just like th
e9f0: 65 20 45 71 20 6f 70 63 6f 64 65 20 65 78 63 65  e Eq opcode exce
ea00: 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70  pt that the jump
ea10: 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20   is taken if.** 
ea20: 74 68 65 20 6f 70 65 72 61 6e 64 73 20 69 6e 20  the operands in 
ea30: 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64  registers P1 and
ea40: 20 50 33 20 61 72 65 20 6e 6f 74 20 65 71 75 61   P3 are not equa
ea50: 6c 2e 20 20 53 65 65 20 74 68 65 20 45 71 20 6f  l.  See the Eq o
ea60: 70 63 6f 64 65 20 66 6f 72 0a 2a 2a 20 61 64 64  pcode for.** add
ea70: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
ea80: 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 62 6f  ion..**.** If bo
ea90: 74 68 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50  th SQLITE_STOREP
eaa0: 32 20 61 6e 64 20 53 51 4c 49 54 45 5f 4b 45 45  2 and SQLITE_KEE
eab0: 50 4e 55 4c 4c 20 66 6c 61 67 73 20 61 72 65 20  PNULL flags are 
eac0: 73 65 74 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20  set then the.** 
ead0: 63 6f 6e 74 65 6e 74 20 6f 66 20 72 5b 50 32 5d  content of r[P2]
eae0: 20 69 73 20 6f 6e 6c 79 20 63 68 61 6e 67 65 64   is only changed
eaf0: 20 69 66 20 74 68 65 20 6e 65 77 20 76 61 6c 75   if the new valu
eb00: 65 20 69 73 20 4e 55 4c 4c 20 6f 72 20 31 20 28  e is NULL or 1 (
eb10: 74 72 75 65 29 2e 0a 2a 2a 20 49 6e 20 6f 74 68  true)..** In oth
eb20: 65 72 20 77 6f 72 64 73 2c 20 61 20 70 72 69 6f  er words, a prio
eb30: 72 20 72 5b 50 32 5d 20 76 61 6c 75 65 20 77 69  r r[P2] value wi
eb40: 6c 6c 20 6e 6f 74 20 62 65 20 6f 76 65 72 77 72  ll not be overwr
eb50: 69 74 74 65 6e 20 62 79 20 30 20 28 66 61 6c 73  itten by 0 (fals
eb60: 65 29 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  e)..*/./* Opcode
eb70: 3a 20 4c 74 20 50 31 20 50 32 20 50 33 20 50 34  : Lt P1 P2 P3 P4
eb80: 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
eb90: 20 49 46 20 72 5b 50 33 5d 3c 72 5b 50 31 5d 0a   IF r[P3]<r[P1].
eba0: 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 68  **.** Compare th
ebb0: 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
ebc0: 73 74 65 72 20 50 31 20 61 6e 64 20 50 33 2e 20  ster P1 and P3. 
ebd0: 20 49 66 20 72 65 67 28 50 33 29 3c 72 65 67 28   If reg(P3)<reg(
ebe0: 50 31 29 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70  P1) then.** jump
ebf0: 20 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e 20   to address P2. 
ec00: 20 4f 72 20 69 66 20 74 68 65 20 53 51 4c 49 54   Or if the SQLIT
ec10: 45 5f 53 54 4f 52 45 50 32 20 66 6c 61 67 20 69  E_STOREP2 flag i
ec20: 73 20 73 65 74 20 69 6e 20 50 35 20 73 74 6f 72  s set in P5 stor
ec30: 65 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 20  e.** the result 
ec40: 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 28 30  of comparison (0
ec50: 20 6f 72 20 31 20 6f 72 20 4e 55 4c 4c 29 20 69   or 1 or NULL) i
ec60: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
ec70: 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51  .**.** If the SQ
ec80: 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20  LITE_JUMPIFNULL 
ec90: 62 69 74 20 6f 66 20 50 35 20 69 73 20 73 65 74  bit of P5 is set
eca0: 20 61 6e 64 20 65 69 74 68 65 72 20 72 65 67 28   and either reg(
ecb0: 50 31 29 20 6f 72 0a 2a 2a 20 72 65 67 28 50 33  P1) or.** reg(P3
ecc0: 29 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74  ) is NULL then t
ecd0: 68 65 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70  he take the jump
ece0: 2e 20 20 49 66 20 74 68 65 20 53 51 4c 49 54 45  .  If the SQLITE
ecf0: 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 0a 2a 2a 20  _JUMPIFNULL .** 
ed00: 62 69 74 20 69 73 20 63 6c 65 61 72 20 74 68 65  bit is clear the
ed10: 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 69  n fall through i
ed20: 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64  f either operand
ed30: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20   is NULL..**.** 
ed40: 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  The SQLITE_AFF_M
ed50: 41 53 4b 20 70 6f 72 74 69 6f 6e 20 6f 66 20 50  ASK portion of P
ed60: 35 20 6d 75 73 74 20 62 65 20 61 6e 20 61 66 66  5 must be an aff
ed70: 69 6e 69 74 79 20 63 68 61 72 61 63 74 65 72 20  inity character 
ed80: 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f  -.** SQLITE_AFF_
ed90: 54 45 58 54 2c 20 53 51 4c 49 54 45 5f 41 46 46  TEXT, SQLITE_AFF
eda0: 5f 49 4e 54 45 47 45 52 2c 20 61 6e 64 20 73 6f  _INTEGER, and so
edb0: 20 66 6f 72 74 68 2e 20 41 6e 20 61 74 74 65 6d   forth. An attem
edc0: 70 74 20 69 73 20 6d 61 64 65 20 0a 2a 2a 20 74  pt is made .** t
edd0: 6f 20 63 6f 65 72 63 65 20 62 6f 74 68 20 69 6e  o coerce both in
ede0: 70 75 74 73 20 61 63 63 6f 72 64 69 6e 67 20 74  puts according t
edf0: 6f 20 74 68 69 73 20 61 66 66 69 6e 69 74 79 20  o this affinity 
ee00: 62 65 66 6f 72 65 20 74 68 65 0a 2a 2a 20 63 6f  before the.** co
ee10: 6d 70 61 72 69 73 6f 6e 20 69 73 20 6d 61 64 65  mparison is made
ee20: 2e 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f  . If the SQLITE_
ee30: 41 46 46 5f 4d 41 53 4b 20 69 73 20 30 78 30 30  AFF_MASK is 0x00
ee40: 2c 20 74 68 65 6e 20 6e 75 6d 65 72 69 63 0a 2a  , then numeric.*
ee50: 2a 20 61 66 66 69 6e 69 74 79 20 69 73 20 75 73  * affinity is us
ee60: 65 64 2e 20 4e 6f 74 65 20 74 68 61 74 20 74 68  ed. Note that th
ee70: 65 20 61 66 66 69 6e 69 74 79 20 63 6f 6e 76 65  e affinity conve
ee80: 72 73 69 6f 6e 73 20 61 72 65 20 73 74 6f 72 65  rsions are store
ee90: 64 0a 2a 2a 20 62 61 63 6b 20 69 6e 74 6f 20 74  d.** back into t
eea0: 68 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65  he input registe
eeb0: 72 73 20 50 31 20 61 6e 64 20 50 33 2e 20 20 53  rs P1 and P3.  S
eec0: 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20 63 61  o this opcode ca
eed0: 6e 20 63 61 75 73 65 0a 2a 2a 20 70 65 72 73 69  n cause.** persi
eee0: 73 74 65 6e 74 20 63 68 61 6e 67 65 73 20 74 6f  stent changes to
eef0: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e   registers P1 an
ef00: 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65  d P3..**.** Once
ef10: 20 61 6e 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73   any conversions
ef20: 20 68 61 76 65 20 74 61 6b 65 6e 20 70 6c 61 63   have taken plac
ef30: 65 2c 20 61 6e 64 20 6e 65 69 74 68 65 72 20 76  e, and neither v
ef40: 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20 0a 2a  alue is NULL, .*
ef50: 2a 20 74 68 65 20 76 61 6c 75 65 73 20 61 72 65  * the values are
ef60: 20 63 6f 6d 70 61 72 65 64 2e 20 49 66 20 62 6f   compared. If bo
ef70: 74 68 20 76 61 6c 75 65 73 20 61 72 65 20 62 6c  th values are bl
ef80: 6f 62 73 20 74 68 65 6e 20 6d 65 6d 63 6d 70 28  obs then memcmp(
ef90: 29 20 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20  ) is.** used to 
efa0: 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 72 65  determine the re
efb0: 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63 6f 6d  sults of the com
efc0: 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 62 6f 74  parison.  If bot
efd0: 68 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20  h values.** are 
efe0: 74 65 78 74 2c 20 74 68 65 6e 20 74 68 65 20 61  text, then the a
eff0: 70 70 72 6f 70 72 69 61 74 65 20 63 6f 6c 6c 61  ppropriate colla
f000: 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73 70  ting function sp
f010: 65 63 69 66 69 65 64 20 69 6e 0a 2a 2a 20 50 34  ecified in.** P4
f020: 20 69 73 20 20 75 73 65 64 20 74 6f 20 64 6f 20   is  used to do 
f030: 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  the comparison. 
f040: 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 73 70   If P4 is not sp
f050: 65 63 69 66 69 65 64 20 74 68 65 6e 0a 2a 2a 20  ecified then.** 
f060: 6d 65 6d 63 6d 70 28 29 20 69 73 20 75 73 65 64  memcmp() is used
f070: 20 74 6f 20 63 6f 6d 70 61 72 65 20 74 65 78 74   to compare text
f080: 20 73 74 72 69 6e 67 2e 20 20 49 66 20 62 6f 74   string.  If bot
f090: 68 20 76 61 6c 75 65 73 20 61 72 65 0a 2a 2a 20  h values are.** 
f0a0: 6e 75 6d 65 72 69 63 2c 20 74 68 65 6e 20 61 20  numeric, then a 
f0b0: 6e 75 6d 65 72 69 63 20 63 6f 6d 70 61 72 69 73  numeric comparis
f0c0: 6f 6e 20 69 73 20 75 73 65 64 2e 20 49 66 20 74  on is used. If t
f0d0: 68 65 20 74 77 6f 20 76 61 6c 75 65 73 0a 2a 2a  he two values.**
f0e0: 20 61 72 65 20 6f 66 20 64 69 66 66 65 72 65 6e   are of differen
f0f0: 74 20 74 79 70 65 73 2c 20 74 68 65 6e 20 6e 75  t types, then nu
f100: 6d 62 65 72 73 20 61 72 65 20 63 6f 6e 73 69 64  mbers are consid
f110: 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e 0a 2a  ered less than.*
f120: 2a 20 73 74 72 69 6e 67 73 20 61 6e 64 20 73 74  * strings and st
f130: 72 69 6e 67 73 20 61 72 65 20 63 6f 6e 73 69 64  rings are consid
f140: 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e 20 62  ered less than b
f150: 6c 6f 62 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  lobs..*/./* Opco
f160: 64 65 3a 20 4c 65 20 50 31 20 50 32 20 50 33 20  de: Le P1 P2 P3 
f170: 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
f180: 73 3a 20 49 46 20 72 5b 50 33 5d 3c 3d 72 5b 50  s: IF r[P3]<=r[P
f190: 31 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f  1].**.** This wo
f1a0: 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68  rks just like th
f1b0: 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65  e Lt opcode exce
f1c0: 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70  pt that the jump
f1d0: 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20   is taken if.** 
f1e0: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
f1f0: 65 67 69 73 74 65 72 20 50 33 20 69 73 20 6c 65  egister P3 is le
f200: 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  ss than or equal
f210: 20 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   to the content 
f220: 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  of.** register P
f230: 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f  1.  See the Lt o
f240: 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69  pcode for additi
f250: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
f260: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
f270: 47 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50  Gt P1 P2 P3 P4 P
f280: 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49  5.** Synopsis: I
f290: 46 20 72 5b 50 33 5d 3e 72 5b 50 31 5d 0a 2a 2a  F r[P3]>r[P1].**
f2a0: 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a  .** This works j
f2b0: 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20  ust like the Lt 
f2c0: 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68  opcode except th
f2d0: 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  at the jump is t
f2e0: 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63  aken if.** the c
f2f0: 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
f300: 65 72 20 50 33 20 69 73 20 67 72 65 61 74 65 72  er P3 is greater
f310: 20 74 68 61 6e 20 74 68 65 20 63 6f 6e 74 65 6e   than the conten
f320: 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72  t of.** register
f330: 20 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74   P1.  See the Lt
f340: 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69   opcode for addi
f350: 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
f360: 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  on..*/./* Opcode
f370: 3a 20 47 65 20 50 31 20 50 32 20 50 33 20 50 34  : Ge P1 P2 P3 P4
f380: 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
f390: 20 49 46 20 72 5b 50 33 5d 3e 3d 72 5b 50 31 5d   IF r[P3]>=r[P1]
f3a0: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b  .**.** This work
f3b0: 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20  s just like the 
f3c0: 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74  Lt opcode except
f3d0: 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69   that the jump i
f3e0: 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68  s taken if.** th
f3f0: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67  e content of reg
f400: 69 73 74 65 72 20 50 33 20 69 73 20 67 72 65 61  ister P3 is grea
f410: 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ter than or equa
f420: 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74  l to the content
f430: 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20   of.** register 
f440: 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20  P1.  See the Lt 
f450: 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74  opcode for addit
f460: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
f470: 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 71  n..*/.case OP_Eq
f480: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
f490: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 45 51  /* same as TK_EQ
f4a0: 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  , jump, in1, in3
f4b0: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 3a 20   */.case OP_Ne: 
f4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
f4d0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 45 2c 20   same as TK_NE, 
f4e0: 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
f4f0: 2f 0a 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20  /.case OP_Lt:   
f500: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
f510: 61 6d 65 20 61 73 20 54 4b 5f 4c 54 2c 20 6a 75  ame as TK_LT, ju
f520: 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
f530: 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20 20  case OP_Le:     
f540: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
f550: 65 20 61 73 20 54 4b 5f 4c 45 2c 20 6a 75 6d 70  e as TK_LE, jump
f560: 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61  , in1, in3 */.ca
f570: 73 65 20 4f 50 5f 47 74 3a 20 20 20 20 20 20 20  se OP_Gt:       
f580: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
f590: 61 73 20 54 4b 5f 47 54 2c 20 6a 75 6d 70 2c 20  as TK_GT, jump, 
f5a0: 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  in1, in3 */.case
f5b0: 20 4f 50 5f 47 65 3a 20 7b 20 20 20 20 20 20 20   OP_Ge: {       
f5c0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
f5d0: 20 54 4b 5f 47 45 2c 20 6a 75 6d 70 2c 20 69 6e   TK_GE, jump, in
f5e0: 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20  1, in3 */.  int 
f5f0: 72 65 73 2c 20 72 65 73 32 3b 20 20 20 20 20 20  res, res2;      
f600: 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 74 68 65  /* Result of the
f610: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20 70   comparison of p
f620: 49 6e 31 20 61 67 61 69 6e 73 74 20 70 49 6e 33  In1 against pIn3
f630: 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e   */.  char affin
f640: 69 74 79 3b 20 20 20 20 20 20 2f 2a 20 41 66 66  ity;      /* Aff
f650: 69 6e 69 74 79 20 74 6f 20 75 73 65 20 66 6f 72  inity to use for
f660: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 2a 2f 0a 20   comparison */. 
f670: 20 75 31 36 20 66 6c 61 67 73 31 3b 20 20 20 20   u16 flags1;    
f680: 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20       /* Copy of 
f690: 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f 66  initial value of
f6a0: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 2a 2f 0a   pIn1->flags */.
f6b0: 20 20 75 31 36 20 66 6c 61 67 73 33 3b 20 20 20    u16 flags3;   
f6c0: 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66        /* Copy of
f6d0: 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f   initial value o
f6e0: 66 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 2a 2f  f pIn3->flags */
f6f0: 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
f700: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e  [pOp->p1];.  pIn
f710: 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
f720: 33 5d 3b 0a 20 20 66 6c 61 67 73 31 20 3d 20 70  3];.  flags1 = p
f730: 49 6e 31 2d 3e 66 6c 61 67 73 3b 0a 20 20 66 6c  In1->flags;.  fl
f740: 61 67 73 33 20 3d 20 70 49 6e 33 2d 3e 66 6c 61  ags3 = pIn3->fla
f750: 67 73 3b 0a 20 20 69 66 28 20 28 66 6c 61 67 73  gs;.  if( (flags
f760: 31 20 7c 20 66 6c 61 67 73 33 29 26 4d 45 4d 5f  1 | flags3)&MEM_
f770: 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 2f 2a 20 4f  Null ){.    /* O
f780: 6e 65 20 6f 72 20 62 6f 74 68 20 6f 70 65 72 61  ne or both opera
f790: 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20 2a 2f 0a  nds are NULL */.
f7a0: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20      if( pOp->p5 
f7b0: 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  & SQLITE_NULLEQ 
f7c0: 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 53  ){.      /* If S
f7d0: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20  QLITE_NULLEQ is 
f7e0: 73 65 74 20 28 77 68 69 63 68 20 77 69 6c 6c 20  set (which will 
f7f0: 6f 6e 6c 79 20 68 61 70 70 65 6e 20 69 66 20 74  only happen if t
f800: 68 65 20 6f 70 65 72 61 74 6f 72 20 69 73 0a 20  he operator is. 
f810: 20 20 20 20 20 2a 2a 20 4f 50 5f 45 71 20 6f 72       ** OP_Eq or
f820: 20 4f 50 5f 4e 65 29 20 74 68 65 6e 20 74 61 6b   OP_Ne) then tak
f830: 65 20 74 68 65 20 6a 75 6d 70 20 6f 72 20 6e 6f  e the jump or no
f840: 74 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77  t depending on w
f850: 68 65 74 68 65 72 0a 20 20 20 20 20 20 2a 2a 20  hether.      ** 
f860: 6f 72 20 6e 6f 74 20 62 6f 74 68 20 6f 70 65 72  or not both oper
f870: 61 6e 64 73 20 61 72 65 20 6e 75 6c 6c 2e 0a 20  ands are null.. 
f880: 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73       */.      as
f890: 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
f8a0: 65 3d 3d 4f 50 5f 45 71 20 7c 7c 20 70 4f 70 2d  e==OP_Eq || pOp-
f8b0: 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29  >opcode==OP_Ne )
f8c0: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
f8d0: 28 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f 43 6c  (flags1 & MEM_Cl
f8e0: 65 61 72 65 64 29 3d 3d 30 20 29 3b 0a 20 20 20  eared)==0 );.   
f8f0: 20 20 20 61 73 73 65 72 74 28 20 28 70 4f 70 2d     assert( (pOp-
f900: 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d  >p5 & SQLITE_JUM
f910: 50 49 46 4e 55 4c 4c 29 3d 3d 30 20 29 3b 0a 20  PIFNULL)==0 );. 
f920: 20 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 31       if( (flags1
f930: 26 66 6c 61 67 73 33 26 4d 45 4d 5f 4e 75 6c 6c  &flags3&MEM_Null
f940: 29 21 3d 30 0a 20 20 20 20 20 20 20 26 26 20 28  )!=0.       && (
f950: 66 6c 61 67 73 33 26 4d 45 4d 5f 43 6c 65 61 72  flags3&MEM_Clear
f960: 65 64 29 3d 3d 30 0a 20 20 20 20 20 20 29 7b 0a  ed)==0.      ){.
f970: 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b          res = 0;
f980: 20 20 2f 2a 20 4f 70 65 72 61 6e 64 73 20 61 72    /* Operands ar
f990: 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20  e equal */.     
f9a0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
f9b0: 72 65 73 20 3d 20 31 3b 20 20 2f 2a 20 4f 70 65  res = 1;  /* Ope
f9c0: 72 61 6e 64 73 20 61 72 65 20 6e 6f 74 20 65 71  rands are not eq
f9d0: 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 0a 20  ual */.      }. 
f9e0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
f9f0: 2f 2a 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  /* SQLITE_NULLEQ
fa00: 20 69 73 20 63 6c 65 61 72 20 61 6e 64 20 61 74   is clear and at
fa10: 20 6c 65 61 73 74 20 6f 6e 65 20 6f 70 65 72 61   least one opera
fa20: 6e 64 20 69 73 20 4e 55 4c 4c 2c 0a 20 20 20 20  nd is NULL,.    
fa30: 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 20 72 65    ** then the re
fa40: 73 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20 4e  sult is always N
fa50: 55 4c 4c 2e 0a 20 20 20 20 20 20 2a 2a 20 54 68  ULL..      ** Th
fa60: 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
fa70: 69 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55  if the SQLITE_JU
fa80: 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20 69 73 20  MPIFNULL bit is 
fa90: 73 65 74 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  set..      */.  
faa0: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20      if( pOp->p5 
fab0: 26 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32  & SQLITE_STOREP2
fac0: 20 29 7b 0a 20 20 20 20 20 20 20 20 70 4f 75 74   ){.        pOut
fad0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
fae0: 5d 3b 0a 20 20 20 20 20 20 20 20 69 43 6f 6d 70  ];.        iComp
faf0: 61 72 65 20 3d 20 31 3b 20 20 20 20 2f 2a 20 4f  are = 1;    /* O
fb00: 70 65 72 61 6e 64 73 20 61 72 65 20 6e 6f 74 20  perands are not 
fb10: 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20 20  equal */.       
fb20: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
fb30: 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20  e(p, pOut);.    
fb40: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
fb50: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c  ag(pOut, MEM_Nul
fb60: 6c 29 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49  l);.        REGI
fb70: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
fb80: 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 20  p2, pOut);.     
fb90: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
fba0: 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
fbb0: 32 2c 33 29 3b 0a 20 20 20 20 20 20 20 20 69 66  2,3);.        if
fbc0: 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  ( pOp->p5 & SQLI
fbd0: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 29 7b  TE_JUMPIFNULL ){
fbe0: 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20  .          goto 
fbf0: 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20  jump_to_p2;.    
fc00: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
fc10: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
fc20: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a  .  }else{.    /*
fc30: 20 4e 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64   Neither operand
fc40: 20 69 73 20 4e 55 4c 4c 2e 20 20 44 6f 20 61 20   is NULL.  Do a 
fc50: 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 2a 2f 0a 20  comparison. */. 
fc60: 20 20 20 61 66 66 69 6e 69 74 79 20 3d 20 70 4f     affinity = pO
fc70: 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 41  p->p5 & SQLITE_A
fc80: 46 46 5f 4d 41 53 4b 3b 0a 20 20 20 20 69 66 28  FF_MASK;.    if(
fc90: 20 61 66 66 69 6e 69 74 79 3e 3d 53 51 4c 49 54   affinity>=SQLIT
fca0: 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 7b  E_AFF_NUMERIC ){
fcb0: 0a 20 20 20 20 20 20 69 66 28 20 28 66 6c 61 67  .      if( (flag
fcc0: 73 31 20 7c 20 66 6c 61 67 73 33 29 26 4d 45 4d  s1 | flags3)&MEM
fcd0: 5f 53 74 72 20 29 7b 0a 20 20 20 20 20 20 20 20  _Str ){.        
fce0: 69 66 28 20 28 66 6c 61 67 73 31 20 26 20 28 4d  if( (flags1 & (M
fcf0: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c  EM_Int|MEM_Real|
fd00: 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f 53  MEM_Str))==MEM_S
fd10: 74 72 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  tr ){.          
fd20: 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69  applyNumericAffi
fd30: 6e 69 74 79 28 70 49 6e 31 2c 30 29 3b 0a 20 20  nity(pIn1,0);.  
fd40: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
fd50: 66 6c 61 67 73 33 3d 3d 70 49 6e 33 2d 3e 66 6c  flags3==pIn3->fl
fd60: 61 67 73 20 29 3b 0a 20 20 20 20 20 20 20 20 20  ags );.         
fd70: 20 2f 2a 20 74 65 73 74 63 61 73 65 28 20 66 6c   /* testcase( fl
fd80: 61 67 73 33 21 3d 70 49 6e 33 2d 3e 66 6c 61 67  ags3!=pIn3->flag
fd90: 73 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 2a  s );.          *
fda0: 2a 20 74 68 69 73 20 75 73 65 64 20 74 6f 20 62  * this used to b
fdb0: 65 20 70 6f 73 73 69 62 6c 65 20 77 69 74 68 20  e possible with 
fdc0: 70 49 6e 31 3d 3d 70 49 6e 33 2c 20 62 75 74 20  pIn1==pIn3, but 
fdd0: 6e 6f 74 20 73 69 6e 63 65 0a 20 20 20 20 20 20  not since.      
fde0: 20 20 20 20 2a 2a 20 74 68 65 20 63 6f 6c 75 6d      ** the colum
fdf0: 6e 20 63 61 63 68 65 20 77 61 73 20 72 65 6d 6f  n cache was remo
fe00: 76 65 64 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77  ved.  The follow
fe10: 69 6e 67 20 61 73 73 69 67 6e 6d 65 6e 74 0a 20  ing assignment. 
fe20: 20 20 20 20 20 20 20 20 20 2a 2a 20 69 73 20 65           ** is e
fe30: 73 73 65 6e 74 69 61 6c 6c 79 20 61 20 6e 6f 2d  ssentially a no-
fe40: 6f 70 2e 20 20 42 75 74 2c 20 69 74 20 70 72 6f  op.  But, it pro
fe50: 76 69 64 65 73 20 64 65 66 65 6e 73 65 2d 69 6e  vides defense-in
fe60: 2d 64 65 70 74 68 0a 20 20 20 20 20 20 20 20 20  -depth.         
fe70: 20 2a 2a 20 69 6e 20 63 61 73 65 20 6f 75 72 20   ** in case our 
fe80: 61 6e 61 6c 79 73 69 73 20 69 73 20 69 6e 63 6f  analysis is inco
fe90: 72 72 65 63 74 2c 20 73 6f 20 69 74 20 69 73 20  rrect, so it is 
fea0: 6c 65 66 74 20 69 6e 2e 20 2a 2f 0a 20 20 20 20  left in. */.    
feb0: 20 20 20 20 20 20 66 6c 61 67 73 33 20 3d 20 70        flags3 = p
fec0: 49 6e 33 2d 3e 66 6c 61 67 73 3b 0a 20 20 20 20  In3->flags;.    
fed0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66      }.        if
fee0: 28 20 28 66 6c 61 67 73 33 20 26 20 28 4d 45 4d  ( (flags3 & (MEM
fef0: 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45  _Int|MEM_Real|ME
ff00: 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72  M_Str))==MEM_Str
ff10: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 61 70   ){.          ap
ff20: 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  plyNumericAffini
ff30: 74 79 28 70 49 6e 33 2c 30 29 3b 0a 20 20 20 20  ty(pIn3,0);.    
ff40: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
ff50: 20 20 20 20 2f 2a 20 48 61 6e 64 6c 65 20 74 68      /* Handle th
ff60: 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 6f 66  e common case of
ff70: 20 69 6e 74 65 67 65 72 20 63 6f 6d 70 61 72 69   integer compari
ff80: 73 6f 6e 20 68 65 72 65 2c 20 61 73 20 61 6e 0a  son here, as an.
ff90: 20 20 20 20 20 20 2a 2a 20 6f 70 74 69 6d 69 7a        ** optimiz
ffa0: 61 74 69 6f 6e 2c 20 74 6f 20 61 76 6f 69 64 20  ation, to avoid 
ffb0: 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65  a call to sqlite
ffc0: 33 4d 65 6d 43 6f 6d 70 61 72 65 28 29 20 2a 2f  3MemCompare() */
ffd0: 0a 20 20 20 20 20 20 69 66 28 20 28 70 49 6e 31  .      if( (pIn1
ffe0: 2d 3e 66 6c 61 67 73 20 26 20 70 49 6e 33 2d 3e  ->flags & pIn3->
fff0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
10000 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 69  !=0 ){.        i
10010 66 28 20 70 49 6e 33 2d 3e 75 2e 69 20 3e 20 70  f( pIn3->u.i > p
10020 49 6e 31 2d 3e 75 2e 69 20 29 7b 20 72 65 73 20  In1->u.i ){ res 
10030 3d 20 2b 31 3b 20 67 6f 74 6f 20 63 6f 6d 70 61  = +1; goto compa
10040 72 65 5f 6f 70 3b 20 7d 0a 20 20 20 20 20 20 20  re_op; }.       
10050 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e 69 20 3c   if( pIn3->u.i <
10060 20 70 49 6e 31 2d 3e 75 2e 69 20 29 7b 20 72 65   pIn1->u.i ){ re
10070 73 20 3d 20 2d 31 3b 20 67 6f 74 6f 20 63 6f 6d  s = -1; goto com
10080 70 61 72 65 5f 6f 70 3b 20 7d 0a 20 20 20 20 20  pare_op; }.     
10090 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20     res = 0;.    
100a0 20 20 20 20 67 6f 74 6f 20 63 6f 6d 70 61 72 65      goto compare
100b0 5f 6f 70 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  _op;.      }.   
100c0 20 7d 65 6c 73 65 20 69 66 28 20 61 66 66 69 6e   }else if( affin
100d0 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
100e0 54 45 58 54 20 29 7b 0a 20 20 20 20 20 20 69 66  TEXT ){.      if
100f0 28 20 28 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f  ( (flags1 & MEM_
10100 53 74 72 29 3d 3d 30 20 26 26 20 28 66 6c 61 67  Str)==0 && (flag
10110 73 31 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45  s1 & (MEM_Int|ME
10120 4d 5f 52 65 61 6c 29 29 21 3d 30 20 29 7b 0a 20  M_Real))!=0 ){. 
10130 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28         testcase(
10140 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
10150 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 20 20  EM_Int );.      
10160 20 20 74 65 73 74 63 61 73 65 28 20 70 49 6e 31    testcase( pIn1
10170 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65  ->flags & MEM_Re
10180 61 6c 20 29 3b 0a 20 20 20 20 20 20 20 20 73 71  al );.        sq
10190 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69  lite3VdbeMemStri
101a0 6e 67 69 66 79 28 70 49 6e 31 2c 20 65 6e 63 6f  ngify(pIn1, enco
101b0 64 69 6e 67 2c 20 31 29 3b 0a 20 20 20 20 20 20  ding, 1);.      
101c0 20 20 74 65 73 74 63 61 73 65 28 20 28 66 6c 61    testcase( (fla
101d0 67 73 31 26 4d 45 4d 5f 44 79 6e 29 20 21 3d 20  gs1&MEM_Dyn) != 
101e0 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d  (pIn1->flags&MEM
101f0 5f 44 79 6e 29 20 29 3b 0a 20 20 20 20 20 20 20  _Dyn) );.       
10200 20 66 6c 61 67 73 31 20 3d 20 28 70 49 6e 31 2d   flags1 = (pIn1-
10210 3e 66 6c 61 67 73 20 26 20 7e 4d 45 4d 5f 54 79  >flags & ~MEM_Ty
10220 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67 73  peMask) | (flags
10230 31 20 26 20 4d 45 4d 5f 54 79 70 65 4d 61 73 6b  1 & MEM_TypeMask
10240 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
10250 74 28 20 70 49 6e 31 21 3d 70 49 6e 33 20 29 3b  t( pIn1!=pIn3 );
10260 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
10270 66 28 20 28 66 6c 61 67 73 33 20 26 20 4d 45 4d  f( (flags3 & MEM
10280 5f 53 74 72 29 3d 3d 30 20 26 26 20 28 66 6c 61  _Str)==0 && (fla
10290 67 73 33 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d  gs3 & (MEM_Int|M
102a0 45 4d 5f 52 65 61 6c 29 29 21 3d 30 20 29 7b 0a  EM_Real))!=0 ){.
102b0 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65          testcase
102c0 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20  ( pIn3->flags & 
102d0 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 20  MEM_Int );.     
102e0 20 20 20 74 65 73 74 63 61 73 65 28 20 70 49 6e     testcase( pIn
102f0 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  3->flags & MEM_R
10300 65 61 6c 20 29 3b 0a 20 20 20 20 20 20 20 20 73  eal );.        s
10310 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72  qlite3VdbeMemStr
10320 69 6e 67 69 66 79 28 70 49 6e 33 2c 20 65 6e 63  ingify(pIn3, enc
10330 6f 64 69 6e 67 2c 20 31 29 3b 0a 20 20 20 20 20  oding, 1);.     
10340 20 20 20 74 65 73 74 63 61 73 65 28 20 28 66 6c     testcase( (fl
10350 61 67 73 33 26 4d 45 4d 5f 44 79 6e 29 20 21 3d  ags3&MEM_Dyn) !=
10360 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45   (pIn3->flags&ME
10370 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 20 20 20 20  M_Dyn) );.      
10380 20 20 66 6c 61 67 73 33 20 3d 20 28 70 49 6e 33    flags3 = (pIn3
10390 2d 3e 66 6c 61 67 73 20 26 20 7e 4d 45 4d 5f 54  ->flags & ~MEM_T
103a0 79 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67  ypeMask) | (flag
103b0 73 33 20 26 20 4d 45 4d 5f 54 79 70 65 4d 61 73  s3 & MEM_TypeMas
103c0 6b 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  k);.      }.    
103d0 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  }.    assert( pO
103e0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f  p->p4type==P4_CO
103f0 4c 4c 53 45 51 20 7c 7c 20 70 4f 70 2d 3e 70 34  LLSEQ || pOp->p4
10400 2e 70 43 6f 6c 6c 3d 3d 30 20 29 3b 0a 20 20 20  .pColl==0 );.   
10410 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33 4d 65   res = sqlite3Me
10420 6d 43 6f 6d 70 61 72 65 28 70 49 6e 33 2c 20 70  mCompare(pIn3, p
10430 49 6e 31 2c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f  In1, pOp->p4.pCo
10440 6c 6c 29 3b 0a 20 20 7d 0a 63 6f 6d 70 61 72 65  ll);.  }.compare
10450 5f 6f 70 3a 0a 20 20 2f 2a 20 41 74 20 74 68 69  _op:.  /* At thi
10460 73 20 70 6f 69 6e 74 2c 20 72 65 73 20 69 73 20  s point, res is 
10470 6e 65 67 61 74 69 76 65 2c 20 7a 65 72 6f 2c 20  negative, zero, 
10480 6f 72 20 70 6f 73 69 74 69 76 65 20 69 66 20 72  or positive if r
10490 65 67 5b 50 31 5d 20 69 73 0a 20 20 2a 2a 20 6c  eg[P1] is.  ** l
104a0 65 73 73 20 74 68 61 6e 2c 20 65 71 75 61 6c 20  ess than, equal 
104b0 74 6f 2c 20 6f 72 20 67 72 65 61 74 65 72 20 74  to, or greater t
104c0 68 61 6e 20 72 65 67 5b 50 33 5d 2c 20 72 65 73  han reg[P3], res
104d0 70 65 63 74 69 76 65 6c 79 2e 20 20 43 6f 6d 70  pectively.  Comp
104e0 75 74 65 0a 20 20 2a 2a 20 74 68 65 20 61 6e 73  ute.  ** the ans
104f0 77 65 72 20 74 6f 20 74 68 69 73 20 6f 70 65 72  wer to this oper
10500 61 74 6f 72 20 69 6e 20 72 65 73 32 2c 20 64 65  ator in res2, de
10510 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 61 74 20  pending on what 
10520 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 20  the comparison. 
10530 20 2a 2a 20 6f 70 65 72 61 74 6f 72 20 61 63 74   ** operator act
10540 75 61 6c 6c 79 20 69 73 2e 20 20 54 68 65 20 6e  ually is.  The n
10550 65 78 74 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64  ext block of cod
10560 65 20 64 65 70 65 6e 64 73 20 6f 6e 20 74 68 65  e depends on the
10570 20 66 61 63 74 0a 20 20 2a 2a 20 74 68 61 74 20   fact.  ** that 
10580 74 68 65 20 36 20 63 6f 6d 70 61 72 69 73 6f 6e  the 6 comparison
10590 20 6f 70 65 72 61 74 6f 72 73 20 61 72 65 20 63   operators are c
105a0 6f 6e 73 65 63 75 74 69 76 65 20 69 6e 74 65 67  onsecutive integ
105b0 65 72 73 20 69 6e 20 74 68 69 73 0a 20 20 2a 2a  ers in this.  **
105c0 20 6f 72 64 65 72 3a 20 20 4e 45 2c 20 45 51 2c   order:  NE, EQ,
105d0 20 47 54 2c 20 4c 45 2c 20 4c 54 2c 20 47 45 20   GT, LE, LT, GE 
105e0 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f  */.  assert( OP_
105f0 45 71 3d 3d 4f 50 5f 4e 65 2b 31 20 29 3b 20 61  Eq==OP_Ne+1 ); a
10600 73 73 65 72 74 28 20 4f 50 5f 47 74 3d 3d 4f 50  ssert( OP_Gt==OP
10610 5f 4e 65 2b 32 20 29 3b 20 61 73 73 65 72 74 28  _Ne+2 ); assert(
10620 20 4f 50 5f 4c 65 3d 3d 4f 50 5f 4e 65 2b 33 20   OP_Le==OP_Ne+3 
10630 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f  );.  assert( OP_
10640 4c 74 3d 3d 4f 50 5f 4e 65 2b 34 20 29 3b 20 61  Lt==OP_Ne+4 ); a
10650 73 73 65 72 74 28 20 4f 50 5f 47 65 3d 3d 4f 50  ssert( OP_Ge==OP
10660 5f 4e 65 2b 35 20 29 3b 0a 20 20 69 66 28 20 72  _Ne+5 );.  if( r
10670 65 73 3c 30 20 29 7b 20 20 20 20 20 20 20 20 20  es<0 ){         
10680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
10690 2a 20 6e 65 2c 20 65 71 2c 20 67 74 2c 20 6c 65  * ne, eq, gt, le
106a0 2c 20 6c 74 2c 20 67 65 20 2a 2f 0a 20 20 20 20  , lt, ge */.    
106b0 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73  static const uns
106c0 69 67 6e 65 64 20 63 68 61 72 20 61 4c 54 62 5b  igned char aLTb[
106d0 5d 20 3d 20 7b 20 31 2c 20 20 30 2c 20 20 30 2c  ] = { 1,  0,  0,
106e0 20 20 31 2c 20 20 31 2c 20 20 30 20 7d 3b 0a 20    1,  1,  0 };. 
106f0 20 20 20 72 65 73 32 20 3d 20 61 4c 54 62 5b 70     res2 = aLTb[p
10700 4f 70 2d 3e 6f 70 63 6f 64 65 20 2d 20 4f 50 5f  Op->opcode - OP_
10710 4e 65 5d 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  Ne];.  }else if(
10720 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 73   res==0 ){.    s
10730 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69  tatic const unsi
10740 67 6e 65 64 20 63 68 61 72 20 61 45 51 62 5b 5d  gned char aEQb[]
10750 20 3d 20 7b 20 30 2c 20 20 31 2c 20 20 30 2c 20   = { 0,  1,  0, 
10760 20 31 2c 20 20 30 2c 20 20 31 20 7d 3b 0a 20 20   1,  0,  1 };.  
10770 20 20 72 65 73 32 20 3d 20 61 45 51 62 5b 70 4f    res2 = aEQb[pO
10780 70 2d 3e 6f 70 63 6f 64 65 20 2d 20 4f 50 5f 4e  p->opcode - OP_N
10790 65 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  e];.  }else{.   
107a0 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e   static const un
107b0 73 69 67 6e 65 64 20 63 68 61 72 20 61 47 54 62  signed char aGTb
107c0 5b 5d 20 3d 20 7b 20 31 2c 20 20 30 2c 20 20 31  [] = { 1,  0,  1
107d0 2c 20 20 30 2c 20 20 30 2c 20 20 31 20 7d 3b 0a  ,  0,  0,  1 };.
107e0 20 20 20 20 72 65 73 32 20 3d 20 61 47 54 62 5b      res2 = aGTb[
107f0 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 2d 20 4f 50  pOp->opcode - OP
10800 5f 4e 65 5d 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  _Ne];.  }..  /* 
10810 55 6e 64 6f 20 61 6e 79 20 63 68 61 6e 67 65 73  Undo any changes
10820 20 6d 61 64 65 20 62 79 20 61 70 70 6c 79 41 66   made by applyAf
10830 66 69 6e 69 74 79 28 29 20 74 6f 20 74 68 65 20  finity() to the 
10840 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 2e  input registers.
10850 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 28 70   */.  assert( (p
10860 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
10870 5f 44 79 6e 29 20 3d 3d 20 28 66 6c 61 67 73 31  _Dyn) == (flags1
10880 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20   & MEM_Dyn) );. 
10890 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 66   pIn1->flags = f
108a0 6c 61 67 73 31 3b 0a 20 20 61 73 73 65 72 74 28  lags1;.  assert(
108b0 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20   (pIn3->flags & 
108c0 4d 45 4d 5f 44 79 6e 29 20 3d 3d 20 28 66 6c 61  MEM_Dyn) == (fla
108d0 67 73 33 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29  gs3 & MEM_Dyn) )
108e0 3b 0a 20 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20  ;.  pIn3->flags 
108f0 3d 20 66 6c 61 67 73 33 3b 0a 0a 20 20 69 66 28  = flags3;..  if(
10900 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54   pOp->p5 & SQLIT
10910 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20  E_STOREP2 ){.   
10920 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
10930 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 69 43 6f 6d  p->p2];.    iCom
10940 70 61 72 65 20 3d 20 72 65 73 3b 0a 20 20 20 20  pare = res;.    
10950 69 66 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 53  if( (pOp->p5 & S
10960 51 4c 49 54 45 5f 4b 45 45 50 4e 55 4c 4c 29 21  QLITE_KEEPNULL)!
10970 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 54  =0 ){.      /* T
10980 68 65 20 4b 45 45 50 4e 55 4c 4c 20 66 6c 61 67  he KEEPNULL flag
10990 20 70 72 65 76 65 6e 74 73 20 4f 50 5f 45 71 20   prevents OP_Eq 
109a0 66 72 6f 6d 20 6f 76 65 72 77 72 69 74 69 6e 67  from overwriting
109b0 20 61 20 4e 55 4c 4c 20 77 69 74 68 20 31 0a 20   a NULL with 1. 
109c0 20 20 20 20 20 2a 2a 20 61 6e 64 20 70 72 65 76       ** and prev
109d0 65 6e 74 73 20 4f 50 5f 4e 65 20 66 72 6f 6d 20  ents OP_Ne from 
109e0 6f 76 65 72 77 72 69 74 69 6e 67 20 4e 55 4c 4c  overwriting NULL
109f0 20 77 69 74 68 20 30 2e 20 20 54 68 69 73 20 66   with 0.  This f
10a00 6c 61 67 0a 20 20 20 20 20 20 2a 2a 20 69 73 20  lag.      ** is 
10a10 6f 6e 6c 79 20 75 73 65 64 20 69 6e 20 63 6f 6e  only used in con
10a20 74 65 78 74 73 20 77 68 65 72 65 20 65 69 74 68  texts where eith
10a30 65 72 3a 0a 20 20 20 20 20 20 2a 2a 20 20 20 28  er:.      **   (
10a40 31 29 20 6f 70 3d 3d 4f 50 5f 45 71 20 26 26 20  1) op==OP_Eq && 
10a50 28 72 5b 50 32 5d 3d 3d 4e 55 4c 4c 20 7c 7c 20  (r[P2]==NULL || 
10a60 72 5b 50 32 5d 3d 3d 30 29 0a 20 20 20 20 20 20  r[P2]==0).      
10a70 2a 2a 20 20 20 28 32 29 20 6f 70 3d 3d 4f 50 5f  **   (2) op==OP_
10a80 4e 65 20 26 26 20 28 72 5b 50 32 5d 3d 3d 4e 55  Ne && (r[P2]==NU
10a90 4c 4c 20 7c 7c 20 72 5b 50 32 5d 3d 3d 31 29 0a  LL || r[P2]==1).
10aa0 20 20 20 20 20 20 2a 2a 20 54 68 65 72 65 66 6f        ** Therefo
10ab0 72 65 20 69 74 20 69 73 20 6e 6f 74 20 6e 65 63  re it is not nec
10ac0 65 73 73 61 72 79 20 74 6f 20 63 68 65 63 6b 20  essary to check 
10ad0 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
10ae0 5b 50 32 5d 20 66 6f 72 0a 20 20 20 20 20 20 2a  [P2] for.      *
10af0 2a 20 4e 55 4c 4c 2e 20 2a 2f 0a 20 20 20 20 20  * NULL. */.     
10b00 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
10b10 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 7c 7c 20 70  code==OP_Ne || p
10b20 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45  Op->opcode==OP_E
10b30 71 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  q );.      asser
10b40 74 28 20 72 65 73 32 3d 3d 30 20 7c 7c 20 72 65  t( res2==0 || re
10b50 73 32 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20 74  s2==1 );.      t
10b60 65 73 74 63 61 73 65 28 20 72 65 73 32 3d 3d 30  estcase( res2==0
10b70 20 26 26 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   && pOp->opcode=
10b80 3d 4f 50 5f 45 71 20 29 3b 0a 20 20 20 20 20 20  =OP_Eq );.      
10b90 74 65 73 74 63 61 73 65 28 20 72 65 73 32 3d 3d  testcase( res2==
10ba0 31 20 26 26 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  1 && pOp->opcode
10bb0 3d 3d 4f 50 5f 45 71 20 29 3b 0a 20 20 20 20 20  ==OP_Eq );.     
10bc0 20 74 65 73 74 63 61 73 65 28 20 72 65 73 32 3d   testcase( res2=
10bd0 3d 30 20 26 26 20 70 4f 70 2d 3e 6f 70 63 6f 64  =0 && pOp->opcod
10be0 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20 20 20  e==OP_Ne );.    
10bf0 20 20 74 65 73 74 63 61 73 65 28 20 72 65 73 32    testcase( res2
10c00 3d 3d 31 20 26 26 20 70 4f 70 2d 3e 6f 70 63 6f  ==1 && pOp->opco
10c10 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20 20  de==OP_Ne );.   
10c20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 63     if( (pOp->opc
10c30 6f 64 65 3d 3d 4f 50 5f 45 71 29 3d 3d 72 65 73  ode==OP_Eq)==res
10c40 32 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d  2 ) break;.    }
10c50 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  .    memAboutToC
10c60 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a  hange(p, pOut);.
10c70 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
10c80 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
10c90 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  );.    pOut->u.i
10ca0 20 3d 20 72 65 73 32 3b 0a 20 20 20 20 52 45 47   = res2;.    REG
10cb0 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
10cc0 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 7d 65  >p2, pOut);.  }e
10cd0 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61  lse{.    VdbeBra
10ce0 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c  nchTaken(res!=0,
10cf0 20 28 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49   (pOp->p5 & SQLI
10d00 54 45 5f 4e 55 4c 4c 45 51 29 3f 32 3a 33 29 3b  TE_NULLEQ)?2:3);
10d10 0a 20 20 20 20 69 66 28 20 72 65 73 32 20 29 7b  .    if( res2 ){
10d20 0a 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  .      goto jump
10d30 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a 20 20  _to_p2;.    }.  
10d40 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
10d50 20 4f 70 63 6f 64 65 3a 20 45 6c 73 65 4e 6f 74   Opcode: ElseNot
10d60 45 71 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  Eq * P2 * * *.**
10d70 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
10d80 6d 75 73 74 20 69 6d 6d 65 64 69 61 74 65 6c 79  must immediately
10d90 20 66 6f 6c 6c 6f 77 20 61 6e 20 4f 50 5f 4c 74   follow an OP_Lt
10da0 20 6f 72 20 4f 50 5f 47 74 20 63 6f 6d 70 61 72   or OP_Gt compar
10db0 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72 2e 0a 2a  ison operator..*
10dc0 2a 20 49 66 20 72 65 73 75 6c 74 20 6f 66 20 61  * If result of a
10dd0 6e 20 4f 50 5f 45 71 20 63 6f 6d 70 61 72 69 73  n OP_Eq comparis
10de0 6f 6e 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 74  on on the same t
10df0 77 6f 20 6f 70 65 72 61 6e 64 73 0a 2a 2a 20 77  wo operands.** w
10e00 6f 75 6c 64 20 68 61 76 65 20 62 65 20 4e 55 4c  ould have be NUL
10e10 4c 20 6f 72 20 66 61 6c 73 65 20 28 30 29 2c 20  L or false (0), 
10e20 74 68 65 6e 20 74 68 65 6e 20 6a 75 6d 70 20 74  then then jump t
10e30 6f 20 50 32 2e 20 0a 2a 2a 20 49 66 20 74 68 65  o P2. .** If the
10e40 20 72 65 73 75 6c 74 20 6f 66 20 61 6e 20 4f 50   result of an OP
10e50 5f 45 71 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f  _Eq comparison o
10e60 6e 20 74 68 65 20 74 77 6f 20 70 72 65 76 69 6f  n the two previo
10e70 75 73 20 6f 70 65 72 61 6e 64 73 0a 2a 2a 20 77  us operands.** w
10e80 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e 20 74  ould have been t
10e90 72 75 65 20 28 31 29 2c 20 74 68 65 6e 20 66 61  rue (1), then fa
10ea0 6c 6c 20 74 68 72 6f 75 67 68 2e 0a 2a 2f 0a 63  ll through..*/.c
10eb0 61 73 65 20 4f 50 5f 45 6c 73 65 4e 6f 74 45 71  ase OP_ElseNotEq
10ec0 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 73 61 6d  : {       /* sam
10ed0 65 20 61 73 20 54 4b 5f 45 53 43 41 50 45 2c 20  e as TK_ESCAPE, 
10ee0 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74  jump */.  assert
10ef0 28 20 70 4f 70 3e 61 4f 70 20 29 3b 0a 20 20 61  ( pOp>aOp );.  a
10f00 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f  ssert( pOp[-1].o
10f10 70 63 6f 64 65 3d 3d 4f 50 5f 4c 74 20 7c 7c 20  pcode==OP_Lt || 
10f20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d  pOp[-1].opcode==
10f30 4f 50 5f 47 74 20 29 3b 0a 20 20 61 73 73 65 72  OP_Gt );.  asser
10f40 74 28 20 70 4f 70 5b 2d 31 5d 2e 70 35 20 26 20  t( pOp[-1].p5 & 
10f50 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29  SQLITE_STOREP2 )
10f60 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
10f70 6b 65 6e 28 69 43 6f 6d 70 61 72 65 21 3d 30 2c  ken(iCompare!=0,
10f80 20 32 29 3b 0a 20 20 69 66 28 20 69 43 6f 6d 70   2);.  if( iComp
10f90 61 72 65 21 3d 30 20 29 20 67 6f 74 6f 20 6a 75  are!=0 ) goto ju
10fa0 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61  mp_to_p2;.  brea
10fb0 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65  k;.}.../* Opcode
10fc0 3a 20 50 65 72 6d 75 74 61 74 69 6f 6e 20 2a 20  : Permutation * 
10fd0 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 53  * * P4 *.**.** S
10fe0 65 74 20 74 68 65 20 70 65 72 6d 75 74 61 74 69  et the permutati
10ff0 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65 20 4f  on used by the O
11000 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61 74  P_Compare operat
11010 6f 72 20 69 6e 20 74 68 65 20 6e 65 78 74 0a 2a  or in the next.*
11020 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  * instruction.  
11030 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20  The permutation 
11040 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  is stored in the
11050 20 50 34 20 6f 70 65 72 61 6e 64 2e 0a 2a 2a 0a   P4 operand..**.
11060 2a 2a 20 54 68 65 20 70 65 72 6d 75 74 61 74 69  ** The permutati
11070 6f 6e 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64  on is only valid
11080 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 20   until the next 
11090 4f 50 5f 43 6f 6d 70 61 72 65 20 74 68 61 74 20  OP_Compare that 
110a0 68 61 73 0a 2a 2a 20 74 68 65 20 4f 50 46 4c 41  has.** the OPFLA
110b0 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20 73 65  G_PERMUTE bit se
110c0 74 20 69 6e 20 50 35 2e 20 54 79 70 69 63 61 6c  t in P5. Typical
110d0 6c 79 20 74 68 65 20 4f 50 5f 50 65 72 6d 75 74  ly the OP_Permut
110e0 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 0a 2a 2a  ation should .**
110f0 20 6f 63 63 75 72 20 69 6d 6d 65 64 69 61 74 65   occur immediate
11100 6c 79 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20  ly prior to the 
11110 4f 50 5f 43 6f 6d 70 61 72 65 2e 0a 2a 2a 0a 2a  OP_Compare..**.*
11120 2a 20 54 68 65 20 66 69 72 73 74 20 69 6e 74 65  * The first inte
11130 67 65 72 20 69 6e 20 74 68 65 20 50 34 20 69 6e  ger in the P4 in
11140 74 65 67 65 72 20 61 72 72 61 79 20 69 73 20 74  teger array is t
11150 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65  he length of the
11160 20 61 72 72 61 79 0a 2a 2a 20 61 6e 64 20 64 6f   array.** and do
11170 65 73 20 6e 6f 74 20 62 65 63 6f 6d 65 20 70 61  es not become pa
11180 72 74 20 6f 66 20 74 68 65 20 70 65 72 6d 75 74  rt of the permut
11190 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ation..*/.case O
111a0 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 3a 20 7b  P_Permutation: {
111b0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
111c0 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52  p4type==P4_INTAR
111d0 52 41 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28  RAY );.  assert(
111e0 20 70 4f 70 2d 3e 70 34 2e 61 69 20 29 3b 0a 20   pOp->p4.ai );. 
111f0 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e   assert( pOp[1].
11200 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6d 70 61  opcode==OP_Compa
11210 72 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  re );.  assert( 
11220 70 4f 70 5b 31 5d 2e 70 35 20 26 20 4f 50 46 4c  pOp[1].p5 & OPFL
11230 41 47 5f 50 45 52 4d 55 54 45 20 29 3b 0a 20 20  AG_PERMUTE );.  
11240 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
11250 6f 64 65 3a 20 43 6f 6d 70 61 72 65 20 50 31 20  ode: Compare P1 
11260 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
11270 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 40 50 33  ynopsis: r[P1@P3
11280 5d 20 3c 2d 3e 20 72 5b 50 32 40 50 33 5d 0a 2a  ] <-> r[P2@P3].*
11290 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 77 6f  *.** Compare two
112a0 20 76 65 63 74 6f 72 73 20 6f 66 20 72 65 67 69   vectors of regi
112b0 73 74 65 72 73 20 69 6e 20 72 65 67 28 50 31 29  sters in reg(P1)
112c0 2e 2e 72 65 67 28 50 31 2b 50 33 2d 31 29 20 28  ..reg(P1+P3-1) (
112d0 63 61 6c 6c 20 74 68 69 73 0a 2a 2a 20 76 65 63  call this.** vec
112e0 74 6f 72 20 22 41 22 29 20 61 6e 64 20 69 6e 20  tor "A") and in 
112f0 72 65 67 28 50 32 29 2e 2e 72 65 67 28 50 32 2b  reg(P2)..reg(P2+
11300 50 33 2d 31 29 20 28 22 42 22 29 2e 20 20 53 61  P3-1) ("B").  Sa
11310 76 65 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  ve the result of
11320 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72 69 73  .** the comparis
11330 6f 6e 20 66 6f 72 20 75 73 65 20 62 79 20 74 68  on for use by th
11340 65 20 6e 65 78 74 20 4f 50 5f 4a 75 6d 70 20 69  e next OP_Jump i
11350 6e 73 74 72 75 63 74 2e 0a 2a 2a 0a 2a 2a 20 49  nstruct..**.** I
11360 66 20 50 35 20 68 61 73 20 74 68 65 20 4f 50 46  f P5 has the OPF
11370 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20  LAG_PERMUTE bit 
11380 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 6f 72  set, then the or
11390 64 65 72 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f  der of compariso
113a0 6e 20 69 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e  n is.** determin
113b0 65 64 20 62 79 20 74 68 65 20 6d 6f 73 74 20 72  ed by the most r
113c0 65 63 65 6e 74 20 4f 50 5f 50 65 72 6d 75 74 61  ecent OP_Permuta
113d0 74 69 6f 6e 20 6f 70 65 72 61 74 6f 72 2e 20 20  tion operator.  
113e0 49 66 20 74 68 65 0a 2a 2a 20 4f 50 46 4c 41 47  If the.** OPFLAG
113f0 5f 50 45 52 4d 55 54 45 20 62 69 74 20 69 73 20  _PERMUTE bit is 
11400 63 6c 65 61 72 2c 20 74 68 65 6e 20 72 65 67 69  clear, then regi
11410 73 74 65 72 20 61 72 65 20 63 6f 6d 70 61 72 65  ster are compare
11420 64 20 69 6e 20 73 65 71 75 65 6e 74 69 61 6c 0a  d in sequential.
11430 2a 2a 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20  ** order..**.** 
11440 50 34 20 69 73 20 61 20 4b 65 79 49 6e 66 6f 20  P4 is a KeyInfo 
11450 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20 64  structure that d
11460 65 66 69 6e 65 73 20 63 6f 6c 6c 61 74 69 6e 67  efines collating
11470 20 73 65 71 75 65 6e 63 65 73 20 61 6e 64 20 73   sequences and s
11480 6f 72 74 0a 2a 2a 20 6f 72 64 65 72 73 20 66 6f  ort.** orders fo
11490 72 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  r the comparison
114a0 2e 20 20 54 68 65 20 70 65 72 6d 75 74 61 74 69  .  The permutati
114b0 6f 6e 20 61 70 70 6c 69 65 73 20 74 6f 20 72 65  on applies to re
114c0 67 69 73 74 65 72 73 0a 2a 2a 20 6f 6e 6c 79 2e  gisters.** only.
114d0 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 65 6c    The KeyInfo el
114e0 65 6d 65 6e 74 73 20 61 72 65 20 75 73 65 64 20  ements are used 
114f0 73 65 71 75 65 6e 74 69 61 6c 6c 79 2e 0a 2a 2a  sequentially..**
11500 0a 2a 2a 20 54 68 65 20 63 6f 6d 70 61 72 69 73  .** The comparis
11510 6f 6e 20 69 73 20 61 20 73 6f 72 74 20 63 6f 6d  on is a sort com
11520 70 61 72 69 73 6f 6e 2c 20 73 6f 20 4e 55 4c 4c  parison, so NULL
11530 73 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 2c  s compare equal,
11540 0a 2a 2a 20 4e 55 4c 4c 73 20 61 72 65 20 6c 65  .** NULLs are le
11550 73 73 20 74 68 61 6e 20 6e 75 6d 62 65 72 73 2c  ss than numbers,
11560 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6c 65 73   numbers are les
11570 73 20 74 68 61 6e 20 73 74 72 69 6e 67 73 2c 0a  s than strings,.
11580 2a 2a 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61  ** and strings a
11590 72 65 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f  re less than blo
115a0 62 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  bs..*/.case OP_C
115b0 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 69 6e 74 20  ompare: {.  int 
115c0 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e  n;.  int i;.  in
115d0 74 20 70 31 3b 0a 20 20 69 6e 74 20 70 32 3b 0a  t p1;.  int p2;.
115e0 20 20 63 6f 6e 73 74 20 4b 65 79 49 6e 66 6f 20    const KeyInfo 
115f0 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74  *pKeyInfo;.  int
11600 20 69 64 78 3b 0a 20 20 43 6f 6c 6c 53 65 71 20   idx;.  CollSeq 
11610 2a 70 43 6f 6c 6c 3b 20 20 20 20 2f 2a 20 43 6f  *pColl;    /* Co
11620 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
11630 20 74 6f 20 75 73 65 20 6f 6e 20 74 68 69 73 20   to use on this 
11640 74 65 72 6d 20 2a 2f 0a 20 20 69 6e 74 20 62 52  term */.  int bR
11650 65 76 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ev;          /* 
11660 54 72 75 65 20 66 6f 72 20 44 45 53 43 45 4e 44  True for DESCEND
11670 49 4e 47 20 73 6f 72 74 20 6f 72 64 65 72 20 2a  ING sort order *
11680 2f 0a 20 20 69 6e 74 20 2a 61 50 65 72 6d 75 74  /.  int *aPermut
11690 65 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 70 65  e;     /* The pe
116a0 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a 0a 20 20  rmutation */..  
116b0 69 66 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f  if( (pOp->p5 & O
116c0 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 29 3d 3d  PFLAG_PERMUTE)==
116d0 30 20 29 7b 0a 20 20 20 20 61 50 65 72 6d 75 74  0 ){.    aPermut
116e0 65 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a  e = 0;.  }else{.
116f0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 3e      assert( pOp>
11700 61 4f 70 20 29 3b 0a 20 20 20 20 61 73 73 65 72  aOp );.    asser
11710 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64  t( pOp[-1].opcod
11720 65 3d 3d 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f  e==OP_Permutatio
11730 6e 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  n );.    assert(
11740 20 70 4f 70 5b 2d 31 5d 2e 70 34 74 79 70 65 3d   pOp[-1].p4type=
11750 3d 50 34 5f 49 4e 54 41 52 52 41 59 20 29 3b 0a  =P4_INTARRAY );.
11760 20 20 20 20 61 50 65 72 6d 75 74 65 20 3d 20 70      aPermute = p
11770 4f 70 5b 2d 31 5d 2e 70 34 2e 61 69 20 2b 20 31  Op[-1].p4.ai + 1
11780 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 61 50  ;.    assert( aP
11790 65 72 6d 75 74 65 21 3d 30 20 29 3b 0a 20 20 7d  ermute!=0 );.  }
117a0 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  .  n = pOp->p3;.
117b0 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70    pKeyInfo = pOp
117c0 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20  ->p4.pKeyInfo;. 
117d0 20 61 73 73 65 72 74 28 20 6e 3e 30 20 29 3b 0a   assert( n>0 );.
117e0 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e    assert( pKeyIn
117f0 66 6f 21 3d 30 20 29 3b 0a 20 20 70 31 20 3d 20  fo!=0 );.  p1 = 
11800 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20  pOp->p1;.  p2 = 
11810 70 4f 70 2d 3e 70 32 3b 0a 23 69 66 64 65 66 20  pOp->p2;.#ifdef 
11820 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69  SQLITE_DEBUG.  i
11830 66 28 20 61 50 65 72 6d 75 74 65 20 29 7b 0a 20  f( aPermute ){. 
11840 20 20 20 69 6e 74 20 6b 2c 20 6d 78 20 3d 20 30     int k, mx = 0
11850 3b 0a 20 20 20 20 66 6f 72 28 6b 3d 30 3b 20 6b  ;.    for(k=0; k
11860 3c 6e 3b 20 6b 2b 2b 29 20 69 66 28 20 61 50 65  <n; k++) if( aPe
11870 72 6d 75 74 65 5b 6b 5d 3e 6d 78 20 29 20 6d 78  rmute[k]>mx ) mx
11880 20 3d 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3b 0a   = aPermute[k];.
11890 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3e 30      assert( p1>0
118a0 20 26 26 20 70 31 2b 6d 78 3c 3d 28 70 2d 3e 6e   && p1+mx<=(p->n
118b0 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
118c0 6f 72 29 2b 31 20 29 3b 0a 20 20 20 20 61 73 73  or)+1 );.    ass
118d0 65 72 74 28 20 70 32 3e 30 20 26 26 20 70 32 2b  ert( p2>0 && p2+
118e0 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  mx<=(p->nMem+1 -
118f0 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29   p->nCursor)+1 )
11900 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
11910 73 73 65 72 74 28 20 70 31 3e 30 20 26 26 20 70  ssert( p1>0 && p
11920 31 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  1+n<=(p->nMem+1 
11930 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20  - p->nCursor)+1 
11940 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
11950 32 3e 30 20 26 26 20 70 32 2b 6e 3c 3d 28 70 2d  2>0 && p2+n<=(p-
11960 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
11970 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 7d 0a 23  rsor)+1 );.  }.#
11980 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
11990 44 45 42 55 47 20 2a 2f 0a 20 20 66 6f 72 28 69  DEBUG */.  for(i
119a0 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a 20  =0; i<n; i++){. 
119b0 20 20 20 69 64 78 20 3d 20 61 50 65 72 6d 75 74     idx = aPermut
119c0 65 20 3f 20 61 50 65 72 6d 75 74 65 5b 69 5d 20  e ? aPermute[i] 
119d0 3a 20 69 3b 0a 20 20 20 20 61 73 73 65 72 74 28  : i;.    assert(
119e0 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65   memIsValid(&aMe
119f0 6d 5b 70 31 2b 69 64 78 5d 29 20 29 3b 0a 20 20  m[p1+idx]) );.  
11a00 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
11a10 61 6c 69 64 28 26 61 4d 65 6d 5b 70 32 2b 69 64  alid(&aMem[p2+id
11a20 78 5d 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53  x]) );.    REGIS
11a30 54 45 52 5f 54 52 41 43 45 28 70 31 2b 69 64 78  TER_TRACE(p1+idx
11a40 2c 20 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29  , &aMem[p1+idx])
11a50 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
11a60 52 41 43 45 28 70 32 2b 69 64 78 2c 20 26 61 4d  RACE(p2+idx, &aM
11a70 65 6d 5b 70 32 2b 69 64 78 5d 29 3b 0a 20 20 20  em[p2+idx]);.   
11a80 20 61 73 73 65 72 74 28 20 69 3c 70 4b 65 79 49   assert( i<pKeyI
11a90 6e 66 6f 2d 3e 6e 4b 65 79 46 69 65 6c 64 20 29  nfo->nKeyField )
11aa0 3b 0a 20 20 20 20 70 43 6f 6c 6c 20 3d 20 70 4b  ;.    pColl = pK
11ab0 65 79 49 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b 69 5d  eyInfo->aColl[i]
11ac0 3b 0a 20 20 20 20 62 52 65 76 20 3d 20 70 4b 65  ;.    bRev = pKe
11ad0 79 49 6e 66 6f 2d 3e 61 53 6f 72 74 4f 72 64 65  yInfo->aSortOrde
11ae0 72 5b 69 5d 3b 0a 20 20 20 20 69 43 6f 6d 70 61  r[i];.    iCompa
11af0 72 65 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43  re = sqlite3MemC
11b00 6f 6d 70 61 72 65 28 26 61 4d 65 6d 5b 70 31 2b  ompare(&aMem[p1+
11b10 69 64 78 5d 2c 20 26 61 4d 65 6d 5b 70 32 2b 69  idx], &aMem[p2+i
11b20 64 78 5d 2c 20 70 43 6f 6c 6c 29 3b 0a 20 20 20  dx], pColl);.   
11b30 20 69 66 28 20 69 43 6f 6d 70 61 72 65 20 29 7b   if( iCompare ){
11b40 0a 20 20 20 20 20 20 69 66 28 20 62 52 65 76 20  .      if( bRev 
11b50 29 20 69 43 6f 6d 70 61 72 65 20 3d 20 2d 69 43  ) iCompare = -iC
11b60 6f 6d 70 61 72 65 3b 0a 20 20 20 20 20 20 62 72  ompare;.      br
11b70 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  eak;.    }.  }. 
11b80 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
11b90 63 6f 64 65 3a 20 4a 75 6d 70 20 50 31 20 50 32  code: Jump P1 P2
11ba0 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75   P3 * *.**.** Ju
11bb0 6d 70 20 74 6f 20 74 68 65 20 69 6e 73 74 72 75  mp to the instru
11bc0 63 74 69 6f 6e 20 61 74 20 61 64 64 72 65 73 73  ction at address
11bd0 20 50 31 2c 20 50 32 2c 20 6f 72 20 50 33 20 64   P1, P2, or P3 d
11be0 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74  epending on whet
11bf0 68 65 72 0a 2a 2a 20 69 6e 20 74 68 65 20 6d 6f  her.** in the mo
11c00 73 74 20 72 65 63 65 6e 74 20 4f 50 5f 43 6f 6d  st recent OP_Com
11c10 70 61 72 65 20 69 6e 73 74 72 75 63 74 69 6f 6e  pare instruction
11c20 20 74 68 65 20 50 31 20 76 65 63 74 6f 72 20 77   the P1 vector w
11c30 61 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20  as less than.** 
11c40 65 71 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72 65  equal to, or gre
11c50 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 50 32  ater than the P2
11c60 20 76 65 63 74 6f 72 2c 20 72 65 73 70 65 63 74   vector, respect
11c70 69 76 65 6c 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ively..*/.case O
11c80 50 5f 4a 75 6d 70 3a 20 7b 20 20 20 20 20 20 20  P_Jump: {       
11c90 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
11ca0 0a 20 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3c  .  if( iCompare<
11cb0 30 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61  0 ){.    VdbeBra
11cc0 6e 63 68 54 61 6b 65 6e 28 30 2c 34 29 3b 20 70  nchTaken(0,4); p
11cd0 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70  Op = &aOp[pOp->p
11ce0 31 20 2d 20 31 5d 3b 0a 20 20 7d 65 6c 73 65 20  1 - 1];.  }else 
11cf0 69 66 28 20 69 43 6f 6d 70 61 72 65 3d 3d 30 20  if( iCompare==0 
11d00 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  ){.    VdbeBranc
11d10 68 54 61 6b 65 6e 28 31 2c 34 29 3b 20 70 4f 70  hTaken(1,4); pOp
11d20 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 32 20   = &aOp[pOp->p2 
11d30 2d 20 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  - 1];.  }else{. 
11d40 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
11d50 65 6e 28 32 2c 34 29 3b 20 70 4f 70 20 3d 20 26  en(2,4); pOp = &
11d60 61 4f 70 5b 70 4f 70 2d 3e 70 33 20 2d 20 31 5d  aOp[pOp->p3 - 1]
11d70 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
11d80 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 6e 64  ../* Opcode: And
11d90 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
11da0 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
11db0 3d 28 72 5b 50 31 5d 20 26 26 20 72 5b 50 32 5d  =(r[P1] && r[P2]
11dc0 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65  ).**.** Take the
11dd0 20 6c 6f 67 69 63 61 6c 20 41 4e 44 20 6f 66 20   logical AND of 
11de0 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65  the values in re
11df0 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50  gisters P1 and P
11e00 32 20 61 6e 64 0a 2a 2a 20 77 72 69 74 65 20 74  2 and.** write t
11e10 68 65 20 72 65 73 75 6c 74 20 69 6e 74 6f 20 72  he result into r
11e20 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a  egister P3..**.*
11e30 2a 20 49 66 20 65 69 74 68 65 72 20 50 31 20 6f  * If either P1 o
11e40 72 20 50 32 20 69 73 20 30 20 28 66 61 6c 73 65  r P2 is 0 (false
11e50 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  ) then the resul
11e60 74 20 69 73 20 30 20 65 76 65 6e 20 69 66 0a 2a  t is 0 even if.*
11e70 2a 20 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75  * the other inpu
11e80 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55  t is NULL.  A NU
11e90 4c 4c 20 61 6e 64 20 74 72 75 65 20 6f 72 20 74  LL and true or t
11ea0 77 6f 20 4e 55 4c 4c 73 20 67 69 76 65 0a 2a 2a  wo NULLs give.**
11eb0 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a   a NULL output..
11ec0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 72  */./* Opcode: Or
11ed0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
11ee0 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
11ef0 3d 28 72 5b 50 31 5d 20 7c 7c 20 72 5b 50 32 5d  =(r[P1] || r[P2]
11f00 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65  ).**.** Take the
11f10 20 6c 6f 67 69 63 61 6c 20 4f 52 20 6f 66 20 74   logical OR of t
11f20 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
11f30 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20  ister P1 and P2 
11f40 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65  and.** store the
11f50 20 61 6e 73 77 65 72 20 69 6e 20 72 65 67 69 73   answer in regis
11f60 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66  ter P3..**.** If
11f70 20 65 69 74 68 65 72 20 50 31 20 6f 72 20 50 32   either P1 or P2
11f80 20 69 73 20 6e 6f 6e 7a 65 72 6f 20 28 74 72 75   is nonzero (tru
11f90 65 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  e) then the resu
11fa0 6c 74 20 69 73 20 31 20 28 74 72 75 65 29 0a 2a  lt is 1 (true).*
11fb0 2a 20 65 76 65 6e 20 69 66 20 74 68 65 20 6f 74  * even if the ot
11fc0 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
11fd0 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 66  L.  A NULL and f
11fe0 61 6c 73 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c  alse or two NULL
11ff0 73 0a 2a 2a 20 67 69 76 65 20 61 20 4e 55 4c 4c  s.** give a NULL
12000 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65   output..*/.case
12010 20 4f 50 5f 41 6e 64 3a 20 20 20 20 20 20 20 20   OP_And:        
12020 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
12030 20 54 4b 5f 41 4e 44 2c 20 69 6e 31 2c 20 69 6e   TK_AND, in1, in
12040 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
12050 4f 50 5f 4f 72 3a 20 7b 20 20 20 20 20 20 20 20  OP_Or: {        
12060 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
12070 54 4b 5f 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c  TK_OR, in1, in2,
12080 20 6f 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20 76   out3 */.  int v
12090 31 3b 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 70  1;    /* Left op
120a0 65 72 61 6e 64 3a 20 20 30 3d 3d 46 41 4c 53 45  erand:  0==FALSE
120b0 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e  , 1==TRUE, 2==UN
120c0 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f  KNOWN or NULL */
120d0 0a 20 20 69 6e 74 20 76 32 3b 20 20 20 20 2f 2a  .  int v2;    /*
120e0 20 52 69 67 68 74 20 6f 70 65 72 61 6e 64 3a 20   Right operand: 
120f0 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55  0==FALSE, 1==TRU
12100 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72  E, 2==UNKNOWN or
12110 20 4e 55 4c 4c 20 2a 2f 0a 0a 20 20 76 31 20 3d   NULL */..  v1 =
12120 20 73 71 6c 69 74 65 33 56 64 62 65 42 6f 6f 6c   sqlite3VdbeBool
12130 65 61 6e 56 61 6c 75 65 28 26 61 4d 65 6d 5b 70  eanValue(&aMem[p
12140 4f 70 2d 3e 70 31 5d 2c 20 32 29 3b 0a 20 20 76  Op->p1], 2);.  v
12150 32 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 42  2 = sqlite3VdbeB
12160 6f 6f 6c 65 61 6e 56 61 6c 75 65 28 26 61 4d 65  ooleanValue(&aMe
12170 6d 5b 70 4f 70 2d 3e 70 32 5d 2c 20 32 29 3b 0a  m[pOp->p2], 2);.
12180 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
12190 65 3d 3d 4f 50 5f 41 6e 64 20 29 7b 0a 20 20 20  e==OP_And ){.   
121a0 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e   static const un
121b0 73 69 67 6e 65 64 20 63 68 61 72 20 61 6e 64 5f  signed char and_
121c0 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 30  logic[] = { 0, 0
121d0 2c 20 30 2c 20 30 2c 20 31 2c 20 32 2c 20 30 2c  , 0, 0, 1, 2, 0,
121e0 20 32 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31 20   2, 2 };.    v1 
121f0 3d 20 61 6e 64 5f 6c 6f 67 69 63 5b 76 31 2a 33  = and_logic[v1*3
12200 2b 76 32 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  +v2];.  }else{. 
12210 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
12220 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 6f 72  unsigned char or
12230 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20  _logic[] = { 0, 
12240 31 2c 20 32 2c 20 31 2c 20 31 2c 20 31 2c 20 32  1, 2, 1, 1, 1, 2
12250 2c 20 31 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31  , 1, 2 };.    v1
12260 20 3d 20 6f 72 5f 6c 6f 67 69 63 5b 76 31 2a 33   = or_logic[v1*3
12270 2b 76 32 5d 3b 0a 20 20 7d 0a 20 20 70 4f 75 74  +v2];.  }.  pOut
12280 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
12290 5d 3b 0a 20 20 69 66 28 20 76 31 3d 3d 32 20 29  ];.  if( v1==2 )
122a0 7b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  {.    MemSetType
122b0 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e  Flag(pOut, MEM_N
122c0 75 6c 6c 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  ull);.  }else{. 
122d0 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76     pOut->u.i = v
122e0 31 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70  1;.    MemSetTyp
122f0 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
12300 49 6e 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  Int);.  }.  brea
12310 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
12320 20 49 73 54 72 75 65 20 50 31 20 50 32 20 50 33   IsTrue P1 P2 P3
12330 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
12340 73 3a 20 72 5b 50 32 5d 20 3d 20 63 6f 61 6c 65  s: r[P2] = coale
12350 73 63 65 28 72 5b 50 31 5d 3d 3d 54 52 55 45 2c  sce(r[P1]==TRUE,
12360 50 33 29 20 5e 20 50 34 0a 2a 2a 0a 2a 2a 20 54  P3) ^ P4.**.** T
12370 68 69 73 20 6f 70 63 6f 64 65 20 69 6d 70 6c 65  his opcode imple
12380 6d 65 6e 74 73 20 74 68 65 20 49 53 20 54 52 55  ments the IS TRU
12390 45 2c 20 49 53 20 46 41 4c 53 45 2c 20 49 53 20  E, IS FALSE, IS 
123a0 4e 4f 54 20 54 52 55 45 2c 20 61 6e 64 0a 2a 2a  NOT TRUE, and.**
123b0 20 49 53 20 4e 4f 54 20 46 41 4c 53 45 20 6f 70   IS NOT FALSE op
123c0 65 72 61 74 6f 72 73 2e 0a 2a 2a 0a 2a 2a 20 49  erators..**.** I
123d0 6e 74 65 72 70 72 65 74 20 74 68 65 20 76 61 6c  nterpret the val
123e0 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
123f0 31 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76  1 as a boolean v
12400 61 6c 75 65 2e 20 20 53 74 6f 72 65 20 74 68 61  alue.  Store tha
12410 74 0a 2a 2a 20 62 6f 6f 6c 65 61 6e 20 28 61 20  t.** boolean (a 
12420 30 20 6f 72 20 31 29 20 69 6e 20 72 65 67 69 73  0 or 1) in regis
12430 74 65 72 20 50 32 2e 20 20 4f 72 20 69 66 20 74  ter P2.  Or if t
12440 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
12450 73 74 65 72 20 50 31 20 69 73 20 0a 2a 2a 20 4e  ster P1 is .** N
12460 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65 20 50 33  ULL, then the P3
12470 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
12480 67 69 73 74 65 72 20 50 32 2e 20 20 49 6e 76 65  gister P2.  Inve
12490 72 74 20 74 68 65 20 61 6e 73 77 65 72 20 69 66  rt the answer if
124a0 20 50 34 0a 2a 2a 20 69 73 20 31 2e 0a 2a 2a 0a   P4.** is 1..**.
124b0 2a 2a 20 54 68 65 20 6c 6f 67 69 63 20 69 73 20  ** The logic is 
124c0 73 75 6d 6d 61 72 69 7a 65 64 20 6c 69 6b 65 20  summarized like 
124d0 74 68 69 73 3a 0a 2a 2a 0a 2a 2a 20 3c 75 6c 3e  this:.**.** <ul>
124e0 20 0a 2a 2a 20 3c 6c 69 3e 20 49 66 20 50 33 3d   .** <li> If P3=
124f0 3d 30 20 61 6e 64 20 50 34 3d 3d 30 20 20 74 68  =0 and P4==0  th
12500 65 6e 20 20 72 5b 50 32 5d 20 3a 3d 20 72 5b 50  en  r[P2] := r[P
12510 31 5d 20 49 53 20 54 52 55 45 0a 2a 2a 20 3c 6c  1] IS TRUE.** <l
12520 69 3e 20 49 66 20 50 33 3d 3d 31 20 61 6e 64 20  i> If P3==1 and 
12530 50 34 3d 3d 31 20 20 74 68 65 6e 20 20 72 5b 50  P4==1  then  r[P
12540 32 5d 20 3a 3d 20 72 5b 50 31 5d 20 49 53 20 46  2] := r[P1] IS F
12550 41 4c 53 45 0a 2a 2a 20 3c 6c 69 3e 20 49 66 20  ALSE.** <li> If 
12560 50 33 3d 3d 30 20 61 6e 64 20 50 34 3d 3d 31 20  P3==0 and P4==1 
12570 20 74 68 65 6e 20 20 72 5b 50 32 5d 20 3a 3d 20   then  r[P2] := 
12580 72 5b 50 31 5d 20 49 53 20 4e 4f 54 20 54 52 55  r[P1] IS NOT TRU
12590 45 0a 2a 2a 20 3c 6c 69 3e 20 49 66 20 50 33 3d  E.** <li> If P3=
125a0 3d 31 20 61 6e 64 20 50 34 3d 3d 30 20 20 74 68  =1 and P4==0  th
125b0 65 6e 20 20 72 5b 50 32 5d 20 3a 3d 20 72 5b 50  en  r[P2] := r[P
125c0 31 5d 20 49 53 20 4e 4f 54 20 46 41 4c 53 45 0a  1] IS NOT FALSE.
125d0 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2f 0a 63 61 73 65  ** </ul>.*/.case
125e0 20 4f 50 5f 49 73 54 72 75 65 3a 20 7b 20 20 20   OP_IsTrue: {   
125f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
12600 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73  n1, out2 */.  as
12610 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
12620 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20  e==P4_INT32 );. 
12630 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
12640 2e 69 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34  .i==0 || pOp->p4
12650 2e 69 3d 3d 31 20 29 3b 0a 20 20 61 73 73 65 72  .i==1 );.  asser
12660 74 28 20 70 4f 70 2d 3e 70 33 3d 3d 30 20 7c 7c  t( pOp->p3==0 ||
12670 20 70 4f 70 2d 3e 70 33 3d 3d 31 20 29 3b 0a 20   pOp->p3==1 );. 
12680 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
12690 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f  etInt64(&aMem[pO
126a0 70 2d 3e 70 32 5d 2c 0a 20 20 20 20 20 20 73 71  p->p2],.      sq
126b0 6c 69 74 65 33 56 64 62 65 42 6f 6f 6c 65 61 6e  lite3VdbeBoolean
126c0 56 61 6c 75 65 28 26 61 4d 65 6d 5b 70 4f 70 2d  Value(&aMem[pOp-
126d0 3e 70 31 5d 2c 20 70 4f 70 2d 3e 70 33 29 20 5e  >p1], pOp->p3) ^
126e0 20 70 4f 70 2d 3e 70 34 2e 69 29 3b 0a 20 20 62   pOp->p4.i);.  b
126f0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
12700 64 65 3a 20 4e 6f 74 20 50 31 20 50 32 20 2a 20  de: Not P1 P2 * 
12710 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
12720 20 72 5b 50 32 5d 3d 20 21 72 5b 50 31 5d 0a 2a   r[P2]= !r[P1].*
12730 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74  *.** Interpret t
12740 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
12750 73 74 65 72 20 50 31 20 61 73 20 61 20 62 6f 6f  ster P1 as a boo
12760 6c 65 61 6e 20 76 61 6c 75 65 2e 20 20 53 74 6f  lean value.  Sto
12770 72 65 20 74 68 65 0a 2a 2a 20 62 6f 6f 6c 65 61  re the.** boolea
12780 6e 20 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 20  n complement in 
12790 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66  register P2.  If
127a0 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
127b0 67 69 73 74 65 72 20 50 31 20 69 73 20 0a 2a 2a  gister P1 is .**
127c0 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 61 20 4e 55   NULL, then a NU
127d0 4c 4c 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  LL is stored in 
127e0 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  P2..*/.case OP_N
127f0 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ot: {           
12800 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
12810 54 4b 5f 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74  TK_NOT, in1, out
12820 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  2 */.  pIn1 = &a
12830 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
12840 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
12850 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20 28 70 49  ->p2];.  if( (pI
12860 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
12870 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Null)==0 ){.    
12880 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
12890 74 49 6e 74 36 34 28 70 4f 75 74 2c 20 21 73 71  tInt64(pOut, !sq
128a0 6c 69 74 65 33 56 64 62 65 42 6f 6f 6c 65 61 6e  lite3VdbeBoolean
128b0 56 61 6c 75 65 28 70 49 6e 31 2c 30 29 29 3b 0a  Value(pIn1,0));.
128c0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c    }else{.    sql
128d0 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
128e0 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 7d 0a 20 20  ll(pOut);.  }.  
128f0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
12900 6f 64 65 3a 20 42 69 74 4e 6f 74 20 50 31 20 50  ode: BitNot P1 P
12910 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
12920 73 69 73 3a 20 72 5b 50 32 5d 3d 20 7e 72 5b 50  sis: r[P2]= ~r[P
12930 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72  1].**.** Interpr
12940 65 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  et the content o
12950 66 20 72 65 67 69 73 74 65 72 20 50 31 20 61 73  f register P1 as
12960 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 53 74   an integer.  St
12970 6f 72 65 20 74 68 65 0a 2a 2a 20 6f 6e 65 73 2d  ore the.** ones-
12980 63 6f 6d 70 6c 65 6d 65 6e 74 20 6f 66 20 74 68  complement of th
12990 65 20 50 31 20 76 61 6c 75 65 20 69 6e 74 6f 20  e P1 value into 
129a0 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66  register P2.  If
129b0 20 50 31 20 68 6f 6c 64 73 0a 2a 2a 20 61 20 4e   P1 holds.** a N
129c0 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 61  ULL then store a
129d0 20 4e 55 4c 4c 20 69 6e 20 50 32 2e 0a 2a 2f 0a   NULL in P2..*/.
129e0 63 61 73 65 20 4f 50 5f 42 69 74 4e 6f 74 3a 20  case OP_BitNot: 
129f0 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  {             /*
12a00 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4e   same as TK_BITN
12a10 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f  OT, in1, out2 */
12a20 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
12a30 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74  pOp->p1];.  pOut
12a40 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
12a50 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  ];.  sqlite3Vdbe
12a60 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29  MemSetNull(pOut)
12a70 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
12a80 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
12a90 3d 3d 30 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d  ==0 ){.    pOut-
12aa0 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
12ab0 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20  ;.    pOut->u.i 
12ac0 3d 20 7e 73 71 6c 69 74 65 33 56 64 62 65 49 6e  = ~sqlite3VdbeIn
12ad0 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20  tValue(pIn1);.  
12ae0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
12af0 20 4f 70 63 6f 64 65 3a 20 4f 6e 63 65 20 50 31   Opcode: Once P1
12b00 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
12b10 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  Fall through to 
12b20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
12b30 74 69 6f 6e 20 74 68 65 20 66 69 72 73 74 20 74  tion the first t
12b40 69 6d 65 20 74 68 69 73 20 6f 70 63 6f 64 65 20  ime this opcode 
12b50 69 73 0a 2a 2a 20 65 6e 63 6f 75 6e 74 65 72 65  is.** encountere
12b60 64 20 6f 6e 20 65 61 63 68 20 69 6e 76 6f 63 61  d on each invoca
12b70 74 69 6f 6e 20 6f 66 20 74 68 65 20 62 79 74 65  tion of the byte
12b80 2d 63 6f 64 65 20 70 72 6f 67 72 61 6d 2e 20 20  -code program.  
12b90 4a 75 6d 70 20 74 6f 20 50 32 0a 2a 2a 20 6f 6e  Jump to P2.** on
12ba0 20 74 68 65 20 73 65 63 6f 6e 64 20 61 6e 64 20   the second and 
12bb0 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 20 65  all subsequent e
12bc0 6e 63 6f 75 6e 74 65 72 73 20 64 75 72 69 6e 67  ncounters during
12bd0 20 74 68 65 20 73 61 6d 65 20 69 6e 76 6f 63 61   the same invoca
12be0 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 6f 70 2d  tion..**.** Top-
12bf0 6c 65 76 65 6c 20 70 72 6f 67 72 61 6d 73 20 64  level programs d
12c00 65 74 65 72 6d 69 6e 65 20 66 69 72 73 74 20 69  etermine first i
12c10 6e 76 6f 63 61 74 69 6f 6e 20 62 79 20 63 6f 6d  nvocation by com
12c20 70 61 72 69 6e 67 20 74 68 65 20 50 31 0a 2a 2a  paring the P1.**
12c30 20 6f 70 65 72 61 6e 64 20 61 67 61 69 6e 73 74   operand against
12c40 20 74 68 65 20 50 31 20 6f 70 65 72 61 6e 64 20   the P1 operand 
12c50 6f 6e 20 74 68 65 20 4f 50 5f 49 6e 69 74 20 6f  on the OP_Init o
12c60 70 63 6f 64 65 20 61 74 20 74 68 65 20 62 65 67  pcode at the beg
12c70 69 6e 6e 69 6e 67 0a 2a 2a 20 6f 66 20 74 68 65  inning.** of the
12c80 20 70 72 6f 67 72 61 6d 2e 20 20 49 66 20 74 68   program.  If th
12c90 65 20 50 31 20 76 61 6c 75 65 73 20 64 69 66 66  e P1 values diff
12ca0 65 72 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  er, then fall th
12cb0 72 6f 75 67 68 20 61 6e 64 20 6d 61 6b 65 0a 2a  rough and make.*
12cc0 2a 20 74 68 65 20 50 31 20 6f 66 20 74 68 69 73  * the P1 of this
12cd0 20 6f 70 63 6f 64 65 20 65 71 75 61 6c 20 74 6f   opcode equal to
12ce0 20 74 68 65 20 50 31 20 6f 66 20 4f 50 5f 49 6e   the P1 of OP_In
12cf0 69 74 2e 20 20 49 66 20 50 31 20 76 61 6c 75 65  it.  If P1 value
12d00 73 20 61 72 65 0a 2a 2a 20 74 68 65 20 73 61 6d  s are.** the sam
12d10 65 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20  e then take the 
12d20 6a 75 6d 70 2e 0a 2a 2a 0a 2a 2a 20 46 6f 72 20  jump..**.** For 
12d30 73 75 62 70 72 6f 67 72 61 6d 73 2c 20 74 68 65  subprograms, the
12d40 72 65 20 69 73 20 61 20 62 69 74 6d 61 73 6b 20  re is a bitmask 
12d50 69 6e 20 74 68 65 20 56 64 62 65 46 72 61 6d 65  in the VdbeFrame
12d60 20 74 68 61 74 20 64 65 74 65 72 6d 69 6e 65 73   that determines
12d70 0a 2a 2a 20 77 68 65 74 68 65 72 20 6f 72 20 6e  .** whether or n
12d80 6f 74 20 74 68 65 20 6a 75 6d 70 20 73 68 6f 75  ot the jump shou
12d90 6c 64 20 62 65 20 74 61 6b 65 6e 2e 20 20 54 68  ld be taken.  Th
12da0 65 20 62 69 74 6d 61 73 6b 20 69 73 20 6e 65 63  e bitmask is nec
12db0 65 73 73 61 72 79 0a 2a 2a 20 62 65 63 61 75 73  essary.** becaus
12dc0 65 20 74 68 65 20 73 65 6c 66 2d 61 6c 74 65 72  e the self-alter
12dd0 69 6e 67 20 63 6f 64 65 20 74 72 69 63 6b 20 64  ing code trick d
12de0 6f 65 73 20 6e 6f 74 20 77 6f 72 6b 20 66 6f 72  oes not work for
12df0 20 72 65 63 75 72 73 69 76 65 0a 2a 2a 20 74 72   recursive.** tr
12e00 69 67 67 65 72 73 2e 0a 2a 2f 0a 63 61 73 65 20  iggers..*/.case 
12e10 4f 50 5f 4f 6e 63 65 3a 20 7b 20 20 20 20 20 20  OP_Once: {      
12e20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
12e30 2f 0a 20 20 75 33 32 20 69 41 64 64 72 3b 20 20  /.  u32 iAddr;  
12e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
12e50 20 41 64 64 72 65 73 73 20 6f 66 20 74 68 69 73   Address of this
12e60 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 2a 2f 0a   instruction */.
12e70 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 4f 70    assert( p->aOp
12e80 5b 30 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  [0].opcode==OP_I
12e90 6e 69 74 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e  nit );.  if( p->
12ea0 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 69 41  pFrame ){.    iA
12eb0 64 64 72 20 3d 20 28 69 6e 74 29 28 70 4f 70 20  ddr = (int)(pOp 
12ec0 2d 20 70 2d 3e 61 4f 70 29 3b 0a 20 20 20 20 69  - p->aOp);.    i
12ed0 66 28 20 28 70 2d 3e 70 46 72 61 6d 65 2d 3e 61  f( (p->pFrame->a
12ee0 4f 6e 63 65 5b 69 41 64 64 72 2f 38 5d 20 26 20  Once[iAddr/8] & 
12ef0 28 31 3c 3c 28 69 41 64 64 72 20 26 20 37 29 29  (1<<(iAddr & 7))
12f00 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 56 64  )!=0 ){.      Vd
12f10 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c  beBranchTaken(1,
12f20 20 32 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20   2);.      goto 
12f30 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20  jump_to_p2;.    
12f40 7d 0a 20 20 20 20 70 2d 3e 70 46 72 61 6d 65 2d  }.    p->pFrame-
12f50 3e 61 4f 6e 63 65 5b 69 41 64 64 72 2f 38 5d 20  >aOnce[iAddr/8] 
12f60 7c 3d 20 31 3c 3c 28 69 41 64 64 72 20 26 20 37  |= 1<<(iAddr & 7
12f70 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
12f80 69 66 28 20 70 2d 3e 61 4f 70 5b 30 5d 2e 70 31  if( p->aOp[0].p1
12f90 3d 3d 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20  ==pOp->p1 ){.   
12fa0 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
12fb0 65 6e 28 31 2c 20 32 29 3b 0a 20 20 20 20 20 20  en(1, 2);.      
12fc0 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
12fd0 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 56 64 62  .    }.  }.  Vdb
12fe0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c 20  eBranchTaken(0, 
12ff0 32 29 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d 20  2);.  pOp->p1 = 
13000 70 2d 3e 61 4f 70 5b 30 5d 2e 70 31 3b 0a 20 20  p->aOp[0].p1;.  
13010 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
13020 6f 64 65 3a 20 49 66 20 50 31 20 50 32 20 50 33  ode: If P1 P2 P3
13030 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20   * *.**.** Jump 
13040 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c  to P2 if the val
13050 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
13060 31 20 69 73 20 74 72 75 65 2e 20 20 54 68 65 20  1 is true.  The 
13070 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e 73  value.** is cons
13080 69 64 65 72 65 64 20 74 72 75 65 20 69 66 20 69  idered true if i
13090 74 20 69 73 20 6e 75 6d 65 72 69 63 20 61 6e 64  t is numeric and
130a0 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 49 66 20 74   non-zero.  If t
130b0 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50  he value.** in P
130c0 31 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74  1 is NULL then t
130d0 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20  ake the jump if 
130e0 61 6e 64 20 6f 6e 6c 79 20 69 66 20 50 33 20 69  and only if P3 i
130f0 73 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a 63  s non-zero..*/.c
13100 61 73 65 20 4f 50 5f 49 66 3a 20 20 7b 20 20 20  ase OP_If:  {   
13110 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
13120 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 6e  ump, in1 */.  in
13130 74 20 63 3b 0a 20 20 63 20 3d 20 73 71 6c 69 74  t c;.  c = sqlit
13140 65 33 56 64 62 65 42 6f 6f 6c 65 61 6e 56 61 6c  e3VdbeBooleanVal
13150 75 65 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  ue(&aMem[pOp->p1
13160 5d 2c 20 70 4f 70 2d 3e 70 33 29 3b 0a 20 20 56  ], pOp->p3);.  V
13170 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 63  dbeBranchTaken(c
13180 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 63  !=0, 2);.  if( c
13190 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f   ) goto jump_to_
131a0 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  p2;.  break;.}..
131b0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 74  /* Opcode: IfNot
131c0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
131d0 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69  .** Jump to P2 i
131e0 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
131f0 65 67 69 73 74 65 72 20 50 31 20 69 73 20 46 61  egister P1 is Fa
13200 6c 73 65 2e 20 20 54 68 65 20 76 61 6c 75 65 0a  lse.  The value.
13210 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64  ** is considered
13220 20 66 61 6c 73 65 20 69 66 20 69 74 20 68 61 73   false if it has
13230 20 61 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65   a numeric value
13240 20 6f 66 20 7a 65 72 6f 2e 20 20 49 66 20 74 68   of zero.  If th
13250 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31  e value.** in P1
13260 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61   is NULL then ta
13270 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20 61  ke the jump if a
13280 6e 64 20 6f 6e 6c 79 20 69 66 20 50 33 20 69 73  nd only if P3 is
13290 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a 63 61   non-zero..*/.ca
132a0 73 65 20 4f 50 5f 49 66 4e 6f 74 3a 20 7b 20 20  se OP_IfNot: {  
132b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
132c0 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74 20  p, in1 */.  int 
132d0 63 3b 0a 20 20 63 20 3d 20 21 73 71 6c 69 74 65  c;.  c = !sqlite
132e0 33 56 64 62 65 42 6f 6f 6c 65 61 6e 56 61 6c 75  3VdbeBooleanValu
132f0 65 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  e(&aMem[pOp->p1]
13300 2c 20 21 70 4f 70 2d 3e 70 33 29 3b 0a 20 20 56  , !pOp->p3);.  V
13310 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 63  dbeBranchTaken(c
13320 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 63  !=0, 2);.  if( c
13330 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f   ) goto jump_to_
13340 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  p2;.  break;.}..
13350 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73 4e 75 6c  /* Opcode: IsNul
13360 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  l P1 P2 * * *.**
13370 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b   Synopsis: if r[
13380 50 31 5d 3d 3d 4e 55 4c 4c 20 67 6f 74 6f 20 50  P1]==NULL goto P
13390 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20  2.**.** Jump to 
133a0 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20  P2 if the value 
133b0 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
133c0 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
133d0 4f 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20 20 20 20  OP_IsNull: {    
133e0 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
133f0 61 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20 6a 75  as TK_ISNULL, ju
13400 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
13410 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
13420 31 5d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68  1];.  VdbeBranch
13430 54 61 6b 65 6e 28 20 28 70 49 6e 31 2d 3e 66 6c  Taken( (pIn1->fl
13440 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21  ags & MEM_Null)!
13450 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 28 70  =0, 2);.  if( (p
13460 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
13470 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a 20 20 20  _Null)!=0 ){.   
13480 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
13490 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
134a0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74  ../* Opcode: Not
134b0 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a  Null P1 P2 * * *
134c0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
134d0 20 72 5b 50 31 5d 21 3d 4e 55 4c 4c 20 67 6f 74   r[P1]!=NULL got
134e0 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20  o P2.**.** Jump 
134f0 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c  to P2 if the val
13500 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
13510 31 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20 20  1 is not NULL.  
13520 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 4e  .*/.case OP_NotN
13530 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ull: {          
13540 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
13550 4e 4f 54 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69  NOTNULL, jump, i
13560 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
13570 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
13580 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
13590 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
135a0 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 2c 20 32   MEM_Null)==0, 2
135b0 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
135c0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
135d0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f  )==0 ){.    goto
135e0 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d   jump_to_p2;.  }
135f0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
13600 4f 70 63 6f 64 65 3a 20 49 66 4e 75 6c 6c 52 6f  Opcode: IfNullRo
13610 77 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  w P1 P2 P3 * *.*
13620 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 50  * Synopsis: if P
13630 31 2e 6e 75 6c 6c 52 6f 77 20 74 68 65 6e 20 72  1.nullRow then r
13640 5b 50 33 5d 3d 4e 55 4c 4c 2c 20 67 6f 74 6f 20  [P3]=NULL, goto 
13650 50 32 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74  P2.**.** Check t
13660 68 65 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20  he cursor P1 to 
13670 73 65 65 20 69 66 20 69 74 20 69 73 20 63 75 72  see if it is cur
13680 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20  rently pointing 
13690 61 74 20 61 20 4e 55 4c 4c 20 72 6f 77 2e 0a 2a  at a NULL row..*
136a0 2a 20 49 66 20 69 74 20 69 73 2c 20 74 68 65 6e  * If it is, then
136b0 20 73 65 74 20 72 65 67 69 73 74 65 72 20 50 33   set register P3
136c0 20 74 6f 20 4e 55 4c 4c 20 61 6e 64 20 6a 75 6d   to NULL and jum
136d0 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
136e0 20 50 32 2e 0a 2a 2a 20 49 66 20 50 31 20 69 73   P2..** If P1 is
136f0 20 6e 6f 74 20 6f 6e 20 61 20 4e 55 4c 4c 20 72   not on a NULL r
13700 6f 77 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  ow, then fall th
13710 72 6f 75 67 68 20 77 69 74 68 6f 75 74 20 6d 61  rough without ma
13720 6b 69 6e 67 20 61 6e 79 0a 2a 2a 20 63 68 61 6e  king any.** chan
13730 67 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ges..*/.case OP_
13740 49 66 4e 75 6c 6c 52 6f 77 3a 20 7b 20 20 20 20  IfNullRow: {    
13750 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
13760 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
13770 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
13780 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
13790 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72  assert( p->apCsr
137a0 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b 0a  [pOp->p1]!=0 );.
137b0 20 20 69 66 28 20 70 2d 3e 61 70 43 73 72 5b 70    if( p->apCsr[p
137c0 4f 70 2d 3e 70 31 5d 2d 3e 6e 75 6c 6c 52 6f 77  Op->p1]->nullRow
137d0 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
137e0 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 61 4d  dbeMemSetNull(aM
137f0 65 6d 20 2b 20 70 4f 70 2d 3e 70 33 29 3b 0a 20  em + pOp->p3);. 
13800 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
13810 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  p2;.  }.  break;
13820 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .}..#ifdef SQLIT
13830 45 5f 45 4e 41 42 4c 45 5f 4f 46 46 53 45 54 5f  E_ENABLE_OFFSET_
13840 53 51 4c 5f 46 55 4e 43 0a 2f 2a 20 4f 70 63 6f  SQL_FUNC./* Opco
13850 64 65 3a 20 4f 66 66 73 65 74 20 50 31 20 50 32  de: Offset P1 P2
13860 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
13870 73 69 73 3a 20 72 5b 50 33 5d 20 3d 20 73 71 6c  sis: r[P3] = sql
13880 69 74 65 5f 6f 66 66 73 65 74 28 50 31 29 0a 2a  ite_offset(P1).*
13890 2a 0a 2a 2a 20 53 74 6f 72 65 20 69 6e 20 72 65  *.** Store in re
138a0 67 69 73 74 65 72 20 72 5b 50 33 5d 20 74 68 65  gister r[P3] the
138b0 20 62 79 74 65 20 6f 66 66 73 65 74 20 69 6e 74   byte offset int
138c0 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  o the database f
138d0 69 6c 65 20 74 68 61 74 20 69 73 20 74 68 65 0a  ile that is the.
138e0 2a 2a 20 73 74 61 72 74 20 6f 66 20 74 68 65 20  ** start of the 
138f0 70 61 79 6c 6f 61 64 20 66 6f 72 20 74 68 65 20  payload for the 
13900 72 65 63 6f 72 64 20 61 74 20 77 68 69 63 68 20  record at which 
13910 74 68 61 74 20 63 75 72 73 6f 72 20 50 31 20 69  that cursor P1 i
13920 73 20 63 75 72 72 65 6e 74 6c 79 0a 2a 2a 20 70  s currently.** p
13930 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 50  ointing..**.** P
13940 32 20 69 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20  2 is the column 
13950 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20 61  number for the a
13960 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 73  rgument to the s
13970 71 6c 69 74 65 5f 6f 66 66 73 65 74 28 29 20 66  qlite_offset() f
13980 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 20 54 68 69 73  unction..** This
13990 20 6f 70 63 6f 64 65 20 64 6f 65 73 20 6e 6f 74   opcode does not
139a0 20 75 73 65 20 50 32 20 69 74 73 65 6c 66 2c 20   use P2 itself, 
139b0 62 75 74 20 74 68 65 20 50 32 20 76 61 6c 75 65  but the P2 value
139c0 20 69 73 20 75 73 65 64 20 62 79 20 74 68 65 0a   is used by the.
139d0 2a 2a 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f  ** code generato
139e0 72 2e 20 20 54 68 65 20 50 31 2c 20 50 32 2c 20  r.  The P1, P2, 
139f0 61 6e 64 20 50 33 20 6f 70 65 72 61 6e 64 73 20  and P3 operands 
13a00 74 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20 61  to this opcode a
13a10 72 65 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20 61  re the.** same a
13a20 73 20 66 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e 2e  s for OP_Column.
13a30 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
13a40 64 65 20 69 73 20 6f 6e 6c 79 20 61 76 61 69 6c  de is only avail
13a50 61 62 6c 65 20 69 66 20 53 51 4c 69 74 65 20 69  able if SQLite i
13a60 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20  s compiled with 
13a70 74 68 65 0a 2a 2a 20 2d 44 53 51 4c 49 54 45 5f  the.** -DSQLITE_
13a80 45 4e 41 42 4c 45 5f 4f 46 46 53 45 54 5f 53 51  ENABLE_OFFSET_SQ
13a90 4c 5f 46 55 4e 43 20 6f 70 74 69 6f 6e 2e 0a 2a  L_FUNC option..*
13aa0 2f 0a 63 61 73 65 20 4f 50 5f 4f 66 66 73 65 74  /.case OP_Offset
13ab0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  : {          /* 
13ac0 6f 75 74 33 20 2a 2f 0a 20 20 56 64 62 65 43 75  out3 */.  VdbeCu
13ad0 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20  rsor *pC;    /* 
13ae0 54 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20  The VDBE cursor 
13af0 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
13b00 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
13b10 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
13b20 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
13b30 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75  [pOp->p1];.  pOu
13b40 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  t = &p->aMem[pOp
13b50 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 4e 45 56  ->p3];.  if( NEV
13b60 45 52 28 70 43 3d 3d 30 29 20 7c 7c 20 70 43 2d  ER(pC==0) || pC-
13b70 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52 54 59  >eCurType!=CURTY
13b80 50 45 5f 42 54 52 45 45 20 29 7b 0a 20 20 20 20  PE_BTREE ){.    
13b90 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
13ba0 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 7d  tNull(pOut);.  }
13bb0 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65  else{.    sqlite
13bc0 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34  3VdbeMemSetInt64
13bd0 28 70 4f 75 74 2c 20 73 71 6c 69 74 65 33 42 74  (pOut, sqlite3Bt
13be0 72 65 65 4f 66 66 73 65 74 28 70 43 2d 3e 75 63  reeOffset(pC->uc
13bf0 2e 70 43 75 72 73 6f 72 29 29 3b 0a 20 20 7d 0a  .pCursor));.  }.
13c00 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
13c10 66 20 2f 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42  f /* SQLITE_ENAB
13c20 4c 45 5f 4f 46 46 53 45 54 5f 53 51 4c 5f 46 55  LE_OFFSET_SQL_FU
13c30 4e 43 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  NC */../* Opcode
13c40 3a 20 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50  : Column P1 P2 P
13c50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
13c60 73 69 73 3a 20 72 5b 50 33 5d 3d 50 58 0a 2a 2a  sis: r[P3]=PX.**
13c70 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68  .** Interpret th
13c80 65 20 64 61 74 61 20 74 68 61 74 20 63 75 72 73  e data that curs
13c90 6f 72 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 20  or P1 points to 
13ca0 61 73 20 61 20 73 74 72 75 63 74 75 72 65 20 62  as a structure b
13cb0 75 69 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 74 68  uilt using.** th
13cc0 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73  e MakeRecord ins
13cd0 74 72 75 63 74 69 6f 6e 2e 20 20 28 53 65 65 20  truction.  (See 
13ce0 74 68 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 6f  the MakeRecord o
13cf0 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69  pcode for additi
13d00 6f 6e 61 6c 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74  onal.** informat
13d10 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 66 6f  ion about the fo
13d20 72 6d 61 74 20 6f 66 20 74 68 65 20 64 61 74 61  rmat of the data
13d30 2e 29 20 20 45 78 74 72 61 63 74 20 74 68 65 20  .)  Extract the 
13d40 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 0a 2a 2a 20  P2-th column.** 
13d50 66 72 6f 6d 20 74 68 69 73 20 72 65 63 6f 72 64  from this record
13d60 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65 20  .  If there are 
13d70 6c 65 73 73 20 74 68 61 74 20 28 50 32 2b 31 29  less that (P2+1)
13d80 20 0a 2a 2a 20 76 61 6c 75 65 73 20 69 6e 20 74   .** values in t
13d90 68 65 20 72 65 63 6f 72 64 2c 20 65 78 74 72 61  he record, extra
13da0 63 74 20 61 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a  ct a NULL..**.**
13db0 20 54 68 65 20 76 61 6c 75 65 20 65 78 74 72 61   The value extra
13dc0 63 74 65 64 20 69 73 20 73 74 6f 72 65 64 20 69  cted is stored i
13dd0 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
13de0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 72 65 63 6f  *.** If the reco
13df0 72 64 20 63 6f 6e 74 61 69 6e 73 20 66 65 77 65  rd contains fewe
13e00 72 20 74 68 61 6e 20 50 32 20 66 69 65 6c 64 73  r than P2 fields
13e10 2c 20 74 68 65 6e 20 65 78 74 72 61 63 74 20 61  , then extract a
13e20 20 4e 55 4c 4c 2e 20 20 4f 72 2c 0a 2a 2a 20 69   NULL.  Or,.** i
13e30 66 20 74 68 65 20 50 34 20 61 72 67 75 6d 65 6e  f the P4 argumen
13e40 74 20 69 73 20 61 20 50 34 5f 4d 45 4d 20 75 73  t is a P4_MEM us
13e50 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  e the value of t
13e60 68 65 20 50 34 20 61 72 67 75 6d 65 6e 74 20 61  he P4 argument a
13e70 73 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 2e  s.** the result.
13e80 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
13e90 46 4c 41 47 5f 43 4c 45 41 52 43 41 43 48 45 20  FLAG_CLEARCACHE 
13ea0 62 69 74 20 69 73 20 73 65 74 20 6f 6e 20 50 35  bit is set on P5
13eb0 20 61 6e 64 20 50 31 20 69 73 20 61 20 70 73 65   and P1 is a pse
13ec0 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f 72  udo-table cursor
13ed0 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 63 61  ,.** then the ca
13ee0 63 68 65 20 6f 66 20 74 68 65 20 63 75 72 73 6f  che of the curso
13ef0 72 20 69 73 20 72 65 73 65 74 20 70 72 69 6f 72  r is reset prior
13f00 20 74 6f 20 65 78 74 72 61 63 74 69 6e 67 20 74   to extracting t
13f10 68 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 54 68  he column..** Th
13f20 65 20 66 69 72 73 74 20 4f 50 5f 43 6f 6c 75 6d  e first OP_Colum
13f30 6e 20 61 67 61 69 6e 73 74 20 61 20 70 73 65 75  n against a pseu
13f40 64 6f 2d 74 61 62 6c 65 20 61 66 74 65 72 20 74  do-table after t
13f50 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
13f60 63 6f 6e 74 65 6e 74 0a 2a 2a 20 72 65 67 69 73  content.** regis
13f70 74 65 72 20 68 61 73 20 63 68 61 6e 67 65 64 20  ter has changed 
13f80 73 68 6f 75 6c 64 20 68 61 76 65 20 74 68 69 73  should have this
13f90 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20   bit set..**.** 
13fa0 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c 45  If the OPFLAG_LE
13fb0 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50 46 4c  NGTHARG and OPFL
13fc0 41 47 5f 54 59 50 45 4f 46 41 52 47 20 62 69 74  AG_TYPEOFARG bit
13fd0 73 20 61 72 65 20 73 65 74 20 6f 6e 20 50 35 20  s are set on P5 
13fe0 74 68 65 6e 0a 2a 2a 20 74 68 65 20 72 65 73 75  then.** the resu
13ff0 6c 74 20 69 73 20 67 75 61 72 61 6e 74 65 65 64  lt is guaranteed
14000 20 74 6f 20 6f 6e 6c 79 20 62 65 20 75 73 65 64   to only be used
14010 20 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74   as the argument
14020 20 6f 66 20 61 20 6c 65 6e 67 74 68 28 29 0a 2a   of a length().*
14030 2a 20 6f 72 20 74 79 70 65 6f 66 28 29 20 66 75  * or typeof() fu
14040 6e 63 74 69 6f 6e 2c 20 72 65 73 70 65 63 74 69  nction, respecti
14050 76 65 6c 79 2e 20 20 54 68 65 20 6c 6f 61 64 69  vely.  The loadi
14060 6e 67 20 6f 66 20 6c 61 72 67 65 20 62 6c 6f 62  ng of large blob
14070 73 20 63 61 6e 20 62 65 0a 2a 2a 20 73 6b 69 70  s can be.** skip
14080 70 65 64 20 66 6f 72 20 6c 65 6e 67 74 68 28 29  ped for length()
14090 20 61 6e 64 20 61 6c 6c 20 63 6f 6e 74 65 6e 74   and all content
140a0 20 6c 6f 61 64 69 6e 67 20 63 61 6e 20 62 65 20   loading can be 
140b0 73 6b 69 70 70 65 64 20 66 6f 72 20 74 79 70 65  skipped for type
140c0 6f 66 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  of()..*/.case OP
140d0 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 69 6e 74  _Column: {.  int
140e0 20 70 32 3b 20 20 20 20 20 20 20 20 20 20 20 20   p2;            
140f0 2f 2a 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  /* column number
14100 20 74 6f 20 72 65 74 72 69 65 76 65 20 2a 2f 0a   to retrieve */.
14110 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
14120 3b 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45  ;    /* The VDBE
14130 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 42 74 43   cursor */.  BtC
14140 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 20 20 20  ursor *pCrsr;   
14150 2f 2a 20 54 68 65 20 42 54 72 65 65 20 63 75 72  /* The BTree cur
14160 73 6f 72 20 2a 2f 0a 20 20 75 33 32 20 2a 61 4f  sor */.  u32 *aO
14170 66 66 73 65 74 3b 20 20 20 20 20 20 2f 2a 20 61  ffset;      /* a
14180 4f 66 66 73 65 74 5b 69 5d 20 69 73 20 6f 66 66  Offset[i] is off
14190 73 65 74 20 74 6f 20 73 74 61 72 74 20 6f 66 20  set to start of 
141a0 64 61 74 61 20 66 6f 72 20 69 2d 74 68 20 63 6f  data for i-th co
141b0 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 6c 65  lumn */.  int le
141c0 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  n;           /* 
141d0 54 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68  The length of th
141e0 65 20 73 65 72 69 61 6c 69 7a 65 64 20 64 61 74  e serialized dat
141f0 61 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e  a for the column
14200 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20   */.  int i;    
14210 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70           /* Loop
14220 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 4d 65   counter */.  Me
14230 6d 20 2a 70 44 65 73 74 3b 20 20 20 20 20 20 20  m *pDest;       
14240 20 2f 2a 20 57 68 65 72 65 20 74 6f 20 77 72 69   /* Where to wri
14250 74 65 20 74 68 65 20 65 78 74 72 61 63 74 65 64  te the extracted
14260 20 76 61 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d 20   value */.  Mem 
14270 73 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f  sMem;          /
14280 2a 20 46 6f 72 20 73 74 6f 72 69 6e 67 20 74 68  * For storing th
14290 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64  e record being d
142a0 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73  ecoded */.  cons
142b0 74 20 75 38 20 2a 7a 44 61 74 61 3b 20 20 20 2f  t u8 *zData;   /
142c0 2a 20 50 61 72 74 20 6f 66 20 74 68 65 20 72 65  * Part of the re
142d0 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64  cord being decod
142e0 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38  ed */.  const u8
142f0 20 2a 7a 48 64 72 3b 20 20 20 20 2f 2a 20 4e 65   *zHdr;    /* Ne
14300 78 74 20 75 6e 70 61 72 73 65 64 20 62 79 74 65  xt unparsed byte
14310 20 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 2a   of the header *
14320 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 45  /.  const u8 *zE
14330 6e 64 48 64 72 3b 20 2f 2a 20 50 6f 69 6e 74 65  ndHdr; /* Pointe
14340 72 20 74 6f 20 66 69 72 73 74 20 62 79 74 65 20  r to first byte 
14350 61 66 74 65 72 20 74 68 65 20 68 65 61 64 65 72  after the header
14360 20 2a 2f 0a 20 20 75 36 34 20 6f 66 66 73 65 74   */.  u64 offset
14370 36 34 3b 20 20 20 20 20 20 2f 2a 20 36 34 2d 62  64;      /* 64-b
14380 69 74 20 6f 66 66 73 65 74 20 2a 2f 0a 20 20 75  it offset */.  u
14390 33 32 20 74 3b 20 20 20 20 20 20 20 20 20 20 20  32 t;           
143a0 20 20 2f 2a 20 41 20 74 79 70 65 20 63 6f 64 65    /* A type code
143b0 20 66 72 6f 6d 20 74 68 65 20 72 65 63 6f 72 64   from the record
143c0 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 4d 65 6d   header */.  Mem
143d0 20 2a 70 52 65 67 3b 20 20 20 20 20 20 20 20 20   *pReg;         
143e0 2f 2a 20 50 73 65 75 64 6f 54 61 62 6c 65 20 69  /* PseudoTable i
143f0 6e 70 75 74 20 72 65 67 69 73 74 65 72 20 2a 2f  nput register */
14400 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ..  pC = p->apCs
14410 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 32  r[pOp->p1];.  p2
14420 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 0a 20 20 2f   = pOp->p2;..  /
14430 2a 20 49 66 20 74 68 65 20 63 75 72 73 6f 72 20  * If the cursor 
14440 63 61 63 68 65 20 69 73 20 73 74 61 6c 65 20 28  cache is stale (
14450 6d 65 61 6e 69 6e 67 20 69 74 20 69 73 20 6e 6f  meaning it is no
14460 74 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  t currently poin
14470 74 20 61 74 0a 20 20 2a 2a 20 74 68 65 20 63 6f  t at.  ** the co
14480 72 72 65 63 74 20 72 6f 77 29 20 74 68 65 6e 20  rrect row) then 
14490 62 72 69 6e 67 20 69 74 20 75 70 2d 74 6f 2d 64  bring it up-to-d
144a0 61 74 65 20 62 79 20 64 6f 69 6e 67 20 74 68 65  ate by doing the
144b0 20 6e 65 63 65 73 73 61 72 79 20 0a 20 20 2a 2a   necessary .  **
144c0 20 42 2d 54 72 65 65 20 73 65 65 6b 2e 20 2a 2f   B-Tree seek. */
144d0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
144e0 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  dbeCursorMoveto(
144f0 26 70 43 2c 20 26 70 32 29 3b 0a 20 20 69 66 28  &pC, &p2);.  if(
14500 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
14510 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a  _due_to_error;..
14520 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
14530 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
14540 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
14550 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 44  nCursor) );.  pD
14560 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  est = &aMem[pOp-
14570 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  >p3];.  memAbout
14580 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 44 65 73  ToChange(p, pDes
14590 74 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  t);.  assert( pO
145a0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
145b0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
145c0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
145d0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
145e0 32 3c 70 43 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a  2<pC->nField );.
145f0 20 20 61 4f 66 66 73 65 74 20 3d 20 70 43 2d 3e    aOffset = pC->
14600 61 4f 66 66 73 65 74 3b 0a 20 20 61 73 73 65 72  aOffset;.  asser
14610 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 21  t( pC->eCurType!
14620 3d 43 55 52 54 59 50 45 5f 56 54 41 42 20 29 3b  =CURTYPE_VTAB );
14630 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65  .  assert( pC->e
14640 43 75 72 54 79 70 65 21 3d 43 55 52 54 59 50 45  CurType!=CURTYPE
14650 5f 50 53 45 55 44 4f 20 7c 7c 20 70 43 2d 3e 6e  _PSEUDO || pC->n
14660 75 6c 6c 52 6f 77 20 29 3b 0a 20 20 61 73 73 65  ullRow );.  asse
14670 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
14680 21 3d 43 55 52 54 59 50 45 5f 53 4f 52 54 45 52  !=CURTYPE_SORTER
14690 20 29 3b 0a 0a 20 20 69 66 28 20 70 43 2d 3e 63   );..  if( pC->c
146a0 61 63 68 65 53 74 61 74 75 73 21 3d 70 2d 3e 63  acheStatus!=p->c
146b0 61 63 68 65 43 74 72 20 29 7b 20 20 20 20 20 20  acheCtr ){      
146c0 20 20 20 20 20 20 20 20 20 20 2f 2a 4f 50 54 49            /*OPTI
146d0 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53  MIZATION-IF-FALS
146e0 45 2a 2f 0a 20 20 20 20 69 66 28 20 70 43 2d 3e  E*/.    if( pC->
146f0 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20  nullRow ){.     
14700 20 69 66 28 20 70 43 2d 3e 65 43 75 72 54 79 70   if( pC->eCurTyp
14710 65 3d 3d 43 55 52 54 59 50 45 5f 50 53 45 55 44  e==CURTYPE_PSEUD
14720 4f 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  O ){.        /* 
14730 46 6f 72 20 74 68 65 20 73 70 65 63 69 61 6c 20  For the special 
14740 63 61 73 65 20 6f 66 20 61 73 20 70 73 65 75 64  case of as pseud
14750 6f 2d 63 75 72 73 6f 72 2c 20 74 68 65 20 73 65  o-cursor, the se
14760 65 6b 52 65 73 75 6c 74 20 66 69 65 6c 64 0a 20  ekResult field. 
14770 20 20 20 20 20 20 20 2a 2a 20 69 64 65 6e 74 69         ** identi
14780 66 69 65 73 20 74 68 65 20 72 65 67 69 73 74 65  fies the registe
14790 72 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65  r that holds the
147a0 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 20 20 20   record */.     
147b0 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 73     assert( pC->s
147c0 65 65 6b 52 65 73 75 6c 74 3e 30 20 29 3b 0a 20  eekResult>0 );. 
147d0 20 20 20 20 20 20 20 70 52 65 67 20 3d 20 26 61         pReg = &a
147e0 4d 65 6d 5b 70 43 2d 3e 73 65 65 6b 52 65 73 75  Mem[pC->seekResu
147f0 6c 74 5d 3b 0a 20 20 20 20 20 20 20 20 61 73 73  lt];.        ass
14800 65 72 74 28 20 70 52 65 67 2d 3e 66 6c 61 67 73  ert( pReg->flags
14810 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20   & MEM_Blob );. 
14820 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d         assert( m
14830 65 6d 49 73 56 61 6c 69 64 28 70 52 65 67 29 20  emIsValid(pReg) 
14840 29 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 70  );.        pC->p
14850 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 43 2d  ayloadSize = pC-
14860 3e 73 7a 52 6f 77 20 3d 20 70 52 65 67 2d 3e 6e  >szRow = pReg->n
14870 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52  ;.        pC->aR
14880 6f 77 20 3d 20 28 75 38 2a 29 70 52 65 67 2d 3e  ow = (u8*)pReg->
14890 7a 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  z;.      }else{.
148a0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
148b0 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44  dbeMemSetNull(pD
148c0 65 73 74 29 3b 0a 20 20 20 20 20 20 20 20 67 6f  est);.        go
148d0 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74  to op_column_out
148e0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  ;.      }.    }e
148f0 6c 73 65 7b 0a 20 20 20 20 20 20 70 43 72 73 72  lse{.      pCrsr
14900 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f   = pC->uc.pCurso
14910 72 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  r;.      assert(
14920 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
14930 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
14940 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43        assert( pC
14950 72 73 72 20 29 3b 0a 20 20 20 20 20 20 61 73 73  rsr );.      ass
14960 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
14970 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70  eCursorIsValid(p
14980 43 72 73 72 29 20 29 3b 0a 20 20 20 20 20 20 70  Crsr) );.      p
14990 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d  C->payloadSize =
149a0 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 79   sqlite3BtreePay
149b0 6c 6f 61 64 53 69 7a 65 28 70 43 72 73 72 29 3b  loadSize(pCrsr);
149c0 0a 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20  .      pC->aRow 
149d0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61  = sqlite3BtreePa
149e0 79 6c 6f 61 64 46 65 74 63 68 28 70 43 72 73 72  yloadFetch(pCrsr
149f0 2c 20 26 70 43 2d 3e 73 7a 52 6f 77 29 3b 0a 20  , &pC->szRow);. 
14a00 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d       assert( pC-
14a10 3e 73 7a 52 6f 77 3c 3d 70 43 2d 3e 70 61 79 6c  >szRow<=pC->payl
14a20 6f 61 64 53 69 7a 65 20 29 3b 0a 20 20 20 20 20  oadSize );.     
14a30 20 61 73 73 65 72 74 28 20 70 43 2d 3e 73 7a 52   assert( pC->szR
14a40 6f 77 3c 3d 36 35 35 33 36 20 29 3b 20 20 2f 2a  ow<=65536 );  /*
14a50 20 4d 61 78 69 6d 75 6d 20 70 61 67 65 20 73 69   Maximum page si
14a60 7a 65 20 69 73 20 36 34 4b 69 42 20 2a 2f 0a 20  ze is 64KiB */. 
14a70 20 20 20 20 20 69 66 28 20 70 43 2d 3e 70 61 79       if( pC->pay
14a80 6c 6f 61 64 53 69 7a 65 20 3e 20 28 75 33 32 29  loadSize > (u32)
14a90 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
14aa0 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
14ab0 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  ){.        goto 
14ac0 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 20 20 7d  too_big;.      }
14ad0 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 63  .    }.    pC->c
14ae0 61 63 68 65 53 74 61 74 75 73 20 3d 20 70 2d 3e  acheStatus = p->
14af0 63 61 63 68 65 43 74 72 3b 0a 20 20 20 20 70 43  cacheCtr;.    pC
14b00 2d 3e 69 48 64 72 4f 66 66 73 65 74 20 3d 20 67  ->iHdrOffset = g
14b10 65 74 56 61 72 69 6e 74 33 32 28 70 43 2d 3e 61  etVarint32(pC->a
14b20 52 6f 77 2c 20 61 4f 66 66 73 65 74 5b 30 5d 29  Row, aOffset[0])
14b30 3b 0a 20 20 20 20 70 43 2d 3e 6e 48 64 72 50 61  ;.    pC->nHdrPa
14b40 72 73 65 64 20 3d 20 30 3b 0a 0a 0a 20 20 20 20  rsed = 0;...    
14b50 69 66 28 20 70 43 2d 3e 73 7a 52 6f 77 3c 61 4f  if( pC->szRow<aO
14b60 66 66 73 65 74 5b 30 5d 20 29 7b 20 20 20 20 20  ffset[0] ){     
14b70 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d   /*OPTIMIZATION-
14b80 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20 20  IF-FALSE*/.     
14b90 20 2f 2a 20 70 43 2d 3e 61 52 6f 77 20 64 6f 65   /* pC->aRow doe
14ba0 73 20 6e 6f 74 20 68 61 76 65 20 74 6f 20 68 6f  s not have to ho
14bb0 6c 64 20 74 68 65 20 65 6e 74 69 72 65 20 72 6f  ld the entire ro
14bc0 77 2c 20 62 75 74 20 69 74 20 64 6f 65 73 20 61  w, but it does a
14bd0 74 20 6c 65 61 73 74 0a 20 20 20 20 20 20 2a 2a  t least.      **
14be0 20 6e 65 65 64 20 74 6f 20 63 6f 76 65 72 20 74   need to cover t
14bf0 68 65 20 68 65 61 64 65 72 20 6f 66 20 74 68 65  he header of the
14c00 20 72 65 63 6f 72 64 2e 20 20 49 66 20 70 43 2d   record.  If pC-
14c10 3e 61 52 6f 77 20 64 6f 65 73 20 6e 6f 74 20 63  >aRow does not c
14c20 6f 6e 74 61 69 6e 0a 20 20 20 20 20 20 2a 2a 20  ontain.      ** 
14c30 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 68 65 61  the complete hea
14c40 64 65 72 2c 20 74 68 65 6e 20 73 65 74 20 69 74  der, then set it
14c50 20 74 6f 20 7a 65 72 6f 2c 20 66 6f 72 63 69 6e   to zero, forcin
14c60 67 20 74 68 65 20 68 65 61 64 65 72 20 74 6f 20  g the header to 
14c70 62 65 0a 20 20 20 20 20 20 2a 2a 20 64 79 6e 61  be.      ** dyna
14c80 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65  mically allocate
14c90 64 2e 20 2a 2f 0a 20 20 20 20 20 20 70 43 2d 3e  d. */.      pC->
14ca0 61 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 20 20  aRow = 0;.      
14cb0 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 30 3b 0a 0a  pC->szRow = 0;..
14cc0 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75        /* Make su
14cd0 72 65 20 61 20 63 6f 72 72 75 70 74 20 64 61 74  re a corrupt dat
14ce0 61 62 61 73 65 20 68 61 73 20 6e 6f 74 20 67 69  abase has not gi
14cf0 76 65 6e 20 75 73 20 61 6e 20 6f 76 65 72 73 69  ven us an oversi
14d00 7a 65 20 68 65 61 64 65 72 2e 0a 20 20 20 20 20  ze header..     
14d10 20 2a 2a 20 44 6f 20 74 68 69 73 20 6e 6f 77 20   ** Do this now 
14d20 74 6f 20 61 76 6f 69 64 20 61 6e 20 6f 76 65 72  to avoid an over
14d30 73 69 7a 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  size memory allo
14d40 63 61 74 69 6f 6e 2e 0a 20 20 20 20 20 20 2a 2a  cation..      **
14d50 0a 20 20 20 20 20 20 2a 2a 20 54 79 70 65 20 65  .      ** Type e
14d60 6e 74 72 69 65 73 20 63 61 6e 20 62 65 20 62 65  ntries can be be
14d70 74 77 65 65 6e 20 31 20 61 6e 64 20 35 20 62 79  tween 1 and 5 by
14d80 74 65 73 20 65 61 63 68 2e 20 20 42 75 74 20 34  tes each.  But 4
14d90 20 61 6e 64 20 35 20 62 79 74 65 0a 20 20 20 20   and 5 byte.    
14da0 20 20 2a 2a 20 74 79 70 65 73 20 75 73 65 20 73    ** types use s
14db0 6f 20 6d 75 63 68 20 64 61 74 61 20 73 70 61 63  o much data spac
14dc0 65 20 74 68 61 74 20 74 68 65 72 65 20 63 61 6e  e that there can
14dd0 20 6f 6e 6c 79 20 62 65 20 34 30 39 36 20 61 6e   only be 4096 an
14de0 64 20 33 32 20 6f 66 0a 20 20 20 20 20 20 2a 2a  d 32 of.      **
14df0 20 74 68 65 6d 2c 20 72 65 73 70 65 63 74 69 76   them, respectiv
14e00 65 6c 79 2e 20 20 53 6f 20 74 68 65 20 6d 61 78  ely.  So the max
14e10 69 6d 75 6d 20 68 65 61 64 65 72 20 6c 65 6e 67  imum header leng
14e20 74 68 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20  th results from 
14e30 61 0a 20 20 20 20 20 20 2a 2a 20 33 2d 62 79 74  a.      ** 3-byt
14e40 65 20 74 79 70 65 20 66 6f 72 20 65 61 63 68 20  e type for each 
14e50 6f 66 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f  of the maximum o
14e60 66 20 33 32 37 36 38 20 63 6f 6c 75 6d 6e 73 20  f 32768 columns 
14e70 70 6c 75 73 20 74 68 72 65 65 0a 20 20 20 20 20  plus three.     
14e80 20 2a 2a 20 65 78 74 72 61 20 62 79 74 65 73 20   ** extra bytes 
14e90 66 6f 72 20 74 68 65 20 68 65 61 64 65 72 20 6c  for the header l
14ea0 65 6e 67 74 68 20 69 74 73 65 6c 66 2e 20 20 33  ength itself.  3
14eb0 32 37 36 38 2a 33 20 2b 20 33 20 3d 20 39 38 33  2768*3 + 3 = 983
14ec0 30 37 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  07..      */.   
14ed0 20 20 20 69 66 28 20 61 4f 66 66 73 65 74 5b 30     if( aOffset[0
14ee0 5d 20 3e 20 39 38 33 30 37 20 7c 7c 20 61 4f 66  ] > 98307 || aOf
14ef0 66 73 65 74 5b 30 5d 20 3e 20 70 43 2d 3e 70 61  fset[0] > pC->pa
14f00 79 6c 6f 61 64 53 69 7a 65 20 29 7b 0a 20 20 20  yloadSize ){.   
14f10 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c       goto op_col
14f20 75 6d 6e 5f 63 6f 72 72 75 70 74 3b 0a 20 20 20  umn_corrupt;.   
14f30 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a     }.    }else{.
14f40 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73        /* This is
14f50 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e   an optimization
14f60 2e 20 20 42 79 20 73 6b 69 70 70 69 6e 67 20 6f  .  By skipping o
14f70 76 65 72 20 74 68 65 20 66 69 72 73 74 20 66 65  ver the first fe
14f80 77 20 74 65 73 74 73 0a 20 20 20 20 20 20 2a 2a  w tests.      **
14f90 20 28 65 78 3a 20 70 43 2d 3e 6e 48 64 72 50 61   (ex: pC->nHdrPa
14fa0 72 73 65 64 3c 3d 70 32 29 20 69 6e 20 74 68 65  rsed<=p2) in the
14fb0 20 6e 65 78 74 20 73 65 63 74 69 6f 6e 2c 20 77   next section, w
14fc0 65 20 61 63 68 69 65 76 65 20 61 0a 20 20 20 20  e achieve a.    
14fd0 20 20 2a 2a 20 6d 65 61 73 75 72 61 62 6c 65 20    ** measurable 
14fe0 70 65 72 66 6f 72 6d 61 6e 63 65 20 67 61 69 6e  performance gain
14ff0 2e 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20  ..      **.     
15000 20 2a 2a 20 54 68 69 73 20 62 72 61 6e 63 68 20   ** This branch 
15010 69 73 20 74 61 6b 65 6e 20 65 76 65 6e 20 69 66  is taken even if
15020 20 61 4f 66 66 73 65 74 5b 30 5d 3d 3d 30 2e 20   aOffset[0]==0. 
15030 20 53 75 63 68 20 61 20 72 65 63 6f 72 64 20 69   Such a record i
15040 73 20 6e 65 76 65 72 0a 20 20 20 20 20 20 2a 2a  s never.      **
15050 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 53 51   generated by SQ
15060 4c 69 74 65 2c 20 61 6e 64 20 63 6f 75 6c 64 20  Lite, and could 
15070 62 65 20 63 6f 6e 73 69 64 65 72 65 64 20 63 6f  be considered co
15080 72 72 75 70 74 69 6f 6e 2c 20 62 75 74 20 77 65  rruption, but we
15090 0a 20 20 20 20 20 20 2a 2a 20 61 63 63 65 70 74  .      ** accept
150a0 20 69 74 20 66 6f 72 20 68 69 73 74 6f 72 69 63   it for historic
150b0 61 6c 20 72 65 61 73 6f 6e 73 2e 20 20 57 68 65  al reasons.  Whe
150c0 6e 20 61 4f 66 66 73 65 74 5b 30 5d 3d 3d 30 2c  n aOffset[0]==0,
150d0 20 74 68 65 20 63 6f 64 65 20 74 68 69 73 0a 20   the code this. 
150e0 20 20 20 20 20 2a 2a 20 62 72 61 6e 63 68 20 6a       ** branch j
150f0 75 6d 70 73 20 74 6f 20 72 65 61 64 73 20 70 61  umps to reads pa
15100 73 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  st the end of th
15110 65 20 72 65 63 6f 72 64 2c 20 62 75 74 20 6e 65  e record, but ne
15120 76 65 72 20 6d 6f 72 65 0a 20 20 20 20 20 20 2a  ver more.      *
15130 2a 20 74 68 61 6e 20 61 20 66 65 77 20 62 79 74  * than a few byt
15140 65 73 2e 20 20 45 76 65 6e 20 69 66 20 74 68 65  es.  Even if the
15150 20 72 65 63 6f 72 64 20 6f 63 63 75 72 73 20 61   record occurs a
15160 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  t the end of the
15170 20 70 61 67 65 0a 20 20 20 20 20 20 2a 2a 20 63   page.      ** c
15180 6f 6e 74 65 6e 74 20 61 72 65 61 2c 20 74 68 65  ontent area, the
15190 20 22 70 61 67 65 20 68 65 61 64 65 72 22 20 63   "page header" c
151a0 6f 6d 65 73 20 61 66 74 65 72 20 74 68 65 20 70  omes after the p
151b0 61 67 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20  age content and 
151c0 73 6f 0a 20 20 20 20 20 20 2a 2a 20 74 68 69 73  so.      ** this
151d0 20 6f 76 65 72 72 65 61 64 20 69 73 20 68 61 72   overread is har
151e0 6d 6c 65 73 73 2e 20 20 53 69 6d 69 6c 61 72 20  mless.  Similar 
151f0 6f 76 65 72 72 65 61 64 73 20 63 61 6e 20 6f 63  overreads can oc
15200 63 75 72 20 66 6f 72 20 61 20 63 6f 72 72 75 70  cur for a corrup
15210 74 0a 20 20 20 20 20 20 2a 2a 20 64 61 74 61 62  t.      ** datab
15220 61 73 65 20 66 69 6c 65 2e 0a 20 20 20 20 20 20  ase file..      
15230 2a 2f 0a 20 20 20 20 20 20 7a 44 61 74 61 20 3d  */.      zData =
15240 20 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20 20 20   pC->aRow;.     
15250 20 61 73 73 65 72 74 28 20 70 43 2d 3e 6e 48 64   assert( pC->nHd
15260 72 50 61 72 73 65 64 3c 3d 70 32 20 29 3b 20 20  rParsed<=p2 );  
15270 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 64 69 74         /* Condit
15280 69 6f 6e 61 6c 20 73 6b 69 70 70 65 64 20 2a 2f  ional skipped */
15290 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28  .      testcase(
152a0 20 61 4f 66 66 73 65 74 5b 30 5d 3d 3d 30 20 29   aOffset[0]==0 )
152b0 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f  ;.      goto op_
152c0 63 6f 6c 75 6d 6e 5f 72 65 61 64 5f 68 65 61 64  column_read_head
152d0 65 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20  er;.    }.  }.. 
152e0 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 74   /* Make sure at
152f0 20 6c 65 61 73 74 20 74 68 65 20 66 69 72 73 74   least the first
15300 20 70 32 2b 31 20 65 6e 74 72 69 65 73 20 6f 66   p2+1 entries of
15310 20 74 68 65 20 68 65 61 64 65 72 20 68 61 76 65   the header have
15320 20 62 65 65 6e 0a 20 20 2a 2a 20 70 61 72 73 65   been.  ** parse
15330 64 20 61 6e 64 20 76 61 6c 69 64 20 69 6e 66 6f  d and valid info
15340 72 6d 61 74 69 6f 6e 20 69 73 20 69 6e 20 61 4f  rmation is in aO
15350 66 66 73 65 74 5b 5d 20 61 6e 64 20 70 43 2d 3e  ffset[] and pC->
15360 61 54 79 70 65 5b 5d 2e 0a 20 20 2a 2f 0a 20 20  aType[]..  */.  
15370 69 66 28 20 70 43 2d 3e 6e 48 64 72 50 61 72 73  if( pC->nHdrPars
15380 65 64 3c 3d 70 32 20 29 7b 0a 20 20 20 20 2f 2a  ed<=p2 ){.    /*
15390 20 49 66 20 74 68 65 72 65 20 69 73 20 6d 6f 72   If there is mor
153a0 65 20 68 65 61 64 65 72 20 61 76 61 69 6c 61 62  e header availab
153b0 6c 65 20 66 6f 72 20 70 61 72 73 69 6e 67 20 69  le for parsing i
153c0 6e 20 74 68 65 20 72 65 63 6f 72 64 2c 20 74 72  n the record, tr
153d0 79 0a 20 20 20 20 2a 2a 20 74 6f 20 65 78 74 72  y.    ** to extr
153e0 61 63 74 20 61 64 64 69 74 69 6f 6e 61 6c 20 66  act additional f
153f0 69 65 6c 64 73 20 75 70 20 74 68 72 6f 75 67 68  ields up through
15400 20 74 68 65 20 70 32 2b 31 2d 74 68 20 66 69 65   the p2+1-th fie
15410 6c 64 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  ld .    */.    i
15420 66 28 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65  f( pC->iHdrOffse
15430 74 3c 61 4f 66 66 73 65 74 5b 30 5d 20 29 7b 0a  t<aOffset[0] ){.
15440 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75        /* Make su
15450 72 65 20 7a 44 61 74 61 20 70 6f 69 6e 74 73 20  re zData points 
15460 74 6f 20 65 6e 6f 75 67 68 20 6f 66 20 74 68 65  to enough of the
15470 20 72 65 63 6f 72 64 20 74 6f 20 63 6f 76 65 72   record to cover
15480 20 74 68 65 20 68 65 61 64 65 72 2e 20 2a 2f 0a   the header. */.
15490 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61 52        if( pC->aR
154a0 6f 77 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ow==0 ){.       
154b0 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30   memset(&sMem, 0
154c0 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b  , sizeof(sMem));
154d0 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
154e0 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d  lite3VdbeMemFrom
154f0 42 74 72 65 65 28 70 43 2d 3e 75 63 2e 70 43 75  Btree(pC->uc.pCu
15500 72 73 6f 72 2c 20 30 2c 20 61 4f 66 66 73 65 74  rsor, 0, aOffset
15510 5b 30 5d 2c 20 26 73 4d 65 6d 29 3b 0a 20 20 20  [0], &sMem);.   
15520 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
15530 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62  ITE_OK ) goto ab
15540 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
15550 3b 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61 20  ;.        zData 
15560 3d 20 28 75 38 2a 29 73 4d 65 6d 2e 7a 3b 0a 20  = (u8*)sMem.z;. 
15570 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
15580 20 20 20 20 7a 44 61 74 61 20 3d 20 70 43 2d 3e      zData = pC->
15590 61 52 6f 77 3b 0a 20 20 20 20 20 20 7d 0a 20 20  aRow;.      }.  
155a0 0a 20 20 20 20 20 20 2f 2a 20 46 69 6c 6c 20 69  .      /* Fill i
155b0 6e 20 70 43 2d 3e 61 54 79 70 65 5b 69 5d 20 61  n pC->aType[i] a
155c0 6e 64 20 61 4f 66 66 73 65 74 5b 69 5d 20 76 61  nd aOffset[i] va
155d0 6c 75 65 73 20 74 68 72 6f 75 67 68 20 74 68 65  lues through the
155e0 20 70 32 2d 74 68 20 66 69 65 6c 64 2e 20 2a 2f   p2-th field. */
155f0 0a 20 20 20 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 72  .    op_column_r
15600 65 61 64 5f 68 65 61 64 65 72 3a 0a 20 20 20 20  ead_header:.    
15610 20 20 69 20 3d 20 70 43 2d 3e 6e 48 64 72 50 61    i = pC->nHdrPa
15620 72 73 65 64 3b 0a 20 20 20 20 20 20 6f 66 66 73  rsed;.      offs
15630 65 74 36 34 20 3d 20 61 4f 66 66 73 65 74 5b 69  et64 = aOffset[i
15640 5d 3b 0a 20 20 20 20 20 20 7a 48 64 72 20 3d 20  ];.      zHdr = 
15650 7a 44 61 74 61 20 2b 20 70 43 2d 3e 69 48 64 72  zData + pC->iHdr
15660 4f 66 66 73 65 74 3b 0a 20 20 20 20 20 20 7a 45  Offset;.      zE
15670 6e 64 48 64 72 20 3d 20 7a 44 61 74 61 20 2b 20  ndHdr = zData + 
15680 61 4f 66 66 73 65 74 5b 30 5d 3b 0a 20 20 20 20  aOffset[0];.    
15690 20 20 74 65 73 74 63 61 73 65 28 20 7a 48 64 72    testcase( zHdr
156a0 3e 3d 7a 45 6e 64 48 64 72 20 29 3b 0a 20 20 20  >=zEndHdr );.   
156b0 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20 20 69     do{.        i
156c0 66 28 20 28 74 20 3d 20 7a 48 64 72 5b 30 5d 29  f( (t = zHdr[0])
156d0 3c 30 78 38 30 20 29 7b 0a 20 20 20 20 20 20 20  <0x80 ){.       
156e0 20 20 20 7a 48 64 72 2b 2b 3b 0a 20 20 20 20 20     zHdr++;.     
156f0 20 20 20 20 20 6f 66 66 73 65 74 36 34 20 2b 3d       offset64 +=
15700 20 73 71 6c 69 74 65 33 56 64 62 65 4f 6e 65 42   sqlite3VdbeOneB
15710 79 74 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e  yteSerialTypeLen
15720 28 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  (t);.        }el
15730 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 7a 48  se{.          zH
15740 64 72 20 2b 3d 20 73 71 6c 69 74 65 33 47 65 74  dr += sqlite3Get
15750 56 61 72 69 6e 74 33 32 28 7a 48 64 72 2c 20 26  Varint32(zHdr, &
15760 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6f 66  t);.          of
15770 66 73 65 74 36 34 20 2b 3d 20 73 71 6c 69 74 65  fset64 += sqlite
15780 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c  3VdbeSerialTypeL
15790 65 6e 28 74 29 3b 0a 20 20 20 20 20 20 20 20 7d  en(t);.        }
157a0 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61 54 79  .        pC->aTy
157b0 70 65 5b 69 2b 2b 5d 20 3d 20 74 3b 0a 20 20 20  pe[i++] = t;.   
157c0 20 20 20 20 20 61 4f 66 66 73 65 74 5b 69 5d 20       aOffset[i] 
157d0 3d 20 28 75 33 32 29 28 6f 66 66 73 65 74 36 34  = (u32)(offset64
157e0 20 26 20 30 78 66 66 66 66 66 66 66 66 29 3b 0a   & 0xffffffff);.
157f0 20 20 20 20 20 20 7d 77 68 69 6c 65 28 20 69 3c        }while( i<
15800 3d 70 32 20 26 26 20 7a 48 64 72 3c 7a 45 6e 64  =p2 && zHdr<zEnd
15810 48 64 72 20 29 3b 0a 0a 20 20 20 20 20 20 2f 2a  Hdr );..      /*
15820 20 54 68 65 20 72 65 63 6f 72 64 20 69 73 20 63   The record is c
15830 6f 72 72 75 70 74 20 69 66 20 61 6e 79 20 6f 66  orrupt if any of
15840 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61   the following a
15850 72 65 20 74 72 75 65 3a 0a 20 20 20 20 20 20 2a  re true:.      *
15860 2a 20 28 31 29 20 74 68 65 20 62 79 74 65 73 20  * (1) the bytes 
15870 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 65 78  of the header ex
15880 74 65 6e 64 20 70 61 73 74 20 74 68 65 20 64 65  tend past the de
15890 63 6c 61 72 65 64 20 68 65 61 64 65 72 20 73 69  clared header si
158a0 7a 65 0a 20 20 20 20 20 20 2a 2a 20 28 32 29 20  ze.      ** (2) 
158b0 74 68 65 20 65 6e 74 69 72 65 20 68 65 61 64 65  the entire heade
158c0 72 20 77 61 73 20 75 73 65 64 20 62 75 74 20 6e  r was used but n
158d0 6f 74 20 61 6c 6c 20 64 61 74 61 20 77 61 73 20  ot all data was 
158e0 75 73 65 64 0a 20 20 20 20 20 20 2a 2a 20 28 33  used.      ** (3
158f0 29 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  ) the end of the
15900 20 64 61 74 61 20 65 78 74 65 6e 64 73 20 62 65   data extends be
15910 79 6f 6e 64 20 74 68 65 20 65 6e 64 20 6f 66 20  yond the end of 
15920 74 68 65 20 72 65 63 6f 72 64 2e 0a 20 20 20 20  the record..    
15930 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28    */.      if( (
15940 7a 48 64 72 3e 3d 7a 45 6e 64 48 64 72 20 26 26  zHdr>=zEndHdr &&
15950 20 28 7a 48 64 72 3e 7a 45 6e 64 48 64 72 20 7c   (zHdr>zEndHdr |
15960 7c 20 6f 66 66 73 65 74 36 34 21 3d 70 43 2d 3e  | offset64!=pC->
15970 70 61 79 6c 6f 61 64 53 69 7a 65 29 29 0a 20 20  payloadSize)).  
15980 20 20 20 20 20 7c 7c 20 28 6f 66 66 73 65 74 36       || (offset6
15990 34 20 3e 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53  4 > pC->payloadS
159a0 69 7a 65 29 0a 20 20 20 20 20 20 29 7b 0a 20 20  ize).      ){.  
159b0 20 20 20 20 20 20 69 66 28 20 61 4f 66 66 73 65        if( aOffse
159c0 74 5b 30 5d 3d 3d 30 20 29 7b 0a 20 20 20 20 20  t[0]==0 ){.     
159d0 20 20 20 20 20 69 20 3d 20 30 3b 0a 20 20 20 20       i = 0;.    
159e0 20 20 20 20 20 20 7a 48 64 72 20 3d 20 7a 45 6e        zHdr = zEn
159f0 64 48 64 72 3b 0a 20 20 20 20 20 20 20 20 7d 65  dHdr;.        }e
15a00 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 69  lse{.          i
15a10 66 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29  f( pC->aRow==0 )
15a20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
15a30 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20  elease(&sMem);. 
15a40 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70           goto op
15a50 5f 63 6f 6c 75 6d 6e 5f 63 6f 72 72 75 70 74 3b  _column_corrupt;
15a60 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
15a70 20 7d 0a 0a 20 20 20 20 20 20 70 43 2d 3e 6e 48   }..      pC->nH
15a80 64 72 50 61 72 73 65 64 20 3d 20 69 3b 0a 20 20  drParsed = i;.  
15a90 20 20 20 20 70 43 2d 3e 69 48 64 72 4f 66 66 73      pC->iHdrOffs
15aa0 65 74 20 3d 20 28 75 33 32 29 28 7a 48 64 72 20  et = (u32)(zHdr 
15ab0 2d 20 7a 44 61 74 61 29 3b 0a 20 20 20 20 20 20  - zData);.      
15ac0 69 66 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20  if( pC->aRow==0 
15ad0 29 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ) sqlite3VdbeMem
15ae0 52 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a  Release(&sMem);.
15af0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
15b00 20 74 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 0a 20   t = 0;.    }.. 
15b10 20 20 20 2f 2a 20 49 66 20 61 66 74 65 72 20 74     /* If after t
15b20 72 79 69 6e 67 20 74 6f 20 65 78 74 72 61 63 74  rying to extract
15b30 20 6e 65 77 20 65 6e 74 72 69 65 73 20 66 72 6f   new entries fro
15b40 6d 20 74 68 65 20 68 65 61 64 65 72 2c 20 6e 48  m the header, nH
15b50 64 72 50 61 72 73 65 64 20 69 73 0a 20 20 20 20  drParsed is.    
15b60 2a 2a 20 73 74 69 6c 6c 20 6e 6f 74 20 75 70 20  ** still not up 
15b70 74 6f 20 70 32 2c 20 74 68 61 74 20 6d 65 61 6e  to p2, that mean
15b80 73 20 74 68 61 74 20 74 68 65 20 72 65 63 6f 72  s that the recor
15b90 64 20 68 61 73 20 66 65 77 65 72 20 74 68 61 6e  d has fewer than
15ba0 20 70 32 0a 20 20 20 20 2a 2a 20 63 6f 6c 75 6d   p2.    ** colum
15bb0 6e 73 2e 20 20 53 6f 20 74 68 65 20 72 65 73 75  ns.  So the resu
15bc0 6c 74 20 77 69 6c 6c 20 62 65 20 65 69 74 68 65  lt will be eithe
15bd0 72 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61  r the default va
15be0 6c 75 65 20 6f 72 20 61 20 4e 55 4c 4c 2e 0a 20  lue or a NULL.. 
15bf0 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 43     */.    if( pC
15c00 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d 70 32  ->nHdrParsed<=p2
15c10 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 4f   ){.      if( pO
15c20 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4d 45  p->p4type==P4_ME
15c30 4d 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  M ){.        sql
15c40 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c  ite3VdbeMemShall
15c50 6f 77 43 6f 70 79 28 70 44 65 73 74 2c 20 70 4f  owCopy(pDest, pO
15c60 70 2d 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45 4d 5f  p->p4.pMem, MEM_
15c70 53 74 61 74 69 63 29 3b 0a 20 20 20 20 20 20 7d  Static);.      }
15c80 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71  else{.        sq
15c90 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
15ca0 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20  ull(pDest);.    
15cb0 20 20 7d 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f    }.      goto o
15cc0 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20  p_column_out;.  
15cd0 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
15ce0 20 74 20 3d 20 70 43 2d 3e 61 54 79 70 65 5b 70   t = pC->aType[p
15cf0 32 5d 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 45 78  2];.  }..  /* Ex
15d00 74 72 61 63 74 20 74 68 65 20 63 6f 6e 74 65 6e  tract the conten
15d10 74 20 66 6f 72 20 74 68 65 20 70 32 2b 31 2d 74  t for the p2+1-t
15d20 68 20 63 6f 6c 75 6d 6e 2e 20 20 43 6f 6e 74 72  h column.  Contr
15d30 6f 6c 20 63 61 6e 20 6f 6e 6c 79 0a 20 20 2a 2a  ol can only.  **
15d40 20 72 65 61 63 68 20 74 68 69 73 20 70 6f 69 6e   reach this poin
15d50 74 20 69 66 20 61 4f 66 66 73 65 74 5b 70 32 5d  t if aOffset[p2]
15d60 2c 20 61 4f 66 66 73 65 74 5b 70 32 2b 31 5d 2c  , aOffset[p2+1],
15d70 20 61 6e 64 20 70 43 2d 3e 61 54 79 70 65 5b 70   and pC->aType[p
15d80 32 5d 20 61 72 65 0a 20 20 2a 2a 20 61 6c 6c 20  2] are.  ** all 
15d90 76 61 6c 69 64 2e 0a 20 20 2a 2f 0a 20 20 61 73  valid..  */.  as
15da0 73 65 72 74 28 20 70 32 3c 70 43 2d 3e 6e 48 64  sert( p2<pC->nHd
15db0 72 50 61 72 73 65 64 20 29 3b 0a 20 20 61 73 73  rParsed );.  ass
15dc0 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
15dd0 4f 4b 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  OK );.  assert( 
15de0 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b  sqlite3VdbeCheck
15df0 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 70 44  MemInvariants(pD
15e00 65 73 74 29 20 29 3b 0a 20 20 69 66 28 20 56 64  est) );.  if( Vd
15e10 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 44 65  beMemDynamic(pDe
15e20 73 74 29 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  st) ){.    sqlit
15e30 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
15e40 28 70 44 65 73 74 29 3b 0a 20 20 7d 0a 20 20 61  (pDest);.  }.  a
15e50 73 73 65 72 74 28 20 74 3d 3d 70 43 2d 3e 61 54  ssert( t==pC->aT
15e60 79 70 65 5b 70 32 5d 20 29 3b 0a 20 20 69 66 28  ype[p2] );.  if(
15e70 20 70 43 2d 3e 73 7a 52 6f 77 3e 3d 61 4f 66 66   pC->szRow>=aOff
15e80 73 65 74 5b 70 32 2b 31 5d 20 29 7b 0a 20 20 20  set[p2+1] ){.   
15e90 20 2f 2a 20 54 68 69 73 20 69 73 20 74 68 65 20   /* This is the 
15ea0 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 68 65 72  common case wher
15eb0 65 20 74 68 65 20 64 65 73 69 72 65 64 20 63 6f  e the desired co
15ec0 6e 74 65 6e 74 20 66 69 74 73 20 6f 6e 20 74 68  ntent fits on th
15ed0 65 20 6f 72 69 67 69 6e 61 6c 0a 20 20 20 20 2a  e original.    *
15ee0 2a 20 70 61 67 65 20 2d 20 77 68 65 72 65 20 74  * page - where t
15ef0 68 65 20 63 6f 6e 74 65 6e 74 20 69 73 20 6e 6f  he content is no
15f00 74 20 6f 6e 20 61 6e 20 6f 76 65 72 66 6c 6f 77  t on an overflow
15f10 20 70 61 67 65 20 2a 2f 0a 20 20 20 20 7a 44 61   page */.    zDa
15f20 74 61 20 3d 20 70 43 2d 3e 61 52 6f 77 20 2b 20  ta = pC->aRow + 
15f30 61 4f 66 66 73 65 74 5b 70 32 5d 3b 0a 20 20 20  aOffset[p2];.   
15f40 20 69 66 28 20 74 3c 31 32 20 29 7b 0a 20 20 20   if( t<12 ){.   
15f50 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
15f60 72 69 61 6c 47 65 74 28 7a 44 61 74 61 2c 20 74  rialGet(zData, t
15f70 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 7d 65  , pDest);.    }e
15f80 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66  lse{.      /* If
15f90 20 74 68 65 20 63 6f 6c 75 6d 6e 20 76 61 6c 75   the column valu
15fa0 65 20 69 73 20 61 20 73 74 72 69 6e 67 2c 20 77  e is a string, w
15fb0 65 20 6e 65 65 64 20 61 20 70 65 72 73 69 73 74  e need a persist
15fc0 65 6e 74 20 76 61 6c 75 65 2c 20 6e 6f 74 0a 20  ent value, not. 
15fd0 20 20 20 20 20 2a 2a 20 61 20 4d 45 4d 5f 45 70       ** a MEM_Ep
15fe0 68 65 6d 20 76 61 6c 75 65 2e 20 20 54 68 69 73  hem value.  This
15ff0 20 62 72 61 6e 63 68 20 69 73 20 61 20 66 61 73   branch is a fas
16000 74 20 73 68 6f 72 74 2d 63 75 74 20 74 68 61 74  t short-cut that
16010 20 69 73 20 65 71 75 69 76 61 6c 65 6e 74 0a 20   is equivalent. 
16020 20 20 20 20 20 2a 2a 20 74 6f 20 63 61 6c 6c 69       ** to calli
16030 6e 67 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  ng sqlite3VdbeSe
16040 72 69 61 6c 47 65 74 28 29 20 61 6e 64 20 73 71  rialGet() and sq
16050 6c 69 74 65 33 56 64 62 65 44 65 65 70 68 65 6d  lite3VdbeDeephem
16060 65 72 61 6c 69 7a 65 28 29 2e 0a 20 20 20 20 20  eralize()..     
16070 20 2a 2f 0a 20 20 20 20 20 20 73 74 61 74 69 63   */.      static
16080 20 63 6f 6e 73 74 20 75 31 36 20 61 46 6c 61 67   const u16 aFlag
16090 5b 5d 20 3d 20 7b 20 4d 45 4d 5f 42 6c 6f 62 2c  [] = { MEM_Blob,
160a0 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 54 65 72   MEM_Str|MEM_Ter
160b0 6d 20 7d 3b 0a 20 20 20 20 20 20 70 44 65 73 74  m };.      pDest
160c0 2d 3e 6e 20 3d 20 6c 65 6e 20 3d 20 28 74 2d 31  ->n = len = (t-1
160d0 32 29 2f 32 3b 0a 20 20 20 20 20 20 70 44 65 73  2)/2;.      pDes
160e0 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e  t->enc = encodin
160f0 67 3b 0a 20 20 20 20 20 20 69 66 28 20 70 44 65  g;.      if( pDe
16100 73 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 3c 20 6c  st->szMalloc < l
16110 65 6e 2b 32 20 29 7b 0a 20 20 20 20 20 20 20 20  en+2 ){.        
16120 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 3d 20 4d  pDest->flags = M
16130 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20 20  EM_Null;.       
16140 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
16150 4d 65 6d 47 72 6f 77 28 70 44 65 73 74 2c 20 6c  MemGrow(pDest, l
16160 65 6e 2b 32 2c 20 30 29 20 29 20 67 6f 74 6f 20  en+2, 0) ) goto 
16170 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20 20 7d 65  no_mem;.      }e
16180 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 44 65  lse{.        pDe
16190 73 74 2d 3e 7a 20 3d 20 70 44 65 73 74 2d 3e 7a  st->z = pDest->z
161a0 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20 20 20 7d 0a  Malloc;.      }.
161b0 20 20 20 20 20 20 6d 65 6d 63 70 79 28 70 44 65        memcpy(pDe
161c0 73 74 2d 3e 7a 2c 20 7a 44 61 74 61 2c 20 6c 65  st->z, zData, le
161d0 6e 29 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d  n);.      pDest-
161e0 3e 7a 5b 6c 65 6e 5d 20 3d 20 30 3b 0a 20 20 20  >z[len] = 0;.   
161f0 20 20 20 70 44 65 73 74 2d 3e 7a 5b 6c 65 6e 2b     pDest->z[len+
16200 31 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 44  1] = 0;.      pD
16210 65 73 74 2d 3e 66 6c 61 67 73 20 3d 20 61 46 6c  est->flags = aFl
16220 61 67 5b 74 26 31 5d 3b 0a 20 20 20 20 7d 0a 20  ag[t&1];.    }. 
16230 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 44 65 73   }else{.    pDes
16240 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e  t->enc = encodin
16250 67 3b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 62  g;.    /* This b
16260 72 61 6e 63 68 20 68 61 70 70 65 6e 73 20 6f 6e  ranch happens on
16270 6c 79 20 77 68 65 6e 20 63 6f 6e 74 65 6e 74 20  ly when content 
16280 69 73 20 6f 6e 20 6f 76 65 72 66 6c 6f 77 20 70  is on overflow p
16290 61 67 65 73 20 2a 2f 0a 20 20 20 20 69 66 28 20  ages */.    if( 
162a0 28 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46  ((pOp->p5 & (OPF
162b0 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 7c 4f 50  LAG_LENGTHARG|OP
162c0 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 29 29  FLAG_TYPEOFARG))
162d0 21 3d 30 0a 20 20 20 20 20 20 20 20 20 20 26 26  !=0.          &&
162e0 20 28 28 74 3e 3d 31 32 20 26 26 20 28 74 26 31   ((t>=12 && (t&1
162f0 29 3d 3d 30 29 20 7c 7c 20 28 70 4f 70 2d 3e 70  )==0) || (pOp->p
16300 35 20 26 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f  5 & OPFLAG_TYPEO
16310 46 41 52 47 29 21 3d 30 29 29 0a 20 20 20 20 20  FARG)!=0)).     
16320 7c 7c 20 28 6c 65 6e 20 3d 20 73 71 6c 69 74 65  || (len = sqlite
16330 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c  3VdbeSerialTypeL
16340 65 6e 28 74 29 29 3d 3d 30 0a 20 20 20 20 29 7b  en(t))==0.    ){
16350 0a 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 6e  .      /* Conten
16360 74 20 69 73 20 69 72 72 65 6c 65 76 61 6e 74 20  t is irrelevant 
16370 66 6f 72 0a 20 20 20 20 20 20 2a 2a 20 20 20 20  for.      **    
16380 31 2e 20 74 68 65 20 74 79 70 65 6f 66 28 29 20  1. the typeof() 
16390 66 75 6e 63 74 69 6f 6e 2c 0a 20 20 20 20 20 20  function,.      
163a0 2a 2a 20 20 20 20 32 2e 20 74 68 65 20 6c 65 6e  **    2. the len
163b0 67 74 68 28 58 29 20 66 75 6e 63 74 69 6f 6e 20  gth(X) function 
163c0 69 66 20 58 20 69 73 20 61 20 62 6c 6f 62 2c 20  if X is a blob, 
163d0 61 6e 64 0a 20 20 20 20 20 20 2a 2a 20 20 20 20  and.      **    
163e0 33 2e 20 69 66 20 74 68 65 20 63 6f 6e 74 65 6e  3. if the conten
163f0 74 20 6c 65 6e 67 74 68 20 69 73 20 7a 65 72 6f  t length is zero
16400 2e 0a 20 20 20 20 20 20 2a 2a 20 53 6f 20 77 65  ..      ** So we
16410 20 6d 69 67 68 74 20 61 73 20 77 65 6c 6c 20 75   might as well u
16420 73 65 20 62 6f 67 75 73 20 63 6f 6e 74 65 6e 74  se bogus content
16430 20 72 61 74 68 65 72 20 74 68 61 6e 20 72 65 61   rather than rea
16440 64 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20 63 6f  ding.      ** co
16450 6e 74 65 6e 74 20 66 72 6f 6d 20 64 69 73 6b 2e  ntent from disk.
16460 20 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20   .      **.     
16470 20 2a 2a 20 41 6c 74 68 6f 75 67 68 20 73 71 6c   ** Although sql
16480 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 47 65  ite3VdbeSerialGe
16490 74 28 29 20 6d 61 79 20 72 65 61 64 20 61 74 20  t() may read at 
164a0 6d 6f 73 74 20 38 20 62 79 74 65 73 20 66 72 6f  most 8 bytes fro
164b0 6d 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 62  m the.      ** b
164c0 75 66 66 65 72 20 70 61 73 73 65 64 20 74 6f 20  uffer passed to 
164d0 69 74 2c 20 64 65 62 75 67 67 69 6e 67 20 66 75  it, debugging fu
164e0 6e 63 74 69 6f 6e 20 56 64 62 65 4d 65 6d 50 72  nction VdbeMemPr
164f0 65 74 74 79 50 72 69 6e 74 28 29 20 6d 61 79 0a  ettyPrint() may.
16500 20 20 20 20 20 20 2a 2a 20 72 65 61 64 20 75 70        ** read up
16510 20 74 6f 20 31 36 2e 20 53 6f 20 31 36 20 62 79   to 16. So 16 by
16520 74 65 73 20 6f 66 20 62 6f 67 75 73 20 63 6f 6e  tes of bogus con
16530 74 65 6e 74 20 69 73 20 73 75 70 70 6c 69 65 64  tent is supplied
16540 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
16550 20 73 74 61 74 69 63 20 75 38 20 61 5a 65 72 6f   static u8 aZero
16560 5b 31 36 5d 3b 20 20 2f 2a 20 54 68 69 73 20 69  [16];  /* This i
16570 73 20 74 68 65 20 62 6f 67 75 73 20 63 6f 6e 74  s the bogus cont
16580 65 6e 74 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c  ent */.      sql
16590 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 47 65  ite3VdbeSerialGe
165a0 74 28 61 5a 65 72 6f 2c 20 74 2c 20 70 44 65 73  t(aZero, t, pDes
165b0 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  t);.    }else{. 
165c0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
165d0 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65  3VdbeMemFromBtre
165e0 65 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  e(pC->uc.pCursor
165f0 2c 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 6c  , aOffset[p2], l
16600 65 6e 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20  en, pDest);.    
16610 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
16620 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  _OK ) goto abort
16630 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
16640 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
16650 53 65 72 69 61 6c 47 65 74 28 28 63 6f 6e 73 74  SerialGet((const
16660 20 75 38 2a 29 70 44 65 73 74 2d 3e 7a 2c 20 74   u8*)pDest->z, t
16670 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20  , pDest);.      
16680 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 3d 20  pDest->flags &= 
16690 7e 4d 45 4d 5f 45 70 68 65 6d 3b 0a 20 20 20 20  ~MEM_Ephem;.    
166a0 7d 0a 20 20 7d 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e  }.  }..op_column
166b0 5f 6f 75 74 3a 0a 20 20 55 50 44 41 54 45 5f 4d  _out:.  UPDATE_M
166c0 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73  AX_BLOBSIZE(pDes
166d0 74 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54  t);.  REGISTER_T
166e0 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44  RACE(pOp->p3, pD
166f0 65 73 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 0a  est);.  break;..
16700 6f 70 5f 63 6f 6c 75 6d 6e 5f 63 6f 72 72 75 70  op_column_corrup
16710 74 3a 0a 20 20 69 66 28 20 61 4f 70 5b 30 5d 2e  t:.  if( aOp[0].
16720 70 33 3e 30 20 29 7b 0a 20 20 20 20 70 4f 70 20  p3>0 ){.    pOp 
16730 3d 20 26 61 4f 70 5b 61 4f 70 5b 30 5d 2e 70 33  = &aOp[aOp[0].p3
16740 2d 31 5d 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  -1];.    break;.
16750 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20    }else{.    rc 
16760 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  = SQLITE_CORRUPT
16770 5f 42 4b 50 54 3b 0a 20 20 20 20 67 6f 74 6f 20  _BKPT;.    goto 
16780 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
16790 6f 72 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 20 4f 70  or;.  }.}../* Op
167a0 63 6f 64 65 3a 20 41 66 66 69 6e 69 74 79 20 50  code: Affinity P
167b0 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53  1 P2 * P4 *.** S
167c0 79 6e 6f 70 73 69 73 3a 20 61 66 66 69 6e 69 74  ynopsis: affinit
167d0 79 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a  y(r[P1@P2]).**.*
167e0 2a 20 41 70 70 6c 79 20 61 66 66 69 6e 69 74 69  * Apply affiniti
167f0 65 73 20 74 6f 20 61 20 72 61 6e 67 65 20 6f 66  es to a range of
16800 20 50 32 20 72 65 67 69 73 74 65 72 73 20 73 74   P2 registers st
16810 61 72 74 69 6e 67 20 77 69 74 68 20 50 31 2e 0a  arting with P1..
16820 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 73 74  **.** P4 is a st
16830 72 69 6e 67 20 74 68 61 74 20 69 73 20 50 32 20  ring that is P2 
16840 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e  characters long.
16850 20 54 68 65 20 4e 2d 74 68 20 63 68 61 72 61 63   The N-th charac
16860 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74  ter of the.** st
16870 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20 74  ring indicates t
16880 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69  he column affini
16890 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62  ty that should b
168a0 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 4e  e used for the N
168b0 2d 74 68 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63 65  -th.** memory ce
168c0 6c 6c 20 69 6e 20 74 68 65 20 72 61 6e 67 65 2e  ll in the range.
168d0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 66 66 69  .*/.case OP_Affi
168e0 6e 69 74 79 3a 20 7b 0a 20 20 63 6f 6e 73 74 20  nity: {.  const 
168f0 63 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b  char *zAffinity;
16900 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69     /* The affini
16910 74 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64  ty to be applied
16920 20 2a 2f 0a 0a 20 20 7a 41 66 66 69 6e 69 74 79   */..  zAffinity
16930 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20   = pOp->p4.z;.  
16940 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74  assert( zAffinit
16950 79 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  y!=0 );.  assert
16960 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20  ( pOp->p2>0 );. 
16970 20 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69   assert( zAffini
16980 74 79 5b 70 4f 70 2d 3e 70 32 5d 3d 3d 30 20 29  ty[pOp->p2]==0 )
16990 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
169a0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 64 6f 7b  [pOp->p1];.  do{
169b0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e  .    assert( pIn
169c0 31 20 3c 3d 20 26 70 2d 3e 61 4d 65 6d 5b 28 70  1 <= &p->aMem[(p
169d0 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
169e0 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61  ursor)] );.    a
169f0 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
16a00 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 20 20 61  d(pIn1) );.    a
16a10 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e  pplyAffinity(pIn
16a20 31 2c 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b  1, *(zAffinity++
16a30 29 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  ), encoding);.  
16a40 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 77 68 69    pIn1++;.  }whi
16a50 6c 65 28 20 7a 41 66 66 69 6e 69 74 79 5b 30 5d  le( zAffinity[0]
16a60 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   );.  break;.}..
16a70 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 6b 65 52  /* Opcode: MakeR
16a80 65 63 6f 72 64 20 50 31 20 50 32 20 50 33 20 50  ecord P1 P2 P3 P
16a90 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
16aa0 20 72 5b 50 33 5d 3d 6d 6b 72 65 63 28 72 5b 50   r[P3]=mkrec(r[P
16ab0 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 43 6f 6e  1@P2]).**.** Con
16ac0 76 65 72 74 20 50 32 20 72 65 67 69 73 74 65 72  vert P2 register
16ad0 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  s beginning with
16ae0 20 50 31 20 69 6e 74 6f 20 74 68 65 20 5b 72 65   P1 into the [re
16af0 63 6f 72 64 20 66 6f 72 6d 61 74 5d 0a 2a 2a 20  cord format].** 
16b00 75 73 65 20 61 73 20 61 20 64 61 74 61 20 72 65  use as a data re
16b10 63 6f 72 64 20 69 6e 20 61 20 64 61 74 61 62 61  cord in a databa
16b20 73 65 20 74 61 62 6c 65 20 6f 72 20 61 73 20 61  se table or as a
16b30 20 6b 65 79 0a 2a 2a 20 69 6e 20 61 6e 20 69 6e   key.** in an in
16b40 64 65 78 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c  dex.  The OP_Col
16b50 75 6d 6e 20 6f 70 63 6f 64 65 20 63 61 6e 20 64  umn opcode can d
16b60 65 63 6f 64 65 20 74 68 65 20 72 65 63 6f 72 64  ecode the record
16b70 20 6c 61 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34   later..**.** P4
16b80 20 6d 61 79 20 62 65 20 61 20 73 74 72 69 6e 67   may be a string
16b90 20 74 68 61 74 20 69 73 20 50 32 20 63 68 61 72   that is P2 char
16ba0 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 20 54 68  acters long.  Th
16bb0 65 20 4e 2d 74 68 20 63 68 61 72 61 63 74 65 72  e N-th character
16bc0 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e   of the.** strin
16bd0 67 20 69 6e 64 69 63 61 74 65 73 20 74 68 65 20  g indicates the 
16be0 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20  column affinity 
16bf0 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75  that should be u
16c00 73 65 64 20 66 6f 72 20 74 68 65 20 4e 2d 74 68  sed for the N-th
16c10 0a 2a 2a 20 66 69 65 6c 64 20 6f 66 20 74 68 65  .** field of the
16c20 20 69 6e 64 65 78 20 6b 65 79 2e 0a 2a 2a 0a 2a   index key..**.*
16c30 2a 20 54 68 65 20 6d 61 70 70 69 6e 67 20 66 72  * The mapping fr
16c40 6f 6d 20 63 68 61 72 61 63 74 65 72 20 74 6f 20  om character to 
16c50 61 66 66 69 6e 69 74 79 20 69 73 20 67 69 76 65  affinity is give
16c60 6e 20 62 79 20 74 68 65 20 53 51 4c 49 54 45 5f  n by the SQLITE_
16c70 41 46 46 5f 0a 2a 2a 20 6d 61 63 72 6f 73 20 64  AFF_.** macros d
16c80 65 66 69 6e 65 64 20 69 6e 20 73 71 6c 69 74 65  efined in sqlite
16c90 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  Int.h..**.** If 
16ca0 50 34 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  P4 is NULL then 
16cb0 61 6c 6c 20 69 6e 64 65 78 20 66 69 65 6c 64 73  all index fields
16cc0 20 68 61 76 65 20 74 68 65 20 61 66 66 69 6e 69   have the affini
16cd0 74 79 20 42 4c 4f 42 2e 0a 2a 2f 0a 63 61 73 65  ty BLOB..*/.case
16ce0 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20   OP_MakeRecord: 
16cf0 7b 0a 20 20 75 38 20 2a 7a 4e 65 77 52 65 63 6f  {.  u8 *zNewReco
16d00 72 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 20  rd;        /* A 
16d10 62 75 66 66 65 72 20 74 6f 20 68 6f 6c 64 20 74  buffer to hold t
16d20 68 65 20 64 61 74 61 20 66 6f 72 20 74 68 65 20  he data for the 
16d30 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  new record */.  
16d40 4d 65 6d 20 2a 70 52 65 63 3b 20 20 20 20 20 20  Mem *pRec;      
16d50 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65         /* The ne
16d60 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 75 36  w record */.  u6
16d70 34 20 6e 44 61 74 61 3b 20 20 20 20 20 20 20 20  4 nData;        
16d80 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
16d90 66 20 62 79 74 65 73 20 6f 66 20 64 61 74 61 20  f bytes of data 
16da0 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  space */.  int n
16db0 48 64 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Hdr;            
16dc0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
16dd0 79 74 65 73 20 6f 66 20 68 65 61 64 65 72 20 73  ytes of header s
16de0 70 61 63 65 20 2a 2f 0a 20 20 69 36 34 20 6e 42  pace */.  i64 nB
16df0 79 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  yte;            
16e00 20 2f 2a 20 44 61 74 61 20 73 70 61 63 65 20 72   /* Data space r
16e10 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69 73  equired for this
16e20 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 36 34   record */.  i64
16e30 20 6e 5a 65 72 6f 3b 20 20 20 20 20 20 20 20 20   nZero;         
16e40 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
16e50 20 7a 65 72 6f 20 62 79 74 65 73 20 61 74 20 74   zero bytes at t
16e60 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65  he end of the re
16e70 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 56  cord */.  int nV
16e80 61 72 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20  arint;          
16e90 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
16ea0 74 65 73 20 69 6e 20 61 20 76 61 72 69 6e 74 20  tes in a varint 
16eb0 2a 2f 0a 20 20 75 33 32 20 73 65 72 69 61 6c 5f  */.  u32 serial_
16ec0 74 79 70 65 3b 20 20 20 20 20 20 20 2f 2a 20 54  type;       /* T
16ed0 79 70 65 20 66 69 65 6c 64 20 2a 2f 0a 20 20 4d  ype field */.  M
16ee0 65 6d 20 2a 70 44 61 74 61 30 3b 20 20 20 20 20  em *pData0;     
16ef0 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 66        /* First f
16f00 69 65 6c 64 20 74 6f 20 62 65 20 63 6f 6d 62 69  ield to be combi
16f10 6e 65 64 20 69 6e 74 6f 20 74 68 65 20 72 65 63  ned into the rec
16f20 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c  ord */.  Mem *pL
16f30 61 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ast;            
16f40 2f 2a 20 4c 61 73 74 20 66 69 65 6c 64 20 6f 66  /* Last field of
16f50 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
16f60 20 69 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20 20   int nField;    
16f70 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
16f80 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74  r of fields in t
16f90 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 63  he record */.  c
16fa0 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20  har *zAffinity; 
16fb0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66        /* The aff
16fc0 69 6e 69 74 79 20 73 74 72 69 6e 67 20 66 6f 72  inity string for
16fd0 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
16fe0 20 69 6e 74 20 66 69 6c 65 5f 66 6f 72 6d 61 74   int file_format
16ff0 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 6c 65 20  ;       /* File 
17000 66 6f 72 6d 61 74 20 74 6f 20 75 73 65 20 66 6f  format to use fo
17010 72 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20  r encoding */.  
17020 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20  int i;          
17030 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20         /* Space 
17040 75 73 65 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f  used in zNewReco
17050 72 64 5b 5d 20 68 65 61 64 65 72 20 2a 2f 0a 20  rd[] header */. 
17060 20 69 6e 74 20 6a 3b 20 20 20 20 20 20 20 20 20   int j;         
17070 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65          /* Space
17080 20 75 73 65 64 20 69 6e 20 7a 4e 65 77 52 65 63   used in zNewRec
17090 6f 72 64 5b 5d 20 63 6f 6e 74 65 6e 74 20 2a 2f  ord[] content */
170a0 0a 20 20 75 33 32 20 6c 65 6e 3b 20 20 20 20 20  .  u32 len;     
170b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e            /* Len
170c0 67 74 68 20 6f 66 20 61 20 66 69 65 6c 64 20 2a  gth of a field *
170d0 2f 0a 0a 20 20 2f 2a 20 41 73 73 75 6d 69 6e 67  /..  /* Assuming
170e0 20 74 68 65 20 72 65 63 6f 72 64 20 63 6f 6e 74   the record cont
170f0 61 69 6e 73 20 4e 20 66 69 65 6c 64 73 2c 20 74  ains N fields, t
17100 68 65 20 72 65 63 6f 72 64 20 66 6f 72 6d 61 74  he record format
17110 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20 6c 69 6b 65   looks.  ** like
17120 20 74 68 69 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a   this:.  **.  **
17130 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   ---------------
17140 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17150 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17160 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17170 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 20 7c  ---------.  ** |
17180 20 68 64 72 2d 73 69 7a 65 20 7c 20 74 79 70 65   hdr-size | type
17190 20 30 20 7c 20 74 79 70 65 20 31 20 7c 20 2e 2e   0 | type 1 | ..
171a0 2e 20 7c 20 74 79 70 65 20 4e 2d 31 20 7c 20 64  . | type N-1 | d
171b0 61 74 61 30 20 7c 20 2e 2e 2e 20 7c 20 64 61 74  ata0 | ... | dat
171c0 61 20 4e 2d 31 20 7c 20 0a 20 20 2a 2a 20 2d 2d  a N-1 | .  ** --
171d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
171e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
171f0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17200 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17210 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a 20 20 2a 2a  ------.  **.  **
17220 20 44 61 74 61 28 30 29 20 69 73 20 74 61 6b 65   Data(0) is take
17230 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20  n from register 
17240 50 31 2e 20 20 44 61 74 61 28 31 29 20 63 6f 6d  P1.  Data(1) com
17250 65 73 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72  es from register
17260 20 50 31 2b 31 0a 20 20 2a 2a 20 61 6e 64 20 73   P1+1.  ** and s
17270 6f 20 66 6f 72 74 68 2e 0a 20 20 2a 2a 0a 20 20  o forth..  **.  
17280 2a 2a 20 45 61 63 68 20 74 79 70 65 20 66 69 65  ** Each type fie
17290 6c 64 20 69 73 20 61 20 76 61 72 69 6e 74 20 72  ld is a varint r
172a0 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20  epresenting the 
172b0 73 65 72 69 61 6c 20 74 79 70 65 20 6f 66 20 74  serial type of t
172c0 68 65 20 0a 20 20 2a 2a 20 63 6f 72 72 65 73 70  he .  ** corresp
172d0 6f 6e 64 69 6e 67 20 64 61 74 61 20 65 6c 65 6d  onding data elem
172e0 65 6e 74 20 28 73 65 65 20 73 71 6c 69 74 65 33  ent (see sqlite3
172f0 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 28 29  VdbeSerialType()
17300 29 2e 20 54 68 65 0a 20 20 2a 2a 20 68 64 72 2d  ). The.  ** hdr-
17310 73 69 7a 65 20 66 69 65 6c 64 20 69 73 20 61 6c  size field is al
17320 73 6f 20 61 20 76 61 72 69 6e 74 20 77 68 69 63  so a varint whic
17330 68 20 69 73 20 74 68 65 20 6f 66 66 73 65 74 20  h is the offset 
17340 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69  from the beginni
17350 6e 67 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 72  ng.  ** of the r
17360 65 63 6f 72 64 20 74 6f 20 64 61 74 61 30 2e 0a  ecord to data0..
17370 20 20 2a 2f 0a 20 20 6e 44 61 74 61 20 3d 20 30    */.  nData = 0
17380 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
17390 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20  ber of bytes of 
173a0 64 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20  data space */.  
173b0 6e 48 64 72 20 3d 20 30 3b 20 20 20 20 20 20 20  nHdr = 0;       
173c0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
173d0 62 79 74 65 73 20 6f 66 20 68 65 61 64 65 72 20  bytes of header 
173e0 73 70 61 63 65 20 2a 2f 0a 20 20 6e 5a 65 72 6f  space */.  nZero
173f0 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a   = 0;         /*
17400 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20   Number of zero 
17410 62 79 74 65 73 20 61 74 20 74 68 65 20 65 6e 64  bytes at the end
17420 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a   of the record *
17430 2f 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70  /.  nField = pOp
17440 2d 3e 70 31 3b 0a 20 20 7a 41 66 66 69 6e 69 74  ->p1;.  zAffinit
17450 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  y = pOp->p4.z;. 
17460 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e   assert( nField>
17470 30 20 26 26 20 70 4f 70 2d 3e 70 32 3e 30 20 26  0 && pOp->p2>0 &
17480 26 20 70 4f 70 2d 3e 70 32 2b 6e 46 69 65 6c 64  & pOp->p2+nField
17490 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
174a0 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a  ->nCursor)+1 );.
174b0 20 20 70 44 61 74 61 30 20 3d 20 26 61 4d 65 6d    pData0 = &aMem
174c0 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e 46 69 65  [nField];.  nFie
174d0 6c 64 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  ld = pOp->p2;.  
174e0 70 4c 61 73 74 20 3d 20 26 70 44 61 74 61 30 5b  pLast = &pData0[
174f0 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20 20 66 69 6c  nField-1];.  fil
17500 65 5f 66 6f 72 6d 61 74 20 3d 20 70 2d 3e 6d 69  e_format = p->mi
17510 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74  nWriteFileFormat
17520 3b 0a 0a 20 20 2f 2a 20 49 64 65 6e 74 69 66 79  ;..  /* Identify
17530 20 74 68 65 20 6f 75 74 70 75 74 20 72 65 67 69   the output regi
17540 73 74 65 72 20 2a 2f 0a 20 20 61 73 73 65 72 74  ster */.  assert
17550 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70  ( pOp->p3<pOp->p
17560 31 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f  1 || pOp->p3>=pO
17570 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 20 29 3b  p->p1+pOp->p2 );
17580 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
17590 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41  pOp->p3];.  memA
175a0 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
175b0 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 41 70 70  pOut);..  /* App
175c0 6c 79 20 74 68 65 20 72 65 71 75 65 73 74 65 64  ly the requested
175d0 20 61 66 66 69 6e 69 74 79 20 74 6f 20 61 6c 6c   affinity to all
175e0 20 69 6e 70 75 74 73 0a 20 20 2a 2f 0a 20 20 61   inputs.  */.  a
175f0 73 73 65 72 74 28 20 70 44 61 74 61 30 3c 3d 70  ssert( pData0<=p
17600 4c 61 73 74 20 29 3b 0a 20 20 69 66 28 20 7a 41  Last );.  if( zA
17610 66 66 69 6e 69 74 79 20 29 7b 0a 20 20 20 20 70  ffinity ){.    p
17620 52 65 63 20 3d 20 70 44 61 74 61 30 3b 0a 20 20  Rec = pData0;.  
17630 20 20 64 6f 7b 0a 20 20 20 20 20 20 61 70 70 6c    do{.      appl
17640 79 41 66 66 69 6e 69 74 79 28 70 52 65 63 2b 2b  yAffinity(pRec++
17650 2c 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29  , *(zAffinity++)
17660 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20  , encoding);.   
17670 20 20 20 61 73 73 65 72 74 28 20 7a 41 66 66 69     assert( zAffi
17680 6e 69 74 79 5b 30 5d 3d 3d 30 20 7c 7c 20 70 52  nity[0]==0 || pR
17690 65 63 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 20  ec<=pLast );.   
176a0 20 7d 77 68 69 6c 65 28 20 7a 41 66 66 69 6e 69   }while( zAffini
176b0 74 79 5b 30 5d 20 29 3b 0a 20 20 7d 0a 0a 23 69  ty[0] );.  }..#i
176c0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
176d0 4c 45 5f 4e 55 4c 4c 5f 54 52 49 4d 0a 20 20 2f  LE_NULL_TRIM.  /
176e0 2a 20 4e 55 4c 4c 73 20 63 61 6e 20 62 65 20 73  * NULLs can be s
176f0 61 66 65 6c 79 20 74 72 69 6d 6d 65 64 20 66 72  afely trimmed fr
17700 6f 6d 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  om the end of th
17710 65 20 72 65 63 6f 72 64 2c 20 61 73 20 6c 6f 6e  e record, as lon
17720 67 20 61 73 0a 20 20 2a 2a 20 61 73 20 74 68 65  g as.  ** as the
17730 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 69   schema format i
17740 73 20 32 20 6f 72 20 6d 6f 72 65 20 61 6e 64 20  s 2 or more and 
17750 6e 6f 6e 65 20 6f 66 20 74 68 65 20 6f 6d 69 74  none of the omit
17760 74 65 64 20 63 6f 6c 75 6d 6e 73 0a 20 20 2a 2a  ted columns.  **
17770 20 68 61 76 65 20 61 20 6e 6f 6e 2d 4e 55 4c 4c   have a non-NULL
17780 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 2e 20   default value. 
17790 20 41 6c 73 6f 2c 20 74 68 65 20 72 65 63 6f 72   Also, the recor
177a0 64 20 6d 75 73 74 20 62 65 20 6c 65 66 74 20 77  d must be left w
177b0 69 74 68 0a 20 20 2a 2a 20 61 74 20 6c 65 61 73  ith.  ** at leas
177c0 74 20 6f 6e 65 20 66 69 65 6c 64 2e 20 20 49 66  t one field.  If
177d0 20 50 35 3e 30 20 74 68 65 6e 20 69 74 20 77 69   P5>0 then it wi
177e0 6c 6c 20 62 65 20 6f 6e 65 20 6d 6f 72 65 20 74  ll be one more t
177f0 68 61 6e 20 74 68 65 0a 20 20 2a 2a 20 69 6e 64  han the.  ** ind
17800 65 78 20 6f 66 20 74 68 65 20 72 69 67 68 74 2d  ex of the right-
17810 6d 6f 73 74 20 63 6f 6c 75 6d 6e 20 77 69 74 68  most column with
17820 20 61 20 6e 6f 6e 2d 4e 55 4c 4c 20 64 65 66 61   a non-NULL defa
17830 75 6c 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20 69  ult value */.  i
17840 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20  f( pOp->p5 ){.  
17850 20 20 77 68 69 6c 65 28 20 28 70 4c 61 73 74 2d    while( (pLast-
17860 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
17870 6c 29 21 3d 30 20 26 26 20 6e 46 69 65 6c 64 3e  l)!=0 && nField>
17880 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 20  pOp->p5 ){.     
17890 20 70 4c 61 73 74 2d 2d 3b 0a 20 20 20 20 20 20   pLast--;.      
178a0 6e 46 69 65 6c 64 2d 2d 3b 0a 20 20 20 20 7d 0a  nField--;.    }.
178b0 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a    }.#endif..  /*
178c0 20 4c 6f 6f 70 20 74 68 72 6f 75 67 68 20 74 68   Loop through th
178d0 65 20 65 6c 65 6d 65 6e 74 73 20 74 68 61 74 20  e elements that 
178e0 77 69 6c 6c 20 6d 61 6b 65 20 75 70 20 74 68 65  will make up the
178f0 20 72 65 63 6f 72 64 20 74 6f 20 66 69 67 75 72   record to figur
17900 65 0a 20 20 2a 2a 20 6f 75 74 20 68 6f 77 20 6d  e.  ** out how m
17910 75 63 68 20 73 70 61 63 65 20 69 73 20 72 65 71  uch space is req
17920 75 69 72 65 64 20 66 6f 72 20 74 68 65 20 6e 65  uired for the ne
17930 77 20 72 65 63 6f 72 64 2e 0a 20 20 2a 2f 0a 20  w record..  */. 
17940 20 70 52 65 63 20 3d 20 70 4c 61 73 74 3b 0a 20   pRec = pLast;. 
17950 20 64 6f 7b 0a 20 20 20 20 61 73 73 65 72 74 28   do{.    assert(
17960 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52 65 63   memIsValid(pRec
17970 29 20 29 3b 0a 20 20 20 20 73 65 72 69 61 6c 5f  ) );.    serial_
17980 74 79 70 65 20 3d 20 73 71 6c 69 74 65 33 56 64  type = sqlite3Vd
17990 62 65 53 65 72 69 61 6c 54 79 70 65 28 70 52 65  beSerialType(pRe
179a0 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74 2c 20  c, file_format, 
179b0 26 6c 65 6e 29 3b 0a 20 20 20 20 69 66 28 20 70  &len);.    if( p
179c0 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Rec->flags & MEM
179d0 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 69  _Zero ){.      i
179e0 66 28 20 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d  f( serial_type==
179f0 30 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  0 ){.        /* 
17a00 56 61 6c 75 65 73 20 77 69 74 68 20 4d 45 4d 5f  Values with MEM_
17a10 4e 75 6c 6c 20 61 6e 64 20 4d 45 4d 5f 5a 65 72  Null and MEM_Zer
17a20 6f 20 61 72 65 20 63 72 65 61 74 65 64 20 62 79  o are created by
17a30 20 78 43 6f 6c 75 6d 6e 20 76 69 72 74 75 61 6c   xColumn virtual
17a40 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 61 62 6c  .        ** tabl
17a50 65 20 6d 65 74 68 6f 64 73 20 74 68 61 74 20 6e  e methods that n
17a60 65 76 65 72 20 69 6e 76 6f 6b 65 20 73 71 6c 69  ever invoke sqli
17a70 74 65 33 5f 72 65 73 75 6c 74 5f 78 78 78 78 78  te3_result_xxxxx
17a80 28 29 20 77 68 69 6c 65 0a 20 20 20 20 20 20 20  () while.       
17a90 20 2a 2a 20 63 6f 6d 70 75 74 69 6e 67 20 61 6e   ** computing an
17aa0 20 75 6e 63 68 61 6e 67 69 6e 67 20 63 6f 6c 75   unchanging colu
17ab0 6d 6e 20 76 61 6c 75 65 20 69 6e 20 61 6e 20 55  mn value in an U
17ac0 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e  PDATE statement.
17ad0 0a 20 20 20 20 20 20 20 20 2a 2a 20 47 69 76 65  .        ** Give
17ae0 20 73 75 63 68 20 76 61 6c 75 65 73 20 61 20 73   such values a s
17af0 70 65 63 69 61 6c 20 69 6e 74 65 72 6e 61 6c 2d  pecial internal-
17b00 75 73 65 2d 6f 6e 6c 79 20 73 65 72 69 61 6c 2d  use-only serial-
17b10 74 79 70 65 20 6f 66 20 31 30 0a 20 20 20 20 20  type of 10.     
17b20 20 20 20 2a 2a 20 73 6f 20 74 68 61 74 20 74 68     ** so that th
17b30 65 79 20 63 61 6e 20 62 65 20 70 61 73 73 65 64  ey can be passed
17b40 20 74 68 72 6f 75 67 68 20 74 6f 20 78 55 70 64   through to xUpd
17b50 61 74 65 20 61 6e 64 20 68 61 76 65 0a 20 20 20  ate and have.   
17b60 20 20 20 20 20 2a 2a 20 61 20 74 72 75 65 20 73       ** a true s
17b70 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 6e 6f 63  qlite3_value_noc
17b80 68 61 6e 67 65 28 29 2e 20 2a 2f 0a 20 20 20 20  hange(). */.    
17b90 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
17ba0 3e 70 35 3d 3d 4f 50 46 4c 41 47 5f 4e 4f 43 48  >p5==OPFLAG_NOCH
17bb0 4e 47 5f 4d 41 47 49 43 20 7c 7c 20 43 4f 52 52  NG_MAGIC || CORR
17bc0 55 50 54 5f 44 42 20 29 3b 0a 20 20 20 20 20 20  UPT_DB );.      
17bd0 20 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20    serial_type = 
17be0 31 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20  10;.      }else 
17bf0 69 66 28 20 6e 44 61 74 61 20 29 7b 0a 20 20 20  if( nData ){.   
17c00 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
17c10 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f  VdbeMemExpandBlo
17c20 62 28 70 52 65 63 29 20 29 20 67 6f 74 6f 20 6e  b(pRec) ) goto n
17c30 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20 20 7d 65 6c  o_mem;.      }el
17c40 73 65 7b 0a 20 20 20 20 20 20 20 20 6e 5a 65 72  se{.        nZer
17c50 6f 20 2b 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65  o += pRec->u.nZe
17c60 72 6f 3b 0a 20 20 20 20 20 20 20 20 6c 65 6e 20  ro;.        len 
17c70 2d 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f  -= pRec->u.nZero
17c80 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
17c90 20 20 20 20 6e 44 61 74 61 20 2b 3d 20 6c 65 6e      nData += len
17ca0 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20  ;.    testcase( 
17cb0 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d 31 32 37  serial_type==127
17cc0 20 29 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65   );.    testcase
17cd0 28 20 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d 31  ( serial_type==1
17ce0 32 38 20 29 3b 0a 20 20 20 20 6e 48 64 72 20 2b  28 );.    nHdr +
17cf0 3d 20 73 65 72 69 61 6c 5f 74 79 70 65 3c 3d 31  = serial_type<=1
17d00 32 37 20 3f 20 31 20 3a 20 73 71 6c 69 74 65 33  27 ? 1 : sqlite3
17d10 56 61 72 69 6e 74 4c 65 6e 28 73 65 72 69 61 6c  VarintLen(serial
17d20 5f 74 79 70 65 29 3b 0a 20 20 20 20 70 52 65 63  _type);.    pRec
17d30 2d 3e 75 54 65 6d 70 20 3d 20 73 65 72 69 61 6c  ->uTemp = serial
17d40 5f 74 79 70 65 3b 0a 20 20 20 20 69 66 28 20 70  _type;.    if( p
17d50 52 65 63 3d 3d 70 44 61 74 61 30 20 29 20 62 72  Rec==pData0 ) br
17d60 65 61 6b 3b 0a 20 20 20 20 70 52 65 63 2d 2d 3b  eak;.    pRec--;
17d70 0a 20 20 7d 77 68 69 6c 65 28 31 29 3b 0a 0a 20  .  }while(1);.. 
17d80 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a   /* EVIDENCE-OF:
17d90 20 52 2d 32 32 35 36 34 2d 31 31 36 34 37 20 54   R-22564-11647 T
17da0 68 65 20 68 65 61 64 65 72 20 62 65 67 69 6e 73  he header begins
17db0 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20 76   with a single v
17dc0 61 72 69 6e 74 0a 20 20 2a 2a 20 77 68 69 63 68  arint.  ** which
17dd0 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20   determines the 
17de0 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20  total number of 
17df0 62 79 74 65 73 20 69 6e 20 74 68 65 20 68 65 61  bytes in the hea
17e00 64 65 72 2e 20 54 68 65 20 76 61 72 69 6e 74 0a  der. The varint.
17e10 20 20 2a 2a 20 76 61 6c 75 65 20 69 73 20 74 68    ** value is th
17e20 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 68 65  e size of the he
17e30 61 64 65 72 20 69 6e 20 62 79 74 65 73 20 69 6e  ader in bytes in
17e40 63 6c 75 64 69 6e 67 20 74 68 65 20 73 69 7a 65  cluding the size
17e50 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20 69 74 73   varint.  ** its
17e60 65 6c 66 2e 20 2a 2f 0a 20 20 74 65 73 74 63 61  elf. */.  testca
17e70 73 65 28 20 6e 48 64 72 3d 3d 31 32 36 20 29 3b  se( nHdr==126 );
17e80 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 48 64  .  testcase( nHd
17e90 72 3d 3d 31 32 37 20 29 3b 0a 20 20 69 66 28 20  r==127 );.  if( 
17ea0 6e 48 64 72 3c 3d 31 32 36 20 29 7b 0a 20 20 20  nHdr<=126 ){.   
17eb0 20 2f 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e 20 63   /* The common c
17ec0 61 73 65 20 2a 2f 0a 20 20 20 20 6e 48 64 72 20  ase */.    nHdr 
17ed0 2b 3d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  += 1;.  }else{. 
17ee0 20 20 20 2f 2a 20 52 61 72 65 20 63 61 73 65 20     /* Rare case 
17ef0 6f 66 20 61 20 72 65 61 6c 6c 79 20 6c 61 72 67  of a really larg
17f00 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 20 20  e header */.    
17f10 6e 56 61 72 69 6e 74 20 3d 20 73 71 6c 69 74 65  nVarint = sqlite
17f20 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29  3VarintLen(nHdr)
17f30 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 6e 56  ;.    nHdr += nV
17f40 61 72 69 6e 74 3b 0a 20 20 20 20 69 66 28 20 6e  arint;.    if( n
17f50 56 61 72 69 6e 74 3c 73 71 6c 69 74 65 33 56 61  Varint<sqlite3Va
17f60 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29 20 29 20  rintLen(nHdr) ) 
17f70 6e 48 64 72 2b 2b 3b 0a 20 20 7d 0a 20 20 6e 42  nHdr++;.  }.  nB
17f80 79 74 65 20 3d 20 6e 48 64 72 2b 6e 44 61 74 61  yte = nHdr+nData
17f90 3b 0a 20 20 69 66 28 20 6e 42 79 74 65 2b 6e 5a  ;.  if( nByte+nZ
17fa0 65 72 6f 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  ero>db->aLimit[S
17fb0 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
17fc0 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  TH] ){.    goto 
17fd0 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20  too_big;.  }..  
17fe0 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65  /* Make sure the
17ff0 20 6f 75 74 70 75 74 20 72 65 67 69 73 74 65 72   output register
18000 20 68 61 73 20 61 20 62 75 66 66 65 72 20 6c 61   has a buffer la
18010 72 67 65 20 65 6e 6f 75 67 68 20 74 6f 20 73 74  rge enough to st
18020 6f 72 65 20 0a 20 20 2a 2a 20 74 68 65 20 6e 65  ore .  ** the ne
18030 77 20 72 65 63 6f 72 64 2e 20 54 68 65 20 6f 75  w record. The ou
18040 74 70 75 74 20 72 65 67 69 73 74 65 72 20 28 70  tput register (p
18050 4f 70 2d 3e 70 33 29 20 69 73 20 6e 6f 74 20 61  Op->p3) is not a
18060 6c 6c 6f 77 65 64 20 74 6f 0a 20 20 2a 2a 20 62  llowed to.  ** b
18070 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e 70  e one of the inp
18080 75 74 20 72 65 67 69 73 74 65 72 73 20 28 62 65  ut registers (be
18090 63 61 75 73 65 20 74 68 65 20 66 6f 6c 6c 6f 77  cause the follow
180a0 69 6e 67 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a  ing call to.  **
180b0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43   sqlite3VdbeMemC
180c0 6c 65 61 72 41 6e 64 52 65 73 69 7a 65 28 29 20  learAndResize() 
180d0 63 6f 75 6c 64 20 63 6c 6f 62 62 65 72 20 74 68  could clobber th
180e0 65 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20 69  e value before i
180f0 74 20 69 73 20 75 73 65 64 29 2e 0a 20 20 2a 2f  t is used)..  */
18100 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64  .  if( sqlite3Vd
18110 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65 73  beMemClearAndRes
18120 69 7a 65 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e  ize(pOut, (int)n
18130 42 79 74 65 29 20 29 7b 0a 20 20 20 20 67 6f 74  Byte) ){.    got
18140 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20  o no_mem;.  }.  
18150 7a 4e 65 77 52 65 63 6f 72 64 20 3d 20 28 75 38  zNewRecord = (u8
18160 20 2a 29 70 4f 75 74 2d 3e 7a 3b 0a 0a 20 20 2f   *)pOut->z;..  /
18170 2a 20 57 72 69 74 65 20 74 68 65 20 72 65 63 6f  * Write the reco
18180 72 64 20 2a 2f 0a 20 20 69 20 3d 20 70 75 74 56  rd */.  i = putV
18190 61 72 69 6e 74 33 32 28 7a 4e 65 77 52 65 63 6f  arint32(zNewReco
181a0 72 64 2c 20 6e 48 64 72 29 3b 0a 20 20 6a 20 3d  rd, nHdr);.  j =
181b0 20 6e 48 64 72 3b 0a 20 20 61 73 73 65 72 74 28   nHdr;.  assert(
181c0 20 70 44 61 74 61 30 3c 3d 70 4c 61 73 74 20 29   pData0<=pLast )
181d0 3b 0a 20 20 70 52 65 63 20 3d 20 70 44 61 74 61  ;.  pRec = pData
181e0 30 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 73 65 72  0;.  do{.    ser
181f0 69 61 6c 5f 74 79 70 65 20 3d 20 70 52 65 63 2d  ial_type = pRec-
18200 3e 75 54 65 6d 70 3b 0a 20 20 20 20 2f 2a 20 45  >uTemp;.    /* E
18210 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 30 36  VIDENCE-OF: R-06
18220 35 32 39 2d 34 37 33 36 32 20 46 6f 6c 6c 6f 77  529-47362 Follow
18230 69 6e 67 20 74 68 65 20 73 69 7a 65 20 76 61 72  ing the size var
18240 69 6e 74 20 61 72 65 20 6f 6e 65 20 6f 72 20 6d  int are one or m
18250 6f 72 65 0a 20 20 20 20 2a 2a 20 61 64 64 69 74  ore.    ** addit
18260 69 6f 6e 61 6c 20 76 61 72 69 6e 74 73 2c 20 6f  ional varints, o
18270 6e 65 20 70 65 72 20 63 6f 6c 75 6d 6e 2e 20 2a  ne per column. *
18280 2f 0a 20 20 20 20 69 20 2b 3d 20 70 75 74 56 61  /.    i += putVa
18290 72 69 6e 74 33 32 28 26 7a 4e 65 77 52 65 63 6f  rint32(&zNewReco
182a0 72 64 5b 69 5d 2c 20 73 65 72 69 61 6c 5f 74 79  rd[i], serial_ty
182b0 70 65 29 3b 20 20 20 20 20 20 20 20 20 20 20 20  pe);            
182c0 2f 2a 20 73 65 72 69 61 6c 20 74 79 70 65 20 2a  /* serial type *
182d0 2f 0a 20 20 20 20 2f 2a 20 45 56 49 44 45 4e 43  /.    /* EVIDENC
182e0 45 2d 4f 46 3a 20 52 2d 36 34 35 33 36 2d 35 31  E-OF: R-64536-51
182f0 37 32 38 20 54 68 65 20 76 61 6c 75 65 73 20 66  728 The values f
18300 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69  or each column i
18310 6e 20 74 68 65 20 72 65 63 6f 72 64 0a 20 20 20  n the record.   
18320 20 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 20   ** immediately 
18330 66 6f 6c 6c 6f 77 20 74 68 65 20 68 65 61 64 65  follow the heade
18340 72 2e 20 2a 2f 0a 20 20 20 20 6a 20 2b 3d 20 73  r. */.    j += s
18350 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
18360 50 75 74 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b  Put(&zNewRecord[
18370 6a 5d 2c 20 70 52 65 63 2c 20 73 65 72 69 61 6c  j], pRec, serial
18380 5f 74 79 70 65 29 3b 20 2f 2a 20 63 6f 6e 74 65  _type); /* conte
18390 6e 74 20 2a 2f 0a 20 20 7d 77 68 69 6c 65 28 20  nt */.  }while( 
183a0 28 2b 2b 70 52 65 63 29 3c 3d 70 4c 61 73 74 20  (++pRec)<=pLast 
183b0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3d 3d  );.  assert( i==
183c0 6e 48 64 72 20 29 3b 0a 20 20 61 73 73 65 72 74  nHdr );.  assert
183d0 28 20 6a 3d 3d 6e 42 79 74 65 20 29 3b 0a 0a 20  ( j==nByte );.. 
183e0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
183f0 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28  >0 && pOp->p3<=(
18400 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
18410 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75  Cursor) );.  pOu
18420 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74  t->n = (int)nByt
18430 65 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  e;.  pOut->flags
18440 20 3d 20 4d 45 4d 5f 42 6c 6f 62 3b 0a 20 20 69   = MEM_Blob;.  i
18450 66 28 20 6e 5a 65 72 6f 20 29 7b 0a 20 20 20 20  f( nZero ){.    
18460 70 4f 75 74 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20  pOut->u.nZero = 
18470 6e 5a 65 72 6f 3b 0a 20 20 20 20 70 4f 75 74 2d  nZero;.    pOut-
18480 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65  >flags |= MEM_Ze
18490 72 6f 3b 0a 20 20 7d 0a 20 20 52 45 47 49 53 54  ro;.  }.  REGIST
184a0 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
184b0 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50 44 41 54  , pOut);.  UPDAT
184c0 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
184d0 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
184e0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 75  ../* Opcode: Cou
184f0 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  nt P1 P2 * * *.*
18500 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
18510 5d 3d 63 6f 75 6e 74 28 29 0a 2a 2a 0a 2a 2a 20  ]=count().**.** 
18520 53 74 6f 72 65 20 74 68 65 20 6e 75 6d 62 65 72  Store the number
18530 20 6f 66 20 65 6e 74 72 69 65 73 20 28 61 6e 20   of entries (an 
18540 69 6e 74 65 67 65 72 20 76 61 6c 75 65 29 20 69  integer value) i
18550 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  n the table or i
18560 6e 64 65 78 20 0a 2a 2a 20 6f 70 65 6e 65 64 20  ndex .** opened 
18570 62 79 20 63 75 72 73 6f 72 20 50 31 20 69 6e 20  by cursor P1 in 
18580 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2f 0a 23  register P2.*/.#
18590 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
185a0 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a 63 61  IT_BTREECOUNT.ca
185b0 73 65 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b 20 20  se OP_Count: {  
185c0 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
185d0 2f 0a 20 20 69 36 34 20 6e 45 6e 74 72 79 3b 0a  /.  i64 nEntry;.
185e0 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
185f0 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d  r;..  assert( p-
18600 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d  >apCsr[pOp->p1]-
18610 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
18620 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 70 43  PE_BTREE );.  pC
18630 72 73 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  rsr = p->apCsr[p
18640 4f 70 2d 3e 70 31 5d 2d 3e 75 63 2e 70 43 75 72  Op->p1]->uc.pCur
18650 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70  sor;.  assert( p
18660 43 72 73 72 20 29 3b 0a 20 20 6e 45 6e 74 72 79  Crsr );.  nEntry
18670 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65   = 0;  /* Not ne
18680 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64  eded.  Only used
18690 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61   to silence a wa
186a0 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72 63 20 3d  rning. */.  rc =
186b0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6f 75   sqlite3BtreeCou
186c0 6e 74 28 70 43 72 73 72 2c 20 26 6e 45 6e 74 72  nt(pCrsr, &nEntr
186d0 79 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  y);.  if( rc ) g
186e0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
186f0 5f 65 72 72 6f 72 3b 0a 20 20 70 4f 75 74 20 3d  _error;.  pOut =
18700 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
18710 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d  p, pOp);.  pOut-
18720 3e 75 2e 69 20 3d 20 6e 45 6e 74 72 79 3b 0a 20  >u.i = nEntry;. 
18730 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
18740 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 61 76  ../* Opcode: Sav
18750 65 70 6f 69 6e 74 20 50 31 20 2a 20 2a 20 50 34  epoint P1 * * P4
18760 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c 20 72   *.**.** Open, r
18770 65 6c 65 61 73 65 20 6f 72 20 72 6f 6c 6c 62 61  elease or rollba
18780 63 6b 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74  ck the savepoint
18790 20 6e 61 6d 65 64 20 62 79 20 70 61 72 61 6d 65   named by parame
187a0 74 65 72 20 50 34 2c 20 64 65 70 65 6e 64 69 6e  ter P4, dependin
187b0 67 0a 2a 2a 20 6f 6e 20 74 68 65 20 76 61 6c 75  g.** on the valu
187c0 65 20 6f 66 20 50 31 2e 20 54 6f 20 6f 70 65 6e  e of P1. To open
187d0 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74   a new savepoint
187e0 2c 20 50 31 3d 3d 30 2e 20 54 6f 20 72 65 6c 65  , P1==0. To rele
187f0 61 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 6e 0a  ase (commit) an.
18800 2a 2a 20 65 78 69 73 74 69 6e 67 20 73 61 76 65  ** existing save
18810 70 6f 69 6e 74 2c 20 50 31 3d 3d 31 2c 20 6f 72  point, P1==1, or
18820 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 20   to rollback an 
18830 65 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69  existing savepoi
18840 6e 74 20 50 31 3d 3d 32 2e 0a 2a 2f 0a 63 61 73  nt P1==2..*/.cas
18850 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 3a 20  e OP_Savepoint: 
18860 7b 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20  {.  int p1;     
18870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18880 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f 66 20      /* Value of 
18890 50 31 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  P1 operand */.  
188a0 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
188b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188c0 2f 2a 20 4e 61 6d 65 20 6f 66 20 73 61 76 65 70  /* Name of savep
188d0 6f 69 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 4e  oint */.  int nN
188e0 61 6d 65 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74  ame;.  Savepoint
188f0 20 2a 70 4e 65 77 3b 0a 20 20 53 61 76 65 70 6f   *pNew;.  Savepo
18900 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b  int *pSavepoint;
18910 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 54  .  Savepoint *pT
18920 6d 70 3b 0a 20 20 69 6e 74 20 69 53 61 76 65 70  mp;.  int iSavep
18930 6f 69 6e 74 3b 0a 20 20 69 6e 74 20 69 69 3b 0a  oint;.  int ii;.
18940 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b  .  p1 = pOp->p1;
18950 0a 20 20 7a 4e 61 6d 65 20 3d 20 70 4f 70 2d 3e  .  zName = pOp->
18960 70 34 2e 7a 3b 0a 0a 20 20 2f 2a 20 41 73 73 65  p4.z;..  /* Asse
18970 72 74 20 74 68 61 74 20 74 68 65 20 70 31 20 70  rt that the p1 p
18980 61 72 61 6d 65 74 65 72 20 69 73 20 76 61 6c 69  arameter is vali
18990 64 2e 20 41 6c 73 6f 20 74 68 61 74 20 69 66 20  d. Also that if 
189a0 74 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e  there is no open
189b0 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f  .  ** transactio
189c0 6e 2c 20 74 68 65 6e 20 74 68 65 72 65 20 63 61  n, then there ca
189d0 6e 6e 6f 74 20 62 65 20 61 6e 79 20 73 61 76 65  nnot be any save
189e0 70 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f 0a 20 20  points. .  */.  
189f0 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61 76  assert( db->pSav
18a00 65 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d  epoint==0 || db-
18a10 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29  >autoCommit==0 )
18a20 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31 3d 3d  ;.  assert( p1==
18a30 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 7c  SAVEPOINT_BEGIN|
18a40 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52  |p1==SAVEPOINT_R
18a50 45 4c 45 41 53 45 7c 7c 70 31 3d 3d 53 41 56 45  ELEASE||p1==SAVE
18a60 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29  POINT_ROLLBACK )
18a70 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e  ;.  assert( db->
18a80 70 53 61 76 65 70 6f 69 6e 74 20 7c 7c 20 64 62  pSavepoint || db
18a90 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
18aa0 61 76 65 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a 20  avepoint==0 );. 
18ab0 20 61 73 73 65 72 74 28 20 63 68 65 63 6b 53 61   assert( checkSa
18ac0 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29  vepointCount(db)
18ad0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
18ae0 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 0a 20  >bIsReader );.. 
18af0 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49   if( p1==SAVEPOI
18b00 4e 54 5f 42 45 47 49 4e 20 29 7b 0a 20 20 20 20  NT_BEGIN ){.    
18b10 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 57 72 69  if( db->nVdbeWri
18b20 74 65 3e 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a  te>0 ){.      /*
18b30 20 41 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74   A new savepoint
18b40 20 63 61 6e 6e 6f 74 20 62 65 20 63 72 65 61 74   cannot be creat
18b50 65 64 20 69 66 20 74 68 65 72 65 20 61 72 65 20  ed if there are 
18b60 61 63 74 69 76 65 20 77 72 69 74 65 20 0a 20 20  active write .  
18b70 20 20 20 20 2a 2a 20 73 74 61 74 65 6d 65 6e 74      ** statement
18b80 73 20 28 69 2e 65 2e 20 6f 70 65 6e 20 72 65 61  s (i.e. open rea
18b90 64 2f 77 72 69 74 65 20 69 6e 63 72 65 6d 65 6e  d/write incremen
18ba0 74 61 6c 20 62 6c 6f 62 20 68 61 6e 64 6c 65 73  tal blob handles
18bb0 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  )..      */.    
18bc0 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72    sqlite3VdbeErr
18bd0 6f 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20 6f 70  or(p, "cannot op
18be0 65 6e 20 73 61 76 65 70 6f 69 6e 74 20 2d 20 53  en savepoint - S
18bf0 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  QL statements in
18c00 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20   progress");.   
18c10 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42     rc = SQLITE_B
18c20 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  USY;.    }else{.
18c30 20 20 20 20 20 20 6e 4e 61 6d 65 20 3d 20 73 71        nName = sq
18c40 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 4e  lite3Strlen30(zN
18c50 61 6d 65 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53  ame);..#ifndef S
18c60 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
18c70 41 4c 54 41 42 4c 45 0a 20 20 20 20 20 20 2f 2a  ALTABLE.      /*
18c80 20 54 68 69 73 20 63 61 6c 6c 20 69 73 20 4f 6b   This call is Ok
18c90 20 65 76 65 6e 20 69 66 20 74 68 69 73 20 73 61   even if this sa
18ca0 76 65 70 6f 69 6e 74 20 69 73 20 61 63 74 75 61  vepoint is actua
18cb0 6c 6c 79 20 61 20 74 72 61 6e 73 61 63 74 69 6f  lly a transactio
18cc0 6e 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65 70  n.      ** savep
18cd0 6f 69 6e 74 20 28 61 6e 64 20 74 68 65 72 65 66  oint (and theref
18ce0 6f 72 65 20 73 68 6f 75 6c 64 20 6e 6f 74 20 70  ore should not p
18cf0 72 6f 6d 70 74 20 78 53 61 76 65 70 6f 69 6e 74  rompt xSavepoint
18d00 28 29 29 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 20  ()) callbacks.. 
18d10 20 20 20 20 20 2a 2a 20 49 66 20 74 68 69 73 20       ** If this 
18d20 69 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  is a transaction
18d30 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67   savepoint being
18d40 20 6f 70 65 6e 65 64 2c 20 69 74 20 69 73 20 67   opened, it is g
18d50 75 61 72 61 6e 74 65 65 64 0a 20 20 20 20 20 20  uaranteed.      
18d60 2a 2a 20 74 68 61 74 20 74 68 65 20 64 62 2d 3e  ** that the db->
18d70 61 56 54 72 61 6e 73 5b 5d 20 61 72 72 61 79 20  aVTrans[] array 
18d80 69 73 20 65 6d 70 74 79 2e 20 20 2a 2f 0a 20 20  is empty.  */.  
18d90 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
18da0 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c  autoCommit==0 ||
18db0 20 64 62 2d 3e 6e 56 54 72 61 6e 73 3d 3d 30 20   db->nVTrans==0 
18dc0 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  );.      rc = sq
18dd0 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69  lite3VtabSavepoi
18de0 6e 74 28 64 62 2c 20 53 41 56 45 50 4f 49 4e 54  nt(db, SAVEPOINT
18df0 5f 42 45 47 49 4e 2c 0a 20 20 20 20 20 20 20 20  _BEGIN,.        
18e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e10 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 74 61          db->nSta
18e20 74 65 6d 65 6e 74 2b 64 62 2d 3e 6e 53 61 76 65  tement+db->nSave
18e30 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 69 66  point);.      if
18e40 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
18e50 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
18e60 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69  _to_error;.#endi
18e70 66 0a 0a 20 20 20 20 20 20 2f 2a 20 43 72 65 61  f..      /* Crea
18e80 74 65 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69  te a new savepoi
18e90 6e 74 20 73 74 72 75 63 74 75 72 65 2e 20 2a 2f  nt structure. */
18ea0 0a 20 20 20 20 20 20 70 4e 65 77 20 3d 20 73 71  .      pNew = sq
18eb0 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
18ec0 4e 4e 28 64 62 2c 20 73 69 7a 65 6f 66 28 53 61  NN(db, sizeof(Sa
18ed0 76 65 70 6f 69 6e 74 29 2b 6e 4e 61 6d 65 2b 31  vepoint)+nName+1
18ee0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4e 65  );.      if( pNe
18ef0 77 20 29 7b 0a 20 20 20 20 20 20 20 20 70 4e 65  w ){.        pNe
18f00 77 2d 3e 7a 4e 61 6d 65 20 3d 20 28 63 68 61 72  w->zName = (char
18f10 20 2a 29 26 70 4e 65 77 5b 31 5d 3b 0a 20 20 20   *)&pNew[1];.   
18f20 20 20 20 20 20 6d 65 6d 63 70 79 28 70 4e 65 77       memcpy(pNew
18f30 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 2c 20  ->zName, zName, 
18f40 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 0a 20  nName+1);.    . 
18f50 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65         /* If the
18f60 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 20 74 72  re is no open tr
18f70 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20  ansaction, then 
18f80 6d 61 72 6b 20 74 68 69 73 20 61 73 20 61 20 73  mark this as a s
18f90 70 65 63 69 61 6c 0a 20 20 20 20 20 20 20 20 2a  pecial.        *
18fa0 2a 20 22 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  * "transaction s
18fb0 61 76 65 70 6f 69 6e 74 22 2e 20 2a 2f 0a 20 20  avepoint". */.  
18fc0 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61 75        if( db->au
18fd0 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20  toCommit ){.    
18fe0 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
18ff0 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20 20 20  mmit = 0;.      
19000 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61      db->isTransa
19010 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d  ctionSavepoint =
19020 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73   1;.        }els
19030 65 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d  e{.          db-
19040 3e 6e 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20  >nSavepoint++;. 
19050 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20         }..      
19060 20 20 2f 2a 20 4c 69 6e 6b 20 74 68 65 20 6e 65    /* Link the ne
19070 77 20 73 61 76 65 70 6f 69 6e 74 20 69 6e 74 6f  w savepoint into
19080 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61   the database ha
19090 6e 64 6c 65 27 73 20 6c 69 73 74 2e 20 2a 2f 0a  ndle's list. */.
190a0 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 70 4e          pNew->pN
190b0 65 78 74 20 3d 20 64 62 2d 3e 70 53 61 76 65 70  ext = db->pSavep
190c0 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20 20 64 62  oint;.        db
190d0 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70  ->pSavepoint = p
190e0 4e 65 77 3b 0a 20 20 20 20 20 20 20 20 70 4e 65  New;.        pNe
190f0 77 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  w->nDeferredCons
19100 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64   = db->nDeferred
19110 43 6f 6e 73 3b 0a 20 20 20 20 20 20 20 20 70 4e  Cons;.        pN
19120 65 77 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  ew->nDeferredImm
19130 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65  Cons = db->nDefe
19140 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20  rredImmCons;.   
19150 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c     }.    }.  }el
19160 73 65 7b 0a 20 20 20 20 69 53 61 76 65 70 6f 69  se{.    iSavepoi
19170 6e 74 20 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a 20  nt = 0;..    /* 
19180 46 69 6e 64 20 74 68 65 20 6e 61 6d 65 64 20 73  Find the named s
19190 61 76 65 70 6f 69 6e 74 2e 20 49 66 20 74 68 65  avepoint. If the
191a0 72 65 20 69 73 20 6e 6f 20 73 75 63 68 20 73 61  re is no such sa
191b0 76 65 70 6f 69 6e 74 2c 20 74 68 65 6e 20 61 6e  vepoint, then an
191c0 0a 20 20 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72  .    ** an error
191d0 20 69 73 20 72 65 74 75 72 6e 65 64 20 74 6f 20   is returned to 
191e0 74 68 65 20 75 73 65 72 2e 20 20 2a 2f 0a 20 20  the user.  */.  
191f0 20 20 66 6f 72 28 0a 20 20 20 20 20 20 70 53 61    for(.      pSa
19200 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 70 53  vepoint = db->pS
19210 61 76 65 70 6f 69 6e 74 3b 20 0a 20 20 20 20 20  avepoint; .     
19220 20 70 53 61 76 65 70 6f 69 6e 74 20 26 26 20 73   pSavepoint && s
19230 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 70 53  qlite3StrICmp(pS
19240 61 76 65 70 6f 69 6e 74 2d 3e 7a 4e 61 6d 65 2c  avepoint->zName,
19250 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 70   zName);.      p
19260 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76  Savepoint = pSav
19270 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 0a 20 20  epoint->pNext.  
19280 20 20 29 7b 0a 20 20 20 20 20 20 69 53 61 76 65    ){.      iSave
19290 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20  point++;.    }. 
192a0 20 20 20 69 66 28 20 21 70 53 61 76 65 70 6f 69     if( !pSavepoi
192b0 6e 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  nt ){.      sqli
192c0 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20  te3VdbeError(p, 
192d0 22 6e 6f 20 73 75 63 68 20 73 61 76 65 70 6f 69  "no such savepoi
192e0 6e 74 3a 20 25 73 22 2c 20 7a 4e 61 6d 65 29 3b  nt: %s", zName);
192f0 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
19300 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 65  TE_ERROR;.    }e
19310 6c 73 65 20 69 66 28 20 64 62 2d 3e 6e 56 64 62  lse if( db->nVdb
19320 65 57 72 69 74 65 3e 30 20 26 26 20 70 31 3d 3d  eWrite>0 && p1==
19330 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53  SAVEPOINT_RELEAS
19340 45 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 74  E ){.      /* It
19350 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65   is not possible
19360 20 74 6f 20 72 65 6c 65 61 73 65 20 28 63 6f 6d   to release (com
19370 6d 69 74 29 20 61 20 73 61 76 65 70 6f 69 6e 74  mit) a savepoint
19380 20 69 66 20 74 68 65 72 65 20 61 72 65 20 0a 20   if there are . 
19390 20 20 20 20 20 2a 2a 20 61 63 74 69 76 65 20 77       ** active w
193a0 72 69 74 65 20 73 74 61 74 65 6d 65 6e 74 73 2e  rite statements.
193b0 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
193c0 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72  sqlite3VdbeError
193d0 28 70 2c 20 22 63 61 6e 6e 6f 74 20 72 65 6c 65  (p, "cannot rele
193e0 61 73 65 20 73 61 76 65 70 6f 69 6e 74 20 2d 20  ase savepoint - 
193f0 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ".              
19400 20 20 20 20 20 20 20 20 20 20 20 20 22 53 51 4c              "SQL
19410 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70   statements in p
19420 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 20  rogress");.     
19430 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
19440 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 0a 20  Y;.    }else{.. 
19450 20 20 20 20 20 2f 2a 20 44 65 74 65 72 6d 69 6e       /* Determin
19460 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  e whether or not
19470 20 74 68 69 73 20 69 73 20 61 20 74 72 61 6e 73   this is a trans
19480 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74  action savepoint
19490 2e 20 49 66 20 73 6f 2c 0a 20 20 20 20 20 20 2a  . If so,.      *
194a0 2a 20 61 6e 64 20 74 68 69 73 20 69 73 20 61 20  * and this is a 
194b0 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 2c  RELEASE command,
194c0 20 74 68 65 6e 20 74 68 65 20 63 75 72 72 65 6e   then the curren
194d0 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 0a 20  t transaction . 
194e0 20 20 20 20 20 2a 2a 20 69 73 20 63 6f 6d 6d 69       ** is commi
194f0 74 74 65 64 2e 20 0a 20 20 20 20 20 20 2a 2f 0a  tted. .      */.
19500 20 20 20 20 20 20 69 6e 74 20 69 73 54 72 61 6e        int isTran
19510 73 61 63 74 69 6f 6e 20 3d 20 70 53 61 76 65 70  saction = pSavep
19520 6f 69 6e 74 2d 3e 70 4e 65 78 74 3d 3d 30 20 26  oint->pNext==0 &
19530 26 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74  & db->isTransact
19540 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20  ionSavepoint;.  
19550 20 20 20 20 69 66 28 20 69 73 54 72 61 6e 73 61      if( isTransa
19560 63 74 69 6f 6e 20 26 26 20 70 31 3d 3d 53 41 56  ction && p1==SAV
19570 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29  EPOINT_RELEASE )
19580 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 72  {.        if( (r
19590 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
195a0 68 65 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53  heckFk(p, 1))!=S
195b0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
195c0 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f        goto vdbe_
195d0 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20  return;.        
195e0 7d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75  }.        db->au
195f0 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20  toCommit = 1;.  
19600 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
19610 33 56 64 62 65 48 61 6c 74 28 70 29 3d 3d 53 51  3VdbeHalt(p)==SQ
19620 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20  LITE_BUSY ){.   
19630 20 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 28         p->pc = (
19640 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b  int)(pOp - aOp);
19650 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61  .          db->a
19660 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20  utoCommit = 0;. 
19670 20 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d           p->rc =
19680 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
19690 59 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74  Y;.          got
196a0 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
196b0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
196c0 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69   db->isTransacti
196d0 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b  onSavepoint = 0;
196e0 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 70 2d  .        rc = p-
196f0 3e 72 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  >rc;.      }else
19700 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69 73  {.        int is
19710 53 63 68 65 6d 61 43 68 61 6e 67 65 3b 0a 20 20  SchemaChange;.  
19720 20 20 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74        iSavepoint
19730 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e   = db->nSavepoin
19740 74 20 2d 20 69 53 61 76 65 70 6f 69 6e 74 20 2d  t - iSavepoint -
19750 20 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20   1;.        if( 
19760 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f  p1==SAVEPOINT_RO
19770 4c 4c 42 41 43 4b 20 29 7b 0a 20 20 20 20 20 20  LLBACK ){.      
19780 20 20 20 20 69 73 53 63 68 65 6d 61 43 68 61 6e      isSchemaChan
19790 67 65 20 3d 20 28 64 62 2d 3e 6d 44 62 46 6c 61  ge = (db->mDbFla
197a0 67 73 20 26 20 44 42 46 4c 41 47 5f 53 63 68 65  gs & DBFLAG_Sche
197b0 6d 61 43 68 61 6e 67 65 29 21 3d 30 3b 0a 20 20  maChange)!=0;.  
197c0 20 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d 30          for(ii=0
197d0 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69  ; ii<db->nDb; ii
197e0 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ++){.           
197f0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
19800 65 65 54 72 69 70 41 6c 6c 43 75 72 73 6f 72 73  eeTripAllCursors
19810 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74  (db->aDb[ii].pBt
19820 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
19830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19840 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f           SQLITE_
19850 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 2c 0a  ABORT_ROLLBACK,.
19860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19880 20 20 20 20 20 20 20 69 73 53 63 68 65 6d 61 43         isSchemaC
19890 68 61 6e 67 65 3d 3d 30 29 3b 0a 20 20 20 20 20  hange==0);.     
198a0 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53         if( rc!=S
198b0 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20  QLITE_OK ) goto 
198c0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
198d0 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  or;.          }.
198e0 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
198f0 20 20 20 20 20 20 20 20 20 69 73 53 63 68 65 6d           isSchem
19900 61 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 20  aChange = 0;.   
19910 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 66       }.        f
19920 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e  or(ii=0; ii<db->
19930 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20  nDb; ii++){.    
19940 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
19950 65 33 42 74 72 65 65 53 61 76 65 70 6f 69 6e 74  e3BtreeSavepoint
19960 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74  (db->aDb[ii].pBt
19970 2c 20 70 31 2c 20 69 53 61 76 65 70 6f 69 6e 74  , p1, iSavepoint
19980 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  );.          if(
19990 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
199a0 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 6f  {.            go
199b0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
199c0 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20  error;.         
199d0 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
199e0 20 20 20 20 20 69 66 28 20 69 73 53 63 68 65 6d       if( isSchem
199f0 61 43 68 61 6e 67 65 20 29 7b 0a 20 20 20 20 20  aChange ){.     
19a00 20 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69       sqlite3Expi
19a10 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d  rePreparedStatem
19a20 65 6e 74 73 28 64 62 2c 20 30 29 3b 0a 20 20 20  ents(db, 0);.   
19a30 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65         sqlite3Re
19a40 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43  setAllSchemasOfC
19a50 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20  onnection(db);. 
19a60 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6d 44 62           db->mDb
19a70 46 6c 61 67 73 20 7c 3d 20 44 42 46 4c 41 47 5f  Flags |= DBFLAG_
19a80 53 63 68 65 6d 61 43 68 61 6e 67 65 3b 0a 20 20  SchemaChange;.  
19a90 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
19aa0 20 20 0a 20 20 20 20 20 20 2f 2a 20 52 65 67 61    .      /* Rega
19ab0 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65  rdless of whethe
19ac0 72 20 74 68 69 73 20 69 73 20 61 20 52 45 4c 45  r this is a RELE
19ad0 41 53 45 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 2c  ASE or ROLLBACK,
19ae0 20 64 65 73 74 72 6f 79 20 61 6c 6c 20 0a 20 20   destroy all .  
19af0 20 20 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74      ** savepoint
19b00 73 20 6e 65 73 74 65 64 20 69 6e 73 69 64 65 20  s nested inside 
19b10 6f 66 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74  of the savepoint
19b20 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20   being operated 
19b30 6f 6e 2e 20 2a 2f 0a 20 20 20 20 20 20 77 68 69  on. */.      whi
19b40 6c 65 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69  le( db->pSavepoi
19b50 6e 74 21 3d 70 53 61 76 65 70 6f 69 6e 74 20 29  nt!=pSavepoint )
19b60 7b 0a 20 20 20 20 20 20 20 20 70 54 6d 70 20 3d  {.        pTmp =
19b70 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b   db->pSavepoint;
19b80 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61  .        db->pSa
19b90 76 65 70 6f 69 6e 74 20 3d 20 70 54 6d 70 2d 3e  vepoint = pTmp->
19ba0 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 20 20 73  pNext;.        s
19bb0 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
19bc0 20 70 54 6d 70 29 3b 0a 20 20 20 20 20 20 20 20   pTmp);.        
19bd0 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d  db->nSavepoint--
19be0 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ;.      }..     
19bf0 20 2f 2a 20 49 66 20 69 74 20 69 73 20 61 20 52   /* If it is a R
19c00 45 4c 45 41 53 45 2c 20 74 68 65 6e 20 64 65 73  ELEASE, then des
19c10 74 72 6f 79 20 74 68 65 20 73 61 76 65 70 6f 69  troy the savepoi
19c20 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65  nt being operate
19c30 64 20 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20 74  d on .      ** t
19c40 6f 6f 2e 20 49 66 20 69 74 20 69 73 20 61 20 52  oo. If it is a R
19c50 4f 4c 4c 42 41 43 4b 20 54 4f 2c 20 74 68 65 6e  OLLBACK TO, then
19c60 20 73 65 74 20 74 68 65 20 6e 75 6d 62 65 72 20   set the number 
19c70 6f 66 20 64 65 66 65 72 72 65 64 20 0a 20 20 20  of deferred .   
19c80 20 20 20 2a 2a 20 63 6f 6e 73 74 72 61 69 6e 74     ** constraint
19c90 20 76 69 6f 6c 61 74 69 6f 6e 73 20 70 72 65 73   violations pres
19ca0 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61 62  ent in the datab
19cb0 61 73 65 20 74 6f 20 74 68 65 20 76 61 6c 75 65  ase to the value
19cc0 20 73 74 6f 72 65 64 0a 20 20 20 20 20 20 2a 2a   stored.      **
19cd0 20 77 68 65 6e 20 74 68 65 20 73 61 76 65 70 6f   when the savepo
19ce0 69 6e 74 20 77 61 73 20 63 72 65 61 74 65 64 2e  int was created.
19cf0 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70    */.      if( p
19d00 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  1==SAVEPOINT_REL
19d10 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20 20  EASE ){.        
19d20 61 73 73 65 72 74 28 20 70 53 61 76 65 70 6f 69  assert( pSavepoi
19d30 6e 74 3d 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69  nt==db->pSavepoi
19d40 6e 74 20 29 3b 0a 20 20 20 20 20 20 20 20 64 62  nt );.        db
19d50 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70  ->pSavepoint = p
19d60 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74  Savepoint->pNext
19d70 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
19d80 33 44 62 46 72 65 65 28 64 62 2c 20 70 53 61 76  3DbFree(db, pSav
19d90 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20  epoint);.       
19da0 20 69 66 28 20 21 69 73 54 72 61 6e 73 61 63 74   if( !isTransact
19db0 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ion ){.         
19dc0 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d   db->nSavepoint-
19dd0 2d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  -;.        }.   
19de0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
19df0 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43    db->nDeferredC
19e00 6f 6e 73 20 3d 20 70 53 61 76 65 70 6f 69 6e 74  ons = pSavepoint
19e10 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b  ->nDeferredCons;
19e20 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 44 65  .        db->nDe
19e30 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20  ferredImmCons = 
19e40 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66  pSavepoint->nDef
19e50 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20  erredImmCons;.  
19e60 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 69 66 28      }..      if(
19e70 20 21 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20   !isTransaction 
19e80 7c 7c 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  || p1==SAVEPOINT
19e90 5f 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20 20 20  _ROLLBACK ){.   
19ea0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
19eb0 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 64  3VtabSavepoint(d
19ec0 62 2c 20 70 31 2c 20 69 53 61 76 65 70 6f 69 6e  b, p1, iSavepoin
19ed0 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  t);.        if( 
19ee0 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc!=SQLITE_OK ) 
19ef0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
19f00 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  o_error;.      }
19f10 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28  .    }.  }.  if(
19f20 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
19f30 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a  _due_to_error;..
19f40 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
19f50 70 63 6f 64 65 3a 20 41 75 74 6f 43 6f 6d 6d 69  pcode: AutoCommi
19f60 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
19f70 0a 2a 2a 20 53 65 74 20 74 68 65 20 64 61 74 61  .** Set the data
19f80 62 61 73 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74  base auto-commit
19f90 20 66 6c 61 67 20 74 6f 20 50 31 20 28 31 20 6f   flag to P1 (1 o
19fa0 72 20 30 29 2e 20 49 66 20 50 32 20 69 73 20 74  r 0). If P2 is t
19fb0 72 75 65 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61 63  rue, roll.** bac
19fc0 6b 20 61 6e 79 20 63 75 72 72 65 6e 74 6c 79 20  k any currently 
19fd0 61 63 74 69 76 65 20 62 74 72 65 65 20 74 72 61  active btree tra
19fe0 6e 73 61 63 74 69 6f 6e 73 2e 20 49 66 20 74 68  nsactions. If th
19ff0 65 72 65 20 61 72 65 20 61 6e 79 20 61 63 74 69  ere are any acti
1a000 76 65 0a 2a 2a 20 56 4d 73 20 28 61 70 61 72 74  ve.** VMs (apart
1a010 20 66 72 6f 6d 20 74 68 69 73 20 6f 6e 65 29 2c   from this one),
1a020 20 74 68 65 6e 20 61 20 52 4f 4c 4c 42 41 43 4b   then a ROLLBACK
1a030 20 66 61 69 6c 73 2e 20 20 41 20 43 4f 4d 4d 49   fails.  A COMMI
1a040 54 20 66 61 69 6c 73 20 69 66 0a 2a 2a 20 74 68  T fails if.** th
1a050 65 72 65 20 61 72 65 20 61 63 74 69 76 65 20 77  ere are active w
1a060 72 69 74 69 6e 67 20 56 4d 73 20 6f 72 20 61 63  riting VMs or ac
1a070 74 69 76 65 20 56 4d 73 20 74 68 61 74 20 75 73  tive VMs that us
1a080 65 20 73 68 61 72 65 64 20 63 61 63 68 65 2e 0a  e shared cache..
1a090 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
1a0a0 75 63 74 69 6f 6e 20 63 61 75 73 65 73 20 74 68  uction causes th
1a0b0 65 20 56 4d 20 74 6f 20 68 61 6c 74 2e 0a 2a 2f  e VM to halt..*/
1a0c0 0a 63 61 73 65 20 4f 50 5f 41 75 74 6f 43 6f 6d  .case OP_AutoCom
1a0d0 6d 69 74 3a 20 7b 0a 20 20 69 6e 74 20 64 65 73  mit: {.  int des
1a0e0 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a  iredAutoCommit;.
1a0f0 20 20 69 6e 74 20 69 52 6f 6c 6c 62 61 63 6b 3b    int iRollback;
1a100 0a 0a 20 20 64 65 73 69 72 65 64 41 75 74 6f 43  ..  desiredAutoC
1a110 6f 6d 6d 69 74 20 3d 20 70 4f 70 2d 3e 70 31 3b  ommit = pOp->p1;
1a120 0a 20 20 69 52 6f 6c 6c 62 61 63 6b 20 3d 20 70  .  iRollback = p
1a130 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74  Op->p2;.  assert
1a140 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  ( desiredAutoCom
1a150 6d 69 74 3d 3d 31 20 7c 7c 20 64 65 73 69 72 65  mit==1 || desire
1a160 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29  dAutoCommit==0 )
1a170 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65 73 69  ;.  assert( desi
1a180 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31  redAutoCommit==1
1a190 20 7c 7c 20 69 52 6f 6c 6c 62 61 63 6b 3d 3d 30   || iRollback==0
1a1a0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62   );.  assert( db
1a1b0 2d 3e 6e 56 64 62 65 41 63 74 69 76 65 3e 30 20  ->nVdbeActive>0 
1a1c0 29 3b 20 20 2f 2a 20 41 74 20 6c 65 61 73 74 20  );  /* At least 
1a1d0 74 68 69 73 20 6f 6e 65 20 56 4d 20 69 73 20 61  this one VM is a
1a1e0 63 74 69 76 65 20 2a 2f 0a 20 20 61 73 73 65 72  ctive */.  asser
1a1f0 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
1a200 29 3b 0a 0a 20 20 69 66 28 20 64 65 73 69 72 65  );..  if( desire
1a210 64 41 75 74 6f 43 6f 6d 6d 69 74 21 3d 64 62 2d  dAutoCommit!=db-
1a220 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20  >autoCommit ){. 
1a230 20 20 20 69 66 28 20 69 52 6f 6c 6c 62 61 63 6b     if( iRollback
1a240 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
1a250 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  ( desiredAutoCom
1a260 6d 69 74 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20  mit==1 );.      
1a270 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41  sqlite3RollbackA
1a280 6c 6c 28 64 62 2c 20 53 51 4c 49 54 45 5f 41 42  ll(db, SQLITE_AB
1a290 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 29 3b 0a 20  ORT_ROLLBACK);. 
1a2a0 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d       db->autoCom
1a2b0 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c  mit = 1;.    }el
1a2c0 73 65 20 69 66 28 20 64 65 73 69 72 65 64 41 75  se if( desiredAu
1a2d0 74 6f 43 6f 6d 6d 69 74 20 26 26 20 64 62 2d 3e  toCommit && db->
1a2e0 6e 56 64 62 65 57 72 69 74 65 3e 30 20 29 7b 0a  nVdbeWrite>0 ){.
1a2f0 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73        /* If this
1a300 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d 70   instruction imp
1a310 6c 65 6d 65 6e 74 73 20 61 20 43 4f 4d 4d 49 54  lements a COMMIT
1a320 20 61 6e 64 20 6f 74 68 65 72 20 56 4d 73 20 61   and other VMs a
1a330 72 65 20 77 72 69 74 69 6e 67 0a 20 20 20 20 20  re writing.     
1a340 20 2a 2a 20 72 65 74 75 72 6e 20 61 6e 20 65 72   ** return an er
1a350 72 6f 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74  ror indicating t
1a360 68 61 74 20 74 68 65 20 6f 74 68 65 72 20 56 4d  hat the other VM
1a370 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65 20  s must complete 
1a380 66 69 72 73 74 2e 20 0a 20 20 20 20 20 20 2a 2f  first. .      */
1a390 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
1a3a0 62 65 45 72 72 6f 72 28 70 2c 20 22 63 61 6e 6e  beError(p, "cann
1a3b0 6f 74 20 63 6f 6d 6d 69 74 20 74 72 61 6e 73 61  ot commit transa
1a3c0 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20 20 20  ction - ".      
1a3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a3e0 20 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65      "SQL stateme
1a3f0 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22  nts in progress"
1a400 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  );.      rc = SQ
1a410 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20  LITE_BUSY;.     
1a420 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1a430 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65  to_error;.    }e
1a440 6c 73 65 20 69 66 28 20 28 72 63 20 3d 20 73 71  lse if( (rc = sq
1a450 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b  lite3VdbeCheckFk
1a460 28 70 2c 20 31 29 29 21 3d 53 51 4c 49 54 45 5f  (p, 1))!=SQLITE_
1a470 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  OK ){.      goto
1a480 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
1a490 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64    }else{.      d
1a4a0 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
1a4b0 28 75 38 29 64 65 73 69 72 65 64 41 75 74 6f 43  (u8)desiredAutoC
1a4c0 6f 6d 6d 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20  ommit;.    }.   
1a4d0 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
1a4e0 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f  Halt(p)==SQLITE_
1a4f0 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 70 2d  BUSY ){.      p-
1a500 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f 70 20  >pc = (int)(pOp 
1a510 2d 20 61 4f 70 29 3b 0a 20 20 20 20 20 20 64 62  - aOp);.      db
1a520 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28  ->autoCommit = (
1a530 75 38 29 28 31 2d 64 65 73 69 72 65 64 41 75 74  u8)(1-desiredAut
1a540 6f 43 6f 6d 6d 69 74 29 3b 0a 20 20 20 20 20 20  oCommit);.      
1a550 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c  p->rc = rc = SQL
1a560 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20  ITE_BUSY;.      
1a570 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
1a580 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65  ;.    }.    asse
1a590 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65  rt( db->nStateme
1a5a0 6e 74 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c  nt==0 );.    sql
1a5b0 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69  ite3CloseSavepoi
1a5c0 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 69 66 28  nts(db);.    if(
1a5d0 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f   p->rc==SQLITE_O
1a5e0 4b 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  K ){.      rc = 
1a5f0 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 20  SQLITE_DONE;.   
1a600 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63   }else{.      rc
1a610 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
1a620 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f 20  .    }.    goto 
1a630 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 7d  vdbe_return;.  }
1a640 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65  else{.    sqlite
1a650 33 56 64 62 65 45 72 72 6f 72 28 70 2c 0a 20 20  3VdbeError(p,.  
1a660 20 20 20 20 20 20 28 21 64 65 73 69 72 65 64 41        (!desiredA
1a670 75 74 6f 43 6f 6d 6d 69 74 29 3f 22 63 61 6e 6e  utoCommit)?"cann
1a680 6f 74 20 73 74 61 72 74 20 61 20 74 72 61 6e 73  ot start a trans
1a690 61 63 74 69 6f 6e 20 77 69 74 68 69 6e 20 61 20  action within a 
1a6a0 74 72 61 6e 73 61 63 74 69 6f 6e 22 3a 28 0a 20  transaction":(. 
1a6b0 20 20 20 20 20 20 20 28 69 52 6f 6c 6c 62 61 63         (iRollbac
1a6c0 6b 29 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62  k)?"cannot rollb
1a6d0 61 63 6b 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63  ack - no transac
1a6e0 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22 3a  tion is active":
1a6f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a700 20 20 20 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d      "cannot comm
1a710 69 74 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74  it - no transact
1a720 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22 29 29  ion is active"))
1a730 3b 0a 20 20 20 20 20 20 20 20 20 0a 20 20 20 20  ;.         .    
1a740 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc = SQLITE_ERRO
1a750 52 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  R;.    goto abor
1a760 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1a770 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
1a780 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61 6e 73  /* Opcode: Trans
1a790 61 63 74 69 6f 6e 20 50 31 20 50 32 20 50 33 20  action P1 P2 P3 
1a7a0 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42 65 67 69  P4 P5.**.** Begi
1a7b0 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  n a transaction 
1a7c0 6f 6e 20 64 61 74 61 62 61 73 65 20 50 31 20 69  on database P1 i
1a7d0 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  f a transaction 
1a7e0 69 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 0a 2a  is not already.*
1a7f0 2a 20 61 63 74 69 76 65 2e 0a 2a 2a 20 49 66 20  * active..** If 
1a800 50 32 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  P2 is non-zero, 
1a810 74 68 65 6e 20 61 20 77 72 69 74 65 2d 74 72 61  then a write-tra
1a820 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72  nsaction is star
1a830 74 65 64 2c 20 6f 72 20 69 66 20 61 20 0a 2a 2a  ted, or if a .**
1a840 20 72 65 61 64 2d 74 72 61 6e 73 61 63 74 69 6f   read-transactio
1a850 6e 20 69 73 20 61 6c 72 65 61 64 79 20 61 63 74  n is already act
1a860 69 76 65 2c 20 69 74 20 69 73 20 75 70 67 72 61  ive, it is upgra
1a870 64 65 64 20 74 6f 20 61 20 77 72 69 74 65 2d 74  ded to a write-t
1a880 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2a 20 49  ransaction..** I
1a890 66 20 50 32 20 69 73 20 7a 65 72 6f 2c 20 74 68  f P2 is zero, th
1a8a0 65 6e 20 61 20 72 65 61 64 2d 74 72 61 6e 73 61  en a read-transa
1a8b0 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64  ction is started
1a8c0 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68  ..**.** P1 is th
1a8d0 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64  e index of the d
1a8e0 61 74 61 62 61 73 65 20 66 69 6c 65 20 6f 6e 20  atabase file on 
1a8f0 77 68 69 63 68 20 74 68 65 20 74 72 61 6e 73 61  which the transa
1a900 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 73 74 61 72  ction is.** star
1a910 74 65 64 2e 20 20 49 6e 64 65 78 20 30 20 69 73  ted.  Index 0 is
1a920 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
1a930 73 65 20 66 69 6c 65 20 61 6e 64 20 69 6e 64 65  se file and inde
1a940 78 20 31 20 69 73 20 74 68 65 0a 2a 2a 20 66 69  x 1 is the.** fi
1a950 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65 6d 70  le used for temp
1a960 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20 20 49  orary tables.  I
1a970 6e 64 69 63 65 73 20 6f 66 20 32 20 6f 72 20 6d  ndices of 2 or m
1a980 6f 72 65 20 61 72 65 20 75 73 65 64 20 66 6f 72  ore are used for
1a990 0a 2a 2a 20 61 74 74 61 63 68 65 64 20 64 61 74  .** attached dat
1a9a0 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66  abases..**.** If
1a9b0 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63   a write-transac
1a9c0 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 20  tion is started 
1a9d0 61 6e 64 20 74 68 65 20 56 64 62 65 2e 75 73 65  and the Vdbe.use
1a9e0 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 66 6c 61  sStmtJournal fla
1a9f0 67 20 69 73 0a 2a 2a 20 74 72 75 65 20 28 74 68  g is.** true (th
1aa00 69 73 20 66 6c 61 67 20 69 73 20 73 65 74 20 69  is flag is set i
1aa10 66 20 74 68 65 20 56 64 62 65 20 6d 61 79 20 6d  f the Vdbe may m
1aa20 6f 64 69 66 79 20 6d 6f 72 65 20 74 68 61 6e 20  odify more than 
1aa30 6f 6e 65 20 72 6f 77 20 61 6e 64 20 6d 61 79 0a  one row and may.
1aa40 2a 2a 20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52  ** throw an ABOR
1aa50 54 20 65 78 63 65 70 74 69 6f 6e 29 2c 20 61 20  T exception), a 
1aa60 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
1aa70 63 74 69 6f 6e 20 6d 61 79 20 61 6c 73 6f 20 62  ction may also b
1aa80 65 20 6f 70 65 6e 65 64 2e 0a 2a 2a 20 4d 6f 72  e opened..** Mor
1aa90 65 20 73 70 65 63 69 66 69 63 61 6c 6c 79 2c 20  e specifically, 
1aaa0 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  a statement tran
1aab0 73 61 63 74 69 6f 6e 20 69 73 20 6f 70 65 6e 65  saction is opene
1aac0 64 20 69 66 66 20 74 68 65 20 64 61 74 61 62 61  d iff the databa
1aad0 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e  se.** connection
1aae0 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 6e 6f   is currently no
1aaf0 74 20 69 6e 20 61 75 74 6f 63 6f 6d 6d 69 74 20  t in autocommit 
1ab00 6d 6f 64 65 2c 20 6f 72 20 69 66 20 74 68 65 72  mode, or if ther
1ab10 65 20 61 72 65 20 6f 74 68 65 72 0a 2a 2a 20 61  e are other.** a
1ab20 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74 73  ctive statements
1ab30 2e 20 41 20 73 74 61 74 65 6d 65 6e 74 20 74 72  . A statement tr
1ab40 61 6e 73 61 63 74 69 6f 6e 20 61 6c 6c 6f 77 73  ansaction allows
1ab50 20 74 68 65 20 63 68 61 6e 67 65 73 20 6d 61 64   the changes mad
1ab60 65 20 62 79 20 74 68 69 73 0a 2a 2a 20 56 44 42  e by this.** VDB
1ab70 45 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62  E to be rolled b
1ab80 61 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72  ack after an err
1ab90 6f 72 20 77 69 74 68 6f 75 74 20 68 61 76 69 6e  or without havin
1aba0 67 20 74 6f 20 72 6f 6c 6c 20 62 61 63 6b 20 74  g to roll back t
1abb0 68 65 0a 2a 2a 20 65 6e 74 69 72 65 20 74 72 61  he.** entire tra
1abc0 6e 73 61 63 74 69 6f 6e 2e 20 49 66 20 6e 6f 20  nsaction. If no 
1abd0 65 72 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74  error is encount
1abe0 65 72 65 64 2c 20 74 68 65 20 73 74 61 74 65 6d  ered, the statem
1abf0 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a  ent transaction.
1ac00 2a 2a 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69  ** will automati
1ac10 63 61 6c 6c 79 20 63 6f 6d 6d 69 74 20 77 68 65  cally commit whe
1ac20 6e 20 74 68 65 20 56 44 42 45 20 68 61 6c 74 73  n the VDBE halts
1ac30 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30  ..**.** If P5!=0
1ac40 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64   then this opcod
1ac50 65 20 61 6c 73 6f 20 63 68 65 63 6b 73 20 74 68  e also checks th
1ac60 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20  e schema cookie 
1ac70 61 67 61 69 6e 73 74 20 50 33 0a 2a 2a 20 61 6e  against P3.** an
1ac80 64 20 74 68 65 20 73 63 68 65 6d 61 20 67 65 6e  d the schema gen
1ac90 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20  eration counter 
1aca0 61 67 61 69 6e 73 74 20 50 34 2e 0a 2a 2a 20 54  against P4..** T
1acb0 68 65 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65  he cookie change
1acc0 73 20 69 74 73 20 76 61 6c 75 65 20 77 68 65 6e  s its value when
1acd0 65 76 65 72 20 74 68 65 20 64 61 74 61 62 61 73  ever the databas
1ace0 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73  e schema changes
1acf0 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74  ..** This operat
1ad00 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20 64  ion is used to d
1ad10 65 74 65 63 74 20 77 68 65 6e 20 74 68 61 74 20  etect when that 
1ad20 74 68 65 20 63 6f 6f 6b 69 65 20 68 61 73 20 63  the cookie has c
1ad30 68 61 6e 67 65 64 0a 2a 2a 20 61 6e 64 20 74 68  hanged.** and th
1ad40 61 74 20 74 68 65 20 63 75 72 72 65 6e 74 20 70  at the current p
1ad50 72 6f 63 65 73 73 20 6e 65 65 64 73 20 74 6f 20  rocess needs to 
1ad60 72 65 72 65 61 64 20 74 68 65 20 73 63 68 65 6d  reread the schem
1ad70 61 2e 20 20 49 66 20 74 68 65 20 73 63 68 65 6d  a.  If the schem
1ad80 61 0a 2a 2a 20 63 6f 6f 6b 69 65 20 69 6e 20 50  a.** cookie in P
1ad90 33 20 64 69 66 66 65 72 73 20 66 72 6f 6d 20 74  3 differs from t
1ada0 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65  he schema cookie
1adb0 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
1adc0 20 68 65 61 64 65 72 20 6f 72 0a 2a 2a 20 69 66   header or.** if
1add0 20 74 68 65 20 73 63 68 65 6d 61 20 67 65 6e 65   the schema gene
1ade0 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20 69  ration counter i
1adf0 6e 20 50 34 20 64 69 66 66 65 72 73 20 66 72 6f  n P4 differs fro
1ae00 6d 20 74 68 65 20 63 75 72 72 65 6e 74 0a 2a 2a  m the current.**
1ae10 20 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e   generation coun
1ae20 74 65 72 2c 20 74 68 65 6e 20 61 6e 20 53 51 4c  ter, then an SQL
1ae30 49 54 45 5f 53 43 48 45 4d 41 20 65 72 72 6f 72  ITE_SCHEMA error
1ae40 20 69 73 20 72 61 69 73 65 64 20 61 6e 64 20 65   is raised and e
1ae50 78 65 63 75 74 69 6f 6e 0a 2a 2a 20 68 61 6c 74  xecution.** halt
1ae60 73 2e 20 20 54 68 65 20 73 71 6c 69 74 65 33 5f  s.  The sqlite3_
1ae70 73 74 65 70 28 29 20 77 72 61 70 70 65 72 20 66  step() wrapper f
1ae80 75 6e 63 74 69 6f 6e 20 6d 69 67 68 74 20 74 68  unction might th
1ae90 65 6e 20 72 65 70 72 65 70 61 72 65 20 74 68 65  en reprepare the
1aea0 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 61 6e  .** statement an
1aeb0 64 20 72 65 72 75 6e 20 69 74 20 66 72 6f 6d 20  d rerun it from 
1aec0 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 0a 2a  the beginning..*
1aed0 2f 0a 63 61 73 65 20 4f 50 5f 54 72 61 6e 73 61  /.case OP_Transa
1aee0 63 74 69 6f 6e 3a 20 7b 0a 20 20 42 74 72 65 65  ction: {.  Btree
1aef0 20 2a 70 42 74 3b 0a 20 20 69 6e 74 20 69 4d 65   *pBt;.  int iMe
1af00 74 61 20 3d 20 30 3b 0a 0a 20 20 61 73 73 65 72  ta = 0;..  asser
1af10 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
1af20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
1af30 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 7c 7c 20 70  readOnly==0 || p
1af40 4f 70 2d 3e 70 32 3d 3d 30 20 29 3b 0a 20 20 61  Op->p2==0 );.  a
1af50 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1af60 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d  0 && pOp->p1<db-
1af70 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
1af80 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e  ( DbMaskTest(p->
1af90 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e  btreeMask, pOp->
1afa0 70 31 29 20 29 3b 0a 20 20 69 66 28 20 70 4f 70  p1) );.  if( pOp
1afb0 2d 3e 70 32 20 26 26 20 28 64 62 2d 3e 66 6c 61  ->p2 && (db->fla
1afc0 67 73 20 26 20 53 51 4c 49 54 45 5f 51 75 65 72  gs & SQLITE_Quer
1afd0 79 4f 6e 6c 79 29 21 3d 30 20 29 7b 0a 20 20 20  yOnly)!=0 ){.   
1afe0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 52 45 41   rc = SQLITE_REA
1aff0 44 4f 4e 4c 59 3b 0a 20 20 20 20 67 6f 74 6f 20  DONLY;.    goto 
1b000 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1b010 6f 72 3b 0a 20 20 7d 0a 20 20 70 42 74 20 3d 20  or;.  }.  pBt = 
1b020 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
1b030 2e 70 42 74 3b 0a 0a 20 20 69 66 28 20 70 42 74  .pBt;..  if( pBt
1b040 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
1b050 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 54 72  ite3BtreeBeginTr
1b060 61 6e 73 28 70 42 74 2c 20 70 4f 70 2d 3e 70 32  ans(pBt, pOp->p2
1b070 2c 20 26 69 4d 65 74 61 29 3b 0a 20 20 20 20 74  , &iMeta);.    t
1b080 65 73 74 63 61 73 65 28 20 72 63 3d 3d 53 51 4c  estcase( rc==SQL
1b090 49 54 45 5f 42 55 53 59 5f 53 4e 41 50 53 48 4f  ITE_BUSY_SNAPSHO
1b0a0 54 20 29 3b 0a 20 20 20 20 74 65 73 74 63 61 73  T );.    testcas
1b0b0 65 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55  e( rc==SQLITE_BU
1b0c0 53 59 5f 52 45 43 4f 56 45 52 59 20 29 3b 0a 20  SY_RECOVERY );. 
1b0d0 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
1b0e0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 69 66  E_OK ){.      if
1b0f0 28 20 28 72 63 26 30 78 66 66 29 3d 3d 53 51 4c  ( (rc&0xff)==SQL
1b100 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20  ITE_BUSY ){.    
1b110 20 20 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e 74      p->pc = (int
1b120 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20  )(pOp - aOp);.  
1b130 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63        p->rc = rc
1b140 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76  ;.        goto v
1b150 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20  dbe_return;.    
1b160 20 20 7d 0a 20 20 20 20 20 20 67 6f 74 6f 20 61    }.      goto a
1b170 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1b180 72 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66  r;.    }..    if
1b190 28 20 70 4f 70 2d 3e 70 32 20 26 26 20 70 2d 3e  ( pOp->p2 && p->
1b1a0 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20  usesStmtJournal 
1b1b0 0a 20 20 20 20 20 26 26 20 28 64 62 2d 3e 61 75  .     && (db->au
1b1c0 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64  toCommit==0 || d
1b1d0 62 2d 3e 6e 56 64 62 65 52 65 61 64 3e 31 29 20  b->nVdbeRead>1) 
1b1e0 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 61 73  .    ){.      as
1b1f0 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72  sert( sqlite3Btr
1b200 65 65 49 73 49 6e 54 72 61 6e 73 28 70 42 74 29  eeIsInTrans(pBt)
1b210 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d   );.      if( p-
1b220 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29  >iStatement==0 )
1b230 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
1b240 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74  ( db->nStatement
1b250 3e 3d 30 20 26 26 20 64 62 2d 3e 6e 53 61 76 65  >=0 && db->nSave
1b260 70 6f 69 6e 74 3e 3d 30 20 29 3b 0a 20 20 20 20  point>=0 );.    
1b270 20 20 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65      db->nStateme
1b280 6e 74 2b 2b 3b 20 0a 20 20 20 20 20 20 20 20 70  nt++; .        p
1b290 2d 3e 69 53 74 61 74 65 6d 65 6e 74 20 3d 20 64  ->iStatement = d
1b2a0 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20  b->nSavepoint + 
1b2b0 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3b 0a  db->nStatement;.
1b2c0 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 72        }..      r
1b2d0 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53  c = sqlite3VtabS
1b2e0 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 53 41 56  avepoint(db, SAV
1b2f0 45 50 4f 49 4e 54 5f 42 45 47 49 4e 2c 20 70 2d  EPOINT_BEGIN, p-
1b300 3e 69 53 74 61 74 65 6d 65 6e 74 2d 31 29 3b 0a  >iStatement-1);.
1b310 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
1b320 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
1b330 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1b340 74 72 65 65 42 65 67 69 6e 53 74 6d 74 28 70 42  treeBeginStmt(pB
1b350 74 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74  t, p->iStatement
1b360 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  );.      }..    
1b370 20 20 2f 2a 20 53 74 6f 72 65 20 74 68 65 20 63    /* Store the c
1b380 75 72 72 65 6e 74 20 76 61 6c 75 65 20 6f 66 20  urrent value of 
1b390 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e  the database han
1b3a0 64 6c 65 73 20 64 65 66 65 72 72 65 64 20 63 6f  dles deferred co
1b3b0 6e 73 74 72 61 69 6e 74 0a 20 20 20 20 20 20 2a  nstraint.      *
1b3c0 2a 20 63 6f 75 6e 74 65 72 2e 20 49 66 20 74 68  * counter. If th
1b3d0 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  e statement tran
1b3e0 73 61 63 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f  saction needs to
1b3f0 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2c   be rolled back,
1b400 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 76 61  .      ** the va
1b410 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 75 6e  lue of this coun
1b420 74 65 72 20 6e 65 65 64 73 20 74 6f 20 62 65 20  ter needs to be 
1b430 72 65 73 74 6f 72 65 64 20 74 6f 6f 2e 20 20 2a  restored too.  *
1b440 2f 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74  /.      p->nStmt
1b450 44 65 66 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44  DefCons = db->nD
1b460 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20  eferredCons;.   
1b470 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66 49 6d     p->nStmtDefIm
1b480 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66  mCons = db->nDef
1b490 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20  erredImmCons;.  
1b4a0 20 20 7d 0a 20 20 7d 0a 20 20 61 73 73 65 72 74    }.  }.  assert
1b4b0 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20  ( pOp->p5==0 || 
1b4c0 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
1b4d0 49 4e 54 33 32 20 29 3b 0a 20 20 69 66 28 20 70  INT32 );.  if( p
1b4e0 4f 70 2d 3e 70 35 0a 20 20 20 26 26 20 28 69 4d  Op->p5.   && (iM
1b4f0 65 74 61 21 3d 70 4f 70 2d 3e 70 33 0a 20 20 20  eta!=pOp->p3.   
1b500 20 20 20 7c 7c 20 64 62 2d 3e 61 44 62 5b 70 4f     || db->aDb[pO
1b510 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e  p->p1].pSchema->
1b520 69 47 65 6e 65 72 61 74 69 6f 6e 21 3d 70 4f 70  iGeneration!=pOp
1b530 2d 3e 70 34 2e 69 29 0a 20 20 29 7b 0a 20 20 20  ->p4.i).  ){.   
1b540 20 2f 2a 0a 20 20 20 20 2a 2a 20 49 4d 50 4c 45   /*.    ** IMPLE
1b550 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d  MENTATION-OF: R-
1b560 30 33 31 38 39 2d 35 31 31 33 35 20 41 73 20 65  03189-51135 As e
1b570 61 63 68 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  ach SQL statemen
1b580 74 20 72 75 6e 73 2c 20 74 68 65 20 73 63 68 65  t runs, the sche
1b590 6d 61 0a 20 20 20 20 2a 2a 20 76 65 72 73 69 6f  ma.    ** versio
1b5a0 6e 20 69 73 20 63 68 65 63 6b 65 64 20 74 6f 20  n is checked to 
1b5b0 65 6e 73 75 72 65 20 74 68 61 74 20 74 68 65 20  ensure that the 
1b5c0 73 63 68 65 6d 61 20 68 61 73 20 6e 6f 74 20 63  schema has not c
1b5d0 68 61 6e 67 65 64 20 73 69 6e 63 65 20 74 68 65  hanged since the
1b5e0 0a 20 20 20 20 2a 2a 20 53 51 4c 20 73 74 61 74  .    ** SQL stat
1b5f0 65 6d 65 6e 74 20 77 61 73 20 70 72 65 70 61 72  ement was prepar
1b600 65 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73  ed..    */.    s
1b610 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
1b620 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20   p->zErrMsg);.  
1b630 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73    p->zErrMsg = s
1b640 71 6c 69 74 65 33 44 62 53 74 72 44 75 70 28 64  qlite3DbStrDup(d
1b650 62 2c 20 22 64 61 74 61 62 61 73 65 20 73 63 68  b, "database sch
1b660 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65 64 22  ema has changed"
1b670 29 3b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65  );.    /* If the
1b680 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69 65 20 66   schema-cookie f
1b690 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
1b6a0 20 66 69 6c 65 20 6d 61 74 63 68 65 73 20 74 68   file matches th
1b6b0 65 20 63 6f 6f 6b 69 65 20 0a 20 20 20 20 2a 2a  e cookie .    **
1b6c0 20 73 74 6f 72 65 64 20 77 69 74 68 20 74 68 65   stored with the
1b6d0 20 69 6e 2d 6d 65 6d 6f 72 79 20 72 65 70 72 65   in-memory repre
1b6e0 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  sentation of the
1b6f0 20 73 63 68 65 6d 61 2c 20 64 6f 0a 20 20 20 20   schema, do.    
1b700 2a 2a 20 6e 6f 74 20 72 65 6c 6f 61 64 20 74 68  ** not reload th
1b710 65 20 73 63 68 65 6d 61 20 66 72 6f 6d 20 74 68  e schema from th
1b720 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
1b730 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 49  .    **.    ** I
1b740 66 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 73  f virtual-tables
1b750 20 61 72 65 20 69 6e 20 75 73 65 2c 20 74 68 69   are in use, thi
1b760 73 20 69 73 20 6e 6f 74 20 6a 75 73 74 20 61 6e  s is not just an
1b770 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a 20   optimization.. 
1b780 20 20 20 2a 2a 20 4f 66 74 65 6e 2c 20 76 2d 74     ** Often, v-t
1b790 61 62 6c 65 73 20 73 74 6f 72 65 20 74 68 65 69  ables store thei
1b7a0 72 20 64 61 74 61 20 69 6e 20 6f 74 68 65 72 20  r data in other 
1b7b0 53 51 4c 69 74 65 20 74 61 62 6c 65 73 2c 20 77  SQLite tables, w
1b7c0 68 69 63 68 0a 20 20 20 20 2a 2a 20 61 72 65 20  hich.    ** are 
1b7d0 71 75 65 72 69 65 64 20 66 72 6f 6d 20 77 69 74  queried from wit
1b7e0 68 69 6e 20 78 4e 65 78 74 28 29 20 61 6e 64 20  hin xNext() and 
1b7f0 6f 74 68 65 72 20 76 2d 74 61 62 6c 65 20 6d 65  other v-table me
1b800 74 68 6f 64 73 20 75 73 69 6e 67 0a 20 20 20 20  thods using.    
1b810 2a 2a 20 70 72 65 70 61 72 65 64 20 71 75 65 72  ** prepared quer
1b820 69 65 73 2e 20 49 66 20 73 75 63 68 20 61 20 71  ies. If such a q
1b830 75 65 72 79 20 69 73 20 6f 75 74 2d 6f 66 2d 64  uery is out-of-d
1b840 61 74 65 2c 20 77 65 20 64 6f 20 6e 6f 74 20 77  ate, we do not w
1b850 61 6e 74 20 74 6f 0a 20 20 20 20 2a 2a 20 64 69  ant to.    ** di
1b860 73 63 61 72 64 20 74 68 65 20 64 61 74 61 62 61  scard the databa
1b870 73 65 20 73 63 68 65 6d 61 2c 20 61 73 20 74 68  se schema, as th
1b880 65 20 75 73 65 72 20 63 6f 64 65 20 69 6d 70 6c  e user code impl
1b890 65 6d 65 6e 74 69 6e 67 20 74 68 65 0a 20 20 20  ementing the.   
1b8a0 20 2a 2a 20 76 2d 74 61 62 6c 65 20 77 6f 75 6c   ** v-table woul
1b8b0 64 20 68 61 76 65 20 74 6f 20 62 65 20 72 65 61  d have to be rea
1b8c0 64 79 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74  dy for the sqlit
1b8d0 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72  e3_vtab structur
1b8e0 65 20 69 74 73 65 6c 66 0a 20 20 20 20 2a 2a 20  e itself.    ** 
1b8f0 74 6f 20 62 65 20 69 6e 76 61 6c 69 64 61 74 65  to be invalidate
1b900 64 20 77 68 65 6e 65 76 65 72 20 73 71 6c 69 74  d whenever sqlit
1b910 65 33 5f 73 74 65 70 28 29 20 69 73 20 63 61 6c  e3_step() is cal
1b920 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20  led from within 
1b930 0a 20 20 20 20 2a 2a 20 61 20 76 2d 74 61 62 6c  .    ** a v-tabl
1b940 65 20 6d 65 74 68 6f 64 2e 0a 20 20 20 20 2a 2f  e method..    */
1b950 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62  .    if( db->aDb
1b960 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d  [pOp->p1].pSchem
1b970 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65  a->schema_cookie
1b980 21 3d 69 4d 65 74 61 20 29 7b 0a 20 20 20 20 20  !=iMeta ){.     
1b990 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65   sqlite3ResetOne
1b9a0 53 63 68 65 6d 61 28 64 62 2c 20 70 4f 70 2d 3e  Schema(db, pOp->
1b9b0 70 31 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70  p1);.    }.    p
1b9c0 2d 3e 65 78 70 69 72 65 64 20 3d 20 31 3b 0a 20  ->expired = 1;. 
1b9d0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 53     rc = SQLITE_S
1b9e0 43 48 45 4d 41 3b 0a 20 20 7d 0a 20 20 69 66 28  CHEMA;.  }.  if(
1b9f0 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
1ba00 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1ba10 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1ba20 63 6f 64 65 3a 20 52 65 61 64 43 6f 6f 6b 69 65  code: ReadCookie
1ba30 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
1ba40 0a 2a 2a 20 52 65 61 64 20 63 6f 6f 6b 69 65 20  .** Read cookie 
1ba50 6e 75 6d 62 65 72 20 50 33 20 66 72 6f 6d 20 64  number P3 from d
1ba60 61 74 61 62 61 73 65 20 50 31 20 61 6e 64 20 77  atabase P1 and w
1ba70 72 69 74 65 20 69 74 20 69 6e 74 6f 20 72 65 67  rite it into reg
1ba80 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 50 33 3d  ister P2..** P3=
1ba90 3d 31 20 69 73 20 74 68 65 20 73 63 68 65 6d 61  =1 is the schema
1baa0 20 76 65 72 73 69 6f 6e 2e 20 20 50 33 3d 3d 32   version.  P3==2
1bab0 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65   is the database
1bac0 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50 33 3d 3d   format..** P3==
1bad0 33 20 69 73 20 74 68 65 20 72 65 63 6f 6d 6d 65  3 is the recomme
1bae0 6e 64 65 64 20 70 61 67 65 72 20 63 61 63 68 65  nded pager cache
1baf0 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f   size, and so fo
1bb00 72 74 68 2e 20 20 50 31 3d 3d 30 20 69 73 0a 2a  rth.  P1==0 is.*
1bb10 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  * the main datab
1bb20 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50 31 3d  ase file and P1=
1bb30 3d 31 20 69 73 20 74 68 65 20 64 61 74 61 62 61  =1 is the databa
1bb40 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20  se file used to 
1bb50 73 74 6f 72 65 0a 2a 2a 20 74 65 6d 70 6f 72 61  store.** tempora
1bb60 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a  ry tables..**.**
1bb70 20 54 68 65 72 65 20 6d 75 73 74 20 62 65 20 61   There must be a
1bb80 20 72 65 61 64 2d 6c 6f 63 6b 20 6f 6e 20 74 68   read-lock on th
1bb90 65 20 64 61 74 61 62 61 73 65 20 28 65 69 74 68  e database (eith
1bba0 65 72 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  er a transaction
1bbb0 0a 2a 2a 20 6d 75 73 74 20 62 65 20 73 74 61 72  .** must be star
1bbc0 74 65 64 20 6f 72 20 74 68 65 72 65 20 6d 75 73  ted or there mus
1bbd0 74 20 62 65 20 61 6e 20 6f 70 65 6e 20 63 75 72  t be an open cur
1bbe0 73 6f 72 29 20 62 65 66 6f 72 65 0a 2a 2a 20 65  sor) before.** e
1bbf0 78 65 63 75 74 69 6e 67 20 74 68 69 73 20 69 6e  xecuting this in
1bc00 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  struction..*/.ca
1bc10 73 65 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65  se OP_ReadCookie
1bc20 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
1bc30 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69    /* out2 */.  i
1bc40 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69 6e 74 20  nt iMeta;.  int 
1bc50 69 44 62 3b 0a 20 20 69 6e 74 20 69 43 6f 6f 6b  iDb;.  int iCook
1bc60 69 65 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  ie;..  assert( p
1bc70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20  ->bIsReader );. 
1bc80 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a   iDb = pOp->p1;.
1bc90 20 20 69 43 6f 6f 6b 69 65 20 3d 20 70 4f 70 2d    iCookie = pOp-
1bca0 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 70  >p3;.  assert( p
1bcb0 4f 70 2d 3e 70 33 3c 53 51 4c 49 54 45 5f 4e 5f  Op->p3<SQLITE_N_
1bcc0 42 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20 20  BTREE_META );.  
1bcd0 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26  assert( iDb>=0 &
1bce0 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b  & iDb<db->nDb );
1bcf0 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61  .  assert( db->a
1bd00 44 62 5b 69 44 62 5d 2e 70 42 74 21 3d 30 20 29  Db[iDb].pBt!=0 )
1bd10 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61  ;.  assert( DbMa
1bd20 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d  skTest(p->btreeM
1bd30 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a 0a 20 20  ask, iDb) );..  
1bd40 73 71 6c 69 74 65 33 42 74 72 65 65 47 65 74 4d  sqlite3BtreeGetM
1bd50 65 74 61 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d  eta(db->aDb[iDb]
1bd60 2e 70 42 74 2c 20 69 43 6f 6f 6b 69 65 2c 20 28  .pBt, iCookie, (
1bd70 75 33 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20  u32 *)&iMeta);. 
1bd80 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
1bd90 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
1bda0 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 4d    pOut->u.i = iM
1bdb0 65 74 61 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  eta;.  break;.}.
1bdc0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 74 43  ./* Opcode: SetC
1bdd0 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33 20 2a  ookie P1 P2 P3 *
1bde0 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74   *.**.** Write t
1bdf0 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  he integer value
1be00 20 50 33 20 69 6e 74 6f 20 63 6f 6f 6b 69 65 20   P3 into cookie 
1be10 6e 75 6d 62 65 72 20 50 32 20 6f 66 20 64 61 74  number P2 of dat
1be20 61 62 61 73 65 20 50 31 2e 0a 2a 2a 20 50 32 3d  abase P1..** P2=
1be30 3d 31 20 69 73 20 74 68 65 20 73 63 68 65 6d 61  =1 is the schema
1be40 20 76 65 72 73 69 6f 6e 2e 20 20 50 32 3d 3d 32   version.  P2==2
1be50 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65   is the database
1be60 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50 32 3d 3d   format..** P2==
1be70 33 20 69 73 20 74 68 65 20 72 65 63 6f 6d 6d 65  3 is the recomme
1be80 6e 64 65 64 20 70 61 67 65 72 20 63 61 63 68 65  nded pager cache
1be90 20 0a 2a 2a 20 73 69 7a 65 2c 20 61 6e 64 20 73   .** size, and s
1bea0 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20  o forth.  P1==0 
1beb0 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  is the main data
1bec0 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50 31  base file and P1
1bed0 3d 3d 31 20 69 73 20 74 68 65 20 0a 2a 2a 20 64  ==1 is the .** d
1bee0 61 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65  atabase file use
1bef0 64 20 74 6f 20 73 74 6f 72 65 20 74 65 6d 70 6f  d to store tempo
1bf00 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a  rary tables..**.
1bf10 2a 2a 20 41 20 74 72 61 6e 73 61 63 74 69 6f 6e  ** A transaction
1bf20 20 6d 75 73 74 20 62 65 20 73 74 61 72 74 65 64   must be started
1bf30 20 62 65 66 6f 72 65 20 65 78 65 63 75 74 69 6e   before executin
1bf40 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a  g this opcode..*
1bf50 2f 0a 63 61 73 65 20 4f 50 5f 53 65 74 43 6f 6f  /.case OP_SetCoo
1bf60 6b 69 65 3a 20 7b 0a 20 20 44 62 20 2a 70 44 62  kie: {.  Db *pDb
1bf70 3b 0a 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  ;..  sqlite3Vdbe
1bf80 49 6e 63 72 57 72 69 74 65 43 6f 75 6e 74 65 72  IncrWriteCounter
1bf90 28 70 2c 20 30 29 3b 0a 20 20 61 73 73 65 72 74  (p, 0);.  assert
1bfa0 28 20 70 4f 70 2d 3e 70 32 3c 53 51 4c 49 54 45  ( pOp->p2<SQLITE
1bfb0 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b  _N_BTREE_META );
1bfc0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1bfd0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
1bfe0 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
1bff0 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74  sert( DbMaskTest
1c000 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70  (p->btreeMask, p
1c010 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73 73  Op->p1) );.  ass
1c020 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
1c030 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26  ==0 );.  pDb = &
1c040 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
1c050 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44 62 2d  ;.  assert( pDb-
1c060 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73  >pBt!=0 );.  ass
1c070 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68 65  ert( sqlite3Sche
1c080 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20  maMutexHeld(db, 
1c090 70 4f 70 2d 3e 70 31 2c 20 30 29 20 29 3b 0a 20  pOp->p1, 0) );. 
1c0a0 20 2f 2a 20 53 65 65 20 6e 6f 74 65 20 61 62 6f   /* See note abo
1c0b0 75 74 20 69 6e 64 65 78 20 73 68 69 66 74 69 6e  ut index shiftin
1c0c0 67 20 6f 6e 20 4f 50 5f 52 65 61 64 43 6f 6f 6b  g on OP_ReadCook
1c0d0 69 65 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c  ie */.  rc = sql
1c0e0 69 74 65 33 42 74 72 65 65 55 70 64 61 74 65 4d  ite3BtreeUpdateM
1c0f0 65 74 61 28 70 44 62 2d 3e 70 42 74 2c 20 70 4f  eta(pDb->pBt, pO
1c100 70 2d 3e 70 32 2c 20 70 4f 70 2d 3e 70 33 29 3b  p->p2, pOp->p3);
1c110 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d  .  if( pOp->p2==
1c120 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56 45 52  BTREE_SCHEMA_VER
1c130 53 49 4f 4e 20 29 7b 0a 20 20 20 20 2f 2a 20 57  SION ){.    /* W
1c140 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20 63  hen the schema c
1c150 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 2c 20 72  ookie changes, r
1c160 65 63 6f 72 64 20 74 68 65 20 6e 65 77 20 63 6f  ecord the new co
1c170 6f 6b 69 65 20 69 6e 74 65 72 6e 61 6c 6c 79 20  okie internally 
1c180 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68  */.    pDb->pSch
1c190 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b  ema->schema_cook
1c1a0 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  ie = pOp->p3;.  
1c1b0 20 20 64 62 2d 3e 6d 44 62 46 6c 61 67 73 20 7c    db->mDbFlags |
1c1c0 3d 20 44 42 46 4c 41 47 5f 53 63 68 65 6d 61 43  = DBFLAG_SchemaC
1c1d0 68 61 6e 67 65 3b 0a 20 20 7d 65 6c 73 65 20 69  hange;.  }else i
1c1e0 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45  f( pOp->p2==BTRE
1c1f0 45 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 29 7b  E_FILE_FORMAT ){
1c200 0a 20 20 20 20 2f 2a 20 52 65 63 6f 72 64 20 63  .    /* Record c
1c210 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20 66 69  hanges in the fi
1c220 6c 65 20 66 6f 72 6d 61 74 20 2a 2f 0a 20 20 20  le format */.   
1c230 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66   pDb->pSchema->f
1c240 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70 4f 70  ile_format = pOp
1c250 2d 3e 70 33 3b 0a 20 20 7d 0a 20 20 69 66 28 20  ->p3;.  }.  if( 
1c260 70 4f 70 2d 3e 70 31 3d 3d 31 20 29 7b 0a 20 20  pOp->p1==1 ){.  
1c270 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65 20    /* Invalidate 
1c280 61 6c 6c 20 70 72 65 70 61 72 65 64 20 73 74 61  all prepared sta
1c290 74 65 6d 65 6e 74 73 20 77 68 65 6e 65 76 65 72  tements whenever
1c2a0 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61   the TEMP databa
1c2b0 73 65 0a 20 20 20 20 2a 2a 20 73 63 68 65 6d 61  se.    ** schema
1c2c0 20 69 73 20 63 68 61 6e 67 65 64 2e 20 20 54 69   is changed.  Ti
1c2d0 63 6b 65 74 20 23 31 36 34 34 20 2a 2f 0a 20 20  cket #1644 */.  
1c2e0 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50    sqlite3ExpireP
1c2f0 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74  reparedStatement
1c300 73 28 64 62 2c 20 30 29 3b 0a 20 20 20 20 70 2d  s(db, 0);.    p-
1c310 3e 65 78 70 69 72 65 64 20 3d 20 30 3b 0a 20 20  >expired = 0;.  
1c320 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  }.  if( rc ) got
1c330 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1c340 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  rror;.  break;.}
1c350 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65  ../* Opcode: Ope
1c360 6e 52 65 61 64 20 50 31 20 50 32 20 50 33 20 50  nRead P1 P2 P3 P
1c370 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
1c380 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33  : root=P2 iDb=P3
1c390 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65  .**.** Open a re
1c3a0 61 64 2d 6f 6e 6c 79 20 63 75 72 73 6f 72 20 66  ad-only cursor f
1c3b0 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20  or the database 
1c3c0 74 61 62 6c 65 20 77 68 6f 73 65 20 72 6f 6f 74  table whose root
1c3d0 20 70 61 67 65 20 69 73 0a 2a 2a 20 50 32 20 69   page is.** P2 i
1c3e0 6e 20 61 20 64 61 74 61 62 61 73 65 20 66 69 6c  n a database fil
1c3f0 65 2e 20 20 54 68 65 20 64 61 74 61 62 61 73 65  e.  The database
1c400 20 66 69 6c 65 20 69 73 20 64 65 74 65 72 6d 69   file is determi
1c410 6e 65 64 20 62 79 20 50 33 2e 20 0a 2a 2a 20 50  ned by P3. .** P
1c420 33 3d 3d 30 20 6d 65 61 6e 73 20 74 68 65 20 6d  3==0 means the m
1c430 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20 50 33  ain database, P3
1c440 3d 3d 31 20 6d 65 61 6e 73 20 74 68 65 20 64 61  ==1 means the da
1c450 74 61 62 61 73 65 20 75 73 65 64 20 66 6f 72 20  tabase used for 
1c460 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 74 61  .** temporary ta
1c470 62 6c 65 73 2c 20 61 6e 64 20 50 33 3e 31 20 6d  bles, and P3>1 m
1c480 65 61 6e 73 20 75 73 65 64 20 74 68 65 20 63 6f  eans used the co
1c490 72 72 65 73 70 6f 6e 64 69 6e 67 20 61 74 74 61  rresponding atta
1c4a0 63 68 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65  ched.** database
1c4b0 2e 20 20 47 69 76 65 20 74 68 65 20 6e 65 77 20  .  Give the new 
1c4c0 63 75 72 73 6f 72 20 61 6e 20 69 64 65 6e 74 69  cursor an identi
1c4d0 66 69 65 72 20 6f 66 20 50 31 2e 20 20 54 68 65  fier of P1.  The
1c4e0 20 50 31 0a 2a 2a 20 76 61 6c 75 65 73 20 6e 65   P1.** values ne
1c4f0 65 64 20 6e 6f 74 20 62 65 20 63 6f 6e 74 69 67  ed not be contig
1c500 75 6f 75 73 20 62 75 74 20 61 6c 6c 20 50 31 20  uous but all P1 
1c510 76 61 6c 75 65 73 20 73 68 6f 75 6c 64 20 62 65  values should be
1c520 20 73 6d 61 6c 6c 20 69 6e 74 65 67 65 72 73 2e   small integers.
1c530 0a 2a 2a 20 49 74 20 69 73 20 61 6e 20 65 72 72  .** It is an err
1c540 6f 72 20 66 6f 72 20 50 31 20 74 6f 20 62 65 20  or for P1 to be 
1c550 6e 65 67 61 74 69 76 65 2e 0a 2a 2a 0a 2a 2a 20  negative..**.** 
1c560 41 6c 6c 6f 77 65 64 20 50 35 20 62 69 74 73 3a  Allowed P5 bits:
1c570 0a 2a 2a 20 3c 75 6c 3e 0a 2a 2a 20 3c 6c 69 3e  .** <ul>.** <li>
1c580 20 20 3c 62 3e 30 78 30 32 20 4f 50 46 4c 41 47    <b>0x02 OPFLAG
1c590 5f 53 45 45 4b 45 51 3c 2f 62 3e 3a 20 54 68 69  _SEEKEQ</b>: Thi
1c5a0 73 20 63 75 72 73 6f 72 20 77 69 6c 6c 20 6f 6e  s cursor will on
1c5b0 6c 79 20 62 65 20 75 73 65 64 20 66 6f 72 0a 2a  ly be used for.*
1c5c0 2a 20 20 20 20 20 20 20 65 71 75 61 6c 69 74 79  *       equality
1c5d0 20 6c 6f 6f 6b 75 70 73 20 28 69 6d 70 6c 65 6d   lookups (implem
1c5e0 65 6e 74 65 64 20 61 73 20 61 20 70 61 69 72 20  ented as a pair 
1c5f0 6f 66 20 6f 70 63 6f 64 65 73 20 4f 50 5f 53 65  of opcodes OP_Se
1c600 65 6b 47 45 2f 4f 50 5f 49 64 78 47 54 0a 2a 2a  ekGE/OP_IdxGT.**
1c610 20 20 20 20 20 20 20 6f 66 20 4f 50 5f 53 65 65         of OP_See
1c620 6b 4c 45 2f 4f 50 5f 49 64 78 47 54 29 0a 2a 2a  kLE/OP_IdxGT).**
1c630 20 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a 20 54 68 65   </ul>.**.** The
1c640 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62 65   P4 value may be
1c650 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67   either an integ
1c660 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72  er (P4_INT32) or
1c670 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a   a pointer to.**
1c680 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63   a KeyInfo struc
1c690 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f  ture (P4_KEYINFO
1c6a0 29 2e 20 49 66 20 69 74 20 69 73 20 61 20 70 6f  ). If it is a po
1c6b0 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e  inter to a KeyIn
1c6c0 66 6f 20 0a 2a 2a 20 6f 62 6a 65 63 74 2c 20 74  fo .** object, t
1c6d0 68 65 6e 20 74 61 62 6c 65 20 62 65 69 6e 67 20  hen table being 
1c6e0 6f 70 65 6e 65 64 20 6d 75 73 74 20 62 65 20 61  opened must be a
1c6f0 6e 20 5b 69 6e 64 65 78 20 62 2d 74 72 65 65 5d  n [index b-tree]
1c700 20 77 68 65 72 65 20 74 68 65 0a 2a 2a 20 4b 65   where the.** Ke
1c710 79 49 6e 66 6f 20 6f 62 6a 65 63 74 20 64 65 66  yInfo object def
1c720 69 6e 65 73 20 74 68 65 20 63 6f 6e 74 65 6e 74  ines the content
1c730 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a   and collating .
1c740 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74  ** sequence of t
1c750 68 61 74 20 69 6e 64 65 78 20 62 2d 74 72 65 65  hat index b-tree
1c760 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20  . Otherwise, if 
1c770 50 34 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72  P4 is an integer
1c780 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 74 68 65 6e   .** value, then
1c790 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   the table being
1c7a0 20 6f 70 65 6e 65 64 20 6d 75 73 74 20 62 65 20   opened must be 
1c7b0 61 20 5b 74 61 62 6c 65 20 62 2d 74 72 65 65 5d  a [table b-tree]
1c7c0 20 77 69 74 68 20 61 0a 2a 2a 20 6e 75 6d 62 65   with a.** numbe
1c7d0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 6e 6f 20  r of columns no 
1c7e0 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 76 61  less than the va
1c7f0 6c 75 65 20 6f 66 20 50 34 2e 0a 2a 2a 0a 2a 2a  lue of P4..**.**
1c800 20 53 65 65 20 61 6c 73 6f 3a 20 4f 70 65 6e 57   See also: OpenW
1c810 72 69 74 65 2c 20 52 65 6f 70 65 6e 49 64 78 0a  rite, ReopenIdx.
1c820 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  */./* Opcode: Re
1c830 6f 70 65 6e 49 64 78 20 50 31 20 50 32 20 50 33  openIdx P1 P2 P3
1c840 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
1c850 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d  is: root=P2 iDb=
1c860 50 33 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 65 6f  P3.**.** The Reo
1c870 70 65 6e 49 64 78 20 6f 70 63 6f 64 65 20 77 6f  penIdx opcode wo
1c880 72 6b 73 20 6c 69 6b 65 20 4f 50 5f 4f 70 65 6e  rks like OP_Open
1c890 52 65 61 64 20 65 78 63 65 70 74 20 74 68 61 74  Read except that
1c8a0 20 69 74 20 66 69 72 73 74 0a 2a 2a 20 63 68 65   it first.** che
1c8b0 63 6b 73 20 74 6f 20 73 65 65 20 69 66 20 74 68  cks to see if th
1c8c0 65 20 63 75 72 73 6f 72 20 6f 6e 20 50 31 20 69  e cursor on P1 i
1c8d0 73 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 20 6f  s already open o
1c8e0 6e 20 74 68 65 20 73 61 6d 65 0a 2a 2a 20 62 2d  n the same.** b-
1c8f0 74 72 65 65 20 61 6e 64 20 69 66 20 69 74 20 69  tree and if it i
1c900 73 20 74 68 69 73 20 6f 70 63 6f 64 65 20 62 65  s this opcode be
1c910 63 6f 6d 65 73 20 61 20 6e 6f 2d 6f 70 2e 20 20  comes a no-op.  
1c920 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 0a  In other words,.
1c930 2a 2a 20 69 66 20 74 68 65 20 63 75 72 73 6f 72  ** if the cursor
1c940 20 69 73 20 61 6c 72 65 61 64 79 20 6f 70 65 6e   is already open
1c950 2c 20 64 6f 20 6e 6f 74 20 72 65 6f 70 65 6e 20  , do not reopen 
1c960 69 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 65  it..**.** The Re
1c970 6f 70 65 6e 49 64 78 20 6f 70 63 6f 64 65 20 6d  openIdx opcode m
1c980 61 79 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20  ay only be used 
1c990 77 69 74 68 20 50 35 3d 3d 30 20 6f 72 20 50 35  with P5==0 or P5
1c9a0 3d 3d 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 0a  ==OPFLAG_SEEKEQ.
1c9b0 2a 2a 20 61 6e 64 20 77 69 74 68 20 50 34 20 62  ** and with P4 b
1c9c0 65 69 6e 67 20 61 20 50 34 5f 4b 45 59 49 4e 46  eing a P4_KEYINF
1c9d0 4f 20 6f 62 6a 65 63 74 2e 20 20 46 75 72 74 68  O object.  Furth
1c9e0 65 72 6d 6f 72 65 2c 20 74 68 65 20 50 33 20 76  ermore, the P3 v
1c9f0 61 6c 75 65 20 6d 75 73 74 0a 2a 2a 20 62 65 20  alue must.** be 
1ca00 74 68 65 20 73 61 6d 65 20 61 73 20 65 76 65 72  the same as ever
1ca10 79 20 6f 74 68 65 72 20 52 65 6f 70 65 6e 49 64  y other ReopenId
1ca20 78 20 6f 72 20 4f 70 65 6e 52 65 61 64 20 66 6f  x or OpenRead fo
1ca30 72 20 74 68 65 20 73 61 6d 65 20 63 75 72 73 6f  r the same curso
1ca40 72 0a 2a 2a 20 6e 75 6d 62 65 72 2e 0a 2a 2a 0a  r.** number..**.
1ca50 2a 2a 20 41 6c 6c 6f 77 65 64 20 50 35 20 62 69  ** Allowed P5 bi
1ca60 74 73 3a 0a 2a 2a 20 3c 75 6c 3e 0a 2a 2a 20 3c  ts:.** <ul>.** <
1ca70 6c 69 3e 20 20 3c 62 3e 30 78 30 32 20 4f 50 46  li>  <b>0x02 OPF
1ca80 4c 41 47 5f 53 45 45 4b 45 51 3c 2f 62 3e 3a 20  LAG_SEEKEQ</b>: 
1ca90 54 68 69 73 20 63 75 72 73 6f 72 20 77 69 6c 6c  This cursor will
1caa0 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 66 6f   only be used fo
1cab0 72 0a 2a 2a 20 20 20 20 20 20 20 65 71 75 61 6c  r.**       equal
1cac0 69 74 79 20 6c 6f 6f 6b 75 70 73 20 28 69 6d 70  ity lookups (imp
1cad0 6c 65 6d 65 6e 74 65 64 20 61 73 20 61 20 70 61  lemented as a pa
1cae0 69 72 20 6f 66 20 6f 70 63 6f 64 65 73 20 4f 50  ir of opcodes OP
1caf0 5f 53 65 65 6b 47 45 2f 4f 50 5f 49 64 78 47 54  _SeekGE/OP_IdxGT
1cb00 0a 2a 2a 20 20 20 20 20 20 20 6f 66 20 4f 50 5f  .**       of OP_
1cb10 53 65 65 6b 4c 45 2f 4f 50 5f 49 64 78 47 54 29  SeekLE/OP_IdxGT)
1cb20 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a 20  .** </ul>.**.** 
1cb30 53 65 65 20 61 6c 73 6f 3a 20 4f 50 5f 4f 70 65  See also: OP_Ope
1cb40 6e 52 65 61 64 2c 20 4f 50 5f 4f 70 65 6e 57 72  nRead, OP_OpenWr
1cb50 69 74 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  ite.*/./* Opcode
1cb60 3a 20 4f 70 65 6e 57 72 69 74 65 20 50 31 20 50  : OpenWrite P1 P
1cb70 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
1cb80 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20  nopsis: root=P2 
1cb90 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 70 65  iDb=P3.**.** Ope
1cba0 6e 20 61 20 72 65 61 64 2f 77 72 69 74 65 20 63  n a read/write c
1cbb0 75 72 73 6f 72 20 6e 61 6d 65 64 20 50 31 20 6f  ursor named P1 o
1cbc0 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  n the table or i
1cbd0 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 0a  ndex whose root.
1cbe0 2a 2a 20 70 61 67 65 20 69 73 20 50 32 20 28 6f  ** page is P2 (o
1cbf0 72 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67  r whose root pag
1cc00 65 20 69 73 20 68 65 6c 64 20 69 6e 20 72 65 67  e is held in reg
1cc10 69 73 74 65 72 20 50 32 20 69 66 20 74 68 65 0a  ister P2 if the.
1cc20 2a 2a 20 4f 50 46 4c 41 47 5f 50 32 49 53 52 45  ** OPFLAG_P2ISRE
1cc30 47 20 62 69 74 20 69 73 20 73 65 74 20 69 6e 20  G bit is set in 
1cc40 50 35 20 2d 20 73 65 65 20 62 65 6c 6f 77 29 2e  P5 - see below).
1cc50 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76 61  .**.** The P4 va
1cc60 6c 75 65 20 6d 61 79 20 62 65 20 65 69 74 68 65  lue may be eithe
1cc70 72 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50 34  r an integer (P4
1cc80 5f 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f 69  _INT32) or a poi
1cc90 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79  nter to.** a Key
1cca0 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 28  Info structure (
1ccb0 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20  P4_KEYINFO). If 
1ccc0 69 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  it is a pointer 
1ccd0 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a  to a KeyInfo .**
1cce0 20 6f 62 6a 65 63 74 2c 20 74 68 65 6e 20 74 61   object, then ta
1ccf0 62 6c 65 20 62 65 69 6e 67 20 6f 70 65 6e 65 64  ble being opened
1cd00 20 6d 75 73 74 20 62 65 20 61 6e 20 5b 69 6e 64   must be an [ind
1cd10 65 78 20 62 2d 74 72 65 65 5d 20 77 68 65 72 65  ex b-tree] where
1cd20 20 74 68 65 0a 2a 2a 20 4b 65 79 49 6e 66 6f 20   the.** KeyInfo 
1cd30 6f 62 6a 65 63 74 20 64 65 66 69 6e 65 73 20 74  object defines t
1cd40 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63  he content and c
1cd50 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71  ollating .** seq
1cd60 75 65 6e 63 65 20 6f 66 20 74 68 61 74 20 69 6e  uence of that in
1cd70 64 65 78 20 62 2d 74 72 65 65 2e 20 4f 74 68 65  dex b-tree. Othe
1cd80 72 77 69 73 65 2c 20 69 66 20 50 34 20 69 73 20  rwise, if P4 is 
1cd90 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76  an integer .** v
1cda0 61 6c 75 65 2c 20 74 68 65 6e 20 74 68 65 20 74  alue, then the t
1cdb0 61 62 6c 65 20 62 65 69 6e 67 20 6f 70 65 6e 65  able being opene
1cdc0 64 20 6d 75 73 74 20 62 65 20 61 20 5b 74 61 62  d must be a [tab
1cdd0 6c 65 20 62 2d 74 72 65 65 5d 20 77 69 74 68 20  le b-tree] with 
1cde0 61 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 63  a.** number of c
1cdf0 6f 6c 75 6d 6e 73 20 6e 6f 20 6c 65 73 73 20 74  olumns no less t
1ce00 68 61 6e 20 74 68 65 20 76 61 6c 75 65 20 6f 66  han the value of
1ce10 20 50 34 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 77   P4..**.** Allow
1ce20 65 64 20 50 35 20 62 69 74 73 3a 0a 2a 2a 20 3c  ed P5 bits:.** <
1ce30 75 6c 3e 0a 2a 2a 20 3c 6c 69 3e 20 20 3c 62 3e  ul>.** <li>  <b>
1ce40 30 78 30 32 20 4f 50 46 4c 41 47 5f 53 45 45 4b  0x02 OPFLAG_SEEK
1ce50 45 51 3c 2f 62 3e 3a 20 54 68 69 73 20 63 75 72  EQ</b>: This cur
1ce60 73 6f 72 20 77 69 6c 6c 20 6f 6e 6c 79 20 62 65  sor will only be
1ce70 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20 20 20 20   used for.**    
1ce80 20 20 20 65 71 75 61 6c 69 74 79 20 6c 6f 6f 6b     equality look
1ce90 75 70 73 20 28 69 6d 70 6c 65 6d 65 6e 74 65 64  ups (implemented
1cea0 20 61 73 20 61 20 70 61 69 72 20 6f 66 20 6f 70   as a pair of op
1ceb0 63 6f 64 65 73 20 4f 50 5f 53 65 65 6b 47 45 2f  codes OP_SeekGE/
1cec0 4f 50 5f 49 64 78 47 54 0a 2a 2a 20 20 20 20 20  OP_IdxGT.**     
1ced0 20 20 6f 66 20 4f 50 5f 53 65 65 6b 4c 45 2f 4f    of OP_SeekLE/O
1cee0 50 5f 49 64 78 47 54 29 0a 2a 2a 20 3c 6c 69 3e  P_IdxGT).** <li>
1cef0 20 20 3c 62 3e 30 78 30 38 20 4f 50 46 4c 41 47    <b>0x08 OPFLAG
1cf00 5f 46 4f 52 44 45 4c 45 54 45 3c 2f 62 3e 3a 20  _FORDELETE</b>: 
1cf10 54 68 69 73 20 63 75 72 73 6f 72 20 69 73 20 75  This cursor is u
1cf20 73 65 64 20 6f 6e 6c 79 20 74 6f 20 73 65 65 6b  sed only to seek
1cf30 0a 2a 2a 20 20 20 20 20 20 20 61 6e 64 20 73 75  .**       and su
1cf40 62 73 65 71 75 65 6e 74 6c 79 20 64 65 6c 65 74  bsequently delet
1cf50 65 20 65 6e 74 72 69 65 73 20 69 6e 20 61 6e 20  e entries in an 
1cf60 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20 54 68  index btree.  Th
1cf70 69 73 20 69 73 20 61 0a 2a 2a 20 20 20 20 20 20  is is a.**      
1cf80 20 68 69 6e 74 20 74 6f 20 74 68 65 20 73 74 6f   hint to the sto
1cf90 72 61 67 65 20 65 6e 67 69 6e 65 20 74 68 61 74  rage engine that
1cfa0 20 74 68 65 20 73 74 6f 72 61 67 65 20 65 6e 67   the storage eng
1cfb0 69 6e 65 20 69 73 20 61 6c 6c 6f 77 65 64 20 74  ine is allowed t
1cfc0 6f 0a 2a 2a 20 20 20 20 20 20 20 69 67 6e 6f 72  o.**       ignor
1cfd0 65 2e 20 20 54 68 65 20 68 69 6e 74 20 69 73 20  e.  The hint is 
1cfe0 6e 6f 74 20 75 73 65 64 20 62 79 20 74 68 65 20  not used by the 
1cff0 6f 66 66 69 63 69 61 6c 20 53 51 4c 69 74 65 20  official SQLite 
1d000 62 2a 74 72 65 65 20 73 74 6f 72 61 67 65 0a 2a  b*tree storage.*
1d010 2a 20 20 20 20 20 20 20 65 6e 67 69 6e 65 2c 20  *       engine, 
1d020 62 75 74 20 69 73 20 75 73 65 64 20 62 79 20 43  but is used by C
1d030 4f 4d 44 42 32 2e 0a 2a 2a 20 3c 6c 69 3e 20 20  OMDB2..** <li>  
1d040 3c 62 3e 30 78 31 30 20 4f 50 46 4c 41 47 5f 50  <b>0x10 OPFLAG_P
1d050 32 49 53 52 45 47 3c 2f 62 3e 3a 20 55 73 65 20  2ISREG</b>: Use 
1d060 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
1d070 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 20 20  egister P2.**   
1d080 20 20 20 20 61 73 20 74 68 65 20 72 6f 6f 74 20      as the root 
1d090 70 61 67 65 2c 20 6e 6f 74 20 74 68 65 20 76 61  page, not the va
1d0a0 6c 75 65 20 6f 66 20 50 32 20 69 74 73 65 6c 66  lue of P2 itself
1d0b0 2e 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a  ..** </ul>.**.**
1d0c0 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
1d0d0 6e 20 77 6f 72 6b 73 20 6c 69 6b 65 20 4f 70 65  n works like Ope
1d0e0 6e 52 65 61 64 20 65 78 63 65 70 74 20 74 68 61  nRead except tha
1d0f0 74 20 69 74 20 6f 70 65 6e 73 20 74 68 65 20 63  t it opens the c
1d100 75 72 73 6f 72 0a 2a 2a 20 69 6e 20 72 65 61 64  ursor.** in read
1d110 2f 77 72 69 74 65 20 6d 6f 64 65 2e 0a 2a 2a 0a  /write mode..**.
1d120 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4f 50 5f  ** See also: OP_
1d130 4f 70 65 6e 52 65 61 64 2c 20 4f 50 5f 52 65 6f  OpenRead, OP_Reo
1d140 70 65 6e 49 64 78 0a 2a 2f 0a 63 61 73 65 20 4f  penIdx.*/.case O
1d150 50 5f 52 65 6f 70 65 6e 49 64 78 3a 20 7b 0a 20  P_ReopenIdx: {. 
1d160 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20 4b   int nField;.  K
1d170 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f  eyInfo *pKeyInfo
1d180 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20 69 6e  ;.  int p2;.  in
1d190 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 77 72 46  t iDb;.  int wrF
1d1a0 6c 61 67 3b 0a 20 20 42 74 72 65 65 20 2a 70 58  lag;.  Btree *pX
1d1b0 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
1d1c0 70 43 75 72 3b 0a 20 20 44 62 20 2a 70 44 62 3b  pCur;.  Db *pDb;
1d1d0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
1d1e0 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70  >p5==0 || pOp->p
1d1f0 35 3d 3d 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51  5==OPFLAG_SEEKEQ
1d200 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1d210 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45  p->p4type==P4_KE
1d220 59 49 4e 46 4f 20 29 3b 0a 20 20 70 43 75 72 20  YINFO );.  pCur 
1d230 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
1d240 70 31 5d 3b 0a 20 20 69 66 28 20 70 43 75 72 20  p1];.  if( pCur 
1d250 26 26 20 70 43 75 72 2d 3e 70 67 6e 6f 52 6f 6f  && pCur->pgnoRoo
1d260 74 3d 3d 28 75 33 32 29 70 4f 70 2d 3e 70 32 20  t==(u32)pOp->p2 
1d270 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
1d280 43 75 72 2d 3e 69 44 62 3d 3d 70 4f 70 2d 3e 70  Cur->iDb==pOp->p
1d290 33 20 29 3b 20 20 20 20 20 20 2f 2a 20 47 75 61  3 );      /* Gua
1d2a0 72 61 6e 74 65 65 64 20 62 79 20 74 68 65 20 63  ranteed by the c
1d2b0 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f  ode generator */
1d2c0 0a 20 20 20 20 67 6f 74 6f 20 6f 70 65 6e 5f 63  .    goto open_c
1d2d0 75 72 73 6f 72 5f 73 65 74 5f 68 69 6e 74 73 3b  ursor_set_hints;
1d2e0 0a 20 20 7d 0a 20 20 2f 2a 20 49 66 20 74 68 65  .  }.  /* If the
1d2f0 20 63 75 72 73 6f 72 20 69 73 20 6e 6f 74 20 63   cursor is not c
1d300 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 6f 72  urrently open or
1d310 20 69 73 20 6f 70 65 6e 20 6f 6e 20 61 20 64 69   is open on a di
1d320 66 66 65 72 65 6e 74 0a 20 20 2a 2a 20 69 6e 64  fferent.  ** ind
1d330 65 78 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  ex, then fall th
1d340 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 4f 70  rough into OP_Op
1d350 65 6e 52 65 61 64 20 74 6f 20 66 6f 72 63 65 20  enRead to force 
1d360 61 20 72 65 6f 70 65 6e 20 2a 2f 0a 63 61 73 65  a reopen */.case
1d370 20 4f 50 5f 4f 70 65 6e 52 65 61 64 3a 0a 63 61   OP_OpenRead:.ca
1d380 73 65 20 4f 50 5f 4f 70 65 6e 57 72 69 74 65 3a  se OP_OpenWrite:
1d390 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
1d3a0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e  >opcode==OP_Open
1d3b0 57 72 69 74 65 20 7c 7c 20 70 4f 70 2d 3e 70 35  Write || pOp->p5
1d3c0 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d  ==0 || pOp->p5==
1d3d0 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 29 3b  OPFLAG_SEEKEQ );
1d3e0 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49  .  assert( p->bI
1d3f0 73 52 65 61 64 65 72 20 29 3b 0a 20 20 61 73 73  sReader );.  ass
1d400 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
1d410 3d 3d 4f 50 5f 4f 70 65 6e 52 65 61 64 20 7c 7c  ==OP_OpenRead ||
1d420 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
1d430 5f 52 65 6f 70 65 6e 49 64 78 0a 20 20 20 20 20  _ReopenIdx.     
1d440 20 20 20 20 20 7c 7c 20 70 2d 3e 72 65 61 64 4f       || p->readO
1d450 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 69 66 28  nly==0 );..  if(
1d460 20 70 2d 3e 65 78 70 69 72 65 64 3d 3d 31 20 29   p->expired==1 )
1d470 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
1d480 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b  E_ABORT_ROLLBACK
1d490 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74  ;.    goto abort
1d4a0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1d4b0 20 7d 0a 0a 20 20 6e 46 69 65 6c 64 20 3d 20 30   }..  nField = 0
1d4c0 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 30  ;.  pKeyInfo = 0
1d4d0 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32  ;.  p2 = pOp->p2
1d4e0 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70  ;.  iDb = pOp->p
1d4f0 33 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44 62  3;.  assert( iDb
1d500 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e  >=0 && iDb<db->n
1d510 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
1d520 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74  DbMaskTest(p->bt
1d530 72 65 65 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b  reeMask, iDb) );
1d540 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44  .  pDb = &db->aD
1d550 62 5b 69 44 62 5d 3b 0a 20 20 70 58 20 3d 20 70  b[iDb];.  pX = p
1d560 44 62 2d 3e 70 42 74 3b 0a 20 20 61 73 73 65 72  Db->pBt;.  asser
1d570 74 28 20 70 58 21 3d 30 20 29 3b 0a 20 20 69 66  t( pX!=0 );.  if
1d580 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
1d590 50 5f 4f 70 65 6e 57 72 69 74 65 20 29 7b 0a 20  P_OpenWrite ){. 
1d5a0 20 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c 41     assert( OPFLA
1d5b0 47 5f 46 4f 52 44 45 4c 45 54 45 3d 3d 42 54 52  G_FORDELETE==BTR
1d5c0 45 45 5f 46 4f 52 44 45 4c 45 54 45 20 29 3b 0a  EE_FORDELETE );.
1d5d0 20 20 20 20 77 72 46 6c 61 67 20 3d 20 42 54 52      wrFlag = BTR
1d5e0 45 45 5f 57 52 43 53 52 20 7c 20 28 70 4f 70 2d  EE_WRCSR | (pOp-
1d5f0 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 46 4f 52  >p5 & OPFLAG_FOR
1d600 44 45 4c 45 54 45 29 3b 0a 20 20 20 20 61 73 73  DELETE);.    ass
1d610 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68 65  ert( sqlite3Sche
1d620 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20  maMutexHeld(db, 
1d630 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20 69  iDb, 0) );.    i
1d640 66 28 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d  f( pDb->pSchema-
1d650 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3c 20 70  >file_format < p
1d660 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f  ->minWriteFileFo
1d670 72 6d 61 74 20 29 7b 0a 20 20 20 20 20 20 70 2d  rmat ){.      p-
1d680 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72  >minWriteFileFor
1d690 6d 61 74 20 3d 20 70 44 62 2d 3e 70 53 63 68 65  mat = pDb->pSche
1d6a0 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 3b  ma->file_format;
1d6b0 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
1d6c0 20 20 20 20 77 72 46 6c 61 67 20 3d 20 30 3b 0a      wrFlag = 0;.
1d6d0 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70    }.  if( pOp->p
1d6e0 35 20 26 20 4f 50 46 4c 41 47 5f 50 32 49 53 52  5 & OPFLAG_P2ISR
1d6f0 45 47 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  EG ){.    assert
1d700 28 20 70 32 3e 30 20 29 3b 0a 20 20 20 20 61 73  ( p2>0 );.    as
1d710 73 65 72 74 28 20 70 32 3c 3d 28 70 2d 3e 6e 4d  sert( p2<=(p->nM
1d720 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
1d730 72 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  r) );.    assert
1d740 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
1d750 50 5f 4f 70 65 6e 57 72 69 74 65 20 29 3b 0a 20  P_OpenWrite );. 
1d760 20 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b     pIn2 = &aMem[
1d770 70 32 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28  p2];.    assert(
1d780 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 32   memIsValid(pIn2
1d790 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ) );.    assert(
1d7a0 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20   (pIn2->flags & 
1d7b0 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20  MEM_Int)!=0 );. 
1d7c0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
1d7d0 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 32  mIntegerify(pIn2
1d7e0 29 3b 0a 20 20 20 20 70 32 20 3d 20 28 69 6e 74  );.    p2 = (int
1d7f0 29 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20  )pIn2->u.i;.    
1d800 2f 2a 20 54 68 65 20 70 32 20 76 61 6c 75 65 20  /* The p2 value 
1d810 61 6c 77 61 79 73 20 63 6f 6d 65 73 20 66 72 6f  always comes fro
1d820 6d 20 61 20 70 72 69 6f 72 20 4f 50 5f 43 72 65  m a prior OP_Cre
1d830 61 74 65 42 74 72 65 65 20 6f 70 63 6f 64 65 20  ateBtree opcode 
1d840 61 6e 64 0a 20 20 20 20 2a 2a 20 74 68 61 74 20  and.    ** that 
1d850 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61  opcode will alwa
1d860 79 73 20 73 65 74 20 74 68 65 20 70 32 20 76 61  ys set the p2 va
1d870 6c 75 65 20 74 6f 20 32 20 6f 72 20 6d 6f 72 65  lue to 2 or more
1d880 20 6f 72 20 65 6c 73 65 20 66 61 69 6c 2e 0a 20   or else fail.. 
1d890 20 20 20 2a 2a 20 49 66 20 74 68 65 72 65 20 77     ** If there w
1d8a0 65 72 65 20 61 20 66 61 69 6c 75 72 65 2c 20 74  ere a failure, t
1d8b0 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74  he prepared stat
1d8c0 65 6d 65 6e 74 20 77 6f 75 6c 64 20 68 61 76 65  ement would have
1d8d0 20 68 61 6c 74 65 64 0a 20 20 20 20 2a 2a 20 62   halted.    ** b
1d8e0 65 66 6f 72 65 20 72 65 61 63 68 69 6e 67 20 74  efore reaching t
1d8f0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  his instruction.
1d900 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20   */.    assert( 
1d910 70 32 3e 3d 32 20 29 3b 0a 20 20 7d 0a 20 20 69  p2>=2 );.  }.  i
1d920 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  f( pOp->p4type==
1d930 50 34 5f 4b 45 59 49 4e 46 4f 20 29 7b 0a 20 20  P4_KEYINFO ){.  
1d940 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70    pKeyInfo = pOp
1d950 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20  ->p4.pKeyInfo;. 
1d960 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49     assert( pKeyI
1d970 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62  nfo->enc==ENC(db
1d980 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ) );.    assert(
1d990 20 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64   pKeyInfo->db==d
1d9a0 62 20 29 3b 0a 20 20 20 20 6e 46 69 65 6c 64 20  b );.    nField 
1d9b0 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 41 6c 6c  = pKeyInfo->nAll
1d9c0 46 69 65 6c 64 3b 0a 20 20 7d 65 6c 73 65 20 69  Field;.  }else i
1d9d0 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  f( pOp->p4type==
1d9e0 50 34 5f 49 4e 54 33 32 20 29 7b 0a 20 20 20 20  P4_INT32 ){.    
1d9f0 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34  nField = pOp->p4
1da00 2e 69 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74  .i;.  }.  assert
1da10 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a  ( pOp->p1>=0 );.
1da20 20 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64    assert( nField
1da30 3e 3d 30 20 29 3b 0a 20 20 74 65 73 74 63 61 73  >=0 );.  testcas
1da40 65 28 20 6e 46 69 65 6c 64 3d 3d 30 20 29 3b 20  e( nField==0 ); 
1da50 20 2f 2a 20 54 61 62 6c 65 20 77 69 74 68 20 49   /* Table with I
1da60 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
1da70 45 59 20 61 6e 64 20 6e 6f 74 68 69 6e 67 20 65  EY and nothing e
1da80 6c 73 65 20 2a 2f 0a 20 20 70 43 75 72 20 3d 20  lse */.  pCur = 
1da90 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70  allocateCursor(p
1daa0 2c 20 70 4f 70 2d 3e 70 31 2c 20 6e 46 69 65 6c  , pOp->p1, nFiel
1dab0 64 2c 20 69 44 62 2c 20 43 55 52 54 59 50 45 5f  d, iDb, CURTYPE_
1dac0 42 54 52 45 45 29 3b 0a 20 20 69 66 28 20 70 43  BTREE);.  if( pC
1dad0 75 72 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  ur==0 ) goto no_
1dae0 6d 65 6d 3b 0a 20 20 70 43 75 72 2d 3e 6e 75 6c  mem;.  pCur->nul
1daf0 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 75 72  lRow = 1;.  pCur
1db00 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d 20 31 3b  ->isOrdered = 1;
1db10 0a 20 20 70 43 75 72 2d 3e 70 67 6e 6f 52 6f 6f  .  pCur->pgnoRoo
1db20 74 20 3d 20 70 32 3b 0a 23 69 66 64 65 66 20 53  t = p2;.#ifdef S
1db30 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43  QLITE_DEBUG.  pC
1db40 75 72 2d 3e 77 72 46 6c 61 67 20 3d 20 77 72 46  ur->wrFlag = wrF
1db50 6c 61 67 3b 0a 23 65 6e 64 69 66 0a 20 20 72 63  lag;.#endif.  rc
1db60 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
1db70 75 72 73 6f 72 28 70 58 2c 20 70 32 2c 20 77 72  ursor(pX, p2, wr
1db80 46 6c 61 67 2c 20 70 4b 65 79 49 6e 66 6f 2c 20  Flag, pKeyInfo, 
1db90 70 43 75 72 2d 3e 75 63 2e 70 43 75 72 73 6f 72  pCur->uc.pCursor
1dba0 29 3b 0a 20 20 70 43 75 72 2d 3e 70 4b 65 79 49  );.  pCur->pKeyI
1dbb0 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f 3b 0a  nfo = pKeyInfo;.
1dbc0 20 20 2f 2a 20 53 65 74 20 74 68 65 20 56 64 62    /* Set the Vdb
1dbd0 65 43 75 72 73 6f 72 2e 69 73 54 61 62 6c 65 20  eCursor.isTable 
1dbe0 76 61 72 69 61 62 6c 65 2e 20 50 72 65 76 69 6f  variable. Previo
1dbf0 75 73 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a 20  us versions of. 
1dc00 20 2a 2a 20 53 51 4c 69 74 65 20 75 73 65 64 20   ** SQLite used 
1dc10 74 6f 20 63 68 65 63 6b 20 69 66 20 74 68 65 20  to check if the 
1dc20 72 6f 6f 74 2d 70 61 67 65 20 66 6c 61 67 73 20  root-page flags 
1dc30 77 65 72 65 20 73 61 6e 65 20 61 74 20 74 68 69  were sane at thi
1dc40 73 20 70 6f 69 6e 74 0a 20 20 2a 2a 20 61 6e 64  s point.  ** and
1dc50 20 72 65 70 6f 72 74 20 64 61 74 61 62 61 73 65   report database
1dc60 20 63 6f 72 72 75 70 74 69 6f 6e 20 69 66 20 74   corruption if t
1dc70 68 65 79 20 77 65 72 65 20 6e 6f 74 2c 20 62 75  hey were not, bu
1dc80 74 20 74 68 69 73 20 63 68 65 63 6b 20 68 61 73  t this check has
1dc90 0a 20 20 2a 2a 20 73 69 6e 63 65 20 6d 6f 76 65  .  ** since move
1dca0 64 20 69 6e 74 6f 20 74 68 65 20 62 74 72 65 65  d into the btree
1dcb0 20 6c 61 79 65 72 2e 20 20 2a 2f 20 20 0a 20 20   layer.  */  .  
1dcc0 70 43 75 72 2d 3e 69 73 54 61 62 6c 65 20 3d 20  pCur->isTable = 
1dcd0 70 4f 70 2d 3e 70 34 74 79 70 65 21 3d 50 34 5f  pOp->p4type!=P4_
1dce0 4b 45 59 49 4e 46 4f 3b 0a 0a 6f 70 65 6e 5f 63  KEYINFO;..open_c
1dcf0 75 72 73 6f 72 5f 73 65 74 5f 68 69 6e 74 73 3a  ursor_set_hints:
1dd00 0a 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c 41  .  assert( OPFLA
1dd10 47 5f 42 55 4c 4b 43 53 52 3d 3d 42 54 52 45 45  G_BULKCSR==BTREE
1dd20 5f 42 55 4c 4b 4c 4f 41 44 20 29 3b 0a 20 20 61  _BULKLOAD );.  a
1dd30 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 53 45  ssert( OPFLAG_SE
1dd40 45 4b 45 51 3d 3d 42 54 52 45 45 5f 53 45 45 4b  EKEQ==BTREE_SEEK
1dd50 5f 45 51 20 29 3b 0a 20 20 74 65 73 74 63 61 73  _EQ );.  testcas
1dd60 65 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  e( pOp->p5 & OPF
1dd70 4c 41 47 5f 42 55 4c 4b 43 53 52 20 29 3b 0a 23  LAG_BULKCSR );.#
1dd80 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
1dd90 42 4c 45 5f 43 55 52 53 4f 52 5f 48 49 4e 54 53  BLE_CURSOR_HINTS
1dda0 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70  .  testcase( pOp
1ddb0 2d 3e 70 32 20 26 20 4f 50 46 4c 41 47 5f 53 45  ->p2 & OPFLAG_SE
1ddc0 45 4b 45 51 20 29 3b 0a 23 65 6e 64 69 66 0a 20  EKEQ );.#endif. 
1ddd0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
1dde0 73 6f 72 48 69 6e 74 46 6c 61 67 73 28 70 43 75  sorHintFlags(pCu
1ddf0 72 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 0a 20  r->uc.pCursor,. 
1de00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 70                (p
1de20 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46 4c 41 47  Op->p5 & (OPFLAG
1de30 5f 42 55 4c 4b 43 53 52 7c 4f 50 46 4c 41 47 5f  _BULKCSR|OPFLAG_
1de40 53 45 45 4b 45 51 29 29 29 3b 0a 20 20 69 66 28  SEEKEQ)));.  if(
1de50 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
1de60 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1de70 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1de80 63 6f 64 65 3a 20 4f 70 65 6e 44 75 70 20 50 31  code: OpenDup P1
1de90 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
1dea0 4f 70 65 6e 20 61 20 6e 65 77 20 63 75 72 73 6f  Open a new curso
1deb0 72 20 50 31 20 74 68 61 74 20 70 6f 69 6e 74 73  r P1 that points
1dec0 20 74 6f 20 74 68 65 20 73 61 6d 65 20 65 70 68   to the same eph
1ded0 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 61 73 0a  emeral table as.
1dee0 2a 2a 20 63 75 72 73 6f 72 20 50 32 2e 20 20 54  ** cursor P2.  T
1def0 68 65 20 50 32 20 63 75 72 73 6f 72 20 6d 75 73  he P2 cursor mus
1df00 74 20 68 61 76 65 20 62 65 65 6e 20 6f 70 65 6e  t have been open
1df10 65 64 20 62 79 20 61 20 70 72 69 6f 72 20 4f 50  ed by a prior OP
1df20 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 0a 2a  _OpenEphemeral.*
1df30 2a 20 6f 70 63 6f 64 65 2e 20 20 4f 6e 6c 79 20  * opcode.  Only 
1df40 65 70 68 65 6d 65 72 61 6c 20 63 75 72 73 6f 72  ephemeral cursor
1df50 73 20 6d 61 79 20 62 65 20 64 75 70 6c 69 63 61  s may be duplica
1df60 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 44 75 70 6c 69  ted..**.** Dupli
1df70 63 61 74 65 20 65 70 68 65 6d 65 72 61 6c 20 63  cate ephemeral c
1df80 75 72 73 6f 72 73 20 61 72 65 20 75 73 65 64 20  ursors are used 
1df90 66 6f 72 20 73 65 6c 66 2d 6a 6f 69 6e 73 20 6f  for self-joins o
1dfa0 66 20 6d 61 74 65 72 69 61 6c 69 7a 65 64 20 76  f materialized v
1dfb0 69 65 77 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  iews..*/.case OP
1dfc0 5f 4f 70 65 6e 44 75 70 3a 20 7b 0a 20 20 56 64  _OpenDup: {.  Vd
1dfd0 62 65 43 75 72 73 6f 72 20 2a 70 4f 72 69 67 3b  beCursor *pOrig;
1dfe0 20 20 20 20 2f 2a 20 54 68 65 20 6f 72 69 67 69      /* The origi
1dff0 6e 61 6c 20 63 75 72 73 6f 72 20 74 6f 20 62 65  nal cursor to be
1e000 20 64 75 70 6c 69 63 61 74 65 64 20 2a 2f 0a 20   duplicated */. 
1e010 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78   VdbeCursor *pCx
1e020 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65  ;      /* The ne
1e030 77 20 63 75 72 73 6f 72 20 2a 2f 0a 0a 20 20 70  w cursor */..  p
1e040 4f 72 69 67 20 3d 20 70 2d 3e 61 70 43 73 72 5b  Orig = p->apCsr[
1e050 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65  pOp->p2];.  asse
1e060 72 74 28 20 70 4f 72 69 67 2d 3e 70 42 74 78 21  rt( pOrig->pBtx!
1e070 3d 30 20 29 3b 20 20 2f 2a 20 4f 6e 6c 79 20 65  =0 );  /* Only e
1e080 70 68 65 6d 65 72 61 6c 20 63 75 72 73 6f 72 73  phemeral cursors
1e090 20 63 61 6e 20 62 65 20 64 75 70 6c 69 63 61 74   can be duplicat
1e0a0 65 64 20 2a 2f 0a 0a 20 20 70 43 78 20 3d 20 61  ed */..  pCx = a
1e0b0 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c  llocateCursor(p,
1e0c0 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 72 69 67 2d   pOp->p1, pOrig-
1e0d0 3e 6e 46 69 65 6c 64 2c 20 2d 31 2c 20 43 55 52  >nField, -1, CUR
1e0e0 54 59 50 45 5f 42 54 52 45 45 29 3b 0a 20 20 69  TYPE_BTREE);.  i
1e0f0 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f  f( pCx==0 ) goto
1e100 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e   no_mem;.  pCx->
1e110 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70  nullRow = 1;.  p
1e120 43 78 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c 20  Cx->isEphemeral 
1e130 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 70 4b 65 79  = 1;.  pCx->pKey
1e140 49 6e 66 6f 20 3d 20 70 4f 72 69 67 2d 3e 70 4b  Info = pOrig->pK
1e150 65 79 49 6e 66 6f 3b 0a 20 20 70 43 78 2d 3e 69  eyInfo;.  pCx->i
1e160 73 54 61 62 6c 65 20 3d 20 70 4f 72 69 67 2d 3e  sTable = pOrig->
1e170 69 73 54 61 62 6c 65 3b 0a 20 20 72 63 20 3d 20  isTable;.  rc = 
1e180 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
1e190 6f 72 28 70 4f 72 69 67 2d 3e 70 42 74 78 2c 20  or(pOrig->pBtx, 
1e1a0 4d 41 53 54 45 52 5f 52 4f 4f 54 2c 20 42 54 52  MASTER_ROOT, BTR
1e1b0 45 45 5f 57 52 43 53 52 2c 0a 20 20 20 20 20 20  EE_WRCSR,.      
1e1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e1d0 20 20 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66      pCx->pKeyInf
1e1e0 6f 2c 20 70 43 78 2d 3e 75 63 2e 70 43 75 72 73  o, pCx->uc.pCurs
1e1f0 6f 72 29 3b 0a 20 20 2f 2a 20 54 68 65 20 73 71  or);.  /* The sq
1e200 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
1e210 28 29 20 72 6f 75 74 69 6e 65 20 63 61 6e 20 6f  () routine can o
1e220 6e 6c 79 20 66 61 69 6c 20 66 6f 72 20 74 68 65  nly fail for the
1e230 20 66 69 72 73 74 20 63 75 72 73 6f 72 0a 20 20   first cursor.  
1e240 2a 2a 20 6f 70 65 6e 65 64 20 66 6f 72 20 61 20  ** opened for a 
1e250 64 61 74 61 62 61 73 65 2e 20 20 53 69 6e 63 65  database.  Since
1e260 20 74 68 65 72 65 20 69 73 20 61 6c 72 65 61 64   there is alread
1e270 79 20 61 6e 20 6f 70 65 6e 20 63 75 72 73 6f 72  y an open cursor
1e280 20 77 68 65 6e 20 74 68 69 73 0a 20 20 2a 2a 20   when this.  ** 
1e290 6f 70 63 6f 64 65 20 69 73 20 72 75 6e 2c 20 74  opcode is run, t
1e2a0 68 65 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  he sqlite3BtreeC
1e2b0 75 72 73 6f 72 28 29 20 63 61 6e 6e 6f 74 20 66  ursor() cannot f
1e2c0 61 69 6c 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ail */.  assert(
1e2d0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
1e2e0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f  ;.  break;.}.../
1e2f0 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 45 70  * Opcode: OpenEp
1e300 68 65 6d 65 72 61 6c 20 50 31 20 50 32 20 2a 20  hemeral P1 P2 * 
1e310 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
1e320 73 3a 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a  s: nColumn=P2.**
1e330 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63  .** Open a new c
1e340 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20 74 72  ursor P1 to a tr
1e350 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 2e 0a 2a  ansient table..*
1e360 2a 20 54 68 65 20 63 75 72 73 6f 72 20 69 73 20  * The cursor is 
1e370 61 6c 77 61 79 73 20 6f 70 65 6e 65 64 20 72 65  always opened re
1e380 61 64 2f 77 72 69 74 65 20 65 76 65 6e 20 69 66  ad/write even if
1e390 20 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61   .** the main da
1e3a0 74 61 62 61 73 65 20 69 73 20 72 65 61 64 2d 6f  tabase is read-o
1e3b0 6e 6c 79 2e 20 20 54 68 65 20 65 70 68 65 6d 65  nly.  The epheme
1e3c0 72 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 69 73 20  ral.** table is 
1e3d0 64 65 6c 65 74 65 64 20 61 75 74 6f 6d 61 74 69  deleted automati
1e3e0 63 61 6c 6c 79 20 77 68 65 6e 20 74 68 65 20 63  cally when the c
1e3f0 75 72 73 6f 72 20 69 73 20 63 6c 6f 73 65 64 2e  ursor is closed.
1e400 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65  .**.** P2 is the
1e410 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
1e420 6e 73 20 69 6e 20 74 68 65 20 65 70 68 65 6d 65  ns in the epheme
1e430 72 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68  ral table..** Th
1e440 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 73 20  e cursor points 
1e450 74 6f 20 61 20 42 54 72 65 65 20 74 61 62 6c 65  to a BTree table
1e460 20 69 66 20 50 34 3d 3d 30 20 61 6e 64 20 74 6f   if P4==0 and to
1e470 20 61 20 42 54 72 65 65 20 69 6e 64 65 78 0a 2a   a BTree index.*
1e480 2a 20 69 66 20 50 34 20 69 73 20 6e 6f 74 20 30  * if P4 is not 0
1e490 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20  .  If P4 is not 
1e4a0 4e 55 4c 4c 2c 20 69 74 20 70 6f 69 6e 74 73 20  NULL, it points 
1e4b0 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72  to a KeyInfo str
1e4c0 75 63 74 75 72 65 0a 2a 2a 20 74 68 61 74 20 64  ucture.** that d
1e4d0 65 66 69 6e 65 73 20 74 68 65 20 66 6f 72 6d 61  efines the forma
1e4e0 74 20 6f 66 20 6b 65 79 73 20 69 6e 20 74 68 65  t of keys in the
1e4f0 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68   index..**.** Th
1e500 65 20 50 35 20 70 61 72 61 6d 65 74 65 72 20 63  e P5 parameter c
1e510 61 6e 20 62 65 20 61 20 6d 61 73 6b 20 6f 66 20  an be a mask of 
1e520 74 68 65 20 42 54 52 45 45 5f 2a 20 66 6c 61 67  the BTREE_* flag
1e530 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20 69 6e 20  s defined.** in 
1e540 62 74 72 65 65 2e 68 2e 20 20 54 68 65 73 65 20  btree.h.  These 
1e550 66 6c 61 67 73 20 63 6f 6e 74 72 6f 6c 20 61 73  flags control as
1e560 70 65 63 74 73 20 6f 66 20 74 68 65 20 6f 70 65  pects of the ope
1e570 72 61 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65  ration of.** the
1e580 20 62 74 72 65 65 2e 20 20 54 68 65 20 42 54 52   btree.  The BTR
1e590 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20  EE_OMIT_JOURNAL 
1e5a0 61 6e 64 20 42 54 52 45 45 5f 53 49 4e 47 4c 45  and BTREE_SINGLE
1e5b0 20 66 6c 61 67 73 20 61 72 65 0a 2a 2a 20 61 64   flags are.** ad
1e5c0 64 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ded automaticall
1e5d0 79 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  y..*/./* Opcode:
1e5e0 20 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78 20 50   OpenAutoindex P
1e5f0 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53  1 P2 * P4 *.** S
1e600 79 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e  ynopsis: nColumn
1e610 3d 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  =P2.**.** This o
1e620 70 63 6f 64 65 20 77 6f 72 6b 73 20 74 68 65 20  pcode works the 
1e630 73 61 6d 65 20 61 73 20 4f 50 5f 4f 70 65 6e 45  same as OP_OpenE
1e640 70 68 65 6d 65 72 61 6c 2e 20 20 49 74 20 68 61  phemeral.  It ha
1e650 73 20 61 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74  s a.** different
1e660 20 6e 61 6d 65 20 74 6f 20 64 69 73 74 69 6e 67   name to disting
1e670 75 69 73 68 20 69 74 73 20 75 73 65 2e 20 20 54  uish its use.  T
1e680 61 62 6c 65 73 20 63 72 65 61 74 65 64 20 75 73  ables created us
1e690 69 6e 67 0a 2a 2a 20 62 79 20 74 68 69 73 20 6f  ing.** by this o
1e6a0 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 75 73  pcode will be us
1e6b0 65 64 20 66 6f 72 20 61 75 74 6f 6d 61 74 69 63  ed for automatic
1e6c0 61 6c 6c 79 20 63 72 65 61 74 65 64 20 74 72 61  ally created tra
1e6d0 6e 73 69 65 6e 74 0a 2a 2a 20 69 6e 64 69 63 65  nsient.** indice
1e6e0 73 20 69 6e 20 6a 6f 69 6e 73 2e 0a 2a 2f 0a 63  s in joins..*/.c
1e6f0 61 73 65 20 4f 50 5f 4f 70 65 6e 41 75 74 6f 69  ase OP_OpenAutoi
1e700 6e 64 65 78 3a 20 0a 63 61 73 65 20 4f 50 5f 4f  ndex: .case OP_O
1e710 70 65 6e 45 70 68 65 6d 65 72 61 6c 3a 20 7b 0a  penEphemeral: {.
1e720 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1e730 78 3b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b  x;.  KeyInfo *pK
1e740 65 79 49 6e 66 6f 3b 0a 0a 20 20 73 74 61 74 69  eyInfo;..  stati
1e750 63 20 63 6f 6e 73 74 20 69 6e 74 20 76 66 73 46  c const int vfsF
1e760 6c 61 67 73 20 3d 20 0a 20 20 20 20 20 20 53 51  lags = .      SQ
1e770 4c 49 54 45 5f 4f 50 45 4e 5f 52 45 41 44 57 52  LITE_OPEN_READWR
1e780 49 54 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49  ITE |.      SQLI
1e790 54 45 5f 4f 50 45 4e 5f 43 52 45 41 54 45 20 7c  TE_OPEN_CREATE |
1e7a0 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50  .      SQLITE_OP
1e7b0 45 4e 5f 45 58 43 4c 55 53 49 56 45 20 7c 0a 20  EN_EXCLUSIVE |. 
1e7c0 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e       SQLITE_OPEN
1e7d0 5f 44 45 4c 45 54 45 4f 4e 43 4c 4f 53 45 20 7c  _DELETEONCLOSE |
1e7e0 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50  .      SQLITE_OP
1e7f0 45 4e 5f 54 52 41 4e 53 49 45 4e 54 5f 44 42 3b  EN_TRANSIENT_DB;
1e800 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1e810 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  p1>=0 );.  asser
1e820 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 29 3b  t( pOp->p2>=0 );
1e830 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74  .  pCx = allocat
1e840 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e  eCursor(p, pOp->
1e850 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c  p1, pOp->p2, -1,
1e860 20 43 55 52 54 59 50 45 5f 42 54 52 45 45 29 3b   CURTYPE_BTREE);
1e870 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20  .  if( pCx==0 ) 
1e880 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70  goto no_mem;.  p
1e890 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b  Cx->nullRow = 1;
1e8a0 0a 20 20 70 43 78 2d 3e 69 73 45 70 68 65 6d 65  .  pCx->isEpheme
1e8b0 72 61 6c 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20  ral = 1;.  rc = 
1e8c0 73 71 6c 69 74 65 33 42 74 72 65 65 4f 70 65 6e  sqlite3BtreeOpen
1e8d0 28 64 62 2d 3e 70 56 66 73 2c 20 30 2c 20 64 62  (db->pVfs, 0, db
1e8e0 2c 20 26 70 43 78 2d 3e 70 42 74 78 2c 20 0a 20  , &pCx->pBtx, . 
1e8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e900 20 20 20 20 20 20 20 42 54 52 45 45 5f 4f 4d 49         BTREE_OMI
1e910 54 5f 4a 4f 55 52 4e 41 4c 20 7c 20 42 54 52 45  T_JOURNAL | BTRE
1e920 45 5f 53 49 4e 47 4c 45 20 7c 20 70 4f 70 2d 3e  E_SINGLE | pOp->
1e930 70 35 2c 20 76 66 73 46 6c 61 67 73 29 3b 0a 20  p5, vfsFlags);. 
1e940 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
1e950 4f 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  OK ){.    rc = s
1e960 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e  qlite3BtreeBegin
1e970 54 72 61 6e 73 28 70 43 78 2d 3e 70 42 74 78 2c  Trans(pCx->pBtx,
1e980 20 31 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 69 66   1, 0);.  }.  if
1e990 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
1e9a0 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 61 20 74  ){.    /* If a t
1e9b0 72 61 6e 73 69 65 6e 74 20 69 6e 64 65 78 20 69  ransient index i
1e9c0 73 20 72 65 71 75 69 72 65 64 2c 20 63 72 65 61  s required, crea
1e9d0 74 65 20 69 74 20 62 79 20 63 61 6c 6c 69 6e 67  te it by calling
1e9e0 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 42  .    ** sqlite3B
1e9f0 74 72 65 65 43 72 65 61 74 65 54 61 62 6c 65 28  treeCreateTable(
1ea00 29 20 77 69 74 68 20 74 68 65 20 42 54 52 45 45  ) with the BTREE
1ea10 5f 42 4c 4f 42 4b 45 59 20 66 6c 61 67 20 62 65  _BLOBKEY flag be
1ea20 66 6f 72 65 0a 20 20 20 20 2a 2a 20 6f 70 65 6e  fore.    ** open
1ea30 69 6e 67 20 69 74 2e 20 49 66 20 61 20 74 72 61  ing it. If a tra
1ea40 6e 73 69 65 6e 74 20 74 61 62 6c 65 20 69 73 20  nsient table is 
1ea50 72 65 71 75 69 72 65 64 2c 20 6a 75 73 74 20 75  required, just u
1ea60 73 65 20 74 68 65 0a 20 20 20 20 2a 2a 20 61 75  se the.    ** au
1ea70 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61  tomatically crea
1ea80 74 65 64 20 74 61 62 6c 65 20 77 69 74 68 20 72  ted table with r
1ea90 6f 6f 74 2d 70 61 67 65 20 31 20 28 61 6e 20 42  oot-page 1 (an B
1eaa0 4c 4f 42 5f 49 4e 54 4b 45 59 20 74 61 62 6c 65  LOB_INTKEY table
1eab0 29 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  )..    */.    if
1eac0 28 20 28 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f  ( (pCx->pKeyInfo
1ead0 20 3d 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f   = pKeyInfo = pO
1eae0 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 29 21  p->p4.pKeyInfo)!
1eaf0 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20  =0 ){.      int 
1eb00 70 67 6e 6f 3b 0a 20 20 20 20 20 20 61 73 73 65  pgno;.      asse
1eb10 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
1eb20 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20  =P4_KEYINFO );. 
1eb30 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1eb40 33 42 74 72 65 65 43 72 65 61 74 65 54 61 62 6c  3BtreeCreateTabl
1eb50 65 28 70 43 78 2d 3e 70 42 74 78 2c 20 26 70 67  e(pCx->pBtx, &pg
1eb60 6e 6f 2c 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45  no, BTREE_BLOBKE
1eb70 59 20 7c 20 70 4f 70 2d 3e 70 35 29 3b 20 0a 20  Y | pOp->p5); . 
1eb80 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
1eb90 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
1eba0 20 20 61 73 73 65 72 74 28 20 70 67 6e 6f 3d 3d    assert( pgno==
1ebb0 4d 41 53 54 45 52 5f 52 4f 4f 54 2b 31 20 29 3b  MASTER_ROOT+1 );
1ebc0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1ebd0 20 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64   pKeyInfo->db==d
1ebe0 62 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  b );.        ass
1ebf0 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 65  ert( pKeyInfo->e
1ec00 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20  nc==ENC(db) );. 
1ec10 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
1ec20 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70  te3BtreeCursor(p
1ec30 43 78 2d 3e 70 42 74 78 2c 20 70 67 6e 6f 2c 20  Cx->pBtx, pgno, 
1ec40 42 54 52 45 45 5f 57 52 43 53 52 2c 0a 20 20 20  BTREE_WRCSR,.   
1ec50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec60 20 20 20 20 20 20 20 20 20 20 20 20 20 70 4b 65               pKe
1ec70 79 49 6e 66 6f 2c 20 70 43 78 2d 3e 75 63 2e 70  yInfo, pCx->uc.p
1ec80 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 7d  Cursor);.      }
1ec90 0a 20 20 20 20 20 20 70 43 78 2d 3e 69 73 54 61  .      pCx->isTa
1eca0 62 6c 65 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c  ble = 0;.    }el
1ecb0 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73  se{.      rc = s
1ecc0 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
1ecd0 72 28 70 43 78 2d 3e 70 42 74 78 2c 20 4d 41 53  r(pCx->pBtx, MAS
1ece0 54 45 52 5f 52 4f 4f 54 2c 20 42 54 52 45 45 5f  TER_ROOT, BTREE_
1ecf0 57 52 43 53 52 2c 0a 20 20 20 20 20 20 20 20 20  WRCSR,.         
1ed00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed10 20 20 20 20 20 30 2c 20 70 43 78 2d 3e 75 63 2e       0, pCx->uc.
1ed20 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20  pCursor);.      
1ed30 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31  pCx->isTable = 1
1ed40 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66  ;.    }.  }.  if
1ed50 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
1ed60 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1ed70 20 20 70 43 78 2d 3e 69 73 4f 72 64 65 72 65 64    pCx->isOrdered
1ed80 20 3d 20 28 70 4f 70 2d 3e 70 35 21 3d 42 54 52   = (pOp->p5!=BTR
1ed90 45 45 5f 55 4e 4f 52 44 45 52 45 44 29 3b 0a 20  EE_UNORDERED);. 
1eda0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1edb0 63 6f 64 65 3a 20 53 6f 72 74 65 72 4f 70 65 6e  code: SorterOpen
1edc0 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
1edd0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
1ede0 20 77 6f 72 6b 73 20 6c 69 6b 65 20 4f 50 5f 4f   works like OP_O
1edf0 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 65 78 63  penEphemeral exc
1ee00 65 70 74 20 74 68 61 74 20 69 74 20 6f 70 65 6e  ept that it open
1ee10 73 0a 2a 2a 20 61 20 74 72 61 6e 73 69 65 6e 74  s.** a transient
1ee20 20 69 6e 64 65 78 20 74 68 61 74 20 69 73 20 73   index that is s
1ee30 70 65 63 69 66 69 63 61 6c 6c 79 20 64 65 73 69  pecifically desi
1ee40 67 6e 65 64 20 74 6f 20 73 6f 72 74 20 6c 61 72  gned to sort lar
1ee50 67 65 0a 2a 2a 20 74 61 62 6c 65 73 20 75 73 69  ge.** tables usi
1ee60 6e 67 20 61 6e 20 65 78 74 65 72 6e 61 6c 20 6d  ng an external m
1ee70 65 72 67 65 2d 73 6f 72 74 20 61 6c 67 6f 72 69  erge-sort algori
1ee80 74 68 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 72  thm..**.** If ar
1ee90 67 75 6d 65 6e 74 20 50 33 20 69 73 20 6e 6f 6e  gument P3 is non
1eea0 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74 20 69  -zero, then it i
1eeb0 6e 64 69 63 61 74 65 73 20 74 68 61 74 20 74 68  ndicates that th
1eec0 65 20 73 6f 72 74 65 72 20 6d 61 79 0a 2a 2a 20  e sorter may.** 
1eed0 61 73 73 75 6d 65 20 74 68 61 74 20 61 20 73 74  assume that a st
1eee0 61 62 6c 65 20 73 6f 72 74 20 63 6f 6e 73 69 64  able sort consid
1eef0 65 72 69 6e 67 20 74 68 65 20 66 69 72 73 74 20  ering the first 
1ef00 50 33 20 66 69 65 6c 64 73 20 6f 66 20 65 61 63  P3 fields of eac
1ef10 68 0a 2a 2a 20 6b 65 79 20 69 73 20 73 75 66 66  h.** key is suff
1ef20 69 63 69 65 6e 74 20 74 6f 20 70 72 6f 64 75 63  icient to produc
1ef30 65 20 74 68 65 20 72 65 71 75 69 72 65 64 20 72  e the required r
1ef40 65 73 75 6c 74 73 2e 0a 2a 2f 0a 63 61 73 65 20  esults..*/.case 
1ef50 4f 50 5f 53 6f 72 74 65 72 4f 70 65 6e 3a 20 7b  OP_SorterOpen: {
1ef60 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1ef70 43 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  Cx;..  assert( p
1ef80 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61  Op->p1>=0 );.  a
1ef90 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d  ssert( pOp->p2>=
1efa0 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c  0 );.  pCx = all
1efb0 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70  ocateCursor(p, p
1efc0 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c  Op->p1, pOp->p2,
1efd0 20 2d 31 2c 20 43 55 52 54 59 50 45 5f 53 4f 52   -1, CURTYPE_SOR
1efe0 54 45 52 29 3b 0a 20 20 69 66 28 20 70 43 78 3d  TER);.  if( pCx=
1eff0 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
1f000 3b 0a 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66  ;.  pCx->pKeyInf
1f010 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79  o = pOp->p4.pKey
1f020 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28 20  Info;.  assert( 
1f030 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 64  pCx->pKeyInfo->d
1f040 62 3d 3d 64 62 20 29 3b 0a 20 20 61 73 73 65 72  b==db );.  asser
1f050 74 28 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f  t( pCx->pKeyInfo
1f060 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29  ->enc==ENC(db) )
1f070 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
1f080 56 64 62 65 53 6f 72 74 65 72 49 6e 69 74 28 64  VdbeSorterInit(d
1f090 62 2c 20 70 4f 70 2d 3e 70 33 2c 20 70 43 78 29  b, pOp->p3, pCx)
1f0a0 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
1f0b0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1f0c0 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  rror;.  break;.}
1f0d0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71  ../* Opcode: Seq
1f0e0 75 65 6e 63 65 54 65 73 74 20 50 31 20 50 32 20  uenceTest P1 P2 
1f0f0 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
1f100 73 3a 20 69 66 28 20 63 75 72 73 6f 72 5b 50 31  s: if( cursor[P1
1f110 5d 2e 63 74 72 2b 2b 20 29 20 70 63 20 3d 20 50  ].ctr++ ) pc = P
1f120 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20  2.**.** P1 is a 
1f130 73 6f 72 74 65 72 20 63 75 72 73 6f 72 2e 20 49  sorter cursor. I
1f140 66 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 63  f the sequence c
1f150 6f 75 6e 74 65 72 20 69 73 20 63 75 72 72 65 6e  ounter is curren
1f160 74 6c 79 20 7a 65 72 6f 2c 20 6a 75 6d 70 0a 2a  tly zero, jump.*
1f170 2a 20 74 6f 20 50 32 2e 20 52 65 67 61 72 64 6c  * to P2. Regardl
1f180 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f  ess of whether o
1f190 72 20 6e 6f 74 20 74 68 65 20 6a 75 6d 70 20 69  r not the jump i
1f1a0 73 20 74 61 6b 65 6e 2c 20 69 6e 63 72 65 6d 65  s taken, increme
1f1b0 6e 74 20 74 68 65 0a 2a 2a 20 74 68 65 20 73 65  nt the.** the se
1f1c0 71 75 65 6e 63 65 20 76 61 6c 75 65 2e 0a 2a 2f  quence value..*/
1f1d0 0a 63 61 73 65 20 4f 50 5f 53 65 71 75 65 6e 63  .case OP_Sequenc
1f1e0 65 54 65 73 74 3a 20 7b 0a 20 20 56 64 62 65 43  eTest: {.  VdbeC
1f1f0 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 61 73 73  ursor *pC;.  ass
1f200 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1f210 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
1f220 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
1f230 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1f240 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53  ];.  assert( isS
1f250 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20 69  orter(pC) );.  i
1f260 66 28 20 28 70 43 2d 3e 73 65 71 43 6f 75 6e 74  f( (pC->seqCount
1f270 2b 2b 29 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f  ++)==0 ){.    go
1f280 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
1f290 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
1f2a0 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 50 73  * Opcode: OpenPs
1f2b0 65 75 64 6f 20 50 31 20 50 32 20 50 33 20 2a 20  eudo P1 P2 P3 * 
1f2c0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 50  *.** Synopsis: P
1f2d0 33 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 72 5b 50  3 columns in r[P
1f2e0 32 5d 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20  2].**.** Open a 
1f2f0 6e 65 77 20 63 75 72 73 6f 72 20 74 68 61 74 20  new cursor that 
1f300 70 6f 69 6e 74 73 20 74 6f 20 61 20 66 61 6b 65  points to a fake
1f310 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74   table that cont
1f320 61 69 6e 73 20 61 20 73 69 6e 67 6c 65 0a 2a 2a  ains a single.**
1f330 20 72 6f 77 20 6f 66 20 64 61 74 61 2e 20 20 54   row of data.  T
1f340 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68  he content of th
1f350 61 74 20 6f 6e 65 20 72 6f 77 20 69 73 20 74 68  at one row is th
1f360 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 6d 65 6d  e content of mem
1f370 6f 72 79 0a 2a 2a 20 72 65 67 69 73 74 65 72 20  ory.** register 
1f380 50 32 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  P2.  In other wo
1f390 72 64 73 2c 20 63 75 72 73 6f 72 20 50 31 20 62  rds, cursor P1 b
1f3a0 65 63 6f 6d 65 73 20 61 6e 20 61 6c 69 61 73 20  ecomes an alias 
1f3b0 66 6f 72 20 74 68 65 20 0a 2a 2a 20 4d 45 4d 5f  for the .** MEM_
1f3c0 42 6c 6f 62 20 63 6f 6e 74 65 6e 74 20 63 6f 6e  Blob content con
1f3d0 74 61 69 6e 65 64 20 69 6e 20 72 65 67 69 73 74  tained in regist
1f3e0 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41 20 70  er P2..**.** A p
1f3f0 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 72 65 61  seudo-table crea
1f400 74 65 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f  ted by this opco
1f410 64 65 20 69 73 20 75 73 65 64 20 74 6f 20 68 6f  de is used to ho
1f420 6c 64 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72  ld a single.** r
1f430 6f 77 20 6f 75 74 70 75 74 20 66 72 6f 6d 20 74  ow output from t
1f440 68 65 20 73 6f 72 74 65 72 20 73 6f 20 74 68 61  he sorter so tha
1f450 74 20 74 68 65 20 72 6f 77 20 63 61 6e 20 62 65  t the row can be
1f460 20 64 65 63 6f 6d 70 6f 73 65 64 20 69 6e 74 6f   decomposed into
1f470 0a 2a 2a 20 69 6e 64 69 76 69 64 75 61 6c 20 63  .** individual c
1f480 6f 6c 75 6d 6e 73 20 75 73 69 6e 67 20 74 68 65  olumns using the
1f490 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64   OP_Column opcod
1f4a0 65 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75 6d  e.  The OP_Colum
1f4b0 6e 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 74  n opcode.** is t
1f4c0 68 65 20 6f 6e 6c 79 20 63 75 72 73 6f 72 20 6f  he only cursor o
1f4d0 70 63 6f 64 65 20 74 68 61 74 20 77 6f 72 6b 73  pcode that works
1f4e0 20 77 69 74 68 20 61 20 70 73 65 75 64 6f 2d 74   with a pseudo-t
1f4f0 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69  able..**.** P3 i
1f500 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
1f510 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65  fields in the re
1f520 63 6f 72 64 73 20 74 68 61 74 20 77 69 6c 6c 20  cords that will 
1f530 62 65 20 73 74 6f 72 65 64 20 62 79 0a 2a 2a 20  be stored by.** 
1f540 74 68 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  the pseudo-table
1f550 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65  ..*/.case OP_Ope
1f560 6e 50 73 65 75 64 6f 3a 20 7b 0a 20 20 56 64 62  nPseudo: {.  Vdb
1f570 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 20  eCursor *pCx;.. 
1f580 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1f590 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  >=0 );.  assert(
1f5a0 20 70 4f 70 2d 3e 70 33 3e 3d 30 20 29 3b 0a 20   pOp->p3>=0 );. 
1f5b0 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43   pCx = allocateC
1f5c0 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31  ursor(p, pOp->p1
1f5d0 2c 20 70 4f 70 2d 3e 70 33 2c 20 2d 31 2c 20 43  , pOp->p3, -1, C
1f5e0 55 52 54 59 50 45 5f 50 53 45 55 44 4f 29 3b 0a  URTYPE_PSEUDO);.
1f5f0 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67    if( pCx==0 ) g
1f600 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43  oto no_mem;.  pC
1f610 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a  x->nullRow = 1;.
1f620 20 20 70 43 78 2d 3e 73 65 65 6b 52 65 73 75 6c    pCx->seekResul
1f630 74 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70  t = pOp->p2;.  p
1f640 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b  Cx->isTable = 1;
1f650 0a 20 20 2f 2a 20 47 69 76 65 20 74 68 69 73 20  .  /* Give this 
1f660 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 20 61 20  pseudo-cursor a 
1f670 66 61 6b 65 20 42 74 43 75 72 73 6f 72 20 70 6f  fake BtCursor po
1f680 69 6e 74 65 72 20 73 6f 20 74 68 61 74 20 70 43  inter so that pC
1f690 78 0a 20 20 2a 2a 20 63 61 6e 20 62 65 20 73 61  x.  ** can be sa
1f6a0 66 65 6c 79 20 70 61 73 73 65 64 20 74 6f 20 73  fely passed to s
1f6b0 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72  qlite3VdbeCursor
1f6c0 4d 6f 76 65 74 6f 28 29 2e 20 20 54 68 69 73 20  Moveto().  This 
1f6d0 61 76 6f 69 64 73 20 61 20 74 65 73 74 0a 20 20  avoids a test.  
1f6e0 2a 2a 20 66 6f 72 20 70 43 78 2d 3e 65 43 75 72  ** for pCx->eCur
1f6f0 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
1f700 52 45 45 20 69 6e 73 69 64 65 20 6f 66 20 73 71  REE inside of sq
1f710 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
1f720 6f 76 65 74 6f 28 29 0a 20 20 2a 2a 20 77 68 69  oveto().  ** whi
1f730 63 68 20 69 73 20 61 20 70 65 72 66 6f 72 6d 61  ch is a performa
1f740 6e 63 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  nce optimization
1f750 20 2a 2f 0a 20 20 70 43 78 2d 3e 75 63 2e 70 43   */.  pCx->uc.pC
1f760 75 72 73 6f 72 20 3d 20 73 71 6c 69 74 65 33 42  ursor = sqlite3B
1f770 74 72 65 65 46 61 6b 65 56 61 6c 69 64 43 75 72  treeFakeValidCur
1f780 73 6f 72 28 29 3b 0a 20 20 61 73 73 65 72 74 28  sor();.  assert(
1f790 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20   pOp->p5==0 );. 
1f7a0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1f7b0 63 6f 64 65 3a 20 43 6c 6f 73 65 20 50 31 20 2a  code: Close P1 *
1f7c0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6c 6f   * * *.**.** Clo
1f7d0 73 65 20 61 20 63 75 72 73 6f 72 20 70 72 65 76  se a cursor prev
1f7e0 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 61 73  iously opened as
1f7f0 20 50 31 2e 20 20 49 66 20 50 31 20 69 73 20 6e   P1.  If P1 is n
1f800 6f 74 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20  ot.** currently 
1f810 6f 70 65 6e 2c 20 74 68 69 73 20 69 6e 73 74 72  open, this instr
1f820 75 63 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f  uction is a no-o
1f830 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c  p..*/.case OP_Cl
1f840 6f 73 65 3a 20 7b 0a 20 20 61 73 73 65 72 74 28  ose: {.  assert(
1f850 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
1f860 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
1f870 72 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  r );.  sqlite3Vd
1f880 62 65 46 72 65 65 43 75 72 73 6f 72 28 70 2c 20  beFreeCursor(p, 
1f890 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1f8a0 5d 29 3b 0a 20 20 70 2d 3e 61 70 43 73 72 5b 70  ]);.  p->apCsr[p
1f8b0 4f 70 2d 3e 70 31 5d 20 3d 20 30 3b 0a 20 20 62  Op->p1] = 0;.  b
1f8c0 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 64 65 66 20  reak;.}..#ifdef 
1f8d0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f  SQLITE_ENABLE_CO
1f8e0 4c 55 4d 4e 5f 55 53 45 44 5f 4d 41 53 4b 0a 2f  LUMN_USED_MASK./
1f8f0 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e  * Opcode: Column
1f900 73 55 73 65 64 20 50 31 20 2a 20 2a 20 50 34 20  sUsed P1 * * P4 
1f910 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  *.**.** This opc
1f920 6f 64 65 20 28 77 68 69 63 68 20 6f 6e 6c 79 20  ode (which only 
1f930 65 78 69 73 74 73 20 69 66 20 53 51 4c 69 74 65  exists if SQLite
1f940 20 77 61 73 20 63 6f 6d 70 69 6c 65 64 20 77 69   was compiled wi
1f950 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41  th.** SQLITE_ENA
1f960 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 55 53 45 44 5f  BLE_COLUMN_USED_
1f970 4d 41 53 4b 29 20 69 64 65 6e 74 69 66 69 65 73  MASK) identifies
1f980 20 77 68 69 63 68 20 63 6f 6c 75 6d 6e 73 20 6f   which columns o
1f990 66 20 74 68 65 0a 2a 2a 20 74 61 62 6c 65 20 6f  f the.** table o
1f9a0 72 20 69 6e 64 65 78 20 66 6f 72 20 63 75 72 73  r index for curs
1f9b0 6f 72 20 50 31 20 61 72 65 20 75 73 65 64 2e 20  or P1 are used. 
1f9c0 20 50 34 20 69 73 20 61 20 36 34 2d 62 69 74 20   P4 is a 64-bit 
1f9d0 69 6e 74 65 67 65 72 0a 2a 2a 20 28 50 34 5f 49  integer.** (P4_I
1f9e0 4e 54 36 34 29 20 69 6e 20 77 68 69 63 68 20 74  NT64) in which t
1f9f0 68 65 20 66 69 72 73 74 20 36 33 20 62 69 74 73  he first 63 bits
1fa00 20 61 72 65 20 6f 6e 65 20 66 6f 72 20 65 61 63   are one for eac
1fa10 68 20 6f 66 20 74 68 65 0a 2a 2a 20 66 69 72 73  h of the.** firs
1fa20 74 20 36 33 20 63 6f 6c 75 6d 6e 73 20 6f 66 20  t 63 columns of 
1fa30 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
1fa40 65 78 20 74 68 61 74 20 61 72 65 20 61 63 74 75  ex that are actu
1fa50 61 6c 6c 79 20 75 73 65 64 0a 2a 2a 20 62 79 20  ally used.** by 
1fa60 74 68 65 20 63 75 72 73 6f 72 2e 20 20 54 68 65  the cursor.  The
1fa70 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20   high-order bit 
1fa80 69 73 20 73 65 74 20 69 66 20 61 6e 79 20 63 6f  is set if any co
1fa90 6c 75 6d 6e 20 61 66 74 65 72 0a 2a 2a 20 74 68  lumn after.** th
1faa0 65 20 36 34 74 68 20 69 73 20 75 73 65 64 2e 0a  e 64th is used..
1fab0 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 75 6d  */.case OP_Colum
1fac0 6e 73 55 73 65 64 3a 20 7b 0a 20 20 56 64 62 65  nsUsed: {.  Vdbe
1fad0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 70 43  Cursor *pC;.  pC
1fae0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
1faf0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
1fb00 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
1fb10 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
1fb20 20 70 43 2d 3e 6d 61 73 6b 55 73 65 64 20 3d 20   pC->maskUsed = 
1fb30 2a 28 75 36 34 2a 29 70 4f 70 2d 3e 70 34 2e 70  *(u64*)pOp->p4.p
1fb40 49 36 34 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  I64;.  break;.}.
1fb50 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64  #endif../* Opcod
1fb60 65 3a 20 53 65 65 6b 47 45 20 50 31 20 50 32 20  e: SeekGE P1 P2 
1fb70 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
1fb80 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
1fb90 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f  ].**.** If curso
1fba0 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61  r P1 refers to a
1fbb0 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54  n SQL table (B-T
1fbc0 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e  ree that uses in
1fbd0 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a  teger keys), .**
1fbe0 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69   use the value i
1fbf0 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73  n register P3 as
1fc00 20 74 68 65 20 6b 65 79 2e 20 20 49 66 20 63 75   the key.  If cu
1fc10 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a  rsor P1 refers .
1fc20 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64  ** to an SQL ind
1fc30 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74  ex, then P3 is t
1fc40 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61  he first in an a
1fc50 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73  rray of P4 regis
1fc60 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72  ters .** that ar
1fc70 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70  e used as an unp
1fc80 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e  acked index key.
1fc90 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69   .**.** Repositi
1fca0 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  on cursor P1 so 
1fcb0 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20  that  it points 
1fcc0 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20  to the smallest 
1fcd0 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69  entry that .** i
1fce0 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f  s greater than o
1fcf0 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
1fd00 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65  ey value. If the
1fd10 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64  re are no record
1fd20 73 20 0a 2a 2a 20 67 72 65 61 74 65 72 20 74 68  s .** greater th
1fd30 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
1fd40 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73  he key and P2 is
1fd50 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20   not zero, then 
1fd60 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  jump to P2..**.*
1fd70 2a 20 49 66 20 74 68 65 20 63 75 72 73 6f 72 20  * If the cursor 
1fd80 50 31 20 77 61 73 20 6f 70 65 6e 65 64 20 75 73  P1 was opened us
1fd90 69 6e 67 20 74 68 65 20 4f 50 46 4c 41 47 5f 53  ing the OPFLAG_S
1fda0 45 45 4b 45 51 20 66 6c 61 67 2c 20 74 68 65 6e  EEKEQ flag, then
1fdb0 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 20   this.** opcode 
1fdc0 77 69 6c 6c 20 61 6c 77 61 79 73 20 6c 61 6e 64  will always land
1fdd0 20 6f 6e 20 61 20 72 65 63 6f 72 64 20 74 68 61   on a record tha
1fde0 74 20 65 71 75 61 6c 6c 79 20 65 71 75 61 6c 73  t equally equals
1fdf0 20 74 68 65 20 6b 65 79 2c 20 6f 72 0a 2a 2a 20   the key, or.** 
1fe00 65 6c 73 65 20 6a 75 6d 70 20 69 6d 6d 65 64 69  else jump immedi
1fe10 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 57 68  ately to P2.  Wh
1fe20 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  en the cursor is
1fe30 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 2c 20   OPFLAG_SEEKEQ, 
1fe40 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 20 6d  this.** opcode m
1fe50 75 73 74 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20  ust be followed 
1fe60 62 79 20 61 6e 20 49 64 78 4c 45 20 6f 70 63 6f  by an IdxLE opco
1fe70 64 65 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  de with the same
1fe80 20 61 72 67 75 6d 65 6e 74 73 2e 0a 2a 2a 20 54   arguments..** T
1fe90 68 65 20 49 64 78 4c 45 20 6f 70 63 6f 64 65 20  he IdxLE opcode 
1fea0 77 69 6c 6c 20 62 65 20 73 6b 69 70 70 65 64 20  will be skipped 
1feb0 69 66 20 74 68 69 73 20 6f 70 63 6f 64 65 20 73  if this opcode s
1fec0 75 63 63 65 65 64 73 2c 20 62 75 74 20 74 68 65  ucceeds, but the
1fed0 0a 2a 2a 20 49 64 78 4c 45 20 6f 70 63 6f 64 65  .** IdxLE opcode
1fee0 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 6f 6e   will be used on
1fef0 20 73 75 62 73 65 71 75 65 6e 74 20 6c 6f 6f 70   subsequent loop
1ff00 20 69 74 65 72 61 74 69 6f 6e 73 2e 0a 2a 2a 0a   iterations..**.
1ff10 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c  ** This opcode l
1ff20 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
1ff30 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d   configured to m
1ff40 6f 76 65 20 69 6e 20 66 6f 72 77 61 72 64 20 6f  ove in forward o
1ff50 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68  rder,.** from th
1ff60 65 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61  e beginning towa
1ff70 72 64 20 74 68 65 20 65 6e 64 2e 20 20 49 6e 20  rd the end.  In 
1ff80 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
1ff90 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f   cursor is.** co
1ffa0 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20  nfigured to use 
1ffb0 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a  Next, not Prev..
1ffc0 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
1ffd0 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c  Found, NotFound,
1ffe0 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47 74 2c   SeekLt, SeekGt,
1fff0 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70   SeekLe.*/./* Op
20000 63 6f 64 65 3a 20 53 65 65 6b 47 54 20 50 31 20  code: SeekGT P1 
20010 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
20020 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
20030 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75  @P4].**.** If cu
20040 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74  rsor P1 refers t
20050 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28  o an SQL table (
20060 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73  B-Tree that uses
20070 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20   integer keys), 
20080 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75  .** use the valu
20090 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  e in register P3
200a0 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75   as a key. If cu
200b0 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a  rsor P1 refers .
200c0 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64  ** to an SQL ind
200d0 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74  ex, then P3 is t
200e0 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61  he first in an a
200f0 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73  rray of P4 regis
20100 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72  ters .** that ar
20110 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70  e used as an unp
20120 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e  acked index key.
20130 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69   .**.** Repositi
20140 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  on cursor P1 so 
20150 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20  that  it points 
20160 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20  to the smallest 
20170 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69  entry that .** i
20180 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74  s greater than t
20190 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66  he key value. If
201a0 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65   there are no re
201b0 63 6f 72 64 73 20 67 72 65 61 74 65 72 20 74 68  cords greater th
201c0 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61  an .** the key a
201d0 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72  nd P2 is not zer
201e0 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  o, then jump to 
201f0 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  P2..**.** This o
20200 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65  pcode leaves the
20210 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72   cursor configur
20220 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66 6f  ed to move in fo
20230 72 77 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a 20  rward order,.** 
20240 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69  from the beginni
20250 6e 67 20 74 6f 77 61 72 64 20 74 68 65 20 65 6e  ng toward the en
20260 64 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  d.  In other wor
20270 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69  ds, the cursor i
20280 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20  s.** configured 
20290 74 6f 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f 74  to use Next, not
202a0 20 50 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53 65 65   Prev..**.** See
202b0 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
202c0 74 46 6f 75 6e 64 2c 20 53 65 65 6b 4c 74 2c 20  tFound, SeekLt, 
202d0 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a  SeekGe, SeekLe.*
202e0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65  /./* Opcode: See
202f0 6b 4c 54 20 50 31 20 50 32 20 50 33 20 50 34 20  kLT P1 P2 P3 P4 
20300 2a 20 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  * .** Synopsis: 
20310 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
20320 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  ** If cursor P1 
20330 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c  refers to an SQL
20340 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74   table (B-Tree t
20350 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72  hat uses integer
20360 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20   keys), .** use 
20370 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
20380 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b 65  ister P3 as a ke
20390 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  y. If cursor P1 
203a0 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e  refers .** to an
203b0 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e   SQL index, then
203c0 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74   P3 is the first
203d0 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20   in an array of 
203e0 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a  P4 registers .**
203f0 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61   that are used a
20400 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  s an unpacked in
20410 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20  dex key. .**.** 
20420 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f  Reposition curso
20430 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69 74  r P1 so that  it
20440 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6c   points to the l
20450 61 72 67 65 73 74 20 65 6e 74 72 79 20 74 68 61  argest entry tha
20460 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68  t .** is less th
20470 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  an the key value
20480 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e  . If there are n
20490 6f 20 72 65 63 6f 72 64 73 20 6c 65 73 73 20 74  o records less t
204a0 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20  han .** the key 
204b0 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65  and P2 is not ze
204c0 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  ro, then jump to
204d0 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P2..**.** This 
204e0 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68  opcode leaves th
204f0 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75  e cursor configu
20500 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72  red to move in r
20510 65 76 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a  everse order,.**
20520 20 66 72 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f   from the end to
20530 77 61 72 64 20 74 68 65 20 62 65 67 69 6e 6e 69  ward the beginni
20540 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  ng.  In other wo
20550 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20  rds, the cursor 
20560 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64  is.** configured
20570 20 74 6f 20 75 73 65 20 50 72 65 76 2c 20 6e 6f   to use Prev, no
20580 74 20 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 53 65  t Next..**.** Se
20590 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
205a0 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 47 74 2c  otFound, SeekGt,
205b0 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a   SeekGe, SeekLe.
205c0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  */./* Opcode: Se
205d0 65 6b 4c 45 20 50 31 20 50 32 20 50 33 20 50 34  ekLE P1 P2 P3 P4
205e0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
205f0 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
20600 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  ** If cursor P1 
20610 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c  refers to an SQL
20620 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74   table (B-Tree t
20630 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72  hat uses integer
20640 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20   keys), .** use 
20650 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
20660 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b 65  ister P3 as a ke
20670 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  y. If cursor P1 
20680 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e  refers .** to an
20690 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e   SQL index, then
206a0 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74   P3 is the first
206b0 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20   in an array of 
206c0 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a  P4 registers .**
206d0 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61   that are used a
206e0 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  s an unpacked in
206f0 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20  dex key. .**.** 
20700 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f  Reposition curso
20710 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20  r P1 so that it 
20720 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6c 61  points to the la
20730 72 67 65 73 74 20 65 6e 74 72 79 20 74 68 61 74  rgest entry that
20740 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61   .** is less tha
20750 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
20760 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20  e key value. If 
20770 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63  there are no rec
20780 6f 72 64 73 20 0a 2a 2a 20 6c 65 73 73 20 74 68  ords .** less th
20790 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
207a0 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73  he key and P2 is
207b0 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20   not zero, then 
207c0 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  jump to P2..**.*
207d0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65  * This opcode le
207e0 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20  aves the cursor 
207f0 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f  configured to mo
20800 76 65 20 69 6e 20 72 65 76 65 72 73 65 20 6f 72  ve in reverse or
20810 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65  der,.** from the
20820 20 65 6e 64 20 74 6f 77 61 72 64 20 74 68 65 20   end toward the 
20830 62 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f  beginning.  In o
20840 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
20850 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e  cursor is.** con
20860 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 50  figured to use P
20870 72 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a  rev, not Next..*
20880 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 75 72 73  *.** If the curs
20890 6f 72 20 50 31 20 77 61 73 20 6f 70 65 6e 65 64  or P1 was opened
208a0 20 75 73 69 6e 67 20 74 68 65 20 4f 50 46 4c 41   using the OPFLA
208b0 47 5f 53 45 45 4b 45 51 20 66 6c 61 67 2c 20 74  G_SEEKEQ flag, t
208c0 68 65 6e 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f  hen this.** opco
208d0 64 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 6c  de will always l
208e0 61 6e 64 20 6f 6e 20 61 20 72 65 63 6f 72 64 20  and on a record 
208f0 74 68 61 74 20 65 71 75 61 6c 6c 79 20 65 71 75  that equally equ
20900 61 6c 73 20 74 68 65 20 6b 65 79 2c 20 6f 72 0a  als the key, or.
20910 2a 2a 20 65 6c 73 65 20 6a 75 6d 70 20 69 6d 6d  ** else jump imm
20920 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20  ediately to P2. 
20930 20 57 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72   When the cursor
20940 20 69 73 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45   is OPFLAG_SEEKE
20950 51 2c 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64  Q, this.** opcod
20960 65 20 6d 75 73 74 20 62 65 20 66 6f 6c 6c 6f 77  e must be follow
20970 65 64 20 62 79 20 61 6e 20 49 64 78 47 45 20 6f  ed by an IdxGE o
20980 70 63 6f 64 65 20 77 69 74 68 20 74 68 65 20 73  pcode with the s
20990 61 6d 65 20 61 72 67 75 6d 65 6e 74 73 2e 0a 2a  ame arguments..*
209a0 2a 20 54 68 65 20 49 64 78 47 45 20 6f 70 63 6f  * The IdxGE opco
209b0 64 65 20 77 69 6c 6c 20 62 65 20 73 6b 69 70 70  de will be skipp
209c0 65 64 20 69 66 20 74 68 69 73 20 6f 70 63 6f 64  ed if this opcod
209d0 65 20 73 75 63 63 65 65 64 73 2c 20 62 75 74 20  e succeeds, but 
209e0 74 68 65 0a 2a 2a 20 49 64 78 47 45 20 6f 70 63  the.** IdxGE opc
209f0 6f 64 65 20 77 69 6c 6c 20 62 65 20 75 73 65 64  ode will be used
20a00 20 6f 6e 20 73 75 62 73 65 71 75 65 6e 74 20 6c   on subsequent l
20a10 6f 6f 70 20 69 74 65 72 61 74 69 6f 6e 73 2e 0a  oop iterations..
20a20 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
20a30 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c  Found, NotFound,
20a40 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c   SeekGt, SeekGe,
20a50 20 53 65 65 6b 4c 74 0a 2a 2f 0a 63 61 73 65 20   SeekLt.*/.case 
20a60 4f 50 5f 53 65 65 6b 4c 54 3a 20 20 20 20 20 20  OP_SeekLT:      
20a70 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 2c     /* jump, in3,
20a80 20 67 72 6f 75 70 20 2a 2f 0a 63 61 73 65 20 4f   group */.case O
20a90 50 5f 53 65 65 6b 4c 45 3a 20 20 20 20 20 20 20  P_SeekLE:       
20aa0 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 2c 20    /* jump, in3, 
20ab0 67 72 6f 75 70 20 2a 2f 0a 63 61 73 65 20 4f 50  group */.case OP
20ac0 5f 53 65 65 6b 47 45 3a 20 20 20 20 20 20 20 20  _SeekGE:        
20ad0 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 2c 20 67   /* jump, in3, g
20ae0 72 6f 75 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  roup */.case OP_
20af0 53 65 65 6b 47 54 3a 20 7b 20 20 20 20 20 20 20  SeekGT: {       
20b00 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 2c 20 67 72  /* jump, in3, gr
20b10 6f 75 70 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73  oup */.  int res
20b20 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43  ;           /* C
20b30 6f 6d 70 61 72 69 73 6f 6e 20 72 65 73 75 6c 74  omparison result
20b40 20 2a 2f 0a 20 20 69 6e 74 20 6f 63 3b 20 20 20   */.  int oc;   
20b50 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 63 6f           /* Opco
20b60 64 65 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  de */.  VdbeCurs
20b70 6f 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20 54 68  or *pC;    /* Th
20b80 65 20 63 75 72 73 6f 72 20 74 6f 20 73 65 65 6b  e cursor to seek
20b90 20 2a 2f 0a 20 20 55 6e 70 61 63 6b 65 64 52 65   */.  UnpackedRe
20ba0 63 6f 72 64 20 72 3b 20 20 2f 2a 20 54 68 65 20  cord r;  /* The 
20bb0 6b 65 79 20 74 6f 20 73 65 65 6b 20 66 6f 72 20  key to seek for 
20bc0 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b  */.  int nField;
20bd0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
20be0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 6f 72 20  r of columns or 
20bf0 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 6b 65  fields in the ke
20c00 79 20 2a 2f 0a 20 20 69 36 34 20 69 4b 65 79 3b  y */.  i64 iKey;
20c10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
20c20 20 72 6f 77 69 64 20 77 65 20 61 72 65 20 74 6f   rowid we are to
20c30 20 73 65 65 6b 20 74 6f 20 2a 2f 0a 20 20 69 6e   seek to */.  in
20c40 74 20 65 71 4f 6e 6c 79 3b 20 20 20 20 20 20 20  t eqOnly;       
20c50 20 2f 2a 20 4f 6e 6c 79 20 69 6e 74 65 72 65 73   /* Only interes
20c60 74 65 64 20 69 6e 20 3d 3d 20 72 65 73 75 6c 74  ted in == result
20c70 73 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20  s */..  assert( 
20c80 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
20c90 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
20ca0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
20cb0 70 2d 3e 70 32 21 3d 30 20 29 3b 0a 20 20 70 43  p->p2!=0 );.  pC
20cc0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
20cd0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
20ce0 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
20cf0 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
20d00 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
20d10 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53  ;.  assert( OP_S
20d20 65 65 6b 4c 45 20 3d 3d 20 4f 50 5f 53 65 65 6b  eekLE == OP_Seek
20d30 4c 54 2b 31 20 29 3b 0a 20 20 61 73 73 65 72 74  LT+1 );.  assert
20d40 28 20 4f 50 5f 53 65 65 6b 47 45 20 3d 3d 20 4f  ( OP_SeekGE == O
20d50 50 5f 53 65 65 6b 4c 54 2b 32 20 29 3b 0a 20 20  P_SeekLT+2 );.  
20d60 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47  assert( OP_SeekG
20d70 54 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 33  T == OP_SeekLT+3
20d80 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
20d90 2d 3e 69 73 4f 72 64 65 72 65 64 20 29 3b 0a 20  ->isOrdered );. 
20da0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e   assert( pC->uc.
20db0 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20  pCursor!=0 );.  
20dc0 6f 63 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  oc = pOp->opcode
20dd0 3b 0a 20 20 65 71 4f 6e 6c 79 20 3d 20 30 3b 0a  ;.  eqOnly = 0;.
20de0 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
20df0 30 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  0;.#ifdef SQLITE
20e00 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65  _DEBUG.  pC->see
20e10 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64  kOp = pOp->opcod
20e20 65 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66 28  e;.#endif..  if(
20e30 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b 0a   pC->isTable ){.
20e40 20 20 20 20 2f 2a 20 54 68 65 20 42 54 52 45 45      /* The BTREE
20e50 5f 53 45 45 4b 5f 45 51 20 66 6c 61 67 20 69 73  _SEEK_EQ flag is
20e60 20 6f 6e 6c 79 20 73 65 74 20 6f 6e 20 69 6e 64   only set on ind
20e70 65 78 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20 20  ex cursors */.  
20e80 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
20e90 33 42 74 72 65 65 43 75 72 73 6f 72 48 61 73 48  3BtreeCursorHasH
20ea0 69 6e 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  int(pC->uc.pCurs
20eb0 6f 72 2c 20 42 54 52 45 45 5f 53 45 45 4b 5f 45  or, BTREE_SEEK_E
20ec0 51 29 3d 3d 30 0a 20 20 20 20 20 20 20 20 20 20  Q)==0.          
20ed0 20 20 20 20 7c 7c 20 43 4f 52 52 55 50 54 5f 44      || CORRUPT_D
20ee0 42 20 29 3b 0a 0a 20 20 20 20 2f 2a 20 54 68 65  B );..    /* The
20ef0 20 69 6e 70 75 74 20 76 61 6c 75 65 20 69 6e 20   input value in 
20f00 50 33 20 6d 69 67 68 74 20 62 65 20 6f 66 20 61  P3 might be of a
20f10 6e 79 20 74 79 70 65 3a 20 69 6e 74 65 67 65 72  ny type: integer
20f20 2c 20 72 65 61 6c 2c 20 73 74 72 69 6e 67 2c 0a  , real, string,.
20f30 20 20 20 20 2a 2a 20 62 6c 6f 62 2c 20 6f 72 20      ** blob, or 
20f40 4e 55 4c 4c 2e 20 20 42 75 74 20 69 74 20 6e 65  NULL.  But it ne
20f50 65 64 73 20 74 6f 20 62 65 20 61 6e 20 69 6e 74  eds to be an int
20f60 65 67 65 72 20 62 65 66 6f 72 65 20 77 65 20 63  eger before we c
20f70 61 6e 20 64 6f 0a 20 20 20 20 2a 2a 20 74 68 65  an do.    ** the
20f80 20 73 65 65 6b 2c 20 73 6f 20 63 6f 6e 76 65 72   seek, so conver
20f90 74 20 69 74 2e 20 2a 2f 0a 20 20 20 20 70 49 6e  t it. */.    pIn
20fa0 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
20fb0 33 5d 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e  3];.    if( (pIn
20fc0 33 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  3->flags & (MEM_
20fd0 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d  Int|MEM_Real|MEM
20fe0 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20  _Str))==MEM_Str 
20ff0 29 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 4e 75  ){.      applyNu
21000 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 49  mericAffinity(pI
21010 6e 33 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20  n3, 0);.    }.  
21020 20 20 69 4b 65 79 20 3d 20 73 71 6c 69 74 65 33    iKey = sqlite3
21030 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
21040 33 29 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 74  3);..    /* If t
21050 68 65 20 50 33 20 76 61 6c 75 65 20 63 6f 75 6c  he P3 value coul
21060 64 20 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74  d not be convert
21070 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67  ed into an integ
21080 65 72 20 77 69 74 68 6f 75 74 0a 20 20 20 20 2a  er without.    *
21090 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d  * loss of inform
210a0 61 74 69 6f 6e 2c 20 74 68 65 6e 20 73 70 65 63  ation, then spec
210b0 69 61 6c 20 70 72 6f 63 65 73 73 69 6e 67 20 69  ial processing i
210c0 73 20 72 65 71 75 69 72 65 64 2e 2e 2e 20 2a 2f  s required... */
210d0 0a 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e  .    if( (pIn3->
210e0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
210f0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ==0 ){.      if(
21100 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20   (pIn3->flags & 
21110 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b 0a  MEM_Real)==0 ){.
21120 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68          /* If th
21130 65 20 50 33 20 76 61 6c 75 65 20 63 61 6e 6e 6f  e P3 value canno
21140 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69  t be converted i
21150 6e 74 6f 20 61 6e 79 20 6b 69 6e 64 20 6f 66 20  nto any kind of 
21160 61 20 6e 75 6d 62 65 72 2c 0a 20 20 20 20 20 20  a number,.      
21170 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 20 73 65    ** then the se
21180 65 6b 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62  ek is not possib
21190 6c 65 2c 20 73 6f 20 6a 75 6d 70 20 74 6f 20 50  le, so jump to P
211a0 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 56 64 62  2 */.        Vdb
211b0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 32  eBranchTaken(1,2
211c0 29 3b 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f  ); goto jump_to_
211d0 70 32 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  p2;.        brea
211e0 6b 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  k;.      }..    
211f0 20 20 2f 2a 20 49 66 20 74 68 65 20 61 70 70 72    /* If the appr
21200 6f 78 69 6d 61 74 69 6f 6e 20 69 4b 65 79 20 69  oximation iKey i
21210 73 20 6c 61 72 67 65 72 20 74 68 61 6e 20 74 68  s larger than th
21220 65 20 61 63 74 75 61 6c 20 72 65 61 6c 20 73 65  e actual real se
21230 61 72 63 68 0a 20 20 20 20 20 20 2a 2a 20 74 65  arch.      ** te
21240 72 6d 2c 20 73 75 62 73 74 69 74 75 74 65 20 3e  rm, substitute >
21250 3d 20 66 6f 72 20 3e 20 61 6e 64 20 3c 20 66 6f  = for > and < fo
21260 72 20 3c 3d 2e 20 65 2e 67 2e 20 69 66 20 74 68  r <=. e.g. if th
21270 65 20 73 65 61 72 63 68 20 74 65 72 6d 0a 20 20  e search term.  
21280 20 20 20 20 2a 2a 20 69 73 20 34 2e 39 20 61 6e      ** is 4.9 an
21290 64 20 74 68 65 20 69 6e 74 65 67 65 72 20 61 70  d the integer ap
212a0 70 72 6f 78 69 6d 61 74 69 6f 6e 20 35 3a 0a 20  proximation 5:. 
212b0 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a       **.      **
212c0 20 20 20 20 20 20 20 20 28 78 20 3e 20 20 34 2e          (x >  4.
212d0 39 29 20 20 20 20 2d 3e 20 20 20 20 20 28 78 20  9)    ->     (x 
212e0 3e 3d 20 35 29 0a 20 20 20 20 20 20 2a 2a 20 20  >= 5).      **  
212f0 20 20 20 20 20 20 28 78 20 3c 3d 20 34 2e 39 29        (x <= 4.9)
21300 20 20 20 20 2d 3e 20 20 20 20 20 28 78 20 3c 20      ->     (x < 
21310 20 35 29 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20   5).      */.   
21320 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e 72     if( pIn3->u.r
21330 3c 28 64 6f 75 62 6c 65 29 69 4b 65 79 20 29 7b  <(double)iKey ){
21340 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
21350 20 4f 50 5f 53 65 65 6b 47 45 3d 3d 28 4f 50 5f   OP_SeekGE==(OP_
21360 53 65 65 6b 47 54 2d 31 29 20 29 3b 0a 20 20 20  SeekGT-1) );.   
21370 20 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f       assert( OP_
21380 53 65 65 6b 4c 54 3d 3d 28 4f 50 5f 53 65 65 6b  SeekLT==(OP_Seek
21390 4c 45 2d 31 29 20 29 3b 0a 20 20 20 20 20 20 20  LE-1) );.       
213a0 20 61 73 73 65 72 74 28 20 28 4f 50 5f 53 65 65   assert( (OP_See
213b0 6b 4c 45 20 26 20 30 78 30 30 30 31 29 3d 3d 28  kLE & 0x0001)==(
213c0 4f 50 5f 53 65 65 6b 47 54 20 26 20 30 78 30 30  OP_SeekGT & 0x00
213d0 30 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 69  01) );.        i
213e0 66 28 20 28 6f 63 20 26 20 30 78 30 30 30 31 29  f( (oc & 0x0001)
213f0 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 20 26 20 30  ==(OP_SeekGT & 0
21400 78 30 30 30 31 29 20 29 20 6f 63 2d 2d 3b 0a 20  x0001) ) oc--;. 
21410 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a       }..      /*
21420 20 49 66 20 74 68 65 20 61 70 70 72 6f 78 69 6d   If the approxim
21430 61 74 69 6f 6e 20 69 4b 65 79 20 69 73 20 73 6d  ation iKey is sm
21440 61 6c 6c 65 72 20 74 68 61 6e 20 74 68 65 20 61  aller than the a
21450 63 74 75 61 6c 20 72 65 61 6c 20 73 65 61 72 63  ctual real searc
21460 68 0a 20 20 20 20 20 20 2a 2a 20 74 65 72 6d 2c  h.      ** term,
21470 20 73 75 62 73 74 69 74 75 74 65 20 3c 3d 20 66   substitute <= f
21480 6f 72 20 3c 20 61 6e 64 20 3e 20 66 6f 72 20 3e  or < and > for >
21490 3d 2e 20 20 2a 2f 0a 20 20 20 20 20 20 65 6c 73  =.  */.      els
214a0 65 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e 72 3e  e if( pIn3->u.r>
214b0 28 64 6f 75 62 6c 65 29 69 4b 65 79 20 29 7b 0a  (double)iKey ){.
214c0 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
214d0 4f 50 5f 53 65 65 6b 4c 45 3d 3d 28 4f 50 5f 53  OP_SeekLE==(OP_S
214e0 65 65 6b 4c 54 2b 31 29 20 29 3b 0a 20 20 20 20  eekLT+1) );.    
214f0 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53      assert( OP_S
21500 65 65 6b 47 54 3d 3d 28 4f 50 5f 53 65 65 6b 47  eekGT==(OP_SeekG
21510 45 2b 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20  E+1) );.        
21520 61 73 73 65 72 74 28 20 28 4f 50 5f 53 65 65 6b  assert( (OP_Seek
21530 4c 54 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f  LT & 0x0001)==(O
21540 50 5f 53 65 65 6b 47 45 20 26 20 30 78 30 30 30  P_SeekGE & 0x000
21550 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 69 66  1) );.        if
21560 28 20 28 6f 63 20 26 20 30 78 30 30 30 31 29 3d  ( (oc & 0x0001)=
21570 3d 28 4f 50 5f 53 65 65 6b 4c 54 20 26 20 30 78  =(OP_SeekLT & 0x
21580 30 30 30 31 29 20 29 20 6f 63 2b 2b 3b 0a 20 20  0001) ) oc++;.  
21590 20 20 20 20 7d 0a 20 20 20 20 7d 20 0a 20 20 20      }.    } .   
215a0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
215b0 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
215c0 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
215d0 20 30 2c 20 28 75 36 34 29 69 4b 65 79 2c 20 30   0, (u64)iKey, 0
215e0 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 70 43 2d  , &res);.    pC-
215f0 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20  >movetoTarget = 
21600 69 4b 65 79 3b 20 20 2f 2a 20 55 73 65 64 20 62  iKey;  /* Used b
21610 79 20 4f 50 5f 44 65 6c 65 74 65 20 2a 2f 0a 20  y OP_Delete */. 
21620 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
21630 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f  E_OK ){.      go
21640 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
21650 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d  error;.    }.  }
21660 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 46 6f 72  else{.    /* For
21670 20 61 20 63 75 72 73 6f 72 20 77 69 74 68 20 74   a cursor with t
21680 68 65 20 42 54 52 45 45 5f 53 45 45 4b 5f 45 51  he BTREE_SEEK_EQ
21690 20 68 69 6e 74 2c 20 6f 6e 6c 79 20 74 68 65 20   hint, only the 
216a0 4f 50 5f 53 65 65 6b 47 45 20 61 6e 64 0a 20 20  OP_SeekGE and.  
216b0 20 20 2a 2a 20 4f 50 5f 53 65 65 6b 4c 45 20 6f    ** OP_SeekLE o
216c0 70 63 6f 64 65 73 20 61 72 65 20 61 6c 6c 6f 77  pcodes are allow
216d0 65 64 2c 20 61 6e 64 20 74 68 65 73 65 20 6d 75  ed, and these mu
216e0 73 74 20 62 65 20 69 6d 6d 65 64 69 61 74 65 6c  st be immediatel
216f0 79 20 66 6f 6c 6c 6f 77 65 64 0a 20 20 20 20 2a  y followed.    *
21700 2a 20 62 79 20 61 6e 20 4f 50 5f 49 64 78 47 54  * by an OP_IdxGT
21710 20 6f 72 20 4f 50 5f 49 64 78 4c 54 20 6f 70 63   or OP_IdxLT opc
21720 6f 64 65 2c 20 72 65 73 70 65 63 74 69 76 65 6c  ode, respectivel
21730 79 2c 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  y, with the same
21740 20 6b 65 79 2e 0a 20 20 20 20 2a 2f 0a 20 20 20   key..    */.   
21750 20 69 66 28 20 73 71 6c 69 74 65 33 42 74 72 65   if( sqlite3Btre
21760 65 43 75 72 73 6f 72 48 61 73 48 69 6e 74 28 70  eCursorHasHint(p
21770 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 42  C->uc.pCursor, B
21780 54 52 45 45 5f 53 45 45 4b 5f 45 51 29 20 29 7b  TREE_SEEK_EQ) ){
21790 0a 20 20 20 20 20 20 65 71 4f 6e 6c 79 20 3d 20  .      eqOnly = 
217a0 31 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  1;.      assert(
217b0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
217c0 5f 53 65 65 6b 47 45 20 7c 7c 20 70 4f 70 2d 3e  _SeekGE || pOp->
217d0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b 4c  opcode==OP_SeekL
217e0 45 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  E );.      asser
217f0 74 28 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65  t( pOp[1].opcode
21800 3d 3d 4f 50 5f 49 64 78 4c 54 20 7c 7c 20 70 4f  ==OP_IdxLT || pO
21810 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  p[1].opcode==OP_
21820 49 64 78 47 54 20 29 3b 0a 20 20 20 20 20 20 61  IdxGT );.      a
21830 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70 31  ssert( pOp[1].p1
21840 3d 3d 70 4f 70 5b 30 5d 2e 70 31 20 29 3b 0a 20  ==pOp[0].p1 );. 
21850 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
21860 5b 31 5d 2e 70 32 3d 3d 70 4f 70 5b 30 5d 2e 70  [1].p2==pOp[0].p
21870 32 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  2 );.      asser
21880 74 28 20 70 4f 70 5b 31 5d 2e 70 33 3d 3d 70 4f  t( pOp[1].p3==pO
21890 70 5b 30 5d 2e 70 33 20 29 3b 0a 20 20 20 20 20  p[0].p3 );.     
218a0 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e   assert( pOp[1].
218b0 70 34 2e 69 3d 3d 70 4f 70 5b 30 5d 2e 70 34 2e  p4.i==pOp[0].p4.
218c0 69 20 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  i );.    }..    
218d0 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34  nField = pOp->p4
218e0 2e 69 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  .i;.    assert( 
218f0 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
21900 49 4e 54 33 32 20 29 3b 0a 20 20 20 20 61 73 73  INT32 );.    ass
21910 65 72 74 28 20 6e 46 69 65 6c 64 3e 30 20 29 3b  ert( nField>0 );
21920 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20  .    r.pKeyInfo 
21930 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a  = pC->pKeyInfo;.
21940 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28      r.nField = (
21950 75 31 36 29 6e 46 69 65 6c 64 3b 0a 0a 20 20 20  u16)nField;..   
21960 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 6c 69 6e   /* The next lin
21970 65 20 6f 66 20 63 6f 64 65 20 63 6f 6d 70 75 74  e of code comput
21980 65 73 20 61 73 20 66 6f 6c 6c 6f 77 73 2c 20 6f  es as follows, o
21990 6e 6c 79 20 66 61 73 74 65 72 3a 0a 20 20 20 20  nly faster:.    
219a0 2a 2a 20 20 20 69 66 28 20 6f 63 3d 3d 4f 50 5f  **   if( oc==OP_
219b0 53 65 65 6b 47 54 20 7c 7c 20 6f 63 3d 3d 4f 50  SeekGT || oc==OP
219c0 5f 53 65 65 6b 4c 45 20 29 7b 0a 20 20 20 20 2a  _SeekLE ){.    *
219d0 2a 20 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f  *     r.default_
219e0 72 63 20 3d 20 2d 31 3b 0a 20 20 20 20 2a 2a 20  rc = -1;.    ** 
219f0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2a 2a 20    }else{.    ** 
21a00 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63      r.default_rc
21a10 20 3d 20 2b 31 3b 0a 20 20 20 20 2a 2a 20 20 20   = +1;.    **   
21a20 7d 0a 20 20 20 20 2a 2f 0a 20 20 20 20 72 2e 64  }.    */.    r.d
21a30 65 66 61 75 6c 74 5f 72 63 20 3d 20 28 28 31 20  efault_rc = ((1 
21a40 26 20 28 6f 63 20 2d 20 4f 50 5f 53 65 65 6b 4c  & (oc - OP_SeekL
21a50 54 29 29 20 3f 20 2d 31 20 3a 20 2b 31 29 3b 0a  T)) ? -1 : +1);.
21a60 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d      assert( oc!=
21a70 4f 50 5f 53 65 65 6b 47 54 20 7c 7c 20 72 2e 64  OP_SeekGT || r.d
21a80 65 66 61 75 6c 74 5f 72 63 3d 3d 2d 31 20 29 3b  efault_rc==-1 );
21a90 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 21  .    assert( oc!
21aa0 3d 4f 50 5f 53 65 65 6b 4c 45 20 7c 7c 20 72 2e  =OP_SeekLE || r.
21ab0 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2d 31 20 29  default_rc==-1 )
21ac0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 63  ;.    assert( oc
21ad0 21 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c 20 72  !=OP_SeekGE || r
21ae0 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2b 31 20  .default_rc==+1 
21af0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f  );.    assert( o
21b00 63 21 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c 20  c!=OP_SeekLT || 
21b10 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2b 31  r.default_rc==+1
21b20 20 29 3b 0a 0a 20 20 20 20 72 2e 61 4d 65 6d 20   );..    r.aMem 
21b30 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
21b40 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
21b50 44 45 42 55 47 0a 20 20 20 20 7b 20 69 6e 74 20  DEBUG.    { int 
21b60 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e  i; for(i=0; i<r.
21b70 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73  nField; i++) ass
21b80 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
21b90 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d  &r.aMem[i]) ); }
21ba0 0a 23 65 6e 64 69 66 0a 20 20 20 20 72 2e 65 71  .#endif.    r.eq
21bb0 53 65 65 6e 20 3d 20 30 3b 0a 20 20 20 20 72 63  Seen = 0;.    rc
21bc0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d   = sqlite3BtreeM
21bd0 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43  ovetoUnpacked(pC
21be0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 72  ->uc.pCursor, &r
21bf0 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20  , 0, 0, &res);. 
21c00 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
21c10 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f  E_OK ){.      go
21c20 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
21c30 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20  error;.    }.   
21c40 20 69 66 28 20 65 71 4f 6e 6c 79 20 26 26 20 72   if( eqOnly && r
21c50 2e 65 71 53 65 65 6e 3d 3d 30 20 29 7b 0a 20 20  .eqSeen==0 ){.  
21c60 20 20 20 20 61 73 73 65 72 74 28 20 72 65 73 21      assert( res!
21c70 3d 30 20 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f  =0 );.      goto
21c80 20 73 65 65 6b 5f 6e 6f 74 5f 66 6f 75 6e 64 3b   seek_not_found;
21c90 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43 2d  .    }.  }.  pC-
21ca0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
21cb0 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  = 0;.  pC->cache
21cc0 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
21cd0 54 41 4c 45 3b 0a 23 69 66 64 65 66 20 53 51 4c  TALE;.#ifdef SQL
21ce0 49 54 45 5f 54 45 53 54 0a 20 20 73 71 6c 69 74  ITE_TEST.  sqlit
21cf0 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b  e3_search_count+
21d00 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20  +;.#endif.  if( 
21d10 6f 63 3e 3d 4f 50 5f 53 65 65 6b 47 45 20 29 7b  oc>=OP_SeekGE ){
21d20 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50    assert( oc==OP
21d30 5f 53 65 65 6b 47 45 20 7c 7c 20 6f 63 3d 3d 4f  _SeekGE || oc==O
21d40 50 5f 53 65 65 6b 47 54 20 29 3b 0a 20 20 20 20  P_SeekGT );.    
21d50 69 66 28 20 72 65 73 3c 30 20 7c 7c 20 28 72 65  if( res<0 || (re
21d60 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53  s==0 && oc==OP_S
21d70 65 65 6b 47 54 29 20 29 7b 0a 20 20 20 20 20 20  eekGT) ){.      
21d80 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 72  res = 0;.      r
21d90 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
21da0 4e 65 78 74 28 70 43 2d 3e 75 63 2e 70 43 75 72  Next(pC->uc.pCur
21db0 73 6f 72 2c 20 30 29 3b 0a 20 20 20 20 20 20 69  sor, 0);.      i
21dc0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
21dd0 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20   ){.        if( 
21de0 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20  rc==SQLITE_DONE 
21df0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63 20  ){.          rc 
21e00 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20  = SQLITE_OK;.   
21e10 20 20 20 20 20 20 20 72 65 73 20 3d 20 31 3b 0a         res = 1;.
21e20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
21e30 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62           goto ab
21e40 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
21e50 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
21e60 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20    }.    }else{. 
21e70 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20       res = 0;.  
21e80 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
21e90 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f   assert( oc==OP_
21ea0 53 65 65 6b 4c 54 20 7c 7c 20 6f 63 3d 3d 4f 50  SeekLT || oc==OP
21eb0 5f 53 65 65 6b 4c 45 20 29 3b 0a 20 20 20 20 69  _SeekLE );.    i
21ec0 66 28 20 72 65 73 3e 30 20 7c 7c 20 28 72 65 73  f( res>0 || (res
21ed0 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65  ==0 && oc==OP_Se
21ee0 65 6b 4c 54 29 20 29 7b 0a 20 20 20 20 20 20 72  ekLT) ){.      r
21ef0 65 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 72 63  es = 0;.      rc
21f00 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50   = sqlite3BtreeP
21f10 72 65 76 69 6f 75 73 28 70 43 2d 3e 75 63 2e 70  revious(pC->uc.p
21f20 43 75 72 73 6f 72 2c 20 30 29 3b 0a 20 20 20 20  Cursor, 0);.    
21f30 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
21f40 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 69  _OK ){.        i
21f50 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f  f( rc==SQLITE_DO
21f60 4e 45 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  NE ){.          
21f70 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
21f80 20 20 20 20 20 20 20 20 20 20 72 65 73 20 3d 20            res = 
21f90 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  1;.        }else
21fa0 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  {.          goto
21fb0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
21fc0 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  ror;.        }. 
21fd0 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
21fe0 7b 0a 20 20 20 20 20 20 2f 2a 20 72 65 73 20 6d  {.      /* res m
21ff0 69 67 68 74 20 62 65 20 6e 65 67 61 74 69 76 65  ight be negative
22000 20 62 65 63 61 75 73 65 20 74 68 65 20 74 61 62   because the tab
22010 6c 65 20 69 73 20 65 6d 70 74 79 2e 20 20 43 68  le is empty.  Ch
22020 65 63 6b 20 74 6f 0a 20 20 20 20 20 20 2a 2a 20  eck to.      ** 
22030 73 65 65 20 69 66 20 74 68 69 73 20 69 73 20 74  see if this is t
22040 68 65 20 63 61 73 65 2e 0a 20 20 20 20 20 20 2a  he case..      *
22050 2f 0a 20 20 20 20 20 20 72 65 73 20 3d 20 73 71  /.      res = sq
22060 6c 69 74 65 33 42 74 72 65 65 45 6f 66 28 70 43  lite3BtreeEof(pC
22070 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20  ->uc.pCursor);. 
22080 20 20 20 7d 0a 20 20 7d 0a 73 65 65 6b 5f 6e 6f     }.  }.seek_no
22090 74 5f 66 6f 75 6e 64 3a 0a 20 20 61 73 73 65 72  t_found:.  asser
220a0 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a  t( pOp->p2>0 );.
220b0 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
220c0 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69  n(res!=0,2);.  i
220d0 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 67 6f  f( res ){.    go
220e0 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
220f0 20 7d 65 6c 73 65 20 69 66 28 20 65 71 4f 6e 6c   }else if( eqOnl
22100 79 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  y ){.    assert(
22110 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d   pOp[1].opcode==
22120 4f 50 5f 49 64 78 4c 54 20 7c 7c 20 70 4f 70 5b  OP_IdxLT || pOp[
22130 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  1].opcode==OP_Id
22140 78 47 54 20 29 3b 0a 20 20 20 20 70 4f 70 2b 2b  xGT );.    pOp++
22150 3b 20 2f 2a 20 53 6b 69 70 20 74 68 65 20 4f 50  ; /* Skip the OP
22160 5f 49 64 78 4c 74 20 6f 72 20 4f 50 5f 49 64 78  _IdxLt or OP_Idx
22170 47 54 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20  GT that follows 
22180 2a 2f 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  */.  }.  break;.
22190 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  }../* Opcode: Se
221a0 65 6b 48 69 74 20 50 31 20 50 32 20 2a 20 2a 20  ekHit P1 P2 * * 
221b0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 73  *.** Synopsis: s
221c0 65 65 6b 48 69 74 3d 50 32 0a 2a 2a 0a 2a 2a 20  eekHit=P2.**.** 
221d0 53 65 74 20 74 68 65 20 73 65 65 6b 48 69 74 20  Set the seekHit 
221e0 66 6c 61 67 20 6f 6e 20 63 75 72 73 6f 72 20 50  flag on cursor P
221f0 31 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69  1 to the value i
22200 6e 20 50 32 2e 0a 2a 2a 20 54 68 65 20 73 65 65  n P2..** The see
22210 6b 48 69 74 20 66 6c 61 67 20 69 73 20 75 73 65  kHit flag is use
22220 64 20 62 79 20 74 68 65 20 49 66 4e 6f 48 6f 70  d by the IfNoHop
22230 65 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  e opcode..**.** 
22240 50 31 20 6d 75 73 74 20 62 65 20 61 20 76 61 6c  P1 must be a val
22250 69 64 20 62 2d 74 72 65 65 20 63 75 72 73 6f 72  id b-tree cursor
22260 2e 20 20 50 32 20 6d 75 73 74 20 62 65 20 61 20  .  P2 must be a 
22270 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2c 0a 2a  boolean value,.*
22280 2a 20 65 69 74 68 65 72 20 30 20 6f 72 20 31 2e  * either 0 or 1.
22290 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b  .*/.case OP_Seek
222a0 48 69 74 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  Hit: {.  VdbeCur
222b0 73 6f 72 20 2a 70 43 3b 0a 20 20 61 73 73 65 72  sor *pC;.  asser
222c0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
222d0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
222e0 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
222f0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
22300 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
22310 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
22320 70 2d 3e 70 32 3d 3d 30 20 7c 7c 20 70 4f 70 2d  p->p2==0 || pOp-
22330 3e 70 32 3d 3d 31 20 29 3b 0a 20 20 70 43 2d 3e  >p2==1 );.  pC->
22340 73 65 65 6b 48 69 74 20 3d 20 70 4f 70 2d 3e 70  seekHit = pOp->p
22350 32 20 26 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a  2 & 1;.  break;.
22360 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6f  }../* Opcode: Fo
22370 75 6e 64 20 50 31 20 50 32 20 50 33 20 50 34 20  und P1 P2 P3 P4 
22380 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  *.** Synopsis: k
22390 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
223a0 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20  * If P4==0 then 
223b0 72 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64  register P3 hold
223c0 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75  s a blob constru
223d0 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f  cted by MakeReco
223e0 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20  rd.  If.** P4>0 
223f0 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33  then register P3
22400 20 69 73 20 74 68 65 20 66 69 72 73 74 20 6f 66   is the first of
22410 20 50 34 20 72 65 67 69 73 74 65 72 73 20 74 68   P4 registers th
22420 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63  at form an unpac
22430 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a  ked.** record..*
22440 2a 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69  *.** Cursor P1 i
22450 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74  s on an index bt
22460 72 65 65 2e 20 20 49 66 20 74 68 65 20 72 65 63  ree.  If the rec
22470 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64 20 62  ord identified b
22480 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 69  y P3 and P4.** i
22490 73 20 61 20 70 72 65 66 69 78 20 6f 66 20 61 6e  s a prefix of an
224a0 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74 68  y entry in P1 th
224b0 65 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d 61 64  en a jump is mad
224c0 65 20 74 6f 20 50 32 20 61 6e 64 0a 2a 2a 20 50  e to P2 and.** P
224d0 31 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69  1 is left pointi
224e0 6e 67 20 61 74 20 74 68 65 20 6d 61 74 63 68 69  ng at the matchi
224f0 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20  ng entry..**.** 
22500 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c  This operation l
22510 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
22520 20 69 6e 20 61 20 73 74 61 74 65 20 77 68 65 72   in a state wher
22530 65 20 69 74 20 63 61 6e 20 62 65 0a 2a 2a 20 61  e it can be.** a
22540 64 76 61 6e 63 65 64 20 69 6e 20 74 68 65 20 66  dvanced in the f
22550 6f 72 77 61 72 64 20 64 69 72 65 63 74 69 6f 6e  orward direction
22560 2e 20 20 54 68 65 20 4e 65 78 74 20 69 6e 73 74  .  The Next inst
22570 72 75 63 74 69 6f 6e 20 77 69 6c 6c 20 77 6f 72  ruction will wor
22580 6b 2c 0a 2a 2a 20 62 75 74 20 6e 6f 74 20 74 68  k,.** but not th
22590 65 20 50 72 65 76 20 69 6e 73 74 72 75 63 74 69  e Prev instructi
225a0 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  on..**.** See al
225b0 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f  so: NotFound, No
225c0 43 6f 6e 66 6c 69 63 74 2c 20 4e 6f 74 45 78 69  Conflict, NotExi
225d0 73 74 73 2e 20 53 65 65 6b 47 65 0a 2a 2f 0a 2f  sts. SeekGe.*/./
225e0 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 46 6f 75  * Opcode: NotFou
225f0 6e 64 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  nd P1 P2 P3 P4 *
22600 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
22610 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
22620 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20 72   If P4==0 then r
22630 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73  egister P3 holds
22640 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63   a blob construc
22650 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72  ted by MakeRecor
22660 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74  d.  If.** P4>0 t
22670 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20  hen register P3 
22680 69 73 20 74 68 65 20 66 69 72 73 74 20 6f 66 20  is the first of 
22690 50 34 20 72 65 67 69 73 74 65 72 73 20 74 68 61  P4 registers tha
226a0 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  t form an unpack
226b0 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a  ed.** record..**
226c0 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69   .** Cursor P1 i
226d0 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74  s on an index bt
226e0 72 65 65 2e 20 20 49 66 20 74 68 65 20 72 65 63  ree.  If the rec
226f0 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64 20 62  ord identified b
22700 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 69  y P3 and P4.** i
22710 73 20 6e 6f 74 20 74 68 65 20 70 72 65 66 69 78  s not the prefix
22720 20 6f 66 20 61 6e 79 20 65 6e 74 72 79 20 69 6e   of any entry in
22730 20 50 31 20 74 68 65 6e 20 61 20 6a 75 6d 70 20   P1 then a jump 
22740 69 73 20 6d 61 64 65 20 74 6f 20 50 32 2e 20 20  is made to P2.  
22750 49 66 20 50 31 20 0a 2a 2a 20 64 6f 65 73 20 63  If P1 .** does c
22760 6f 6e 74 61 69 6e 20 61 6e 20 65 6e 74 72 79 20  ontain an entry 
22770 77 68 6f 73 65 20 70 72 65 66 69 78 20 6d 61 74  whose prefix mat
22780 63 68 65 73 20 74 68 65 20 50 33 2f 50 34 20 72  ches the P3/P4 r
22790 65 63 6f 72 64 20 74 68 65 6e 20 63 6f 6e 74 72  ecord then contr
227a0 6f 6c 0a 2a 2a 20 66 61 6c 6c 73 20 74 68 72 6f  ol.** falls thro
227b0 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
227c0 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 6e 64 20  instruction and 
227d0 50 31 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74  P1 is left point
227e0 69 6e 67 20 61 74 20 74 68 65 0a 2a 2a 20 6d 61  ing at the.** ma
227f0 74 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a  tching entry..**
22800 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69  .** This operati
22810 6f 6e 20 6c 65 61 76 65 73 20 74 68 65 20 63 75  on leaves the cu
22820 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20  rsor in a state 
22830 77 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74 20  where it cannot 
22840 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20 69  be.** advanced i
22850 6e 20 65 69 74 68 65 72 20 64 69 72 65 63 74 69  n either directi
22860 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  on.  In other wo
22870 72 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61 6e  rds, the Next an
22880 64 20 50 72 65 76 0a 2a 2a 20 6f 70 63 6f 64 65  d Prev.** opcode
22890 73 20 64 6f 20 6e 6f 74 20 77 6f 72 6b 20 61 66  s do not work af
228a0 74 65 72 20 74 68 69 73 20 6f 70 65 72 61 74 69  ter this operati
228b0 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  on..**.** See al
228c0 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78  so: Found, NotEx
228d0 69 73 74 73 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74  ists, NoConflict
228e0 2c 20 49 66 4e 6f 48 6f 70 65 0a 2a 2f 0a 2f 2a  , IfNoHope.*/./*
228f0 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 48 6f 70   Opcode: IfNoHop
22900 65 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  e P1 P2 P3 P4 *.
22910 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
22920 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
22930 52 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74  Register P3 is t
22940 68 65 20 66 69 72 73 74 20 6f 66 20 50 34 20 72  he first of P4 r
22950 65 67 69 73 74 65 72 73 20 74 68 61 74 20 66 6f  egisters that fo
22960 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a  rm an unpacked.*
22970 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a 20  * record..**.** 
22980 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20  Cursor P1 is on 
22990 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20  an index btree. 
229a0 20 49 66 20 74 68 65 20 73 65 65 6b 48 69 74 20   If the seekHit 
229b0 66 6c 61 67 20 69 73 20 73 65 74 20 6f 6e 20 50  flag is set on P
229c0 31 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 69 73 20  1, then.** this 
229d0 6f 70 63 6f 64 65 20 69 73 20 61 20 6e 6f 2d 6f  opcode is a no-o
229e0 70 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 73  p.  But if the s
229f0 65 65 6b 48 69 74 20 66 6c 61 67 20 6f 66 20 50  eekHit flag of P
22a00 31 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e  1 is clear, then
22a10 0a 2a 2a 20 63 68 65 63 6b 20 74 6f 20 73 65 65  .** check to see
22a20 20 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 79   if there is any
22a30 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74 68 61   entry in P1 tha
22a40 74 20 6d 61 74 63 68 65 73 20 74 68 65 0a 2a 2a  t matches the.**
22a50 20 70 72 65 66 69 78 20 69 64 65 6e 74 69 66 69   prefix identifi
22a60 65 64 20 62 79 20 50 33 20 61 6e 64 20 50 34 2e  ed by P3 and P4.
22a70 20 20 49 66 20 6e 6f 20 65 6e 74 72 79 20 6d 61    If no entry ma
22a80 74 63 68 65 73 20 74 68 65 20 70 72 65 66 69 78  tches the prefix
22a90 2c 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 50 32 2e  ,.** jump to P2.
22aa0 20 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c    Otherwise fall
22ab0 20 74 68 72 6f 75 67 68 2e 0a 2a 2a 0a 2a 2a 20   through..**.** 
22ac0 54 68 69 73 20 6f 70 63 6f 64 65 20 62 65 68 61  This opcode beha
22ad0 76 65 73 20 6c 69 6b 65 20 4f 50 5f 4e 6f 74 46  ves like OP_NotF
22ae0 6f 75 6e 64 20 69 66 20 74 68 65 20 73 65 65 6b  ound if the seek
22af0 48 69 74 0a 2a 2a 20 66 6c 61 67 20 69 73 20 63  Hit.** flag is c
22b00 6c 65 61 72 20 61 6e 64 20 69 74 20 62 65 68 61  lear and it beha
22b10 76 65 73 20 6c 69 6b 65 20 4f 50 5f 4e 6f 6f 70  ves like OP_Noop
22b20 20 69 66 20 74 68 65 20 73 65 65 6b 48 69 74 20   if the seekHit 
22b30 66 6c 61 67 20 69 73 20 73 65 74 2e 0a 2a 2a 0a  flag is set..**.
22b40 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
22b50 73 20 75 73 65 64 20 69 6e 20 49 4e 20 63 6c 61  s used in IN cla
22b60 75 73 65 20 70 72 6f 63 65 73 73 69 6e 67 20 66  use processing f
22b70 6f 72 20 61 20 6d 75 6c 74 69 2d 63 6f 6c 75 6d  or a multi-colum
22b80 6e 20 6b 65 79 2e 0a 2a 2a 20 49 66 20 61 6e 20  n key..** If an 
22b90 49 4e 20 63 6c 61 75 73 65 20 69 73 20 61 74 74  IN clause is att
22ba0 61 63 68 65 64 20 74 6f 20 61 6e 20 65 6c 65 6d  ached to an elem
22bb0 65 6e 74 20 6f 66 20 74 68 65 20 6b 65 79 20 6f  ent of the key o
22bc0 74 68 65 72 20 74 68 61 6e 20 74 68 65 0a 2a 2a  ther than the.**
22bd0 20 6c 65 66 74 2d 6d 6f 73 74 20 65 6c 65 6d 65   left-most eleme
22be0 6e 74 2c 20 61 6e 64 20 69 66 20 74 68 65 72 65  nt, and if there
22bf0 20 61 72 65 20 6e 6f 20 6d 61 74 63 68 65 73 20   are no matches 
22c00 6f 6e 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  on the most rece
22c10 6e 74 0a 2a 2a 20 73 65 65 6b 20 6f 76 65 72 20  nt.** seek over 
22c20 74 68 65 20 77 68 6f 6c 65 20 6b 65 79 2c 20 74  the whole key, t
22c30 68 65 6e 20 69 74 20 6d 69 67 68 74 20 62 65 20  hen it might be 
22c40 74 68 61 74 20 6f 6e 65 20 6f 66 20 74 68 65 20  that one of the 
22c50 6b 65 79 20 65 6c 65 6d 65 6e 74 0a 2a 2a 20 74  key element.** t
22c60 6f 20 74 68 65 20 6c 65 66 74 20 69 73 20 70 72  o the left is pr
22c70 6f 68 69 62 69 74 69 6e 67 20 61 20 6d 61 74 63  ohibiting a matc
22c80 68 2c 20 61 6e 64 20 68 65 6e 63 65 20 74 68 65  h, and hence the
22c90 72 65 20 69 73 20 22 6e 6f 20 68 6f 70 65 22 20  re is "no hope" 
22ca0 6f 66 0a 2a 2a 20 61 6e 79 20 6d 61 74 63 68 20  of.** any match 
22cb0 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 68 6f  regardless of ho
22cc0 77 20 6d 61 6e 79 20 49 4e 20 63 6c 61 75 73 65  w many IN clause
22cd0 20 65 6c 65 6d 65 6e 74 73 20 61 72 65 20 63 68   elements are ch
22ce0 65 63 6b 65 64 2e 0a 2a 2a 20 49 6e 20 73 75 63  ecked..** In suc
22cf0 68 20 61 20 63 61 73 65 2c 20 77 65 20 61 62 61  h a case, we aba
22d00 6e 64 6f 6e 20 74 68 65 20 49 4e 20 63 6c 61 75  ndon the IN clau
22d10 73 65 20 73 65 61 72 63 68 20 65 61 72 6c 79 2c  se search early,
22d20 20 75 73 69 6e 67 20 74 68 69 73 0a 2a 2a 20 6f   using this.** o
22d30 70 63 6f 64 65 2e 20 20 54 68 65 20 6f 70 63 6f  pcode.  The opco
22d40 64 65 20 6e 61 6d 65 20 63 6f 6d 65 73 20 66 72  de name comes fr
22d50 6f 6d 20 74 68 65 20 66 61 63 74 20 74 68 61 74  om the fact that
22d60 20 74 68 65 0a 2a 2a 20 6a 75 6d 70 20 69 73 20   the.** jump is 
22d70 74 61 6b 65 6e 20 69 66 20 74 68 65 72 65 20 69  taken if there i
22d80 73 20 22 6e 6f 20 68 6f 70 65 22 20 6f 66 20 61  s "no hope" of a
22d90 63 68 69 65 76 69 6e 67 20 61 20 6d 61 74 63 68  chieving a match
22da0 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
22db0 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b  : NotFound, Seek
22dc0 48 69 74 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  Hit.*/./* Opcode
22dd0 3a 20 4e 6f 43 6f 6e 66 6c 69 63 74 20 50 31 20  : NoConflict P1 
22de0 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
22df0 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
22e00 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  @P4].**.** If P4
22e10 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74 65  ==0 then registe
22e20 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f  r P3 holds a blo
22e30 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79  b constructed by
22e40 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66   MakeRecord.  If
22e50 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65  .** P4>0 then re
22e60 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65  gister P3 is the
22e70 20 66 69 72 73 74 20 6f 66 20 50 34 20 72 65 67   first of P4 reg
22e80 69 73 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d  isters that form
22e90 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20   an unpacked.** 
22ea0 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43  record..** .** C
22eb0 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61  ursor P1 is on a
22ec0 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20  n index btree.  
22ed0 49 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 64  If the record id
22ee0 65 6e 74 69 66 69 65 64 20 62 79 20 50 33 20 61  entified by P3 a
22ef0 6e 64 20 50 34 0a 2a 2a 20 63 6f 6e 74 61 69 6e  nd P4.** contain
22f00 73 20 61 6e 79 20 4e 55 4c 4c 20 76 61 6c 75 65  s any NULL value
22f10 2c 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  , jump immediate
22f20 6c 79 20 74 6f 20 50 32 2e 20 20 49 66 20 61 6c  ly to P2.  If al
22f30 6c 20 74 65 72 6d 73 20 6f 66 20 74 68 65 0a 2a  l terms of the.*
22f40 2a 20 72 65 63 6f 72 64 20 61 72 65 20 6e 6f 74  * record are not
22f50 2d 4e 55 4c 4c 20 74 68 65 6e 20 61 20 63 68 65  -NULL then a che
22f60 63 6b 20 69 73 20 64 6f 6e 65 20 74 6f 20 64 65  ck is done to de
22f70 74 65 72 6d 69 6e 65 20 69 66 20 61 6e 79 20 72  termine if any r
22f80 6f 77 20 69 6e 20 74 68 65 0a 2a 2a 20 50 31 20  ow in the.** P1 
22f90 69 6e 64 65 78 20 62 74 72 65 65 20 68 61 73 20  index btree has 
22fa0 61 20 6d 61 74 63 68 69 6e 67 20 6b 65 79 20 70  a matching key p
22fb0 72 65 66 69 78 2e 20 20 49 66 20 74 68 65 72 65  refix.  If there
22fc0 20 61 72 65 20 6e 6f 20 6d 61 74 63 68 65 73 2c   are no matches,
22fd0 20 6a 75 6d 70 0a 2a 2a 20 69 6d 6d 65 64 69 61   jump.** immedia
22fe0 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 49 66 20  tely to P2.  If 
22ff0 74 68 65 72 65 20 69 73 20 61 20 6d 61 74 63 68  there is a match
23000 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 61  , fall through a
23010 6e 64 20 6c 65 61 76 65 20 74 68 65 20 50 31 0a  nd leave the P1.
23020 2a 2a 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69  ** cursor pointi
23030 6e 67 20 74 6f 20 74 68 65 20 6d 61 74 63 68 69  ng to the matchi
23040 6e 67 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 54 68  ng row..**.** Th
23050 69 73 20 6f 70 63 6f 64 65 20 69 73 20 73 69 6d  is opcode is sim
23060 69 6c 61 72 20 74 6f 20 4f 50 5f 4e 6f 74 46 6f  ilar to OP_NotFo
23070 75 6e 64 20 77 69 74 68 20 74 68 65 20 65 78 63  und with the exc
23080 65 70 74 69 6f 6e 73 20 74 68 61 74 20 74 68 65  eptions that the
23090 0a 2a 2a 20 62 72 61 6e 63 68 20 69 73 20 61 6c  .** branch is al
230a0 77 61 79 73 20 74 61 6b 65 6e 20 69 66 20 61 6e  ways taken if an
230b0 79 20 70 61 72 74 20 6f 66 20 74 68 65 20 73 65  y part of the se
230c0 61 72 63 68 20 6b 65 79 20 69 6e 70 75 74 20 69  arch key input i
230d0 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68  s NULL..**.** Th
230e0 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61  is operation lea
230f0 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 69  ves the cursor i
23100 6e 20 61 20 73 74 61 74 65 20 77 68 65 72 65 20  n a state where 
23110 69 74 20 63 61 6e 6e 6f 74 20 62 65 0a 2a 2a 20  it cannot be.** 
23120 61 64 76 61 6e 63 65 64 20 69 6e 20 65 69 74 68  advanced in eith
23130 65 72 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49  er direction.  I
23140 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
23150 68 65 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76  he Next and Prev
23160 0a 2a 2a 20 6f 70 63 6f 64 65 73 20 64 6f 20 6e  .** opcodes do n
23170 6f 74 20 77 6f 72 6b 20 61 66 74 65 72 20 74 68  ot work after th
23180 69 73 20 6f 70 65 72 61 74 69 6f 6e 2e 0a 2a 2a  is operation..**
23190 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f  .** See also: No
231a0 74 46 6f 75 6e 64 2c 20 46 6f 75 6e 64 2c 20 4e  tFound, Found, N
231b0 6f 74 45 78 69 73 74 73 0a 2a 2f 0a 63 61 73 65  otExists.*/.case
231c0 20 4f 50 5f 49 66 4e 6f 48 6f 70 65 3a 20 7b 20   OP_IfNoHope: { 
231d0 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
231e0 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
231f0 20 2a 70 43 3b 0a 20 20 61 73 73 65 72 74 28 20   *pC;.  assert( 
23200 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
23210 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
23220 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
23230 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
23240 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
23250 0a 20 20 69 66 28 20 70 43 2d 3e 73 65 65 6b 48  .  if( pC->seekH
23260 69 74 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f 2a  it ) break;.  /*
23270 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e   Fall through in
23280 74 6f 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 2a  to OP_NotFound *
23290 2f 0a 7d 0a 63 61 73 65 20 4f 50 5f 4e 6f 43 6f  /.}.case OP_NoCo
232a0 6e 66 6c 69 63 74 3a 20 20 20 20 20 2f 2a 20 6a  nflict:     /* j
232b0 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  ump, in3 */.case
232c0 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 3a 20 20 20   OP_NotFound:   
232d0 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
232e0 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6f 75 6e   */.case OP_Foun
232f0 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  d: {        /* j
23300 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e  ump, in3 */.  in
23310 74 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 3b  t alreadyExists;
23320 0a 20 20 69 6e 74 20 74 61 6b 65 4a 75 6d 70 3b  .  int takeJump;
23330 0a 20 20 69 6e 74 20 69 69 3b 0a 20 20 56 64 62  .  int ii;.  Vdb
23340 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69  eCursor *pC;.  i
23350 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b  nt res;.  Unpack
23360 65 64 52 65 63 6f 72 64 20 2a 70 46 72 65 65 3b  edRecord *pFree;
23370 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  .  UnpackedRecor
23380 64 20 2a 70 49 64 78 4b 65 79 3b 0a 20 20 55 6e  d *pIdxKey;.  Un
23390 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a  packedRecord r;.
233a0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
233b0 45 53 54 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f  EST.  if( pOp->o
233c0 70 63 6f 64 65 21 3d 4f 50 5f 4e 6f 43 6f 6e 66  pcode!=OP_NoConf
233d0 6c 69 63 74 20 29 20 73 71 6c 69 74 65 33 5f 66  lict ) sqlite3_f
233e0 6f 75 6e 64 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65  ound_count++;.#e
233f0 6e 64 69 66 0a 0a 20 20 61 73 73 65 72 74 28 20  ndif..  assert( 
23400 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
23410 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
23420 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
23430 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
23440 54 33 32 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  T32 );.  pC = p-
23450 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
23460 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
23470 20 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54   );.#ifdef SQLIT
23480 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65  E_DEBUG.  pC->se
23490 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f  ekOp = pOp->opco
234a0 64 65 3b 0a 23 65 6e 64 69 66 0a 20 20 70 49 6e  de;.#endif.  pIn
234b0 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
234c0 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  3];.  assert( pC
234d0 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
234e0 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61  YPE_BTREE );.  a
234f0 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43  ssert( pC->uc.pC
23500 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73  ursor!=0 );.  as
23510 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
23520 65 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f  e==0 );.  if( pO
23530 70 2d 3e 70 34 2e 69 3e 30 20 29 7b 0a 20 20 20  p->p4.i>0 ){.   
23540 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43   r.pKeyInfo = pC
23550 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20  ->pKeyInfo;.    
23560 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29  r.nField = (u16)
23570 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 72  pOp->p4.i;.    r
23580 2e 61 4d 65 6d 20 3d 20 70 49 6e 33 3b 0a 23 69  .aMem = pIn3;.#i
23590 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
235a0 47 0a 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20  G.    for(ii=0; 
235b0 69 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 69 2b  ii<r.nField; ii+
235c0 2b 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  +){.      assert
235d0 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e  ( memIsValid(&r.
235e0 61 4d 65 6d 5b 69 69 5d 29 20 29 3b 0a 20 20 20  aMem[ii]) );.   
235f0 20 20 20 61 73 73 65 72 74 28 20 28 72 2e 61 4d     assert( (r.aM
23600 65 6d 5b 69 69 5d 2e 66 6c 61 67 73 20 26 20 4d  em[ii].flags & M
23610 45 4d 5f 5a 65 72 6f 29 3d 3d 30 20 7c 7c 20 72  EM_Zero)==0 || r
23620 2e 61 4d 65 6d 5b 69 69 5d 2e 6e 3d 3d 30 20 29  .aMem[ii].n==0 )
23630 3b 0a 20 20 20 20 20 20 69 66 28 20 69 69 20 29  ;.      if( ii )
23640 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
23650 70 4f 70 2d 3e 70 33 2b 69 69 2c 20 26 72 2e 61  pOp->p3+ii, &r.a
23660 4d 65 6d 5b 69 69 5d 29 3b 0a 20 20 20 20 7d 0a  Mem[ii]);.    }.
23670 23 65 6e 64 69 66 0a 20 20 20 20 70 49 64 78 4b  #endif.    pIdxK
23680 65 79 20 3d 20 26 72 3b 0a 20 20 20 20 70 46 72  ey = &r;.    pFr
23690 65 65 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b  ee = 0;.  }else{
236a0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e  .    assert( pIn
236b0 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42  3->flags & MEM_B
236c0 6c 6f 62 20 29 3b 0a 20 20 20 20 72 63 20 3d 20  lob );.    rc = 
236d0 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 33 29  ExpandBlob(pIn3)
236e0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63  ;.    assert( rc
236f0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72  ==SQLITE_OK || r
23700 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20  c==SQLITE_NOMEM 
23710 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20  );.    if( rc ) 
23720 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20  goto no_mem;.   
23730 20 70 46 72 65 65 20 3d 20 70 49 64 78 4b 65 79   pFree = pIdxKey
23740 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 6c   = sqlite3VdbeAl
23750 6c 6f 63 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  locUnpackedRecor
23760 64 28 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 29 3b  d(pC->pKeyInfo);
23770 0a 20 20 20 20 69 66 28 20 70 49 64 78 4b 65 79  .    if( pIdxKey
23780 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
23790 6d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  m;.    sqlite3Vd
237a0 62 65 52 65 63 6f 72 64 55 6e 70 61 63 6b 28 70  beRecordUnpack(p
237b0 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 70 49 6e  C->pKeyInfo, pIn
237c0 33 2d 3e 6e 2c 20 70 49 6e 33 2d 3e 7a 2c 20 70  3->n, pIn3->z, p
237d0 49 64 78 4b 65 79 29 3b 0a 20 20 7d 0a 20 20 70  IdxKey);.  }.  p
237e0 49 64 78 4b 65 79 2d 3e 64 65 66 61 75 6c 74 5f  IdxKey->default_
237f0 72 63 20 3d 20 30 3b 0a 20 20 74 61 6b 65 4a 75  rc = 0;.  takeJu
23800 6d 70 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 4f  mp = 0;.  if( pO
23810 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f  p->opcode==OP_No
23820 43 6f 6e 66 6c 69 63 74 20 29 7b 0a 20 20 20 20  Conflict ){.    
23830 2f 2a 20 46 6f 72 20 74 68 65 20 4f 50 5f 4e 6f  /* For the OP_No
23840 43 6f 6e 66 6c 69 63 74 20 6f 70 63 6f 64 65 2c  Conflict opcode,
23850 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69   take the jump i
23860 66 20 61 6e 79 20 6f 66 20 74 68 65 0a 20 20 20  f any of the.   
23870 20 2a 2a 20 69 6e 70 75 74 20 66 69 65 6c 64 73   ** input fields
23880 20 61 72 65 20 4e 55 4c 4c 2c 20 73 69 6e 63 65   are NULL, since
23890 20 61 6e 79 20 6b 65 79 20 77 69 74 68 20 61 20   any key with a 
238a0 4e 55 4c 4c 20 77 69 6c 6c 20 6e 6f 74 0a 20 20  NULL will not.  
238b0 20 20 2a 2a 20 63 6f 6e 66 6c 69 63 74 20 2a 2f    ** conflict */
238c0 0a 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69  .    for(ii=0; i
238d0 69 3c 70 49 64 78 4b 65 79 2d 3e 6e 46 69 65 6c  i<pIdxKey->nFiel
238e0 64 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20  d; ii++){.      
238f0 69 66 28 20 70 49 64 78 4b 65 79 2d 3e 61 4d 65  if( pIdxKey->aMe
23900 6d 5b 69 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45  m[ii].flags & ME
23910 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 20 20  M_Null ){.      
23920 20 20 74 61 6b 65 4a 75 6d 70 20 3d 20 31 3b 0a    takeJump = 1;.
23930 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
23940 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
23950 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
23960 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
23970 65 64 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  ed(pC->uc.pCurso
23980 72 2c 20 70 49 64 78 4b 65 79 2c 20 30 2c 20 30  r, pIdxKey, 0, 0
23990 2c 20 26 72 65 73 29 3b 0a 20 20 69 66 28 20 70  , &res);.  if( p
239a0 46 72 65 65 20 29 20 73 71 6c 69 74 65 33 44 62  Free ) sqlite3Db
239b0 46 72 65 65 4e 4e 28 64 62 2c 20 70 46 72 65 65  FreeNN(db, pFree
239c0 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c  );.  if( rc!=SQL
239d0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 67 6f  ITE_OK ){.    go
239e0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
239f0 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 70 43 2d  error;.  }.  pC-
23a00 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 72 65  >seekResult = re
23a10 73 3b 0a 20 20 61 6c 72 65 61 64 79 45 78 69 73  s;.  alreadyExis
23a20 74 73 20 3d 20 28 72 65 73 3d 3d 30 29 3b 0a 20  ts = (res==0);. 
23a30 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31   pC->nullRow = 1
23a40 2d 61 6c 72 65 61 64 79 45 78 69 73 74 73 3b 0a  -alreadyExists;.
23a50 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
23a60 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  veto = 0;.  pC->
23a70 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
23a80 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28  CHE_STALE;.  if(
23a90 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
23aa0 5f 46 6f 75 6e 64 20 29 7b 0a 20 20 20 20 56 64  _Found ){.    Vd
23ab0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 61 6c  beBranchTaken(al
23ac0 72 65 61 64 79 45 78 69 73 74 73 21 3d 30 2c 32  readyExists!=0,2
23ad0 29 3b 0a 20 20 20 20 69 66 28 20 61 6c 72 65 61  );.    if( alrea
23ae0 64 79 45 78 69 73 74 73 20 29 20 67 6f 74 6f 20  dyExists ) goto 
23af0 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65  jump_to_p2;.  }e
23b00 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61  lse{.    VdbeBra
23b10 6e 63 68 54 61 6b 65 6e 28 74 61 6b 65 4a 75 6d  nchTaken(takeJum
23b20 70 7c 7c 61 6c 72 65 61 64 79 45 78 69 73 74 73  p||alreadyExists
23b30 3d 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20  ==0,2);.    if( 
23b40 74 61 6b 65 4a 75 6d 70 20 7c 7c 20 21 61 6c 72  takeJump || !alr
23b50 65 61 64 79 45 78 69 73 74 73 20 29 20 67 6f 74  eadyExists ) got
23b60 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
23b70 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
23b80 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 52 6f 77   Opcode: SeekRow
23b90 69 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  id P1 P2 P3 * *.
23ba0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74  ** Synopsis: int
23bb0 6b 65 79 3d 72 5b 50 33 5d 0a 2a 2a 0a 2a 2a 20  key=r[P3].**.** 
23bc0 50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78 20  P1 is the index 
23bd0 6f 66 20 61 20 63 75 72 73 6f 72 20 6f 70 65 6e  of a cursor open
23be0 20 6f 6e 20 61 6e 20 53 51 4c 20 74 61 62 6c 65   on an SQL table
23bf0 20 62 74 72 65 65 20 28 77 69 74 68 20 69 6e 74   btree (with int
23c00 65 67 65 72 0a 2a 2a 20 6b 65 79 73 29 2e 20 20  eger.** keys).  
23c10 49 66 20 72 65 67 69 73 74 65 72 20 50 33 20 64  If register P3 d
23c20 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20  oes not contain 
23c30 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20 69 66  an integer or if
23c40 20 50 31 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20   P1 does not.** 
23c50 63 6f 6e 74 61 69 6e 20 61 20 72 65 63 6f 72 64  contain a record
23c60 20 77 69 74 68 20 72 6f 77 69 64 20 50 33 20 74   with rowid P3 t
23c70 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  hen jump immedia
23c80 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 0a 2a 2a  tely to P2.  .**
23c90 20 4f 72 2c 20 69 66 20 50 32 20 69 73 20 30 2c   Or, if P2 is 0,
23ca0 20 72 61 69 73 65 20 61 6e 20 53 51 4c 49 54 45   raise an SQLITE
23cb0 5f 43 4f 52 52 55 50 54 20 65 72 72 6f 72 2e 20  _CORRUPT error. 
23cc0 49 66 20 50 31 20 64 6f 65 73 20 63 6f 6e 74 61  If P1 does conta
23cd0 69 6e 0a 2a 2a 20 61 20 72 65 63 6f 72 64 20 77  in.** a record w
23ce0 69 74 68 20 72 6f 77 69 64 20 50 33 20 74 68 65  ith rowid P3 the
23cf0 6e 20 0a 2a 2a 20 6c 65 61 76 65 20 74 68 65 20  n .** leave the 
23d00 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20  cursor pointing 
23d10 61 74 20 74 68 61 74 20 72 65 63 6f 72 64 20 61  at that record a
23d20 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  nd fall through 
23d30 74 6f 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69  to the next.** i
23d40 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
23d50 2a 20 54 68 65 20 4f 50 5f 4e 6f 74 45 78 69 73  * The OP_NotExis
23d60 74 73 20 6f 70 63 6f 64 65 20 70 65 72 66 6f 72  ts opcode perfor
23d70 6d 73 20 74 68 65 20 73 61 6d 65 20 6f 70 65 72  ms the same oper
23d80 61 74 69 6f 6e 2c 20 62 75 74 20 77 69 74 68 20  ation, but with 
23d90 4f 50 5f 4e 6f 74 45 78 69 73 74 73 0a 2a 2a 20  OP_NotExists.** 
23da0 74 68 65 20 50 33 20 72 65 67 69 73 74 65 72 20  the P3 register 
23db0 6d 75 73 74 20 62 65 20 67 75 61 72 61 6e 74 65  must be guarante
23dc0 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 61 6e  ed to contain an
23dd0 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20   integer value. 
23de0 20 57 69 74 68 20 74 68 69 73 0a 2a 2a 20 6f 70   With this.** op
23df0 63 6f 64 65 2c 20 72 65 67 69 73 74 65 72 20 50  code, register P
23e00 33 20 6d 69 67 68 74 20 6e 6f 74 20 63 6f 6e 74  3 might not cont
23e10 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a  ain an integer..
23e20 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e 6f 74  **.** The OP_Not
23e30 46 6f 75 6e 64 20 6f 70 63 6f 64 65 20 70 65 72  Found opcode per
23e40 66 6f 72 6d 73 20 74 68 65 20 73 61 6d 65 20 6f  forms the same o
23e50 70 65 72 61 74 69 6f 6e 20 6f 6e 20 69 6e 64 65  peration on inde
23e60 78 20 62 74 72 65 65 73 0a 2a 2a 20 28 77 69 74  x btrees.** (wit
23e70 68 20 61 72 62 69 74 72 61 72 79 20 6d 75 6c 74  h arbitrary mult
23e80 69 2d 76 61 6c 75 65 20 6b 65 79 73 29 2e 0a 2a  i-value keys)..*
23e90 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
23ea0 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73   leaves the curs
23eb0 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20 77 68  or in a state wh
23ec0 65 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65  ere it cannot be
23ed0 20 61 64 76 61 6e 63 65 64 0a 2a 2a 20 69 6e 20   advanced.** in 
23ee0 65 69 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e  either direction
23ef0 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
23f00 73 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20  s, the Next and 
23f10 50 72 65 76 20 6f 70 63 6f 64 65 73 20 77 69 6c  Prev opcodes wil
23f20 6c 0a 2a 2a 20 6e 6f 74 20 77 6f 72 6b 20 66 6f  l.** not work fo
23f30 6c 6c 6f 77 69 6e 67 20 74 68 69 73 20 6f 70 63  llowing this opc
23f40 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ode..**.** See a
23f50 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
23f60 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74  ound, NoConflict
23f70 2c 20 53 65 65 6b 52 6f 77 69 64 0a 2a 2f 0a 2f  , SeekRowid.*/./
23f80 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 45 78 69  * Opcode: NotExi
23f90 73 74 73 20 50 31 20 50 32 20 50 33 20 2a 20 2a  sts P1 P2 P3 * *
23fa0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e  .** Synopsis: in
23fb0 74 6b 65 79 3d 72 5b 50 33 5d 0a 2a 2a 0a 2a 2a  tkey=r[P3].**.**
23fc0 20 50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78   P1 is the index
23fd0 20 6f 66 20 61 20 63 75 72 73 6f 72 20 6f 70 65   of a cursor ope
23fe0 6e 20 6f 6e 20 61 6e 20 53 51 4c 20 74 61 62 6c  n on an SQL tabl
23ff0 65 20 62 74 72 65 65 20 28 77 69 74 68 20 69 6e  e btree (with in
24000 74 65 67 65 72 0a 2a 2a 20 6b 65 79 73 29 2e 20  teger.** keys). 
24010 20 50 33 20 69 73 20 61 6e 20 69 6e 74 65 67 65   P3 is an intege
24020 72 20 72 6f 77 69 64 2e 20 20 49 66 20 50 31 20  r rowid.  If P1 
24030 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69 6e  does not contain
24040 20 61 20 72 65 63 6f 72 64 20 77 69 74 68 0a 2a   a record with.*
24050 2a 20 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20  * rowid P3 then 
24060 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
24070 20 74 6f 20 50 32 2e 20 20 4f 72 2c 20 69 66 20   to P2.  Or, if 
24080 50 32 20 69 73 20 30 2c 20 72 61 69 73 65 20 61  P2 is 0, raise a
24090 6e 0a 2a 2a 20 53 51 4c 49 54 45 5f 43 4f 52 52  n.** SQLITE_CORR
240a0 55 50 54 20 65 72 72 6f 72 2e 20 49 66 20 50 31  UPT error. If P1
240b0 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61 20   does contain a 
240c0 72 65 63 6f 72 64 20 77 69 74 68 20 72 6f 77 69  record with rowi
240d0 64 20 50 33 20 74 68 65 6e 20 0a 2a 2a 20 6c 65  d P3 then .** le
240e0 61 76 65 20 74 68 65 20 63 75 72 73 6f 72 20 70  ave the cursor p
240f0 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 61 74 20  ointing at that 
24100 72 65 63 6f 72 64 20 61 6e 64 20 66 61 6c 6c 20  record and fall 
24110 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
24120 65 78 74 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69  ext.** instructi
24130 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50  on..**.** The OP
24140 5f 53 65 65 6b 52 6f 77 69 64 20 6f 70 63 6f 64  _SeekRowid opcod
24150 65 20 70 65 72 66 6f 72 6d 73 20 74 68 65 20 73  e performs the s
24160 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 62 75  ame operation bu
24170 74 20 61 6c 73 6f 20 61 6c 6c 6f 77 73 20 74 68  t also allows th
24180 65 0a 2a 2a 20 50 33 20 72 65 67 69 73 74 65 72  e.** P3 register
24190 20 74 6f 20 63 6f 6e 74 61 69 6e 20 61 20 6e 6f   to contain a no
241a0 6e 2d 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2c  n-integer value,
241b0 20 69 6e 20 77 68 69 63 68 20 63 61 73 65 20 74   in which case t
241c0 68 65 20 6a 75 6d 70 20 69 73 0a 2a 2a 20 61 6c  he jump is.** al
241d0 77 61 79 73 20 74 61 6b 65 6e 2e 20 20 54 68 69  ways taken.  Thi
241e0 73 20 6f 70 63 6f 64 65 20 72 65 71 75 69 72 65  s opcode require
241f0 73 20 74 68 61 74 20 50 33 20 61 6c 77 61 79 73  s that P3 always
24200 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65   contain an inte
24210 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f  ger..**.** The O
24220 50 5f 4e 6f 74 46 6f 75 6e 64 20 6f 70 63 6f 64  P_NotFound opcod
24230 65 20 70 65 72 66 6f 72 6d 73 20 74 68 65 20 73  e performs the s
24240 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 6e  ame operation on
24250 20 69 6e 64 65 78 20 62 74 72 65 65 73 0a 2a 2a   index btrees.**
24260 20 28 77 69 74 68 20 61 72 62 69 74 72 61 72 79   (with arbitrary
24270 20 6d 75 6c 74 69 2d 76 61 6c 75 65 20 6b 65 79   multi-value key
24280 73 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  s)..**.** This o
24290 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65  pcode leaves the
242a0 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61   cursor in a sta
242b0 74 65 20 77 68 65 72 65 20 69 74 20 63 61 6e 6e  te where it cann
242c0 6f 74 20 62 65 20 61 64 76 61 6e 63 65 64 0a 2a  ot be advanced.*
242d0 2a 20 69 6e 20 65 69 74 68 65 72 20 64 69 72 65  * in either dire
242e0 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72  ction.  In other
242f0 20 77 6f 72 64 73 2c 20 74 68 65 20 4e 65 78 74   words, the Next
24300 20 61 6e 64 20 50 72 65 76 20 6f 70 63 6f 64 65   and Prev opcode
24310 73 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 77 6f  s will.** not wo
24320 72 6b 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 69  rk following thi
24330 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  s opcode..**.** 
24340 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
24350 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e   NotFound, NoCon
24360 66 6c 69 63 74 2c 20 53 65 65 6b 52 6f 77 69 64  flict, SeekRowid
24370 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b  .*/.case OP_Seek
24380 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20  Rowid: {        
24390 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
243a0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
243b0 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
243c0 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  rsr;.  int res;.
243d0 20 20 75 36 34 20 69 4b 65 79 3b 0a 0a 20 20 70    u64 iKey;..  p
243e0 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
243f0 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e  >p3];.  if( (pIn
24400 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  3->flags & MEM_I
24410 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a  nt)==0 ){.    /*
24420 20 4d 61 6b 65 20 73 75 72 65 20 70 49 6e 33 2d   Make sure pIn3-
24430 3e 75 2e 69 20 63 6f 6e 74 61 69 6e 73 20 61 20  >u.i contains a 
24440 76 61 6c 69 64 20 69 6e 74 65 67 65 72 20 72 65  valid integer re
24450 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 0a  presentation of.
24460 20 20 20 20 2a 2a 20 74 68 65 20 6b 65 79 20 76      ** the key v
24470 61 6c 75 65 2c 20 62 75 74 20 64 6f 20 6e 6f 74  alue, but do not
24480 20 63 68 61 6e 67 65 20 74 68 65 20 64 61 74 61   change the data
24490 74 79 70 65 20 6f 66 20 74 68 65 20 72 65 67 69  type of the regi
244a0 73 74 65 72 2c 20 61 73 0a 20 20 20 20 2a 2a 20  ster, as.    ** 
244b0 6f 74 68 65 72 20 70 61 72 74 73 20 6f 66 20 74  other parts of t
244c0 68 65 20 70 65 72 70 61 72 65 64 20 73 74 61 74  he perpared stat
244d0 65 6d 65 6e 74 20 6d 69 67 68 74 20 62 65 20 64  ement might be d
244e0 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 0a  epending on the.
244f0 20 20 20 20 2a 2a 20 63 75 72 72 65 6e 74 20 64      ** current d
24500 61 74 61 74 79 70 65 2e 20 2a 2f 0a 20 20 20 20  atatype. */.    
24510 75 31 36 20 6f 72 69 67 46 6c 61 67 73 20 3d 20  u16 origFlags = 
24520 70 49 6e 33 2d 3e 66 6c 61 67 73 3b 0a 20 20 20  pIn3->flags;.   
24530 20 69 6e 74 20 69 73 4e 6f 74 49 6e 74 3b 0a 20   int isNotInt;. 
24540 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79     applyAffinity
24550 28 70 49 6e 33 2c 20 53 51 4c 49 54 45 5f 41 46  (pIn3, SQLITE_AF
24560 46 5f 4e 55 4d 45 52 49 43 2c 20 65 6e 63 6f 64  F_NUMERIC, encod
24570 69 6e 67 29 3b 0a 20 20 20 20 69 73 4e 6f 74 49  ing);.    isNotI
24580 6e 74 20 3d 20 28 70 49 6e 33 2d 3e 66 6c 61 67  nt = (pIn3->flag
24590 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 3b  s & MEM_Int)==0;
245a0 0a 20 20 20 20 70 49 6e 33 2d 3e 66 6c 61 67 73  .    pIn3->flags
245b0 20 3d 20 6f 72 69 67 46 6c 61 67 73 3b 0a 20 20   = origFlags;.  
245c0 20 20 69 66 28 20 69 73 4e 6f 74 49 6e 74 20 29    if( isNotInt )
245d0 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
245e0 3b 0a 20 20 7d 0a 20 20 2f 2a 20 46 61 6c 6c 20  ;.  }.  /* Fall 
245f0 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f  through into OP_
24600 4e 6f 74 45 78 69 73 74 73 20 2a 2f 0a 63 61 73  NotExists */.cas
24610 65 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 3a 20  e OP_NotExists: 
24620 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
24630 2c 20 69 6e 33 20 2a 2f 0a 20 20 70 49 6e 33 20  , in3 */.  pIn3 
24640 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
24650 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 49 6e  ;.  assert( (pIn
24660 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  3->flags & MEM_I
24670 6e 74 29 21 3d 30 20 7c 7c 20 70 4f 70 2d 3e 6f  nt)!=0 || pOp->o
24680 70 63 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b 52 6f  pcode==OP_SeekRo
24690 77 69 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28  wid );.  assert(
246a0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
246b0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
246c0 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
246d0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
246e0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
246f0 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
24700 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b  DEBUG.  pC->seek
24710 4f 70 20 3d 20 4f 50 5f 53 65 65 6b 52 6f 77 69  Op = OP_SeekRowi
24720 64 3b 0a 23 65 6e 64 69 66 0a 20 20 61 73 73 65  d;.#endif.  asse
24730 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  rt( pC->isTable 
24740 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
24750 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
24760 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 70 43  PE_BTREE );.  pC
24770 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75  rsr = pC->uc.pCu
24780 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20  rsor;.  assert( 
24790 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 72 65  pCrsr!=0 );.  re
247a0 73 20 3d 20 30 3b 0a 20 20 69 4b 65 79 20 3d 20  s = 0;.  iKey = 
247b0 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 72 63 20  pIn3->u.i;.  rc 
247c0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
247d0 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72  vetoUnpacked(pCr
247e0 73 72 2c 20 30 2c 20 69 4b 65 79 2c 20 30 2c 20  sr, 0, iKey, 0, 
247f0 26 72 65 73 29 3b 0a 20 20 61 73 73 65 72 74 28  &res);.  assert(
24800 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c   rc==SQLITE_OK |
24810 7c 20 72 65 73 3d 3d 30 20 29 3b 0a 20 20 70 43  | res==0 );.  pC
24820 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d  ->movetoTarget =
24830 20 69 4b 65 79 3b 20 20 2f 2a 20 55 73 65 64 20   iKey;  /* Used 
24840 62 79 20 4f 50 5f 44 65 6c 65 74 65 20 2a 2f 0a  by OP_Delete */.
24850 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
24860 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  0;.  pC->cacheSt
24870 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
24880 4c 45 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72  LE;.  pC->deferr
24890 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
248a0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
248b0 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 70 43 2d  res!=0,2);.  pC-
248c0 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 72 65  >seekResult = re
248d0 73 3b 0a 20 20 69 66 28 20 72 65 73 21 3d 30 20  s;.  if( res!=0 
248e0 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  ){.    assert( r
248f0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a  c==SQLITE_OK );.
24900 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d      if( pOp->p2=
24910 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  =0 ){.      rc =
24920 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f   SQLITE_CORRUPT_
24930 42 4b 50 54 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  BKPT;.    }else{
24940 0a 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  .      goto jump
24950 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a 20 20  _to_p2;.    }.  
24960 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  }.  if( rc ) got
24970 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
24980 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  rror;.  break;.}
24990 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71  ../* Opcode: Seq
249a0 75 65 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20  uence P1 P2 * * 
249b0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
249c0 5b 50 32 5d 3d 63 75 72 73 6f 72 5b 50 31 5d 2e  [P2]=cursor[P1].
249d0 63 74 72 2b 2b 0a 2a 2a 0a 2a 2a 20 46 69 6e 64  ctr++.**.** Find
249e0 20 74 68 65 20 6e 65 78 74 20 61 76 61 69 6c 61   the next availa
249f0 62 6c 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d  ble sequence num
24a00 62 65 72 20 66 6f 72 20 63 75 72 73 6f 72 20 50  ber for cursor P
24a10 31 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20  1..** Write the 
24a20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20  sequence number 
24a30 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
24a40 2e 0a 2a 2a 20 54 68 65 20 73 65 71 75 65 6e 63  ..** The sequenc
24a50 65 20 6e 75 6d 62 65 72 20 6f 6e 20 74 68 65 20  e number on the 
24a60 63 75 72 73 6f 72 20 69 73 20 69 6e 63 72 65 6d  cursor is increm
24a70 65 6e 74 65 64 20 61 66 74 65 72 20 74 68 69 73  ented after this
24a80 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  .** instruction.
24a90 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65    .*/.case OP_Se
24aa0 71 75 65 6e 63 65 3a 20 7b 20 20 20 20 20 20 20  quence: {       
24ab0 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
24ac0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
24ad0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
24ae0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
24af0 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b  ssert( p->apCsr[
24b00 70 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b 0a 20  pOp->p1]!=0 );. 
24b10 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73   assert( p->apCs
24b20 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 65 43 75 72  r[pOp->p1]->eCur
24b30 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f 56 54  Type!=CURTYPE_VT
24b40 41 42 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f  AB );.  pOut = o
24b50 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
24b60 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75   pOp);.  pOut->u
24b70 2e 69 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  .i = p->apCsr[pO
24b80 70 2d 3e 70 31 5d 2d 3e 73 65 71 43 6f 75 6e 74  p->p1]->seqCount
24b90 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  ++;.  break;.}..
24ba0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 77 52  ./* Opcode: NewR
24bb0 6f 77 69 64 20 50 31 20 50 32 20 50 33 20 2a 20  owid P1 P2 P3 * 
24bc0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
24bd0 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a  [P2]=rowid.**.**
24be0 20 47 65 74 20 61 20 6e 65 77 20 69 6e 74 65 67   Get a new integ
24bf0 65 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  er record number
24c00 20 28 61 2e 6b 2e 61 20 22 72 6f 77 69 64 22 29   (a.k.a "rowid")
24c10 20 75 73 65 64 20 61 73 20 74 68 65 20 6b 65 79   used as the key
24c20 20 74 6f 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20   to a table..** 
24c30 54 68 65 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  The record numbe
24c40 72 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75  r is not previou
24c50 73 6c 79 20 75 73 65 64 20 61 73 20 61 20 6b 65  sly used as a ke
24c60 79 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  y in the databas
24c70 65 0a 2a 2a 20 74 61 62 6c 65 20 74 68 61 74 20  e.** table that 
24c80 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74 73  cursor P1 points
24c90 20 74 6f 2e 20 20 54 68 65 20 6e 65 77 20 72 65   to.  The new re
24ca0 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20 77  cord number is w
24cb0 72 69 74 74 65 6e 0a 2a 2a 20 77 72 69 74 74 65  ritten.** writte
24cc0 6e 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  n to register P2
24cd0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 3e 30 20  ..**.** If P3>0 
24ce0 74 68 65 6e 20 50 33 20 69 73 20 61 20 72 65 67  then P3 is a reg
24cf0 69 73 74 65 72 20 69 6e 20 74 68 65 20 72 6f 6f  ister in the roo
24d00 74 20 66 72 61 6d 65 20 6f 66 20 74 68 69 73 20  t frame of this 
24d10 56 44 42 45 20 74 68 61 74 20 68 6f 6c 64 73 20  VDBE that holds 
24d20 0a 2a 2a 20 74 68 65 20 6c 61 72 67 65 73 74 20  .** the largest 
24d30 70 72 65 76 69 6f 75 73 6c 79 20 67 65 6e 65 72  previously gener
24d40 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75 6d 62  ated record numb
24d50 65 72 2e 20 4e 6f 20 6e 65 77 20 72 65 63 6f 72  er. No new recor
24d60 64 20 6e 75 6d 62 65 72 73 20 61 72 65 0a 2a 2a  d numbers are.**
24d70 20 61 6c 6c 6f 77 65 64 20 74 6f 20 62 65 20 6c   allowed to be l
24d80 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 76 61  ess than this va
24d90 6c 75 65 2e 20 57 68 65 6e 20 74 68 69 73 20 76  lue. When this v
24da0 61 6c 75 65 20 72 65 61 63 68 65 73 20 69 74 73  alue reaches its
24db0 20 6d 61 78 69 6d 75 6d 2c 20 0a 2a 2a 20 61 6e   maximum, .** an
24dc0 20 53 51 4c 49 54 45 5f 46 55 4c 4c 20 65 72 72   SQLITE_FULL err
24dd0 6f 72 20 69 73 20 67 65 6e 65 72 61 74 65 64 2e  or is generated.
24de0 20 54 68 65 20 50 33 20 72 65 67 69 73 74 65 72   The P3 register
24df0 20 69 73 20 75 70 64 61 74 65 64 20 77 69 74 68   is updated with
24e00 20 74 68 65 20 27 0a 2a 2a 20 67 65 6e 65 72 61   the '.** genera
24e10 74 65 64 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  ted record numbe
24e20 72 2e 20 54 68 69 73 20 50 33 20 6d 65 63 68 61  r. This P3 mecha
24e30 6e 69 73 6d 20 69 73 20 75 73 65 64 20 74 6f 20  nism is used to 
24e40 68 65 6c 70 20 69 6d 70 6c 65 6d 65 6e 74 20 74  help implement t
24e50 68 65 0a 2a 2a 20 41 55 54 4f 49 4e 43 52 45 4d  he.** AUTOINCREM
24e60 45 4e 54 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a  ENT feature..*/.
24e70 63 61 73 65 20 4f 50 5f 4e 65 77 52 6f 77 69 64  case OP_NewRowid
24e80 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
24e90 20 6f 75 74 32 20 2a 2f 0a 20 20 69 36 34 20 76   out2 */.  i64 v
24ea0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
24eb0 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72 6f 77    /* The new row
24ec0 69 64 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  id */.  VdbeCurs
24ed0 6f 72 20 2a 70 43 3b 20 20 20 20 20 20 20 20 2f  or *pC;        /
24ee0 2a 20 43 75 72 73 6f 72 20 6f 66 20 74 61 62 6c  * Cursor of tabl
24ef0 65 20 74 6f 20 67 65 74 20 74 68 65 20 6e 65 77  e to get the new
24f00 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69 6e 74 20   rowid */.  int 
24f10 72 65 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  res;            
24f20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20     /* Result of 
24f30 61 6e 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c  an sqlite3BtreeL
24f40 61 73 74 28 29 20 2a 2f 0a 20 20 69 6e 74 20 63  ast() */.  int c
24f50 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nt;             
24f60 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20 74 6f 20    /* Counter to 
24f70 6c 69 6d 69 74 20 74 68 65 20 6e 75 6d 62 65 72  limit the number
24f80 20 6f 66 20 73 65 61 72 63 68 65 73 20 2a 2f 0a   of searches */.
24f90 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20    Mem *pMem;    
24fa0 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69           /* Regi
24fb0 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 6c 61 72  ster holding lar
24fc0 67 65 73 74 20 72 6f 77 69 64 20 66 6f 72 20 41  gest rowid for A
24fd0 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a  UTOINCREMENT */.
24fe0 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72    VdbeFrame *pFr
24ff0 61 6d 65 3b 20 20 20 20 20 2f 2a 20 52 6f 6f 74  ame;     /* Root
25000 20 66 72 61 6d 65 20 6f 66 20 56 44 42 45 20 2a   frame of VDBE *
25010 2f 0a 0a 20 20 76 20 3d 20 30 3b 0a 20 20 72 65  /..  v = 0;.  re
25020 73 20 3d 20 30 3b 0a 20 20 70 4f 75 74 20 3d 20  s = 0;.  pOut = 
25030 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
25040 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65 72 74  , pOp);.  assert
25050 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
25060 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
25070 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
25080 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
25090 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
250a0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
250b0 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 61 73  >isTable );.  as
250c0 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
250d0 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
250e0 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  E );.  assert( p
250f0 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30  C->uc.pCursor!=0
25100 20 29 3b 0a 20 20 7b 0a 20 20 20 20 2f 2a 20 54   );.  {.    /* T
25110 68 65 20 6e 65 78 74 20 72 6f 77 69 64 20 6f 72  he next rowid or
25120 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 28   record number (
25130 64 69 66 66 65 72 65 6e 74 20 74 65 72 6d 73 20  different terms 
25140 66 6f 72 20 74 68 65 20 73 61 6d 65 0a 20 20 20  for the same.   
25150 20 2a 2a 20 74 68 69 6e 67 29 20 69 73 20 6f 62   ** thing) is ob
25160 74 61 69 6e 65 64 20 69 6e 20 61 20 74 77 6f 2d  tained in a two-
25170 73 74 65 70 20 61 6c 67 6f 72 69 74 68 6d 2e 0a  step algorithm..
25180 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 46 69      **.    ** Fi
25190 72 73 74 20 77 65 20 61 74 74 65 6d 70 74 20 74  rst we attempt t
251a0 6f 20 66 69 6e 64 20 74 68 65 20 6c 61 72 67 65  o find the large
251b0 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f 77 69  st existing rowi
251c0 64 20 61 6e 64 20 61 64 64 20 6f 6e 65 0a 20 20  d and add one.  
251d0 20 20 2a 2a 20 74 6f 20 74 68 61 74 2e 20 20 42    ** to that.  B
251e0 75 74 20 69 66 20 74 68 65 20 6c 61 72 67 65 73  ut if the larges
251f0 74 20 65 78 69 73 74 69 6e 67 20 72 6f 77 69 64  t existing rowid
25200 20 69 73 20 61 6c 72 65 61 64 79 20 74 68 65 20   is already the 
25210 6d 61 78 69 6d 75 6d 0a 20 20 20 20 2a 2a 20 70  maximum.    ** p
25220 6f 73 69 74 69 76 65 20 69 6e 74 65 67 65 72 2c  ositive integer,
25230 20 77 65 20 68 61 76 65 20 74 6f 20 66 61 6c 6c   we have to fall
25240 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
25250 73 65 63 6f 6e 64 0a 20 20 20 20 2a 2a 20 70 72  second.    ** pr
25260 6f 62 61 62 69 6c 69 73 74 69 63 20 61 6c 67 6f  obabilistic algo
25270 72 69 74 68 6d 0a 20 20 20 20 2a 2a 0a 20 20 20  rithm.    **.   
25280 20 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 61   ** The second a
25290 6c 67 6f 72 69 74 68 6d 20 69 73 20 74 6f 20 73  lgorithm is to s
252a0 65 6c 65 63 74 20 61 20 72 6f 77 69 64 20 61 74  elect a rowid at
252b0 20 72 61 6e 64 6f 6d 20 61 6e 64 20 73 65 65 20   random and see 
252c0 69 66 0a 20 20 20 20 2a 2a 20 69 74 20 61 6c 72  if.    ** it alr
252d0 65 61 64 79 20 65 78 69 73 74 73 20 69 6e 20 74  eady exists in t
252e0 68 65 20 74 61 62 6c 65 2e 20 20 49 66 20 69 74  he table.  If it
252f0 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c   does not exist,
25300 20 77 65 20 68 61 76 65 0a 20 20 20 20 2a 2a 20   we have.    ** 
25310 73 75 63 63 65 65 64 65 64 2e 20 20 49 66 20 74  succeeded.  If t
25320 68 65 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20  he random rowid 
25330 64 6f 65 73 20 65 78 69 73 74 2c 20 77 65 20 73  does exist, we s
25340 65 6c 65 63 74 20 61 20 6e 65 77 20 6f 6e 65 0a  elect a new one.
25350 20 20 20 20 2a 2a 20 61 6e 64 20 74 72 79 20 61      ** and try a
25360 67 61 69 6e 2c 20 75 70 20 74 6f 20 31 30 30 20  gain, up to 100 
25370 74 69 6d 65 73 2e 0a 20 20 20 20 2a 2f 0a 20 20  times..    */.  
25380 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
25390 54 61 62 6c 65 20 29 3b 0a 0a 23 69 66 64 65 66  Table );..#ifdef
253a0 20 53 51 4c 49 54 45 5f 33 32 42 49 54 5f 52 4f   SQLITE_32BIT_RO
253b0 57 49 44 0a 23 20 20 20 64 65 66 69 6e 65 20 4d  WID.#   define M
253c0 41 58 5f 52 4f 57 49 44 20 30 78 37 66 66 66 66  AX_ROWID 0x7ffff
253d0 66 66 66 0a 23 65 6c 73 65 0a 20 20 20 20 2f 2a  fff.#else.    /*
253e0 20 53 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 20   Some compilers 
253f0 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 63  complain about c
25400 6f 6e 73 74 61 6e 74 73 20 6f 66 20 74 68 65 20  onstants of the 
25410 66 6f 72 6d 20 30 78 37 66 66 66 66 66 66 66 66  form 0x7ffffffff
25420 66 66 66 66 66 66 66 2e 0a 20 20 20 20 2a 2a 20  fffffff..    ** 
25430 4f 74 68 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20  Others complain 
25440 61 62 6f 75 74 20 30 78 37 66 66 66 66 66 66 66  about 0x7fffffff
25450 66 66 66 66 66 66 66 66 66 4c 4c 2e 20 20 54 68  fffffffffLL.  Th
25460 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
25470 6f 20 73 65 65 6d 73 0a 20 20 20 20 2a 2a 20 74  o seems.    ** t
25480 6f 20 70 72 6f 76 69 64 65 20 74 68 65 20 63 6f  o provide the co
25490 6e 73 74 61 6e 74 20 77 68 69 6c 65 20 6d 61 6b  nstant while mak
254a0 69 6e 67 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72  ing all compiler
254b0 73 20 68 61 70 70 79 2e 0a 20 20 20 20 2a 2f 0a  s happy..    */.
254c0 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52  #   define MAX_R
254d0 4f 57 49 44 20 20 28 69 36 34 29 28 20 28 28 28  OWID  (i64)( (((
254e0 75 36 34 29 30 78 37 66 66 66 66 66 66 66 29 3c  u64)0x7fffffff)<
254f0 3c 33 32 29 20 7c 20 28 75 36 34 29 30 78 66 66  <32) | (u64)0xff
25500 66 66 66 66 66 66 20 29 0a 23 65 6e 64 69 66 0a  ffffff ).#endif.
25510 0a 20 20 20 20 69 66 28 20 21 70 43 2d 3e 75 73  .    if( !pC->us
25520 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a  eRandomRowid ){.
25530 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
25540 65 33 42 74 72 65 65 4c 61 73 74 28 70 43 2d 3e  e3BtreeLast(pC->
25550 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 72 65 73  uc.pCursor, &res
25560 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21  );.      if( rc!
25570 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
25580 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
25590 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
255a0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
255b0 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20 20 20   res ){.        
255c0 76 20 3d 20 31 3b 20 20 20 2f 2a 20 49 4d 50 3a  v = 1;   /* IMP:
255d0 20 52 2d 36 31 39 31 34 2d 34 38 30 37 34 20 2a   R-61914-48074 *
255e0 2f 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  /.      }else{. 
255f0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73         assert( s
25600 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
25610 72 49 73 56 61 6c 69 64 28 70 43 2d 3e 75 63 2e  rIsValid(pC->uc.
25620 70 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20  pCursor) );.    
25630 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33 42      v = sqlite3B
25640 74 72 65 65 49 6e 74 65 67 65 72 4b 65 79 28 70  treeIntegerKey(p
25650 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a  C->uc.pCursor);.
25660 20 20 20 20 20 20 20 20 69 66 28 20 76 3e 3d 4d          if( v>=M
25670 41 58 5f 52 4f 57 49 44 20 29 7b 0a 20 20 20 20  AX_ROWID ){.    
25680 20 20 20 20 20 20 70 43 2d 3e 75 73 65 52 61 6e        pC->useRan
25690 64 6f 6d 52 6f 77 69 64 20 3d 20 31 3b 0a 20 20  domRowid = 1;.  
256a0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
256b0 20 20 20 20 20 20 20 76 2b 2b 3b 20 20 20 2f 2a         v++;   /*
256c0 20 49 4d 50 3a 20 52 2d 32 39 35 33 38 2d 33 34   IMP: R-29538-34
256d0 39 38 37 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d  987 */.        }
256e0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a  .      }.    }..
256f0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
25700 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e  MIT_AUTOINCREMEN
25710 54 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  T.    if( pOp->p
25720 33 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41 73  3 ){.      /* As
25730 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73 20  sert that P3 is 
25740 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63  a valid memory c
25750 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73  ell. */.      as
25760 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
25770 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e  );.      if( p->
25780 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 20 20  pFrame ){.      
25790 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e    for(pFrame=p->
257a0 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e  pFrame; pFrame->
257b0 70 50 61 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d  pParent; pFrame=
257c0 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29  pFrame->pParent)
257d0 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 41 73 73  ;.        /* Ass
257e0 65 72 74 20 74 68 61 74 20 50 33 20 69 73 20 61  ert that P3 is a
257f0 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65   valid memory ce
25800 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61  ll. */.        a
25810 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d  ssert( pOp->p3<=
25820 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 29 3b 0a  pFrame->nMem );.
25830 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20 26          pMem = &
25840 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70  pFrame->aMem[pOp
25850 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 7d 65 6c  ->p3];.      }el
25860 73 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 41  se{.        /* A
25870 73 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73  ssert that P3 is
25880 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20   a valid memory 
25890 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20  cell. */.       
258a0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
258b0 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
258c0 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
258d0 20 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 61 4d        pMem = &aM
258e0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  em[pOp->p3];.   
258f0 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43       memAboutToC
25900 68 61 6e 67 65 28 70 2c 20 70 4d 65 6d 29 3b 0a  hange(p, pMem);.
25910 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73        }.      as
25920 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
25930 28 70 4d 65 6d 29 20 29 3b 0a 0a 20 20 20 20 20  (pMem) );..     
25940 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
25950 70 4f 70 2d 3e 70 33 2c 20 70 4d 65 6d 29 3b 0a  pOp->p3, pMem);.
25960 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
25970 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70  eMemIntegerify(p
25980 4d 65 6d 29 3b 0a 20 20 20 20 20 20 61 73 73 65  Mem);.      asse
25990 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73  rt( (pMem->flags
259a0 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
259b0 3b 20 20 2f 2a 20 6d 65 6d 28 50 33 29 20 68 6f  ;  /* mem(P3) ho
259c0 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 2a  lds an integer *
259d0 2f 0a 20 20 20 20 20 20 69 66 28 20 70 4d 65 6d  /.      if( pMem
259e0 2d 3e 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57 49 44  ->u.i==MAX_ROWID
259f0 20 7c 7c 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f   || pC->useRando
25a00 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20  mRowid ){.      
25a10 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55    rc = SQLITE_FU
25a20 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d  LL;   /* IMP: R-
25a30 31 37 38 31 37 2d 30 30 36 33 30 20 2a 2f 0a 20  17817-00630 */. 
25a40 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
25a50 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
25a60 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
25a70 28 20 76 3c 70 4d 65 6d 2d 3e 75 2e 69 2b 31 20  ( v<pMem->u.i+1 
25a80 29 7b 0a 20 20 20 20 20 20 20 20 76 20 3d 20 70  ){.        v = p
25a90 4d 65 6d 2d 3e 75 2e 69 20 2b 20 31 3b 0a 20 20  Mem->u.i + 1;.  
25aa0 20 20 20 20 7d 0a 20 20 20 20 20 20 70 4d 65 6d      }.      pMem
25ab0 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 20 20 7d  ->u.i = v;.    }
25ac0 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20  .#endif.    if( 
25ad0 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77  pC->useRandomRow
25ae0 69 64 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49  id ){.      /* I
25af0 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46  MPLEMENTATION-OF
25b00 3a 20 52 2d 30 37 36 37 37 2d 34 31 38 38 31 20  : R-07677-41881 
25b10 49 66 20 74 68 65 20 6c 61 72 67 65 73 74 20 52  If the largest R
25b20 4f 57 49 44 20 69 73 20 65 71 75 61 6c 20 74 6f  OWID is equal to
25b30 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 6c 61   the.      ** la
25b40 72 67 65 73 74 20 70 6f 73 73 69 62 6c 65 20 69  rgest possible i
25b50 6e 74 65 67 65 72 20 28 39 32 32 33 33 37 32 30  nteger (92233720
25b60 33 36 38 35 34 37 37 35 38 30 37 29 20 74 68 65  36854775807) the
25b70 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 20  n the database. 
25b80 20 20 20 20 20 2a 2a 20 65 6e 67 69 6e 65 20 73       ** engine s
25b90 74 61 72 74 73 20 70 69 63 6b 69 6e 67 20 70 6f  tarts picking po
25ba0 73 69 74 69 76 65 20 63 61 6e 64 69 64 61 74 65  sitive candidate
25bb0 20 52 4f 57 49 44 73 20 61 74 20 72 61 6e 64 6f   ROWIDs at rando
25bc0 6d 20 75 6e 74 69 6c 0a 20 20 20 20 20 20 2a 2a  m until.      **
25bd0 20 69 74 20 66 69 6e 64 73 20 6f 6e 65 20 74 68   it finds one th
25be0 61 74 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f  at is not previo
25bf0 75 73 6c 79 20 75 73 65 64 2e 20 2a 2f 0a 20 20  usly used. */.  
25c00 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
25c10 3e 70 33 3d 3d 30 20 29 3b 20 20 2f 2a 20 57 65  >p3==0 );  /* We
25c20 20 63 61 6e 6e 6f 74 20 62 65 20 69 6e 20 72 61   cannot be in ra
25c30 6e 64 6f 6d 20 72 6f 77 69 64 20 6d 6f 64 65 20  ndom rowid mode 
25c40 69 66 20 74 68 69 73 20 69 73 0a 20 20 20 20 20  if this is.     
25c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c60 20 20 20 20 20 20 20 20 2a 2a 20 61 6e 20 41 55          ** an AU
25c70 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c  TOINCREMENT tabl
25c80 65 2e 20 2a 2f 0a 20 20 20 20 20 20 63 6e 74 20  e. */.      cnt 
25c90 3d 20 30 3b 0a 20 20 20 20 20 20 64 6f 7b 0a 20  = 0;.      do{. 
25ca0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72         sqlite3_r
25cb0 61 6e 64 6f 6d 6e 65 73 73 28 73 69 7a 65 6f 66  andomness(sizeof
25cc0 28 76 29 2c 20 26 76 29 3b 0a 20 20 20 20 20 20  (v), &v);.      
25cd0 20 20 76 20 26 3d 20 28 4d 41 58 5f 52 4f 57 49    v &= (MAX_ROWI
25ce0 44 3e 3e 31 29 3b 20 76 2b 2b 3b 20 20 2f 2a 20  D>>1); v++;  /* 
25cf0 45 6e 73 75 72 65 20 74 68 61 74 20 76 20 69 73  Ensure that v is
25d00 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65   greater than ze
25d10 72 6f 20 2a 2f 0a 20 20 20 20 20 20 7d 77 68 69  ro */.      }whi
25d20 6c 65 28 20 20 28 28 72 63 20 3d 20 73 71 6c 69  le(  ((rc = sqli
25d30 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e  te3BtreeMovetoUn
25d40 70 61 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43  packed(pC->uc.pC
25d50 75 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 76  ursor, 0, (u64)v
25d60 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
25d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d90 20 20 20 30 2c 20 26 72 65 73 29 29 3d 3d 53 51     0, &res))==SQ
25da0 4c 49 54 45 5f 4f 4b 29 0a 20 20 20 20 20 20 20  LITE_OK).       
25db0 20 20 20 20 20 26 26 20 28 72 65 73 3d 3d 30 29       && (res==0)
25dc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 26 26 20  .            && 
25dd0 28 2b 2b 63 6e 74 3c 31 30 30 29 29 3b 0a 20 20  (++cnt<100));.  
25de0 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74      if( rc ) got
25df0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
25e00 72 72 6f 72 3b 0a 20 20 20 20 20 20 69 66 28 20  rror;.      if( 
25e10 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  res==0 ){.      
25e20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55    rc = SQLITE_FU
25e30 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d  LL;   /* IMP: R-
25e40 33 38 32 31 39 2d 35 33 30 30 32 20 2a 2f 0a 20  38219-53002 */. 
25e50 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
25e60 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
25e70 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73        }.      as
25e80 73 65 72 74 28 20 76 3e 30 20 29 3b 20 20 2f 2a  sert( v>0 );  /*
25e90 20 45 56 3a 20 52 2d 34 30 38 31 32 2d 30 33 35   EV: R-40812-035
25ea0 37 30 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 20 20  70 */.    }.    
25eb0 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
25ec0 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e  to = 0;.    pC->
25ed0 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
25ee0 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20  CHE_STALE;.  }. 
25ef0 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a   pOut->u.i = v;.
25f00 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
25f10 70 63 6f 64 65 3a 20 49 6e 73 65 72 74 20 50 31  pcode: Insert P1
25f20 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
25f30 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79  Synopsis: intkey
25f40 3d 72 5b 50 33 5d 20 64 61 74 61 3d 72 5b 50 32  =r[P3] data=r[P2
25f50 5d 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 6e  ].**.** Write an
25f60 20 65 6e 74 72 79 20 69 6e 74 6f 20 74 68 65 20   entry into the 
25f70 74 61 62 6c 65 20 6f 66 20 63 75 72 73 6f 72 20  table of cursor 
25f80 50 31 2e 20 20 41 20 6e 65 77 20 65 6e 74 72 79  P1.  A new entry
25f90 20 69 73 0a 2a 2a 20 63 72 65 61 74 65 64 20 69   is.** created i
25fa0 66 20 69 74 20 64 6f 65 73 6e 27 74 20 61 6c 72  f it doesn't alr
25fb0 65 61 64 79 20 65 78 69 73 74 20 6f 72 20 74 68  eady exist or th
25fc0 65 20 64 61 74 61 20 66 6f 72 20 61 6e 20 65 78  e data for an ex
25fd0 69 73 74 69 6e 67 0a 2a 2a 20 65 6e 74 72 79 20  isting.** entry 
25fe0 69 73 20 6f 76 65 72 77 72 69 74 74 65 6e 2e 20  is overwritten. 
25ff0 20 54 68 65 20 64 61 74 61 20 69 73 20 74 68 65   The data is the
26000 20 76 61 6c 75 65 20 4d 45 4d 5f 42 6c 6f 62 20   value MEM_Blob 
26010 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
26020 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 32 2e  er.** number P2.
26030 20 54 68 65 20 6b 65 79 20 69 73 20 73 74 6f 72   The key is stor
26040 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
26050 33 2e 20 54 68 65 20 6b 65 79 20 6d 75 73 74 0a  3. The key must.
26060 2a 2a 20 62 65 20 61 20 4d 45 4d 5f 49 6e 74 2e  ** be a MEM_Int.
26070 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
26080 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61  FLAG_NCHANGE fla
26090 67 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20  g of P5 is set, 
260a0 74 68 65 6e 20 74 68 65 20 72 6f 77 20 63 68 61  then the row cha
260b0 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20  nge count is.** 
260c0 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68  incremented (oth
260d0 65 72 77 69 73 65 20 6e 6f 74 29 2e 20 20 49 66  erwise not).  If
260e0 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54   the OPFLAG_LAST
260f0 52 4f 57 49 44 20 66 6c 61 67 20 6f 66 20 50 35  ROWID flag of P5
26100 20 69 73 20 73 65 74 2c 0a 2a 2a 20 74 68 65 6e   is set,.** then
26110 20 72 6f 77 69 64 20 69 73 20 73 74 6f 72 65 64   rowid is stored
26120 20 66 6f 72 20 73 75 62 73 65 71 75 65 6e 74 20   for subsequent 
26130 72 65 74 75 72 6e 20 62 79 20 74 68 65 0a 2a 2a  return by the.**
26140 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e   sqlite3_last_in
26150 73 65 72 74 5f 72 6f 77 69 64 28 29 20 66 75 6e  sert_rowid() fun
26160 63 74 69 6f 6e 20 28 6f 74 68 65 72 77 69 73 65  ction (otherwise
26170 20 69 74 20 69 73 20 75 6e 6d 6f 64 69 66 69 65   it is unmodifie
26180 64 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  d)..**.** If the
26190 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
261a0 45 53 55 4c 54 20 66 6c 61 67 20 6f 66 20 50 35  ESULT flag of P5
261b0 20 69 73 20 73 65 74 2c 20 74 68 65 20 69 6d 70   is set, the imp
261c0 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 69 67 68  lementation migh
261d0 74 0a 2a 2a 20 72 75 6e 20 66 61 73 74 65 72 20  t.** run faster 
261e0 62 79 20 61 76 6f 69 64 69 6e 67 20 61 6e 20 75  by avoiding an u
261f0 6e 6e 65 63 65 73 73 61 72 79 20 73 65 65 6b 20  nnecessary seek 
26200 6f 6e 20 63 75 72 73 6f 72 20 50 31 2e 20 20 48  on cursor P1.  H
26210 6f 77 65 76 65 72 2c 0a 2a 2a 20 74 68 65 20 4f  owever,.** the O
26220 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53  PFLAG_USESEEKRES
26230 55 4c 54 20 66 6c 61 67 20 6d 75 73 74 20 6f 6e  ULT flag must on
26240 6c 79 20 62 65 20 73 65 74 20 69 66 20 74 68 65  ly be set if the
26250 72 65 20 68 61 76 65 20 62 65 65 6e 20 6e 6f 20  re have been no 
26260 70 72 69 6f 72 0a 2a 2a 20 73 65 65 6b 73 20 6f  prior.** seeks o
26270 6e 20 74 68 65 20 63 75 72 73 6f 72 20 6f 72 20  n the cursor or 
26280 69 66 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  if the most rece
26290 6e 74 20 73 65 65 6b 20 75 73 65 64 20 61 20 6b  nt seek used a k
262a0 65 79 20 65 71 75 61 6c 20 74 6f 20 50 33 2e 0a  ey equal to P3..
262b0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
262c0 4c 41 47 5f 49 53 55 50 44 41 54 45 20 66 6c 61  LAG_ISUPDATE fla
262d0 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74  g is set, then t
262e0 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 70 61  his opcode is pa
262f0 72 74 20 6f 66 20 61 6e 0a 2a 2a 20 55 50 44 41  rt of an.** UPDA
26300 54 45 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 4f  TE operation.  O
26310 74 68 65 72 77 69 73 65 20 28 69 66 20 74 68 65  therwise (if the
26320 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 29 20   flag is clear) 
26330 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65  then this opcode
26340 0a 2a 2a 20 69 73 20 70 61 72 74 20 6f 66 20 61  .** is part of a
26350 6e 20 49 4e 53 45 52 54 20 6f 70 65 72 61 74 69  n INSERT operati
26360 6f 6e 2e 20 20 54 68 65 20 64 69 66 66 65 72 65  on.  The differe
26370 6e 63 65 20 69 73 20 6f 6e 6c 79 20 69 6d 70 6f  nce is only impo
26380 72 74 61 6e 74 20 74 6f 0a 2a 2a 20 74 68 65 20  rtant to.** the 
26390 75 70 64 61 74 65 20 68 6f 6f 6b 2e 0a 2a 2a 0a  update hook..**.
263a0 2a 2a 20 50 61 72 61 6d 65 74 65 72 20 50 34 20  ** Parameter P4 
263b0 6d 61 79 20 70 6f 69 6e 74 20 74 6f 20 61 20 54  may point to a T
263c0 61 62 6c 65 20 73 74 72 75 63 74 75 72 65 2c 20  able structure, 
263d0 6f 72 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 20  or may be NULL. 
263e0 49 66 20 69 74 20 69 73 20 0a 2a 2a 20 6e 6f 74  If it is .** not
263f0 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65 20   NULL, then the 
26400 75 70 64 61 74 65 2d 68 6f 6f 6b 20 28 73 71 6c  update-hook (sql
26410 69 74 65 33 2e 78 55 70 64 61 74 65 43 61 6c 6c  ite3.xUpdateCall
26420 62 61 63 6b 29 20 69 73 20 69 6e 76 6f 6b 65 64  back) is invoked
26430 20 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67 20 61   .** following a
26440 20 73 75 63 63 65 73 73 66 75 6c 20 69 6e 73 65   successful inse
26450 72 74 2e 0a 2a 2a 0a 2a 2a 20 28 57 41 52 4e 49  rt..**.** (WARNI
26460 4e 47 2f 54 4f 44 4f 3a 20 49 66 20 50 31 20 69  NG/TODO: If P1 i
26470 73 20 61 20 70 73 65 75 64 6f 2d 63 75 72 73 6f  s a pseudo-curso
26480 72 20 61 6e 64 20 50 32 20 69 73 20 64 79 6e 61  r and P2 is dyna
26490 6d 69 63 61 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f 63  mically.** alloc
264a0 61 74 65 64 2c 20 74 68 65 6e 20 6f 77 6e 65 72  ated, then owner
264b0 73 68 69 70 20 6f 66 20 50 32 20 69 73 20 74 72  ship of P2 is tr
264c0 61 6e 73 66 65 72 72 65 64 20 74 6f 20 74 68 65  ansferred to the
264d0 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 0a 2a   pseudo-cursor.*
264e0 2a 20 61 6e 64 20 72 65 67 69 73 74 65 72 20 50  * and register P
264f0 32 20 62 65 63 6f 6d 65 73 20 65 70 68 65 6d 65  2 becomes epheme
26500 72 61 6c 2e 20 20 49 66 20 74 68 65 20 63 75 72  ral.  If the cur
26510 73 6f 72 20 69 73 20 63 68 61 6e 67 65 64 2c 20  sor is changed, 
26520 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20  the.** value of 
26530 72 65 67 69 73 74 65 72 20 50 32 20 77 69 6c 6c  register P2 will
26540 20 74 68 65 6e 20 63 68 61 6e 67 65 2e 20 20 4d   then change.  M
26550 61 6b 65 20 73 75 72 65 20 74 68 69 73 20 64 6f  ake sure this do
26560 65 73 20 6e 6f 74 0a 2a 2a 20 63 61 75 73 65 20  es not.** cause 
26570 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 29 0a 2a  any problems.).*
26580 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
26590 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73  ction only works
265a0 20 6f 6e 20 74 61 62 6c 65 73 2e 20 20 54 68 65   on tables.  The
265b0 20 65 71 75 69 76 61 6c 65 6e 74 20 69 6e 73 74   equivalent inst
265c0 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 69  ruction.** for i
265d0 6e 64 69 63 65 73 20 69 73 20 4f 50 5f 49 64 78  ndices is OP_Idx
265e0 49 6e 73 65 72 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70  Insert..*/./* Op
265f0 63 6f 64 65 3a 20 49 6e 73 65 72 74 49 6e 74 20  code: InsertInt 
26600 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
26610 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b  * Synopsis: intk
26620 65 79 3d 50 33 20 64 61 74 61 3d 72 5b 50 32 5d  ey=P3 data=r[P2]
26630 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b  .**.** This work
26640 73 20 65 78 61 63 74 6c 79 20 6c 69 6b 65 20 4f  s exactly like O
26650 50 5f 49 6e 73 65 72 74 20 65 78 63 65 70 74 20  P_Insert except 
26660 74 68 61 74 20 74 68 65 20 6b 65 79 20 69 73 20  that the key is 
26670 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 76  the.** integer v
26680 61 6c 75 65 20 50 33 2c 20 6e 6f 74 20 74 68 65  alue P3, not the
26690 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 69 6e   value of the in
266a0 74 65 67 65 72 20 73 74 6f 72 65 64 20 69 6e 20  teger stored in 
266b0 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2f 0a  register P3..*/.
266c0 63 61 73 65 20 4f 50 5f 49 6e 73 65 72 74 3a 20  case OP_Insert: 
266d0 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65 72 74 49  .case OP_InsertI
266e0 6e 74 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 44 61  nt: {.  Mem *pDa
266f0 74 61 3b 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d  ta;       /* MEM
26700 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 64 61   cell holding da
26710 74 61 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72  ta for the recor
26720 64 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64  d to be inserted
26730 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4b 65 79 3b   */.  Mem *pKey;
26740 20 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63          /* MEM c
26750 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 6b 65 79 20  ell holding key 
26760 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20   for the record 
26770 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
26780 2a 70 43 3b 20 20 20 2f 2a 20 43 75 72 73 6f 72  *pC;   /* Cursor
26790 20 74 6f 20 74 61 62 6c 65 20 69 6e 74 6f 20 77   to table into w
267a0 68 69 63 68 20 69 6e 73 65 72 74 20 69 73 20 77  hich insert is w
267b0 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20  ritten */.  int 
267c0 73 65 65 6b 52 65 73 75 6c 74 3b 20 20 20 2f 2a  seekResult;   /*
267d0 20 52 65 73 75 6c 74 20 6f 66 20 70 72 69 6f 72   Result of prior
267e0 20 73 65 65 6b 20 6f 72 20 30 20 69 66 20 6e 6f   seek or 0 if no
267f0 20 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66   USESEEKRESULT f
26800 6c 61 67 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  lag */.  const c
26810 68 61 72 20 2a 7a 44 62 3b 20 20 2f 2a 20 64 61  har *zDb;  /* da
26820 74 61 62 61 73 65 20 6e 61 6d 65 20 2d 20 75 73  tabase name - us
26830 65 64 20 62 79 20 74 68 65 20 75 70 64 61 74 65  ed by the update
26840 20 68 6f 6f 6b 20 2a 2f 0a 20 20 54 61 62 6c 65   hook */.  Table
26850 20 2a 70 54 61 62 3b 20 20 20 20 20 20 2f 2a 20   *pTab;      /* 
26860 54 61 62 6c 65 20 73 74 72 75 63 74 75 72 65 20  Table structure 
26870 2d 20 75 73 65 64 20 62 79 20 75 70 64 61 74 65  - used by update
26880 20 61 6e 64 20 70 72 65 2d 75 70 64 61 74 65 20   and pre-update 
26890 68 6f 6f 6b 73 20 2a 2f 0a 20 20 42 74 72 65 65  hooks */.  Btree
268a0 50 61 79 6c 6f 61 64 20 78 3b 20 20 20 2f 2a 20  Payload x;   /* 
268b0 50 61 79 6c 6f 61 64 20 74 6f 20 62 65 20 69 6e  Payload to be in
268c0 73 65 72 74 65 64 20 2a 2f 0a 0a 20 20 70 44 61  serted */..  pDa
268d0 74 61 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ta = &aMem[pOp->
268e0 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p2];.  assert( p
268f0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
26900 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
26910 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d  );.  assert( mem
26920 49 73 56 61 6c 69 64 28 70 44 61 74 61 29 20 29  IsValid(pData) )
26930 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
26940 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
26950 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
26960 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
26970 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
26980 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74  TREE );.  assert
26990 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  ( pC->uc.pCursor
269a0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
269b0 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c   (pOp->p5 & OPFL
269c0 41 47 5f 49 53 4e 4f 4f 50 29 20 7c 7c 20 70 43  AG_ISNOOP) || pC
269d0 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 61  ->isTable );.  a
269e0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
269f0 70 65 3d 3d 50 34 5f 54 41 42 4c 45 20 7c 7c 20  pe==P4_TABLE || 
26a00 70 4f 70 2d 3e 70 34 74 79 70 65 3e 3d 50 34 5f  pOp->p4type>=P4_
26a10 53 54 41 54 49 43 20 29 3b 0a 20 20 52 45 47 49  STATIC );.  REGI
26a20 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
26a30 70 32 2c 20 70 44 61 74 61 29 3b 0a 20 20 73 71  p2, pData);.  sq
26a40 6c 69 74 65 33 56 64 62 65 49 6e 63 72 57 72 69  lite3VdbeIncrWri
26a50 74 65 43 6f 75 6e 74 65 72 28 70 2c 20 70 43 29  teCounter(p, pC)
26a60 3b 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  ;..  if( pOp->op
26a70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 20  code==OP_Insert 
26a80 29 7b 0a 20 20 20 20 70 4b 65 79 20 3d 20 26 61  ){.    pKey = &a
26a90 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
26aa0 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 2d 3e    assert( pKey->
26ab0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
26ac0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  );.    assert( m
26ad0 65 6d 49 73 56 61 6c 69 64 28 70 4b 65 79 29 20  emIsValid(pKey) 
26ae0 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  );.    REGISTER_
26af0 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
26b00 4b 65 79 29 3b 0a 20 20 20 20 78 2e 6e 4b 65 79  Key);.    x.nKey
26b10 20 3d 20 70 4b 65 79 2d 3e 75 2e 69 3b 0a 20 20   = pKey->u.i;.  
26b20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
26b30 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
26b40 4f 50 5f 49 6e 73 65 72 74 49 6e 74 20 29 3b 0a  OP_InsertInt );.
26b50 20 20 20 20 78 2e 6e 4b 65 79 20 3d 20 70 4f 70      x.nKey = pOp
26b60 2d 3e 70 33 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  ->p3;.  }..  if(
26b70 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
26b80 5f 54 41 42 4c 45 20 26 26 20 48 41 53 5f 55 50  _TABLE && HAS_UP
26b90 44 41 54 45 5f 48 4f 4f 4b 28 64 62 29 20 29 7b  DATE_HOOK(db) ){
26ba0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
26bb0 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20 20 7a  >iDb>=0 );.    z
26bc0 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d  Db = db->aDb[pC-
26bd0 3e 69 44 62 5d 2e 7a 44 62 53 4e 61 6d 65 3b 0a  >iDb].zDbSName;.
26be0 20 20 20 20 70 54 61 62 20 3d 20 70 4f 70 2d 3e      pTab = pOp->
26bf0 70 34 2e 70 54 61 62 3b 0a 20 20 20 20 61 73 73  p4.pTab;.    ass
26c00 65 72 74 28 20 28 70 4f 70 2d 3e 70 35 20 26 20  ert( (pOp->p5 & 
26c10 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 29 20 7c  OPFLAG_ISNOOP) |
26c20 7c 20 48 61 73 52 6f 77 69 64 28 70 54 61 62 29  | HasRowid(pTab)
26c30 20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   );.  }else{.   
26c40 20 70 54 61 62 20 3d 20 30 3b 0a 20 20 20 20 7a   pTab = 0;.    z
26c50 44 62 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20  Db = 0;  /* Not 
26c60 6e 65 65 64 65 64 2e 20 20 53 69 6c 65 6e 63 65  needed.  Silence
26c70 20 61 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e   a compiler warn
26c80 69 6e 67 2e 20 2a 2f 0a 20 20 7d 0a 0a 23 69 66  ing. */.  }..#if
26c90 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
26ca0 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b  E_PREUPDATE_HOOK
26cb0 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65  .  /* Invoke the
26cc0 20 70 72 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b   pre-update hook
26cd0 2c 20 69 66 20 61 6e 79 20 2a 2f 0a 20 20 69 66  , if any */.  if
26ce0 28 20 70 54 61 62 20 29 7b 0a 20 20 20 20 69 66  ( pTab ){.    if
26cf0 28 20 64 62 2d 3e 78 50 72 65 55 70 64 61 74 65  ( db->xPreUpdate
26d00 43 61 6c 6c 62 61 63 6b 20 26 26 20 21 28 70 4f  Callback && !(pO
26d10 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49  p->p5 & OPFLAG_I
26d20 53 55 50 44 41 54 45 29 20 29 7b 0a 20 20 20 20  SUPDATE) ){.    
26d30 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 65    sqlite3VdbePre
26d40 55 70 64 61 74 65 48 6f 6f 6b 28 70 2c 20 70 43  UpdateHook(p, pC
26d50 2c 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 2c  , SQLITE_INSERT,
26d60 20 7a 44 62 2c 20 70 54 61 62 2c 20 78 2e 6e 4b   zDb, pTab, x.nK
26d70 65 79 2c 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 20  ey,pOp->p2);.   
26d80 20 7d 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 78   }.    if( db->x
26d90 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 3d 3d  UpdateCallback==
26da0 30 20 7c 7c 20 70 54 61 62 2d 3e 61 43 6f 6c 3d  0 || pTab->aCol=
26db0 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 50  =0 ){.      /* P
26dc0 72 65 76 65 6e 74 20 70 6f 73 74 2d 75 70 64 61  revent post-upda
26dd0 74 65 20 68 6f 6f 6b 20 66 72 6f 6d 20 72 75 6e  te hook from run
26de0 6e 69 6e 67 20 69 6e 20 63 61 73 65 73 20 77 68  ning in cases wh
26df0 65 6e 20 69 74 20 73 68 6f 75 6c 64 20 6e 6f 74  en it should not
26e00 20 2a 2f 0a 20 20 20 20 20 20 70 54 61 62 20 3d   */.      pTab =
26e10 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20   0;.    }.  }.  
26e20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50  if( pOp->p5 & OP
26e30 46 4c 41 47 5f 49 53 4e 4f 4f 50 20 29 20 62 72  FLAG_ISNOOP ) br
26e40 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 69  eak;.#endif..  i
26e50 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  f( pOp->p5 & OPF
26e60 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d  LAG_NCHANGE ) p-
26e70 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 69 66  >nChange++;.  if
26e80 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ( pOp->p5 & OPFL
26e90 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 29 20 64  AG_LASTROWID ) d
26ea0 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 78  b->lastRowid = x
26eb0 2e 6e 4b 65 79 3b 0a 20 20 61 73 73 65 72 74 28  .nKey;.  assert(
26ec0 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20   pData->flags & 
26ed0 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74  (MEM_Blob|MEM_St
26ee0 72 29 20 29 3b 0a 20 20 78 2e 70 44 61 74 61 20  r) );.  x.pData 
26ef0 3d 20 70 44 61 74 61 2d 3e 7a 3b 0a 20 20 78 2e  = pData->z;.  x.
26f00 6e 44 61 74 61 20 3d 20 70 44 61 74 61 2d 3e 6e  nData = pData->n
26f10 3b 0a 20 20 73 65 65 6b 52 65 73 75 6c 74 20 3d  ;.  seekResult =
26f20 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46   ((pOp->p5 & OPF
26f30 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c  LAG_USESEEKRESUL
26f40 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73  T) ? pC->seekRes
26f50 75 6c 74 20 3a 20 30 29 3b 0a 20 20 69 66 28 20  ult : 0);.  if( 
26f60 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d  pData->flags & M
26f70 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 78  EM_Zero ){.    x
26f80 2e 6e 5a 65 72 6f 20 3d 20 70 44 61 74 61 2d 3e  .nZero = pData->
26f90 75 2e 6e 5a 65 72 6f 3b 0a 20 20 7d 65 6c 73 65  u.nZero;.  }else
26fa0 7b 0a 20 20 20 20 78 2e 6e 5a 65 72 6f 20 3d 20  {.    x.nZero = 
26fb0 30 3b 0a 20 20 7d 0a 20 20 78 2e 70 4b 65 79 20  0;.  }.  x.pKey 
26fc0 3d 20 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  = 0;.  rc = sqli
26fd0 74 65 33 42 74 72 65 65 49 6e 73 65 72 74 28 70  te3BtreeInsert(p
26fe0 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26  C->uc.pCursor, &
26ff0 78 2c 0a 20 20 20 20 20 20 28 70 4f 70 2d 3e 70  x,.      (pOp->p
27000 35 20 26 20 28 4f 50 46 4c 41 47 5f 41 50 50 45  5 & (OPFLAG_APPE
27010 4e 44 7c 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f  ND|OPFLAG_SAVEPO
27020 53 49 54 49 4f 4e 29 29 2c 20 73 65 65 6b 52 65  SITION)), seekRe
27030 73 75 6c 74 0a 20 20 29 3b 0a 20 20 70 43 2d 3e  sult.  );.  pC->
27040 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
27050 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   0;.  pC->cacheS
27060 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
27070 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b  ALE;..  /* Invok
27080 65 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f  e the update-hoo
27090 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a  k if required. *
270a0 2f 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  /.  if( rc ) got
270b0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
270c0 72 72 6f 72 3b 0a 20 20 69 66 28 20 70 54 61 62  rror;.  if( pTab
270d0 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
270e0 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  db->xUpdateCallb
270f0 61 63 6b 21 3d 30 20 29 3b 0a 20 20 20 20 61 73  ack!=0 );.    as
27100 73 65 72 74 28 20 70 54 61 62 2d 3e 61 43 6f 6c  sert( pTab->aCol
27110 21 3d 30 20 29 3b 0a 20 20 20 20 64 62 2d 3e 78  !=0 );.    db->x
27120 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28 64  UpdateCallback(d
27130 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 0a 20  b->pUpdateArg,. 
27140 20 20 20 20 20 20 20 20 20 20 28 70 4f 70 2d 3e            (pOp->
27150 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 55 50  p5 & OPFLAG_ISUP
27160 44 41 54 45 29 20 3f 20 53 51 4c 49 54 45 5f 55  DATE) ? SQLITE_U
27170 50 44 41 54 45 20 3a 20 53 51 4c 49 54 45 5f 49  PDATE : SQLITE_I
27180 4e 53 45 52 54 2c 0a 20 20 20 20 20 20 20 20 20  NSERT,.         
27190 20 20 7a 44 62 2c 20 70 54 61 62 2d 3e 7a 4e 61    zDb, pTab->zNa
271a0 6d 65 2c 20 78 2e 6e 4b 65 79 29 3b 0a 20 20 7d  me, x.nKey);.  }
271b0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
271c0 4f 70 63 6f 64 65 3a 20 44 65 6c 65 74 65 20 50  Opcode: Delete P
271d0 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
271e0 0a 2a 2a 20 44 65 6c 65 74 65 20 74 68 65 20 72  .** Delete the r
271f0 65 63 6f 72 64 20 61 74 20 77 68 69 63 68 20 74  ecord at which t
27200 68 65 20 50 31 20 63 75 72 73 6f 72 20 69 73 20  he P1 cursor is 
27210 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
27220 6e 67 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ng..**.** If the
27230 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49   OPFLAG_SAVEPOSI
27240 54 49 4f 4e 20 62 69 74 20 6f 66 20 74 68 65 20  TION bit of the 
27250 50 35 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  P5 parameter is 
27260 73 65 74 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65  set, then.** the
27270 20 63 75 72 73 6f 72 20 77 69 6c 6c 20 62 65 20   cursor will be 
27280 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74  left pointing at
27290 20 20 65 69 74 68 65 72 20 74 68 65 20 6e 65 78    either the nex
272a0 74 20 6f 72 20 74 68 65 20 70 72 65 76 69 6f 75  t or the previou
272b0 73 0a 2a 2a 20 72 65 63 6f 72 64 20 69 6e 20 74  s.** record in t
272c0 68 65 20 74 61 62 6c 65 2e 20 49 66 20 69 74 20  he table. If it 
272d0 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67  is left pointing
272e0 20 61 74 20 74 68 65 20 6e 65 78 74 20 72 65 63   at the next rec
272f0 6f 72 64 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65  ord, then.** the
27300 20 6e 65 78 74 20 4e 65 78 74 20 69 6e 73 74 72   next Next instr
27310 75 63 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 61  uction will be a
27320 20 6e 6f 2d 6f 70 2e 20 41 73 20 61 20 72 65 73   no-op. As a res
27330 75 6c 74 2c 20 69 6e 20 74 68 69 73 20 63 61 73  ult, in this cas
27340 65 0a 2a 2a 20 69 74 20 69 73 20 6f 6b 20 74 6f  e.** it is ok to
27350 20 64 65 6c 65 74 65 20 61 20 72 65 63 6f 72 64   delete a record
27360 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 4e   from within a N
27370 65 78 74 20 6c 6f 6f 70 2e 20 49 66 20 0a 2a 2a  ext loop. If .**
27380 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49   OPFLAG_SAVEPOSI
27390 54 49 4f 4e 20 62 69 74 20 6f 66 20 50 35 20 69  TION bit of P5 i
273a0 73 20 63 6c 65 61 72 2c 20 74 68 65 6e 20 74 68  s clear, then th
273b0 65 20 63 75 72 73 6f 72 20 77 69 6c 6c 20 62 65  e cursor will be
273c0 0a 2a 2a 20 6c 65 66 74 20 69 6e 20 61 6e 20 75  .** left in an u
273d0 6e 64 65 66 69 6e 65 64 20 73 74 61 74 65 2e 0a  ndefined state..
273e0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
273f0 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 20 62 69  LAG_AUXDELETE bi
27400 74 20 69 73 20 73 65 74 20 6f 6e 20 50 35 2c 20  t is set on P5, 
27410 74 68 61 74 20 69 6e 64 69 63 61 74 65 73 20 74  that indicates t
27420 68 61 74 20 74 68 69 73 0a 2a 2a 20 64 65 6c 65  hat this.** dele
27430 74 65 20 6f 6e 65 20 6f 66 20 73 65 76 65 72 61  te one of severa
27440 6c 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  l associated wit
27450 68 20 64 65 6c 65 74 69 6e 67 20 61 20 74 61 62  h deleting a tab
27460 6c 65 20 72 6f 77 20 61 6e 64 20 61 6c 6c 20 69  le row and all i
27470 74 73 0a 2a 2a 20 61 73 73 6f 63 69 61 74 65 64  ts.** associated
27480 20 69 6e 64 65 78 20 65 6e 74 72 69 65 73 2e 20   index entries. 
27490 20 45 78 61 63 74 6c 79 20 6f 6e 65 20 6f 66 20   Exactly one of 
274a0 74 68 6f 73 65 20 64 65 6c 65 74 65 73 20 69 73  those deletes is
274b0 20 74 68 65 20 22 70 72 69 6d 61 72 79 22 0a 2a   the "primary".*
274c0 2a 20 64 65 6c 65 74 65 2e 20 20 54 68 65 20 6f  * delete.  The o
274d0 74 68 65 72 73 20 61 72 65 20 61 6c 6c 20 6f 6e  thers are all on
274e0 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54   OPFLAG_FORDELET
274f0 45 20 63 75 72 73 6f 72 73 20 6f 72 20 65 6c 73  E cursors or els
27500 65 20 61 72 65 0a 2a 2a 20 6d 61 72 6b 65 64 20  e are.** marked 
27510 77 69 74 68 20 74 68 65 20 41 55 58 44 45 4c 45  with the AUXDELE
27520 54 45 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20 49  TE flag..**.** I
27530 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48  f the OPFLAG_NCH
27540 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 32 20  ANGE flag of P2 
27550 28 4e 42 3a 20 50 32 20 6e 6f 74 20 50 35 29 20  (NB: P2 not P5) 
27560 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65  is set, then the
27570 20 72 6f 77 0a 2a 2a 20 63 68 61 6e 67 65 20 63   row.** change c
27580 6f 75 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e  ount is incremen
27590 74 65 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e  ted (otherwise n
275a0 6f 74 29 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d 75  ot)..**.** P1 mu
275b0 73 74 20 6e 6f 74 20 62 65 20 70 73 65 75 64 6f  st not be pseudo
275c0 2d 74 61 62 6c 65 2e 20 20 49 74 20 68 61 73 20  -table.  It has 
275d0 74 6f 20 62 65 20 61 20 72 65 61 6c 20 74 61 62  to be a real tab
275e0 6c 65 20 77 69 74 68 0a 2a 2a 20 6d 75 6c 74 69  le with.** multi
275f0 70 6c 65 20 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a 20  ple rows..**.** 
27600 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c  If P4 is not NUL
27610 4c 20 74 68 65 6e 20 69 74 20 70 6f 69 6e 74 73  L then it points
27620 20 74 6f 20 61 20 54 61 62 6c 65 20 6f 62 6a 65   to a Table obje
27630 63 74 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65  ct. In this case
27640 20 65 69 74 68 65 72 20 0a 2a 2a 20 74 68 65 20   either .** the 
27650 75 70 64 61 74 65 20 6f 72 20 70 72 65 2d 75 70  update or pre-up
27660 64 61 74 65 20 68 6f 6f 6b 2c 20 6f 72 20 62 6f  date hook, or bo
27670 74 68 2c 20 6d 61 79 20 62 65 20 69 6e 76 6f 6b  th, may be invok
27680 65 64 2e 20 54 68 65 20 50 31 20 63 75 72 73 6f  ed. The P1 curso
27690 72 20 6d 75 73 74 0a 2a 2a 20 68 61 76 65 20 62  r must.** have b
276a0 65 65 6e 20 70 6f 73 69 74 69 6f 6e 65 64 20 75  een positioned u
276b0 73 69 6e 67 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64  sing OP_NotFound
276c0 20 70 72 69 6f 72 20 74 6f 20 69 6e 76 6f 6b 69   prior to invoki
276d0 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69  ng this opcode i
276e0 6e 20 0a 2a 2a 20 74 68 69 73 20 63 61 73 65 2e  n .** this case.
276f0 20 53 70 65 63 69 66 69 63 61 6c 6c 79 2c 20 69   Specifically, i
27700 66 20 6f 6e 65 20 69 73 20 63 6f 6e 66 69 67 75  f one is configu
27710 72 65 64 2c 20 74 68 65 20 70 72 65 2d 75 70 64  red, the pre-upd
27720 61 74 65 20 68 6f 6f 6b 20 69 73 20 0a 2a 2a 20  ate hook is .** 
27730 69 6e 76 6f 6b 65 64 20 69 66 20 50 34 20 69 73  invoked if P4 is
27740 20 6e 6f 74 20 4e 55 4c 4c 2e 20 54 68 65 20 75   not NULL. The u
27750 70 64 61 74 65 2d 68 6f 6f 6b 20 69 73 20 69 6e  pdate-hook is in
27760 76 6f 6b 65 64 20 69 66 20 6f 6e 65 20 69 73 20  voked if one is 
27770 63 6f 6e 66 69 67 75 72 65 64 2c 20 0a 2a 2a 20  configured, .** 
27780 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20  P4 is not NULL, 
27790 61 6e 64 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e  and the OPFLAG_N
277a0 43 48 41 4e 47 45 20 66 6c 61 67 20 69 73 20 73  CHANGE flag is s
277b0 65 74 20 69 6e 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  et in P2..**.** 
277c0 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 49 53  If the OPFLAG_IS
277d0 55 50 44 41 54 45 20 66 6c 61 67 20 69 73 20 73  UPDATE flag is s
277e0 65 74 20 69 6e 20 50 32 2c 20 74 68 65 6e 20 50  et in P2, then P
277f0 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61  3 contains the a
27800 64 64 72 65 73 73 0a 2a 2a 20 6f 66 20 74 68 65  ddress.** of the
27810 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61   memory cell tha
27820 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 76  t contains the v
27830 61 6c 75 65 20 74 68 61 74 20 74 68 65 20 72 6f  alue that the ro
27840 77 69 64 20 6f 66 20 74 68 65 20 72 6f 77 20 77  wid of the row w
27850 69 6c 6c 0a 2a 2a 20 62 65 20 73 65 74 20 74 6f  ill.** be set to
27860 20 62 79 20 74 68 65 20 75 70 64 61 74 65 2e 0a   by the update..
27870 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 6c 65 74  */.case OP_Delet
27880 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  e: {.  VdbeCurso
27890 72 20 2a 70 43 3b 0a 20 20 63 6f 6e 73 74 20 63  r *pC;.  const c
278a0 68 61 72 20 2a 7a 44 62 3b 0a 20 20 54 61 62 6c  har *zDb;.  Tabl
278b0 65 20 2a 70 54 61 62 3b 0a 20 20 69 6e 74 20 6f  e *pTab;.  int o
278c0 70 66 6c 61 67 73 3b 0a 0a 20 20 6f 70 66 6c 61  pflags;..  opfla
278d0 67 73 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  gs = pOp->p2;.  
278e0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
278f0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
27900 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
27910 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
27920 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
27930 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
27940 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
27950 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
27960 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
27970 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  uc.pCursor!=0 );
27980 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64  .  assert( pC->d
27990 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
279a0 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62   );.  sqlite3Vdb
279b0 65 49 6e 63 72 57 72 69 74 65 43 6f 75 6e 74 65  eIncrWriteCounte
279c0 72 28 70 2c 20 70 43 29 3b 0a 0a 23 69 66 64 65  r(p, pC);..#ifde
279d0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
279e0 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65   if( pOp->p4type
279f0 3d 3d 50 34 5f 54 41 42 4c 45 20 26 26 20 48 61  ==P4_TABLE && Ha
27a00 73 52 6f 77 69 64 28 70 4f 70 2d 3e 70 34 2e 70  sRowid(pOp->p4.p
27a10 54 61 62 29 20 26 26 20 70 4f 70 2d 3e 70 35 3d  Tab) && pOp->p5=
27a20 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20  =0 ){.    /* If 
27a30 70 35 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 20  p5 is zero, the 
27a40 73 65 65 6b 20 6f 70 65 72 61 74 69 6f 6e 20 74  seek operation t
27a50 68 61 74 20 70 6f 73 69 74 69 6f 6e 65 64 20 74  hat positioned t
27a60 68 65 20 63 75 72 73 6f 72 20 70 72 69 6f 72 20  he cursor prior 
27a70 74 6f 0a 20 20 20 20 2a 2a 20 4f 50 5f 44 65 6c  to.    ** OP_Del
27a80 65 74 65 20 77 69 6c 6c 20 68 61 76 65 20 61 6c  ete will have al
27a90 73 6f 20 73 65 74 20 74 68 65 20 70 43 2d 3e 6d  so set the pC->m
27aa0 6f 76 65 74 6f 54 61 72 67 65 74 20 66 69 65 6c  ovetoTarget fiel
27ab0 64 20 74 6f 20 74 68 65 20 72 6f 77 69 64 20 6f  d to the rowid o
27ac0 66 0a 20 20 20 20 2a 2a 20 74 68 65 20 72 6f 77  f.    ** the row
27ad0 20 74 68 61 74 20 69 73 20 62 65 69 6e 67 20 64   that is being d
27ae0 65 6c 65 74 65 64 20 2a 2f 0a 20 20 20 20 69 36  eleted */.    i6
27af0 34 20 69 4b 65 79 20 3d 20 73 71 6c 69 74 65 33  4 iKey = sqlite3
27b00 42 74 72 65 65 49 6e 74 65 67 65 72 4b 65 79 28  BtreeIntegerKey(
27b10 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b  pC->uc.pCursor);
27b20 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
27b30 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 3d 3d 69  >movetoTarget==i
27b40 4b 65 79 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69  Key );.  }.#endi
27b50 66 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 75  f..  /* If the u
27b60 70 64 61 74 65 2d 68 6f 6f 6b 20 6f 72 20 70 72  pdate-hook or pr
27b70 65 2d 75 70 64 61 74 65 2d 68 6f 6f 6b 20 77 69  e-update-hook wi
27b80 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20 73  ll be invoked, s
27b90 65 74 20 7a 44 62 20 74 6f 0a 20 20 2a 2a 20 74  et zDb to.  ** t
27ba0 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64  he name of the d
27bb0 62 20 74 6f 20 70 61 73 73 20 61 73 20 74 6f 20  b to pass as to 
27bc0 69 74 2e 20 41 6c 73 6f 20 73 65 74 20 6c 6f 63  it. Also set loc
27bd0 61 6c 20 70 54 61 62 20 74 6f 20 61 20 63 6f 70  al pTab to a cop
27be0 79 0a 20 20 2a 2a 20 6f 66 20 70 34 2e 70 54 61  y.  ** of p4.pTa
27bf0 62 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20 70  b. Finally, if p
27c00 35 20 69 73 20 74 72 75 65 2c 20 69 6e 64 69 63  5 is true, indic
27c10 61 74 69 6e 67 20 74 68 61 74 20 74 68 69 73 20  ating that this 
27c20 63 75 72 73 6f 72 20 77 61 73 0a 20 20 2a 2a 20  cursor was.  ** 
27c30 6c 61 73 74 20 6d 6f 76 65 64 20 77 69 74 68 20  last moved with 
27c40 4f 50 5f 4e 65 78 74 20 6f 72 20 4f 50 5f 50 72  OP_Next or OP_Pr
27c50 65 76 2c 20 6e 6f 74 20 53 65 65 6b 20 6f 72 20  ev, not Seek or 
27c60 4e 6f 74 46 6f 75 6e 64 2c 20 73 65 74 20 0a 20  NotFound, set . 
27c70 20 2a 2a 20 56 64 62 65 43 75 72 73 6f 72 2e 6d   ** VdbeCursor.m
27c80 6f 76 65 74 6f 54 61 72 67 65 74 20 74 6f 20 74  ovetoTarget to t
27c90 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 69 64  he current rowid
27ca0 2e 20 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d  .  */.  if( pOp-
27cb0 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c  >p4type==P4_TABL
27cc0 45 20 26 26 20 48 41 53 5f 55 50 44 41 54 45 5f  E && HAS_UPDATE_
27cd0 48 4f 4f 4b 28 64 62 29 20 29 7b 0a 20 20 20 20  HOOK(db) ){.    
27ce0 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e  assert( pC->iDb>
27cf0 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  =0 );.    assert
27d00 28 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62 21 3d  ( pOp->p4.pTab!=
27d10 30 20 29 3b 0a 20 20 20 20 7a 44 62 20 3d 20 64  0 );.    zDb = d
27d20 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e  b->aDb[pC->iDb].
27d30 7a 44 62 53 4e 61 6d 65 3b 0a 20 20 20 20 70 54  zDbSName;.    pT
27d40 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 54 61  ab = pOp->p4.pTa
27d50 62 3b 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d  b;.    if( (pOp-
27d60 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 53 41 56  >p5 & OPFLAG_SAV
27d70 45 50 4f 53 49 54 49 4f 4e 29 21 3d 30 20 26 26  EPOSITION)!=0 &&
27d80 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b 0a   pC->isTable ){.
27d90 20 20 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f        pC->moveto
27da0 54 61 72 67 65 74 20 3d 20 73 71 6c 69 74 65 33  Target = sqlite3
27db0 42 74 72 65 65 49 6e 74 65 67 65 72 4b 65 79 28  BtreeIntegerKey(
27dc0 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b  pC->uc.pCursor);
27dd0 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
27de0 20 20 20 20 7a 44 62 20 3d 20 30 3b 20 20 20 2f      zDb = 0;   /
27df0 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 53  * Not needed.  S
27e00 69 6c 65 6e 63 65 20 61 20 63 6f 6d 70 69 6c 65  ilence a compile
27e10 72 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20  r warning. */.  
27e20 20 20 70 54 61 62 20 3d 20 30 3b 20 20 2f 2a 20    pTab = 0;  /* 
27e30 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 53 69 6c  Not needed.  Sil
27e40 65 6e 63 65 20 61 20 63 6f 6d 70 69 6c 65 72 20  ence a compiler 
27e50 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 7d 0a  warning. */.  }.
27e60 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
27e70 4e 41 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f  NABLE_PREUPDATE_
27e80 48 4f 4f 4b 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65  HOOK.  /* Invoke
27e90 20 74 68 65 20 70 72 65 2d 75 70 64 61 74 65 2d   the pre-update-
27ea0 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64  hook if required
27eb0 2e 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78  . */.  if( db->x
27ec0 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63  PreUpdateCallbac
27ed0 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 70 54 61  k && pOp->p4.pTa
27ee0 62 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  b ){.    assert(
27ef0 20 21 28 6f 70 66 6c 61 67 73 20 26 20 4f 50 46   !(opflags & OPF
27f00 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20 0a 20  LAG_ISUPDATE) . 
27f10 20 20 20 20 20 20 20 20 7c 7c 20 48 61 73 52 6f          || HasRo
27f20 77 69 64 28 70 54 61 62 29 3d 3d 30 20 0a 20 20  wid(pTab)==0 .  
27f30 20 20 20 20 20 20 20 7c 7c 20 28 61 4d 65 6d 5b         || (aMem[
27f40 70 4f 70 2d 3e 70 33 5d 2e 66 6c 61 67 73 20 26  pOp->p3].flags &
27f50 20 4d 45 4d 5f 49 6e 74 29 20 0a 20 20 20 20 29   MEM_Int) .    )
27f60 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
27f70 65 50 72 65 55 70 64 61 74 65 48 6f 6f 6b 28 70  ePreUpdateHook(p
27f80 2c 20 70 43 2c 0a 20 20 20 20 20 20 20 20 28 6f  , pC,.        (o
27f90 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 41 47 5f  pflags & OPFLAG_
27fa0 49 53 55 50 44 41 54 45 29 20 3f 20 53 51 4c 49  ISUPDATE) ? SQLI
27fb0 54 45 5f 55 50 44 41 54 45 20 3a 20 53 51 4c 49  TE_UPDATE : SQLI
27fc0 54 45 5f 44 45 4c 45 54 45 2c 20 0a 20 20 20 20  TE_DELETE, .    
27fd0 20 20 20 20 7a 44 62 2c 20 70 54 61 62 2c 20 70      zDb, pTab, p
27fe0 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 2c  C->movetoTarget,
27ff0 0a 20 20 20 20 20 20 20 20 70 4f 70 2d 3e 70 33  .        pOp->p3
28000 0a 20 20 20 20 29 3b 0a 20 20 7d 0a 20 20 69 66  .    );.  }.  if
28010 28 20 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c  ( opflags & OPFL
28020 41 47 5f 49 53 4e 4f 4f 50 20 29 20 62 72 65 61  AG_ISNOOP ) brea
28030 6b 3b 0a 23 65 6e 64 69 66 0a 20 0a 20 20 2f 2a  k;.#endif. .  /*
28040 20 4f 6e 6c 79 20 66 6c 61 67 73 20 74 68 61 74   Only flags that
28050 20 63 61 6e 20 62 65 20 73 65 74 20 61 72 65 20   can be set are 
28060 53 41 56 45 50 4f 49 53 54 49 4f 4e 20 61 6e 64  SAVEPOISTION and
28070 20 41 55 58 44 45 4c 45 54 45 20 2a 2f 20 0a 20   AUXDELETE */ . 
28080 20 61 73 73 65 72 74 28 20 28 70 4f 70 2d 3e 70   assert( (pOp->p
28090 35 20 26 20 7e 28 4f 50 46 4c 41 47 5f 53 41 56  5 & ~(OPFLAG_SAV
280a0 45 50 4f 53 49 54 49 4f 4e 7c 4f 50 46 4c 41 47  EPOSITION|OPFLAG
280b0 5f 41 55 58 44 45 4c 45 54 45 29 29 3d 3d 30 20  _AUXDELETE))==0 
280c0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 46  );.  assert( OPF
280d0 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e  LAG_SAVEPOSITION
280e0 3d 3d 42 54 52 45 45 5f 53 41 56 45 50 4f 53 49  ==BTREE_SAVEPOSI
280f0 54 49 4f 4e 20 29 3b 0a 20 20 61 73 73 65 72 74  TION );.  assert
28100 28 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45  ( OPFLAG_AUXDELE
28110 54 45 3d 3d 42 54 52 45 45 5f 41 55 58 44 45 4c  TE==BTREE_AUXDEL
28120 45 54 45 20 29 3b 0a 0a 23 69 66 64 65 66 20 53  ETE );..#ifdef S
28130 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66  QLITE_DEBUG.  if
28140 28 20 70 2d 3e 70 46 72 61 6d 65 3d 3d 30 20 29  ( p->pFrame==0 )
28150 7b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 69 73  {.    if( pC->is
28160 45 70 68 65 6d 65 72 61 6c 3d 3d 30 0a 20 20 20  Ephemeral==0.   
28170 20 20 20 20 20 26 26 20 28 70 4f 70 2d 3e 70 35       && (pOp->p5
28180 20 26 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c   & OPFLAG_AUXDEL
28190 45 54 45 29 3d 3d 30 0a 20 20 20 20 20 20 20 20  ETE)==0.        
281a0 26 26 20 28 70 43 2d 3e 77 72 46 6c 61 67 20 26  && (pC->wrFlag &
281b0 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54   OPFLAG_FORDELET
281c0 45 29 3d 3d 30 0a 20 20 20 20 20 20 29 7b 0a 20  E)==0.      ){. 
281d0 20 20 20 20 20 6e 45 78 74 72 61 44 65 6c 65 74       nExtraDelet
281e0 65 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  e++;.    }.    i
281f0 66 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50 46  f( pOp->p2 & OPF
28200 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 7b 0a 20  LAG_NCHANGE ){. 
28210 20 20 20 20 20 6e 45 78 74 72 61 44 65 6c 65 74       nExtraDelet
28220 65 2d 2d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23  e--;.    }.  }.#
28230 65 6e 64 69 66 0a 0a 20 20 72 63 20 3d 20 73 71  endif..  rc = sq
28240 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65 74 65  lite3BtreeDelete
28250 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
28260 20 70 4f 70 2d 3e 70 35 29 3b 0a 20 20 70 43 2d   pOp->p5);.  pC-
28270 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
28280 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43  ACHE_STALE;.  pC
28290 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 30  ->seekResult = 0
282a0 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
282b0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
282c0 72 72 6f 72 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f  rror;..  /* Invo
282d0 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f  ke the update-ho
282e0 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e 20  ok if required. 
282f0 2a 2f 0a 20 20 69 66 28 20 6f 70 66 6c 61 67 73  */.  if( opflags
28300 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47   & OPFLAG_NCHANG
28310 45 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61  E ){.    p->nCha
28320 6e 67 65 2b 2b 3b 0a 20 20 20 20 69 66 28 20 64  nge++;.    if( d
28330 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  b->xUpdateCallba
28340 63 6b 20 26 26 20 48 61 73 52 6f 77 69 64 28 70  ck && HasRowid(p
28350 54 61 62 29 20 29 7b 0a 20 20 20 20 20 20 64 62  Tab) ){.      db
28360 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  ->xUpdateCallbac
28370 6b 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67  k(db->pUpdateArg
28380 2c 20 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c  , SQLITE_DELETE,
28390 20 7a 44 62 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d   zDb, pTab->zNam
283a0 65 2c 0a 20 20 20 20 20 20 20 20 20 20 70 43 2d  e,.          pC-
283b0 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 29 3b 0a  >movetoTarget);.
283c0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43        assert( pC
283d0 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20 20  ->iDb>=0 );.    
283e0 7d 0a 20 20 7d 0a 0a 20 20 62 72 65 61 6b 3b 0a  }.  }..  break;.
283f0 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73  }./* Opcode: Res
28400 65 74 43 6f 75 6e 74 20 2a 20 2a 20 2a 20 2a 20  etCount * * * * 
28410 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75  *.**.** The valu
28420 65 20 6f 66 20 74 68 65 20 63 68 61 6e 67 65 20  e of the change 
28430 63 6f 75 6e 74 65 72 20 69 73 20 63 6f 70 69 65  counter is copie
28440 64 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  d to the databas
28450 65 20 68 61 6e 64 6c 65 0a 2a 2a 20 63 68 61 6e  e handle.** chan
28460 67 65 20 63 6f 75 6e 74 65 72 20 28 72 65 74 75  ge counter (retu
28470 72 6e 65 64 20 62 79 20 73 75 62 73 65 71 75 65  rned by subseque
28480 6e 74 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c 69  nt calls to sqli
28490 74 65 33 5f 63 68 61 6e 67 65 73 28 29 29 2e 0a  te3_changes())..
284a0 2a 2a 20 54 68 65 6e 20 74 68 65 20 56 4d 73 20  ** Then the VMs 
284b0 69 6e 74 65 72 6e 61 6c 20 63 68 61 6e 67 65 20  internal change 
284c0 63 6f 75 6e 74 65 72 20 72 65 73 65 74 73 20 74  counter resets t
284d0 6f 20 30 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20  o 0..** This is 
284e0 75 73 65 64 20 62 79 20 74 72 69 67 67 65 72 20  used by trigger 
284f0 70 72 6f 67 72 61 6d 73 2e 0a 2a 2f 0a 63 61 73  programs..*/.cas
28500 65 20 4f 50 5f 52 65 73 65 74 43 6f 75 6e 74 3a  e OP_ResetCount:
28510 20 7b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65   {.  sqlite3Vdbe
28520 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20 70  SetChanges(db, p
28530 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 70 2d  ->nChange);.  p-
28540 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20  >nChange = 0;.  
28550 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
28560 6f 64 65 3a 20 53 6f 72 74 65 72 43 6f 6d 70 61  ode: SorterCompa
28570 72 65 20 50 31 20 50 32 20 50 33 20 50 34 0a 2a  re P1 P2 P3 P4.*
28580 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 6b  * Synopsis: if k
28590 65 79 28 50 31 29 21 3d 74 72 69 6d 28 72 5b 50  ey(P1)!=trim(r[P
285a0 33 5d 2c 50 34 29 20 67 6f 74 6f 20 50 32 0a 2a  3],P4) goto P2.*
285b0 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 73 6f 72  *.** P1 is a sor
285c0 74 65 72 20 63 75 72 73 6f 72 2e 20 54 68 69 73  ter cursor. This
285d0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 6d   instruction com
285e0 70 61 72 65 73 20 61 20 70 72 65 66 69 78 20 6f  pares a prefix o
285f0 66 20 74 68 65 0a 2a 2a 20 72 65 63 6f 72 64 20  f the.** record 
28600 62 6c 6f 62 20 69 6e 20 72 65 67 69 73 74 65 72  blob in register
28610 20 50 33 20 61 67 61 69 6e 73 74 20 61 20 70 72   P3 against a pr
28620 65 66 69 78 20 6f 66 20 74 68 65 20 65 6e 74 72  efix of the entr
28630 79 20 74 68 61 74 20 0a 2a 2a 20 74 68 65 20 73  y that .** the s
28640 6f 72 74 65 72 20 63 75 72 73 6f 72 20 63 75 72  orter cursor cur
28650 72 65 6e 74 6c 79 20 70 6f 69 6e 74 73 20 74 6f  rently points to
28660 2e 20 20 4f 6e 6c 79 20 74 68 65 20 66 69 72 73  .  Only the firs
28670 74 20 50 34 20 66 69 65 6c 64 73 0a 2a 2a 20 6f  t P4 fields.** o
28680 66 20 72 5b 50 33 5d 20 61 6e 64 20 74 68 65 20  f r[P3] and the 
28690 73 6f 72 74 65 72 20 72 65 63 6f 72 64 20 61 72  sorter record ar
286a0 65 20 63 6f 6d 70 61 72 65 64 2e 0a 2a 2a 0a 2a  e compared..**.*
286b0 2a 20 49 66 20 65 69 74 68 65 72 20 50 33 20 6f  * If either P3 o
286c0 72 20 74 68 65 20 73 6f 72 74 65 72 20 63 6f 6e  r the sorter con
286d0 74 61 69 6e 73 20 61 20 4e 55 4c 4c 20 69 6e 20  tains a NULL in 
286e0 6f 6e 65 20 6f 66 20 74 68 65 69 72 20 73 69 67  one of their sig
286f0 6e 69 66 69 63 61 6e 74 0a 2a 2a 20 66 69 65 6c  nificant.** fiel
28700 64 73 20 28 6e 6f 74 20 63 6f 75 6e 74 69 6e 67  ds (not counting
28710 20 74 68 65 20 50 34 20 66 69 65 6c 64 73 20 61   the P4 fields a
28720 74 20 74 68 65 20 65 6e 64 20 77 68 69 63 68 20  t the end which 
28730 61 72 65 20 69 67 6e 6f 72 65 64 29 20 74 68 65  are ignored) the
28740 6e 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72 69  n.** the compari
28750 73 6f 6e 20 69 73 20 61 73 73 75 6d 65 64 20 74  son is assumed t
28760 6f 20 62 65 20 65 71 75 61 6c 2e 0a 2a 2a 0a 2a  o be equal..**.*
28770 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  * Fall through t
28780 6f 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  o next instructi
28790 6f 6e 20 69 66 20 74 68 65 20 74 77 6f 20 72 65  on if the two re
287a0 63 6f 72 64 73 20 63 6f 6d 70 61 72 65 20 65 71  cords compare eq
287b0 75 61 6c 20 74 6f 0a 2a 2a 20 65 61 63 68 20 6f  ual to.** each o
287c0 74 68 65 72 2e 20 20 4a 75 6d 70 20 74 6f 20 50  ther.  Jump to P
287d0 32 20 69 66 20 74 68 65 79 20 61 72 65 20 64 69  2 if they are di
287e0 66 66 65 72 65 6e 74 2e 0a 2a 2f 0a 63 61 73 65  fferent..*/.case
287f0 20 4f 50 5f 53 6f 72 74 65 72 43 6f 6d 70 61 72   OP_SorterCompar
28800 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  e: {.  VdbeCurso
28810 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73  r *pC;.  int res
28820 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 43 6f 6c 3b  ;.  int nKeyCol;
28830 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ..  pC = p->apCs
28840 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
28850 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70  sert( isSorter(p
28860 43 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  C) );.  assert( 
28870 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
28880 49 4e 54 33 32 20 29 3b 0a 20 20 70 49 6e 33 20  INT32 );.  pIn3 
28890 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
288a0 3b 0a 20 20 6e 4b 65 79 43 6f 6c 20 3d 20 70 4f  ;.  nKeyCol = pO
288b0 70 2d 3e 70 34 2e 69 3b 0a 20 20 72 65 73 20 3d  p->p4.i;.  res =
288c0 20 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   0;.  rc = sqlit
288d0 65 33 56 64 62 65 53 6f 72 74 65 72 43 6f 6d 70  e3VdbeSorterComp
288e0 61 72 65 28 70 43 2c 20 70 49 6e 33 2c 20 6e 4b  are(pC, pIn3, nK
288f0 65 79 43 6f 6c 2c 20 26 72 65 73 29 3b 0a 20 20  eyCol, &res);.  
28900 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
28910 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28  res!=0,2);.  if(
28920 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
28930 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
28940 20 69 66 28 20 72 65 73 20 29 20 67 6f 74 6f 20   if( res ) goto 
28950 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72  jump_to_p2;.  br
28960 65 61 6b 3b 0a 7d 3b 0a 0a 2f 2a 20 4f 70 63 6f  eak;.};../* Opco
28970 64 65 3a 20 53 6f 72 74 65 72 44 61 74 61 20 50  de: SorterData P
28980 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
28990 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 64  ynopsis: r[P2]=d
289a0 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  ata.**.** Write 
289b0 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
289c0 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 6f 72   the current sor
289d0 74 65 72 20 64 61 74 61 20 66 6f 72 20 73 6f 72  ter data for sor
289e0 74 65 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a  ter cursor P1..*
289f0 2a 20 54 68 65 6e 20 63 6c 65 61 72 20 74 68 65  * Then clear the
28a00 20 63 6f 6c 75 6d 6e 20 68 65 61 64 65 72 20 63   column header c
28a10 61 63 68 65 20 6f 6e 20 63 75 72 73 6f 72 20 50  ache on cursor P
28a20 33 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  3..**.** This op
28a30 63 6f 64 65 20 69 73 20 6e 6f 72 6d 61 6c 6c 79  code is normally
28a40 20 75 73 65 20 74 6f 20 6d 6f 76 65 20 61 20 72   use to move a r
28a50 65 63 6f 72 64 20 6f 75 74 20 6f 66 20 74 68 65  ecord out of the
28a60 20 73 6f 72 74 65 72 20 61 6e 64 20 69 6e 74 6f   sorter and into
28a70 0a 2a 2a 20 61 20 72 65 67 69 73 74 65 72 20 74  .** a register t
28a80 68 61 74 20 69 73 20 74 68 65 20 73 6f 75 72 63  hat is the sourc
28a90 65 20 66 6f 72 20 61 20 70 73 65 75 64 6f 2d 74  e for a pseudo-t
28aa0 61 62 6c 65 20 63 75 72 73 6f 72 20 63 72 65 61  able cursor crea
28ab0 74 65 64 20 75 73 69 6e 67 0a 2a 2a 20 4f 70 65  ted using.** Ope
28ac0 6e 50 73 65 75 64 6f 2e 20 20 54 68 61 74 20 70  nPseudo.  That p
28ad0 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73  seudo-table curs
28ae0 6f 72 20 69 73 20 74 68 65 20 6f 6e 65 20 74 68  or is the one th
28af0 61 74 20 69 73 20 69 64 65 6e 74 69 66 69 65 64  at is identified
28b00 20 62 79 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72   by.** parameter
28b10 20 50 33 2e 20 20 43 6c 65 61 72 69 6e 67 20 74   P3.  Clearing t
28b20 68 65 20 50 33 20 63 6f 6c 75 6d 6e 20 63 61 63  he P3 column cac
28b30 68 65 20 61 73 20 70 61 72 74 20 6f 66 20 74 68  he as part of th
28b40 69 73 20 6f 70 63 6f 64 65 20 73 61 76 65 73 0a  is opcode saves.
28b50 2a 2a 20 75 73 20 66 72 6f 6d 20 68 61 76 69 6e  ** us from havin
28b60 67 20 74 6f 20 69 73 73 75 65 20 61 20 73 65 70  g to issue a sep
28b70 61 72 61 74 65 20 4e 75 6c 6c 52 6f 77 20 69 6e  arate NullRow in
28b80 73 74 72 75 63 74 69 6f 6e 20 74 6f 20 63 6c 65  struction to cle
28b90 61 72 20 74 68 61 74 20 63 61 63 68 65 2e 0a 2a  ar that cache..*
28ba0 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72  /.case OP_Sorter
28bb0 44 61 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75  Data: {.  VdbeCu
28bc0 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 70 4f 75  rsor *pC;..  pOu
28bd0 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
28be0 32 5d 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70  2];.  pC = p->ap
28bf0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
28c00 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72  assert( isSorter
28c10 28 70 43 29 20 29 3b 0a 20 20 72 63 20 3d 20 73  (pC) );.  rc = s
28c20 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72  qlite3VdbeSorter
28c30 52 6f 77 6b 65 79 28 70 43 2c 20 70 4f 75 74 29  Rowkey(pC, pOut)
28c40 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 21 3d  ;.  assert( rc!=
28c50 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 4f  SQLITE_OK || (pO
28c60 75 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ut->flags & MEM_
28c70 42 6c 6f 62 29 20 29 3b 0a 20 20 61 73 73 65 72  Blob) );.  asser
28c80 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
28c90 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
28ca0 73 6f 72 20 29 3b 0a 20 20 69 66 28 20 72 63 20  sor );.  if( rc 
28cb0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
28cc0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 2d 3e  _to_error;.  p->
28cd0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 33 5d 2d 3e  apCsr[pOp->p3]->
28ce0 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
28cf0 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 62 72 65  CHE_STALE;.  bre
28d00 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
28d10 3a 20 52 6f 77 44 61 74 61 20 50 31 20 50 32 20  : RowData P1 P2 
28d20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
28d30 69 73 3a 20 72 5b 50 32 5d 3d 64 61 74 61 0a 2a  is: r[P2]=data.*
28d40 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20  *.** Write into 
28d50 72 65 67 69 73 74 65 72 20 50 32 20 74 68 65 20  register P2 the 
28d60 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20 63 6f 6e  complete row con
28d70 74 65 6e 74 20 66 6f 72 20 74 68 65 20 72 6f 77  tent for the row
28d80 20 61 74 20 0a 2a 2a 20 77 68 69 63 68 20 63 75   at .** which cu
28d90 72 73 6f 72 20 50 31 20 69 73 20 63 75 72 72 65  rsor P1 is curre
28da0 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a  ntly pointing..*
28db0 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20 69 6e  * There is no in
28dc0 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20  terpretation of 
28dd0 74 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20 49  the data.  .** I
28de0 74 20 69 73 20 6a 75 73 74 20 63 6f 70 69 65 64  t is just copied
28df0 20 6f 6e 74 6f 20 74 68 65 20 50 32 20 72 65 67   onto the P2 reg
28e00 69 73 74 65 72 20 65 78 61 63 74 6c 79 20 61 73  ister exactly as
28e10 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e 64   .** it is found
28e20 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
28e30 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   file..**.** If 
28e40 63 75 72 73 6f 72 20 50 31 20 69 73 20 61 6e 20  cursor P1 is an 
28e50 69 6e 64 65 78 2c 20 74 68 65 6e 20 74 68 65 20  index, then the 
28e60 63 6f 6e 74 65 6e 74 20 69 73 20 74 68 65 20 6b  content is the k
28e70 65 79 20 6f 66 20 74 68 65 20 72 6f 77 2e 0a 2a  ey of the row..*
28e80 2a 20 49 66 20 63 75 72 73 6f 72 20 50 32 20 69  * If cursor P2 i
28e90 73 20 61 20 74 61 62 6c 65 2c 20 74 68 65 6e 20  s a table, then 
28ea0 74 68 65 20 63 6f 6e 74 65 6e 74 20 65 78 74 72  the content extr
28eb0 61 63 74 65 64 20 69 73 20 74 68 65 20 64 61 74  acted is the dat
28ec0 61 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  a..**.** If the 
28ed0 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62  P1 cursor must b
28ee0 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20  e pointing to a 
28ef0 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61  valid row (not a
28f00 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66   NULL row).** of
28f10 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e   a real table, n
28f20 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  ot a pseudo-tabl
28f30 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 21 3d  e..**.** If P3!=
28f40 30 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f  0 then this opco
28f50 64 65 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f  de is allowed to
28f60 20 6d 61 6b 65 20 61 6e 20 65 70 68 65 6d 65 72   make an ephemer
28f70 61 6c 20 70 6f 69 6e 74 65 72 0a 2a 2a 20 69 6e  al pointer.** in
28f80 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
28f90 70 61 67 65 2e 20 20 54 68 61 74 20 6d 65 61 6e  page.  That mean
28fa0 73 20 74 68 61 74 20 74 68 65 20 63 6f 6e 74 65  s that the conte
28fb0 6e 74 20 6f 66 20 74 68 65 20 6f 75 74 70 75 74  nt of the output
28fc0 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 77 69 6c  .** register wil
28fd0 6c 20 62 65 20 69 6e 76 61 6c 69 64 61 74 65 64  l be invalidated
28fe0 20 61 73 20 73 6f 6f 6e 20 61 73 20 74 68 65 20   as soon as the 
28ff0 63 75 72 73 6f 72 20 6d 6f 76 65 73 20 2d 20 69  cursor moves - i
29000 6e 63 6c 75 64 69 6e 67 0a 2a 2a 20 6d 6f 76 65  ncluding.** move
29010 73 20 63 61 75 73 65 64 20 62 79 20 6f 74 68 65  s caused by othe
29020 72 20 63 75 72 73 6f 72 73 20 74 68 61 74 20 22  r cursors that "
29030 73 61 76 65 22 20 74 68 65 20 63 75 72 72 65 6e  save" the curren
29040 74 20 63 75 72 73 6f 72 73 0a 2a 2a 20 70 6f 73  t cursors.** pos
29050 69 74 69 6f 6e 20 69 6e 20 6f 72 64 65 72 20 74  ition in order t
29060 68 61 74 20 74 68 65 79 20 63 61 6e 20 77 72 69  hat they can wri
29070 74 65 20 74 6f 20 74 68 65 20 73 61 6d 65 20 74  te to the same t
29080 61 62 6c 65 2e 20 20 49 66 20 50 33 3d 3d 30 0a  able.  If P3==0.
29090 2a 2a 20 74 68 65 6e 20 61 20 63 6f 70 79 20 6f  ** then a copy o
290a0 66 20 74 68 65 20 64 61 74 61 20 69 73 20 6d 61  f the data is ma
290b0 64 65 20 69 6e 74 6f 20 6d 65 6d 6f 72 79 2e 20  de into memory. 
290c0 20 50 33 21 3d 30 20 69 73 20 66 61 73 74 65 72   P3!=0 is faster
290d0 2c 20 62 75 74 0a 2a 2a 20 50 33 3d 3d 30 20 69  , but.** P3==0 i
290e0 73 20 73 61 66 65 72 2e 0a 2a 2a 0a 2a 2a 20 49  s safer..**.** I
290f0 66 20 50 33 21 3d 30 20 74 68 65 6e 20 74 68 65  f P3!=0 then the
29100 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20   content of the 
29110 50 32 20 72 65 67 69 73 74 65 72 20 69 73 20 75  P2 register is u
29120 6e 73 75 69 74 61 62 6c 65 20 66 6f 72 20 75 73  nsuitable for us
29130 65 0a 2a 2a 20 69 6e 20 4f 50 5f 52 65 73 75 6c  e.** in OP_Resul
29140 74 20 61 6e 64 20 61 6e 79 20 4f 50 5f 52 65 73  t and any OP_Res
29150 75 6c 74 20 77 69 6c 6c 20 69 6e 76 61 6c 69 64  ult will invalid
29160 61 74 65 20 74 68 65 20 50 32 20 72 65 67 69 73  ate the P2 regis
29170 74 65 72 20 63 6f 6e 74 65 6e 74 2e 0a 2a 2a 20  ter content..** 
29180 54 68 65 20 50 32 20 72 65 67 69 73 74 65 72 20  The P2 register 
29190 63 6f 6e 74 65 6e 74 20 69 73 20 69 6e 76 61 6c  content is inval
291a0 69 64 61 74 65 64 20 62 79 20 6f 70 63 6f 64 65  idated by opcode
291b0 73 20 6c 69 6b 65 20 4f 50 5f 46 75 6e 63 74 69  s like OP_Functi
291c0 6f 6e 20 6f 72 0a 2a 2a 20 62 79 20 61 6e 79 20  on or.** by any 
291d0 75 73 65 20 6f 66 20 61 6e 6f 74 68 65 72 20 63  use of another c
291e0 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74  ursor pointing t
291f0 6f 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65  o the same table
29200 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
29210 44 61 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75  Data: {.  VdbeCu
29220 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75  rsor *pC;.  BtCu
29230 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 75  rsor *pCrsr;.  u
29240 33 32 20 6e 3b 0a 0a 20 20 70 4f 75 74 20 3d 20  32 n;..  pOut = 
29250 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
29260 2c 20 70 4f 70 29 3b 0a 0a 20 20 61 73 73 65 72  , pOp);..  asser
29270 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
29280 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
29290 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
292a0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
292b0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
292c0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
292d0 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
292e0 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61  YPE_BTREE );.  a
292f0 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28  ssert( isSorter(
29300 70 43 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  pC)==0 );.  asse
29310 72 74 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 3d  rt( pC->nullRow=
29320 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
29330 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d  pC->uc.pCursor!=
29340 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  0 );.  pCrsr = p
29350 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 0a  C->uc.pCursor;..
29360 20 20 2f 2a 20 54 68 65 20 4f 50 5f 52 6f 77 44    /* The OP_RowD
29370 61 74 61 20 6f 70 63 6f 64 65 73 20 61 6c 77 61  ata opcodes alwa
29380 79 73 20 66 6f 6c 6c 6f 77 20 4f 50 5f 4e 6f 74  ys follow OP_Not
29390 45 78 69 73 74 73 20 6f 72 0a 20 20 2a 2a 20 4f  Exists or.  ** O
293a0 50 5f 53 65 65 6b 52 6f 77 69 64 20 6f 72 20 4f  P_SeekRowid or O
293b0 50 5f 52 65 77 69 6e 64 2f 4f 70 5f 4e 65 78 74  P_Rewind/Op_Next
293c0 20 77 69 74 68 20 6e 6f 20 69 6e 74 65 72 76 65   with no interve
293d0 6e 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e  ning instruction
293e0 73 0a 20 20 2a 2a 20 74 68 61 74 20 6d 69 67 68  s.  ** that migh
293f0 74 20 69 6e 76 61 6c 69 64 61 74 65 20 74 68 65  t invalidate the
29400 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2a 20 49 66   cursor..  ** If
29410 20 74 68 69 73 20 77 68 65 72 65 20 6e 6f 74 20   this where not 
29420 74 68 65 20 63 61 73 65 2c 20 6f 6e 20 6f 66 20  the case, on of 
29430 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 73  the following as
29440 73 65 72 74 28 29 73 0a 20 20 2a 2a 20 77 6f 75  sert()s.  ** wou
29450 6c 64 20 66 61 69 6c 2e 20 20 53 68 6f 75 6c 64  ld fail.  Should
29460 20 74 68 69 73 20 65 76 65 72 20 63 68 61 6e 67   this ever chang
29470 65 20 28 62 65 63 61 75 73 65 20 6f 66 20 63 68  e (because of ch
29480 61 6e 67 65 73 20 69 6e 20 74 68 65 20 63 6f 64  anges in the cod
29490 65 0a 20 20 2a 2a 20 67 65 6e 65 72 61 74 6f 72  e.  ** generator
294a0 29 20 74 68 65 6e 20 74 68 65 20 66 69 78 20 77  ) then the fix w
294b0 6f 75 6c 64 20 62 65 20 74 6f 20 69 6e 73 65 72  ould be to inser
294c0 74 20 61 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a  t a call to.  **
294d0 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
294e0 6f 72 4d 6f 76 65 74 6f 28 29 2e 0a 20 20 2a 2f  orMoveto()..  */
294f0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64  .  assert( pC->d
29500 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
29510 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71   );.  assert( sq
29520 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
29530 49 73 56 61 6c 69 64 28 70 43 72 73 72 29 20 29  IsValid(pCrsr) )
29540 3b 0a 23 69 66 20 30 20 20 2f 2a 20 4e 6f 74 20  ;.#if 0  /* Not 
29550 72 65 71 75 69 72 65 64 20 64 75 65 20 74 6f 20  required due to 
29560 74 68 65 20 70 72 65 76 69 6f 75 73 20 74 6f 20  the previous to 
29570 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
29580 6e 74 73 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71  nts */.  rc = sq
29590 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
295a0 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66 28  oveto(pC);.  if(
295b0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
295c0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
295d0 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66  to_error;.#endif
295e0 0a 0a 20 20 6e 20 3d 20 73 71 6c 69 74 65 33 42  ..  n = sqlite3B
295f0 74 72 65 65 50 61 79 6c 6f 61 64 53 69 7a 65 28  treePayloadSize(
29600 70 43 72 73 72 29 3b 0a 20 20 69 66 28 20 6e 3e  pCrsr);.  if( n>
29610 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b  (u32)db->aLimit[
29620 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
29630 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f  GTH] ){.    goto
29640 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20   too_big;.  }.  
29650 74 65 73 74 63 61 73 65 28 20 6e 3d 3d 30 20 29  testcase( n==0 )
29660 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
29670 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65  VdbeMemFromBtree
29680 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f  (pCrsr, 0, n, pO
29690 75 74 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  ut);.  if( rc ) 
296a0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
296b0 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 21  o_error;.  if( !
296c0 70 4f 70 2d 3e 70 33 20 29 20 44 65 65 70 68 65  pOp->p3 ) Deephe
296d0 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a  meralize(pOut);.
296e0 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
296f0 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 52  BSIZE(pOut);.  R
29700 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
29710 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20  p->p2, pOut);.  
29720 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
29730 6f 64 65 3a 20 52 6f 77 69 64 20 50 31 20 50 32  ode: Rowid P1 P2
29740 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
29750 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a  is: r[P2]=rowid.
29760 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 69 6e 20 72  **.** Store in r
29770 65 67 69 73 74 65 72 20 50 32 20 61 6e 20 69 6e  egister P2 an in
29780 74 65 67 65 72 20 77 68 69 63 68 20 69 73 20 74  teger which is t
29790 68 65 20 6b 65 79 20 6f 66 20 74 68 65 20 74 61  he key of the ta
297a0 62 6c 65 20 65 6e 74 72 79 20 74 68 61 74 0a 2a  ble entry that.*
297b0 2a 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c  * P1 is currentl
297c0 79 20 70 6f 69 6e 74 20 74 6f 2e 0a 2a 2a 0a 2a  y point to..**.*
297d0 2a 20 50 31 20 63 61 6e 20 62 65 20 65 69 74 68  * P1 can be eith
297e0 65 72 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 74  er an ordinary t
297f0 61 62 6c 65 20 6f 72 20 61 20 76 69 72 74 75 61  able or a virtua
29800 6c 20 74 61 62 6c 65 2e 20 20 54 68 65 72 65 20  l table.  There 
29810 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 61 20  used to.** be a 
29820 73 65 70 61 72 61 74 65 20 4f 50 5f 56 52 6f 77  separate OP_VRow
29830 69 64 20 6f 70 63 6f 64 65 20 66 6f 72 20 75 73  id opcode for us
29840 65 20 77 69 74 68 20 76 69 72 74 75 61 6c 20 74  e with virtual t
29850 61 62 6c 65 73 2c 20 62 75 74 20 74 68 69 73 0a  ables, but this.
29860 2a 2a 20 6f 6e 65 20 6f 70 63 6f 64 65 20 6e 6f  ** one opcode no
29870 77 20 77 6f 72 6b 73 20 66 6f 72 20 62 6f 74 68  w works for both
29880 20 74 61 62 6c 65 20 74 79 70 65 73 2e 0a 2a 2f   table types..*/
29890 0a 63 61 73 65 20 4f 50 5f 52 6f 77 69 64 3a 20  .case OP_Rowid: 
298a0 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
298b0 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 56    /* out2 */.  V
298c0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
298d0 20 69 36 34 20 76 3b 0a 20 20 73 71 6c 69 74 65   i64 v;.  sqlite
298e0 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
298f0 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
29900 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
29910 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
29920 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
29930 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
29940 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
29950 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
29960 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
29970 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
29980 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
29990 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
299a0 79 70 65 21 3d 43 55 52 54 59 50 45 5f 50 53 45  ype!=CURTYPE_PSE
299b0 55 44 4f 20 7c 7c 20 70 43 2d 3e 6e 75 6c 6c 52  UDO || pC->nullR
299c0 6f 77 20 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e  ow );.  if( pC->
299d0 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 70  nullRow ){.    p
299e0 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
299f0 5f 4e 75 6c 6c 3b 0a 20 20 20 20 62 72 65 61 6b  _Null;.    break
29a00 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43  ;.  }else if( pC
29a10 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
29a20 20 29 7b 0a 20 20 20 20 76 20 3d 20 70 43 2d 3e   ){.    v = pC->
29a30 6d 6f 76 65 74 6f 54 61 72 67 65 74 3b 0a 23 69  movetoTarget;.#i
29a40 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
29a50 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
29a60 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 65   }else if( pC->e
29a70 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
29a80 5f 56 54 41 42 20 29 7b 0a 20 20 20 20 61 73 73  _VTAB ){.    ass
29a90 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 56 43 75  ert( pC->uc.pVCu
29aa0 72 21 3d 30 20 29 3b 0a 20 20 20 20 70 56 74 61  r!=0 );.    pVta
29ab0 62 20 3d 20 70 43 2d 3e 75 63 2e 70 56 43 75 72  b = pC->uc.pVCur
29ac0 2d 3e 70 56 74 61 62 3b 0a 20 20 20 20 70 4d 6f  ->pVtab;.    pMo
29ad0 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d  dule = pVtab->pM
29ae0 6f 64 75 6c 65 3b 0a 20 20 20 20 61 73 73 65 72  odule;.    asser
29af0 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77  t( pModule->xRow
29b00 69 64 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 70  id );.    rc = p
29b10 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64 28 70  Module->xRowid(p
29b20 43 2d 3e 75 63 2e 70 56 43 75 72 2c 20 26 76 29  C->uc.pVCur, &v)
29b30 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74 61  ;.    sqlite3Vta
29b40 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c  bImportErrmsg(p,
29b50 20 70 56 74 61 62 29 3b 0a 20 20 20 20 69 66 28   pVtab);.    if(
29b60 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
29b70 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23  _due_to_error;.#
29b80 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
29b90 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
29ba0 45 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  E */.  }else{.  
29bb0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
29bc0 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
29bd0 42 54 52 45 45 20 29 3b 0a 20 20 20 20 61 73 73  BTREE );.    ass
29be0 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72  ert( pC->uc.pCur
29bf0 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 72 63  sor!=0 );.    rc
29c00 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75   = sqlite3VdbeCu
29c10 72 73 6f 72 52 65 73 74 6f 72 65 28 70 43 29 3b  rsorRestore(pC);
29c20 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f  .    if( rc ) go
29c30 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
29c40 65 72 72 6f 72 3b 0a 20 20 20 20 69 66 28 20 70  error;.    if( p
29c50 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20  C->nullRow ){.  
29c60 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
29c70 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20  = MEM_Null;.    
29c80 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
29c90 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33 42 74     v = sqlite3Bt
29ca0 72 65 65 49 6e 74 65 67 65 72 4b 65 79 28 70 43  reeIntegerKey(pC
29cb0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20  ->uc.pCursor);. 
29cc0 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d   }.  pOut->u.i =
29cd0 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   v;.  break;.}..
29ce0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 52  /* Opcode: NullR
29cf0 6f 77 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  ow P1 * * * *.**
29d00 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20 63 75 72  .** Move the cur
29d10 73 6f 72 20 50 31 20 74 6f 20 61 20 6e 75 6c 6c  sor P1 to a null
29d20 20 72 6f 77 2e 20 20 41 6e 79 20 4f 50 5f 43 6f   row.  Any OP_Co
29d30 6c 75 6d 6e 20 6f 70 65 72 61 74 69 6f 6e 73 0a  lumn operations.
29d40 2a 2a 20 74 68 61 74 20 6f 63 63 75 72 20 77 68  ** that occur wh
29d50 69 6c 65 20 74 68 65 20 63 75 72 73 6f 72 20 69  ile the cursor i
29d60 73 20 6f 6e 20 74 68 65 20 6e 75 6c 6c 20 72 6f  s on the null ro
29d70 77 20 77 69 6c 6c 20 61 6c 77 61 79 73 0a 2a 2a  w will always.**
29d80 20 77 72 69 74 65 20 61 20 4e 55 4c 4c 2e 0a 2a   write a NULL..*
29d90 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 52 6f  /.case OP_NullRo
29da0 77 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  w: {.  VdbeCurso
29db0 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74  r *pC;..  assert
29dc0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
29dd0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
29de0 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
29df0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
29e00 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
29e10 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  );.  pC->nullRow
29e20 20 3d 20 31 3b 0a 20 20 70 43 2d 3e 63 61 63 68   = 1;.  pC->cach
29e30 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
29e40 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 70 43 2d  STALE;.  if( pC-
29e50 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
29e60 50 45 5f 42 54 52 45 45 20 29 7b 0a 20 20 20 20  PE_BTREE ){.    
29e70 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70  assert( pC->uc.p
29e80 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20  Cursor!=0 );.   
29e90 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65   sqlite3BtreeCle
29ea0 61 72 43 75 72 73 6f 72 28 70 43 2d 3e 75 63 2e  arCursor(pC->uc.
29eb0 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 23 69  pCursor);.  }.#i
29ec0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
29ed0 47 0a 20 20 69 66 28 20 70 43 2d 3e 73 65 65 6b  G.  if( pC->seek
29ee0 4f 70 3d 3d 30 20 29 20 70 43 2d 3e 73 65 65 6b  Op==0 ) pC->seek
29ef0 4f 70 20 3d 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3b  Op = OP_NullRow;
29f00 0a 23 65 6e 64 69 66 0a 20 20 62 72 65 61 6b 3b  .#endif.  break;
29f10 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
29f20 65 65 6b 45 6e 64 20 50 31 20 2a 20 2a 20 2a 20  eekEnd P1 * * * 
29f30 2a 0a 2a 2a 0a 2a 2a 20 50 6f 73 69 74 69 6f 6e  *.**.** Position
29f40 20 63 75 72 73 6f 72 20 50 31 20 61 74 20 74 68   cursor P1 at th
29f50 65 20 65 6e 64 20 6f 66 20 74 68 65 20 62 74 72  e end of the btr
29f60 65 65 20 66 6f 72 20 74 68 65 20 70 75 72 70 6f  ee for the purpo
29f70 73 65 20 6f 66 0a 2a 2a 20 61 70 70 65 6e 64 69  se of.** appendi
29f80 6e 67 20 61 20 6e 65 77 20 65 6e 74 72 79 20 6f  ng a new entry o
29f90 6e 74 6f 20 74 68 65 20 62 74 72 65 65 2e 0a 2a  nto the btree..*
29fa0 2a 0a 2a 2a 20 49 74 20 69 73 20 61 73 73 75 6d  *.** It is assum
29fb0 65 64 20 74 68 61 74 20 74 68 65 20 63 75 72 73  ed that the curs
29fc0 6f 72 20 69 73 20 75 73 65 64 20 6f 6e 6c 79 20  or is used only 
29fd0 66 6f 72 20 61 70 70 65 6e 64 69 6e 67 20 61 6e  for appending an
29fe0 64 20 73 6f 0a 2a 2a 20 69 66 20 74 68 65 20 63  d so.** if the c
29ff0 75 72 73 6f 72 20 69 73 20 76 61 6c 69 64 2c 20  ursor is valid, 
2a000 74 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20  then the cursor 
2a010 6d 75 73 74 20 61 6c 72 65 61 64 79 20 62 65 20  must already be 
2a020 70 6f 69 6e 74 69 6e 67 0a 2a 2a 20 61 74 20 74  pointing.** at t
2a030 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 62 74  he end of the bt
2a040 72 65 65 20 61 6e 64 20 73 6f 20 6e 6f 20 63 68  ree and so no ch
2a050 61 6e 67 65 73 20 61 72 65 20 6d 61 64 65 20 74  anges are made t
2a060 6f 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 2e  o.** the cursor.
2a070 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c  .*/./* Opcode: L
2a080 61 73 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ast P1 P2 * * *.
2a090 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75  **.** The next u
2a0a0 73 65 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20  se of the Rowid 
2a0b0 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 50 72 65  or Column or Pre
2a0c0 76 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f  v instruction fo
2a0d0 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65  r P1 .** will re
2a0e0 66 65 72 20 74 6f 20 74 68 65 20 6c 61 73 74 20  fer to the last 
2a0f0 65 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61 74  entry in the dat
2a100 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69  abase table or i
2a110 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20  ndex..** If the 
2a120 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69  table or index i
2a130 73 20 65 6d 70 74 79 20 61 6e 64 20 50 32 3e 30  s empty and P2>0
2a140 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65  , then jump imme
2a150 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a  diately to P2..*
2a160 2a 20 49 66 20 50 32 20 69 73 20 30 20 6f 72 20  * If P2 is 0 or 
2a170 69 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  if the table or 
2a180 69 6e 64 65 78 20 69 73 20 6e 6f 74 20 65 6d 70  index is not emp
2a190 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ty, fall through
2a1a0 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f  .** to the follo
2a1b0 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e  wing instruction
2a1c0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
2a1d0 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63  ode leaves the c
2a1e0 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64  ursor configured
2a1f0 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76 65   to move in reve
2a200 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72  rse order,.** fr
2a210 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f 77 61 72  om the end towar
2a220 64 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e  d the beginning.
2a230 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
2a240 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a  , the cursor is.
2a250 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  ** configured to
2a260 20 75 73 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e   use Prev, not N
2a270 65 78 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ext..*/.case OP_
2a280 53 65 65 6b 45 6e 64 3a 0a 63 61 73 65 20 4f 50  SeekEnd:.case OP
2a290 5f 4c 61 73 74 3a 20 7b 20 20 20 20 20 20 20 20  _Last: {        
2a2a0 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62  /* jump */.  Vdb
2a2b0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
2a2c0 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
2a2d0 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73    int res;..  as
2a2e0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
2a2f0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
2a300 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
2a310 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
2a320 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
2a330 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
2a340 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
2a350 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
2a360 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63    pCrsr = pC->uc
2a370 2e 70 43 75 72 73 6f 72 3b 0a 20 20 72 65 73 20  .pCursor;.  res 
2a380 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70  = 0;.  assert( p
2a390 43 72 73 72 21 3d 30 20 29 3b 0a 23 69 66 64 65  Crsr!=0 );.#ifde
2a3a0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
2a3b0 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 70 4f   pC->seekOp = pO
2a3c0 70 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e 64 69  p->opcode;.#endi
2a3d0 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  f.  if( pOp->opc
2a3e0 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b 45 6e 64 20  ode==OP_SeekEnd 
2a3f0 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
2a400 4f 70 2d 3e 70 32 3d 3d 30 20 29 3b 0a 20 20 20  Op->p2==0 );.   
2a410 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20   pC->seekResult 
2a420 3d 20 2d 31 3b 0a 20 20 20 20 69 66 28 20 73 71  = -1;.    if( sq
2a430 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
2a440 49 73 56 61 6c 69 64 4e 4e 28 70 43 72 73 72 29  IsValidNN(pCrsr)
2a450 20 29 7b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b   ){.      break;
2a460 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 63 20  .    }.  }.  rc 
2a470 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61  = sqlite3BtreeLa
2a480 73 74 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b  st(pCrsr, &res);
2a490 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  .  pC->nullRow =
2a4a0 20 28 75 38 29 72 65 73 3b 0a 20 20 70 43 2d 3e   (u8)res;.  pC->
2a4b0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
2a4c0 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   0;.  pC->cacheS
2a4d0 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
2a4e0 41 4c 45 3b 0a 20 20 69 66 28 20 72 63 20 29 20  ALE;.  if( rc ) 
2a4f0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
2a500 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 70  o_error;.  if( p
2a510 4f 70 2d 3e 70 32 3e 30 20 29 7b 0a 20 20 20 20  Op->p2>0 ){.    
2a520 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
2a530 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69  res!=0,2);.    i
2a540 66 28 20 72 65 73 20 29 20 67 6f 74 6f 20 6a 75  f( res ) goto ju
2a550 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20  mp_to_p2;.  }.  
2a560 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2a570 6f 64 65 3a 20 49 66 53 6d 61 6c 6c 65 72 20 50  ode: IfSmaller P
2a580 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
2a590 2a 20 45 73 74 69 6d 61 74 65 20 74 68 65 20 6e  * Estimate the n
2a5a0 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e  umber of rows in
2a5b0 20 74 68 65 20 74 61 62 6c 65 20 50 31 2e 20 20   the table P1.  
2a5c0 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68  Jump to P2 if th
2a5d0 61 74 0a 2a 2a 20 65 73 74 69 6d 61 74 65 20 69  at.** estimate i
2a5e0 73 20 6c 65 73 73 20 74 68 61 6e 20 61 70 70 72  s less than appr
2a5f0 6f 78 69 6d 61 74 65 6c 79 20 32 2a 2a 28 30 2e  oximately 2**(0.
2a600 31 2a 50 33 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f  1*P3)..*/.case O
2a610 50 5f 49 66 53 6d 61 6c 6c 65 72 3a 20 7b 20 20  P_IfSmaller: {  
2a620 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
2a630 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
2a640 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
2a650 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b  Crsr;.  int res;
2a660 0a 20 20 69 36 34 20 73 7a 3b 0a 0a 20 20 61 73  .  i64 sz;..  as
2a670 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
2a680 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
2a690 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
2a6a0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
2a6b0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
2a6c0 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  !=0 );.  pCrsr =
2a6d0 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b   pC->uc.pCursor;
2a6e0 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72  .  assert( pCrsr
2a6f0 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
2a700 65 33 42 74 72 65 65 46 69 72 73 74 28 70 43 72  e3BtreeFirst(pCr
2a710 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 69 66 28  sr, &res);.  if(
2a720 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
2a730 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
2a740 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20   if( res==0 ){. 
2a750 20 20 20 73 7a 20 3d 20 73 71 6c 69 74 65 33 42     sz = sqlite3B
2a760 74 72 65 65 52 6f 77 43 6f 75 6e 74 45 73 74 28  treeRowCountEst(
2a770 70 43 72 73 72 29 3b 0a 20 20 20 20 69 66 28 20  pCrsr);.    if( 
2a780 41 4c 57 41 59 53 28 73 7a 3e 3d 30 29 20 26 26  ALWAYS(sz>=0) &&
2a790 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 28 28   sqlite3LogEst((
2a7a0 75 36 34 29 73 7a 29 3c 70 4f 70 2d 3e 70 33 20  u64)sz)<pOp->p3 
2a7b0 29 20 72 65 73 20 3d 20 31 3b 0a 20 20 7d 0a 20  ) res = 1;.  }. 
2a7c0 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
2a7d0 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66  (res!=0,2);.  if
2a7e0 28 20 72 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d  ( res ) goto jum
2a7f0 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b  p_to_p2;.  break
2a800 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ;.}.../* Opcode:
2a810 20 53 6f 72 74 65 72 53 6f 72 74 20 50 31 20 50   SorterSort P1 P
2a820 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 66  2 * * *.**.** Af
2a830 74 65 72 20 61 6c 6c 20 72 65 63 6f 72 64 73 20  ter all records 
2a840 68 61 76 65 20 62 65 65 6e 20 69 6e 73 65 72 74  have been insert
2a850 65 64 20 69 6e 74 6f 20 74 68 65 20 53 6f 72 74  ed into the Sort
2a860 65 72 20 6f 62 6a 65 63 74 0a 2a 2a 20 69 64 65  er object.** ide
2a870 6e 74 69 66 69 65 64 20 62 79 20 50 31 2c 20 69  ntified by P1, i
2a880 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64  nvoke this opcod
2a890 65 20 74 6f 20 61 63 74 75 61 6c 6c 79 20 64 6f  e to actually do
2a8a0 20 74 68 65 20 73 6f 72 74 69 6e 67 2e 0a 2a 2a   the sorting..**
2a8b0 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74   Jump to P2 if t
2a8c0 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f  here are no reco
2a8d0 72 64 73 20 74 6f 20 62 65 20 73 6f 72 74 65 64  rds to be sorted
2a8e0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
2a8f0 6f 64 65 20 69 73 20 61 6e 20 61 6c 69 61 73 20  ode is an alias 
2a900 66 6f 72 20 4f 50 5f 53 6f 72 74 20 61 6e 64 20  for OP_Sort and 
2a910 4f 50 5f 52 65 77 69 6e 64 20 74 68 61 74 20 69  OP_Rewind that i
2a920 73 20 75 73 65 64 0a 2a 2a 20 66 6f 72 20 53 6f  s used.** for So
2a930 72 74 65 72 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f  rter objects..*/
2a940 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74  ./* Opcode: Sort
2a950 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
2a960 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 64  ** This opcode d
2a970 6f 65 73 20 65 78 61 63 74 6c 79 20 74 68 65 20  oes exactly the 
2a980 73 61 6d 65 20 74 68 69 6e 67 20 61 73 20 4f 50  same thing as OP
2a990 5f 52 65 77 69 6e 64 20 65 78 63 65 70 74 20 74  _Rewind except t
2a9a0 68 61 74 0a 2a 2a 20 69 74 20 69 6e 63 72 65 6d  hat.** it increm
2a9b0 65 6e 74 73 20 61 6e 20 75 6e 64 6f 63 75 6d 65  ents an undocume
2a9c0 6e 74 65 64 20 67 6c 6f 62 61 6c 20 76 61 72 69  nted global vari
2a9d0 61 62 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65  able used for te
2a9e0 73 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72  sting..**.** Sor
2a9f0 74 69 6e 67 20 69 73 20 61 63 63 6f 6d 70 6c 69  ting is accompli
2aa00 73 68 65 64 20 62 79 20 77 72 69 74 69 6e 67 20  shed by writing 
2aa10 72 65 63 6f 72 64 73 20 69 6e 74 6f 20 61 20 73  records into a s
2aa20 6f 72 74 69 6e 67 20 69 6e 64 65 78 2c 0a 2a 2a  orting index,.**
2aa30 20 74 68 65 6e 20 72 65 77 69 6e 64 69 6e 67 20   then rewinding 
2aa40 74 68 61 74 20 69 6e 64 65 78 20 61 6e 64 20 70  that index and p
2aa50 6c 61 79 69 6e 67 20 69 74 20 62 61 63 6b 20 66  laying it back f
2aa60 72 6f 6d 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f  rom beginning to
2aa70 0a 2a 2a 20 65 6e 64 2e 20 20 57 65 20 75 73 65  .** end.  We use
2aa80 20 74 68 65 20 4f 50 5f 53 6f 72 74 20 6f 70 63   the OP_Sort opc
2aa90 6f 64 65 20 69 6e 73 74 65 61 64 20 6f 66 20 4f  ode instead of O
2aaa0 50 5f 52 65 77 69 6e 64 20 74 6f 20 64 6f 20 74  P_Rewind to do t
2aab0 68 65 0a 2a 2a 20 72 65 77 69 6e 64 69 6e 67 20  he.** rewinding 
2aac0 73 6f 20 74 68 61 74 20 74 68 65 20 67 6c 6f 62  so that the glob
2aad0 61 6c 20 76 61 72 69 61 62 6c 65 20 77 69 6c 6c  al variable will
2aae0 20 62 65 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   be incremented 
2aaf0 61 6e 64 0a 2a 2a 20 72 65 67 72 65 73 73 69 6f  and.** regressio
2ab00 6e 20 74 65 73 74 73 20 63 61 6e 20 64 65 74 65  n tests can dete
2ab10 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72  rmine whether or
2ab20 20 6e 6f 74 20 74 68 65 20 6f 70 74 69 6d 69 7a   not the optimiz
2ab30 65 72 20 69 73 0a 2a 2a 20 63 6f 72 72 65 63 74  er is.** correct
2ab40 6c 79 20 6f 70 74 69 6d 69 7a 69 6e 67 20 6f 75  ly optimizing ou
2ab50 74 20 73 6f 72 74 73 2e 0a 2a 2f 0a 63 61 73 65  t sorts..*/.case
2ab60 20 4f 50 5f 53 6f 72 74 65 72 53 6f 72 74 3a 20   OP_SorterSort: 
2ab70 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61     /* jump */.ca
2ab80 73 65 20 4f 50 5f 53 6f 72 74 3a 20 7b 20 20 20  se OP_Sort: {   
2ab90 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
2aba0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
2abb0 53 54 0a 20 20 73 71 6c 69 74 65 33 5f 73 6f 72  ST.  sqlite3_sor
2abc0 74 5f 63 6f 75 6e 74 2b 2b 3b 0a 20 20 73 71 6c  t_count++;.  sql
2abd0 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e  ite3_search_coun
2abe0 74 2d 2d 3b 0a 23 65 6e 64 69 66 0a 20 20 70 2d  t--;.#endif.  p-
2abf0 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45  >aCounter[SQLITE
2ac00 5f 53 54 4d 54 53 54 41 54 55 53 5f 53 4f 52 54  _STMTSTATUS_SORT
2ac10 5d 2b 2b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74  ]++;.  /* Fall t
2ac20 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 52  hrough into OP_R
2ac30 65 77 69 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70  ewind */.}./* Op
2ac40 63 6f 64 65 3a 20 52 65 77 69 6e 64 20 50 31 20  code: Rewind P1 
2ac50 50 32 20 2a 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20  P2 * * P5.**.** 
2ac60 54 68 65 20 6e 65 78 74 20 75 73 65 20 6f 66 20  The next use of 
2ac70 74 68 65 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c  the Rowid or Col
2ac80 75 6d 6e 20 6f 72 20 4e 65 78 74 20 69 6e 73 74  umn or Next inst
2ac90 72 75 63 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a  ruction for P1 .
2aca0 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72 20 74 6f  ** will refer to
2acb0 20 74 68 65 20 66 69 72 73 74 20 65 6e 74 72 79   the first entry
2acc0 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
2acd0 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e   table or index.
2ace0 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c 65  .** If the table
2acf0 20 6f 72 20 69 6e 64 65 78 20 69 73 20 65 6d 70   or index is emp
2ad00 74 79 2c 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  ty, jump immedia
2ad10 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49  tely to P2..** I
2ad20 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  f the table or i
2ad30 6e 64 65 78 20 69 73 20 6e 6f 74 20 65 6d 70 74  ndex is not empt
2ad40 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  y, fall through 
2ad50 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  to the following
2ad60 20 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e   .** instruction
2ad70 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73  ..**.** If P5 is
2ad80 20 6e 6f 6e 2d 7a 65 72 6f 20 61 6e 64 20 74 68   non-zero and th
2ad90 65 20 74 61 62 6c 65 20 69 73 20 6e 6f 74 20 65  e table is not e
2ada0 6d 70 74 79 2c 20 74 68 65 6e 20 74 68 65 20 22  mpty, then the "
2adb0 73 6b 69 70 2d 6e 65 78 74 22 0a 2a 2a 20 66 6c  skip-next".** fl
2adc0 61 67 20 69 73 20 73 65 74 20 6f 6e 20 74 68 65  ag is set on the
2add0 20 63 75 72 73 6f 72 20 73 6f 20 74 68 61 74 20   cursor so that 
2ade0 74 68 65 20 6e 65 78 74 20 4f 50 5f 4e 65 78 74  the next OP_Next
2adf0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 0a 2a 2a   instruction .**
2ae00 20 65 78 65 63 75 74 65 64 20 6f 6e 20 69 74 20   executed on it 
2ae10 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2a 0a 2a  is a no-op..**.*
2ae20 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65  * This opcode le
2ae30 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20  aves the cursor 
2ae40 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f  configured to mo
2ae50 76 65 20 69 6e 20 66 6f 72 77 61 72 64 20 6f 72  ve in forward or
2ae60 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65  der,.** from the
2ae70 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72   beginning towar
2ae80 64 20 74 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f  d the end.  In o
2ae90 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
2aea0 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e  cursor is.** con
2aeb0 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 4e  figured to use N
2aec0 65 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a  ext, not Prev..*
2aed0 2f 0a 63 61 73 65 20 4f 50 5f 52 65 77 69 6e 64  /.case OP_Rewind
2aee0 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
2aef0 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  mp */.  VdbeCurs
2af00 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
2af10 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74  or *pCrsr;.  int
2af20 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28   res;..  assert(
2af30 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
2af40 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
2af50 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
2af60 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
2af70 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
2af80 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f  ;.  assert( isSo
2af90 72 74 65 72 28 70 43 29 3d 3d 28 70 4f 70 2d 3e  rter(pC)==(pOp->
2afa0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65  opcode==OP_Sorte
2afb0 72 53 6f 72 74 29 20 29 3b 0a 20 20 72 65 73 20  rSort) );.  res 
2afc0 3d 20 31 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  = 1;.#ifdef SQLI
2afd0 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73  TE_DEBUG.  pC->s
2afe0 65 65 6b 4f 70 20 3d 20 4f 50 5f 52 65 77 69 6e  eekOp = OP_Rewin
2aff0 64 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20  d;.#endif.  if( 
2b000 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 7b 0a  isSorter(pC) ){.
2b010 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
2b020 56 64 62 65 53 6f 72 74 65 72 52 65 77 69 6e 64  VdbeSorterRewind
2b030 28 70 43 2c 20 26 72 65 73 29 3b 0a 20 20 7d 65  (pC, &res);.  }e
2b040 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
2b050 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
2b060 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
2b070 20 20 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e      pCrsr = pC->
2b080 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 20 20  uc.pCursor;.    
2b090 61 73 73 65 72 74 28 20 70 43 72 73 72 20 29 3b  assert( pCrsr );
2b0a0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
2b0b0 33 42 74 72 65 65 46 69 72 73 74 28 70 43 72 73  3BtreeFirst(pCrs
2b0c0 72 2c 20 26 72 65 73 29 3b 0a 23 69 66 6e 64 65  r, &res);.#ifnde
2b0d0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 49  f SQLITE_OMIT_WI
2b0e0 4e 44 4f 57 46 55 4e 43 0a 20 20 20 20 69 66 28  NDOWFUNC.    if(
2b0f0 20 70 4f 70 2d 3e 70 35 20 29 20 73 71 6c 69 74   pOp->p5 ) sqlit
2b100 65 33 42 74 72 65 65 53 6b 69 70 4e 65 78 74 28  e3BtreeSkipNext(
2b110 70 43 72 73 72 29 3b 0a 23 65 6e 64 69 66 0a 20  pCrsr);.#endif. 
2b120 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d     pC->deferredM
2b130 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70  oveto = 0;.    p
2b140 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
2b150 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
2b160 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  }.  if( rc ) got
2b170 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
2b180 72 72 6f 72 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c  rror;.  pC->null
2b190 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20  Row = (u8)res;. 
2b1a0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
2b1b0 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c 70 2d  >0 && pOp->p2<p-
2b1c0 3e 6e 4f 70 20 29 3b 0a 20 20 56 64 62 65 42 72  >nOp );.  VdbeBr
2b1d0 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30  anchTaken(res!=0
2b1e0 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29  ,2);.  if( res )
2b1f0 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
2b200 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
2b210 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74 20 50 31   Opcode: Next P1
2b220 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
2b230 2a 2a 20 41 64 76 61 6e 63 65 20 63 75 72 73 6f  ** Advance curso
2b240 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20  r P1 so that it 
2b250 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6e 65  points to the ne
2b260 78 74 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72  xt key/data pair
2b270 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65   in its.** table
2b280 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74   or index.  If t
2b290 68 65 72 65 20 61 72 65 20 6e 6f 20 6d 6f 72 65  here are no more
2b2a0 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72 73   key/value pairs
2b2b0 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75   then fall throu
2b2c0 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c  gh.** to the fol
2b2d0 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69  lowing instructi
2b2e0 6f 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65 20  on.  But if the 
2b2f0 63 75 72 73 6f 72 20 61 64 76 61 6e 63 65 20 77  cursor advance w
2b300 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a  as successful,.*
2b310 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  * jump immediate
2b320 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ly to P2..**.** 
2b330 54 68 65 20 4e 65 78 74 20 6f 70 63 6f 64 65 20  The Next opcode 
2b340 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 66 6f  is only valid fo
2b350 6c 6c 6f 77 69 6e 67 20 61 6e 20 53 65 65 6b 47  llowing an SeekG
2b360 54 2c 20 53 65 65 6b 47 45 2c 20 6f 72 0a 2a 2a  T, SeekGE, or.**
2b370 20 4f 50 5f 52 65 77 69 6e 64 20 6f 70 63 6f 64   OP_Rewind opcod
2b380 65 20 75 73 65 64 20 74 6f 20 70 6f 73 69 74 69  e used to positi
2b390 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20  on the cursor.  
2b3a0 4e 65 78 74 20 69 73 20 6e 6f 74 20 61 6c 6c 6f  Next is not allo
2b3b0 77 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c 6c 6f 77  wed.** to follow
2b3c0 20 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c   SeekLT, SeekLE,
2b3d0 20 6f 72 20 4f 50 5f 4c 61 73 74 2e 0a 2a 2a 0a   or OP_Last..**.
2b3e0 2a 2a 20 54 68 65 20 50 31 20 63 75 72 73 6f 72  ** The P1 cursor
2b3f0 20 6d 75 73 74 20 62 65 20 66 6f 72 20 61 20 72   must be for a r
2b400 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61  eal table, not a
2b410 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20   pseudo-table.  
2b420 50 31 20 6d 75 73 74 20 68 61 76 65 0a 2a 2a 20  P1 must have.** 
2b430 62 65 65 6e 20 6f 70 65 6e 65 64 20 70 72 69 6f  been opened prio
2b440 72 20 74 6f 20 74 68 69 73 20 6f 70 63 6f 64 65  r to this opcode
2b450 20 6f 72 20 74 68 65 20 70 72 6f 67 72 61 6d 20   or the program 
2b460 77 69 6c 6c 20 73 65 67 66 61 75 6c 74 2e 0a 2a  will segfault..*
2b470 2a 0a 2a 2a 20 54 68 65 20 50 33 20 76 61 6c 75  *.** The P3 valu
2b480 65 20 69 73 20 61 20 68 69 6e 74 20 74 6f 20 74  e is a hint to t
2b490 68 65 20 62 74 72 65 65 20 69 6d 70 6c 65 6d 65  he btree impleme
2b4a0 6e 74 61 74 69 6f 6e 2e 20 49 66 20 50 33 3d 3d  ntation. If P3==
2b4b0 31 2c 20 74 68 61 74 0a 2a 2a 20 6d 65 61 6e 73  1, that.** means
2b4c0 20 50 31 20 69 73 20 61 6e 20 53 51 4c 20 69 6e   P1 is an SQL in
2b4d0 64 65 78 20 61 6e 64 20 74 68 61 74 20 74 68 69  dex and that thi
2b4e0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f  s instruction co
2b4f0 75 6c 64 20 68 61 76 65 20 62 65 65 6e 0a 2a 2a  uld have been.**
2b500 20 6f 6d 69 74 74 65 64 20 69 66 20 74 68 61 74   omitted if that
2b510 20 69 6e 64 65 78 20 68 61 64 20 62 65 65 6e 20   index had been 
2b520 75 6e 69 71 75 65 2e 20 20 50 33 20 69 73 20 75  unique.  P3 is u
2b530 73 75 61 6c 6c 79 20 30 2e 20 20 50 33 20 69 73  sually 0.  P3 is
2b540 0a 2a 2a 20 61 6c 77 61 79 73 20 65 69 74 68 65  .** always eithe
2b550 72 20 30 20 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20  r 0 or 1..**.** 
2b560 50 34 20 69 73 20 61 6c 77 61 79 73 20 6f 66 20  P4 is always of 
2b570 74 79 70 65 20 50 34 5f 41 44 56 41 4e 43 45 2e  type P4_ADVANCE.
2b580 20 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f   The function po
2b590 69 6e 74 65 72 20 70 6f 69 6e 74 73 20 74 6f 0a  inter points to.
2b5a0 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 4e  ** sqlite3BtreeN
2b5b0 65 78 74 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ext()..**.** If 
2b5c0 50 35 20 69 73 20 70 6f 73 69 74 69 76 65 20 61  P5 is positive a
2b5d0 6e 64 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  nd the jump is t
2b5e0 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74  aken, then event
2b5f0 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62   counter.** numb
2b600 65 72 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70  er P5-1 in the p
2b610 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
2b620 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  t is incremented
2b630 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
2b640 3a 20 50 72 65 76 0a 2a 2f 0a 2f 2a 20 4f 70 63  : Prev.*/./* Opc
2b650 6f 64 65 3a 20 50 72 65 76 20 50 31 20 50 32 20  ode: Prev P1 P2 
2b660 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42  P3 P4 P5.**.** B
2b670 61 63 6b 20 75 70 20 63 75 72 73 6f 72 20 50 31  ack up cursor P1
2b680 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e   so that it poin
2b690 74 73 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f  ts to the previo
2b6a0 75 73 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72  us key/data pair
2b6b0 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65   in its.** table
2b6c0 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74   or index.  If t
2b6d0 68 65 72 65 20 69 73 20 6e 6f 20 70 72 65 76 69  here is no previ
2b6e0 6f 75 73 20 6b 65 79 2f 76 61 6c 75 65 20 70 61  ous key/value pa
2b6f0 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  irs then fall th
2b700 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20  rough.** to the 
2b710 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75  following instru
2b720 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74  ction.  But if t
2b730 68 65 20 63 75 72 73 6f 72 20 62 61 63 6b 75 70  he cursor backup
2b740 20 77 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c   was successful,
2b750 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  .** jump immedia
2b760 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  tely to P2..**.*
2b770 2a 0a 2a 2a 20 54 68 65 20 50 72 65 76 20 6f 70  *.** The Prev op
2b780 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 76 61 6c  code is only val
2b790 69 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20  id following an 
2b7a0 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20  SeekLT, SeekLE, 
2b7b0 6f 72 0a 2a 2a 20 4f 50 5f 4c 61 73 74 20 6f 70  or.** OP_Last op
2b7c0 63 6f 64 65 20 75 73 65 64 20 74 6f 20 70 6f 73  code used to pos
2b7d0 69 74 69 6f 6e 20 74 68 65 20 63 75 72 73 6f 72  ition the cursor
2b7e0 2e 20 20 50 72 65 76 20 69 73 20 6e 6f 74 20 61  .  Prev is not a
2b7f0 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c  llowed.** to fol
2b800 6c 6f 77 20 53 65 65 6b 47 54 2c 20 53 65 65 6b  low SeekGT, Seek
2b810 47 45 2c 20 6f 72 20 4f 50 5f 52 65 77 69 6e 64  GE, or OP_Rewind
2b820 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63  ..**.** The P1 c
2b830 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f  ursor must be fo
2b840 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20  r a real table, 
2b850 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62  not a pseudo-tab
2b860 6c 65 2e 20 20 49 66 20 50 31 20 69 73 0a 2a 2a  le.  If P1 is.**
2b870 20 6e 6f 74 20 6f 70 65 6e 20 74 68 65 6e 20 74   not open then t
2b880 68 65 20 62 65 68 61 76 69 6f 72 20 69 73 20 75  he behavior is u
2b890 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20  ndefined..**.** 
2b8a0 54 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20  The P3 value is 
2b8b0 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62 74  a hint to the bt
2b8c0 72 65 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ree implementati
2b8d0 6f 6e 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74 68  on. If P3==1, th
2b8e0 61 74 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69  at.** means P1 i
2b8f0 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 61  s an SQL index a
2b900 6e 64 20 74 68 61 74 20 74 68 69 73 20 69 6e 73  nd that this ins
2b910 74 72 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68  truction could h
2b920 61 76 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74  ave been.** omit
2b930 74 65 64 20 69 66 20 74 68 61 74 20 69 6e 64 65  ted if that inde
2b940 78 20 68 61 64 20 62 65 65 6e 20 75 6e 69 71 75  x had been uniqu
2b950 65 2e 20 20 50 33 20 69 73 20 75 73 75 61 6c 6c  e.  P3 is usuall
2b960 79 20 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61  y 0.  P3 is.** a
2b970 6c 77 61 79 73 20 65 69 74 68 65 72 20 30 20 6f  lways either 0 o
2b980 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  r 1..**.** P4 is
2b990 20 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20   always of type 
2b9a0 50 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20  P4_ADVANCE. The 
2b9b0 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72  function pointer
2b9c0 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71   points to.** sq
2b9d0 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f  lite3BtreePrevio
2b9e0 75 73 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  us()..**.** If P
2b9f0 35 20 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e  5 is positive an
2ba00 64 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  d the jump is ta
2ba10 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20  ken, then event 
2ba20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65  counter.** numbe
2ba30 72 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72  r P5-1 in the pr
2ba40 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
2ba50 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e   is incremented.
2ba60 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .*/./* Opcode: S
2ba70 6f 72 74 65 72 4e 65 78 74 20 50 31 20 50 32 20  orterNext P1 P2 
2ba80 2a 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69  * * P5.**.** Thi
2ba90 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a  s opcode works j
2baa0 75 73 74 20 6c 69 6b 65 20 4f 50 5f 4e 65 78 74  ust like OP_Next
2bab0 20 65 78 63 65 70 74 20 74 68 61 74 20 50 31 20   except that P1 
2bac0 6d 75 73 74 20 62 65 20 61 0a 2a 2a 20 73 6f 72  must be a.** sor
2bad0 74 65 72 20 6f 62 6a 65 63 74 20 66 6f 72 20 77  ter object for w
2bae0 68 69 63 68 20 74 68 65 20 4f 50 5f 53 6f 72 74  hich the OP_Sort
2baf0 65 72 53 6f 72 74 20 6f 70 63 6f 64 65 20 68 61  erSort opcode ha
2bb00 73 20 62 65 65 6e 0a 2a 2a 20 69 6e 76 6f 6b 65  s been.** invoke
2bb10 64 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20  d.  This opcode 
2bb20 61 64 76 61 6e 63 65 73 20 74 68 65 20 63 75 72  advances the cur
2bb30 73 6f 72 20 74 6f 20 74 68 65 20 6e 65 78 74 20  sor to the next 
2bb40 73 6f 72 74 65 64 0a 2a 2a 20 72 65 63 6f 72 64  sorted.** record
2bb50 2c 20 6f 72 20 6a 75 6d 70 73 20 74 6f 20 50 32  , or jumps to P2
2bb60 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   if there are no
2bb70 20 6d 6f 72 65 20 73 6f 72 74 65 64 20 72 65 63   more sorted rec
2bb80 6f 72 64 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ords..*/.case OP
2bb90 5f 53 6f 72 74 65 72 4e 65 78 74 3a 20 7b 20 20  _SorterNext: {  
2bba0 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62  /* jump */.  Vdb
2bbb0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20  eCursor *pC;..  
2bbc0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
2bbd0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
2bbe0 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29  ( isSorter(pC) )
2bbf0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
2bc00 56 64 62 65 53 6f 72 74 65 72 4e 65 78 74 28 64  VdbeSorterNext(d
2bc10 62 2c 20 70 43 29 3b 0a 20 20 67 6f 74 6f 20 6e  b, pC);.  goto n
2bc20 65 78 74 5f 74 61 69 6c 3b 0a 63 61 73 65 20 4f  ext_tail;.case O
2bc30 50 5f 50 72 65 76 3a 20 20 20 20 20 20 20 20 20  P_Prev:         
2bc40 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65   /* jump */.case
2bc50 20 4f 50 5f 4e 65 78 74 3a 20 20 20 20 20 20 20   OP_Next:       
2bc60 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
2bc70 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
2bc80 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
2bc90 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
2bca0 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 41 72  sert( pOp->p5<Ar
2bcb0 72 61 79 53 69 7a 65 28 70 2d 3e 61 43 6f 75 6e  raySize(p->aCoun
2bcc0 74 65 72 29 20 29 3b 0a 20 20 70 43 20 3d 20 70  ter) );.  pC = p
2bcd0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
2bce0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
2bcf0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
2bd00 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
2bd10 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  o==0 );.  assert
2bd20 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
2bd30 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
2bd40 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2bd50 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 20  opcode!=OP_Next 
2bd60 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61  || pOp->p4.xAdva
2bd70 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65  nce==sqlite3Btre
2bd80 65 4e 65 78 74 20 29 3b 0a 20 20 61 73 73 65 72  eNext );.  asser
2bd90 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  t( pOp->opcode!=
2bda0 4f 50 5f 50 72 65 76 20 7c 7c 20 70 4f 70 2d 3e  OP_Prev || pOp->
2bdb0 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c  p4.xAdvance==sql
2bdc0 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75  ite3BtreePreviou
2bdd0 73 20 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 4e  s );..  /* The N
2bde0 65 78 74 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e  ext opcode is on
2bdf0 6c 79 20 75 73 65 64 20 61 66 74 65 72 20 53 65  ly used after Se
2be00 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c 20 52 65  ekGT, SeekGE, Re
2be10 77 69 6e 64 2c 20 61 6e 64 20 46 6f 75 6e 64 2e  wind, and Found.
2be20 0a 20 20 2a 2a 20 54 68 65 20 50 72 65 76 20 6f  .  ** The Prev o
2be30 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 75 73  pcode is only us
2be40 65 64 20 61 66 74 65 72 20 53 65 65 6b 4c 54 2c  ed after SeekLT,
2be50 20 53 65 65 6b 4c 45 2c 20 61 6e 64 20 4c 61 73   SeekLE, and Las
2be60 74 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  t. */.  assert( 
2be70 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f  pOp->opcode!=OP_
2be80 4e 65 78 74 0a 20 20 20 20 20 20 20 7c 7c 20 70  Next.       || p
2be90 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65  C->seekOp==OP_Se
2bea0 65 6b 47 54 20 7c 7c 20 70 43 2d 3e 73 65 65 6b  ekGT || pC->seek
2beb0 4f 70 3d 3d 4f 50 5f 53 65 65 6b 47 45 0a 20 20  Op==OP_SeekGE.  
2bec0 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b       || pC->seek
2bed0 4f 70 3d 3d 4f 50 5f 52 65 77 69 6e 64 20 7c 7c  Op==OP_Rewind ||
2bee0 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f   pC->seekOp==OP_
2bef0 46 6f 75 6e 64 20 0a 20 20 20 20 20 20 20 7c 7c  Found .       ||
2bf00 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f   pC->seekOp==OP_
2bf10 4e 75 6c 6c 52 6f 77 29 3b 0a 20 20 61 73 73 65  NullRow);.  asse
2bf20 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21  rt( pOp->opcode!
2bf30 3d 4f 50 5f 50 72 65 76 0a 20 20 20 20 20 20 20  =OP_Prev.       
2bf40 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f  || pC->seekOp==O
2bf50 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 70 43 2d 3e  P_SeekLT || pC->
2bf60 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 4c  seekOp==OP_SeekL
2bf70 45 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e  E.       || pC->
2bf80 73 65 65 6b 4f 70 3d 3d 4f 50 5f 4c 61 73 74 20  seekOp==OP_Last 
2bf90 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73  .       || pC->s
2bfa0 65 65 6b 4f 70 3d 3d 4f 50 5f 4e 75 6c 6c 52 6f  eekOp==OP_NullRo
2bfb0 77 29 3b 0a 0a 20 20 72 63 20 3d 20 70 4f 70 2d  w);..  rc = pOp-
2bfc0 3e 70 34 2e 78 41 64 76 61 6e 63 65 28 70 43 2d  >p4.xAdvance(pC-
2bfd0 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 70 4f 70  >uc.pCursor, pOp
2bfe0 2d 3e 70 33 29 3b 0a 6e 65 78 74 5f 74 61 69 6c  ->p3);.next_tail
2bff0 3a 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  :.  pC->cacheSta
2c000 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
2c010 45 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  E;.  VdbeBranchT
2c020 61 6b 65 6e 28 72 63 3d 3d 53 51 4c 49 54 45 5f  aken(rc==SQLITE_
2c030 4f 4b 2c 32 29 3b 0a 20 20 69 66 28 20 72 63 3d  OK,2);.  if( rc=
2c040 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
2c050 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
2c060 30 3b 0a 20 20 20 20 70 2d 3e 61 43 6f 75 6e 74  0;.    p->aCount
2c070 65 72 5b 70 4f 70 2d 3e 70 35 5d 2b 2b 3b 0a 23  er[pOp->p5]++;.#
2c080 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
2c090 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 65  T.    sqlite3_se
2c0a0 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65  arch_count++;.#e
2c0b0 6e 64 69 66 0a 20 20 20 20 67 6f 74 6f 20 6a 75  ndif.    goto ju
2c0c0 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68 65  mp_to_p2_and_che
2c0d0 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74  ck_for_interrupt
2c0e0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 21 3d  ;.  }.  if( rc!=
2c0f0 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 20 67 6f  SQLITE_DONE ) go
2c100 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
2c110 65 72 72 6f 72 3b 0a 20 20 72 63 20 3d 20 53 51  error;.  rc = SQ
2c120 4c 49 54 45 5f 4f 4b 3b 0a 20 20 70 43 2d 3e 6e  LITE_OK;.  pC->n
2c130 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 67 6f  ullRow = 1;.  go
2c140 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74  to check_for_int
2c150 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70  errupt;.}../* Op
2c160 63 6f 64 65 3a 20 49 64 78 49 6e 73 65 72 74 20  code: IdxInsert 
2c170 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
2c180 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
2c190 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 52 65 67 69  r[P2].**.** Regi
2c1a0 73 74 65 72 20 50 32 20 68 6f 6c 64 73 20 61 6e  ster P2 holds an
2c1b0 20 53 51 4c 20 69 6e 64 65 78 20 6b 65 79 20 6d   SQL index key m
2c1c0 61 64 65 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a  ade using the.**
2c1d0 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74   MakeRecord inst
2c1e0 72 75 63 74 69 6f 6e 73 2e 20 20 54 68 69 73 20  ructions.  This 
2c1f0 6f 70 63 6f 64 65 20 77 72 69 74 65 73 20 74 68  opcode writes th
2c200 61 74 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f 20 74  at key.** into t
2c210 68 65 20 69 6e 64 65 78 20 50 31 2e 20 20 44 61  he index P1.  Da
2c220 74 61 20 66 6f 72 20 74 68 65 20 65 6e 74 72 79  ta for the entry
2c230 20 69 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20 49   is nil..**.** I
2c240 66 20 50 34 20 69 73 20 6e 6f 74 20 7a 65 72 6f  f P4 is not zero
2c250 2c 20 74 68 65 6e 20 69 74 20 69 73 20 74 68 65  , then it is the
2c260 20 6e 75 6d 62 65 72 20 6f 66 20 76 61 6c 75 65   number of value
2c270 73 20 69 6e 20 74 68 65 20 75 6e 70 61 63 6b 65  s in the unpacke
2c280 64 0a 2a 2a 20 6b 65 79 20 6f 66 20 72 65 67 28  d.** key of reg(
2c290 50 32 29 2e 20 20 49 6e 20 74 68 61 74 20 63 61  P2).  In that ca
2c2a0 73 65 2c 20 50 33 20 69 73 20 74 68 65 20 69 6e  se, P3 is the in
2c2b0 64 65 78 20 6f 66 20 74 68 65 20 66 69 72 73 74  dex of the first
2c2c0 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 66 6f 72   register.** for
2c2d0 20 74 68 65 20 75 6e 70 61 63 6b 65 64 20 6b 65   the unpacked ke
2c2e0 79 2e 20 20 54 68 65 20 61 76 61 69 6c 61 62 69  y.  The availabi
2c2f0 6c 69 74 79 20 6f 66 20 74 68 65 20 75 6e 70 61  lity of the unpa
2c300 63 6b 65 64 20 6b 65 79 20 63 61 6e 20 73 6f 6d  cked key can som
2c310 65 74 69 6d 65 73 0a 2a 2a 20 62 65 20 61 6e 20  etimes.** be an 
2c320 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a 2a 2a  optimization..**
2c330 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74 68  .** If P5 has th
2c340 65 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 20  e OPFLAG_APPEND 
2c350 62 69 74 20 73 65 74 2c 20 74 68 61 74 20 69 73  bit set, that is
2c360 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62   a hint to the b
2c370 2d 74 72 65 65 20 6c 61 79 65 72 0a 2a 2a 20 74  -tree layer.** t
2c380 68 61 74 20 74 68 69 73 20 69 6e 73 65 72 74 20  hat this insert 
2c390 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20  is likely to be 
2c3a0 61 6e 20 61 70 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a  an append..**.**
2c3b0 20 49 66 20 50 35 20 68 61 73 20 74 68 65 20 4f   If P5 has the O
2c3c0 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 62 69  PFLAG_NCHANGE bi
2c3d0 74 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20  t set, then the 
2c3e0 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69  change counter i
2c3f0 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64  s.** incremented
2c400 20 62 79 20 74 68 69 73 20 69 6e 73 74 72 75 63   by this instruc
2c410 74 69 6f 6e 2e 20 20 49 66 20 74 68 65 20 4f 50  tion.  If the OP
2c420 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 62 69 74  FLAG_NCHANGE bit
2c430 20 69 73 20 63 6c 65 61 72 2c 0a 2a 2a 20 74 68   is clear,.** th
2c440 65 6e 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f  en the change co
2c450 75 6e 74 65 72 20 69 73 20 75 6e 63 68 61 6e 67  unter is unchang
2c460 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ed..**.** If the
2c470 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
2c480 45 53 55 4c 54 20 66 6c 61 67 20 6f 66 20 50 35  ESULT flag of P5
2c490 20 69 73 20 73 65 74 2c 20 74 68 65 20 69 6d 70   is set, the imp
2c4a0 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d 69 67 68  lementation migh
2c4b0 74 0a 2a 2a 20 72 75 6e 20 66 61 73 74 65 72 20  t.** run faster 
2c4c0 62 79 20 61 76 6f 69 64 69 6e 67 20 61 6e 20 75  by avoiding an u
2c4d0 6e 6e 65 63 65 73 73 61 72 79 20 73 65 65 6b 20  nnecessary seek 
2c4e0 6f 6e 20 63 75 72 73 6f 72 20 50 31 2e 20 20 48  on cursor P1.  H
2c4f0 6f 77 65 76 65 72 2c 0a 2a 2a 20 74 68 65 20 4f  owever,.** the O
2c500 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53  PFLAG_USESEEKRES
2c510 55 4c 54 20 66 6c 61 67 20 6d 75 73 74 20 6f 6e  ULT flag must on
2c520 6c 79 20 62 65 20 73 65 74 20 69 66 20 74 68 65  ly be set if the
2c530 72 65 20 68 61 76 65 20 62 65 65 6e 20 6e 6f 20  re have been no 
2c540 70 72 69 6f 72 0a 2a 2a 20 73 65 65 6b 73 20 6f  prior.** seeks o
2c550 6e 20 74 68 65 20 63 75 72 73 6f 72 20 6f 72 20  n the cursor or 
2c560 69 66 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  if the most rece
2c570 6e 74 20 73 65 65 6b 20 75 73 65 64 20 61 20 6b  nt seek used a k
2c580 65 79 20 65 71 75 69 76 61 6c 65 6e 74 0a 2a 2a  ey equivalent.**
2c590 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a 2a 2a 20 54   to P2. .**.** T
2c5a0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
2c5b0 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 69  only works for i
2c5c0 6e 64 69 63 65 73 2e 20 20 54 68 65 20 65 71 75  ndices.  The equ
2c5d0 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74  ivalent instruct
2c5e0 69 6f 6e 0a 2a 2a 20 66 6f 72 20 74 61 62 6c 65  ion.** for table
2c5f0 73 20 69 73 20 4f 50 5f 49 6e 73 65 72 74 2e 0a  s is OP_Insert..
2c600 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f  */./* Opcode: So
2c610 72 74 65 72 49 6e 73 65 72 74 20 50 31 20 50 32  rterInsert P1 P2
2c620 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
2c630 69 73 3a 20 6b 65 79 3d 72 5b 50 32 5d 0a 2a 2a  is: key=r[P2].**
2c640 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 32 20  .** Register P2 
2c650 68 6f 6c 64 73 20 61 6e 20 53 51 4c 20 69 6e 64  holds an SQL ind
2c660 65 78 20 6b 65 79 20 6d 61 64 65 20 75 73 69 6e  ex key made usin
2c670 67 20 74 68 65 0a 2a 2a 20 4d 61 6b 65 52 65 63  g the.** MakeRec
2c680 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 73  ord instructions
2c690 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77  .  This opcode w
2c6a0 72 69 74 65 73 20 74 68 61 74 20 6b 65 79 0a 2a  rites that key.*
2c6b0 2a 20 69 6e 74 6f 20 74 68 65 20 73 6f 72 74 65  * into the sorte
2c6c0 72 20 50 31 2e 20 20 44 61 74 61 20 66 6f 72 20  r P1.  Data for 
2c6d0 74 68 65 20 65 6e 74 72 79 20 69 73 20 6e 69 6c  the entry is nil
2c6e0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72  ..*/.case OP_Sor
2c6f0 74 65 72 49 6e 73 65 72 74 3a 20 20 20 20 20 20  terInsert:      
2c700 20 2f 2a 20 69 6e 32 20 2a 2f 0a 63 61 73 65 20   /* in2 */.case 
2c710 4f 50 5f 49 64 78 49 6e 73 65 72 74 3a 20 7b 20  OP_IdxInsert: { 
2c720 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f         /* in2 */
2c730 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
2c740 43 3b 0a 20 20 42 74 72 65 65 50 61 79 6c 6f 61  C;.  BtreePayloa
2c750 64 20 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  d x;..  assert( 
2c760 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
2c770 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
2c780 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
2c790 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
2c7a0 73 71 6c 69 74 65 33 56 64 62 65 49 6e 63 72 57  sqlite3VdbeIncrW
2c7b0 72 69 74 65 43 6f 75 6e 74 65 72 28 70 2c 20 70  riteCounter(p, p
2c7c0 43 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  C);.  assert( pC
2c7d0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
2c7e0 20 69 73 53 6f 72 74 65 72 28 70 43 29 3d 3d 28   isSorter(pC)==(
2c7f0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
2c800 53 6f 72 74 65 72 49 6e 73 65 72 74 29 20 29 3b  SorterInsert) );
2c810 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
2c820 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65  pOp->p2];.  asse
2c830 72 74 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20  rt( pIn2->flags 
2c840 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20  & MEM_Blob );.  
2c850 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50  if( pOp->p5 & OP
2c860 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70  FLAG_NCHANGE ) p
2c870 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 61  ->nChange++;.  a
2c880 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
2c890 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
2c8a0 45 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  EE || pOp->opcod
2c8b0 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65  e==OP_SorterInse
2c8c0 72 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  rt );.  assert( 
2c8d0 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29  pC->isTable==0 )
2c8e0 3b 0a 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42  ;.  rc = ExpandB
2c8f0 6c 6f 62 28 70 49 6e 32 29 3b 0a 20 20 69 66 28  lob(pIn2);.  if(
2c900 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
2c910 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
2c920 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
2c930 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72  ==OP_SorterInser
2c940 74 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  t ){.    rc = sq
2c950 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 57  lite3VdbeSorterW
2c960 72 69 74 65 28 70 43 2c 20 70 49 6e 32 29 3b 0a  rite(pC, pIn2);.
2c970 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 78 2e 6e    }else{.    x.n
2c980 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b 0a 20  Key = pIn2->n;. 
2c990 20 20 20 78 2e 70 4b 65 79 20 3d 20 70 49 6e 32     x.pKey = pIn2
2c9a0 2d 3e 7a 3b 0a 20 20 20 20 78 2e 61 4d 65 6d 20  ->z;.    x.aMem 
2c9b0 3d 20 61 4d 65 6d 20 2b 20 70 4f 70 2d 3e 70 33  = aMem + pOp->p3
2c9c0 3b 0a 20 20 20 20 78 2e 6e 4d 65 6d 20 3d 20 28  ;.    x.nMem = (
2c9d0 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  u16)pOp->p4.i;. 
2c9e0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
2c9f0 74 72 65 65 49 6e 73 65 72 74 28 70 43 2d 3e 75  treeInsert(pC->u
2ca00 63 2e 70 43 75 72 73 6f 72 2c 20 26 78 2c 0a 20  c.pCursor, &x,. 
2ca10 20 20 20 20 20 20 20 20 28 70 4f 70 2d 3e 70 35          (pOp->p5
2ca20 20 26 20 28 4f 50 46 4c 41 47 5f 41 50 50 45 4e   & (OPFLAG_APPEN
2ca30 44 7c 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53  D|OPFLAG_SAVEPOS
2ca40 49 54 49 4f 4e 29 29 2c 20 0a 20 20 20 20 20 20  ITION)), .      
2ca50 20 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50    ((pOp->p5 & OP
2ca60 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55  FLAG_USESEEKRESU
2ca70 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65  LT) ? pC->seekRe
2ca80 73 75 6c 74 20 3a 20 30 29 0a 20 20 20 20 20 20  sult : 0).      
2ca90 20 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28    );.    assert(
2caa0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
2cab0 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 70 43  eto==0 );.    pC
2cac0 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
2cad0 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d  CACHE_STALE;.  }
2cae0 0a 20 20 69 66 28 20 72 63 29 20 67 6f 74 6f 20  .  if( rc) goto 
2caf0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2cb00 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  or;.  break;.}..
2cb10 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 44 65  /* Opcode: IdxDe
2cb20 6c 65 74 65 20 50 31 20 50 32 20 50 33 20 2a 20  lete P1 P2 P3 * 
2cb30 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  *.** Synopsis: k
2cb40 65 79 3d 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a  ey=r[P2@P3].**.*
2cb50 2a 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  * The content of
2cb60 20 50 33 20 72 65 67 69 73 74 65 72 73 20 73 74   P3 registers st
2cb70 61 72 74 69 6e 67 20 61 74 20 72 65 67 69 73 74  arting at regist
2cb80 65 72 20 50 32 20 66 6f 72 6d 0a 2a 2a 20 61 6e  er P2 form.** an
2cb90 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
2cba0 6b 65 79 2e 20 54 68 69 73 20 6f 70 63 6f 64 65  key. This opcode
2cbb0 20 72 65 6d 6f 76 65 73 20 74 68 61 74 20 65 6e   removes that en
2cbc0 74 72 79 20 66 72 6f 6d 20 74 68 65 20 0a 2a 2a  try from the .**
2cbd0 20 69 6e 64 65 78 20 6f 70 65 6e 65 64 20 62 79   index opened by
2cbe0 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63   cursor P1..*/.c
2cbf0 61 73 65 20 4f 50 5f 49 64 78 44 65 6c 65 74 65  ase OP_IdxDelete
2cc00 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
2cc10 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
2cc20 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72   *pCrsr;.  int r
2cc30 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65  es;.  UnpackedRe
2cc40 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72  cord r;..  asser
2cc50 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a  t( pOp->p3>0 );.
2cc60 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2cc70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 70  2>0 && pOp->p2+p
2cc80 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
2cc90 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
2cca0 2b 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  +1 );.  assert( 
2ccb0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
2ccc0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
2ccd0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
2cce0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
2ccf0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
2cd00 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65  .  assert( pC->e
2cd10 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
2cd20 5f 42 54 52 45 45 20 29 3b 0a 20 20 73 71 6c 69  _BTREE );.  sqli
2cd30 74 65 33 56 64 62 65 49 6e 63 72 57 72 69 74 65  te3VdbeIncrWrite
2cd40 43 6f 75 6e 74 65 72 28 70 2c 20 70 43 29 3b 0a  Counter(p, pC);.
2cd50 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63    pCrsr = pC->uc
2cd60 2e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65  .pCursor;.  asse
2cd70 72 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a  rt( pCrsr!=0 );.
2cd80 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2cd90 35 3d 3d 30 20 29 3b 0a 20 20 72 2e 70 4b 65 79  5==0 );.  r.pKey
2cda0 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49  Info = pC->pKeyI
2cdb0 6e 66 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20  nfo;.  r.nField 
2cdc0 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 33 3b 0a  = (u16)pOp->p3;.
2cdd0 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d    r.default_rc =
2cde0 20 30 3b 0a 20 20 72 2e 61 4d 65 6d 20 3d 20 26   0;.  r.aMem = &
2cdf0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
2ce00 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
2ce10 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
2ce20 28 70 43 72 73 72 2c 20 26 72 2c 20 30 2c 20 30  (pCrsr, &r, 0, 0
2ce30 2c 20 26 72 65 73 29 3b 0a 20 20 69 66 28 20 72  , &res);.  if( r
2ce40 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
2ce50 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69  ue_to_error;.  i
2ce60 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20  f( res==0 ){.   
2ce70 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
2ce80 65 65 44 65 6c 65 74 65 28 70 43 72 73 72 2c 20  eeDelete(pCrsr, 
2ce90 42 54 52 45 45 5f 41 55 58 44 45 4c 45 54 45 29  BTREE_AUXDELETE)
2cea0 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67  ;.    if( rc ) g
2ceb0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
2cec0 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 61 73  _error;.  }.  as
2ced0 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
2cee0 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
2cef0 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
2cf00 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
2cf10 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74    pC->seekResult
2cf20 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = 0;.  break;.}
2cf30 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 66  ../* Opcode: Def
2cf40 65 72 72 65 64 53 65 65 6b 20 50 31 20 2a 20 50  erredSeek P1 * P
2cf50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
2cf60 69 73 3a 20 4d 6f 76 65 20 50 33 20 74 6f 20 50  is: Move P3 to P
2cf70 31 2e 72 6f 77 69 64 20 69 66 20 6e 65 65 64 65  1.rowid if neede
2cf80 64 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 6e  d.**.** P1 is an
2cf90 20 6f 70 65 6e 20 69 6e 64 65 78 20 63 75 72 73   open index curs
2cfa0 6f 72 20 61 6e 64 20 50 33 20 69 73 20 61 20 63  or and P3 is a c
2cfb0 75 72 73 6f 72 20 6f 6e 20 74 68 65 20 63 6f 72  ursor on the cor
2cfc0 72 65 73 70 6f 6e 64 69 6e 67 0a 2a 2a 20 74 61  responding.** ta
2cfd0 62 6c 65 2e 20 20 54 68 69 73 20 6f 70 63 6f 64  ble.  This opcod
2cfe0 65 20 64 6f 65 73 20 61 20 64 65 66 65 72 72 65  e does a deferre
2cff0 64 20 73 65 65 6b 20 6f 66 20 74 68 65 20 50 33  d seek of the P3
2d000 20 74 61 62 6c 65 20 63 75 72 73 6f 72 0a 2a 2a   table cursor.**
2d010 20 74 6f 20 74 68 65 20 72 6f 77 20 74 68 61 74   to the row that
2d020 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
2d030 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20  the current row 
2d040 6f 66 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  of P1..**.** Thi
2d050 73 20 69 73 20 61 20 64 65 66 65 72 72 65 64 20  s is a deferred 
2d060 73 65 65 6b 2e 20 20 4e 6f 74 68 69 6e 67 20 61  seek.  Nothing a
2d070 63 74 75 61 6c 6c 79 20 68 61 70 70 65 6e 73 20  ctually happens 
2d080 75 6e 74 69 6c 0a 2a 2a 20 74 68 65 20 63 75 72  until.** the cur
2d090 73 6f 72 20 69 73 20 75 73 65 64 20 74 6f 20 72  sor is used to r
2d0a0 65 61 64 20 61 20 72 65 63 6f 72 64 2e 20 20 54  ead a record.  T
2d0b0 68 61 74 20 77 61 79 2c 20 69 66 20 6e 6f 20 72  hat way, if no r
2d0c0 65 61 64 73 0a 2a 2a 20 6f 63 63 75 72 2c 20 6e  eads.** occur, n
2d0d0 6f 20 75 6e 6e 65 63 65 73 73 61 72 79 20 49 2f  o unnecessary I/
2d0e0 4f 20 68 61 70 70 65 6e 73 2e 0a 2a 2a 0a 2a 2a  O happens..**.**
2d0f0 20 50 34 20 6d 61 79 20 62 65 20 61 6e 20 61 72   P4 may be an ar
2d100 72 61 79 20 6f 66 20 69 6e 74 65 67 65 72 73 20  ray of integers 
2d110 28 74 79 70 65 20 50 34 5f 49 4e 54 41 52 52 41  (type P4_INTARRA
2d120 59 29 20 63 6f 6e 74 61 69 6e 69 6e 67 0a 2a 2a  Y) containing.**
2d130 20 6f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65   one entry for e
2d140 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68  ach column in th
2d150 65 20 50 33 20 74 61 62 6c 65 2e 20 20 49 66 20  e P3 table.  If 
2d160 61 72 72 61 79 20 65 6e 74 72 79 20 61 28 69 29  array entry a(i)
2d170 0a 2a 2a 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c  .** is non-zero,
2d180 20 74 68 65 6e 20 72 65 61 64 69 6e 67 20 63 6f   then reading co
2d190 6c 75 6d 6e 20 61 28 69 29 2d 31 20 66 72 6f 6d  lumn a(i)-1 from
2d1a0 20 63 75 72 73 6f 72 20 50 33 20 69 73 20 0a 2a   cursor P3 is .*
2d1b0 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 20  * equivalent to 
2d1c0 70 65 72 66 6f 72 6d 69 6e 67 20 74 68 65 20 64  performing the d
2d1d0 65 66 65 72 72 65 64 20 73 65 65 6b 20 61 6e 64  eferred seek and
2d1e0 20 74 68 65 6e 20 72 65 61 64 69 6e 67 20 63 6f   then reading co
2d1f0 6c 75 6d 6e 20 69 20 0a 2a 2a 20 66 72 6f 6d 20  lumn i .** from 
2d200 50 31 2e 20 20 54 68 69 73 20 69 6e 66 6f 72 6d  P1.  This inform
2d210 61 74 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 20  ation is stored 
2d220 69 6e 20 50 33 20 61 6e 64 20 75 73 65 64 20 74  in P3 and used t
2d230 6f 20 72 65 64 69 72 65 63 74 0a 2a 2a 20 72 65  o redirect.** re
2d240 61 64 73 20 61 67 61 69 6e 73 74 20 50 33 20 6f  ads against P3 o
2d250 76 65 72 20 74 6f 20 50 31 2c 20 74 68 75 73 20  ver to P1, thus 
2d260 70 6f 73 73 69 62 6c 79 20 61 76 6f 69 64 69 6e  possibly avoidin
2d270 67 20 74 68 65 20 6e 65 65 64 20 74 6f 0a 2a 2a  g the need to.**
2d280 20 73 65 65 6b 20 61 6e 64 20 72 65 61 64 20 63   seek and read c
2d290 75 72 73 6f 72 20 50 33 2e 0a 2a 2f 0a 2f 2a 20  ursor P3..*/./* 
2d2a0 4f 70 63 6f 64 65 3a 20 49 64 78 52 6f 77 69 64  Opcode: IdxRowid
2d2b0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
2d2c0 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
2d2d0 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 57 72 69 74  rowid.**.** Writ
2d2e0 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
2d2f0 50 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68  P2 an integer wh
2d300 69 63 68 20 69 73 20 74 68 65 20 6c 61 73 74 20  ich is the last 
2d310 65 6e 74 72 79 20 69 6e 20 74 68 65 20 72 65 63  entry in the rec
2d320 6f 72 64 20 61 74 0a 2a 2a 20 74 68 65 20 65 6e  ord at.** the en
2d330 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6b  d of the index k
2d340 65 79 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79  ey pointed to by
2d350 20 63 75 72 73 6f 72 20 50 31 2e 20 20 54 68 69   cursor P1.  Thi
2d360 73 20 69 6e 74 65 67 65 72 20 73 68 6f 75 6c 64  s integer should
2d370 20 62 65 0a 2a 2a 20 74 68 65 20 72 6f 77 69 64   be.** the rowid
2d380 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 65 6e   of the table en
2d390 74 72 79 20 74 6f 20 77 68 69 63 68 20 74 68 69  try to which thi
2d3a0 73 20 69 6e 64 65 78 20 65 6e 74 72 79 20 70 6f  s index entry po
2d3b0 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  ints..**.** See 
2d3c0 61 6c 73 6f 3a 20 52 6f 77 69 64 2c 20 4d 61 6b  also: Rowid, Mak
2d3d0 65 52 65 63 6f 72 64 2e 0a 2a 2f 0a 63 61 73 65  eRecord..*/.case
2d3e0 20 4f 50 5f 44 65 66 65 72 72 65 64 53 65 65 6b   OP_DeferredSeek
2d3f0 3a 0a 63 61 73 65 20 4f 50 5f 49 64 78 52 6f 77  :.case OP_IdxRow
2d400 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  id: {           
2d410 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 56 64 62  /* out2 */.  Vdb
2d420 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20  eCursor *pC;    
2d430 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
2d440 50 31 20 69 6e 64 65 78 20 63 75 72 73 6f 72 20  P1 index cursor 
2d450 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
2d460 2a 70 54 61 62 43 75 72 3b 20 20 20 20 20 20 20  *pTabCur;       
2d470 20 2f 2a 20 54 68 65 20 50 32 20 74 61 62 6c 65   /* The P2 table
2d480 20 63 75 72 73 6f 72 20 28 4f 50 5f 44 65 66 65   cursor (OP_Defe
2d490 72 72 65 64 53 65 65 6b 20 6f 6e 6c 79 29 20 2a  rredSeek only) *
2d4a0 2f 0a 20 20 69 36 34 20 72 6f 77 69 64 3b 20 20  /.  i64 rowid;  
2d4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d4c0 2f 2a 20 52 6f 77 69 64 20 74 68 61 74 20 50 31  /* Rowid that P1
2d4d0 20 63 75 72 72 65 6e 74 20 70 6f 69 6e 74 73 20   current points 
2d4e0 74 6f 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28  to */..  assert(
2d4f0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
2d500 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
2d510 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
2d520 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
2d530 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
2d540 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
2d550 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
2d560 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73  E_BTREE );.  ass
2d570 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72  ert( pC->uc.pCur
2d580 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  sor!=0 );.  asse
2d590 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d  rt( pC->isTable=
2d5a0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
2d5b0 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
2d5c0 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  to==0 );.  asser
2d5d0 74 28 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  t( !pC->nullRow 
2d5e0 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
2d5f0 4f 50 5f 49 64 78 52 6f 77 69 64 20 29 3b 0a 0a  OP_IdxRowid );..
2d600 20 20 2f 2a 20 54 68 65 20 49 64 78 52 6f 77 69    /* The IdxRowi
2d610 64 20 61 6e 64 20 53 65 65 6b 20 6f 70 63 6f 64  d and Seek opcod
2d620 65 73 20 61 72 65 20 63 6f 6d 62 69 6e 65 64 20  es are combined 
2d630 62 65 63 61 75 73 65 20 6f 66 20 74 68 65 20 63  because of the c
2d640 6f 6d 6d 6f 6e 61 6c 69 74 79 0a 20 20 2a 2a 20  ommonality.  ** 
2d650 6f 66 20 73 71 6c 69 74 65 33 56 64 62 65 43 75  of sqlite3VdbeCu
2d660 72 73 6f 72 52 65 73 74 6f 72 65 28 29 20 61 6e  rsorRestore() an
2d670 64 20 73 71 6c 69 74 65 33 56 64 62 65 49 64 78  d sqlite3VdbeIdx
2d680 52 6f 77 69 64 28 29 2e 20 2a 2f 0a 20 20 72 63  Rowid(). */.  rc
2d690 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75   = sqlite3VdbeCu
2d6a0 72 73 6f 72 52 65 73 74 6f 72 65 28 70 43 29 3b  rsorRestore(pC);
2d6b0 0a 0a 20 20 2f 2a 20 73 71 6c 69 74 65 33 56 62  ..  /* sqlite3Vb
2d6c0 65 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28 29  eCursorRestore()
2d6d0 20 63 61 6e 20 6f 6e 6c 79 20 66 61 69 6c 20 69   can only fail i
2d6e0 66 20 74 68 65 20 72 65 63 6f 72 64 20 68 61 73  f the record has
2d6f0 20 62 65 65 6e 20 64 65 6c 65 74 65 64 0a 20 20   been deleted.  
2d700 2a 2a 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65  ** out from unde
2d710 72 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 54  r the cursor.  T
2d720 68 61 74 20 77 69 6c 6c 20 6e 65 76 65 72 20 68  hat will never h
2d730 61 70 70 65 6e 73 20 66 6f 72 20 61 6e 20 49 64  appens for an Id
2d740 78 52 6f 77 69 64 0a 20 20 2a 2a 20 6f 72 20 53  xRowid.  ** or S
2d750 65 65 6b 20 6f 70 63 6f 64 65 20 2a 2f 0a 20 20  eek opcode */.  
2d760 69 66 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51  if( NEVER(rc!=SQ
2d770 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f 74 6f 20  LITE_OK) ) goto 
2d780 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2d790 6f 72 3b 0a 0a 20 20 69 66 28 20 21 70 43 2d 3e  or;..  if( !pC->
2d7a0 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 72  nullRow ){.    r
2d7b0 6f 77 69 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f  owid = 0;  /* No
2d7c0 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20  t needed.  Only 
2d7d0 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20  used to silence 
2d7e0 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20  a warning. */.  
2d7f0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
2d800 62 65 49 64 78 52 6f 77 69 64 28 64 62 2c 20 70  beIdxRowid(db, p
2d810 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26  C->uc.pCursor, &
2d820 72 6f 77 69 64 29 3b 0a 20 20 20 20 69 66 28 20  rowid);.    if( 
2d830 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
2d840 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  .      goto abor
2d850 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
2d860 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 4f      }.    if( pO
2d870 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 44 65  p->opcode==OP_De
2d880 66 65 72 72 65 64 53 65 65 6b 20 29 7b 0a 20 20  ferredSeek ){.  
2d890 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
2d8a0 3e 70 33 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p3>=0 && pOp->p
2d8b0 33 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  3<p->nCursor );.
2d8c0 20 20 20 20 20 20 70 54 61 62 43 75 72 20 3d 20        pTabCur = 
2d8d0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 33  p->apCsr[pOp->p3
2d8e0 5d 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ];.      assert(
2d8f0 20 70 54 61 62 43 75 72 21 3d 30 20 29 3b 0a 20   pTabCur!=0 );. 
2d900 20 20 20 20 20 61 73 73 65 72 74 28 20 70 54 61       assert( pTa
2d910 62 43 75 72 2d 3e 65 43 75 72 54 79 70 65 3d 3d  bCur->eCurType==
2d920 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
2d930 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
2d940 54 61 62 43 75 72 2d 3e 75 63 2e 70 43 75 72 73  TabCur->uc.pCurs
2d950 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 20 20 61  or!=0 );.      a
2d960 73 73 65 72 74 28 20 70 54 61 62 43 75 72 2d 3e  ssert( pTabCur->
2d970 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 20  isTable );.     
2d980 20 70 54 61 62 43 75 72 2d 3e 6e 75 6c 6c 52 6f   pTabCur->nullRo
2d990 77 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 54 61  w = 0;.      pTa
2d9a0 62 43 75 72 2d 3e 6d 6f 76 65 74 6f 54 61 72 67  bCur->movetoTarg
2d9b0 65 74 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20  et = rowid;.    
2d9c0 20 20 70 54 61 62 43 75 72 2d 3e 64 65 66 65 72    pTabCur->defer
2d9d0 72 65 64 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a 20  redMoveto = 1;. 
2d9e0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
2d9f0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
2da00 41 52 52 41 59 20 7c 7c 20 70 4f 70 2d 3e 70 34  ARRAY || pOp->p4
2da10 2e 61 69 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  .ai==0 );.      
2da20 70 54 61 62 43 75 72 2d 3e 61 41 6c 74 4d 61 70  pTabCur->aAltMap
2da30 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20   = pOp->p4.ai;. 
2da40 20 20 20 20 20 70 54 61 62 43 75 72 2d 3e 70 41       pTabCur->pA
2da50 6c 74 43 75 72 73 6f 72 20 3d 20 70 43 3b 0a 20  ltCursor = pC;. 
2da60 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
2da70 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
2da80 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
2da90 20 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d       pOut->u.i =
2daa0 20 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20   rowid;.    }.  
2dab0 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
2dac0 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
2dad0 4f 50 5f 49 64 78 52 6f 77 69 64 20 29 3b 0a 20  OP_IdxRowid );. 
2dae0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2daf0 6d 53 65 74 4e 75 6c 6c 28 26 61 4d 65 6d 5b 70  mSetNull(&aMem[p
2db00 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 7d 0a 20 20  Op->p2]);.  }.  
2db10 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2db20 6f 64 65 3a 20 49 64 78 47 45 20 50 31 20 50 32  ode: IdxGE P1 P2
2db30 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
2db40 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
2db50 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34  P4].**.** The P4
2db60 20 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73   register values
2db70 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
2db80 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63  P3 form an unpac
2db90 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65  ked index .** ke
2dba0 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65  y that omits the
2dbb0 20 50 52 49 4d 41 52 59 20 4b 45 59 2e 20 20 43   PRIMARY KEY.  C
2dbc0 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20  ompare this key 
2dbd0 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68  value against th
2dbe0 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74  e index .** that
2dbf0 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
2dc00 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67   pointing to, ig
2dc10 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41  noring the PRIMA
2dc20 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 20  RY KEY or ROWID 
2dc30 0a 2a 2a 20 66 69 65 6c 64 73 20 61 74 20 74 68  .** fields at th
2dc40 65 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  e end..**.** If 
2dc50 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74  the P1 index ent
2dc60 72 79 20 69 73 20 67 72 65 61 74 65 72 20 74 68  ry is greater th
2dc70 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
2dc80 68 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20  he key value.** 
2dc90 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
2dca0 20 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c    Otherwise fall
2dcb0 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
2dcc0 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
2dcd0 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
2dce0 49 64 78 47 54 20 50 31 20 50 32 20 50 33 20 50  IdxGT P1 P2 P3 P
2dcf0 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
2dd00 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
2dd10 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69  *.** The P4 regi
2dd20 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69  ster values begi
2dd30 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f  nning with P3 fo
2dd40 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  rm an unpacked i
2dd50 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61  ndex .** key tha
2dd60 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d  t omits the PRIM
2dd70 41 52 59 20 4b 45 59 2e 20 20 43 6f 6d 70 61 72  ARY KEY.  Compar
2dd80 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65  e this key value
2dd90 20 61 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64   against the ind
2dda0 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69  ex .** that P1 i
2ddb0 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  s currently poin
2ddc0 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e  ting to, ignorin
2ddd0 67 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  g the PRIMARY KE
2dde0 59 20 6f 72 20 52 4f 57 49 44 20 0a 2a 2a 20 66  Y or ROWID .** f
2ddf0 69 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64  ields at the end
2de00 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
2de10 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73  1 index entry is
2de20 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68   greater than th
2de30 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74  e key value.** t
2de40 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20  hen jump to P2. 
2de50 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20   Otherwise fall 
2de60 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
2de70 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
2de80 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .*/./* Opcode: I
2de90 64 78 4c 54 20 50 31 20 50 32 20 50 33 20 50 34  dxLT P1 P2 P3 P4
2dea0 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
2deb0 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
2dec0 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73  .** The P4 regis
2ded0 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e  ter values begin
2dee0 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72  ning with P3 for
2def0 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  m an unpacked in
2df00 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74  dex .** key that
2df10 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41   omits the PRIMA
2df20 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e  RY KEY or ROWID.
2df30 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b    Compare this k
2df40 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74  ey value against
2df50 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 74 68  .** the index th
2df60 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e 74  at P1 is current
2df70 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20  ly pointing to, 
2df80 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49  ignoring the PRI
2df90 4d 41 52 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52  MARY KEY or.** R
2dfa0 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69  OWID on the P1 i
2dfb0 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ndex..**.** If t
2dfc0 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72  he P1 index entr
2dfd0 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74  y is less than t
2dfe0 68 65 20 6b 65 79 20 76 61 6c 75 65 20 74 68 65  he key value the
2dff0 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  n jump to P2..**
2e000 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20   Otherwise fall 
2e010 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
2e020 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
2e030 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .*/./* Opcode: I
2e040 64 78 4c 45 20 50 31 20 50 32 20 50 33 20 50 34  dxLE P1 P2 P3 P4
2e050 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
2e060 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
2e070 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73  .** The P4 regis
2e080 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e  ter values begin
2e090 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72  ning with P3 for
2e0a0 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  m an unpacked in
2e0b0 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74  dex .** key that
2e0c0 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41   omits the PRIMA
2e0d0 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e  RY KEY or ROWID.
2e0e0 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b    Compare this k
2e0f0 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74  ey value against
2e100 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 74 68  .** the index th
2e110 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e 74  at P1 is current
2e120 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20  ly pointing to, 
2e130 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49  ignoring the PRI
2e140 4d 41 52 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52  MARY KEY or.** R
2e150 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69  OWID on the P1 i
2e160 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ndex..**.** If t
2e170 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72  he P1 index entr
2e180 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f  y is less than o
2e190 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
2e1a0 65 79 20 76 61 6c 75 65 20 74 68 65 6e 20 6a 75  ey value then ju
2e1b0 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e 20 4f 74 68  mp.** to P2. Oth
2e1c0 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f  erwise fall thro
2e1d0 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
2e1e0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
2e1f0 63 61 73 65 20 4f 50 5f 49 64 78 4c 45 3a 20 20  case OP_IdxLE:  
2e200 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
2e210 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 47 54  */.case OP_IdxGT
2e220 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  :          /* ju
2e230 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64  mp */.case OP_Id
2e240 78 4c 54 3a 20 20 20 20 20 20 20 20 20 20 2f 2a  xLT:          /*
2e250 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50   jump */.case OP
2e260 5f 49 64 78 47 45 3a 20 20 7b 20 20 20 20 20 20  _IdxGE:  {      
2e270 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64   /* jump */.  Vd
2e280 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
2e290 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63  int res;.  Unpac
2e2a0 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20  kedRecord r;..  
2e2b0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
2e2c0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
2e2d0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
2e2e0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
2e2f0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
2e300 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
2e310 74 28 20 70 43 2d 3e 69 73 4f 72 64 65 72 65 64  t( pC->isOrdered
2e320 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
2e330 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
2e340 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61  YPE_BTREE );.  a
2e350 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43  ssert( pC->uc.pC
2e360 75 72 73 6f 72 21 3d 30 29 3b 0a 20 20 61 73 73  ursor!=0);.  ass
2e370 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
2e380 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
2e390 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d  assert( pOp->p5=
2e3a0 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 31  =0 || pOp->p5==1
2e3b0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
2e3c0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
2e3d0 54 33 32 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49  T32 );.  r.pKeyI
2e3e0 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e  nfo = pC->pKeyIn
2e3f0 66 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d  fo;.  r.nField =
2e400 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b   (u16)pOp->p4.i;
2e410 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
2e420 64 65 3c 4f 50 5f 49 64 78 4c 54 20 29 7b 0a 20  de<OP_IdxLT ){. 
2e430 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
2e440 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45  opcode==OP_IdxLE
2e450 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
2e460 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20  =OP_IdxGT );.   
2e470 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20   r.default_rc = 
2e480 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  -1;.  }else{.   
2e490 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
2e4a0 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20 7c  code==OP_IdxGE |
2e4b0 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
2e4c0 50 5f 49 64 78 4c 54 20 29 3b 0a 20 20 20 20 72  P_IdxLT );.    r
2e4d0 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b  .default_rc = 0;
2e4e0 0a 20 20 7d 0a 20 20 72 2e 61 4d 65 6d 20 3d 20  .  }.  r.aMem = 
2e4f0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
2e500 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
2e510 42 55 47 0a 20 20 7b 0a 20 20 20 20 69 6e 74 20  BUG.  {.    int 
2e520 69 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  i;.    for(i=0; 
2e530 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29  i<r.nField; i++)
2e540 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
2e550 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d  memIsValid(&r.aM
2e560 65 6d 5b 69 5d 29 20 29 3b 0a 20 20 20 20 20 20  em[i]) );.      
2e570 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
2e580 4f 70 2d 3e 70 33 2b 69 2c 20 26 61 4d 65 6d 5b  Op->p3+i, &aMem[
2e590 70 4f 70 2d 3e 70 33 2b 69 5d 29 3b 0a 20 20 20  pOp->p3+i]);.   
2e5a0 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20   }.  }.#endif.  
2e5b0 72 65 73 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74  res = 0;  /* Not
2e5c0 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75   needed.  Only u
2e5d0 73 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61  sed to silence a
2e5e0 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72   warning. */.  r
2e5f0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  c = sqlite3VdbeI
2e600 64 78 4b 65 79 43 6f 6d 70 61 72 65 28 64 62 2c  dxKeyCompare(db,
2e610 20 70 43 2c 20 26 72 2c 20 26 72 65 73 29 3b 0a   pC, &r, &res);.
2e620 20 20 61 73 73 65 72 74 28 20 28 4f 50 5f 49 64    assert( (OP_Id
2e630 78 4c 45 26 31 29 3d 3d 28 4f 50 5f 49 64 78 4c  xLE&1)==(OP_IdxL
2e640 54 26 31 29 20 26 26 20 28 4f 50 5f 49 64 78 47  T&1) && (OP_IdxG
2e650 45 26 31 29 3d 3d 28 4f 50 5f 49 64 78 47 54 26  E&1)==(OP_IdxGT&
2e660 31 29 20 29 3b 0a 20 20 69 66 28 20 28 70 4f 70  1) );.  if( (pOp
2e670 2d 3e 6f 70 63 6f 64 65 26 31 29 3d 3d 28 4f 50  ->opcode&1)==(OP
2e680 5f 49 64 78 4c 54 26 31 29 20 29 7b 0a 20 20 20  _IdxLT&1) ){.   
2e690 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
2e6a0 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c  code==OP_IdxLE |
2e6b0 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
2e6c0 50 5f 49 64 78 4c 54 20 29 3b 0a 20 20 20 20 72  P_IdxLT );.    r
2e6d0 65 73 20 3d 20 2d 72 65 73 3b 0a 20 20 7d 65 6c  es = -res;.  }el
2e6e0 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
2e6f0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
2e700 49 64 78 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70  IdxGE || pOp->op
2e710 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29  code==OP_IdxGT )
2e720 3b 0a 20 20 20 20 72 65 73 2b 2b 3b 0a 20 20 7d  ;.    res++;.  }
2e730 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
2e740 65 6e 28 72 65 73 3e 30 2c 32 29 3b 0a 20 20 69  en(res>0,2);.  i
2e750 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
2e760 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
2e770 0a 20 20 69 66 28 20 72 65 73 3e 30 20 29 20 67  .  if( res>0 ) g
2e780 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
2e790 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2e7a0 70 63 6f 64 65 3a 20 44 65 73 74 72 6f 79 20 50  pcode: Destroy P
2e7b0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
2e7c0 2a 20 44 65 6c 65 74 65 20 61 6e 20 65 6e 74 69  * Delete an enti
2e7d0 72 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  re database tabl
2e7e0 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65  e or index whose
2e7f0 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 74 68   root page in th
2e800 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69  e database.** fi
2e810 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79 20 50  le is given by P
2e820 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62  1..**.** The tab
2e830 6c 65 20 62 65 69 6e 67 20 64 65 73 74 72 6f 79  le being destroy
2e840 65 64 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69  ed is in the mai
2e850 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
2e860 69 66 20 50 33 3d 3d 30 2e 20 20 49 66 0a 2a 2a  if P3==0.  If.**
2e870 20 50 33 3d 3d 31 20 74 68 65 6e 20 74 68 65 20   P3==1 then the 
2e880 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61  table to be clea
2e890 72 20 69 73 20 69 6e 20 74 68 65 20 61 75 78 69  r is in the auxi
2e8a0 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66  liary database f
2e8b0 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75  ile.** that is u
2e8c0 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62  sed to store tab
2e8d0 6c 65 73 20 63 72 65 61 74 65 20 75 73 69 6e 67  les create using
2e8e0 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52   CREATE TEMPORAR
2e8f0 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49  Y TABLE..**.** I
2e900 66 20 41 55 54 4f 56 41 43 55 55 4d 20 69 73 20  f AUTOVACUUM is 
2e910 65 6e 61 62 6c 65 64 20 74 68 65 6e 20 69 74 20  enabled then it 
2e920 69 73 20 70 6f 73 73 69 62 6c 65 20 74 68 61 74  is possible that
2e930 20 61 6e 6f 74 68 65 72 20 72 6f 6f 74 20 70 61   another root pa
2e940 67 65 0a 2a 2a 20 6d 69 67 68 74 20 62 65 20 6d  ge.** might be m
2e950 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20 6e 65  oved into the ne
2e960 77 6c 79 20 64 65 6c 65 74 65 64 20 72 6f 6f 74  wly deleted root
2e970 20 70 61 67 65 20 69 6e 20 6f 72 64 65 72 20 74   page in order t
2e980 6f 20 6b 65 65 70 20 61 6c 6c 0a 2a 2a 20 72 6f  o keep all.** ro
2e990 6f 74 20 70 61 67 65 73 20 63 6f 6e 74 69 67 75  ot pages contigu
2e9a0 6f 75 73 20 61 74 20 74 68 65 20 62 65 67 69 6e  ous at the begin
2e9b0 6e 69 6e 67 20 6f 66 20 74 68 65 20 64 61 74 61  ning of the data
2e9c0 62 61 73 65 2e 20 20 54 68 65 20 66 6f 72 6d 65  base.  The forme
2e9d0 72 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20 74 68  r.** value of th
2e9e0 65 20 72 6f 6f 74 20 70 61 67 65 20 74 68 61 74  e root page that
2e9f0 20 6d 6f 76 65 64 20 2d 20 69 74 73 20 76 61 6c   moved - its val
2ea00 75 65 20 62 65 66 6f 72 65 20 74 68 65 20 6d 6f  ue before the mo
2ea10 76 65 20 6f 63 63 75 72 72 65 64 20 2d 0a 2a 2a  ve occurred -.**
2ea20 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
2ea30 67 69 73 74 65 72 20 50 32 2e 20 49 66 20 6e 6f  gister P2. If no
2ea40 20 70 61 67 65 20 6d 6f 76 65 6d 65 6e 74 20 77   page movement w
2ea50 61 73 20 72 65 71 75 69 72 65 64 20 28 62 65 63  as required (bec
2ea60 61 75 73 65 20 74 68 65 0a 2a 2a 20 74 61 62 6c  ause the.** tabl
2ea70 65 20 62 65 69 6e 67 20 64 72 6f 70 70 65 64 20  e being dropped 
2ea80 77 61 73 20 61 6c 72 65 61 64 79 20 74 68 65 20  was already the 
2ea90 6c 61 73 74 20 6f 6e 65 20 69 6e 20 74 68 65 20  last one in the 
2eaa0 64 61 74 61 62 61 73 65 29 20 74 68 65 6e 20 61  database) then a
2eab0 20 0a 2a 2a 20 7a 65 72 6f 20 69 73 20 73 74 6f   .** zero is sto
2eac0 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
2ead0 50 32 2e 20 20 49 66 20 41 55 54 4f 56 41 43 55  P2.  If AUTOVACU
2eae0 55 4d 20 69 73 20 64 69 73 61 62 6c 65 64 20 74  UM is disabled t
2eaf0 68 65 6e 20 61 20 7a 65 72 6f 20 0a 2a 2a 20 69  hen a zero .** i
2eb00 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
2eb10 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  ster P2..**.** T
2eb20 68 69 73 20 6f 70 63 6f 64 65 20 74 68 72 6f 77  his opcode throw
2eb30 73 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74 68  s an error if th
2eb40 65 72 65 20 61 72 65 20 61 6e 79 20 61 63 74 69  ere are any acti
2eb50 76 65 20 72 65 61 64 65 72 20 56 4d 73 20 77 68  ve reader VMs wh
2eb60 65 6e 0a 2a 2a 20 69 74 20 69 73 20 69 6e 76 6f  en.** it is invo
2eb70 6b 65 64 2e 20 54 68 69 73 20 69 73 20 64 6f 6e  ked. This is don
2eb80 65 20 74 6f 20 61 76 6f 69 64 20 74 68 65 20 64  e to avoid the d
2eb90 69 66 66 69 63 75 6c 74 79 20 61 73 73 6f 63 69  ifficulty associ
2eba0 61 74 65 64 20 77 69 74 68 20 0a 2a 2a 20 75 70  ated with .** up
2ebb0 64 61 74 69 6e 67 20 65 78 69 73 74 69 6e 67 20  dating existing 
2ebc0 63 75 72 73 6f 72 73 20 77 68 65 6e 20 61 20 72  cursors when a r
2ebd0 6f 6f 74 20 70 61 67 65 20 69 73 20 6d 6f 76 65  oot page is move
2ebe0 64 20 69 6e 20 61 6e 20 41 55 54 4f 56 41 43 55  d in an AUTOVACU
2ebf0 55 4d 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e  UM .** database.
2ec00 20 54 68 69 73 20 65 72 72 6f 72 20 69 73 20 74   This error is t
2ec10 68 72 6f 77 6e 20 65 76 65 6e 20 69 66 20 74 68  hrown even if th
2ec20 65 20 64 61 74 61 62 61 73 65 20 69 73 20 6e 6f  e database is no
2ec30 74 20 61 6e 20 41 55 54 4f 56 41 43 55 55 4d 20  t an AUTOVACUUM 
2ec40 0a 2a 2a 20 64 62 20 69 6e 20 6f 72 64 65 72 20  .** db in order 
2ec50 74 6f 20 61 76 6f 69 64 20 69 6e 74 72 6f 64 75  to avoid introdu
2ec60 63 69 6e 67 20 61 6e 20 69 6e 63 6f 6d 70 61 74  cing an incompat
2ec70 69 62 69 6c 69 74 79 20 62 65 74 77 65 65 6e 20  ibility between 
2ec80 61 75 74 6f 76 61 63 75 75 6d 20 0a 2a 2a 20 61  autovacuum .** a
2ec90 6e 64 20 6e 6f 6e 2d 61 75 74 6f 76 61 63 75 75  nd non-autovacuu
2eca0 6d 20 6d 6f 64 65 73 2e 0a 2a 2a 0a 2a 2a 20 53  m modes..**.** S
2ecb0 65 65 20 61 6c 73 6f 3a 20 43 6c 65 61 72 0a 2a  ee also: Clear.*
2ecc0 2f 0a 63 61 73 65 20 4f 50 5f 44 65 73 74 72 6f  /.case OP_Destro
2ecd0 79 3a 20 7b 20 20 20 20 20 2f 2a 20 6f 75 74 32  y: {     /* out2
2ece0 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 6f 76 65 64   */.  int iMoved
2ecf0 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 0a 20 20  ;.  int iDb;..  
2ed00 73 71 6c 69 74 65 33 56 64 62 65 49 6e 63 72 57  sqlite3VdbeIncrW
2ed10 72 69 74 65 43 6f 75 6e 74 65 72 28 70 2c 20 30  riteCounter(p, 0
2ed20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
2ed30 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20  readOnly==0 );. 
2ed40 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
2ed50 3e 31 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f  >1 );.  pOut = o
2ed60 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
2ed70 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 66   pOp);.  pOut->f
2ed80 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b  lags = MEM_Null;
2ed90 0a 20 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65  .  if( db->nVdbe
2eda0 52 65 61 64 20 3e 20 64 62 2d 3e 6e 56 44 65 73  Read > db->nVDes
2edb0 74 72 6f 79 2b 31 20 29 7b 0a 20 20 20 20 72 63  troy+1 ){.    rc
2edc0 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44   = SQLITE_LOCKED
2edd0 3b 0a 20 20 20 20 70 2d 3e 65 72 72 6f 72 41 63  ;.    p->errorAc
2ede0 74 69 6f 6e 20 3d 20 4f 45 5f 41 62 6f 72 74 3b  tion = OE_Abort;
2edf0 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f  .    goto abort_
2ee00 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
2ee10 7d 65 6c 73 65 7b 0a 20 20 20 20 69 44 62 20 3d  }else{.    iDb =
2ee20 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 61 73   pOp->p3;.    as
2ee30 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74  sert( DbMaskTest
2ee40 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69  (p->btreeMask, i
2ee50 44 62 29 20 29 3b 0a 20 20 20 20 69 4d 6f 76 65  Db) );.    iMove
2ee60 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e  d = 0;  /* Not n
2ee70 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 74 6f 20  eeded.  Only to 
2ee80 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e  silence a warnin
2ee90 67 2e 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73  g. */.    rc = s
2eea0 71 6c 69 74 65 33 42 74 72 65 65 44 72 6f 70 54  qlite3BtreeDropT
2eeb0 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 69 44 62  able(db->aDb[iDb
2eec0 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20  ].pBt, pOp->p1, 
2eed0 26 69 4d 6f 76 65 64 29 3b 0a 20 20 20 20 70 4f  &iMoved);.    pO
2eee0 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
2eef0 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75  Int;.    pOut->u
2ef00 2e 69 20 3d 20 69 4d 6f 76 65 64 3b 0a 20 20 20  .i = iMoved;.   
2ef10 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
2ef20 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
2ef30 72 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  r;.#ifndef SQLIT
2ef40 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55  E_OMIT_AUTOVACUU
2ef50 4d 0a 20 20 20 20 69 66 28 20 69 4d 6f 76 65 64  M.    if( iMoved
2ef60 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  !=0 ){.      sql
2ef70 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65  ite3RootPageMove
2ef80 64 28 64 62 2c 20 69 44 62 2c 20 69 4d 6f 76 65  d(db, iDb, iMove
2ef90 64 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20  d, pOp->p1);.   
2efa0 20 20 20 2f 2a 20 41 6c 6c 20 4f 50 5f 44 65 73     /* All OP_Des
2efb0 74 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e 73 20  troy operations 
2efc0 6f 63 63 75 72 20 6f 6e 20 74 68 65 20 73 61 6d  occur on the sam
2efd0 65 20 62 74 72 65 65 20 2a 2f 0a 20 20 20 20 20  e btree */.     
2efe0 20 61 73 73 65 72 74 28 20 72 65 73 65 74 53 63   assert( resetSc
2eff0 68 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 30 20 7c  hemaOnFault==0 |
2f000 7c 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46  | resetSchemaOnF
2f010 61 75 6c 74 3d 3d 69 44 62 2b 31 20 29 3b 0a 20  ault==iDb+1 );. 
2f020 20 20 20 20 20 72 65 73 65 74 53 63 68 65 6d 61       resetSchema
2f030 4f 6e 46 61 75 6c 74 20 3d 20 69 44 62 2b 31 3b  OnFault = iDb+1;
2f040 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  .    }.#endif.  
2f050 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
2f060 20 4f 70 63 6f 64 65 3a 20 43 6c 65 61 72 20 50   Opcode: Clear P
2f070 31 20 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20 44 65  1 P2 P3.**.** De
2f080 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74  lete all content
2f090 73 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  s of the databas
2f0a0 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
2f0b0 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65   whose root page
2f0c0 0a 2a 2a 20 69 6e 20 74 68 65 20 64 61 74 61 62  .** in the datab
2f0d0 61 73 65 20 66 69 6c 65 20 69 73 20 67 69 76 65  ase file is give
2f0e0 6e 20 62 79 20 50 31 2e 20 20 42 75 74 2c 20 75  n by P1.  But, u
2f0f0 6e 6c 69 6b 65 20 44 65 73 74 72 6f 79 2c 20 64  nlike Destroy, d
2f100 6f 20 6e 6f 74 0a 2a 2a 20 72 65 6d 6f 76 65 20  o not.** remove 
2f110 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
2f120 65 78 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ex from the data
2f130 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a  base file..**.**
2f140 20 54 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   The table being
2f150 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65   clear is in the
2f160 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
2f170 69 6c 65 20 69 66 20 50 32 3d 3d 30 2e 20 20 49  ile if P2==0.  I
2f180 66 0a 2a 2a 20 50 32 3d 3d 31 20 74 68 65 6e 20  f.** P2==1 then 
2f190 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20  the table to be 
2f1a0 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20  clear is in the 
2f1b0 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61  auxiliary databa
2f1c0 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20  se file.** that 
2f1d0 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  is used to store
2f1e0 20 74 61 62 6c 65 73 20 63 72 65 61 74 65 20 75   tables create u
2f1f0 73 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50  sing CREATE TEMP
2f200 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a  ORARY TABLE..**.
2f210 2a 2a 20 49 66 20 74 68 65 20 50 33 20 76 61 6c  ** If the P3 val
2f220 75 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  ue is non-zero, 
2f230 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 72  then the table r
2f240 65 66 65 72 72 65 64 20 74 6f 20 6d 75 73 74 20  eferred to must 
2f250 62 65 20 61 6e 0a 2a 2a 20 69 6e 74 6b 65 79 20  be an.** intkey 
2f260 74 61 62 6c 65 20 28 61 6e 20 53 51 4c 20 74 61  table (an SQL ta
2f270 62 6c 65 2c 20 6e 6f 74 20 61 6e 20 69 6e 64 65  ble, not an inde
2f280 78 29 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65  x). In this case
2f290 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20   the row change 
2f2a0 0a 2a 2a 20 63 6f 75 6e 74 20 69 73 20 69 6e 63  .** count is inc
2f2b0 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20  remented by the 
2f2c0 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69  number of rows i
2f2d0 6e 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  n the table bein
2f2e0 67 20 63 6c 65 61 72 65 64 2e 20 0a 2a 2a 20 49  g cleared. .** I
2f2f0 66 20 50 33 20 69 73 20 67 72 65 61 74 65 72 20  f P3 is greater 
2f300 74 68 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 20  than zero, then 
2f310 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64  the value stored
2f320 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
2f330 69 73 0a 2a 2a 20 61 6c 73 6f 20 69 6e 63 72 65  is.** also incre
2f340 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75  mented by the nu
2f350 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20  mber of rows in 
2f360 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  the table being 
2f370 63 6c 65 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 53  cleared..**.** S
2f380 65 65 20 61 6c 73 6f 3a 20 44 65 73 74 72 6f 79  ee also: Destroy
2f390 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 65 61  .*/.case OP_Clea
2f3a0 72 3a 20 7b 0a 20 20 69 6e 74 20 6e 43 68 61 6e  r: {.  int nChan
2f3b0 67 65 3b 0a 20 0a 20 20 73 71 6c 69 74 65 33 56  ge;. .  sqlite3V
2f3c0 64 62 65 49 6e 63 72 57 72 69 74 65 43 6f 75 6e  dbeIncrWriteCoun
2f3d0 74 65 72 28 70 2c 20 30 29 3b 0a 20 20 6e 43 68  ter(p, 0);.  nCh
2f3e0 61 6e 67 65 20 3d 20 30 3b 0a 20 20 61 73 73 65  ange = 0;.  asse
2f3f0 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
2f400 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
2f410 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74  DbMaskTest(p->bt
2f420 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 32  reeMask, pOp->p2
2f430 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  ) );.  rc = sqli
2f440 74 65 33 42 74 72 65 65 43 6c 65 61 72 54 61 62  te3BtreeClearTab
2f450 6c 65 28 0a 20 20 20 20 20 20 64 62 2d 3e 61 44  le(.      db->aD
2f460 62 5b 70 4f 70 2d 3e 70 32 5d 2e 70 42 74 2c 20  b[pOp->p2].pBt, 
2f470 70 4f 70 2d 3e 70 31 2c 20 28 70 4f 70 2d 3e 70  pOp->p1, (pOp->p
2f480 33 20 3f 20 26 6e 43 68 61 6e 67 65 20 3a 20 30  3 ? &nChange : 0
2f490 29 0a 20 20 29 3b 0a 20 20 69 66 28 20 70 4f 70  ).  );.  if( pOp
2f4a0 2d 3e 70 33 20 29 7b 0a 20 20 20 20 70 2d 3e 6e  ->p3 ){.    p->n
2f4b0 43 68 61 6e 67 65 20 2b 3d 20 6e 43 68 61 6e 67  Change += nChang
2f4c0 65 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  e;.    if( pOp->
2f4d0 70 33 3e 30 20 29 7b 0a 20 20 20 20 20 20 61 73  p3>0 ){.      as
2f4e0 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
2f4f0 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29  (&aMem[pOp->p3])
2f500 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f   );.      memAbo
2f510 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61  utToChange(p, &a
2f520 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20  Mem[pOp->p3]);. 
2f530 20 20 20 20 20 61 4d 65 6d 5b 70 4f 70 2d 3e 70       aMem[pOp->p
2f540 33 5d 2e 75 2e 69 20 2b 3d 20 6e 43 68 61 6e 67  3].u.i += nChang
2f550 65 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69  e;.    }.  }.  i
2f560 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
2f570 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
2f580 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2f590 4f 70 63 6f 64 65 3a 20 52 65 73 65 74 53 6f 72  Opcode: ResetSor
2f5a0 74 65 72 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  ter P1 * * * *.*
2f5b0 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c 20  *.** Delete all 
2f5c0 63 6f 6e 74 65 6e 74 73 20 66 72 6f 6d 20 74 68  contents from th
2f5d0 65 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c  e ephemeral tabl
2f5e0 65 20 6f 72 20 73 6f 72 74 65 72 0a 2a 2a 20 74  e or sorter.** t
2f5f0 68 61 74 20 69 73 20 6f 70 65 6e 20 6f 6e 20 63  hat is open on c
2f600 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20  ursor P1..**.** 
2f610 54 68 69 73 20 6f 70 63 6f 64 65 20 6f 6e 6c 79  This opcode only
2f620 20 77 6f 72 6b 73 20 66 6f 72 20 63 75 72 73 6f   works for curso
2f630 72 73 20 75 73 65 64 20 66 6f 72 20 73 6f 72 74  rs used for sort
2f640 69 6e 67 20 61 6e 64 0a 2a 2a 20 6f 70 65 6e 65  ing and.** opene
2f650 64 20 77 69 74 68 20 4f 50 5f 4f 70 65 6e 45 70  d with OP_OpenEp
2f660 68 65 6d 65 72 61 6c 20 6f 72 20 4f 50 5f 53 6f  hemeral or OP_So
2f670 72 74 65 72 4f 70 65 6e 2e 0a 2a 2f 0a 63 61 73  rterOpen..*/.cas
2f680 65 20 4f 50 5f 52 65 73 65 74 53 6f 72 74 65 72  e OP_ResetSorter
2f690 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
2f6a0 20 2a 70 43 3b 0a 20 0a 20 20 61 73 73 65 72 74   *pC;. .  assert
2f6b0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
2f6c0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
2f6d0 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
2f6e0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
2f6f0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
2f700 29 3b 0a 20 20 69 66 28 20 69 73 53 6f 72 74 65  );.  if( isSorte
2f710 72 28 70 43 29 20 29 7b 0a 20 20 20 20 73 71 6c  r(pC) ){.    sql
2f720 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 52 65  ite3VdbeSorterRe
2f730 73 65 74 28 64 62 2c 20 70 43 2d 3e 75 63 2e 70  set(db, pC->uc.p
2f740 53 6f 72 74 65 72 29 3b 0a 20 20 7d 65 6c 73 65  Sorter);.  }else
2f750 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  {.    assert( pC
2f760 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
2f770 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 20  YPE_BTREE );.   
2f780 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 45   assert( pC->isE
2f790 70 68 65 6d 65 72 61 6c 20 29 3b 0a 20 20 20 20  phemeral );.    
2f7a0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
2f7b0 65 43 6c 65 61 72 54 61 62 6c 65 4f 66 43 75 72  eClearTableOfCur
2f7c0 73 6f 72 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  sor(pC->uc.pCurs
2f7d0 6f 72 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20  or);.    if( rc 
2f7e0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
2f7f0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20  _to_error;.  }. 
2f800 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
2f810 63 6f 64 65 3a 20 43 72 65 61 74 65 42 74 72 65  code: CreateBtre
2f820 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  e P1 P2 P3 * *.*
2f830 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
2f840 5d 3d 72 6f 6f 74 20 69 44 62 3d 50 31 20 66 6c  ]=root iDb=P1 fl
2f850 61 67 73 3d 50 33 0a 2a 2a 0a 2a 2a 20 41 6c 6c  ags=P3.**.** All
2f860 6f 63 61 74 65 20 61 20 6e 65 77 20 62 2d 74 72  ocate a new b-tr
2f870 65 65 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64  ee in the main d
2f880 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20  atabase file if 
2f890 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a  P1==0 or in the.
2f8a0 2a 2a 20 54 45 4d 50 20 64 61 74 61 62 61 73 65  ** TEMP database
2f8b0 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f   file if P1==1 o
2f8c0 72 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64  r in an attached
2f8d0 20 64 61 74 61 62 61 73 65 20 69 66 0a 2a 2a 20   database if.** 
2f8e0 50 31 3e 31 2e 20 20 54 68 65 20 50 33 20 61 72  P1>1.  The P3 ar
2f8f0 67 75 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 31  gument must be 1
2f900 20 28 42 54 52 45 45 5f 49 4e 54 4b 45 59 29 20   (BTREE_INTKEY) 
2f910 66 6f 72 20 61 20 72 6f 77 69 64 20 74 61 62 6c  for a rowid tabl
2f920 65 0a 2a 2a 20 69 74 20 6d 75 73 74 20 62 65 20  e.** it must be 
2f930 32 20 28 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59  2 (BTREE_BLOBKEY
2f940 29 20 66 6f 72 20 61 6e 20 69 6e 64 65 78 20 6f  ) for an index o
2f950 72 20 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20  r WITHOUT ROWID 
2f960 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 72 6f  table..** The ro
2f970 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f  ot page number o
2f980 66 20 74 68 65 20 6e 65 77 20 62 2d 74 72 65 65  f the new b-tree
2f990 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
2f9a0 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61  gister P2..*/.ca
2f9b0 73 65 20 4f 50 5f 43 72 65 61 74 65 42 74 72 65  se OP_CreateBtre
2f9c0 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a  e: {          /*
2f9d0 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20 70   out2 */.  int p
2f9e0 67 6e 6f 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a  gno;.  Db *pDb;.
2f9f0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e  .  sqlite3VdbeIn
2fa00 63 72 57 72 69 74 65 43 6f 75 6e 74 65 72 28 70  crWriteCounter(p
2fa10 2c 20 30 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f  , 0);.  pOut = o
2fa20 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
2fa30 20 70 4f 70 29 3b 0a 20 20 70 67 6e 6f 20 3d 20   pOp);.  pgno = 
2fa40 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  0;.  assert( pOp
2fa50 2d 3e 70 33 3d 3d 42 54 52 45 45 5f 49 4e 54 4b  ->p3==BTREE_INTK
2fa60 45 59 20 7c 7c 20 70 4f 70 2d 3e 70 33 3d 3d 42  EY || pOp->p3==B
2fa70 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 29 3b 0a  TREE_BLOBKEY );.
2fa80 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2fa90 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
2faa0 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
2fab0 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
2fac0 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f  p->btreeMask, pO
2fad0 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73 73 65  p->p1) );.  asse
2fae0 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
2faf0 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64  =0 );.  pDb = &d
2fb00 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b  b->aDb[pOp->p1];
2fb10 0a 20 20 61 73 73 65 72 74 28 20 70 44 62 2d 3e  .  assert( pDb->
2fb20 70 42 74 21 3d 30 20 29 3b 0a 20 20 72 63 20 3d  pBt!=0 );.  rc =
2fb30 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65   sqlite3BtreeCre
2fb40 61 74 65 54 61 62 6c 65 28 70 44 62 2d 3e 70 42  ateTable(pDb->pB
2fb50 74 2c 20 26 70 67 6e 6f 2c 20 70 4f 70 2d 3e 70  t, &pgno, pOp->p
2fb60 33 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  3);.  if( rc ) g
2fb70 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
2fb80 5f 65 72 72 6f 72 3b 0a 20 20 70 4f 75 74 2d 3e  _error;.  pOut->
2fb90 75 2e 69 20 3d 20 70 67 6e 6f 3b 0a 20 20 62 72  u.i = pgno;.  br
2fba0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2fbb0 65 3a 20 53 71 6c 45 78 65 63 20 2a 20 2a 20 2a  e: SqlExec * * *
2fbc0 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 75 6e 20   P4 *.**.** Run 
2fbd0 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  the SQL statemen
2fbe0 74 20 6f 72 20 73 74 61 74 65 6d 65 6e 74 73 20  t or statements 
2fbf0 73 70 65 63 69 66 69 65 64 20 69 6e 20 74 68 65  specified in the
2fc00 20 50 34 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 63   P4 string..*/.c
2fc10 61 73 65 20 4f 50 5f 53 71 6c 45 78 65 63 3a 20  ase OP_SqlExec: 
2fc20 7b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 49  {.  sqlite3VdbeI
2fc30 6e 63 72 57 72 69 74 65 43 6f 75 6e 74 65 72 28  ncrWriteCounter(
2fc40 70 2c 20 30 29 3b 0a 20 20 64 62 2d 3e 6e 53 71  p, 0);.  db->nSq
2fc50 6c 45 78 65 63 2b 2b 3b 0a 20 20 72 63 20 3d 20  lExec++;.  rc = 
2fc60 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64 62 2c  sqlite3_exec(db,
2fc70 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 30 2c 20 30   pOp->p4.z, 0, 0
2fc80 2c 20 30 29 3b 0a 20 20 64 62 2d 3e 6e 53 71 6c  , 0);.  db->nSql
2fc90 45 78 65 63 2d 2d 3b 0a 20 20 69 66 28 20 72 63  Exec--;.  if( rc
2fca0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
2fcb0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72  e_to_error;.  br
2fcc0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2fcd0 65 3a 20 50 61 72 73 65 53 63 68 65 6d 61 20 50  e: ParseSchema P
2fce0 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
2fcf0 20 52 65 61 64 20 61 6e 64 20 70 61 72 73 65 20   Read and parse 
2fd00 61 6c 6c 20 65 6e 74 72 69 65 73 20 66 72 6f 6d  all entries from
2fd10 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 41 53 54   the SQLITE_MAST
2fd20 45 52 20 74 61 62 6c 65 20 6f 66 20 64 61 74 61  ER table of data
2fd30 62 61 73 65 20 50 31 0a 2a 2a 20 74 68 61 74 20  base P1.** that 
2fd40 6d 61 74 63 68 20 74 68 65 20 57 48 45 52 45 20  match the WHERE 
2fd50 63 6c 61 75 73 65 20 50 34 2e 20 0a 2a 2a 0a 2a  clause P4. .**.*
2fd60 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e  * This opcode in
2fd70 76 6f 6b 65 73 20 74 68 65 20 70 61 72 73 65 72  vokes the parser
2fd80 20 74 6f 20 63 72 65 61 74 65 20 61 20 6e 65 77   to create a new
2fd90 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
2fda0 2c 0a 2a 2a 20 74 68 65 6e 20 72 75 6e 73 20 74  ,.** then runs t
2fdb0 68 65 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d  he new virtual m
2fdc0 61 63 68 69 6e 65 2e 20 20 49 74 20 69 73 20 74  achine.  It is t
2fdd0 68 75 73 20 61 20 72 65 2d 65 6e 74 72 61 6e 74  hus a re-entrant
2fde0 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65   opcode..*/.case
2fdf0 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61 3a   OP_ParseSchema:
2fe00 20 7b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20   {.  int iDb;.  
2fe10 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d 61 73  const char *zMas
2fe20 74 65 72 3b 0a 20 20 63 68 61 72 20 2a 7a 53 71  ter;.  char *zSq
2fe30 6c 3b 0a 20 20 49 6e 69 74 44 61 74 61 20 69 6e  l;.  InitData in
2fe40 69 74 44 61 74 61 3b 0a 0a 20 20 2f 2a 20 41 6e  itData;..  /* An
2fe50 79 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  y prepared state
2fe60 6d 65 6e 74 20 74 68 61 74 20 69 6e 76 6f 6b 65  ment that invoke
2fe70 73 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77 69  s this opcode wi
2fe80 6c 6c 20 68 6f 6c 64 20 6d 75 74 65 78 65 73 0a  ll hold mutexes.
2fe90 20 20 2a 2a 20 6f 6e 20 65 76 65 72 79 20 62 74    ** on every bt
2fea0 72 65 65 2e 20 20 54 68 69 73 20 69 73 20 61 20  ree.  This is a 
2feb0 70 72 65 72 65 71 75 69 73 69 74 65 20 66 6f 72  prerequisite for
2fec0 20 69 6e 76 6f 6b 69 6e 67 20 0a 20 20 2a 2a 20   invoking .  ** 
2fed0 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62  sqlite3InitCallb
2fee0 61 63 6b 28 29 2e 0a 20 20 2a 2f 0a 23 69 66 64  ack()..  */.#ifd
2fef0 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
2ff00 20 20 66 6f 72 28 69 44 62 3d 30 3b 20 69 44 62    for(iDb=0; iDb
2ff10 3c 64 62 2d 3e 6e 44 62 3b 20 69 44 62 2b 2b 29  <db->nDb; iDb++)
2ff20 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 44  {.    assert( iD
2ff30 62 3d 3d 31 20 7c 7c 20 73 71 6c 69 74 65 33 42  b==1 || sqlite3B
2ff40 74 72 65 65 48 6f 6c 64 73 4d 75 74 65 78 28 64  treeHoldsMutex(d
2ff50 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 29  b->aDb[iDb].pBt)
2ff60 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a   );.  }.#endif..
2ff70 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b    iDb = pOp->p1;
2ff80 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d  .  assert( iDb>=
2ff90 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62  0 && iDb<db->nDb
2ffa0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62   );.  assert( Db
2ffb0 48 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20  HasProperty(db, 
2ffc0 69 44 62 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f  iDb, DB_SchemaLo
2ffd0 61 64 65 64 29 20 29 3b 0a 20 20 2f 2a 20 55 73  aded) );.  /* Us
2ffe0 65 64 20 74 6f 20 62 65 20 61 20 63 6f 6e 64 69  ed to be a condi
2fff0 74 69 6f 6e 61 6c 20 2a 2f 20 7b 0a 20 20 20 20  tional */ {.    
30000 7a 4d 61 73 74 65 72 20 3d 20 4d 41 53 54 45 52  zMaster = MASTER
30010 5f 4e 41 4d 45 3b 0a 20 20 20 20 69 6e 69 74 44  _NAME;.    initD
30020 61 74 61 2e 64 62 20 3d 20 64 62 3b 0a 20 20 20  ata.db = db;.   
30030 20 69 6e 69 74 44 61 74 61 2e 69 44 62 20 3d 20   initData.iDb = 
30040 70 4f 70 2d 3e 70 31 3b 0a 20 20 20 20 69 6e 69  pOp->p1;.    ini
30050 74 44 61 74 61 2e 70 7a 45 72 72 4d 73 67 20 3d  tData.pzErrMsg =
30060 20 26 70 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20   &p->zErrMsg;.  
30070 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33    zSql = sqlite3
30080 4d 50 72 69 6e 74 66 28 64 62 2c 0a 20 20 20 20  MPrintf(db,.    
30090 20 20 20 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c     "SELECT name,
300a0 20 72 6f 6f 74 70 61 67 65 2c 20 73 71 6c 20 46   rootpage, sql F
300b0 52 4f 4d 20 27 25 71 27 2e 25 73 20 57 48 45 52  ROM '%q'.%s WHER
300c0 45 20 25 73 20 4f 52 44 45 52 20 42 59 20 72 6f  E %s ORDER BY ro
300d0 77 69 64 22 2c 0a 20 20 20 20 20 20 20 64 62 2d  wid",.       db-
300e0 3e 61 44 62 5b 69 44 62 5d 2e 7a 44 62 53 4e 61  >aDb[iDb].zDbSNa
300f0 6d 65 2c 20 7a 4d 61 73 74 65 72 2c 20 70 4f 70  me, zMaster, pOp
30100 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 69 66 28  ->p4.z);.    if(
30110 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20 20 20 20   zSql==0 ){.    
30120 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f    rc = SQLITE_NO
30130 4d 45 4d 5f 42 4b 50 54 3b 0a 20 20 20 20 7d 65  MEM_BKPT;.    }e
30140 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72  lse{.      asser
30150 74 28 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79  t( db->init.busy
30160 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 64 62 2d  ==0 );.      db-
30170 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 31 3b 0a  >init.busy = 1;.
30180 20 20 20 20 20 20 69 6e 69 74 44 61 74 61 2e 72        initData.r
30190 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20  c = SQLITE_OK;. 
301a0 20 20 20 20 20 61 73 73 65 72 74 28 20 21 64 62       assert( !db
301b0 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
301c0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
301d0 69 74 65 33 5f 65 78 65 63 28 64 62 2c 20 7a 53  ite3_exec(db, zS
301e0 71 6c 2c 20 73 71 6c 69 74 65 33 49 6e 69 74 43  ql, sqlite3InitC
301f0 61 6c 6c 62 61 63 6b 2c 20 26 69 6e 69 74 44 61  allback, &initDa
30200 74 61 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66  ta, 0);.      if
30210 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
30220 29 20 72 63 20 3d 20 69 6e 69 74 44 61 74 61 2e  ) rc = initData.
30230 72 63 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  rc;.      sqlite
30240 33 44 62 46 72 65 65 4e 4e 28 64 62 2c 20 7a 53  3DbFreeNN(db, zS
30250 71 6c 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69  ql);.      db->i
30260 6e 69 74 2e 62 75 73 79 20 3d 20 30 3b 0a 20 20  nit.busy = 0;.  
30270 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63    }.  }.  if( rc
30280 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52   ){.    sqlite3R
30290 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66  esetAllSchemasOf
302a0 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a  Connection(db);.
302b0 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
302c0 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20  TE_NOMEM ){.    
302d0 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
302e0 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f 20 61 62     }.    goto ab
302f0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
30300 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 20 20  ;.  }.  break;  
30310 0a 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .}..#if !defined
30320 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41  (SQLITE_OMIT_ANA
30330 4c 59 5a 45 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a  LYZE)./* Opcode:
30340 20 4c 6f 61 64 41 6e 61 6c 79 73 69 73 20 50 31   LoadAnalysis P1
30350 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52   * * * *.**.** R
30360 65 61 64 20 74 68 65 20 73 71 6c 69 74 65 5f 73  ead the sqlite_s
30370 74 61 74 31 20 74 61 62 6c 65 20 66 6f 72 20 64  tat1 table for d
30380 61 74 61 62 61 73 65 20 50 31 20 61 6e 64 20 6c  atabase P1 and l
30390 6f 61 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a  oad the content.
303a0 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65  ** of that table
303b0 20 69 6e 74 6f 20 74 68 65 20 69 6e 74 65 72 6e   into the intern
303c0 61 6c 20 69 6e 64 65 78 20 68 61 73 68 20 74 61  al index hash ta
303d0 62 6c 65 2e 20 20 54 68 69 73 20 77 69 6c 6c 20  ble.  This will 
303e0 63 61 75 73 65 0a 2a 2a 20 74 68 65 20 61 6e 61  cause.** the ana
303f0 6c 79 73 69 73 20 74 6f 20 62 65 20 75 73 65 64  lysis to be used
30400 20 77 68 65 6e 20 70 72 65 70 61 72 69 6e 67 20   when preparing 
30410 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 20 71  all subsequent q
30420 75 65 72 69 65 73 2e 0a 2a 2f 0a 63 61 73 65 20  ueries..*/.case 
30430 4f 50 5f 4c 6f 61 64 41 6e 61 6c 79 73 69 73 3a  OP_LoadAnalysis:
30440 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   {.  assert( pOp
30450 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
30460 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
30470 72 63 20 3d 20 73 71 6c 69 74 65 33 41 6e 61 6c  rc = sqlite3Anal
30480 79 73 69 73 4c 6f 61 64 28 64 62 2c 20 70 4f 70  ysisLoad(db, pOp
30490 2d 3e 70 31 29 3b 0a 20 20 69 66 28 20 72 63 20  ->p1);.  if( rc 
304a0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
304b0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65  _to_error;.  bre
304c0 61 6b 3b 20 20 0a 7d 0a 23 65 6e 64 69 66 20 2f  ak;  .}.#endif /
304d0 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  * !defined(SQLIT
304e0 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 20  E_OMIT_ANALYZE) 
304f0 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  */../* Opcode: D
30500 72 6f 70 54 61 62 6c 65 20 50 31 20 2a 20 2a 20  ropTable P1 * * 
30510 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76  P4 *.**.** Remov
30520 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28  e the internal (
30530 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20  in-memory) data 
30540 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74 20  structures that 
30550 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20  describe.** the 
30560 74 61 62 6c 65 20 6e 61 6d 65 64 20 50 34 20 69  table named P4 i
30570 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20  n database P1.  
30580 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61  This is called a
30590 66 74 65 72 20 61 20 74 61 62 6c 65 0a 2a 2a 20  fter a table.** 
305a0 69 73 20 64 72 6f 70 70 65 64 20 66 72 6f 6d 20  is dropped from 
305b0 64 69 73 6b 20 28 75 73 69 6e 67 20 74 68 65 20  disk (using the 
305c0 44 65 73 74 72 6f 79 20 6f 70 63 6f 64 65 29 20  Destroy opcode) 
305d0 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70  in order to keep
305e0 20 0a 2a 2a 20 74 68 65 20 69 6e 74 65 72 6e 61   .** the interna
305f0 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  l representation
30600 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d   of the.** schem
30610 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74  a consistent wit
30620 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73  h what is on dis
30630 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72  k..*/.case OP_Dr
30640 6f 70 54 61 62 6c 65 3a 20 7b 0a 20 20 73 71 6c  opTable: {.  sql
30650 69 74 65 33 56 64 62 65 49 6e 63 72 57 72 69 74  ite3VdbeIncrWrit
30660 65 43 6f 75 6e 74 65 72 28 70 2c 20 30 29 3b 0a  eCounter(p, 0);.
30670 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41    sqlite3UnlinkA
30680 6e 64 44 65 6c 65 74 65 54 61 62 6c 65 28 64 62  ndDeleteTable(db
30690 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
306a0 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  p4.z);.  break;.
306b0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72  }../* Opcode: Dr
306c0 6f 70 49 6e 64 65 78 20 50 31 20 2a 20 2a 20 50  opIndex P1 * * P
306d0 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65  4 *.**.** Remove
306e0 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69   the internal (i
306f0 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73  n-memory) data s
30700 74 72 75 63 74 75 72 65 73 20 74 68 61 74 20 64  tructures that d
30710 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 69  escribe.** the i
30720 6e 64 65 78 20 6e 61 6d 65 64 20 50 34 20 69 6e  ndex named P4 in
30730 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 54   database P1.  T
30740 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66  his is called af
30750 74 65 72 20 61 6e 20 69 6e 64 65 78 0a 2a 2a 20  ter an index.** 
30760 69 73 20 64 72 6f 70 70 65 64 20 66 72 6f 6d 20  is dropped from 
30770 64 69 73 6b 20 28 75 73 69 6e 67 20 74 68 65 20  disk (using the 
30780 44 65 73 74 72 6f 79 20 6f 70 63 6f 64 65 29 0a  Destroy opcode).
30790 2a 2a 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b  ** in order to k
307a0 65 65 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  eep the internal
307b0 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
307c0 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61  of the.** schema
307d0 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68   consistent with
307e0 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b   what is on disk
307f0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f  ..*/.case OP_Dro
30800 70 49 6e 64 65 78 3a 20 7b 0a 20 20 73 71 6c 69  pIndex: {.  sqli
30810 74 65 33 56 64 62 65 49 6e 63 72 57 72 69 74 65  te3VdbeIncrWrite
30820 43 6f 75 6e 74 65 72 28 70 2c 20 30 29 3b 0a 20  Counter(p, 0);. 
30830 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
30840 64 44 65 6c 65 74 65 49 6e 64 65 78 28 64 62 2c  dDeleteIndex(db,
30850 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
30860 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  4.z);.  break;.}
30870 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f  ../* Opcode: Dro
30880 70 54 72 69 67 67 65 72 20 50 31 20 2a 20 2a 20  pTrigger P1 * * 
30890 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76  P4 *.**.** Remov
308a0 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28  e the internal (
308b0 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20  in-memory) data 
308c0 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74 20  structures that 
308d0 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20  describe.** the 
308e0 74 72 69 67 67 65 72 20 6e 61 6d 65 64 20 50 34  trigger named P4
308f0 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e   in database P1.
30900 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64    This is called
30910 20 61 66 74 65 72 20 61 20 74 72 69 67 67 65 72   after a trigger
30920 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 66  .** is dropped f
30930 72 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e 67 20  rom disk (using 
30940 74 68 65 20 44 65 73 74 72 6f 79 20 6f 70 63 6f  the Destroy opco
30950 64 65 29 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  de) in order to 
30960 6b 65 65 70 20 0a 2a 2a 20 74 68 65 20 69 6e 74  keep .** the int
30970 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61  ernal representa
30980 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73  tion of the.** s
30990 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74  chema consistent
309a0 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e   with what is on
309b0 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f   disk..*/.case O
309c0 50 5f 44 72 6f 70 54 72 69 67 67 65 72 3a 20 7b  P_DropTrigger: {
309d0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e  .  sqlite3VdbeIn
309e0 63 72 57 72 69 74 65 43 6f 75 6e 74 65 72 28 70  crWriteCounter(p
309f0 2c 20 30 29 3b 0a 20 20 73 71 6c 69 74 65 33 55  , 0);.  sqlite3U
30a00 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72  nlinkAndDeleteTr
30a10 69 67 67 65 72 28 64 62 2c 20 70 4f 70 2d 3e 70  igger(db, pOp->p
30a20 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  1, pOp->p4.z);. 
30a30 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e   break;.}...#ifn
30a40 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
30a50 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 0a  INTEGRITY_CHECK.
30a60 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67  /* Opcode: Integ
30a70 72 69 74 79 43 6b 20 50 31 20 50 32 20 50 33 20  rityCk P1 P2 P3 
30a80 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 44 6f 20 61  P4 P5.**.** Do a
30a90 6e 20 61 6e 61 6c 79 73 69 73 20 6f 66 20 74 68  n analysis of th
30aa0 65 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e  e currently open
30ab0 20 64 61 74 61 62 61 73 65 2e 20 20 53 74 6f 72   database.  Stor
30ac0 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72  e in.** register
30ad0 20 50 31 20 74 68 65 20 74 65 78 74 20 6f 66 20   P1 the text of 
30ae0 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  an error message
30af0 20 64 65 73 63 72 69 62 69 6e 67 20 61 6e 79 20   describing any 
30b00 70 72 6f 62 6c 65 6d 73 2e 0a 2a 2a 20 49 66 20  problems..** If 
30b10 6e 6f 20 70 72 6f 62 6c 65 6d 73 20 61 72 65 20  no problems are 
30b20 66 6f 75 6e 64 2c 20 73 74 6f 72 65 20 61 20 4e  found, store a N
30b30 55 4c 4c 20 69 6e 20 72 65 67 69 73 74 65 72 20  ULL in register 
30b40 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65  P1..**.** The re
30b50 67 69 73 74 65 72 20 50 33 20 63 6f 6e 74 61 69  gister P3 contai
30b60 6e 73 20 6f 6e 65 20 6c 65 73 73 20 74 68 61 6e  ns one less than
30b70 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d   the maximum num
30b80 62 65 72 20 6f 66 20 61 6c 6c 6f 77 65 64 20 65  ber of allowed e
30b90 72 72 6f 72 73 2e 0a 2a 2a 20 41 74 20 6d 6f 73  rrors..** At mos
30ba0 74 20 72 65 67 28 50 33 29 20 65 72 72 6f 72 73  t reg(P3) errors
30bb0 20 77 69 6c 6c 20 62 65 20 72 65 70 6f 72 74 65   will be reporte
30bc0 64 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77  d..** In other w
30bd0 6f 72 64 73 2c 20 74 68 65 20 61 6e 61 6c 79 73  ords, the analys
30be0 69 73 20 73 74 6f 70 73 20 61 73 20 73 6f 6f 6e  is stops as soon
30bf0 20 61 73 20 72 65 67 28 50 31 29 20 65 72 72 6f   as reg(P1) erro
30c00 72 73 20 61 72 65 20 0a 2a 2a 20 73 65 65 6e 2e  rs are .** seen.
30c10 20 20 52 65 67 28 50 31 29 20 69 73 20 75 70 64    Reg(P1) is upd
30c20 61 74 65 64 20 77 69 74 68 20 74 68 65 20 6e 75  ated with the nu
30c30 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72  mber of errors r
30c40 65 6d 61 69 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20  emaining..**.** 
30c50 54 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75  The root page nu
30c60 6d 62 65 72 73 20 6f 66 20 61 6c 6c 20 74 61 62  mbers of all tab
30c70 6c 65 73 20 69 6e 20 74 68 65 20 64 61 74 61 62  les in the datab
30c80 61 73 65 20 61 72 65 20 69 6e 74 65 67 65 72 73  ase are integers
30c90 0a 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20 50 34  .** stored in P4
30ca0 5f 49 4e 54 41 52 52 41 59 20 61 72 67 75 6d 65  _INTARRAY argume
30cb0 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  nt..**.** If P5 
30cc0 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65  is not zero, the
30cd0 20 63 68 65 63 6b 20 69 73 20 64 6f 6e 65 20 6f   check is done o
30ce0 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20  n the auxiliary 
30cf0 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65  database.** file
30d00 2c 20 6e 6f 74 20 74 68 65 20 6d 61 69 6e 20 64  , not the main d
30d10 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a  atabase file..**
30d20 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
30d30 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65  is used to imple
30d40 6d 65 6e 74 20 74 68 65 20 69 6e 74 65 67 72 69  ment the integri
30d50 74 79 5f 63 68 65 63 6b 20 70 72 61 67 6d 61 2e  ty_check pragma.
30d60 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65  .*/.case OP_Inte
30d70 67 72 69 74 79 43 6b 3a 20 7b 0a 20 20 69 6e 74  grityCk: {.  int
30d80 20 6e 52 6f 6f 74 3b 20 20 20 20 20 20 2f 2a 20   nRoot;      /* 
30d90 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73  Number of tables
30da0 20 74 6f 20 63 68 65 63 6b 2e 20 20 28 4e 75 6d   to check.  (Num
30db0 62 65 72 20 6f 66 20 72 6f 6f 74 20 70 61 67 65  ber of root page
30dc0 73 2e 29 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 52  s.) */.  int *aR
30dd0 6f 6f 74 3b 20 20 20 20 20 2f 2a 20 41 72 72 61  oot;     /* Arra
30de0 79 20 6f 66 20 72 6f 6f 74 70 61 67 65 20 6e 75  y of rootpage nu
30df0 6d 62 65 72 73 20 66 6f 72 20 74 61 62 6c 65 73  mbers for tables
30e00 20 74 6f 20 62 65 20 63 68 65 63 6b 65 64 20 2a   to be checked *
30e10 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20  /.  int nErr;   
30e20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
30e30 20 65 72 72 6f 72 73 20 72 65 70 6f 72 74 65 64   errors reported
30e40 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 3b 20 20   */.  char *z;  
30e50 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66        /* Text of
30e60 20 74 68 65 20 65 72 72 6f 72 20 72 65 70 6f 72   the error repor
30e70 74 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 6e 45 72  t */.  Mem *pnEr
30e80 72 3b 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74  r;     /* Regist
30e90 65 72 20 6b 65 65 70 69 6e 67 20 74 72 61 63 6b  er keeping track
30ea0 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69   of errors remai
30eb0 6e 69 6e 67 20 2a 2f 0a 0a 20 20 61 73 73 65 72  ning */..  asser
30ec0 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
30ed0 29 3b 0a 20 20 6e 52 6f 6f 74 20 3d 20 70 4f 70  );.  nRoot = pOp
30ee0 2d 3e 70 32 3b 0a 20 20 61 52 6f 6f 74 20 3d 20  ->p2;.  aRoot = 
30ef0 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20 20 61 73  pOp->p4.ai;.  as
30f00 73 65 72 74 28 20 6e 52 6f 6f 74 3e 30 20 29 3b  sert( nRoot>0 );
30f10 0a 20 20 61 73 73 65 72 74 28 20 61 52 6f 6f 74  .  assert( aRoot
30f20 5b 30 5d 3d 3d 6e 52 6f 6f 74 20 29 3b 0a 20 20  [0]==nRoot );.  
30f30 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
30f40 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  0 && pOp->p3<=(p
30f50 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
30f60 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 6e 45 72  ursor) );.  pnEr
30f70 72 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  r = &aMem[pOp->p
30f80 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70  3];.  assert( (p
30f90 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26 20 4d 45  nErr->flags & ME
30fa0 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 61  M_Int)!=0 );.  a
30fb0 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66  ssert( (pnErr->f
30fc0 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c  lags & (MEM_Str|
30fd0 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b  MEM_Blob))==0 );
30fe0 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
30ff0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
31000 72 74 28 20 70 4f 70 2d 3e 70 35 3c 64 62 2d 3e  rt( pOp->p5<db->
31010 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
31020 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
31030 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70  treeMask, pOp->p
31040 35 29 20 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69  5) );.  z = sqli
31050 74 65 33 42 74 72 65 65 49 6e 74 65 67 72 69 74  te3BtreeIntegrit
31060 79 43 68 65 63 6b 28 64 62 2d 3e 61 44 62 5b 70  yCheck(db->aDb[p
31070 4f 70 2d 3e 70 35 5d 2e 70 42 74 2c 20 26 61 52  Op->p5].pBt, &aR
31080 6f 6f 74 5b 31 5d 2c 20 6e 52 6f 6f 74 2c 0a 20  oot[1], nRoot,. 
31090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
310a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
310b0 28 69 6e 74 29 70 6e 45 72 72 2d 3e 75 2e 69 2b  (int)pnErr->u.i+
310c0 31 2c 20 26 6e 45 72 72 29 3b 0a 20 20 73 71 6c  1, &nErr);.  sql
310d0 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
310e0 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 69 66 28 20  ll(pIn1);.  if( 
310f0 6e 45 72 72 3d 3d 30 20 29 7b 0a 20 20 20 20 61  nErr==0 ){.    a
31100 73 73 65 72 74 28 20 7a 3d 3d 30 20 29 3b 0a 20  ssert( z==0 );. 
31110 20 7d 65 6c 73 65 20 69 66 28 20 7a 3d 3d 30 20   }else if( z==0 
31120 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  ){.    goto no_m
31130 65 6d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  em;.  }else{.   
31140 20 70 6e 45 72 72 2d 3e 75 2e 69 20 2d 3d 20 6e   pnErr->u.i -= n
31150 45 72 72 2d 31 3b 0a 20 20 20 20 73 71 6c 69 74  Err-1;.    sqlit
31160 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28  e3VdbeMemSetStr(
31170 70 49 6e 31 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c  pIn1, z, -1, SQL
31180 49 54 45 5f 55 54 46 38 2c 20 73 71 6c 69 74 65  ITE_UTF8, sqlite
31190 33 5f 66 72 65 65 29 3b 0a 20 20 7d 0a 20 20 55  3_free);.  }.  U
311a0 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
311b0 5a 45 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69  ZE(pIn1);.  sqli
311c0 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
311d0 6f 64 69 6e 67 28 70 49 6e 31 2c 20 65 6e 63 6f  oding(pIn1, enco
311e0 64 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  ding);.  break;.
311f0 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
31200 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54  TE_OMIT_INTEGRIT
31210 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f  Y_CHECK */../* O
31220 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 41 64 64  pcode: RowSetAdd
31230 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
31240 53 79 6e 6f 70 73 69 73 3a 20 72 6f 77 73 65 74  Synopsis: rowset
31250 28 50 31 29 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  (P1)=r[P2].**.**
31260 20 49 6e 73 65 72 74 20 74 68 65 20 69 6e 74 65   Insert the inte
31270 67 65 72 20 76 61 6c 75 65 20 68 65 6c 64 20 62  ger value held b
31280 79 20 72 65 67 69 73 74 65 72 20 50 32 20 69 6e  y register P2 in
31290 74 6f 20 61 20 52 6f 77 53 65 74 20 6f 62 6a 65  to a RowSet obje
312a0 63 74 0a 2a 2a 20 68 65 6c 64 20 69 6e 20 72 65  ct.** held in re
312b0 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a  gister P1..**.**
312c0 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61   An assertion fa
312d0 69 6c 73 20 69 66 20 50 32 20 69 73 20 6e 6f 74  ils if P2 is not
312e0 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a   an integer..*/.
312f0 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 41 64  case OP_RowSetAd
31300 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e  d: {       /* in
31310 31 2c 20 69 6e 32 20 2a 2f 0a 20 20 70 49 6e 31  1, in2 */.  pIn1
31320 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
31330 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  ];.  pIn2 = &aMe
31340 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73  m[pOp->p2];.  as
31350 73 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61  sert( (pIn2->fla
31360 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  gs & MEM_Int)!=0
31370 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d   );.  if( (pIn1-
31380 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77  >flags & MEM_Row
31390 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73  Set)==0 ){.    s
313a0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
313b0 52 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a 20 20  RowSet(pIn1);.  
313c0 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
313d0 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29  gs & MEM_RowSet)
313e0 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
313f0 6d 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  m;.  }.  sqlite3
31400 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e  RowSetInsert(pIn
31410 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49  1->u.pRowSet, pI
31420 6e 32 2d 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61  n2->u.i);.  brea
31430 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
31440 20 52 6f 77 53 65 74 52 65 61 64 20 50 31 20 50   RowSetRead P1 P
31450 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
31460 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 6f 77 73  psis: r[P3]=rows
31470 65 74 28 50 31 29 0a 2a 2a 0a 2a 2a 20 45 78 74  et(P1).**.** Ext
31480 72 61 63 74 20 74 68 65 20 73 6d 61 6c 6c 65 73  ract the smalles
31490 74 20 76 61 6c 75 65 20 66 72 6f 6d 20 74 68 65  t value from the
314a0 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 69   RowSet object i
314b0 6e 20 50 31 0a 2a 2a 20 61 6e 64 20 70 75 74 20  n P1.** and put 
314c0 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 20  that value into 
314d0 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
314e0 4f 72 2c 20 69 66 20 52 6f 77 53 65 74 20 6f 62  Or, if RowSet ob
314f0 6a 65 63 74 20 50 31 20 69 73 20 69 6e 69 74 69  ject P1 is initi
31500 61 6c 6c 79 20 65 6d 70 74 79 2c 20 6c 65 61 76  ally empty, leav
31510 65 20 50 33 0a 2a 2a 20 75 6e 63 68 61 6e 67 65  e P3.** unchange
31520 64 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20 69 6e  d and jump to in
31530 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f  struction P2..*/
31540 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 52  .case OP_RowSetR
31550 65 61 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20  ead: {       /* 
31560 6a 75 6d 70 2c 20 69 6e 31 2c 20 6f 75 74 33 20  jump, in1, out3 
31570 2a 2f 0a 20 20 69 36 34 20 76 61 6c 3b 0a 0a 20  */.  i64 val;.. 
31580 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
31590 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70  p->p1];.  if( (p
315a0 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
315b0 5f 52 6f 77 53 65 74 29 3d 3d 30 20 0a 20 20 20  _RowSet)==0 .   
315c0 7c 7c 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74  || sqlite3RowSet
315d0 4e 65 78 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f  Next(pIn1->u.pRo
315e0 77 53 65 74 2c 20 26 76 61 6c 29 3d 3d 30 0a 20  wSet, &val)==0. 
315f0 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 62   ){.    /* The b
31600 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 69 73 20  oolean index is 
31610 65 6d 70 74 79 20 2a 2f 0a 20 20 20 20 73 71 6c  empty */.    sql
31620 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
31630 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 20 20 56 64  ll(pIn1);.    Vd
31640 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c  beBranchTaken(1,
31650 32 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d  2);.    goto jum
31660 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68 65 63  p_to_p2_and_chec
31670 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b  k_for_interrupt;
31680 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a  .  }else{.    /*
31690 20 41 20 76 61 6c 75 65 20 77 61 73 20 70 75 6c   A value was pul
316a0 6c 65 64 20 66 72 6f 6d 20 74 68 65 20 69 6e 64  led from the ind
316b0 65 78 20 2a 2f 0a 20 20 20 20 56 64 62 65 42 72  ex */.    VdbeBr
316c0 61 6e 63 68 54 61 6b 65 6e 28 30 2c 32 29 3b 0a  anchTaken(0,2);.
316d0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
316e0 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d  emSetInt64(&aMem
316f0 5b 70 4f 70 2d 3e 70 33 5d 2c 20 76 61 6c 29 3b  [pOp->p3], val);
31700 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65 63  .  }.  goto chec
31710 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b  k_for_interrupt;
31720 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
31730 6f 77 53 65 74 54 65 73 74 20 50 31 20 50 32 20  owSetTest P1 P2 
31740 50 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69  P3 P4.** Synopsi
31750 73 3a 20 69 66 20 72 5b 50 33 5d 20 69 6e 20 72  s: if r[P3] in r
31760 6f 77 73 65 74 28 50 31 29 20 67 6f 74 6f 20 50  owset(P1) goto P
31770 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72  2.**.** Register
31780 20 50 33 20 69 73 20 61 73 73 75 6d 65 64 20 74   P3 is assumed t
31790 6f 20 68 6f 6c 64 20 61 20 36 34 2d 62 69 74 20  o hold a 64-bit 
317a0 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20 49  integer value. I
317b0 66 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a  f register P1.**
317c0 20 63 6f 6e 74 61 69 6e 73 20 61 20 52 6f 77 53   contains a RowS
317d0 65 74 20 6f 62 6a 65 63 74 20 61 6e 64 20 74 68  et object and th
317e0 61 74 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74  at RowSet object
317f0 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20 74 68 65   contains.** the
31800 20 76 61 6c 75 65 20 68 65 6c 64 20 69 6e 20 50   value held in P
31810 33 2c 20 6a 75 6d 70 20 74 6f 20 72 65 67 69 73  3, jump to regis
31820 74 65 72 20 50 32 2e 20 4f 74 68 65 72 77 69 73  ter P2. Otherwis
31830 65 2c 20 69 6e 73 65 72 74 20 74 68 65 0a 2a 2a  e, insert the.**
31840 20 69 6e 74 65 67 65 72 20 69 6e 20 50 33 20 69   integer in P3 i
31850 6e 74 6f 20 74 68 65 20 52 6f 77 53 65 74 20 61  nto the RowSet a
31860 6e 64 20 63 6f 6e 74 69 6e 75 65 20 6f 6e 20 74  nd continue on t
31870 6f 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20 6f 70  o the.** next op
31880 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  code..**.** The 
31890 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 69 73  RowSet object is
318a0 20 6f 70 74 69 6d 69 7a 65 64 20 66 6f 72 20 74   optimized for t
318b0 68 65 20 63 61 73 65 20 77 68 65 72 65 20 73 65  he case where se
318c0 74 73 20 6f 66 20 69 6e 74 65 67 65 72 73 0a 2a  ts of integers.*
318d0 2a 20 61 72 65 20 69 6e 73 65 72 74 65 64 20 69  * are inserted i
318e0 6e 20 64 69 73 74 69 6e 63 74 20 70 68 61 73 65  n distinct phase
318f0 73 2c 20 77 68 69 63 68 20 65 61 63 68 20 73 65  s, which each se
31900 74 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 64 75  t contains no du
31910 70 6c 69 63 61 74 65 73 2e 0a 2a 2a 20 45 61 63  plicates..** Eac
31920 68 20 73 65 74 20 69 73 20 69 64 65 6e 74 69 66  h set is identif
31930 69 65 64 20 62 79 20 61 20 75 6e 69 71 75 65 20  ied by a unique 
31940 50 34 20 76 61 6c 75 65 2e 20 54 68 65 20 66 69  P4 value. The fi
31950 72 73 74 20 73 65 74 0a 2a 2a 20 6d 75 73 74 20  rst set.** must 
31960 68 61 76 65 20 50 34 3d 3d 30 2c 20 74 68 65 20  have P4==0, the 
31970 66 69 6e 61 6c 20 73 65 74 20 6d 75 73 74 20 68  final set must h
31980 61 76 65 20 50 34 3d 3d 2d 31 2c 20 61 6e 64 20  ave P4==-1, and 
31990 66 6f 72 20 61 6c 6c 20 6f 74 68 65 72 20 73 65  for all other se
319a0 74 73 0a 2a 2a 20 6d 75 73 74 20 68 61 76 65 20  ts.** must have 
319b0 50 34 3e 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  P4>0..**.** This
319c0 20 61 6c 6c 6f 77 73 20 6f 70 74 69 6d 69 7a 61   allows optimiza
319d0 74 69 6f 6e 73 3a 20 28 61 29 20 77 68 65 6e 20  tions: (a) when 
319e0 50 34 3d 3d 30 20 74 68 65 72 65 20 69 73 20 6e  P4==0 there is n
319f0 6f 20 6e 65 65 64 20 74 6f 20 74 65 73 74 0a 2a  o need to test.*
31a00 2a 20 74 68 65 20 52 6f 77 53 65 74 20 6f 62 6a  * the RowSet obj
31a10 65 63 74 20 66 6f 72 20 50 33 2c 20 61 73 20 69  ect for P3, as i
31a20 74 20 69 73 20 67 75 61 72 61 6e 74 65 65 64 20  t is guaranteed 
31a30 6e 6f 74 20 74 6f 20 63 6f 6e 74 61 69 6e 20 69  not to contain i
31a40 74 2c 0a 2a 2a 20 28 62 29 20 77 68 65 6e 20 50  t,.** (b) when P
31a50 34 3d 3d 2d 31 20 74 68 65 72 65 20 69 73 20 6e  4==-1 there is n
31a60 6f 20 6e 65 65 64 20 74 6f 20 69 6e 73 65 72 74  o need to insert
31a70 20 74 68 65 20 76 61 6c 75 65 2c 20 61 73 20 69   the value, as i
31a80 74 20 77 69 6c 6c 0a 2a 2a 20 6e 65 76 65 72 20  t will.** never 
31a90 62 65 20 74 65 73 74 65 64 20 66 6f 72 2c 20 61  be tested for, a
31aa0 6e 64 20 28 63 29 20 77 68 65 6e 20 61 20 76 61  nd (c) when a va
31ab0 6c 75 65 20 74 68 61 74 20 69 73 20 70 61 72 74  lue that is part
31ac0 20 6f 66 20 73 65 74 20 58 20 69 73 0a 2a 2a 20   of set X is.** 
31ad0 69 6e 73 65 72 74 65 64 2c 20 74 68 65 72 65 20  inserted, there 
31ae0 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 73 65  is no need to se
31af0 61 72 63 68 20 74 6f 20 73 65 65 20 69 66 20 74  arch to see if t
31b00 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20 77 61  he same value wa
31b10 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79 20  s.** previously 
31b20 69 6e 73 65 72 74 65 64 20 61 73 20 70 61 72 74  inserted as part
31b30 20 6f 66 20 73 65 74 20 58 20 28 6f 6e 6c 79 20   of set X (only 
31b40 69 66 20 69 74 20 77 61 73 20 70 72 65 76 69 6f  if it was previo
31b50 75 73 6c 79 0a 2a 2a 20 69 6e 73 65 72 74 65 64  usly.** inserted
31b60 20 61 73 20 70 61 72 74 20 6f 66 20 73 6f 6d 65   as part of some
31b70 20 6f 74 68 65 72 20 73 65 74 29 2e 0a 2a 2f 0a   other set)..*/.
31b80 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 54 65  case OP_RowSetTe
31b90 73 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  st: {           
31ba0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
31bb0 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20  p, in1, in3 */. 
31bc0 20 69 6e 74 20 69 53 65 74 3b 0a 20 20 69 6e 74   int iSet;.  int
31bd0 20 65 78 69 73 74 73 3b 0a 0a 20 20 70 49 6e 31   exists;..  pIn1
31be0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
31bf0 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65  ];.  pIn3 = &aMe
31c00 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 53  m[pOp->p3];.  iS
31c10 65 74 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a  et = pOp->p4.i;.
31c20 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e    assert( pIn3->
31c30 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b  flags&MEM_Int );
31c40 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20  ..  /* If there 
31c50 69 73 20 61 6e 79 74 68 69 6e 67 20 6f 74 68 65  is anything othe
31c60 72 20 74 68 61 6e 20 61 20 72 6f 77 73 65 74 20  r than a rowset 
31c70 6f 62 6a 65 63 74 20 69 6e 20 6d 65 6d 6f 72 79  object in memory
31c80 20 63 65 6c 6c 20 50 31 2c 0a 20 20 2a 2a 20 64   cell P1,.  ** d
31c90 65 6c 65 74 65 20 69 74 20 6e 6f 77 20 61 6e 64  elete it now and
31ca0 20 69 6e 69 74 69 61 6c 69 7a 65 20 50 31 20 77   initialize P1 w
31cb0 69 74 68 20 61 6e 20 65 6d 70 74 79 20 72 6f 77  ith an empty row
31cc0 73 65 74 0a 20 20 2a 2f 0a 20 20 69 66 28 20 28  set.  */.  if( (
31cd0 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
31ce0 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a  M_RowSet)==0 ){.
31cf0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
31d00 65 6d 53 65 74 52 6f 77 53 65 74 28 70 49 6e 31  emSetRowSet(pIn1
31d10 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31  );.    if( (pIn1
31d20 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f  ->flags & MEM_Ro
31d30 77 53 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20  wSet)==0 ) goto 
31d40 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20 61  no_mem;.  }..  a
31d50 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
31d60 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a  pe==P4_INT32 );.
31d70 20 20 61 73 73 65 72 74 28 20 69 53 65 74 3d 3d    assert( iSet==
31d80 2d 31 20 7c 7c 20 69 53 65 74 3e 3d 30 20 29 3b  -1 || iSet>=0 );
31d90 0a 20 20 69 66 28 20 69 53 65 74 20 29 7b 0a 20  .  if( iSet ){. 
31da0 20 20 20 65 78 69 73 74 73 20 3d 20 73 71 6c 69     exists = sqli
31db0 74 65 33 52 6f 77 53 65 74 54 65 73 74 28 70 49  te3RowSetTest(pI
31dc0 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 69  n1->u.pRowSet, i
31dd0 53 65 74 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b  Set, pIn3->u.i);
31de0 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
31df0 61 6b 65 6e 28 65 78 69 73 74 73 21 3d 30 2c 32  aken(exists!=0,2
31e00 29 3b 0a 20 20 20 20 69 66 28 20 65 78 69 73 74  );.    if( exist
31e10 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  s ) goto jump_to
31e20 5f 70 32 3b 0a 20 20 7d 0a 20 20 69 66 28 20 69  _p2;.  }.  if( i
31e30 53 65 74 3e 3d 30 20 29 7b 0a 20 20 20 20 73 71  Set>=0 ){.    sq
31e40 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72  lite3RowSetInser
31e50 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65  t(pIn1->u.pRowSe
31e60 74 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20  t, pIn3->u.i);. 
31e70 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a   }.  break;.}...
31e80 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
31e90 4d 49 54 5f 54 52 49 47 47 45 52 0a 0a 2f 2a 20  MIT_TRIGGER../* 
31ea0 4f 70 63 6f 64 65 3a 20 50 72 6f 67 72 61 6d 20  Opcode: Program 
31eb0 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
31ec0 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65  *.** Execute the
31ed0 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
31ee0 20 70 61 73 73 65 64 20 61 73 20 50 34 20 28 74   passed as P4 (t
31ef0 79 70 65 20 50 34 5f 53 55 42 50 52 4f 47 52 41  ype P4_SUBPROGRA
31f00 4d 29 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 63 6f  M). .**.** P1 co
31f10 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64 72 65  ntains the addre
31f20 73 73 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79  ss of the memory
31f30 20 63 65 6c 6c 20 74 68 61 74 20 63 6f 6e 74 61   cell that conta
31f40 69 6e 73 20 74 68 65 20 66 69 72 73 74 20 6d 65  ins the first me
31f50 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 69 6e  mory .** cell in
31f60 20 61 6e 20 61 72 72 61 79 20 6f 66 20 76 61 6c   an array of val
31f70 75 65 73 20 75 73 65 64 20 61 73 20 61 72 67 75  ues used as argu
31f80 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 73 75 62  ments to the sub
31f90 2d 70 72 6f 67 72 61 6d 2e 20 50 32 20 0a 2a 2a  -program. P2 .**
31fa0 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64   contains the ad
31fb0 64 72 65 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f  dress to jump to
31fc0 20 69 66 20 74 68 65 20 73 75 62 2d 70 72 6f 67   if the sub-prog
31fd0 72 61 6d 20 74 68 72 6f 77 73 20 61 6e 20 49 47  ram throws an IG
31fe0 4e 4f 52 45 20 0a 2a 2a 20 65 78 63 65 70 74 69  NORE .** excepti
31ff0 6f 6e 20 75 73 69 6e 67 20 74 68 65 20 52 41 49  on using the RAI
32000 53 45 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 52  SE() function. R
32010 65 67 69 73 74 65 72 20 50 33 20 63 6f 6e 74 61  egister P3 conta
32020 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20  ins the address 
32030 0a 2a 2a 20 6f 66 20 61 20 6d 65 6d 6f 72 79 20  .** of a memory 
32040 63 65 6c 6c 20 69 6e 20 74 68 69 73 20 28 74 68  cell in this (th
32050 65 20 70 61 72 65 6e 74 29 20 56 4d 20 74 68 61  e parent) VM tha
32060 74 20 69 73 20 75 73 65 64 20 74 6f 20 61 6c 6c  t is used to all
32070 6f 63 61 74 65 20 74 68 65 20 0a 2a 2a 20 6d 65  ocate the .** me
32080 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20 62 79  mory required by
32090 20 74 68 65 20 73 75 62 2d 76 64 62 65 20 61 74   the sub-vdbe at
320a0 20 72 75 6e 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20   runtime..**.** 
320b0 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
320c0 74 6f 20 74 68 65 20 56 4d 20 63 6f 6e 74 61 69  to the VM contai
320d0 6e 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72  ning the trigger
320e0 20 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20   program..**.** 
320f0 49 66 20 50 35 20 69 73 20 6e 6f 6e 2d 7a 65 72  If P5 is non-zer
32100 6f 2c 20 74 68 65 6e 20 72 65 63 75 72 73 69 76  o, then recursiv
32110 65 20 70 72 6f 67 72 61 6d 20 69 6e 76 6f 63 61  e program invoca
32120 74 69 6f 6e 20 69 73 20 65 6e 61 62 6c 65 64 2e  tion is enabled.
32130 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 6f 67  .*/.case OP_Prog
32140 72 61 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ram: {        /*
32150 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e   jump */.  int n
32160 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
32170 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
32180 6d 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73  memory registers
32190 20 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d   for sub-program
321a0 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b   */.  int nByte;
321b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
321c0 20 42 79 74 65 73 20 6f 66 20 72 75 6e 74 69 6d   Bytes of runtim
321d0 65 20 73 70 61 63 65 20 72 65 71 75 69 72 65 64  e space required
321e0 20 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61 6d   for sub-program
321f0 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 74 3b 20   */.  Mem *pRt; 
32200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
32210 20 52 65 67 69 73 74 65 72 20 74 6f 20 61 6c 6c   Register to all
32220 6f 63 61 74 65 20 72 75 6e 74 69 6d 65 20 73 70  ocate runtime sp
32230 61 63 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d  ace */.  Mem *pM
32240 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
32250 20 2f 2a 20 55 73 65 64 20 74 6f 20 69 74 65 72   /* Used to iter
32260 61 74 65 20 74 68 72 6f 75 67 68 20 6d 65 6d 6f  ate through memo
32270 72 79 20 63 65 6c 6c 73 20 2a 2f 0a 20 20 4d 65  ry cells */.  Me
32280 6d 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20 20  m *pEnd;        
32290 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 6d 65        /* Last me
322a0 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 6e 65 77  mory cell in new
322b0 20 61 72 72 61 79 20 2a 2f 0a 20 20 56 64 62 65   array */.  Vdbe
322c0 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20  Frame *pFrame;  
322d0 20 20 20 20 2f 2a 20 4e 65 77 20 76 64 62 65 20      /* New vdbe 
322e0 66 72 61 6d 65 20 74 6f 20 65 78 65 63 75 74 65  frame to execute
322f0 20 69 6e 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67   in */.  SubProg
32300 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20  ram *pProgram;  
32310 20 2f 2a 20 53 75 62 2d 70 72 6f 67 72 61 6d 20   /* Sub-program 
32320 74 6f 20 65 78 65 63 75 74 65 20 2a 2f 0a 20 20  to execute */.  
32330 76 6f 69 64 20 2a 74 3b 20 20 20 20 20 20 20 20  void *t;        
32340 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e          /* Token
32350 20 69 64 65 6e 74 69 66 79 69 6e 67 20 74 72 69   identifying tri
32360 67 67 65 72 20 2a 2f 0a 0a 20 20 70 50 72 6f 67  gger */..  pProg
32370 72 61 6d 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 50  ram = pOp->p4.pP
32380 72 6f 67 72 61 6d 3b 0a 20 20 70 52 74 20 3d 20  rogram;.  pRt = 
32390 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
323a0 20 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72    assert( pProgr
323b0 61 6d 2d 3e 6e 4f 70 3e 30 20 29 3b 0a 20 20 0a  am->nOp>0 );.  .
323c0 20 20 2f 2a 20 49 66 20 74 68 65 20 70 35 20 66    /* If the p5 f
323d0 6c 61 67 20 69 73 20 63 6c 65 61 72 2c 20 74 68  lag is clear, th
323e0 65 6e 20 72 65 63 75 72 73 69 76 65 20 69 6e 76  en recursive inv
323f0 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72 69 67 67  ocation of trigg
32400 65 72 73 20 69 73 20 0a 20 20 2a 2a 20 64 69 73  ers is .  ** dis
32410 61 62 6c 65 64 20 66 6f 72 20 62 61 63 6b 77 61  abled for backwa
32420 72 64 73 20 63 6f 6d 70 61 74 69 62 69 6c 69 74  rds compatibilit
32430 79 20 28 70 35 20 69 73 20 73 65 74 20 69 66 20  y (p5 is set if 
32440 74 68 69 73 20 73 75 62 2d 70 72 6f 67 72 61 6d  this sub-program
32450 0a 20 20 2a 2a 20 69 73 20 72 65 61 6c 6c 79 20  .  ** is really 
32460 61 20 74 72 69 67 67 65 72 2c 20 6e 6f 74 20 61  a trigger, not a
32470 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 61 63 74   foreign key act
32480 69 6f 6e 2c 20 61 6e 64 20 74 68 65 20 66 6c 61  ion, and the fla
32490 67 20 73 65 74 0a 20 20 2a 2a 20 61 6e 64 20 63  g set.  ** and c
324a0 6c 65 61 72 65 64 20 62 79 20 74 68 65 20 22 50  leared by the "P
324b0 52 41 47 4d 41 20 72 65 63 75 72 73 69 76 65 5f  RAGMA recursive_
324c0 74 72 69 67 67 65 72 73 22 20 63 6f 6d 6d 61 6e  triggers" comman
324d0 64 20 69 73 20 63 6c 65 61 72 29 2e 0a 20 20 2a  d is clear)..  *
324e0 2a 20 0a 20 20 2a 2a 20 49 74 20 69 73 20 72 65  * .  ** It is re
324f0 63 75 72 73 69 76 65 20 69 6e 76 6f 63 61 74 69  cursive invocati
32500 6f 6e 20 6f 66 20 74 72 69 67 67 65 72 73 2c 20  on of triggers, 
32510 61 74 20 74 68 65 20 53 51 4c 20 6c 65 76 65 6c  at the SQL level
32520 2c 20 74 68 61 74 20 69 73 20 0a 20 20 2a 2a 20  , that is .  ** 
32530 64 69 73 61 62 6c 65 64 2e 20 49 6e 20 73 6f 6d  disabled. In som
32540 65 20 63 61 73 65 73 20 61 20 73 69 6e 67 6c 65  e cases a single
32550 20 74 72 69 67 67 65 72 20 6d 61 79 20 67 65 6e   trigger may gen
32560 65 72 61 74 65 20 6d 6f 72 65 20 74 68 61 6e 20  erate more than 
32570 6f 6e 65 20 0a 20 20 2a 2a 20 53 75 62 50 72 6f  one .  ** SubPro
32580 67 72 61 6d 20 28 69 66 20 74 68 65 20 74 72 69  gram (if the tri
32590 67 67 65 72 20 6d 61 79 20 62 65 20 65 78 65 63  gger may be exec
325a0 75 74 65 64 20 77 69 74 68 20 6d 6f 72 65 20 74  uted with more t
325b0 68 61 6e 20 6f 6e 65 20 64 69 66 66 65 72 65 6e  han one differen
325c0 74 20 0a 20 20 2a 2a 20 4f 4e 20 43 4f 4e 46 4c  t .  ** ON CONFL
325d0 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 29 2e 20  ICT algorithm). 
325e0 53 75 62 50 72 6f 67 72 61 6d 20 73 74 72 75 63  SubProgram struc
325f0 74 75 72 65 73 20 61 73 73 6f 63 69 61 74 65 64  tures associated
32600 20 77 69 74 68 20 61 0a 20 20 2a 2a 20 73 69 6e   with a.  ** sin
32610 67 6c 65 20 74 72 69 67 67 65 72 20 61 6c 6c 20  gle trigger all 
32620 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 76 61  have the same va
32630 6c 75 65 20 66 6f 72 20 74 68 65 20 53 75 62 50  lue for the SubP
32640 72 6f 67 72 61 6d 2e 74 6f 6b 65 6e 20 0a 20 20  rogram.token .  
32650 2a 2a 20 76 61 72 69 61 62 6c 65 2e 20 20 2a 2f  ** variable.  */
32660 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29  .  if( pOp->p5 )
32670 7b 0a 20 20 20 20 74 20 3d 20 70 50 72 6f 67 72  {.    t = pProgr
32680 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20 66  am->token;.    f
32690 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72  or(pFrame=p->pFr
326a0 61 6d 65 3b 20 70 46 72 61 6d 65 20 26 26 20 70  ame; pFrame && p
326b0 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 21 3d 74 3b  Frame->token!=t;
326c0 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e   pFrame=pFrame->
326d0 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 69 66  pParent);.    if
326e0 28 20 70 46 72 61 6d 65 20 29 20 62 72 65 61 6b  ( pFrame ) break
326f0 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 2d 3e  ;.  }..  if( p->
32700 6e 46 72 61 6d 65 3e 3d 64 62 2d 3e 61 4c 69 6d  nFrame>=db->aLim
32710 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
32720 54 52 49 47 47 45 52 5f 44 45 50 54 48 5d 20 29  TRIGGER_DEPTH] )
32730 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
32740 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73 71 6c  E_ERROR;.    sql
32750 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
32760 20 22 74 6f 6f 20 6d 61 6e 79 20 6c 65 76 65 6c   "too many level
32770 73 20 6f 66 20 74 72 69 67 67 65 72 20 72 65 63  s of trigger rec
32780 75 72 73 69 6f 6e 22 29 3b 0a 20 20 20 20 67 6f  ursion");.    go
32790 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
327a0 65 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  error;.  }..  /*
327b0 20 52 65 67 69 73 74 65 72 20 70 52 74 20 69 73   Register pRt is
327c0 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
327d0 68 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72  he memory requir
327e0 65 64 20 74 6f 20 73 61 76 65 20 74 68 65 20 73  ed to save the s
327f0 74 61 74 65 0a 20 20 2a 2a 20 6f 66 20 74 68 65  tate.  ** of the
32800 20 63 75 72 72 65 6e 74 20 70 72 6f 67 72 61 6d   current program
32810 2c 20 61 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79  , and the memory
32820 20 72 65 71 75 69 72 65 64 20 61 74 20 72 75 6e   required at run
32830 74 69 6d 65 20 74 6f 20 65 78 65 63 75 74 65 0a  time to execute.
32840 20 20 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72    ** the trigger
32850 20 70 72 6f 67 72 61 6d 2e 20 49 66 20 74 68 69   program. If thi
32860 73 20 74 72 69 67 67 65 72 20 68 61 73 20 62 65  s trigger has be
32870 65 6e 20 66 69 72 65 64 20 62 65 66 6f 72 65 2c  en fired before,
32880 20 74 68 65 6e 20 70 52 74 20 0a 20 20 2a 2a 20   then pRt .  ** 
32890 69 73 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63  is already alloc
328a0 61 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c  ated. Otherwise,
328b0 20 69 74 20 6d 75 73 74 20 62 65 20 69 6e 69 74   it must be init
328c0 69 61 6c 69 7a 65 64 2e 20 20 2a 2f 0a 20 20 69  ialized.  */.  i
328d0 66 28 20 28 70 52 74 2d 3e 66 6c 61 67 73 26 4d  f( (pRt->flags&M
328e0 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20 29 7b 0a 20  EM_Blob)==0 ){. 
328f0 20 20 20 2f 2a 20 53 75 62 50 72 6f 67 72 61 6d     /* SubProgram
32900 2e 6e 4d 65 6d 20 69 73 20 73 65 74 20 74 6f 20  .nMem is set to 
32910 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65  the number of me
32920 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20  mory cells used 
32930 62 79 20 74 68 65 20 0a 20 20 20 20 2a 2a 20 70  by the .    ** p
32940 72 6f 67 72 61 6d 20 73 74 6f 72 65 64 20 69 6e  rogram stored in
32950 20 53 75 62 50 72 6f 67 72 61 6d 2e 61 4f 70 2e   SubProgram.aOp.
32960 20 41 73 20 77 65 6c 6c 20 61 73 20 74 68 65 73   As well as thes
32970 65 2c 20 6f 6e 65 20 6d 65 6d 6f 72 79 0a 20 20  e, one memory.  
32980 20 20 2a 2a 20 63 65 6c 6c 20 69 73 20 72 65 71    ** cell is req
32990 75 69 72 65 64 20 66 6f 72 20 65 61 63 68 20 63  uired for each c
329a0 75 72 73 6f 72 20 75 73 65 64 20 62 79 20 74 68  ursor used by th
329b0 65 20 70 72 6f 67 72 61 6d 2e 20 53 65 74 20 6c  e program. Set l
329c0 6f 63 61 6c 0a 20 20 20 20 2a 2a 20 76 61 72 69  ocal.    ** vari
329d0 61 62 6c 65 20 6e 4d 65 6d 20 28 61 6e 64 20 6c  able nMem (and l
329e0 61 74 65 72 2c 20 56 64 62 65 46 72 61 6d 65 2e  ater, VdbeFrame.
329f0 6e 43 68 69 6c 64 4d 65 6d 29 20 74 6f 20 74 68  nChildMem) to th
32a00 69 73 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f  is value..    */
32a10 0a 20 20 20 20 6e 4d 65 6d 20 3d 20 70 50 72 6f  .    nMem = pPro
32a20 67 72 61 6d 2d 3e 6e 4d 65 6d 20 2b 20 70 50 72  gram->nMem + pPr
32a30 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20  ogram->nCsr;.   
32a40 20 61 73 73 65 72 74 28 20 6e 4d 65 6d 3e 30 20   assert( nMem>0 
32a50 29 3b 0a 20 20 20 20 69 66 28 20 70 50 72 6f 67  );.    if( pProg
32a60 72 61 6d 2d 3e 6e 43 73 72 3d 3d 30 20 29 20 6e  ram->nCsr==0 ) n
32a70 4d 65 6d 2b 2b 3b 0a 20 20 20 20 6e 42 79 74 65  Mem++;.    nByte
32a80 20 3d 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66   = ROUND8(sizeof
32a90 28 56 64 62 65 46 72 61 6d 65 29 29 0a 20 20 20  (VdbeFrame)).   
32aa0 20 20 20 20 20 20 20 20 20 20 20 2b 20 6e 4d 65             + nMe
32ab0 6d 20 2a 20 73 69 7a 65 6f 66 28 4d 65 6d 29 0a  m * sizeof(Mem).
32ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b 20                + 
32ad0 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 20 2a  pProgram->nCsr *
32ae0 20 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73   sizeof(VdbeCurs
32af0 6f 72 2a 29 0a 20 20 20 20 20 20 20 20 20 20 20  or*).           
32b00 20 20 20 2b 20 28 70 50 72 6f 67 72 61 6d 2d 3e     + (pProgram->
32b10 6e 4f 70 20 2b 20 37 29 2f 38 3b 0a 20 20 20 20  nOp + 7)/8;.    
32b20 70 46 72 61 6d 65 20 3d 20 73 71 6c 69 74 65 33  pFrame = sqlite3
32b30 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 64 62 2c  DbMallocZero(db,
32b40 20 6e 42 79 74 65 29 3b 0a 20 20 20 20 69 66 28   nByte);.    if(
32b50 20 21 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20   !pFrame ){.    
32b60 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
32b70 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
32b80 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 70  VdbeMemRelease(p
32b90 52 74 29 3b 0a 20 20 20 20 70 52 74 2d 3e 66 6c  Rt);.    pRt->fl
32ba0 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 7c 4d  ags = MEM_Blob|M
32bb0 45 4d 5f 44 79 6e 3b 0a 20 20 20 20 70 52 74 2d  EM_Dyn;.    pRt-
32bc0 3e 7a 20 3d 20 28 63 68 61 72 2a 29 70 46 72 61  >z = (char*)pFra
32bd0 6d 65 3b 0a 20 20 20 20 70 52 74 2d 3e 6e 20 3d  me;.    pRt->n =
32be0 20 6e 42 79 74 65 3b 0a 20 20 20 20 70 52 74 2d   nByte;.    pRt-
32bf0 3e 78 44 65 6c 20 3d 20 73 71 6c 69 74 65 33 56  >xDel = sqlite3V
32c00 64 62 65 46 72 61 6d 65 4d 65 6d 44 65 6c 3b 0a  dbeFrameMemDel;.
32c10 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 76 20 3d  .    pFrame->v =
32c20 20 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e   p;.    pFrame->
32c30 6e 43 68 69 6c 64 4d 65 6d 20 3d 20 6e 4d 65 6d  nChildMem = nMem
32c40 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43  ;.    pFrame->nC
32c50 68 69 6c 64 43 73 72 20 3d 20 70 50 72 6f 67 72  hildCsr = pProgr
32c60 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 70 46  am->nCsr;.    pF
32c70 72 61 6d 65 2d 3e 70 63 20 3d 20 28 69 6e 74 29  rame->pc = (int)
32c80 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 20  (pOp - aOp);.   
32c90 20 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 20 3d 20   pFrame->aMem = 
32ca0 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 70 46 72  p->aMem;.    pFr
32cb0 61 6d 65 2d 3e 6e 4d 65 6d 20 3d 20 70 2d 3e 6e  ame->nMem = p->n
32cc0 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  Mem;.    pFrame-
32cd0 3e 61 70 43 73 72 20 3d 20 70 2d 3e 61 70 43 73  >apCsr = p->apCs
32ce0 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e  r;.    pFrame->n
32cf0 43 75 72 73 6f 72 20 3d 20 70 2d 3e 6e 43 75 72  Cursor = p->nCur
32d00 73 6f 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  sor;.    pFrame-
32d10 3e 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20  >aOp = p->aOp;. 
32d20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4f 70 20 3d     pFrame->nOp =
32d30 20 70 2d 3e 6e 4f 70 3b 0a 20 20 20 20 70 46 72   p->nOp;.    pFr
32d40 61 6d 65 2d 3e 74 6f 6b 65 6e 20 3d 20 70 50 72  ame->token = pPr
32d50 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 23 69  ogram->token;.#i
32d60 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
32d70 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54  LE_STMT_SCANSTAT
32d80 55 53 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61  US.    pFrame->a
32d90 6e 45 78 65 63 20 3d 20 70 2d 3e 61 6e 45 78 65  nExec = p->anExe
32da0 63 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  c;.#endif.#ifdef
32db0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
32dc0 20 20 70 46 72 61 6d 65 2d 3e 69 46 72 61 6d 65    pFrame->iFrame
32dd0 4d 61 67 69 63 20 3d 20 53 51 4c 49 54 45 5f 46  Magic = SQLITE_F
32de0 52 41 4d 45 5f 4d 41 47 49 43 3b 0a 23 65 6e 64  RAME_MAGIC;.#end
32df0 69 66 0a 0a 20 20 20 20 70 45 6e 64 20 3d 20 26  if..    pEnd = &
32e00 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72  VdbeFrameMem(pFr
32e10 61 6d 65 29 5b 70 46 72 61 6d 65 2d 3e 6e 43 68  ame)[pFrame->nCh
32e20 69 6c 64 4d 65 6d 5d 3b 0a 20 20 20 20 66 6f 72  ildMem];.    for
32e30 28 70 4d 65 6d 3d 56 64 62 65 46 72 61 6d 65 4d  (pMem=VdbeFrameM
32e40 65 6d 28 70 46 72 61 6d 65 29 3b 20 70 4d 65 6d  em(pFrame); pMem
32e50 21 3d 70 45 6e 64 3b 20 70 4d 65 6d 2b 2b 29 7b  !=pEnd; pMem++){
32e60 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 66 6c 61  .      pMem->fla
32e70 67 73 20 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e  gs = MEM_Undefin
32e80 65 64 3b 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e  ed;.      pMem->
32e90 64 62 20 3d 20 64 62 3b 0a 20 20 20 20 7d 0a 20  db = db;.    }. 
32ea0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 46 72 61   }else{.    pFra
32eb0 6d 65 20 3d 20 28 56 64 62 65 46 72 61 6d 65 2a  me = (VdbeFrame*
32ec0 29 70 52 74 2d 3e 7a 3b 0a 20 20 20 20 61 73 73  )pRt->z;.    ass
32ed0 65 72 74 28 20 70 52 74 2d 3e 78 44 65 6c 3d 3d  ert( pRt->xDel==
32ee0 73 71 6c 69 74 65 33 56 64 62 65 46 72 61 6d 65  sqlite3VdbeFrame
32ef0 4d 65 6d 44 65 6c 20 29 3b 0a 20 20 20 20 61 73  MemDel );.    as
32f00 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e  sert( pProgram->
32f10 6e 4d 65 6d 2b 70 50 72 6f 67 72 61 6d 2d 3e 6e  nMem+pProgram->n
32f20 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68  Csr==pFrame->nCh
32f30 69 6c 64 4d 65 6d 20 0a 20 20 20 20 20 20 20 20  ildMem .        
32f40 7c 7c 20 28 70 50 72 6f 67 72 61 6d 2d 3e 6e 43  || (pProgram->nC
32f50 73 72 3d 3d 30 20 26 26 20 70 50 72 6f 67 72 61  sr==0 && pProgra
32f60 6d 2d 3e 6e 4d 65 6d 2b 31 3d 3d 70 46 72 61 6d  m->nMem+1==pFram
32f70 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 29 20 29 3b  e->nChildMem) );
32f80 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 50 72  .    assert( pPr
32f90 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72  ogram->nCsr==pFr
32fa0 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20 29  ame->nChildCsr )
32fb0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 69  ;.    assert( (i
32fc0 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3d 3d  nt)(pOp - aOp)==
32fd0 70 46 72 61 6d 65 2d 3e 70 63 20 29 3b 0a 20 20  pFrame->pc );.  
32fe0 7d 0a 0a 20 20 70 2d 3e 6e 46 72 61 6d 65 2b 2b  }..  p->nFrame++
32ff0 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 70 50 61 72  ;.  pFrame->pPar
33000 65 6e 74 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b  ent = p->pFrame;
33010 0a 20 20 70 46 72 61 6d 65 2d 3e 6c 61 73 74 52  .  pFrame->lastR
33020 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52  owid = db->lastR
33030 6f 77 69 64 3b 0a 20 20 70 46 72 61 6d 65 2d 3e  owid;.  pFrame->
33040 6e 43 68 61 6e 67 65 20 3d 20 70 2d 3e 6e 43 68  nChange = p->nCh
33050 61 6e 67 65 3b 0a 20 20 70 46 72 61 6d 65 2d 3e  ange;.  pFrame->
33060 6e 44 62 43 68 61 6e 67 65 20 3d 20 70 2d 3e 64  nDbChange = p->d
33070 62 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 61 73  b->nChange;.  as
33080 73 65 72 74 28 20 70 46 72 61 6d 65 2d 3e 70 41  sert( pFrame->pA
33090 75 78 44 61 74 61 3d 3d 30 20 29 3b 0a 20 20 70  uxData==0 );.  p
330a0 46 72 61 6d 65 2d 3e 70 41 75 78 44 61 74 61 20  Frame->pAuxData 
330b0 3d 20 70 2d 3e 70 41 75 78 44 61 74 61 3b 0a 20  = p->pAuxData;. 
330c0 20 70 2d 3e 70 41 75 78 44 61 74 61 20 3d 20 30   p->pAuxData = 0
330d0 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d  ;.  p->nChange =
330e0 20 30 3b 0a 20 20 70 2d 3e 70 46 72 61 6d 65 20   0;.  p->pFrame 
330f0 3d 20 70 46 72 61 6d 65 3b 0a 20 20 70 2d 3e 61  = pFrame;.  p->a
33100 4d 65 6d 20 3d 20 61 4d 65 6d 20 3d 20 56 64 62  Mem = aMem = Vdb
33110 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65  eFrameMem(pFrame
33120 29 3b 0a 20 20 70 2d 3e 6e 4d 65 6d 20 3d 20 70  );.  p->nMem = p
33130 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d  Frame->nChildMem
33140 3b 0a 20 20 70 2d 3e 6e 43 75 72 73 6f 72 20 3d  ;.  p->nCursor =
33150 20 28 75 31 36 29 70 46 72 61 6d 65 2d 3e 6e 43   (u16)pFrame->nC
33160 68 69 6c 64 43 73 72 3b 0a 20 20 70 2d 3e 61 70  hildCsr;.  p->ap
33170 43 73 72 20 3d 20 28 56 64 62 65 43 75 72 73 6f  Csr = (VdbeCurso
33180 72 20 2a 2a 29 26 61 4d 65 6d 5b 70 2d 3e 6e 4d  r **)&aMem[p->nM
33190 65 6d 5d 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 61  em];.  pFrame->a
331a0 4f 6e 63 65 20 3d 20 28 75 38 2a 29 26 70 2d 3e  Once = (u8*)&p->
331b0 61 70 43 73 72 5b 70 50 72 6f 67 72 61 6d 2d 3e  apCsr[pProgram->
331c0 6e 43 73 72 5d 3b 0a 20 20 6d 65 6d 73 65 74 28  nCsr];.  memset(
331d0 70 46 72 61 6d 65 2d 3e 61 4f 6e 63 65 2c 20 30  pFrame->aOnce, 0
331e0 2c 20 28 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70  , (pProgram->nOp
331f0 20 2b 20 37 29 2f 38 29 3b 0a 20 20 70 2d 3e 61   + 7)/8);.  p->a
33200 4f 70 20 3d 20 61 4f 70 20 3d 20 70 50 72 6f 67  Op = aOp = pProg
33210 72 61 6d 2d 3e 61 4f 70 3b 0a 20 20 70 2d 3e 6e  ram->aOp;.  p->n
33220 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  Op = pProgram->n
33230 4f 70 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  Op;.#ifdef SQLIT
33240 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43  E_ENABLE_STMT_SC
33250 41 4e 53 54 41 54 55 53 0a 20 20 70 2d 3e 61 6e  ANSTATUS.  p->an
33260 45 78 65 63 20 3d 20 30 3b 0a 23 65 6e 64 69 66  Exec = 0;.#endif
33270 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 2d 31  .  pOp = &aOp[-1
33280 5d 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  ];..  break;.}..
33290 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 61 6d  /* Opcode: Param
332a0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
332b0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
332c0 73 20 6f 6e 6c 79 20 65 76 65 72 20 70 72 65 73  s only ever pres
332d0 65 6e 74 20 69 6e 20 73 75 62 2d 70 72 6f 67 72  ent in sub-progr
332e0 61 6d 73 20 63 61 6c 6c 65 64 20 76 69 61 20 74  ams called via t
332f0 68 65 20 0a 2a 2a 20 4f 50 5f 50 72 6f 67 72 61  he .** OP_Progra
33300 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 43  m instruction. C
33310 6f 70 79 20 61 20 76 61 6c 75 65 20 63 75 72 72  opy a value curr
33320 65 6e 74 6c 79 20 73 74 6f 72 65 64 20 69 6e 20  ently stored in 
33330 61 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c  a memory .** cel
33340 6c 20 6f 66 20 74 68 65 20 63 61 6c 6c 69 6e 67  l of the calling
33350 20 28 70 61 72 65 6e 74 29 20 66 72 61 6d 65 20   (parent) frame 
33360 74 6f 20 63 65 6c 6c 20 50 32 20 69 6e 20 74 68  to cell P2 in th
33370 65 20 63 75 72 72 65 6e 74 20 66 72 61 6d 65 73  e current frames
33380 20 0a 2a 2a 20 61 64 64 72 65 73 73 20 73 70 61   .** address spa
33390 63 65 2e 20 54 68 69 73 20 69 73 20 75 73 65 64  ce. This is used
333a0 20 62 79 20 74 72 69 67 67 65 72 20 70 72 6f 67   by trigger prog
333b0 72 61 6d 73 20 74 6f 20 61 63 63 65 73 73 20 74  rams to access t
333c0 68 65 20 6e 65 77 2e 2a 20 0a 2a 2a 20 61 6e 64  he new.* .** and
333d0 20 6f 6c 64 2e 2a 20 76 61 6c 75 65 73 2e 0a 2a   old.* values..*
333e0 2a 0a 2a 2a 20 54 68 65 20 61 64 64 72 65 73 73  *.** The address
333f0 20 6f 66 20 74 68 65 20 63 65 6c 6c 20 69 6e 20   of the cell in 
33400 74 68 65 20 70 61 72 65 6e 74 20 66 72 61 6d 65  the parent frame
33410 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62   is determined b
33420 79 20 61 64 64 69 6e 67 0a 2a 2a 20 74 68 65 20  y adding.** the 
33430 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 31 20  value of the P1 
33440 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
33450 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 31 20  value of the P1 
33460 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 0a  argument to the.
33470 2a 2a 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72  ** calling OP_Pr
33480 6f 67 72 61 6d 20 69 6e 73 74 72 75 63 74 69 6f  ogram instructio
33490 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61  n..*/.case OP_Pa
334a0 72 61 6d 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ram: {          
334b0 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 56 64   /* out2 */.  Vd
334c0 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b  beFrame *pFrame;
334d0 0a 20 20 4d 65 6d 20 2a 70 49 6e 3b 0a 20 20 70  .  Mem *pIn;.  p
334e0 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
334f0 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
33500 70 46 72 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61  pFrame = p->pFra
33510 6d 65 3b 0a 20 20 70 49 6e 20 3d 20 26 70 46 72  me;.  pIn = &pFr
33520 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70  ame->aMem[pOp->p
33530 31 20 2b 20 70 46 72 61 6d 65 2d 3e 61 4f 70 5b  1 + pFrame->aOp[
33540 70 46 72 61 6d 65 2d 3e 70 63 5d 2e 70 31 5d 3b  pFrame->pc].p1];
33550 20 20 20 0a 20 20 73 71 6c 69 74 65 33 56 64 62     .  sqlite3Vdb
33560 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28  eMemShallowCopy(
33570 70 4f 75 74 2c 20 70 49 6e 2c 20 4d 45 4d 5f 45  pOut, pIn, MEM_E
33580 70 68 65 6d 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  phem);.  break;.
33590 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69 66  }..#endif /* #if
335a0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
335b0 5f 54 52 49 47 47 45 52 20 2a 2f 0a 0a 23 69 66  _TRIGGER */..#if
335c0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
335d0 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 2f 2a 20  _FOREIGN_KEY./* 
335e0 4f 70 63 6f 64 65 3a 20 46 6b 43 6f 75 6e 74 65  Opcode: FkCounte
335f0 72 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  r P1 P2 * * *.**
33600 20 53 79 6e 6f 70 73 69 73 3a 20 66 6b 63 74 72   Synopsis: fkctr
33610 5b 50 31 5d 2b 3d 50 32 0a 2a 2a 0a 2a 2a 20 49  [P1]+=P2.**.** I
33620 6e 63 72 65 6d 65 6e 74 20 61 20 22 63 6f 6e 73  ncrement a "cons
33630 74 72 61 69 6e 74 20 63 6f 75 6e 74 65 72 22 20  traint counter" 
33640 62 79 20 50 32 20 28 50 32 20 6d 61 79 20 62 65  by P2 (P2 may be
33650 20 6e 65 67 61 74 69 76 65 20 6f 72 20 70 6f 73   negative or pos
33660 69 74 69 76 65 29 2e 0a 2a 2a 20 49 66 20 50 31  itive)..** If P1
33670 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
33680 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 73 74  e database const
33690 72 61 69 6e 74 20 63 6f 75 6e 74 65 72 20 69 73  raint counter is
336a0 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 0a 2a 2a   incremented .**
336b0 20 28 64 65 66 65 72 72 65 64 20 66 6f 72 65 69   (deferred forei
336c0 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
336d0 74 73 29 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  ts). Otherwise, 
336e0 69 66 20 50 31 20 69 73 20 7a 65 72 6f 2c 20 74  if P1 is zero, t
336f0 68 65 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74  he .** statement
33700 20 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63 72   counter is incr
33710 65 6d 65 6e 74 65 64 20 28 69 6d 6d 65 64 69 61  emented (immedia
33720 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  te foreign key c
33730 6f 6e 73 74 72 61 69 6e 74 73 29 2e 0a 2a 2f 0a  onstraints)..*/.
33740 63 61 73 65 20 4f 50 5f 46 6b 43 6f 75 6e 74 65  case OP_FkCounte
33750 72 3a 20 7b 0a 20 20 69 66 28 20 64 62 2d 3e 66  r: {.  if( db->f
33760 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 44 65  lags & SQLITE_De
33770 66 65 72 46 4b 73 20 29 7b 0a 20 20 20 20 64 62  ferFKs ){.    db
33780 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
33790 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  ns += pOp->p2;. 
337a0 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e   }else if( pOp->
337b0 70 31 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 44  p1 ){.    db->nD
337c0 65 66 65 72 72 65 64 43 6f 6e 73 20 2b 3d 20 70  eferredCons += p
337d0 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65 7b  Op->p2;.  }else{
337e0 0a 20 20 20 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74  .    p->nFkConst
337f0 72 61 69 6e 74 20 2b 3d 20 70 4f 70 2d 3e 70 32  raint += pOp->p2
33800 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
33810 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 49  ../* Opcode: FkI
33820 66 5a 65 72 6f 20 50 31 20 50 32 20 2a 20 2a 20  fZero P1 P2 * * 
33830 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
33840 66 20 66 6b 63 74 72 5b 50 31 5d 3d 3d 30 20 67  f fkctr[P1]==0 g
33850 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69  oto P2.**.** Thi
33860 73 20 6f 70 63 6f 64 65 20 74 65 73 74 73 20 69  s opcode tests i
33870 66 20 61 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  f a foreign key 
33880 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74  constraint-count
33890 65 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  er is currently 
338a0 7a 65 72 6f 2e 0a 2a 2a 20 49 66 20 73 6f 2c 20  zero..** If so, 
338b0 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74  jump to instruct
338c0 69 6f 6e 20 50 32 2e 20 4f 74 68 65 72 77 69 73  ion P2. Otherwis
338d0 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  e, fall through 
338e0 74 6f 20 74 68 65 20 6e 65 78 74 20 0a 2a 2a 20  to the next .** 
338f0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
33900 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d  ** If P1 is non-
33910 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 6a  zero, then the j
33920 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20  ump is taken if 
33930 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
33940 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 0a  straint-counter.
33950 2a 2a 20 69 73 20 7a 65 72 6f 20 28 74 68 65 20  ** is zero (the 
33960 6f 6e 65 20 74 68 61 74 20 63 6f 75 6e 74 73 20  one that counts 
33970 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61  deferred constra
33980 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e  int violations).
33990 20 49 66 20 50 31 20 69 73 0a 2a 2a 20 7a 65 72   If P1 is.** zer
339a0 6f 2c 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  o, the jump is t
339b0 61 6b 65 6e 20 69 66 20 74 68 65 20 73 74 61 74  aken if the stat
339c0 65 6d 65 6e 74 20 63 6f 6e 73 74 72 61 69 6e 74  ement constraint
339d0 2d 63 6f 75 6e 74 65 72 20 69 73 20 7a 65 72 6f  -counter is zero
339e0 0a 2a 2a 20 28 69 6d 6d 65 64 69 61 74 65 20 66  .** (immediate f
339f0 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
33a00 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73  raint violations
33a10 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b  )..*/.case OP_Fk
33a20 49 66 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 20  IfZero: {       
33a30 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69    /* jump */.  i
33a40 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20  f( pOp->p1 ){.  
33a50 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
33a60 6e 28 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43  n(db->nDeferredC
33a70 6f 6e 73 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44  ons==0 && db->nD
33a80 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d  eferredImmCons==
33a90 30 2c 20 32 29 3b 0a 20 20 20 20 69 66 28 20 64  0, 2);.    if( d
33aa0 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  b->nDeferredCons
33ab0 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65  ==0 && db->nDefe
33ac0 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29  rredImmCons==0 )
33ad0 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
33ae0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56  ;.  }else{.    V
33af0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70  dbeBranchTaken(p
33b00 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3d  ->nFkConstraint=
33b10 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72  =0 && db->nDefer
33b20 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32  redImmCons==0, 2
33b30 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 6e 46  );.    if( p->nF
33b40 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20 26  kConstraint==0 &
33b50 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49  & db->nDeferredI
33b60 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20 67 6f 74 6f  mmCons==0 ) goto
33b70 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d   jump_to_p2;.  }
33b80 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
33b90 69 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53 51  if /* #ifndef SQ
33ba0 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
33bb0 4e 5f 4b 45 59 20 2a 2f 0a 0a 23 69 66 6e 64 65  N_KEY */..#ifnde
33bc0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
33bd0 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2f 2a 20 4f  TOINCREMENT./* O
33be0 70 63 6f 64 65 3a 20 4d 65 6d 4d 61 78 20 50 31  pcode: MemMax P1
33bf0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
33c00 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d 6d 61 78  opsis: r[P1]=max
33c10 28 72 5b 50 31 5d 2c 72 5b 50 32 5d 29 0a 2a 2a  (r[P1],r[P2]).**
33c20 0a 2a 2a 20 50 31 20 69 73 20 61 20 72 65 67 69  .** P1 is a regi
33c30 73 74 65 72 20 69 6e 20 74 68 65 20 72 6f 6f 74  ster in the root
33c40 20 66 72 61 6d 65 20 6f 66 20 74 68 69 73 20 56   frame of this V
33c50 4d 20 28 74 68 65 20 72 6f 6f 74 20 66 72 61 6d  M (the root fram
33c60 65 20 69 73 0a 2a 2a 20 64 69 66 66 65 72 65 6e  e is.** differen
33c70 74 20 66 72 6f 6d 20 74 68 65 20 63 75 72 72 65  t from the curre
33c80 6e 74 20 66 72 61 6d 65 20 69 66 20 74 68 69 73  nt frame if this
33c90 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20   instruction is 
33ca0 62 65 69 6e 67 20 65 78 65 63 75 74 65 64 0a 2a  being executed.*
33cb0 2a 20 77 69 74 68 69 6e 20 61 20 73 75 62 2d 70  * within a sub-p
33cc0 72 6f 67 72 61 6d 29 2e 20 53 65 74 20 74 68 65  rogram). Set the
33cd0 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74   value of regist
33ce0 65 72 20 50 31 20 74 6f 20 74 68 65 20 6d 61 78  er P1 to the max
33cf0 69 6d 75 6d 20 6f 66 20 0a 2a 2a 20 69 74 73 20  imum of .** its 
33d00 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20 61 6e  current value an
33d10 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  d the value in r
33d20 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
33d30 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
33d40 6f 6e 20 74 68 72 6f 77 73 20 61 6e 20 65 72 72  on throws an err
33d50 6f 72 20 69 66 20 74 68 65 20 6d 65 6d 6f 72 79  or if the memory
33d60 20 63 65 6c 6c 20 69 73 20 6e 6f 74 20 69 6e 69   cell is not ini
33d70 74 69 61 6c 6c 79 0a 2a 2a 20 61 6e 20 69 6e 74  tially.** an int
33d80 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  eger..*/.case OP
33d90 5f 4d 65 6d 4d 61 78 3a 20 7b 20 20 20 20 20 20  _MemMax: {      
33da0 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64    /* in2 */.  Vd
33db0 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b  beFrame *pFrame;
33dc0 0a 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65  .  if( p->pFrame
33dd0 20 29 7b 0a 20 20 20 20 66 6f 72 28 70 46 72 61   ){.    for(pFra
33de0 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46  me=p->pFrame; pF
33df0 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70  rame->pParent; p
33e00 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50  Frame=pFrame->pP
33e10 61 72 65 6e 74 29 3b 0a 20 20 20 20 70 49 6e 31  arent);.    pIn1
33e20 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d   = &pFrame->aMem
33e30 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 65 6c  [pOp->p1];.  }el
33e40 73 65 7b 0a 20 20 20 20 70 49 6e 31 20 3d 20 26  se{.    pIn1 = &
33e50 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
33e60 20 7d 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d   }.  assert( mem
33e70 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b  IsValid(pIn1) );
33e80 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
33e90 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31  mIntegerify(pIn1
33ea0 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  );.  pIn2 = &aMe
33eb0 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71  m[pOp->p2];.  sq
33ec0 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
33ed0 67 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20  gerify(pIn2);.  
33ee0 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 49  if( pIn1->u.i<pI
33ef0 6e 32 2d 3e 75 2e 69 29 7b 0a 20 20 20 20 70 49  n2->u.i){.    pI
33f00 6e 31 2d 3e 75 2e 69 20 3d 20 70 49 6e 32 2d 3e  n1->u.i = pIn2->
33f10 75 2e 69 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  u.i;.  }.  break
33f20 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
33f30 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e  LITE_OMIT_AUTOIN
33f40 43 52 45 4d 45 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f  CREMENT */../* O
33f50 70 63 6f 64 65 3a 20 49 66 50 6f 73 20 50 31 20  pcode: IfPos P1 
33f60 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
33f70 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e  opsis: if r[P1]>
33f80 30 20 74 68 65 6e 20 72 5b 50 31 5d 2d 3d 50 33  0 then r[P1]-=P3
33f90 2c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  , goto P2.**.** 
33fa0 52 65 67 69 73 74 65 72 20 50 31 20 6d 75 73 74  Register P1 must
33fb0 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65   contain an inte
33fc0 67 65 72 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76  ger..** If the v
33fd0 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72  alue of register
33fe0 20 50 31 20 69 73 20 31 20 6f 72 20 67 72 65 61   P1 is 1 or grea
33ff0 74 65 72 2c 20 73 75 62 74 72 61 63 74 20 50 33  ter, subtract P3
34000 20 66 72 6f 6d 20 74 68 65 0a 2a 2a 20 76 61 6c   from the.** val
34010 75 65 20 69 6e 20 50 31 20 61 6e 64 20 6a 75 6d  ue in P1 and jum
34020 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49  p to P2..**.** I
34030 66 20 74 68 65 20 69 6e 69 74 69 61 6c 20 76 61  f the initial va
34040 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20  lue of register 
34050 50 31 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  P1 is less than 
34060 31 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 76  1, then the.** v
34070 61 6c 75 65 20 69 73 20 75 6e 63 68 61 6e 67 65  alue is unchange
34080 64 20 61 6e 64 20 63 6f 6e 74 72 6f 6c 20 70 61  d and control pa
34090 73 73 65 73 20 74 68 72 6f 75 67 68 20 74 6f 20  sses through to 
340a0 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
340b0 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
340c0 5f 49 66 50 6f 73 3a 20 7b 20 20 20 20 20 20 20  _IfPos: {       
340d0 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f   /* jump, in1 */
340e0 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
340f0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
34100 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26  rt( pIn1->flags&
34110 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 56 64 62  MEM_Int );.  Vdb
34120 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 20 70 49  eBranchTaken( pI
34130 6e 31 2d 3e 75 2e 69 3e 30 2c 20 32 29 3b 0a 20  n1->u.i>0, 2);. 
34140 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30   if( pIn1->u.i>0
34150 20 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e   ){.    pIn1->u.
34160 69 20 2d 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  i -= pOp->p3;.  
34170 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
34180 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  2;.  }.  break;.
34190 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 66  }../* Opcode: Of
341a0 66 73 65 74 4c 69 6d 69 74 20 50 31 20 50 32 20  fsetLimit P1 P2 
341b0 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
341c0 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e 30 20 74  is: if r[P1]>0 t
341d0 68 65 6e 20 72 5b 50 32 5d 3d 72 5b 50 31 5d 2b  hen r[P2]=r[P1]+
341e0 6d 61 78 28 30 2c 72 5b 50 33 5d 29 20 65 6c 73  max(0,r[P3]) els
341f0 65 20 72 5b 50 32 5d 3d 28 2d 31 29 0a 2a 2a 0a  e r[P2]=(-1).**.
34200 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 70  ** This opcode p
34210 65 72 66 6f 72 6d 73 20 61 20 63 6f 6d 6d 6f 6e  erforms a common
34220 6c 79 20 75 73 65 64 20 63 6f 6d 70 75 74 61 74  ly used computat
34230 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77  ion associated w
34240 69 74 68 0a 2a 2a 20 4c 49 4d 49 54 20 61 6e 64  ith.** LIMIT and
34250 20 4f 46 46 53 45 54 20 70 72 6f 63 65 73 73 2e   OFFSET process.
34260 20 20 72 5b 50 31 5d 20 68 6f 6c 64 73 20 74 68    r[P1] holds th
34270 65 20 6c 69 6d 69 74 20 63 6f 75 6e 74 65 72 2e  e limit counter.
34280 20 20 72 5b 50 33 5d 0a 2a 2a 20 68 6f 6c 64 73    r[P3].** holds
34290 20 74 68 65 20 6f 66 66 73 65 74 20 63 6f 75 6e   the offset coun
342a0 74 65 72 2e 20 20 54 68 65 20 6f 70 63 6f 64 65  ter.  The opcode
342b0 20 63 6f 6d 70 75 74 65 73 20 74 68 65 20 63 6f   computes the co
342c0 6d 62 69 6e 65 64 20 76 61 6c 75 65 0a 2a 2a 20  mbined value.** 
342d0 6f 66 20 74 68 65 20 4c 49 4d 49 54 20 61 6e 64  of the LIMIT and
342e0 20 4f 46 46 53 45 54 20 61 6e 64 20 73 74 6f 72   OFFSET and stor
342f0 65 73 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e  es that value in
34300 20 72 5b 50 32 5d 2e 20 20 54 68 65 20 72 5b 50   r[P2].  The r[P
34310 32 5d 0a 2a 2a 20 76 61 6c 75 65 20 63 6f 6d 70  2].** value comp
34320 75 74 65 64 20 69 73 20 74 68 65 20 74 6f 74 61  uted is the tota
34330 6c 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  l number of rows
34340 20 74 68 61 74 20 77 69 6c 6c 20 6e 65 65 64 20   that will need 
34350 74 6f 20 62 65 0a 2a 2a 20 76 69 73 69 74 65 64  to be.** visited
34360 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 63 6f 6d   in order to com
34370 70 6c 65 74 65 20 74 68 65 20 71 75 65 72 79 2e  plete the query.
34380 0a 2a 2a 0a 2a 2a 20 49 66 20 72 5b 50 33 5d 20  .**.** If r[P3] 
34390 69 73 20 7a 65 72 6f 20 6f 72 20 6e 65 67 61 74  is zero or negat
343a0 69 76 65 2c 20 74 68 61 74 20 6d 65 61 6e 73 20  ive, that means 
343b0 74 68 65 72 65 20 69 73 20 6e 6f 20 4f 46 46 53  there is no OFFS
343c0 45 54 0a 2a 2a 20 61 6e 64 20 72 5b 50 32 5d 20  ET.** and r[P2] 
343d0 69 73 20 73 65 74 20 74 6f 20 62 65 20 74 68 65  is set to be the
343e0 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 4c 49   value of the LI
343f0 4d 49 54 2c 20 72 5b 50 31 5d 2e 0a 2a 2a 0a 2a  MIT, r[P1]..**.*
34400 2a 20 69 66 20 72 5b 50 31 5d 20 69 73 20 7a 65  * if r[P1] is ze
34410 72 6f 20 6f 72 20 6e 65 67 61 74 69 76 65 2c 20  ro or negative, 
34420 74 68 61 74 20 6d 65 61 6e 73 20 74 68 65 72 65  that means there
34430 20 69 73 20 6e 6f 20 4c 49 4d 49 54 0a 2a 2a 20   is no LIMIT.** 
34440 61 6e 64 20 72 5b 50 32 5d 20 69 73 20 73 65 74  and r[P2] is set
34450 20 74 6f 20 2d 31 2e 20 0a 2a 2a 0a 2a 2a 20 4f   to -1. .**.** O
34460 74 68 65 72 77 69 73 65 2c 20 72 5b 50 32 5d 20  therwise, r[P2] 
34470 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 73 75  is set to the su
34480 6d 20 6f 66 20 72 5b 50 31 5d 20 61 6e 64 20 72  m of r[P1] and r
34490 5b 50 33 5d 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  [P3]..*/.case OP
344a0 5f 4f 66 66 73 65 74 4c 69 6d 69 74 3a 20 7b 20  _OffsetLimit: { 
344b0 20 20 20 2f 2a 20 69 6e 31 2c 20 6f 75 74 32 2c     /* in1, out2,
344c0 20 69 6e 33 20 2a 2f 0a 20 20 69 36 34 20 78 3b   in3 */.  i64 x;
344d0 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
344e0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33  pOp->p1];.  pIn3
344f0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
34500 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  ];.  pOut = out2
34510 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
34520 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  p);.  assert( pI
34530 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
34540 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Int );.  assert(
34550 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn3->flags & M
34560 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 78 20 3d 20  EM_Int );.  x = 
34570 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 69 66 28  pIn1->u.i;.  if(
34580 20 78 3c 3d 30 20 7c 7c 20 73 71 6c 69 74 65 33   x<=0 || sqlite3
34590 41 64 64 49 6e 74 36 34 28 26 78 2c 20 70 49 6e  AddInt64(&x, pIn
345a0 33 2d 3e 75 2e 69 3e 30 3f 70 49 6e 33 2d 3e 75  3->u.i>0?pIn3->u
345b0 2e 69 3a 30 29 20 29 7b 0a 20 20 20 20 2f 2a 20  .i:0) ){.    /* 
345c0 49 66 20 74 68 65 20 4c 49 4d 49 54 20 69 73 20  If the LIMIT is 
345d0 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75  less than or equ
345e0 61 6c 20 74 6f 20 7a 65 72 6f 2c 20 6c 6f 6f 70  al to zero, loop
345f0 20 66 6f 72 65 76 65 72 2e 20 20 54 68 69 73 0a   forever.  This.
34600 20 20 20 20 2a 2a 20 69 73 20 64 6f 63 75 6d 65      ** is docume
34610 6e 74 65 64 2e 20 20 42 75 74 20 61 6c 73 6f 2c  nted.  But also,
34620 20 69 66 20 74 68 65 20 4c 49 4d 49 54 2b 4f 46   if the LIMIT+OF
34630 46 53 45 54 20 65 78 63 65 65 64 73 20 32 5e 36  FSET exceeds 2^6
34640 33 20 74 68 65 6e 0a 20 20 20 20 2a 2a 20 61 6c  3 then.    ** al
34650 73 6f 20 6c 6f 6f 70 20 66 6f 72 65 76 65 72 2e  so loop forever.
34660 20 20 54 68 69 73 20 69 73 20 75 6e 64 6f 63 75    This is undocu
34670 6d 65 6e 74 65 64 2e 20 20 49 6e 20 66 61 63 74  mented.  In fact
34680 2c 20 6f 6e 65 20 63 6f 75 6c 64 20 61 72 67 75  , one could argu
34690 65 0a 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68  e.    ** that th
346a0 65 20 6c 6f 6f 70 20 73 68 6f 75 6c 64 20 74 65  e loop should te
346b0 72 6d 69 6e 61 74 65 2e 20 20 42 75 74 20 61 73  rminate.  But as
346c0 73 75 6d 69 6e 67 20 31 20 62 69 6c 6c 69 6f 6e  suming 1 billion
346d0 20 69 74 65 72 61 74 69 6f 6e 73 0a 20 20 20 20   iterations.    
346e0 2a 2a 20 70 65 72 20 73 65 63 6f 6e 64 20 28 66  ** per second (f
346f0 61 72 20 65 78 63 65 65 64 69 6e 67 20 74 68 65  ar exceeding the
34700 20 63 61 70 61 62 69 6c 69 74 69 65 73 20 6f 66   capabilities of
34710 20 61 6e 79 20 63 75 72 72 65 6e 74 20 68 61 72   any current har
34720 64 77 61 72 65 29 0a 20 20 20 20 2a 2a 20 69 74  dware).    ** it
34730 20 77 6f 75 6c 64 20 74 61 6b 65 20 6e 65 61 72   would take near
34740 6c 79 20 33 30 30 20 79 65 61 72 73 20 74 6f 20  ly 300 years to 
34750 61 63 74 75 61 6c 6c 79 20 72 65 61 63 68 20 74  actually reach t
34760 68 65 20 6c 69 6d 69 74 2e 20 20 53 6f 0a 20 20  he limit.  So.  
34770 20 20 2a 2a 20 6c 6f 6f 70 69 6e 67 20 66 6f 72    ** looping for
34780 65 76 65 72 20 69 73 20 61 20 72 65 61 73 6f 6e  ever is a reason
34790 61 62 6c 65 20 61 70 70 72 6f 78 69 6d 61 74 69  able approximati
347a0 6f 6e 2e 20 2a 2f 0a 20 20 20 20 70 4f 75 74 2d  on. */.    pOut-
347b0 3e 75 2e 69 20 3d 20 2d 31 3b 0a 20 20 7d 65 6c  >u.i = -1;.  }el
347c0 73 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e  se{.    pOut->u.
347d0 69 20 3d 20 78 3b 0a 20 20 7d 0a 20 20 62 72 65  i = x;.  }.  bre
347e0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
347f0 3a 20 49 66 4e 6f 74 5a 65 72 6f 20 50 31 20 50  : IfNotZero P1 P
34800 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
34810 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d 30  sis: if r[P1]!=0
34820 20 74 68 65 6e 20 72 5b 50 31 5d 2d 2d 2c 20 67   then r[P1]--, g
34830 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67  oto P2.**.** Reg
34840 69 73 74 65 72 20 50 31 20 6d 75 73 74 20 63 6f  ister P1 must co
34850 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72  ntain an integer
34860 2e 20 20 49 66 20 74 68 65 20 63 6f 6e 74 65 6e  .  If the conten
34870 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31  t of register P1
34880 20 69 73 0a 2a 2a 20 69 6e 69 74 69 61 6c 6c 79   is.** initially
34890 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65   greater than ze
348a0 72 6f 2c 20 74 68 65 6e 20 64 65 63 72 65 6d 65  ro, then decreme
348b0 6e 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  nt the value in 
348c0 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20  register P1..** 
348d0 49 66 20 69 74 20 69 73 20 6e 6f 6e 2d 7a 65 72  If it is non-zer
348e0 6f 20 28 6e 65 67 61 74 69 76 65 20 6f 72 20 70  o (negative or p
348f0 6f 73 69 74 69 76 65 29 20 61 6e 64 20 74 68 65  ositive) and the
34900 6e 20 61 6c 73 6f 20 6a 75 6d 70 20 74 6f 20 50  n also jump to P
34910 32 2e 20 20 0a 2a 2a 20 49 66 20 72 65 67 69 73  2.  .** If regis
34920 74 65 72 20 50 31 20 69 73 20 69 6e 69 74 69 61  ter P1 is initia
34930 6c 6c 79 20 7a 65 72 6f 2c 20 6c 65 61 76 65 20  lly zero, leave 
34940 69 74 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64  it unchanged and
34950 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 2e 0a 2a   fall through..*
34960 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74 5a  /.case OP_IfNotZ
34970 65 72 6f 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ero: {        /*
34980 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
34990 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
349a0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
349b0 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d   pIn1->flags&MEM
349c0 5f 49 6e 74 20 29 3b 0a 20 20 56 64 62 65 42 72  _Int );.  VdbeBr
349d0 61 6e 63 68 54 61 6b 65 6e 28 70 49 6e 31 2d 3e  anchTaken(pIn1->
349e0 75 2e 69 3c 30 2c 20 32 29 3b 0a 20 20 69 66 28  u.i<0, 2);.  if(
349f0 20 70 49 6e 31 2d 3e 75 2e 69 20 29 7b 0a 20 20   pIn1->u.i ){.  
34a00 20 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69     if( pIn1->u.i
34a10 3e 30 20 29 20 70 49 6e 31 2d 3e 75 2e 69 2d 2d  >0 ) pIn1->u.i--
34a20 3b 0a 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  ;.     goto jump
34a30 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72  _to_p2;.  }.  br
34a40 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
34a50 65 3a 20 44 65 63 72 4a 75 6d 70 5a 65 72 6f 20  e: DecrJumpZero 
34a60 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
34a70 79 6e 6f 70 73 69 73 3a 20 69 66 20 28 2d 2d 72  ynopsis: if (--r
34a80 5b 50 31 5d 29 3d 3d 30 20 67 6f 74 6f 20 50 32  [P1])==0 goto P2
34a90 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  .**.** Register 
34aa0 50 31 20 6d 75 73 74 20 68 6f 6c 64 20 61 6e 20  P1 must hold an 
34ab0 69 6e 74 65 67 65 72 2e 20 20 44 65 63 72 65 6d  integer.  Decrem
34ac0 65 6e 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e  ent the value in
34ad0 20 50 31 0a 2a 2a 20 61 6e 64 20 6a 75 6d 70 20   P1.** and jump 
34ae0 74 6f 20 50 32 20 69 66 20 74 68 65 20 6e 65 77  to P2 if the new
34af0 20 76 61 6c 75 65 20 69 73 20 65 78 61 63 74 6c   value is exactl
34b00 79 20 7a 65 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20  y zero..*/.case 
34b10 4f 50 5f 44 65 63 72 4a 75 6d 70 5a 65 72 6f 3a  OP_DecrJumpZero:
34b20 20 7b 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c   {      /* jump,
34b30 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
34b40 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
34b50 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d  .  assert( pIn1-
34b60 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29  >flags&MEM_Int )
34b70 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e  ;.  if( pIn1->u.
34b80 69 3e 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34  i>SMALLEST_INT64
34b90 20 29 20 70 49 6e 31 2d 3e 75 2e 69 2d 2d 3b 0a   ) pIn1->u.i--;.
34ba0 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
34bb0 6e 28 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 2c 20  n(pIn1->u.i==0, 
34bc0 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  2);.  if( pIn1->
34bd0 75 2e 69 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75  u.i==0 ) goto ju
34be0 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61  mp_to_p2;.  brea
34bf0 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65  k;.}.../* Opcode
34c00 3a 20 41 67 67 53 74 65 70 20 2a 20 50 32 20 50  : AggStep * P2 P
34c10 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
34c20 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50 33 5d  sis: accum=r[P3]
34c30 20 73 74 65 70 28 72 5b 50 32 40 50 35 5d 29 0a   step(r[P2@P5]).
34c40 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68  **.** Execute th
34c50 65 20 78 53 74 65 70 20 66 75 6e 63 74 69 6f 6e  e xStep function
34c60 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74   for an aggregat
34c70 65 2e 0a 2a 2a 20 54 68 65 20 66 75 6e 63 74 69  e..** The functi
34c80 6f 6e 20 68 61 73 20 50 35 20 61 72 67 75 6d 65  on has P5 argume
34c90 6e 74 73 2e 20 20 50 34 20 69 73 20 61 20 70 6f  nts.  P4 is a po
34ca0 69 6e 74 65 72 20 74 6f 20 74 68 65 20 0a 2a 2a  inter to the .**
34cb0 20 46 75 6e 63 44 65 66 20 73 74 72 75 63 74 75   FuncDef structu
34cc0 72 65 20 74 68 61 74 20 73 70 65 63 69 66 69 65  re that specifie
34cd0 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20  s the function. 
34ce0 20 52 65 67 69 73 74 65 72 20 50 33 20 69 73 20   Register P3 is 
34cf0 74 68 65 0a 2a 2a 20 61 63 63 75 6d 75 6c 61 74  the.** accumulat
34d00 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35  or..**.** The P5
34d10 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74   arguments are t
34d20 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74  aken from regist
34d30 65 72 20 50 32 20 61 6e 64 20 69 74 73 0a 2a 2a  er P2 and its.**
34d40 20 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a 2f 0a   successors..*/.
34d50 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 49 6e  /* Opcode: AggIn
34d60 76 65 72 73 65 20 2a 20 50 32 20 50 33 20 50 34  verse * P2 P3 P4
34d70 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
34d80 20 61 63 63 75 6d 3d 72 5b 50 33 5d 20 69 6e 76   accum=r[P3] inv
34d90 65 72 73 65 28 72 5b 50 32 40 50 35 5d 29 0a 2a  erse(r[P2@P5]).*
34da0 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65  *.** Execute the
34db0 20 78 49 6e 76 65 72 73 65 20 66 75 6e 63 74 69   xInverse functi
34dc0 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67  on for an aggreg
34dd0 61 74 65 2e 0a 2a 2a 20 54 68 65 20 66 75 6e 63  ate..** The func
34de0 74 69 6f 6e 20 68 61 73 20 50 35 20 61 72 67 75  tion has P5 argu
34df0 6d 65 6e 74 73 2e 20 20 50 34 20 69 73 20 61 20  ments.  P4 is a 
34e00 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 0a  pointer to the .
34e10 2a 2a 20 46 75 6e 63 44 65 66 20 73 74 72 75 63  ** FuncDef struc
34e20 74 75 72 65 20 74 68 61 74 20 73 70 65 63 69 66  ture that specif
34e30 69 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  ies the function
34e40 2e 20 20 52 65 67 69 73 74 65 72 20 50 33 20 69  .  Register P3 i
34e50 73 20 74 68 65 0a 2a 2a 20 61 63 63 75 6d 75 6c  s the.** accumul
34e60 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ator..**.** The 
34e70 50 35 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65  P5 arguments are
34e80 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69   taken from regi
34e90 73 74 65 72 20 50 32 20 61 6e 64 20 69 74 73 0a  ster P2 and its.
34ea0 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a  ** successors..*
34eb0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67  /./* Opcode: Agg
34ec0 53 74 65 70 31 20 50 31 20 50 32 20 50 33 20 50  Step1 P1 P2 P3 P
34ed0 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
34ee0 3a 20 61 63 63 75 6d 3d 72 5b 50 33 5d 20 73 74  : accum=r[P3] st
34ef0 65 70 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a  ep(r[P2@P5]).**.
34f00 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 78  ** Execute the x
34f10 53 74 65 70 20 28 69 66 20 50 31 3d 3d 30 29 20  Step (if P1==0) 
34f20 6f 72 20 78 49 6e 76 65 72 73 65 20 28 69 66 20  or xInverse (if 
34f30 50 31 21 3d 30 29 20 66 75 6e 63 74 69 6f 6e 20  P1!=0) function 
34f40 66 6f 72 20 61 6e 0a 2a 2a 20 61 67 67 72 65 67  for an.** aggreg
34f50 61 74 65 2e 20 20 54 68 65 20 66 75 6e 63 74 69  ate.  The functi
34f60 6f 6e 20 68 61 73 20 50 35 20 61 72 67 75 6d 65  on has P5 argume
34f70 6e 74 73 2e 20 20 50 34 20 69 73 20 61 20 70 6f  nts.  P4 is a po
34f80 69 6e 74 65 72 20 74 6f 20 74 68 65 20 0a 2a 2a  inter to the .**
34f90 20 46 75 6e 63 44 65 66 20 73 74 72 75 63 74 75   FuncDef structu
34fa0 72 65 20 74 68 61 74 20 73 70 65 63 69 66 69 65  re that specifie
34fb0 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20  s the function. 
34fc0 20 52 65 67 69 73 74 65 72 20 50 33 20 69 73 20   Register P3 is 
34fd0 74 68 65 0a 2a 2a 20 61 63 63 75 6d 75 6c 61 74  the.** accumulat
34fe0 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35  or..**.** The P5
34ff0 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74   arguments are t
35000 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74  aken from regist
35010 65 72 20 50 32 20 61 6e 64 20 69 74 73 0a 2a 2a  er P2 and its.**
35020 20 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a 2a 0a   successors..**.
35030 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
35040 73 20 69 6e 69 74 69 61 6c 6c 79 20 63 6f 64 65  s initially code
35050 64 20 61 73 20 4f 50 5f 41 67 67 53 74 65 70 30  d as OP_AggStep0
35060 2e 20 20 4f 6e 20 66 69 72 73 74 20 65 76 61 6c  .  On first eval
35070 75 61 74 69 6f 6e 2c 0a 2a 2a 20 74 68 65 20 46  uation,.** the F
35080 75 6e 63 44 65 66 20 73 74 6f 72 65 64 20 69 6e  uncDef stored in
35090 20 50 34 20 69 73 20 63 6f 6e 76 65 72 74 65 64   P4 is converted
350a0 20 69 6e 74 6f 20 61 6e 20 73 71 6c 69 74 65 33   into an sqlite3
350b0 5f 63 6f 6e 74 65 78 74 20 61 6e 64 0a 2a 2a 20  _context and.** 
350c0 74 68 65 20 6f 70 63 6f 64 65 20 69 73 20 63 68  the opcode is ch
350d0 61 6e 67 65 64 2e 20 20 49 6e 20 74 68 69 73 20  anged.  In this 
350e0 77 61 79 2c 20 74 68 65 20 69 6e 69 74 69 61 6c  way, the initial
350f0 69 7a 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a  ization of the.*
35100 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  * sqlite3_contex
35110 74 20 6f 6e 6c 79 20 68 61 70 70 65 6e 73 20 6f  t only happens o
35120 6e 63 65 2c 20 69 6e 73 74 65 61 64 20 6f 66 20  nce, instead of 
35130 6f 6e 20 65 61 63 68 20 63 61 6c 6c 20 74 6f 20  on each call to 
35140 74 68 65 0a 2a 2a 20 73 74 65 70 20 66 75 6e 63  the.** step func
35150 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
35160 5f 41 67 67 49 6e 76 65 72 73 65 3a 0a 63 61 73  _AggInverse:.cas
35170 65 20 4f 50 5f 41 67 67 53 74 65 70 3a 20 7b 0a  e OP_AggStep: {.
35180 20 20 69 6e 74 20 6e 3b 0a 20 20 73 71 6c 69 74    int n;.  sqlit
35190 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78  e3_context *pCtx
351a0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
351b0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e  ->p4type==P4_FUN
351c0 43 44 45 46 20 29 3b 0a 20 20 6e 20 3d 20 70 4f  CDEF );.  n = pO
351d0 70 2d 3e 70 35 3b 0a 20 20 61 73 73 65 72 74 28  p->p5;.  assert(
351e0 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f   pOp->p3>0 && pO
351f0 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p->p3<=(p->nMem+
35200 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20  1 - p->nCursor) 
35210 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3d 3d  );.  assert( n==
35220 30 20 7c 7c 20 28 70 4f 70 2d 3e 70 32 3e 30 20  0 || (pOp->p2>0 
35230 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c 3d 28 70  && pOp->p2+n<=(p
35240 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
35250 75 72 73 6f 72 29 2b 31 29 20 29 3b 0a 20 20 61  ursor)+1) );.  a
35260 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70  ssert( pOp->p3<p
35270 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f 70 2d 3e 70  Op->p2 || pOp->p
35280 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a  3>=pOp->p2+n );.
35290 20 20 70 43 74 78 20 3d 20 73 71 6c 69 74 65 33    pCtx = sqlite3
352a0 44 62 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28 64 62  DbMallocRawNN(db
352b0 2c 20 6e 2a 73 69 7a 65 6f 66 28 73 71 6c 69 74  , n*sizeof(sqlit
352c0 65 33 5f 76 61 6c 75 65 2a 29 20 2b 0a 20 20 20  e3_value*) +.   
352d0 20 20 20 20 20 20 20 20 20 20 20 20 28 73 69 7a              (siz
352e0 65 6f 66 28 70 43 74 78 5b 30 5d 29 20 2b 20 73  eof(pCtx[0]) + s
352f0 69 7a 65 6f 66 28 4d 65 6d 29 20 2d 20 73 69 7a  izeof(Mem) - siz
35300 65 6f 66 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  eof(sqlite3_valu
35310 65 2a 29 29 29 3b 0a 20 20 69 66 28 20 70 43 74  e*)));.  if( pCt
35320 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  x==0 ) goto no_m
35330 65 6d 3b 0a 20 20 70 43 74 78 2d 3e 70 4d 65 6d  em;.  pCtx->pMem
35340 20 3d 20 30 3b 0a 20 20 70 43 74 78 2d 3e 70 4f   = 0;.  pCtx->pO
35350 75 74 20 3d 20 28 4d 65 6d 2a 29 26 28 70 43 74  ut = (Mem*)&(pCt
35360 78 2d 3e 61 72 67 76 5b 6e 5d 29 3b 0a 20 20 73  x->argv[n]);.  s
35370 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 69  qlite3VdbeMemIni
35380 74 28 70 43 74 78 2d 3e 70 4f 75 74 2c 20 64 62  t(pCtx->pOut, db
35390 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 70  , MEM_Null);.  p
353a0 43 74 78 2d 3e 70 46 75 6e 63 20 3d 20 70 4f 70  Ctx->pFunc = pOp
353b0 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20 70 43  ->p4.pFunc;.  pC
353c0 74 78 2d 3e 69 4f 70 20 3d 20 28 69 6e 74 29 28  tx->iOp = (int)(
353d0 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 70 43  pOp - aOp);.  pC
353e0 74 78 2d 3e 70 56 64 62 65 20 3d 20 70 3b 0a 20  tx->pVdbe = p;. 
353f0 20 70 43 74 78 2d 3e 73 6b 69 70 46 6c 61 67 20   pCtx->skipFlag 
35400 3d 20 30 3b 0a 20 20 70 43 74 78 2d 3e 69 73 45  = 0;.  pCtx->isE
35410 72 72 6f 72 20 3d 20 30 3b 0a 20 20 70 43 74 78  rror = 0;.  pCtx
35420 2d 3e 61 72 67 63 20 3d 20 6e 3b 0a 20 20 70 4f  ->argc = n;.  pO
35430 70 2d 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 46  p->p4type = P4_F
35440 55 4e 43 43 54 58 3b 0a 20 20 70 4f 70 2d 3e 70  UNCCTX;.  pOp->p
35450 34 2e 70 43 74 78 20 3d 20 70 43 74 78 3b 0a 0a  4.pCtx = pCtx;..
35460 20 20 2f 2a 20 4f 50 5f 41 67 67 49 6e 76 65 72    /* OP_AggInver
35470 73 65 20 6d 75 73 74 20 68 61 76 65 20 50 31 3d  se must have P1=
35480 3d 31 20 61 6e 64 20 4f 50 5f 41 67 67 53 74 65  =1 and OP_AggSte
35490 70 20 6d 75 73 74 20 68 61 76 65 20 50 31 3d 3d  p must have P1==
354a0 30 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  0 */.  assert( p
354b0 4f 70 2d 3e 70 31 3d 3d 28 70 4f 70 2d 3e 6f 70  Op->p1==(pOp->op
354c0 63 6f 64 65 3d 3d 4f 50 5f 41 67 67 49 6e 76 65  code==OP_AggInve
354d0 72 73 65 29 20 29 3b 0a 0a 20 20 70 4f 70 2d 3e  rse) );..  pOp->
354e0 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 41 67 67 53  opcode = OP_AggS
354f0 74 65 70 31 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20  tep1;.  /* Fall 
35500 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f  through into OP_
35510 41 67 67 53 74 65 70 20 2a 2f 0a 7d 0a 63 61 73  AggStep */.}.cas
35520 65 20 4f 50 5f 41 67 67 53 74 65 70 31 3a 20 7b  e OP_AggStep1: {
35530 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73 71 6c 69  .  int i;.  sqli
35540 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74  te3_context *pCt
35550 78 3b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a  x;.  Mem *pMem;.
35560 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
35570 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43 43  p4type==P4_FUNCC
35580 54 58 20 29 3b 0a 20 20 70 43 74 78 20 3d 20 70  TX );.  pCtx = p
35590 4f 70 2d 3e 70 34 2e 70 43 74 78 3b 0a 20 20 70  Op->p4.pCtx;.  p
355a0 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Mem = &aMem[pOp-
355b0 3e 70 33 5d 3b 0a 0a 23 69 66 64 65 66 20 53 51  >p3];..#ifdef SQ
355c0 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28  LITE_DEBUG.  if(
355d0 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20   pOp->p1 ){.    
355e0 2f 2a 20 54 68 69 73 20 69 73 20 61 6e 20 4f 50  /* This is an OP
355f0 5f 41 67 67 49 6e 76 65 72 73 65 20 63 61 6c 6c  _AggInverse call
35600 2e 20 20 56 65 72 69 66 79 20 74 68 61 74 20 78  .  Verify that x
35610 53 74 65 70 20 68 61 73 20 61 6c 77 61 79 73 0a  Step has always.
35620 20 20 20 20 2a 2a 20 62 65 65 6e 20 63 61 6c 6c      ** been call
35630 65 64 20 61 74 20 6c 65 61 73 74 20 6f 6e 63 65  ed at least once
35640 20 70 72 69 6f 72 20 74 6f 20 61 6e 79 20 78 49   prior to any xI
35650 6e 76 65 72 73 65 20 63 61 6c 6c 2e 20 2a 2f 0a  nverse call. */.
35660 20 20 20 20 61 73 73 65 72 74 28 20 70 4d 65 6d      assert( pMem
35670 2d 3e 75 54 65 6d 70 3d 3d 30 78 31 31 32 32 65  ->uTemp==0x1122e
35680 30 65 33 20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  0e3 );.  }else{.
35690 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20 61      /* This is a
356a0 6e 20 4f 50 5f 41 67 67 53 74 65 70 20 63 61 6c  n OP_AggStep cal
356b0 6c 2e 20 20 4d 61 72 6b 20 69 74 20 61 73 20 73  l.  Mark it as s
356c0 75 63 68 2e 20 2a 2f 0a 20 20 20 20 70 4d 65 6d  uch. */.    pMem
356d0 2d 3e 75 54 65 6d 70 20 3d 20 30 78 31 31 32 32  ->uTemp = 0x1122
356e0 65 30 65 33 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  e0e3;.  }.#endif
356f0 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69 73 20 66  ..  /* If this f
35700 75 6e 63 74 69 6f 6e 20 69 73 20 69 6e 73 69 64  unction is insid
35710 65 20 6f 66 20 61 20 74 72 69 67 67 65 72 2c 20  e of a trigger, 
35720 74 68 65 20 72 65 67 69 73 74 65 72 20 61 72 72  the register arr
35730 61 79 20 69 6e 20 61 4d 65 6d 5b 5d 0a 20 20 2a  ay in aMem[].  *
35740 2a 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 66  * might change f
35750 72 6f 6d 20 6f 6e 65 20 65 76 61 6c 75 61 74 69  rom one evaluati
35760 6f 6e 20 74 6f 20 74 68 65 20 6e 65 78 74 2e 20  on to the next. 
35770 20 54 68 65 20 6e 65 78 74 20 62 6c 6f 63 6b 20   The next block 
35780 6f 66 20 63 6f 64 65 0a 20 20 2a 2a 20 63 68 65  of code.  ** che
35790 63 6b 73 20 74 6f 20 73 65 65 20 69 66 20 74 68  cks to see if th
357a0 65 20 72 65 67 69 73 74 65 72 20 61 72 72 61 79  e register array
357b0 20 68 61 73 20 63 68 61 6e 67 65 64 2c 20 61 6e   has changed, an
357c0 64 20 69 66 20 73 6f 20 69 74 0a 20 20 2a 2a 20  d if so it.  ** 
357d0 72 65 69 6e 69 74 69 61 6c 69 7a 65 73 20 74 68  reinitializes th
357e0 65 20 72 65 6c 61 76 61 6e 74 20 70 61 72 74 73  e relavant parts
357f0 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f   of the sqlite3_
35800 63 6f 6e 74 65 78 74 20 6f 62 6a 65 63 74 20 2a  context object *
35810 2f 0a 20 20 69 66 28 20 70 43 74 78 2d 3e 70 4d  /.  if( pCtx->pM
35820 65 6d 20 21 3d 20 70 4d 65 6d 20 29 7b 0a 20 20  em != pMem ){.  
35830 20 20 70 43 74 78 2d 3e 70 4d 65 6d 20 3d 20 70    pCtx->pMem = p
35840 4d 65 6d 3b 0a 20 20 20 20 66 6f 72 28 69 3d 70  Mem;.    for(i=p
35850 43 74 78 2d 3e 61 72 67 63 2d 31 3b 20 69 3e 3d  Ctx->argc-1; i>=
35860 30 3b 20 69 2d 2d 29 20 70 43 74 78 2d 3e 61 72  0; i--) pCtx->ar
35870 67 76 5b 69 5d 20 3d 20 26 61 4d 65 6d 5b 70 4f  gv[i] = &aMem[pO
35880 70 2d 3e 70 32 2b 69 5d 3b 0a 20 20 7d 0a 0a 23  p->p2+i];.  }..#
35890 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
358a0 55 47 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  UG.  for(i=0; i<
358b0 70 43 74 78 2d 3e 61 72 67 63 3b 20 69 2b 2b 29  pCtx->argc; i++)
358c0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  {.    assert( me
358d0 6d 49 73 56 61 6c 69 64 28 70 43 74 78 2d 3e 61  mIsValid(pCtx->a
358e0 72 67 76 5b 69 5d 29 20 29 3b 0a 20 20 20 20 52  rgv[i]) );.    R
358f0 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
35900 70 2d 3e 70 32 2b 69 2c 20 70 43 74 78 2d 3e 61  p->p2+i, pCtx->a
35910 72 67 76 5b 69 5d 29 3b 0a 20 20 7d 0a 23 65 6e  rgv[i]);.  }.#en
35920 64 69 66 0a 0a 20 20 70 4d 65 6d 2d 3e 6e 2b 2b  dif..  pMem->n++
35930 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 74 78  ;.  assert( pCtx
35940 2d 3e 70 4f 75 74 2d 3e 66 6c 61 67 73 3d 3d 4d  ->pOut->flags==M
35950 45 4d 5f 4e 75 6c 6c 20 29 3b 0a 20 20 61 73 73  EM_Null );.  ass
35960 65 72 74 28 20 70 43 74 78 2d 3e 69 73 45 72 72  ert( pCtx->isErr
35970 6f 72 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  or==0 );.  asser
35980 74 28 20 70 43 74 78 2d 3e 73 6b 69 70 46 6c 61  t( pCtx->skipFla
35990 67 3d 3d 30 20 29 3b 0a 23 69 66 6e 64 65 66 20  g==0 );.#ifndef 
359a0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 49 4e 44  SQLITE_OMIT_WIND
359b0 4f 57 46 55 4e 43 0a 20 20 69 66 28 20 70 4f 70  OWFUNC.  if( pOp
359c0 2d 3e 70 31 20 29 7b 0a 20 20 20 20 28 70 43 74  ->p1 ){.    (pCt
359d0 78 2d 3e 70 46 75 6e 63 2d 3e 78 49 6e 76 65 72  x->pFunc->xInver
359e0 73 65 29 28 70 43 74 78 2c 70 43 74 78 2d 3e 61  se)(pCtx,pCtx->a
359f0 72 67 63 2c 70 43 74 78 2d 3e 61 72 67 76 29 3b  rgc,pCtx->argv);
35a00 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a  .  }else.#endif.
35a10 20 20 28 70 43 74 78 2d 3e 70 46 75 6e 63 2d 3e    (pCtx->pFunc->
35a20 78 53 46 75 6e 63 29 28 70 43 74 78 2c 70 43 74  xSFunc)(pCtx,pCt
35a30 78 2d 3e 61 72 67 63 2c 70 43 74 78 2d 3e 61 72  x->argc,pCtx->ar
35a40 67 76 29 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d 32  gv); /* IMP: R-2
35a50 34 35 30 35 2d 32 33 32 33 30 20 2a 2f 0a 0a 20  4505-23230 */.. 
35a60 20 69 66 28 20 70 43 74 78 2d 3e 69 73 45 72 72   if( pCtx->isErr
35a70 6f 72 20 29 7b 0a 20 20 20 20 69 66 28 20 70 43  or ){.    if( pC
35a80 74 78 2d 3e 69 73 45 72 72 6f 72 3e 30 20 29 7b  tx->isError>0 ){
35a90 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
35aa0 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22 2c  beError(p, "%s",
35ab0 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
35ac0 65 78 74 28 70 43 74 78 2d 3e 70 4f 75 74 29 29  ext(pCtx->pOut))
35ad0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 70 43 74  ;.      rc = pCt
35ae0 78 2d 3e 69 73 45 72 72 6f 72 3b 0a 20 20 20 20  x->isError;.    
35af0 7d 0a 20 20 20 20 69 66 28 20 70 43 74 78 2d 3e  }.    if( pCtx->
35b00 73 6b 69 70 46 6c 61 67 20 29 7b 0a 20 20 20 20  skipFlag ){.    
35b10 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31    assert( pOp[-1
35b20 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c  ].opcode==OP_Col
35b30 6c 53 65 71 20 29 3b 0a 20 20 20 20 20 20 69 20  lSeq );.      i 
35b40 3d 20 70 4f 70 5b 2d 31 5d 2e 70 31 3b 0a 20 20  = pOp[-1].p1;.  
35b50 20 20 20 20 69 66 28 20 69 20 29 20 73 71 6c 69      if( i ) sqli
35b60 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74  te3VdbeMemSetInt
35b70 36 34 28 26 61 4d 65 6d 5b 69 5d 2c 20 31 29 3b  64(&aMem[i], 1);
35b80 0a 20 20 20 20 20 20 70 43 74 78 2d 3e 73 6b 69  .      pCtx->ski
35b90 70 46 6c 61 67 20 3d 20 30 3b 0a 20 20 20 20 7d  pFlag = 0;.    }
35ba0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
35bb0 4d 65 6d 52 65 6c 65 61 73 65 28 70 43 74 78 2d  MemRelease(pCtx-
35bc0 3e 70 4f 75 74 29 3b 0a 20 20 20 20 70 43 74 78  >pOut);.    pCtx
35bd0 2d 3e 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20  ->pOut->flags = 
35be0 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 70 43  MEM_Null;.    pC
35bf0 74 78 2d 3e 69 73 45 72 72 6f 72 20 3d 20 30 3b  tx->isError = 0;
35c00 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f  .    if( rc ) go
35c10 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
35c20 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 61 73 73  error;.  }.  ass
35c30 65 72 74 28 20 70 43 74 78 2d 3e 70 4f 75 74 2d  ert( pCtx->pOut-
35c40 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 4e 75 6c 6c  >flags==MEM_Null
35c50 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
35c60 74 78 2d 3e 73 6b 69 70 46 6c 61 67 3d 3d 30 20  tx->skipFlag==0 
35c70 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
35c80 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 46 69 6e  * Opcode: AggFin
35c90 61 6c 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a  al P1 P2 * P4 *.
35ca0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 63 63  ** Synopsis: acc
35cb0 75 6d 3d 72 5b 50 31 5d 20 4e 3d 50 32 0a 2a 2a  um=r[P1] N=P2.**
35cc0 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 6d 65  .** P1 is the me
35cd0 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68  mory location th
35ce0 61 74 20 69 73 20 74 68 65 20 61 63 63 75 6d 75  at is the accumu
35cf0 6c 61 74 6f 72 20 66 6f 72 20 61 6e 20 61 67 67  lator for an agg
35d00 72 65 67 61 74 65 0a 2a 2a 20 6f 72 20 77 69 6e  regate.** or win
35d10 64 6f 77 20 66 75 6e 63 74 69 6f 6e 2e 20 20 45  dow function.  E
35d20 78 65 63 75 74 65 20 74 68 65 20 66 69 6e 61 6c  xecute the final
35d30 69 7a 65 72 20 66 75 6e 63 74 69 6f 6e 20 0a 2a  izer function .*
35d40 2a 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61  * for an aggrega
35d50 74 65 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  te and store the
35d60 20 72 65 73 75 6c 74 20 69 6e 20 50 31 2e 0a 2a   result in P1..*
35d70 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20 6e  *.** P2 is the n
35d80 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
35d90 74 73 20 74 68 61 74 20 74 68 65 20 73 74 65 70  ts that the step
35da0 20 66 75 6e 63 74 69 6f 6e 20 74 61 6b 65 73 20   function takes 
35db0 61 6e 64 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  and.** P4 is a p
35dc0 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 46 75  ointer to the Fu
35dd0 6e 63 44 65 66 20 66 6f 72 20 74 68 69 73 20 66  ncDef for this f
35de0 75 6e 63 74 69 6f 6e 2e 20 20 54 68 65 20 50 32  unction.  The P2
35df0 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 69 73 20  .** argument is 
35e00 6e 6f 74 20 75 73 65 64 20 62 79 20 74 68 69 73  not used by this
35e10 20 6f 70 63 6f 64 65 2e 20 20 49 74 20 69 73 20   opcode.  It is 
35e20 6f 6e 6c 79 20 74 68 65 72 65 20 74 6f 20 64 69  only there to di
35e30 73 61 6d 62 69 67 75 61 74 65 0a 2a 2a 20 66 75  sambiguate.** fu
35e40 6e 63 74 69 6f 6e 73 20 74 68 61 74 20 63 61 6e  nctions that can
35e50 20 74 61 6b 65 20 76 61 72 79 69 6e 67 20 6e 75   take varying nu
35e60 6d 62 65 72 73 20 6f 66 20 61 72 67 75 6d 65 6e  mbers of argumen
35e70 74 73 2e 20 20 54 68 65 0a 2a 2a 20 50 34 20 61  ts.  The.** P4 a
35e80 72 67 75 6d 65 6e 74 20 69 73 20 6f 6e 6c 79 20  rgument is only 
35e90 6e 65 65 64 65 64 20 66 6f 72 20 74 68 65 20 63  needed for the c
35ea0 61 73 65 20 77 68 65 72 65 0a 2a 2a 20 74 68 65  ase where.** the
35eb0 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 77   step function w
35ec0 61 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c  as not previousl
35ed0 79 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 2f 2a 20  y called..*/./* 
35ee0 4f 70 63 6f 64 65 3a 20 41 67 67 56 61 6c 75 65  Opcode: AggValue
35ef0 20 2a 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a   * P2 P3 P4 *.**
35f00 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
35f10 3d 76 61 6c 75 65 20 4e 3d 50 32 0a 2a 2a 0a 2a  =value N=P2.**.*
35f20 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 78 56 61  * Invoke the xVa
35f30 6c 75 65 28 29 20 66 75 6e 63 74 69 6f 6e 20 61  lue() function a
35f40 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
35f50 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
35f60 50 33 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20  P3..**.** P2 is 
35f70 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72  the number of ar
35f80 67 75 6d 65 6e 74 73 20 74 68 61 74 20 74 68 65  guments that the
35f90 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 74   step function t
35fa0 61 6b 65 73 20 61 6e 64 0a 2a 2a 20 50 34 20 69  akes and.** P4 i
35fb0 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
35fc0 68 65 20 46 75 6e 63 44 65 66 20 66 6f 72 20 74  he FuncDef for t
35fd0 68 69 73 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54  his function.  T
35fe0 68 65 20 50 32 0a 2a 2a 20 61 72 67 75 6d 65 6e  he P2.** argumen
35ff0 74 20 69 73 20 6e 6f 74 20 75 73 65 64 20 62 79  t is not used by
36000 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 49   this opcode.  I
36010 74 20 69 73 20 6f 6e 6c 79 20 74 68 65 72 65 20  t is only there 
36020 74 6f 20 64 69 73 61 6d 62 69 67 75 61 74 65 0a  to disambiguate.
36030 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 74 68 61  ** functions tha
36040 74 20 63 61 6e 20 74 61 6b 65 20 76 61 72 79 69  t can take varyi
36050 6e 67 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 72  ng numbers of ar
36060 67 75 6d 65 6e 74 73 2e 20 20 54 68 65 0a 2a 2a  guments.  The.**
36070 20 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20   P4 argument is 
36080 6f 6e 6c 79 20 6e 65 65 64 65 64 20 66 6f 72 20  only needed for 
36090 74 68 65 20 63 61 73 65 20 77 68 65 72 65 0a 2a  the case where.*
360a0 2a 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74  * the step funct
360b0 69 6f 6e 20 77 61 73 20 6e 6f 74 20 70 72 65 76  ion was not prev
360c0 69 6f 75 73 6c 79 20 63 61 6c 6c 65 64 2e 0a 2a  iously called..*
360d0 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67 56 61 6c  /.case OP_AggVal
360e0 75 65 3a 0a 63 61 73 65 20 4f 50 5f 41 67 67 46  ue:.case OP_AggF
360f0 69 6e 61 6c 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70  inal: {.  Mem *p
36100 4d 65 6d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Mem;.  assert( p
36110 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d  Op->p1>0 && pOp-
36120 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  >p1<=(p->nMem+1 
36130 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  - p->nCursor) );
36140 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
36150 70 33 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 6f 70  p3==0 || pOp->op
36160 63 6f 64 65 3d 3d 4f 50 5f 41 67 67 56 61 6c 75  code==OP_AggValu
36170 65 20 29 3b 0a 20 20 70 4d 65 6d 20 3d 20 26 61  e );.  pMem = &a
36180 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
36190 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66  assert( (pMem->f
361a0 6c 61 67 73 20 26 20 7e 28 4d 45 4d 5f 4e 75 6c  lags & ~(MEM_Nul
361b0 6c 7c 4d 45 4d 5f 41 67 67 29 29 3d 3d 30 20 29  l|MEM_Agg))==0 )
361c0 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
361d0 5f 4f 4d 49 54 5f 57 49 4e 44 4f 57 46 55 4e 43  _OMIT_WINDOWFUNC
361e0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29  .  if( pOp->p3 )
361f0 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
36200 65 33 56 64 62 65 4d 65 6d 41 67 67 56 61 6c 75  e3VdbeMemAggValu
36210 65 28 70 4d 65 6d 2c 20 26 61 4d 65 6d 5b 70 4f  e(pMem, &aMem[pO
36220 70 2d 3e 70 33 5d 2c 20 70 4f 70 2d 3e 70 34 2e  p->p3], pOp->p4.
36230 70 46 75 6e 63 29 3b 0a 20 20 20 20 70 4d 65 6d  pFunc);.    pMem
36240 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
36250 5d 3b 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69  ];.  }else.#endi
36260 66 0a 20 20 7b 0a 20 20 20 20 72 63 20 3d 20 73  f.  {.    rc = s
36270 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 69 6e  qlite3VdbeMemFin
36280 61 6c 69 7a 65 28 70 4d 65 6d 2c 20 70 4f 70 2d  alize(pMem, pOp-
36290 3e 70 34 2e 70 46 75 6e 63 29 3b 0a 20 20 7d 0a  >p4.pFunc);.  }.
362a0 20 20 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20    .  if( rc ){. 
362b0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
362c0 72 6f 72 28 70 2c 20 22 25 73 22 2c 20 73 71 6c  ror(p, "%s", sql
362d0 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
362e0 70 4d 65 6d 29 29 3b 0a 20 20 20 20 67 6f 74 6f  pMem));.    goto
362f0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
36300 72 6f 72 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  ror;.  }.  sqlit
36310 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f  e3VdbeChangeEnco
36320 64 69 6e 67 28 70 4d 65 6d 2c 20 65 6e 63 6f 64  ding(pMem, encod
36330 69 6e 67 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d  ing);.  UPDATE_M
36340 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4d 65 6d  AX_BLOBSIZE(pMem
36350 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
36360 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 4d  VdbeMemTooBig(pM
36370 65 6d 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  em) ){.    goto 
36380 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62  too_big;.  }.  b
36390 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66  reak;.}..#ifndef
363a0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c   SQLITE_OMIT_WAL
363b0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 68 65 63  ./* Opcode: Chec
363c0 6b 70 6f 69 6e 74 20 50 31 20 50 32 20 50 33 20  kpoint P1 P2 P3 
363d0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 70  * *.**.** Checkp
363e0 6f 69 6e 74 20 64 61 74 61 62 61 73 65 20 50 31  oint database P1
363f0 2e 20 54 68 69 73 20 69 73 20 61 20 6e 6f 2d 6f  . This is a no-o
36400 70 20 69 66 20 50 31 20 69 73 20 6e 6f 74 20 63  p if P1 is not c
36410 75 72 72 65 6e 74 6c 79 20 69 6e 0a 2a 2a 20 57  urrently in.** W
36420 41 4c 20 6d 6f 64 65 2e 20 50 61 72 61 6d 65 74  AL mode. Paramet
36430 65 72 20 50 32 20 69 73 20 6f 6e 65 20 6f 66 20  er P2 is one of 
36440 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e  SQLITE_CHECKPOIN
36450 54 5f 50 41 53 53 49 56 45 2c 20 46 55 4c 4c 2c  T_PASSIVE, FULL,
36460 0a 2a 2a 20 52 45 53 54 41 52 54 2c 20 6f 72 20  .** RESTART, or 
36470 54 52 55 4e 43 41 54 45 2e 20 20 57 72 69 74 65  TRUNCATE.  Write
36480 20 31 20 6f 72 20 30 20 69 6e 74 6f 20 6d 65 6d   1 or 0 into mem
36490 5b 50 33 5d 20 69 66 20 74 68 65 20 63 68 65 63  [P3] if the chec
364a0 6b 70 6f 69 6e 74 20 72 65 74 75 72 6e 73 0a 2a  kpoint returns.*
364b0 2a 20 53 51 4c 49 54 45 5f 42 55 53 59 20 6f 72  * SQLITE_BUSY or
364c0 20 6e 6f 74 2c 20 72 65 73 70 65 63 74 69 76 65   not, respective
364d0 6c 79 2e 20 20 57 72 69 74 65 20 74 68 65 20 6e  ly.  Write the n
364e0 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69  umber of pages i
364f0 6e 20 74 68 65 0a 2a 2a 20 57 41 4c 20 61 66 74  n the.** WAL aft
36500 65 72 20 74 68 65 20 63 68 65 63 6b 70 6f 69 6e  er the checkpoin
36510 74 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b 31 5d  t into mem[P3+1]
36520 20 61 6e 64 20 74 68 65 20 6e 75 6d 62 65 72 20   and the number 
36530 6f 66 20 70 61 67 65 73 0a 2a 2a 20 69 6e 20 74  of pages.** in t
36540 68 65 20 57 41 4c 20 74 68 61 74 20 68 61 76 65  he WAL that have
36550 20 62 65 65 6e 20 63 68 65 63 6b 70 6f 69 6e 74   been checkpoint
36560 65 64 20 61 66 74 65 72 20 74 68 65 20 63 68 65  ed after the che
36570 63 6b 70 6f 69 6e 74 0a 2a 2a 20 63 6f 6d 70 6c  ckpoint.** compl
36580 65 74 65 73 20 69 6e 74 6f 20 6d 65 6d 5b 50 33  etes into mem[P3
36590 2b 32 5d 2e 20 20 48 6f 77 65 76 65 72 20 6f 6e  +2].  However on
365a0 20 61 6e 20 65 72 72 6f 72 2c 20 6d 65 6d 5b 50   an error, mem[P
365b0 33 2b 31 5d 20 61 6e 64 0a 2a 2a 20 6d 65 6d 5b  3+1] and.** mem[
365c0 50 33 2b 32 5d 20 61 72 65 20 69 6e 69 74 69 61  P3+2] are initia
365d0 6c 69 7a 65 64 20 74 6f 20 2d 31 2e 0a 2a 2f 0a  lized to -1..*/.
365e0 63 61 73 65 20 4f 50 5f 43 68 65 63 6b 70 6f 69  case OP_Checkpoi
365f0 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 20 20  nt: {.  int i;  
36600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36610 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20          /* Loop 
36620 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74  counter */.  int
36630 20 61 52 65 73 5b 33 5d 3b 20 20 20 20 20 20 20   aRes[3];       
36640 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
36650 52 65 73 75 6c 74 73 20 2a 2f 0a 20 20 4d 65 6d  Results */.  Mem
36660 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20   *pMem;         
36670 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
36680 57 72 69 74 65 20 72 65 73 75 6c 74 73 20 68 65  Write results he
36690 72 65 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28  re */..  assert(
366a0 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
366b0 29 3b 0a 20 20 61 52 65 73 5b 30 5d 20 3d 20 30  );.  aRes[0] = 0
366c0 3b 0a 20 20 61 52 65 73 5b 31 5d 20 3d 20 61 52  ;.  aRes[1] = aR
366d0 65 73 5b 32 5d 20 3d 20 2d 31 3b 0a 20 20 61 73  es[2] = -1;.  as
366e0 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 53  sert( pOp->p2==S
366f0 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54  QLITE_CHECKPOINT
36700 5f 50 41 53 53 49 56 45 0a 20 20 20 20 20 20 20  _PASSIVE.       
36710 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49  || pOp->p2==SQLI
36720 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 46 55  TE_CHECKPOINT_FU
36730 4c 4c 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f 70  LL.       || pOp
36740 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45  ->p2==SQLITE_CHE
36750 43 4b 50 4f 49 4e 54 5f 52 45 53 54 41 52 54 0a  CKPOINT_RESTART.
36760 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70         || pOp->p
36770 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50  2==SQLITE_CHECKP
36780 4f 49 4e 54 5f 54 52 55 4e 43 41 54 45 0a 20 20  OINT_TRUNCATE.  
36790 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
367a0 33 43 68 65 63 6b 70 6f 69 6e 74 28 64 62 2c 20  3Checkpoint(db, 
367b0 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32  pOp->p1, pOp->p2
367c0 2c 20 26 61 52 65 73 5b 31 5d 2c 20 26 61 52 65  , &aRes[1], &aRe
367d0 73 5b 32 5d 29 3b 0a 20 20 69 66 28 20 72 63 20  s[2]);.  if( rc 
367e0 29 7b 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53  ){.    if( rc!=S
367f0 51 4c 49 54 45 5f 42 55 53 59 20 29 20 67 6f 74  QLITE_BUSY ) got
36800 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
36810 72 72 6f 72 3b 0a 20 20 20 20 72 63 20 3d 20 53  rror;.    rc = S
36820 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 61 52  QLITE_OK;.    aR
36830 65 73 5b 30 5d 20 3d 20 31 3b 0a 20 20 7d 0a 20  es[0] = 1;.  }. 
36840 20 66 6f 72 28 69 3d 30 2c 20 70 4d 65 6d 20 3d   for(i=0, pMem =
36850 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
36860 20 69 3c 33 3b 20 69 2b 2b 2c 20 70 4d 65 6d 2b   i<3; i++, pMem+
36870 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  +){.    sqlite3V
36880 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70  dbeMemSetInt64(p
36890 4d 65 6d 2c 20 28 69 36 34 29 61 52 65 73 5b 69  Mem, (i64)aRes[i
368a0 5d 29 3b 0a 20 20 7d 20 20 20 20 0a 20 20 62 72  ]);.  }    .  br
368b0 65 61 6b 3b 0a 7d 3b 20 20 0a 23 65 6e 64 69 66  eak;.};  .#endif
368c0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
368d0 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 0a 2f 2a 20  _OMIT_PRAGMA./* 
368e0 4f 70 63 6f 64 65 3a 20 4a 6f 75 72 6e 61 6c 4d  Opcode: JournalM
368f0 6f 64 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ode P1 P2 P3 * *
36900 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 65 20 74 68  .**.** Change th
36910 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f  e journal mode o
36920 66 20 64 61 74 61 62 61 73 65 20 50 31 20 74 6f  f database P1 to
36930 20 50 33 2e 20 50 33 20 6d 75 73 74 20 62 65 20   P3. P3 must be 
36940 6f 6e 65 20 6f 66 20 74 68 65 0a 2a 2a 20 50 41  one of the.** PA
36950 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
36960 58 58 58 20 76 61 6c 75 65 73 2e 20 49 66 20 63  XXX values. If c
36970 68 61 6e 67 69 6e 67 20 62 65 74 77 65 65 6e 20  hanging between 
36980 74 68 65 20 76 61 72 69 6f 75 73 20 72 6f 6c 6c  the various roll
36990 62 61 63 6b 0a 2a 2a 20 6d 6f 64 65 73 20 28 64  back.** modes (d
369a0 65 6c 65 74 65 2c 20 74 72 75 6e 63 61 74 65 2c  elete, truncate,
369b0 20 70 65 72 73 69 73 74 2c 20 6f 66 66 20 61 6e   persist, off an
369c0 64 20 6d 65 6d 6f 72 79 29 2c 20 74 68 69 73 20  d memory), this 
369d0 69 73 20 61 20 73 69 6d 70 6c 65 0a 2a 2a 20 6f  is a simple.** o
369e0 70 65 72 61 74 69 6f 6e 2e 20 4e 6f 20 49 4f 20  peration. No IO 
369f0 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2a 0a  is required..**.
36a00 2a 2a 20 49 66 20 63 68 61 6e 67 69 6e 67 20 69  ** If changing i
36a10 6e 74 6f 20 6f 72 20 6f 75 74 20 6f 66 20 57 41  nto or out of WA
36a20 4c 20 6d 6f 64 65 20 74 68 65 20 70 72 6f 63 65  L mode the proce
36a30 64 75 72 65 20 69 73 20 6d 6f 72 65 20 63 6f 6d  dure is more com
36a40 70 6c 69 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  plicated..**.** 
36a50 57 72 69 74 65 20 61 20 73 74 72 69 6e 67 20 63  Write a string c
36a60 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 66 69  ontaining the fi
36a70 6e 61 6c 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65  nal journal-mode
36a80 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e   to register P2.
36a90 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 6f 75 72  .*/.case OP_Jour
36aa0 6e 61 6c 4d 6f 64 65 3a 20 7b 20 20 20 20 2f 2a  nalMode: {    /*
36ab0 20 6f 75 74 32 20 2a 2f 0a 20 20 42 74 72 65 65   out2 */.  Btree
36ac0 20 2a 70 42 74 3b 20 20 20 20 20 20 20 20 20 20   *pBt;          
36ad0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 74             /* Bt
36ae0 72 65 65 20 74 6f 20 63 68 61 6e 67 65 20 6a 6f  ree to change jo
36af0 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20 2a 2f  urnal mode of */
36b00 0a 20 20 50 61 67 65 72 20 2a 70 50 61 67 65 72  .  Pager *pPager
36b10 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
36b20 20 20 20 2f 2a 20 50 61 67 65 72 20 61 73 73 6f     /* Pager asso
36b30 63 69 61 74 65 64 20 77 69 74 68 20 70 42 74 20  ciated with pBt 
36b40 2a 2f 0a 20 20 69 6e 74 20 65 4e 65 77 3b 20 20  */.  int eNew;  
36b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36b60 20 20 20 20 20 2f 2a 20 4e 65 77 20 6a 6f 75 72       /* New jour
36b70 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 20 20 69 6e  nal mode */.  in
36b80 74 20 65 4f 6c 64 3b 20 20 20 20 20 20 20 20 20  t eOld;         
36b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
36ba0 20 54 68 65 20 6f 6c 64 20 6a 6f 75 72 6e 61 6c   The old journal
36bb0 20 6d 6f 64 65 20 2a 2f 0a 23 69 66 6e 64 65 66   mode */.#ifndef
36bc0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c   SQLITE_OMIT_WAL
36bd0 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
36be0 46 69 6c 65 6e 61 6d 65 3b 20 20 20 20 20 20 20  Filename;       
36bf0 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61     /* Name of da
36c00 74 61 62 61 73 65 20 66 69 6c 65 20 66 6f 72 20  tabase file for 
36c10 70 50 61 67 65 72 20 2a 2f 0a 23 65 6e 64 69 66  pPager */.#endif
36c20 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ..  pOut = out2P
36c30 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
36c40 29 3b 0a 20 20 65 4e 65 77 20 3d 20 70 4f 70 2d  );.  eNew = pOp-
36c50 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 65  >p3;.  assert( e
36c60 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
36c70 41 4c 4d 4f 44 45 5f 44 45 4c 45 54 45 20 0a 20  ALMODE_DELETE . 
36c80 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50        || eNew==P
36c90 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
36ca0 5f 54 52 55 4e 43 41 54 45 20 0a 20 20 20 20 20  _TRUNCATE .     
36cb0 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52    || eNew==PAGER
36cc0 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 50 45 52  _JOURNALMODE_PER
36cd0 53 49 53 54 20 0a 20 20 20 20 20 20 20 7c 7c 20  SIST .       || 
36ce0 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
36cf0 4e 41 4c 4d 4f 44 45 5f 4f 46 46 0a 20 20 20 20  NALMODE_OFF.    
36d00 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45     || eNew==PAGE
36d10 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45  R_JOURNALMODE_ME
36d20 4d 4f 52 59 0a 20 20 20 20 20 20 20 7c 7c 20 65  MORY.       || e
36d30 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
36d40 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20 20 20  ALMODE_WAL.     
36d50 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52    || eNew==PAGER
36d60 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45  _JOURNALMODE_QUE
36d70 52 59 0a 20 20 29 3b 0a 20 20 61 73 73 65 72 74  RY.  );.  assert
36d80 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
36d90 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20  pOp->p1<db->nDb 
36da0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
36db0 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a  readOnly==0 );..
36dc0 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b    pBt = db->aDb[
36dd0 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20  pOp->p1].pBt;.  
36de0 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33  pPager = sqlite3
36df0 42 74 72 65 65 50 61 67 65 72 28 70 42 74 29 3b  BtreePager(pBt);
36e00 0a 20 20 65 4f 6c 64 20 3d 20 73 71 6c 69 74 65  .  eOld = sqlite
36e10 33 50 61 67 65 72 47 65 74 4a 6f 75 72 6e 61 6c  3PagerGetJournal
36e20 4d 6f 64 65 28 70 50 61 67 65 72 29 3b 0a 20 20  Mode(pPager);.  
36e30 69 66 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f  if( eNew==PAGER_
36e40 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52  JOURNALMODE_QUER
36e50 59 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b  Y ) eNew = eOld;
36e60 0a 20 20 69 66 28 20 21 73 71 6c 69 74 65 33 50  .  if( !sqlite3P
36e70 61 67 65 72 4f 6b 54 6f 43 68 61 6e 67 65 4a 6f  agerOkToChangeJo
36e80 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72  urnalMode(pPager
36e90 29 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b  ) ) eNew = eOld;
36ea0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
36eb0 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 7a 46 69 6c  _OMIT_WAL.  zFil
36ec0 65 6e 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 50  ename = sqlite3P
36ed0 61 67 65 72 46 69 6c 65 6e 61 6d 65 28 70 50 61  agerFilename(pPa
36ee0 67 65 72 2c 20 31 29 3b 0a 0a 20 20 2f 2a 20 44  ger, 1);..  /* D
36ef0 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 61 20 74 72  o not allow a tr
36f00 61 6e 73 69 74 69 6f 6e 20 74 6f 20 6a 6f 75 72  ansition to jour
36f10 6e 61 6c 5f 6d 6f 64 65 3d 57 41 4c 20 66 6f 72  nal_mode=WAL for
36f20 20 61 20 64 61 74 61 62 61 73 65 0a 20 20 2a 2a   a database.  **
36f30 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 73 74   in temporary st
36f40 6f 72 61 67 65 20 6f 72 20 69 66 20 74 68 65 20  orage or if the 
36f50 56 46 53 20 64 6f 65 73 20 6e 6f 74 20 73 75 70  VFS does not sup
36f60 70 6f 72 74 20 73 68 61 72 65 64 20 6d 65 6d 6f  port shared memo
36f70 72 79 20 0a 20 20 2a 2f 0a 20 20 69 66 28 20 65  ry .  */.  if( e
36f80 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
36f90 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20 26 26  ALMODE_WAL.   &&
36fa0 20 28 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33   (sqlite3Strlen3
36fb0 30 28 7a 46 69 6c 65 6e 61 6d 65 29 3d 3d 30 20  0(zFilename)==0 
36fc0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65 6d            /* Tem
36fd0 70 20 66 69 6c 65 20 2a 2f 0a 20 20 20 20 20 20  p file */.      
36fe0 20 7c 7c 20 21 73 71 6c 69 74 65 33 50 61 67 65   || !sqlite3Page
36ff0 72 57 61 6c 53 75 70 70 6f 72 74 65 64 28 70 50  rWalSupported(pP
37000 61 67 65 72 29 29 20 20 20 2f 2a 20 4e 6f 20 73  ager))   /* No s
37010 68 61 72 65 64 2d 6d 65 6d 6f 72 79 20 73 75 70  hared-memory sup
37020 70 6f 72 74 20 2a 2f 0a 20 20 29 7b 0a 20 20 20  port */.  ){.   
37030 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20   eNew = eOld;.  
37040 7d 0a 0a 20 20 69 66 28 20 28 65 4e 65 77 21 3d  }..  if( (eNew!=
37050 65 4f 6c 64 29 0a 20 20 20 26 26 20 28 65 4f 6c  eOld).   && (eOl
37060 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  d==PAGER_JOURNAL
37070 4d 4f 44 45 5f 57 41 4c 20 7c 7c 20 65 4e 65 77  MODE_WAL || eNew
37080 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
37090 4f 44 45 5f 57 41 4c 29 0a 20 20 29 7b 0a 20 20  ODE_WAL).  ){.  
370a0 20 20 69 66 28 20 21 64 62 2d 3e 61 75 74 6f 43    if( !db->autoC
370b0 6f 6d 6d 69 74 20 7c 7c 20 64 62 2d 3e 6e 56 64  ommit || db->nVd
370c0 62 65 52 65 61 64 3e 31 20 29 7b 0a 20 20 20 20  beRead>1 ){.    
370d0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52    rc = SQLITE_ER
370e0 52 4f 52 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ROR;.      sqlit
370f0 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 0a 20  e3VdbeError(p,. 
37100 20 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74           "cannot
37110 20 63 68 61 6e 67 65 20 25 73 20 77 61 6c 20 6d   change %s wal m
37120 6f 64 65 20 66 72 6f 6d 20 77 69 74 68 69 6e 20  ode from within 
37130 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 2c 0a  a transaction",.
37140 20 20 20 20 20 20 20 20 20 20 28 65 4e 65 77 3d            (eNew=
37150 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
37160 44 45 5f 57 41 4c 20 3f 20 22 69 6e 74 6f 22 20  DE_WAL ? "into" 
37170 3a 20 22 6f 75 74 20 6f 66 22 29 0a 20 20 20 20  : "out of").    
37180 20 20 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20    );.      goto 
37190 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
371a0 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  or;.    }else{. 
371b0 0a 20 20 20 20 20 20 69 66 28 20 65 4f 6c 64 3d  .      if( eOld=
371c0 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
371d0 44 45 5f 57 41 4c 20 29 7b 0a 20 20 20 20 20 20  DE_WAL ){.      
371e0 20 20 2f 2a 20 49 66 20 6c 65 61 76 69 6e 67 20    /* If leaving 
371f0 57 41 4c 20 6d 6f 64 65 2c 20 63 6c 6f 73 65 20  WAL mode, close 
37200 74 68 65 20 6c 6f 67 20 66 69 6c 65 2e 20 49 66  the log file. If
37210 20 73 75 63 63 65 73 73 66 75 6c 2c 20 74 68 65   successful, the
37220 20 63 61 6c 6c 0a 20 20 20 20 20 20 20 20 2a 2a   call.        **
37230 20 74 6f 20 50 61 67 65 72 43 6c 6f 73 65 57 61   to PagerCloseWa
37240 6c 28 29 20 63 68 65 63 6b 70 6f 69 6e 74 73 20  l() checkpoints 
37250 61 6e 64 20 64 65 6c 65 74 65 73 20 74 68 65 20  and deletes the 
37260 77 72 69 74 65 2d 61 68 65 61 64 2d 6c 6f 67 20  write-ahead-log 
37270 0a 20 20 20 20 20 20 20 20 2a 2a 20 66 69 6c 65  .        ** file
37280 2e 20 41 6e 20 45 58 43 4c 55 53 49 56 45 20 6c  . An EXCLUSIVE l
37290 6f 63 6b 20 6d 61 79 20 73 74 69 6c 6c 20 62 65  ock may still be
372a0 20 68 65 6c 64 20 6f 6e 20 74 68 65 20 64 61 74   held on the dat
372b0 61 62 61 73 65 20 66 69 6c 65 20 0a 20 20 20 20  abase file .    
372c0 20 20 20 20 2a 2a 20 61 66 74 65 72 20 61 20 73      ** after a s
372d0 75 63 63 65 73 73 66 75 6c 20 72 65 74 75 72 6e  uccessful return
372e0 2e 20 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20  . .        */.  
372f0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
37300 65 33 50 61 67 65 72 43 6c 6f 73 65 57 61 6c 28  e3PagerCloseWal(
37310 70 50 61 67 65 72 2c 20 64 62 29 3b 0a 20 20 20  pPager, db);.   
37320 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
37330 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
37340 20 20 20 20 73 71 6c 69 74 65 33 50 61 67 65 72      sqlite3Pager
37350 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70  SetJournalMode(p
37360 50 61 67 65 72 2c 20 65 4e 65 77 29 3b 0a 20 20  Pager, eNew);.  
37370 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65        }.      }e
37380 6c 73 65 20 69 66 28 20 65 4f 6c 64 3d 3d 50 41  lse if( eOld==PA
37390 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
373a0 4d 45 4d 4f 52 59 20 29 7b 0a 20 20 20 20 20 20  MEMORY ){.      
373b0 20 20 2f 2a 20 43 61 6e 6e 6f 74 20 74 72 61 6e    /* Cannot tran
373c0 73 69 74 69 6f 6e 20 64 69 72 65 63 74 6c 79 20  sition directly 
373d0 66 72 6f 6d 20 4d 45 4d 4f 52 59 20 74 6f 20 57  from MEMORY to W
373e0 41 4c 2e 20 20 55 73 65 20 6d 6f 64 65 20 4f 46  AL.  Use mode OF
373f0 46 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 73 20  F.        ** as 
37400 61 6e 20 69 6e 74 65 72 6d 65 64 69 61 74 65 20  an intermediate 
37410 2a 2f 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  */.        sqlit
37420 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61  e3PagerSetJourna
37430 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 50 41  lMode(pPager, PA
37440 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
37450 4f 46 46 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  OFF);.      }.  
37460 0a 20 20 20 20 20 20 2f 2a 20 4f 70 65 6e 20 61  .      /* Open a
37470 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20   transaction on 
37480 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
37490 65 2e 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66  e. Regardless of
374a0 20 74 68 65 20 6a 6f 75 72 6e 61 6c 0a 20 20 20   the journal.   
374b0 20 20 20 2a 2a 20 6d 6f 64 65 2c 20 74 68 69 73     ** mode, this
374c0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c 77   transaction alw
374d0 61 79 73 20 75 73 65 73 20 61 20 72 6f 6c 6c 62  ays uses a rollb
374e0 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 0a 20 20 20  ack journal..   
374f0 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65     */.      asse
37500 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65  rt( sqlite3Btree
37510 49 73 49 6e 54 72 61 6e 73 28 70 42 74 29 3d 3d  IsInTrans(pBt)==
37520 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  0 );.      if( r
37530 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
37540 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
37550 69 74 65 33 42 74 72 65 65 53 65 74 56 65 72 73  ite3BtreeSetVers
37560 69 6f 6e 28 70 42 74 2c 20 28 65 4e 65 77 3d 3d  ion(pBt, (eNew==
37570 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
37580 45 5f 57 41 4c 20 3f 20 32 20 3a 20 31 29 29 3b  E_WAL ? 2 : 1));
37590 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
375a0 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 69 66 6e   }.#endif /* ifn
375b0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
375c0 57 41 4c 20 2a 2f 0a 0a 20 20 69 66 28 20 72 63  WAL */..  if( rc
375d0 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a   ) eNew = eOld;.
375e0 20 20 65 4e 65 77 20 3d 20 73 71 6c 69 74 65 33    eNew = sqlite3
375f0 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d  PagerSetJournalM
37600 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4e 65 77  ode(pPager, eNew
37610 29 3b 0a 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67  );..  pOut->flag
37620 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f  s = MEM_Str|MEM_
37630 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b  Static|MEM_Term;
37640 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 28 63 68  .  pOut->z = (ch
37650 61 72 20 2a 29 73 71 6c 69 74 65 33 4a 6f 75 72  ar *)sqlite3Jour
37660 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 65 4e 65 77  nalModename(eNew
37670 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 73  );.  pOut->n = s
37680 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 70  qlite3Strlen30(p
37690 4f 75 74 2d 3e 7a 29 3b 0a 20 20 70 4f 75 74 2d  Out->z);.  pOut-
376a0 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54  >enc = SQLITE_UT
376b0 46 38 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  F8;.  sqlite3Vdb
376c0 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
376d0 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  pOut, encoding);
376e0 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
376f0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
37700 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b  ror;.  break;.};
37710 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
37720 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 20 2a 2f  E_OMIT_PRAGMA */
37730 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
37740 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 41 43 55 55  QLITE_OMIT_VACUU
37750 4d 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  M) && !defined(S
37760 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 54 54 41 43  QLITE_OMIT_ATTAC
37770 48 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61  H)./* Opcode: Va
37780 63 75 75 6d 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  cuum P1 * * * *.
37790 2a 2a 0a 2a 2a 20 56 61 63 75 75 6d 20 74 68 65  **.** Vacuum the
377a0 20 65 6e 74 69 72 65 20 64 61 74 61 62 61 73 65   entire database
377b0 20 50 31 2e 20 20 50 31 20 69 73 20 30 20 66 6f   P1.  P1 is 0 fo
377c0 72 20 22 6d 61 69 6e 22 2c 20 61 6e 64 20 32 20  r "main", and 2 
377d0 6f 72 20 6d 6f 72 65 0a 2a 2a 20 66 6f 72 20 61  or more.** for a
377e0 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  n attached datab
377f0 61 73 65 2e 20 20 54 68 65 20 22 74 65 6d 70 22  ase.  The "temp"
37800 20 64 61 74 61 62 61 73 65 20 6d 61 79 20 6e 6f   database may no
37810 74 20 62 65 20 76 61 63 75 75 6d 65 64 2e 0a 2a  t be vacuumed..*
37820 2f 0a 63 61 73 65 20 4f 50 5f 56 61 63 75 75 6d  /.case OP_Vacuum
37830 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 2d  : {.  assert( p-
37840 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
37850 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 52 75    rc = sqlite3Ru
37860 6e 56 61 63 75 75 6d 28 26 70 2d 3e 7a 45 72 72  nVacuum(&p->zErr
37870 4d 73 67 2c 20 64 62 2c 20 70 4f 70 2d 3e 70 31  Msg, db, pOp->p1
37880 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  );.  if( rc ) go
37890 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
378a0 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a  error;.  break;.
378b0 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 21 64  }.#endif..#if !d
378c0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
378d0 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 29 0a 2f  IT_AUTOVACUUM)./
378e0 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 63 72 56 61  * Opcode: IncrVa
378f0 63 75 75 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a  cuum P1 P2 * * *
37900 0a 2a 2a 0a 2a 2a 20 50 65 72 66 6f 72 6d 20 61  .**.** Perform a
37910 20 73 69 6e 67 6c 65 20 73 74 65 70 20 6f 66 20   single step of 
37920 74 68 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20  the incremental 
37930 76 61 63 75 75 6d 20 70 72 6f 63 65 64 75 72 65  vacuum procedure
37940 20 6f 6e 0a 2a 2a 20 74 68 65 20 50 31 20 64 61   on.** the P1 da
37950 74 61 62 61 73 65 2e 20 49 66 20 74 68 65 20 76  tabase. If the v
37960 61 63 75 75 6d 20 68 61 73 20 66 69 6e 69 73 68  acuum has finish
37970 65 64 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74  ed, jump to inst
37980 72 75 63 74 69 6f 6e 0a 2a 2a 20 50 32 2e 20 4f  ruction.** P2. O
37990 74 68 65 72 77 69 73 65 2c 20 66 61 6c 6c 20 74  therwise, fall t
379a0 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
379b0 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  xt instruction..
379c0 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 63 72 56  */.case OP_IncrV
379d0 61 63 75 75 6d 3a 20 7b 20 20 20 20 20 20 20 20  acuum: {        
379e0 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 42 74 72  /* jump */.  Btr
379f0 65 65 20 2a 70 42 74 3b 0a 0a 20 20 61 73 73 65  ee *pBt;..  asse
37a00 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
37a10 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
37a20 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44  b );.  assert( D
37a30 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72  bMaskTest(p->btr
37a40 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29  eeMask, pOp->p1)
37a50 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
37a60 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
37a70 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b    pBt = db->aDb[
37a80 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20  pOp->p1].pBt;.  
37a90 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
37aa0 65 49 6e 63 72 56 61 63 75 75 6d 28 70 42 74 29  eIncrVacuum(pBt)
37ab0 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
37ac0 6b 65 6e 28 72 63 3d 3d 53 51 4c 49 54 45 5f 44  ken(rc==SQLITE_D
37ad0 4f 4e 45 2c 32 29 3b 0a 20 20 69 66 28 20 72 63  ONE,2);.  if( rc
37ae0 20 29 7b 0a 20 20 20 20 69 66 28 20 72 63 21 3d   ){.    if( rc!=
37af0 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 20 67 6f  SQLITE_DONE ) go
37b00 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
37b10 65 72 72 6f 72 3b 0a 20 20 20 20 72 63 20 3d 20  error;.    rc = 
37b20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 67  SQLITE_OK;.    g
37b30 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
37b40 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
37b50 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65  endif../* Opcode
37b60 3a 20 45 78 70 69 72 65 20 50 31 20 50 32 20 2a  : Expire P1 P2 *
37b70 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 61 75 73 65   * *.**.** Cause
37b80 20 70 72 65 63 6f 6d 70 69 6c 65 64 20 73 74 61   precompiled sta
37b90 74 65 6d 65 6e 74 73 20 74 6f 20 65 78 70 69 72  tements to expir
37ba0 65 2e 20 20 57 68 65 6e 20 61 6e 20 65 78 70 69  e.  When an expi
37bb0 72 65 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a  red statement.**
37bc0 20 69 73 20 65 78 65 63 75 74 65 64 20 75 73 69   is executed usi
37bd0 6e 67 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  ng sqlite3_step(
37be0 29 20 69 74 20 77 69 6c 6c 20 65 69 74 68 65 72  ) it will either
37bf0 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a 2a   automatically.*
37c00 2a 20 72 65 70 72 65 70 61 72 65 20 69 74 73 65  * reprepare itse
37c10 6c 66 20 28 69 66 20 69 74 20 77 61 73 20 6f 72  lf (if it was or
37c20 69 67 69 6e 61 6c 6c 79 20 63 72 65 61 74 65 64  iginally created
37c30 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 70   using sqlite3_p
37c40 72 65 70 61 72 65 5f 76 32 28 29 29 0a 2a 2a 20  repare_v2()).** 
37c50 6f 72 20 69 74 20 77 69 6c 6c 20 66 61 69 6c 20  or it will fail 
37c60 77 69 74 68 20 53 51 4c 49 54 45 5f 53 43 48 45  with SQLITE_SCHE
37c70 4d 41 2e 0a 2a 2a 20 0a 2a 2a 20 49 66 20 50 31  MA..** .** If P1
37c80 20 69 73 20 30 2c 20 74 68 65 6e 20 61 6c 6c 20   is 0, then all 
37c90 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 62  SQL statements b
37ca0 65 63 6f 6d 65 20 65 78 70 69 72 65 64 2e 20 49  ecome expired. I
37cb0 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P1 is non-zero
37cc0 2c 0a 2a 2a 20 74 68 65 6e 20 6f 6e 6c 79 20 74  ,.** then only t
37cd0 68 65 20 63 75 72 72 65 6e 74 6c 79 20 65 78 65  he currently exe
37ce0 63 75 74 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  cuting statement
37cf0 20 69 73 20 65 78 70 69 72 65 64 2e 0a 2a 2a 0a   is expired..**.
37d00 2a 2a 20 49 66 20 50 32 20 69 73 20 30 2c 20 74  ** If P2 is 0, t
37d10 68 65 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  hen SQL statemen
37d20 74 73 20 61 72 65 20 65 78 70 69 72 65 64 20 69  ts are expired i
37d30 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20 49 66 20  mmediately.  If 
37d40 50 32 20 69 73 20 31 2c 0a 2a 2a 20 74 68 65 6e  P2 is 1,.** then
37d50 20 72 75 6e 6e 69 6e 67 20 53 51 4c 20 73 74 61   running SQL sta
37d60 74 65 6d 65 6e 74 73 20 61 72 65 20 61 6c 6c 6f  tements are allo
37d70 77 65 64 20 74 6f 20 63 6f 6e 74 69 6e 75 65 20  wed to continue 
37d80 74 6f 20 72 75 6e 20 74 6f 20 63 6f 6d 70 6c 65  to run to comple
37d90 74 69 6f 6e 2e 0a 2a 2a 20 54 68 65 20 50 32 3d  tion..** The P2=
37da0 3d 31 20 63 61 73 65 20 6f 63 63 75 72 73 20 77  =1 case occurs w
37db0 68 65 6e 20 61 20 43 52 45 41 54 45 20 49 4e 44  hen a CREATE IND
37dc0 45 58 20 6f 72 20 73 69 6d 69 6c 61 72 20 73 63  EX or similar sc
37dd0 68 65 6d 61 20 63 68 61 6e 67 65 20 68 61 70 70  hema change happ
37de0 65 6e 73 0a 2a 2a 20 74 68 61 74 20 6d 69 67 68  ens.** that migh
37df0 74 20 68 65 6c 70 20 74 68 65 20 73 74 61 74 65  t help the state
37e00 6d 65 6e 74 20 72 75 6e 20 66 61 73 74 65 72 20  ment run faster 
37e10 62 75 74 20 77 68 69 63 68 20 64 6f 65 73 20 6e  but which does n
37e20 6f 74 20 61 66 66 65 63 74 20 74 68 65 0a 2a 2a  ot affect the.**
37e30 20 63 6f 72 72 65 63 74 6e 65 73 73 20 6f 66 20   correctness of 
37e40 6f 70 65 72 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  operation..*/.ca
37e50 73 65 20 4f 50 5f 45 78 70 69 72 65 3a 20 7b 0a  se OP_Expire: {.
37e60 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
37e70 32 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d  2==0 || pOp->p2=
37e80 3d 31 20 29 3b 0a 20 20 69 66 28 20 21 70 4f 70  =1 );.  if( !pOp
37e90 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73 71 6c 69  ->p1 ){.    sqli
37ea0 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65  te3ExpirePrepare
37eb0 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62 2c 20  dStatements(db, 
37ec0 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 7d 65 6c 73  pOp->p2);.  }els
37ed0 65 7b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65  e{.    p->expire
37ee0 64 20 3d 20 70 4f 70 2d 3e 70 32 2b 31 3b 0a 20  d = pOp->p2+1;. 
37ef0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23   }.  break;.}..#
37f00 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
37f10 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a  IT_SHARED_CACHE.
37f20 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 61 62 6c 65  /* Opcode: Table
37f30 4c 6f 63 6b 20 50 31 20 50 32 20 50 33 20 50 34  Lock P1 P2 P3 P4
37f40 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
37f50 69 44 62 3d 50 31 20 72 6f 6f 74 3d 50 32 20 77  iDb=P1 root=P2 w
37f60 72 69 74 65 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 62  rite=P3.**.** Ob
37f70 74 61 69 6e 20 61 20 6c 6f 63 6b 20 6f 6e 20 61  tain a lock on a
37f80 20 70 61 72 74 69 63 75 6c 61 72 20 74 61 62 6c   particular tabl
37f90 65 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  e. This instruct
37fa0 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 73 65 64  ion is only used
37fb0 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 73 68 61   when.** the sha
37fc0 72 65 64 2d 63 61 63 68 65 20 66 65 61 74 75 72  red-cache featur
37fd0 65 20 69 73 20 65 6e 61 62 6c 65 64 2e 20 0a 2a  e is enabled. .*
37fe0 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69  *.** P1 is the i
37ff0 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61  ndex of the data
38000 62 61 73 65 20 69 6e 20 73 71 6c 69 74 65 33 2e  base in sqlite3.
38010 61 44 62 5b 5d 20 6f 66 20 74 68 65 20 64 61 74  aDb[] of the dat
38020 61 62 61 73 65 0a 2a 2a 20 6f 6e 20 77 68 69 63  abase.** on whic
38030 68 20 74 68 65 20 6c 6f 63 6b 20 69 73 20 61 63  h the lock is ac
38040 71 75 69 72 65 64 2e 20 20 41 20 72 65 61 64 6c  quired.  A readl
38050 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e 65 64 20  ock is obtained 
38060 69 66 20 50 33 3d 3d 30 20 6f 72 0a 2a 2a 20 61  if P3==0 or.** a
38070 20 77 72 69 74 65 20 6c 6f 63 6b 20 69 66 20 50   write lock if P
38080 33 3d 3d 31 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 63  3==1..**.** P2 c
38090 6f 6e 74 61 69 6e 73 20 74 68 65 20 72 6f 6f 74  ontains the root
380a0 2d 70 61 67 65 20 6f 66 20 74 68 65 20 74 61 62  -page of the tab
380b0 6c 65 20 74 6f 20 6c 6f 63 6b 2e 0a 2a 2a 0a 2a  le to lock..**.*
380c0 2a 20 50 34 20 63 6f 6e 74 61 69 6e 73 20 61 20  * P4 contains a 
380d0 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6e  pointer to the n
380e0 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
380f0 20 62 65 69 6e 67 20 6c 6f 63 6b 65 64 2e 20 54   being locked. T
38100 68 69 73 20 69 73 20 6f 6e 6c 79 0a 2a 2a 20 75  his is only.** u
38110 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20  sed to generate 
38120 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  an error message
38130 20 69 66 20 74 68 65 20 6c 6f 63 6b 20 63 61 6e   if the lock can
38140 6e 6f 74 20 62 65 20 6f 62 74 61 69 6e 65 64 2e  not be obtained.
38150 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 61 62 6c  .*/.case OP_Tabl
38160 65 4c 6f 63 6b 3a 20 7b 0a 20 20 75 38 20 69 73  eLock: {.  u8 is
38170 57 72 69 74 65 4c 6f 63 6b 20 3d 20 28 75 38 29  WriteLock = (u8)
38180 70 4f 70 2d 3e 70 33 3b 0a 20 20 69 66 28 20 69  pOp->p3;.  if( i
38190 73 57 72 69 74 65 4c 6f 63 6b 20 7c 7c 20 30 3d  sWriteLock || 0=
381a0 3d 28 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49  =(db->flags&SQLI
381b0 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 29  TE_ReadUncommit)
381c0 20 29 7b 0a 20 20 20 20 69 6e 74 20 70 31 20 3d   ){.    int p1 =
381d0 20 70 4f 70 2d 3e 70 31 3b 20 0a 20 20 20 20 61   pOp->p1; .    a
381e0 73 73 65 72 74 28 20 70 31 3e 3d 30 20 26 26 20  ssert( p1>=0 && 
381f0 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
38200 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b    assert( DbMask
38210 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73  Test(p->btreeMas
38220 6b 2c 20 70 31 29 20 29 3b 0a 20 20 20 20 61 73  k, p1) );.    as
38230 73 65 72 74 28 20 69 73 57 72 69 74 65 4c 6f 63  sert( isWriteLoc
38240 6b 3d 3d 30 20 7c 7c 20 69 73 57 72 69 74 65 4c  k==0 || isWriteL
38250 6f 63 6b 3d 3d 31 20 29 3b 0a 20 20 20 20 72 63  ock==1 );.    rc
38260 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c   = sqlite3BtreeL
38270 6f 63 6b 54 61 62 6c 65 28 64 62 2d 3e 61 44 62  ockTable(db->aDb
38280 5b 70 31 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70  [p1].pBt, pOp->p
38290 32 2c 20 69 73 57 72 69 74 65 4c 6f 63 6b 29 3b  2, isWriteLock);
382a0 0a 20 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20  .    if( rc ){. 
382b0 20 20 20 20 20 69 66 28 20 28 72 63 26 30 78 46       if( (rc&0xF
382c0 46 29 3d 3d 53 51 4c 49 54 45 5f 4c 4f 43 4b 45  F)==SQLITE_LOCKE
382d0 44 20 29 7b 0a 20 20 20 20 20 20 20 20 63 6f 6e  D ){.        c