/ Hex Artifact Content
Login

Artifact c21ff59ffcd6e3e208d1e9525f58ae1fc373c8f4:


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 4f 4d 49  fined(SQLITE_OMI
0fa0: 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 29 0a  T_BUILTIN_TEST).
0fb0: 23 20 64 65 66 69 6e 65 20 55 50 44 41 54 45 5f  # define UPDATE_
0fc0: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 50 29 20  MAX_BLOBSIZE(P) 
0fd0: 20 75 70 64 61 74 65 4d 61 78 42 6c 6f 62 73 69   updateMaxBlobsi
0fe0: 7a 65 28 50 29 0a 23 65 6c 73 65 0a 23 20 64 65  ze(P).#else.# de
0ff0: 66 69 6e 65 20 55 50 44 41 54 45 5f 4d 41 58 5f  fine UPDATE_MAX_
1000: 42 4c 4f 42 53 49 5a 45 28 50 29 0a 23 65 6e 64  BLOBSIZE(P).#end
1010: 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65  if../*.** Invoke
1020: 20 74 68 65 20 56 44 42 45 20 63 6f 76 65 72 61   the VDBE covera
1030: 67 65 20 63 61 6c 6c 62 61 63 6b 2c 20 69 66 20  ge callback, if 
1040: 74 68 61 74 20 63 61 6c 6c 62 61 63 6b 20 69 73  that callback is
1050: 20 64 65 66 69 6e 65 64 2e 20 20 54 68 69 73 0a   defined.  This.
1060: 2a 2a 20 66 65 61 74 75 72 65 20 69 73 20 75 73  ** feature is us
1070: 65 64 20 66 6f 72 20 74 65 73 74 20 73 75 69 74  ed for test suit
1080: 65 20 76 61 6c 69 64 61 74 69 6f 6e 20 6f 6e 6c  e validation onl
1090: 79 20 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 61  y and does not a
10a0: 70 70 65 61 72 20 61 6e 0a 2a 2a 20 70 72 6f 64  ppear an.** prod
10b0: 75 63 74 69 6f 6e 20 62 75 69 6c 64 73 2e 0a 2a  uction builds..*
10c0: 2a 0a 2a 2a 20 4d 20 69 73 20 61 6e 20 69 6e 74  *.** M is an int
10d0: 65 67 65 72 2c 20 32 20 6f 72 20 33 2c 20 74 68  eger, 2 or 3, th
10e0: 61 74 20 69 6e 64 69 63 65 73 20 68 6f 77 20 6d  at indices how m
10f0: 61 6e 79 20 64 69 66 66 65 72 65 6e 74 20 77 61  any different wa
1100: 79 73 20 74 68 65 0a 2a 2a 20 62 72 61 6e 63 68  ys the.** branch
1110: 20 63 61 6e 20 67 6f 2e 20 20 49 74 20 69 73 20   can go.  It is 
1120: 75 73 75 61 6c 6c 79 20 32 2e 20 20 22 49 22 20  usually 2.  "I" 
1130: 69 73 20 74 68 65 20 64 69 72 65 63 74 69 6f 6e  is the direction
1140: 20 74 68 65 20 62 72 61 6e 63 68 0a 2a 2a 20 67   the branch.** g
1150: 6f 65 73 2e 20 20 30 20 6d 65 61 6e 73 20 66 61  oes.  0 means fa
1160: 6c 6c 73 20 74 68 72 6f 75 67 68 2e 20 20 31 20  lls through.  1 
1170: 6d 65 61 6e 73 20 62 72 61 6e 63 68 20 69 73 20  means branch is 
1180: 74 61 6b 65 6e 2e 20 20 32 20 6d 65 61 6e 73 20  taken.  2 means 
1190: 74 68 65 0a 2a 2a 20 73 65 63 6f 6e 64 20 61 6c  the.** second al
11a0: 74 65 72 6e 61 74 69 76 65 20 62 72 61 6e 63 68  ternative branch
11b0: 20 69 73 20 74 61 6b 65 6e 2e 0a 2a 2a 0a 2a 2a   is taken..**.**
11c0: 20 69 53 72 63 4c 69 6e 65 20 69 73 20 74 68 65   iSrcLine is the
11d0: 20 73 6f 75 72 63 65 20 63 6f 64 65 20 6c 69 6e   source code lin
11e0: 65 20 28 66 72 6f 6d 20 74 68 65 20 5f 5f 4c 49  e (from the __LI
11f0: 4e 45 5f 5f 20 6d 61 63 72 6f 29 20 74 68 61 74  NE__ macro) that
1200: 0a 2a 2a 20 67 65 6e 65 72 61 74 65 64 20 74 68  .** generated th
1210: 65 20 56 44 42 45 20 69 6e 73 74 72 75 63 74 69  e VDBE instructi
1220: 6f 6e 2e 20 20 54 68 69 73 20 69 6e 73 74 72 75  on.  This instru
1230: 6d 65 6e 74 61 74 69 6f 6e 20 61 73 73 75 6d 65  mentation assume
1240: 73 20 74 68 61 74 20 61 6c 6c 0a 2a 2a 20 73 6f  s that all.** so
1250: 75 72 63 65 20 63 6f 64 65 20 69 73 20 69 6e 20  urce code is in 
1260: 61 20 73 69 6e 67 6c 65 20 66 69 6c 65 20 28 74  a single file (t
1270: 68 65 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 29  he amalgamation)
1280: 2e 20 20 53 70 65 63 69 61 6c 20 76 61 6c 75 65  .  Special value
1290: 73 20 31 0a 2a 2a 20 61 6e 64 20 32 20 66 6f 72  s 1.** and 2 for
12a0: 20 74 68 65 20 69 53 72 63 4c 69 6e 65 20 70 61   the iSrcLine pa
12b0: 72 61 6d 65 74 65 72 20 6d 65 61 6e 20 74 68 61  rameter mean tha
12c0: 74 20 74 68 69 73 20 70 61 72 74 69 63 75 6c 61  t this particula
12d0: 72 20 62 72 61 6e 63 68 20 69 73 0a 2a 2a 20 61  r branch is.** a
12e0: 6c 77 61 79 73 20 74 61 6b 65 6e 20 6f 72 20 6e  lways taken or n
12f0: 65 76 65 72 20 74 61 6b 65 6e 2c 20 72 65 73 70  ever taken, resp
1300: 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 23 69 66  ectively..*/.#if
1310: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
1320: 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45 29 0a  _VDBE_COVERAGE).
1330: 23 20 64 65 66 69 6e 65 20 56 64 62 65 42 72 61  # define VdbeBra
1340: 6e 63 68 54 61 6b 65 6e 28 49 2c 4d 29 0a 23 65  nchTaken(I,M).#e
1350: 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 56 64 62  lse.# define Vdb
1360: 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 49 2c 4d  eBranchTaken(I,M
1370: 29 20 76 64 62 65 54 61 6b 65 42 72 61 6e 63 68  ) vdbeTakeBranch
1380: 28 70 4f 70 2d 3e 69 53 72 63 4c 69 6e 65 2c 49  (pOp->iSrcLine,I
1390: 2c 4d 29 0a 20 20 73 74 61 74 69 63 20 76 6f 69  ,M).  static voi
13a0: 64 20 76 64 62 65 54 61 6b 65 42 72 61 6e 63 68  d vdbeTakeBranch
13b0: 28 69 6e 74 20 69 53 72 63 4c 69 6e 65 2c 20 75  (int iSrcLine, u
13c0: 38 20 49 2c 20 75 38 20 4d 29 7b 0a 20 20 20 20  8 I, u8 M){.    
13d0: 69 66 28 20 69 53 72 63 4c 69 6e 65 3c 3d 32 20  if( iSrcLine<=2 
13e0: 26 26 20 41 4c 57 41 59 53 28 69 53 72 63 4c 69  && ALWAYS(iSrcLi
13f0: 6e 65 3e 30 29 20 29 7b 0a 20 20 20 20 20 20 4d  ne>0) ){.      M
1400: 20 3d 20 69 53 72 63 4c 69 6e 65 3b 0a 20 20 20   = iSrcLine;.   
1410: 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 65     /* Assert the
1420: 20 74 72 75 74 68 20 6f 66 20 56 64 62 65 43 6f   truth of VdbeCo
1430: 76 65 72 61 67 65 41 6c 77 61 79 73 54 61 6b 65  verageAlwaysTake
1440: 6e 28 29 20 61 6e 64 20 0a 20 20 20 20 20 20 2a  n() and .      *
1450: 2a 20 56 64 62 65 43 6f 76 65 72 61 67 65 4e 65  * VdbeCoverageNe
1460: 76 65 72 54 61 6b 65 6e 28 29 20 2a 2f 0a 20 20  verTaken() */.  
1470: 20 20 20 20 61 73 73 65 72 74 28 20 28 4d 20 26      assert( (M &
1480: 20 49 29 3d 3d 49 20 29 3b 0a 20 20 20 20 7d 65   I)==I );.    }e
1490: 6c 73 65 7b 0a 20 20 20 20 20 20 69 66 28 20 73  lse{.      if( s
14a0: 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
14b0: 69 67 2e 78 56 64 62 65 42 72 61 6e 63 68 3d 3d  ig.xVdbeBranch==
14c0: 30 20 29 20 72 65 74 75 72 6e 3b 20 20 2f 2a 4e  0 ) return;  /*N
14d0: 4f 5f 54 45 53 54 2a 2f 0a 20 20 20 20 20 20 73  O_TEST*/.      s
14e0: 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
14f0: 69 67 2e 78 56 64 62 65 42 72 61 6e 63 68 28 73  ig.xVdbeBranch(s
1500: 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
1510: 69 67 2e 70 56 64 62 65 42 72 61 6e 63 68 41 72  ig.pVdbeBranchAr
1520: 67 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  g,.             
1530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1540: 20 20 20 20 20 20 20 20 20 69 53 72 63 4c 69 6e           iSrcLin
1550: 65 2c 49 2c 4d 29 3b 0a 20 20 20 20 7d 0a 20 20  e,I,M);.    }.  
1560: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
1570: 43 6f 6e 76 65 72 74 20 74 68 65 20 67 69 76 65  Convert the give
1580: 6e 20 72 65 67 69 73 74 65 72 20 69 6e 74 6f 20  n register into 
1590: 61 20 73 74 72 69 6e 67 20 69 66 20 69 74 20 69  a string if it i
15a0: 73 6e 27 74 20 6f 6e 65 0a 2a 2a 20 61 6c 72 65  sn't one.** alre
15b0: 61 64 79 2e 20 52 65 74 75 72 6e 20 6e 6f 6e 2d  ady. Return non-
15c0: 7a 65 72 6f 20 69 66 20 61 20 6d 61 6c 6c 6f 63  zero if a malloc
15d0: 28 29 20 66 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65  () fails..*/.#de
15e0: 66 69 6e 65 20 53 74 72 69 6e 67 69 66 79 28 50  fine Stringify(P
15f0: 2c 20 65 6e 63 29 20 5c 0a 20 20 20 69 66 28 28  , enc) \.   if((
1600: 28 50 29 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f  (P)->flags&(MEM_
1610: 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d  Str|MEM_Blob))==
1620: 30 20 26 26 20 73 71 6c 69 74 65 33 56 64 62 65  0 && sqlite3Vdbe
1630: 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 50 2c 65  MemStringify(P,e
1640: 6e 63 2c 30 29 29 20 5c 0a 20 20 20 20 20 7b 20  nc,0)) \.     { 
1650: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 20 7d 0a 0a  goto no_mem; }..
1660: 2f 2a 0a 2a 2a 20 41 6e 20 65 70 68 65 6d 65 72  /*.** An ephemer
1670: 61 6c 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20  al string value 
1680: 28 73 69 67 6e 69 66 69 65 64 20 62 79 20 74 68  (signified by th
1690: 65 20 4d 45 4d 5f 45 70 68 65 6d 20 66 6c 61 67  e MEM_Ephem flag
16a0: 29 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20 61 20  ) contains.** a 
16b0: 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 64 79 6e  pointer to a dyn
16c0: 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74  amically allocat
16d0: 65 64 20 73 74 72 69 6e 67 20 77 68 65 72 65 20  ed string where 
16e0: 73 6f 6d 65 20 6f 74 68 65 72 20 65 6e 74 69 74  some other entit
16f0: 79 0a 2a 2a 20 69 73 20 72 65 73 70 6f 6e 73 69  y.** is responsi
1700: 62 6c 65 20 66 6f 72 20 64 65 61 6c 6c 6f 63 61  ble for dealloca
1710: 74 69 6e 67 20 74 68 61 74 20 73 74 72 69 6e 67  ting that string
1720: 2e 20 20 42 65 63 61 75 73 65 20 74 68 65 20 72  .  Because the r
1730: 65 67 69 73 74 65 72 0a 2a 2a 20 64 6f 65 73 20  egister.** does 
1740: 6e 6f 74 20 63 6f 6e 74 72 6f 6c 20 74 68 65 20  not control the 
1750: 73 74 72 69 6e 67 2c 20 69 74 20 6d 69 67 68 74  string, it might
1760: 20 62 65 20 64 65 6c 65 74 65 64 20 77 69 74 68   be deleted with
1770: 6f 75 74 20 74 68 65 20 72 65 67 69 73 74 65 72  out the register
1780: 0a 2a 2a 20 6b 6e 6f 77 69 6e 67 20 69 74 2e 0a  .** knowing it..
1790: 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69  **.** This routi
17a0: 6e 65 20 63 6f 6e 76 65 72 74 73 20 61 6e 20 65  ne converts an e
17b0: 70 68 65 6d 65 72 61 6c 20 73 74 72 69 6e 67 20  phemeral string 
17c0: 69 6e 74 6f 20 61 20 64 79 6e 61 6d 69 63 61 6c  into a dynamical
17d0: 6c 79 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20  ly allocated.** 
17e0: 73 74 72 69 6e 67 20 74 68 61 74 20 74 68 65 20  string that the 
17f0: 72 65 67 69 73 74 65 72 20 69 74 73 65 6c 66 20  register itself 
1800: 63 6f 6e 74 72 6f 6c 73 2e 20 20 49 6e 20 6f 74  controls.  In ot
1810: 68 65 72 20 77 6f 72 64 73 2c 20 69 74 0a 2a 2a  her words, it.**
1820: 20 63 6f 6e 76 65 72 74 73 20 61 6e 20 4d 45 4d   converts an MEM
1830: 5f 45 70 68 65 6d 20 73 74 72 69 6e 67 20 69 6e  _Ephem string in
1840: 74 6f 20 61 20 73 74 72 69 6e 67 20 77 69 74 68  to a string with
1850: 20 50 2e 7a 3d 3d 50 2e 7a 4d 61 6c 6c 6f 63 2e   P.z==P.zMalloc.
1860: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 65 65 70  .*/.#define Deep
1870: 68 65 6d 65 72 61 6c 69 7a 65 28 50 29 20 5c 0a  hemeralize(P) \.
1880: 20 20 20 69 66 28 20 28 28 50 29 2d 3e 66 6c 61     if( ((P)->fla
1890: 67 73 26 4d 45 4d 5f 45 70 68 65 6d 29 21 3d 30  gs&MEM_Ephem)!=0
18a0: 20 5c 0a 20 20 20 20 20 20 20 26 26 20 73 71 6c   \.       && sql
18b0: 69 74 65 33 56 64 62 65 4d 65 6d 4d 61 6b 65 57  ite3VdbeMemMakeW
18c0: 72 69 74 65 61 62 6c 65 28 50 29 20 29 7b 20 67  riteable(P) ){ g
18d0: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 7d 0a 0a 2f 2a  oto no_mem;}../*
18e0: 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20   Return true if 
18f0: 74 68 65 20 63 75 72 73 6f 72 20 77 61 73 20 6f  the cursor was o
1900: 70 65 6e 65 64 20 75 73 69 6e 67 20 74 68 65 20  pened using the 
1910: 4f 50 5f 4f 70 65 6e 53 6f 72 74 65 72 20 6f 70  OP_OpenSorter op
1920: 63 6f 64 65 2e 20 2a 2f 0a 23 64 65 66 69 6e 65  code. */.#define
1930: 20 69 73 53 6f 72 74 65 72 28 78 29 20 28 28 78   isSorter(x) ((x
1940: 29 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  )->eCurType==CUR
1950: 54 59 50 45 5f 53 4f 52 54 45 52 29 0a 0a 2f 2a  TYPE_SORTER)../*
1960: 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 56 64 62  .** Allocate Vdb
1970: 65 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 69  eCursor number i
1980: 43 75 72 2e 20 20 52 65 74 75 72 6e 20 61 20 70  Cur.  Return a p
1990: 6f 69 6e 74 65 72 20 74 6f 20 69 74 2e 20 20 52  ointer to it.  R
19a0: 65 74 75 72 6e 20 4e 55 4c 4c 0a 2a 2a 20 69 66  eturn NULL.** if
19b0: 20 77 65 20 72 75 6e 20 6f 75 74 20 6f 66 20 6d   we run out of m
19c0: 65 6d 6f 72 79 2e 0a 2a 2f 0a 73 74 61 74 69 63  emory..*/.static
19d0: 20 56 64 62 65 43 75 72 73 6f 72 20 2a 61 6c 6c   VdbeCursor *all
19e0: 6f 63 61 74 65 43 75 72 73 6f 72 28 0a 20 20 56  ocateCursor(.  V
19f0: 64 62 65 20 2a 70 2c 20 20 20 20 20 20 20 20 20  dbe *p,         
1a00: 20 20 20 20 20 2f 2a 20 54 68 65 20 76 69 72 74       /* The virt
1a10: 75 61 6c 20 6d 61 63 68 69 6e 65 20 2a 2f 0a 20  ual machine */. 
1a20: 20 69 6e 74 20 69 43 75 72 2c 20 20 20 20 20 20   int iCur,      
1a30: 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
1a40: 6f 66 20 74 68 65 20 6e 65 77 20 56 64 62 65 43  of the new VdbeC
1a50: 75 72 73 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  ursor */.  int n
1a60: 46 69 65 6c 64 2c 20 20 20 20 20 20 20 20 20 20  Field,          
1a70: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66 69   /* Number of fi
1a80: 65 6c 64 73 20 69 6e 20 74 68 65 20 74 61 62 6c  elds in the tabl
1a90: 65 20 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20  e or index */.  
1aa0: 69 6e 74 20 69 44 62 2c 20 20 20 20 20 20 20 20  int iDb,        
1ab0: 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73        /* Databas
1ac0: 65 20 74 68 65 20 63 75 72 73 6f 72 20 62 65 6c  e the cursor bel
1ad0: 6f 6e 67 73 20 74 6f 2c 20 6f 72 20 2d 31 20 2a  ongs to, or -1 *
1ae0: 2f 0a 20 20 75 38 20 65 43 75 72 54 79 70 65 20  /.  u8 eCurType 
1af0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 79 70            /* Typ
1b00: 65 20 6f 66 20 74 68 65 20 6e 65 77 20 63 75 72  e of the new cur
1b10: 73 6f 72 20 2a 2f 0a 29 7b 0a 20 20 2f 2a 20 46  sor */.){.  /* F
1b20: 69 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79 20 63  ind the memory c
1b30: 65 6c 6c 20 74 68 61 74 20 77 69 6c 6c 20 62 65  ell that will be
1b40: 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
1b50: 68 65 20 62 6c 6f 62 20 6f 66 20 6d 65 6d 6f 72  he blob of memor
1b60: 79 0a 20 20 2a 2a 20 72 65 71 75 69 72 65 64 20  y.  ** required 
1b70: 66 6f 72 20 74 68 69 73 20 56 64 62 65 43 75 72  for this VdbeCur
1b80: 73 6f 72 20 73 74 72 75 63 74 75 72 65 2e 20 49  sor structure. I
1b90: 74 20 69 73 20 63 6f 6e 76 65 6e 69 65 6e 74 20  t is convenient 
1ba0: 74 6f 20 75 73 65 20 61 20 0a 20 20 2a 2a 20 76  to use a .  ** v
1bb0: 64 62 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  dbe memory cell 
1bc0: 74 6f 20 6d 61 6e 61 67 65 20 74 68 65 20 6d 65  to manage the me
1bd0: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
1be0: 72 65 71 75 69 72 65 64 20 66 6f 72 20 61 0a 20  required for a. 
1bf0: 20 2a 2a 20 56 64 62 65 43 75 72 73 6f 72 20 73   ** VdbeCursor s
1c00: 74 72 75 63 74 75 72 65 20 66 6f 72 20 74 68 65  tructure for the
1c10: 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 65 61 73 6f   following reaso
1c20: 6e 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20  ns:.  **.  **   
1c30: 2a 20 53 6f 6d 65 74 69 6d 65 73 20 63 75 72 73  * Sometimes curs
1c40: 6f 72 20 6e 75 6d 62 65 72 73 20 61 72 65 20 75  or numbers are u
1c50: 73 65 64 20 66 6f 72 20 61 20 63 6f 75 70 6c 65  sed for a couple
1c60: 20 6f 66 20 64 69 66 66 65 72 65 6e 74 0a 20 20   of different.  
1c70: 2a 2a 20 20 20 20 20 70 75 72 70 6f 73 65 73 20  **     purposes 
1c80: 69 6e 20 61 20 76 64 62 65 20 70 72 6f 67 72 61  in a vdbe progra
1c90: 6d 2e 20 54 68 65 20 64 69 66 66 65 72 65 6e 74  m. The different
1ca0: 20 75 73 65 73 20 6d 69 67 68 74 20 72 65 71 75   uses might requ
1cb0: 69 72 65 0a 20 20 2a 2a 20 20 20 20 20 64 69 66  ire.  **     dif
1cc0: 66 65 72 65 6e 74 20 73 69 7a 65 64 20 61 6c 6c  ferent sized all
1cd0: 6f 63 61 74 69 6f 6e 73 2e 20 4d 65 6d 6f 72 79  ocations. Memory
1ce0: 20 63 65 6c 6c 73 20 70 72 6f 76 69 64 65 20 67   cells provide g
1cf0: 72 6f 77 61 62 6c 65 0a 20 20 2a 2a 20 20 20 20  rowable.  **    
1d00: 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2e 0a 20 20   allocations..  
1d10: 2a 2a 0a 20 20 2a 2a 20 20 20 2a 20 57 68 65 6e  **.  **   * When
1d20: 20 75 73 69 6e 67 20 45 4e 41 42 4c 45 5f 4d 45   using ENABLE_ME
1d30: 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 2c  MORY_MANAGEMENT,
1d40: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 62 75 66   memory cell buf
1d50: 66 65 72 73 20 63 61 6e 0a 20 20 2a 2a 20 20 20  fers can.  **   
1d60: 20 20 62 65 20 66 72 65 65 64 20 6c 61 7a 69 6c    be freed lazil
1d70: 79 20 76 69 61 20 74 68 65 20 73 71 6c 69 74 65  y via the sqlite
1d80: 33 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79  3_release_memory
1d90: 28 29 20 41 50 49 2e 20 54 68 69 73 0a 20 20 2a  () API. This.  *
1da0: 2a 20 20 20 20 20 6d 69 6e 69 6d 69 7a 65 73 20  *     minimizes 
1db0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 61  the number of ma
1dc0: 6c 6c 6f 63 20 63 61 6c 6c 73 20 6d 61 64 65 20  lloc calls made 
1dd0: 62 79 20 74 68 65 20 73 79 73 74 65 6d 2e 0a 20  by the system.. 
1de0: 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 6d 65 6d   **.  ** The mem
1df0: 6f 72 79 20 63 65 6c 6c 20 66 6f 72 20 63 75 72  ory cell for cur
1e00: 73 6f 72 20 30 20 69 73 20 61 4d 65 6d 5b 30 5d  sor 0 is aMem[0]
1e10: 2e 20 54 68 65 20 72 65 73 74 20 61 72 65 20 61  . The rest are a
1e20: 6c 6c 6f 63 61 74 65 64 20 66 72 6f 6d 0a 20 20  llocated from.  
1e30: 2a 2a 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68  ** the top of th
1e40: 65 20 72 65 67 69 73 74 65 72 20 73 70 61 63 65  e register space
1e50: 2e 20 20 43 75 72 73 6f 72 20 31 20 69 73 20 61  .  Cursor 1 is a
1e60: 74 20 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d 31 5d  t Mem[p->nMem-1]
1e70: 2e 0a 20 20 2a 2a 20 43 75 72 73 6f 72 20 32 20  ..  ** Cursor 2 
1e80: 69 73 20 61 74 20 4d 65 6d 5b 70 2d 3e 6e 4d 65  is at Mem[p->nMe
1e90: 6d 2d 32 5d 2e 20 41 6e 64 20 73 6f 20 66 6f 72  m-2]. And so for
1ea0: 74 68 2e 0a 20 20 2a 2f 0a 20 20 4d 65 6d 20 2a  th..  */.  Mem *
1eb0: 70 4d 65 6d 20 3d 20 69 43 75 72 3e 30 20 3f 20  pMem = iCur>0 ? 
1ec0: 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d  &p->aMem[p->nMem
1ed0: 2d 69 43 75 72 5d 20 3a 20 70 2d 3e 61 4d 65 6d  -iCur] : p->aMem
1ee0: 3b 0a 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 0a  ;..  int nByte;.
1ef0: 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1f00: 78 20 3d 20 30 3b 0a 20 20 6e 42 79 74 65 20 3d  x = 0;.  nByte =
1f10: 20 0a 20 20 20 20 20 20 52 4f 55 4e 44 38 28 73   .      ROUND8(s
1f20: 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72  izeof(VdbeCursor
1f30: 29 29 20 2b 20 32 2a 73 69 7a 65 6f 66 28 75 33  )) + 2*sizeof(u3
1f40: 32 29 2a 6e 46 69 65 6c 64 20 2b 20 0a 20 20 20  2)*nField + .   
1f50: 20 20 20 28 65 43 75 72 54 79 70 65 3d 3d 43 55     (eCurType==CU
1f60: 52 54 59 50 45 5f 42 54 52 45 45 3f 73 71 6c 69  RTYPE_BTREE?sqli
1f70: 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 53 69  te3BtreeCursorSi
1f80: 7a 65 28 29 3a 30 29 3b 0a 0a 20 20 61 73 73 65  ze():0);..  asse
1f90: 72 74 28 20 69 43 75 72 3e 3d 30 20 26 26 20 69  rt( iCur>=0 && i
1fa0: 43 75 72 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  Cur<p->nCursor )
1fb0: 3b 0a 20 20 69 66 28 20 70 2d 3e 61 70 43 73 72  ;.  if( p->apCsr
1fc0: 5b 69 43 75 72 5d 20 29 7b 20 2f 2a 4f 50 54 49  [iCur] ){ /*OPTI
1fd0: 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53  MIZATION-IF-FALS
1fe0: 45 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56  E*/.    sqlite3V
1ff0: 64 62 65 46 72 65 65 43 75 72 73 6f 72 28 70 2c  dbeFreeCursor(p,
2000: 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 29   p->apCsr[iCur])
2010: 3b 0a 20 20 20 20 70 2d 3e 61 70 43 73 72 5b 69  ;.    p->apCsr[i
2020: 43 75 72 5d 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  Cur] = 0;.  }.  
2030: 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d 73  if( SQLITE_OK==s
2040: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c 65  qlite3VdbeMemCle
2050: 61 72 41 6e 64 52 65 73 69 7a 65 28 70 4d 65 6d  arAndResize(pMem
2060: 2c 20 6e 42 79 74 65 29 20 29 7b 0a 20 20 20 20  , nByte) ){.    
2070: 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d  p->apCsr[iCur] =
2080: 20 70 43 78 20 3d 20 28 56 64 62 65 43 75 72 73   pCx = (VdbeCurs
2090: 6f 72 2a 29 70 4d 65 6d 2d 3e 7a 3b 0a 20 20 20  or*)pMem->z;.   
20a0: 20 6d 65 6d 73 65 74 28 70 43 78 2c 20 30 2c 20   memset(pCx, 0, 
20b0: 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f  sizeof(VdbeCurso
20c0: 72 29 29 3b 0a 20 20 20 20 70 43 78 2d 3e 65 43  r));.    pCx->eC
20d0: 75 72 54 79 70 65 20 3d 20 65 43 75 72 54 79 70  urType = eCurTyp
20e0: 65 3b 0a 20 20 20 20 70 43 78 2d 3e 69 44 62 20  e;.    pCx->iDb 
20f0: 3d 20 69 44 62 3b 0a 20 20 20 20 70 43 78 2d 3e  = iDb;.    pCx->
2100: 6e 46 69 65 6c 64 20 3d 20 6e 46 69 65 6c 64 3b  nField = nField;
2110: 0a 20 20 20 20 70 43 78 2d 3e 61 4f 66 66 73 65  .    pCx->aOffse
2120: 74 20 3d 20 26 70 43 78 2d 3e 61 54 79 70 65 5b  t = &pCx->aType[
2130: 6e 46 69 65 6c 64 5d 3b 0a 20 20 20 20 69 66 28  nField];.    if(
2140: 20 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59   eCurType==CURTY
2150: 50 45 5f 42 54 52 45 45 20 29 7b 0a 20 20 20 20  PE_BTREE ){.    
2160: 20 20 70 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f    pCx->uc.pCurso
2170: 72 20 3d 20 28 42 74 43 75 72 73 6f 72 2a 29 0a  r = (BtCursor*).
2180: 20 20 20 20 20 20 20 20 20 20 26 70 4d 65 6d 2d            &pMem-
2190: 3e 7a 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66  >z[ROUND8(sizeof
21a0: 28 56 64 62 65 43 75 72 73 6f 72 29 29 2b 32 2a  (VdbeCursor))+2*
21b0: 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69 65  sizeof(u32)*nFie
21c0: 6c 64 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ld];.      sqlit
21d0: 65 33 42 74 72 65 65 43 75 72 73 6f 72 5a 65 72  e3BtreeCursorZer
21e0: 6f 28 70 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f  o(pCx->uc.pCurso
21f0: 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  r);.    }.  }.  
2200: 72 65 74 75 72 6e 20 70 43 78 3b 0a 7d 0a 0a 2f  return pCx;.}../
2210: 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76  *.** Try to conv
2220: 65 72 74 20 61 20 76 61 6c 75 65 20 69 6e 74 6f  ert a value into
2230: 20 61 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65   a numeric repre
2240: 73 65 6e 74 61 74 69 6f 6e 20 69 66 20 77 65 20  sentation if we 
2250: 63 61 6e 0a 2a 2a 20 64 6f 20 73 6f 20 77 69 74  can.** do so wit
2260: 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20 69 6e 66  hout loss of inf
2270: 6f 72 6d 61 74 69 6f 6e 2e 20 20 49 6e 20 6f 74  ormation.  In ot
2280: 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20 74 68  her words, if th
2290: 65 20 73 74 72 69 6e 67 0a 2a 2a 20 6c 6f 6f 6b  e string.** look
22a0: 73 20 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c  s like a number,
22b0: 20 63 6f 6e 76 65 72 74 20 69 74 20 69 6e 74 6f   convert it into
22c0: 20 61 20 6e 75 6d 62 65 72 2e 20 20 49 66 20 69   a number.  If i
22d0: 74 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 6c 6f  t does not.** lo
22e0: 6f 6b 20 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72  ok like a number
22f0: 2c 20 6c 65 61 76 65 20 69 74 20 61 6c 6f 6e 65  , leave it alone
2300: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 62  ..**.** If the b
2310: 54 72 79 46 6f 72 49 6e 74 20 66 6c 61 67 20 69  TryForInt flag i
2320: 73 20 74 72 75 65 2c 20 74 68 65 6e 20 65 78 74  s true, then ext
2330: 72 61 20 65 66 66 6f 72 74 20 69 73 20 6d 61 64  ra effort is mad
2340: 65 20 74 6f 20 67 69 76 65 0a 2a 2a 20 61 6e 20  e to give.** an 
2350: 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e  integer represen
2360: 74 61 74 69 6f 6e 2e 20 20 53 74 72 69 6e 67 73  tation.  Strings
2370: 20 74 68 61 74 20 6c 6f 6f 6b 20 6c 69 6b 65 20   that look like 
2380: 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 0a 2a  floating point.*
2390: 2a 20 76 61 6c 75 65 73 20 62 75 74 20 77 68 69  * values but whi
23a0: 63 68 20 68 61 76 65 20 6e 6f 20 66 72 61 63 74  ch have no fract
23b0: 69 6f 6e 61 6c 20 63 6f 6d 70 6f 6e 65 6e 74 20  ional component 
23c0: 28 65 78 61 6d 70 6c 65 3a 20 27 34 38 2e 30 30  (example: '48.00
23d0: 27 29 0a 2a 2a 20 77 69 6c 6c 20 68 61 76 65 20  ').** will have 
23e0: 61 20 4d 45 4d 5f 49 6e 74 20 72 65 70 72 65 73  a MEM_Int repres
23f0: 65 6e 74 61 74 69 6f 6e 20 77 68 65 6e 20 62 54  entation when bT
2400: 72 79 46 6f 72 49 6e 74 20 69 73 20 74 72 75 65  ryForInt is true
2410: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 62 54 72 79 46  ..**.** If bTryF
2420: 6f 72 49 6e 74 20 69 73 20 66 61 6c 73 65 2c 20  orInt is false, 
2430: 74 68 65 6e 20 69 66 20 74 68 65 20 69 6e 70 75  then if the inpu
2440: 74 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e  t string contain
2450: 73 20 61 20 64 65 63 69 6d 61 6c 0a 2a 2a 20 70  s a decimal.** p
2460: 6f 69 6e 74 20 6f 72 20 65 78 70 6f 6e 65 6e 74  oint or exponent
2470: 69 61 6c 20 6e 6f 74 61 74 69 6f 6e 2c 20 74 68  ial notation, th
2480: 65 20 72 65 73 75 6c 74 20 69 73 20 6f 6e 6c 79  e result is only
2490: 20 4d 45 4d 5f 52 65 61 6c 2c 20 65 76 65 6e 0a   MEM_Real, even.
24a0: 2a 2a 20 69 66 20 74 68 65 72 65 20 69 73 20 61  ** if there is a
24b0: 6e 20 65 78 61 63 74 20 69 6e 74 65 67 65 72 20  n exact integer 
24c0: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
24d0: 66 20 74 68 65 20 71 75 61 6e 74 69 74 79 2e 0a  f the quantity..
24e0: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61  */.static void a
24f0: 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
2500: 69 74 79 28 4d 65 6d 20 2a 70 52 65 63 2c 20 69  ity(Mem *pRec, i
2510: 6e 74 20 62 54 72 79 46 6f 72 49 6e 74 29 7b 0a  nt bTryForInt){.
2520: 20 20 64 6f 75 62 6c 65 20 72 56 61 6c 75 65 3b    double rValue;
2530: 0a 20 20 69 36 34 20 69 56 61 6c 75 65 3b 0a 20  .  i64 iValue;. 
2540: 20 75 38 20 65 6e 63 20 3d 20 70 52 65 63 2d 3e   u8 enc = pRec->
2550: 65 6e 63 3b 0a 20 20 61 73 73 65 72 74 28 20 28  enc;.  assert( (
2560: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pRec->flags & (M
2570: 45 4d 5f 53 74 72 7c 4d 45 4d 5f 49 6e 74 7c 4d  EM_Str|MEM_Int|M
2580: 45 4d 5f 52 65 61 6c 29 29 3d 3d 4d 45 4d 5f 53  EM_Real))==MEM_S
2590: 74 72 20 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  tr );.  if( sqli
25a0: 74 65 33 41 74 6f 46 28 70 52 65 63 2d 3e 7a 2c  te3AtoF(pRec->z,
25b0: 20 26 72 56 61 6c 75 65 2c 20 70 52 65 63 2d 3e   &rValue, pRec->
25c0: 6e 2c 20 65 6e 63 29 3d 3d 30 20 29 20 72 65 74  n, enc)==0 ) ret
25d0: 75 72 6e 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71  urn;.  if( 0==sq
25e0: 6c 69 74 65 33 41 74 6f 69 36 34 28 70 52 65 63  lite3Atoi64(pRec
25f0: 2d 3e 7a 2c 20 26 69 56 61 6c 75 65 2c 20 70 52  ->z, &iValue, pR
2600: 65 63 2d 3e 6e 2c 20 65 6e 63 29 20 29 7b 0a 20  ec->n, enc) ){. 
2610: 20 20 20 70 52 65 63 2d 3e 75 2e 69 20 3d 20 69     pRec->u.i = i
2620: 56 61 6c 75 65 3b 0a 20 20 20 20 70 52 65 63 2d  Value;.    pRec-
2630: 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 49 6e  >flags |= MEM_In
2640: 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  t;.  }else{.    
2650: 70 52 65 63 2d 3e 75 2e 72 20 3d 20 72 56 61 6c  pRec->u.r = rVal
2660: 75 65 3b 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c  ue;.    pRec->fl
2670: 61 67 73 20 7c 3d 20 4d 45 4d 5f 52 65 61 6c 3b  ags |= MEM_Real;
2680: 0a 20 20 20 20 69 66 28 20 62 54 72 79 46 6f 72  .    if( bTryFor
2690: 49 6e 74 20 29 20 73 71 6c 69 74 65 33 56 64 62  Int ) sqlite3Vdb
26a0: 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74 79  eIntegerAffinity
26b0: 28 70 52 65 63 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f  (pRec);.  }.}../
26c0: 2a 0a 2a 2a 20 50 72 6f 63 65 73 73 69 6e 67 20  *.** Processing 
26d0: 69 73 20 64 65 74 65 72 6d 69 6e 65 20 62 79 20  is determine by 
26e0: 74 68 65 20 61 66 66 69 6e 69 74 79 20 70 61 72  the affinity par
26f0: 61 6d 65 74 65 72 3a 0a 2a 2a 0a 2a 2a 20 53 51  ameter:.**.** SQ
2700: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
2710: 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f  :.** SQLITE_AFF_
2720: 52 45 41 4c 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f  REAL:.** SQLITE_
2730: 41 46 46 5f 4e 55 4d 45 52 49 43 3a 0a 2a 2a 20  AFF_NUMERIC:.** 
2740: 20 20 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72     Try to conver
2750: 74 20 70 52 65 63 20 74 6f 20 61 6e 20 69 6e 74  t pRec to an int
2760: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
2770: 69 6f 6e 20 6f 72 20 61 20 0a 2a 2a 20 20 20 20  ion or a .**    
2780: 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20 72  floating-point r
2790: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 66  epresentation if
27a0: 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72   an integer repr
27b0: 65 73 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20 20 20  esentation.**   
27c0: 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65   is not possible
27d0: 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65  .  Note that the
27e0: 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65   integer represe
27f0: 6e 74 61 74 69 6f 6e 20 69 73 0a 2a 2a 20 20 20  ntation is.**   
2800: 20 61 6c 77 61 79 73 20 70 72 65 66 65 72 72 65   always preferre
2810: 64 2c 20 65 76 65 6e 20 69 66 20 74 68 65 20 61  d, even if the a
2820: 66 66 69 6e 69 74 79 20 69 73 20 52 45 41 4c 2c  ffinity is REAL,
2830: 20 62 65 63 61 75 73 65 0a 2a 2a 20 20 20 20 61   because.**    a
2840: 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73  n integer repres
2850: 65 6e 74 61 74 69 6f 6e 20 69 73 20 6d 6f 72 65  entation is more
2860: 20 73 70 61 63 65 20 65 66 66 69 63 69 65 6e 74   space efficient
2870: 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2a 0a 2a 2a 20   on disk..**.** 
2880: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 3a  SQLITE_AFF_TEXT:
2890: 0a 2a 2a 20 20 20 20 43 6f 6e 76 65 72 74 20 70  .**    Convert p
28a0: 52 65 63 20 74 6f 20 61 20 74 65 78 74 20 72 65  Rec to a text re
28b0: 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a  presentation..**
28c0: 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 42  .** SQLITE_AFF_B
28d0: 4c 4f 42 3a 0a 2a 2a 20 20 20 20 4e 6f 2d 6f 70  LOB:.**    No-op
28e0: 2e 20 20 70 52 65 63 20 69 73 20 75 6e 63 68 61  .  pRec is uncha
28f0: 6e 67 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  nged..*/.static 
2900: 76 6f 69 64 20 61 70 70 6c 79 41 66 66 69 6e 69  void applyAffini
2910: 74 79 28 0a 20 20 4d 65 6d 20 2a 70 52 65 63 2c  ty(.  Mem *pRec,
2920: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
2930: 20 76 61 6c 75 65 20 74 6f 20 61 70 70 6c 79 20   value to apply 
2940: 61 66 66 69 6e 69 74 79 20 74 6f 20 2a 2f 0a 20  affinity to */. 
2950: 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 2c 20   char affinity, 
2960: 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69       /* The affi
2970: 6e 69 74 79 20 74 6f 20 62 65 20 61 70 70 6c 69  nity to be appli
2980: 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 20 20  ed */.  u8 enc  
2990: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55              /* U
29a0: 73 65 20 74 68 69 73 20 74 65 78 74 20 65 6e 63  se this text enc
29b0: 6f 64 69 6e 67 20 2a 2f 0a 29 7b 0a 20 20 69 66  oding */.){.  if
29c0: 28 20 61 66 66 69 6e 69 74 79 3e 3d 53 51 4c 49  ( affinity>=SQLI
29d0: 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 29  TE_AFF_NUMERIC )
29e0: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 61 66  {.    assert( af
29f0: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
2a00: 46 46 5f 49 4e 54 45 47 45 52 20 7c 7c 20 61 66  FF_INTEGER || af
2a10: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
2a20: 46 46 5f 52 45 41 4c 0a 20 20 20 20 20 20 20 20  FF_REAL.        
2a30: 20 20 20 20 20 7c 7c 20 61 66 66 69 6e 69 74 79       || affinity
2a40: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  ==SQLITE_AFF_NUM
2a50: 45 52 49 43 20 29 3b 0a 20 20 20 20 69 66 28 20  ERIC );.    if( 
2a60: 28 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d  (pRec->flags & M
2a70: 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 20 2f 2a  EM_Int)==0 ){ /*
2a80: 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d  OPTIMIZATION-IF-
2a90: 46 41 4c 53 45 2a 2f 0a 20 20 20 20 20 20 69 66  FALSE*/.      if
2aa0: 28 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 20 26  ( (pRec->flags &
2ab0: 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b   MEM_Real)==0 ){
2ac0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 52 65  .        if( pRe
2ad0: 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53  c->flags & MEM_S
2ae0: 74 72 20 29 20 61 70 70 6c 79 4e 75 6d 65 72 69  tr ) applyNumeri
2af0: 63 41 66 66 69 6e 69 74 79 28 70 52 65 63 2c 31  cAffinity(pRec,1
2b00: 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
2b10: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
2b20: 64 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69  dbeIntegerAffini
2b30: 74 79 28 70 52 65 63 29 3b 0a 20 20 20 20 20 20  ty(pRec);.      
2b40: 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 20  }.    }.  }else 
2b50: 69 66 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51  if( affinity==SQ
2b60: 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20 29 7b  LITE_AFF_TEXT ){
2b70: 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 74 74  .    /* Only att
2b80: 65 6d 70 74 20 74 68 65 20 63 6f 6e 76 65 72 73  empt the convers
2b90: 69 6f 6e 20 74 6f 20 54 45 58 54 20 69 66 20 74  ion to TEXT if t
2ba0: 68 65 72 65 20 69 73 20 61 6e 20 69 6e 74 65 67  here is an integ
2bb0: 65 72 20 6f 72 20 72 65 61 6c 0a 20 20 20 20 2a  er or real.    *
2bc0: 2a 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  * representation
2bd0: 20 28 62 6c 6f 62 20 61 6e 64 20 4e 55 4c 4c 20   (blob and NULL 
2be0: 64 6f 20 6e 6f 74 20 67 65 74 20 63 6f 6e 76 65  do not get conve
2bf0: 72 74 65 64 29 20 62 75 74 20 6e 6f 20 73 74 72  rted) but no str
2c00: 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65 70 72 65  ing.    ** repre
2c10: 73 65 6e 74 61 74 69 6f 6e 2e 20 20 49 74 20 77  sentation.  It w
2c20: 6f 75 6c 64 20 62 65 20 68 61 72 6d 6c 65 73 73  ould be harmless
2c30: 20 74 6f 20 72 65 70 65 61 74 20 74 68 65 20 63   to repeat the c
2c40: 6f 6e 76 65 72 73 69 6f 6e 20 69 66 20 0a 20 20  onversion if .  
2c50: 20 20 2a 2a 20 74 68 65 72 65 20 69 73 20 61 6c    ** there is al
2c60: 72 65 61 64 79 20 61 20 73 74 72 69 6e 67 20 72  ready a string r
2c70: 65 70 2c 20 62 75 74 20 69 74 20 69 73 20 70 6f  ep, but it is po
2c80: 69 6e 74 6c 65 73 73 20 74 6f 20 77 61 73 74 65  intless to waste
2c90: 20 74 68 6f 73 65 0a 20 20 20 20 2a 2a 20 43 50   those.    ** CP
2ca0: 55 20 63 79 63 6c 65 73 2e 20 2a 2f 0a 20 20 20  U cycles. */.   
2cb0: 20 69 66 28 20 30 3d 3d 28 70 52 65 63 2d 3e 66   if( 0==(pRec->f
2cc0: 6c 61 67 73 26 4d 45 4d 5f 53 74 72 29 20 29 7b  lags&MEM_Str) ){
2cd0: 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d   /*OPTIMIZATION-
2ce0: 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20 20  IF-FALSE*/.     
2cf0: 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61 67   if( (pRec->flag
2d00: 73 26 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f  s&(MEM_Real|MEM_
2d10: 49 6e 74 29 29 20 29 7b 0a 20 20 20 20 20 20 20  Int)) ){.       
2d20: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2d30: 74 72 69 6e 67 69 66 79 28 70 52 65 63 2c 20 65  tringify(pRec, e
2d40: 6e 63 2c 20 31 29 3b 0a 20 20 20 20 20 20 7d 0a  nc, 1);.      }.
2d50: 20 20 20 20 7d 0a 20 20 20 20 70 52 65 63 2d 3e      }.    pRec->
2d60: 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 52  flags &= ~(MEM_R
2d70: 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  eal|MEM_Int);.  
2d80: 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74  }.}../*.** Try t
2d90: 6f 20 63 6f 6e 76 65 72 74 20 74 68 65 20 74 79  o convert the ty
2da0: 70 65 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e  pe of a function
2db0: 20 61 72 67 75 6d 65 6e 74 20 6f 72 20 61 20 72   argument or a r
2dc0: 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 0a 2a 2a 20  esult column.** 
2dd0: 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63 20 72  into a numeric r
2de0: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20 20  epresentation.  
2df0: 55 73 65 20 65 69 74 68 65 72 20 49 4e 54 45 47  Use either INTEG
2e00: 45 52 20 6f 72 20 52 45 41 4c 20 77 68 69 63 68  ER or REAL which
2e10: 65 76 65 72 0a 2a 2a 20 69 73 20 61 70 70 72 6f  ever.** is appro
2e20: 70 72 69 61 74 65 2e 20 20 42 75 74 20 6f 6e 6c  priate.  But onl
2e30: 79 20 64 6f 20 74 68 65 20 63 6f 6e 76 65 72 73  y do the convers
2e40: 69 6f 6e 20 69 66 20 69 74 20 69 73 20 70 6f 73  ion if it is pos
2e50: 73 69 62 6c 65 20 77 69 74 68 6f 75 74 0a 2a 2a  sible without.**
2e60: 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61   loss of informa
2e70: 74 69 6f 6e 20 61 6e 64 20 72 65 74 75 72 6e 20  tion and return 
2e80: 74 68 65 20 72 65 76 69 73 65 64 20 74 79 70 65  the revised type
2e90: 20 6f 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74   of the argument
2ea0: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
2eb0: 5f 76 61 6c 75 65 5f 6e 75 6d 65 72 69 63 5f 74  _value_numeric_t
2ec0: 79 70 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  ype(sqlite3_valu
2ed0: 65 20 2a 70 56 61 6c 29 7b 0a 20 20 69 6e 74 20  e *pVal){.  int 
2ee0: 65 54 79 70 65 20 3d 20 73 71 6c 69 74 65 33 5f  eType = sqlite3_
2ef0: 76 61 6c 75 65 5f 74 79 70 65 28 70 56 61 6c 29  value_type(pVal)
2f00: 3b 0a 20 20 69 66 28 20 65 54 79 70 65 3d 3d 53  ;.  if( eType==S
2f10: 51 4c 49 54 45 5f 54 45 58 54 20 29 7b 0a 20 20  QLITE_TEXT ){.  
2f20: 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20 28 4d    Mem *pMem = (M
2f30: 65 6d 2a 29 70 56 61 6c 3b 0a 20 20 20 20 61 70  em*)pVal;.    ap
2f40: 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  plyNumericAffini
2f50: 74 79 28 70 4d 65 6d 2c 20 30 29 3b 0a 20 20 20  ty(pMem, 0);.   
2f60: 20 65 54 79 70 65 20 3d 20 73 71 6c 69 74 65 33   eType = sqlite3
2f70: 5f 76 61 6c 75 65 5f 74 79 70 65 28 70 56 61 6c  _value_type(pVal
2f80: 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
2f90: 65 54 79 70 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  eType;.}../*.** 
2fa0: 45 78 70 6f 72 74 65 64 20 76 65 72 73 69 6f 6e  Exported version
2fb0: 20 6f 66 20 61 70 70 6c 79 41 66 66 69 6e 69 74   of applyAffinit
2fc0: 79 28 29 2e 20 54 68 69 73 20 6f 6e 65 20 77 6f  y(). This one wo
2fd0: 72 6b 73 20 6f 6e 20 73 71 6c 69 74 65 33 5f 76  rks on sqlite3_v
2fe0: 61 6c 75 65 2a 2c 20 0a 2a 2a 20 6e 6f 74 20 74  alue*, .** not t
2ff0: 68 65 20 69 6e 74 65 72 6e 61 6c 20 4d 65 6d 2a  he internal Mem*
3000: 20 74 79 70 65 2e 0a 2a 2f 0a 76 6f 69 64 20 73   type..*/.void s
3010: 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70 6c 79  qlite3ValueApply
3020: 41 66 66 69 6e 69 74 79 28 0a 20 20 73 71 6c 69  Affinity(.  sqli
3030: 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 2c  te3_value *pVal,
3040: 20 0a 20 20 75 38 20 61 66 66 69 6e 69 74 79 2c   .  u8 affinity,
3050: 20 0a 20 20 75 38 20 65 6e 63 0a 29 7b 0a 20 20   .  u8 enc.){.  
3060: 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 28 4d  applyAffinity((M
3070: 65 6d 20 2a 29 70 56 61 6c 2c 20 61 66 66 69 6e  em *)pVal, affin
3080: 69 74 79 2c 20 65 6e 63 29 3b 0a 7d 0a 0a 2f 2a  ity, enc);.}../*
3090: 0a 2a 2a 20 70 4d 65 6d 20 63 75 72 72 65 6e 74  .** pMem current
30a0: 6c 79 20 6f 6e 6c 79 20 68 6f 6c 64 73 20 61 20  ly only holds a 
30b0: 73 74 72 69 6e 67 20 74 79 70 65 20 28 6f 72 20  string type (or 
30c0: 6d 61 79 62 65 20 61 20 42 4c 4f 42 20 74 68 61  maybe a BLOB tha
30d0: 74 20 77 65 20 63 61 6e 0a 2a 2a 20 69 6e 74 65  t we can.** inte
30e0: 72 70 72 65 74 20 61 73 20 61 20 73 74 72 69 6e  rpret as a strin
30f0: 67 20 69 66 20 77 65 20 77 61 6e 74 20 74 6f 29  g if we want to)
3100: 2e 20 20 43 6f 6d 70 75 74 65 20 69 74 73 20 63  .  Compute its c
3110: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 0a 2a 2a 20  orresponding.** 
3120: 6e 75 6d 65 72 69 63 20 74 79 70 65 2c 20 69 66  numeric type, if
3130: 20 68 61 73 20 6f 6e 65 2e 20 20 53 65 74 20 74   has one.  Set t
3140: 68 65 20 70 4d 65 6d 2d 3e 75 2e 72 20 61 6e 64  he pMem->u.r and
3150: 20 70 4d 65 6d 2d 3e 75 2e 69 20 66 69 65 6c 64   pMem->u.i field
3160: 73 0a 2a 2a 20 61 63 63 6f 72 64 69 6e 67 6c 79  s.** accordingly
3170: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 75 31 36 20  ..*/.static u16 
3180: 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20  SQLITE_NOINLINE 
3190: 63 6f 6d 70 75 74 65 4e 75 6d 65 72 69 63 54 79  computeNumericTy
31a0: 70 65 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20  pe(Mem *pMem){. 
31b0: 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e   assert( (pMem->
31c0: 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74  flags & (MEM_Int
31d0: 7c 4d 45 4d 5f 52 65 61 6c 29 29 3d 3d 30 20 29  |MEM_Real))==0 )
31e0: 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d 65  ;.  assert( (pMe
31f0: 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  m->flags & (MEM_
3200: 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 21 3d  Str|MEM_Blob))!=
3210: 30 20 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  0 );.  if( sqlit
3220: 65 33 41 74 6f 46 28 70 4d 65 6d 2d 3e 7a 2c 20  e3AtoF(pMem->z, 
3230: 26 70 4d 65 6d 2d 3e 75 2e 72 2c 20 70 4d 65 6d  &pMem->u.r, pMem
3240: 2d 3e 6e 2c 20 70 4d 65 6d 2d 3e 65 6e 63 29 3d  ->n, pMem->enc)=
3250: 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  =0 ){.    return
3260: 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71   0;.  }.  if( sq
3270: 6c 69 74 65 33 41 74 6f 69 36 34 28 70 4d 65 6d  lite3Atoi64(pMem
3280: 2d 3e 7a 2c 20 26 70 4d 65 6d 2d 3e 75 2e 69 2c  ->z, &pMem->u.i,
3290: 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d 3e   pMem->n, pMem->
32a0: 65 6e 63 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  enc)==SQLITE_OK 
32b0: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 4d 45  ){.    return ME
32c0: 4d 5f 49 6e 74 3b 0a 20 20 7d 0a 20 20 72 65 74  M_Int;.  }.  ret
32d0: 75 72 6e 20 4d 45 4d 5f 52 65 61 6c 3b 0a 7d 0a  urn MEM_Real;.}.
32e0: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  ./*.** Return th
32f0: 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20 66  e numeric type f
3300: 6f 72 20 70 4d 65 6d 2c 20 65 69 74 68 65 72 20  or pMem, either 
3310: 4d 45 4d 5f 49 6e 74 20 6f 72 20 4d 45 4d 5f 52  MEM_Int or MEM_R
3320: 65 61 6c 20 6f 72 20 62 6f 74 68 20 6f 72 0a 2a  eal or both or.*
3330: 2a 20 6e 6f 6e 65 2e 20 20 0a 2a 2a 0a 2a 2a 20  * none.  .**.** 
3340: 55 6e 6c 69 6b 65 20 61 70 70 6c 79 4e 75 6d 65  Unlike applyNume
3350: 72 69 63 41 66 66 69 6e 69 74 79 28 29 2c 20 74  ricAffinity(), t
3360: 68 69 73 20 72 6f 75 74 69 6e 65 20 64 6f 65 73  his routine does
3370: 20 6e 6f 74 20 6d 6f 64 69 66 79 20 70 4d 65 6d   not modify pMem
3380: 2d 3e 66 6c 61 67 73 2e 0a 2a 2a 20 42 75 74 20  ->flags..** But 
3390: 69 74 20 64 6f 65 73 20 73 65 74 20 70 4d 65 6d  it does set pMem
33a0: 2d 3e 75 2e 72 20 61 6e 64 20 70 4d 65 6d 2d 3e  ->u.r and pMem->
33b0: 75 2e 69 20 61 70 70 72 6f 70 72 69 61 74 65 6c  u.i appropriatel
33c0: 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 75 31 36  y..*/.static u16
33d0: 20 6e 75 6d 65 72 69 63 54 79 70 65 28 4d 65 6d   numericType(Mem
33e0: 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 66 28 20 70   *pMem){.  if( p
33f0: 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  Mem->flags & (ME
3400: 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 20  M_Int|MEM_Real) 
3410: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 70 4d  ){.    return pM
3420: 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  em->flags & (MEM
3430: 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 3b 0a  _Int|MEM_Real);.
3440: 20 20 7d 0a 20 20 69 66 28 20 70 4d 65 6d 2d 3e    }.  if( pMem->
3450: 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72  flags & (MEM_Str
3460: 7c 4d 45 4d 5f 42 6c 6f 62 29 20 29 7b 0a 20 20  |MEM_Blob) ){.  
3470: 20 20 72 65 74 75 72 6e 20 63 6f 6d 70 75 74 65    return compute
3480: 4e 75 6d 65 72 69 63 54 79 70 65 28 70 4d 65 6d  NumericType(pMem
3490: 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
34a0: 30 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c  0;.}..#ifdef SQL
34b0: 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20  ITE_DEBUG./*.** 
34c0: 57 72 69 74 65 20 61 20 6e 69 63 65 20 73 74 72  Write a nice str
34d0: 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74 69  ing representati
34e0: 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e  on of the conten
34f0: 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d 65 6d 0a  ts of cell pMem.
3500: 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65 72 20 7a  ** into buffer z
3510: 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e 42 75 66  Buf, length nBuf
3520: 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..*/.void sqlite
3530: 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79 50 72  3VdbeMemPrettyPr
3540: 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20 63  int(Mem *pMem, c
3550: 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20 20 63 68  har *zBuf){.  ch
3560: 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42 75 66 3b  ar *zCsr = zBuf;
3570: 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d 65 6d 2d  .  int f = pMem-
3580: 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74 61 74 69  >flags;..  stati
3590: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f  c const char *co
35a0: 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d  nst encnames[] =
35b0: 20 7b 22 28 58 29 22 2c 20 22 28 38 29 22 2c 20   {"(X)", "(8)", 
35c0: 22 28 31 36 4c 45 29 22 2c 20 22 28 31 36 42 45  "(16LE)", "(16BE
35d0: 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66 26 4d 45  )"};..  if( f&ME
35e0: 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20 20 69 6e  M_Blob ){.    in
35f0: 74 20 69 3b 0a 20 20 20 20 63 68 61 72 20 63 3b  t i;.    char c;
3600: 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d  .    if( f & MEM
3610: 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20 63 20  _Dyn ){.      c 
3620: 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61 73 73  = 'z';.      ass
3630: 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53  ert( (f & (MEM_S
3640: 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29  tatic|MEM_Ephem)
3650: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
3660: 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74  e if( f & MEM_St
3670: 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20 63 20  atic ){.      c 
3680: 3d 20 27 74 27 3b 0a 20 20 20 20 20 20 61 73 73  = 't';.      ass
3690: 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 44  ert( (f & (MEM_D
36a0: 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d  yn|MEM_Ephem))==
36b0: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  0 );.    }else i
36c0: 66 28 20 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d  f( f & MEM_Ephem
36d0: 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 65   ){.      c = 'e
36e0: 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ';.      assert(
36f0: 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69   (f & (MEM_Stati
3700: 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29  c|MEM_Dyn))==0 )
3710: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
3720: 20 20 20 63 20 3d 20 27 73 27 3b 0a 20 20 20 20     c = 's';.    
3730: 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  }..    sqlite3_s
3740: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
3750: 72 2c 20 22 25 63 22 2c 20 63 29 3b 0a 20 20 20  r, "%c", c);.   
3760: 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33   zCsr += sqlite3
3770: 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a  Strlen30(zCsr);.
3780: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
3790: 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20  intf(100, zCsr, 
37a0: 22 25 64 5b 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b  "%d[", pMem->n);
37b0: 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c  .    zCsr += sql
37c0: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73  ite3Strlen30(zCs
37d0: 72 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b  r);.    for(i=0;
37e0: 20 69 3c 31 36 20 26 26 20 69 3c 70 4d 65 6d 2d   i<16 && i<pMem-
37f0: 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  >n; i++){.      
3800: 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
3810: 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25 30 32  (100, zCsr, "%02
3820: 58 22 2c 20 28 28 69 6e 74 29 70 4d 65 6d 2d 3e  X", ((int)pMem->
3830: 7a 5b 69 5d 20 26 20 30 78 46 46 29 29 3b 0a 20  z[i] & 0xFF));. 
3840: 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c       zCsr += sql
3850: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73  ite3Strlen30(zCs
3860: 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 66 6f  r);.    }.    fo
3870: 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26 20 69  r(i=0; i<16 && i
3880: 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a  <pMem->n; i++){.
3890: 20 20 20 20 20 20 63 68 61 72 20 7a 20 3d 20 70        char z = p
38a0: 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20 20 20 20  Mem->z[i];.     
38b0: 20 69 66 28 20 7a 3c 33 32 20 7c 7c 20 7a 3e 31   if( z<32 || z>1
38c0: 32 36 20 29 20 2a 7a 43 73 72 2b 2b 20 3d 20 27  26 ) *zCsr++ = '
38d0: 2e 27 3b 0a 20 20 20 20 20 20 65 6c 73 65 20 2a  .';.      else *
38e0: 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20 20 20 20  zCsr++ = z;.    
38f0: 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  }..    sqlite3_s
3900: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
3910: 72 2c 20 22 5d 25 73 22 2c 20 65 6e 63 6e 61 6d  r, "]%s", encnam
3920: 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b 0a  es[pMem->enc]);.
3930: 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69      zCsr += sqli
3940: 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72  te3Strlen30(zCsr
3950: 29 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d  );.    if( f & M
3960: 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20  EM_Zero ){.     
3970: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
3980: 66 28 31 30 30 2c 20 7a 43 73 72 2c 22 2b 25 64  f(100, zCsr,"+%d
3990: 7a 22 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a 65 72 6f  z",pMem->u.nZero
39a0: 29 3b 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d  );.      zCsr +=
39b0: 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
39c0: 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20  (zCsr);.    }.  
39d0: 20 20 2a 7a 43 73 72 20 3d 20 27 5c 30 27 3b 0a    *zCsr = '\0';.
39e0: 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20    }else if( f & 
39f0: 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 69  MEM_Str ){.    i
3a00: 6e 74 20 6a 2c 20 6b 3b 0a 20 20 20 20 7a 42 75  nt j, k;.    zBu
3a10: 66 5b 30 5d 20 3d 20 27 20 27 3b 0a 20 20 20 20  f[0] = ' ';.    
3a20: 69 66 28 20 66 20 26 20 4d 45 4d 5f 44 79 6e 20  if( f & MEM_Dyn 
3a30: 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d  ){.      zBuf[1]
3a40: 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61 73   = 'z';.      as
3a50: 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f  sert( (f & (MEM_
3a60: 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d  Static|MEM_Ephem
3a70: 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c  ))==0 );.    }el
3a80: 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53  se if( f & MEM_S
3a90: 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20 7a  tatic ){.      z
3aa0: 42 75 66 5b 31 5d 20 3d 20 27 74 27 3b 0a 20 20  Buf[1] = 't';.  
3ab0: 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26      assert( (f &
3ac0: 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70   (MEM_Dyn|MEM_Ep
3ad0: 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  hem))==0 );.    
3ae0: 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45  }else if( f & ME
3af0: 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20 20 20  M_Ephem ){.     
3b00: 20 7a 42 75 66 5b 31 5d 20 3d 20 27 65 27 3b 0a   zBuf[1] = 'e';.
3b10: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66        assert( (f
3b20: 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d   & (MEM_Static|M
3b30: 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a 20  EM_Dyn))==0 );. 
3b40: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
3b50: 7a 42 75 66 5b 31 5d 20 3d 20 27 73 27 3b 0a 20  zBuf[1] = 's';. 
3b60: 20 20 20 7d 0a 20 20 20 20 6b 20 3d 20 32 3b 0a     }.    k = 2;.
3b70: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
3b80: 69 6e 74 66 28 31 30 30 2c 20 26 7a 42 75 66 5b  intf(100, &zBuf[
3b90: 6b 5d 2c 20 22 25 64 22 2c 20 70 4d 65 6d 2d 3e  k], "%d", pMem->
3ba0: 6e 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c  n);.    k += sql
3bb0: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26 7a 42  ite3Strlen30(&zB
3bc0: 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66  uf[k]);.    zBuf
3bd0: 5b 6b 2b 2b 5d 20 3d 20 27 5b 27 3b 0a 20 20 20  [k++] = '[';.   
3be0: 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 31 35 20 26   for(j=0; j<15 &
3bf0: 26 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20 6a 2b 2b  & j<pMem->n; j++
3c00: 29 7b 0a 20 20 20 20 20 20 75 38 20 63 20 3d 20  ){.      u8 c = 
3c10: 70 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20 20 20 20  pMem->z[j];.    
3c20: 20 20 69 66 28 20 63 3e 3d 30 78 32 30 20 26 26    if( c>=0x20 &&
3c30: 20 63 3c 30 78 37 66 20 29 7b 0a 20 20 20 20 20   c<0x7f ){.     
3c40: 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 63     zBuf[k++] = c
3c50: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
3c60: 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d         zBuf[k++]
3c70: 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20 7d 0a   = '.';.      }.
3c80: 20 20 20 20 7d 0a 20 20 20 20 7a 42 75 66 5b 6b      }.    zBuf[k
3c90: 2b 2b 5d 20 3d 20 27 5d 27 3b 0a 20 20 20 20 73  ++] = ']';.    s
3ca0: 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
3cb0: 31 30 30 2c 26 7a 42 75 66 5b 6b 5d 2c 20 65 6e  100,&zBuf[k], en
3cc0: 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63  cnames[pMem->enc
3cd0: 5d 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c  ]);.    k += sql
3ce0: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26 7a 42  ite3Strlen30(&zB
3cf0: 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66  uf[k]);.    zBuf
3d00: 5b 6b 2b 2b 5d 20 3d 20 30 3b 0a 20 20 7d 0a 7d  [k++] = 0;.  }.}
3d10: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
3d20: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a  SQLITE_DEBUG./*.
3d30: 2a 2a 20 50 72 69 6e 74 20 74 68 65 20 76 61 6c  ** Print the val
3d40: 75 65 20 6f 66 20 61 20 72 65 67 69 73 74 65 72  ue of a register
3d50: 20 66 6f 72 20 74 72 61 63 69 6e 67 20 70 75 72   for tracing pur
3d60: 70 6f 73 65 73 3a 0a 2a 2f 0a 73 74 61 74 69 63  poses:.*/.static
3d70: 20 76 6f 69 64 20 6d 65 6d 54 72 61 63 65 50 72   void memTracePr
3d80: 69 6e 74 28 4d 65 6d 20 2a 70 29 7b 0a 20 20 69  int(Mem *p){.  i
3d90: 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45  f( p->flags & ME
3da0: 4d 5f 55 6e 64 65 66 69 6e 65 64 20 29 7b 0a 20  M_Undefined ){. 
3db0: 20 20 20 70 72 69 6e 74 66 28 22 20 75 6e 64 65     printf(" unde
3dc0: 66 69 6e 65 64 22 29 3b 0a 20 20 7d 65 6c 73 65  fined");.  }else
3dd0: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
3de0: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
3df0: 70 72 69 6e 74 66 28 22 20 4e 55 4c 4c 22 29 3b  printf(" NULL");
3e00: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 28 70 2d  .  }else if( (p-
3e10: 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e  >flags & (MEM_In
3e20: 74 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 28 4d 45  t|MEM_Str))==(ME
3e30: 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 20 29  M_Int|MEM_Str) )
3e40: 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 73  {.    printf(" s
3e50: 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29  i:%lld", p->u.i)
3e60: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d  ;.  }else if( p-
3e70: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
3e80: 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22   ){.    printf("
3e90: 20 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69   i:%lld", p->u.i
3ea0: 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
3eb0: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
3ec0: 50 4f 49 4e 54 0a 20 20 7d 65 6c 73 65 20 69 66  POINT.  }else if
3ed0: 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ( p->flags & MEM
3ee0: 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 70 72 69  _Real ){.    pri
3ef0: 6e 74 66 28 22 20 72 3a 25 67 22 2c 20 70 2d 3e  ntf(" r:%g", p->
3f00: 75 2e 72 29 3b 0a 23 65 6e 64 69 66 0a 20 20 7d  u.r);.#endif.  }
3f10: 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67  else if( p->flag
3f20: 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 20 29  s & MEM_RowSet )
3f30: 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 28  {.    printf(" (
3f40: 72 6f 77 73 65 74 29 22 29 3b 0a 20 20 7d 65 6c  rowset)");.  }el
3f50: 73 65 7b 0a 20 20 20 20 63 68 61 72 20 7a 42 75  se{.    char zBu
3f60: 66 5b 32 30 30 5d 3b 0a 20 20 20 20 73 71 6c 69  f[200];.    sqli
3f70: 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79  te3VdbeMemPretty
3f80: 50 72 69 6e 74 28 70 2c 20 7a 42 75 66 29 3b 0a  Print(p, zBuf);.
3f90: 20 20 20 20 70 72 69 6e 74 66 28 22 20 25 73 22      printf(" %s"
3fa0: 2c 20 7a 42 75 66 29 3b 0a 20 20 7d 0a 20 20 69  , zBuf);.  }.  i
3fb0: 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45  f( p->flags & ME
3fc0: 4d 5f 53 75 62 74 79 70 65 20 29 20 70 72 69 6e  M_Subtype ) prin
3fd0: 74 66 28 22 20 73 75 62 74 79 70 65 3d 30 78 25  tf(" subtype=0x%
3fe0: 30 32 78 22 2c 20 70 2d 3e 65 53 75 62 74 79 70  02x", p->eSubtyp
3ff0: 65 29 3b 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69  e);.}.static voi
4000: 64 20 72 65 67 69 73 74 65 72 54 72 61 63 65 28  d registerTrace(
4010: 69 6e 74 20 69 52 65 67 2c 20 4d 65 6d 20 2a 70  int iReg, Mem *p
4020: 29 7b 0a 20 20 70 72 69 6e 74 66 28 22 52 45 47  ){.  printf("REG
4030: 5b 25 64 5d 20 3d 20 22 2c 20 69 52 65 67 29 3b  [%d] = ", iReg);
4040: 0a 20 20 6d 65 6d 54 72 61 63 65 50 72 69 6e 74  .  memTracePrint
4050: 28 70 29 3b 0a 20 20 70 72 69 6e 74 66 28 22 5c  (p);.  printf("\
4060: 6e 22 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23  n");.}.#endif..#
4070: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
4080: 55 47 0a 23 20 20 64 65 66 69 6e 65 20 52 45 47  UG.#  define REG
4090: 49 53 54 45 52 5f 54 52 41 43 45 28 52 2c 4d 29  ISTER_TRACE(R,M)
40a0: 20 69 66 28 64 62 2d 3e 66 6c 61 67 73 26 53 51   if(db->flags&SQ
40b0: 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 29 72  LITE_VdbeTrace)r
40c0: 65 67 69 73 74 65 72 54 72 61 63 65 28 52 2c 4d  egisterTrace(R,M
40d0: 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e  ).#else.#  defin
40e0: 65 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45  e REGISTER_TRACE
40f0: 28 52 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 0a 23  (R,M).#endif...#
4100: 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49  ifdef VDBE_PROFI
4110: 4c 45 0a 0a 2f 2a 20 0a 2a 2a 20 68 77 74 69 6d  LE../* .** hwtim
4120: 65 2e 68 20 63 6f 6e 74 61 69 6e 73 20 69 6e 6c  e.h contains inl
4130: 69 6e 65 20 61 73 73 65 6d 62 6c 65 72 20 63 6f  ine assembler co
4140: 64 65 20 66 6f 72 20 69 6d 70 6c 65 6d 65 6e 74  de for implement
4150: 69 6e 67 20 0a 2a 2a 20 68 69 67 68 2d 70 65 72  ing .** high-per
4160: 66 6f 72 6d 61 6e 63 65 20 74 69 6d 69 6e 67 20  formance timing 
4170: 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a 23 69 6e  routines..*/.#in
4180: 63 6c 75 64 65 20 22 68 77 74 69 6d 65 2e 68 22  clude "hwtime.h"
4190: 0a 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  ..#endif..#ifnde
41a0: 66 20 4e 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 54  f NDEBUG./*.** T
41b0: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  his function is 
41c0: 6f 6e 6c 79 20 63 61 6c 6c 65 64 20 66 72 6f 6d  only called from
41d0: 20 77 69 74 68 69 6e 20 61 6e 20 61 73 73 65 72   within an asser
41e0: 74 28 29 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  t() expression. 
41f0: 49 74 0a 2a 2a 20 63 68 65 63 6b 73 20 74 68 61  It.** checks tha
4200: 74 20 74 68 65 20 73 71 6c 69 74 65 33 2e 6e 54  t the sqlite3.nT
4210: 72 61 6e 73 61 63 74 69 6f 6e 20 76 61 72 69 61  ransaction varia
4220: 62 6c 65 20 69 73 20 63 6f 72 72 65 63 74 6c 79  ble is correctly
4230: 20 73 65 74 20 74 6f 0a 2a 2a 20 74 68 65 20 6e   set to.** the n
4240: 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61  umber of non-tra
4250: 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69  nsaction savepoi
4260: 6e 74 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  nts currently in
4270: 20 74 68 65 20 0a 2a 2a 20 6c 69 6e 6b 65 64 20   the .** linked 
4280: 6c 69 73 74 20 73 74 61 72 74 69 6e 67 20 61 74  list starting at
4290: 20 73 71 6c 69 74 65 33 2e 70 53 61 76 65 70 6f   sqlite3.pSavepo
42a0: 69 6e 74 2e 0a 2a 2a 20 0a 2a 2a 20 55 73 61 67  int..** .** Usag
42b0: 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73  e:.**.**     ass
42c0: 65 72 74 28 20 63 68 65 63 6b 53 61 76 65 70 6f  ert( checkSavepo
42d0: 69 6e 74 43 6f 75 6e 74 28 64 62 29 20 29 3b 0a  intCount(db) );.
42e0: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 63 68  */.static int ch
42f0: 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e  eckSavepointCoun
4300: 74 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a  t(sqlite3 *db){.
4310: 20 20 69 6e 74 20 6e 20 3d 20 30 3b 0a 20 20 53    int n = 0;.  S
4320: 61 76 65 70 6f 69 6e 74 20 2a 70 3b 0a 20 20 66  avepoint *p;.  f
4330: 6f 72 28 70 3d 64 62 2d 3e 70 53 61 76 65 70 6f  or(p=db->pSavepo
4340: 69 6e 74 3b 20 70 3b 20 70 3d 70 2d 3e 70 4e 65  int; p; p=p->pNe
4350: 78 74 29 20 6e 2b 2b 3b 0a 20 20 61 73 73 65 72  xt) n++;.  asser
4360: 74 28 20 6e 3d 3d 28 64 62 2d 3e 6e 53 61 76 65  t( n==(db->nSave
4370: 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 69 73 54 72  point + db->isTr
4380: 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69  ansactionSavepoi
4390: 6e 74 29 20 29 3b 0a 20 20 72 65 74 75 72 6e 20  nt) );.  return 
43a0: 31 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  1;.}.#endif../*.
43b0: 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 72 65  ** Return the re
43c0: 67 69 73 74 65 72 20 6f 66 20 70 4f 70 2d 3e 70  gister of pOp->p
43d0: 32 20 61 66 74 65 72 20 66 69 72 73 74 20 70 72  2 after first pr
43e0: 65 70 61 72 69 6e 67 20 69 74 20 74 6f 20 62 65  eparing it to be
43f0: 0a 2a 2a 20 6f 76 65 72 77 72 69 74 74 65 6e 20  .** overwritten 
4400: 77 69 74 68 20 61 6e 20 69 6e 74 65 67 65 72 20  with an integer 
4410: 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63  value..*/.static
4420: 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45   SQLITE_NOINLINE
4430: 20 4d 65 6d 20 2a 6f 75 74 32 50 72 65 72 65 6c   Mem *out2Prerel
4440: 65 61 73 65 57 69 74 68 43 6c 65 61 72 28 4d 65  easeWithClear(Me
4450: 6d 20 2a 70 4f 75 74 29 7b 0a 20 20 73 71 6c 69  m *pOut){.  sqli
4460: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
4470: 6c 28 70 4f 75 74 29 3b 0a 20 20 70 4f 75 74 2d  l(pOut);.  pOut-
4480: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
4490: 3b 0a 20 20 72 65 74 75 72 6e 20 70 4f 75 74 3b  ;.  return pOut;
44a0: 0a 7d 0a 73 74 61 74 69 63 20 4d 65 6d 20 2a 6f  .}.static Mem *o
44b0: 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 56 64  ut2Prerelease(Vd
44c0: 62 65 20 2a 70 2c 20 56 64 62 65 4f 70 20 2a 70  be *p, VdbeOp *p
44d0: 4f 70 29 7b 0a 20 20 4d 65 6d 20 2a 70 4f 75 74  Op){.  Mem *pOut
44e0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
44f0: 3e 70 32 3e 30 20 29 3b 0a 20 20 61 73 73 65 72  >p2>0 );.  asser
4500: 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e  t( pOp->p2<=(p->
4510: 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
4520: 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 20 3d  sor) );.  pOut =
4530: 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
4540: 32 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f  2];.  memAboutTo
4550: 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b  Change(p, pOut);
4560: 0a 20 20 69 66 28 20 56 64 62 65 4d 65 6d 44 79  .  if( VdbeMemDy
4570: 6e 61 6d 69 63 28 70 4f 75 74 29 20 29 7b 20 2f  namic(pOut) ){ /
4580: 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49 46  *OPTIMIZATION-IF
4590: 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20 72 65 74  -FALSE*/.    ret
45a0: 75 72 6e 20 6f 75 74 32 50 72 65 72 65 6c 65 61  urn out2Prerelea
45b0: 73 65 57 69 74 68 43 6c 65 61 72 28 70 4f 75 74  seWithClear(pOut
45c0: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
45d0: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
45e0: 4d 5f 49 6e 74 3b 0a 20 20 20 20 72 65 74 75 72  M_Int;.    retur
45f0: 6e 20 70 4f 75 74 3b 0a 20 20 7d 0a 7d 0a 0a 0a  n pOut;.  }.}...
4600: 2f 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 61 73  /*.** Execute as
4610: 20 6d 75 63 68 20 6f 66 20 61 20 56 44 42 45 20   much of a VDBE 
4620: 70 72 6f 67 72 61 6d 20 61 73 20 77 65 20 63 61  program as we ca
4630: 6e 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20 74 68  n..** This is th
4640: 65 20 63 6f 72 65 20 6f 66 20 73 71 6c 69 74 65  e core of sqlite
4650: 33 5f 73 74 65 70 28 29 2e 20 20 0a 2a 2f 0a 69  3_step().  .*/.i
4660: 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 45 78  nt sqlite3VdbeEx
4670: 65 63 28 0a 20 20 56 64 62 65 20 2a 70 20 20 20  ec(.  Vdbe *p   
4680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4690: 20 2f 2a 20 54 68 65 20 56 44 42 45 20 2a 2f 0a   /* The VDBE */.
46a0: 29 7b 0a 20 20 4f 70 20 2a 61 4f 70 20 3d 20 70  ){.  Op *aOp = p
46b0: 2d 3e 61 4f 70 3b 20 20 20 20 20 20 20 20 20 20  ->aOp;          
46c0: 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4f  /* Copy of p->aO
46d0: 70 20 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70 20 3d  p */.  Op *pOp =
46e0: 20 61 4f 70 3b 20 20 20 20 20 20 20 20 20 20 20   aOp;           
46f0: 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 6f 70 65    /* Current ope
4700: 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 20 64 65  ration */.#if de
4710: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
4720: 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 56  UG) || defined(V
4730: 44 42 45 5f 50 52 4f 46 49 4c 45 29 0a 20 20 4f  DBE_PROFILE).  O
4740: 70 20 2a 70 4f 72 69 67 4f 70 3b 20 20 20 20 20  p *pOrigOp;     
4750: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
4760: 75 65 20 6f 66 20 70 4f 70 20 61 74 20 74 68 65  ue of pOp at the
4770: 20 74 6f 70 20 6f 66 20 74 68 65 20 6c 6f 6f 70   top of the loop
4780: 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 64 65   */.#endif.#ifde
4790: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
47a0: 20 69 6e 74 20 6e 45 78 74 72 61 44 65 6c 65 74   int nExtraDelet
47b0: 65 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 56  e = 0;      /* V
47c0: 65 72 69 66 69 65 73 20 46 4f 52 44 45 4c 45 54  erifies FORDELET
47d0: 45 20 61 6e 64 20 41 55 58 44 45 4c 45 54 45 20  E and AUXDELETE 
47e0: 66 6c 61 67 73 20 2a 2f 0a 23 65 6e 64 69 66 0a  flags */.#endif.
47f0: 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54    int rc = SQLIT
4800: 45 5f 4f 4b 3b 20 20 20 20 20 20 20 20 2f 2a 20  E_OK;        /* 
4810: 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20  Value to return 
4820: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  */.  sqlite3 *db
4830: 20 3d 20 70 2d 3e 64 62 3b 20 20 20 20 20 20 20   = p->db;       
4840: 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20  /* The database 
4850: 2a 2f 0a 20 20 75 38 20 72 65 73 65 74 53 63 68  */.  u8 resetSch
4860: 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 30 3b 20  emaOnFault = 0; 
4870: 2f 2a 20 52 65 73 65 74 20 73 63 68 65 6d 61 20  /* Reset schema 
4880: 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20 69  after an error i
4890: 66 20 70 6f 73 69 74 69 76 65 20 2a 2f 0a 20 20  f positive */.  
48a0: 75 38 20 65 6e 63 6f 64 69 6e 67 20 3d 20 45 4e  u8 encoding = EN
48b0: 43 28 64 62 29 3b 20 20 20 20 20 2f 2a 20 54 68  C(db);     /* Th
48c0: 65 20 64 61 74 61 62 61 73 65 20 65 6e 63 6f 64  e database encod
48d0: 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69 43 6f  ing */.  int iCo
48e0: 6d 70 61 72 65 20 3d 20 30 3b 20 20 20 20 20 20  mpare = 0;      
48f0: 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66      /* Result of
4900: 20 6c 61 73 74 20 63 6f 6d 70 61 72 69 73 6f 6e   last comparison
4910: 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e   */.  unsigned n
4920: 56 6d 53 74 65 70 20 3d 20 30 3b 20 20 20 20 20  VmStep = 0;     
4930: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 76 69   /* Number of vi
4940: 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 73 74  rtual machine st
4950: 65 70 73 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  eps */.#ifndef S
4960: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52  QLITE_OMIT_PROGR
4970: 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 75  ESS_CALLBACK.  u
4980: 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67 72 65 73  nsigned nProgres
4990: 73 4c 69 6d 69 74 20 3d 20 30 3b 2f 2a 20 49 6e  sLimit = 0;/* In
49a0: 76 6f 6b 65 20 78 50 72 6f 67 72 65 73 73 28 29  voke xProgress()
49b0: 20 77 68 65 6e 20 6e 56 6d 53 74 65 70 20 72 65   when nVmStep re
49c0: 61 63 68 65 73 20 74 68 69 73 20 2a 2f 0a 23 65  aches this */.#e
49d0: 6e 64 69 66 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d  ndif.  Mem *aMem
49e0: 20 3d 20 70 2d 3e 61 4d 65 6d 3b 20 20 20 20 20   = p->aMem;     
49f0: 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e    /* Copy of p->
4a00: 61 4d 65 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  aMem */.  Mem *p
4a10: 49 6e 31 20 3d 20 30 3b 20 20 20 20 20 20 20 20  In1 = 0;        
4a20: 20 20 20 20 20 2f 2a 20 31 73 74 20 69 6e 70 75       /* 1st inpu
4a30: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d  t operand */.  M
4a40: 65 6d 20 2a 70 49 6e 32 20 3d 20 30 3b 20 20 20  em *pIn2 = 0;   
4a50: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32 6e 64            /* 2nd
4a60: 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a   input operand *
4a70: 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 33 20 3d 20  /.  Mem *pIn3 = 
4a80: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  0;             /
4a90: 2a 20 33 72 64 20 69 6e 70 75 74 20 6f 70 65 72  * 3rd input oper
4aa0: 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4f  and */.  Mem *pO
4ab0: 75 74 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  ut = 0;         
4ac0: 20 20 20 20 2f 2a 20 4f 75 74 70 75 74 20 6f 70      /* Output op
4ad0: 65 72 61 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 2a  erand */.  int *
4ae0: 61 50 65 72 6d 75 74 65 20 3d 20 30 3b 20 20 20  aPermute = 0;   
4af0: 20 20 20 20 20 20 2f 2a 20 50 65 72 6d 75 74 61        /* Permuta
4b00: 74 69 6f 6e 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  tion of columns 
4b10: 66 6f 72 20 4f 50 5f 43 6f 6d 70 61 72 65 20 2a  for OP_Compare *
4b20: 2f 0a 20 20 69 36 34 20 6c 61 73 74 52 6f 77 69  /.  i64 lastRowi
4b30: 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69  d = db->lastRowi
4b40: 64 3b 20 20 2f 2a 20 53 61 76 65 64 20 76 61 6c  d;  /* Saved val
4b50: 75 65 20 6f 66 20 74 68 65 20 6c 61 73 74 20 69  ue of the last i
4b60: 6e 73 65 72 74 20 52 4f 57 49 44 20 2a 2f 0a 23  nsert ROWID */.#
4b70: 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49  ifdef VDBE_PROFI
4b80: 4c 45 0a 20 20 75 36 34 20 73 74 61 72 74 3b 20  LE.  u64 start; 
4b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ba0: 2f 2a 20 43 50 55 20 63 6c 6f 63 6b 20 63 6f 75  /* CPU clock cou
4bb0: 6e 74 20 61 74 20 73 74 61 72 74 20 6f 66 20 6f  nt at start of o
4bc0: 70 63 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a  pcode */.#endif.
4bd0: 20 20 2f 2a 2a 2a 20 49 4e 53 45 52 54 20 53 54    /*** INSERT ST
4be0: 41 43 4b 20 55 4e 49 4f 4e 20 48 45 52 45 20 2a  ACK UNION HERE *
4bf0: 2a 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70  **/..  assert( p
4c00: 2d 3e 6d 61 67 69 63 3d 3d 56 44 42 45 5f 4d 41  ->magic==VDBE_MA
4c10: 47 49 43 5f 52 55 4e 20 29 3b 20 20 2f 2a 20 73  GIC_RUN );  /* s
4c20: 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 76 65  qlite3_step() ve
4c30: 72 69 66 69 65 73 20 74 68 69 73 20 2a 2f 0a 20  rifies this */. 
4c40: 20 73 71 6c 69 74 65 33 56 64 62 65 45 6e 74 65   sqlite3VdbeEnte
4c50: 72 28 70 29 3b 0a 20 20 69 66 28 20 70 2d 3e 72  r(p);.  if( p->r
4c60: 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20  c==SQLITE_NOMEM 
4c70: 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 68  ){.    /* This h
4c80: 61 70 70 65 6e 73 20 69 66 20 61 20 6d 61 6c 6c  appens if a mall
4c90: 6f 63 28 29 20 69 6e 73 69 64 65 20 61 20 63 61  oc() inside a ca
4ca0: 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 6f  ll to sqlite3_co
4cb0: 6c 75 6d 6e 5f 74 65 78 74 28 29 20 6f 72 0a 20  lumn_text() or. 
4cc0: 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f     ** sqlite3_co
4cd0: 6c 75 6d 6e 5f 74 65 78 74 31 36 28 29 20 66 61  lumn_text16() fa
4ce0: 69 6c 65 64 2e 20 20 2a 2f 0a 20 20 20 20 67 6f  iled.  */.    go
4cf0: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20  to no_mem;.  }. 
4d00: 20 61 73 73 65 72 74 28 20 70 2d 3e 72 63 3d 3d   assert( p->rc==
4d10: 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 2d  SQLITE_OK || (p-
4d20: 3e 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54  >rc&0xff)==SQLIT
4d30: 45 5f 42 55 53 59 20 29 3b 0a 20 20 61 73 73 65  E_BUSY );.  asse
4d40: 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
4d50: 20 7c 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 21   || p->readOnly!
4d60: 3d 30 20 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20  =0 );.  p->rc = 
4d70: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 70 2d 3e  SQLITE_OK;.  p->
4d80: 69 43 75 72 72 65 6e 74 54 69 6d 65 20 3d 20 30  iCurrentTime = 0
4d90: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 65  ;.  assert( p->e
4da0: 78 70 6c 61 69 6e 3d 3d 30 20 29 3b 0a 20 20 70  xplain==0 );.  p
4db0: 2d 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20 30  ->pResultSet = 0
4dc0: 3b 0a 20 20 64 62 2d 3e 62 75 73 79 48 61 6e 64  ;.  db->busyHand
4dd0: 6c 65 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20  ler.nBusy = 0;. 
4de0: 20 69 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e   if( db->u1.isIn
4df0: 74 65 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f  terrupted ) goto
4e00: 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e   abort_due_to_in
4e10: 74 65 72 72 75 70 74 3b 0a 20 20 73 71 6c 69 74  terrupt;.  sqlit
4e20: 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c  e3VdbeIOTraceSql
4e30: 28 70 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  (p);.#ifndef SQL
4e40: 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53  ITE_OMIT_PROGRES
4e50: 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 66 28  S_CALLBACK.  if(
4e60: 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 20 29   db->xProgress )
4e70: 7b 0a 20 20 20 20 75 33 32 20 69 50 72 69 6f 72  {.    u32 iPrior
4e80: 20 3d 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53   = p->aCounter[S
4e90: 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53  QLITE_STMTSTATUS
4ea0: 5f 56 4d 5f 53 54 45 50 5d 3b 0a 20 20 20 20 61  _VM_STEP];.    a
4eb0: 73 73 65 72 74 28 20 30 20 3c 20 64 62 2d 3e 6e  ssert( 0 < db->n
4ec0: 50 72 6f 67 72 65 73 73 4f 70 73 20 29 3b 0a 20  ProgressOps );. 
4ed0: 20 20 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69     nProgressLimi
4ee0: 74 20 3d 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73  t = db->nProgres
4ef0: 73 4f 70 73 20 2d 20 28 69 50 72 69 6f 72 20 25  sOps - (iPrior %
4f00: 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70   db->nProgressOp
4f10: 73 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 23  s);.  }.#endif.#
4f20: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
4f30: 55 47 0a 20 20 73 71 6c 69 74 65 33 42 65 67 69  UG.  sqlite3Begi
4f40: 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b  nBenignMalloc();
4f50: 0a 20 20 69 66 28 20 70 2d 3e 70 63 3d 3d 30 0a  .  if( p->pc==0.
4f60: 20 20 20 26 26 20 28 70 2d 3e 64 62 2d 3e 66 6c     && (p->db->fl
4f70: 61 67 73 20 26 20 28 53 51 4c 49 54 45 5f 56 64  ags & (SQLITE_Vd
4f80: 62 65 4c 69 73 74 69 6e 67 7c 53 51 4c 49 54 45  beListing|SQLITE
4f90: 5f 56 64 62 65 45 51 50 7c 53 51 4c 49 54 45 5f  _VdbeEQP|SQLITE_
4fa0: 56 64 62 65 54 72 61 63 65 29 29 21 3d 30 0a 20  VdbeTrace))!=0. 
4fb0: 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20   ){.    int i;. 
4fc0: 20 20 20 69 6e 74 20 6f 6e 63 65 20 3d 20 31 3b     int once = 1;
4fd0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
4fe0: 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20  PrintSql(p);.   
4ff0: 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67   if( p->db->flag
5000: 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 4c  s & SQLITE_VdbeL
5010: 69 73 74 69 6e 67 20 29 7b 0a 20 20 20 20 20 20  isting ){.      
5020: 70 72 69 6e 74 66 28 22 56 44 42 45 20 50 72 6f  printf("VDBE Pro
5030: 67 72 61 6d 20 4c 69 73 74 69 6e 67 3a 5c 6e 22  gram Listing:\n"
5040: 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30  );.      for(i=0
5050: 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29  ; i<p->nOp; i++)
5060: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
5070: 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74 64  3VdbePrintOp(std
5080: 6f 75 74 2c 20 69 2c 20 26 61 4f 70 5b 69 5d 29  out, i, &aOp[i])
5090: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
50a0: 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66      if( p->db->f
50b0: 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64  lags & SQLITE_Vd
50c0: 62 65 45 51 50 20 29 7b 0a 20 20 20 20 20 20 66  beEQP ){.      f
50d0: 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70  or(i=0; i<p->nOp
50e0: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; i++){.        
50f0: 69 66 28 20 61 4f 70 5b 69 5d 2e 6f 70 63 6f 64  if( aOp[i].opcod
5100: 65 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e 20 29 7b  e==OP_Explain ){
5110: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 6f  .          if( o
5120: 6e 63 65 20 29 20 70 72 69 6e 74 66 28 22 56 44  nce ) printf("VD
5130: 42 45 20 51 75 65 72 79 20 50 6c 61 6e 3a 5c 6e  BE Query Plan:\n
5140: 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70 72  ");.          pr
5150: 69 6e 74 66 28 22 25 73 5c 6e 22 2c 20 61 4f 70  intf("%s\n", aOp
5160: 5b 69 5d 2e 70 34 2e 7a 29 3b 0a 20 20 20 20 20  [i].p4.z);.     
5170: 20 20 20 20 20 6f 6e 63 65 20 3d 20 30 3b 0a 20       once = 0;. 
5180: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
5190: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70  .    }.    if( p
51a0: 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51  ->db->flags & SQ
51b0: 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 20 29  LITE_VdbeTrace )
51c0: 20 20 70 72 69 6e 74 66 28 22 56 44 42 45 20 54    printf("VDBE T
51d0: 72 61 63 65 3a 5c 6e 22 29 3b 0a 20 20 7d 0a 20  race:\n");.  }. 
51e0: 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67   sqlite3EndBenig
51f0: 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 23 65 6e 64 69  nMalloc();.#endi
5200: 66 0a 20 20 66 6f 72 28 70 4f 70 3d 26 61 4f 70  f.  for(pOp=&aOp
5210: 5b 70 2d 3e 70 63 5d 3b 20 31 3b 20 70 4f 70 2b  [p->pc]; 1; pOp+
5220: 2b 29 7b 0a 20 20 20 20 2f 2a 20 45 72 72 6f 72  +){.    /* Error
5230: 73 20 61 72 65 20 64 65 74 65 63 74 65 64 20 62  s are detected b
5240: 79 20 69 6e 64 69 76 69 64 75 61 6c 20 6f 70 63  y individual opc
5250: 6f 64 65 73 2c 20 77 69 74 68 20 61 6e 20 69 6d  odes, with an im
5260: 6d 65 64 69 61 74 65 0a 20 20 20 20 2a 2a 20 6a  mediate.    ** j
5270: 75 6d 70 73 20 74 6f 20 61 62 6f 72 74 5f 64 75  umps to abort_du
5280: 65 5f 74 6f 5f 65 72 72 6f 72 2e 20 2a 2f 0a 20  e_to_error. */. 
5290: 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
52a0: 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 0a 20 20 20  QLITE_OK );..   
52b0: 20 61 73 73 65 72 74 28 20 70 4f 70 3e 3d 61 4f   assert( pOp>=aO
52c0: 70 20 26 26 20 70 4f 70 3c 26 61 4f 70 5b 70 2d  p && pOp<&aOp[p-
52d0: 3e 6e 4f 70 5d 29 3b 0a 23 69 66 64 65 66 20 56  >nOp]);.#ifdef V
52e0: 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20  DBE_PROFILE.    
52f0: 73 74 61 72 74 20 3d 20 73 71 6c 69 74 65 33 48  start = sqlite3H
5300: 77 74 69 6d 65 28 29 3b 0a 23 65 6e 64 69 66 0a  wtime();.#endif.
5310: 20 20 20 20 6e 56 6d 53 74 65 70 2b 2b 3b 0a 23      nVmStep++;.#
5320: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
5330: 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41  BLE_STMT_SCANSTA
5340: 54 55 53 0a 20 20 20 20 69 66 28 20 70 2d 3e 61  TUS.    if( p->a
5350: 6e 45 78 65 63 20 29 20 70 2d 3e 61 6e 45 78 65  nExec ) p->anExe
5360: 63 5b 28 69 6e 74 29 28 70 4f 70 2d 61 4f 70 29  c[(int)(pOp-aOp)
5370: 5d 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20  ]++;.#endif..   
5380: 20 2f 2a 20 4f 6e 6c 79 20 61 6c 6c 6f 77 20 74   /* Only allow t
5390: 72 61 63 69 6e 67 20 69 66 20 53 51 4c 49 54 45  racing if SQLITE
53a0: 5f 44 45 42 55 47 20 69 73 20 64 65 66 69 6e 65  _DEBUG is define
53b0: 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65 66  d..    */.#ifdef
53c0: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
53d0: 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20    if( db->flags 
53e0: 26 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61  & SQLITE_VdbeTra
53f0: 63 65 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ce ){.      sqli
5400: 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73  te3VdbePrintOp(s
5410: 74 64 6f 75 74 2c 20 28 69 6e 74 29 28 70 4f 70  tdout, (int)(pOp
5420: 20 2d 20 61 4f 70 29 2c 20 70 4f 70 29 3b 0a 20   - aOp), pOp);. 
5430: 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20     }.#endif.    
5440: 20 20 0a 0a 20 20 20 20 2f 2a 20 43 68 65 63 6b    ..    /* Check
5450: 20 74 6f 20 73 65 65 20 69 66 20 77 65 20 6e 65   to see if we ne
5460: 65 64 20 74 6f 20 73 69 6d 75 6c 61 74 65 20 61  ed to simulate a
5470: 6e 20 69 6e 74 65 72 72 75 70 74 2e 20 20 54 68  n interrupt.  Th
5480: 69 73 20 6f 6e 6c 79 20 68 61 70 70 65 6e 73 0a  is only happens.
5490: 20 20 20 20 2a 2a 20 69 66 20 77 65 20 68 61 76      ** if we hav
54a0: 65 20 61 20 73 70 65 63 69 61 6c 20 74 65 73 74  e a special test
54b0: 20 62 75 69 6c 64 2e 0a 20 20 20 20 2a 2f 0a 23   build..    */.#
54c0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
54d0: 54 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  T.    if( sqlite
54e0: 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e  3_interrupt_coun
54f0: 74 3e 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  t>0 ){.      sql
5500: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63  ite3_interrupt_c
5510: 6f 75 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 69 66  ount--;.      if
5520: 28 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72  ( sqlite3_interr
5530: 75 70 74 5f 63 6f 75 6e 74 3d 3d 30 20 29 7b 0a  upt_count==0 ){.
5540: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
5550: 69 6e 74 65 72 72 75 70 74 28 64 62 29 3b 0a 20  interrupt(db);. 
5560: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e       }.    }.#en
5570: 64 69 66 0a 0a 20 20 20 20 2f 2a 20 53 61 6e 69  dif..    /* Sani
5580: 74 79 20 63 68 65 63 6b 69 6e 67 20 6f 6e 20 6f  ty checking on o
5590: 74 68 65 72 20 6f 70 65 72 61 6e 64 73 20 2a 2f  ther operands */
55a0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
55b0: 45 42 55 47 0a 20 20 20 20 7b 0a 20 20 20 20 20  EBUG.    {.     
55c0: 20 75 38 20 6f 70 50 72 6f 70 65 72 74 79 20 3d   u8 opProperty =
55d0: 20 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72   sqlite3OpcodePr
55e0: 6f 70 65 72 74 79 5b 70 4f 70 2d 3e 6f 70 63 6f  operty[pOp->opco
55f0: 64 65 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 28  de];.      if( (
5600: 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46  opProperty & OPF
5610: 4c 47 5f 49 4e 31 29 21 3d 30 20 29 7b 0a 20 20  LG_IN1)!=0 ){.  
5620: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5630: 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 20 20 20  p->p1>0 );.     
5640: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5650: 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  p1<=(p->nMem+1 -
5660: 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a   p->nCursor) );.
5670: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
5680: 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d  memIsValid(&aMem
5690: 5b 70 4f 70 2d 3e 70 31 5d 29 20 29 3b 0a 20 20  [pOp->p1]) );.  
56a0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
56b0: 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65  lite3VdbeCheckMe
56c0: 6d 49 6e 76 61 72 69 61 6e 74 73 28 26 61 4d 65  mInvariants(&aMe
56d0: 6d 5b 70 4f 70 2d 3e 70 31 5d 29 20 29 3b 0a 20  m[pOp->p1]) );. 
56e0: 20 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f         REGISTER_
56f0: 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 26  TRACE(pOp->p1, &
5700: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a  aMem[pOp->p1]);.
5710: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
5720: 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20  ( (opProperty & 
5730: 4f 50 46 4c 47 5f 49 4e 32 29 21 3d 30 20 29 7b  OPFLG_IN2)!=0 ){
5740: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
5750: 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20   pOp->p2>0 );.  
5760: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5770: 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p->p2<=(p->nMem+
5780: 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20  1 - p->nCursor) 
5790: 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
57a0: 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61  t( memIsValid(&a
57b0: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 20 29 3b  Mem[pOp->p2]) );
57c0: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
57d0: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63   sqlite3VdbeChec
57e0: 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 26  kMemInvariants(&
57f0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 20 29  aMem[pOp->p2]) )
5800: 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49 53 54  ;.        REGIST
5810: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
5820: 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  , &aMem[pOp->p2]
5830: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
5840: 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72 74 79   if( (opProperty
5850: 20 26 20 4f 50 46 4c 47 5f 49 4e 33 29 21 3d 30   & OPFLG_IN3)!=0
5860: 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
5870: 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b  rt( pOp->p3>0 );
5880: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
5890: 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d   pOp->p3<=(p->nM
58a0: 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
58b0: 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  r) );.        as
58c0: 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
58d0: 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29  (&aMem[pOp->p3])
58e0: 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
58f0: 72 74 28 20 73 71 6c 69 74 65 33 56 64 62 65 43  rt( sqlite3VdbeC
5900: 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74  heckMemInvariant
5910: 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  s(&aMem[pOp->p3]
5920: 29 20 29 3b 0a 20 20 20 20 20 20 20 20 52 45 47  ) );.        REG
5930: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
5940: 3e 70 33 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  >p3, &aMem[pOp->
5950: 70 33 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  p3]);.      }.  
5960: 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65      if( (opPrope
5970: 72 74 79 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32  rty & OPFLG_OUT2
5980: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )!=0 ){.        
5990: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
59a0: 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  0 );.        ass
59b0: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70  ert( pOp->p2<=(p
59c0: 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
59d0: 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20  ursor) );.      
59e0: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
59f0: 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ge(p, &aMem[pOp-
5a00: 3e 70 32 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20  >p2]);.      }. 
5a10: 20 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70       if( (opProp
5a20: 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 4f 55 54  erty & OPFLG_OUT
5a30: 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  3)!=0 ){.       
5a40: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
5a50: 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  >0 );.        as
5a60: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28  sert( pOp->p3<=(
5a70: 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
5a80: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20  Cursor) );.     
5a90: 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
5aa0: 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70  nge(p, &aMem[pOp
5ab0: 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 7d 0a  ->p3]);.      }.
5ac0: 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 23 69 66      }.#endif.#if
5ad0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
5ae0: 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65  DEBUG) || define
5af0: 64 28 56 44 42 45 5f 50 52 4f 46 49 4c 45 29 0a  d(VDBE_PROFILE).
5b00: 20 20 20 20 70 4f 72 69 67 4f 70 20 3d 20 70 4f      pOrigOp = pO
5b10: 70 3b 0a 23 65 6e 64 69 66 0a 20 20 0a 20 20 20  p;.#endif.  .   
5b20: 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70   switch( pOp->op
5b30: 63 6f 64 65 20 29 7b 0a 0a 2f 2a 2a 2a 2a 2a 2a  code ){../******
5b40: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5b50: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5b60: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5b70: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5b80: 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57 68 61 74 20  *******.** What 
5b90: 66 6f 6c 6c 6f 77 73 20 69 73 20 61 20 6d 61 73  follows is a mas
5ba0: 73 69 76 65 20 73 77 69 74 63 68 20 73 74 61 74  sive switch stat
5bb0: 65 6d 65 6e 74 20 77 68 65 72 65 20 65 61 63 68  ement where each
5bc0: 20 63 61 73 65 20 69 6d 70 6c 65 6d 65 6e 74 73   case implements
5bd0: 20 61 0a 2a 2a 20 73 65 70 61 72 61 74 65 20 69   a.** separate i
5be0: 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e 20 74 68  nstruction in th
5bf0: 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  e virtual machin
5c00: 65 2e 20 20 49 66 20 77 65 20 66 6f 6c 6c 6f 77  e.  If we follow
5c10: 20 74 68 65 20 75 73 75 61 6c 0a 2a 2a 20 69 6e   the usual.** in
5c20: 64 65 6e 74 61 74 69 6f 6e 20 63 6f 6e 76 65 6e  dentation conven
5c30: 74 69 6f 6e 73 2c 20 65 61 63 68 20 63 61 73 65  tions, each case
5c40: 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 64 65 6e   should be inden
5c50: 74 65 64 20 62 79 20 36 20 73 70 61 63 65 73 2e  ted by 6 spaces.
5c60: 20 20 42 75 74 0a 2a 2a 20 74 68 61 74 20 69 73    But.** that is
5c70: 20 61 20 6c 6f 74 20 6f 66 20 77 61 73 74 65 64   a lot of wasted
5c80: 20 73 70 61 63 65 20 6f 6e 20 74 68 65 20 6c 65   space on the le
5c90: 66 74 20 6d 61 72 67 69 6e 2e 20 20 53 6f 20 74  ft margin.  So t
5ca0: 68 65 20 63 6f 64 65 20 77 69 74 68 69 6e 0a 2a  he code within.*
5cb0: 2a 20 74 68 65 20 73 77 69 74 63 68 20 73 74 61  * the switch sta
5cc0: 74 65 6d 65 6e 74 20 77 69 6c 6c 20 62 72 65 61  tement will brea
5cd0: 6b 20 77 69 74 68 20 63 6f 6e 76 65 6e 74 69 6f  k with conventio
5ce0: 6e 20 61 6e 64 20 62 65 20 66 6c 75 73 68 2d 6c  n and be flush-l
5cf0: 65 66 74 2e 20 41 6e 6f 74 68 65 72 0a 2a 2a 20  eft. Another.** 
5d00: 62 69 67 20 63 6f 6d 6d 65 6e 74 20 28 73 69 6d  big comment (sim
5d10: 69 6c 61 72 20 74 6f 20 74 68 69 73 20 6f 6e 65  ilar to this one
5d20: 29 20 77 69 6c 6c 20 6d 61 72 6b 20 74 68 65 20  ) will mark the 
5d30: 70 6f 69 6e 74 20 69 6e 20 74 68 65 20 63 6f 64  point in the cod
5d40: 65 20 77 68 65 72 65 0a 2a 2a 20 77 65 20 74 72  e where.** we tr
5d50: 61 6e 73 69 74 69 6f 6e 20 62 61 63 6b 20 74 6f  ansition back to
5d60: 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61 74   normal indentat
5d70: 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66  ion..**.** The f
5d80: 6f 72 6d 61 74 74 69 6e 67 20 6f 66 20 65 61 63  ormatting of eac
5d90: 68 20 63 61 73 65 20 69 73 20 69 6d 70 6f 72 74  h case is import
5da0: 61 6e 74 2e 20 20 54 68 65 20 6d 61 6b 65 66 69  ant.  The makefi
5db0: 6c 65 20 66 6f 72 20 53 51 4c 69 74 65 0a 2a 2a  le for SQLite.**
5dc0: 20 67 65 6e 65 72 61 74 65 73 20 74 77 6f 20 43   generates two C
5dd0: 20 66 69 6c 65 73 20 22 6f 70 63 6f 64 65 73 2e   files "opcodes.
5de0: 68 22 20 61 6e 64 20 22 6f 70 63 6f 64 65 73 2e  h" and "opcodes.
5df0: 63 22 20 62 79 20 73 63 61 6e 6e 69 6e 67 20 74  c" by scanning t
5e00: 68 69 73 0a 2a 2a 20 66 69 6c 65 20 6c 6f 6f 6b  his.** file look
5e10: 69 6e 67 20 66 6f 72 20 6c 69 6e 65 73 20 74 68  ing for lines th
5e20: 61 74 20 62 65 67 69 6e 20 77 69 74 68 20 22 63  at begin with "c
5e30: 61 73 65 20 4f 50 5f 22 2e 20 20 54 68 65 20 6f  ase OP_".  The o
5e40: 70 63 6f 64 65 73 2e 68 20 66 69 6c 65 73 0a 2a  pcodes.h files.*
5e50: 2a 20 77 69 6c 6c 20 62 65 20 66 69 6c 6c 65 64  * will be filled
5e60: 20 77 69 74 68 20 23 64 65 66 69 6e 65 73 20 74   with #defines t
5e70: 68 61 74 20 67 69 76 65 20 75 6e 69 71 75 65 20  hat give unique 
5e80: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73 20 74  integer values t
5e90: 6f 20 65 61 63 68 0a 2a 2a 20 6f 70 63 6f 64 65  o each.** opcode
5ea0: 20 61 6e 64 20 74 68 65 20 6f 70 63 6f 64 65 73   and the opcodes
5eb0: 2e 63 20 66 69 6c 65 20 69 73 20 66 69 6c 6c 65  .c file is fille
5ec0: 64 20 77 69 74 68 20 61 6e 20 61 72 72 61 79 20  d with an array 
5ed0: 6f 66 20 73 74 72 69 6e 67 73 20 77 68 65 72 65  of strings where
5ee0: 0a 2a 2a 20 65 61 63 68 20 73 74 72 69 6e 67 20  .** each string 
5ef0: 69 73 20 74 68 65 20 73 79 6d 62 6f 6c 69 63 20  is the symbolic 
5f00: 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 63 6f 72  name for the cor
5f10: 72 65 73 70 6f 6e 64 69 6e 67 20 6f 70 63 6f 64  responding opcod
5f20: 65 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 63 61  e.  If the.** ca
5f30: 73 65 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  se statement is 
5f40: 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 63 6f  followed by a co
5f50: 6d 6d 65 6e 74 20 6f 66 20 74 68 65 20 66 6f 72  mment of the for
5f60: 6d 20 22 2f 23 20 73 61 6d 65 20 61 73 20 2e 2e  m "/# same as ..
5f70: 2e 20 23 2f 22 0a 2a 2a 20 74 68 61 74 20 63 6f  . #/".** that co
5f80: 6d 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f  mment is used to
5f90: 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 70   determine the p
5fa0: 61 72 74 69 63 75 6c 61 72 20 76 61 6c 75 65 20  articular value 
5fb0: 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 0a 2a  of the opcode..*
5fc0: 2a 0a 2a 2a 20 4f 74 68 65 72 20 6b 65 79 77 6f  *.** Other keywo
5fd0: 72 64 73 20 69 6e 20 74 68 65 20 63 6f 6d 6d 65  rds in the comme
5fe0: 6e 74 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20  nt that follows 
5ff0: 65 61 63 68 20 63 61 73 65 20 61 72 65 20 75 73  each case are us
6000: 65 64 20 74 6f 0a 2a 2a 20 63 6f 6e 73 74 72 75  ed to.** constru
6010: 63 74 20 74 68 65 20 4f 50 46 4c 47 5f 49 4e 49  ct the OPFLG_INI
6020: 54 49 41 4c 49 5a 45 52 20 76 61 6c 75 65 20 74  TIALIZER value t
6030: 68 61 74 20 69 6e 69 74 69 61 6c 69 7a 65 73 20  hat initializes 
6040: 6f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d  opcodeProperty[]
6050: 2e 0a 2a 2a 20 4b 65 79 77 6f 72 64 73 20 69 6e  ..** Keywords in
6060: 63 6c 75 64 65 3a 20 69 6e 31 2c 20 69 6e 32 2c  clude: in1, in2,
6070: 20 69 6e 33 2c 20 6f 75 74 32 2c 20 6f 75 74 33   in3, out2, out3
6080: 2e 20 20 53 65 65 0a 2a 2a 20 74 68 65 20 6d 6b  .  See.** the mk
6090: 6f 70 63 6f 64 65 68 2e 61 77 6b 20 73 63 72 69  opcodeh.awk scri
60a0: 70 74 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  pt for additiona
60b0: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
60c0: 2a 0a 2a 2a 20 44 6f 63 75 6d 65 6e 74 61 74 69  *.** Documentati
60d0: 6f 6e 20 61 62 6f 75 74 20 56 44 42 45 20 6f 70  on about VDBE op
60e0: 63 6f 64 65 73 20 69 73 20 67 65 6e 65 72 61 74  codes is generat
60f0: 65 64 20 62 79 20 73 63 61 6e 6e 69 6e 67 20 74  ed by scanning t
6100: 68 69 73 20 66 69 6c 65 0a 2a 2a 20 66 6f 72 20  his file.** for 
6110: 6c 69 6e 65 73 20 6f 66 20 74 68 61 74 20 63 6f  lines of that co
6120: 6e 74 61 69 6e 20 22 4f 70 63 6f 64 65 3a 22 2e  ntain "Opcode:".
6130: 20 20 54 68 61 74 20 6c 69 6e 65 20 61 6e 64 20    That line and 
6140: 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 0a 2a  all subsequent.*
6150: 2a 20 63 6f 6d 6d 65 6e 74 20 6c 69 6e 65 73 20  * comment lines 
6160: 61 72 65 20 75 73 65 64 20 69 6e 20 74 68 65 20  are used in the 
6170: 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 74 68  generation of th
6180: 65 20 6f 70 63 6f 64 65 2e 68 74 6d 6c 20 64 6f  e opcode.html do
6190: 63 75 6d 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20 66  cumentation.** f
61a0: 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 55 4d 4d 41  ile..**.** SUMMA
61b0: 52 59 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 46 6f  RY:.**.**     Fo
61c0: 72 6d 61 74 74 69 6e 67 20 69 73 20 69 6d 70 6f  rmatting is impo
61d0: 72 74 61 6e 74 20 74 6f 20 73 63 72 69 70 74 73  rtant to scripts
61e0: 20 74 68 61 74 20 73 63 61 6e 20 74 68 69 73 20   that scan this 
61f0: 66 69 6c 65 2e 0a 2a 2a 20 20 20 20 20 44 6f 20  file..**     Do 
6200: 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72 6f 6d  not deviate from
6210: 20 74 68 65 20 66 6f 72 6d 61 74 74 69 6e 67 20   the formatting 
6220: 73 74 79 6c 65 20 63 75 72 72 65 6e 74 6c 79 20  style currently 
6230: 69 6e 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a  in use..**.*****
6240: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6250: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6260: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6270: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6280: 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 20 4f 70  ********/../* Op
6290: 63 6f 64 65 3a 20 20 47 6f 74 6f 20 2a 20 50 32  code:  Goto * P2
62a0: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6e 20   * * *.**.** An 
62b0: 75 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 6a 75  unconditional ju
62c0: 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20 50 32  mp to address P2
62d0: 2e 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 69 6e  ..** The next in
62e0: 73 74 72 75 63 74 69 6f 6e 20 65 78 65 63 75 74  struction execut
62f0: 65 64 20 77 69 6c 6c 20 62 65 20 0a 2a 2a 20 74  ed will be .** t
6300: 68 65 20 6f 6e 65 20 61 74 20 69 6e 64 65 78 20  he one at index 
6310: 50 32 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69  P2 from the begi
6320: 6e 6e 69 6e 67 20 6f 66 0a 2a 2a 20 74 68 65 20  nning of.** the 
6330: 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 54  program..**.** T
6340: 68 65 20 50 31 20 70 61 72 61 6d 65 74 65 72 20  he P1 parameter 
6350: 69 73 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20  is not actually 
6360: 75 73 65 64 20 62 79 20 74 68 69 73 20 6f 70 63  used by this opc
6370: 6f 64 65 2e 20 20 48 6f 77 65 76 65 72 2c 20 69  ode.  However, i
6380: 74 0a 2a 2a 20 69 73 20 73 6f 6d 65 74 69 6d 65  t.** is sometime
6390: 73 20 73 65 74 20 74 6f 20 31 20 69 6e 73 74 65  s set to 1 inste
63a0: 61 64 20 6f 66 20 30 20 61 73 20 61 20 68 69 6e  ad of 0 as a hin
63b0: 74 20 74 6f 20 74 68 65 20 63 6f 6d 6d 61 6e 64  t to the command
63c0: 2d 6c 69 6e 65 20 73 68 65 6c 6c 0a 2a 2a 20 74  -line shell.** t
63d0: 68 61 74 20 74 68 69 73 20 47 6f 74 6f 20 69 73  hat this Goto is
63e0: 20 74 68 65 20 62 6f 74 74 6f 6d 20 6f 66 20 61   the bottom of a
63f0: 20 6c 6f 6f 70 20 61 6e 64 20 74 68 61 74 20 74   loop and that t
6400: 68 65 20 6c 69 6e 65 73 20 66 72 6f 6d 20 50 32  he lines from P2
6410: 20 64 6f 77 6e 0a 2a 2a 20 74 6f 20 74 68 65 20   down.** to the 
6420: 63 75 72 72 65 6e 74 20 6c 69 6e 65 20 73 68 6f  current line sho
6430: 75 6c 64 20 62 65 20 69 6e 64 65 6e 74 65 64 20  uld be indented 
6440: 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70  for EXPLAIN outp
6450: 75 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47  ut..*/.case OP_G
6460: 6f 74 6f 3a 20 7b 20 20 20 20 20 20 20 20 20 20  oto: {          
6470: 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 6a 75     /* jump */.ju
6480: 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68 65  mp_to_p2_and_che
6490: 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74  ck_for_interrupt
64a0: 3a 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70  :.  pOp = &aOp[p
64b0: 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a 0a 20 20  Op->p2 - 1];..  
64c0: 2f 2a 20 4f 70 63 6f 64 65 73 20 74 68 61 74 20  /* Opcodes that 
64d0: 61 72 65 20 75 73 65 64 20 61 73 20 74 68 65 20  are used as the 
64e0: 62 6f 74 74 6f 6d 20 6f 66 20 61 20 6c 6f 6f 70  bottom of a loop
64f0: 20 28 4f 50 5f 4e 65 78 74 2c 20 4f 50 5f 50 72   (OP_Next, OP_Pr
6500: 65 76 2c 0a 20 20 2a 2a 20 4f 50 5f 56 4e 65 78  ev,.  ** OP_VNex
6510: 74 2c 20 4f 50 5f 52 6f 77 53 65 74 4e 65 78 74  t, OP_RowSetNext
6520: 2c 20 6f 72 20 4f 50 5f 53 6f 72 74 65 72 4e 65  , or OP_SorterNe
6530: 78 74 29 20 61 6c 6c 20 6a 75 6d 70 20 68 65 72  xt) all jump her
6540: 65 20 75 70 6f 6e 0a 20 20 2a 2a 20 63 6f 6d 70  e upon.  ** comp
6550: 6c 65 74 69 6f 6e 2e 20 20 43 68 65 63 6b 20 74  letion.  Check t
6560: 6f 20 73 65 65 20 69 66 20 73 71 6c 69 74 65 33  o see if sqlite3
6570: 5f 69 6e 74 65 72 72 75 70 74 28 29 20 68 61 73  _interrupt() has
6580: 20 62 65 65 6e 20 63 61 6c 6c 65 64 0a 20 20 2a   been called.  *
6590: 2a 20 6f 72 20 69 66 20 74 68 65 20 70 72 6f 67  * or if the prog
65a0: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 6e 65  ress callback ne
65b0: 65 64 73 20 74 6f 20 62 65 20 69 6e 76 6f 6b 65  eds to be invoke
65c0: 64 2e 20 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  d. .  **.  ** Th
65d0: 69 73 20 63 6f 64 65 20 75 73 65 73 20 75 6e 73  is code uses uns
65e0: 74 72 75 63 74 75 72 65 64 20 22 67 6f 74 6f 22  tructured "goto"
65f0: 20 73 74 61 74 65 6d 65 6e 74 73 20 61 6e 64 20   statements and 
6600: 64 6f 65 73 20 6e 6f 74 20 6c 6f 6f 6b 20 63 6c  does not look cl
6610: 65 61 6e 2e 0a 20 20 2a 2a 20 42 75 74 20 74 68  ean..  ** But th
6620: 61 74 20 69 73 20 6e 6f 74 20 64 75 65 20 74 6f  at is not due to
6630: 20 73 6c 6f 70 70 79 20 63 6f 64 69 6e 67 20 68   sloppy coding h
6640: 61 62 69 74 73 2e 20 54 68 65 20 63 6f 64 65 20  abits. The code 
6650: 69 73 20 77 72 69 74 74 65 6e 20 74 68 69 73 0a  is written this.
6660: 20 20 2a 2a 20 77 61 79 20 66 6f 72 20 70 65 72    ** way for per
6670: 66 6f 72 6d 61 6e 63 65 2c 20 74 6f 20 61 76 6f  formance, to avo
6680: 69 64 20 68 61 76 69 6e 67 20 74 6f 20 72 75 6e  id having to run
6690: 20 74 68 65 20 69 6e 74 65 72 72 75 70 74 20 61   the interrupt a
66a0: 6e 64 20 70 72 6f 67 72 65 73 73 0a 20 20 2a 2a  nd progress.  **
66b0: 20 63 68 65 63 6b 73 20 6f 6e 20 65 76 65 72 79   checks on every
66c0: 20 6f 70 63 6f 64 65 2e 20 20 54 68 69 73 20 68   opcode.  This h
66d0: 65 6c 70 73 20 73 71 6c 69 74 65 33 5f 73 74 65  elps sqlite3_ste
66e0: 70 28 29 20 74 6f 20 72 75 6e 20 61 62 6f 75 74  p() to run about
66f0: 20 31 2e 35 25 0a 20 20 2a 2a 20 66 61 73 74 65   1.5%.  ** faste
6700: 72 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 22  r according to "
6710: 76 61 6c 67 72 69 6e 64 20 2d 2d 74 6f 6f 6c 3d  valgrind --tool=
6720: 63 61 63 68 65 67 72 69 6e 64 22 20 2a 2f 0a 63  cachegrind" */.c
6730: 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75  heck_for_interru
6740: 70 74 3a 0a 20 20 69 66 28 20 64 62 2d 3e 75 31  pt:.  if( db->u1
6750: 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 20 29  .isInterrupted )
6760: 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
6770: 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a 23 69  to_interrupt;.#i
6780: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
6790: 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42  T_PROGRESS_CALLB
67a0: 41 43 4b 0a 20 20 2f 2a 20 43 61 6c 6c 20 74 68  ACK.  /* Call th
67b0: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
67c0: 61 63 6b 20 69 66 20 69 74 20 69 73 20 63 6f 6e  ack if it is con
67d0: 66 69 67 75 72 65 64 20 61 6e 64 20 74 68 65 20  figured and the 
67e0: 72 65 71 75 69 72 65 64 20 6e 75 6d 62 65 72 0a  required number.
67f0: 20 20 2a 2a 20 6f 66 20 56 44 42 45 20 6f 70 73    ** of VDBE ops
6800: 20 68 61 76 65 20 62 65 65 6e 20 65 78 65 63 75   have been execu
6810: 74 65 64 20 28 65 69 74 68 65 72 20 73 69 6e 63  ted (either sinc
6820: 65 20 74 68 69 73 20 69 6e 76 6f 63 61 74 69 6f  e this invocatio
6830: 6e 20 6f 66 0a 20 20 2a 2a 20 73 71 6c 69 74 65  n of.  ** sqlite
6840: 33 56 64 62 65 45 78 65 63 28 29 20 6f 72 20 73  3VdbeExec() or s
6850: 69 6e 63 65 20 6c 61 73 74 20 74 69 6d 65 20 74  ince last time t
6860: 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  he progress call
6870: 62 61 63 6b 20 77 61 73 20 63 61 6c 6c 65 64 29  back was called)
6880: 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 70 72  ..  ** If the pr
6890: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
68a0: 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f  returns non-zero
68b0: 2c 20 65 78 69 74 20 74 68 65 20 76 69 72 74 75  , exit the virtu
68c0: 61 6c 20 6d 61 63 68 69 6e 65 20 77 69 74 68 0a  al machine with.
68d0: 20 20 2a 2a 20 61 20 72 65 74 75 72 6e 20 63 6f    ** a return co
68e0: 64 65 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 2e  de SQLITE_ABORT.
68f0: 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e  .  */.  if( db->
6900: 78 50 72 6f 67 72 65 73 73 21 3d 30 20 26 26 20  xProgress!=0 && 
6910: 6e 56 6d 53 74 65 70 3e 3d 6e 50 72 6f 67 72 65  nVmStep>=nProgre
6920: 73 73 4c 69 6d 69 74 20 29 7b 0a 20 20 20 20 61  ssLimit ){.    a
6930: 73 73 65 72 74 28 20 64 62 2d 3e 6e 50 72 6f 67  ssert( db->nProg
6940: 72 65 73 73 4f 70 73 21 3d 30 20 29 3b 0a 20 20  ressOps!=0 );.  
6950: 20 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74    nProgressLimit
6960: 20 3d 20 6e 56 6d 53 74 65 70 20 2b 20 64 62 2d   = nVmStep + db-
6970: 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 2d 20  >nProgressOps - 
6980: 28 6e 56 6d 53 74 65 70 25 64 62 2d 3e 6e 50 72  (nVmStep%db->nPr
6990: 6f 67 72 65 73 73 4f 70 73 29 3b 0a 20 20 20 20  ogressOps);.    
69a0: 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65 73  if( db->xProgres
69b0: 73 28 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41  s(db->pProgressA
69c0: 72 67 29 20 29 7b 0a 20 20 20 20 20 20 72 63 20  rg) ){.      rc 
69d0: 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55  = SQLITE_INTERRU
69e0: 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61  PT;.      goto a
69f0: 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
6a00: 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e  r;.    }.  }.#en
6a10: 64 69 66 0a 20 20 0a 20 20 62 72 65 61 6b 3b 0a  dif.  .  break;.
6a20: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47  }../* Opcode:  G
6a30: 6f 73 75 62 20 50 31 20 50 32 20 2a 20 2a 20 2a  osub P1 P2 * * *
6a40: 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65  .**.** Write the
6a50: 20 63 75 72 72 65 6e 74 20 61 64 64 72 65 73 73   current address
6a60: 20 6f 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   onto register P
6a70: 31 0a 2a 2a 20 61 6e 64 20 74 68 65 6e 20 6a 75  1.** and then ju
6a80: 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20 50 32  mp to address P2
6a90: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 73  ..*/.case OP_Gos
6aa0: 75 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ub: {           
6ab0: 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73   /* jump */.  as
6ac0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
6ad0: 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e  && pOp->p1<=(p->
6ae0: 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
6af0: 73 6f 72 29 20 29 3b 0a 20 20 70 49 6e 31 20 3d  sor) );.  pIn1 =
6b00: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
6b10: 0a 20 20 61 73 73 65 72 74 28 20 56 64 62 65 4d  .  assert( VdbeM
6b20: 65 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31 29 3d  emDynamic(pIn1)=
6b30: 3d 30 20 29 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  =0 );.  memAbout
6b40: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31  ToChange(p, pIn1
6b50: 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73  );.  pIn1->flags
6b60: 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 49   = MEM_Int;.  pI
6b70: 6e 31 2d 3e 75 2e 69 20 3d 20 28 69 6e 74 29 28  n1->u.i = (int)(
6b80: 70 4f 70 2d 61 4f 70 29 3b 0a 20 20 52 45 47 49  pOp-aOp);.  REGI
6b90: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
6ba0: 70 31 2c 20 70 49 6e 31 29 3b 0a 0a 20 20 2f 2a  p1, pIn1);..  /*
6bb0: 20 4d 6f 73 74 20 6a 75 6d 70 20 6f 70 65 72 61   Most jump opera
6bc0: 74 69 6f 6e 73 20 64 6f 20 61 20 67 6f 74 6f 20  tions do a goto 
6bd0: 74 6f 20 74 68 69 73 20 73 70 6f 74 20 69 6e 20  to this spot in 
6be0: 6f 72 64 65 72 20 74 6f 20 75 70 64 61 74 65 0a  order to update.
6bf0: 20 20 2a 2a 20 74 68 65 20 70 4f 70 20 70 6f 69    ** the pOp poi
6c00: 6e 74 65 72 2e 20 2a 2f 0a 6a 75 6d 70 5f 74 6f  nter. */.jump_to
6c10: 5f 70 32 3a 0a 20 20 70 4f 70 20 3d 20 26 61 4f  _p2:.  pOp = &aO
6c20: 70 5b 70 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a  p[pOp->p2 - 1];.
6c30: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
6c40: 70 63 6f 64 65 3a 20 20 52 65 74 75 72 6e 20 50  pcode:  Return P
6c50: 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
6c60: 4a 75 6d 70 20 74 6f 20 74 68 65 20 6e 65 78 74  Jump to the next
6c70: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 66 74   instruction aft
6c80: 65 72 20 74 68 65 20 61 64 64 72 65 73 73 20 69  er the address i
6c90: 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20  n register P1.  
6ca0: 41 66 74 65 72 0a 2a 2a 20 74 68 65 20 6a 75 6d  After.** the jum
6cb0: 70 2c 20 72 65 67 69 73 74 65 72 20 50 31 20 62  p, register P1 b
6cc0: 65 63 6f 6d 65 73 20 75 6e 64 65 66 69 6e 65 64  ecomes undefined
6cd0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 74  ..*/.case OP_Ret
6ce0: 75 72 6e 3a 20 7b 20 20 20 20 20 20 20 20 20 20  urn: {          
6cf0: 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e   /* in1 */.  pIn
6d00: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
6d10: 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  1];.  assert( pI
6d20: 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49  n1->flags==MEM_I
6d30: 6e 74 20 29 3b 0a 20 20 70 4f 70 20 3d 20 26 61  nt );.  pOp = &a
6d40: 4f 70 5b 70 49 6e 31 2d 3e 75 2e 69 5d 3b 0a 20  Op[pIn1->u.i];. 
6d50: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d   pIn1->flags = M
6d60: 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20  EM_Undefined;.  
6d70: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
6d80: 6f 64 65 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69  ode: InitCorouti
6d90: 6e 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ne P1 P2 P3 * *.
6da0: 2a 2a 0a 2a 2a 20 53 65 74 20 75 70 20 72 65 67  **.** Set up reg
6db0: 69 73 74 65 72 20 50 31 20 73 6f 20 74 68 61 74  ister P1 so that
6dc0: 20 69 74 20 77 69 6c 6c 20 59 69 65 6c 64 20 74   it will Yield t
6dd0: 6f 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 0a  o the coroutine.
6de0: 2a 2a 20 6c 6f 63 61 74 65 64 20 61 74 20 61 64  ** located at ad
6df0: 64 72 65 73 73 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  dress P3..**.** 
6e00: 49 66 20 50 32 21 3d 30 20 74 68 65 6e 20 74 68  If P2!=0 then th
6e10: 65 20 63 6f 72 6f 75 74 69 6e 65 20 69 6d 70 6c  e coroutine impl
6e20: 65 6d 65 6e 74 61 74 69 6f 6e 20 69 6d 6d 65 64  ementation immed
6e30: 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 73 0a 2a  iately follows.*
6e40: 2a 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20  * this opcode.  
6e50: 53 6f 20 6a 75 6d 70 20 6f 76 65 72 20 74 68 65  So jump over the
6e60: 20 63 6f 72 6f 75 74 69 6e 65 20 69 6d 70 6c 65   coroutine imple
6e70: 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 0a 2a 2a 20  mentation to.** 
6e80: 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a 0a 2a  address P2..**.*
6e90: 2a 20 53 65 65 20 61 6c 73 6f 3a 20 45 6e 64 43  * See also: EndC
6ea0: 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73 65  oroutine.*/.case
6eb0: 20 4f 50 5f 49 6e 69 74 43 6f 72 6f 75 74 69 6e   OP_InitCoroutin
6ec0: 65 3a 20 7b 20 20 20 20 20 2f 2a 20 6a 75 6d 70  e: {     /* jump
6ed0: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
6ee0: 70 2d 3e 70 31 3e 30 20 26 26 20 20 70 4f 70 2d  p->p1>0 &&  pOp-
6ef0: 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  >p1<=(p->nMem+1 
6f00: 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  - p->nCursor) );
6f10: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
6f20: 70 32 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 32  p2>=0 && pOp->p2
6f30: 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 61 73 73  <p->nOp );.  ass
6f40: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30 20  ert( pOp->p3>=0 
6f50: 26 26 20 70 4f 70 2d 3e 70 33 3c 70 2d 3e 6e 4f  && pOp->p3<p->nO
6f60: 70 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  p );.  pOut = &a
6f70: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
6f80: 61 73 73 65 72 74 28 20 21 56 64 62 65 4d 65 6d  assert( !VdbeMem
6f90: 44 79 6e 61 6d 69 63 28 70 4f 75 74 29 20 29 3b  Dynamic(pOut) );
6fa0: 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70  .  pOut->u.i = p
6fb0: 4f 70 2d 3e 70 33 20 2d 20 31 3b 0a 20 20 70 4f  Op->p3 - 1;.  pO
6fc0: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
6fd0: 49 6e 74 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  Int;.  if( pOp->
6fe0: 70 32 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  p2 ) goto jump_t
6ff0: 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  o_p2;.  break;.}
7000: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 45 6e  ../* Opcode:  En
7010: 64 43 6f 72 6f 75 74 69 6e 65 20 50 31 20 2a 20  dCoroutine P1 * 
7020: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20  * * *.**.** The 
7030: 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 20 74  instruction at t
7040: 68 65 20 61 64 64 72 65 73 73 20 69 6e 20 72 65  he address in re
7050: 67 69 73 74 65 72 20 50 31 20 69 73 20 61 20 59  gister P1 is a Y
7060: 69 65 6c 64 2e 0a 2a 2a 20 4a 75 6d 70 20 74 6f  ield..** Jump to
7070: 20 74 68 65 20 50 32 20 70 61 72 61 6d 65 74 65   the P2 paramete
7080: 72 20 6f 66 20 74 68 61 74 20 59 69 65 6c 64 2e  r of that Yield.
7090: 0a 2a 2a 20 41 66 74 65 72 20 74 68 65 20 6a 75  .** After the ju
70a0: 6d 70 2c 20 72 65 67 69 73 74 65 72 20 50 31 20  mp, register P1 
70b0: 62 65 63 6f 6d 65 73 20 75 6e 64 65 66 69 6e 65  becomes undefine
70c0: 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  d..**.** See als
70d0: 6f 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65  o: InitCoroutine
70e0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 6e 64 43  .*/.case OP_EndC
70f0: 6f 72 6f 75 74 69 6e 65 3a 20 7b 20 20 20 20 20  oroutine: {     
7100: 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a        /* in1 */.
7110: 20 20 56 64 62 65 4f 70 20 2a 70 43 61 6c 6c 65    VdbeOp *pCalle
7120: 72 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  r;.  pIn1 = &aMe
7130: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
7140: 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
7150: 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  s==MEM_Int );.  
7160: 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 75 2e  assert( pIn1->u.
7170: 69 3e 3d 30 20 26 26 20 70 49 6e 31 2d 3e 75 2e  i>=0 && pIn1->u.
7180: 69 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 43  i<p->nOp );.  pC
7190: 61 6c 6c 65 72 20 3d 20 26 61 4f 70 5b 70 49 6e  aller = &aOp[pIn
71a0: 31 2d 3e 75 2e 69 5d 3b 0a 20 20 61 73 73 65 72  1->u.i];.  asser
71b0: 74 28 20 70 43 61 6c 6c 65 72 2d 3e 6f 70 63 6f  t( pCaller->opco
71c0: 64 65 3d 3d 4f 50 5f 59 69 65 6c 64 20 29 3b 0a  de==OP_Yield );.
71d0: 20 20 61 73 73 65 72 74 28 20 70 43 61 6c 6c 65    assert( pCalle
71e0: 72 2d 3e 70 32 3e 3d 30 20 26 26 20 70 43 61 6c  r->p2>=0 && pCal
71f0: 6c 65 72 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29  ler->p2<p->nOp )
7200: 3b 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70  ;.  pOp = &aOp[p
7210: 43 61 6c 6c 65 72 2d 3e 70 32 20 2d 20 31 5d 3b  Caller->p2 - 1];
7220: 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d  .  pIn1->flags =
7230: 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a   MEM_Undefined;.
7240: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
7250: 70 63 6f 64 65 3a 20 20 59 69 65 6c 64 20 50 31  pcode:  Yield P1
7260: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
7270: 53 77 61 70 20 74 68 65 20 70 72 6f 67 72 61 6d  Swap the program
7280: 20 63 6f 75 6e 74 65 72 20 77 69 74 68 20 74 68   counter with th
7290: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
72a0: 74 65 72 20 50 31 2e 20 20 54 68 69 73 0a 2a 2a  ter P1.  This.**
72b0: 20 68 61 73 20 74 68 65 20 65 66 66 65 63 74 20   has the effect 
72c0: 6f 66 20 79 69 65 6c 64 69 6e 67 20 74 6f 20 61  of yielding to a
72d0: 20 63 6f 72 6f 75 74 69 6e 65 2e 0a 2a 2a 0a 2a   coroutine..**.*
72e0: 2a 20 49 66 20 74 68 65 20 63 6f 72 6f 75 74 69  * If the corouti
72f0: 6e 65 20 74 68 61 74 20 69 73 20 6c 61 75 6e 63  ne that is launc
7300: 68 65 64 20 62 79 20 74 68 69 73 20 69 6e 73 74  hed by this inst
7310: 72 75 63 74 69 6f 6e 20 65 6e 64 73 20 77 69 74  ruction ends wit
7320: 68 0a 2a 2a 20 59 69 65 6c 64 20 6f 72 20 52 65  h.** Yield or Re
7330: 74 75 72 6e 20 74 68 65 6e 20 63 6f 6e 74 69 6e  turn then contin
7340: 75 65 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  ue to the next i
7350: 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74  nstruction.  But
7360: 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 72 6f 75   if.** the corou
7370: 74 69 6e 65 20 6c 61 75 6e 63 68 65 64 20 62 79  tine launched by
7380: 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
7390: 6e 20 65 6e 64 73 20 77 69 74 68 0a 2a 2a 20 45  n ends with.** E
73a0: 6e 64 43 6f 72 6f 75 74 69 6e 65 2c 20 74 68 65  ndCoroutine, the
73b0: 6e 20 6a 75 6d 70 20 74 6f 20 50 32 20 72 61 74  n jump to P2 rat
73c0: 68 65 72 20 74 68 61 6e 20 63 6f 6e 74 69 6e 75  her than continu
73d0: 69 6e 67 20 77 69 74 68 20 74 68 65 0a 2a 2a 20  ing with the.** 
73e0: 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
73f0: 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
7400: 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65 0a  : InitCoroutine.
7410: 2a 2f 0a 63 61 73 65 20 4f 50 5f 59 69 65 6c 64  */.case OP_Yield
7420: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
7430: 2a 20 69 6e 31 2c 20 6a 75 6d 70 20 2a 2f 0a 20  * in1, jump */. 
7440: 20 69 6e 74 20 70 63 44 65 73 74 3b 0a 20 20 70   int pcDest;.  p
7450: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
7460: 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
7470: 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70  VdbeMemDynamic(p
7480: 49 6e 31 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e  In1)==0 );.  pIn
7490: 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  1->flags = MEM_I
74a0: 6e 74 3b 0a 20 20 70 63 44 65 73 74 20 3d 20 28  nt;.  pcDest = (
74b0: 69 6e 74 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20  int)pIn1->u.i;. 
74c0: 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 28 69 6e   pIn1->u.i = (in
74d0: 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20  t)(pOp - aOp);. 
74e0: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
74f0: 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a  pOp->p1, pIn1);.
7500: 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 63 44    pOp = &aOp[pcD
7510: 65 73 74 5d 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  est];.  break;.}
7520: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61  ../* Opcode:  Ha
7530: 6c 74 49 66 4e 75 6c 6c 20 20 50 31 20 50 32 20  ltIfNull  P1 P2 
7540: 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
7550: 70 73 69 73 3a 20 69 66 20 72 5b 50 33 5d 3d 6e  psis: if r[P3]=n
7560: 75 6c 6c 20 68 61 6c 74 0a 2a 2a 0a 2a 2a 20 43  ull halt.**.** C
7570: 68 65 63 6b 20 74 68 65 20 76 61 6c 75 65 20 69  heck the value i
7580: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 20  n register P3.  
7590: 49 66 20 69 74 20 69 73 20 4e 55 4c 4c 20 74 68  If it is NULL th
75a0: 65 6e 20 48 61 6c 74 20 75 73 69 6e 67 0a 2a 2a  en Halt using.**
75b0: 20 70 61 72 61 6d 65 74 65 72 20 50 31 2c 20 50   parameter P1, P
75c0: 32 2c 20 61 6e 64 20 50 34 20 61 73 20 69 66 20  2, and P4 as if 
75d0: 74 68 69 73 20 77 65 72 65 20 61 20 48 61 6c 74  this were a Halt
75e0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 49   instruction.  I
75f0: 66 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69  f the.** value i
7600: 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  n register P3 is
7610: 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20   not NULL, then 
7620: 74 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73 20  this routine is 
7630: 61 20 6e 6f 2d 6f 70 2e 0a 2a 2a 20 54 68 65 20  a no-op..** The 
7640: 50 35 20 70 61 72 61 6d 65 74 65 72 20 73 68 6f  P5 parameter sho
7650: 75 6c 64 20 62 65 20 31 2e 0a 2a 2f 0a 63 61 73  uld be 1..*/.cas
7660: 65 20 4f 50 5f 48 61 6c 74 49 66 4e 75 6c 6c 3a  e OP_HaltIfNull:
7670: 20 7b 20 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a   {      /* in3 *
7680: 2f 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d  /.  pIn3 = &aMem
7690: 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28  [pOp->p3];.  if(
76a0: 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20   (pIn3->flags & 
76b0: 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 20 62  MEM_Null)==0 ) b
76c0: 72 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20  reak;.  /* Fall 
76d0: 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f  through into OP_
76e0: 48 61 6c 74 20 2a 2f 0a 7d 0a 0a 2f 2a 20 4f 70  Halt */.}../* Op
76f0: 63 6f 64 65 3a 20 20 48 61 6c 74 20 50 31 20 50  code:  Halt P1 P
7700: 32 20 2a 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20  2 * P4 P5.**.** 
7710: 45 78 69 74 20 69 6d 6d 65 64 69 61 74 65 6c 79  Exit immediately
7720: 2e 20 20 41 6c 6c 20 6f 70 65 6e 20 63 75 72 73  .  All open curs
7730: 6f 72 73 2c 20 65 74 63 20 61 72 65 20 63 6c 6f  ors, etc are clo
7740: 73 65 64 0a 2a 2a 20 61 75 74 6f 6d 61 74 69 63  sed.** automatic
7750: 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69  ally..**.** P1 i
7760: 73 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 64  s the result cod
7770: 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71  e returned by sq
7780: 6c 69 74 65 33 5f 65 78 65 63 28 29 2c 20 73 71  lite3_exec(), sq
7790: 6c 69 74 65 33 5f 72 65 73 65 74 28 29 2c 0a 2a  lite3_reset(),.*
77a0: 2a 20 6f 72 20 73 71 6c 69 74 65 33 5f 66 69 6e  * or sqlite3_fin
77b0: 61 6c 69 7a 65 28 29 2e 20 20 46 6f 72 20 61 20  alize().  For a 
77c0: 6e 6f 72 6d 61 6c 20 68 61 6c 74 2c 20 74 68 69  normal halt, thi
77d0: 73 20 73 68 6f 75 6c 64 20 62 65 20 53 51 4c 49  s should be SQLI
77e0: 54 45 5f 4f 4b 20 28 30 29 2e 0a 2a 2a 20 46 6f  TE_OK (0)..** Fo
77f0: 72 20 65 72 72 6f 72 73 2c 20 69 74 20 63 61 6e  r errors, it can
7800: 20 62 65 20 73 6f 6d 65 20 6f 74 68 65 72 20 76   be some other v
7810: 61 6c 75 65 2e 20 20 49 66 20 50 31 21 3d 30 20  alue.  If P1!=0 
7820: 74 68 65 6e 20 50 32 20 77 69 6c 6c 20 64 65 74  then P2 will det
7830: 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65  ermine.** whethe
7840: 72 20 6f 72 20 6e 6f 74 20 74 6f 20 72 6f 6c 6c  r or not to roll
7850: 62 61 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74  back the current
7860: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 44   transaction.  D
7870: 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 0a 2a  o not rollback.*
7880: 2a 20 69 66 20 50 32 3d 3d 4f 45 5f 46 61 69 6c  * if P2==OE_Fail
7890: 2e 20 44 6f 20 74 68 65 20 72 6f 6c 6c 62 61 63  . Do the rollbac
78a0: 6b 20 69 66 20 50 32 3d 3d 4f 45 5f 52 6f 6c 6c  k if P2==OE_Roll
78b0: 62 61 63 6b 2e 20 20 49 66 20 50 32 3d 3d 4f 45  back.  If P2==OE
78c0: 5f 41 62 6f 72 74 2c 0a 2a 2a 20 74 68 65 6e 20  _Abort,.** then 
78d0: 62 61 63 6b 20 6f 75 74 20 61 6c 6c 20 63 68 61  back out all cha
78e0: 6e 67 65 73 20 74 68 61 74 20 68 61 76 65 20 6f  nges that have o
78f0: 63 63 75 72 72 65 64 20 64 75 72 69 6e 67 20 74  ccurred during t
7900: 68 69 73 20 65 78 65 63 75 74 69 6f 6e 20 6f 66  his execution of
7910: 20 74 68 65 0a 2a 2a 20 56 44 42 45 2c 20 62 75   the.** VDBE, bu
7920: 74 20 64 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63  t do not rollbac
7930: 6b 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  k the transactio
7940: 6e 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20  n. .**.** If P4 
7950: 69 73 20 6e 6f 74 20 6e 75 6c 6c 20 74 68 65 6e  is not null then
7960: 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20   it is an error 
7970: 6d 65 73 73 61 67 65 20 73 74 72 69 6e 67 2e 0a  message string..
7980: 2a 2a 0a 2a 2a 20 50 35 20 69 73 20 61 20 76 61  **.** P5 is a va
7990: 6c 75 65 20 62 65 74 77 65 65 6e 20 30 20 61 6e  lue between 0 an
79a0: 64 20 34 2c 20 69 6e 63 6c 75 73 69 76 65 2c 20  d 4, inclusive, 
79b0: 74 68 61 74 20 6d 6f 64 69 66 69 65 73 20 74 68  that modifies th
79c0: 65 20 50 34 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a  e P4 string..**.
79d0: 2a 2a 20 20 20 20 30 3a 20 20 28 6e 6f 20 63 68  **    0:  (no ch
79e0: 61 6e 67 65 29 0a 2a 2a 20 20 20 20 31 3a 20 20  ange).**    1:  
79f0: 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 74 72 61 69  NOT NULL contrai
7a00: 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a  nt failed: P4.**
7a10: 20 20 20 20 32 3a 20 20 55 4e 49 51 55 45 20 63      2:  UNIQUE c
7a20: 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64  onstraint failed
7a30: 3a 20 50 34 0a 2a 2a 20 20 20 20 33 3a 20 20 43  : P4.**    3:  C
7a40: 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20  HECK constraint 
7a50: 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20  failed: P4.**   
7a60: 20 34 3a 20 20 46 4f 52 45 49 47 4e 20 4b 45 59   4:  FOREIGN KEY
7a70: 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c   constraint fail
7a80: 65 64 3a 20 50 34 0a 2a 2a 0a 2a 2a 20 49 66 20  ed: P4.**.** If 
7a90: 50 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f 20 61  P5 is not zero a
7aa0: 6e 64 20 50 34 20 69 73 20 4e 55 4c 4c 2c 20 74  nd P4 is NULL, t
7ab0: 68 65 6e 20 65 76 65 72 79 74 68 69 6e 67 20 61  hen everything a
7ac0: 66 74 65 72 20 74 68 65 20 22 3a 22 20 69 73 0a  fter the ":" is.
7ad0: 2a 2a 20 6f 6d 69 74 74 65 64 2e 0a 2a 2a 0a 2a  ** omitted..**.*
7ae0: 2a 20 54 68 65 72 65 20 69 73 20 61 6e 20 69 6d  * There is an im
7af0: 70 6c 69 65 64 20 22 48 61 6c 74 20 30 20 30 20  plied "Halt 0 0 
7b00: 30 22 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  0" instruction i
7b10: 6e 73 65 72 74 65 64 20 61 74 20 74 68 65 20 76  nserted at the v
7b20: 65 72 79 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 76  ery end of.** ev
7b30: 65 72 79 20 70 72 6f 67 72 61 6d 2e 20 20 53 6f  ery program.  So
7b40: 20 61 20 6a 75 6d 70 20 70 61 73 74 20 74 68 65   a jump past the
7b50: 20 6c 61 73 74 20 69 6e 73 74 72 75 63 74 69 6f   last instructio
7b60: 6e 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61 6d  n of the program
7b70: 0a 2a 2a 20 69 73 20 74 68 65 20 73 61 6d 65 20  .** is the same 
7b80: 61 73 20 65 78 65 63 75 74 69 6e 67 20 48 61 6c  as executing Hal
7b90: 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61  t..*/.case OP_Ha
7ba0: 6c 74 3a 20 7b 0a 20 20 56 64 62 65 46 72 61 6d  lt: {.  VdbeFram
7bb0: 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69 6e 74  e *pFrame;.  int
7bc0: 20 70 63 78 3b 0a 0a 20 20 70 63 78 20 3d 20 28   pcx;..  pcx = (
7bd0: 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b  int)(pOp - aOp);
7be0: 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d  .  if( pOp->p1==
7bf0: 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70 2d 3e  SQLITE_OK && p->
7c00: 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 2f 2a  pFrame ){.    /*
7c10: 20 48 61 6c 74 20 74 68 65 20 73 75 62 2d 70 72   Halt the sub-pr
7c20: 6f 67 72 61 6d 2e 20 52 65 74 75 72 6e 20 63 6f  ogram. Return co
7c30: 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20 70 61 72  ntrol to the par
7c40: 65 6e 74 20 66 72 61 6d 65 2e 20 2a 2f 0a 20 20  ent frame. */.  
7c50: 20 20 70 46 72 61 6d 65 20 3d 20 70 2d 3e 70 46    pFrame = p->pF
7c60: 72 61 6d 65 3b 0a 20 20 20 20 70 2d 3e 70 46 72  rame;.    p->pFr
7c70: 61 6d 65 20 3d 20 70 46 72 61 6d 65 2d 3e 70 50  ame = pFrame->pP
7c80: 61 72 65 6e 74 3b 0a 20 20 20 20 70 2d 3e 6e 46  arent;.    p->nF
7c90: 72 61 6d 65 2d 2d 3b 0a 20 20 20 20 73 71 6c 69  rame--;.    sqli
7ca0: 74 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65  te3VdbeSetChange
7cb0: 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65  s(db, p->nChange
7cc0: 29 3b 0a 20 20 20 20 70 63 78 20 3d 20 73 71 6c  );.    pcx = sql
7cd0: 69 74 65 33 56 64 62 65 46 72 61 6d 65 52 65 73  ite3VdbeFrameRes
7ce0: 74 6f 72 65 28 70 46 72 61 6d 65 29 3b 0a 20 20  tore(pFrame);.  
7cf0: 20 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 64 62    lastRowid = db
7d00: 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 20  ->lastRowid;.   
7d10: 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 4f 45   if( pOp->p2==OE
7d20: 5f 49 67 6e 6f 72 65 20 29 7b 0a 20 20 20 20 20  _Ignore ){.     
7d30: 20 2f 2a 20 49 6e 73 74 72 75 63 74 69 6f 6e 20   /* Instruction 
7d40: 70 63 78 20 69 73 20 74 68 65 20 4f 50 5f 50 72  pcx is the OP_Pr
7d50: 6f 67 72 61 6d 20 74 68 61 74 20 69 6e 76 6f 6b  ogram that invok
7d60: 65 64 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72  ed the sub-progr
7d70: 61 6d 20 0a 20 20 20 20 20 20 2a 2a 20 63 75 72  am .      ** cur
7d80: 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 68 61 6c  rently being hal
7d90: 74 65 64 2e 20 49 66 20 74 68 65 20 70 32 20 69  ted. If the p2 i
7da0: 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20 74 68  nstruction of th
7db0: 69 73 20 4f 50 5f 48 61 6c 74 0a 20 20 20 20 20  is OP_Halt.     
7dc0: 20 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   ** instruction 
7dd0: 69 73 20 73 65 74 20 74 6f 20 4f 45 5f 49 67 6e  is set to OE_Ign
7de0: 6f 72 65 2c 20 74 68 65 6e 20 74 68 65 20 73 75  ore, then the su
7df0: 62 2d 70 72 6f 67 72 61 6d 20 69 73 20 74 68 72  b-program is thr
7e00: 6f 77 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20 61  owing.      ** a
7e10: 6e 20 49 47 4e 4f 52 45 20 65 78 63 65 70 74 69  n IGNORE excepti
7e20: 6f 6e 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65  on. In this case
7e30: 20 6a 75 6d 70 20 74 6f 20 74 68 65 20 61 64 64   jump to the add
7e40: 72 65 73 73 20 73 70 65 63 69 66 69 65 64 0a 20  ress specified. 
7e50: 20 20 20 20 20 2a 2a 20 61 73 20 74 68 65 20 70       ** as the p
7e60: 32 20 6f 66 20 74 68 65 20 63 61 6c 6c 69 6e 67  2 of the calling
7e70: 20 4f 50 5f 50 72 6f 67 72 61 6d 2e 20 20 2a 2f   OP_Program.  */
7e80: 0a 20 20 20 20 20 20 70 63 78 20 3d 20 70 2d 3e  .      pcx = p->
7e90: 61 4f 70 5b 70 63 78 5d 2e 70 32 2d 31 3b 0a 20  aOp[pcx].p2-1;. 
7ea0: 20 20 20 7d 0a 20 20 20 20 61 4f 70 20 3d 20 70     }.    aOp = p
7eb0: 2d 3e 61 4f 70 3b 0a 20 20 20 20 61 4d 65 6d 20  ->aOp;.    aMem 
7ec0: 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 70  = p->aMem;.    p
7ed0: 4f 70 20 3d 20 26 61 4f 70 5b 70 63 78 5d 3b 0a  Op = &aOp[pcx];.
7ee0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
7ef0: 20 70 2d 3e 72 63 20 3d 20 70 4f 70 2d 3e 70 31   p->rc = pOp->p1
7f00: 3b 0a 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69  ;.  p->errorActi
7f10: 6f 6e 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70 32  on = (u8)pOp->p2
7f20: 3b 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63 78 3b  ;.  p->pc = pcx;
7f30: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
7f40: 70 35 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 35  p5>=0 && pOp->p5
7f50: 3c 3d 34 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e  <=4 );.  if( p->
7f60: 72 63 20 29 7b 0a 20 20 20 20 69 66 28 20 70 4f  rc ){.    if( pO
7f70: 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 20 20 73  p->p5 ){.      s
7f80: 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72  tatic const char
7f90: 20 2a 20 63 6f 6e 73 74 20 61 7a 54 79 70 65 5b   * const azType[
7fa0: 5d 20 3d 20 7b 20 22 4e 4f 54 20 4e 55 4c 4c 22  ] = { "NOT NULL"
7fb0: 2c 20 22 55 4e 49 51 55 45 22 2c 20 22 43 48 45  , "UNIQUE", "CHE
7fc0: 43 4b 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  CK",.           
7fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ff0: 20 20 22 46 4f 52 45 49 47 4e 20 4b 45 59 22 20    "FOREIGN KEY" 
8000: 7d 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73  };.      testcas
8010: 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b  e( pOp->p5==1 );
8020: 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28  .      testcase(
8030: 20 70 4f 70 2d 3e 70 35 3d 3d 32 20 29 3b 0a 20   pOp->p5==2 );. 
8040: 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70       testcase( p
8050: 4f 70 2d 3e 70 35 3d 3d 33 20 29 3b 0a 20 20 20  Op->p5==3 );.   
8060: 20 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70     testcase( pOp
8070: 2d 3e 70 35 3d 3d 34 20 29 3b 0a 20 20 20 20 20  ->p5==4 );.     
8080: 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f   sqlite3VdbeErro
8090: 72 28 70 2c 20 22 25 73 20 63 6f 6e 73 74 72 61  r(p, "%s constra
80a0: 69 6e 74 20 66 61 69 6c 65 64 22 2c 20 61 7a 54  int failed", azT
80b0: 79 70 65 5b 70 4f 70 2d 3e 70 35 2d 31 5d 29 3b  ype[pOp->p5-1]);
80c0: 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  .      if( pOp->
80d0: 70 34 2e 7a 20 29 7b 0a 20 20 20 20 20 20 20 20  p4.z ){.        
80e0: 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c  p->zErrMsg = sql
80f0: 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 20  ite3MPrintf(db, 
8100: 22 25 7a 3a 20 25 73 22 2c 20 70 2d 3e 7a 45 72  "%z: %s", p->zEr
8110: 72 4d 73 67 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  rMsg, pOp->p4.z)
8120: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  ;.      }.    }e
8130: 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  lse{.      sqlit
8140: 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22  e3VdbeError(p, "
8150: 25 73 22 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  %s", pOp->p4.z);
8160: 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
8170: 65 33 5f 6c 6f 67 28 70 4f 70 2d 3e 70 31 2c 20  e3_log(pOp->p1, 
8180: 22 61 62 6f 72 74 20 61 74 20 25 64 20 69 6e 20  "abort at %d in 
8190: 5b 25 73 5d 3a 20 25 73 22 2c 20 70 63 78 2c 20  [%s]: %s", pcx, 
81a0: 70 2d 3e 7a 53 71 6c 2c 20 70 2d 3e 7a 45 72 72  p->zSql, p->zErr
81b0: 4d 73 67 29 3b 0a 20 20 7d 0a 20 20 72 63 20 3d  Msg);.  }.  rc =
81c0: 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74   sqlite3VdbeHalt
81d0: 28 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72  (p);.  assert( r
81e0: 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 7c  c==SQLITE_BUSY |
81f0: 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  | rc==SQLITE_OK 
8200: 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 45 52  || rc==SQLITE_ER
8210: 52 4f 52 20 29 3b 0a 20 20 69 66 28 20 72 63 3d  ROR );.  if( rc=
8220: 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a  =SQLITE_BUSY ){.
8230: 20 20 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c 49      p->rc = SQLI
8240: 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65  TE_BUSY;.  }else
8250: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63  {.    assert( rc
8260: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28  ==SQLITE_OK || (
8270: 70 2d 3e 72 63 26 30 78 66 66 29 3d 3d 53 51 4c  p->rc&0xff)==SQL
8280: 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 29  ITE_CONSTRAINT )
8290: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63  ;.    assert( rc
82a0: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 64  ==SQLITE_OK || d
82b0: 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  b->nDeferredCons
82c0: 3e 30 20 7c 7c 20 64 62 2d 3e 6e 44 65 66 65 72  >0 || db->nDefer
82d0: 72 65 64 49 6d 6d 43 6f 6e 73 3e 30 20 29 3b 0a  redImmCons>0 );.
82e0: 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63 20 3f      rc = p->rc ?
82f0: 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 3a 20   SQLITE_ERROR : 
8300: 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 7d  SQLITE_DONE;.  }
8310: 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74  .  goto vdbe_ret
8320: 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  urn;.}../* Opcod
8330: 65 3a 20 49 6e 74 65 67 65 72 20 50 31 20 50 32  e: Integer P1 P2
8340: 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
8350: 69 73 3a 20 72 5b 50 32 5d 3d 50 31 0a 2a 2a 0a  is: r[P2]=P1.**.
8360: 2a 2a 20 54 68 65 20 33 32 2d 62 69 74 20 69 6e  ** The 32-bit in
8370: 74 65 67 65 72 20 76 61 6c 75 65 20 50 31 20 69  teger value P1 i
8380: 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f 20 72  s written into r
8390: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63  egister P2..*/.c
83a0: 61 73 65 20 4f 50 5f 49 6e 74 65 67 65 72 3a 20  ase OP_Integer: 
83b0: 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74  {         /* out
83c0: 32 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 6f 75  2 */.  pOut = ou
83d0: 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
83e0: 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  pOp);.  pOut->u.
83f0: 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 62  i = pOp->p1;.  b
8400: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
8410: 64 65 3a 20 49 6e 74 36 34 20 2a 20 50 32 20 2a  de: Int64 * P2 *
8420: 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
8430: 73 3a 20 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a  s: r[P2]=P4.**.*
8440: 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
8450: 72 20 74 6f 20 61 20 36 34 2d 62 69 74 20 69 6e  r to a 64-bit in
8460: 74 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2a 20  teger value..** 
8470: 57 72 69 74 65 20 74 68 61 74 20 76 61 6c 75 65  Write that value
8480: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
8490: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  2..*/.case OP_In
84a0: 74 36 34 3a 20 7b 20 20 20 20 20 20 20 20 20 20  t64: {          
84b0: 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70 4f   /* out2 */.  pO
84c0: 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
84d0: 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61  ase(p, pOp);.  a
84e0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 70  ssert( pOp->p4.p
84f0: 49 36 34 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74  I64!=0 );.  pOut
8500: 2d 3e 75 2e 69 20 3d 20 2a 70 4f 70 2d 3e 70 34  ->u.i = *pOp->p4
8510: 2e 70 49 36 34 3b 0a 20 20 62 72 65 61 6b 3b 0a  .pI64;.  break;.
8520: 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
8530: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
8540: 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a  POINT./* Opcode:
8550: 20 52 65 61 6c 20 2a 20 50 32 20 2a 20 50 34 20   Real * P2 * P4 
8560: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
8570: 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50 34  [P2]=P4.**.** P4
8580: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
8590: 20 61 20 36 34 2d 62 69 74 20 66 6c 6f 61 74 69   a 64-bit floati
85a0: 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a  ng point value..
85b0: 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20 76 61  ** Write that va
85c0: 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  lue into registe
85d0: 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
85e0: 5f 52 65 61 6c 3a 20 7b 20 20 20 20 20 20 20 20  _Real: {        
85f0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
8600: 4b 5f 46 4c 4f 41 54 2c 20 6f 75 74 32 20 2a 2f  K_FLOAT, out2 */
8610: 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
8620: 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
8630: 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
8640: 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 61 73  = MEM_Real;.  as
8650: 73 65 72 74 28 20 21 73 71 6c 69 74 65 33 49 73  sert( !sqlite3Is
8660: 4e 61 4e 28 2a 70 4f 70 2d 3e 70 34 2e 70 52 65  NaN(*pOp->p4.pRe
8670: 61 6c 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75  al) );.  pOut->u
8680: 2e 72 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 52  .r = *pOp->p4.pR
8690: 65 61 6c 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  eal;.  break;.}.
86a0: 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64  #endif../* Opcod
86b0: 65 3a 20 53 74 72 69 6e 67 38 20 2a 20 50 32 20  e: String8 * P2 
86c0: 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  * P4 *.** Synops
86d0: 69 73 3a 20 72 5b 50 32 5d 3d 27 50 34 27 0a 2a  is: r[P2]='P4'.*
86e0: 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20 74  *.** P4 points t
86f0: 6f 20 61 20 6e 75 6c 20 74 65 72 6d 69 6e 61 74  o a nul terminat
8700: 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67 2e  ed UTF-8 string.
8710: 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
8720: 74 72 61 6e 73 66 6f 72 6d 65 64 20 0a 2a 2a 20  transformed .** 
8730: 69 6e 74 6f 20 61 20 53 74 72 69 6e 67 20 6f 70  into a String op
8740: 63 6f 64 65 20 62 65 66 6f 72 65 20 69 74 20 69  code before it i
8750: 73 20 65 78 65 63 75 74 65 64 20 66 6f 72 20 74  s executed for t
8760: 68 65 20 66 69 72 73 74 20 74 69 6d 65 2e 20 20  he first time.  
8770: 44 75 72 69 6e 67 0a 2a 2a 20 74 68 69 73 20 74  During.** this t
8780: 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 2c 20 74  ransformation, t
8790: 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 73 74 72  he length of str
87a0: 69 6e 67 20 50 34 20 69 73 20 63 6f 6d 70 75 74  ing P4 is comput
87b0: 65 64 20 61 6e 64 20 73 74 6f 72 65 64 0a 2a 2a  ed and stored.**
87c0: 20 61 73 20 74 68 65 20 50 31 20 70 61 72 61 6d   as the P1 param
87d0: 65 74 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  eter..*/.case OP
87e0: 5f 53 74 72 69 6e 67 38 3a 20 7b 20 20 20 20 20  _String8: {     
87f0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
8800: 4b 5f 53 54 52 49 4e 47 2c 20 6f 75 74 32 20 2a  K_STRING, out2 *
8810: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
8820: 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f  >p4.z!=0 );.  pO
8830: 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
8840: 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70  ase(p, pOp);.  p
8850: 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f  Op->opcode = OP_
8860: 53 74 72 69 6e 67 3b 0a 20 20 70 4f 70 2d 3e 70  String;.  pOp->p
8870: 31 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65  1 = sqlite3Strle
8880: 6e 33 30 28 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  n30(pOp->p4.z);.
8890: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
88a0: 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 69 66 28  OMIT_UTF16.  if(
88b0: 20 65 6e 63 6f 64 69 6e 67 21 3d 53 51 4c 49 54   encoding!=SQLIT
88c0: 45 5f 55 54 46 38 20 29 7b 0a 20 20 20 20 72 63  E_UTF8 ){.    rc
88d0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   = sqlite3VdbeMe
88e0: 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20 70 4f  mSetStr(pOut, pO
88f0: 70 2d 3e 70 34 2e 7a 2c 20 2d 31 2c 20 53 51 4c  p->p4.z, -1, SQL
8900: 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45  ITE_UTF8, SQLITE
8910: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 61 73  _STATIC);.    as
8920: 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
8930: 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54  _OK || rc==SQLIT
8940: 45 5f 54 4f 4f 42 49 47 20 29 3b 0a 20 20 20 20  E_TOOBIG );.    
8950: 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 73  if( SQLITE_OK!=s
8960: 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
8970: 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c 20 65  Encoding(pOut, e
8980: 6e 63 6f 64 69 6e 67 29 20 29 20 67 6f 74 6f 20  ncoding) ) goto 
8990: 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61 73 73 65  no_mem;.    asse
89a0: 72 74 28 20 70 4f 75 74 2d 3e 73 7a 4d 61 6c 6c  rt( pOut->szMall
89b0: 6f 63 3e 30 20 26 26 20 70 4f 75 74 2d 3e 7a 4d  oc>0 && pOut->zM
89c0: 61 6c 6c 6f 63 3d 3d 70 4f 75 74 2d 3e 7a 20 29  alloc==pOut->z )
89d0: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 56 64  ;.    assert( Vd
89e0: 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75  beMemDynamic(pOu
89f0: 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20 70 4f 75  t)==0 );.    pOu
8a00: 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b  t->szMalloc = 0;
8a10: 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  .    pOut->flags
8a20: 20 7c 3d 20 4d 45 4d 5f 53 74 61 74 69 63 3b 0a   |= MEM_Static;.
8a30: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74      if( pOp->p4t
8a40: 79 70 65 3d 3d 50 34 5f 44 59 4e 41 4d 49 43 20  ype==P4_DYNAMIC 
8a50: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
8a60: 44 62 46 72 65 65 28 64 62 2c 20 70 4f 70 2d 3e  DbFree(db, pOp->
8a70: 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 20  p4.z);.    }.   
8a80: 20 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20 50   pOp->p4type = P
8a90: 34 5f 44 59 4e 41 4d 49 43 3b 0a 20 20 20 20 70  4_DYNAMIC;.    p
8aa0: 4f 70 2d 3e 70 34 2e 7a 20 3d 20 70 4f 75 74 2d  Op->p4.z = pOut-
8ab0: 3e 7a 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 31 20  >z;.    pOp->p1 
8ac0: 3d 20 70 4f 75 74 2d 3e 6e 3b 0a 20 20 7d 0a 20  = pOut->n;.  }. 
8ad0: 20 74 65 73 74 63 61 73 65 28 20 72 63 3d 3d 53   testcase( rc==S
8ae0: 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20 29 3b 0a  QLITE_TOOBIG );.
8af0: 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70 4f 70  #endif.  if( pOp
8b00: 2d 3e 70 31 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b  ->p1>db->aLimit[
8b10: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
8b20: 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f  GTH] ){.    goto
8b30: 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20   too_big;.  }.  
8b40: 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
8b50: 54 45 5f 4f 4b 20 29 3b 0a 20 20 2f 2a 20 46 61  TE_OK );.  /* Fa
8b60: 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
8b70: 65 20 6e 65 78 74 20 63 61 73 65 2c 20 4f 50 5f  e next case, OP_
8b80: 53 74 72 69 6e 67 20 2a 2f 0a 7d 0a 20 20 0a 2f  String */.}.  ./
8b90: 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e 67  * Opcode: String
8ba0: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
8bb0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
8bc0: 32 5d 3d 27 50 34 27 20 28 6c 65 6e 3d 50 31 29  2]='P4' (len=P1)
8bd0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e  .**.** The strin
8be0: 67 20 76 61 6c 75 65 20 50 34 20 6f 66 20 6c 65  g value P4 of le
8bf0: 6e 67 74 68 20 50 31 20 28 62 79 74 65 73 29 20  ngth P1 (bytes) 
8c00: 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
8c10: 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
8c20: 49 66 20 50 33 20 69 73 20 6e 6f 74 20 7a 65 72  If P3 is not zer
8c30: 6f 20 61 6e 64 20 74 68 65 20 63 6f 6e 74 65 6e  o and the conten
8c40: 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33  t of register P3
8c50: 20 69 73 20 65 71 75 61 6c 20 74 6f 20 50 35 2c   is equal to P5,
8c60: 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 64 61 74   then.** the dat
8c70: 61 74 79 70 65 20 6f 66 20 74 68 65 20 72 65 67  atype of the reg
8c80: 69 73 74 65 72 20 50 32 20 69 73 20 63 6f 6e 76  ister P2 is conv
8c90: 65 72 74 65 64 20 74 6f 20 42 4c 4f 42 2e 20 20  erted to BLOB.  
8ca0: 54 68 65 20 63 6f 6e 74 65 6e 74 20 69 73 0a 2a  The content is.*
8cb0: 2a 20 74 68 65 20 73 61 6d 65 20 73 65 71 75 65  * the same seque
8cc0: 6e 63 65 20 6f 66 20 62 79 74 65 73 2c 20 69 74  nce of bytes, it
8cd0: 20 69 73 20 6d 65 72 65 6c 79 20 69 6e 74 65 72   is merely inter
8ce0: 70 72 65 74 65 64 20 61 73 20 61 20 42 4c 4f 42  preted as a BLOB
8cf0: 20 69 6e 73 74 65 61 64 0a 2a 2a 20 6f 66 20 61   instead.** of a
8d00: 20 73 74 72 69 6e 67 2c 20 61 73 20 69 66 20 69   string, as if i
8d10: 74 20 68 61 64 20 62 65 65 6e 20 43 41 53 54 2e  t had been CAST.
8d20: 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
8d30: 3a 0a 2a 2a 0a 2a 2a 20 69 66 28 20 50 33 21 3d  :.**.** if( P3!=
8d40: 30 20 61 6e 64 20 72 65 67 5b 50 33 5d 3d 3d 50  0 and reg[P3]==P
8d50: 35 20 29 20 72 65 67 5b 50 32 5d 20 3a 3d 20 43  5 ) reg[P2] := C
8d60: 41 53 54 28 72 65 67 5b 50 32 5d 20 61 73 20 42  AST(reg[P2] as B
8d70: 4c 4f 42 29 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  LOB).*/.case OP_
8d80: 53 74 72 69 6e 67 3a 20 7b 20 20 20 20 20 20 20  String: {       
8d90: 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
8da0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
8db0: 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 20 3d  z!=0 );.  pOut =
8dc0: 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
8dd0: 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d  p, pOp);.  pOut-
8de0: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72  >flags = MEM_Str
8df0: 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  |MEM_Static|MEM_
8e00: 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20  Term;.  pOut->z 
8e10: 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 70  = pOp->p4.z;.  p
8e20: 4f 75 74 2d 3e 6e 20 3d 20 70 4f 70 2d 3e 70 31  Out->n = pOp->p1
8e30: 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20  ;.  pOut->enc = 
8e40: 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41  encoding;.  UPDA
8e50: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
8e60: 70 4f 75 74 29 3b 0a 23 69 66 6e 64 65 66 20 53  pOut);.#ifndef S
8e70: 51 4c 49 54 45 5f 4c 49 4b 45 5f 44 4f 45 53 4e  QLITE_LIKE_DOESN
8e80: 54 5f 4d 41 54 43 48 5f 42 4c 4f 42 53 0a 20 20  T_MATCH_BLOBS.  
8e90: 69 66 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 7b  if( pOp->p3>0 ){
8ea0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
8eb0: 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ->p3<=(p->nMem+1
8ec0: 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29   - p->nCursor) )
8ed0: 3b 0a 20 20 20 20 70 49 6e 33 20 3d 20 26 61 4d  ;.    pIn3 = &aM
8ee0: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  em[pOp->p3];.   
8ef0: 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66   assert( pIn3->f
8f00: 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
8f10: 3b 0a 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e  ;.    if( pIn3->
8f20: 75 2e 69 3d 3d 70 4f 70 2d 3e 70 35 20 29 20 70  u.i==pOp->p5 ) p
8f30: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
8f40: 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 61 74 69 63  _Blob|MEM_Static
8f50: 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 7d 0a 23  |MEM_Term;.  }.#
8f60: 65 6e 64 69 66 0a 20 20 62 72 65 61 6b 3b 0a 7d  endif.  break;.}
8f70: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c  ../* Opcode: Nul
8f80: 6c 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  l P1 P2 P3 * *.*
8f90: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
8fa0: 2e 2e 50 33 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a  ..P3]=NULL.**.**
8fb0: 20 57 72 69 74 65 20 61 20 4e 55 4c 4c 20 69 6e   Write a NULL in
8fc0: 74 6f 20 72 65 67 69 73 74 65 72 73 20 50 32 2e  to registers P2.
8fd0: 20 20 49 66 20 50 33 20 67 72 65 61 74 65 72 20    If P3 greater 
8fe0: 74 68 61 6e 20 50 32 2c 20 74 68 65 6e 20 61 6c  than P2, then al
8ff0: 73 6f 20 77 72 69 74 65 0a 2a 2a 20 4e 55 4c 4c  so write.** NULL
9000: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
9010: 33 20 61 6e 64 20 65 76 65 72 79 20 72 65 67 69  3 and every regi
9020: 73 74 65 72 20 69 6e 20 62 65 74 77 65 65 6e 20  ster in between 
9030: 50 32 20 61 6e 64 20 50 33 2e 20 20 49 66 20 50  P2 and P3.  If P
9040: 33 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61  3.** is less tha
9050: 6e 20 50 32 20 28 74 79 70 69 63 61 6c 6c 79 20  n P2 (typically 
9060: 50 33 20 69 73 20 7a 65 72 6f 29 20 74 68 65 6e  P3 is zero) then
9070: 20 6f 6e 6c 79 20 72 65 67 69 73 74 65 72 20 50   only register P
9080: 32 20 69 73 0a 2a 2a 20 73 65 74 20 74 6f 20 4e  2 is.** set to N
9090: 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ULL..**.** If th
90a0: 65 20 50 31 20 76 61 6c 75 65 20 69 73 20 6e 6f  e P1 value is no
90b0: 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61 6c 73  n-zero, then als
90c0: 6f 20 73 65 74 20 74 68 65 20 4d 45 4d 5f 43 6c  o set the MEM_Cl
90d0: 65 61 72 65 64 20 66 6c 61 67 20 73 6f 20 74 68  eared flag so th
90e0: 61 74 0a 2a 2a 20 4e 55 4c 4c 20 76 61 6c 75 65  at.** NULL value
90f0: 73 20 77 69 6c 6c 20 6e 6f 74 20 63 6f 6d 70 61  s will not compa
9100: 72 65 20 65 71 75 61 6c 20 65 76 65 6e 20 69 66  re equal even if
9110: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69   SQLITE_NULLEQ i
9120: 73 20 73 65 74 20 6f 6e 0a 2a 2a 20 4f 50 5f 4e  s set on.** OP_N
9130: 65 20 6f 72 20 4f 50 5f 45 71 2e 0a 2a 2f 0a 63  e or OP_Eq..*/.c
9140: 61 73 65 20 4f 50 5f 4e 75 6c 6c 3a 20 7b 20 20  ase OP_Null: {  
9150: 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
9160: 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b 0a 20   */.  int cnt;. 
9170: 20 75 31 36 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20   u16 nullFlag;. 
9180: 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
9190: 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
91a0: 20 20 63 6e 74 20 3d 20 70 4f 70 2d 3e 70 33 2d    cnt = pOp->p3-
91b0: 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72  pOp->p2;.  asser
91c0: 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e  t( pOp->p3<=(p->
91d0: 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
91e0: 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e  sor) );.  pOut->
91f0: 66 6c 61 67 73 20 3d 20 6e 75 6c 6c 46 6c 61 67  flags = nullFlag
9200: 20 3d 20 70 4f 70 2d 3e 70 31 20 3f 20 28 4d 45   = pOp->p1 ? (ME
9210: 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 43 6c 65 61 72  M_Null|MEM_Clear
9220: 65 64 29 20 3a 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ed) : MEM_Null;.
9230: 20 20 77 68 69 6c 65 28 20 63 6e 74 3e 30 20 29    while( cnt>0 )
9240: 7b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20  {.    pOut++;.  
9250: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
9260: 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20  ge(p, pOut);.   
9270: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
9280: 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
9290: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
92a0: 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20 20 20 63 6e  nullFlag;.    cn
92b0: 74 2d 2d 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  t--;.  }.  break
92c0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
92d0: 53 6f 66 74 4e 75 6c 6c 20 50 31 20 2a 20 2a 20  SoftNull P1 * * 
92e0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
92f0: 20 72 5b 50 31 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a   r[P1]=NULL.**.*
9300: 2a 20 53 65 74 20 72 65 67 69 73 74 65 72 20 50  * Set register P
9310: 31 20 74 6f 20 68 61 76 65 20 74 68 65 20 76 61  1 to have the va
9320: 6c 75 65 20 4e 55 4c 4c 20 61 73 20 73 65 65 6e  lue NULL as seen
9330: 20 62 79 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52   by the OP_MakeR
9340: 65 63 6f 72 64 0a 2a 2a 20 69 6e 73 74 72 75 63  ecord.** instruc
9350: 74 69 6f 6e 2c 20 62 75 74 20 64 6f 20 6e 6f 74  tion, but do not
9360: 20 66 72 65 65 20 61 6e 79 20 73 74 72 69 6e 67   free any string
9370: 20 6f 72 20 62 6c 6f 62 20 6d 65 6d 6f 72 79 20   or blob memory 
9380: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 0a  associated with.
9390: 2a 2a 20 74 68 65 20 72 65 67 69 73 74 65 72 2c  ** the register,
93a0: 20 73 6f 20 74 68 61 74 20 69 66 20 74 68 65 20   so that if the 
93b0: 76 61 6c 75 65 20 77 61 73 20 61 20 73 74 72 69  value was a stri
93c0: 6e 67 20 6f 72 20 62 6c 6f 62 20 74 68 61 74 20  ng or blob that 
93d0: 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c  was.** previousl
93e0: 79 20 63 6f 70 69 65 64 20 75 73 69 6e 67 20 4f  y copied using O
93f0: 50 5f 53 43 6f 70 79 2c 20 74 68 65 20 63 6f 70  P_SCopy, the cop
9400: 69 65 73 20 77 69 6c 6c 20 63 6f 6e 74 69 6e 75  ies will continu
9410: 65 20 74 6f 20 62 65 20 76 61 6c 69 64 2e 0a 2a  e to be valid..*
9420: 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 66 74 4e 75  /.case OP_SoftNu
9430: 6c 6c 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20  ll: {.  assert( 
9440: 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70  pOp->p1>0 && pOp
9450: 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ->p1<=(p->nMem+1
9460: 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29   - p->nCursor) )
9470: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
9480: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75  [pOp->p1];.  pOu
9490: 74 2d 3e 66 6c 61 67 73 20 3d 20 28 70 4f 75 74  t->flags = (pOut
94a0: 2d 3e 66 6c 61 67 73 7c 4d 45 4d 5f 4e 75 6c 6c  ->flags|MEM_Null
94b0: 29 26 7e 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64  )&~MEM_Undefined
94c0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
94d0: 20 4f 70 63 6f 64 65 3a 20 42 6c 6f 62 20 50 31   Opcode: Blob P1
94e0: 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79   P2 * P4 *.** Sy
94f0: 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34  nopsis: r[P2]=P4
9500: 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20   (len=P1).**.** 
9510: 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 62  P4 points to a b
9520: 6c 6f 62 20 6f 66 20 64 61 74 61 20 50 31 20 62  lob of data P1 b
9530: 79 74 65 73 20 6c 6f 6e 67 2e 20 20 53 74 6f 72  ytes long.  Stor
9540: 65 20 74 68 69 73 0a 2a 2a 20 62 6c 6f 62 20 69  e this.** blob i
9550: 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
9560: 2f 0a 63 61 73 65 20 4f 50 5f 42 6c 6f 62 3a 20  /.case OP_Blob: 
9570: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
9580: 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73   /* out2 */.  as
9590: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 20 3c 3d  sert( pOp->p1 <=
95a0: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47   SQLITE_MAX_LENG
95b0: 54 48 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f  TH );.  pOut = o
95c0: 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
95d0: 20 70 4f 70 29 3b 0a 20 20 73 71 6c 69 74 65 33   pOp);.  sqlite3
95e0: 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 4f  VdbeMemSetStr(pO
95f0: 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70  ut, pOp->p4.z, p
9600: 4f 70 2d 3e 70 31 2c 20 30 2c 20 30 29 3b 0a 20  Op->p1, 0, 0);. 
9610: 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63   pOut->enc = enc
9620: 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f  oding;.  UPDATE_
9630: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
9640: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
9650: 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61 72 69 61  /* Opcode: Varia
9660: 62 6c 65 20 50 31 20 50 32 20 2a 20 50 34 20 2a  ble P1 P2 * P4 *
9670: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
9680: 50 32 5d 3d 70 61 72 61 6d 65 74 65 72 28 50 31  P2]=parameter(P1
9690: 2c 50 34 29 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73  ,P4).**.** Trans
96a0: 66 65 72 20 74 68 65 20 76 61 6c 75 65 73 20 6f  fer the values o
96b0: 66 20 62 6f 75 6e 64 20 70 61 72 61 6d 65 74 65  f bound paramete
96c0: 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74  r P1 into regist
96d0: 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 49 66 20 74  er P2.**.** If t
96e0: 68 65 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  he parameter is 
96f0: 6e 61 6d 65 64 2c 20 74 68 65 6e 20 69 74 73 20  named, then its 
9700: 6e 61 6d 65 20 61 70 70 65 61 72 73 20 69 6e 20  name appears in 
9710: 50 34 2e 0a 2a 2a 20 54 68 65 20 50 34 20 76 61  P4..** The P4 va
9720: 6c 75 65 20 69 73 20 75 73 65 64 20 62 79 20 73  lue is used by s
9730: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61  qlite3_bind_para
9740: 6d 65 74 65 72 5f 6e 61 6d 65 28 29 2e 0a 2a 2f  meter_name()..*/
9750: 0a 63 61 73 65 20 4f 50 5f 56 61 72 69 61 62 6c  .case OP_Variabl
9760: 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  e: {            
9770: 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 4d 65 6d  /* out2 */.  Mem
9780: 20 2a 70 56 61 72 3b 20 20 20 20 20 20 20 2f 2a   *pVar;       /*
9790: 20 56 61 6c 75 65 20 62 65 69 6e 67 20 74 72 61   Value being tra
97a0: 6e 73 66 65 72 72 65 64 20 2a 2f 0a 0a 20 20 61  nsferred */..  a
97b0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
97c0: 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e   && pOp->p1<=p->
97d0: 6e 56 61 72 20 29 3b 0a 20 20 61 73 73 65 72 74  nVar );.  assert
97e0: 28 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 30 20 7c  ( pOp->p4.z==0 |
97f0: 7c 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 70 2d 3e  | pOp->p4.z==p->
9800: 61 7a 56 61 72 5b 70 4f 70 2d 3e 70 31 2d 31 5d  azVar[pOp->p1-1]
9810: 20 29 3b 0a 20 20 70 56 61 72 20 3d 20 26 70 2d   );.  pVar = &p-
9820: 3e 61 56 61 72 5b 70 4f 70 2d 3e 70 31 20 2d 20  >aVar[pOp->p1 - 
9830: 31 5d 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  1];.  if( sqlite
9840: 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70  3VdbeMemTooBig(p
9850: 56 61 72 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  Var) ){.    goto
9860: 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20   too_big;.  }.  
9870: 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
9880: 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
9890: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
98a0: 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c  hallowCopy(pOut,
98b0: 20 70 56 61 72 2c 20 4d 45 4d 5f 53 74 61 74 69   pVar, MEM_Stati
98c0: 63 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  c);.  UPDATE_MAX
98d0: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
98e0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
98f0: 4f 70 63 6f 64 65 3a 20 4d 6f 76 65 20 50 31 20  Opcode: Move P1 
9900: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
9910: 6f 70 73 69 73 3a 20 72 5b 50 32 40 50 33 5d 3d  opsis: r[P2@P3]=
9920: 72 5b 50 31 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 4d  r[P1@P3].**.** M
9930: 6f 76 65 20 74 68 65 20 50 33 20 76 61 6c 75 65  ove the P3 value
9940: 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
9950: 2e 2e 50 31 2b 50 33 2d 31 20 6f 76 65 72 20 69  ..P1+P3-1 over i
9960: 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 73  nto.** registers
9970: 20 50 32 2e 2e 50 32 2b 50 33 2d 31 2e 20 20 52   P2..P2+P3-1.  R
9980: 65 67 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b  egisters P1..P1+
9990: 50 33 2d 31 20 61 72 65 0a 2a 2a 20 6c 65 66 74  P3-1 are.** left
99a0: 20 68 6f 6c 64 69 6e 67 20 61 20 4e 55 4c 4c 2e   holding a NULL.
99b0: 20 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72    It is an error
99c0: 20 66 6f 72 20 72 65 67 69 73 74 65 72 20 72 61   for register ra
99d0: 6e 67 65 73 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50  nges.** P1..P1+P
99e0: 33 2d 31 20 61 6e 64 20 50 32 2e 2e 50 32 2b 50  3-1 and P2..P2+P
99f0: 33 2d 31 20 74 6f 20 6f 76 65 72 6c 61 70 2e 20  3-1 to overlap. 
9a00: 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 0a   It is an error.
9a10: 2a 2a 20 66 6f 72 20 50 33 20 74 6f 20 62 65 20  ** for P3 to be 
9a20: 6c 65 73 73 20 74 68 61 6e 20 31 2e 0a 2a 2f 0a  less than 1..*/.
9a30: 63 61 73 65 20 4f 50 5f 4d 6f 76 65 3a 20 7b 0a  case OP_Move: {.
9a40: 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20    int n;        
9a50: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
9a60: 72 65 67 69 73 74 65 72 73 20 6c 65 66 74 20 74  registers left t
9a70: 6f 20 63 6f 70 79 20 2a 2f 0a 20 20 69 6e 74 20  o copy */.  int 
9a80: 70 31 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  p1;          /* 
9a90: 52 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79  Register to copy
9aa0: 20 66 72 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20 70   from */.  int p
9ab0: 32 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52  2;          /* R
9ac0: 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20  egister to copy 
9ad0: 74 6f 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70  to */..  n = pOp
9ae0: 2d 3e 70 33 3b 0a 20 20 70 31 20 3d 20 70 4f 70  ->p3;.  p1 = pOp
9af0: 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70  ->p1;.  p2 = pOp
9b00: 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p2;.  assert( 
9b10: 6e 3e 30 20 26 26 20 70 31 3e 30 20 26 26 20 70  n>0 && p1>0 && p
9b20: 32 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  2>0 );.  assert(
9b30: 20 70 31 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32 2b   p1+n<=p2 || p2+
9b40: 6e 3c 3d 70 31 20 29 3b 0a 0a 20 20 70 49 6e 31  n<=p1 );..  pIn1
9b50: 20 3d 20 26 61 4d 65 6d 5b 70 31 5d 3b 0a 20 20   = &aMem[p1];.  
9b60: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 32 5d  pOut = &aMem[p2]
9b70: 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 61 73 73 65  ;.  do{.    asse
9b80: 72 74 28 20 70 4f 75 74 3c 3d 26 61 4d 65 6d 5b  rt( pOut<=&aMem[
9b90: 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
9ba0: 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20  nCursor)] );.   
9bb0: 20 61 73 73 65 72 74 28 20 70 49 6e 31 3c 3d 26   assert( pIn1<=&
9bc0: 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2b 31 20  aMem[(p->nMem+1 
9bd0: 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29  - p->nCursor)] )
9be0: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  ;.    assert( me
9bf0: 6d 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29  mIsValid(pIn1) )
9c00: 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f  ;.    memAboutTo
9c10: 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b  Change(p, pOut);
9c20: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
9c30: 4d 65 6d 4d 6f 76 65 28 70 4f 75 74 2c 20 70 49  MemMove(pOut, pI
9c40: 6e 31 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  n1);.#ifdef SQLI
9c50: 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28  TE_DEBUG.    if(
9c60: 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f   pOut->pScopyFro
9c70: 6d 3e 3d 26 61 4d 65 6d 5b 70 31 5d 20 26 26 20  m>=&aMem[p1] && 
9c80: 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d  pOut->pScopyFrom
9c90: 3c 70 4f 75 74 20 29 7b 0a 20 20 20 20 20 20 70  <pOut ){.      p
9ca0: 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20  Out->pScopyFrom 
9cb0: 2b 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 70 31 3b  += pOp->p2 - p1;
9cc0: 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  .    }.#endif.  
9cd0: 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65    Deephemeralize
9ce0: 28 70 4f 75 74 29 3b 0a 20 20 20 20 52 45 47 49  (pOut);.    REGI
9cf0: 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b 2b 2c  STER_TRACE(p2++,
9d00: 20 70 4f 75 74 29 3b 0a 20 20 20 20 70 49 6e 31   pOut);.    pIn1
9d10: 2b 2b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a  ++;.    pOut++;.
9d20: 20 20 7d 77 68 69 6c 65 28 20 2d 2d 6e 20 29 3b    }while( --n );
9d30: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
9d40: 4f 70 63 6f 64 65 3a 20 43 6f 70 79 20 50 31 20  Opcode: Copy P1 
9d50: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
9d60: 6f 70 73 69 73 3a 20 72 5b 50 32 40 50 33 2b 31  opsis: r[P2@P3+1
9d70: 5d 3d 72 5b 50 31 40 50 33 2b 31 5d 0a 2a 2a 0a  ]=r[P1@P3+1].**.
9d80: 2a 2a 20 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f  ** Make a copy o
9d90: 66 20 72 65 67 69 73 74 65 72 73 20 50 31 2e 2e  f registers P1..
9da0: 50 31 2b 50 33 20 69 6e 74 6f 20 72 65 67 69 73  P1+P3 into regis
9db0: 74 65 72 73 20 50 32 2e 2e 50 32 2b 50 33 2e 0a  ters P2..P2+P3..
9dc0: 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
9dd0: 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 64  uction makes a d
9de0: 65 65 70 20 63 6f 70 79 20 6f 66 20 74 68 65 20  eep copy of the 
9df0: 76 61 6c 75 65 2e 20 20 41 20 64 75 70 6c 69 63  value.  A duplic
9e00: 61 74 65 0a 2a 2a 20 69 73 20 6d 61 64 65 20 6f  ate.** is made o
9e10: 66 20 61 6e 79 20 73 74 72 69 6e 67 20 6f 72 20  f any string or 
9e20: 62 6c 6f 62 20 63 6f 6e 73 74 61 6e 74 2e 20 20  blob constant.  
9e30: 53 65 65 20 61 6c 73 6f 20 4f 50 5f 53 43 6f 70  See also OP_SCop
9e40: 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f  y..*/.case OP_Co
9e50: 70 79 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 0a  py: {.  int n;..
9e60: 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20    n = pOp->p3;. 
9e70: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
9e80: 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d  p->p1];.  pOut =
9e90: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
9ea0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 21  .  assert( pOut!
9eb0: 3d 70 49 6e 31 20 29 3b 0a 20 20 77 68 69 6c 65  =pIn1 );.  while
9ec0: 28 20 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ( 1 ){.    sqlit
9ed0: 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77  e3VdbeMemShallow
9ee0: 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c  Copy(pOut, pIn1,
9ef0: 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 20   MEM_Ephem);.   
9f00: 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28   Deephemeralize(
9f10: 70 4f 75 74 29 3b 0a 23 69 66 64 65 66 20 53 51  pOut);.#ifdef SQ
9f20: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 70  LITE_DEBUG.    p
9f30: 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20  Out->pScopyFrom 
9f40: 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20  = 0;.#endif.    
9f50: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
9f60: 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33 2d 6e  Op->p2+pOp->p3-n
9f70: 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 69 66 28  , pOut);.    if(
9f80: 20 28 6e 2d 2d 29 3d 3d 30 20 29 20 62 72 65 61   (n--)==0 ) brea
9f90: 6b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20  k;.    pOut++;. 
9fa0: 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20     pIn1++;.  }. 
9fb0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
9fc0: 63 6f 64 65 3a 20 53 43 6f 70 79 20 50 31 20 50  code: SCopy P1 P
9fd0: 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
9fe0: 73 69 73 3a 20 72 5b 50 32 5d 3d 72 5b 50 31 5d  sis: r[P2]=r[P1]
9ff0: 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 73 68  .**.** Make a sh
a000: 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 72 65  allow copy of re
a010: 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20 72  gister P1 into r
a020: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
a030: 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
a040: 6f 6e 20 6d 61 6b 65 73 20 61 20 73 68 61 6c 6c  on makes a shall
a050: 6f 77 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76  ow copy of the v
a060: 61 6c 75 65 2e 20 20 49 66 20 74 68 65 20 76 61  alue.  If the va
a070: 6c 75 65 0a 2a 2a 20 69 73 20 61 20 73 74 72 69  lue.** is a stri
a080: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 74 68 65 6e  ng or blob, then
a090: 20 74 68 65 20 63 6f 70 79 20 69 73 20 6f 6e 6c   the copy is onl
a0a0: 79 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  y a pointer to t
a0b0: 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 61  he.** original a
a0c0: 6e 64 20 68 65 6e 63 65 20 69 66 20 74 68 65 20  nd hence if the 
a0d0: 6f 72 69 67 69 6e 61 6c 20 63 68 61 6e 67 65 73  original changes
a0e0: 20 73 6f 20 77 69 6c 6c 20 74 68 65 20 63 6f 70   so will the cop
a0f0: 79 2e 0a 2a 2a 20 57 6f 72 73 65 2c 20 69 66 20  y..** Worse, if 
a100: 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 69 73 20  the original is 
a110: 64 65 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65  deallocated, the
a120: 20 63 6f 70 79 20 62 65 63 6f 6d 65 73 20 69 6e   copy becomes in
a130: 76 61 6c 69 64 2e 0a 2a 2a 20 54 68 75 73 20 74  valid..** Thus t
a140: 68 65 20 70 72 6f 67 72 61 6d 20 6d 75 73 74 20  he program must 
a150: 67 75 61 72 61 6e 74 65 65 20 74 68 61 74 20 74  guarantee that t
a160: 68 65 20 6f 72 69 67 69 6e 61 6c 20 77 69 6c 6c  he original will
a170: 20 6e 6f 74 20 63 68 61 6e 67 65 0a 2a 2a 20 64   not change.** d
a180: 75 72 69 6e 67 20 74 68 65 20 6c 69 66 65 74 69  uring the lifeti
a190: 6d 65 20 6f 66 20 74 68 65 20 63 6f 70 79 2e 20  me of the copy. 
a1a0: 20 55 73 65 20 4f 50 5f 43 6f 70 79 20 74 6f 20   Use OP_Copy to 
a1b0: 6d 61 6b 65 20 61 20 63 6f 6d 70 6c 65 74 65 0a  make a complete.
a1c0: 2a 2a 20 63 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65  ** copy..*/.case
a1d0: 20 4f 50 5f 53 43 6f 70 79 3a 20 7b 20 20 20 20   OP_SCopy: {    
a1e0: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
a1f0: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
a200: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f  m[pOp->p1];.  pO
a210: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
a220: 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p2];.  assert( p
a230: 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 73  Out!=pIn1 );.  s
a240: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
a250: 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70  llowCopy(pOut, p
a260: 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b  In1, MEM_Ephem);
a270: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
a280: 45 42 55 47 0a 20 20 69 66 28 20 70 4f 75 74 2d  EBUG.  if( pOut-
a290: 3e 70 53 63 6f 70 79 46 72 6f 6d 3d 3d 30 20 29  >pScopyFrom==0 )
a2a0: 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f   pOut->pScopyFro
a2b0: 6d 20 3d 20 70 49 6e 31 3b 0a 23 65 6e 64 69 66  m = pIn1;.#endif
a2c0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
a2d0: 4f 70 63 6f 64 65 3a 20 49 6e 74 43 6f 70 79 20  Opcode: IntCopy 
a2e0: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
a2f0: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72  ynopsis: r[P2]=r
a300: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73  [P1].**.** Trans
a310: 66 65 72 20 74 68 65 20 69 6e 74 65 67 65 72 20  fer the integer 
a320: 76 61 6c 75 65 20 68 65 6c 64 20 69 6e 20 72 65  value held in re
a330: 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20 72  gister P1 into r
a340: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
a350: 2a 20 54 68 69 73 20 69 73 20 61 6e 20 6f 70 74  * This is an opt
a360: 69 6d 69 7a 65 64 20 76 65 72 73 69 6f 6e 20 6f  imized version o
a370: 66 20 53 43 6f 70 79 20 74 68 61 74 20 77 6f 72  f SCopy that wor
a380: 6b 73 20 6f 6e 6c 79 20 66 6f 72 20 69 6e 74 65  ks only for inte
a390: 67 65 72 0a 2a 2a 20 76 61 6c 75 65 73 2e 0a 2a  ger.** values..*
a3a0: 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 43 6f 70  /.case OP_IntCop
a3b0: 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  y: {            
a3c0: 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e  /* out2 */.  pIn
a3d0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
a3e0: 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70  1];.  assert( (p
a3f0: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
a400: 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 70 4f  _Int)!=0 );.  pO
a410: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
a420: 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  p2];.  sqlite3Vd
a430: 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4f  beMemSetInt64(pO
a440: 75 74 2c 20 70 49 6e 31 2d 3e 75 2e 69 29 3b 0a  ut, pIn1->u.i);.
a450: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
a460: 70 63 6f 64 65 3a 20 52 65 73 75 6c 74 52 6f 77  pcode: ResultRow
a470: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
a480: 53 79 6e 6f 70 73 69 73 3a 20 6f 75 74 70 75 74  Synopsis: output
a490: 3d 72 5b 50 31 40 50 32 5d 0a 2a 2a 0a 2a 2a 20  =r[P1@P2].**.** 
a4a0: 54 68 65 20 72 65 67 69 73 74 65 72 73 20 50 31  The registers P1
a4b0: 20 74 68 72 6f 75 67 68 20 50 31 2b 50 32 2d 31   through P1+P2-1
a4c0: 20 63 6f 6e 74 61 69 6e 20 61 20 73 69 6e 67 6c   contain a singl
a4d0: 65 20 72 6f 77 20 6f 66 0a 2a 2a 20 72 65 73 75  e row of.** resu
a4e0: 6c 74 73 2e 20 54 68 69 73 20 6f 70 63 6f 64 65  lts. This opcode
a4f0: 20 63 61 75 73 65 73 20 74 68 65 20 73 71 6c 69   causes the sqli
a500: 74 65 33 5f 73 74 65 70 28 29 20 63 61 6c 6c 20  te3_step() call 
a510: 74 6f 20 74 65 72 6d 69 6e 61 74 65 0a 2a 2a 20  to terminate.** 
a520: 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 52  with an SQLITE_R
a530: 4f 57 20 72 65 74 75 72 6e 20 63 6f 64 65 20 61  OW return code a
a540: 6e 64 20 69 74 20 73 65 74 73 20 75 70 20 74 68  nd it sets up th
a550: 65 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 0a 2a  e sqlite3_stmt.*
a560: 2a 20 73 74 72 75 63 74 75 72 65 20 74 6f 20 70  * structure to p
a570: 72 6f 76 69 64 65 20 61 63 63 65 73 73 20 74 6f  rovide access to
a580: 20 74 68 65 20 72 28 50 31 29 2e 2e 72 28 50 31   the r(P1)..r(P1
a590: 2b 50 32 2d 31 29 20 76 61 6c 75 65 73 20 61 73  +P2-1) values as
a5a0: 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 20 72  .** the result r
a5b0: 6f 77 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  ow..*/.case OP_R
a5c0: 65 73 75 6c 74 52 6f 77 3a 20 7b 0a 20 20 4d 65  esultRow: {.  Me
a5d0: 6d 20 2a 70 4d 65 6d 3b 0a 20 20 69 6e 74 20 69  m *pMem;.  int i
a5e0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6e  ;.  assert( p->n
a5f0: 52 65 73 43 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e  ResColumn==pOp->
a600: 70 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  p2 );.  assert( 
a610: 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 61  pOp->p1>0 );.  a
a620: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 2b 70  ssert( pOp->p1+p
a630: 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p2<=(p->nMem
a640: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
a650: 2b 31 20 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53  +1 );..#ifndef S
a660: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52  QLITE_OMIT_PROGR
a670: 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 2f  ESS_CALLBACK.  /
a680: 2a 20 52 75 6e 20 74 68 65 20 70 72 6f 67 72 65  * Run the progre
a690: 73 73 20 63 6f 75 6e 74 65 72 20 6a 75 73 74 20  ss counter just 
a6a0: 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67  before returning
a6b0: 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d  ..  */.  if( db-
a6c0: 3e 78 50 72 6f 67 72 65 73 73 21 3d 30 0a 20 20  >xProgress!=0.  
a6d0: 20 26 26 20 6e 56 6d 53 74 65 70 3e 3d 6e 50 72   && nVmStep>=nPr
a6e0: 6f 67 72 65 73 73 4c 69 6d 69 74 0a 20 20 20 26  ogressLimit.   &
a6f0: 26 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 28  & db->xProgress(
a700: 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41 72 67  db->pProgressArg
a710: 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 72 63  )!=0.  ){.    rc
a720: 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52   = SQLITE_INTERR
a730: 55 50 54 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62  UPT;.    goto ab
a740: 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
a750: 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20  ;.  }.#endif..  
a760: 2f 2a 20 49 66 20 74 68 69 73 20 73 74 61 74 65  /* If this state
a770: 6d 65 6e 74 20 68 61 73 20 76 69 6f 6c 61 74 65  ment has violate
a780: 64 20 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65  d immediate fore
a790: 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
a7a0: 6e 74 73 2c 20 64 6f 0a 20 20 2a 2a 20 6e 6f 74  nts, do.  ** not
a7b0: 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62   return the numb
a7c0: 65 72 20 6f 66 20 72 6f 77 73 20 6d 6f 64 69 66  er of rows modif
a7d0: 69 65 64 2e 20 41 6e 64 20 64 6f 20 6e 6f 74 20  ied. And do not 
a7e0: 52 45 4c 45 41 53 45 20 74 68 65 20 73 74 61 74  RELEASE the stat
a7f0: 65 6d 65 6e 74 0a 20 20 2a 2a 20 74 72 61 6e 73  ement.  ** trans
a800: 61 63 74 69 6f 6e 2e 20 49 74 20 6e 65 65 64 73  action. It needs
a810: 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61   to be rolled ba
a820: 63 6b 2e 20 20 2a 2f 0a 20 20 69 66 28 20 53 51  ck.  */.  if( SQ
a830: 4c 49 54 45 5f 4f 4b 21 3d 28 72 63 20 3d 20 73  LITE_OK!=(rc = s
a840: 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 46  qlite3VdbeCheckF
a850: 6b 28 70 2c 20 30 29 29 20 29 7b 0a 20 20 20 20  k(p, 0)) ){.    
a860: 61 73 73 65 72 74 28 20 64 62 2d 3e 66 6c 61 67  assert( db->flag
a870: 73 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f  s&SQLITE_CountRo
a880: 77 73 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  ws );.    assert
a890: 28 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75  ( p->usesStmtJou
a8a0: 72 6e 61 6c 20 29 3b 0a 20 20 20 20 67 6f 74 6f  rnal );.    goto
a8b0: 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
a8c0: 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49  ror;.  }..  /* I
a8d0: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 43 6f 75  f the SQLITE_Cou
a8e0: 6e 74 52 6f 77 73 20 66 6c 61 67 20 69 73 20 73  ntRows flag is s
a8f0: 65 74 20 69 6e 20 73 71 6c 69 74 65 33 2e 66 6c  et in sqlite3.fl
a900: 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 0a  ags mask, then .
a910: 20 20 2a 2a 20 44 4d 4c 20 73 74 61 74 65 6d 65    ** DML stateme
a920: 6e 74 73 20 69 6e 76 6f 6b 65 20 74 68 69 73 20  nts invoke this 
a930: 6f 70 63 6f 64 65 20 74 6f 20 72 65 74 75 72 6e  opcode to return
a940: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
a950: 6f 77 73 20 0a 20 20 2a 2a 20 6d 6f 64 69 66 69  ows .  ** modifi
a960: 65 64 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20  ed to the user. 
a970: 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79  This is the only
a980: 20 77 61 79 20 74 68 61 74 20 61 20 56 4d 20 74   way that a VM t
a990: 68 61 74 0a 20 20 2a 2a 20 6f 70 65 6e 73 20 61  hat.  ** opens a
a9a0: 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
a9b0: 61 63 74 69 6f 6e 20 6d 61 79 20 69 6e 76 6f 6b  action may invok
a9c0: 65 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 20  e this opcode.. 
a9d0: 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 63 61 73 65   **.  ** In case
a9e0: 20 74 68 69 73 20 69 73 20 73 75 63 68 20 61 20   this is such a 
a9f0: 73 74 61 74 65 6d 65 6e 74 2c 20 63 6c 6f 73 65  statement, close
aa00: 20 61 6e 79 20 73 74 61 74 65 6d 65 6e 74 20 74   any statement t
aa10: 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20 2a 2a 20  ransaction.  ** 
aa20: 6f 70 65 6e 65 64 20 62 79 20 74 68 69 73 20 56  opened by this V
aa30: 4d 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69  M before returni
aa40: 6e 67 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68  ng control to th
aa50: 65 20 75 73 65 72 2e 20 54 68 69 73 20 69 73 20  e user. This is 
aa60: 74 6f 0a 20 20 2a 2a 20 65 6e 73 75 72 65 20 74  to.  ** ensure t
aa70: 68 61 74 20 73 74 61 74 65 6d 65 6e 74 2d 74 72  hat statement-tr
aa80: 61 6e 73 61 63 74 69 6f 6e 73 20 61 72 65 20 61  ansactions are a
aa90: 6c 77 61 79 73 20 6e 65 73 74 65 64 2c 20 6e 6f  lways nested, no
aaa0: 74 20 6f 76 65 72 6c 61 70 70 69 6e 67 2e 0a 20  t overlapping.. 
aab0: 20 2a 2a 20 49 66 20 74 68 65 20 6f 70 65 6e 20   ** If the open 
aac0: 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61  statement-transa
aad0: 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 63 6c 6f  ction is not clo
aae0: 73 65 64 20 68 65 72 65 2c 20 74 68 65 6e 20 74  sed here, then t
aaf0: 68 65 20 75 73 65 72 0a 20 20 2a 2a 20 6d 61 79  he user.  ** may
ab00: 20 73 74 65 70 20 61 6e 6f 74 68 65 72 20 56 4d   step another VM
ab10: 20 74 68 61 74 20 6f 70 65 6e 73 20 69 74 73 20   that opens its 
ab20: 6f 77 6e 20 73 74 61 74 65 6d 65 6e 74 20 74 72  own statement tr
ab30: 61 6e 73 61 63 74 69 6f 6e 2e 20 54 68 69 73 0a  ansaction. This.
ab40: 20 20 2a 2a 20 6d 61 79 20 6c 65 61 64 20 74 6f    ** may lead to
ab50: 20 6f 76 65 72 6c 61 70 70 69 6e 67 20 73 74 61   overlapping sta
ab60: 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
ab70: 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  ons..  **.  ** T
ab80: 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  he statement tra
ab90: 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 65 76 65  nsaction is neve
aba0: 72 20 61 20 74 6f 70 2d 6c 65 76 65 6c 20 74 72  r a top-level tr
abb0: 61 6e 73 61 63 74 69 6f 6e 2e 20 20 48 65 6e 63  ansaction.  Henc
abc0: 65 0a 20 20 2a 2a 20 74 68 65 20 52 45 4c 45 41  e.  ** the RELEA
abd0: 53 45 20 63 61 6c 6c 20 62 65 6c 6f 77 20 63 61  SE call below ca
abe0: 6e 20 6e 65 76 65 72 20 66 61 69 6c 2e 0a 20 20  n never fail..  
abf0: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  */.  assert( p->
ac00: 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 7c 7c  iStatement==0 ||
ac10: 20 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54   db->flags&SQLIT
ac20: 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20  E_CountRows );. 
ac30: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
ac40: 65 43 6c 6f 73 65 53 74 61 74 65 6d 65 6e 74 28  eCloseStatement(
ac50: 70 2c 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  p, SAVEPOINT_REL
ac60: 45 41 53 45 29 3b 0a 20 20 61 73 73 65 72 74 28  EASE);.  assert(
ac70: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
ac80: 3b 0a 0a 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61  ;..  /* Invalida
ac90: 74 65 20 61 6c 6c 20 65 70 68 65 6d 65 72 61 6c  te all ephemeral
aca0: 20 63 75 72 73 6f 72 20 72 6f 77 20 63 61 63 68   cursor row cach
acb0: 65 73 20 2a 2f 0a 20 20 70 2d 3e 63 61 63 68 65  es */.  p->cache
acc0: 43 74 72 20 3d 20 28 70 2d 3e 63 61 63 68 65 43  Ctr = (p->cacheC
acd0: 74 72 20 2b 20 32 29 7c 31 3b 0a 0a 20 20 2f 2a  tr + 2)|1;..  /*
ace0: 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 72   Make sure the r
acf0: 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63 75  esults of the cu
ad00: 72 72 65 6e 74 20 72 6f 77 20 61 72 65 20 5c 30  rrent row are \0
ad10: 30 30 20 74 65 72 6d 69 6e 61 74 65 64 0a 20 20  00 terminated.  
ad20: 2a 2a 20 61 6e 64 20 68 61 76 65 20 61 6e 20 61  ** and have an a
ad30: 73 73 69 67 6e 65 64 20 74 79 70 65 2e 20 20 54  ssigned type.  T
ad40: 68 65 20 72 65 73 75 6c 74 73 20 61 72 65 20 64  he results are d
ad50: 65 2d 65 70 68 65 6d 65 72 61 6c 69 7a 65 64 20  e-ephemeralized 
ad60: 61 73 0a 20 20 2a 2a 20 61 20 73 69 64 65 20 65  as.  ** a side e
ad70: 66 66 65 63 74 2e 0a 20 20 2a 2f 0a 20 20 70 4d  ffect..  */.  pM
ad80: 65 6d 20 3d 20 70 2d 3e 70 52 65 73 75 6c 74 53  em = p->pResultS
ad90: 65 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  et = &aMem[pOp->
ada0: 70 31 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20  p1];.  for(i=0; 
adb0: 69 3c 70 4f 70 2d 3e 70 32 3b 20 69 2b 2b 29 7b  i<pOp->p2; i++){
adc0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
add0: 49 73 56 61 6c 69 64 28 26 70 4d 65 6d 5b 69 5d  IsValid(&pMem[i]
ade0: 29 20 29 3b 0a 20 20 20 20 44 65 65 70 68 65 6d  ) );.    Deephem
adf0: 65 72 61 6c 69 7a 65 28 26 70 4d 65 6d 5b 69 5d  eralize(&pMem[i]
ae00: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28  );.    assert( (
ae10: 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73 20 26 20  pMem[i].flags & 
ae20: 4d 45 4d 5f 45 70 68 65 6d 29 3d 3d 30 0a 20 20  MEM_Ephem)==0.  
ae30: 20 20 20 20 20 20 20 20 20 20 7c 7c 20 28 70 4d            || (pM
ae40: 65 6d 5b 69 5d 2e 66 6c 61 67 73 20 26 20 28 4d  em[i].flags & (M
ae50: 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29  EM_Str|MEM_Blob)
ae60: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69  )==0 );.    sqli
ae70: 74 65 33 56 64 62 65 4d 65 6d 4e 75 6c 54 65 72  te3VdbeMemNulTer
ae80: 6d 69 6e 61 74 65 28 26 70 4d 65 6d 5b 69 5d 29  minate(&pMem[i])
ae90: 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
aea0: 52 41 43 45 28 70 4f 70 2d 3e 70 31 2b 69 2c 20  RACE(pOp->p1+i, 
aeb0: 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 7d 0a 20  &pMem[i]);.  }. 
aec0: 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46   if( db->mallocF
aed0: 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f  ailed ) goto no_
aee0: 6d 65 6d 3b 0a 0a 20 20 69 66 28 20 64 62 2d 3e  mem;..  if( db->
aef0: 6d 54 72 61 63 65 20 26 20 53 51 4c 49 54 45 5f  mTrace & SQLITE_
af00: 54 52 41 43 45 5f 52 4f 57 20 29 7b 0a 20 20 20  TRACE_ROW ){.   
af10: 20 64 62 2d 3e 78 54 72 61 63 65 28 53 51 4c 49   db->xTrace(SQLI
af20: 54 45 5f 54 52 41 43 45 5f 52 4f 57 2c 20 64 62  TE_TRACE_ROW, db
af30: 2d 3e 70 54 72 61 63 65 41 72 67 2c 20 70 2c 20  ->pTraceArg, p, 
af40: 30 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52 65  0);.  }..  /* Re
af50: 74 75 72 6e 20 53 51 4c 49 54 45 5f 52 4f 57 0a  turn SQLITE_ROW.
af60: 20 20 2a 2f 0a 20 20 70 2d 3e 70 63 20 3d 20 28    */.  p->pc = (
af70: 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 20  int)(pOp - aOp) 
af80: 2b 20 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49  + 1;.  rc = SQLI
af90: 54 45 5f 52 4f 57 3b 0a 20 20 67 6f 74 6f 20 76  TE_ROW;.  goto v
afa0: 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f  dbe_return;.}../
afb0: 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6e 63 61 74  * Opcode: Concat
afc0: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
afd0: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
afe0: 3d 72 5b 50 32 5d 2b 72 5b 50 31 5d 0a 2a 2a 0a  =r[P2]+r[P1].**.
aff0: 2a 2a 20 41 64 64 20 74 68 65 20 74 65 78 74 20  ** Add the text 
b000: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 6f  in register P1 o
b010: 6e 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74  nto the end of t
b020: 68 65 20 74 65 78 74 20 69 6e 0a 2a 2a 20 72 65  he text in.** re
b030: 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 73 74  gister P2 and st
b040: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
b050: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
b060: 2a 20 49 66 20 65 69 74 68 65 72 20 74 68 65 20  * If either the 
b070: 50 31 20 6f 72 20 50 32 20 74 65 78 74 20 61 72  P1 or P2 text ar
b080: 65 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72  e NULL then stor
b090: 65 20 4e 55 4c 4c 20 69 6e 20 50 33 2e 0a 2a 2a  e NULL in P3..**
b0a0: 0a 2a 2a 20 20 20 50 33 20 3d 20 50 32 20 7c 7c  .**   P3 = P2 ||
b0b0: 20 50 31 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20   P1.**.** It is 
b0c0: 69 6c 6c 65 67 61 6c 20 66 6f 72 20 50 31 20 61  illegal for P1 a
b0d0: 6e 64 20 50 33 20 74 6f 20 62 65 20 74 68 65 20  nd P3 to be the 
b0e0: 73 61 6d 65 20 72 65 67 69 73 74 65 72 2e 20 53  same register. S
b0f0: 6f 6d 65 74 69 6d 65 73 2c 0a 2a 2a 20 69 66 20  ometimes,.** if 
b100: 50 33 20 69 73 20 74 68 65 20 73 61 6d 65 20 72  P3 is the same r
b110: 65 67 69 73 74 65 72 20 61 73 20 50 32 2c 20 74  egister as P2, t
b120: 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
b130: 6e 20 69 73 20 61 62 6c 65 0a 2a 2a 20 74 6f 20  n is able.** to 
b140: 61 76 6f 69 64 20 61 20 6d 65 6d 63 70 79 28 29  avoid a memcpy()
b150: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6e  ..*/.case OP_Con
b160: 63 61 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  cat: {          
b170: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 43   /* same as TK_C
b180: 4f 4e 43 41 54 2c 20 69 6e 31 2c 20 69 6e 32 2c  ONCAT, in1, in2,
b190: 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 6e   out3 */.  i64 n
b1a0: 42 79 74 65 3b 0a 0a 20 20 70 49 6e 31 20 3d 20  Byte;..  pIn1 = 
b1b0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
b1c0: 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
b1d0: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 20  Op->p2];.  pOut 
b1e0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
b1f0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  ;.  assert( pIn1
b200: 21 3d 70 4f 75 74 20 29 3b 0a 20 20 69 66 28 20  !=pOut );.  if( 
b210: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70  (pIn1->flags | p
b220: 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45  In2->flags) & ME
b230: 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71  M_Null ){.    sq
b240: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
b250: 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62  ull(pOut);.    b
b260: 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 66 28 20  reak;.  }.  if( 
b270: 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29  ExpandBlob(pIn1)
b280: 20 7c 7c 20 45 78 70 61 6e 64 42 6c 6f 62 28 70   || ExpandBlob(p
b290: 49 6e 32 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  In2) ) goto no_m
b2a0: 65 6d 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28  em;.  Stringify(
b2b0: 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  pIn1, encoding);
b2c0: 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e  .  Stringify(pIn
b2d0: 32 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  2, encoding);.  
b2e0: 6e 42 79 74 65 20 3d 20 70 49 6e 31 2d 3e 6e 20  nByte = pIn1->n 
b2f0: 2b 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 69 66 28  + pIn2->n;.  if(
b300: 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69   nByte>db->aLimi
b310: 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
b320: 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f  ENGTH] ){.    go
b330: 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
b340: 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
b350: 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20 28  eMemGrow(pOut, (
b360: 69 6e 74 29 6e 42 79 74 65 2b 32 2c 20 70 4f 75  int)nByte+2, pOu
b370: 74 3d 3d 70 49 6e 32 29 20 29 7b 0a 20 20 20 20  t==pIn2) ){.    
b380: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
b390: 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
b3a0: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 53 74 72 29  g(pOut, MEM_Str)
b3b0: 3b 0a 20 20 69 66 28 20 70 4f 75 74 21 3d 70 49  ;.  if( pOut!=pI
b3c0: 6e 32 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79  n2 ){.    memcpy
b3d0: 28 70 4f 75 74 2d 3e 7a 2c 20 70 49 6e 32 2d 3e  (pOut->z, pIn2->
b3e0: 7a 2c 20 70 49 6e 32 2d 3e 6e 29 3b 0a 20 20 7d  z, pIn2->n);.  }
b3f0: 0a 20 20 6d 65 6d 63 70 79 28 26 70 4f 75 74 2d  .  memcpy(&pOut-
b400: 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c 20 70 49 6e  >z[pIn2->n], pIn
b410: 31 2d 3e 7a 2c 20 70 49 6e 31 2d 3e 6e 29 3b 0a  1->z, pIn1->n);.
b420: 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 5d    pOut->z[nByte]
b430: 3d 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42  =0;.  pOut->z[nB
b440: 79 74 65 2b 31 5d 20 3d 20 30 3b 0a 20 20 70 4f  yte+1] = 0;.  pO
b450: 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d  ut->flags |= MEM
b460: 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 6e  _Term;.  pOut->n
b470: 20 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20   = (int)nByte;. 
b480: 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63   pOut->enc = enc
b490: 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f  oding;.  UPDATE_
b4a0: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
b4b0: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
b4c0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 20 50  /* Opcode: Add P
b4d0: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
b4e0: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72  ynopsis: r[P3]=r
b4f0: 5b 50 31 5d 2b 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  [P1]+r[P2].**.**
b500: 20 41 64 64 20 74 68 65 20 76 61 6c 75 65 20 69   Add the value i
b510: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f  n register P1 to
b520: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
b530: 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64  gister P2.** and
b540: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
b550: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
b560: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
b570: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
b580: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
b590: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
b5a0: 4d 75 6c 74 69 70 6c 79 20 50 31 20 50 32 20 50  Multiply P1 P2 P
b5b0: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
b5c0: 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 2a 72  s: r[P3]=r[P1]*r
b5d0: 5b 50 32 5d 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d 75  [P2].**.**.** Mu
b5e0: 6c 74 69 70 6c 79 20 74 68 65 20 76 61 6c 75 65  ltiply the value
b5f0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
b600: 62 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  by the value in 
b610: 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61  register P2.** a
b620: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
b630: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
b640: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
b650: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
b660: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
b670: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
b680: 3a 20 53 75 62 74 72 61 63 74 20 50 31 20 50 32  : Subtract P1 P2
b690: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
b6a0: 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d  sis: r[P3]=r[P2]
b6b0: 2d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 75 62  -r[P1].**.** Sub
b6c0: 74 72 61 63 74 20 74 68 65 20 76 61 6c 75 65 20  tract the value 
b6d0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 66  in register P1 f
b6e0: 72 6f 6d 20 74 68 65 20 76 61 6c 75 65 20 69 6e  rom the value in
b6f0: 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20   register P2.** 
b700: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
b710: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
b720: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
b730: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
b740: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
b750: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
b760: 65 3a 20 44 69 76 69 64 65 20 50 31 20 50 32 20  e: Divide P1 P2 
b770: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
b780: 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2f  is: r[P3]=r[P2]/
b790: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 44 69 76 69  r[P1].**.** Divi
b7a0: 64 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  de the value in 
b7b0: 72 65 67 69 73 74 65 72 20 50 31 20 62 79 20 74  register P1 by t
b7c0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
b7d0: 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73  ster P2.** and s
b7e0: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
b7f0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 28  in register P3 (
b800: 50 33 3d 50 32 2f 50 31 29 2e 20 49 66 20 74 68  P3=P2/P1). If th
b810: 65 20 76 61 6c 75 65 20 69 6e 20 0a 2a 2a 20 72  e value in .** r
b820: 65 67 69 73 74 65 72 20 50 31 20 69 73 20 7a 65  egister P1 is ze
b830: 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 72 65 73  ro, then the res
b840: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 20 49 66 20  ult is NULL. If 
b850: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
b860: 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65  .** NULL, the re
b870: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
b880: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6d 61  ./* Opcode: Rema
b890: 69 6e 64 65 72 20 50 31 20 50 32 20 50 33 20 2a  inder P1 P2 P3 *
b8a0: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
b8b0: 72 5b 50 33 5d 3d 72 5b 50 32 5d 25 72 5b 50 31  r[P3]=r[P2]%r[P1
b8c0: 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 75 74 65 20  ].**.** Compute 
b8d0: 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20 61 66  the remainder af
b8e0: 74 65 72 20 69 6e 74 65 67 65 72 20 72 65 67 69  ter integer regi
b8f0: 73 74 65 72 20 50 32 20 69 73 20 64 69 76 69 64  ster P2 is divid
b900: 65 64 20 62 79 20 0a 2a 2a 20 72 65 67 69 73 74  ed by .** regist
b910: 65 72 20 50 31 20 61 6e 64 20 73 74 6f 72 65 20  er P1 and store 
b920: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
b930: 67 69 73 74 65 72 20 50 33 2e 20 0a 2a 2a 20 49  gister P3. .** I
b940: 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
b950: 65 67 69 73 74 65 72 20 50 31 20 69 73 20 7a 65  egister P1 is ze
b960: 72 6f 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  ro the result is
b970: 20 4e 55 4c 4c 2e 0a 2a 2a 20 49 66 20 65 69 74   NULL..** If eit
b980: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
b990: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
b9a0: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  is NULL..*/.case
b9b0: 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20   OP_Add:        
b9c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
b9d0: 6d 65 20 61 73 20 54 4b 5f 50 4c 55 53 2c 20 69  me as TK_PLUS, i
b9e0: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
b9f0: 0a 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63  .case OP_Subtrac
ba00: 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t:              
ba10: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4d 49  /* same as TK_MI
ba20: 4e 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  NUS, in1, in2, o
ba30: 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d  ut3 */.case OP_M
ba40: 75 6c 74 69 70 6c 79 3a 20 20 20 20 20 20 20 20  ultiply:        
ba50: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
ba60: 20 54 4b 5f 53 54 41 52 2c 20 69 6e 31 2c 20 69   TK_STAR, in1, i
ba70: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
ba80: 20 4f 50 5f 44 69 76 69 64 65 3a 20 20 20 20 20   OP_Divide:     
ba90: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
baa0: 6d 65 20 61 73 20 54 4b 5f 53 4c 41 53 48 2c 20  me as TK_SLASH, 
bab0: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
bac0: 2f 0a 63 61 73 65 20 4f 50 5f 52 65 6d 61 69 6e  /.case OP_Remain
bad0: 64 65 72 3a 20 7b 20 20 20 20 20 20 20 20 20 20  der: {          
bae0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52   /* same as TK_R
baf0: 45 4d 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  EM, in1, in2, ou
bb00: 74 33 20 2a 2f 0a 20 20 63 68 61 72 20 62 49 6e  t3 */.  char bIn
bb10: 74 69 6e 74 3b 20 20 20 2f 2a 20 53 74 61 72 74  tint;   /* Start
bb20: 65 64 20 6f 75 74 20 61 73 20 74 77 6f 20 69 6e  ed out as two in
bb30: 74 65 67 65 72 20 6f 70 65 72 61 6e 64 73 20 2a  teger operands *
bb40: 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 3b 20 20  /.  u16 flags;  
bb50: 20 20 20 20 2f 2a 20 43 6f 6d 62 69 6e 65 64 20      /* Combined 
bb60: 4d 45 4d 5f 2a 20 66 6c 61 67 73 20 66 72 6f 6d  MEM_* flags from
bb70: 20 62 6f 74 68 20 69 6e 70 75 74 73 20 2a 2f 0a   both inputs */.
bb80: 20 20 75 31 36 20 74 79 70 65 31 3b 20 20 20 20    u16 type1;    
bb90: 20 20 2f 2a 20 4e 75 6d 65 72 69 63 20 74 79 70    /* Numeric typ
bba0: 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e  e of left operan
bbb0: 64 20 2a 2f 0a 20 20 75 31 36 20 74 79 70 65 32  d */.  u16 type2
bbc0: 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 65 72 69  ;      /* Numeri
bbd0: 63 20 74 79 70 65 20 6f 66 20 72 69 67 68 74 20  c type of right 
bbe0: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36 34  operand */.  i64
bbf0: 20 69 41 3b 20 20 20 20 20 20 20 20 20 2f 2a 20   iA;         /* 
bc00: 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f 66  Integer value of
bc10: 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f   left operand */
bc20: 0a 20 20 69 36 34 20 69 42 3b 20 20 20 20 20 20  .  i64 iB;      
bc30: 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61     /* Integer va
bc40: 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65  lue of right ope
bc50: 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65  rand */.  double
bc60: 20 72 41 3b 20 20 20 20 20 20 2f 2a 20 52 65 61   rA;      /* Rea
bc70: 6c 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74 20  l value of left 
bc80: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75  operand */.  dou
bc90: 62 6c 65 20 72 42 3b 20 20 20 20 20 20 2f 2a 20  ble rB;      /* 
bca0: 52 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 72 69  Real value of ri
bcb0: 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 0a  ght operand */..
bcc0: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
bcd0: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 74 79 70 65 31  Op->p1];.  type1
bce0: 20 3d 20 6e 75 6d 65 72 69 63 54 79 70 65 28 70   = numericType(p
bcf0: 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26  In1);.  pIn2 = &
bd00: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
bd10: 20 74 79 70 65 32 20 3d 20 6e 75 6d 65 72 69 63   type2 = numeric
bd20: 54 79 70 65 28 70 49 6e 32 29 3b 0a 20 20 70 4f  Type(pIn2);.  pO
bd30: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
bd40: 70 33 5d 3b 0a 20 20 66 6c 61 67 73 20 3d 20 70  p3];.  flags = p
bd50: 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e  In1->flags | pIn
bd60: 32 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20  2->flags;.  if( 
bd70: 28 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  (flags & MEM_Nul
bd80: 6c 29 21 3d 30 20 29 20 67 6f 74 6f 20 61 72 69  l)!=0 ) goto ari
bd90: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
bda0: 73 5f 6e 75 6c 6c 3b 0a 20 20 69 66 28 20 28 74  s_null;.  if( (t
bdb0: 79 70 65 31 20 26 20 74 79 70 65 32 20 26 20 4d  ype1 & type2 & M
bdc0: 45 4d 5f 49 6e 74 29 21 3d 30 20 29 7b 0a 20 20  EM_Int)!=0 ){.  
bdd0: 20 20 69 41 20 3d 20 70 49 6e 31 2d 3e 75 2e 69    iA = pIn1->u.i
bde0: 3b 0a 20 20 20 20 69 42 20 3d 20 70 49 6e 32 2d  ;.    iB = pIn2-
bdf0: 3e 75 2e 69 3b 0a 20 20 20 20 62 49 6e 74 69 6e  >u.i;.    bIntin
be00: 74 20 3d 20 31 3b 0a 20 20 20 20 73 77 69 74 63  t = 1;.    switc
be10: 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29  h( pOp->opcode )
be20: 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  {.      case OP_
be30: 41 64 64 3a 20 20 20 20 20 20 20 69 66 28 20 73  Add:       if( s
be40: 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28 26  qlite3AddInt64(&
be50: 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70  iB,iA) ) goto fp
be60: 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20  _math;  break;. 
be70: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 53 75 62       case OP_Sub
be80: 74 72 61 63 74 3a 20 20 69 66 28 20 73 71 6c 69  tract:  if( sqli
be90: 74 65 33 53 75 62 49 6e 74 36 34 28 26 69 42 2c  te3SubInt64(&iB,
bea0: 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61  iA) ) goto fp_ma
beb0: 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20  th;  break;.    
bec0: 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70    case OP_Multip
bed0: 6c 79 3a 20 20 69 66 28 20 73 71 6c 69 74 65 33  ly:  if( sqlite3
bee0: 4d 75 6c 49 6e 74 36 34 28 26 69 42 2c 69 41 29  MulInt64(&iB,iA)
bef0: 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b   ) goto fp_math;
bf00: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
bf10: 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b  ase OP_Divide: {
bf20: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
bf30: 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d  =0 ) goto arithm
bf40: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
bf50: 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ull;.        if(
bf60: 20 69 41 3d 3d 2d 31 20 26 26 20 69 42 3d 3d 53   iA==-1 && iB==S
bf70: 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29 20  MALLEST_INT64 ) 
bf80: 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 0a 20 20  goto fp_math;.  
bf90: 20 20 20 20 20 20 69 42 20 2f 3d 20 69 41 3b 0a        iB /= iA;.
bfa0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
bfb0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66       }.      def
bfc0: 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20  ault: {.        
bfd0: 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f  if( iA==0 ) goto
bfe0: 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75   arithmetic_resu
bff0: 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20  lt_is_null;.    
c000: 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 29      if( iA==-1 )
c010: 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20 20   iA = 1;.       
c020: 20 69 42 20 25 3d 20 69 41 3b 0a 20 20 20 20 20   iB %= iA;.     
c030: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
c040: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74  }.    }.    pOut
c050: 2d 3e 75 2e 69 20 3d 20 69 42 3b 0a 20 20 20 20  ->u.i = iB;.    
c060: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
c070: 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20  Out, MEM_Int);. 
c080: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 62 49 6e 74   }else{.    bInt
c090: 69 6e 74 20 3d 20 30 3b 0a 66 70 5f 6d 61 74 68  int = 0;.fp_math
c0a0: 3a 0a 20 20 20 20 72 41 20 3d 20 73 71 6c 69 74  :.    rA = sqlit
c0b0: 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28  e3VdbeRealValue(
c0c0: 70 49 6e 31 29 3b 0a 20 20 20 20 72 42 20 3d 20  pIn1);.    rB = 
c0d0: 73 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56  sqlite3VdbeRealV
c0e0: 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 20 20  alue(pIn2);.    
c0f0: 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63  switch( pOp->opc
c100: 6f 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73  ode ){.      cas
c110: 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20  e OP_Add:       
c120: 20 20 72 42 20 2b 3d 20 72 41 3b 20 20 20 20 20    rB += rA;     
c130: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
c140: 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a  ase OP_Subtract:
c150: 20 20 20 20 72 42 20 2d 3d 20 72 41 3b 20 20 20      rB -= rA;   
c160: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
c170: 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c   case OP_Multipl
c180: 79 3a 20 20 20 20 72 42 20 2a 3d 20 72 41 3b 20  y:    rB *= rA; 
c190: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
c1a0: 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64     case OP_Divid
c1b0: 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  e: {.        /* 
c1c0: 28 64 6f 75 62 6c 65 29 30 20 49 6e 20 63 61 73  (double)0 In cas
c1d0: 65 20 6f 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  e of SQLITE_OMIT
c1e0: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 2e  _FLOATING_POINT.
c1f0: 2e 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66  .. */.        if
c200: 28 20 72 41 3d 3d 28 64 6f 75 62 6c 65 29 30 20  ( rA==(double)0 
c210: 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69  ) goto arithmeti
c220: 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c  c_result_is_null
c230: 3b 0a 20 20 20 20 20 20 20 20 72 42 20 2f 3d 20  ;.        rB /= 
c240: 72 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  rA;.        brea
c250: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  k;.      }.     
c260: 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20   default: {.    
c270: 20 20 20 20 69 41 20 3d 20 28 69 36 34 29 72 41      iA = (i64)rA
c280: 3b 0a 20 20 20 20 20 20 20 20 69 42 20 3d 20 28  ;.        iB = (
c290: 69 36 34 29 72 42 3b 0a 20 20 20 20 20 20 20 20  i64)rB;.        
c2a0: 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f  if( iA==0 ) goto
c2b0: 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75   arithmetic_resu
c2c0: 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20  lt_is_null;.    
c2d0: 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 29      if( iA==-1 )
c2e0: 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20 20   iA = 1;.       
c2f0: 20 72 42 20 3d 20 28 64 6f 75 62 6c 65 29 28 69   rB = (double)(i
c300: 42 20 25 20 69 41 29 3b 0a 20 20 20 20 20 20 20  B % iA);.       
c310: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
c320: 20 20 20 20 7d 0a 23 69 66 64 65 66 20 53 51 4c      }.#ifdef SQL
c330: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
c340: 47 5f 50 4f 49 4e 54 0a 20 20 20 20 70 4f 75 74  G_POINT.    pOut
c350: 2d 3e 75 2e 69 20 3d 20 72 42 3b 0a 20 20 20 20  ->u.i = rB;.    
c360: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
c370: 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 23  Out, MEM_Int);.#
c380: 65 6c 73 65 0a 20 20 20 20 69 66 28 20 73 71 6c  else.    if( sql
c390: 69 74 65 33 49 73 4e 61 4e 28 72 42 29 20 29 7b  ite3IsNaN(rB) ){
c3a0: 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 72 69 74  .      goto arit
c3b0: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
c3c0: 5f 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a 20 20 20  _null;.    }.   
c3d0: 20 70 4f 75 74 2d 3e 75 2e 72 20 3d 20 72 42 3b   pOut->u.r = rB;
c3e0: 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46  .    MemSetTypeF
c3f0: 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 52 65  lag(pOut, MEM_Re
c400: 61 6c 29 3b 0a 20 20 20 20 69 66 28 20 28 28 74  al);.    if( ((t
c410: 79 70 65 31 7c 74 79 70 65 32 29 26 4d 45 4d 5f  ype1|type2)&MEM_
c420: 52 65 61 6c 29 3d 3d 30 20 26 26 20 21 62 49 6e  Real)==0 && !bIn
c430: 74 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 73 71  tint ){.      sq
c440: 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67 65 72  lite3VdbeInteger
c450: 41 66 66 69 6e 69 74 79 28 70 4f 75 74 29 3b 0a  Affinity(pOut);.
c460: 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d      }.#endif.  }
c470: 0a 20 20 62 72 65 61 6b 3b 0a 0a 61 72 69 74 68  .  break;..arith
c480: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
c490: 6e 75 6c 6c 3a 0a 20 20 73 71 6c 69 74 65 33 56  null:.  sqlite3V
c4a0: 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f  dbeMemSetNull(pO
c4b0: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
c4c0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 6c  ./* Opcode: Coll
c4d0: 53 65 71 20 50 31 20 2a 20 2a 20 50 34 0a 2a 2a  Seq P1 * * P4.**
c4e0: 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
c4f0: 74 65 72 20 74 6f 20 61 20 43 6f 6c 6c 53 65 71  ter to a CollSeq
c500: 20 73 74 72 75 63 74 2e 20 49 66 20 74 68 65 20   struct. If the 
c510: 6e 65 78 74 20 63 61 6c 6c 20 74 6f 20 61 20 75  next call to a u
c520: 73 65 72 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20  ser function.** 
c530: 6f 72 20 61 67 67 72 65 67 61 74 65 20 63 61 6c  or aggregate cal
c540: 6c 73 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e  ls sqlite3GetFun
c550: 63 43 6f 6c 6c 53 65 71 28 29 2c 20 74 68 69 73  cCollSeq(), this
c560: 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
c570: 6e 63 65 20 77 69 6c 6c 0a 2a 2a 20 62 65 20 72  nce will.** be r
c580: 65 74 75 72 6e 65 64 2e 20 54 68 69 73 20 69 73  eturned. This is
c590: 20 75 73 65 64 20 62 79 20 74 68 65 20 62 75 69   used by the bui
c5a0: 6c 74 2d 69 6e 20 6d 69 6e 28 29 2c 20 6d 61 78  lt-in min(), max
c5b0: 28 29 20 61 6e 64 20 6e 75 6c 6c 69 66 28 29 0a  () and nullif().
c5c0: 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a  ** functions..**
c5d0: 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 74  .** If P1 is not
c5e0: 20 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74 20 69   zero, then it i
c5f0: 73 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61  s a register tha
c600: 74 20 61 20 73 75 62 73 65 71 75 65 6e 74 20 6d  t a subsequent m
c610: 69 6e 28 29 20 6f 72 0a 2a 2a 20 6d 61 78 28 29  in() or.** max()
c620: 20 61 67 67 72 65 67 61 74 65 20 77 69 6c 6c 20   aggregate will 
c630: 73 65 74 20 74 6f 20 31 20 69 66 20 74 68 65 20  set to 1 if the 
c640: 63 75 72 72 65 6e 74 20 72 6f 77 20 69 73 20 6e  current row is n
c650: 6f 74 20 74 68 65 20 6d 69 6e 69 6d 75 6d 20 6f  ot the minimum o
c660: 72 0a 2a 2a 20 6d 61 78 69 6d 75 6d 2e 20 20 54  r.** maximum.  T
c670: 68 65 20 50 31 20 72 65 67 69 73 74 65 72 20 69  he P1 register i
c680: 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f  s initialized to
c690: 20 30 20 62 79 20 74 68 69 73 20 69 6e 73 74 72   0 by this instr
c6a0: 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  uction..**.** Th
c6b0: 65 20 69 6e 74 65 72 66 61 63 65 20 75 73 65 64  e interface used
c6c0: 20 62 79 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e   by the implemen
c6d0: 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 61 66  tation of the af
c6e0: 6f 72 65 6d 65 6e 74 69 6f 6e 65 64 20 66 75 6e  orementioned fun
c6f0: 63 74 69 6f 6e 73 0a 2a 2a 20 74 6f 20 72 65 74  ctions.** to ret
c700: 72 69 65 76 65 20 74 68 65 20 63 6f 6c 6c 61 74  rieve the collat
c710: 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 73 65 74  ion sequence set
c720: 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20   by this opcode 
c730: 69 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65  is not available
c740: 0a 2a 2a 20 70 75 62 6c 69 63 6c 79 2e 20 20 4f  .** publicly.  O
c750: 6e 6c 79 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e  nly built-in fun
c760: 63 74 69 6f 6e 73 20 68 61 76 65 20 61 63 63 65  ctions have acce
c770: 73 73 20 74 6f 20 74 68 69 73 20 66 65 61 74 75  ss to this featu
c780: 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  re..*/.case OP_C
c790: 6f 6c 6c 53 65 71 3a 20 7b 0a 20 20 61 73 73 65  ollSeq: {.  asse
c7a0: 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
c7b0: 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20  =P4_COLLSEQ );. 
c7c0: 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a   if( pOp->p1 ){.
c7d0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
c7e0: 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d  emSetInt64(&aMem
c7f0: 5b 70 4f 70 2d 3e 70 31 5d 2c 20 30 29 3b 0a 20  [pOp->p1], 0);. 
c800: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
c810: 2a 20 4f 70 63 6f 64 65 3a 20 46 75 6e 63 74 69  * Opcode: Functi
c820: 6f 6e 30 20 50 31 20 50 32 20 50 33 20 50 34 20  on0 P1 P2 P3 P4 
c830: 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
c840: 72 5b 50 33 5d 3d 66 75 6e 63 28 72 5b 50 32 40  r[P3]=func(r[P2@
c850: 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b  P5]).**.** Invok
c860: 65 20 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f  e a user functio
c870: 6e 20 28 50 34 20 69 73 20 61 20 70 6f 69 6e 74  n (P4 is a point
c880: 65 72 20 74 6f 20 61 20 46 75 6e 63 44 65 66 20  er to a FuncDef 
c890: 6f 62 6a 65 63 74 20 74 68 61 74 0a 2a 2a 20 64  object that.** d
c8a0: 65 66 69 6e 65 73 20 74 68 65 20 66 75 6e 63 74  efines the funct
c8b0: 69 6f 6e 29 20 77 69 74 68 20 50 35 20 61 72 67  ion) with P5 arg
c8c0: 75 6d 65 6e 74 73 20 74 61 6b 65 6e 20 66 72 6f  uments taken fro
c8d0: 6d 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  m register P2 an
c8e0: 64 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e  d.** successors.
c8f0: 20 20 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20    The result of 
c900: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  the function is 
c910: 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
c920: 65 72 20 50 33 2e 0a 2a 2a 20 52 65 67 69 73 74  er P3..** Regist
c930: 65 72 20 50 33 20 6d 75 73 74 20 6e 6f 74 20 62  er P3 must not b
c940: 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 75 6e  e one of the fun
c950: 63 74 69 6f 6e 20 69 6e 70 75 74 73 2e 0a 2a 2a  ction inputs..**
c960: 0a 2a 2a 20 50 31 20 69 73 20 61 20 33 32 2d 62  .** P1 is a 32-b
c970: 69 74 20 62 69 74 6d 61 73 6b 20 69 6e 64 69 63  it bitmask indic
c980: 61 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72  ating whether or
c990: 20 6e 6f 74 20 65 61 63 68 20 61 72 67 75 6d 65   not each argume
c9a0: 6e 74 20 74 6f 20 74 68 65 20 0a 2a 2a 20 66 75  nt to the .** fu
c9b0: 6e 63 74 69 6f 6e 20 77 61 73 20 64 65 74 65 72  nction was deter
c9c0: 6d 69 6e 65 64 20 74 6f 20 62 65 20 63 6f 6e 73  mined to be cons
c9d0: 74 61 6e 74 20 61 74 20 63 6f 6d 70 69 6c 65 20  tant at compile 
c9e0: 74 69 6d 65 2e 20 49 66 20 74 68 65 20 66 69 72  time. If the fir
c9f0: 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 77  st.** argument w
ca00: 61 73 20 63 6f 6e 73 74 61 6e 74 20 74 68 65 6e  as constant then
ca10: 20 62 69 74 20 30 20 6f 66 20 50 31 20 69 73 20   bit 0 of P1 is 
ca20: 73 65 74 2e 20 54 68 69 73 20 69 73 20 75 73 65  set. This is use
ca30: 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 0a 2a  d to determine.*
ca40: 2a 20 77 68 65 74 68 65 72 20 6d 65 74 61 20 64  * whether meta d
ca50: 61 74 61 20 61 73 73 6f 63 69 61 74 65 64 20 77  ata associated w
ca60: 69 74 68 20 61 20 75 73 65 72 20 66 75 6e 63 74  ith a user funct
ca70: 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20 75 73 69  ion argument usi
ca80: 6e 67 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65  ng the.** sqlite
ca90: 33 5f 73 65 74 5f 61 75 78 64 61 74 61 28 29 20  3_set_auxdata() 
caa0: 41 50 49 20 6d 61 79 20 62 65 20 73 61 66 65 6c  API may be safel
cab0: 79 20 72 65 74 61 69 6e 65 64 20 75 6e 74 69 6c  y retained until
cac0: 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 76   the next.** inv
cad0: 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 69 73 20  ocation of this 
cae0: 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65  opcode..**.** Se
caf0: 65 20 61 6c 73 6f 3a 20 46 75 6e 63 74 69 6f 6e  e also: Function
cb00: 2c 20 41 67 67 53 74 65 70 2c 20 41 67 67 46 69  , AggStep, AggFi
cb10: 6e 61 6c 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  nal.*/./* Opcode
cb20: 3a 20 46 75 6e 63 74 69 6f 6e 20 50 31 20 50 32  : Function P1 P2
cb30: 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
cb40: 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 66 75 6e  opsis: r[P3]=fun
cb50: 63 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a  c(r[P2@P5]).**.*
cb60: 2a 20 49 6e 76 6f 6b 65 20 61 20 75 73 65 72 20  * Invoke a user 
cb70: 66 75 6e 63 74 69 6f 6e 20 28 50 34 20 69 73 20  function (P4 is 
cb80: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20  a pointer to an 
cb90: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
cba0: 6f 62 6a 65 63 74 20 74 68 61 74 0a 2a 2a 20 63  object that.** c
cbb0: 6f 6e 74 61 69 6e 73 20 61 20 70 6f 69 6e 74 65  ontains a pointe
cbc0: 72 20 74 6f 20 74 68 65 20 66 75 6e 63 74 69 6f  r to the functio
cbd0: 6e 20 74 6f 20 62 65 20 72 75 6e 29 20 77 69 74  n to be run) wit
cbe0: 68 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20 74  h P5 arguments t
cbf0: 61 6b 65 6e 0a 2a 2a 20 66 72 6f 6d 20 72 65 67  aken.** from reg
cc00: 69 73 74 65 72 20 50 32 20 61 6e 64 20 73 75 63  ister P2 and suc
cc10: 63 65 73 73 6f 72 73 2e 20 20 54 68 65 20 72 65  cessors.  The re
cc20: 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63  sult of the func
cc30: 74 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 0a 2a  tion is stored.*
cc40: 2a 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  * in register P3
cc50: 2e 20 20 52 65 67 69 73 74 65 72 20 50 33 20 6d  .  Register P3 m
cc60: 75 73 74 20 6e 6f 74 20 62 65 20 6f 6e 65 20 6f  ust not be one o
cc70: 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69  f the function i
cc80: 6e 70 75 74 73 2e 0a 2a 2a 0a 2a 2a 20 50 31 20  nputs..**.** P1 
cc90: 69 73 20 61 20 33 32 2d 62 69 74 20 62 69 74 6d  is a 32-bit bitm
cca0: 61 73 6b 20 69 6e 64 69 63 61 74 69 6e 67 20 77  ask indicating w
ccb0: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 65 61  hether or not ea
ccc0: 63 68 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  ch argument to t
ccd0: 68 65 20 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20  he .** function 
cce0: 77 61 73 20 64 65 74 65 72 6d 69 6e 65 64 20 74  was determined t
ccf0: 6f 20 62 65 20 63 6f 6e 73 74 61 6e 74 20 61 74  o be constant at
cd00: 20 63 6f 6d 70 69 6c 65 20 74 69 6d 65 2e 20 49   compile time. I
cd10: 66 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61  f the first.** a
cd20: 72 67 75 6d 65 6e 74 20 77 61 73 20 63 6f 6e 73  rgument was cons
cd30: 74 61 6e 74 20 74 68 65 6e 20 62 69 74 20 30 20  tant then bit 0 
cd40: 6f 66 20 50 31 20 69 73 20 73 65 74 2e 20 54 68  of P1 is set. Th
cd50: 69 73 20 69 73 20 75 73 65 64 20 74 6f 20 64 65  is is used to de
cd60: 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68  termine.** wheth
cd70: 65 72 20 6d 65 74 61 20 64 61 74 61 20 61 73 73  er meta data ass
cd80: 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20 75  ociated with a u
cd90: 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 61 72 67  ser function arg
cda0: 75 6d 65 6e 74 20 75 73 69 6e 67 20 74 68 65 0a  ument using the.
cdb0: 2a 2a 20 73 71 6c 69 74 65 33 5f 73 65 74 5f 61  ** sqlite3_set_a
cdc0: 75 78 64 61 74 61 28 29 20 41 50 49 20 6d 61 79  uxdata() API may
cdd0: 20 62 65 20 73 61 66 65 6c 79 20 72 65 74 61 69   be safely retai
cde0: 6e 65 64 20 75 6e 74 69 6c 20 74 68 65 20 6e 65  ned until the ne
cdf0: 78 74 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e  xt.** invocation
ce00: 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65 2e   of this opcode.
ce10: 0a 2a 2a 0a 2a 2a 20 53 51 4c 20 66 75 6e 63 74  .**.** SQL funct
ce20: 69 6f 6e 73 20 61 72 65 20 69 6e 69 74 69 61 6c  ions are initial
ce30: 6c 79 20 63 6f 64 65 64 20 61 73 20 4f 50 5f 46  ly coded as OP_F
ce40: 75 6e 63 74 69 6f 6e 30 20 77 69 74 68 20 50 34  unction0 with P4
ce50: 20 70 6f 69 6e 74 69 6e 67 0a 2a 2a 20 74 6f 20   pointing.** to 
ce60: 61 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74  a FuncDef object
ce70: 2e 20 20 42 75 74 20 6f 6e 20 66 69 72 73 74 20  .  But on first 
ce80: 65 76 61 6c 75 61 74 69 6f 6e 2c 20 74 68 65 20  evaluation, the 
ce90: 50 34 20 6f 70 65 72 61 6e 64 20 69 73 0a 2a 2a  P4 operand is.**
cea0: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63   automatically c
ceb0: 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e  onverted into an
cec0: 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
ced0: 20 6f 62 6a 65 63 74 20 61 6e 64 20 74 68 65 20   object and the 
cee0: 6f 70 65 72 61 74 69 6f 6e 0a 2a 2a 20 63 68 61  operation.** cha
cef0: 6e 67 65 64 20 74 6f 20 74 68 69 73 20 4f 50 5f  nged to this OP_
cf00: 46 75 6e 63 74 69 6f 6e 20 6f 70 63 6f 64 65 2e  Function opcode.
cf10: 20 20 49 6e 20 74 68 69 73 20 77 61 79 2c 20 74    In this way, t
cf20: 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  he initializatio
cf30: 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 73 71 6c 69  n of.** the sqli
cf40: 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f 62 6a 65  te3_context obje
cf50: 63 74 20 6f 63 63 75 72 73 20 6f 6e 6c 79 20 6f  ct occurs only o
cf60: 6e 63 65 2c 20 72 61 74 68 65 72 20 74 68 61 6e  nce, rather than
cf70: 20 6f 6e 63 65 20 66 6f 72 20 65 61 63 68 0a 2a   once for each.*
cf80: 2a 20 65 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20  * evaluation of 
cf90: 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a  the function..**
cfa0: 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 75  .** See also: Fu
cfb0: 6e 63 74 69 6f 6e 30 2c 20 41 67 67 53 74 65 70  nction0, AggStep
cfc0: 2c 20 41 67 67 46 69 6e 61 6c 0a 2a 2f 0a 63 61  , AggFinal.*/.ca
cfd0: 73 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 30 3a  se OP_Function0:
cfe0: 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 73 71   {.  int n;.  sq
cff0: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70  lite3_context *p
d000: 43 74 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  Ctx;..  assert( 
d010: 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
d020: 46 55 4e 43 44 45 46 20 29 3b 0a 20 20 6e 20 3d  FUNCDEF );.  n =
d030: 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 73 73 65   pOp->p5;.  asse
d040: 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26  rt( pOp->p3>0 &&
d050: 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d   pOp->p3<=(p->nM
d060: 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
d070: 72 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  r) );.  assert( 
d080: 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e 70 32  n==0 || (pOp->p2
d090: 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c  >0 && pOp->p2+n<
d0a0: 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
d0b0: 3e 6e 43 75 72 73 6f 72 29 2b 31 29 20 29 3b 0a  >nCursor)+1) );.
d0c0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
d0d0: 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f 70  3<pOp->p2 || pOp
d0e0: 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e 20  ->p3>=pOp->p2+n 
d0f0: 29 3b 0a 20 20 70 43 74 78 20 3d 20 73 71 6c 69  );.  pCtx = sqli
d100: 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 4e 4e  te3DbMallocRawNN
d110: 28 64 62 2c 20 73 69 7a 65 6f 66 28 2a 70 43 74  (db, sizeof(*pCt
d120: 78 29 20 2b 20 28 6e 2d 31 29 2a 73 69 7a 65 6f  x) + (n-1)*sizeo
d130: 66 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  f(sqlite3_value*
d140: 29 29 3b 0a 20 20 69 66 28 20 70 43 74 78 3d 3d  ));.  if( pCtx==
d150: 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
d160: 0a 20 20 70 43 74 78 2d 3e 70 4f 75 74 20 3d 20  .  pCtx->pOut = 
d170: 30 3b 0a 20 20 70 43 74 78 2d 3e 70 46 75 6e 63  0;.  pCtx->pFunc
d180: 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63   = pOp->p4.pFunc
d190: 3b 0a 20 20 70 43 74 78 2d 3e 69 4f 70 20 3d 20  ;.  pCtx->iOp = 
d1a0: 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29  (int)(pOp - aOp)
d1b0: 3b 0a 20 20 70 43 74 78 2d 3e 70 56 64 62 65 20  ;.  pCtx->pVdbe 
d1c0: 3d 20 70 3b 0a 20 20 70 43 74 78 2d 3e 61 72 67  = p;.  pCtx->arg
d1d0: 63 20 3d 20 6e 3b 0a 20 20 70 4f 70 2d 3e 70 34  c = n;.  pOp->p4
d1e0: 74 79 70 65 20 3d 20 50 34 5f 46 55 4e 43 43 54  type = P4_FUNCCT
d1f0: 58 3b 0a 20 20 70 4f 70 2d 3e 70 34 2e 70 43 74  X;.  pOp->p4.pCt
d200: 78 20 3d 20 70 43 74 78 3b 0a 20 20 70 4f 70 2d  x = pCtx;.  pOp-
d210: 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 46 75 6e  >opcode = OP_Fun
d220: 63 74 69 6f 6e 3b 0a 20 20 2f 2a 20 46 61 6c 6c  ction;.  /* Fall
d230: 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50   through into OP
d240: 5f 46 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 0a 63  _Function */.}.c
d250: 61 73 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 3a  ase OP_Function:
d260: 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73 71   {.  int i;.  sq
d270: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70  lite3_context *p
d280: 43 74 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  Ctx;..  assert( 
d290: 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
d2a0: 46 55 4e 43 43 54 58 20 29 3b 0a 20 20 70 43 74  FUNCCTX );.  pCt
d2b0: 78 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 43 74 78  x = pOp->p4.pCtx
d2c0: 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69 73 20  ;..  /* If this 
d2d0: 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6e 73 69  function is insi
d2e0: 64 65 20 6f 66 20 61 20 74 72 69 67 67 65 72 2c  de of a trigger,
d2f0: 20 74 68 65 20 72 65 67 69 73 74 65 72 20 61 72   the register ar
d300: 72 61 79 20 69 6e 20 61 4d 65 6d 5b 5d 0a 20 20  ray in aMem[].  
d310: 2a 2a 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20  ** might change 
d320: 66 72 6f 6d 20 6f 6e 65 20 65 76 61 6c 75 61 74  from one evaluat
d330: 69 6f 6e 20 74 6f 20 74 68 65 20 6e 65 78 74 2e  ion to the next.
d340: 20 20 54 68 65 20 6e 65 78 74 20 62 6c 6f 63 6b    The next block
d350: 20 6f 66 20 63 6f 64 65 0a 20 20 2a 2a 20 63 68   of code.  ** ch
d360: 65 63 6b 73 20 74 6f 20 73 65 65 20 69 66 20 74  ecks to see if t
d370: 68 65 20 72 65 67 69 73 74 65 72 20 61 72 72 61  he register arra
d380: 79 20 68 61 73 20 63 68 61 6e 67 65 64 2c 20 61  y has changed, a
d390: 6e 64 20 69 66 20 73 6f 20 69 74 0a 20 20 2a 2a  nd if so it.  **
d3a0: 20 72 65 69 6e 69 74 69 61 6c 69 7a 65 73 20 74   reinitializes t
d3b0: 68 65 20 72 65 6c 61 76 61 6e 74 20 70 61 72 74  he relavant part
d3c0: 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33  s of the sqlite3
d3d0: 5f 63 6f 6e 74 65 78 74 20 6f 62 6a 65 63 74 20  _context object 
d3e0: 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  */.  pOut = &aMe
d3f0: 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66  m[pOp->p3];.  if
d400: 28 20 70 43 74 78 2d 3e 70 4f 75 74 20 21 3d 20  ( pCtx->pOut != 
d410: 70 4f 75 74 20 29 7b 0a 20 20 20 20 70 43 74 78  pOut ){.    pCtx
d420: 2d 3e 70 4f 75 74 20 3d 20 70 4f 75 74 3b 0a 20  ->pOut = pOut;. 
d430: 20 20 20 66 6f 72 28 69 3d 70 43 74 78 2d 3e 61     for(i=pCtx->a
d440: 72 67 63 2d 31 3b 20 69 3e 3d 30 3b 20 69 2d 2d  rgc-1; i>=0; i--
d450: 29 20 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d 20  ) pCtx->argv[i] 
d460: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 2b  = &aMem[pOp->p2+
d470: 69 5d 3b 0a 20 20 7d 0a 0a 20 20 6d 65 6d 41 62  i];.  }..  memAb
d480: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
d490: 43 74 78 2d 3e 70 4f 75 74 29 3b 0a 23 69 66 64  Ctx->pOut);.#ifd
d4a0: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
d4b0: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 43 74    for(i=0; i<pCt
d4c0: 78 2d 3e 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20  x->argc; i++){. 
d4d0: 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
d4e0: 56 61 6c 69 64 28 70 43 74 78 2d 3e 61 72 67 76  Valid(pCtx->argv
d4f0: 5b 69 5d 29 20 29 3b 0a 20 20 20 20 52 45 47 49  [i]) );.    REGI
d500: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
d510: 70 32 2b 69 2c 20 70 43 74 78 2d 3e 61 72 67 76  p2+i, pCtx->argv
d520: 5b 69 5d 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  [i]);.  }.#endif
d530: 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
d540: 67 28 70 43 74 78 2d 3e 70 4f 75 74 2c 20 4d 45  g(pCtx->pOut, ME
d550: 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 70 43 74 78 2d  M_Null);.  pCtx-
d560: 3e 66 45 72 72 6f 72 4f 72 41 75 78 20 3d 20 30  >fErrorOrAux = 0
d570: 3b 0a 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69  ;.  db->lastRowi
d580: 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20  d = lastRowid;. 
d590: 20 28 2a 70 43 74 78 2d 3e 70 46 75 6e 63 2d 3e   (*pCtx->pFunc->
d5a0: 78 53 46 75 6e 63 29 28 70 43 74 78 2c 20 70 43  xSFunc)(pCtx, pC
d5b0: 74 78 2d 3e 61 72 67 63 2c 20 70 43 74 78 2d 3e  tx->argc, pCtx->
d5c0: 61 72 67 76 29 3b 2f 2a 20 49 4d 50 3a 20 52 2d  argv);/* IMP: R-
d5d0: 32 34 35 30 35 2d 32 33 32 33 30 20 2a 2f 0a 20  24505-23230 */. 
d5e0: 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 64 62 2d   lastRowid = db-
d5f0: 3e 6c 61 73 74 52 6f 77 69 64 3b 20 20 2f 2a 20  >lastRowid;  /* 
d600: 52 65 6d 65 6d 62 65 72 20 72 6f 77 69 64 20 63  Remember rowid c
d610: 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20 78  hanges made by x
d620: 53 46 75 6e 63 20 2a 2f 0a 0a 20 20 2f 2a 20 49  SFunc */..  /* I
d630: 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 72  f the function r
d640: 65 74 75 72 6e 65 64 20 61 6e 20 65 72 72 6f 72  eturned an error
d650: 2c 20 74 68 72 6f 77 20 61 6e 20 65 78 63 65 70  , throw an excep
d660: 74 69 6f 6e 20 2a 2f 0a 20 20 69 66 28 20 70 43  tion */.  if( pC
d670: 74 78 2d 3e 66 45 72 72 6f 72 4f 72 41 75 78 20  tx->fErrorOrAux 
d680: 29 7b 0a 20 20 20 20 69 66 28 20 70 43 74 78 2d  ){.    if( pCtx-
d690: 3e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20  >isError ){.    
d6a0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72    sqlite3VdbeErr
d6b0: 6f 72 28 70 2c 20 22 25 73 22 2c 20 73 71 6c 69  or(p, "%s", sqli
d6c0: 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 70  te3_value_text(p
d6d0: 43 74 78 2d 3e 70 4f 75 74 29 29 3b 0a 20 20 20  Ctx->pOut));.   
d6e0: 20 20 20 72 63 20 3d 20 70 43 74 78 2d 3e 69 73     rc = pCtx->is
d6f0: 45 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20  Error;.    }.   
d700: 20 73 71 6c 69 74 65 33 56 64 62 65 44 65 6c 65   sqlite3VdbeDele
d710: 74 65 41 75 78 44 61 74 61 28 64 62 2c 20 26 70  teAuxData(db, &p
d720: 2d 3e 70 41 75 78 44 61 74 61 2c 20 70 43 74 78  ->pAuxData, pCtx
d730: 2d 3e 69 4f 70 2c 20 70 4f 70 2d 3e 70 31 29 3b  ->iOp, pOp->p1);
d740: 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f  .    if( rc ) go
d750: 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
d760: 65 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  error;.  }..  /*
d770: 20 43 6f 70 79 20 74 68 65 20 72 65 73 75 6c 74   Copy the result
d780: 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
d790: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
d7a0: 33 20 2a 2f 0a 20 20 69 66 28 20 70 4f 75 74 2d  3 */.  if( pOut-
d7b0: 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74  >flags & (MEM_St
d7c0: 72 7c 4d 45 4d 5f 42 6c 6f 62 29 20 29 7b 0a 20  r|MEM_Blob) ){. 
d7d0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
d7e0: 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 43 74  angeEncoding(pCt
d7f0: 78 2d 3e 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e  x->pOut, encodin
d800: 67 29 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69  g);.    if( sqli
d810: 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67  te3VdbeMemTooBig
d820: 28 70 43 74 78 2d 3e 70 4f 75 74 29 20 29 20 67  (pCtx->pOut) ) g
d830: 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d  oto too_big;.  }
d840: 0a 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ..  REGISTER_TRA
d850: 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 43 74 78  CE(pOp->p3, pCtx
d860: 2d 3e 70 4f 75 74 29 3b 0a 20 20 55 50 44 41 54  ->pOut);.  UPDAT
d870: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
d880: 43 74 78 2d 3e 70 4f 75 74 29 3b 0a 20 20 62 72  Ctx->pOut);.  br
d890: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
d8a0: 65 3a 20 42 69 74 41 6e 64 20 50 31 20 50 32 20  e: BitAnd P1 P2 
d8b0: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
d8c0: 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 26  is: r[P3]=r[P1]&
d8d0: 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65  r[P2].**.** Take
d8e0: 20 74 68 65 20 62 69 74 2d 77 69 73 65 20 41 4e   the bit-wise AN
d8f0: 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20  D of the values 
d900: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61  in register P1 a
d910: 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f  nd P2 and.** sto
d920: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
d930: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
d940: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
d950: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
d960: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
d970: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 4f  ./* Opcode: BitO
d980: 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  r P1 P2 P3 * *.*
d990: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
d9a0: 5d 3d 72 5b 50 31 5d 7c 72 5b 50 32 5d 0a 2a 2a  ]=r[P1]|r[P2].**
d9b0: 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 62 69 74  .** Take the bit
d9c0: 2d 77 69 73 65 20 4f 52 20 6f 66 20 74 68 65 20  -wise OR of the 
d9d0: 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74  values in regist
d9e0: 65 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64  er P1 and P2 and
d9f0: 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65  .** store the re
da00: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
da10: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
da20: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
da30: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
da40: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
da50: 65 3a 20 53 68 69 66 74 4c 65 66 74 20 50 31 20  e: ShiftLeft P1 
da60: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
da70: 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50  opsis: r[P3]=r[P
da80: 32 5d 3c 3c 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  2]<<r[P1].**.** 
da90: 53 68 69 66 74 20 74 68 65 20 69 6e 74 65 67 65  Shift the intege
daa0: 72 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  r value in regis
dab0: 74 65 72 20 50 32 20 74 6f 20 74 68 65 20 6c 65  ter P2 to the le
dac0: 66 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d  ft by the.** num
dad0: 62 65 72 20 6f 66 20 62 69 74 73 20 73 70 65 63  ber of bits spec
dae0: 69 66 69 65 64 20 62 79 20 74 68 65 20 69 6e 74  ified by the int
daf0: 65 67 65 72 20 69 6e 20 72 65 67 69 73 74 65 72  eger in register
db00: 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68   P1..** Store th
db10: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
db20: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
db30: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
db40: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
db50: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
db60: 70 63 6f 64 65 3a 20 53 68 69 66 74 52 69 67 68  pcode: ShiftRigh
db70: 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
db80: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
db90: 5d 3d 72 5b 50 32 5d 3e 3e 72 5b 50 31 5d 0a 2a  ]=r[P2]>>r[P1].*
dba0: 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20 69  *.** Shift the i
dbb0: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20  nteger value in 
dbc0: 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20 74  register P2 to t
dbd0: 68 65 20 72 69 67 68 74 20 62 79 20 74 68 65 0a  he right by the.
dbe0: 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74  ** number of bit
dbf0: 73 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74  s specified by t
dc00: 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65  he integer in re
dc10: 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74  gister P1..** St
dc20: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
dc30: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
dc40: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
dc50: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
dc60: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
dc70: 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 41 6e 64  /.case OP_BitAnd
dc80: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
dc90: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
dca0: 42 49 54 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32  BITAND, in1, in2
dcb0: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
dcc0: 50 5f 42 69 74 4f 72 3a 20 20 20 20 20 20 20 20  P_BitOr:        
dcd0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
dce0: 65 20 61 73 20 54 4b 5f 42 49 54 4f 52 2c 20 69  e as TK_BITOR, i
dcf0: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
dd00: 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74 4c 65  .case OP_ShiftLe
dd10: 66 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  ft:             
dd20: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c   /* same as TK_L
dd30: 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c  SHIFT, in1, in2,
dd40: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
dd50: 5f 53 68 69 66 74 52 69 67 68 74 3a 20 7b 20 20  _ShiftRight: {  
dd60: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
dd70: 20 61 73 20 54 4b 5f 52 53 48 49 46 54 2c 20 69   as TK_RSHIFT, i
dd80: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
dd90: 0a 20 20 69 36 34 20 69 41 3b 0a 20 20 75 36 34  .  i64 iA;.  u64
dda0: 20 75 41 3b 0a 20 20 69 36 34 20 69 42 3b 0a 20   uA;.  i64 iB;. 
ddb0: 20 75 38 20 6f 70 3b 0a 0a 20 20 70 49 6e 31 20   u8 op;..  pIn1 
ddc0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
ddd0: 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
dde0: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75  [pOp->p2];.  pOu
ddf0: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
de00: 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  3];.  if( (pIn1-
de10: 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66  >flags | pIn2->f
de20: 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c  lags) & MEM_Null
de30: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
de40: 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f  dbeMemSetNull(pO
de50: 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  ut);.    break;.
de60: 20 20 7d 0a 20 20 69 41 20 3d 20 73 71 6c 69 74    }.  iA = sqlit
de70: 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
de80: 49 6e 32 29 3b 0a 20 20 69 42 20 3d 20 73 71 6c  In2);.  iB = sql
de90: 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
dea0: 28 70 49 6e 31 29 3b 0a 20 20 6f 70 20 3d 20 70  (pIn1);.  op = p
deb0: 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 69 66  Op->opcode;.  if
dec0: 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 41 6e 64 20  ( op==OP_BitAnd 
ded0: 29 7b 0a 20 20 20 20 69 41 20 26 3d 20 69 42 3b  ){.    iA &= iB;
dee0: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 6f 70 3d  .  }else if( op=
def0: 3d 4f 50 5f 42 69 74 4f 72 20 29 7b 0a 20 20 20  =OP_BitOr ){.   
df00: 20 69 41 20 7c 3d 20 69 42 3b 0a 20 20 7d 65 6c   iA |= iB;.  }el
df10: 73 65 20 69 66 28 20 69 42 21 3d 30 20 29 7b 0a  se if( iB!=0 ){.
df20: 20 20 20 20 61 73 73 65 72 74 28 20 6f 70 3d 3d      assert( op==
df30: 4f 50 5f 53 68 69 66 74 52 69 67 68 74 20 7c 7c  OP_ShiftRight ||
df40: 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66   op==OP_ShiftLef
df50: 74 20 29 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20  t );..    /* If 
df60: 73 68 69 66 74 69 6e 67 20 62 79 20 61 20 6e 65  shifting by a ne
df70: 67 61 74 69 76 65 20 61 6d 6f 75 6e 74 2c 20 73  gative amount, s
df80: 68 69 66 74 20 69 6e 20 74 68 65 20 6f 74 68 65  hift in the othe
df90: 72 20 64 69 72 65 63 74 69 6f 6e 20 2a 2f 0a 20  r direction */. 
dfa0: 20 20 20 69 66 28 20 69 42 3c 30 20 29 7b 0a 20     if( iB<0 ){. 
dfb0: 20 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f       assert( OP_
dfc0: 53 68 69 66 74 52 69 67 68 74 3d 3d 4f 50 5f 53  ShiftRight==OP_S
dfd0: 68 69 66 74 4c 65 66 74 2b 31 20 29 3b 0a 20 20  hiftLeft+1 );.  
dfe0: 20 20 20 20 6f 70 20 3d 20 32 2a 4f 50 5f 53 68      op = 2*OP_Sh
dff0: 69 66 74 4c 65 66 74 20 2b 20 31 20 2d 20 6f 70  iftLeft + 1 - op
e000: 3b 0a 20 20 20 20 20 20 69 42 20 3d 20 69 42 3e  ;.      iB = iB>
e010: 28 2d 36 34 29 20 3f 20 2d 69 42 20 3a 20 36 34  (-64) ? -iB : 64
e020: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28  ;.    }..    if(
e030: 20 69 42 3e 3d 36 34 20 29 7b 0a 20 20 20 20 20   iB>=64 ){.     
e040: 20 69 41 20 3d 20 28 69 41 3e 3d 30 20 7c 7c 20   iA = (iA>=0 || 
e050: 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74  op==OP_ShiftLeft
e060: 29 20 3f 20 30 20 3a 20 2d 31 3b 0a 20 20 20 20  ) ? 0 : -1;.    
e070: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6d 65 6d  }else{.      mem
e080: 63 70 79 28 26 75 41 2c 20 26 69 41 2c 20 73 69  cpy(&uA, &iA, si
e090: 7a 65 6f 66 28 75 41 29 29 3b 0a 20 20 20 20 20  zeof(uA));.     
e0a0: 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 53 68 69 66   if( op==OP_Shif
e0b0: 74 4c 65 66 74 20 29 7b 0a 20 20 20 20 20 20 20  tLeft ){.       
e0c0: 20 75 41 20 3c 3c 3d 20 69 42 3b 0a 20 20 20 20   uA <<= iB;.    
e0d0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
e0e0: 20 75 41 20 3e 3e 3d 20 69 42 3b 0a 20 20 20 20   uA >>= iB;.    
e0f0: 20 20 20 20 2f 2a 20 53 69 67 6e 2d 65 78 74 65      /* Sign-exte
e100: 6e 64 20 6f 6e 20 61 20 72 69 67 68 74 20 73 68  nd on a right sh
e110: 69 66 74 20 6f 66 20 61 20 6e 65 67 61 74 69 76  ift of a negativ
e120: 65 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20  e number */.    
e130: 20 20 20 20 69 66 28 20 69 41 3c 30 20 29 20 75      if( iA<0 ) u
e140: 41 20 7c 3d 20 28 28 28 28 75 36 34 29 30 78 66  A |= ((((u64)0xf
e150: 66 66 66 66 66 66 66 29 3c 3c 33 32 29 7c 30 78  fffffff)<<32)|0x
e160: 66 66 66 66 66 66 66 66 29 20 3c 3c 20 28 36 34  ffffffff) << (64
e170: 2d 69 42 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  -iB);.      }.  
e180: 20 20 20 20 6d 65 6d 63 70 79 28 26 69 41 2c 20      memcpy(&iA, 
e190: 26 75 41 2c 20 73 69 7a 65 6f 66 28 69 41 29 29  &uA, sizeof(iA))
e1a0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 4f  ;.    }.  }.  pO
e1b0: 75 74 2d 3e 75 2e 69 20 3d 20 69 41 3b 0a 20 20  ut->u.i = iA;.  
e1c0: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
e1d0: 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20  Out, MEM_Int);. 
e1e0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
e1f0: 63 6f 64 65 3a 20 41 64 64 49 6d 6d 20 20 50 31  code: AddImm  P1
e200: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
e210: 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d 72 5b 50  opsis: r[P1]=r[P
e220: 31 5d 2b 50 32 0a 2a 2a 20 0a 2a 2a 20 41 64 64  1]+P2.** .** Add
e230: 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 50 32   the constant P2
e240: 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e   to the value in
e250: 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
e260: 20 54 68 65 20 72 65 73 75 6c 74 20 69 73 20 61   The result is a
e270: 6c 77 61 79 73 20 61 6e 20 69 6e 74 65 67 65 72  lways an integer
e280: 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 66 6f 72 63 65  ..**.** To force
e290: 20 61 6e 79 20 72 65 67 69 73 74 65 72 20 74 6f   any register to
e2a0: 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2c 20   be an integer, 
e2b0: 6a 75 73 74 20 61 64 64 20 30 2e 0a 2a 2f 0a 63  just add 0..*/.c
e2c0: 61 73 65 20 4f 50 5f 41 64 64 49 6d 6d 3a 20 7b  ase OP_AddImm: {
e2d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
e2e0: 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
e2f0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
e300: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
e310: 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 73 71  e(p, pIn1);.  sq
e320: 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
e330: 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20  gerify(pIn1);.  
e340: 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70  pIn1->u.i += pOp
e350: 2d 3e 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ->p2;.  break;.}
e360: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 73  ../* Opcode: Mus
e370: 74 42 65 49 6e 74 20 50 31 20 50 32 20 2a 20 2a  tBeInt P1 P2 * *
e380: 20 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f 72 63 65 20   *.** .** Force 
e390: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
e3a0: 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 61  ister P1 to be a
e3b0: 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66 20 74  n integer.  If t
e3c0: 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50  he value.** in P
e3d0: 31 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65  1 is not an inte
e3e0: 67 65 72 20 61 6e 64 20 63 61 6e 6e 6f 74 20 62  ger and cannot b
e3f0: 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f  e converted into
e400: 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 77   an integer.** w
e410: 69 74 68 6f 75 74 20 64 61 74 61 20 6c 6f 73 73  ithout data loss
e420: 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65  , then jump imme
e430: 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2c 20 6f  diately to P2, o
e440: 72 20 69 66 20 50 32 3d 3d 30 0a 2a 2a 20 72 61  r if P2==0.** ra
e450: 69 73 65 20 61 6e 20 53 51 4c 49 54 45 5f 4d 49  ise an SQLITE_MI
e460: 53 4d 41 54 43 48 20 65 78 63 65 70 74 69 6f 6e  SMATCH exception
e470: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 73  ..*/.case OP_Mus
e480: 74 42 65 49 6e 74 3a 20 7b 20 20 20 20 20 20 20  tBeInt: {       
e490: 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
e4a0: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
e4b0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
e4c0: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
e4d0: 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29   & MEM_Int)==0 )
e4e0: 7b 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e  {.    applyAffin
e4f0: 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45  ity(pIn1, SQLITE
e500: 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20 65 6e  _AFF_NUMERIC, en
e510: 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 56 64 62  coding);.    Vdb
e520: 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 28 70 49  eBranchTaken((pI
e530: 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e  n1->flags&MEM_In
e540: 74 29 3d 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69  t)==0, 2);.    i
e550: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
e560: 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b  & MEM_Int)==0 ){
e570: 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  .      if( pOp->
e580: 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  p2==0 ){.       
e590: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53   rc = SQLITE_MIS
e5a0: 4d 41 54 43 48 3b 0a 20 20 20 20 20 20 20 20 67  MATCH;.        g
e5b0: 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
e5c0: 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 65  _error;.      }e
e5d0: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 67 6f 74  lse{.        got
e5e0: 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
e5f0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
e600: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
e610: 28 70 49 6e 31 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pIn1, MEM_Int);
e620: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66  .  break;.}..#if
e630: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
e640: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
e650: 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c 41  /* Opcode: RealA
e660: 66 66 69 6e 69 74 79 20 50 31 20 2a 20 2a 20 2a  ffinity P1 * * *
e670: 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 72 65 67 69   *.**.** If regi
e680: 73 74 65 72 20 50 31 20 68 6f 6c 64 73 20 61 6e  ster P1 holds an
e690: 20 69 6e 74 65 67 65 72 20 63 6f 6e 76 65 72 74   integer convert
e6a0: 20 69 74 20 74 6f 20 61 20 72 65 61 6c 20 76 61   it to a real va
e6b0: 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  lue..**.** This 
e6c0: 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 77  opcode is used w
e6d0: 68 65 6e 20 65 78 74 72 61 63 74 69 6e 67 20 69  hen extracting i
e6e0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20  nformation from 
e6f0: 61 20 63 6f 6c 75 6d 6e 20 74 68 61 74 0a 2a 2a  a column that.**
e700: 20 68 61 73 20 52 45 41 4c 20 61 66 66 69 6e 69   has REAL affini
e710: 74 79 2e 20 20 53 75 63 68 20 63 6f 6c 75 6d 6e  ty.  Such column
e720: 20 76 61 6c 75 65 73 20 6d 61 79 20 73 74 69 6c   values may stil
e730: 6c 20 62 65 20 73 74 6f 72 65 64 20 61 73 0a 2a  l be stored as.*
e740: 2a 20 69 6e 74 65 67 65 72 73 2c 20 66 6f 72 20  * integers, for 
e750: 73 70 61 63 65 20 65 66 66 69 63 69 65 6e 63 79  space efficiency
e760: 2c 20 62 75 74 20 61 66 74 65 72 20 65 78 74 72  , but after extr
e770: 61 63 74 69 6f 6e 20 77 65 20 77 61 6e 74 20 74  action we want t
e780: 68 65 6d 0a 2a 2a 20 74 6f 20 68 61 76 65 20 6f  hem.** to have o
e790: 6e 6c 79 20 61 20 72 65 61 6c 20 76 61 6c 75 65  nly a real value
e7a0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61  ..*/.case OP_Rea
e7b0: 6c 41 66 66 69 6e 69 74 79 3a 20 7b 20 20 20 20  lAffinity: {    
e7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
e7d0: 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
e7e0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
e7f0: 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61  .  if( pIn1->fla
e800: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a  gs & MEM_Int ){.
e810: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
e820: 65 6d 52 65 61 6c 69 66 79 28 70 49 6e 31 29 3b  emRealify(pIn1);
e830: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
e840: 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
e850: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54  SQLITE_OMIT_CAST
e860: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 61 73 74  ./* Opcode: Cast
e870: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
e880: 53 79 6e 6f 70 73 69 73 3a 20 61 66 66 69 6e 69  Synopsis: affini
e890: 74 79 28 72 5b 50 31 5d 29 0a 2a 2a 0a 2a 2a 20  ty(r[P1]).**.** 
e8a0: 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20  Force the value 
e8b0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
e8c0: 6f 20 62 65 20 74 68 65 20 74 79 70 65 20 64 65  o be the type de
e8d0: 66 69 6e 65 64 20 62 79 20 50 32 2e 0a 2a 2a 20  fined by P2..** 
e8e0: 0a 2a 2a 20 3c 75 6c 3e 0a 2a 2a 20 3c 6c 69 20  .** <ul>.** <li 
e8f0: 76 61 6c 75 65 3d 22 39 37 22 3e 20 54 45 58 54  value="97"> TEXT
e900: 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22 39  .** <li value="9
e910: 38 22 3e 20 42 4c 4f 42 0a 2a 2a 20 3c 6c 69 20  8"> BLOB.** <li 
e920: 76 61 6c 75 65 3d 22 39 39 22 3e 20 4e 55 4d 45  value="99"> NUME
e930: 52 49 43 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65  RIC.** <li value
e940: 3d 22 31 30 30 22 3e 20 49 4e 54 45 47 45 52 0a  ="100"> INTEGER.
e950: 2a 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22 31 30  ** <li value="10
e960: 31 22 3e 20 52 45 41 4c 0a 2a 2a 20 3c 2f 75 6c  1"> REAL.** </ul
e970: 3e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76  >.**.** A NULL v
e980: 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e  alue is not chan
e990: 67 65 64 20 62 79 20 74 68 69 73 20 72 6f 75 74  ged by this rout
e9a0: 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73  ine.  It remains
e9b0: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
e9c0: 50 5f 43 61 73 74 3a 20 7b 20 20 20 20 20 20 20  P_Cast: {       
e9d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
e9e0: 31 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  1 */.  assert( p
e9f0: 4f 70 2d 3e 70 32 3e 3d 53 51 4c 49 54 45 5f 41  Op->p2>=SQLITE_A
ea00: 46 46 5f 42 4c 4f 42 20 26 26 20 70 4f 70 2d 3e  FF_BLOB && pOp->
ea10: 70 32 3c 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52  p2<=SQLITE_AFF_R
ea20: 45 41 4c 20 29 3b 0a 20 20 74 65 73 74 63 61 73  EAL );.  testcas
ea30: 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49  e( pOp->p2==SQLI
ea40: 54 45 5f 41 46 46 5f 54 45 58 54 20 29 3b 0a 20  TE_AFF_TEXT );. 
ea50: 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e   testcase( pOp->
ea60: 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 42  p2==SQLITE_AFF_B
ea70: 4c 4f 42 20 29 3b 0a 20 20 74 65 73 74 63 61 73  LOB );.  testcas
ea80: 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49  e( pOp->p2==SQLI
ea90: 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 29  TE_AFF_NUMERIC )
eaa0: 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f  ;.  testcase( pO
eab0: 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46  p->p2==SQLITE_AF
eac0: 46 5f 49 4e 54 45 47 45 52 20 29 3b 0a 20 20 74  F_INTEGER );.  t
ead0: 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32  estcase( pOp->p2
eae0: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41  ==SQLITE_AFF_REA
eaf0: 4c 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  L );.  pIn1 = &a
eb00: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
eb10: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
eb20: 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 72 63 20  (p, pIn1);.  rc 
eb30: 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e  = ExpandBlob(pIn
eb40: 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  1);.  sqlite3Vdb
eb50: 65 4d 65 6d 43 61 73 74 28 70 49 6e 31 2c 20 70  eMemCast(pIn1, p
eb60: 4f 70 2d 3e 70 32 2c 20 65 6e 63 6f 64 69 6e 67  Op->p2, encoding
eb70: 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
eb80: 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a  BLOBSIZE(pIn1);.
eb90: 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
eba0: 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
ebb0: 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  or;.  break;.}.#
ebc0: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
ebd0: 4f 4d 49 54 5f 43 41 53 54 20 2a 2f 0a 0a 2f 2a  OMIT_CAST */../*
ebe0: 20 4f 70 63 6f 64 65 3a 20 45 71 20 50 31 20 50   Opcode: Eq P1 P
ebf0: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
ec00: 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b 50 33 5d  nopsis: IF r[P3]
ec10: 3d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f  ==r[P1].**.** Co
ec20: 6d 70 61 72 65 20 74 68 65 20 76 61 6c 75 65 73  mpare the values
ec30: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
ec40: 61 6e 64 20 50 33 2e 20 20 49 66 20 72 65 67 28  and P3.  If reg(
ec50: 50 33 29 3d 3d 72 65 67 28 50 31 29 20 74 68 65  P3)==reg(P1) the
ec60: 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 61 64 64  n.** jump to add
ec70: 72 65 73 73 20 50 32 2e 20 20 4f 72 20 69 66 20  ress P2.  Or if 
ec80: 74 68 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45  the SQLITE_STORE
ec90: 50 32 20 66 6c 61 67 20 69 73 20 73 65 74 20 69  P2 flag is set i
eca0: 6e 20 50 35 2c 20 74 68 65 6e 0a 2a 2a 20 73 74  n P5, then.** st
ecb0: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 6f  ore the result o
ecc0: 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 6e 20  f comparison in 
ecd0: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
ece0: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46  ** The SQLITE_AF
ecf0: 46 5f 4d 41 53 4b 20 70 6f 72 74 69 6f 6e 20 6f  F_MASK portion o
ed00: 66 20 50 35 20 6d 75 73 74 20 62 65 20 61 6e 20  f P5 must be an 
ed10: 61 66 66 69 6e 69 74 79 20 63 68 61 72 61 63 74  affinity charact
ed20: 65 72 20 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f 41  er -.** SQLITE_A
ed30: 46 46 5f 54 45 58 54 2c 20 53 51 4c 49 54 45 5f  FF_TEXT, SQLITE_
ed40: 41 46 46 5f 49 4e 54 45 47 45 52 2c 20 61 6e 64  AFF_INTEGER, and
ed50: 20 73 6f 20 66 6f 72 74 68 2e 20 41 6e 20 61 74   so forth. An at
ed60: 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 0a 2a  tempt is made .*
ed70: 2a 20 74 6f 20 63 6f 65 72 63 65 20 62 6f 74 68  * to coerce both
ed80: 20 69 6e 70 75 74 73 20 61 63 63 6f 72 64 69 6e   inputs accordin
ed90: 67 20 74 6f 20 74 68 69 73 20 61 66 66 69 6e 69  g to this affini
eda0: 74 79 20 62 65 66 6f 72 65 20 74 68 65 0a 2a 2a  ty before the.**
edb0: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 6d   comparison is m
edc0: 61 64 65 2e 20 49 66 20 74 68 65 20 53 51 4c 49  ade. If the SQLI
edd0: 54 45 5f 41 46 46 5f 4d 41 53 4b 20 69 73 20 30  TE_AFF_MASK is 0
ede0: 78 30 30 2c 20 74 68 65 6e 20 6e 75 6d 65 72 69  x00, then numeri
edf0: 63 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 69 73  c.** affinity is
ee00: 20 75 73 65 64 2e 20 4e 6f 74 65 20 74 68 61 74   used. Note that
ee10: 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 63 6f   the affinity co
ee20: 6e 76 65 72 73 69 6f 6e 73 20 61 72 65 20 73 74  nversions are st
ee30: 6f 72 65 64 0a 2a 2a 20 62 61 63 6b 20 69 6e 74  ored.** back int
ee40: 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69  o the input regi
ee50: 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e  sters P1 and P3.
ee60: 20 20 53 6f 20 74 68 69 73 20 6f 70 63 6f 64 65    So this opcode
ee70: 20 63 61 6e 20 63 61 75 73 65 0a 2a 2a 20 70 65   can cause.** pe
ee80: 72 73 69 73 74 65 6e 74 20 63 68 61 6e 67 65 73  rsistent changes
ee90: 20 74 6f 20 72 65 67 69 73 74 65 72 73 20 50 31   to registers P1
eea0: 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f   and P3..**.** O
eeb0: 6e 63 65 20 61 6e 79 20 63 6f 6e 76 65 72 73 69  nce any conversi
eec0: 6f 6e 73 20 68 61 76 65 20 74 61 6b 65 6e 20 70  ons have taken p
eed0: 6c 61 63 65 2c 20 61 6e 64 20 6e 65 69 74 68 65  lace, and neithe
eee0: 72 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c  r value is NULL,
eef0: 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20   .** the values 
ef00: 61 72 65 20 63 6f 6d 70 61 72 65 64 2e 20 49 66  are compared. If
ef10: 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65   both values are
ef20: 20 62 6c 6f 62 73 20 74 68 65 6e 20 6d 65 6d 63   blobs then memc
ef30: 6d 70 28 29 20 69 73 0a 2a 2a 20 75 73 65 64 20  mp() is.** used 
ef40: 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  to determine the
ef50: 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20   results of the 
ef60: 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20  comparison.  If 
ef70: 62 6f 74 68 20 76 61 6c 75 65 73 0a 2a 2a 20 61  both values.** a
ef80: 72 65 20 74 65 78 74 2c 20 74 68 65 6e 20 74 68  re text, then th
ef90: 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 63 6f  e appropriate co
efa0: 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
efb0: 20 73 70 65 63 69 66 69 65 64 20 69 6e 0a 2a 2a   specified in.**
efc0: 20 50 34 20 69 73 20 75 73 65 64 20 74 6f 20 64   P4 is used to d
efd0: 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  o the comparison
efe0: 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20  .  If P4 is not 
eff0: 73 70 65 63 69 66 69 65 64 20 74 68 65 6e 0a 2a  specified then.*
f000: 2a 20 6d 65 6d 63 6d 70 28 29 20 69 73 20 75 73  * memcmp() is us
f010: 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 20 74 65  ed to compare te
f020: 78 74 20 73 74 72 69 6e 67 2e 20 20 49 66 20 62  xt string.  If b
f030: 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65 0a 2a  oth values are.*
f040: 2a 20 6e 75 6d 65 72 69 63 2c 20 74 68 65 6e 20  * numeric, then 
f050: 61 20 6e 75 6d 65 72 69 63 20 63 6f 6d 70 61 72  a numeric compar
f060: 69 73 6f 6e 20 69 73 20 75 73 65 64 2e 20 49 66  ison is used. If
f070: 20 74 68 65 20 74 77 6f 20 76 61 6c 75 65 73 0a   the two values.
f080: 2a 2a 20 61 72 65 20 6f 66 20 64 69 66 66 65 72  ** are of differ
f090: 65 6e 74 20 74 79 70 65 73 2c 20 74 68 65 6e 20  ent types, then 
f0a0: 6e 75 6d 62 65 72 73 20 61 72 65 20 63 6f 6e 73  numbers are cons
f0b0: 69 64 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e  idered less than
f0c0: 0a 2a 2a 20 73 74 72 69 6e 67 73 20 61 6e 64 20  .** strings and 
f0d0: 73 74 72 69 6e 67 73 20 61 72 65 20 63 6f 6e 73  strings are cons
f0e0: 69 64 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e  idered less than
f0f0: 20 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20 49 66   blobs..**.** If
f100: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69   SQLITE_NULLEQ i
f110: 73 20 73 65 74 20 69 6e 20 50 35 20 74 68 65 6e  s set in P5 then
f120: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63   the result of c
f130: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 6c 77  omparison is alw
f140: 61 79 73 20 65 69 74 68 65 72 0a 2a 2a 20 74 72  ays either.** tr
f150: 75 65 20 6f 72 20 66 61 6c 73 65 20 61 6e 64 20  ue or false and 
f160: 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20  is never NULL.  
f170: 49 66 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73  If both operands
f180: 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74   are NULL then t
f190: 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20  he result.** of 
f1a0: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 74 72  comparison is tr
f1b0: 75 65 2e 20 20 49 66 20 65 69 74 68 65 72 20 6f  ue.  If either o
f1c0: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74  perand is NULL t
f1d0: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69  hen the result i
f1e0: 73 20 66 61 6c 73 65 2e 0a 2a 2a 20 49 66 20 6e  s false..** If n
f1f0: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
f200: 73 20 4e 55 4c 4c 20 74 68 65 20 72 65 73 75 6c  s NULL the resul
f210: 74 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73  t is the same as
f220: 20 69 74 20 77 6f 75 6c 64 20 62 65 20 69 66 0a   it would be if.
f230: 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 4e 55  ** the SQLITE_NU
f240: 4c 4c 45 51 20 66 6c 61 67 20 77 65 72 65 20 6f  LLEQ flag were o
f250: 6d 69 74 74 65 64 20 66 72 6f 6d 20 50 35 2e 0a  mitted from P5..
f260: 2a 2a 0a 2a 2a 20 49 66 20 62 6f 74 68 20 53 51  **.** If both SQ
f270: 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 61 6e 64  LITE_STOREP2 and
f280: 20 53 51 4c 49 54 45 5f 4b 45 45 50 4e 55 4c 4c   SQLITE_KEEPNULL
f290: 20 66 6c 61 67 73 20 61 72 65 20 73 65 74 20 74   flags are set t
f2a0: 68 65 6e 20 74 68 65 0a 2a 2a 20 63 6f 6e 74 65  hen the.** conte
f2b0: 6e 74 20 6f 66 20 72 5b 50 32 5d 20 69 73 20 6f  nt of r[P2] is o
f2c0: 6e 6c 79 20 63 68 61 6e 67 65 64 20 69 66 20 74  nly changed if t
f2d0: 68 65 20 6e 65 77 20 76 61 6c 75 65 20 69 73 20  he new value is 
f2e0: 4e 55 4c 4c 20 6f 72 20 30 20 28 66 61 6c 73 65  NULL or 0 (false
f2f0: 29 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77  )..** In other w
f300: 6f 72 64 73 2c 20 61 20 70 72 69 6f 72 20 72 5b  ords, a prior r[
f310: 50 32 5d 20 76 61 6c 75 65 20 77 69 6c 6c 20 6e  P2] value will n
f320: 6f 74 20 62 65 20 6f 76 65 72 77 72 69 74 74 65  ot be overwritte
f330: 6e 20 62 79 20 31 20 28 74 72 75 65 29 2e 0a 2a  n by 1 (true)..*
f340: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 20  /./* Opcode: Ne 
f350: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
f360: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49 46 20 72  * Synopsis: IF r
f370: 5b 50 33 5d 21 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a  [P3]!=r[P1].**.*
f380: 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73  * This works jus
f390: 74 20 6c 69 6b 65 20 74 68 65 20 45 71 20 6f 70  t like the Eq op
f3a0: 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74  code except that
f3b0: 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
f3c0: 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65  en if.** the ope
f3d0: 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65  rands in registe
f3e0: 72 73 20 50 31 20 61 6e 64 20 50 33 20 61 72 65  rs P1 and P3 are
f3f0: 20 6e 6f 74 20 65 71 75 61 6c 2e 20 20 53 65 65   not equal.  See
f400: 20 74 68 65 20 45 71 20 6f 70 63 6f 64 65 20 66   the Eq opcode f
f410: 6f 72 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c  or.** additional
f420: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a   information..**
f430: 0a 2a 2a 20 49 66 20 62 6f 74 68 20 53 51 4c 49  .** If both SQLI
f440: 54 45 5f 53 54 4f 52 45 50 32 20 61 6e 64 20 53  TE_STOREP2 and S
f450: 51 4c 49 54 45 5f 4b 45 45 50 4e 55 4c 4c 20 66  QLITE_KEEPNULL f
f460: 6c 61 67 73 20 61 72 65 20 73 65 74 20 74 68 65  lags are set the
f470: 6e 20 74 68 65 0a 2a 2a 20 63 6f 6e 74 65 6e 74  n the.** content
f480: 20 6f 66 20 72 5b 50 32 5d 20 69 73 20 6f 6e 6c   of r[P2] is onl
f490: 79 20 63 68 61 6e 67 65 64 20 69 66 20 74 68 65  y changed if the
f4a0: 20 6e 65 77 20 76 61 6c 75 65 20 69 73 20 4e 55   new value is NU
f4b0: 4c 4c 20 6f 72 20 31 20 28 74 72 75 65 29 2e 0a  LL or 1 (true)..
f4c0: 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  ** In other word
f4d0: 73 2c 20 61 20 70 72 69 6f 72 20 72 5b 50 32 5d  s, a prior r[P2]
f4e0: 20 76 61 6c 75 65 20 77 69 6c 6c 20 6e 6f 74 20   value will not 
f4f0: 62 65 20 6f 76 65 72 77 72 69 74 74 65 6e 20 62  be overwritten b
f500: 79 20 30 20 28 66 61 6c 73 65 29 2e 0a 2a 2f 0a  y 0 (false)..*/.
f510: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 74 20 50 31  /* Opcode: Lt P1
f520: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
f530: 53 79 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b 50  Synopsis: IF r[P
f540: 33 5d 3c 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 43  3]<r[P1].**.** C
f550: 6f 6d 70 61 72 65 20 74 68 65 20 76 61 6c 75 65  ompare the value
f560: 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
f570: 20 61 6e 64 20 50 33 2e 20 20 49 66 20 72 65 67   and P3.  If reg
f580: 28 50 33 29 3c 72 65 67 28 50 31 29 20 74 68 65  (P3)<reg(P1) the
f590: 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 61 64 64  n.** jump to add
f5a0: 72 65 73 73 20 50 32 2e 20 20 4f 72 20 69 66 20  ress P2.  Or if 
f5b0: 74 68 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45  the SQLITE_STORE
f5c0: 50 32 20 66 6c 61 67 20 69 73 20 73 65 74 20 69  P2 flag is set i
f5d0: 6e 20 50 35 20 73 74 6f 72 65 0a 2a 2a 20 74 68  n P5 store.** th
f5e0: 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70  e result of comp
f5f0: 61 72 69 73 6f 6e 20 28 30 20 6f 72 20 31 20 6f  arison (0 or 1 o
f600: 72 20 4e 55 4c 4c 29 20 69 6e 74 6f 20 72 65 67  r NULL) into reg
f610: 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
f620: 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55  If the SQLITE_JU
f630: 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20 6f 66 20  MPIFNULL bit of 
f640: 50 35 20 69 73 20 73 65 74 20 61 6e 64 20 65 69  P5 is set and ei
f650: 74 68 65 72 20 72 65 67 28 50 31 29 20 6f 72 0a  ther reg(P1) or.
f660: 2a 2a 20 72 65 67 28 50 33 29 20 69 73 20 4e 55  ** reg(P3) is NU
f670: 4c 4c 20 74 68 65 6e 20 74 68 65 20 74 61 6b 65  LL then the take
f680: 20 74 68 65 20 6a 75 6d 70 2e 20 20 49 66 20 74   the jump.  If t
f690: 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46  he SQLITE_JUMPIF
f6a0: 4e 55 4c 4c 20 0a 2a 2a 20 62 69 74 20 69 73 20  NULL .** bit is 
f6b0: 63 6c 65 61 72 20 74 68 65 6e 20 66 61 6c 6c 20  clear then fall 
f6c0: 74 68 72 6f 75 67 68 20 69 66 20 65 69 74 68 65  through if eithe
f6d0: 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c  r operand is NUL
f6e0: 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  L..**.** The SQL
f6f0: 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 70 6f 72  ITE_AFF_MASK por
f700: 74 69 6f 6e 20 6f 66 20 50 35 20 6d 75 73 74 20  tion of P5 must 
f710: 62 65 20 61 6e 20 61 66 66 69 6e 69 74 79 20 63  be an affinity c
f720: 68 61 72 61 63 74 65 72 20 2d 0a 2a 2a 20 53 51  haracter -.** SQ
f730: 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 53  LITE_AFF_TEXT, S
f740: 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45  QLITE_AFF_INTEGE
f750: 52 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e  R, and so forth.
f760: 20 41 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d   An attempt is m
f770: 61 64 65 20 0a 2a 2a 20 74 6f 20 63 6f 65 72 63  ade .** to coerc
f780: 65 20 62 6f 74 68 20 69 6e 70 75 74 73 20 61 63  e both inputs ac
f790: 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 69 73 20  cording to this 
f7a0: 61 66 66 69 6e 69 74 79 20 62 65 66 6f 72 65 20  affinity before 
f7b0: 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f  the.** compariso
f7c0: 6e 20 69 73 20 6d 61 64 65 2e 20 49 66 20 74 68  n is made. If th
f7d0: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53  e SQLITE_AFF_MAS
f7e0: 4b 20 69 73 20 30 78 30 30 2c 20 74 68 65 6e 20  K is 0x00, then 
f7f0: 6e 75 6d 65 72 69 63 0a 2a 2a 20 61 66 66 69 6e  numeric.** affin
f800: 69 74 79 20 69 73 20 75 73 65 64 2e 20 4e 6f 74  ity is used. Not
f810: 65 20 74 68 61 74 20 74 68 65 20 61 66 66 69 6e  e that the affin
f820: 69 74 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20  ity conversions 
f830: 61 72 65 20 73 74 6f 72 65 64 0a 2a 2a 20 62 61  are stored.** ba
f840: 63 6b 20 69 6e 74 6f 20 74 68 65 20 69 6e 70 75  ck into the inpu
f850: 74 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61  t registers P1 a
f860: 6e 64 20 50 33 2e 20 20 53 6f 20 74 68 69 73 20  nd P3.  So this 
f870: 6f 70 63 6f 64 65 20 63 61 6e 20 63 61 75 73 65  opcode can cause
f880: 0a 2a 2a 20 70 65 72 73 69 73 74 65 6e 74 20 63  .** persistent c
f890: 68 61 6e 67 65 73 20 74 6f 20 72 65 67 69 73 74  hanges to regist
f8a0: 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e 0a 2a  ers P1 and P3..*
f8b0: 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79 20 63 6f  *.** Once any co
f8c0: 6e 76 65 72 73 69 6f 6e 73 20 68 61 76 65 20 74  nversions have t
f8d0: 61 6b 65 6e 20 70 6c 61 63 65 2c 20 61 6e 64 20  aken place, and 
f8e0: 6e 65 69 74 68 65 72 20 76 61 6c 75 65 20 69 73  neither value is
f8f0: 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20 76   NULL, .** the v
f900: 61 6c 75 65 73 20 61 72 65 20 63 6f 6d 70 61 72  alues are compar
f910: 65 64 2e 20 49 66 20 62 6f 74 68 20 76 61 6c 75  ed. If both valu
f920: 65 73 20 61 72 65 20 62 6c 6f 62 73 20 74 68 65  es are blobs the
f930: 6e 20 6d 65 6d 63 6d 70 28 29 20 69 73 0a 2a 2a  n memcmp() is.**
f940: 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69   used to determi
f950: 6e 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  ne the results o
f960: 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  f the comparison
f970: 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65  .  If both value
f980: 73 0a 2a 2a 20 61 72 65 20 74 65 78 74 2c 20 74  s.** are text, t
f990: 68 65 6e 20 74 68 65 20 61 70 70 72 6f 70 72 69  hen the appropri
f9a0: 61 74 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  ate collating fu
f9b0: 6e 63 74 69 6f 6e 20 73 70 65 63 69 66 69 65 64  nction specified
f9c0: 20 69 6e 0a 2a 2a 20 50 34 20 69 73 20 20 75 73   in.** P4 is  us
f9d0: 65 64 20 74 6f 20 64 6f 20 74 68 65 20 63 6f 6d  ed to do the com
f9e0: 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 50 34 20  parison.  If P4 
f9f0: 69 73 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64  is not specified
fa00: 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28   then.** memcmp(
fa10: 29 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d  ) is used to com
fa20: 70 61 72 65 20 74 65 78 74 20 73 74 72 69 6e 67  pare text string
fa30: 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65  .  If both value
fa40: 73 20 61 72 65 0a 2a 2a 20 6e 75 6d 65 72 69 63  s are.** numeric
fa50: 2c 20 74 68 65 6e 20 61 20 6e 75 6d 65 72 69 63  , then a numeric
fa60: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 75   comparison is u
fa70: 73 65 64 2e 20 49 66 20 74 68 65 20 74 77 6f 20  sed. If the two 
fa80: 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 6f 66  values.** are of
fa90: 20 64 69 66 66 65 72 65 6e 74 20 74 79 70 65 73   different types
faa0: 2c 20 74 68 65 6e 20 6e 75 6d 62 65 72 73 20 61  , then numbers a
fab0: 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65  re considered le
fac0: 73 73 20 74 68 61 6e 0a 2a 2a 20 73 74 72 69 6e  ss than.** strin
fad0: 67 73 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61  gs and strings a
fae0: 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65  re considered le
faf0: 73 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a  ss than blobs..*
fb00: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 65 20  /./* Opcode: Le 
fb10: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
fb20: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49 46 20 72  * Synopsis: IF r
fb30: 5b 50 33 5d 3c 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a  [P3]<=r[P1].**.*
fb40: 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73  * This works jus
fb50: 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70  t like the Lt op
fb60: 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74  code except that
fb70: 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
fb80: 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e  en if.** the con
fb90: 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
fba0: 20 50 33 20 69 73 20 6c 65 73 73 20 74 68 61 6e   P3 is less than
fbb0: 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
fbc0: 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72   content of.** r
fbd0: 65 67 69 73 74 65 72 20 50 31 2e 20 20 53 65 65  egister P1.  See
fbe0: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66   the Lt opcode f
fbf0: 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
fc00: 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  formation..*/./*
fc10: 20 4f 70 63 6f 64 65 3a 20 47 74 20 50 31 20 50   Opcode: Gt P1 P
fc20: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
fc30: 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b 50 33 5d  nopsis: IF r[P3]
fc40: 3e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 68 69  >r[P1].**.** Thi
fc50: 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  s works just lik
fc60: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
fc70: 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
fc80: 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
fc90: 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  .** the content 
fca0: 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69  of register P3 i
fcb0: 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74  s greater than t
fcc0: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a  he content of.**
fcd0: 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 53   register P1.  S
fce0: 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ee the Lt opcode
fcf0: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
fd00: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
fd10: 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 65 20 50 31  /* Opcode: Ge P1
fd20: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
fd30: 53 79 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b 50  Synopsis: IF r[P
fd40: 33 5d 3e 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  3]>=r[P1].**.** 
fd50: 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20  This works just 
fd60: 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f  like the Lt opco
fd70: 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74  de except that t
fd80: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
fd90: 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65   if.** the conte
fda0: 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
fdb0: 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  3 is greater tha
fdc0: 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
fdd0: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20  e content of.** 
fde0: 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 53 65  register P1.  Se
fdf0: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
fe00: 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
fe10: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63  nformation..*/.c
fe20: 61 73 65 20 4f 50 5f 45 71 3a 20 20 20 20 20 20  ase OP_Eq:      
fe30: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
fe40: 20 61 73 20 54 4b 5f 45 51 2c 20 6a 75 6d 70 2c   as TK_EQ, jump,
fe50: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73   in1, in3 */.cas
fe60: 65 20 4f 50 5f 4e 65 3a 20 20 20 20 20 20 20 20  e OP_Ne:        
fe70: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
fe80: 73 20 54 4b 5f 4e 45 2c 20 6a 75 6d 70 2c 20 69  s TK_NE, jump, i
fe90: 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  n1, in3 */.case 
fea0: 4f 50 5f 4c 74 3a 20 20 20 20 20 20 20 20 20 20  OP_Lt:          
feb0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
fec0: 54 4b 5f 4c 54 2c 20 6a 75 6d 70 2c 20 69 6e 31  TK_LT, jump, in1
fed0: 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
fee0: 5f 4c 65 3a 20 20 20 20 20 20 20 20 20 20 20 20  _Le:            
fef0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
ff00: 5f 4c 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _LE, jump, in1, 
ff10: 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47  in3 */.case OP_G
ff20: 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t:              
ff30: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 47   /* same as TK_G
ff40: 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  T, jump, in1, in
ff50: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 65 3a  3 */.case OP_Ge:
ff60: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f   {             /
ff70: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 47 45 2c  * same as TK_GE,
ff80: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
ff90: 2a 2f 0a 20 20 69 6e 74 20 72 65 73 2c 20 72 65  */.  int res, re
ffa0: 73 32 3b 20 20 20 20 20 20 2f 2a 20 52 65 73 75  s2;      /* Resu
ffb0: 6c 74 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72  lt of the compar
ffc0: 69 73 6f 6e 20 6f 66 20 70 49 6e 31 20 61 67 61  ison of pIn1 aga
ffd0: 69 6e 73 74 20 70 49 6e 33 20 2a 2f 0a 20 20 63  inst pIn3 */.  c
ffe0: 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20  har affinity;   
fff0: 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 74     /* Affinity t
10000 6f 20 75 73 65 20 66 6f 72 20 63 6f 6d 70 61 72  o use for compar
10010 69 73 6f 6e 20 2a 2f 0a 20 20 75 31 36 20 66 6c  ison */.  u16 fl
10020 61 67 73 31 3b 20 20 20 20 20 20 20 20 20 2f 2a  ags1;         /*
10030 20 43 6f 70 79 20 6f 66 20 69 6e 69 74 69 61 6c   Copy of initial
10040 20 76 61 6c 75 65 20 6f 66 20 70 49 6e 31 2d 3e   value of pIn1->
10050 66 6c 61 67 73 20 2a 2f 0a 20 20 75 31 36 20 66  flags */.  u16 f
10060 6c 61 67 73 33 3b 20 20 20 20 20 20 20 20 20 2f  lags3;         /
10070 2a 20 43 6f 70 79 20 6f 66 20 69 6e 69 74 69 61  * Copy of initia
10080 6c 20 76 61 6c 75 65 20 6f 66 20 70 49 6e 33 2d  l value of pIn3-
10090 3e 66 6c 61 67 73 20 2a 2f 0a 0a 20 20 70 49 6e  >flags */..  pIn
100a0 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
100b0 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d  1];.  pIn3 = &aM
100c0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66  em[pOp->p3];.  f
100d0 6c 61 67 73 31 20 3d 20 70 49 6e 31 2d 3e 66 6c  lags1 = pIn1->fl
100e0 61 67 73 3b 0a 20 20 66 6c 61 67 73 33 20 3d 20  ags;.  flags3 = 
100f0 70 49 6e 33 2d 3e 66 6c 61 67 73 3b 0a 20 20 69  pIn3->flags;.  i
10100 66 28 20 28 66 6c 61 67 73 31 20 7c 20 66 6c 61  f( (flags1 | fla
10110 67 73 33 29 26 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs3)&MEM_Null ){
10120 0a 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 62  .    /* One or b
10130 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65  oth operands are
10140 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 69 66 28   NULL */.    if(
10150 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54   pOp->p5 & SQLIT
10160 45 5f 4e 55 4c 4c 45 51 20 29 7b 0a 20 20 20 20  E_NULLEQ ){.    
10170 20 20 2f 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e    /* If SQLITE_N
10180 55 4c 4c 45 51 20 69 73 20 73 65 74 20 28 77 68  ULLEQ is set (wh
10190 69 63 68 20 77 69 6c 6c 20 6f 6e 6c 79 20 68 61  ich will only ha
101a0 70 70 65 6e 20 69 66 20 74 68 65 20 6f 70 65 72  ppen if the oper
101b0 61 74 6f 72 20 69 73 0a 20 20 20 20 20 20 2a 2a  ator is.      **
101c0 20 4f 50 5f 45 71 20 6f 72 20 4f 50 5f 4e 65 29   OP_Eq or OP_Ne)
101d0 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a   then take the j
101e0 75 6d 70 20 6f 72 20 6e 6f 74 20 64 65 70 65 6e  ump or not depen
101f0 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a  ding on whether.
10200 20 20 20 20 20 20 2a 2a 20 6f 72 20 6e 6f 74 20        ** or not 
10210 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72  both operands ar
10220 65 20 6e 75 6c 6c 2e 0a 20 20 20 20 20 20 2a 2f  e null..      */
10230 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
10240 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45  Op->opcode==OP_E
10250 71 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  q || pOp->opcode
10260 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20 20 20 20  ==OP_Ne );.     
10270 20 61 73 73 65 72 74 28 20 28 66 6c 61 67 73 31   assert( (flags1
10280 20 26 20 4d 45 4d 5f 43 6c 65 61 72 65 64 29 3d   & MEM_Cleared)=
10290 3d 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  =0 );.      asse
102a0 72 74 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 53  rt( (pOp->p5 & S
102b0 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c  QLITE_JUMPIFNULL
102c0 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66  )==0 );.      if
102d0 28 20 28 66 6c 61 67 73 31 26 4d 45 4d 5f 4e 75  ( (flags1&MEM_Nu
102e0 6c 6c 29 21 3d 30 0a 20 20 20 20 20 20 20 26 26  ll)!=0.       &&
102f0 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f 4e 75 6c   (flags3&MEM_Nul
10300 6c 29 21 3d 30 0a 20 20 20 20 20 20 20 26 26 20  l)!=0.       && 
10310 28 66 6c 61 67 73 33 26 4d 45 4d 5f 43 6c 65 61  (flags3&MEM_Clea
10320 72 65 64 29 3d 3d 30 0a 20 20 20 20 20 20 29 7b  red)==0.      ){
10330 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 30  .        res = 0
10340 3b 20 20 2f 2a 20 4f 70 65 72 61 6e 64 73 20 61  ;  /* Operands a
10350 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20  re equal */.    
10360 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
10370 20 72 65 73 20 3d 20 31 3b 20 20 2f 2a 20 4f 70   res = 1;  /* Op
10380 65 72 61 6e 64 73 20 61 72 65 20 6e 6f 74 20 65  erands are not e
10390 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 0a  qual */.      }.
103a0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
103b0 20 2f 2a 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45   /* SQLITE_NULLE
103c0 51 20 69 73 20 63 6c 65 61 72 20 61 6e 64 20 61  Q is clear and a
103d0 74 20 6c 65 61 73 74 20 6f 6e 65 20 6f 70 65 72  t least one oper
103e0 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 0a 20 20 20  and is NULL,.   
103f0 20 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 20 72     ** then the r
10400 65 73 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20  esult is always 
10410 4e 55 4c 4c 2e 0a 20 20 20 20 20 20 2a 2a 20 54  NULL..      ** T
10420 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
10430 20 69 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a   if the SQLITE_J
10440 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20 69 73  UMPIFNULL bit is
10450 20 73 65 74 2e 0a 20 20 20 20 20 20 2a 2f 0a 20   set..      */. 
10460 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35       if( pOp->p5
10470 20 26 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50   & SQLITE_STOREP
10480 32 20 29 7b 0a 20 20 20 20 20 20 20 20 70 4f 75  2 ){.        pOu
10490 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
104a0 32 5d 3b 0a 20 20 20 20 20 20 20 20 69 43 6f 6d  2];.        iCom
104b0 70 61 72 65 20 3d 20 31 3b 20 20 20 20 2f 2a 20  pare = 1;    /* 
104c0 4f 70 65 72 61 6e 64 73 20 61 72 65 20 6e 6f 74  Operands are not
104d0 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20   equal */.      
104e0 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
104f0 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20  ge(p, pOut);.   
10500 20 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46       MemSetTypeF
10510 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75  lag(pOut, MEM_Nu
10520 6c 6c 29 3b 0a 20 20 20 20 20 20 20 20 52 45 47  ll);.        REG
10530 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
10540 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20  >p2, pOut);.    
10550 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
10560 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
10570 28 32 2c 33 29 3b 0a 20 20 20 20 20 20 20 20 69  (2,3);.        i
10580 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c  f( pOp->p5 & SQL
10590 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 29  ITE_JUMPIFNULL )
105a0 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  {.          goto
105b0 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20   jump_to_p2;.   
105c0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
105d0 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
105e0 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f  }.  }else{.    /
105f0 2a 20 4e 65 69 74 68 65 72 20 6f 70 65 72 61 6e  * Neither operan
10600 64 20 69 73 20 4e 55 4c 4c 2e 20 20 44 6f 20 61  d is NULL.  Do a
10610 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 2a 2f 0a   comparison. */.
10620 20 20 20 20 61 66 66 69 6e 69 74 79 20 3d 20 70      affinity = p
10630 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f  Op->p5 & SQLITE_
10640 41 46 46 5f 4d 41 53 4b 3b 0a 20 20 20 20 69 66  AFF_MASK;.    if
10650 28 20 61 66 66 69 6e 69 74 79 3e 3d 53 51 4c 49  ( affinity>=SQLI
10660 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 29  TE_AFF_NUMERIC )
10670 7b 0a 20 20 20 20 20 20 69 66 28 20 28 66 6c 61  {.      if( (fla
10680 67 73 31 20 7c 20 66 6c 61 67 73 33 29 26 4d 45  gs1 | flags3)&ME
10690 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 20 20 20  M_Str ){.       
106a0 20 69 66 28 20 28 66 6c 61 67 73 31 20 26 20 28   if( (flags1 & (
106b0 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c  MEM_Int|MEM_Real
106c0 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f  |MEM_Str))==MEM_
106d0 53 74 72 20 29 7b 0a 20 20 20 20 20 20 20 20 20  Str ){.         
106e0 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66   applyNumericAff
106f0 69 6e 69 74 79 28 70 49 6e 31 2c 30 29 3b 0a 20  inity(pIn1,0);. 
10700 20 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73           testcas
10710 65 28 20 66 6c 61 67 73 33 21 3d 70 49 6e 33 2d  e( flags3!=pIn3-
10720 3e 66 6c 61 67 73 20 29 3b 20 2f 2a 20 50 6f 73  >flags ); /* Pos
10730 73 69 62 6c 65 20 69 66 20 70 49 6e 31 3d 3d 70  sible if pIn1==p
10740 49 6e 33 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  In3 */.         
10750 20 66 6c 61 67 73 33 20 3d 20 70 49 6e 33 2d 3e   flags3 = pIn3->
10760 66 6c 61 67 73 3b 0a 20 20 20 20 20 20 20 20 7d  flags;.        }
10770 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 66 6c  .        if( (fl
10780 61 67 73 33 20 26 20 28 4d 45 4d 5f 49 6e 74 7c  ags3 & (MEM_Int|
10790 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74 72  MEM_Real|MEM_Str
107a0 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a 20  ))==MEM_Str ){. 
107b0 20 20 20 20 20 20 20 20 20 61 70 70 6c 79 4e 75           applyNu
107c0 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 49  mericAffinity(pI
107d0 6e 33 2c 30 29 3b 0a 20 20 20 20 20 20 20 20 7d  n3,0);.        }
107e0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 2f  .      }.      /
107f0 2a 20 48 61 6e 64 6c 65 20 74 68 65 20 63 6f 6d  * Handle the com
10800 6d 6f 6e 20 63 61 73 65 20 6f 66 20 69 6e 74 65  mon case of inte
10810 67 65 72 20 63 6f 6d 70 61 72 69 73 6f 6e 20 68  ger comparison h
10820 65 72 65 2c 20 61 73 20 61 6e 0a 20 20 20 20 20  ere, as an.     
10830 20 2a 2a 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e   ** optimization
10840 2c 20 74 6f 20 61 76 6f 69 64 20 61 20 63 61 6c  , to avoid a cal
10850 6c 20 74 6f 20 73 71 6c 69 74 65 33 4d 65 6d 43  l to sqlite3MemC
10860 6f 6d 70 61 72 65 28 29 20 2a 2f 0a 20 20 20 20  ompare() */.    
10870 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
10880 67 73 20 26 20 70 49 6e 33 2d 3e 66 6c 61 67 73  gs & pIn3->flags
10890 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
108a0 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 49  {.        if( pI
108b0 6e 33 2d 3e 75 2e 69 20 3e 20 70 49 6e 31 2d 3e  n3->u.i > pIn1->
108c0 75 2e 69 20 29 7b 20 72 65 73 20 3d 20 2b 31 3b  u.i ){ res = +1;
108d0 20 67 6f 74 6f 20 63 6f 6d 70 61 72 65 5f 6f 70   goto compare_op
108e0 3b 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20  ; }.        if( 
108f0 70 49 6e 33 2d 3e 75 2e 69 20 3c 20 70 49 6e 31  pIn3->u.i < pIn1
10900 2d 3e 75 2e 69 20 29 7b 20 72 65 73 20 3d 20 2d  ->u.i ){ res = -
10910 31 3b 20 67 6f 74 6f 20 63 6f 6d 70 61 72 65 5f  1; goto compare_
10920 6f 70 3b 20 7d 0a 20 20 20 20 20 20 20 20 72 65  op; }.        re
10930 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 67  s = 0;.        g
10940 6f 74 6f 20 63 6f 6d 70 61 72 65 5f 6f 70 3b 0a  oto compare_op;.
10950 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
10960 65 20 69 66 28 20 61 66 66 69 6e 69 74 79 3d 3d  e if( affinity==
10970 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20  SQLITE_AFF_TEXT 
10980 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28 66 6c  ){.      if( (fl
10990 61 67 73 31 20 26 20 4d 45 4d 5f 53 74 72 29 3d  ags1 & MEM_Str)=
109a0 3d 30 20 26 26 20 28 66 6c 61 67 73 31 20 26 20  =0 && (flags1 & 
109b0 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61  (MEM_Int|MEM_Rea
109c0 6c 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  l))!=0 ){.      
109d0 20 20 74 65 73 74 63 61 73 65 28 20 70 49 6e 31    testcase( pIn1
109e0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
109f0 74 20 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73  t );.        tes
10a00 74 63 61 73 65 28 20 70 49 6e 31 2d 3e 66 6c 61  tcase( pIn1->fla
10a10 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 3b  gs & MEM_Real );
10a20 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
10a30 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79  VdbeMemStringify
10a40 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 2c  (pIn1, encoding,
10a50 20 31 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73   1);.        tes
10a60 74 63 61 73 65 28 20 28 66 6c 61 67 73 31 26 4d  tcase( (flags1&M
10a70 45 4d 5f 44 79 6e 29 20 21 3d 20 28 70 49 6e 31  EM_Dyn) != (pIn1
10a80 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 44 79 6e 29  ->flags&MEM_Dyn)
10a90 20 29 3b 0a 20 20 20 20 20 20 20 20 66 6c 61 67   );.        flag
10aa0 73 31 20 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67  s1 = (pIn1->flag
10ab0 73 20 26 20 7e 4d 45 4d 5f 54 79 70 65 4d 61 73  s & ~MEM_TypeMas
10ac0 6b 29 20 7c 20 28 66 6c 61 67 73 31 20 26 20 4d  k) | (flags1 & M
10ad0 45 4d 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20 20  EM_TypeMask);.  
10ae0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 49        assert( pI
10af0 6e 31 21 3d 70 49 6e 33 20 29 3b 0a 20 20 20 20  n1!=pIn3 );.    
10b00 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28 66    }.      if( (f
10b10 6c 61 67 73 33 20 26 20 4d 45 4d 5f 53 74 72 29  lags3 & MEM_Str)
10b20 3d 3d 30 20 26 26 20 28 66 6c 61 67 73 33 20 26  ==0 && (flags3 &
10b30 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65   (MEM_Int|MEM_Re
10b40 61 6c 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  al))!=0 ){.     
10b50 20 20 20 74 65 73 74 63 61 73 65 28 20 70 49 6e     testcase( pIn
10b60 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  3->flags & MEM_I
10b70 6e 74 20 29 3b 0a 20 20 20 20 20 20 20 20 74 65  nt );.        te
10b80 73 74 63 61 73 65 28 20 70 49 6e 33 2d 3e 66 6c  stcase( pIn3->fl
10b90 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29  ags & MEM_Real )
10ba0 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
10bb0 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66  3VdbeMemStringif
10bc0 79 28 70 49 6e 33 2c 20 65 6e 63 6f 64 69 6e 67  y(pIn3, encoding
10bd0 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 74 65  , 1);.        te
10be0 73 74 63 61 73 65 28 20 28 66 6c 61 67 73 33 26  stcase( (flags3&
10bf0 4d 45 4d 5f 44 79 6e 29 20 21 3d 20 28 70 49 6e  MEM_Dyn) != (pIn
10c00 33 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 44 79 6e  3->flags&MEM_Dyn
10c10 29 20 29 3b 0a 20 20 20 20 20 20 20 20 66 6c 61  ) );.        fla
10c20 67 73 33 20 3d 20 28 70 49 6e 33 2d 3e 66 6c 61  gs3 = (pIn3->fla
10c30 67 73 20 26 20 7e 4d 45 4d 5f 54 79 70 65 4d 61  gs & ~MEM_TypeMa
10c40 73 6b 29 20 7c 20 28 66 6c 61 67 73 33 20 26 20  sk) | (flags3 & 
10c50 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20  MEM_TypeMask);. 
10c60 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
10c70 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
10c80 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51  type==P4_COLLSEQ
10c90 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c   || pOp->p4.pCol
10ca0 6c 3d 3d 30 20 29 3b 0a 20 20 20 20 72 65 73 20  l==0 );.    res 
10cb0 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70  = sqlite3MemComp
10cc0 61 72 65 28 70 49 6e 33 2c 20 70 49 6e 31 2c 20  are(pIn3, pIn1, 
10cd0 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 29 3b 0a  pOp->p4.pColl);.
10ce0 20 20 7d 0a 63 6f 6d 70 61 72 65 5f 6f 70 3a 0a    }.compare_op:.
10cf0 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f    switch( pOp->o
10d00 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 63 61 73  pcode ){.    cas
10d10 65 20 4f 50 5f 45 71 3a 20 20 20 20 72 65 73 32  e OP_Eq:    res2
10d20 20 3d 20 72 65 73 3d 3d 30 3b 20 20 20 20 20 62   = res==0;     b
10d30 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f  reak;.    case O
10d40 50 5f 4e 65 3a 20 20 20 20 72 65 73 32 20 3d 20  P_Ne:    res2 = 
10d50 72 65 73 3b 20 20 20 20 20 20 20 20 62 72 65 61  res;        brea
10d60 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4c  k;.    case OP_L
10d70 74 3a 20 20 20 20 72 65 73 32 20 3d 20 72 65 73  t:    res2 = res
10d80 3c 30 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  <0;      break;.
10d90 20 20 20 20 63 61 73 65 20 4f 50 5f 4c 65 3a 20      case OP_Le: 
10da0 20 20 20 72 65 73 32 20 3d 20 72 65 73 3c 3d 30     res2 = res<=0
10db0 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20  ;     break;.   
10dc0 20 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20 20   case OP_Gt:    
10dd0 72 65 73 32 20 3d 20 72 65 73 3e 30 3b 20 20 20  res2 = res>0;   
10de0 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64 65     break;.    de
10df0 66 61 75 6c 74 3a 20 20 20 20 20 20 20 72 65 73  fault:       res
10e00 32 20 3d 20 72 65 73 3e 3d 30 3b 20 20 20 20 20  2 = res>=0;     
10e10 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
10e20 20 55 6e 64 6f 20 61 6e 79 20 63 68 61 6e 67 65   Undo any change
10e30 73 20 6d 61 64 65 20 62 79 20 61 70 70 6c 79 41  s made by applyA
10e40 66 66 69 6e 69 74 79 28 29 20 74 6f 20 74 68 65  ffinity() to the
10e50 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73   input registers
10e60 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 28  . */.  assert( (
10e70 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
10e80 4d 5f 44 79 6e 29 20 3d 3d 20 28 66 6c 61 67 73  M_Dyn) == (flags
10e90 31 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a  1 & MEM_Dyn) );.
10ea0 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20    pIn1->flags = 
10eb0 66 6c 61 67 73 31 3b 0a 20 20 61 73 73 65 72 74  flags1;.  assert
10ec0 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  ( (pIn3->flags &
10ed0 20 4d 45 4d 5f 44 79 6e 29 20 3d 3d 20 28 66 6c   MEM_Dyn) == (fl
10ee0 61 67 73 33 20 26 20 4d 45 4d 5f 44 79 6e 29 20  ags3 & MEM_Dyn) 
10ef0 29 3b 0a 20 20 70 49 6e 33 2d 3e 66 6c 61 67 73  );.  pIn3->flags
10f00 20 3d 20 66 6c 61 67 73 33 3b 0a 0a 20 20 69 66   = flags3;..  if
10f10 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  ( pOp->p5 & SQLI
10f20 54 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20  TE_STOREP2 ){.  
10f30 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
10f40 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 69 43 6f  Op->p2];.    iCo
10f50 6d 70 61 72 65 20 3d 20 72 65 73 3b 0a 20 20 20  mpare = res;.   
10f60 20 72 65 73 32 20 3d 20 72 65 73 32 21 3d 30 3b   res2 = res2!=0;
10f70 20 20 2f 2a 20 46 6f 72 20 74 68 69 73 20 70 61    /* For this pa
10f80 74 68 20 72 65 73 32 20 6d 75 73 74 20 62 65 20  th res2 must be 
10f90 65 78 61 63 74 6c 79 20 30 20 6f 72 20 31 20 2a  exactly 0 or 1 *
10fa0 2f 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e  /.    if( (pOp->
10fb0 70 35 20 26 20 53 51 4c 49 54 45 5f 4b 45 45 50  p5 & SQLITE_KEEP
10fc0 4e 55 4c 4c 29 21 3d 30 20 29 7b 0a 20 20 20 20  NULL)!=0 ){.    
10fd0 20 20 2f 2a 20 54 68 65 20 4b 45 45 50 4e 55 4c    /* The KEEPNUL
10fe0 4c 20 66 6c 61 67 20 70 72 65 76 65 6e 74 73 20  L flag prevents 
10ff0 4f 50 5f 45 71 20 66 72 6f 6d 20 6f 76 65 72 77  OP_Eq from overw
11000 72 69 74 69 6e 67 20 61 20 4e 55 4c 4c 20 77 69  riting a NULL wi
11010 74 68 20 31 0a 20 20 20 20 20 20 2a 2a 20 61 6e  th 1.      ** an
11020 64 20 70 72 65 76 65 6e 74 73 20 4f 50 5f 4e 65  d prevents OP_Ne
11030 20 66 72 6f 6d 20 6f 76 65 72 77 72 69 74 69 6e   from overwritin
11040 67 20 4e 55 4c 4c 20 77 69 74 68 20 30 2e 20 20  g NULL with 0.  
11050 54 68 69 73 20 66 6c 61 67 0a 20 20 20 20 20 20  This flag.      
11060 2a 2a 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20  ** is only used 
11070 69 6e 20 63 6f 6e 74 65 78 74 73 20 77 68 65 72  in contexts wher
11080 65 20 65 69 74 68 65 72 3a 0a 20 20 20 20 20 20  e either:.      
11090 2a 2a 20 20 20 28 31 29 20 6f 70 3d 3d 4f 50 5f  **   (1) op==OP_
110a0 45 71 20 26 26 20 28 72 5b 50 32 5d 3d 3d 4e 55  Eq && (r[P2]==NU
110b0 4c 4c 20 7c 7c 20 72 5b 50 32 5d 3d 3d 30 29 0a  LL || r[P2]==0).
110c0 20 20 20 20 20 20 2a 2a 20 20 20 28 32 29 20 6f        **   (2) o
110d0 70 3d 3d 4f 50 5f 4e 65 20 26 26 20 28 72 5b 50  p==OP_Ne && (r[P
110e0 32 5d 3d 3d 4e 55 4c 4c 20 7c 7c 20 72 5b 50 32  2]==NULL || r[P2
110f0 5d 3d 3d 31 29 0a 20 20 20 20 20 20 2a 2a 20 54  ]==1).      ** T
11100 68 65 72 65 66 6f 72 65 20 69 74 20 69 73 20 6e  herefore it is n
11110 6f 74 20 6e 65 63 65 73 73 61 72 79 20 74 6f 20  ot necessary to 
11120 63 68 65 63 6b 20 74 68 65 20 63 6f 6e 74 65 6e  check the conten
11130 74 20 6f 66 20 72 5b 50 32 5d 20 66 6f 72 0a 20  t of r[P2] for. 
11140 20 20 20 20 20 2a 2a 20 4e 55 4c 4c 2e 20 2a 2f       ** NULL. */
11150 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
11160 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e  Op->opcode==OP_N
11170 65 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  e || pOp->opcode
11180 3d 3d 4f 50 5f 45 71 20 29 3b 0a 20 20 20 20 20  ==OP_Eq );.     
11190 20 61 73 73 65 72 74 28 20 72 65 73 32 3d 3d 30   assert( res2==0
111a0 20 7c 7c 20 72 65 73 32 3d 3d 31 20 29 3b 0a 20   || res2==1 );. 
111b0 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 72       testcase( r
111c0 65 73 32 3d 3d 30 20 26 26 20 70 4f 70 2d 3e 6f  es2==0 && pOp->o
111d0 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 29 3b 0a  pcode==OP_Eq );.
111e0 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
111f0 72 65 73 32 3d 3d 31 20 26 26 20 70 4f 70 2d 3e  res2==1 && pOp->
11200 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 29 3b  opcode==OP_Eq );
11210 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28  .      testcase(
11220 20 72 65 73 32 3d 3d 30 20 26 26 20 70 4f 70 2d   res2==0 && pOp-
11230 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29  >opcode==OP_Ne )
11240 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65  ;.      testcase
11250 28 20 72 65 73 32 3d 3d 31 20 26 26 20 70 4f 70  ( res2==1 && pOp
11260 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20  ->opcode==OP_Ne 
11270 29 3b 0a 20 20 20 20 20 20 69 66 28 20 28 70 4f  );.      if( (pO
11280 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71  p->opcode==OP_Eq
11290 29 3d 3d 72 65 73 32 20 29 20 62 72 65 61 6b 3b  )==res2 ) break;
112a0 0a 20 20 20 20 7d 0a 20 20 20 20 6d 65 6d 41 62  .    }.    memAb
112b0 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
112c0 4f 75 74 29 3b 0a 20 20 20 20 4d 65 6d 53 65 74  Out);.    MemSet
112d0 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
112e0 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 70 4f 75  EM_Int);.    pOu
112f0 74 2d 3e 75 2e 69 20 3d 20 72 65 73 32 3b 0a 20  t->u.i = res2;. 
11300 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
11310 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29  E(pOp->p2, pOut)
11320 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56  ;.  }else{.    V
11330 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
11340 65 73 21 3d 30 2c 20 28 70 4f 70 2d 3e 70 35 20  es!=0, (pOp->p5 
11350 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 29  & SQLITE_NULLEQ)
11360 3f 32 3a 33 29 3b 0a 20 20 20 20 69 66 28 20 72  ?2:3);.    if( r
11370 65 73 32 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  es2 ){.      got
11380 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
11390 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
113a0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45  .}../* Opcode: E
113b0 6c 73 65 4e 6f 74 45 71 20 2a 20 50 32 20 2a 20  lseNotEq * P2 * 
113c0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  * *.**.** This o
113d0 70 63 6f 64 65 20 6d 75 73 74 20 69 6d 6d 65 64  pcode must immed
113e0 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 20 61 6e  iately follow an
113f0 20 4f 50 5f 4c 74 20 6f 72 20 4f 50 5f 47 74 20   OP_Lt or OP_Gt 
11400 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72 61  comparison opera
11410 74 6f 72 2e 0a 2a 2a 20 49 66 20 72 65 73 75 6c  tor..** If resul
11420 74 20 6f 66 20 61 6e 20 4f 50 5f 45 71 20 63 6f  t of an OP_Eq co
11430 6d 70 61 72 69 73 6f 6e 20 6f 6e 20 74 68 65 20  mparison on the 
11440 73 61 6d 65 20 74 77 6f 20 6f 70 65 72 61 6e 64  same two operand
11450 73 0a 2a 2a 20 77 6f 75 6c 64 20 68 61 76 65 20  s.** would have 
11460 62 65 20 4e 55 4c 4c 20 6f 72 20 66 61 6c 73 65  be NULL or false
11470 20 28 30 29 2c 20 74 68 65 6e 20 74 68 65 6e 20   (0), then then 
11480 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 20  jump to P2. .** 
11490 49 66 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  If the result of
114a0 20 61 6e 20 4f 50 5f 45 71 20 63 6f 6d 70 61 72   an OP_Eq compar
114b0 69 73 6f 6e 20 6f 6e 20 74 68 65 20 74 77 6f 20  ison on the two 
114c0 70 72 65 76 69 6f 75 73 20 6f 70 65 72 61 6e 64  previous operand
114d0 73 0a 2a 2a 20 77 6f 75 6c 64 20 68 61 76 65 20  s.** would have 
114e0 62 65 65 6e 20 74 72 75 65 20 28 31 29 2c 20 74  been true (1), t
114f0 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  hen fall through
11500 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 6c 73  ..*/.case OP_Els
11510 65 4e 6f 74 45 71 3a 20 7b 20 20 20 20 20 20 20  eNotEq: {       
11520 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 45 53  /* same as TK_ES
11530 43 41 50 45 2c 20 6a 75 6d 70 20 2a 2f 0a 20 20  CAPE, jump */.  
11540 61 73 73 65 72 74 28 20 70 4f 70 3e 61 4f 70 20  assert( pOp>aOp 
11550 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
11560 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  [-1].opcode==OP_
11570 4c 74 20 7c 7c 20 70 4f 70 5b 2d 31 5d 2e 6f 70  Lt || pOp[-1].op
11580 63 6f 64 65 3d 3d 4f 50 5f 47 74 20 29 3b 0a 20  code==OP_Gt );. 
11590 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d   assert( pOp[-1]
115a0 2e 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f  .p5 & SQLITE_STO
115b0 52 45 50 32 20 29 3b 0a 20 20 56 64 62 65 42 72  REP2 );.  VdbeBr
115c0 61 6e 63 68 54 61 6b 65 6e 28 69 43 6f 6d 70 61  anchTaken(iCompa
115d0 72 65 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28  re!=0, 2);.  if(
115e0 20 69 43 6f 6d 70 61 72 65 21 3d 30 20 29 20 67   iCompare!=0 ) g
115f0 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
11600 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20    break;.}.../* 
11610 4f 70 63 6f 64 65 3a 20 50 65 72 6d 75 74 61 74  Opcode: Permutat
11620 69 6f 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a  ion * * * P4 *.*
11630 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 70 65 72  *.** Set the per
11640 6d 75 74 61 74 69 6f 6e 20 75 73 65 64 20 62 79  mutation used by
11650 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 20   the OP_Compare 
11660 6f 70 65 72 61 74 6f 72 20 74 6f 20 62 65 20 74  operator to be t
11670 68 65 20 61 72 72 61 79 0a 2a 2a 20 6f 66 20 69  he array.** of i
11680 6e 74 65 67 65 72 73 20 69 6e 20 50 34 2e 0a 2a  ntegers in P4..*
11690 2a 0a 2a 2a 20 54 68 65 20 70 65 72 6d 75 74 61  *.** The permuta
116a0 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 76 61 6c  tion is only val
116b0 69 64 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78  id until the nex
116c0 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 74 68 61  t OP_Compare tha
116d0 74 20 68 61 73 0a 2a 2a 20 74 68 65 20 4f 50 46  t has.** the OPF
116e0 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20  LAG_PERMUTE bit 
116f0 73 65 74 20 69 6e 20 50 35 2e 20 54 79 70 69 63  set in P5. Typic
11700 61 6c 6c 79 20 74 68 65 20 4f 50 5f 50 65 72 6d  ally the OP_Perm
11710 75 74 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 0a  utation should .
11720 2a 2a 20 6f 63 63 75 72 20 69 6d 6d 65 64 69 61  ** occur immedia
11730 74 65 6c 79 20 70 72 69 6f 72 20 74 6f 20 74 68  tely prior to th
11740 65 20 4f 50 5f 43 6f 6d 70 61 72 65 2e 0a 2a 2a  e OP_Compare..**
11750 0a 2a 2a 20 54 68 65 20 66 69 72 73 74 20 69 6e  .** The first in
11760 74 65 67 65 72 20 69 6e 20 74 68 65 20 50 34 20  teger in the P4 
11770 69 6e 74 65 67 65 72 20 61 72 72 61 79 20 69 73  integer array is
11780 20 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74   the length of t
11790 68 65 20 61 72 72 61 79 0a 2a 2a 20 61 6e 64 20  he array.** and 
117a0 64 6f 65 73 20 6e 6f 74 20 62 65 63 6f 6d 65 20  does not become 
117b0 70 61 72 74 20 6f 66 20 74 68 65 20 70 65 72 6d  part of the perm
117c0 75 74 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  utation..*/.case
117d0 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 3a   OP_Permutation:
117e0 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   {.  assert( pOp
117f0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
11800 41 52 52 41 59 20 29 3b 0a 20 20 61 73 73 65 72  ARRAY );.  asser
11810 74 28 20 70 4f 70 2d 3e 70 34 2e 61 69 20 29 3b  t( pOp->p4.ai );
11820 0a 20 20 61 50 65 72 6d 75 74 65 20 3d 20 70 4f  .  aPermute = pO
11830 70 2d 3e 70 34 2e 61 69 20 2b 20 31 3b 0a 20 20  p->p4.ai + 1;.  
11840 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
11850 6f 64 65 3a 20 43 6f 6d 70 61 72 65 20 50 31 20  ode: Compare P1 
11860 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
11870 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 40 50 33  ynopsis: r[P1@P3
11880 5d 20 3c 2d 3e 20 72 5b 50 32 40 50 33 5d 0a 2a  ] <-> r[P2@P3].*
11890 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 77 6f  *.** Compare two
118a0 20 76 65 63 74 6f 72 73 20 6f 66 20 72 65 67 69   vectors of regi
118b0 73 74 65 72 73 20 69 6e 20 72 65 67 28 50 31 29  sters in reg(P1)
118c0 2e 2e 72 65 67 28 50 31 2b 50 33 2d 31 29 20 28  ..reg(P1+P3-1) (
118d0 63 61 6c 6c 20 74 68 69 73 0a 2a 2a 20 76 65 63  call this.** vec
118e0 74 6f 72 20 22 41 22 29 20 61 6e 64 20 69 6e 20  tor "A") and in 
118f0 72 65 67 28 50 32 29 2e 2e 72 65 67 28 50 32 2b  reg(P2)..reg(P2+
11900 50 33 2d 31 29 20 28 22 42 22 29 2e 20 20 53 61  P3-1) ("B").  Sa
11910 76 65 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  ve the result of
11920 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72 69 73  .** the comparis
11930 6f 6e 20 66 6f 72 20 75 73 65 20 62 79 20 74 68  on for use by th
11940 65 20 6e 65 78 74 20 4f 50 5f 4a 75 6d 70 20 69  e next OP_Jump i
11950 6e 73 74 72 75 63 74 2e 0a 2a 2a 0a 2a 2a 20 49  nstruct..**.** I
11960 66 20 50 35 20 68 61 73 20 74 68 65 20 4f 50 46  f P5 has the OPF
11970 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20  LAG_PERMUTE bit 
11980 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 6f 72  set, then the or
11990 64 65 72 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f  der of compariso
119a0 6e 20 69 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e  n is.** determin
119b0 65 64 20 62 79 20 74 68 65 20 6d 6f 73 74 20 72  ed by the most r
119c0 65 63 65 6e 74 20 4f 50 5f 50 65 72 6d 75 74 61  ecent OP_Permuta
119d0 74 69 6f 6e 20 6f 70 65 72 61 74 6f 72 2e 20 20  tion operator.  
119e0 49 66 20 74 68 65 0a 2a 2a 20 4f 50 46 4c 41 47  If the.** OPFLAG
119f0 5f 50 45 52 4d 55 54 45 20 62 69 74 20 69 73 20  _PERMUTE bit is 
11a00 63 6c 65 61 72 2c 20 74 68 65 6e 20 72 65 67 69  clear, then regi
11a10 73 74 65 72 20 61 72 65 20 63 6f 6d 70 61 72 65  ster are compare
11a20 64 20 69 6e 20 73 65 71 75 65 6e 74 69 61 6c 0a  d in sequential.
11a30 2a 2a 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20  ** order..**.** 
11a40 50 34 20 69 73 20 61 20 4b 65 79 49 6e 66 6f 20  P4 is a KeyInfo 
11a50 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20 64  structure that d
11a60 65 66 69 6e 65 73 20 63 6f 6c 6c 61 74 69 6e 67  efines collating
11a70 20 73 65 71 75 65 6e 63 65 73 20 61 6e 64 20 73   sequences and s
11a80 6f 72 74 0a 2a 2a 20 6f 72 64 65 72 73 20 66 6f  ort.** orders fo
11a90 72 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  r the comparison
11aa0 2e 20 20 54 68 65 20 70 65 72 6d 75 74 61 74 69  .  The permutati
11ab0 6f 6e 20 61 70 70 6c 69 65 73 20 74 6f 20 72 65  on applies to re
11ac0 67 69 73 74 65 72 73 0a 2a 2a 20 6f 6e 6c 79 2e  gisters.** only.
11ad0 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 65 6c    The KeyInfo el
11ae0 65 6d 65 6e 74 73 20 61 72 65 20 75 73 65 64 20  ements are used 
11af0 73 65 71 75 65 6e 74 69 61 6c 6c 79 2e 0a 2a 2a  sequentially..**
11b00 0a 2a 2a 20 54 68 65 20 63 6f 6d 70 61 72 69 73  .** The comparis
11b10 6f 6e 20 69 73 20 61 20 73 6f 72 74 20 63 6f 6d  on is a sort com
11b20 70 61 72 69 73 6f 6e 2c 20 73 6f 20 4e 55 4c 4c  parison, so NULL
11b30 73 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 2c  s compare equal,
11b40 0a 2a 2a 20 4e 55 4c 4c 73 20 61 72 65 20 6c 65  .** NULLs are le
11b50 73 73 20 74 68 61 6e 20 6e 75 6d 62 65 72 73 2c  ss than numbers,
11b60 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6c 65 73   numbers are les
11b70 73 20 74 68 61 6e 20 73 74 72 69 6e 67 73 2c 0a  s than strings,.
11b80 2a 2a 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61  ** and strings a
11b90 72 65 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f  re less than blo
11ba0 62 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  bs..*/.case OP_C
11bb0 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 69 6e 74 20  ompare: {.  int 
11bc0 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e  n;.  int i;.  in
11bd0 74 20 70 31 3b 0a 20 20 69 6e 74 20 70 32 3b 0a  t p1;.  int p2;.
11be0 20 20 63 6f 6e 73 74 20 4b 65 79 49 6e 66 6f 20    const KeyInfo 
11bf0 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74  *pKeyInfo;.  int
11c00 20 69 64 78 3b 0a 20 20 43 6f 6c 6c 53 65 71 20   idx;.  CollSeq 
11c10 2a 70 43 6f 6c 6c 3b 20 20 20 20 2f 2a 20 43 6f  *pColl;    /* Co
11c20 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
11c30 20 74 6f 20 75 73 65 20 6f 6e 20 74 68 69 73 20   to use on this 
11c40 74 65 72 6d 20 2a 2f 0a 20 20 69 6e 74 20 62 52  term */.  int bR
11c50 65 76 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ev;          /* 
11c60 54 72 75 65 20 66 6f 72 20 44 45 53 43 45 4e 44  True for DESCEND
11c70 49 4e 47 20 73 6f 72 74 20 6f 72 64 65 72 20 2a  ING sort order *
11c80 2f 0a 0a 20 20 69 66 28 20 28 70 4f 70 2d 3e 70  /..  if( (pOp->p
11c90 35 20 26 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55  5 & OPFLAG_PERMU
11ca0 54 45 29 3d 3d 30 20 29 20 61 50 65 72 6d 75 74  TE)==0 ) aPermut
11cb0 65 20 3d 20 30 3b 0a 20 20 6e 20 3d 20 70 4f 70  e = 0;.  n = pOp
11cc0 2d 3e 70 33 3b 0a 20 20 70 4b 65 79 49 6e 66 6f  ->p3;.  pKeyInfo
11cd0 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49   = pOp->p4.pKeyI
11ce0 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  nfo;.  assert( n
11cf0 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  >0 );.  assert( 
11d00 70 4b 65 79 49 6e 66 6f 21 3d 30 20 29 3b 0a 20  pKeyInfo!=0 );. 
11d10 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20   p1 = pOp->p1;. 
11d20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 23   p2 = pOp->p2;.#
11d30 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  if SQLITE_DEBUG.
11d40 20 20 69 66 28 20 61 50 65 72 6d 75 74 65 20 29    if( aPermute )
11d50 7b 0a 20 20 20 20 69 6e 74 20 6b 2c 20 6d 78 20  {.    int k, mx 
11d60 3d 20 30 3b 0a 20 20 20 20 66 6f 72 28 6b 3d 30  = 0;.    for(k=0
11d70 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29 20 69 66 28 20  ; k<n; k++) if( 
11d80 61 50 65 72 6d 75 74 65 5b 6b 5d 3e 6d 78 20 29  aPermute[k]>mx )
11d90 20 6d 78 20 3d 20 61 50 65 72 6d 75 74 65 5b 6b   mx = aPermute[k
11da0 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ];.    assert( p
11db0 31 3e 30 20 26 26 20 70 31 2b 6d 78 3c 3d 28 70  1>0 && p1+mx<=(p
11dc0 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
11dd0 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 20 20  ursor)+1 );.    
11de0 61 73 73 65 72 74 28 20 70 32 3e 30 20 26 26 20  assert( p2>0 && 
11df0 70 32 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p2+mx<=(p->nMem+
11e00 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b  1 - p->nCursor)+
11e10 31 20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  1 );.  }else{.  
11e20 20 20 61 73 73 65 72 74 28 20 70 31 3e 30 20 26    assert( p1>0 &
11e30 26 20 70 31 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d  & p1+n<=(p->nMem
11e40 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
11e50 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  +1 );.    assert
11e60 28 20 70 32 3e 30 20 26 26 20 70 32 2b 6e 3c 3d  ( p2>0 && p2+n<=
11e70 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
11e80 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20  nCursor)+1 );.  
11e90 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
11ea0 54 45 5f 44 45 42 55 47 20 2a 2f 0a 20 20 66 6f  TE_DEBUG */.  fo
11eb0 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29  r(i=0; i<n; i++)
11ec0 7b 0a 20 20 20 20 69 64 78 20 3d 20 61 50 65 72  {.    idx = aPer
11ed0 6d 75 74 65 20 3f 20 61 50 65 72 6d 75 74 65 5b  mute ? aPermute[
11ee0 69 5d 20 3a 20 69 3b 0a 20 20 20 20 61 73 73 65  i] : i;.    asse
11ef0 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
11f00 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 20 29 3b  aMem[p1+idx]) );
11f10 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
11f20 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 32  IsValid(&aMem[p2
11f30 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20 20 52 45  +idx]) );.    RE
11f40 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 31 2b  GISTER_TRACE(p1+
11f50 69 64 78 2c 20 26 61 4d 65 6d 5b 70 31 2b 69 64  idx, &aMem[p1+id
11f60 78 5d 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45  x]);.    REGISTE
11f70 52 5f 54 52 41 43 45 28 70 32 2b 69 64 78 2c 20  R_TRACE(p2+idx, 
11f80 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 3b 0a  &aMem[p2+idx]);.
11f90 20 20 20 20 61 73 73 65 72 74 28 20 69 3c 70 4b      assert( i<pK
11fa0 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 20 29  eyInfo->nField )
11fb0 3b 0a 20 20 20 20 70 43 6f 6c 6c 20 3d 20 70 4b  ;.    pColl = pK
11fc0 65 79 49 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b 69 5d  eyInfo->aColl[i]
11fd0 3b 0a 20 20 20 20 62 52 65 76 20 3d 20 70 4b 65  ;.    bRev = pKe
11fe0 79 49 6e 66 6f 2d 3e 61 53 6f 72 74 4f 72 64 65  yInfo->aSortOrde
11ff0 72 5b 69 5d 3b 0a 20 20 20 20 69 43 6f 6d 70 61  r[i];.    iCompa
12000 72 65 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43  re = sqlite3MemC
12010 6f 6d 70 61 72 65 28 26 61 4d 65 6d 5b 70 31 2b  ompare(&aMem[p1+
12020 69 64 78 5d 2c 20 26 61 4d 65 6d 5b 70 32 2b 69  idx], &aMem[p2+i
12030 64 78 5d 2c 20 70 43 6f 6c 6c 29 3b 0a 20 20 20  dx], pColl);.   
12040 20 69 66 28 20 69 43 6f 6d 70 61 72 65 20 29 7b   if( iCompare ){
12050 0a 20 20 20 20 20 20 69 66 28 20 62 52 65 76 20  .      if( bRev 
12060 29 20 69 43 6f 6d 70 61 72 65 20 3d 20 2d 69 43  ) iCompare = -iC
12070 6f 6d 70 61 72 65 3b 0a 20 20 20 20 20 20 62 72  ompare;.      br
12080 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  eak;.    }.  }. 
12090 20 61 50 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20   aPermute = 0;. 
120a0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
120b0 63 6f 64 65 3a 20 4a 75 6d 70 20 50 31 20 50 32  code: Jump P1 P2
120c0 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75   P3 * *.**.** Ju
120d0 6d 70 20 74 6f 20 74 68 65 20 69 6e 73 74 72 75  mp to the instru
120e0 63 74 69 6f 6e 20 61 74 20 61 64 64 72 65 73 73  ction at address
120f0 20 50 31 2c 20 50 32 2c 20 6f 72 20 50 33 20 64   P1, P2, or P3 d
12100 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74  epending on whet
12110 68 65 72 0a 2a 2a 20 69 6e 20 74 68 65 20 6d 6f  her.** in the mo
12120 73 74 20 72 65 63 65 6e 74 20 4f 50 5f 43 6f 6d  st recent OP_Com
12130 70 61 72 65 20 69 6e 73 74 72 75 63 74 69 6f 6e  pare instruction
12140 20 74 68 65 20 50 31 20 76 65 63 74 6f 72 20 77   the P1 vector w
12150 61 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20  as less than.** 
12160 65 71 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72 65  equal to, or gre
12170 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 50 32  ater than the P2
12180 20 76 65 63 74 6f 72 2c 20 72 65 73 70 65 63 74   vector, respect
12190 69 76 65 6c 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ively..*/.case O
121a0 50 5f 4a 75 6d 70 3a 20 7b 20 20 20 20 20 20 20  P_Jump: {       
121b0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
121c0 0a 20 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3c  .  if( iCompare<
121d0 30 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61  0 ){.    VdbeBra
121e0 6e 63 68 54 61 6b 65 6e 28 30 2c 33 29 3b 20 70  nchTaken(0,3); p
121f0 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70  Op = &aOp[pOp->p
12200 31 20 2d 20 31 5d 3b 0a 20 20 7d 65 6c 73 65 20  1 - 1];.  }else 
12210 69 66 28 20 69 43 6f 6d 70 61 72 65 3d 3d 30 20  if( iCompare==0 
12220 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  ){.    VdbeBranc
12230 68 54 61 6b 65 6e 28 31 2c 33 29 3b 20 70 4f 70  hTaken(1,3); pOp
12240 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 32 20   = &aOp[pOp->p2 
12250 2d 20 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  - 1];.  }else{. 
12260 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
12270 65 6e 28 32 2c 33 29 3b 20 70 4f 70 20 3d 20 26  en(2,3); pOp = &
12280 61 4f 70 5b 70 4f 70 2d 3e 70 33 20 2d 20 31 5d  aOp[pOp->p3 - 1]
12290 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
122a0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 6e 64  ../* Opcode: And
122b0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
122c0 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
122d0 3d 28 72 5b 50 31 5d 20 26 26 20 72 5b 50 32 5d  =(r[P1] && r[P2]
122e0 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65  ).**.** Take the
122f0 20 6c 6f 67 69 63 61 6c 20 41 4e 44 20 6f 66 20   logical AND of 
12300 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65  the values in re
12310 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50  gisters P1 and P
12320 32 20 61 6e 64 0a 2a 2a 20 77 72 69 74 65 20 74  2 and.** write t
12330 68 65 20 72 65 73 75 6c 74 20 69 6e 74 6f 20 72  he result into r
12340 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a  egister P3..**.*
12350 2a 20 49 66 20 65 69 74 68 65 72 20 50 31 20 6f  * If either P1 o
12360 72 20 50 32 20 69 73 20 30 20 28 66 61 6c 73 65  r P2 is 0 (false
12370 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  ) then the resul
12380 74 20 69 73 20 30 20 65 76 65 6e 20 69 66 0a 2a  t is 0 even if.*
12390 2a 20 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75  * the other inpu
123a0 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55  t is NULL.  A NU
123b0 4c 4c 20 61 6e 64 20 74 72 75 65 20 6f 72 20 74  LL and true or t
123c0 77 6f 20 4e 55 4c 4c 73 20 67 69 76 65 0a 2a 2a  wo NULLs give.**
123d0 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a   a NULL output..
123e0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 72  */./* Opcode: Or
123f0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
12400 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
12410 3d 28 72 5b 50 31 5d 20 7c 7c 20 72 5b 50 32 5d  =(r[P1] || r[P2]
12420 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65  ).**.** Take the
12430 20 6c 6f 67 69 63 61 6c 20 4f 52 20 6f 66 20 74   logical OR of t
12440 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
12450 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20  ister P1 and P2 
12460 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65  and.** store the
12470 20 61 6e 73 77 65 72 20 69 6e 20 72 65 67 69 73   answer in regis
12480 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66  ter P3..**.** If
12490 20 65 69 74 68 65 72 20 50 31 20 6f 72 20 50 32   either P1 or P2
124a0 20 69 73 20 6e 6f 6e 7a 65 72 6f 20 28 74 72 75   is nonzero (tru
124b0 65 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  e) then the resu
124c0 6c 74 20 69 73 20 31 20 28 74 72 75 65 29 0a 2a  lt is 1 (true).*
124d0 2a 20 65 76 65 6e 20 69 66 20 74 68 65 20 6f 74  * even if the ot
124e0 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
124f0 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 66  L.  A NULL and f
12500 61 6c 73 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c  alse or two NULL
12510 73 0a 2a 2a 20 67 69 76 65 20 61 20 4e 55 4c 4c  s.** give a NULL
12520 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65   output..*/.case
12530 20 4f 50 5f 41 6e 64 3a 20 20 20 20 20 20 20 20   OP_And:        
12540 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
12550 20 54 4b 5f 41 4e 44 2c 20 69 6e 31 2c 20 69 6e   TK_AND, in1, in
12560 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
12570 4f 50 5f 4f 72 3a 20 7b 20 20 20 20 20 20 20 20  OP_Or: {        
12580 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
12590 54 4b 5f 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c  TK_OR, in1, in2,
125a0 20 6f 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20 76   out3 */.  int v
125b0 31 3b 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 70  1;    /* Left op
125c0 65 72 61 6e 64 3a 20 20 30 3d 3d 46 41 4c 53 45  erand:  0==FALSE
125d0 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e  , 1==TRUE, 2==UN
125e0 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f  KNOWN or NULL */
125f0 0a 20 20 69 6e 74 20 76 32 3b 20 20 20 20 2f 2a  .  int v2;    /*
12600 20 52 69 67 68 74 20 6f 70 65 72 61 6e 64 3a 20   Right operand: 
12610 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55  0==FALSE, 1==TRU
12620 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72  E, 2==UNKNOWN or
12630 20 4e 55 4c 4c 20 2a 2f 0a 0a 20 20 70 49 6e 31   NULL */..  pIn1
12640 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
12650 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66  ];.  if( pIn1->f
12660 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
12670 29 7b 0a 20 20 20 20 76 31 20 3d 20 32 3b 0a 20  ){.    v1 = 2;. 
12680 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76 31 20 3d   }else{.    v1 =
12690 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
126a0 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a 20  alue(pIn1)!=0;. 
126b0 20 7d 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65   }.  pIn2 = &aMe
126c0 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66  m[pOp->p2];.  if
126d0 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20  ( pIn2->flags & 
126e0 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
126f0 76 32 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b  v2 = 2;.  }else{
12700 0a 20 20 20 20 76 32 20 3d 20 73 71 6c 69 74 65  .    v2 = sqlite
12710 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
12720 6e 32 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 69 66  n2)!=0;.  }.  if
12730 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
12740 50 5f 41 6e 64 20 29 7b 0a 20 20 20 20 73 74 61  P_And ){.    sta
12750 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  tic const unsign
12760 65 64 20 63 68 61 72 20 61 6e 64 5f 6c 6f 67 69  ed char and_logi
12770 63 5b 5d 20 3d 20 7b 20 30 2c 20 30 2c 20 30 2c  c[] = { 0, 0, 0,
12780 20 30 2c 20 31 2c 20 32 2c 20 30 2c 20 32 2c 20   0, 1, 2, 0, 2, 
12790 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 61 6e  2 };.    v1 = an
127a0 64 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d  d_logic[v1*3+v2]
127b0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
127c0 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69  tatic const unsi
127d0 67 6e 65 64 20 63 68 61 72 20 6f 72 5f 6c 6f 67  gned char or_log
127e0 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 31 2c 20 32  ic[] = { 0, 1, 2
127f0 2c 20 31 2c 20 31 2c 20 31 2c 20 32 2c 20 31 2c  , 1, 1, 1, 2, 1,
12800 20 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 6f   2 };.    v1 = o
12810 72 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d  r_logic[v1*3+v2]
12820 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 20 3d 20 26  ;.  }.  pOut = &
12830 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
12840 20 69 66 28 20 76 31 3d 3d 32 20 29 7b 0a 20 20   if( v1==2 ){.  
12850 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
12860 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29  (pOut, MEM_Null)
12870 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
12880 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 31 3b 0a 20  Out->u.i = v1;. 
12890 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
128a0 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
128b0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
128c0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74  ../* Opcode: Not
128d0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
128e0 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
128f0 20 21 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e   !r[P1].**.** In
12900 74 65 72 70 72 65 74 20 74 68 65 20 76 61 6c 75  terpret the valu
12910 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
12920 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61   as a boolean va
12930 6c 75 65 2e 20 20 53 74 6f 72 65 20 74 68 65 0a  lue.  Store the.
12940 2a 2a 20 62 6f 6f 6c 65 61 6e 20 63 6f 6d 70 6c  ** boolean compl
12950 65 6d 65 6e 74 20 69 6e 20 72 65 67 69 73 74 65  ement in registe
12960 72 20 50 32 2e 20 20 49 66 20 74 68 65 20 76 61  r P2.  If the va
12970 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
12980 50 31 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20  P1 is .** NULL, 
12990 74 68 65 6e 20 61 20 4e 55 4c 4c 20 69 73 20 73  then a NULL is s
129a0 74 6f 72 65 64 20 69 6e 20 50 32 2e 0a 2a 2f 0a  tored in P2..*/.
129b0 63 61 73 65 20 4f 50 5f 4e 6f 74 3a 20 7b 20 20  case OP_Not: {  
129c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
129d0 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 2c   same as TK_NOT,
129e0 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20   in1, out2 */.  
129f0 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
12a00 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  ->p1];.  pOut = 
12a10 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
12a20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
12a30 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
12a40 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
12a50 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30  s & MEM_Null)==0
12a60 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c   ){.    pOut->fl
12a70 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
12a80 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 21     pOut->u.i = !
12a90 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
12aa0 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20  lue(pIn1);.  }. 
12ab0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
12ac0 63 6f 64 65 3a 20 42 69 74 4e 6f 74 20 50 31 20  code: BitNot P1 
12ad0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
12ae0 70 73 69 73 3a 20 72 5b 50 31 5d 3d 20 7e 72 5b  psis: r[P1]= ~r[
12af0 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70  P1].**.** Interp
12b00 72 65 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  ret the content 
12b10 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20 61  of register P1 a
12b20 73 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 53  s an integer.  S
12b30 74 6f 72 65 20 74 68 65 0a 2a 2a 20 6f 6e 65 73  tore the.** ones
12b40 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 6f 66 20 74  -complement of t
12b50 68 65 20 50 31 20 76 61 6c 75 65 20 69 6e 74 6f  he P1 value into
12b60 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49   register P2.  I
12b70 66 20 50 31 20 68 6f 6c 64 73 0a 2a 2a 20 61 20  f P1 holds.** a 
12b80 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20  NULL then store 
12b90 61 20 4e 55 4c 4c 20 69 6e 20 50 32 2e 0a 2a 2f  a NULL in P2..*/
12ba0 0a 63 61 73 65 20 4f 50 5f 42 69 74 4e 6f 74 3a  .case OP_BitNot:
12bb0 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f   {             /
12bc0 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54  * same as TK_BIT
12bd0 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a  NOT, in1, out2 *
12be0 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
12bf0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75  [pOp->p1];.  pOu
12c00 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
12c10 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  2];.  sqlite3Vdb
12c20 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74  eMemSetNull(pOut
12c30 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
12c40 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
12c50 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70 4f 75 74  )==0 ){.    pOut
12c60 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
12c70 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  t;.    pOut->u.i
12c80 20 3d 20 7e 73 71 6c 69 74 65 33 56 64 62 65 49   = ~sqlite3VdbeI
12c90 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20  ntValue(pIn1);. 
12ca0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
12cb0 2a 20 4f 70 63 6f 64 65 3a 20 4f 6e 63 65 20 50  * Opcode: Once P
12cc0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
12cd0 20 49 66 20 74 68 65 20 50 31 20 76 61 6c 75 65   If the P1 value
12ce0 20 69 73 20 65 71 75 61 6c 20 74 6f 20 74 68 65   is equal to the
12cf0 20 50 31 20 76 61 6c 75 65 20 6f 6e 20 74 68 65   P1 value on the
12d00 20 4f 50 5f 49 6e 69 74 20 6f 70 63 6f 64 65 20   OP_Init opcode 
12d10 61 74 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f  at.** instructio
12d20 6e 20 30 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74  n 0, then jump t
12d30 6f 20 50 32 2e 20 20 49 66 20 74 68 65 20 74 77  o P2.  If the tw
12d40 6f 20 50 31 20 76 61 6c 75 65 73 20 64 69 66 66  o P1 values diff
12d50 65 72 2c 20 74 68 65 6e 0a 2a 2a 20 73 65 74 20  er, then.** set 
12d60 74 68 65 20 50 31 20 76 61 6c 75 65 20 6f 6e 20  the P1 value on 
12d70 74 68 69 73 20 6f 70 63 6f 64 65 20 74 6f 20 65  this opcode to e
12d80 71 75 61 6c 20 74 68 65 20 50 31 20 76 61 6c 75  qual the P1 valu
12d90 65 20 6f 6e 20 74 68 65 20 4f 50 5f 49 6e 69 74  e on the OP_Init
12da0 0a 2a 2a 20 61 6e 64 20 66 61 6c 6c 20 74 68 72  .** and fall thr
12db0 6f 75 67 68 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ough..*/.case OP
12dc0 5f 4f 6e 63 65 3a 20 7b 20 20 20 20 20 20 20 20  _Once: {        
12dd0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
12de0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 4f 70    assert( p->aOp
12df0 5b 30 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  [0].opcode==OP_I
12e00 6e 69 74 20 29 3b 0a 20 20 56 64 62 65 42 72 61  nit );.  VdbeBra
12e10 6e 63 68 54 61 6b 65 6e 28 70 2d 3e 61 4f 70 5b  nchTaken(p->aOp[
12e20 30 5d 2e 70 31 3d 3d 70 4f 70 2d 3e 70 31 2c 20  0].p1==pOp->p1, 
12e30 32 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61 4f 70  2);.  if( p->aOp
12e40 5b 30 5d 2e 70 31 3d 3d 70 4f 70 2d 3e 70 31 20  [0].p1==pOp->p1 
12e50 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  ){.    goto jump
12e60 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 7b  _to_p2;.  }else{
12e70 0a 20 20 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70  .    pOp->p1 = p
12e80 2d 3e 61 4f 70 5b 30 5d 2e 70 31 3b 0a 20 20 7d  ->aOp[0].p1;.  }
12e90 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
12ea0 4f 70 63 6f 64 65 3a 20 49 66 20 50 31 20 50 32  Opcode: If P1 P2
12eb0 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75   P3 * *.**.** Ju
12ec0 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20  mp to P2 if the 
12ed0 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
12ee0 72 20 50 31 20 69 73 20 74 72 75 65 2e 20 20 54  r P1 is true.  T
12ef0 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63  he value.** is c
12f00 6f 6e 73 69 64 65 72 65 64 20 74 72 75 65 20 69  onsidered true i
12f10 66 20 69 74 20 69 73 20 6e 75 6d 65 72 69 63 20  f it is numeric 
12f20 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 49  and non-zero.  I
12f30 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69  f the value.** i
12f40 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74 68 65  n P1 is NULL the
12f50 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20  n take the jump 
12f60 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 50  if and only if P
12f70 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a  3 is non-zero..*
12f80 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e  /./* Opcode: IfN
12f90 6f 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ot P1 P2 P3 * *.
12fa0 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32  **.** Jump to P2
12fb0 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e   if the value in
12fc0 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
12fd0 46 61 6c 73 65 2e 20 20 54 68 65 20 76 61 6c 75  False.  The valu
12fe0 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65 72  e.** is consider
12ff0 65 64 20 66 61 6c 73 65 20 69 66 20 69 74 20 68  ed false if it h
13000 61 73 20 61 20 6e 75 6d 65 72 69 63 20 76 61 6c  as a numeric val
13010 75 65 20 6f 66 20 7a 65 72 6f 2e 20 20 49 66 20  ue of zero.  If 
13020 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20  the value.** in 
13030 50 31 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  P1 is NULL then 
13040 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66  take the jump if
13050 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 50 33 20   and only if P3 
13060 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a  is non-zero..*/.
13070 63 61 73 65 20 4f 50 5f 49 66 3a 20 20 20 20 20  case OP_If:     
13080 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
13090 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 63 61 73 65  ump, in1 */.case
130a0 20 4f 50 5f 49 66 4e 6f 74 3a 20 7b 20 20 20 20   OP_IfNot: {    
130b0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
130c0 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74 20 63 3b   in1 */.  int c;
130d0 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
130e0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20  pOp->p1];.  if( 
130f0 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
13100 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 63 20  M_Null ){.    c 
13110 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 65 6c  = pOp->p3;.  }el
13120 73 65 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  se{.#ifdef SQLIT
13130 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
13140 50 4f 49 4e 54 0a 20 20 20 20 63 20 3d 20 73 71  POINT.    c = sq
13150 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
13160 65 28 70 49 6e 31 29 21 3d 30 3b 0a 23 65 6c 73  e(pIn1)!=0;.#els
13170 65 0a 20 20 20 20 63 20 3d 20 73 71 6c 69 74 65  e.    c = sqlite
13180 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70  3VdbeRealValue(p
13190 49 6e 31 29 21 3d 30 2e 30 3b 0a 23 65 6e 64 69  In1)!=0.0;.#endi
131a0 66 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f  f.    if( pOp->o
131b0 70 63 6f 64 65 3d 3d 4f 50 5f 49 66 4e 6f 74 20  pcode==OP_IfNot 
131c0 29 20 63 20 3d 20 21 63 3b 0a 20 20 7d 0a 20 20  ) c = !c;.  }.  
131d0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
131e0 63 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20  c!=0, 2);.  if( 
131f0 63 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75  c ){.    goto ju
13200 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20  mp_to_p2;.  }.  
13210 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
13220 6f 64 65 3a 20 49 73 4e 75 6c 6c 20 50 31 20 50  ode: IsNull P1 P
13230 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
13240 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3d 3d 4e  sis: if r[P1]==N
13250 55 4c 4c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  ULL goto P2.**.*
13260 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20  * Jump to P2 if 
13270 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
13280 69 73 74 65 72 20 50 31 20 69 73 20 4e 55 4c 4c  ister P1 is NULL
13290 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 73 4e  ..*/.case OP_IsN
132a0 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ull: {          
132b0 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
132c0 49 53 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e  ISNULL, jump, in
132d0 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
132e0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
132f0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
13300 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
13310 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 2c 20 32 29  MEM_Null)!=0, 2)
13320 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
13330 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
13340 21 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  !=0 ){.    goto 
13350 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a  jump_to_p2;.  }.
13360 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
13370 70 63 6f 64 65 3a 20 4e 6f 74 4e 75 6c 6c 20 50  pcode: NotNull P
13380 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
13390 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d  nopsis: if r[P1]
133a0 21 3d 4e 55 4c 4c 20 67 6f 74 6f 20 50 32 0a 2a  !=NULL goto P2.*
133b0 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20  *.** Jump to P2 
133c0 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  if the value in 
133d0 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 6e  register P1 is n
133e0 6f 74 20 4e 55 4c 4c 2e 20 20 0a 2a 2f 0a 63 61  ot NULL.  .*/.ca
133f0 73 65 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b  se OP_NotNull: {
13400 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
13410 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 4e 55 4c  ame as TK_NOTNUL
13420 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  L, jump, in1 */.
13430 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
13440 4f 70 2d 3e 70 31 5d 3b 0a 20 20 56 64 62 65 42  Op->p1];.  VdbeB
13450 72 61 6e 63 68 54 61 6b 65 6e 28 20 28 70 49 6e  ranchTaken( (pIn
13460 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
13470 75 6c 6c 29 3d 3d 30 2c 20 32 29 3b 0a 20 20 69  ull)==0, 2);.  i
13480 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
13490 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29  & MEM_Null)==0 )
134a0 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f  {.    goto jump_
134b0 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65  to_p2;.  }.  bre
134c0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
134d0 3a 20 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50  : Column P1 P2 P
134e0 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
134f0 73 69 73 3a 20 72 5b 50 33 5d 3d 50 58 0a 2a 2a  sis: r[P3]=PX.**
13500 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68  .** Interpret th
13510 65 20 64 61 74 61 20 74 68 61 74 20 63 75 72 73  e data that curs
13520 6f 72 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 20  or P1 points to 
13530 61 73 20 61 20 73 74 72 75 63 74 75 72 65 20 62  as a structure b
13540 75 69 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 74 68  uilt using.** th
13550 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73  e MakeRecord ins
13560 74 72 75 63 74 69 6f 6e 2e 20 20 28 53 65 65 20  truction.  (See 
13570 74 68 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 6f  the MakeRecord o
13580 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69  pcode for additi
13590 6f 6e 61 6c 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74  onal.** informat
135a0 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 66 6f  ion about the fo
135b0 72 6d 61 74 20 6f 66 20 74 68 65 20 64 61 74 61  rmat of the data
135c0 2e 29 20 20 45 78 74 72 61 63 74 20 74 68 65 20  .)  Extract the 
135d0 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 0a 2a 2a 20  P2-th column.** 
135e0 66 72 6f 6d 20 74 68 69 73 20 72 65 63 6f 72 64  from this record
135f0 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65 20  .  If there are 
13600 6c 65 73 73 20 74 68 61 74 20 28 50 32 2b 31 29  less that (P2+1)
13610 20 0a 2a 2a 20 76 61 6c 75 65 73 20 69 6e 20 74   .** values in t
13620 68 65 20 72 65 63 6f 72 64 2c 20 65 78 74 72 61  he record, extra
13630 63 74 20 61 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a  ct a NULL..**.**
13640 20 54 68 65 20 76 61 6c 75 65 20 65 78 74 72 61   The value extra
13650 63 74 65 64 20 69 73 20 73 74 6f 72 65 64 20 69  cted is stored i
13660 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
13670 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 6f 6c 75  *.** If the colu
13680 6d 6e 20 63 6f 6e 74 61 69 6e 73 20 66 65 77 65  mn contains fewe
13690 72 20 74 68 61 6e 20 50 32 20 66 69 65 6c 64 73  r than P2 fields
136a0 2c 20 74 68 65 6e 20 65 78 74 72 61 63 74 20 61  , then extract a
136b0 20 4e 55 4c 4c 2e 20 20 4f 72 2c 0a 2a 2a 20 69   NULL.  Or,.** i
136c0 66 20 74 68 65 20 50 34 20 61 72 67 75 6d 65 6e  f the P4 argumen
136d0 74 20 69 73 20 61 20 50 34 5f 4d 45 4d 20 75 73  t is a P4_MEM us
136e0 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  e the value of t
136f0 68 65 20 50 34 20 61 72 67 75 6d 65 6e 74 20 61  he P4 argument a
13700 73 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 2e  s.** the result.
13710 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
13720 46 4c 41 47 5f 43 4c 45 41 52 43 41 43 48 45 20  FLAG_CLEARCACHE 
13730 62 69 74 20 69 73 20 73 65 74 20 6f 6e 20 50 35  bit is set on P5
13740 20 61 6e 64 20 50 31 20 69 73 20 61 20 70 73 65   and P1 is a pse
13750 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f 72  udo-table cursor
13760 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 63 61  ,.** then the ca
13770 63 68 65 20 6f 66 20 74 68 65 20 63 75 72 73 6f  che of the curso
13780 72 20 69 73 20 72 65 73 65 74 20 70 72 69 6f 72  r is reset prior
13790 20 74 6f 20 65 78 74 72 61 63 74 69 6e 67 20 74   to extracting t
137a0 68 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 54 68  he column..** Th
137b0 65 20 66 69 72 73 74 20 4f 50 5f 43 6f 6c 75 6d  e first OP_Colum
137c0 6e 20 61 67 61 69 6e 73 74 20 61 20 70 73 65 75  n against a pseu
137d0 64 6f 2d 74 61 62 6c 65 20 61 66 74 65 72 20 74  do-table after t
137e0 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
137f0 63 6f 6e 74 65 6e 74 0a 2a 2a 20 72 65 67 69 73  content.** regis
13800 74 65 72 20 68 61 73 20 63 68 61 6e 67 65 64 20  ter has changed 
13810 73 68 6f 75 6c 64 20 68 61 76 65 20 74 68 69 73  should have this
13820 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20   bit set..**.** 
13830 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c 45  If the OPFLAG_LE
13840 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50 46 4c  NGTHARG and OPFL
13850 41 47 5f 54 59 50 45 4f 46 41 52 47 20 62 69 74  AG_TYPEOFARG bit
13860 73 20 61 72 65 20 73 65 74 20 6f 6e 20 50 35 20  s are set on P5 
13870 77 68 65 6e 0a 2a 2a 20 74 68 65 20 72 65 73 75  when.** the resu
13880 6c 74 20 69 73 20 67 75 61 72 61 6e 74 65 65 64  lt is guaranteed
13890 20 74 6f 20 6f 6e 6c 79 20 62 65 20 75 73 65 64   to only be used
138a0 20 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74   as the argument
138b0 20 6f 66 20 61 20 6c 65 6e 67 74 68 28 29 0a 2a   of a length().*
138c0 2a 20 6f 72 20 74 79 70 65 6f 66 28 29 20 66 75  * or typeof() fu
138d0 6e 63 74 69 6f 6e 2c 20 72 65 73 70 65 63 74 69  nction, respecti
138e0 76 65 6c 79 2e 20 20 54 68 65 20 6c 6f 61 64 69  vely.  The loadi
138f0 6e 67 20 6f 66 20 6c 61 72 67 65 20 62 6c 6f 62  ng of large blob
13900 73 20 63 61 6e 20 62 65 0a 2a 2a 20 73 6b 69 70  s can be.** skip
13910 70 65 64 20 66 6f 72 20 6c 65 6e 67 74 68 28 29  ped for length()
13920 20 61 6e 64 20 61 6c 6c 20 63 6f 6e 74 65 6e 74   and all content
13930 20 6c 6f 61 64 69 6e 67 20 63 61 6e 20 62 65 20   loading can be 
13940 73 6b 69 70 70 65 64 20 66 6f 72 20 74 79 70 65  skipped for type
13950 6f 66 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  of()..*/.case OP
13960 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 69 6e 74  _Column: {.  int
13970 20 70 32 3b 20 20 20 20 20 20 20 20 20 20 20 20   p2;            
13980 2f 2a 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  /* column number
13990 20 74 6f 20 72 65 74 72 69 65 76 65 20 2a 2f 0a   to retrieve */.
139a0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
139b0 3b 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45  ;    /* The VDBE
139c0 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 42 74 43   cursor */.  BtC
139d0 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 20 20 20  ursor *pCrsr;   
139e0 2f 2a 20 54 68 65 20 42 54 72 65 65 20 63 75 72  /* The BTree cur
139f0 73 6f 72 20 2a 2f 0a 20 20 75 33 32 20 2a 61 4f  sor */.  u32 *aO
13a00 66 66 73 65 74 3b 20 20 20 20 20 20 2f 2a 20 61  ffset;      /* a
13a10 4f 66 66 73 65 74 5b 69 5d 20 69 73 20 6f 66 66  Offset[i] is off
13a20 73 65 74 20 74 6f 20 73 74 61 72 74 20 6f 66 20  set to start of 
13a30 64 61 74 61 20 66 6f 72 20 69 2d 74 68 20 63 6f  data for i-th co
13a40 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 6c 65  lumn */.  int le
13a50 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  n;           /* 
13a60 54 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68  The length of th
13a70 65 20 73 65 72 69 61 6c 69 7a 65 64 20 64 61 74  e serialized dat
13a80 61 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e  a for the column
13a90 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20   */.  int i;    
13aa0 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70           /* Loop
13ab0 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 4d 65   counter */.  Me
13ac0 6d 20 2a 70 44 65 73 74 3b 20 20 20 20 20 20 20  m *pDest;       
13ad0 20 2f 2a 20 57 68 65 72 65 20 74 6f 20 77 72 69   /* Where to wri
13ae0 74 65 20 74 68 65 20 65 78 74 72 61 63 74 65 64  te the extracted
13af0 20 76 61 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d 20   value */.  Mem 
13b00 73 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f  sMem;          /
13b10 2a 20 46 6f 72 20 73 74 6f 72 69 6e 67 20 74 68  * For storing th
13b20 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64  e record being d
13b30 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73  ecoded */.  cons
13b40 74 20 75 38 20 2a 7a 44 61 74 61 3b 20 20 20 2f  t u8 *zData;   /
13b50 2a 20 50 61 72 74 20 6f 66 20 74 68 65 20 72 65  * Part of the re
13b60 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64  cord being decod
13b70 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38  ed */.  const u8
13b80 20 2a 7a 48 64 72 3b 20 20 20 20 2f 2a 20 4e 65   *zHdr;    /* Ne
13b90 78 74 20 75 6e 70 61 72 73 65 64 20 62 79 74 65  xt unparsed byte
13ba0 20 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 2a   of the header *
13bb0 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 45  /.  const u8 *zE
13bc0 6e 64 48 64 72 3b 20 2f 2a 20 50 6f 69 6e 74 65  ndHdr; /* Pointe
13bd0 72 20 74 6f 20 66 69 72 73 74 20 62 79 74 65 20  r to first byte 
13be0 61 66 74 65 72 20 74 68 65 20 68 65 61 64 65 72  after the header
13bf0 20 2a 2f 0a 20 20 75 33 32 20 6f 66 66 73 65 74   */.  u32 offset
13c00 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 66 66 73  ;        /* Offs
13c10 65 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61  et into the data
13c20 20 2a 2f 0a 20 20 75 36 34 20 6f 66 66 73 65 74   */.  u64 offset
13c30 36 34 3b 20 20 20 20 20 20 2f 2a 20 36 34 2d 62  64;      /* 64-b
13c40 69 74 20 6f 66 66 73 65 74 20 2a 2f 0a 20 20 75  it offset */.  u
13c50 33 32 20 61 76 61 69 6c 3b 20 20 20 20 20 20 20  32 avail;       
13c60 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
13c70 79 74 65 73 20 6f 66 20 61 76 61 69 6c 61 62 6c  ytes of availabl
13c80 65 20 64 61 74 61 20 2a 2f 0a 20 20 75 33 32 20  e data */.  u32 
13c90 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  t;             /
13ca0 2a 20 41 20 74 79 70 65 20 63 6f 64 65 20 66 72  * A type code fr
13cb0 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 20 68 65  om the record he
13cc0 61 64 65 72 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  ader */.  Mem *p
13cd0 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Reg;         /* 
13ce0 50 73 65 75 64 6f 54 61 62 6c 65 20 69 6e 70 75  PseudoTable inpu
13cf0 74 20 72 65 67 69 73 74 65 72 20 2a 2f 0a 0a 20  t register */.. 
13d00 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
13d10 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 32 20 3d 20  Op->p1];.  p2 = 
13d20 70 4f 70 2d 3e 70 32 3b 0a 0a 20 20 2f 2a 20 49  pOp->p2;..  /* I
13d30 66 20 74 68 65 20 63 75 72 73 6f 72 20 63 61 63  f the cursor cac
13d40 68 65 20 69 73 20 73 74 61 6c 65 2c 20 62 72 69  he is stale, bri
13d50 6e 67 20 69 74 20 75 70 2d 74 6f 2d 64 61 74 65  ng it up-to-date
13d60 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   */.  rc = sqlit
13d70 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
13d80 74 6f 28 26 70 43 2c 20 26 70 32 29 3b 0a 20 20  to(&pC, &p2);.  
13d90 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
13da0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
13db0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
13dc0 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p3>0 && pOp->p
13dd0 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  3<=(p->nMem+1 - 
13de0 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
13df0 20 70 44 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70   pDest = &aMem[p
13e00 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62  Op->p3];.  memAb
13e10 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
13e20 44 65 73 74 29 3b 0a 20 20 61 73 73 65 72 74 28  Dest);.  assert(
13e30 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
13e40 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
13e50 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
13e60 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
13e70 28 20 70 32 3c 70 43 2d 3e 6e 46 69 65 6c 64 20  ( p2<pC->nField 
13e80 29 3b 0a 20 20 61 4f 66 66 73 65 74 20 3d 20 70  );.  aOffset = p
13e90 43 2d 3e 61 4f 66 66 73 65 74 3b 0a 20 20 61 73  C->aOffset;.  as
13ea0 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
13eb0 70 65 21 3d 43 55 52 54 59 50 45 5f 56 54 41 42  pe!=CURTYPE_VTAB
13ec0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
13ed0 2d 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52 54  ->eCurType!=CURT
13ee0 59 50 45 5f 50 53 45 55 44 4f 20 7c 7c 20 70 43  YPE_PSEUDO || pC
13ef0 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20 20 61  ->nullRow );.  a
13f00 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
13f10 79 70 65 21 3d 43 55 52 54 59 50 45 5f 53 4f 52  ype!=CURTYPE_SOR
13f20 54 45 52 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  TER );.  pCrsr =
13f30 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b   pC->uc.pCursor;
13f40 0a 0a 20 20 69 66 28 20 70 43 2d 3e 63 61 63 68  ..  if( pC->cach
13f50 65 53 74 61 74 75 73 21 3d 70 2d 3e 63 61 63 68  eStatus!=p->cach
13f60 65 43 74 72 20 29 7b 20 20 20 20 20 20 20 20 20  eCtr ){         
13f70 20 20 20 20 20 20 20 2f 2a 4f 50 54 49 4d 49 5a         /*OPTIMIZ
13f80 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f  ATION-IF-FALSE*/
13f90 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c  .    if( pC->nul
13fa0 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20 20 69 66  lRow ){.      if
13fb0 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
13fc0 43 55 52 54 59 50 45 5f 50 53 45 55 44 4f 20 29  CURTYPE_PSEUDO )
13fd0 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
13fe0 28 20 70 43 2d 3e 75 63 2e 70 73 65 75 64 6f 54  ( pC->uc.pseudoT
13ff0 61 62 6c 65 52 65 67 3e 30 20 29 3b 0a 20 20 20  ableReg>0 );.   
14000 20 20 20 20 20 70 52 65 67 20 3d 20 26 61 4d 65       pReg = &aMe
14010 6d 5b 70 43 2d 3e 75 63 2e 70 73 65 75 64 6f 54  m[pC->uc.pseudoT
14020 61 62 6c 65 52 65 67 5d 3b 0a 20 20 20 20 20 20  ableReg];.      
14030 20 20 61 73 73 65 72 74 28 20 70 52 65 67 2d 3e    assert( pReg->
14040 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62  flags & MEM_Blob
14050 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
14060 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
14070 52 65 67 29 20 29 3b 0a 20 20 20 20 20 20 20 20  Reg) );.        
14080 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20  pC->payloadSize 
14090 3d 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 61 76  = pC->szRow = av
140a0 61 69 6c 20 3d 20 70 52 65 67 2d 3e 6e 3b 0a 20  ail = pReg->n;. 
140b0 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20         pC->aRow 
140c0 3d 20 28 75 38 2a 29 70 52 65 67 2d 3e 7a 3b 0a  = (u8*)pReg->z;.
140d0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
140e0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
140f0 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73 74  MemSetNull(pDest
14100 29 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  );.        goto 
14110 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20  op_column_out;. 
14120 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
14130 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
14140 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
14150 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
14160 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43 72       assert( pCr
14170 73 72 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  sr );.      asse
14180 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65  rt( sqlite3Btree
14190 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43  CursorIsValid(pC
141a0 72 73 72 29 20 29 3b 0a 20 20 20 20 20 20 70 43  rsr) );.      pC
141b0 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20  ->payloadSize = 
141c0 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 79 6c  sqlite3BtreePayl
141d0 6f 61 64 53 69 7a 65 28 70 43 72 73 72 29 3b 0a  oadSize(pCrsr);.
141e0 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d        pC->aRow =
141f0 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 79   sqlite3BtreePay
14200 6c 6f 61 64 46 65 74 63 68 28 70 43 72 73 72 2c  loadFetch(pCrsr,
14210 20 26 61 76 61 69 6c 29 3b 0a 20 20 20 20 20 20   &avail);.      
14220 61 73 73 65 72 74 28 20 61 76 61 69 6c 3c 3d 36  assert( avail<=6
14230 35 35 33 36 20 29 3b 20 20 2f 2a 20 4d 61 78 69  5536 );  /* Maxi
14240 6d 75 6d 20 70 61 67 65 20 73 69 7a 65 20 69 73  mum page size is
14250 20 36 34 4b 69 42 20 2a 2f 0a 20 20 20 20 20 20   64KiB */.      
14260 69 66 28 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53  if( pC->payloadS
14270 69 7a 65 20 3c 3d 20 28 75 33 32 29 61 76 61 69  ize <= (u32)avai
14280 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 70 43 2d  l ){.        pC-
14290 3e 73 7a 52 6f 77 20 3d 20 70 43 2d 3e 70 61 79  >szRow = pC->pay
142a0 6c 6f 61 64 53 69 7a 65 3b 0a 20 20 20 20 20 20  loadSize;.      
142b0 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 70 61  }else if( pC->pa
142c0 79 6c 6f 61 64 53 69 7a 65 20 3e 20 28 75 33 32  yloadSize > (u32
142d0 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  )db->aLimit[SQLI
142e0 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
142f0 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   ){.        goto
14300 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 20 20   too_big;.      
14310 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70  }else{.        p
14320 43 2d 3e 73 7a 52 6f 77 20 3d 20 61 76 61 69 6c  C->szRow = avail
14330 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
14340 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61      pC->cacheSta
14350 74 75 73 20 3d 20 70 2d 3e 63 61 63 68 65 43 74  tus = p->cacheCt
14360 72 3b 0a 20 20 20 20 70 43 2d 3e 69 48 64 72 4f  r;.    pC->iHdrO
14370 66 66 73 65 74 20 3d 20 67 65 74 56 61 72 69 6e  ffset = getVarin
14380 74 33 32 28 70 43 2d 3e 61 52 6f 77 2c 20 6f 66  t32(pC->aRow, of
14390 66 73 65 74 29 3b 0a 20 20 20 20 70 43 2d 3e 6e  fset);.    pC->n
143a0 48 64 72 50 61 72 73 65 64 20 3d 20 30 3b 0a 20  HdrParsed = 0;. 
143b0 20 20 20 61 4f 66 66 73 65 74 5b 30 5d 20 3d 20     aOffset[0] = 
143c0 6f 66 66 73 65 74 3b 0a 0a 0a 20 20 20 20 69 66  offset;...    if
143d0 28 20 61 76 61 69 6c 3c 6f 66 66 73 65 74 20 29  ( avail<offset )
143e0 7b 20 20 20 20 20 20 2f 2a 4f 50 54 49 4d 49 5a  {      /*OPTIMIZ
143f0 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f  ATION-IF-FALSE*/
14400 0a 20 20 20 20 20 20 2f 2a 20 70 43 2d 3e 61 52  .      /* pC->aR
14410 6f 77 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65  ow does not have
14420 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 65 6e 74   to hold the ent
14430 69 72 65 20 72 6f 77 2c 20 62 75 74 20 69 74 20  ire row, but it 
14440 64 6f 65 73 20 61 74 20 6c 65 61 73 74 0a 20 20  does at least.  
14450 20 20 20 20 2a 2a 20 6e 65 65 64 20 74 6f 20 63      ** need to c
14460 6f 76 65 72 20 74 68 65 20 68 65 61 64 65 72 20  over the header 
14470 6f 66 20 74 68 65 20 72 65 63 6f 72 64 2e 20 20  of the record.  
14480 49 66 20 70 43 2d 3e 61 52 6f 77 20 64 6f 65 73  If pC->aRow does
14490 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 0a 20 20 20   not contain.   
144a0 20 20 20 2a 2a 20 74 68 65 20 63 6f 6d 70 6c 65     ** the comple
144b0 74 65 20 68 65 61 64 65 72 2c 20 74 68 65 6e 20  te header, then 
144c0 73 65 74 20 69 74 20 74 6f 20 7a 65 72 6f 2c 20  set it to zero, 
144d0 66 6f 72 63 69 6e 67 20 74 68 65 20 68 65 61 64  forcing the head
144e0 65 72 20 74 6f 20 62 65 0a 20 20 20 20 20 20 2a  er to be.      *
144f0 2a 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c  * dynamically al
14500 6c 6f 63 61 74 65 64 2e 20 2a 2f 0a 20 20 20 20  located. */.    
14510 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 30 3b 0a    pC->aRow = 0;.
14520 20 20 20 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20        pC->szRow 
14530 3d 20 30 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 4d  = 0;..      /* M
14540 61 6b 65 20 73 75 72 65 20 61 20 63 6f 72 72 75  ake sure a corru
14550 70 74 20 64 61 74 61 62 61 73 65 20 68 61 73 20  pt database has 
14560 6e 6f 74 20 67 69 76 65 6e 20 75 73 20 61 6e 20  not given us an 
14570 6f 76 65 72 73 69 7a 65 20 68 65 61 64 65 72 2e  oversize header.
14580 0a 20 20 20 20 20 20 2a 2a 20 44 6f 20 74 68 69  .      ** Do thi
14590 73 20 6e 6f 77 20 74 6f 20 61 76 6f 69 64 20 61  s now to avoid a
145a0 6e 20 6f 76 65 72 73 69 7a 65 20 6d 65 6d 6f 72  n oversize memor
145b0 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 0a 20 20  y allocation..  
145c0 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20      **.      ** 
145d0 54 79 70 65 20 65 6e 74 72 69 65 73 20 63 61 6e  Type entries can
145e0 20 62 65 20 62 65 74 77 65 65 6e 20 31 20 61 6e   be between 1 an
145f0 64 20 35 20 62 79 74 65 73 20 65 61 63 68 2e 20  d 5 bytes each. 
14600 20 42 75 74 20 34 20 61 6e 64 20 35 20 62 79 74   But 4 and 5 byt
14610 65 0a 20 20 20 20 20 20 2a 2a 20 74 79 70 65 73  e.      ** types
14620 20 75 73 65 20 73 6f 20 6d 75 63 68 20 64 61 74   use so much dat
14630 61 20 73 70 61 63 65 20 74 68 61 74 20 74 68 65  a space that the
14640 72 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 34  re can only be 4
14650 30 39 36 20 61 6e 64 20 33 32 20 6f 66 0a 20 20  096 and 32 of.  
14660 20 20 20 20 2a 2a 20 74 68 65 6d 2c 20 72 65 73      ** them, res
14670 70 65 63 74 69 76 65 6c 79 2e 20 20 53 6f 20 74  pectively.  So t
14680 68 65 20 6d 61 78 69 6d 75 6d 20 68 65 61 64 65  he maximum heade
14690 72 20 6c 65 6e 67 74 68 20 72 65 73 75 6c 74 73  r length results
146a0 20 66 72 6f 6d 20 61 0a 20 20 20 20 20 20 2a 2a   from a.      **
146b0 20 33 2d 62 79 74 65 20 74 79 70 65 20 66 6f 72   3-byte type for
146c0 20 65 61 63 68 20 6f 66 20 74 68 65 20 6d 61 78   each of the max
146d0 69 6d 75 6d 20 6f 66 20 33 32 37 36 38 20 63 6f  imum of 32768 co
146e0 6c 75 6d 6e 73 20 70 6c 75 73 20 74 68 72 65 65  lumns plus three
146f0 0a 20 20 20 20 20 20 2a 2a 20 65 78 74 72 61 20  .      ** extra 
14700 62 79 74 65 73 20 66 6f 72 20 74 68 65 20 68 65  bytes for the he
14710 61 64 65 72 20 6c 65 6e 67 74 68 20 69 74 73 65  ader length itse
14720 6c 66 2e 20 20 33 32 37 36 38 2a 33 20 2b 20 33  lf.  32768*3 + 3
14730 20 3d 20 39 38 33 30 37 2e 0a 20 20 20 20 20 20   = 98307..      
14740 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 6f 66 66  */.      if( off
14750 73 65 74 20 3e 20 39 38 33 30 37 20 7c 7c 20 6f  set > 98307 || o
14760 66 66 73 65 74 20 3e 20 70 43 2d 3e 70 61 79 6c  ffset > pC->payl
14770 6f 61 64 53 69 7a 65 20 29 7b 0a 20 20 20 20 20  oadSize ){.     
14780 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43     rc = SQLITE_C
14790 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20  ORRUPT_BKPT;.   
147a0 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
147b0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
147c0 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 20      }.    }else 
147d0 69 66 28 20 6f 66 66 73 65 74 3e 30 20 29 7b 20  if( offset>0 ){ 
147e0 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49  /*OPTIMIZATION-I
147f0 46 2d 54 52 55 45 2a 2f 0a 20 20 20 20 20 20 2f  F-TRUE*/.      /
14800 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
14810 67 6f 74 6f 20 69 73 20 61 6e 20 6f 70 74 69 6d  goto is an optim
14820 69 7a 61 74 69 6f 6e 2e 20 20 49 74 20 63 61 6e  ization.  It can
14830 20 62 65 20 6f 6d 69 74 74 65 64 20 61 6e 64 0a   be omitted and.
14840 20 20 20 20 20 20 2a 2a 20 65 76 65 72 79 74 68        ** everyth
14850 69 6e 67 20 77 69 6c 6c 20 73 74 69 6c 6c 20 77  ing will still w
14860 6f 72 6b 2e 20 20 42 75 74 20 4f 50 5f 43 6f 6c  ork.  But OP_Col
14870 75 6d 6e 20 69 73 20 6d 65 61 73 75 72 61 62 6c  umn is measurabl
14880 79 20 66 61 73 74 65 72 0a 20 20 20 20 20 20 2a  y faster.      *
14890 2a 20 62 79 20 73 6b 69 70 70 69 6e 67 20 74 68  * by skipping th
148a0 65 20 73 75 62 73 65 71 75 65 6e 74 20 63 6f 6e  e subsequent con
148b0 64 69 74 69 6f 6e 61 6c 2c 20 77 68 69 63 68 20  ditional, which 
148c0 69 73 20 61 6c 77 61 79 73 20 74 72 75 65 2e 0a  is always true..
148d0 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 7a        */.      z
148e0 44 61 74 61 20 3d 20 70 43 2d 3e 61 52 6f 77 3b  Data = pC->aRow;
148f0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
14900 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d 70  C->nHdrParsed<=p
14910 32 20 29 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  2 );         /* 
14920 43 6f 6e 64 69 74 69 6f 6e 61 6c 20 73 6b 69 70  Conditional skip
14930 70 65 64 20 2a 2f 0a 20 20 20 20 20 20 67 6f 74  ped */.      got
14940 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 72 65 61 64  o op_column_read
14950 5f 68 65 61 64 65 72 3b 0a 20 20 20 20 7d 0a 20  _header;.    }. 
14960 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75   }..  /* Make su
14970 72 65 20 61 74 20 6c 65 61 73 74 20 74 68 65 20  re at least the 
14980 66 69 72 73 74 20 70 32 2b 31 20 65 6e 74 72 69  first p2+1 entri
14990 65 73 20 6f 66 20 74 68 65 20 68 65 61 64 65 72  es of the header
149a0 20 68 61 76 65 20 62 65 65 6e 0a 20 20 2a 2a 20   have been.  ** 
149b0 70 61 72 73 65 64 20 61 6e 64 20 76 61 6c 69 64  parsed and valid
149c0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20   information is 
149d0 69 6e 20 61 4f 66 66 73 65 74 5b 5d 20 61 6e 64  in aOffset[] and
149e0 20 70 43 2d 3e 61 54 79 70 65 5b 5d 2e 0a 20 20   pC->aType[]..  
149f0 2a 2f 0a 20 20 69 66 28 20 70 43 2d 3e 6e 48 64  */.  if( pC->nHd
14a00 72 50 61 72 73 65 64 3c 3d 70 32 20 29 7b 0a 20  rParsed<=p2 ){. 
14a10 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69     /* If there i
14a20 73 20 6d 6f 72 65 20 68 65 61 64 65 72 20 61 76  s more header av
14a30 61 69 6c 61 62 6c 65 20 66 6f 72 20 70 61 72 73  ailable for pars
14a40 69 6e 67 20 69 6e 20 74 68 65 20 72 65 63 6f 72  ing in the recor
14a50 64 2c 20 74 72 79 0a 20 20 20 20 2a 2a 20 74 6f  d, try.    ** to
14a60 20 65 78 74 72 61 63 74 20 61 64 64 69 74 69 6f   extract additio
14a70 6e 61 6c 20 66 69 65 6c 64 73 20 75 70 20 74 68  nal fields up th
14a80 72 6f 75 67 68 20 74 68 65 20 70 32 2b 31 2d 74  rough the p2+1-t
14a90 68 20 66 69 65 6c 64 20 0a 20 20 20 20 2a 2f 0a  h field .    */.
14aa0 20 20 20 20 69 66 28 20 70 43 2d 3e 69 48 64 72      if( pC->iHdr
14ab0 4f 66 66 73 65 74 3c 61 4f 66 66 73 65 74 5b 30  Offset<aOffset[0
14ac0 5d 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 4d 61  ] ){.      /* Ma
14ad0 6b 65 20 73 75 72 65 20 7a 44 61 74 61 20 70 6f  ke sure zData po
14ae0 69 6e 74 73 20 74 6f 20 65 6e 6f 75 67 68 20 6f  ints to enough o
14af0 66 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20  f the record to 
14b00 63 6f 76 65 72 20 74 68 65 20 68 65 61 64 65 72  cover the header
14b10 2e 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70  . */.      if( p
14b20 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 7b 0a 20 20  C->aRow==0 ){.  
14b30 20 20 20 20 20 20 6d 65 6d 73 65 74 28 26 73 4d        memset(&sM
14b40 65 6d 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 4d  em, 0, sizeof(sM
14b50 65 6d 29 29 3b 0a 20 20 20 20 20 20 20 20 72 63  em));.        rc
14b60 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   = sqlite3VdbeMe
14b70 6d 46 72 6f 6d 42 74 72 65 65 28 70 43 72 73 72  mFromBtree(pCrsr
14b80 2c 20 30 2c 20 61 4f 66 66 73 65 74 5b 30 5d 2c  , 0, aOffset[0],
14b90 20 21 70 43 2d 3e 69 73 54 61 62 6c 65 2c 20 26   !pC->isTable, &
14ba0 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 69  sMem);.        i
14bb0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
14bc0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
14bd0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
14be0 20 20 20 20 7a 44 61 74 61 20 3d 20 28 75 38 2a      zData = (u8*
14bf0 29 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 20 20 7d  )sMem.z;.      }
14c00 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 44  else{.        zD
14c10 61 74 61 20 3d 20 70 43 2d 3e 61 52 6f 77 3b 0a  ata = pC->aRow;.
14c20 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20        }.  .     
14c30 20 2f 2a 20 46 69 6c 6c 20 69 6e 20 70 43 2d 3e   /* Fill in pC->
14c40 61 54 79 70 65 5b 69 5d 20 61 6e 64 20 61 4f 66  aType[i] and aOf
14c50 66 73 65 74 5b 69 5d 20 76 61 6c 75 65 73 20 74  fset[i] values t
14c60 68 72 6f 75 67 68 20 74 68 65 20 70 32 2d 74 68  hrough the p2-th
14c70 20 66 69 65 6c 64 2e 20 2a 2f 0a 20 20 20 20 6f   field. */.    o
14c80 70 5f 63 6f 6c 75 6d 6e 5f 72 65 61 64 5f 68 65  p_column_read_he
14c90 61 64 65 72 3a 0a 20 20 20 20 20 20 69 20 3d 20  ader:.      i = 
14ca0 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 3b 0a  pC->nHdrParsed;.
14cb0 20 20 20 20 20 20 6f 66 66 73 65 74 36 34 20 3d        offset64 =
14cc0 20 61 4f 66 66 73 65 74 5b 69 5d 3b 0a 20 20 20   aOffset[i];.   
14cd0 20 20 20 7a 48 64 72 20 3d 20 7a 44 61 74 61 20     zHdr = zData 
14ce0 2b 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74  + pC->iHdrOffset
14cf0 3b 0a 20 20 20 20 20 20 7a 45 6e 64 48 64 72 20  ;.      zEndHdr 
14d00 3d 20 7a 44 61 74 61 20 2b 20 61 4f 66 66 73 65  = zData + aOffse
14d10 74 5b 30 5d 3b 0a 20 20 20 20 20 20 64 6f 7b 0a  t[0];.      do{.
14d20 20 20 20 20 20 20 20 20 69 66 28 20 28 74 20 3d          if( (t =
14d30 20 7a 48 64 72 5b 30 5d 29 3c 30 78 38 30 20 29   zHdr[0])<0x80 )
14d40 7b 0a 20 20 20 20 20 20 20 20 20 20 7a 48 64 72  {.          zHdr
14d50 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20 20 6f 66  ++;.          of
14d60 66 73 65 74 36 34 20 2b 3d 20 73 71 6c 69 74 65  fset64 += sqlite
14d70 33 56 64 62 65 4f 6e 65 42 79 74 65 53 65 72 69  3VdbeOneByteSeri
14d80 61 6c 54 79 70 65 4c 65 6e 28 74 29 3b 0a 20 20  alTypeLen(t);.  
14d90 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
14da0 20 20 20 20 20 20 20 7a 48 64 72 20 2b 3d 20 73         zHdr += s
14db0 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33  qlite3GetVarint3
14dc0 32 28 7a 48 64 72 2c 20 26 74 29 3b 0a 20 20 20  2(zHdr, &t);.   
14dd0 20 20 20 20 20 20 20 6f 66 66 73 65 74 36 34 20         offset64 
14de0 2b 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  += sqlite3VdbeSe
14df0 72 69 61 6c 54 79 70 65 4c 65 6e 28 74 29 3b 0a  rialTypeLen(t);.
14e00 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
14e10 20 20 70 43 2d 3e 61 54 79 70 65 5b 69 2b 2b 5d    pC->aType[i++]
14e20 20 3d 20 74 3b 0a 20 20 20 20 20 20 20 20 61 4f   = t;.        aO
14e30 66 66 73 65 74 5b 69 5d 20 3d 20 28 75 33 32 29  ffset[i] = (u32)
14e40 28 6f 66 66 73 65 74 36 34 20 26 20 30 78 66 66  (offset64 & 0xff
14e50 66 66 66 66 66 66 29 3b 0a 20 20 20 20 20 20 7d  ffffff);.      }
14e60 77 68 69 6c 65 28 20 69 3c 3d 70 32 20 26 26 20  while( i<=p2 && 
14e70 7a 48 64 72 3c 7a 45 6e 64 48 64 72 20 29 3b 0a  zHdr<zEndHdr );.
14e80 0a 20 20 20 20 20 20 2f 2a 20 54 68 65 20 72 65  .      /* The re
14e90 63 6f 72 64 20 69 73 20 63 6f 72 72 75 70 74 20  cord is corrupt 
14ea0 69 66 20 61 6e 79 20 6f 66 20 74 68 65 20 66 6f  if any of the fo
14eb0 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 72 75 65  llowing are true
14ec0 3a 0a 20 20 20 20 20 20 2a 2a 20 28 31 29 20 74  :.      ** (1) t
14ed0 68 65 20 62 79 74 65 73 20 6f 66 20 74 68 65 20  he bytes of the 
14ee0 68 65 61 64 65 72 20 65 78 74 65 6e 64 20 70 61  header extend pa
14ef0 73 74 20 74 68 65 20 64 65 63 6c 61 72 65 64 20  st the declared 
14f00 68 65 61 64 65 72 20 73 69 7a 65 0a 20 20 20 20  header size.    
14f10 20 20 2a 2a 20 28 32 29 20 74 68 65 20 65 6e 74    ** (2) the ent
14f20 69 72 65 20 68 65 61 64 65 72 20 77 61 73 20 75  ire header was u
14f30 73 65 64 20 62 75 74 20 6e 6f 74 20 61 6c 6c 20  sed but not all 
14f40 64 61 74 61 20 77 61 73 20 75 73 65 64 0a 20 20  data was used.  
14f50 20 20 20 20 2a 2a 20 28 33 29 20 74 68 65 20 65      ** (3) the e
14f60 6e 64 20 6f 66 20 74 68 65 20 64 61 74 61 20 65  nd of the data e
14f70 78 74 65 6e 64 73 20 62 65 79 6f 6e 64 20 74 68  xtends beyond th
14f80 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63  e end of the rec
14f90 6f 72 64 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  ord..      */.  
14fa0 20 20 20 20 69 66 28 20 28 7a 48 64 72 3e 3d 7a      if( (zHdr>=z
14fb0 45 6e 64 48 64 72 20 26 26 20 28 7a 48 64 72 3e  EndHdr && (zHdr>
14fc0 7a 45 6e 64 48 64 72 20 7c 7c 20 6f 66 66 73 65  zEndHdr || offse
14fd0 74 36 34 21 3d 70 43 2d 3e 70 61 79 6c 6f 61 64  t64!=pC->payload
14fe0 53 69 7a 65 29 29 0a 20 20 20 20 20 20 20 7c 7c  Size)).       ||
14ff0 20 28 6f 66 66 73 65 74 36 34 20 3e 20 70 43 2d   (offset64 > pC-
15000 3e 70 61 79 6c 6f 61 64 53 69 7a 65 29 0a 20 20  >payloadSize).  
15010 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 69      ){.        i
15020 66 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29  f( pC->aRow==0 )
15030 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
15040 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20  elease(&sMem);. 
15050 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
15060 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b  TE_CORRUPT_BKPT;
15070 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62  .        goto ab
15080 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
15090 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ;.      }..     
150a0 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 20   pC->nHdrParsed 
150b0 3d 20 69 3b 0a 20 20 20 20 20 20 70 43 2d 3e 69  = i;.      pC->i
150c0 48 64 72 4f 66 66 73 65 74 20 3d 20 28 75 33 32  HdrOffset = (u32
150d0 29 28 7a 48 64 72 20 2d 20 7a 44 61 74 61 29 3b  )(zHdr - zData);
150e0 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61  .      if( pC->a
150f0 52 6f 77 3d 3d 30 20 29 20 73 71 6c 69 74 65 33  Row==0 ) sqlite3
15100 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26  VdbeMemRelease(&
15110 73 4d 65 6d 29 3b 0a 20 20 20 20 7d 65 6c 73 65  sMem);.    }else
15120 7b 0a 20 20 20 20 20 20 74 20 3d 20 30 3b 0a 20  {.      t = 0;. 
15130 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 49 66 20     }..    /* If 
15140 61 66 74 65 72 20 74 72 79 69 6e 67 20 74 6f 20  after trying to 
15150 65 78 74 72 61 63 74 20 6e 65 77 20 65 6e 74 72  extract new entr
15160 69 65 73 20 66 72 6f 6d 20 74 68 65 20 68 65 61  ies from the hea
15170 64 65 72 2c 20 6e 48 64 72 50 61 72 73 65 64 20  der, nHdrParsed 
15180 69 73 0a 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20  is.    ** still 
15190 6e 6f 74 20 75 70 20 74 6f 20 70 32 2c 20 74 68  not up to p2, th
151a0 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  at means that th
151b0 65 20 72 65 63 6f 72 64 20 68 61 73 20 66 65 77  e record has few
151c0 65 72 20 74 68 61 6e 20 70 32 0a 20 20 20 20 2a  er than p2.    *
151d0 2a 20 63 6f 6c 75 6d 6e 73 2e 20 20 53 6f 20 74  * columns.  So t
151e0 68 65 20 72 65 73 75 6c 74 20 77 69 6c 6c 20 62  he result will b
151f0 65 20 65 69 74 68 65 72 20 74 68 65 20 64 65 66  e either the def
15200 61 75 6c 74 20 76 61 6c 75 65 20 6f 72 20 61 20  ault value or a 
15210 4e 55 4c 4c 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  NULL..    */.   
15220 20 69 66 28 20 70 43 2d 3e 6e 48 64 72 50 61 72   if( pC->nHdrPar
15230 73 65 64 3c 3d 70 32 20 29 7b 0a 20 20 20 20 20  sed<=p2 ){.     
15240 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65   if( pOp->p4type
15250 3d 3d 50 34 5f 4d 45 4d 20 29 7b 0a 20 20 20 20  ==P4_MEM ){.    
15260 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
15270 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 44  emShallowCopy(pD
15280 65 73 74 2c 20 70 4f 70 2d 3e 70 34 2e 70 4d 65  est, pOp->p4.pMe
15290 6d 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a  m, MEM_Static);.
152a0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
152b0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
152c0 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73 74  MemSetNull(pDest
152d0 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
152e0 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f   goto op_column_
152f0 6f 75 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  out;.    }.  }el
15300 73 65 7b 0a 20 20 20 20 74 20 3d 20 70 43 2d 3e  se{.    t = pC->
15310 61 54 79 70 65 5b 70 32 5d 3b 0a 20 20 7d 0a 0a  aType[p2];.  }..
15320 20 20 2f 2a 20 45 78 74 72 61 63 74 20 74 68 65    /* Extract the
15330 20 63 6f 6e 74 65 6e 74 20 66 6f 72 20 74 68 65   content for the
15340 20 70 32 2b 31 2d 74 68 20 63 6f 6c 75 6d 6e 2e   p2+1-th column.
15350 20 20 43 6f 6e 74 72 6f 6c 20 63 61 6e 20 6f 6e    Control can on
15360 6c 79 0a 20 20 2a 2a 20 72 65 61 63 68 20 74 68  ly.  ** reach th
15370 69 73 20 70 6f 69 6e 74 20 69 66 20 61 4f 66 66  is point if aOff
15380 73 65 74 5b 70 32 5d 2c 20 61 4f 66 66 73 65 74  set[p2], aOffset
15390 5b 70 32 2b 31 5d 2c 20 61 6e 64 20 70 43 2d 3e  [p2+1], and pC->
153a0 61 54 79 70 65 5b 70 32 5d 20 61 72 65 0a 20 20  aType[p2] are.  
153b0 2a 2a 20 61 6c 6c 20 76 61 6c 69 64 2e 0a 20 20  ** all valid..  
153c0 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 32 3c  */.  assert( p2<
153d0 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 20 29  pC->nHdrParsed )
153e0 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d  ;.  assert( rc==
153f0 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 61  SQLITE_OK );.  a
15400 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 56 64  ssert( sqlite3Vd
15410 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69  beCheckMemInvari
15420 61 6e 74 73 28 70 44 65 73 74 29 20 29 3b 0a 20  ants(pDest) );. 
15430 20 69 66 28 20 56 64 62 65 4d 65 6d 44 79 6e 61   if( VdbeMemDyna
15440 6d 69 63 28 70 44 65 73 74 29 20 29 7b 0a 20 20  mic(pDest) ){.  
15450 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
15460 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a  SetNull(pDest);.
15470 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 74 3d    }.  assert( t=
15480 3d 70 43 2d 3e 61 54 79 70 65 5b 70 32 5d 20 29  =pC->aType[p2] )
15490 3b 0a 20 20 69 66 28 20 70 43 2d 3e 73 7a 52 6f  ;.  if( pC->szRo
154a0 77 3e 3d 61 4f 66 66 73 65 74 5b 70 32 2b 31 5d  w>=aOffset[p2+1]
154b0 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20   ){.    /* This 
154c0 69 73 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61  is the common ca
154d0 73 65 20 77 68 65 72 65 20 74 68 65 20 64 65 73  se where the des
154e0 69 72 65 64 20 63 6f 6e 74 65 6e 74 20 66 69 74  ired content fit
154f0 73 20 6f 6e 20 74 68 65 20 6f 72 69 67 69 6e 61  s on the origina
15500 6c 0a 20 20 20 20 2a 2a 20 70 61 67 65 20 2d 20  l.    ** page - 
15510 77 68 65 72 65 20 74 68 65 20 63 6f 6e 74 65 6e  where the conten
15520 74 20 69 73 20 6e 6f 74 20 6f 6e 20 61 6e 20 6f  t is not on an o
15530 76 65 72 66 6c 6f 77 20 70 61 67 65 20 2a 2f 0a  verflow page */.
15540 20 20 20 20 7a 44 61 74 61 20 3d 20 70 43 2d 3e      zData = pC->
15550 61 52 6f 77 20 2b 20 61 4f 66 66 73 65 74 5b 70  aRow + aOffset[p
15560 32 5d 3b 0a 20 20 20 20 69 66 28 20 74 3c 31 32  2];.    if( t<12
15570 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
15580 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 7a  3VdbeSerialGet(z
15590 44 61 74 61 2c 20 74 2c 20 70 44 65 73 74 29 3b  Data, t, pDest);
155a0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
155b0 20 20 2f 2a 20 49 66 20 74 68 65 20 63 6f 6c 75    /* If the colu
155c0 6d 6e 20 76 61 6c 75 65 20 69 73 20 61 20 73 74  mn value is a st
155d0 72 69 6e 67 2c 20 77 65 20 6e 65 65 64 20 61 20  ring, we need a 
155e0 70 65 72 73 69 73 74 65 6e 74 20 76 61 6c 75 65  persistent value
155f0 2c 20 6e 6f 74 0a 20 20 20 20 20 20 2a 2a 20 61  , not.      ** a
15600 20 4d 45 4d 5f 45 70 68 65 6d 20 76 61 6c 75 65   MEM_Ephem value
15610 2e 20 20 54 68 69 73 20 62 72 61 6e 63 68 20 69  .  This branch i
15620 73 20 61 20 66 61 73 74 20 73 68 6f 72 74 2d 63  s a fast short-c
15630 75 74 20 74 68 61 74 20 69 73 20 65 71 75 69 76  ut that is equiv
15640 61 6c 65 6e 74 0a 20 20 20 20 20 20 2a 2a 20 74  alent.      ** t
15650 6f 20 63 61 6c 6c 69 6e 67 20 73 71 6c 69 74 65  o calling sqlite
15660 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 29  3VdbeSerialGet()
15670 20 61 6e 64 20 73 71 6c 69 74 65 33 56 64 62 65   and sqlite3Vdbe
15680 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 29  Deephemeralize()
15690 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
156a0 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 31   static const u1
156b0 36 20 61 46 6c 61 67 5b 5d 20 3d 20 7b 20 4d 45  6 aFlag[] = { ME
156c0 4d 5f 42 6c 6f 62 2c 20 4d 45 4d 5f 53 74 72 7c  M_Blob, MEM_Str|
156d0 4d 45 4d 5f 54 65 72 6d 20 7d 3b 0a 20 20 20 20  MEM_Term };.    
156e0 20 20 70 44 65 73 74 2d 3e 6e 20 3d 20 6c 65 6e    pDest->n = len
156f0 20 3d 20 28 74 2d 31 32 29 2f 32 3b 0a 20 20 20   = (t-12)/2;.   
15700 20 20 20 70 44 65 73 74 2d 3e 65 6e 63 20 3d 20     pDest->enc = 
15710 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 20 20 20 20  encoding;.      
15720 69 66 28 20 70 44 65 73 74 2d 3e 73 7a 4d 61 6c  if( pDest->szMal
15730 6c 6f 63 20 3c 20 6c 65 6e 2b 32 20 29 7b 0a 20  loc < len+2 ){. 
15740 20 20 20 20 20 20 20 70 44 65 73 74 2d 3e 66 6c         pDest->fl
15750 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
15760 20 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69          if( sqli
15770 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70  te3VdbeMemGrow(p
15780 44 65 73 74 2c 20 6c 65 6e 2b 32 2c 20 30 29 20  Dest, len+2, 0) 
15790 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
157a0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
157b0 20 20 20 20 70 44 65 73 74 2d 3e 7a 20 3d 20 70      pDest->z = p
157c0 44 65 73 74 2d 3e 7a 4d 61 6c 6c 6f 63 3b 0a 20  Dest->zMalloc;. 
157d0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 6d 65 6d       }.      mem
157e0 63 70 79 28 70 44 65 73 74 2d 3e 7a 2c 20 7a 44  cpy(pDest->z, zD
157f0 61 74 61 2c 20 6c 65 6e 29 3b 0a 20 20 20 20 20  ata, len);.     
15800 20 70 44 65 73 74 2d 3e 7a 5b 6c 65 6e 5d 20 3d   pDest->z[len] =
15810 20 30 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d   0;.      pDest-
15820 3e 7a 5b 6c 65 6e 2b 31 5d 20 3d 20 30 3b 0a 20  >z[len+1] = 0;. 
15830 20 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67       pDest->flag
15840 73 20 3d 20 61 46 6c 61 67 5b 74 26 31 5d 3b 0a  s = aFlag[t&1];.
15850 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
15860 20 20 20 70 44 65 73 74 2d 3e 65 6e 63 20 3d 20     pDest->enc = 
15870 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 20 20 2f 2a  encoding;.    /*
15880 20 54 68 69 73 20 62 72 61 6e 63 68 20 68 61 70   This branch hap
15890 70 65 6e 73 20 6f 6e 6c 79 20 77 68 65 6e 20 63  pens only when c
158a0 6f 6e 74 65 6e 74 20 69 73 20 6f 6e 20 6f 76 65  ontent is on ove
158b0 72 66 6c 6f 77 20 70 61 67 65 73 20 2a 2f 0a 20  rflow pages */. 
158c0 20 20 20 69 66 28 20 28 28 70 4f 70 2d 3e 70 35     if( ((pOp->p5
158d0 20 26 20 28 4f 50 46 4c 41 47 5f 4c 45 4e 47 54   & (OPFLAG_LENGT
158e0 48 41 52 47 7c 4f 50 46 4c 41 47 5f 54 59 50 45  HARG|OPFLAG_TYPE
158f0 4f 46 41 52 47 29 29 21 3d 30 0a 20 20 20 20 20  OFARG))!=0.     
15900 20 20 20 20 20 26 26 20 28 28 74 3e 3d 31 32 20       && ((t>=12 
15910 26 26 20 28 74 26 31 29 3d 3d 30 29 20 7c 7c 20  && (t&1)==0) || 
15920 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
15930 47 5f 54 59 50 45 4f 46 41 52 47 29 21 3d 30 29  G_TYPEOFARG)!=0)
15940 29 0a 20 20 20 20 20 7c 7c 20 28 6c 65 6e 20 3d  ).     || (len =
15950 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
15960 61 6c 54 79 70 65 4c 65 6e 28 74 29 29 3d 3d 30  alTypeLen(t))==0
15970 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 2f 2a  .    ){.      /*
15980 20 43 6f 6e 74 65 6e 74 20 69 73 20 69 72 72 65   Content is irre
15990 6c 65 76 61 6e 74 20 66 6f 72 0a 20 20 20 20 20  levant for.     
159a0 20 2a 2a 20 20 20 20 31 2e 20 74 68 65 20 74 79   **    1. the ty
159b0 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 2c  peof() function,
159c0 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 32 2e 20  .      **    2. 
159d0 74 68 65 20 6c 65 6e 67 74 68 28 58 29 20 66 75  the length(X) fu
159e0 6e 63 74 69 6f 6e 20 69 66 20 58 20 69 73 20 61  nction if X is a
159f0 20 62 6c 6f 62 2c 20 61 6e 64 0a 20 20 20 20 20   blob, and.     
15a00 20 2a 2a 20 20 20 20 33 2e 20 69 66 20 74 68 65   **    3. if the
15a10 20 63 6f 6e 74 65 6e 74 20 6c 65 6e 67 74 68 20   content length 
15a20 69 73 20 7a 65 72 6f 2e 0a 20 20 20 20 20 20 2a  is zero..      *
15a30 2a 20 53 6f 20 77 65 20 6d 69 67 68 74 20 61 73  * So we might as
15a40 20 77 65 6c 6c 20 75 73 65 20 62 6f 67 75 73 20   well use bogus 
15a50 63 6f 6e 74 65 6e 74 20 72 61 74 68 65 72 20 74  content rather t
15a60 68 61 6e 20 72 65 61 64 69 6e 67 0a 20 20 20 20  han reading.    
15a70 20 20 2a 2a 20 63 6f 6e 74 65 6e 74 20 66 72 6f    ** content fro
15a80 6d 20 64 69 73 6b 2e 20 2a 2f 0a 20 20 20 20 20  m disk. */.     
15a90 20 73 74 61 74 69 63 20 75 38 20 61 5a 65 72 6f   static u8 aZero
15aa0 5b 38 5d 3b 20 20 2f 2a 20 54 68 69 73 20 69 73  [8];  /* This is
15ab0 20 74 68 65 20 62 6f 67 75 73 20 63 6f 6e 74 65   the bogus conte
15ac0 6e 74 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69  nt */.      sqli
15ad0 74 65 33 56 64 62 65 53 65 72 69 61 6c 47 65 74  te3VdbeSerialGet
15ae0 28 61 5a 65 72 6f 2c 20 74 2c 20 70 44 65 73 74  (aZero, t, pDest
15af0 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
15b00 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
15b10 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65  VdbeMemFromBtree
15b20 28 70 43 72 73 72 2c 20 61 4f 66 66 73 65 74 5b  (pCrsr, aOffset[
15b30 70 32 5d 2c 20 6c 65 6e 2c 20 21 70 43 2d 3e 69  p2], len, !pC->i
15b40 73 54 61 62 6c 65 2c 0a 20 20 20 20 20 20 20 20  sTable,.        
15b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b60 20 20 20 20 20 20 20 20 20 20 20 70 44 65 73 74             pDest
15b70 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21  );.      if( rc!
15b80 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74  =SQLITE_OK ) got
15b90 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
15ba0 72 72 6f 72 3b 0a 20 20 20 20 20 20 73 71 6c 69  rror;.      sqli
15bb0 74 65 33 56 64 62 65 53 65 72 69 61 6c 47 65 74  te3VdbeSerialGet
15bc0 28 28 63 6f 6e 73 74 20 75 38 2a 29 70 44 65 73  ((const u8*)pDes
15bd0 74 2d 3e 7a 2c 20 74 2c 20 70 44 65 73 74 29 3b  t->z, t, pDest);
15be0 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e 66 6c  .      pDest->fl
15bf0 61 67 73 20 26 3d 20 7e 4d 45 4d 5f 45 70 68 65  ags &= ~MEM_Ephe
15c00 6d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 6f 70  m;.    }.  }..op
15c10 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3a 0a 20 20 55  _column_out:.  U
15c20 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
15c30 5a 45 28 70 44 65 73 74 29 3b 0a 20 20 52 45 47  ZE(pDest);.  REG
15c40 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
15c50 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 62  >p3, pDest);.  b
15c60 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
15c70 64 65 3a 20 41 66 66 69 6e 69 74 79 20 50 31 20  de: Affinity P1 
15c80 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  P2 * P4 *.** Syn
15c90 6f 70 73 69 73 3a 20 61 66 66 69 6e 69 74 79 28  opsis: affinity(
15ca0 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20  r[P1@P2]).**.** 
15cb0 41 70 70 6c 79 20 61 66 66 69 6e 69 74 69 65 73  Apply affinities
15cc0 20 74 6f 20 61 20 72 61 6e 67 65 20 6f 66 20 50   to a range of P
15cd0 32 20 72 65 67 69 73 74 65 72 73 20 73 74 61 72  2 registers star
15ce0 74 69 6e 67 20 77 69 74 68 20 50 31 2e 0a 2a 2a  ting with P1..**
15cf0 0a 2a 2a 20 50 34 20 69 73 20 61 20 73 74 72 69  .** P4 is a stri
15d00 6e 67 20 74 68 61 74 20 69 73 20 50 32 20 63 68  ng that is P2 ch
15d10 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 54  aracters long. T
15d20 68 65 20 6e 74 68 20 63 68 61 72 61 63 74 65 72  he nth character
15d30 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e   of the.** strin
15d40 67 20 69 6e 64 69 63 61 74 65 73 20 74 68 65 20  g indicates the 
15d50 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20  column affinity 
15d60 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75  that should be u
15d70 73 65 64 20 66 6f 72 20 74 68 65 20 6e 74 68 0a  sed for the nth.
15d80 2a 2a 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69  ** memory cell i
15d90 6e 20 74 68 65 20 72 61 6e 67 65 2e 0a 2a 2f 0a  n the range..*/.
15da0 63 61 73 65 20 4f 50 5f 41 66 66 69 6e 69 74 79  case OP_Affinity
15db0 3a 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  : {.  const char
15dc0 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 2f   *zAffinity;   /
15dd0 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 74  * The affinity t
15de0 6f 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a  o be applied */.
15df0 20 20 63 68 61 72 20 63 41 66 66 3b 20 20 20 20    char cAff;    
15e00 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20             /* A 
15e10 73 69 6e 67 6c 65 20 63 68 61 72 61 63 74 65 72  single character
15e20 20 6f 66 20 61 66 66 69 6e 69 74 79 20 2a 2f 0a   of affinity */.
15e30 0a 20 20 7a 41 66 66 69 6e 69 74 79 20 3d 20 70  .  zAffinity = p
15e40 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73 65  Op->p4.z;.  asse
15e50 72 74 28 20 7a 41 66 66 69 6e 69 74 79 21 3d 30  rt( zAffinity!=0
15e60 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 41   );.  assert( zA
15e70 66 66 69 6e 69 74 79 5b 70 4f 70 2d 3e 70 32 5d  ffinity[pOp->p2]
15e80 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20  ==0 );.  pIn1 = 
15e90 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
15ea0 20 20 77 68 69 6c 65 28 20 28 63 41 66 66 20 3d    while( (cAff =
15eb0 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29 29   *(zAffinity++))
15ec0 21 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72  !=0 ){.    asser
15ed0 74 28 20 70 49 6e 31 20 3c 3d 20 26 70 2d 3e 61  t( pIn1 <= &p->a
15ee0 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  Mem[(p->nMem+1 -
15ef0 20 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b   p->nCursor)] );
15f00 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
15f10 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b  IsValid(pIn1) );
15f20 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69  .    applyAffini
15f30 74 79 28 70 49 6e 31 2c 20 63 41 66 66 2c 20 65  ty(pIn1, cAff, e
15f40 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 70 49  ncoding);.    pI
15f50 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61  n1++;.  }.  brea
15f60 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
15f70 20 4d 61 6b 65 52 65 63 6f 72 64 20 50 31 20 50   MakeRecord P1 P
15f80 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
15f90 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 6d 6b 72  opsis: r[P3]=mkr
15fa0 65 63 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a  ec(r[P1@P2]).**.
15fb0 2a 2a 20 43 6f 6e 76 65 72 74 20 50 32 20 72 65  ** Convert P2 re
15fc0 67 69 73 74 65 72 73 20 62 65 67 69 6e 6e 69 6e  gisters beginnin
15fd0 67 20 77 69 74 68 20 50 31 20 69 6e 74 6f 20 74  g with P1 into t
15fe0 68 65 20 5b 72 65 63 6f 72 64 20 66 6f 72 6d 61  he [record forma
15ff0 74 5d 0a 2a 2a 20 75 73 65 20 61 73 20 61 20 64  t].** use as a d
16000 61 74 61 20 72 65 63 6f 72 64 20 69 6e 20 61 20  ata record in a 
16010 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f  database table o
16020 72 20 61 73 20 61 20 6b 65 79 0a 2a 2a 20 69 6e  r as a key.** in
16030 20 61 6e 20 69 6e 64 65 78 2e 20 20 54 68 65 20   an index.  The 
16040 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65  OP_Column opcode
16050 20 63 61 6e 20 64 65 63 6f 64 65 20 74 68 65 20   can decode the 
16060 72 65 63 6f 72 64 20 6c 61 74 65 72 2e 0a 2a 2a  record later..**
16070 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20  .** P4 may be a 
16080 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20 50  string that is P
16090 32 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e  2 characters lon
160a0 67 2e 20 20 54 68 65 20 6e 74 68 20 63 68 61 72  g.  The nth char
160b0 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20  acter of the.** 
160c0 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73  string indicates
160d0 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69   the column affi
160e0 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64  nity that should
160f0 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65   be used for the
16100 20 6e 74 68 0a 2a 2a 20 66 69 65 6c 64 20 6f 66   nth.** field of
16110 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79 2e 0a   the index key..
16120 2a 2a 0a 2a 2a 20 54 68 65 20 6d 61 70 70 69 6e  **.** The mappin
16130 67 20 66 72 6f 6d 20 63 68 61 72 61 63 74 65 72  g from character
16140 20 74 6f 20 61 66 66 69 6e 69 74 79 20 69 73 20   to affinity is 
16150 67 69 76 65 6e 20 62 79 20 74 68 65 20 53 51 4c  given by the SQL
16160 49 54 45 5f 41 46 46 5f 0a 2a 2a 20 6d 61 63 72  ITE_AFF_.** macr
16170 6f 73 20 64 65 66 69 6e 65 64 20 69 6e 20 73 71  os defined in sq
16180 6c 69 74 65 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a  liteInt.h..**.**
16190 20 49 66 20 50 34 20 69 73 20 4e 55 4c 4c 20 74   If P4 is NULL t
161a0 68 65 6e 20 61 6c 6c 20 69 6e 64 65 78 20 66 69  hen all index fi
161b0 65 6c 64 73 20 68 61 76 65 20 74 68 65 20 61 66  elds have the af
161c0 66 69 6e 69 74 79 20 42 4c 4f 42 2e 0a 2a 2f 0a  finity BLOB..*/.
161d0 63 61 73 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f  case OP_MakeReco
161e0 72 64 3a 20 7b 0a 20 20 75 38 20 2a 7a 4e 65 77  rd: {.  u8 *zNew
161f0 52 65 63 6f 72 64 3b 20 20 20 20 20 20 20 20 2f  Record;        /
16200 2a 20 41 20 62 75 66 66 65 72 20 74 6f 20 68 6f  * A buffer to ho
16210 6c 64 20 74 68 65 20 64 61 74 61 20 66 6f 72 20  ld the data for 
16220 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a  the new record *
16230 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 20 20  /.  Mem *pRec;  
16240 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
16250 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a  e new record */.
16260 20 20 75 36 34 20 6e 44 61 74 61 3b 20 20 20 20    u64 nData;    
16270 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
16280 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64  er of bytes of d
16290 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 69  ata space */.  i
162a0 6e 74 20 6e 48 64 72 3b 20 20 20 20 20 20 20 20  nt nHdr;        
162b0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
162c0 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61 64  of bytes of head
162d0 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 36  er space */.  i6
162e0 34 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20  4 nByte;        
162f0 20 20 20 20 20 2f 2a 20 44 61 74 61 20 73 70 61       /* Data spa
16300 63 65 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  ce required for 
16310 74 68 69 73 20 72 65 63 6f 72 64 20 2a 2f 0a 20  this record */. 
16320 20 69 36 34 20 6e 5a 65 72 6f 3b 20 20 20 20 20   i64 nZero;     
16330 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
16340 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73 20  r of zero bytes 
16350 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
16360 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
16370 74 20 6e 56 61 72 69 6e 74 3b 20 20 20 20 20 20  t nVarint;      
16380 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
16390 66 20 62 79 74 65 73 20 69 6e 20 61 20 76 61 72  f bytes in a var
163a0 69 6e 74 20 2a 2f 0a 20 20 75 33 32 20 73 65 72  int */.  u32 ser
163b0 69 61 6c 5f 74 79 70 65 3b 20 20 20 20 20 20 20  ial_type;       
163c0 2f 2a 20 54 79 70 65 20 66 69 65 6c 64 20 2a 2f  /* Type field */
163d0 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 30 3b 20  .  Mem *pData0; 
163e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
163f0 73 74 20 66 69 65 6c 64 20 74 6f 20 62 65 20 63  st field to be c
16400 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20 74 68 65  ombined into the
16410 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d   record */.  Mem
16420 20 2a 70 4c 61 73 74 3b 20 20 20 20 20 20 20 20   *pLast;        
16430 20 20 20 20 2f 2a 20 4c 61 73 74 20 66 69 65 6c      /* Last fiel
16440 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  d of the record 
16450 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b  */.  int nField;
16460 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
16470 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20  umber of fields 
16480 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  in the record */
16490 0a 20 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69  .  char *zAffini
164a0 74 79 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ty;       /* The
164b0 20 61 66 66 69 6e 69 74 79 20 73 74 72 69 6e 67   affinity string
164c0 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20   for the record 
164d0 2a 2f 0a 20 20 69 6e 74 20 66 69 6c 65 5f 66 6f  */.  int file_fo
164e0 72 6d 61 74 3b 20 20 20 20 20 20 20 2f 2a 20 46  rmat;       /* F
164f0 69 6c 65 20 66 6f 72 6d 61 74 20 74 6f 20 75 73  ile format to us
16500 65 20 66 6f 72 20 65 6e 63 6f 64 69 6e 67 20 2a  e for encoding *
16510 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20  /.  int i;      
16520 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70             /* Sp
16530 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65 77  ace used in zNew
16540 52 65 63 6f 72 64 5b 5d 20 68 65 61 64 65 72 20  Record[] header 
16550 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20 20  */.  int j;     
16560 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
16570 70 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65  pace used in zNe
16580 77 52 65 63 6f 72 64 5b 5d 20 63 6f 6e 74 65 6e  wRecord[] conten
16590 74 20 2a 2f 0a 20 20 75 33 32 20 6c 65 6e 3b 20  t */.  u32 len; 
165a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
165b0 20 4c 65 6e 67 74 68 20 6f 66 20 61 20 66 69 65   Length of a fie
165c0 6c 64 20 2a 2f 0a 0a 20 20 2f 2a 20 41 73 73 75  ld */..  /* Assu
165d0 6d 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20  ming the record 
165e0 63 6f 6e 74 61 69 6e 73 20 4e 20 66 69 65 6c 64  contains N field
165f0 73 2c 20 74 68 65 20 72 65 63 6f 72 64 20 66 6f  s, the record fo
16600 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20  rmat looks.  ** 
16610 6c 69 6b 65 20 74 68 69 73 3a 0a 20 20 2a 2a 0a  like this:.  **.
16620 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d    ** -----------
16630 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16640 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16650 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16660 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20  -------------.  
16670 2a 2a 20 7c 20 68 64 72 2d 73 69 7a 65 20 7c 20  ** | hdr-size | 
16680 74 79 70 65 20 30 20 7c 20 74 79 70 65 20 31 20  type 0 | type 1 
16690 7c 20 2e 2e 2e 20 7c 20 74 79 70 65 20 4e 2d 31  | ... | type N-1
166a0 20 7c 20 64 61 74 61 30 20 7c 20 2e 2e 2e 20 7c   | data0 | ... |
166b0 20 64 61 74 61 20 4e 2d 31 20 7c 20 0a 20 20 2a   data N-1 | .  *
166c0 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  * --------------
166d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
166e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
166f0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16700 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a  ----------.  **.
16710 20 20 2a 2a 20 44 61 74 61 28 30 29 20 69 73 20    ** Data(0) is 
16720 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73  taken from regis
16730 74 65 72 20 50 31 2e 20 20 44 61 74 61 28 31 29  ter P1.  Data(1)
16740 20 63 6f 6d 65 73 20 66 72 6f 6d 20 72 65 67 69   comes from regi
16750 73 74 65 72 20 50 31 2b 31 0a 20 20 2a 2a 20 61  ster P1+1.  ** a
16760 6e 64 20 73 6f 20 66 6f 72 74 68 2e 0a 20 20 2a  nd so forth..  *
16770 2a 0a 20 20 2a 2a 20 45 61 63 68 20 74 79 70 65  *.  ** Each type
16780 20 66 69 65 6c 64 20 69 73 20 61 20 76 61 72 69   field is a vari
16790 6e 74 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20  nt representing 
167a0 74 68 65 20 73 65 72 69 61 6c 20 74 79 70 65 20  the serial type 
167b0 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20 63 6f 72  of the .  ** cor
167c0 72 65 73 70 6f 6e 64 69 6e 67 20 64 61 74 61 20  responding data 
167d0 65 6c 65 6d 65 6e 74 20 28 73 65 65 20 73 71 6c  element (see sql
167e0 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
167f0 70 65 28 29 29 2e 20 54 68 65 0a 20 20 2a 2a 20  pe()). The.  ** 
16800 68 64 72 2d 73 69 7a 65 20 66 69 65 6c 64 20 69  hdr-size field i
16810 73 20 61 6c 73 6f 20 61 20 76 61 72 69 6e 74 20  s also a varint 
16820 77 68 69 63 68 20 69 73 20 74 68 65 20 6f 66 66  which is the off
16830 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67  set from the beg
16840 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66 20 74  inning.  ** of t
16850 68 65 20 72 65 63 6f 72 64 20 74 6f 20 64 61 74  he record to dat
16860 61 30 2e 0a 20 20 2a 2f 0a 20 20 6e 44 61 74 61  a0..  */.  nData
16870 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a   = 0;         /*
16880 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
16890 20 6f 66 20 64 61 74 61 20 73 70 61 63 65 20 2a   of data space *
168a0 2f 0a 20 20 6e 48 64 72 20 3d 20 30 3b 20 20 20  /.  nHdr = 0;   
168b0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
168c0 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61   of bytes of hea
168d0 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e  der space */.  n
168e0 5a 65 72 6f 20 3d 20 30 3b 20 20 20 20 20 20 20  Zero = 0;       
168f0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a    /* Number of z
16900 65 72 6f 20 62 79 74 65 73 20 61 74 20 74 68 65  ero bytes at the
16910 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f   end of the reco
16920 72 64 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20 3d  rd */.  nField =
16930 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41 66 66   pOp->p1;.  zAff
16940 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e  inity = pOp->p4.
16950 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69  z;.  assert( nFi
16960 65 6c 64 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32  eld>0 && pOp->p2
16970 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 46  >0 && pOp->p2+nF
16980 69 65 6c 64 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ield<=(p->nMem+1
16990 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31   - p->nCursor)+1
169a0 20 29 3b 0a 20 20 70 44 61 74 61 30 20 3d 20 26   );.  pData0 = &
169b0 61 4d 65 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20  aMem[nField];.  
169c0 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 32  nField = pOp->p2
169d0 3b 0a 20 20 70 4c 61 73 74 20 3d 20 26 70 44 61  ;.  pLast = &pDa
169e0 74 61 30 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20  ta0[nField-1];. 
169f0 20 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70   file_format = p
16a00 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f  ->minWriteFileFo
16a10 72 6d 61 74 3b 0a 0a 20 20 2f 2a 20 49 64 65 6e  rmat;..  /* Iden
16a20 74 69 66 79 20 74 68 65 20 6f 75 74 70 75 74 20  tify the output 
16a30 72 65 67 69 73 74 65 72 20 2a 2f 0a 20 20 61 73  register */.  as
16a40 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f  sert( pOp->p3<pO
16a50 70 2d 3e 70 31 20 7c 7c 20 70 4f 70 2d 3e 70 33  p->p1 || pOp->p3
16a60 3e 3d 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70  >=pOp->p1+pOp->p
16a70 32 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  2 );.  pOut = &a
16a80 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
16a90 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
16aa0 28 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a  (p, pOut);..  /*
16ab0 20 41 70 70 6c 79 20 74 68 65 20 72 65 71 75 65   Apply the reque
16ac0 73 74 65 64 20 61 66 66 69 6e 69 74 79 20 74 6f  sted affinity to
16ad0 20 61 6c 6c 20 69 6e 70 75 74 73 0a 20 20 2a 2f   all inputs.  */
16ae0 0a 20 20 61 73 73 65 72 74 28 20 70 44 61 74 61  .  assert( pData
16af0 30 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 69 66  0<=pLast );.  if
16b00 28 20 7a 41 66 66 69 6e 69 74 79 20 29 7b 0a 20  ( zAffinity ){. 
16b10 20 20 20 70 52 65 63 20 3d 20 70 44 61 74 61 30     pRec = pData0
16b20 3b 0a 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20  ;.    do{.      
16b30 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 52  applyAffinity(pR
16b40 65 63 2b 2b 2c 20 2a 28 7a 41 66 66 69 6e 69 74  ec++, *(zAffinit
16b50 79 2b 2b 29 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  y++), encoding);
16b60 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 7a  .      assert( z
16b70 41 66 66 69 6e 69 74 79 5b 30 5d 3d 3d 30 20 7c  Affinity[0]==0 |
16b80 7c 20 70 52 65 63 3c 3d 70 4c 61 73 74 20 29 3b  | pRec<=pLast );
16b90 0a 20 20 20 20 7d 77 68 69 6c 65 28 20 7a 41 66  .    }while( zAf
16ba0 66 69 6e 69 74 79 5b 30 5d 20 29 3b 0a 20 20 7d  finity[0] );.  }
16bb0 0a 0a 20 20 2f 2a 20 4c 6f 6f 70 20 74 68 72 6f  ..  /* Loop thro
16bc0 75 67 68 20 74 68 65 20 65 6c 65 6d 65 6e 74 73  ugh the elements
16bd0 20 74 68 61 74 20 77 69 6c 6c 20 6d 61 6b 65 20   that will make 
16be0 75 70 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f  up the record to
16bf0 20 66 69 67 75 72 65 0a 20 20 2a 2a 20 6f 75 74   figure.  ** out
16c00 20 68 6f 77 20 6d 75 63 68 20 73 70 61 63 65 20   how much space 
16c10 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  is required for 
16c20 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 2e 0a  the new record..
16c30 20 20 2a 2f 0a 20 20 70 52 65 63 20 3d 20 70 4c    */.  pRec = pL
16c40 61 73 74 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 61  ast;.  do{.    a
16c50 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
16c60 64 28 70 52 65 63 29 20 29 3b 0a 20 20 20 20 70  d(pRec) );.    p
16c70 52 65 63 2d 3e 75 54 65 6d 70 20 3d 20 73 65 72  Rec->uTemp = ser
16c80 69 61 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69 74  ial_type = sqlit
16c90 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65  e3VdbeSerialType
16ca0 28 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d  (pRec, file_form
16cb0 61 74 2c 20 26 6c 65 6e 29 3b 0a 20 20 20 20 69  at, &len);.    i
16cc0 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26  f( pRec->flags &
16cd0 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20   MEM_Zero ){.   
16ce0 20 20 20 69 66 28 20 6e 44 61 74 61 20 29 7b 0a     if( nData ){.
16cf0 20 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69          if( sqli
16d00 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64  te3VdbeMemExpand
16d10 42 6c 6f 62 28 70 52 65 63 29 20 29 20 67 6f 74  Blob(pRec) ) got
16d20 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20 20  o no_mem;.      
16d30 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 6e  }else{.        n
16d40 5a 65 72 6f 20 2b 3d 20 70 52 65 63 2d 3e 75 2e  Zero += pRec->u.
16d50 6e 5a 65 72 6f 3b 0a 20 20 20 20 20 20 20 20 6c  nZero;.        l
16d60 65 6e 20 2d 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a  en -= pRec->u.nZ
16d70 65 72 6f 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ero;.      }.   
16d80 20 7d 0a 20 20 20 20 6e 44 61 74 61 20 2b 3d 20   }.    nData += 
16d90 6c 65 6e 3b 0a 20 20 20 20 74 65 73 74 63 61 73  len;.    testcas
16da0 65 28 20 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d  e( serial_type==
16db0 31 32 37 20 29 3b 0a 20 20 20 20 74 65 73 74 63  127 );.    testc
16dc0 61 73 65 28 20 73 65 72 69 61 6c 5f 74 79 70 65  ase( serial_type
16dd0 3d 3d 31 32 38 20 29 3b 0a 20 20 20 20 6e 48 64  ==128 );.    nHd
16de0 72 20 2b 3d 20 73 65 72 69 61 6c 5f 74 79 70 65  r += serial_type
16df0 3c 3d 31 32 37 20 3f 20 31 20 3a 20 73 71 6c 69  <=127 ? 1 : sqli
16e00 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 73 65 72  te3VarintLen(ser
16e10 69 61 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20 69  ial_type);.    i
16e20 66 28 20 70 52 65 63 3d 3d 70 44 61 74 61 30 20  f( pRec==pData0 
16e30 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 70 52 65  ) break;.    pRe
16e40 63 2d 2d 3b 0a 20 20 7d 77 68 69 6c 65 28 31 29  c--;.  }while(1)
16e50 3b 0a 0a 20 20 2f 2a 20 45 56 49 44 45 4e 43 45  ;..  /* EVIDENCE
16e60 2d 4f 46 3a 20 52 2d 32 32 35 36 34 2d 31 31 36  -OF: R-22564-116
16e70 34 37 20 54 68 65 20 68 65 61 64 65 72 20 62 65  47 The header be
16e80 67 69 6e 73 20 77 69 74 68 20 61 20 73 69 6e 67  gins with a sing
16e90 6c 65 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20 77  le varint.  ** w
16ea0 68 69 63 68 20 64 65 74 65 72 6d 69 6e 65 73 20  hich determines 
16eb0 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72  the total number
16ec0 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65   of bytes in the
16ed0 20 68 65 61 64 65 72 2e 20 54 68 65 20 76 61 72   header. The var
16ee0 69 6e 74 0a 20 20 2a 2a 20 76 61 6c 75 65 20 69  int.  ** value i
16ef0 73 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68  s the size of th
16f00 65 20 68 65 61 64 65 72 20 69 6e 20 62 79 74 65  e header in byte
16f10 73 20 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20  s including the 
16f20 73 69 7a 65 20 76 61 72 69 6e 74 0a 20 20 2a 2a  size varint.  **
16f30 20 69 74 73 65 6c 66 2e 20 2a 2f 0a 20 20 74 65   itself. */.  te
16f40 73 74 63 61 73 65 28 20 6e 48 64 72 3d 3d 31 32  stcase( nHdr==12
16f50 36 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  6 );.  testcase(
16f60 20 6e 48 64 72 3d 3d 31 32 37 20 29 3b 0a 20 20   nHdr==127 );.  
16f70 69 66 28 20 6e 48 64 72 3c 3d 31 32 36 20 29 7b  if( nHdr<=126 ){
16f80 0a 20 20 20 20 2f 2a 20 54 68 65 20 63 6f 6d 6d  .    /* The comm
16f90 6f 6e 20 63 61 73 65 20 2a 2f 0a 20 20 20 20 6e  on case */.    n
16fa0 48 64 72 20 2b 3d 20 31 3b 0a 20 20 7d 65 6c 73  Hdr += 1;.  }els
16fb0 65 7b 0a 20 20 20 20 2f 2a 20 52 61 72 65 20 63  e{.    /* Rare c
16fc0 61 73 65 20 6f 66 20 61 20 72 65 61 6c 6c 79 20  ase of a really 
16fd0 6c 61 72 67 65 20 68 65 61 64 65 72 20 2a 2f 0a  large header */.
16fe0 20 20 20 20 6e 56 61 72 69 6e 74 20 3d 20 73 71      nVarint = sq
16ff0 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e  lite3VarintLen(n
17000 48 64 72 29 3b 0a 20 20 20 20 6e 48 64 72 20 2b  Hdr);.    nHdr +
17010 3d 20 6e 56 61 72 69 6e 74 3b 0a 20 20 20 20 69  = nVarint;.    i
17020 66 28 20 6e 56 61 72 69 6e 74 3c 73 71 6c 69 74  f( nVarint<sqlit
17030 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72  e3VarintLen(nHdr
17040 29 20 29 20 6e 48 64 72 2b 2b 3b 0a 20 20 7d 0a  ) ) nHdr++;.  }.
17050 20 20 6e 42 79 74 65 20 3d 20 6e 48 64 72 2b 6e    nByte = nHdr+n
17060 44 61 74 61 3b 0a 20 20 69 66 28 20 6e 42 79 74  Data;.  if( nByt
17070 65 2b 6e 5a 65 72 6f 3e 64 62 2d 3e 61 4c 69 6d  e+nZero>db->aLim
17080 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
17090 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67  LENGTH] ){.    g
170a0 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d  oto too_big;.  }
170b0 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65  ..  /* Make sure
170c0 20 74 68 65 20 6f 75 74 70 75 74 20 72 65 67 69   the output regi
170d0 73 74 65 72 20 68 61 73 20 61 20 62 75 66 66 65  ster has a buffe
170e0 72 20 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74  r large enough t
170f0 6f 20 73 74 6f 72 65 20 0a 20 20 2a 2a 20 74 68  o store .  ** th
17100 65 20 6e 65 77 20 72 65 63 6f 72 64 2e 20 54 68  e new record. Th
17110 65 20 6f 75 74 70 75 74 20 72 65 67 69 73 74 65  e output registe
17120 72 20 28 70 4f 70 2d 3e 70 33 29 20 69 73 20 6e  r (pOp->p3) is n
17130 6f 74 20 61 6c 6c 6f 77 65 64 20 74 6f 0a 20 20  ot allowed to.  
17140 2a 2a 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65  ** be one of the
17150 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73   input registers
17160 20 28 62 65 63 61 75 73 65 20 74 68 65 20 66 6f   (because the fo
17170 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 20 74 6f 0a  llowing call to.
17180 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65    ** sqlite3Vdbe
17190 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65 73 69 7a  MemClearAndResiz
171a0 65 28 29 20 63 6f 75 6c 64 20 63 6c 6f 62 62 65  e() could clobbe
171b0 72 20 74 68 65 20 76 61 6c 75 65 20 62 65 66 6f  r the value befo
171c0 72 65 20 69 74 20 69 73 20 75 73 65 64 29 2e 0a  re it is used)..
171d0 20 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74    */.  if( sqlit
171e0 65 33 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e  e3VdbeMemClearAn
171f0 64 52 65 73 69 7a 65 28 70 4f 75 74 2c 20 28 69  dResize(pOut, (i
17200 6e 74 29 6e 42 79 74 65 29 20 29 7b 0a 20 20 20  nt)nByte) ){.   
17210 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
17220 7d 0a 20 20 7a 4e 65 77 52 65 63 6f 72 64 20 3d  }.  zNewRecord =
17230 20 28 75 38 20 2a 29 70 4f 75 74 2d 3e 7a 3b 0a   (u8 *)pOut->z;.
17240 0a 20 20 2f 2a 20 57 72 69 74 65 20 74 68 65 20  .  /* Write the 
17250 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 20 3d 20  record */.  i = 
17260 70 75 74 56 61 72 69 6e 74 33 32 28 7a 4e 65 77  putVarint32(zNew
17270 52 65 63 6f 72 64 2c 20 6e 48 64 72 29 3b 0a 20  Record, nHdr);. 
17280 20 6a 20 3d 20 6e 48 64 72 3b 0a 20 20 61 73 73   j = nHdr;.  ass
17290 65 72 74 28 20 70 44 61 74 61 30 3c 3d 70 4c 61  ert( pData0<=pLa
172a0 73 74 20 29 3b 0a 20 20 70 52 65 63 20 3d 20 70  st );.  pRec = p
172b0 44 61 74 61 30 3b 0a 20 20 64 6f 7b 0a 20 20 20  Data0;.  do{.   
172c0 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20 70   serial_type = p
172d0 52 65 63 2d 3e 75 54 65 6d 70 3b 0a 20 20 20 20  Rec->uTemp;.    
172e0 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20  /* EVIDENCE-OF: 
172f0 52 2d 30 36 35 32 39 2d 34 37 33 36 32 20 46 6f  R-06529-47362 Fo
17300 6c 6c 6f 77 69 6e 67 20 74 68 65 20 73 69 7a 65  llowing the size
17310 20 76 61 72 69 6e 74 20 61 72 65 20 6f 6e 65 20   varint are one 
17320 6f 72 20 6d 6f 72 65 0a 20 20 20 20 2a 2a 20 61  or more.    ** a
17330 64 64 69 74 69 6f 6e 61 6c 20 76 61 72 69 6e 74  dditional varint
17340 73 2c 20 6f 6e 65 20 70 65 72 20 63 6f 6c 75 6d  s, one per colum
17350 6e 2e 20 2a 2f 0a 20 20 20 20 69 20 2b 3d 20 70  n. */.    i += p
17360 75 74 56 61 72 69 6e 74 33 32 28 26 7a 4e 65 77  utVarint32(&zNew
17370 52 65 63 6f 72 64 5b 69 5d 2c 20 73 65 72 69 61  Record[i], seria
17380 6c 5f 74 79 70 65 29 3b 20 20 20 20 20 20 20 20  l_type);        
17390 20 20 20 20 2f 2a 20 73 65 72 69 61 6c 20 74 79      /* serial ty
173a0 70 65 20 2a 2f 0a 20 20 20 20 2f 2a 20 45 56 49  pe */.    /* EVI
173b0 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 36 34 35 33  DENCE-OF: R-6453
173c0 36 2d 35 31 37 32 38 20 54 68 65 20 76 61 6c 75  6-51728 The valu
173d0 65 73 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75  es for each colu
173e0 6d 6e 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  mn in the record
173f0 0a 20 20 20 20 2a 2a 20 69 6d 6d 65 64 69 61 74  .    ** immediat
17400 65 6c 79 20 66 6f 6c 6c 6f 77 20 74 68 65 20 68  ely follow the h
17410 65 61 64 65 72 2e 20 2a 2f 0a 20 20 20 20 6a 20  eader. */.    j 
17420 2b 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  += sqlite3VdbeSe
17430 72 69 61 6c 50 75 74 28 26 7a 4e 65 77 52 65 63  rialPut(&zNewRec
17440 6f 72 64 5b 6a 5d 2c 20 70 52 65 63 2c 20 73 65  ord[j], pRec, se
17450 72 69 61 6c 5f 74 79 70 65 29 3b 20 2f 2a 20 63  rial_type); /* c
17460 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20 7d 77 68 69  ontent */.  }whi
17470 6c 65 28 20 28 2b 2b 70 52 65 63 29 3c 3d 70 4c  le( (++pRec)<=pL
17480 61 73 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ast );.  assert(
17490 20 69 3d 3d 6e 48 64 72 20 29 3b 0a 20 20 61 73   i==nHdr );.  as
174a0 73 65 72 74 28 20 6a 3d 3d 6e 42 79 74 65 20 29  sert( j==nByte )
174b0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
174c0 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p3>0 && pOp->p
174d0 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  3<=(p->nMem+1 - 
174e0 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
174f0 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29   pOut->n = (int)
17500 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 66  nByte;.  pOut->f
17510 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 3b  lags = MEM_Blob;
17520 0a 20 20 69 66 28 20 6e 5a 65 72 6f 20 29 7b 0a  .  if( nZero ){.
17530 20 20 20 20 70 4f 75 74 2d 3e 75 2e 6e 5a 65 72      pOut->u.nZer
17540 6f 20 3d 20 6e 5a 65 72 6f 3b 0a 20 20 20 20 70  o = nZero;.    p
17550 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45  Out->flags |= ME
17560 4d 5f 5a 65 72 6f 3b 0a 20 20 7d 0a 20 20 70 4f  M_Zero;.  }.  pO
17570 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45  ut->enc = SQLITE
17580 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61  _UTF8;  /* In ca
17590 73 65 20 74 68 65 20 62 6c 6f 62 20 69 73 20 65  se the blob is e
175a0 76 65 72 20 63 6f 6e 76 65 72 74 65 64 20 74 6f  ver converted to
175b0 20 74 65 78 74 20 2a 2f 0a 20 20 52 45 47 49 53   text */.  REGIS
175c0 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
175d0 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50 44 41  3, pOut);.  UPDA
175e0 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
175f0 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
17600 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
17610 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  unt P1 P2 * * *.
17620 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
17630 32 5d 3d 63 6f 75 6e 74 28 29 0a 2a 2a 0a 2a 2a  2]=count().**.**
17640 20 53 74 6f 72 65 20 74 68 65 20 6e 75 6d 62 65   Store the numbe
17650 72 20 6f 66 20 65 6e 74 72 69 65 73 20 28 61 6e  r of entries (an
17660 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 29 20   integer value) 
17670 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  in the table or 
17680 69 6e 64 65 78 20 0a 2a 2a 20 6f 70 65 6e 65 64  index .** opened
17690 20 62 79 20 63 75 72 73 6f 72 20 50 31 20 69 6e   by cursor P1 in
176a0 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2f 0a   register P2.*/.
176b0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
176c0 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a 63  MIT_BTREECOUNT.c
176d0 61 73 65 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b 20  ase OP_Count: { 
176e0 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
176f0 2a 2f 0a 20 20 69 36 34 20 6e 45 6e 74 72 79 3b  */.  i64 nEntry;
17700 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
17710 73 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  sr;..  assert( p
17720 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
17730 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
17740 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 70  YPE_BTREE );.  p
17750 43 72 73 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b  Crsr = p->apCsr[
17760 70 4f 70 2d 3e 70 31 5d 2d 3e 75 63 2e 70 43 75  pOp->p1]->uc.pCu
17770 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20  rsor;.  assert( 
17780 70 43 72 73 72 20 29 3b 0a 20 20 6e 45 6e 74 72  pCrsr );.  nEntr
17790 79 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e  y = 0;  /* Not n
177a0 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65  eeded.  Only use
177b0 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77  d to silence a w
177c0 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72 63 20  arning. */.  rc 
177d0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6f  = sqlite3BtreeCo
177e0 75 6e 74 28 70 43 72 73 72 2c 20 26 6e 45 6e 74  unt(pCrsr, &nEnt
177f0 72 79 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  ry);.  if( rc ) 
17800 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
17810 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 4f 75 74 20  o_error;.  pOut 
17820 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
17830 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74  (p, pOp);.  pOut
17840 2d 3e 75 2e 69 20 3d 20 6e 45 6e 74 72 79 3b 0a  ->u.i = nEntry;.
17850 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
17860 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 61  f../* Opcode: Sa
17870 76 65 70 6f 69 6e 74 20 50 31 20 2a 20 2a 20 50  vepoint P1 * * P
17880 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c 20  4 *.**.** Open, 
17890 72 65 6c 65 61 73 65 20 6f 72 20 72 6f 6c 6c 62  release or rollb
178a0 61 63 6b 20 74 68 65 20 73 61 76 65 70 6f 69 6e  ack the savepoin
178b0 74 20 6e 61 6d 65 64 20 62 79 20 70 61 72 61 6d  t named by param
178c0 65 74 65 72 20 50 34 2c 20 64 65 70 65 6e 64 69  eter P4, dependi
178d0 6e 67 0a 2a 2a 20 6f 6e 20 74 68 65 20 76 61 6c  ng.** on the val
178e0 75 65 20 6f 66 20 50 31 2e 20 54 6f 20 6f 70 65  ue of P1. To ope
178f0 6e 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e  n a new savepoin
17900 74 2c 20 50 31 3d 3d 30 2e 20 54 6f 20 72 65 6c  t, P1==0. To rel
17910 65 61 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 6e  ease (commit) an
17920 0a 2a 2a 20 65 78 69 73 74 69 6e 67 20 73 61 76  .** existing sav
17930 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 31 2c 20 6f  epoint, P1==1, o
17940 72 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e  r to rollback an
17950 20 65 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f   existing savepo
17960 69 6e 74 20 50 31 3d 3d 32 2e 0a 2a 2f 0a 63 61  int P1==2..*/.ca
17970 73 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 3a  se OP_Savepoint:
17980 20 7b 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20   {.  int p1;    
17990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179a0 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f 66       /* Value of
179b0 20 50 31 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20   P1 operand */. 
179c0 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
179d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179e0 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 73 61 76 65   /* Name of save
179f0 70 6f 69 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e  point */.  int n
17a00 4e 61 6d 65 3b 0a 20 20 53 61 76 65 70 6f 69 6e  Name;.  Savepoin
17a10 74 20 2a 70 4e 65 77 3b 0a 20 20 53 61 76 65 70  t *pNew;.  Savep
17a20 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74  oint *pSavepoint
17a30 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70  ;.  Savepoint *p
17a40 54 6d 70 3b 0a 20 20 69 6e 74 20 69 53 61 76 65  Tmp;.  int iSave
17a50 70 6f 69 6e 74 3b 0a 20 20 69 6e 74 20 69 69 3b  point;.  int ii;
17a60 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31  ..  p1 = pOp->p1
17a70 3b 0a 20 20 7a 4e 61 6d 65 20 3d 20 70 4f 70 2d  ;.  zName = pOp-
17a80 3e 70 34 2e 7a 3b 0a 0a 20 20 2f 2a 20 41 73 73  >p4.z;..  /* Ass
17a90 65 72 74 20 74 68 61 74 20 74 68 65 20 70 31 20  ert that the p1 
17aa0 70 61 72 61 6d 65 74 65 72 20 69 73 20 76 61 6c  parameter is val
17ab0 69 64 2e 20 41 6c 73 6f 20 74 68 61 74 20 69 66  id. Also that if
17ac0 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65   there is no ope
17ad0 6e 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63 74 69  n.  ** transacti
17ae0 6f 6e 2c 20 74 68 65 6e 20 74 68 65 72 65 20 63  on, then there c
17af0 61 6e 6e 6f 74 20 62 65 20 61 6e 79 20 73 61 76  annot be any sav
17b00 65 70 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f 0a 20  epoints. .  */. 
17b10 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61   assert( db->pSa
17b20 76 65 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20 64 62  vepoint==0 || db
17b30 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20  ->autoCommit==0 
17b40 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31 3d  );.  assert( p1=
17b50 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e  =SAVEPOINT_BEGIN
17b60 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ||p1==SAVEPOINT_
17b70 52 45 4c 45 41 53 45 7c 7c 70 31 3d 3d 53 41 56  RELEASE||p1==SAV
17b80 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20  EPOINT_ROLLBACK 
17b90 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  );.  assert( db-
17ba0 3e 70 53 61 76 65 70 6f 69 6e 74 20 7c 7c 20 64  >pSavepoint || d
17bb0 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  b->isTransaction
17bc0 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a  Savepoint==0 );.
17bd0 20 20 61 73 73 65 72 74 28 20 63 68 65 63 6b 53    assert( checkS
17be0 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62  avepointCount(db
17bf0 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ) );.  assert( p
17c00 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 0a  ->bIsReader );..
17c10 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f    if( p1==SAVEPO
17c20 49 4e 54 5f 42 45 47 49 4e 20 29 7b 0a 20 20 20  INT_BEGIN ){.   
17c30 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 57 72   if( db->nVdbeWr
17c40 69 74 65 3e 30 20 29 7b 0a 20 20 20 20 20 20 2f  ite>0 ){.      /
17c50 2a 20 41 20 6e 65 77 20 73 61 76 65 70 6f 69 6e  * A new savepoin
17c60 74 20 63 61 6e 6e 6f 74 20 62 65 20 63 72 65 61  t cannot be crea
17c70 74 65 64 20 69 66 20 74 68 65 72 65 20 61 72 65  ted if there are
17c80 20 61 63 74 69 76 65 20 77 72 69 74 65 20 0a 20   active write . 
17c90 20 20 20 20 20 2a 2a 20 73 74 61 74 65 6d 65 6e       ** statemen
17ca0 74 73 20 28 69 2e 65 2e 20 6f 70 65 6e 20 72 65  ts (i.e. open re
17cb0 61 64 2f 77 72 69 74 65 20 69 6e 63 72 65 6d 65  ad/write increme
17cc0 6e 74 61 6c 20 62 6c 6f 62 20 68 61 6e 64 6c 65  ntal blob handle
17cd0 73 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  s)..      */.   
17ce0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
17cf0 72 6f 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20 6f  ror(p, "cannot o
17d00 70 65 6e 20 73 61 76 65 70 6f 69 6e 74 20 2d 20  pen savepoint - 
17d10 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69  SQL statements i
17d20 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20  n progress");.  
17d30 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
17d40 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  BUSY;.    }else{
17d50 0a 20 20 20 20 20 20 6e 4e 61 6d 65 20 3d 20 73  .      nName = s
17d60 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
17d70 4e 61 6d 65 29 3b 0a 0a 23 69 66 6e 64 65 66 20  Name);..#ifndef 
17d80 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
17d90 55 41 4c 54 41 42 4c 45 0a 20 20 20 20 20 20 2f  UALTABLE.      /
17da0 2a 20 54 68 69 73 20 63 61 6c 6c 20 69 73 20 4f  * This call is O
17db0 6b 20 65 76 65 6e 20 69 66 20 74 68 69 73 20 73  k even if this s
17dc0 61 76 65 70 6f 69 6e 74 20 69 73 20 61 63 74 75  avepoint is actu
17dd0 61 6c 6c 79 20 61 20 74 72 61 6e 73 61 63 74 69  ally a transacti
17de0 6f 6e 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65  on.      ** save
17df0 70 6f 69 6e 74 20 28 61 6e 64 20 74 68 65 72 65  point (and there
17e00 66 6f 72 65 20 73 68 6f 75 6c 64 20 6e 6f 74 20  fore should not 
17e10 70 72 6f 6d 70 74 20 78 53 61 76 65 70 6f 69 6e  prompt xSavepoin
17e20 74 28 29 29 20 63 61 6c 6c 62 61 63 6b 73 2e 0a  t()) callbacks..
17e30 20 20 20 20 20 20 2a 2a 20 49 66 20 74 68 69 73        ** If this
17e40 20 69 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f   is a transactio
17e50 6e 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e  n savepoint bein
17e60 67 20 6f 70 65 6e 65 64 2c 20 69 74 20 69 73 20  g opened, it is 
17e70 67 75 61 72 61 6e 74 65 65 64 0a 20 20 20 20 20  guaranteed.     
17e80 20 2a 2a 20 74 68 61 74 20 74 68 65 20 64 62 2d   ** that the db-
17e90 3e 61 56 54 72 61 6e 73 5b 5d 20 61 72 72 61 79  >aVTrans[] array
17ea0 20 69 73 20 65 6d 70 74 79 2e 20 20 2a 2f 0a 20   is empty.  */. 
17eb0 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d       assert( db-
17ec0 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c  >autoCommit==0 |
17ed0 7c 20 64 62 2d 3e 6e 56 54 72 61 6e 73 3d 3d 30  | db->nVTrans==0
17ee0 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   );.      rc = s
17ef0 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f  qlite3VtabSavepo
17f00 69 6e 74 28 64 62 2c 20 53 41 56 45 50 4f 49 4e  int(db, SAVEPOIN
17f10 54 5f 42 45 47 49 4e 2c 0a 20 20 20 20 20 20 20  T_BEGIN,.       
17f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f30 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 74           db->nSt
17f40 61 74 65 6d 65 6e 74 2b 64 62 2d 3e 6e 53 61 76  atement+db->nSav
17f50 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 69  epoint);.      i
17f60 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
17f70 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
17f80 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64  e_to_error;.#end
17f90 69 66 0a 0a 20 20 20 20 20 20 2f 2a 20 43 72 65  if..      /* Cre
17fa0 61 74 65 20 61 20 6e 65 77 20 73 61 76 65 70 6f  ate a new savepo
17fb0 69 6e 74 20 73 74 72 75 63 74 75 72 65 2e 20 2a  int structure. *
17fc0 2f 0a 20 20 20 20 20 20 70 4e 65 77 20 3d 20 73  /.      pNew = s
17fd0 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
17fe0 77 4e 4e 28 64 62 2c 20 73 69 7a 65 6f 66 28 53  wNN(db, sizeof(S
17ff0 61 76 65 70 6f 69 6e 74 29 2b 6e 4e 61 6d 65 2b  avepoint)+nName+
18000 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4e  1);.      if( pN
18010 65 77 20 29 7b 0a 20 20 20 20 20 20 20 20 70 4e  ew ){.        pN
18020 65 77 2d 3e 7a 4e 61 6d 65 20 3d 20 28 63 68 61  ew->zName = (cha
18030 72 20 2a 29 26 70 4e 65 77 5b 31 5d 3b 0a 20 20  r *)&pNew[1];.  
18040 20 20 20 20 20 20 6d 65 6d 63 70 79 28 70 4e 65        memcpy(pNe
18050 77 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 2c  w->zName, zName,
18060 20 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 0a   nName+1);.    .
18070 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68          /* If th
18080 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 20 74  ere is no open t
18090 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e  ransaction, then
180a0 20 6d 61 72 6b 20 74 68 69 73 20 61 73 20 61 20   mark this as a 
180b0 73 70 65 63 69 61 6c 0a 20 20 20 20 20 20 20 20  special.        
180c0 2a 2a 20 22 74 72 61 6e 73 61 63 74 69 6f 6e 20  ** "transaction 
180d0 73 61 76 65 70 6f 69 6e 74 22 2e 20 2a 2f 0a 20  savepoint". */. 
180e0 20 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61         if( db->a
180f0 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20  utoCommit ){.   
18100 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43         db->autoC
18110 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20 20  ommit = 0;.     
18120 20 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73       db->isTrans
18130 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20  actionSavepoint 
18140 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  = 1;.        }el
18150 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62  se{.          db
18160 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a  ->nSavepoint++;.
18170 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20          }..     
18180 20 20 20 2f 2a 20 4c 69 6e 6b 20 74 68 65 20 6e     /* Link the n
18190 65 77 20 73 61 76 65 70 6f 69 6e 74 20 69 6e 74  ew savepoint int
181a0 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  o the database h
181b0 61 6e 64 6c 65 27 73 20 6c 69 73 74 2e 20 2a 2f  andle's list. */
181c0 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 70  .        pNew->p
181d0 4e 65 78 74 20 3d 20 64 62 2d 3e 70 53 61 76 65  Next = db->pSave
181e0 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20 20 64  point;.        d
181f0 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20  b->pSavepoint = 
18200 70 4e 65 77 3b 0a 20 20 20 20 20 20 20 20 70 4e  pNew;.        pN
18210 65 77 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  ew->nDeferredCon
18220 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65  s = db->nDeferre
18230 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 20 20 70  dCons;.        p
18240 4e 65 77 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d  New->nDeferredIm
18250 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66  mCons = db->nDef
18260 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20  erredImmCons;.  
18270 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65      }.    }.  }e
18280 6c 73 65 7b 0a 20 20 20 20 69 53 61 76 65 70 6f  lse{.    iSavepo
18290 69 6e 74 20 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a  int = 0;..    /*
182a0 20 46 69 6e 64 20 74 68 65 20 6e 61 6d 65 64 20   Find the named 
182b0 73 61 76 65 70 6f 69 6e 74 2e 20 49 66 20 74 68  savepoint. If th
182c0 65 72 65 20 69 73 20 6e 6f 20 73 75 63 68 20 73  ere is no such s
182d0 61 76 65 70 6f 69 6e 74 2c 20 74 68 65 6e 20 61  avepoint, then a
182e0 6e 0a 20 20 20 20 2a 2a 20 61 6e 20 65 72 72 6f  n.    ** an erro
182f0 72 20 69 73 20 72 65 74 75 72 6e 65 64 20 74 6f  r is returned to
18300 20 74 68 65 20 75 73 65 72 2e 20 20 2a 2f 0a 20   the user.  */. 
18310 20 20 20 66 6f 72 28 0a 20 20 20 20 20 20 70 53     for(.      pS
18320 61 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 70  avepoint = db->p
18330 53 61 76 65 70 6f 69 6e 74 3b 20 0a 20 20 20 20  Savepoint; .    
18340 20 20 70 53 61 76 65 70 6f 69 6e 74 20 26 26 20    pSavepoint && 
18350 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 70  sqlite3StrICmp(p
18360 53 61 76 65 70 6f 69 6e 74 2d 3e 7a 4e 61 6d 65  Savepoint->zName
18370 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20  , zName);.      
18380 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61  pSavepoint = pSa
18390 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 0a 20  vepoint->pNext. 
183a0 20 20 20 29 7b 0a 20 20 20 20 20 20 69 53 61 76     ){.      iSav
183b0 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a  epoint++;.    }.
183c0 20 20 20 20 69 66 28 20 21 70 53 61 76 65 70 6f      if( !pSavepo
183d0 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  int ){.      sql
183e0 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
183f0 20 22 6e 6f 20 73 75 63 68 20 73 61 76 65 70 6f   "no such savepo
18400 69 6e 74 3a 20 25 73 22 2c 20 7a 4e 61 6d 65 29  int: %s", zName)
18410 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  ;.      rc = SQL
18420 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d  ITE_ERROR;.    }
18430 65 6c 73 65 20 69 66 28 20 64 62 2d 3e 6e 56 64  else if( db->nVd
18440 62 65 57 72 69 74 65 3e 30 20 26 26 20 70 31 3d  beWrite>0 && p1=
18450 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41  =SAVEPOINT_RELEA
18460 53 45 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49  SE ){.      /* I
18470 74 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c  t is not possibl
18480 65 20 74 6f 20 72 65 6c 65 61 73 65 20 28 63 6f  e to release (co
18490 6d 6d 69 74 29 20 61 20 73 61 76 65 70 6f 69 6e  mmit) a savepoin
184a0 74 20 69 66 20 74 68 65 72 65 20 61 72 65 20 0a  t if there are .
184b0 20 20 20 20 20 20 2a 2a 20 61 63 74 69 76 65 20        ** active 
184c0 77 72 69 74 65 20 73 74 61 74 65 6d 65 6e 74 73  write statements
184d0 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
184e0 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f   sqlite3VdbeErro
184f0 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20 72 65 6c  r(p, "cannot rel
18500 65 61 73 65 20 73 61 76 65 70 6f 69 6e 74 20 2d  ease savepoint -
18510 20 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   ".             
18520 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53 51               "SQ
18530 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  L statements in 
18540 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20  progress");.    
18550 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55    rc = SQLITE_BU
18560 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 0a  SY;.    }else{..
18570 20 20 20 20 20 20 2f 2a 20 44 65 74 65 72 6d 69        /* Determi
18580 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ne whether or no
18590 74 20 74 68 69 73 20 69 73 20 61 20 74 72 61 6e  t this is a tran
185a0 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e  saction savepoin
185b0 74 2e 20 49 66 20 73 6f 2c 0a 20 20 20 20 20 20  t. If so,.      
185c0 2a 2a 20 61 6e 64 20 74 68 69 73 20 69 73 20 61  ** and this is a
185d0 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64   RELEASE command
185e0 2c 20 74 68 65 6e 20 74 68 65 20 63 75 72 72 65  , then the curre
185f0 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 0a  nt transaction .
18600 20 20 20 20 20 20 2a 2a 20 69 73 20 63 6f 6d 6d        ** is comm
18610 69 74 74 65 64 2e 20 0a 20 20 20 20 20 20 2a 2f  itted. .      */
18620 0a 20 20 20 20 20 20 69 6e 74 20 69 73 54 72 61  .      int isTra
18630 6e 73 61 63 74 69 6f 6e 20 3d 20 70 53 61 76 65  nsaction = pSave
18640 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3d 3d 30 20  point->pNext==0 
18650 26 26 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63  && db->isTransac
18660 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 0a 20  tionSavepoint;. 
18670 20 20 20 20 20 69 66 28 20 69 73 54 72 61 6e 73       if( isTrans
18680 61 63 74 69 6f 6e 20 26 26 20 70 31 3d 3d 53 41  action && p1==SA
18690 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20  VEPOINT_RELEASE 
186a0 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28  ){.        if( (
186b0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
186c0 43 68 65 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d  CheckFk(p, 1))!=
186d0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
186e0 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65         goto vdbe
186f0 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20  _return;.       
18700 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 61   }.        db->a
18710 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20  utoCommit = 1;. 
18720 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74         if( sqlit
18730 65 33 56 64 62 65 48 61 6c 74 28 70 29 3d 3d 53  e3VdbeHalt(p)==S
18740 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20  QLITE_BUSY ){.  
18750 20 20 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20          p->pc = 
18760 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29  (int)(pOp - aOp)
18770 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  ;.          db->
18780 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a  autoCommit = 0;.
18790 20 20 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20            p->rc 
187a0 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55  = rc = SQLITE_BU
187b0 53 59 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f  SY;.          go
187c0 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
187d0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
187e0 20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74    db->isTransact
187f0 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20 30  ionSavepoint = 0
18800 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 70  ;.        rc = p
18810 2d 3e 72 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73  ->rc;.      }els
18820 65 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69  e{.        int i
18830 73 53 63 68 65 6d 61 43 68 61 6e 67 65 3b 0a 20  sSchemaChange;. 
18840 20 20 20 20 20 20 20 69 53 61 76 65 70 6f 69 6e         iSavepoin
18850 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69  t = db->nSavepoi
18860 6e 74 20 2d 20 69 53 61 76 65 70 6f 69 6e 74 20  nt - iSavepoint 
18870 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28  - 1;.        if(
18880 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52   p1==SAVEPOINT_R
18890 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20 20 20 20 20  OLLBACK ){.     
188a0 20 20 20 20 20 69 73 53 63 68 65 6d 61 43 68 61       isSchemaCha
188b0 6e 67 65 20 3d 20 28 64 62 2d 3e 66 6c 61 67 73  nge = (db->flags
188c0 20 26 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e   & SQLITE_Intern
188d0 43 68 61 6e 67 65 73 29 21 3d 30 3b 0a 20 20 20  Changes)!=0;.   
188e0 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d 30 3b         for(ii=0;
188f0 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b   ii<db->nDb; ii+
18900 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  +){.            
18910 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
18920 65 54 72 69 70 41 6c 6c 43 75 72 73 6f 72 73 28  eTripAllCursors(
18930 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c  db->aDb[ii].pBt,
18940 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18960 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 41          SQLITE_A
18970 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 2c 0a 20  BORT_ROLLBACK,. 
18980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189a0 20 20 20 20 20 20 69 73 53 63 68 65 6d 61 43 68        isSchemaCh
189b0 61 6e 67 65 3d 3d 30 29 3b 0a 20 20 20 20 20 20  ange==0);.      
189c0 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
189d0 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
189e0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
189f0 72 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  r;.          }. 
18a00 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
18a10 20 20 20 20 20 20 20 20 69 73 53 63 68 65 6d 61          isSchema
18a20 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 20 20  Change = 0;.    
18a30 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 66 6f      }.        fo
18a40 72 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e  r(ii=0; ii<db->n
18a50 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20  Db; ii++){.     
18a60 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
18a70 33 42 74 72 65 65 53 61 76 65 70 6f 69 6e 74 28  3BtreeSavepoint(
18a80 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c  db->aDb[ii].pBt,
18a90 20 70 31 2c 20 69 53 61 76 65 70 6f 69 6e 74 29   p1, iSavepoint)
18aa0 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  ;.          if( 
18ab0 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
18ac0 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 6f 74  .            got
18ad0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
18ae0 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20  rror;.          
18af0 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  }.        }.    
18b00 20 20 20 20 69 66 28 20 69 73 53 63 68 65 6d 61      if( isSchema
18b10 43 68 61 6e 67 65 20 29 7b 0a 20 20 20 20 20 20  Change ){.      
18b20 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72      sqlite3Expir
18b30 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65  ePreparedStateme
18b40 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 20 20 20  nts(db);.       
18b50 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 41     sqlite3ResetA
18b60 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65  llSchemasOfConne
18b70 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20 20 20 20  ction(db);.     
18b80 20 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 3d       db->flags =
18b90 20 28 64 62 2d 3e 66 6c 61 67 73 20 7c 20 53 51   (db->flags | SQ
18ba0 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67  LITE_InternChang
18bb0 65 73 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  es);.        }. 
18bc0 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20       }.  .      
18bd0 2f 2a 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66  /* Regardless of
18be0 20 77 68 65 74 68 65 72 20 74 68 69 73 20 69 73   whether this is
18bf0 20 61 20 52 45 4c 45 41 53 45 20 6f 72 20 52 4f   a RELEASE or RO
18c00 4c 4c 42 41 43 4b 2c 20 64 65 73 74 72 6f 79 20  LLBACK, destroy 
18c10 61 6c 6c 20 0a 20 20 20 20 20 20 2a 2a 20 73 61  all .      ** sa
18c20 76 65 70 6f 69 6e 74 73 20 6e 65 73 74 65 64 20  vepoints nested 
18c30 69 6e 73 69 64 65 20 6f 66 20 74 68 65 20 73 61  inside of the sa
18c40 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70  vepoint being op
18c50 65 72 61 74 65 64 20 6f 6e 2e 20 2a 2f 0a 20 20  erated on. */.  
18c60 20 20 20 20 77 68 69 6c 65 28 20 64 62 2d 3e 70      while( db->p
18c70 53 61 76 65 70 6f 69 6e 74 21 3d 70 53 61 76 65  Savepoint!=pSave
18c80 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 20  point ){.       
18c90 20 70 54 6d 70 20 3d 20 64 62 2d 3e 70 53 61 76   pTmp = db->pSav
18ca0 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20 20  epoint;.        
18cb0 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d  db->pSavepoint =
18cc0 20 70 54 6d 70 2d 3e 70 4e 65 78 74 3b 0a 20 20   pTmp->pNext;.  
18cd0 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46        sqlite3DbF
18ce0 72 65 65 28 64 62 2c 20 70 54 6d 70 29 3b 0a 20  ree(db, pTmp);. 
18cf0 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65         db->nSave
18d00 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 7d  point--;.      }
18d10 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 69 74  ..      /* If it
18d20 20 69 73 20 61 20 52 45 4c 45 41 53 45 2c 20 74   is a RELEASE, t
18d30 68 65 6e 20 64 65 73 74 72 6f 79 20 74 68 65 20  hen destroy the 
18d40 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20  savepoint being 
18d50 6f 70 65 72 61 74 65 64 20 6f 6e 20 0a 20 20 20  operated on .   
18d60 20 20 20 2a 2a 20 74 6f 6f 2e 20 49 66 20 69 74     ** too. If it
18d70 20 69 73 20 61 20 52 4f 4c 4c 42 41 43 4b 20 54   is a ROLLBACK T
18d80 4f 2c 20 74 68 65 6e 20 73 65 74 20 74 68 65 20  O, then set the 
18d90 6e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72  number of deferr
18da0 65 64 20 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6e  ed .      ** con
18db0 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
18dc0 6e 73 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68  ns present in th
18dd0 65 20 64 61 74 61 62 61 73 65 20 74 6f 20 74 68  e database to th
18de0 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 0a 20  e value stored. 
18df0 20 20 20 20 20 2a 2a 20 77 68 65 6e 20 74 68 65       ** when the
18e00 20 73 61 76 65 70 6f 69 6e 74 20 77 61 73 20 63   savepoint was c
18e10 72 65 61 74 65 64 2e 20 20 2a 2f 0a 20 20 20 20  reated.  */.    
18e20 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f    if( p1==SAVEPO
18e30 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20  INT_RELEASE ){. 
18e40 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
18e50 53 61 76 65 70 6f 69 6e 74 3d 3d 64 62 2d 3e 70  Savepoint==db->p
18e60 53 61 76 65 70 6f 69 6e 74 20 29 3b 0a 20 20 20  Savepoint );.   
18e70 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f       db->pSavepo
18e80 69 6e 74 20 3d 20 70 53 61 76 65 70 6f 69 6e 74  int = pSavepoint
18e90 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 20  ->pNext;.       
18ea0 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
18eb0 62 2c 20 70 53 61 76 65 70 6f 69 6e 74 29 3b 0a  b, pSavepoint);.
18ec0 20 20 20 20 20 20 20 20 69 66 28 20 21 69 73 54          if( !isT
18ed0 72 61 6e 73 61 63 74 69 6f 6e 20 29 7b 0a 20 20  ransaction ){.  
18ee0 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76          db->nSav
18ef0 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20  epoint--;.      
18f00 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b    }.      }else{
18f10 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 44 65  .        db->nDe
18f20 66 65 72 72 65 64 43 6f 6e 73 20 3d 20 70 53 61  ferredCons = pSa
18f30 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66 65 72 72  vepoint->nDeferr
18f40 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 20 20  edCons;.        
18f50 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  db->nDeferredImm
18f60 43 6f 6e 73 20 3d 20 70 53 61 76 65 70 6f 69 6e  Cons = pSavepoin
18f70 74 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  t->nDeferredImmC
18f80 6f 6e 73 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  ons;.      }..  
18f90 20 20 20 20 69 66 28 20 21 69 73 54 72 61 6e 73      if( !isTrans
18fa0 61 63 74 69 6f 6e 20 7c 7c 20 70 31 3d 3d 53 41  action || p1==SA
18fb0 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b  VEPOINT_ROLLBACK
18fc0 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
18fd0 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65   sqlite3VtabSave
18fe0 70 6f 69 6e 74 28 64 62 2c 20 70 31 2c 20 69 53  point(db, p1, iS
18ff0 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20  avepoint);.     
19000 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
19010 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72  E_OK ) goto abor
19020 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
19030 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
19040 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  }.  if( rc ) got
19050 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
19060 72 72 6f 72 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a  rror;..  break;.
19070 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 75  }../* Opcode: Au
19080 74 6f 43 6f 6d 6d 69 74 20 50 31 20 50 32 20 2a  toCommit P1 P2 *
19090 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74   * *.**.** Set t
190a0 68 65 20 64 61 74 61 62 61 73 65 20 61 75 74 6f  he database auto
190b0 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 20 74 6f 20  -commit flag to 
190c0 50 31 20 28 31 20 6f 72 20 30 29 2e 20 49 66 20  P1 (1 or 0). If 
190d0 50 32 20 69 73 20 74 72 75 65 2c 20 72 6f 6c 6c  P2 is true, roll
190e0 0a 2a 2a 20 62 61 63 6b 20 61 6e 79 20 63 75 72  .** back any cur
190f0 72 65 6e 74 6c 79 20 61 63 74 69 76 65 20 62 74  rently active bt
19100 72 65 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  ree transactions
19110 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20 61  . If there are a
19120 6e 79 20 61 63 74 69 76 65 0a 2a 2a 20 56 4d 73  ny active.** VMs
19130 20 28 61 70 61 72 74 20 66 72 6f 6d 20 74 68 69   (apart from thi
19140 73 20 6f 6e 65 29 2c 20 74 68 65 6e 20 61 20 52  s one), then a R
19150 4f 4c 4c 42 41 43 4b 20 66 61 69 6c 73 2e 20 20  OLLBACK fails.  
19160 41 20 43 4f 4d 4d 49 54 20 66 61 69 6c 73 20 69  A COMMIT fails i
19170 66 0a 2a 2a 20 74 68 65 72 65 20 61 72 65 20 61  f.** there are a
19180 63 74 69 76 65 20 77 72 69 74 69 6e 67 20 56 4d  ctive writing VM
19190 73 20 6f 72 20 61 63 74 69 76 65 20 56 4d 73 20  s or active VMs 
191a0 74 68 61 74 20 75 73 65 20 73 68 61 72 65 64 20  that use shared 
191b0 63 61 63 68 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  cache..**.** Thi
191c0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 61  s instruction ca
191d0 75 73 65 73 20 74 68 65 20 56 4d 20 74 6f 20 68  uses the VM to h
191e0 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  alt..*/.case OP_
191f0 41 75 74 6f 43 6f 6d 6d 69 74 3a 20 7b 0a 20 20  AutoCommit: {.  
19200 69 6e 74 20 64 65 73 69 72 65 64 41 75 74 6f 43  int desiredAutoC
19210 6f 6d 6d 69 74 3b 0a 20 20 69 6e 74 20 69 52 6f  ommit;.  int iRo
19220 6c 6c 62 61 63 6b 3b 0a 0a 20 20 64 65 73 69 72  llback;..  desir
19230 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 70  edAutoCommit = p
19240 4f 70 2d 3e 70 31 3b 0a 20 20 69 52 6f 6c 6c 62  Op->p1;.  iRollb
19250 61 63 6b 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  ack = pOp->p2;. 
19260 20 61 73 73 65 72 74 28 20 64 65 73 69 72 65 64   assert( desired
19270 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c  AutoCommit==1 ||
19280 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
19290 69 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  it==0 );.  asser
192a0 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  t( desiredAutoCo
192b0 6d 6d 69 74 3d 3d 31 20 7c 7c 20 69 52 6f 6c 6c  mmit==1 || iRoll
192c0 62 61 63 6b 3d 3d 30 20 29 3b 0a 20 20 61 73 73  back==0 );.  ass
192d0 65 72 74 28 20 64 62 2d 3e 6e 56 64 62 65 41 63  ert( db->nVdbeAc
192e0 74 69 76 65 3e 30 20 29 3b 20 20 2f 2a 20 41 74  tive>0 );  /* At
192f0 20 6c 65 61 73 74 20 74 68 69 73 20 6f 6e 65 20   least this one 
19300 56 4d 20 69 73 20 61 63 74 69 76 65 20 2a 2f 0a  VM is active */.
19310 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73    assert( p->bIs
19320 52 65 61 64 65 72 20 29 3b 0a 0a 20 20 69 66 28  Reader );..  if(
19330 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
19340 69 74 21 3d 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  it!=db->autoComm
19350 69 74 20 29 7b 0a 20 20 20 20 69 66 28 20 69 52  it ){.    if( iR
19360 6f 6c 6c 62 61 63 6b 20 29 7b 0a 20 20 20 20 20  ollback ){.     
19370 20 61 73 73 65 72 74 28 20 64 65 73 69 72 65 64   assert( desired
19380 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 29 3b  AutoCommit==1 );
19390 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 6f  .      sqlite3Ro
193a0 6c 6c 62 61 63 6b 41 6c 6c 28 64 62 2c 20 53 51  llbackAll(db, SQ
193b0 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42  LITE_ABORT_ROLLB
193c0 41 43 4b 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e  ACK);.      db->
193d0 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a  autoCommit = 1;.
193e0 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 64 65      }else if( de
193f0 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20  siredAutoCommit 
19400 26 26 20 64 62 2d 3e 6e 56 64 62 65 57 72 69 74  && db->nVdbeWrit
19410 65 3e 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  e>0 ){.      /* 
19420 49 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  If this instruct
19430 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61  ion implements a
19440 20 43 4f 4d 4d 49 54 20 61 6e 64 20 6f 74 68 65   COMMIT and othe
19450 72 20 56 4d 73 20 61 72 65 20 77 72 69 74 69 6e  r VMs are writin
19460 67 0a 20 20 20 20 20 20 2a 2a 20 72 65 74 75 72  g.      ** retur
19470 6e 20 61 6e 20 65 72 72 6f 72 20 69 6e 64 69 63  n an error indic
19480 61 74 69 6e 67 20 74 68 61 74 20 74 68 65 20 6f  ating that the o
19490 74 68 65 72 20 56 4d 73 20 6d 75 73 74 20 63 6f  ther VMs must co
194a0 6d 70 6c 65 74 65 20 66 69 72 73 74 2e 20 0a 20  mplete first. . 
194b0 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71       */.      sq
194c0 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70  lite3VdbeError(p
194d0 2c 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74  , "cannot commit
194e0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20 22   transaction - "
194f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19500 20 20 20 20 20 20 20 20 20 20 20 22 53 51 4c 20             "SQL 
19510 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72  statements in pr
19520 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 20 20  ogress");.      
19530 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
19540 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f  ;.      goto abo
19550 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
19560 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 28  .    }else if( (
19570 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
19580 43 68 65 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d  CheckFk(p, 1))!=
19590 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
195a0 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74     goto vdbe_ret
195b0 75 72 6e 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  urn;.    }else{.
195c0 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
195d0 6d 6d 69 74 20 3d 20 28 75 38 29 64 65 73 69 72  mmit = (u8)desir
195e0 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20  edAutoCommit;.  
195f0 20 20 7d 0a 20 20 20 20 69 66 28 20 73 71 6c 69    }.    if( sqli
19600 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3d 3d  te3VdbeHalt(p)==
19610 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20  SQLITE_BUSY ){. 
19620 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e       p->pc = (in
19630 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20  t)(pOp - aOp);. 
19640 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d       db->autoCom
19650 6d 69 74 20 3d 20 28 75 38 29 28 31 2d 64 65 73  mit = (u8)(1-des
19660 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3b  iredAutoCommit);
19670 0a 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72  .      p->rc = r
19680 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
19690 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65  .      goto vdbe
196a0 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a 20  _return;.    }. 
196b0 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e     assert( db->n
196c0 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29 3b 0a  Statement==0 );.
196d0 20 20 20 20 73 71 6c 69 74 65 33 43 6c 6f 73 65      sqlite3Close
196e0 53 61 76 65 70 6f 69 6e 74 73 28 64 62 29 3b 0a  Savepoints(db);.
196f0 20 20 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53      if( p->rc==S
19700 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
19710 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 44 4f    rc = SQLITE_DO
19720 4e 45 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  NE;.    }else{. 
19730 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
19740 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20  _ERROR;.    }.  
19750 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
19760 72 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  rn;.  }else{.   
19770 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f   sqlite3VdbeErro
19780 72 28 70 2c 0a 20 20 20 20 20 20 20 20 28 21 64  r(p,.        (!d
19790 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
197a0 29 3f 22 63 61 6e 6e 6f 74 20 73 74 61 72 74 20  )?"cannot start 
197b0 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 69  a transaction wi
197c0 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69  thin a transacti
197d0 6f 6e 22 3a 28 0a 20 20 20 20 20 20 20 20 28 69  on":(.        (i
197e0 52 6f 6c 6c 62 61 63 6b 29 3f 22 63 61 6e 6e 6f  Rollback)?"canno
197f0 74 20 72 6f 6c 6c 62 61 63 6b 20 2d 20 6e 6f 20  t rollback - no 
19800 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61  transaction is a
19810 63 74 69 76 65 22 3a 0a 20 20 20 20 20 20 20 20  ctive":.        
19820 20 20 20 20 20 20 20 20 20 20 20 22 63 61 6e 6e             "cann
19830 6f 74 20 63 6f 6d 6d 69 74 20 2d 20 6e 6f 20 74  ot commit - no t
19840 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63  ransaction is ac
19850 74 69 76 65 22 29 29 3b 0a 20 20 20 20 20 20 20  tive"));.       
19860 20 20 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49    .    rc = SQLI
19870 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 67 6f  TE_ERROR;.    go
19880 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
19890 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 62 72 65  error;.  }.  bre
198a0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
198b0 3a 20 54 72 61 6e 73 61 63 74 69 6f 6e 20 50 31  : Transaction P1
198c0 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
198d0 2a 2a 20 42 65 67 69 6e 20 61 20 74 72 61 6e 73  ** Begin a trans
198e0 61 63 74 69 6f 6e 20 6f 6e 20 64 61 74 61 62 61  action on databa
198f0 73 65 20 50 31 20 69 66 20 61 20 74 72 61 6e 73  se P1 if a trans
19900 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 61 6c  action is not al
19910 72 65 61 64 79 0a 2a 2a 20 61 63 74 69 76 65 2e  ready.** active.
19920 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 6e 6f 6e  .** If P2 is non
19930 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20 77 72  -zero, then a wr
19940 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20  ite-transaction 
19950 69 73 20 73 74 61 72 74 65 64 2c 20 6f 72 20 69  is started, or i
19960 66 20 61 20 0a 2a 2a 20 72 65 61 64 2d 74 72 61  f a .** read-tra
19970 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 6c 72 65  nsaction is alre
19980 61 64 79 20 61 63 74 69 76 65 2c 20 69 74 20 69  ady active, it i
19990 73 20 75 70 67 72 61 64 65 64 20 74 6f 20 61 20  s upgraded to a 
199a0 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f  write-transactio
199b0 6e 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 7a  n..** If P2 is z
199c0 65 72 6f 2c 20 74 68 65 6e 20 61 20 72 65 61 64  ero, then a read
199d0 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20  -transaction is 
199e0 73 74 61 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 50  started..**.** P
199f0 31 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f  1 is the index o
19a00 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  f the database f
19a10 69 6c 65 20 6f 6e 20 77 68 69 63 68 20 74 68 65  ile on which the
19a20 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a   transaction is.
19a30 2a 2a 20 73 74 61 72 74 65 64 2e 20 20 49 6e 64  ** started.  Ind
19a40 65 78 20 30 20 69 73 20 74 68 65 20 6d 61 69 6e  ex 0 is the main
19a50 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61   database file a
19a60 6e 64 20 69 6e 64 65 78 20 31 20 69 73 20 74 68  nd index 1 is th
19a70 65 0a 2a 2a 20 66 69 6c 65 20 75 73 65 64 20 66  e.** file used f
19a80 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  or temporary tab
19a90 6c 65 73 2e 20 20 49 6e 64 69 63 65 73 20 6f 66  les.  Indices of
19aa0 20 32 20 6f 72 20 6d 6f 72 65 20 61 72 65 20 75   2 or more are u
19ab0 73 65 64 20 66 6f 72 0a 2a 2a 20 61 74 74 61 63  sed for.** attac
19ac0 68 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a  hed databases..*
19ad0 2a 0a 2a 2a 20 49 66 20 61 20 77 72 69 74 65 2d  *.** If a write-
19ae0 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73  transaction is s
19af0 74 61 72 74 65 64 20 61 6e 64 20 74 68 65 20 56  tarted and the V
19b00 64 62 65 2e 75 73 65 73 53 74 6d 74 4a 6f 75 72  dbe.usesStmtJour
19b10 6e 61 6c 20 66 6c 61 67 20 69 73 0a 2a 2a 20 74  nal flag is.** t
19b20 72 75 65 20 28 74 68 69 73 20 66 6c 61 67 20 69  rue (this flag i
19b30 73 20 73 65 74 20 69 66 20 74 68 65 20 56 64 62  s set if the Vdb
19b40 65 20 6d 61 79 20 6d 6f 64 69 66 79 20 6d 6f 72  e may modify mor
19b50 65 20 74 68 61 6e 20 6f 6e 65 20 72 6f 77 20 61  e than one row a
19b60 6e 64 20 6d 61 79 0a 2a 2a 20 74 68 72 6f 77 20  nd may.** throw 
19b70 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70 74 69  an ABORT excepti
19b80 6f 6e 29 2c 20 61 20 73 74 61 74 65 6d 65 6e 74  on), a statement
19b90 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79   transaction may
19ba0 20 61 6c 73 6f 20 62 65 20 6f 70 65 6e 65 64 2e   also be opened.
19bb0 0a 2a 2a 20 4d 6f 72 65 20 73 70 65 63 69 66 69  .** More specifi
19bc0 63 61 6c 6c 79 2c 20 61 20 73 74 61 74 65 6d 65  cally, a stateme
19bd0 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  nt transaction i
19be0 73 20 6f 70 65 6e 65 64 20 69 66 66 20 74 68 65  s opened iff the
19bf0 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e   database.** con
19c00 6e 65 63 74 69 6f 6e 20 69 73 20 63 75 72 72 65  nection is curre
19c10 6e 74 6c 79 20 6e 6f 74 20 69 6e 20 61 75 74 6f  ntly not in auto
19c20 63 6f 6d 6d 69 74 20 6d 6f 64 65 2c 20 6f 72 20  commit mode, or 
19c30 69 66 20 74 68 65 72 65 20 61 72 65 20 6f 74 68  if there are oth
19c40 65 72 0a 2a 2a 20 61 63 74 69 76 65 20 73 74 61  er.** active sta
19c50 74 65 6d 65 6e 74 73 2e 20 41 20 73 74 61 74 65  tements. A state
19c60 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
19c70 20 61 6c 6c 6f 77 73 20 74 68 65 20 63 68 61 6e   allows the chan
19c80 67 65 73 20 6d 61 64 65 20 62 79 20 74 68 69 73  ges made by this
19c90 0a 2a 2a 20 56 44 42 45 20 74 6f 20 62 65 20 72  .** VDBE to be r
19ca0 6f 6c 6c 65 64 20 62 61 63 6b 20 61 66 74 65 72  olled back after
19cb0 20 61 6e 20 65 72 72 6f 72 20 77 69 74 68 6f 75   an error withou
19cc0 74 20 68 61 76 69 6e 67 20 74 6f 20 72 6f 6c 6c  t having to roll
19cd0 20 62 61 63 6b 20 74 68 65 0a 2a 2a 20 65 6e 74   back the.** ent
19ce0 69 72 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  ire transaction.
19cf0 20 49 66 20 6e 6f 20 65 72 72 6f 72 20 69 73 20   If no error is 
19d00 65 6e 63 6f 75 6e 74 65 72 65 64 2c 20 74 68 65  encountered, the
19d10 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
19d20 61 63 74 69 6f 6e 0a 2a 2a 20 77 69 6c 6c 20 61  action.** will a
19d30 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 6f 6d  utomatically com
19d40 6d 69 74 20 77 68 65 6e 20 74 68 65 20 56 44 42  mit when the VDB
19d50 45 20 68 61 6c 74 73 2e 0a 2a 2a 0a 2a 2a 20 49  E halts..**.** I
19d60 66 20 50 35 21 3d 30 20 74 68 65 6e 20 74 68 69  f P5!=0 then thi
19d70 73 20 6f 70 63 6f 64 65 20 61 6c 73 6f 20 63 68  s opcode also ch
19d80 65 63 6b 73 20 74 68 65 20 73 63 68 65 6d 61 20  ecks the schema 
19d90 63 6f 6f 6b 69 65 20 61 67 61 69 6e 73 74 20 50  cookie against P
19da0 33 0a 2a 2a 20 61 6e 64 20 74 68 65 20 73 63 68  3.** and the sch
19db0 65 6d 61 20 67 65 6e 65 72 61 74 69 6f 6e 20 63  ema generation c
19dc0 6f 75 6e 74 65 72 20 61 67 61 69 6e 73 74 20 50  ounter against P
19dd0 34 2e 0a 2a 2a 20 54 68 65 20 63 6f 6f 6b 69 65  4..** The cookie
19de0 20 63 68 61 6e 67 65 73 20 69 74 73 20 76 61 6c   changes its val
19df0 75 65 20 77 68 65 6e 65 76 65 72 20 74 68 65 20  ue whenever the 
19e00 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
19e10 63 68 61 6e 67 65 73 2e 0a 2a 2a 20 54 68 69 73  changes..** This
19e20 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 75 73   operation is us
19e30 65 64 20 74 6f 20 64 65 74 65 63 74 20 77 68 65  ed to detect whe
19e40 6e 20 74 68 61 74 20 74 68 65 20 63 6f 6f 6b 69  n that the cooki
19e50 65 20 68 61 73 20 63 68 61 6e 67 65 64 0a 2a 2a  e has changed.**
19e60 20 61 6e 64 20 74 68 61 74 20 74 68 65 20 63 75   and that the cu
19e70 72 72 65 6e 74 20 70 72 6f 63 65 73 73 20 6e 65  rrent process ne
19e80 65 64 73 20 74 6f 20 72 65 72 65 61 64 20 74 68  eds to reread th
19e90 65 20 73 63 68 65 6d 61 2e 20 20 49 66 20 74 68  e schema.  If th
19ea0 65 20 73 63 68 65 6d 61 0a 2a 2a 20 63 6f 6f 6b  e schema.** cook
19eb0 69 65 20 69 6e 20 50 33 20 64 69 66 66 65 72 73  ie in P3 differs
19ec0 20 66 72 6f 6d 20 74 68 65 20 73 63 68 65 6d 61   from the schema
19ed0 20 63 6f 6f 6b 69 65 20 69 6e 20 74 68 65 20 64   cookie in the d
19ee0 61 74 61 62 61 73 65 20 68 65 61 64 65 72 20 6f  atabase header o
19ef0 72 0a 2a 2a 20 69 66 20 74 68 65 20 73 63 68 65  r.** if the sche
19f00 6d 61 20 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f  ma generation co
19f10 75 6e 74 65 72 20 69 6e 20 50 34 20 64 69 66 66  unter in P4 diff
19f20 65 72 73 20 66 72 6f 6d 20 74 68 65 20 63 75 72  ers from the cur
19f30 72 65 6e 74 0a 2a 2a 20 67 65 6e 65 72 61 74 69  rent.** generati
19f40 6f 6e 20 63 6f 75 6e 74 65 72 2c 20 74 68 65 6e  on counter, then
19f50 20 61 6e 20 53 51 4c 49 54 45 5f 53 43 48 45 4d   an SQLITE_SCHEM
19f60 41 20 65 72 72 6f 72 20 69 73 20 72 61 69 73 65  A error is raise
19f70 64 20 61 6e 64 20 65 78 65 63 75 74 69 6f 6e 0a  d and execution.
19f80 2a 2a 20 68 61 6c 74 73 2e 20 20 54 68 65 20 73  ** halts.  The s
19f90 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 77 72  qlite3_step() wr
19fa0 61 70 70 65 72 20 66 75 6e 63 74 69 6f 6e 20 6d  apper function m
19fb0 69 67 68 74 20 74 68 65 6e 20 72 65 70 72 65 70  ight then reprep
19fc0 61 72 65 20 74 68 65 0a 2a 2a 20 73 74 61 74 65  are the.** state
19fd0 6d 65 6e 74 20 61 6e 64 20 72 65 72 75 6e 20 69  ment and rerun i
19fe0 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e  t from the begin
19ff0 6e 69 6e 67 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ning..*/.case OP
1a000 5f 54 72 61 6e 73 61 63 74 69 6f 6e 3a 20 7b 0a  _Transaction: {.
1a010 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 20 20    Btree *pBt;.  
1a020 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69 6e 74  int iMeta;.  int
1a030 20 69 47 65 6e 3b 0a 0a 20 20 61 73 73 65 72 74   iGen;..  assert
1a040 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29  ( p->bIsReader )
1a050 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  ;.  assert( p->r
1a060 65 61 64 4f 6e 6c 79 3d 3d 30 20 7c 7c 20 70 4f  eadOnly==0 || pO
1a070 70 2d 3e 70 32 3d 3d 30 20 29 3b 0a 20 20 61 73  p->p2==0 );.  as
1a080 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1a090 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
1a0a0 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
1a0b0 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
1a0c0 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70  treeMask, pOp->p
1a0d0 31 29 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  1) );.  if( pOp-
1a0e0 3e 70 32 20 26 26 20 28 64 62 2d 3e 66 6c 61 67  >p2 && (db->flag
1a0f0 73 20 26 20 53 51 4c 49 54 45 5f 51 75 65 72 79  s & SQLITE_Query
1a100 4f 6e 6c 79 29 21 3d 30 20 29 7b 0a 20 20 20 20  Only)!=0 ){.    
1a110 72 63 20 3d 20 53 51 4c 49 54 45 5f 52 45 41 44  rc = SQLITE_READ
1a120 4f 4e 4c 59 3b 0a 20 20 20 20 67 6f 74 6f 20 61  ONLY;.    goto a
1a130 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1a140 72 3b 0a 20 20 7d 0a 20 20 70 42 74 20 3d 20 64  r;.  }.  pBt = d
1a150 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
1a160 70 42 74 3b 0a 0a 20 20 69 66 28 20 70 42 74 20  pBt;..  if( pBt 
1a170 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
1a180 74 65 33 42 74 72 65 65 42 65 67 69 6e 54 72 61  te3BtreeBeginTra
1a190 6e 73 28 70 42 74 2c 20 70 4f 70 2d 3e 70 32 29  ns(pBt, pOp->p2)
1a1a0 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20  ;.    testcase( 
1a1b0 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 5f  rc==SQLITE_BUSY_
1a1c0 53 4e 41 50 53 48 4f 54 20 29 3b 0a 20 20 20 20  SNAPSHOT );.    
1a1d0 74 65 73 74 63 61 73 65 28 20 72 63 3d 3d 53 51  testcase( rc==SQ
1a1e0 4c 49 54 45 5f 42 55 53 59 5f 52 45 43 4f 56 45  LITE_BUSY_RECOVE
1a1f0 52 59 20 29 3b 0a 20 20 20 20 69 66 28 20 72 63  RY );.    if( rc
1a200 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
1a210 20 20 20 20 20 69 66 28 20 28 72 63 26 30 78 66       if( (rc&0xf
1a220 66 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20  f)==SQLITE_BUSY 
1a230 29 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 70 63  ){.        p->pc
1a240 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61   = (int)(pOp - a
1a250 4f 70 29 3b 0a 20 20 20 20 20 20 20 20 70 2d 3e  Op);.        p->
1a260 72 63 20 3d 20 72 63 3b 0a 20 20 20 20 20 20 20  rc = rc;.       
1a270 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
1a280 6e 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  n;.      }.     
1a290 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1a2a0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  to_error;.    }.
1a2b0 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  .    if( pOp->p2
1a2c0 20 26 26 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a   && p->usesStmtJ
1a2d0 6f 75 72 6e 61 6c 20 0a 20 20 20 20 20 26 26 20  ournal .     && 
1a2e0 28 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d  (db->autoCommit=
1a2f0 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56 64 62 65 52  =0 || db->nVdbeR
1a300 65 61 64 3e 31 29 20 0a 20 20 20 20 29 7b 0a 20  ead>1) .    ){. 
1a310 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
1a320 69 74 65 33 42 74 72 65 65 49 73 49 6e 54 72 61  ite3BtreeIsInTra
1a330 6e 73 28 70 42 74 29 20 29 3b 0a 20 20 20 20 20  ns(pBt) );.     
1a340 20 69 66 28 20 70 2d 3e 69 53 74 61 74 65 6d 65   if( p->iStateme
1a350 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  nt==0 ){.       
1a360 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 53 74   assert( db->nSt
1a370 61 74 65 6d 65 6e 74 3e 3d 30 20 26 26 20 64 62  atement>=0 && db
1a380 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 3e 3d 30 20  ->nSavepoint>=0 
1a390 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e  );.        db->n
1a3a0 53 74 61 74 65 6d 65 6e 74 2b 2b 3b 20 0a 20 20  Statement++; .  
1a3b0 20 20 20 20 20 20 70 2d 3e 69 53 74 61 74 65 6d        p->iStatem
1a3c0 65 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70  ent = db->nSavep
1a3d0 6f 69 6e 74 20 2b 20 64 62 2d 3e 6e 53 74 61 74  oint + db->nStat
1a3e0 65 6d 65 6e 74 3b 0a 20 20 20 20 20 20 7d 0a 0a  ement;.      }..
1a3f0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1a400 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28  e3VtabSavepoint(
1a410 64 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f 42 45  db, SAVEPOINT_BE
1a420 47 49 4e 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65  GIN, p->iStateme
1a430 6e 74 2d 31 29 3b 0a 20 20 20 20 20 20 69 66 28  nt-1);.      if(
1a440 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
1a450 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  {.        rc = s
1a460 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e  qlite3BtreeBegin
1a470 53 74 6d 74 28 70 42 74 2c 20 70 2d 3e 69 53 74  Stmt(pBt, p->iSt
1a480 61 74 65 6d 65 6e 74 29 3b 0a 20 20 20 20 20 20  atement);.      
1a490 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 53 74 6f 72  }..      /* Stor
1a4a0 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 76 61  e the current va
1a4b0 6c 75 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  lue of the datab
1a4c0 61 73 65 20 68 61 6e 64 6c 65 73 20 64 65 66 65  ase handles defe
1a4d0 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 0a  rred constraint.
1a4e0 20 20 20 20 20 20 2a 2a 20 63 6f 75 6e 74 65 72        ** counter
1a4f0 2e 20 49 66 20 74 68 65 20 73 74 61 74 65 6d 65  . If the stateme
1a500 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6e  nt transaction n
1a510 65 65 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65  eeds to be rolle
1a520 64 20 62 61 63 6b 2c 0a 20 20 20 20 20 20 2a 2a  d back,.      **
1a530 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
1a540 69 73 20 63 6f 75 6e 74 65 72 20 6e 65 65 64 73  is counter needs
1a550 20 74 6f 20 62 65 20 72 65 73 74 6f 72 65 64 20   to be restored 
1a560 74 6f 6f 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70  too.  */.      p
1a570 2d 3e 6e 53 74 6d 74 44 65 66 43 6f 6e 73 20 3d  ->nStmtDefCons =
1a580 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f   db->nDeferredCo
1a590 6e 73 3b 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74  ns;.      p->nSt
1a5a0 6d 74 44 65 66 49 6d 6d 43 6f 6e 73 20 3d 20 64  mtDefImmCons = d
1a5b0 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  b->nDeferredImmC
1a5c0 6f 6e 73 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  ons;.    }..    
1a5d0 2f 2a 20 47 61 74 68 65 72 20 74 68 65 20 73 63  /* Gather the sc
1a5e0 68 65 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d  hema version num
1a5f0 62 65 72 20 66 6f 72 20 63 68 65 63 6b 69 6e 67  ber for checking
1a600 3a 0a 20 20 20 20 2a 2a 20 49 4d 50 4c 45 4d 45  :.    ** IMPLEME
1a610 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 33 32  NTATION-OF: R-32
1a620 31 39 35 2d 31 39 34 36 35 20 54 68 65 20 73 63  195-19465 The sc
1a630 68 65 6d 61 20 76 65 72 73 69 6f 6e 20 69 73 20  hema version is 
1a640 75 73 65 64 20 62 79 20 53 51 4c 69 74 65 0a 20  used by SQLite. 
1a650 20 20 20 2a 2a 20 65 61 63 68 20 74 69 6d 65 20     ** each time 
1a660 61 20 71 75 65 72 79 20 69 73 20 65 78 65 63 75  a query is execu
1a670 74 65 64 20 74 6f 20 65 6e 73 75 72 65 20 74 68  ted to ensure th
1a680 61 74 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  at the internal 
1a690 63 61 63 68 65 20 6f 66 20 74 68 65 0a 20 20 20  cache of the.   
1a6a0 20 2a 2a 20 73 63 68 65 6d 61 20 75 73 65 64 20   ** schema used 
1a6b0 77 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 74  when compiling t
1a6c0 68 65 20 53 51 4c 20 71 75 65 72 79 20 6d 61 74  he SQL query mat
1a6d0 63 68 65 73 20 74 68 65 20 73 63 68 65 6d 61 20  ches the schema 
1a6e0 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 64 61  of the.    ** da
1a6f0 74 61 62 61 73 65 20 61 67 61 69 6e 73 74 20 77  tabase against w
1a700 68 69 63 68 20 74 68 65 20 63 6f 6d 70 69 6c 65  hich the compile
1a710 64 20 71 75 65 72 79 20 69 73 20 61 63 74 75 61  d query is actua
1a720 6c 6c 79 20 65 78 65 63 75 74 65 64 2e 0a 20 20  lly executed..  
1a730 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33    */.    sqlite3
1a740 42 74 72 65 65 47 65 74 4d 65 74 61 28 70 42 74  BtreeGetMeta(pBt
1a750 2c 20 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56  , BTREE_SCHEMA_V
1a760 45 52 53 49 4f 4e 2c 20 28 75 33 32 20 2a 29 26  ERSION, (u32 *)&
1a770 69 4d 65 74 61 29 3b 0a 20 20 20 20 69 47 65 6e  iMeta);.    iGen
1a780 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e   = db->aDb[pOp->
1a790 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 69 47 65  p1].pSchema->iGe
1a7a0 6e 65 72 61 74 69 6f 6e 3b 0a 20 20 7d 65 6c 73  neration;.  }els
1a7b0 65 7b 0a 20 20 20 20 69 47 65 6e 20 3d 20 69 4d  e{.    iGen = iM
1a7c0 65 74 61 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 61  eta = 0;.  }.  a
1a7d0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d  ssert( pOp->p5==
1a7e0 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 74 79 70 65  0 || pOp->p4type
1a7f0 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
1a800 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 26 20 28  if( pOp->p5 && (
1a810 69 4d 65 74 61 21 3d 70 4f 70 2d 3e 70 33 20 7c  iMeta!=pOp->p3 |
1a820 7c 20 69 47 65 6e 21 3d 70 4f 70 2d 3e 70 34 2e  | iGen!=pOp->p4.
1a830 69 29 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  i) ){.    sqlite
1a840 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a  3DbFree(db, p->z
1a850 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e  ErrMsg);.    p->
1a860 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65  zErrMsg = sqlite
1a870 33 44 62 53 74 72 44 75 70 28 64 62 2c 20 22 64  3DbStrDup(db, "d
1a880 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 68  atabase schema h
1a890 61 73 20 63 68 61 6e 67 65 64 22 29 3b 0a 20 20  as changed");.  
1a8a0 20 20 2f 2a 20 49 66 20 74 68 65 20 73 63 68 65    /* If the sche
1a8b0 6d 61 2d 63 6f 6f 6b 69 65 20 66 72 6f 6d 20 74  ma-cookie from t
1a8c0 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
1a8d0 20 6d 61 74 63 68 65 73 20 74 68 65 20 63 6f 6f   matches the coo
1a8e0 6b 69 65 20 0a 20 20 20 20 2a 2a 20 73 74 6f 72  kie .    ** stor
1a8f0 65 64 20 77 69 74 68 20 74 68 65 20 69 6e 2d 6d  ed with the in-m
1a900 65 6d 6f 72 79 20 72 65 70 72 65 73 65 6e 74 61  emory representa
1a910 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 63 68 65  tion of the sche
1a920 6d 61 2c 20 64 6f 0a 20 20 20 20 2a 2a 20 6e 6f  ma, do.    ** no
1a930 74 20 72 65 6c 6f 61 64 20 74 68 65 20 73 63 68  t reload the sch
1a940 65 6d 61 20 66 72 6f 6d 20 74 68 65 20 64 61 74  ema from the dat
1a950 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20 20 20  abase file..    
1a960 2a 2a 0a 20 20 20 20 2a 2a 20 49 66 20 76 69 72  **.    ** If vir
1a970 74 75 61 6c 2d 74 61 62 6c 65 73 20 61 72 65 20  tual-tables are 
1a980 69 6e 20 75 73 65 2c 20 74 68 69 73 20 69 73 20  in use, this is 
1a990 6e 6f 74 20 6a 75 73 74 20 61 6e 20 6f 70 74 69  not just an opti
1a9a0 6d 69 7a 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a  mization..    **
1a9b0 20 4f 66 74 65 6e 2c 20 76 2d 74 61 62 6c 65 73   Often, v-tables
1a9c0 20 73 74 6f 72 65 20 74 68 65 69 72 20 64 61 74   store their dat
1a9d0 61 20 69 6e 20 6f 74 68 65 72 20 53 51 4c 69 74  a in other SQLit
1a9e0 65 20 74 61 62 6c 65 73 2c 20 77 68 69 63 68 0a  e tables, which.
1a9f0 20 20 20 20 2a 2a 20 61 72 65 20 71 75 65 72 69      ** are queri
1aa00 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 78  ed from within x
1aa10 4e 65 78 74 28 29 20 61 6e 64 20 6f 74 68 65 72  Next() and other
1aa20 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 73   v-table methods
1aa30 20 75 73 69 6e 67 0a 20 20 20 20 2a 2a 20 70 72   using.    ** pr
1aa40 65 70 61 72 65 64 20 71 75 65 72 69 65 73 2e 20  epared queries. 
1aa50 49 66 20 73 75 63 68 20 61 20 71 75 65 72 79 20  If such a query 
1aa60 69 73 20 6f 75 74 2d 6f 66 2d 64 61 74 65 2c 20  is out-of-date, 
1aa70 77 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74  we do not want t
1aa80 6f 0a 20 20 20 20 2a 2a 20 64 69 73 63 61 72 64  o.    ** discard
1aa90 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
1aaa0 68 65 6d 61 2c 20 61 73 20 74 68 65 20 75 73 65  hema, as the use
1aab0 72 20 63 6f 64 65 20 69 6d 70 6c 65 6d 65 6e 74  r code implement
1aac0 69 6e 67 20 74 68 65 0a 20 20 20 20 2a 2a 20 76  ing the.    ** v
1aad0 2d 74 61 62 6c 65 20 77 6f 75 6c 64 20 68 61 76  -table would hav
1aae0 65 20 74 6f 20 62 65 20 72 65 61 64 79 20 66 6f  e to be ready fo
1aaf0 72 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  r the sqlite3_vt
1ab00 61 62 20 73 74 72 75 63 74 75 72 65 20 69 74 73  ab structure its
1ab10 65 6c 66 0a 20 20 20 20 2a 2a 20 74 6f 20 62 65  elf.    ** to be
1ab20 20 69 6e 76 61 6c 69 64 61 74 65 64 20 77 68 65   invalidated whe
1ab30 6e 65 76 65 72 20 73 71 6c 69 74 65 33 5f 73 74  never sqlite3_st
1ab40 65 70 28 29 20 69 73 20 63 61 6c 6c 65 64 20 66  ep() is called f
1ab50 72 6f 6d 20 77 69 74 68 69 6e 20 0a 20 20 20 20  rom within .    
1ab60 2a 2a 20 61 20 76 2d 74 61 62 6c 65 20 6d 65 74  ** a v-table met
1ab70 68 6f 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  hod..    */.    
1ab80 69 66 28 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  if( db->aDb[pOp-
1ab90 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63  >p1].pSchema->sc
1aba0 68 65 6d 61 5f 63 6f 6f 6b 69 65 21 3d 69 4d 65  hema_cookie!=iMe
1abb0 74 61 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ta ){.      sqli
1abc0 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d  te3ResetOneSchem
1abd0 61 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a  a(db, pOp->p1);.
1abe0 20 20 20 20 7d 0a 20 20 20 20 70 2d 3e 65 78 70      }.    p->exp
1abf0 69 72 65 64 20 3d 20 31 3b 0a 20 20 20 20 72 63  ired = 1;.    rc
1ac00 20 3d 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41   = SQLITE_SCHEMA
1ac10 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29  ;.  }.  if( rc )
1ac20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1ac30 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61  to_error;.  brea
1ac40 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1ac50 20 52 65 61 64 43 6f 6f 6b 69 65 20 50 31 20 50   ReadCookie P1 P
1ac60 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52  2 P3 * *.**.** R
1ac70 65 61 64 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65  ead cookie numbe
1ac80 72 20 50 33 20 66 72 6f 6d 20 64 61 74 61 62 61  r P3 from databa
1ac90 73 65 20 50 31 20 61 6e 64 20 77 72 69 74 65 20  se P1 and write 
1aca0 69 74 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  it into register
1acb0 20 50 32 2e 0a 2a 2a 20 50 33 3d 3d 31 20 69 73   P2..** P3==1 is
1acc0 20 74 68 65 20 73 63 68 65 6d 61 20 76 65 72 73   the schema vers
1acd0 69 6f 6e 2e 20 20 50 33 3d 3d 32 20 69 73 20 74  ion.  P3==2 is t
1ace0 68 65 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d  he database form
1acf0 61 74 2e 0a 2a 2a 20 50 33 3d 3d 33 20 69 73 20  at..** P3==3 is 
1ad00 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20  the recommended 
1ad10 70 61 67 65 72 20 63 61 63 68 65 20 73 69 7a 65  pager cache size
1ad20 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20  , and so forth. 
1ad30 20 50 31 3d 3d 30 20 69 73 0a 2a 2a 20 74 68 65   P1==0 is.** the
1ad40 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
1ad50 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73  ile and P1==1 is
1ad60 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
1ad70 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  le used to store
1ad80 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 74 61  .** temporary ta
1ad90 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72  bles..**.** Ther
1ada0 65 20 6d 75 73 74 20 62 65 20 61 20 72 65 61 64  e must be a read
1adb0 2d 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61 74  -lock on the dat
1adc0 61 62 61 73 65 20 28 65 69 74 68 65 72 20 61 20  abase (either a 
1add0 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 6d  transaction.** m
1ade0 75 73 74 20 62 65 20 73 74 61 72 74 65 64 20 6f  ust be started o
1adf0 72 20 74 68 65 72 65 20 6d 75 73 74 20 62 65 20  r there must be 
1ae00 61 6e 20 6f 70 65 6e 20 63 75 72 73 6f 72 29 20  an open cursor) 
1ae10 62 65 66 6f 72 65 0a 2a 2a 20 65 78 65 63 75 74  before.** execut
1ae20 69 6e 67 20 74 68 69 73 20 69 6e 73 74 72 75 63  ing this instruc
1ae30 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
1ae40 5f 52 65 61 64 43 6f 6f 6b 69 65 3a 20 7b 20 20  _ReadCookie: {  
1ae50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1ae60 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20 69 4d  out2 */.  int iM
1ae70 65 74 61 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a  eta;.  int iDb;.
1ae80 20 20 69 6e 74 20 69 43 6f 6f 6b 69 65 3b 0a 0a    int iCookie;..
1ae90 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73    assert( p->bIs
1aea0 52 65 61 64 65 72 20 29 3b 0a 20 20 69 44 62 20  Reader );.  iDb 
1aeb0 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 43 6f  = pOp->p1;.  iCo
1aec0 6f 6b 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  okie = pOp->p3;.
1aed0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1aee0 33 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45  3<SQLITE_N_BTREE
1aef0 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73 73 65 72  _META );.  asser
1af00 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62  t( iDb>=0 && iDb
1af10 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
1af20 73 65 72 74 28 20 64 62 2d 3e 61 44 62 5b 69 44  sert( db->aDb[iD
1af30 62 5d 2e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61  b].pBt!=0 );.  a
1af40 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73  ssert( DbMaskTes
1af50 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20  t(p->btreeMask, 
1af60 69 44 62 29 20 29 3b 0a 0a 20 20 73 71 6c 69 74  iDb) );..  sqlit
1af70 65 33 42 74 72 65 65 47 65 74 4d 65 74 61 28 64  e3BtreeGetMeta(d
1af80 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c  b->aDb[iDb].pBt,
1af90 20 69 43 6f 6f 6b 69 65 2c 20 28 75 33 32 20 2a   iCookie, (u32 *
1afa0 29 26 69 4d 65 74 61 29 3b 0a 20 20 70 4f 75 74  )&iMeta);.  pOut
1afb0 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
1afc0 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75  e(p, pOp);.  pOu
1afd0 74 2d 3e 75 2e 69 20 3d 20 69 4d 65 74 61 3b 0a  t->u.i = iMeta;.
1afe0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1aff0 70 63 6f 64 65 3a 20 53 65 74 43 6f 6f 6b 69 65  pcode: SetCookie
1b000 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
1b010 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 69 6e  .** Write the in
1b020 74 65 67 65 72 20 76 61 6c 75 65 20 50 33 20 69  teger value P3 i
1b030 6e 74 6f 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65  nto cookie numbe
1b040 72 20 50 32 20 6f 66 20 64 61 74 61 62 61 73 65  r P2 of database
1b050 20 50 31 2e 0a 2a 2a 20 50 32 3d 3d 31 20 69 73   P1..** P2==1 is
1b060 20 74 68 65 20 73 63 68 65 6d 61 20 76 65 72 73   the schema vers
1b070 69 6f 6e 2e 20 20 50 32 3d 3d 32 20 69 73 20 74  ion.  P2==2 is t
1b080 68 65 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d  he database form
1b090 61 74 2e 0a 2a 2a 20 50 32 3d 3d 33 20 69 73 20  at..** P2==3 is 
1b0a0 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20  the recommended 
1b0b0 70 61 67 65 72 20 63 61 63 68 65 20 0a 2a 2a 20  pager cache .** 
1b0c0 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72  size, and so for
1b0d0 74 68 2e 20 20 50 31 3d 3d 30 20 69 73 20 74 68  th.  P1==0 is th
1b0e0 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
1b0f0 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20 69  file and P1==1 i
1b100 73 20 74 68 65 20 0a 2a 2a 20 64 61 74 61 62 61  s the .** databa
1b110 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20  se file used to 
1b120 73 74 6f 72 65 20 74 65 6d 70 6f 72 61 72 79 20  store temporary 
1b130 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20  tables..**.** A 
1b140 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74  transaction must
1b150 20 62 65 20 73 74 61 72 74 65 64 20 62 65 66 6f   be started befo
1b160 72 65 20 65 78 65 63 75 74 69 6e 67 20 74 68 69  re executing thi
1b170 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73  s opcode..*/.cas
1b180 65 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 3a 20  e OP_SetCookie: 
1b190 7b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 20 20 61  {.  Db *pDb;.  a
1b1a0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 53  ssert( pOp->p2<S
1b1b0 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45  QLITE_N_BTREE_ME
1b1c0 54 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  TA );.  assert( 
1b1d0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
1b1e0 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
1b1f0 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73  .  assert( DbMas
1b200 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61  kTest(p->btreeMa
1b210 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a  sk, pOp->p1) );.
1b220 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
1b230 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44  dOnly==0 );.  pD
1b240 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70  b = &db->aDb[pOp
1b250 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
1b260 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a   pDb->pBt!=0 );.
1b270 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
1b280 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64  3SchemaMutexHeld
1b290 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 29  (db, pOp->p1, 0)
1b2a0 20 29 3b 0a 20 20 2f 2a 20 53 65 65 20 6e 6f 74   );.  /* See not
1b2b0 65 20 61 62 6f 75 74 20 69 6e 64 65 78 20 73 68  e about index sh
1b2c0 69 66 74 69 6e 67 20 6f 6e 20 4f 50 5f 52 65 61  ifting on OP_Rea
1b2d0 64 43 6f 6f 6b 69 65 20 2a 2f 0a 20 20 72 63 20  dCookie */.  rc 
1b2e0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 55 70  = sqlite3BtreeUp
1b2f0 64 61 74 65 4d 65 74 61 28 70 44 62 2d 3e 70 42  dateMeta(pDb->pB
1b300 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 70 4f 70 2d  t, pOp->p2, pOp-
1b310 3e 70 33 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  >p3);.  if( pOp-
1b320 3e 70 32 3d 3d 42 54 52 45 45 5f 53 43 48 45 4d  >p2==BTREE_SCHEM
1b330 41 5f 56 45 52 53 49 4f 4e 20 29 7b 0a 20 20 20  A_VERSION ){.   
1b340 20 2f 2a 20 57 68 65 6e 20 74 68 65 20 73 63 68   /* When the sch
1b350 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67  ema cookie chang
1b360 65 73 2c 20 72 65 63 6f 72 64 20 74 68 65 20 6e  es, record the n
1b370 65 77 20 63 6f 6f 6b 69 65 20 69 6e 74 65 72 6e  ew cookie intern
1b380 61 6c 6c 79 20 2a 2f 0a 20 20 20 20 70 44 62 2d  ally */.    pDb-
1b390 3e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61  >pSchema->schema
1b3a0 5f 63 6f 6f 6b 69 65 20 3d 20 70 4f 70 2d 3e 70  _cookie = pOp->p
1b3b0 33 3b 0a 20 20 20 20 64 62 2d 3e 66 6c 61 67 73  3;.    db->flags
1b3c0 20 7c 3d 20 53 51 4c 49 54 45 5f 49 6e 74 65 72   |= SQLITE_Inter
1b3d0 6e 43 68 61 6e 67 65 73 3b 0a 20 20 7d 65 6c 73  nChanges;.  }els
1b3e0 65 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42  e if( pOp->p2==B
1b3f0 54 52 45 45 5f 46 49 4c 45 5f 46 4f 52 4d 41 54  TREE_FILE_FORMAT
1b400 20 29 7b 0a 20 20 20 20 2f 2a 20 52 65 63 6f 72   ){.    /* Recor
1b410 64 20 63 68 61 6e 67 65 73 20 69 6e 20 74 68 65  d changes in the
1b420 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 2a 2f 0a   file format */.
1b430 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61      pDb->pSchema
1b440 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20  ->file_format = 
1b450 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 20 20 69  pOp->p3;.  }.  i
1b460 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 31 20 29 7b  f( pOp->p1==1 ){
1b470 0a 20 20 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61  .    /* Invalida
1b480 74 65 20 61 6c 6c 20 70 72 65 70 61 72 65 64 20  te all prepared 
1b490 73 74 61 74 65 6d 65 6e 74 73 20 77 68 65 6e 65  statements whene
1b4a0 76 65 72 20 74 68 65 20 54 45 4d 50 20 64 61 74  ver the TEMP dat
1b4b0 61 62 61 73 65 0a 20 20 20 20 2a 2a 20 73 63 68  abase.    ** sch
1b4c0 65 6d 61 20 69 73 20 63 68 61 6e 67 65 64 2e 20  ema is changed. 
1b4d0 20 54 69 63 6b 65 74 20 23 31 36 34 34 20 2a 2f   Ticket #1644 */
1b4e0 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69  .    sqlite3Expi
1b4f0 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d  rePreparedStatem
1b500 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 70 2d  ents(db);.    p-
1b510 3e 65 78 70 69 72 65 64 20 3d 20 30 3b 0a 20 20  >expired = 0;.  
1b520 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  }.  if( rc ) got
1b530 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1b540 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  rror;.  break;.}
1b550 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65  ../* Opcode: Ope
1b560 6e 52 65 61 64 20 50 31 20 50 32 20 50 33 20 50  nRead P1 P2 P3 P
1b570 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
1b580 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33  : root=P2 iDb=P3
1b590 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65  .**.** Open a re
1b5a0 61 64 2d 6f 6e 6c 79 20 63 75 72 73 6f 72 20 66  ad-only cursor f
1b5b0 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20  or the database 
1b5c0 74 61 62 6c 65 20 77 68 6f 73 65 20 72 6f 6f 74  table whose root
1b5d0 20 70 61 67 65 20 69 73 0a 2a 2a 20 50 32 20 69   page is.** P2 i
1b5e0 6e 20 61 20 64 61 74 61 62 61 73 65 20 66 69 6c  n a database fil
1b5f0 65 2e 20 20 54 68 65 20 64 61 74 61 62 61 73 65  e.  The database
1b600 20 66 69 6c 65 20 69 73 20 64 65 74 65 72 6d 69   file is determi
1b610 6e 65 64 20 62 79 20 50 33 2e 20 0a 2a 2a 20 50  ned by P3. .** P
1b620 33 3d 3d 30 20 6d 65 61 6e 73 20 74 68 65 20 6d  3==0 means the m
1b630 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20 50 33  ain database, P3
1b640 3d 3d 31 20 6d 65 61 6e 73 20 74 68 65 20 64 61  ==1 means the da
1b650 74 61 62 61 73 65 20 75 73 65 64 20 66 6f 72 20  tabase used for 
1b660 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 74 61  .** temporary ta
1b670 62 6c 65 73 2c 20 61 6e 64 20 50 33 3e 31 20 6d  bles, and P3>1 m
1b680 65 61 6e 73 20 75 73 65 64 20 74 68 65 20 63 6f  eans used the co
1b690 72 72 65 73 70 6f 6e 64 69 6e 67 20 61 74 74 61  rresponding atta
1b6a0 63 68 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65  ched.** database
1b6b0 2e 20 20 47 69 76 65 20 74 68 65 20 6e 65 77 20  .  Give the new 
1b6c0 63 75 72 73 6f 72 20 61 6e 20 69 64 65 6e 74 69  cursor an identi
1b6d0 66 69 65 72 20 6f 66 20 50 31 2e 20 20 54 68 65  fier of P1.  The
1b6e0 20 50 31 0a 2a 2a 20 76 61 6c 75 65 73 20 6e 65   P1.** values ne
1b6f0 65 64 20 6e 6f 74 20 62 65 20 63 6f 6e 74 69 67  ed not be contig
1b700 75 6f 75 73 20 62 75 74 20 61 6c 6c 20 50 31 20  uous but all P1 
1b710 76 61 6c 75 65 73 20 73 68 6f 75 6c 64 20 62 65  values should be
1b720 20 73 6d 61 6c 6c 20 69 6e 74 65 67 65 72 73 2e   small integers.
1b730 0a 2a 2a 20 49 74 20 69 73 20 61 6e 20 65 72 72  .** It is an err
1b740 6f 72 20 66 6f 72 20 50 31 20 74 6f 20 62 65 20  or for P1 to be 
1b750 6e 65 67 61 74 69 76 65 2e 0a 2a 2a 0a 2a 2a 20  negative..**.** 
1b760 49 66 20 50 35 21 3d 30 20 74 68 65 6e 20 75 73  If P5!=0 then us
1b770 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  e the content of
1b780 20 72 65 67 69 73 74 65 72 20 50 32 20 61 73 20   register P2 as 
1b790 74 68 65 20 72 6f 6f 74 20 70 61 67 65 2c 20 6e  the root page, n
1b7a0 6f 74 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20  ot.** the value 
1b7b0 6f 66 20 50 32 20 69 74 73 65 6c 66 2e 0a 2a 2a  of P2 itself..**
1b7c0 0a 2a 2a 20 54 68 65 72 65 20 77 69 6c 6c 20 62  .** There will b
1b7d0 65 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 6f 6e  e a read lock on
1b7e0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 77 68   the database wh
1b7f0 65 6e 65 76 65 72 20 74 68 65 72 65 20 69 73 20  enever there is 
1b800 61 6e 0a 2a 2a 20 6f 70 65 6e 20 63 75 72 73 6f  an.** open curso
1b810 72 2e 20 20 49 66 20 74 68 65 20 64 61 74 61 62  r.  If the datab
1b820 61 73 65 20 77 61 73 20 75 6e 6c 6f 63 6b 65 64  ase was unlocked
1b830 20 70 72 69 6f 72 20 74 6f 20 74 68 69 73 20 69   prior to this i
1b840 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 74 68  nstruction.** th
1b850 65 6e 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 69  en a read lock i
1b860 73 20 61 63 71 75 69 72 65 64 20 61 73 20 70 61  s acquired as pa
1b870 72 74 20 6f 66 20 74 68 69 73 20 69 6e 73 74 72  rt of this instr
1b880 75 63 74 69 6f 6e 2e 20 20 41 20 72 65 61 64 0a  uction.  A read.
1b890 2a 2a 20 6c 6f 63 6b 20 61 6c 6c 6f 77 73 20 6f  ** lock allows o
1b8a0 74 68 65 72 20 70 72 6f 63 65 73 73 65 73 20 74  ther processes t
1b8b0 6f 20 72 65 61 64 20 74 68 65 20 64 61 74 61 62  o read the datab
1b8c0 61 73 65 20 62 75 74 20 70 72 6f 68 69 62 69 74  ase but prohibit
1b8d0 73 0a 2a 2a 20 61 6e 79 20 6f 74 68 65 72 20 70  s.** any other p
1b8e0 72 6f 63 65 73 73 20 66 72 6f 6d 20 6d 6f 64 69  rocess from modi
1b8f0 66 79 69 6e 67 20 74 68 65 20 64 61 74 61 62 61  fying the databa
1b900 73 65 2e 20 20 54 68 65 20 72 65 61 64 20 6c 6f  se.  The read lo
1b910 63 6b 20 69 73 0a 2a 2a 20 72 65 6c 65 61 73 65  ck is.** release
1b920 64 20 77 68 65 6e 20 61 6c 6c 20 63 75 72 73 6f  d when all curso
1b930 72 73 20 61 72 65 20 63 6c 6f 73 65 64 2e 20 20  rs are closed.  
1b940 49 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  If this instruct
1b950 69 6f 6e 20 61 74 74 65 6d 70 74 73 0a 2a 2a 20  ion attempts.** 
1b960 74 6f 20 67 65 74 20 61 20 72 65 61 64 20 6c 6f  to get a read lo
1b970 63 6b 20 62 75 74 20 66 61 69 6c 73 2c 20 74 68  ck but fails, th
1b980 65 20 73 63 72 69 70 74 20 74 65 72 6d 69 6e 61  e script termina
1b990 74 65 73 20 77 69 74 68 20 61 6e 0a 2a 2a 20 53  tes with an.** S
1b9a0 51 4c 49 54 45 5f 42 55 53 59 20 65 72 72 6f 72  QLITE_BUSY error
1b9b0 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65   code..**.** The
1b9c0 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62 65   P4 value may be
1b9d0 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67   either an integ
1b9e0 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72  er (P4_INT32) or
1b9f0 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a   a pointer to.**
1ba00 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63   a KeyInfo struc
1ba10 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f  ture (P4_KEYINFO
1ba20 29 2e 20 49 66 20 69 74 20 69 73 20 61 20 70 6f  ). If it is a po
1ba30 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e  inter to a KeyIn
1ba40 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  fo .** structure
1ba50 2c 20 74 68 65 6e 20 73 61 69 64 20 73 74 72 75  , then said stru
1ba60 63 74 75 72 65 20 64 65 66 69 6e 65 73 20 74 68  cture defines th
1ba70 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f  e content and co
1ba80 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75  llating .** sequ
1ba90 65 6e 63 65 20 6f 66 20 74 68 65 20 69 6e 64 65  ence of the inde
1baa0 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20  x being opened. 
1bab0 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 34  Otherwise, if P4
1bac0 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a   is an integer .
1bad0 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20  ** value, it is 
1bae0 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65  set to the numbe
1baf0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
1bb00 74 68 65 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a  the table..**.**
1bb10 20 53 65 65 20 61 6c 73 6f 3a 20 4f 70 65 6e 57   See also: OpenW
1bb20 72 69 74 65 2c 20 52 65 6f 70 65 6e 49 64 78 0a  rite, ReopenIdx.
1bb30 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  */./* Opcode: Re
1bb40 6f 70 65 6e 49 64 78 20 50 31 20 50 32 20 50 33  openIdx P1 P2 P3
1bb50 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
1bb60 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d  is: root=P2 iDb=
1bb70 50 33 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 65 6f  P3.**.** The Reo
1bb80 70 65 6e 49 64 78 20 6f 70 63 6f 64 65 20 77 6f  penIdx opcode wo
1bb90 72 6b 73 20 65 78 61 63 74 6c 79 20 6c 69 6b 65  rks exactly like
1bba0 20 52 65 61 64 4f 70 65 6e 20 65 78 63 65 70 74   ReadOpen except
1bbb0 20 74 68 61 74 20 69 74 20 66 69 72 73 74 0a 2a   that it first.*
1bbc0 2a 20 63 68 65 63 6b 73 20 74 6f 20 73 65 65 20  * checks to see 
1bbd0 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 6f 6e  if the cursor on
1bbe0 20 50 31 20 69 73 20 61 6c 72 65 61 64 79 20 6f   P1 is already o
1bbf0 70 65 6e 20 77 69 74 68 20 61 20 72 6f 6f 74 20  pen with a root 
1bc00 70 61 67 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f  page.** number o
1bc10 66 20 50 32 20 61 6e 64 20 69 66 20 69 74 20 69  f P2 and if it i
1bc20 73 20 74 68 69 73 20 6f 70 63 6f 64 65 20 62 65  s this opcode be
1bc30 63 6f 6d 65 73 20 61 20 6e 6f 2d 6f 70 2e 20 20  comes a no-op.  
1bc40 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 0a  In other words,.
1bc50 2a 2a 20 69 66 20 74 68 65 20 63 75 72 73 6f 72  ** if the cursor
1bc60 20 69 73 20 61 6c 72 65 61 64 79 20 6f 70 65 6e   is already open
1bc70 2c 20 64 6f 20 6e 6f 74 20 72 65 6f 70 65 6e 20  , do not reopen 
1bc80 69 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 65  it..**.** The Re
1bc90 6f 70 65 6e 49 64 78 20 6f 70 63 6f 64 65 20 6d  openIdx opcode m
1bca0 61 79 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20  ay only be used 
1bcb0 77 69 74 68 20 50 35 3d 3d 30 20 61 6e 64 20 77  with P5==0 and w
1bcc0 69 74 68 20 50 34 20 62 65 69 6e 67 0a 2a 2a 20  ith P4 being.** 
1bcd0 61 20 50 34 5f 4b 45 59 49 4e 46 4f 20 6f 62 6a  a P4_KEYINFO obj
1bce0 65 63 74 2e 20 20 46 75 72 74 68 65 72 6d 6f 72  ect.  Furthermor
1bcf0 65 2c 20 74 68 65 20 50 33 20 76 61 6c 75 65 20  e, the P3 value 
1bd00 6d 75 73 74 20 62 65 20 74 68 65 20 73 61 6d 65  must be the same
1bd10 20 61 73 0a 2a 2a 20 65 76 65 72 79 20 6f 74 68   as.** every oth
1bd20 65 72 20 52 65 6f 70 65 6e 49 64 78 20 6f 72 20  er ReopenIdx or 
1bd30 4f 70 65 6e 52 65 61 64 20 66 6f 72 20 74 68 65  OpenRead for the
1bd40 20 73 61 6d 65 20 63 75 72 73 6f 72 20 6e 75 6d   same cursor num
1bd50 62 65 72 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 74  ber..**.** See t
1bd60 68 65 20 4f 70 65 6e 52 65 61 64 20 6f 70 63 6f  he OpenRead opco
1bd70 64 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e  de documentation
1bd80 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
1bd90 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
1bda0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 57  /* Opcode: OpenW
1bdb0 72 69 74 65 20 50 31 20 50 32 20 50 33 20 50 34  rite P1 P2 P3 P4
1bdc0 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
1bdd0 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a   root=P2 iDb=P3.
1bde0 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61  **.** Open a rea
1bdf0 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20 6e  d/write cursor n
1be00 61 6d 65 64 20 50 31 20 6f 6e 20 74 68 65 20 74  amed P1 on the t
1be10 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68  able or index wh
1be20 6f 73 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67 65  ose root.** page
1be30 20 69 73 20 50 32 2e 20 20 4f 72 20 69 66 20 50   is P2.  Or if P
1be40 35 21 3d 30 20 75 73 65 20 74 68 65 20 63 6f 6e  5!=0 use the con
1be50 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
1be60 20 50 32 20 74 6f 20 66 69 6e 64 20 74 68 65 0a   P2 to find the.
1be70 2a 2a 20 72 6f 6f 74 20 70 61 67 65 2e 0a 2a 2a  ** root page..**
1be80 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65  .** The P4 value
1be90 20 6d 61 79 20 62 65 20 65 69 74 68 65 72 20 61   may be either a
1bea0 6e 20 69 6e 74 65 67 65 72 20 28 50 34 5f 49 4e  n integer (P4_IN
1beb0 54 33 32 29 20 6f 72 20 61 20 70 6f 69 6e 74 65  T32) or a pointe
1bec0 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66  r to.** a KeyInf
1bed0 6f 20 73 74 72 75 63 74 75 72 65 20 28 50 34 5f  o structure (P4_
1bee0 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20 69 74 20  KEYINFO). If it 
1bef0 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
1bf00 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 73 74  a KeyInfo .** st
1bf10 72 75 63 74 75 72 65 2c 20 74 68 65 6e 20 73 61  ructure, then sa
1bf20 69 64 20 73 74 72 75 63 74 75 72 65 20 64 65 66  id structure def
1bf30 69 6e 65 73 20 74 68 65 20 63 6f 6e 74 65 6e 74  ines the content
1bf40 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a   and collating .
1bf50 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74  ** sequence of t
1bf60 68 65 20 69 6e 64 65 78 20 62 65 69 6e 67 20 6f  he index being o
1bf70 70 65 6e 65 64 2e 20 4f 74 68 65 72 77 69 73 65  pened. Otherwise
1bf80 2c 20 69 66 20 50 34 20 69 73 20 61 6e 20 69 6e  , if P4 is an in
1bf90 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c  teger .** value,
1bfa0 20 69 74 20 69 73 20 73 65 74 20 74 6f 20 74 68   it is set to th
1bfb0 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
1bfc0 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  mns in the table
1bfd0 2c 20 6f 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6c  , or to the.** l
1bfe0 61 72 67 65 73 74 20 69 6e 64 65 78 20 6f 66 20  argest index of 
1bff0 61 6e 79 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68  any column of th
1c000 65 20 74 61 62 6c 65 20 74 68 61 74 20 69 73 20  e table that is 
1c010 61 63 74 75 61 6c 6c 79 20 75 73 65 64 2e 0a 2a  actually used..*
1c020 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
1c030 63 74 69 6f 6e 20 77 6f 72 6b 73 20 6a 75 73 74  ction works just
1c040 20 6c 69 6b 65 20 4f 70 65 6e 52 65 61 64 20 65   like OpenRead e
1c050 78 63 65 70 74 20 74 68 61 74 20 69 74 20 6f 70  xcept that it op
1c060 65 6e 73 20 74 68 65 20 63 75 72 73 6f 72 0a 2a  ens the cursor.*
1c070 2a 20 69 6e 20 72 65 61 64 2f 77 72 69 74 65 20  * in read/write 
1c080 6d 6f 64 65 2e 20 20 46 6f 72 20 61 20 67 69 76  mode.  For a giv
1c090 65 6e 20 74 61 62 6c 65 2c 20 74 68 65 72 65 20  en table, there 
1c0a0 63 61 6e 20 62 65 20 6f 6e 65 20 6f 72 20 6d 6f  can be one or mo
1c0b0 72 65 20 72 65 61 64 2d 6f 6e 6c 79 0a 2a 2a 20  re read-only.** 
1c0c0 63 75 72 73 6f 72 73 20 6f 72 20 61 20 73 69 6e  cursors or a sin
1c0d0 67 6c 65 20 72 65 61 64 2f 77 72 69 74 65 20 63  gle read/write c
1c0e0 75 72 73 6f 72 20 62 75 74 20 6e 6f 74 20 62 6f  ursor but not bo
1c0f0 74 68 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  th..**.** See al
1c100 73 6f 20 4f 70 65 6e 52 65 61 64 2e 0a 2a 2f 0a  so OpenRead..*/.
1c110 63 61 73 65 20 4f 50 5f 52 65 6f 70 65 6e 49 64  case OP_ReopenId
1c120 78 3a 20 7b 0a 20 20 69 6e 74 20 6e 46 69 65 6c  x: {.  int nFiel
1c130 64 3b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b  d;.  KeyInfo *pK
1c140 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 70 32  eyInfo;.  int p2
1c150 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 69  ;.  int iDb;.  i
1c160 6e 74 20 77 72 46 6c 61 67 3b 0a 20 20 42 74 72  nt wrFlag;.  Btr
1c170 65 65 20 2a 70 58 3b 0a 20 20 56 64 62 65 43 75  ee *pX;.  VdbeCu
1c180 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 44 62  rsor *pCur;.  Db
1c190 20 2a 70 44 62 3b 0a 0a 20 20 61 73 73 65 72 74   *pDb;..  assert
1c1a0 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20  ( pOp->p5==0 || 
1c1b0 70 4f 70 2d 3e 70 35 3d 3d 4f 50 46 4c 41 47 5f  pOp->p5==OPFLAG_
1c1c0 53 45 45 4b 45 51 20 29 3b 0a 20 20 61 73 73 65  SEEKEQ );.  asse
1c1d0 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
1c1e0 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20  =P4_KEYINFO );. 
1c1f0 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72   pCur = p->apCsr
1c200 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
1c210 20 70 43 75 72 20 26 26 20 70 43 75 72 2d 3e 70   pCur && pCur->p
1c220 67 6e 6f 52 6f 6f 74 3d 3d 28 75 33 32 29 70 4f  gnoRoot==(u32)pO
1c230 70 2d 3e 70 32 20 29 7b 0a 20 20 20 20 61 73 73  p->p2 ){.    ass
1c240 65 72 74 28 20 70 43 75 72 2d 3e 69 44 62 3d 3d  ert( pCur->iDb==
1c250 70 4f 70 2d 3e 70 33 20 29 3b 20 20 20 20 20 20  pOp->p3 );      
1c260 2f 2a 20 47 75 61 72 61 6e 74 65 65 64 20 62 79  /* Guaranteed by
1c270 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61   the code genera
1c280 74 6f 72 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20  tor */.    goto 
1c290 6f 70 65 6e 5f 63 75 72 73 6f 72 5f 73 65 74 5f  open_cursor_set_
1c2a0 68 69 6e 74 73 3b 0a 20 20 7d 0a 20 20 2f 2a 20  hints;.  }.  /* 
1c2b0 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  If the cursor is
1c2c0 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 6f   not currently o
1c2d0 70 65 6e 20 6f 72 20 69 73 20 6f 70 65 6e 20 6f  pen or is open o
1c2e0 6e 20 61 20 64 69 66 66 65 72 65 6e 74 0a 20 20  n a different.  
1c2f0 2a 2a 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 66  ** index, then f
1c300 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f  all through into
1c310 20 4f 50 5f 4f 70 65 6e 52 65 61 64 20 74 6f 20   OP_OpenRead to 
1c320 66 6f 72 63 65 20 61 20 72 65 6f 70 65 6e 20 2a  force a reopen *
1c330 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 52 65  /.case OP_OpenRe
1c340 61 64 3a 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e  ad:.case OP_Open
1c350 57 72 69 74 65 3a 0a 0a 20 20 61 73 73 65 72 74  Write:..  assert
1c360 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
1c370 50 5f 4f 70 65 6e 57 72 69 74 65 20 7c 7c 20 70  P_OpenWrite || p
1c380 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70  Op->p5==0 || pOp
1c390 2d 3e 70 35 3d 3d 4f 50 46 4c 41 47 5f 53 45 45  ->p5==OPFLAG_SEE
1c3a0 4b 45 51 20 29 3b 0a 20 20 61 73 73 65 72 74 28  KEQ );.  assert(
1c3b0 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b   p->bIsReader );
1c3c0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1c3d0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 52  opcode==OP_OpenR
1c3e0 65 61 64 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  ead || pOp->opco
1c3f0 64 65 3d 3d 4f 50 5f 52 65 6f 70 65 6e 49 64 78  de==OP_ReopenIdx
1c400 0a 20 20 20 20 20 20 20 20 20 20 7c 7c 20 70 2d  .          || p-
1c410 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
1c420 0a 20 20 69 66 28 20 70 2d 3e 65 78 70 69 72 65  .  if( p->expire
1c430 64 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51  d ){.    rc = SQ
1c440 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42  LITE_ABORT_ROLLB
1c450 41 43 4b 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62  ACK;.    goto ab
1c460 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1c470 3b 0a 20 20 7d 0a 0a 20 20 6e 46 69 65 6c 64 20  ;.  }..  nField 
1c480 3d 20 30 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20  = 0;.  pKeyInfo 
1c490 3d 20 30 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d  = 0;.  p2 = pOp-
1c4a0 3e 70 32 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70  >p2;.  iDb = pOp
1c4b0 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p3;.  assert( 
1c4c0 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62  iDb>=0 && iDb<db
1c4d0 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
1c4e0 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d  t( DbMaskTest(p-
1c4f0 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 44 62 29  >btreeMask, iDb)
1c500 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d   );.  pDb = &db-
1c510 3e 61 44 62 5b 69 44 62 5d 3b 0a 20 20 70 58 20  >aDb[iDb];.  pX 
1c520 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20 61 73  = pDb->pBt;.  as
1c530 73 65 72 74 28 20 70 58 21 3d 30 20 29 3b 0a 20  sert( pX!=0 );. 
1c540 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
1c550 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20 29  ==OP_OpenWrite )
1c560 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 4f 50  {.    assert( OP
1c570 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 3d 3d  FLAG_FORDELETE==
1c580 42 54 52 45 45 5f 46 4f 52 44 45 4c 45 54 45 20  BTREE_FORDELETE 
1c590 29 3b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20  );.    wrFlag = 
1c5a0 42 54 52 45 45 5f 57 52 43 53 52 20 7c 20 28 70  BTREE_WRCSR | (p
1c5b0 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
1c5c0 46 4f 52 44 45 4c 45 54 45 29 3b 0a 20 20 20 20  FORDELETE);.    
1c5d0 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53  assert( sqlite3S
1c5e0 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64  chemaMutexHeld(d
1c5f0 62 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20  b, iDb, 0) );.  
1c600 20 20 69 66 28 20 70 44 62 2d 3e 70 53 63 68 65    if( pDb->pSche
1c610 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20  ma->file_format 
1c620 3c 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c  < p->minWriteFil
1c630 65 46 6f 72 6d 61 74 20 29 7b 0a 20 20 20 20 20  eFormat ){.     
1c640 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65   p->minWriteFile
1c650 46 6f 72 6d 61 74 20 3d 20 70 44 62 2d 3e 70 53  Format = pDb->pS
1c660 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d  chema->file_form
1c670 61 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  at;.    }.  }els
1c680 65 7b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20  e{.    wrFlag = 
1c690 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70  0;.  }.  if( pOp
1c6a0 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 32  ->p5 & OPFLAG_P2
1c6b0 49 53 52 45 47 20 29 7b 0a 20 20 20 20 61 73 73  ISREG ){.    ass
1c6c0 65 72 74 28 20 70 32 3e 30 20 29 3b 0a 20 20 20  ert( p2>0 );.   
1c6d0 20 61 73 73 65 72 74 28 20 70 32 3c 3d 28 70 2d   assert( p2<=(p-
1c6e0 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
1c6f0 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 70 49 6e  rsor) );.    pIn
1c700 32 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20  2 = &aMem[p2];. 
1c710 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
1c720 56 61 6c 69 64 28 70 49 6e 32 29 20 29 3b 0a 20  Valid(pIn2) );. 
1c730 20 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 32     assert( (pIn2
1c740 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
1c750 74 29 21 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c  t)!=0 );.    sql
1c760 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
1c770 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 20  erify(pIn2);.   
1c780 20 70 32 20 3d 20 28 69 6e 74 29 70 49 6e 32 2d   p2 = (int)pIn2-
1c790 3e 75 2e 69 3b 0a 20 20 20 20 2f 2a 20 54 68 65  >u.i;.    /* The
1c7a0 20 70 32 20 76 61 6c 75 65 20 61 6c 77 61 79 73   p2 value always
1c7b0 20 63 6f 6d 65 73 20 66 72 6f 6d 20 61 20 70 72   comes from a pr
1c7c0 69 6f 72 20 4f 50 5f 43 72 65 61 74 65 54 61 62  ior OP_CreateTab
1c7d0 6c 65 20 6f 70 63 6f 64 65 20 61 6e 64 0a 20 20  le opcode and.  
1c7e0 20 20 2a 2a 20 74 68 61 74 20 6f 70 63 6f 64 65    ** that opcode
1c7f0 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 73 65 74   will always set
1c800 20 74 68 65 20 70 32 20 76 61 6c 75 65 20 74 6f   the p2 value to
1c810 20 32 20 6f 72 20 6d 6f 72 65 20 6f 72 20 65 6c   2 or more or el
1c820 73 65 20 66 61 69 6c 2e 0a 20 20 20 20 2a 2a 20  se fail..    ** 
1c830 49 66 20 74 68 65 72 65 20 77 65 72 65 20 61 20  If there were a 
1c840 66 61 69 6c 75 72 65 2c 20 74 68 65 20 70 72 65  failure, the pre
1c850 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20  pared statement 
1c860 77 6f 75 6c 64 20 68 61 76 65 20 68 61 6c 74 65  would have halte
1c870 64 0a 20 20 20 20 2a 2a 20 62 65 66 6f 72 65 20  d.    ** before 
1c880 72 65 61 63 68 69 6e 67 20 74 68 69 73 20 69 6e  reaching this in
1c890 73 74 72 75 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20  struction. */.  
1c8a0 20 20 61 73 73 65 72 74 28 20 70 32 3e 3d 32 20    assert( p2>=2 
1c8b0 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70  );.  }.  if( pOp
1c8c0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59  ->p4type==P4_KEY
1c8d0 49 4e 46 4f 20 29 7b 0a 20 20 20 20 70 4b 65 79  INFO ){.    pKey
1c8e0 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Info = pOp->p4.p
1c8f0 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 61 73 73  KeyInfo;.    ass
1c900 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 65  ert( pKeyInfo->e
1c910 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20  nc==ENC(db) );. 
1c920 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49     assert( pKeyI
1c930 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20  nfo->db==db );. 
1c940 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4b 65 79     nField = pKey
1c950 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2b 70 4b 65  Info->nField+pKe
1c960 79 49 6e 66 6f 2d 3e 6e 58 46 69 65 6c 64 3b 0a  yInfo->nXField;.
1c970 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d    }else if( pOp-
1c980 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
1c990 32 20 29 7b 0a 20 20 20 20 6e 46 69 65 6c 64 20  2 ){.    nField 
1c9a0 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 7d  = pOp->p4.i;.  }
1c9b0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1c9c0 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  p1>=0 );.  asser
1c9d0 74 28 20 6e 46 69 65 6c 64 3e 3d 30 20 29 3b 0a  t( nField>=0 );.
1c9e0 20 20 74 65 73 74 63 61 73 65 28 20 6e 46 69 65    testcase( nFie
1c9f0 6c 64 3d 3d 30 20 29 3b 20 20 2f 2a 20 54 61 62  ld==0 );  /* Tab
1ca00 6c 65 20 77 69 74 68 20 49 4e 54 45 47 45 52 20  le with INTEGER 
1ca10 50 52 49 4d 41 52 59 20 4b 45 59 20 61 6e 64 20  PRIMARY KEY and 
1ca20 6e 6f 74 68 69 6e 67 20 65 6c 73 65 20 2a 2f 0a  nothing else */.
1ca30 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74    pCur = allocat
1ca40 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e  eCursor(p, pOp->
1ca50 70 31 2c 20 6e 46 69 65 6c 64 2c 20 69 44 62 2c  p1, nField, iDb,
1ca60 20 43 55 52 54 59 50 45 5f 42 54 52 45 45 29 3b   CURTYPE_BTREE);
1ca70 0a 20 20 69 66 28 20 70 43 75 72 3d 3d 30 20 29  .  if( pCur==0 )
1ca80 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
1ca90 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20  pCur->nullRow = 
1caa0 31 3b 0a 20 20 70 43 75 72 2d 3e 69 73 4f 72 64  1;.  pCur->isOrd
1cab0 65 72 65 64 20 3d 20 31 3b 0a 20 20 70 43 75 72  ered = 1;.  pCur
1cac0 2d 3e 70 67 6e 6f 52 6f 6f 74 20 3d 20 70 32 3b  ->pgnoRoot = p2;
1cad0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
1cae0 45 42 55 47 0a 20 20 70 43 75 72 2d 3e 77 72 46  EBUG.  pCur->wrF
1caf0 6c 61 67 20 3d 20 77 72 46 6c 61 67 3b 0a 23 65  lag = wrFlag;.#e
1cb00 6e 64 69 66 0a 20 20 72 63 20 3d 20 73 71 6c 69  ndif.  rc = sqli
1cb10 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70  te3BtreeCursor(p
1cb20 58 2c 20 70 32 2c 20 77 72 46 6c 61 67 2c 20 70  X, p2, wrFlag, p
1cb30 4b 65 79 49 6e 66 6f 2c 20 70 43 75 72 2d 3e 75  KeyInfo, pCur->u
1cb40 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 70 43  c.pCursor);.  pC
1cb50 75 72 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70  ur->pKeyInfo = p
1cb60 4b 65 79 49 6e 66 6f 3b 0a 20 20 2f 2a 20 53 65  KeyInfo;.  /* Se
1cb70 74 20 74 68 65 20 56 64 62 65 43 75 72 73 6f 72  t the VdbeCursor
1cb80 2e 69 73 54 61 62 6c 65 20 76 61 72 69 61 62 6c  .isTable variabl
1cb90 65 2e 20 50 72 65 76 69 6f 75 73 20 76 65 72 73  e. Previous vers
1cba0 69 6f 6e 73 20 6f 66 0a 20 20 2a 2a 20 53 51 4c  ions of.  ** SQL
1cbb0 69 74 65 20 75 73 65 64 20 74 6f 20 63 68 65 63  ite used to chec
1cbc0 6b 20 69 66 20 74 68 65 20 72 6f 6f 74 2d 70 61  k if the root-pa
1cbd0 67 65 20 66 6c 61 67 73 20 77 65 72 65 20 73 61  ge flags were sa
1cbe0 6e 65 20 61 74 20 74 68 69 73 20 70 6f 69 6e 74  ne at this point
1cbf0 0a 20 20 2a 2a 20 61 6e 64 20 72 65 70 6f 72 74  .  ** and report
1cc00 20 64 61 74 61 62 61 73 65 20 63 6f 72 72 75 70   database corrup
1cc10 74 69 6f 6e 20 69 66 20 74 68 65 79 20 77 65 72  tion if they wer
1cc20 65 20 6e 6f 74 2c 20 62 75 74 20 74 68 69 73 20  e not, but this 
1cc30 63 68 65 63 6b 20 68 61 73 0a 20 20 2a 2a 20 73  check has.  ** s
1cc40 69 6e 63 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20  ince moved into 
1cc50 74 68 65 20 62 74 72 65 65 20 6c 61 79 65 72 2e  the btree layer.
1cc60 20 20 2a 2f 20 20 0a 20 20 70 43 75 72 2d 3e 69    */  .  pCur->i
1cc70 73 54 61 62 6c 65 20 3d 20 70 4f 70 2d 3e 70 34  sTable = pOp->p4
1cc80 74 79 70 65 21 3d 50 34 5f 4b 45 59 49 4e 46 4f  type!=P4_KEYINFO
1cc90 3b 0a 0a 6f 70 65 6e 5f 63 75 72 73 6f 72 5f 73  ;..open_cursor_s
1cca0 65 74 5f 68 69 6e 74 73 3a 0a 20 20 61 73 73 65  et_hints:.  asse
1ccb0 72 74 28 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43  rt( OPFLAG_BULKC
1ccc0 53 52 3d 3d 42 54 52 45 45 5f 42 55 4c 4b 4c 4f  SR==BTREE_BULKLO
1ccd0 41 44 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  AD );.  assert( 
1cce0 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 3d 3d 42  OPFLAG_SEEKEQ==B
1ccf0 54 52 45 45 5f 53 45 45 4b 5f 45 51 20 29 3b 0a  TREE_SEEK_EQ );.
1cd00 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
1cd10 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 42 55 4c  >p5 & OPFLAG_BUL
1cd20 4b 43 53 52 20 29 3b 0a 23 69 66 64 65 66 20 53  KCSR );.#ifdef S
1cd30 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55 52  QLITE_ENABLE_CUR
1cd40 53 4f 52 5f 48 49 4e 54 53 0a 20 20 74 65 73 74  SOR_HINTS.  test
1cd50 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 20 26 20  case( pOp->p2 & 
1cd60 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 29 3b  OPFLAG_SEEKEQ );
1cd70 0a 23 65 6e 64 69 66 0a 20 20 73 71 6c 69 74 65  .#endif.  sqlite
1cd80 33 42 74 72 65 65 43 75 72 73 6f 72 48 69 6e 74  3BtreeCursorHint
1cd90 46 6c 61 67 73 28 70 43 75 72 2d 3e 75 63 2e 70  Flags(pCur->uc.p
1cda0 43 75 72 73 6f 72 2c 0a 20 20 20 20 20 20 20 20  Cursor,.        
1cdb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cdc0 20 20 20 20 20 20 20 28 70 4f 70 2d 3e 70 35 20         (pOp->p5 
1cdd0 26 20 28 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53  & (OPFLAG_BULKCS
1cde0 52 7c 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 29  R|OPFLAG_SEEKEQ)
1cdf0 29 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  ));.  if( rc ) g
1ce00 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1ce10 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b  _error;.  break;
1ce20 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .}../* Opcode: O
1ce30 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 50 31 20  penEphemeral P1 
1ce40 50 32 20 2a 20 50 34 20 50 35 0a 2a 2a 20 53 79  P2 * P4 P5.** Sy
1ce50 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d  nopsis: nColumn=
1ce60 50 32 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20  P2.**.** Open a 
1ce70 6e 65 77 20 63 75 72 73 6f 72 20 50 31 20 74 6f  new cursor P1 to
1ce80 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62   a transient tab
1ce90 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f  le..** The curso
1cea0 72 20 69 73 20 61 6c 77 61 79 73 20 6f 70 65 6e  r is always open
1ceb0 65 64 20 72 65 61 64 2f 77 72 69 74 65 20 65 76  ed read/write ev
1cec0 65 6e 20 69 66 20 0a 2a 2a 20 74 68 65 20 6d 61  en if .** the ma
1ced0 69 6e 20 64 61 74 61 62 61 73 65 20 69 73 20 72  in database is r
1cee0 65 61 64 2d 6f 6e 6c 79 2e 20 20 54 68 65 20 65  ead-only.  The e
1cef0 70 68 65 6d 65 72 61 6c 0a 2a 2a 20 74 61 62 6c  phemeral.** tabl
1cf00 65 20 69 73 20 64 65 6c 65 74 65 64 20 61 75 74  e is deleted aut
1cf10 6f 6d 61 74 69 63 61 6c 6c 79 20 77 68 65 6e 20  omatically when 
1cf20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 63 6c  the cursor is cl
1cf30 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69  osed..**.** P2 i
1cf40 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
1cf50 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 65  columns in the e
1cf60 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 2e 0a  phemeral table..
1cf70 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 70 6f  ** The cursor po
1cf80 69 6e 74 73 20 74 6f 20 61 20 42 54 72 65 65 20  ints to a BTree 
1cf90 74 61 62 6c 65 20 69 66 20 50 34 3d 3d 30 20 61  table if P4==0 a
1cfa0 6e 64 20 74 6f 20 61 20 42 54 72 65 65 20 69 6e  nd to a BTree in
1cfb0 64 65 78 0a 2a 2a 20 69 66 20 50 34 20 69 73 20  dex.** if P4 is 
1cfc0 6e 6f 74 20 30 2e 20 20 49 66 20 50 34 20 69 73  not 0.  If P4 is
1cfd0 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 74 20 70 6f   not NULL, it po
1cfe0 69 6e 74 73 20 74 6f 20 61 20 4b 65 79 49 6e 66  ints to a KeyInf
1cff0 6f 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 74  o structure.** t
1d000 68 61 74 20 64 65 66 69 6e 65 73 20 74 68 65 20  hat defines the 
1d010 66 6f 72 6d 61 74 20 6f 66 20 6b 65 79 73 20 69  format of keys i
1d020 6e 20 74 68 65 20 69 6e 64 65 78 2e 0a 2a 2a 0a  n the index..**.
1d030 2a 2a 20 54 68 65 20 50 35 20 70 61 72 61 6d 65  ** The P5 parame
1d040 74 65 72 20 63 61 6e 20 62 65 20 61 20 6d 61 73  ter can be a mas
1d050 6b 20 6f 66 20 74 68 65 20 42 54 52 45 45 5f 2a  k of the BTREE_*
1d060 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64 0a 2a   flags defined.*
1d070 2a 20 69 6e 20 62 74 72 65 65 2e 68 2e 20 20 54  * in btree.h.  T
1d080 68 65 73 65 20 66 6c 61 67 73 20 63 6f 6e 74 72  hese flags contr
1d090 6f 6c 20 61 73 70 65 63 74 73 20 6f 66 20 74 68  ol aspects of th
1d0a0 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 0a 2a  e operation of.*
1d0b0 2a 20 74 68 65 20 62 74 72 65 65 2e 20 20 54 68  * the btree.  Th
1d0c0 65 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55  e BTREE_OMIT_JOU
1d0d0 52 4e 41 4c 20 61 6e 64 20 42 54 52 45 45 5f 53  RNAL and BTREE_S
1d0e0 49 4e 47 4c 45 20 66 6c 61 67 73 20 61 72 65 0a  INGLE flags are.
1d0f0 2a 2a 20 61 64 64 65 64 20 61 75 74 6f 6d 61 74  ** added automat
1d100 69 63 61 6c 6c 79 2e 0a 2a 2f 0a 2f 2a 20 4f 70  ically..*/./* Op
1d110 63 6f 64 65 3a 20 4f 70 65 6e 41 75 74 6f 69 6e  code: OpenAutoin
1d120 64 65 78 20 50 31 20 50 32 20 2a 20 50 34 20 2a  dex P1 P2 * P4 *
1d130 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6e 43  .** Synopsis: nC
1d140 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 54  olumn=P2.**.** T
1d150 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73  his opcode works
1d160 20 74 68 65 20 73 61 6d 65 20 61 73 20 4f 50 5f   the same as OP_
1d170 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 2e 20 20  OpenEphemeral.  
1d180 49 74 20 68 61 73 20 61 0a 2a 2a 20 64 69 66 66  It has a.** diff
1d190 65 72 65 6e 74 20 6e 61 6d 65 20 74 6f 20 64 69  erent name to di
1d1a0 73 74 69 6e 67 75 69 73 68 20 69 74 73 20 75 73  stinguish its us
1d1b0 65 2e 20 20 54 61 62 6c 65 73 20 63 72 65 61 74  e.  Tables creat
1d1c0 65 64 20 75 73 69 6e 67 0a 2a 2a 20 62 79 20 74  ed using.** by t
1d1d0 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20  his opcode will 
1d1e0 62 65 20 75 73 65 64 20 66 6f 72 20 61 75 74 6f  be used for auto
1d1f0 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65  matically create
1d200 64 20 74 72 61 6e 73 69 65 6e 74 0a 2a 2a 20 69  d transient.** i
1d210 6e 64 69 63 65 73 20 69 6e 20 6a 6f 69 6e 73 2e  ndices in joins.
1d220 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e  .*/.case OP_Open
1d230 41 75 74 6f 69 6e 64 65 78 3a 20 0a 63 61 73 65  Autoindex: .case
1d240 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
1d250 6c 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  l: {.  VdbeCurso
1d260 72 20 2a 70 43 78 3b 0a 20 20 4b 65 79 49 6e 66  r *pCx;.  KeyInf
1d270 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 0a 20 20  o *pKeyInfo;..  
1d280 73 74 61 74 69 63 20 63 6f 6e 73 74 20 69 6e 74  static const int
1d290 20 76 66 73 46 6c 61 67 73 20 3d 20 0a 20 20 20   vfsFlags = .   
1d2a0 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 52     SQLITE_OPEN_R
1d2b0 45 41 44 57 52 49 54 45 20 7c 0a 20 20 20 20 20  EADWRITE |.     
1d2c0 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 43 52 45   SQLITE_OPEN_CRE
1d2d0 41 54 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49  ATE |.      SQLI
1d2e0 54 45 5f 4f 50 45 4e 5f 45 58 43 4c 55 53 49 56  TE_OPEN_EXCLUSIV
1d2f0 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45  E |.      SQLITE
1d300 5f 4f 50 45 4e 5f 44 45 4c 45 54 45 4f 4e 43 4c  _OPEN_DELETEONCL
1d310 4f 53 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49  OSE |.      SQLI
1d320 54 45 5f 4f 50 45 4e 5f 54 52 41 4e 53 49 45 4e  TE_OPEN_TRANSIEN
1d330 54 5f 44 42 3b 0a 20 20 61 73 73 65 72 74 28 20  T_DB;.  assert( 
1d340 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20  pOp->p1>=0 );.  
1d350 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
1d360 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c  =0 );.  pCx = al
1d370 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20  locateCursor(p, 
1d380 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32  pOp->p1, pOp->p2
1d390 2c 20 2d 31 2c 20 43 55 52 54 59 50 45 5f 42 54  , -1, CURTYPE_BT
1d3a0 52 45 45 29 3b 0a 20 20 69 66 28 20 70 43 78 3d  REE);.  if( pCx=
1d3b0 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
1d3c0 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77  ;.  pCx->nullRow
1d3d0 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 69 73 45   = 1;.  pCx->isE
1d3e0 70 68 65 6d 65 72 61 6c 20 3d 20 31 3b 0a 20 20  phemeral = 1;.  
1d3f0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1d400 65 4f 70 65 6e 28 64 62 2d 3e 70 56 66 73 2c 20  eOpen(db->pVfs, 
1d410 30 2c 20 64 62 2c 20 26 70 43 78 2d 3e 70 42 74  0, db, &pCx->pBt
1d420 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
1d430 20 20 20 20 20 20 20 20 20 20 20 42 54 52 45 45             BTREE
1d440 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20 7c 20  _OMIT_JOURNAL | 
1d450 42 54 52 45 45 5f 53 49 4e 47 4c 45 20 7c 20 70  BTREE_SINGLE | p
1d460 4f 70 2d 3e 70 35 2c 20 76 66 73 46 6c 61 67 73  Op->p5, vfsFlags
1d470 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
1d480 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63  ITE_OK ){.    rc
1d490 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 42   = sqlite3BtreeB
1d4a0 65 67 69 6e 54 72 61 6e 73 28 70 43 78 2d 3e 70  eginTrans(pCx->p
1d4b0 42 74 2c 20 31 29 3b 0a 20 20 7d 0a 20 20 69 66  Bt, 1);.  }.  if
1d4c0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
1d4d0 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 61 20 74  ){.    /* If a t
1d4e0 72 61 6e 73 69 65 6e 74 20 69 6e 64 65 78 20 69  ransient index i
1d4f0 73 20 72 65 71 75 69 72 65 64 2c 20 63 72 65 61  s required, crea
1d500 74 65 20 69 74 20 62 79 20 63 61 6c 6c 69 6e 67  te it by calling
1d510 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 42  .    ** sqlite3B
1d520 74 72 65 65 43 72 65 61 74 65 54 61 62 6c 65 28  treeCreateTable(
1d530 29 20 77 69 74 68 20 74 68 65 20 42 54 52 45 45  ) with the BTREE
1d540 5f 42 4c 4f 42 4b 45 59 20 66 6c 61 67 20 62 65  _BLOBKEY flag be
1d550 66 6f 72 65 0a 20 20 20 20 2a 2a 20 6f 70 65 6e  fore.    ** open
1d560 69 6e 67 20 69 74 2e 20 49 66 20 61 20 74 72 61  ing it. If a tra
1d570 6e 73 69 65 6e 74 20 74 61 62 6c 65 20 69 73 20  nsient table is 
1d580 72 65 71 75 69 72 65 64 2c 20 6a 75 73 74 20 75  required, just u
1d590 73 65 20 74 68 65 0a 20 20 20 20 2a 2a 20 61 75  se the.    ** au
1d5a0 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61  tomatically crea
1d5b0 74 65 64 20 74 61 62 6c 65 20 77 69 74 68 20 72  ted table with r
1d5c0 6f 6f 74 2d 70 61 67 65 20 31 20 28 61 6e 20 42  oot-page 1 (an B
1d5d0 4c 4f 42 5f 49 4e 54 4b 45 59 20 74 61 62 6c 65  LOB_INTKEY table
1d5e0 29 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  )..    */.    if
1d5f0 28 20 28 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f  ( (pKeyInfo = pO
1d600 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 29 21  p->p4.pKeyInfo)!
1d610 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20  =0 ){.      int 
1d620 70 67 6e 6f 3b 0a 20 20 20 20 20 20 61 73 73 65  pgno;.      asse
1d630 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
1d640 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20  =P4_KEYINFO );. 
1d650 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1d660 33 42 74 72 65 65 43 72 65 61 74 65 54 61 62 6c  3BtreeCreateTabl
1d670 65 28 70 43 78 2d 3e 70 42 74 2c 20 26 70 67 6e  e(pCx->pBt, &pgn
1d680 6f 2c 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59  o, BTREE_BLOBKEY
1d690 20 7c 20 70 4f 70 2d 3e 70 35 29 3b 20 0a 20 20   | pOp->p5); .  
1d6a0 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
1d6b0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
1d6c0 20 61 73 73 65 72 74 28 20 70 67 6e 6f 3d 3d 4d   assert( pgno==M
1d6d0 41 53 54 45 52 5f 52 4f 4f 54 2b 31 20 29 3b 0a  ASTER_ROOT+1 );.
1d6e0 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1d6f0 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62  pKeyInfo->db==db
1d700 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
1d710 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e  rt( pKeyInfo->en
1d720 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20 20  c==ENC(db) );.  
1d730 20 20 20 20 20 20 70 43 78 2d 3e 70 4b 65 79 49        pCx->pKeyI
1d740 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f 3b 0a  nfo = pKeyInfo;.
1d750 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
1d760 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28  ite3BtreeCursor(
1d770 70 43 78 2d 3e 70 42 74 2c 20 70 67 6e 6f 2c 20  pCx->pBt, pgno, 
1d780 42 54 52 45 45 5f 57 52 43 53 52 2c 0a 20 20 20  BTREE_WRCSR,.   
1d790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 70 4b 65               pKe
1d7b0 79 49 6e 66 6f 2c 20 70 43 78 2d 3e 75 63 2e 70  yInfo, pCx->uc.p
1d7c0 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 7d  Cursor);.      }
1d7d0 0a 20 20 20 20 20 20 70 43 78 2d 3e 69 73 54 61  .      pCx->isTa
1d7e0 62 6c 65 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c  ble = 0;.    }el
1d7f0 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73  se{.      rc = s
1d800 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
1d810 72 28 70 43 78 2d 3e 70 42 74 2c 20 4d 41 53 54  r(pCx->pBt, MAST
1d820 45 52 5f 52 4f 4f 54 2c 20 42 54 52 45 45 5f 57  ER_ROOT, BTREE_W
1d830 52 43 53 52 2c 0a 20 20 20 20 20 20 20 20 20 20  RCSR,.          
1d840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d850 20 20 20 20 30 2c 20 70 43 78 2d 3e 75 63 2e 70      0, pCx->uc.p
1d860 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 70  Cursor);.      p
1d870 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b  Cx->isTable = 1;
1d880 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28  .    }.  }.  if(
1d890 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
1d8a0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1d8b0 20 70 43 78 2d 3e 69 73 4f 72 64 65 72 65 64 20   pCx->isOrdered 
1d8c0 3d 20 28 70 4f 70 2d 3e 70 35 21 3d 42 54 52 45  = (pOp->p5!=BTRE
1d8d0 45 5f 55 4e 4f 52 44 45 52 45 44 29 3b 0a 20 20  E_UNORDERED);.  
1d8e0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1d8f0 6f 64 65 3a 20 53 6f 72 74 65 72 4f 70 65 6e 20  ode: SorterOpen 
1d900 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
1d910 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
1d920 77 6f 72 6b 73 20 6c 69 6b 65 20 4f 50 5f 4f 70  works like OP_Op
1d930 65 6e 45 70 68 65 6d 65 72 61 6c 20 65 78 63 65  enEphemeral exce
1d940 70 74 20 74 68 61 74 20 69 74 20 6f 70 65 6e 73  pt that it opens
1d950 0a 2a 2a 20 61 20 74 72 61 6e 73 69 65 6e 74 20  .** a transient 
1d960 69 6e 64 65 78 20 74 68 61 74 20 69 73 20 73 70  index that is sp
1d970 65 63 69 66 69 63 61 6c 6c 79 20 64 65 73 69 67  ecifically desig
1d980 6e 65 64 20 74 6f 20 73 6f 72 74 20 6c 61 72 67  ned to sort larg
1d990 65 0a 2a 2a 20 74 61 62 6c 65 73 20 75 73 69 6e  e.** tables usin
1d9a0 67 20 61 6e 20 65 78 74 65 72 6e 61 6c 20 6d 65  g an external me
1d9b0 72 67 65 2d 73 6f 72 74 20 61 6c 67 6f 72 69 74  rge-sort algorit
1d9c0 68 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 72 67  hm..**.** If arg
1d9d0 75 6d 65 6e 74 20 50 33 20 69 73 20 6e 6f 6e 2d  ument P3 is non-
1d9e0 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74 20 69 6e  zero, then it in
1d9f0 64 69 63 61 74 65 73 20 74 68 61 74 20 74 68 65  dicates that the
1da00 20 73 6f 72 74 65 72 20 6d 61 79 0a 2a 2a 20 61   sorter may.** a
1da10 73 73 75 6d 65 20 74 68 61 74 20 61 20 73 74 61  ssume that a sta
1da20 62 6c 65 20 73 6f 72 74 20 63 6f 6e 73 69 64 65  ble sort conside
1da30 72 69 6e 67 20 74 68 65 20 66 69 72 73 74 20 50  ring the first P
1da40 33 20 66 69 65 6c 64 73 20 6f 66 20 65 61 63 68  3 fields of each
1da50 0a 2a 2a 20 6b 65 79 20 69 73 20 73 75 66 66 69  .** key is suffi
1da60 63 69 65 6e 74 20 74 6f 20 70 72 6f 64 75 63 65  cient to produce
1da70 20 74 68 65 20 72 65 71 75 69 72 65 64 20 72 65   the required re
1da80 73 75 6c 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  sults..*/.case O
1da90 50 5f 53 6f 72 74 65 72 4f 70 65 6e 3a 20 7b 0a  P_SorterOpen: {.
1daa0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1dab0 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  x;..  assert( pO
1dac0 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73  p->p1>=0 );.  as
1dad0 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30  sert( pOp->p2>=0
1dae0 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f   );.  pCx = allo
1daf0 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f  cateCursor(p, pO
1db00 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20  p->p1, pOp->p2, 
1db10 2d 31 2c 20 43 55 52 54 59 50 45 5f 53 4f 52 54  -1, CURTYPE_SORT
1db20 45 52 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d  ER);.  if( pCx==
1db30 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
1db40 0a 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f  .  pCx->pKeyInfo
1db50 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49   = pOp->p4.pKeyI
1db60 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28 20 70  nfo;.  assert( p
1db70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 64 62  Cx->pKeyInfo->db
1db80 3d 3d 64 62 20 29 3b 0a 20 20 61 73 73 65 72 74  ==db );.  assert
1db90 28 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d  ( pCx->pKeyInfo-
1dba0 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b  >enc==ENC(db) );
1dbb0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
1dbc0 64 62 65 53 6f 72 74 65 72 49 6e 69 74 28 64 62  dbeSorterInit(db
1dbd0 2c 20 70 4f 70 2d 3e 70 33 2c 20 70 43 78 29 3b  , pOp->p3, pCx);
1dbe0 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
1dbf0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1dc00 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ror;.  break;.}.
1dc10 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71 75  ./* Opcode: Sequ
1dc20 65 6e 63 65 54 65 73 74 20 50 31 20 50 32 20 2a  enceTest P1 P2 *
1dc30 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
1dc40 3a 20 69 66 28 20 63 75 72 73 6f 72 5b 50 31 5d  : if( cursor[P1]
1dc50 2e 63 74 72 2b 2b 20 29 20 70 63 20 3d 20 50 32  .ctr++ ) pc = P2
1dc60 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 73  .**.** P1 is a s
1dc70 6f 72 74 65 72 20 63 75 72 73 6f 72 2e 20 49 66  orter cursor. If
1dc80 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 63 6f   the sequence co
1dc90 75 6e 74 65 72 20 69 73 20 63 75 72 72 65 6e 74  unter is current
1dca0 6c 79 20 7a 65 72 6f 2c 20 6a 75 6d 70 0a 2a 2a  ly zero, jump.**
1dcb0 20 74 6f 20 50 32 2e 20 52 65 67 61 72 64 6c 65   to P2. Regardle
1dcc0 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72  ss of whether or
1dcd0 20 6e 6f 74 20 74 68 65 20 6a 75 6d 70 20 69 73   not the jump is
1dce0 20 74 61 6b 65 6e 2c 20 69 6e 63 72 65 6d 65 6e   taken, incremen
1dcf0 74 20 74 68 65 0a 2a 2a 20 74 68 65 20 73 65 71  t the.** the seq
1dd00 75 65 6e 63 65 20 76 61 6c 75 65 2e 0a 2a 2f 0a  uence value..*/.
1dd10 63 61 73 65 20 4f 50 5f 53 65 71 75 65 6e 63 65  case OP_Sequence
1dd20 54 65 73 74 3a 20 7b 0a 20 20 56 64 62 65 43 75  Test: {.  VdbeCu
1dd30 72 73 6f 72 20 2a 70 43 3b 0a 20 20 61 73 73 65  rsor *pC;.  asse
1dd40 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1dd50 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1dd60 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
1dd70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1dd80 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f  ;.  assert( isSo
1dd90 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20 69 66  rter(pC) );.  if
1dda0 28 20 28 70 43 2d 3e 73 65 71 43 6f 75 6e 74 2b  ( (pC->seqCount+
1ddb0 2b 29 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74  +)==0 ){.    got
1ddc0 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
1ddd0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
1dde0 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 50 73 65   Opcode: OpenPse
1ddf0 75 64 6f 20 50 31 20 50 32 20 50 33 20 2a 20 2a  udo P1 P2 P3 * *
1de00 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 50 33  .** Synopsis: P3
1de10 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 72 5b 50 32   columns in r[P2
1de20 5d 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e  ].**.** Open a n
1de30 65 77 20 63 75 72 73 6f 72 20 74 68 61 74 20 70  ew cursor that p
1de40 6f 69 6e 74 73 20 74 6f 20 61 20 66 61 6b 65 20  oints to a fake 
1de50 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61  table that conta
1de60 69 6e 73 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20  ins a single.** 
1de70 72 6f 77 20 6f 66 20 64 61 74 61 2e 20 20 54 68  row of data.  Th
1de80 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 61  e content of tha
1de90 74 20 6f 6e 65 20 72 6f 77 20 69 73 20 74 68 65  t one row is the
1dea0 20 63 6f 6e 74 65 6e 74 20 6f 66 20 6d 65 6d 6f   content of memo
1deb0 72 79 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  ry.** register P
1dec0 32 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  2.  In other wor
1ded0 64 73 2c 20 63 75 72 73 6f 72 20 50 31 20 62 65  ds, cursor P1 be
1dee0 63 6f 6d 65 73 20 61 6e 20 61 6c 69 61 73 20 66  comes an alias f
1def0 6f 72 20 74 68 65 20 0a 2a 2a 20 4d 45 4d 5f 42  or the .** MEM_B
1df00 6c 6f 62 20 63 6f 6e 74 65 6e 74 20 63 6f 6e 74  lob content cont
1df10 61 69 6e 65 64 20 69 6e 20 72 65 67 69 73 74 65  ained in registe
1df20 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41 20 70 73  r P2..**.** A ps
1df30 65 75 64 6f 2d 74 61 62 6c 65 20 63 72 65 61 74  eudo-table creat
1df40 65 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64  ed by this opcod
1df50 65 20 69 73 20 75 73 65 64 20 74 6f 20 68 6f 6c  e is used to hol
1df60 64 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f  d a single.** ro
1df70 77 20 6f 75 74 70 75 74 20 66 72 6f 6d 20 74 68  w output from th
1df80 65 20 73 6f 72 74 65 72 20 73 6f 20 74 68 61 74  e sorter so that
1df90 20 74 68 65 20 72 6f 77 20 63 61 6e 20 62 65 20   the row can be 
1dfa0 64 65 63 6f 6d 70 6f 73 65 64 20 69 6e 74 6f 0a  decomposed into.
1dfb0 2a 2a 20 69 6e 64 69 76 69 64 75 61 6c 20 63 6f  ** individual co
1dfc0 6c 75 6d 6e 73 20 75 73 69 6e 67 20 74 68 65 20  lumns using the 
1dfd0 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65  OP_Column opcode
1dfe0 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e  .  The OP_Column
1dff0 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 74 68   opcode.** is th
1e000 65 20 6f 6e 6c 79 20 63 75 72 73 6f 72 20 6f 70  e only cursor op
1e010 63 6f 64 65 20 74 68 61 74 20 77 6f 72 6b 73 20  code that works 
1e020 77 69 74 68 20 61 20 70 73 65 75 64 6f 2d 74 61  with a pseudo-ta
1e030 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73  ble..**.** P3 is
1e040 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 66   the number of f
1e050 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63  ields in the rec
1e060 6f 72 64 73 20 74 68 61 74 20 77 69 6c 6c 20 62  ords that will b
1e070 65 20 73 74 6f 72 65 64 20 62 79 0a 2a 2a 20 74  e stored by.** t
1e080 68 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e  he pseudo-table.
1e090 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e  .*/.case OP_Open
1e0a0 50 73 65 75 64 6f 3a 20 7b 0a 20 20 56 64 62 65  Pseudo: {.  Vdbe
1e0b0 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 20 20  Cursor *pCx;..  
1e0c0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1e0d0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1e0e0 70 4f 70 2d 3e 70 33 3e 3d 30 20 29 3b 0a 20 20  pOp->p3>=0 );.  
1e0f0 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75  pCx = allocateCu
1e100 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c  rsor(p, pOp->p1,
1e110 20 70 4f 70 2d 3e 70 33 2c 20 2d 31 2c 20 43 55   pOp->p3, -1, CU
1e120 52 54 59 50 45 5f 50 53 45 55 44 4f 29 3b 0a 20  RTYPE_PSEUDO);. 
1e130 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f   if( pCx==0 ) go
1e140 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78  to no_mem;.  pCx
1e150 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20  ->nullRow = 1;. 
1e160 20 70 43 78 2d 3e 75 63 2e 70 73 65 75 64 6f 54   pCx->uc.pseudoT
1e170 61 62 6c 65 52 65 67 20 3d 20 70 4f 70 2d 3e 70  ableReg = pOp->p
1e180 32 3b 0a 20 20 70 43 78 2d 3e 69 73 54 61 62 6c  2;.  pCx->isTabl
1e190 65 20 3d 20 31 3b 0a 20 20 61 73 73 65 72 74 28  e = 1;.  assert(
1e1a0 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20   pOp->p5==0 );. 
1e1b0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1e1c0 63 6f 64 65 3a 20 43 6c 6f 73 65 20 50 31 20 2a  code: Close P1 *
1e1d0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6c 6f   * * *.**.** Clo
1e1e0 73 65 20 61 20 63 75 72 73 6f 72 20 70 72 65 76  se a cursor prev
1e1f0 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 61 73  iously opened as
1e200 20 50 31 2e 20 20 49 66 20 50 31 20 69 73 20 6e   P1.  If P1 is n
1e210 6f 74 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20  ot.** currently 
1e220 6f 70 65 6e 2c 20 74 68 69 73 20 69 6e 73 74 72  open, this instr
1e230 75 63 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f  uction is a no-o
1e240 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c  p..*/.case OP_Cl
1e250 6f 73 65 3a 20 7b 0a 20 20 61 73 73 65 72 74 28  ose: {.  assert(
1e260 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
1e270 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
1e280 72 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  r );.  sqlite3Vd
1e290 62 65 46 72 65 65 43 75 72 73 6f 72 28 70 2c 20  beFreeCursor(p, 
1e2a0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1e2b0 5d 29 3b 0a 20 20 70 2d 3e 61 70 43 73 72 5b 70  ]);.  p->apCsr[p
1e2c0 4f 70 2d 3e 70 31 5d 20 3d 20 30 3b 0a 20 20 62  Op->p1] = 0;.  b
1e2d0 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 64 65 66 20  reak;.}..#ifdef 
1e2e0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f  SQLITE_ENABLE_CO
1e2f0 4c 55 4d 4e 5f 55 53 45 44 5f 4d 41 53 4b 0a 2f  LUMN_USED_MASK./
1e300 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e  * Opcode: Column
1e310 73 55 73 65 64 20 50 31 20 2a 20 2a 20 50 34 20  sUsed P1 * * P4 
1e320 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  *.**.** This opc
1e330 6f 64 65 20 28 77 68 69 63 68 20 6f 6e 6c 79 20  ode (which only 
1e340 65 78 69 73 74 73 20 69 66 20 53 51 4c 69 74 65  exists if SQLite
1e350 20 77 61 73 20 63 6f 6d 70 69 6c 65 64 20 77 69   was compiled wi
1e360 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41  th.** SQLITE_ENA
1e370 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 55 53 45 44 5f  BLE_COLUMN_USED_
1e380 4d 41 53 4b 29 20 69 64 65 6e 74 69 66 69 65 73  MASK) identifies
1e390 20 77 68 69 63 68 20 63 6f 6c 75 6d 6e 73 20 6f   which columns o
1e3a0 66 20 74 68 65 0a 2a 2a 20 74 61 62 6c 65 20 6f  f the.** table o
1e3b0 72 20 69 6e 64 65 78 20 66 6f 72 20 63 75 72 73  r index for curs
1e3c0 6f 72 20 50 31 20 61 72 65 20 75 73 65 64 2e 20  or P1 are used. 
1e3d0 20 50 34 20 69 73 20 61 20 36 34 2d 62 69 74 20   P4 is a 64-bit 
1e3e0 69 6e 74 65 67 65 72 0a 2a 2a 20 28 50 34 5f 49  integer.** (P4_I
1e3f0 4e 54 36 34 29 20 69 6e 20 77 68 69 63 68 20 74  NT64) in which t
1e400 68 65 20 66 69 72 73 74 20 36 33 20 62 69 74 73  he first 63 bits
1e410 20 61 72 65 20 6f 6e 65 20 66 6f 72 20 65 61 63   are one for eac
1e420 68 20 6f 66 20 74 68 65 0a 2a 2a 20 66 69 72 73  h of the.** firs
1e430 74 20 36 33 20 63 6f 6c 75 6d 6e 73 20 6f 66 20  t 63 columns of 
1e440 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
1e450 65 78 20 74 68 61 74 20 61 72 65 20 61 63 74 75  ex that are actu
1e460 61 6c 6c 79 20 75 73 65 64 0a 2a 2a 20 62 79 20  ally used.** by 
1e470 74 68 65 20 63 75 72 73 6f 72 2e 20 20 54 68 65  the cursor.  The
1e480 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20   high-order bit 
1e490 69 73 20 73 65 74 20 69 66 20 61 6e 79 20 63 6f  is set if any co
1e4a0 6c 75 6d 6e 20 61 66 74 65 72 0a 2a 2a 20 74 68  lumn after.** th
1e4b0 65 20 36 34 74 68 20 69 73 20 75 73 65 64 2e 0a  e 64th is used..
1e4c0 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 75 6d  */.case OP_Colum
1e4d0 6e 73 55 73 65 64 3a 20 7b 0a 20 20 56 64 62 65  nsUsed: {.  Vdbe
1e4e0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 70 43  Cursor *pC;.  pC
1e4f0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
1e500 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
1e510 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
1e520 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
1e530 20 70 43 2d 3e 6d 61 73 6b 55 73 65 64 20 3d 20   pC->maskUsed = 
1e540 2a 28 75 36 34 2a 29 70 4f 70 2d 3e 70 34 2e 70  *(u64*)pOp->p4.p
1e550 49 36 34 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  I64;.  break;.}.
1e560 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64  #endif../* Opcod
1e570 65 3a 20 53 65 65 6b 47 45 20 50 31 20 50 32 20  e: SeekGE P1 P2 
1e580 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
1e590 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
1e5a0 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f  ].**.** If curso
1e5b0 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61  r P1 refers to a
1e5c0 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54  n SQL table (B-T
1e5d0 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e  ree that uses in
1e5e0 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a  teger keys), .**
1e5f0 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69   use the value i
1e600 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73  n register P3 as
1e610 20 74 68 65 20 6b 65 79 2e 20 20 49 66 20 63 75   the key.  If cu
1e620 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a  rsor P1 refers .
1e630 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64  ** to an SQL ind
1e640 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74  ex, then P3 is t
1e650 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61  he first in an a
1e660 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73  rray of P4 regis
1e670 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72  ters .** that ar
1e680 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70  e used as an unp
1e690 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e  acked index key.
1e6a0 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69   .**.** Repositi
1e6b0 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  on cursor P1 so 
1e6c0 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20  that  it points 
1e6d0 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20  to the smallest 
1e6e0 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69  entry that .** i
1e6f0 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f  s greater than o
1e700 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
1e710 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65  ey value. If the
1e720 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64  re are no record
1e730 73 20 0a 2a 2a 20 67 72 65 61 74 65 72 20 74 68  s .** greater th
1e740 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
1e750 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73  he key and P2 is
1e760 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20   not zero, then 
1e770 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  jump to P2..**.*
1e780 2a 20 49 66 20 74 68 65 20 63 75 72 73 6f 72 20  * If the cursor 
1e790 50 31 20 77 61 73 20 6f 70 65 6e 65 64 20 75 73  P1 was opened us
1e7a0 69 6e 67 20 74 68 65 20 4f 50 46 4c 41 47 5f 53  ing the OPFLAG_S
1e7b0 45 45 4b 45 51 20 66 6c 61 67 2c 20 74 68 65 6e  EEKEQ flag, then
1e7c0 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 20   this.** opcode 
1e7d0 77 69 6c 6c 20 61 6c 77 61 79 73 20 6c 61 6e 64  will always land
1e7e0 20 6f 6e 20 61 20 72 65 63 6f 72 64 20 74 68 61   on a record tha
1e7f0 74 20 65 71 75 61 6c 6c 79 20 65 71 75 61 6c 73  t equally equals
1e800 20 74 68 65 20 6b 65 79 2c 20 6f 72 0a 2a 2a 20   the key, or.** 
1e810 65 6c 73 65 20 6a 75 6d 70 20 69 6d 6d 65 64 69  else jump immedi
1e820 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 57 68  ately to P2.  Wh
1e830 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  en the cursor is
1e840 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 2c 20   OPFLAG_SEEKEQ, 
1e850 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 20 6d  this.** opcode m
1e860 75 73 74 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20  ust be followed 
1e870 62 79 20 61 6e 20 49 64 78 4c 45 20 6f 70 63 6f  by an IdxLE opco
1e880 64 65 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  de with the same
1e890 20 61 72 67 75 6d 65 6e 74 73 2e 0a 2a 2a 20 54   arguments..** T
1e8a0 68 65 20 49 64 78 4c 45 20 6f 70 63 6f 64 65 20  he IdxLE opcode 
1e8b0 77 69 6c 6c 20 62 65 20 73 6b 69 70 70 65 64 20  will be skipped 
1e8c0 69 66 20 74 68 69 73 20 6f 70 63 6f 64 65 20 73  if this opcode s
1e8d0 75 63 63 65 65 64 73 2c 20 62 75 74 20 74 68 65  ucceeds, but the
1e8e0 0a 2a 2a 20 49 64 78 4c 45 20 6f 70 63 6f 64 65  .** IdxLE opcode
1e8f0 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 6f 6e   will be used on
1e900 20 73 75 62 73 65 71 75 65 6e 74 20 6c 6f 6f 70   subsequent loop
1e910 20 69 74 65 72 61 74 69 6f 6e 73 2e 0a 2a 2a 0a   iterations..**.
1e920 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c  ** This opcode l
1e930 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
1e940 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d   configured to m
1e950 6f 76 65 20 69 6e 20 66 6f 72 77 61 72 64 20 6f  ove in forward o
1e960 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68  rder,.** from th
1e970 65 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61  e beginning towa
1e980 72 64 20 74 68 65 20 65 6e 64 2e 20 20 49 6e 20  rd the end.  In 
1e990 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
1e9a0 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f   cursor is.** co
1e9b0 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20  nfigured to use 
1e9c0 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a  Next, not Prev..
1e9d0 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
1e9e0 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c  Found, NotFound,
1e9f0 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47 74 2c   SeekLt, SeekGt,
1ea00 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70   SeekLe.*/./* Op
1ea10 63 6f 64 65 3a 20 53 65 65 6b 47 54 20 50 31 20  code: SeekGT P1 
1ea20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
1ea30 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
1ea40 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75  @P4].**.** If cu
1ea50 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74  rsor P1 refers t
1ea60 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28  o an SQL table (
1ea70 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73  B-Tree that uses
1ea80 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20   integer keys), 
1ea90 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75  .** use the valu
1eaa0 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  e in register P3
1eab0 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75   as a key. If cu
1eac0 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a  rsor P1 refers .
1ead0 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64  ** to an SQL ind
1eae0 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74  ex, then P3 is t
1eaf0 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61  he first in an a
1eb00 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73  rray of P4 regis
1eb10 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72  ters .** that ar
1eb20 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70  e used as an unp
1eb30 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e  acked index key.
1eb40 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69   .**.** Repositi
1eb50 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  on cursor P1 so 
1eb60 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20  that  it points 
1eb70 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20  to the smallest 
1eb80 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69  entry that .** i
1eb90 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74  s greater than t
1eba0 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66  he key value. If
1ebb0 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65   there are no re
1ebc0 63 6f 72 64 73 20 67 72 65 61 74 65 72 20 74 68  cords greater th
1ebd0 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61  an .** the key a
1ebe0 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72  nd P2 is not zer
1ebf0 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  o, then jump to 
1ec00 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  P2..**.** This o
1ec10 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65  pcode leaves the
1ec20 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72   cursor configur
1ec30 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66 6f  ed to move in fo
1ec40 72 77 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a 20  rward order,.** 
1ec50 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69  from the beginni
1ec60 6e 67 20 74 6f 77 61 72 64 20 74 68 65 20 65 6e  ng toward the en
1ec70 64 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  d.  In other wor
1ec80 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69  ds, the cursor i
1ec90 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20  s.** configured 
1eca0 74 6f 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f 74  to use Next, not
1ecb0 20 50 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53 65 65   Prev..**.** See
1ecc0 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
1ecd0 74 46 6f 75 6e 64 2c 20 53 65 65 6b 4c 74 2c 20  tFound, SeekLt, 
1ece0 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a  SeekGe, SeekLe.*
1ecf0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65  /./* Opcode: See
1ed00 6b 4c 54 20 50 31 20 50 32 20 50 33 20 50 34 20  kLT P1 P2 P3 P4 
1ed10 2a 20 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  * .** Synopsis: 
1ed20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
1ed30 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  ** If cursor P1 
1ed40 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c  refers to an SQL
1ed50 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74   table (B-Tree t
1ed60 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72  hat uses integer
1ed70 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20   keys), .** use 
1ed80 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
1ed90 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b 65  ister P3 as a ke
1eda0 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  y. If cursor P1 
1edb0 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e  refers .** to an
1edc0 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e   SQL index, then
1edd0 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74   P3 is the first
1ede0 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20   in an array of 
1edf0 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a  P4 registers .**
1ee00 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61   that are used a
1ee10 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  s an unpacked in
1ee20 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20  dex key. .**.** 
1ee30 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f  Reposition curso
1ee40 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69 74  r P1 so that  it
1ee50 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6c   points to the l
1ee60 61 72 67 65 73 74 20 65 6e 74 72 79 20 74 68 61  argest entry tha
1ee70 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68  t .** is less th
1ee80 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  an the key value
1ee90 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e  . If there are n
1eea0 6f 20 72 65 63 6f 72 64 73 20 6c 65 73 73 20 74  o records less t
1eeb0 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20  han .** the key 
1eec0 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65  and P2 is not ze
1eed0 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  ro, then jump to
1eee0 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P2..**.** This 
1eef0 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68  opcode leaves th
1ef00 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75  e cursor configu
1ef10 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72  red to move in r
1ef20 65 76 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a  everse order,.**
1ef30 20 66 72 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f   from the end to
1ef40 77 61 72 64 20 74 68 65 20 62 65 67 69 6e 6e 69  ward the beginni
1ef50 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  ng.  In other wo
1ef60 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20  rds, the cursor 
1ef70 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64  is.** configured
1ef80 20 74 6f 20 75 73 65 20 50 72 65 76 2c 20 6e 6f   to use Prev, no
1ef90 74 20 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 53 65  t Next..**.** Se
1efa0 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
1efb0 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 47 74 2c  otFound, SeekGt,
1efc0 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a   SeekGe, SeekLe.
1efd0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  */./* Opcode: Se
1efe0 65 6b 4c 45 20 50 31 20 50 32 20 50 33 20 50 34  ekLE P1 P2 P3 P4
1eff0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
1f000 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
1f010 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  ** If cursor P1 
1f020 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c  refers to an SQL
1f030 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74   table (B-Tree t
1f040 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72  hat uses integer
1f050 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20   keys), .** use 
1f060 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
1f070 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b 65  ister P3 as a ke
1f080 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  y. If cursor P1 
1f090 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e  refers .** to an
1f0a0 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e   SQL index, then
1f0b0 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74   P3 is the first
1f0c0 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20   in an array of 
1f0d0 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a  P4 registers .**
1f0e0 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61   that are used a
1f0f0 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  s an unpacked in
1f100 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20  dex key. .**.** 
1f110 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f  Reposition curso
1f120 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20  r P1 so that it 
1f130 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6c 61  points to the la
1f140 72 67 65 73 74 20 65 6e 74 72 79 20 74 68 61 74  rgest entry that
1f150 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61   .** is less tha
1f160 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
1f170 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20  e key value. If 
1f180 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63  there are no rec
1f190 6f 72 64 73 20 0a 2a 2a 20 6c 65 73 73 20 74 68  ords .** less th
1f1a0 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
1f1b0 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73  he key and P2 is
1f1c0 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20   not zero, then 
1f1d0 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  jump to P2..**.*
1f1e0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65  * This opcode le
1f1f0 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20  aves the cursor 
1f200 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f  configured to mo
1f210 76 65 20 69 6e 20 72 65 76 65 72 73 65 20 6f 72  ve in reverse or
1f220 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65  der,.** from the
1f230 20 65 6e 64 20 74 6f 77 61 72 64 20 74 68 65 20   end toward the 
1f240 62 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f  beginning.  In o
1f250 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
1f260 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e  cursor is.** con
1f270 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 50  figured to use P
1f280 72 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a  rev, not Next..*
1f290 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 75 72 73  *.** If the curs
1f2a0 6f 72 20 50 31 20 77 61 73 20 6f 70 65 6e 65 64  or P1 was opened
1f2b0 20 75 73 69 6e 67 20 74 68 65 20 4f 50 46 4c 41   using the OPFLA
1f2c0 47 5f 53 45 45 4b 45 51 20 66 6c 61 67 2c 20 74  G_SEEKEQ flag, t
1f2d0 68 65 6e 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f  hen this.** opco
1f2e0 64 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 6c  de will always l
1f2f0 61 6e 64 20 6f 6e 20 61 20 72 65 63 6f 72 64 20  and on a record 
1f300 74 68 61 74 20 65 71 75 61 6c 6c 79 20 65 71 75  that equally equ
1f310 61 6c 73 20 74 68 65 20 6b 65 79 2c 20 6f 72 0a  als the key, or.
1f320 2a 2a 20 65 6c 73 65 20 6a 75 6d 70 20 69 6d 6d  ** else jump imm
1f330 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20  ediately to P2. 
1f340 20 57 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72   When the cursor
1f350 20 69 73 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45   is OPFLAG_SEEKE
1f360 51 2c 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64  Q, this.** opcod
1f370 65 20 6d 75 73 74 20 62 65 20 66 6f 6c 6c 6f 77  e must be follow
1f380 65 64 20 62 79 20 61 6e 20 49 64 78 47 45 20 6f  ed by an IdxGE o
1f390 70 63 6f 64 65 20 77 69 74 68 20 74 68 65 20 73  pcode with the s
1f3a0 61 6d 65 20 61 72 67 75 6d 65 6e 74 73 2e 0a 2a  ame arguments..*
1f3b0 2a 20 54 68 65 20 49 64 78 47 45 20 6f 70 63 6f  * The IdxGE opco
1f3c0 64 65 20 77 69 6c 6c 20 62 65 20 73 6b 69 70 70  de will be skipp
1f3d0 65 64 20 69 66 20 74 68 69 73 20 6f 70 63 6f 64  ed if this opcod
1f3e0 65 20 73 75 63 63 65 65 64 73 2c 20 62 75 74 20  e succeeds, but 
1f3f0 74 68 65 0a 2a 2a 20 49 64 78 47 45 20 6f 70 63  the.** IdxGE opc
1f400 6f 64 65 20 77 69 6c 6c 20 62 65 20 75 73 65 64  ode will be used
1f410 20 6f 6e 20 73 75 62 73 65 71 75 65 6e 74 20 6c   on subsequent l
1f420 6f 6f 70 20 69 74 65 72 61 74 69 6f 6e 73 2e 0a  oop iterations..
1f430 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
1f440 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c  Found, NotFound,
1f450 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c   SeekGt, SeekGe,
1f460 20 53 65 65 6b 4c 74 0a 2a 2f 0a 63 61 73 65 20   SeekLt.*/.case 
1f470 4f 50 5f 53 65 65 6b 4c 54 3a 20 20 20 20 20 20  OP_SeekLT:      
1f480 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
1f490 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c  */.case OP_SeekL
1f4a0 45 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  E:         /* ju
1f4b0 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  mp, in3 */.case 
1f4c0 4f 50 5f 53 65 65 6b 47 45 3a 20 20 20 20 20 20  OP_SeekGE:      
1f4d0 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
1f4e0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 47  */.case OP_SeekG
1f4f0 54 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75  T: {       /* ju
1f500 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74  mp, in3 */.  int
1f510 20 72 65 73 3b 20 20 20 20 20 20 20 20 20 20 20   res;           
1f520 2f 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20 72 65  /* Comparison re
1f530 73 75 6c 74 20 2a 2f 0a 20 20 69 6e 74 20 6f 63  sult */.  int oc
1f540 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1f550 4f 70 63 6f 64 65 20 2a 2f 0a 20 20 56 64 62 65  Opcode */.  Vdbe
1f560 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 2f  Cursor *pC;    /
1f570 2a 20 54 68 65 20 63 75 72 73 6f 72 20 74 6f 20  * The cursor to 
1f580 73 65 65 6b 20 2a 2f 0a 20 20 55 6e 70 61 63 6b  seek */.  Unpack
1f590 65 64 52 65 63 6f 72 64 20 72 3b 20 20 2f 2a 20  edRecord r;  /* 
1f5a0 54 68 65 20 6b 65 79 20 74 6f 20 73 65 65 6b 20  The key to seek 
1f5b0 66 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69  for */.  int nFi
1f5c0 65 6c 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  eld;        /* N
1f5d0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
1f5e0 20 6f 72 20 66 69 65 6c 64 73 20 69 6e 20 74 68   or fields in th
1f5f0 65 20 6b 65 79 20 2a 2f 0a 20 20 69 36 34 20 69  e key */.  i64 i
1f600 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Key;          /*
1f610 20 54 68 65 20 72 6f 77 69 64 20 77 65 20 61 72   The rowid we ar
1f620 65 20 74 6f 20 73 65 65 6b 20 74 6f 20 2a 2f 0a  e to seek to */.
1f630 20 20 69 6e 74 20 65 71 4f 6e 6c 79 3b 20 20 20    int eqOnly;   
1f640 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 69 6e 74       /* Only int
1f650 65 72 65 73 74 65 64 20 69 6e 20 3d 3d 20 72 65  erested in == re
1f660 73 75 6c 74 73 20 2a 2f 0a 0a 20 20 61 73 73 65  sults */..  asse
1f670 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1f680 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1f690 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
1f6a0 28 20 70 4f 70 2d 3e 70 32 21 3d 30 20 29 3b 0a  ( pOp->p2!=0 );.
1f6b0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
1f6c0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
1f6d0 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
1f6e0 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
1f6f0 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
1f700 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  EE );.  assert( 
1f710 4f 50 5f 53 65 65 6b 4c 45 20 3d 3d 20 4f 50 5f  OP_SeekLE == OP_
1f720 53 65 65 6b 4c 54 2b 31 20 29 3b 0a 20 20 61 73  SeekLT+1 );.  as
1f730 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 45 20  sert( OP_SeekGE 
1f740 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 32 20 29  == OP_SeekLT+2 )
1f750 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53  ;.  assert( OP_S
1f760 65 65 6b 47 54 20 3d 3d 20 4f 50 5f 53 65 65 6b  eekGT == OP_Seek
1f770 4c 54 2b 33 20 29 3b 0a 20 20 61 73 73 65 72 74  LT+3 );.  assert
1f780 28 20 70 43 2d 3e 69 73 4f 72 64 65 72 65 64 20  ( pC->isOrdered 
1f790 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
1f7a0 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29  >uc.pCursor!=0 )
1f7b0 3b 0a 20 20 6f 63 20 3d 20 70 4f 70 2d 3e 6f 70  ;.  oc = pOp->op
1f7c0 63 6f 64 65 3b 0a 20 20 65 71 4f 6e 6c 79 20 3d  code;.  eqOnly =
1f7d0 20 30 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f   0;.  pC->nullRo
1f7e0 77 20 3d 20 30 3b 0a 23 69 66 64 65 66 20 53 51  w = 0;.#ifdef SQ
1f7f0 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d  LITE_DEBUG.  pC-
1f800 3e 73 65 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f  >seekOp = pOp->o
1f810 70 63 6f 64 65 3b 0a 23 65 6e 64 69 66 0a 0a 20  pcode;.#endif.. 
1f820 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62 6c 65   if( pC->isTable
1f830 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 42   ){.    /* The B
1f840 54 52 45 45 5f 53 45 45 4b 5f 45 51 20 66 6c 61  TREE_SEEK_EQ fla
1f850 67 20 69 73 20 6f 6e 6c 79 20 73 65 74 20 6f 6e  g is only set on
1f860 20 69 6e 64 65 78 20 63 75 72 73 6f 72 73 20 2a   index cursors *
1f870 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 73 71  /.    assert( sq
1f880 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
1f890 48 61 73 48 69 6e 74 28 70 43 2d 3e 75 63 2e 70  HasHint(pC->uc.p
1f8a0 43 75 72 73 6f 72 2c 20 42 54 52 45 45 5f 53 45  Cursor, BTREE_SE
1f8b0 45 4b 5f 45 51 29 3d 3d 30 20 29 3b 0a 0a 20 20  EK_EQ)==0 );..  
1f8c0 20 20 2f 2a 20 54 68 65 20 69 6e 70 75 74 20 76    /* The input v
1f8d0 61 6c 75 65 20 69 6e 20 50 33 20 6d 69 67 68 74  alue in P3 might
1f8e0 20 62 65 20 6f 66 20 61 6e 79 20 74 79 70 65 3a   be of any type:
1f8f0 20 69 6e 74 65 67 65 72 2c 20 72 65 61 6c 2c 20   integer, real, 
1f900 73 74 72 69 6e 67 2c 0a 20 20 20 20 2a 2a 20 62  string,.    ** b
1f910 6c 6f 62 2c 20 6f 72 20 4e 55 4c 4c 2e 20 20 42  lob, or NULL.  B
1f920 75 74 20 69 74 20 6e 65 65 64 73 20 74 6f 20 62  ut it needs to b
1f930 65 20 61 6e 20 69 6e 74 65 67 65 72 20 62 65 66  e an integer bef
1f940 6f 72 65 20 77 65 20 63 61 6e 20 64 6f 0a 20 20  ore we can do.  
1f950 20 20 2a 2a 20 74 68 65 20 73 65 65 6b 2c 20 73    ** the seek, s
1f960 6f 20 63 6f 6e 76 65 72 74 20 69 74 2e 20 2a 2f  o convert it. */
1f970 0a 20 20 20 20 70 49 6e 33 20 3d 20 26 61 4d 65  .    pIn3 = &aMe
1f980 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20  m[pOp->p3];.    
1f990 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73  if( (pIn3->flags
1f9a0 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f   & (MEM_Int|MEM_
1f9b0 52 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d  Real|MEM_Str))==
1f9c0 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 20  MEM_Str ){.     
1f9d0 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66   applyNumericAff
1f9e0 69 6e 69 74 79 28 70 49 6e 33 2c 20 30 29 3b 0a  inity(pIn3, 0);.
1f9f0 20 20 20 20 7d 0a 20 20 20 20 69 4b 65 79 20 3d      }.    iKey =
1fa00 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
1fa10 61 6c 75 65 28 70 49 6e 33 29 3b 0a 0a 20 20 20  alue(pIn3);..   
1fa20 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20 76 61   /* If the P3 va
1fa30 6c 75 65 20 63 6f 75 6c 64 20 6e 6f 74 20 62 65  lue could not be
1fa40 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20   converted into 
1fa50 61 6e 20 69 6e 74 65 67 65 72 20 77 69 74 68 6f  an integer witho
1fa60 75 74 0a 20 20 20 20 2a 2a 20 6c 6f 73 73 20 6f  ut.    ** loss o
1fa70 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74  f information, t
1fa80 68 65 6e 20 73 70 65 63 69 61 6c 20 70 72 6f 63  hen special proc
1fa90 65 73 73 69 6e 67 20 69 73 20 72 65 71 75 69 72  essing is requir
1faa0 65 64 2e 2e 2e 20 2a 2f 0a 20 20 20 20 69 66 28  ed... */.    if(
1fab0 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20   (pIn3->flags & 
1fac0 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20  MEM_Int)==0 ){. 
1fad0 20 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e       if( (pIn3->
1fae0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c  flags & MEM_Real
1faf0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
1fb00 2f 2a 20 49 66 20 74 68 65 20 50 33 20 76 61 6c  /* If the P3 val
1fb10 75 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e  ue cannot be con
1fb20 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 79 20  verted into any 
1fb30 6b 69 6e 64 20 6f 66 20 61 20 6e 75 6d 62 65 72  kind of a number
1fb40 2c 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65  ,.        ** the
1fb50 6e 20 74 68 65 20 73 65 65 6b 20 69 73 20 6e 6f  n the seek is no
1fb60 74 20 70 6f 73 73 69 62 6c 65 2c 20 73 6f 20 6a  t possible, so j
1fb70 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20  ump to P2 */.   
1fb80 20 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54       VdbeBranchT
1fb90 61 6b 65 6e 28 31 2c 32 29 3b 20 67 6f 74 6f 20  aken(1,2); goto 
1fba0 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20  jump_to_p2;.    
1fbb0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
1fbc0 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20   }..      /* If 
1fbd0 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74 69 6f  the approximatio
1fbe0 6e 20 69 4b 65 79 20 69 73 20 6c 61 72 67 65 72  n iKey is larger
1fbf0 20 74 68 61 6e 20 74 68 65 20 61 63 74 75 61 6c   than the actual
1fc00 20 72 65 61 6c 20 73 65 61 72 63 68 0a 20 20 20   real search.   
1fc10 20 20 20 2a 2a 20 74 65 72 6d 2c 20 73 75 62 73     ** term, subs
1fc20 74 69 74 75 74 65 20 3e 3d 20 66 6f 72 20 3e 20  titute >= for > 
1fc30 61 6e 64 20 3c 20 66 6f 72 20 3c 3d 2e 20 65 2e  and < for <=. e.
1fc40 67 2e 20 69 66 20 74 68 65 20 73 65 61 72 63 68  g. if the search
1fc50 20 74 65 72 6d 0a 20 20 20 20 20 20 2a 2a 20 69   term.      ** i
1fc60 73 20 34 2e 39 20 61 6e 64 20 74 68 65 20 69 6e  s 4.9 and the in
1fc70 74 65 67 65 72 20 61 70 70 72 6f 78 69 6d 61 74  teger approximat
1fc80 69 6f 6e 20 35 3a 0a 20 20 20 20 20 20 2a 2a 0a  ion 5:.      **.
1fc90 20 20 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20        **        
1fca0 28 78 20 3e 20 20 34 2e 39 29 20 20 20 20 2d 3e  (x >  4.9)    ->
1fcb0 20 20 20 20 20 28 78 20 3e 3d 20 35 29 0a 20 20       (x >= 5).  
1fcc0 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 28 78      **        (x
1fcd0 20 3c 3d 20 34 2e 39 29 20 20 20 20 2d 3e 20 20   <= 4.9)    ->  
1fce0 20 20 20 28 78 20 3c 20 20 35 29 0a 20 20 20 20     (x <  5).    
1fcf0 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70    */.      if( p
1fd00 49 6e 33 2d 3e 75 2e 72 3c 28 64 6f 75 62 6c 65  In3->u.r<(double
1fd10 29 69 4b 65 79 20 29 7b 0a 20 20 20 20 20 20 20  )iKey ){.       
1fd20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b   assert( OP_Seek
1fd30 47 45 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 2d 31  GE==(OP_SeekGT-1
1fd40 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  ) );.        ass
1fd50 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 54 3d 3d  ert( OP_SeekLT==
1fd60 28 4f 50 5f 53 65 65 6b 4c 45 2d 31 29 20 29 3b  (OP_SeekLE-1) );
1fd70 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1fd80 20 28 4f 50 5f 53 65 65 6b 4c 45 20 26 20 30 78   (OP_SeekLE & 0x
1fd90 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47  0001)==(OP_SeekG
1fda0 54 20 26 20 30 78 30 30 30 31 29 20 29 3b 0a 20  T & 0x0001) );. 
1fdb0 20 20 20 20 20 20 20 69 66 28 20 28 6f 63 20 26         if( (oc &
1fdc0 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65   0x0001)==(OP_Se
1fdd0 65 6b 47 54 20 26 20 30 78 30 30 30 31 29 20 29  ekGT & 0x0001) )
1fde0 20 6f 63 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a   oc--;.      }..
1fdf0 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20        /* If the 
1fe00 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 69 4b  approximation iK
1fe10 65 79 20 69 73 20 73 6d 61 6c 6c 65 72 20 74 68  ey is smaller th
1fe20 61 6e 20 74 68 65 20 61 63 74 75 61 6c 20 72 65  an the actual re
1fe30 61 6c 20 73 65 61 72 63 68 0a 20 20 20 20 20 20  al search.      
1fe40 2a 2a 20 74 65 72 6d 2c 20 73 75 62 73 74 69 74  ** term, substit
1fe50 75 74 65 20 3c 3d 20 66 6f 72 20 3c 20 61 6e 64  ute <= for < and
1fe60 20 3e 20 66 6f 72 20 3e 3d 2e 20 20 2a 2f 0a 20   > for >=.  */. 
1fe70 20 20 20 20 20 65 6c 73 65 20 69 66 28 20 70 49       else if( pI
1fe80 6e 33 2d 3e 75 2e 72 3e 28 64 6f 75 62 6c 65 29  n3->u.r>(double)
1fe90 69 4b 65 79 20 29 7b 0a 20 20 20 20 20 20 20 20  iKey ){.        
1fea0 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c  assert( OP_SeekL
1feb0 45 3d 3d 28 4f 50 5f 53 65 65 6b 4c 54 2b 31 29  E==(OP_SeekLT+1)
1fec0 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
1fed0 72 74 28 20 4f 50 5f 53 65 65 6b 47 54 3d 3d 28  rt( OP_SeekGT==(
1fee0 4f 50 5f 53 65 65 6b 47 45 2b 31 29 20 29 3b 0a  OP_SeekGE+1) );.
1fef0 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1ff00 28 4f 50 5f 53 65 65 6b 4c 54 20 26 20 30 78 30  (OP_SeekLT & 0x0
1ff10 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 45  001)==(OP_SeekGE
1ff20 20 26 20 30 78 30 30 30 31 29 20 29 3b 0a 20 20   & 0x0001) );.  
1ff30 20 20 20 20 20 20 69 66 28 20 28 6f 63 20 26 20        if( (oc & 
1ff40 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65  0x0001)==(OP_See
1ff50 6b 4c 54 20 26 20 30 78 30 30 30 31 29 20 29 20  kLT & 0x0001) ) 
1ff60 6f 63 2b 2b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  oc++;.      }.  
1ff70 20 20 7d 20 0a 20 20 20 20 72 63 20 3d 20 73 71    } .    rc = sq
1ff80 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
1ff90 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 75 63 2e  Unpacked(pC->uc.
1ffa0 70 43 75 72 73 6f 72 2c 20 30 2c 20 28 75 36 34  pCursor, 0, (u64
1ffb0 29 69 4b 65 79 2c 20 30 2c 20 26 72 65 73 29 3b  )iKey, 0, &res);
1ffc0 0a 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54  .    pC->movetoT
1ffd0 61 72 67 65 74 20 3d 20 69 4b 65 79 3b 20 20 2f  arget = iKey;  /
1ffe0 2a 20 55 73 65 64 20 62 79 20 4f 50 5f 44 65 6c  * Used by OP_Del
1fff0 65 74 65 20 2a 2f 0a 20 20 20 20 69 66 28 20 72  ete */.    if( r
20000 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
20010 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
20020 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
20030 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
20040 20 20 2f 2a 20 46 6f 72 20 61 20 63 75 72 73 6f    /* For a curso
20050 72 20 77 69 74 68 20 74 68 65 20 42 54 52 45 45  r with the BTREE
20060 5f 53 45 45 4b 5f 45 51 20 68 69 6e 74 2c 20 6f  _SEEK_EQ hint, o
20070 6e 6c 79 20 74 68 65 20 4f 50 5f 53 65 65 6b 47  nly the OP_SeekG
20080 45 20 61 6e 64 0a 20 20 20 20 2a 2a 20 4f 50 5f  E and.    ** OP_
20090 53 65 65 6b 4c 45 20 6f 70 63 6f 64 65 73 20 61  SeekLE opcodes a
200a0 72 65 20 61 6c 6c 6f 77 65 64 2c 20 61 6e 64 20  re allowed, and 
200b0 74 68 65 73 65 20 6d 75 73 74 20 62 65 20 69 6d  these must be im
200c0 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77  mediately follow
200d0 65 64 0a 20 20 20 20 2a 2a 20 62 79 20 61 6e 20  ed.    ** by an 
200e0 4f 50 5f 49 64 78 47 54 20 6f 72 20 4f 50 5f 49  OP_IdxGT or OP_I
200f0 64 78 4c 54 20 6f 70 63 6f 64 65 2c 20 72 65 73  dxLT opcode, res
20100 70 65 63 74 69 76 65 6c 79 2c 20 77 69 74 68 20  pectively, with 
20110 74 68 65 20 73 61 6d 65 20 6b 65 79 2e 0a 20 20  the same key..  
20120 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 73 71 6c    */.    if( sql
20130 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 48  ite3BtreeCursorH
20140 61 73 48 69 6e 74 28 70 43 2d 3e 75 63 2e 70 43  asHint(pC->uc.pC
20150 75 72 73 6f 72 2c 20 42 54 52 45 45 5f 53 45 45  ursor, BTREE_SEE
20160 4b 5f 45 51 29 20 29 7b 0a 20 20 20 20 20 20 65  K_EQ) ){.      e
20170 71 4f 6e 6c 79 20 3d 20 31 3b 0a 20 20 20 20 20  qOnly = 1;.     
20180 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
20190 63 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b 47 45 20  code==OP_SeekGE 
201a0 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
201b0 4f 50 5f 53 65 65 6b 4c 45 20 29 3b 0a 20 20 20  OP_SeekLE );.   
201c0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31     assert( pOp[1
201d0 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ].opcode==OP_Idx
201e0 4c 54 20 7c 7c 20 70 4f 70 5b 31 5d 2e 6f 70 63  LT || pOp[1].opc
201f0 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b  ode==OP_IdxGT );
20200 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
20210 4f 70 5b 31 5d 2e 70 31 3d 3d 70 4f 70 5b 30 5d  Op[1].p1==pOp[0]
20220 2e 70 31 20 29 3b 0a 20 20 20 20 20 20 61 73 73  .p1 );.      ass
20230 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70 32 3d 3d  ert( pOp[1].p2==
20240 70 4f 70 5b 30 5d 2e 70 32 20 29 3b 0a 20 20 20  pOp[0].p2 );.   
20250 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31     assert( pOp[1
20260 5d 2e 70 33 3d 3d 70 4f 70 5b 30 5d 2e 70 33 20  ].p3==pOp[0].p3 
20270 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
20280 20 70 4f 70 5b 31 5d 2e 70 34 2e 69 3d 3d 70 4f   pOp[1].p4.i==pO
20290 70 5b 30 5d 2e 70 34 2e 69 20 29 3b 0a 20 20 20  p[0].p4.i );.   
202a0 20 7d 0a 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d   }..    nField =
202b0 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20   pOp->p4.i;.    
202c0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
202d0 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b  ype==P4_INT32 );
202e0 0a 20 20 20 20 61 73 73 65 72 74 28 20 6e 46 69  .    assert( nFi
202f0 65 6c 64 3e 30 20 29 3b 0a 20 20 20 20 72 2e 70  eld>0 );.    r.p
20300 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b  KeyInfo = pC->pK
20310 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46  eyInfo;.    r.nF
20320 69 65 6c 64 20 3d 20 28 75 31 36 29 6e 46 69 65  ield = (u16)nFie
20330 6c 64 3b 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20  ld;..    /* The 
20340 6e 65 78 74 20 6c 69 6e 65 20 6f 66 20 63 6f 64  next line of cod
20350 65 20 63 6f 6d 70 75 74 65 73 20 61 73 20 66 6f  e computes as fo
20360 6c 6c 6f 77 73 2c 20 6f 6e 6c 79 20 66 61 73 74  llows, only fast
20370 65 72 3a 0a 20 20 20 20 2a 2a 20 20 20 69 66 28  er:.    **   if(
20380 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 7c   oc==OP_SeekGT |
20390 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20  | oc==OP_SeekLE 
203a0 29 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20 72 2e  ){.    **     r.
203b0 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2d 31 3b  default_rc = -1;
203c0 0a 20 20 20 20 2a 2a 20 20 20 7d 65 6c 73 65 7b  .    **   }else{
203d0 0a 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 64 65  .    **     r.de
203e0 66 61 75 6c 74 5f 72 63 20 3d 20 2b 31 3b 0a 20  fault_rc = +1;. 
203f0 20 20 20 2a 2a 20 20 20 7d 0a 20 20 20 20 2a 2f     **   }.    */
20400 0a 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72  .    r.default_r
20410 63 20 3d 20 28 28 31 20 26 20 28 6f 63 20 2d 20  c = ((1 & (oc - 
20420 4f 50 5f 53 65 65 6b 4c 54 29 29 20 3f 20 2d 31  OP_SeekLT)) ? -1
20430 20 3a 20 2b 31 29 3b 0a 20 20 20 20 61 73 73 65   : +1);.    asse
20440 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47  rt( oc!=OP_SeekG
20450 54 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72  T || r.default_r
20460 63 3d 3d 2d 31 20 29 3b 0a 20 20 20 20 61 73 73  c==-1 );.    ass
20470 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b  ert( oc!=OP_Seek
20480 4c 45 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f  LE || r.default_
20490 72 63 3d 3d 2d 31 20 29 3b 0a 20 20 20 20 61 73  rc==-1 );.    as
204a0 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65  sert( oc!=OP_See
204b0 6b 47 45 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74  kGE || r.default
204c0 5f 72 63 3d 3d 2b 31 20 29 3b 0a 20 20 20 20 61  _rc==+1 );.    a
204d0 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65  ssert( oc!=OP_Se
204e0 65 6b 4c 54 20 7c 7c 20 72 2e 64 65 66 61 75 6c  ekLT || r.defaul
204f0 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a 0a 20 20 20  t_rc==+1 );..   
20500 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b   r.aMem = &aMem[
20510 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66  pOp->p3];.#ifdef
20520 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
20530 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69    { int i; for(i
20540 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20  =0; i<r.nField; 
20550 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d  i++) assert( mem
20560 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b  IsValid(&r.aMem[
20570 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a  i]) ); }.#endif.
20580 20 20 20 20 28 76 6f 69 64 29 45 78 70 61 6e 64      (void)Expand
20590 42 6c 6f 62 28 72 2e 61 4d 65 6d 29 3b 0a 20 20  Blob(r.aMem);.  
205a0 20 20 72 2e 65 71 53 65 65 6e 20 3d 20 30 3b 0a    r.eqSeen = 0;.
205b0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
205c0 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
205d0 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  ked(pC->uc.pCurs
205e0 6f 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72  or, &r, 0, 0, &r
205f0 65 73 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21  es);.    if( rc!
20600 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
20610 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
20620 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
20630 20 7d 0a 20 20 20 20 69 66 28 20 65 71 4f 6e 6c   }.    if( eqOnl
20640 79 20 26 26 20 72 2e 65 71 53 65 65 6e 3d 3d 30  y && r.eqSeen==0
20650 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
20660 28 20 72 65 73 21 3d 30 20 29 3b 0a 20 20 20 20  ( res!=0 );.    
20670 20 20 67 6f 74 6f 20 73 65 65 6b 5f 6e 6f 74 5f    goto seek_not_
20680 66 6f 75 6e 64 3b 0a 20 20 20 20 7d 0a 20 20 7d  found;.    }.  }
20690 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  .  pC->deferredM
206a0 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d  oveto = 0;.  pC-
206b0 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
206c0 41 43 48 45 5f 53 54 41 4c 45 3b 0a 23 69 66 64  ACHE_STALE;.#ifd
206d0 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
206e0 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
206f0 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a  count++;.#endif.
20700 20 20 69 66 28 20 6f 63 3e 3d 4f 50 5f 53 65 65    if( oc>=OP_See
20710 6b 47 45 20 29 7b 20 20 61 73 73 65 72 74 28 20  kGE ){  assert( 
20720 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c  oc==OP_SeekGE ||
20730 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 29   oc==OP_SeekGT )
20740 3b 0a 20 20 20 20 69 66 28 20 72 65 73 3c 30 20  ;.    if( res<0 
20750 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26 20 6f 63  || (res==0 && oc
20760 3d 3d 4f 50 5f 53 65 65 6b 47 54 29 20 29 7b 0a  ==OP_SeekGT) ){.
20770 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20        res = 0;. 
20780 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
20790 33 42 74 72 65 65 4e 65 78 74 28 70 43 2d 3e 75  3BtreeNext(pC->u
207a0 63 2e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29  c.pCursor, &res)
207b0 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  ;.      if( rc!=
207c0 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
207d0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
207e0 72 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ror;.    }else{.
207f0 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20        res = 0;. 
20800 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
20810 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50    assert( oc==OP
20820 5f 53 65 65 6b 4c 54 20 7c 7c 20 6f 63 3d 3d 4f  _SeekLT || oc==O
20830 50 5f 53 65 65 6b 4c 45 20 29 3b 0a 20 20 20 20  P_SeekLE );.    
20840 69 66 28 20 72 65 73 3e 30 20 7c 7c 20 28 72 65  if( res>0 || (re
20850 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53  s==0 && oc==OP_S
20860 65 65 6b 4c 54 29 20 29 7b 0a 20 20 20 20 20 20  eekLT) ){.      
20870 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 72  res = 0;.      r
20880 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
20890 50 72 65 76 69 6f 75 73 28 70 43 2d 3e 75 63 2e  Previous(pC->uc.
208a0 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a  pCursor, &res);.
208b0 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
208c0 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
208d0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
208e0 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  r;.    }else{.  
208f0 20 20 20 20 2f 2a 20 72 65 73 20 6d 69 67 68 74      /* res might
20900 20 62 65 20 6e 65 67 61 74 69 76 65 20 62 65 63   be negative bec
20910 61 75 73 65 20 74 68 65 20 74 61 62 6c 65 20 69  ause the table i
20920 73 20 65 6d 70 74 79 2e 20 20 43 68 65 63 6b 20  s empty.  Check 
20930 74 6f 0a 20 20 20 20 20 20 2a 2a 20 73 65 65 20  to.      ** see 
20940 69 66 20 74 68 69 73 20 69 73 20 74 68 65 20 63  if this is the c
20950 61 73 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  ase..      */.  
20960 20 20 20 20 72 65 73 20 3d 20 73 71 6c 69 74 65      res = sqlite
20970 33 42 74 72 65 65 45 6f 66 28 70 43 2d 3e 75 63  3BtreeEof(pC->uc
20980 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d  .pCursor);.    }
20990 0a 20 20 7d 0a 73 65 65 6b 5f 6e 6f 74 5f 66 6f  .  }.seek_not_fo
209a0 75 6e 64 3a 0a 20 20 61 73 73 65 72 74 28 20 70  und:.  assert( p
209b0 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 56 64  Op->p2>0 );.  Vd
209c0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65  beBranchTaken(re
209d0 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72  s!=0,2);.  if( r
209e0 65 73 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a  es ){.    goto j
209f0 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c  ump_to_p2;.  }el
20a00 73 65 20 69 66 28 20 65 71 4f 6e 6c 79 20 29 7b  se if( eqOnly ){
20a10 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
20a20 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  [1].opcode==OP_I
20a30 64 78 4c 54 20 7c 7c 20 70 4f 70 5b 31 5d 2e 6f  dxLT || pOp[1].o
20a40 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20  pcode==OP_IdxGT 
20a50 29 3b 0a 20 20 20 20 70 4f 70 2b 2b 3b 20 2f 2a  );.    pOp++; /*
20a60 20 53 6b 69 70 20 74 68 65 20 4f 50 5f 49 64 78   Skip the OP_Idx
20a70 4c 74 20 6f 72 20 4f 50 5f 49 64 78 47 54 20 74  Lt or OP_IdxGT t
20a80 68 61 74 20 66 6f 6c 6c 6f 77 73 20 2a 2f 0a 20  hat follows */. 
20a90 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
20aa0 2a 20 4f 70 63 6f 64 65 3a 20 46 6f 75 6e 64 20  * Opcode: Found 
20ab0 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
20ac0 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
20ad0 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66  [P3@P4].**.** If
20ae0 20 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69   P4==0 then regi
20af0 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20  ster P3 holds a 
20b00 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64  blob constructed
20b10 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20   by MakeRecord. 
20b20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e   If.** P4>0 then
20b30 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
20b40 74 68 65 20 66 69 72 73 74 20 6f 66 20 50 34 20  the first of P4 
20b50 72 65 67 69 73 74 65 72 73 20 74 68 61 74 20 66  registers that f
20b60 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a  orm an unpacked.
20b70 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a  ** record..**.**
20b80 20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e   Cursor P1 is on
20b90 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e   an index btree.
20ba0 20 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20    If the record 
20bb0 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 50 33  identified by P3
20bc0 20 61 6e 64 20 50 34 0a 2a 2a 20 69 73 20 61 20   and P4.** is a 
20bd0 70 72 65 66 69 78 20 6f 66 20 61 6e 79 20 65 6e  prefix of any en
20be0 74 72 79 20 69 6e 20 50 31 20 74 68 65 6e 20 61  try in P1 then a
20bf0 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f   jump is made to
20c00 20 50 32 20 61 6e 64 0a 2a 2a 20 50 31 20 69 73   P2 and.** P1 is
20c10 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61   left pointing a
20c20 74 20 74 68 65 20 6d 61 74 63 68 69 6e 67 20 65  t the matching e
20c30 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  ntry..**.** This
20c40 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61 76 65   operation leave
20c50 73 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20  s the cursor in 
20c60 61 20 73 74 61 74 65 20 77 68 65 72 65 20 69 74  a state where it
20c70 20 63 61 6e 20 62 65 0a 2a 2a 20 61 64 76 61 6e   can be.** advan
20c80 63 65 64 20 69 6e 20 74 68 65 20 66 6f 72 77 61  ced in the forwa
20c90 72 64 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 54  rd direction.  T
20ca0 68 65 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74  he Next instruct
20cb0 69 6f 6e 20 77 69 6c 6c 20 77 6f 72 6b 2c 0a 2a  ion will work,.*
20cc0 2a 20 62 75 74 20 6e 6f 74 20 74 68 65 20 50 72  * but not the Pr
20cd0 65 76 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  ev instruction..
20ce0 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
20cf0 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66  NotFound, NoConf
20d00 6c 69 63 74 2c 20 4e 6f 74 45 78 69 73 74 73 2e  lict, NotExists.
20d10 20 53 65 65 6b 47 65 0a 2a 2f 0a 2f 2a 20 4f 70   SeekGe.*/./* Op
20d20 63 6f 64 65 3a 20 4e 6f 74 46 6f 75 6e 64 20 50  code: NotFound P
20d30 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20  1 P2 P3 P4 *.** 
20d40 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
20d50 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20  P3@P4].**.** If 
20d60 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73  P4==0 then regis
20d70 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62  ter P3 holds a b
20d80 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20  lob constructed 
20d90 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20  by MakeRecord.  
20da0 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20  If.** P4>0 then 
20db0 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74  register P3 is t
20dc0 68 65 20 66 69 72 73 74 20 6f 66 20 50 34 20 72  he first of P4 r
20dd0 65 67 69 73 74 65 72 73 20 74 68 61 74 20 66 6f  egisters that fo
20de0 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a  rm an unpacked.*
20df0 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a  * record..** .**
20e00 20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e   Cursor P1 is on
20e10 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e   an index btree.
20e20 20 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20    If the record 
20e30 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 50 33  identified by P3
20e40 20 61 6e 64 20 50 34 0a 2a 2a 20 69 73 20 6e 6f   and P4.** is no
20e50 74 20 74 68 65 20 70 72 65 66 69 78 20 6f 66 20  t the prefix of 
20e60 61 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20  any entry in P1 
20e70 74 68 65 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d  then a jump is m
20e80 61 64 65 20 74 6f 20 50 32 2e 20 20 49 66 20 50  ade to P2.  If P
20e90 31 20 0a 2a 2a 20 64 6f 65 73 20 63 6f 6e 74 61  1 .** does conta
20ea0 69 6e 20 61 6e 20 65 6e 74 72 79 20 77 68 6f 73  in an entry whos
20eb0 65 20 70 72 65 66 69 78 20 6d 61 74 63 68 65 73  e prefix matches
20ec0 20 74 68 65 20 50 33 2f 50 34 20 72 65 63 6f 72   the P3/P4 recor
20ed0 64 20 74 68 65 6e 20 63 6f 6e 74 72 6f 6c 0a 2a  d then control.*
20ee0 2a 20 66 61 6c 6c 73 20 74 68 72 6f 75 67 68 20  * falls through 
20ef0 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
20f00 72 75 63 74 69 6f 6e 20 61 6e 64 20 50 31 20 69  ruction and P1 i
20f10 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20  s left pointing 
20f20 61 74 20 74 68 65 0a 2a 2a 20 6d 61 74 63 68 69  at the.** matchi
20f30 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20  ng entry..**.** 
20f40 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c  This operation l
20f50 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
20f60 20 69 6e 20 61 20 73 74 61 74 65 20 77 68 65 72   in a state wher
20f70 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 0a 2a  e it cannot be.*
20f80 2a 20 61 64 76 61 6e 63 65 64 20 69 6e 20 65 69  * advanced in ei
20f90 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e 20  ther direction. 
20fa0 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
20fb0 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50 72   the Next and Pr
20fc0 65 76 0a 2a 2a 20 6f 70 63 6f 64 65 73 20 64 6f  ev.** opcodes do
20fd0 20 6e 6f 74 20 77 6f 72 6b 20 61 66 74 65 72 20   not work after 
20fe0 74 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 2e 0a  this operation..
20ff0 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
21000 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73  Found, NotExists
21010 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 0a 2a 2f 0a  , NoConflict.*/.
21020 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 43 6f 6e  /* Opcode: NoCon
21030 66 6c 69 63 74 20 50 31 20 50 32 20 50 33 20 50  flict P1 P2 P3 P
21040 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
21050 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
21060 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65  .** If P4==0 the
21070 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 68 6f  n register P3 ho
21080 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74  lds a blob const
21090 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65  ructed by MakeRe
210a0 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e  cord.  If.** P4>
210b0 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20  0 then register 
210c0 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P3 is the first 
210d0 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
210e0 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70  that form an unp
210f0 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e  acked.** record.
21100 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50  .** .** Cursor P
21110 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78  1 is on an index
21120 20 62 74 72 65 65 2e 20 20 49 66 20 74 68 65 20   btree.  If the 
21130 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65  record identifie
21140 64 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a  d by P3 and P4.*
21150 2a 20 63 6f 6e 74 61 69 6e 73 20 61 6e 79 20 4e  * contains any N
21160 55 4c 4c 20 76 61 6c 75 65 2c 20 6a 75 6d 70 20  ULL value, jump 
21170 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
21180 32 2e 20 20 49 66 20 61 6c 6c 20 74 65 72 6d 73  2.  If all terms
21190 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 63 6f 72   of the.** recor
211a0 64 20 61 72 65 20 6e 6f 74 2d 4e 55 4c 4c 20 74  d are not-NULL t
211b0 68 65 6e 20 61 20 63 68 65 63 6b 20 69 73 20 64  hen a check is d
211c0 6f 6e 65 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  one to determine
211d0 20 69 66 20 61 6e 79 20 72 6f 77 20 69 6e 20 74   if any row in t
211e0 68 65 0a 2a 2a 20 50 31 20 69 6e 64 65 78 20 62  he.** P1 index b
211f0 74 72 65 65 20 68 61 73 20 61 20 6d 61 74 63 68  tree has a match
21200 69 6e 67 20 6b 65 79 20 70 72 65 66 69 78 2e 20  ing key prefix. 
21210 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   If there are no
21220 20 6d 61 74 63 68 65 73 2c 20 6a 75 6d 70 0a 2a   matches, jump.*
21230 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  * immediately to
21240 20 50 32 2e 20 20 49 66 20 74 68 65 72 65 20 69   P2.  If there i
21250 73 20 61 20 6d 61 74 63 68 2c 20 66 61 6c 6c 20  s a match, fall 
21260 74 68 72 6f 75 67 68 20 61 6e 64 20 6c 65 61 76  through and leav
21270 65 20 74 68 65 20 50 31 0a 2a 2a 20 63 75 72 73  e the P1.** curs
21280 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74  or pointing to t
21290 68 65 20 6d 61 74 63 68 69 6e 67 20 72 6f 77 2e  he matching row.
212a0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
212b0 64 65 20 69 73 20 73 69 6d 69 6c 61 72 20 74 6f  de is similar to
212c0 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 77 69 74   OP_NotFound wit
212d0 68 20 74 68 65 20 65 78 63 65 70 74 69 6f 6e 73  h the exceptions
212e0 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 62 72 61   that the.** bra
212f0 6e 63 68 20 69 73 20 61 6c 77 61 79 73 20 74 61  nch is always ta
21300 6b 65 6e 20 69 66 20 61 6e 79 20 70 61 72 74 20  ken if any part 
21310 6f 66 20 74 68 65 20 73 65 61 72 63 68 20 6b 65  of the search ke
21320 79 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e  y input is NULL.
21330 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72  .**.** This oper
21340 61 74 69 6f 6e 20 6c 65 61 76 65 73 20 74 68 65  ation leaves the
21350 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61   cursor in a sta
21360 74 65 20 77 68 65 72 65 20 69 74 20 63 61 6e 6e  te where it cann
21370 6f 74 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65  ot be.** advance
21380 64 20 69 6e 20 65 69 74 68 65 72 20 64 69 72 65  d in either dire
21390 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72  ction.  In other
213a0 20 77 6f 72 64 73 2c 20 74 68 65 20 4e 65 78 74   words, the Next
213b0 20 61 6e 64 20 50 72 65 76 0a 2a 2a 20 6f 70 63   and Prev.** opc
213c0 6f 64 65 73 20 64 6f 20 6e 6f 74 20 77 6f 72 6b  odes do not work
213d0 20 61 66 74 65 72 20 74 68 69 73 20 6f 70 65 72   after this oper
213e0 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  ation..**.** See
213f0 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c   also: NotFound,
21400 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74   Found, NotExist
21410 73 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 43  s.*/.case OP_NoC
21420 6f 6e 66 6c 69 63 74 3a 20 20 20 20 20 2f 2a 20  onflict:     /* 
21430 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73  jump, in3 */.cas
21440 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 3a 20 20  e OP_NotFound:  
21450 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
21460 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6f 75  3 */.case OP_Fou
21470 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  nd: {        /* 
21480 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69  jump, in3 */.  i
21490 6e 74 20 61 6c 72 65 61 64 79 45 78 69 73 74 73  nt alreadyExists
214a0 3b 0a 20 20 69 6e 74 20 74 61 6b 65 4a 75 6d 70  ;.  int takeJump
214b0 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 20 20 56 64  ;.  int ii;.  Vd
214c0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
214d0 69 6e 74 20 72 65 73 3b 0a 20 20 63 68 61 72 20  int res;.  char 
214e0 2a 70 46 72 65 65 3b 0a 20 20 55 6e 70 61 63 6b  *pFree;.  Unpack
214f0 65 64 52 65 63 6f 72 64 20 2a 70 49 64 78 4b 65  edRecord *pIdxKe
21500 79 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63  y;.  UnpackedRec
21510 6f 72 64 20 72 3b 0a 20 20 63 68 61 72 20 61 54  ord r;.  char aT
21520 65 6d 70 52 65 63 5b 52 4f 55 4e 44 38 28 73 69  empRec[ROUND8(si
21530 7a 65 6f 66 28 55 6e 70 61 63 6b 65 64 52 65 63  zeof(UnpackedRec
21540 6f 72 64 29 29 20 2b 20 73 69 7a 65 6f 66 28 4d  ord)) + sizeof(M
21550 65 6d 29 2a 34 20 2b 20 37 5d 3b 0a 0a 23 69 66  em)*4 + 7];..#if
21560 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
21570 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
21580 65 21 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74  e!=OP_NoConflict
21590 20 29 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64   ) sqlite3_found
215a0 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66  _count++;.#endif
215b0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
215c0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
215d0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
215e0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
215f0 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
21600 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
21610 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
21620 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
21630 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
21640 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70  BUG.  pC->seekOp
21650 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a   = pOp->opcode;.
21660 23 65 6e 64 69 66 0a 20 20 70 49 6e 33 20 3d 20  #endif.  pIn3 = 
21670 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
21680 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
21690 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
216a0 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72  BTREE );.  asser
216b0 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  t( pC->uc.pCurso
216c0 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  r!=0 );.  assert
216d0 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30  ( pC->isTable==0
216e0 20 29 3b 0a 20 20 70 46 72 65 65 20 3d 20 30 3b   );.  pFree = 0;
216f0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 69  .  if( pOp->p4.i
21700 3e 30 20 29 7b 0a 20 20 20 20 72 2e 70 4b 65 79  >0 ){.    r.pKey
21710 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49  Info = pC->pKeyI
21720 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c  nfo;.    r.nFiel
21730 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 34  d = (u16)pOp->p4
21740 2e 69 3b 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d  .i;.    r.aMem =
21750 20 70 49 6e 33 3b 0a 20 20 20 20 66 6f 72 28 69   pIn3;.    for(i
21760 69 3d 30 3b 20 69 69 3c 72 2e 6e 46 69 65 6c 64  i=0; ii<r.nField
21770 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61  ; ii++){.      a
21780 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
21790 64 28 26 72 2e 61 4d 65 6d 5b 69 69 5d 29 20 29  d(&r.aMem[ii]) )
217a0 3b 0a 20 20 20 20 20 20 28 76 6f 69 64 29 45 78  ;.      (void)Ex
217b0 70 61 6e 64 42 6c 6f 62 28 26 72 2e 61 4d 65 6d  pandBlob(&r.aMem
217c0 5b 69 69 5d 29 3b 0a 23 69 66 64 65 66 20 53 51  [ii]);.#ifdef SQ
217d0 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 20  LITE_DEBUG.     
217e0 20 69 66 28 20 69 69 20 29 20 52 45 47 49 53 54   if( ii ) REGIST
217f0 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
21800 2b 69 69 2c 20 26 72 2e 61 4d 65 6d 5b 69 69 5d  +ii, &r.aMem[ii]
21810 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 7d 0a  );.#endif.    }.
21820 20 20 20 20 70 49 64 78 4b 65 79 20 3d 20 26 72      pIdxKey = &r
21830 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
21840 49 64 78 4b 65 79 20 3d 20 73 71 6c 69 74 65 33  IdxKey = sqlite3
21850 56 64 62 65 41 6c 6c 6f 63 55 6e 70 61 63 6b 65  VdbeAllocUnpacke
21860 64 52 65 63 6f 72 64 28 0a 20 20 20 20 20 20 20  dRecord(.       
21870 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 61   pC->pKeyInfo, a
21880 54 65 6d 70 52 65 63 2c 20 73 69 7a 65 6f 66 28  TempRec, sizeof(
21890 61 54 65 6d 70 52 65 63 29 2c 20 26 70 46 72 65  aTempRec), &pFre
218a0 65 0a 20 20 20 20 29 3b 0a 20 20 20 20 69 66 28  e.    );.    if(
218b0 20 70 49 64 78 4b 65 79 3d 3d 30 20 29 20 67 6f   pIdxKey==0 ) go
218c0 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61  to no_mem;.    a
218d0 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61  ssert( pIn3->fla
218e0 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b  gs & MEM_Blob );
218f0 0a 20 20 20 20 28 76 6f 69 64 29 45 78 70 61 6e  .    (void)Expan
21900 64 42 6c 6f 62 28 70 49 6e 33 29 3b 0a 20 20 20  dBlob(pIn3);.   
21910 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 63 6f   sqlite3VdbeReco
21920 72 64 55 6e 70 61 63 6b 28 70 43 2d 3e 70 4b 65  rdUnpack(pC->pKe
21930 79 49 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e 2c 20  yInfo, pIn3->n, 
21940 70 49 6e 33 2d 3e 7a 2c 20 70 49 64 78 4b 65 79  pIn3->z, pIdxKey
21950 29 3b 0a 20 20 7d 0a 20 20 70 49 64 78 4b 65 79  );.  }.  pIdxKey
21960 2d 3e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30  ->default_rc = 0
21970 3b 0a 20 20 74 61 6b 65 4a 75 6d 70 20 3d 20 30  ;.  takeJump = 0
21980 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  ;.  if( pOp->opc
21990 6f 64 65 3d 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69  ode==OP_NoConfli
219a0 63 74 20 29 7b 0a 20 20 20 20 2f 2a 20 46 6f 72  ct ){.    /* For
219b0 20 74 68 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69   the OP_NoConfli
219c0 63 74 20 6f 70 63 6f 64 65 2c 20 74 61 6b 65 20  ct opcode, take 
219d0 74 68 65 20 6a 75 6d 70 20 69 66 20 61 6e 79 20  the jump if any 
219e0 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 69 6e  of the.    ** in
219f0 70 75 74 20 66 69 65 6c 64 73 20 61 72 65 20 4e  put fields are N
21a00 55 4c 4c 2c 20 73 69 6e 63 65 20 61 6e 79 20 6b  ULL, since any k
21a10 65 79 20 77 69 74 68 20 61 20 4e 55 4c 4c 20 77  ey with a NULL w
21a20 69 6c 6c 20 6e 6f 74 0a 20 20 20 20 2a 2a 20 63  ill not.    ** c
21a30 6f 6e 66 6c 69 63 74 20 2a 2f 0a 20 20 20 20 66  onflict */.    f
21a40 6f 72 28 69 69 3d 30 3b 20 69 69 3c 70 49 64 78  or(ii=0; ii<pIdx
21a50 4b 65 79 2d 3e 6e 46 69 65 6c 64 3b 20 69 69 2b  Key->nField; ii+
21a60 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 49  +){.      if( pI
21a70 64 78 4b 65 79 2d 3e 61 4d 65 6d 5b 69 69 5d 2e  dxKey->aMem[ii].
21a80 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
21a90 20 29 7b 0a 20 20 20 20 20 20 20 20 74 61 6b 65   ){.        take
21aa0 4a 75 6d 70 20 3d 20 31 3b 0a 20 20 20 20 20 20  Jump = 1;.      
21ab0 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
21ac0 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 63 20  .    }.  }.  rc 
21ad0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
21ae0 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d  vetoUnpacked(pC-
21af0 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 70 49 64  >uc.pCursor, pId
21b00 78 4b 65 79 2c 20 30 2c 20 30 2c 20 26 72 65 73  xKey, 0, 0, &res
21b10 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72  );.  sqlite3DbFr
21b20 65 65 28 64 62 2c 20 70 46 72 65 65 29 3b 0a 20  ee(db, pFree);. 
21b30 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
21b40 4f 4b 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 61  OK ){.    goto a
21b50 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
21b60 72 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 73 65 65  r;.  }.  pC->see
21b70 6b 52 65 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20  kResult = res;. 
21b80 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 3d   alreadyExists =
21b90 20 28 72 65 73 3d 3d 30 29 3b 0a 20 20 70 43 2d   (res==0);.  pC-
21ba0 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 2d 61 6c 72  >nullRow = 1-alr
21bb0 65 61 64 79 45 78 69 73 74 73 3b 0a 20 20 70 43  eadyExists;.  pC
21bc0 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
21bd0 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68   = 0;.  pC->cach
21be0 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
21bf0 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 70 4f 70  STALE;.  if( pOp
21c00 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75  ->opcode==OP_Fou
21c10 6e 64 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72  nd ){.    VdbeBr
21c20 61 6e 63 68 54 61 6b 65 6e 28 61 6c 72 65 61 64  anchTaken(alread
21c30 79 45 78 69 73 74 73 21 3d 30 2c 32 29 3b 0a 20  yExists!=0,2);. 
21c40 20 20 20 69 66 28 20 61 6c 72 65 61 64 79 45 78     if( alreadyEx
21c50 69 73 74 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70  ists ) goto jump
21c60 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 7b  _to_p2;.  }else{
21c70 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
21c80 61 6b 65 6e 28 74 61 6b 65 4a 75 6d 70 7c 7c 61  aken(takeJump||a
21c90 6c 72 65 61 64 79 45 78 69 73 74 73 3d 3d 30 2c  lreadyExists==0,
21ca0 32 29 3b 0a 20 20 20 20 69 66 28 20 74 61 6b 65  2);.    if( take
21cb0 4a 75 6d 70 20 7c 7c 20 21 61 6c 72 65 61 64 79  Jump || !already
21cc0 45 78 69 73 74 73 20 29 20 67 6f 74 6f 20 6a 75  Exists ) goto ju
21cd0 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20  mp_to_p2;.  }.  
21ce0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
21cf0 6f 64 65 3a 20 53 65 65 6b 52 6f 77 69 64 20 50  ode: SeekRowid P
21d00 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
21d10 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d  ynopsis: intkey=
21d20 72 5b 50 33 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69  r[P3].**.** P1 i
21d30 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61  s the index of a
21d40 20 63 75 72 73 6f 72 20 6f 70 65 6e 20 6f 6e 20   cursor open on 
21d50 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 62 74 72  an SQL table btr
21d60 65 65 20 28 77 69 74 68 20 69 6e 74 65 67 65 72  ee (with integer
21d70 0a 2a 2a 20 6b 65 79 73 29 2e 20 20 49 66 20 72  .** keys).  If r
21d80 65 67 69 73 74 65 72 20 50 33 20 64 6f 65 73 20  egister P3 does 
21d90 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69  not contain an i
21da0 6e 74 65 67 65 72 20 6f 72 20 69 66 20 50 31 20  nteger or if P1 
21db0 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 63 6f 6e 74  does not.** cont
21dc0 61 69 6e 20 61 20 72 65 63 6f 72 64 20 77 69 74  ain a record wit
21dd0 68 20 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20  h rowid P3 then 
21de0 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
21df0 20 74 6f 20 50 32 2e 20 20 0a 2a 2a 20 4f 72 2c   to P2.  .** Or,
21e00 20 69 66 20 50 32 20 69 73 20 30 2c 20 72 61 69   if P2 is 0, rai
21e10 73 65 20 61 6e 20 53 51 4c 49 54 45 5f 43 4f 52  se an SQLITE_COR
21e20 52 55 50 54 20 65 72 72 6f 72 2e 20 49 66 20 50  RUPT error. If P
21e30 31 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 0a 2a  1 does contain.*
21e40 2a 20 61 20 72 65 63 6f 72 64 20 77 69 74 68 20  * a record with 
21e50 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20 0a 2a  rowid P3 then .*
21e60 2a 20 6c 65 61 76 65 20 74 68 65 20 63 75 72 73  * leave the curs
21e70 6f 72 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74  or pointing at t
21e80 68 61 74 20 72 65 63 6f 72 64 20 61 6e 64 20 66  hat record and f
21e90 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
21ea0 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 73 74 72  he next.** instr
21eb0 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  uction..**.** Th
21ec0 65 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f  e OP_NotExists o
21ed0 70 63 6f 64 65 20 70 65 72 66 6f 72 6d 73 20 74  pcode performs t
21ee0 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f  he same operatio
21ef0 6e 2c 20 62 75 74 20 77 69 74 68 20 4f 50 5f 4e  n, but with OP_N
21f00 6f 74 45 78 69 73 74 73 0a 2a 2a 20 74 68 65 20  otExists.** the 
21f10 50 33 20 72 65 67 69 73 74 65 72 20 6d 75 73 74  P3 register must
21f20 20 62 65 20 67 75 61 72 61 6e 74 65 65 64 20 74   be guaranteed t
21f30 6f 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74  o contain an int
21f40 65 67 65 72 20 76 61 6c 75 65 2e 20 20 57 69 74  eger value.  Wit
21f50 68 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65  h this.** opcode
21f60 2c 20 72 65 67 69 73 74 65 72 20 50 33 20 6d 69  , register P3 mi
21f70 67 68 74 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20  ght not contain 
21f80 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a  an integer..**.*
21f90 2a 20 54 68 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e  * The OP_NotFoun
21fa0 64 20 6f 70 63 6f 64 65 20 70 65 72 66 6f 72 6d  d opcode perform
21fb0 73 20 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61  s the same opera
21fc0 74 69 6f 6e 20 6f 6e 20 69 6e 64 65 78 20 62 74  tion on index bt
21fd0 72 65 65 73 0a 2a 2a 20 28 77 69 74 68 20 61 72  rees.** (with ar
21fe0 62 69 74 72 61 72 79 20 6d 75 6c 74 69 2d 76 61  bitrary multi-va
21ff0 6c 75 65 20 6b 65 79 73 29 2e 0a 2a 2a 0a 2a 2a  lue keys)..**.**
22000 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61   This opcode lea
22010 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 69  ves the cursor i
22020 6e 20 61 20 73 74 61 74 65 20 77 68 65 72 65 20  n a state where 
22030 69 74 20 63 61 6e 6e 6f 74 20 62 65 20 61 64 76  it cannot be adv
22040 61 6e 63 65 64 0a 2a 2a 20 69 6e 20 65 69 74 68  anced.** in eith
22050 65 72 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49  er direction.  I
22060 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
22070 68 65 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76  he Next and Prev
22080 20 6f 70 63 6f 64 65 73 20 77 69 6c 6c 0a 2a 2a   opcodes will.**
22090 20 6e 6f 74 20 77 6f 72 6b 20 66 6f 6c 6c 6f 77   not work follow
220a0 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e  ing this opcode.
220b0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
220c0 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64   Found, NotFound
220d0 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20 53 65  , NoConflict, Se
220e0 65 6b 52 6f 77 69 64 0a 2a 2f 0a 2f 2a 20 4f 70  ekRowid.*/./* Op
220f0 63 6f 64 65 3a 20 4e 6f 74 45 78 69 73 74 73 20  code: NotExists 
22100 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
22110 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79  Synopsis: intkey
22120 3d 72 5b 50 33 5d 0a 2a 2a 0a 2a 2a 20 50 31 20  =r[P3].**.** P1 
22130 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20  is the index of 
22140 61 20 63 75 72 73 6f 72 20 6f 70 65 6e 20 6f 6e  a cursor open on
22150 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 62 74   an SQL table bt
22160 72 65 65 20 28 77 69 74 68 20 69 6e 74 65 67 65  ree (with intege
22170 72 0a 2a 2a 20 6b 65 79 73 29 2e 20 20 50 33 20  r.** keys).  P3 
22180 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 72 6f  is an integer ro
22190 77 69 64 2e 20 20 49 66 20 50 31 20 64 6f 65 73  wid.  If P1 does
221a0 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 20 72   not contain a r
221b0 65 63 6f 72 64 20 77 69 74 68 0a 2a 2a 20 72 6f  ecord with.** ro
221c0 77 69 64 20 50 33 20 74 68 65 6e 20 6a 75 6d 70  wid P3 then jump
221d0 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
221e0 50 32 2e 20 20 4f 72 2c 20 69 66 20 50 32 20 69  P2.  Or, if P2 i
221f0 73 20 30 2c 20 72 61 69 73 65 20 61 6e 0a 2a 2a  s 0, raise an.**
22200 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 20   SQLITE_CORRUPT 
22210 65 72 72 6f 72 2e 20 49 66 20 50 31 20 64 6f 65  error. If P1 doe
22220 73 20 63 6f 6e 74 61 69 6e 20 61 20 72 65 63 6f  s contain a reco
22230 72 64 20 77 69 74 68 20 72 6f 77 69 64 20 50 33  rd with rowid P3
22240 20 74 68 65 6e 20 0a 2a 2a 20 6c 65 61 76 65 20   then .** leave 
22250 74 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74  the cursor point
22260 69 6e 67 20 61 74 20 74 68 61 74 20 72 65 63 6f  ing at that reco
22270 72 64 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f  rd and fall thro
22280 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 0a  ugh to the next.
22290 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  ** instruction..
222a0 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 53 65 65  **.** The OP_See
222b0 6b 52 6f 77 69 64 20 6f 70 63 6f 64 65 20 70 65  kRowid opcode pe
222c0 72 66 6f 72 6d 73 20 74 68 65 20 73 61 6d 65 20  rforms the same 
222d0 6f 70 65 72 61 74 69 6f 6e 20 62 75 74 20 61 6c  operation but al
222e0 73 6f 20 61 6c 6c 6f 77 73 20 74 68 65 0a 2a 2a  so allows the.**
222f0 20 50 33 20 72 65 67 69 73 74 65 72 20 74 6f 20   P3 register to 
22300 63 6f 6e 74 61 69 6e 20 61 20 6e 6f 6e 2d 69 6e  contain a non-in
22310 74 65 67 65 72 20 76 61 6c 75 65 2c 20 69 6e 20  teger value, in 
22320 77 68 69 63 68 20 63 61 73 65 20 74 68 65 20 6a  which case the j
22330 75 6d 70 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73  ump is.** always
22340 20 74 61 6b 65 6e 2e 20 20 54 68 69 73 20 6f 70   taken.  This op
22350 63 6f 64 65 20 72 65 71 75 69 72 65 73 20 74 68  code requires th
22360 61 74 20 50 33 20 61 6c 77 61 79 73 20 63 6f 6e  at P3 always con
22370 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e  tain an integer.
22380 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e 6f  .**.** The OP_No
22390 74 46 6f 75 6e 64 20 6f 70 63 6f 64 65 20 70 65  tFound opcode pe
223a0 72 66 6f 72 6d 73 20 74 68 65 20 73 61 6d 65 20  rforms the same 
223b0 6f 70 65 72 61 74 69 6f 6e 20 6f 6e 20 69 6e 64  operation on ind
223c0 65 78 20 62 74 72 65 65 73 0a 2a 2a 20 28 77 69  ex btrees.** (wi
223d0 74 68 20 61 72 62 69 74 72 61 72 79 20 6d 75 6c  th arbitrary mul
223e0 74 69 2d 76 61 6c 75 65 20 6b 65 79 73 29 2e 0a  ti-value keys)..
223f0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
22400 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72  e leaves the cur
22410 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20 77  sor in a state w
22420 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62  here it cannot b
22430 65 20 61 64 76 61 6e 63 65 64 0a 2a 2a 20 69 6e  e advanced.** in
22440 20 65 69 74 68 65 72 20 64 69 72 65 63 74 69 6f   either directio
22450 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  n.  In other wor
22460 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64  ds, the Next and
22470 20 50 72 65 76 20 6f 70 63 6f 64 65 73 20 77 69   Prev opcodes wi
22480 6c 6c 0a 2a 2a 20 6e 6f 74 20 77 6f 72 6b 20 66  ll.** not work f
22490 6f 6c 6c 6f 77 69 6e 67 20 74 68 69 73 20 6f 70  ollowing this op
224a0 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  code..**.** See 
224b0 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
224c0 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63  Found, NoConflic
224d0 74 2c 20 53 65 65 6b 52 6f 77 69 64 0a 2a 2f 0a  t, SeekRowid.*/.
224e0 63 61 73 65 20 4f 50 5f 53 65 65 6b 52 6f 77 69  case OP_SeekRowi
224f0 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  d: {        /* j
22500 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 56 64  ump, in3 */.  Vd
22510 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
22520 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
22530 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 75 36  .  int res;.  u6
22540 34 20 69 4b 65 79 3b 0a 0a 20 20 70 49 6e 33 20  4 iKey;..  pIn3 
22550 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
22560 3b 0a 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66  ;.  if( (pIn3->f
22570 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d  lags & MEM_Int)=
22580 3d 30 20 29 7b 0a 20 20 20 20 61 70 70 6c 79 41  =0 ){.    applyA
22590 66 66 69 6e 69 74 79 28 70 49 6e 33 2c 20 53 51  ffinity(pIn3, SQ
225a0 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43  LITE_AFF_NUMERIC
225b0 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20  , encoding);.   
225c0 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67   if( (pIn3->flag
225d0 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20  s & MEM_Int)==0 
225e0 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
225f0 32 3b 0a 20 20 7d 0a 20 20 2f 2a 20 46 61 6c 6c  2;.  }.  /* Fall
22600 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50   through into OP
22610 5f 4e 6f 74 45 78 69 73 74 73 20 2a 2f 0a 63 61  _NotExists */.ca
22620 73 65 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 3a  se OP_NotExists:
22630 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
22640 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 70 49 6e 33  p, in3 */.  pIn3
22650 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
22660 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
22670 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  3->flags & MEM_I
22680 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  nt );.  assert( 
22690 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
226a0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
226b0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
226c0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
226d0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
226e0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
226f0 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f  EBUG.  pC->seekO
22700 70 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20  p = 0;.#endif.  
22710 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
22720 62 6c 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ble );.  assert(
22730 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
22740 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
22750 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63    pCrsr = pC->uc
22760 2e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65  .pCursor;.  asse
22770 72 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a  rt( pCrsr!=0 );.
22780 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 69 4b 65    res = 0;.  iKe
22790 79 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20  y = pIn3->u.i;. 
227a0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
227b0 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
227c0 28 70 43 72 73 72 2c 20 30 2c 20 69 4b 65 79 2c  (pCrsr, 0, iKey,
227d0 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 61 73 73   0, &res);.  ass
227e0 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
227f0 4f 4b 20 7c 7c 20 72 65 73 3d 3d 30 20 29 3b 0a  OK || res==0 );.
22800 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67    pC->movetoTarg
22810 65 74 20 3d 20 69 4b 65 79 3b 20 20 2f 2a 20 55  et = iKey;  /* U
22820 73 65 64 20 62 79 20 4f 50 5f 44 65 6c 65 74 65  sed by OP_Delete
22830 20 2a 2f 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f   */.  pC->nullRo
22840 77 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63  w = 0;.  pC->cac
22850 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
22860 5f 53 54 41 4c 45 3b 0a 20 20 70 43 2d 3e 64 65  _STALE;.  pC->de
22870 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
22880 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
22890 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20  ken(res!=0,2);. 
228a0 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20   pC->seekResult 
228b0 3d 20 72 65 73 3b 0a 20 20 69 66 28 20 72 65 73  = res;.  if( res
228c0 21 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72  !=0 ){.    asser
228d0 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
228e0 20 29 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d   );.    if( pOp-
228f0 3e 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  >p2==0 ){.      
22900 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52  rc = SQLITE_CORR
22910 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 7d 65  UPT_BKPT;.    }e
22920 6c 73 65 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  lse{.      goto 
22930 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20  jump_to_p2;.    
22940 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29  }.  }.  if( rc )
22950 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
22960 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61  to_error;.  brea
22970 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
22980 20 53 65 71 75 65 6e 63 65 20 50 31 20 50 32 20   Sequence P1 P2 
22990 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
229a0 73 3a 20 72 5b 50 32 5d 3d 63 75 72 73 6f 72 5b  s: r[P2]=cursor[
229b0 50 31 5d 2e 63 74 72 2b 2b 0a 2a 2a 0a 2a 2a 20  P1].ctr++.**.** 
229c0 46 69 6e 64 20 74 68 65 20 6e 65 78 74 20 61 76  Find the next av
229d0 61 69 6c 61 62 6c 65 20 73 65 71 75 65 6e 63 65  ailable sequence
229e0 20 6e 75 6d 62 65 72 20 66 6f 72 20 63 75 72 73   number for curs
229f0 6f 72 20 50 31 2e 0a 2a 2a 20 57 72 69 74 65 20  or P1..** Write 
22a00 74 68 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d  the sequence num
22a10 62 65 72 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ber into registe
22a20 72 20 50 32 2e 0a 2a 2a 20 54 68 65 20 73 65 71  r P2..** The seq
22a30 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 6f 6e 20  uence number on 
22a40 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 69 6e  the cursor is in
22a50 63 72 65 6d 65 6e 74 65 64 20 61 66 74 65 72 20  cremented after 
22a60 74 68 69 73 0a 2a 2a 20 69 6e 73 74 72 75 63 74  this.** instruct
22a70 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f  ion.  .*/.case O
22a80 50 5f 53 65 71 75 65 6e 63 65 3a 20 7b 20 20 20  P_Sequence: {   
22a90 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
22aa0 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
22ab0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
22ac0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
22ad0 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70  .  assert( p->ap
22ae0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 20  Csr[pOp->p1]!=0 
22af0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
22b00 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e  apCsr[pOp->p1]->
22b10 65 43 75 72 54 79 70 65 21 3d 43 55 52 54 59 50  eCurType!=CURTYP
22b20 45 5f 56 54 41 42 20 29 3b 0a 20 20 70 4f 75 74  E_VTAB );.  pOut
22b30 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
22b40 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75  e(p, pOp);.  pOu
22b50 74 2d 3e 75 2e 69 20 3d 20 70 2d 3e 61 70 43 73  t->u.i = p->apCs
22b60 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 73 65 71 43  r[pOp->p1]->seqC
22b70 6f 75 6e 74 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b  ount++;.  break;
22b80 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  .}.../* Opcode: 
22b90 4e 65 77 52 6f 77 69 64 20 50 31 20 50 32 20 50  NewRowid P1 P2 P
22ba0 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
22bb0 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a  s: r[P2]=rowid.*
22bc0 2a 0a 2a 2a 20 47 65 74 20 61 20 6e 65 77 20 69  *.** Get a new i
22bd0 6e 74 65 67 65 72 20 72 65 63 6f 72 64 20 6e 75  nteger record nu
22be0 6d 62 65 72 20 28 61 2e 6b 2e 61 20 22 72 6f 77  mber (a.k.a "row
22bf0 69 64 22 29 20 75 73 65 64 20 61 73 20 74 68 65  id") used as the
22c00 20 6b 65 79 20 74 6f 20 61 20 74 61 62 6c 65 2e   key to a table.
22c10 0a 2a 2a 20 54 68 65 20 72 65 63 6f 72 64 20 6e  .** The record n
22c20 75 6d 62 65 72 20 69 73 20 6e 6f 74 20 70 72 65  umber is not pre
22c30 76 69 6f 75 73 6c 79 20 75 73 65 64 20 61 73 20  viously used as 
22c40 61 20 6b 65 79 20 69 6e 20 74 68 65 20 64 61 74  a key in the dat
22c50 61 62 61 73 65 0a 2a 2a 20 74 61 62 6c 65 20 74  abase.** table t
22c60 68 61 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f  hat cursor P1 po
22c70 69 6e 74 73 20 74 6f 2e 20 20 54 68 65 20 6e 65  ints to.  The ne
22c80 77 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20  w record number 
22c90 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20 77 72  is written.** wr
22ca0 69 74 74 65 6e 20 74 6f 20 72 65 67 69 73 74 65  itten to registe
22cb0 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  r P2..**.** If P
22cc0 33 3e 30 20 74 68 65 6e 20 50 33 20 69 73 20 61  3>0 then P3 is a
22cd0 20 72 65 67 69 73 74 65 72 20 69 6e 20 74 68 65   register in the
22ce0 20 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 74   root frame of t
22cf0 68 69 73 20 56 44 42 45 20 74 68 61 74 20 68 6f  his VDBE that ho
22d00 6c 64 73 20 0a 2a 2a 20 74 68 65 20 6c 61 72 67  lds .** the larg
22d10 65 73 74 20 70 72 65 76 69 6f 75 73 6c 79 20 67  est previously g
22d20 65 6e 65 72 61 74 65 64 20 72 65 63 6f 72 64 20  enerated record 
22d30 6e 75 6d 62 65 72 2e 20 4e 6f 20 6e 65 77 20 72  number. No new r
22d40 65 63 6f 72 64 20 6e 75 6d 62 65 72 73 20 61 72  ecord numbers ar
22d50 65 0a 2a 2a 20 61 6c 6c 6f 77 65 64 20 74 6f 20  e.** allowed to 
22d60 62 65 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69  be less than thi
22d70 73 20 76 61 6c 75 65 2e 20 57 68 65 6e 20 74 68  s value. When th
22d80 69 73 20 76 61 6c 75 65 20 72 65 61 63 68 65 73  is value reaches
22d90 20 69 74 73 20 6d 61 78 69 6d 75 6d 2c 20 0a 2a   its maximum, .*
22da0 2a 20 61 6e 20 53 51 4c 49 54 45 5f 46 55 4c 4c  * an SQLITE_FULL
22db0 20 65 72 72 6f 72 20 69 73 20 67 65 6e 65 72 61   error is genera
22dc0 74 65 64 2e 20 54 68 65 20 50 33 20 72 65 67 69  ted. The P3 regi
22dd0 73 74 65 72 20 69 73 20 75 70 64 61 74 65 64 20  ster is updated 
22de0 77 69 74 68 20 74 68 65 20 27 0a 2a 2a 20 67 65  with the '.** ge
22df0 6e 65 72 61 74 65 64 20 72 65 63 6f 72 64 20 6e  nerated record n
22e00 75 6d 62 65 72 2e 20 54 68 69 73 20 50 33 20 6d  umber. This P3 m
22e10 65 63 68 61 6e 69 73 6d 20 69 73 20 75 73 65 64  echanism is used
22e20 20 74 6f 20 68 65 6c 70 20 69 6d 70 6c 65 6d 65   to help impleme
22e30 6e 74 20 74 68 65 0a 2a 2a 20 41 55 54 4f 49 4e  nt the.** AUTOIN
22e40 43 52 45 4d 45 4e 54 20 66 65 61 74 75 72 65 2e  CREMENT feature.
22e50 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 77 52  .*/.case OP_NewR
22e60 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20  owid: {         
22e70 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69    /* out2 */.  i
22e80 36 34 20 76 3b 20 20 20 20 20 20 20 20 20 20 20  64 v;           
22e90 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77        /* The new
22ea0 20 72 6f 77 69 64 20 2a 2f 0a 20 20 56 64 62 65   rowid */.  Vdbe
22eb0 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 20  Cursor *pC;     
22ec0 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6f 66 20     /* Cursor of 
22ed0 74 61 62 6c 65 20 74 6f 20 67 65 74 20 74 68 65  table to get the
22ee0 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20   new rowid */.  
22ef0 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20 20  int res;        
22f00 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74         /* Result
22f10 20 6f 66 20 61 6e 20 73 71 6c 69 74 65 33 42 74   of an sqlite3Bt
22f20 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20 69  reeLast() */.  i
22f30 6e 74 20 63 6e 74 3b 20 20 20 20 20 20 20 20 20  nt cnt;         
22f40 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72        /* Counter
22f50 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20 6e 75   to limit the nu
22f60 6d 62 65 72 20 6f 66 20 73 65 61 72 63 68 65 73  mber of searches
22f70 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b   */.  Mem *pMem;
22f80 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
22f90 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  Register holding
22fa0 20 6c 61 72 67 65 73 74 20 72 6f 77 69 64 20 66   largest rowid f
22fb0 6f 72 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  or AUTOINCREMENT
22fc0 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20   */.  VdbeFrame 
22fd0 2a 70 46 72 61 6d 65 3b 20 20 20 20 20 2f 2a 20  *pFrame;     /* 
22fe0 52 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 56 44  Root frame of VD
22ff0 42 45 20 2a 2f 0a 0a 20 20 76 20 3d 20 30 3b 0a  BE */..  v = 0;.
23000 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 70 4f 75    res = 0;.  pOu
23010 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
23020 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73  se(p, pOp);.  as
23030 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
23040 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
23050 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
23060 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
23070 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
23080 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
23090 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
230a0 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
230b0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63    assert( pC->uc
230c0 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  .pCursor!=0 );. 
230d0 20 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e 65   {.    /* The ne
230e0 78 74 20 72 6f 77 69 64 20 6f 72 20 72 65 63 6f  xt rowid or reco
230f0 72 64 20 6e 75 6d 62 65 72 20 28 64 69 66 66 65  rd number (diffe
23100 72 65 6e 74 20 74 65 72 6d 73 20 66 6f 72 20 74  rent terms for t
23110 68 65 20 73 61 6d 65 0a 20 20 20 20 2a 2a 20 74  he same.    ** t
23120 68 69 6e 67 29 20 69 73 20 6f 62 74 61 69 6e 65  hing) is obtaine
23130 64 20 69 6e 20 61 20 74 77 6f 2d 73 74 65 70 20  d in a two-step 
23140 61 6c 67 6f 72 69 74 68 6d 2e 0a 20 20 20 20 2a  algorithm..    *
23150 2a 0a 20 20 20 20 2a 2a 20 46 69 72 73 74 20 77  *.    ** First w
23160 65 20 61 74 74 65 6d 70 74 20 74 6f 20 66 69 6e  e attempt to fin
23170 64 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 78  d the largest ex
23180 69 73 74 69 6e 67 20 72 6f 77 69 64 20 61 6e 64  isting rowid and
23190 20 61 64 64 20 6f 6e 65 0a 20 20 20 20 2a 2a 20   add one.    ** 
231a0 74 6f 20 74 68 61 74 2e 20 20 42 75 74 20 69 66  to that.  But if
231b0 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 78 69   the largest exi
231c0 73 74 69 6e 67 20 72 6f 77 69 64 20 69 73 20 61  sting rowid is a
231d0 6c 72 65 61 64 79 20 74 68 65 20 6d 61 78 69 6d  lready the maxim
231e0 75 6d 0a 20 20 20 20 2a 2a 20 70 6f 73 69 74 69  um.    ** positi
231f0 76 65 20 69 6e 74 65 67 65 72 2c 20 77 65 20 68  ve integer, we h
23200 61 76 65 20 74 6f 20 66 61 6c 6c 20 74 68 72 6f  ave to fall thro
23210 75 67 68 20 74 6f 20 74 68 65 20 73 65 63 6f 6e  ugh to the secon
23220 64 0a 20 20 20 20 2a 2a 20 70 72 6f 62 61 62 69  d.    ** probabi
23230 6c 69 73 74 69 63 20 61 6c 67 6f 72 69 74 68 6d  listic algorithm
23240 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54  .    **.    ** T
23250 68 65 20 73 65 63 6f 6e 64 20 61 6c 67 6f 72 69  he second algori
23260 74 68 6d 20 69 73 20 74 6f 20 73 65 6c 65 63 74  thm is to select
23270 20 61 20 72 6f 77 69 64 20 61 74 20 72 61 6e 64   a rowid at rand
23280 6f 6d 20 61 6e 64 20 73 65 65 20 69 66 0a 20 20  om and see if.  
23290 20 20 2a 2a 20 69 74 20 61 6c 72 65 61 64 79 20    ** it already 
232a0 65 78 69 73 74 73 20 69 6e 20 74 68 65 20 74 61  exists in the ta
232b0 62 6c 65 2e 20 20 49 66 20 69 74 20 64 6f 65 73  ble.  If it does
232c0 20 6e 6f 74 20 65 78 69 73 74 2c 20 77 65 20 68   not exist, we h
232d0 61 76 65 0a 20 20 20 20 2a 2a 20 73 75 63 63 65  ave.    ** succe
232e0 65 64 65 64 2e 20 20 49 66 20 74 68 65 20 72 61  eded.  If the ra
232f0 6e 64 6f 6d 20 72 6f 77 69 64 20 64 6f 65 73 20  ndom rowid does 
23300 65 78 69 73 74 2c 20 77 65 20 73 65 6c 65 63 74  exist, we select
23310 20 61 20 6e 65 77 20 6f 6e 65 0a 20 20 20 20 2a   a new one.    *
23320 2a 20 61 6e 64 20 74 72 79 20 61 67 61 69 6e 2c  * and try again,
23330 20 75 70 20 74 6f 20 31 30 30 20 74 69 6d 65 73   up to 100 times
23340 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61 73 73  ..    */.    ass
23350 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
23360 20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49   );..#ifdef SQLI
23370 54 45 5f 33 32 42 49 54 5f 52 4f 57 49 44 0a 23  TE_32BIT_ROWID.#
23380 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f     define MAX_RO
23390 57 49 44 20 30 78 37 66 66 66 66 66 66 66 0a 23  WID 0x7fffffff.#
233a0 65 6c 73 65 0a 20 20 20 20 2f 2a 20 53 6f 6d 65  else.    /* Some
233b0 20 63 6f 6d 70 69 6c 65 72 73 20 63 6f 6d 70 6c   compilers compl
233c0 61 69 6e 20 61 62 6f 75 74 20 63 6f 6e 73 74 61  ain about consta
233d0 6e 74 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  nts of the form 
233e0 30 78 37 66 66 66 66 66 66 66 66 66 66 66 66 66  0x7fffffffffffff
233f0 66 66 2e 0a 20 20 20 20 2a 2a 20 4f 74 68 65 72  ff..    ** Other
23400 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74  s complain about
23410 20 30 78 37 66 66 66 66 66 66 66 66 66 66 66 66   0x7ffffffffffff
23420 66 66 66 66 4c 4c 2e 20 20 54 68 65 20 66 6f 6c  ffffLL.  The fol
23430 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 73 65 65  lowing macro see
23440 6d 73 0a 20 20 20 20 2a 2a 20 74 6f 20 70 72 6f  ms.    ** to pro
23450 76 69 64 65 20 74 68 65 20 63 6f 6e 73 74 61 6e  vide the constan
23460 74 20 77 68 69 6c 65 20 6d 61 6b 69 6e 67 20 61  t while making a
23470 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 20 68 61 70  ll compilers hap
23480 70 79 2e 0a 20 20 20 20 2a 2f 0a 23 20 20 20 64  py..    */.#   d
23490 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20  efine MAX_ROWID 
234a0 20 28 69 36 34 29 28 20 28 28 28 75 36 34 29 30   (i64)( (((u64)0
234b0 78 37 66 66 66 66 66 66 66 29 3c 3c 33 32 29 20  x7fffffff)<<32) 
234c0 7c 20 28 75 36 34 29 30 78 66 66 66 66 66 66 66  | (u64)0xfffffff
234d0 66 20 29 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20  f ).#endif..    
234e0 69 66 28 20 21 70 43 2d 3e 75 73 65 52 61 6e 64  if( !pC->useRand
234f0 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20  omRowid ){.     
23500 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
23510 65 65 4c 61 73 74 28 70 43 2d 3e 75 63 2e 70 43  eeLast(pC->uc.pC
23520 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20  ursor, &res);.  
23530 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
23540 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
23550 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
23560 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
23570 7d 0a 20 20 20 20 20 20 69 66 28 20 72 65 73 20  }.      if( res 
23580 29 7b 0a 20 20 20 20 20 20 20 20 76 20 3d 20 31  ){.        v = 1
23590 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 36 31  ;   /* IMP: R-61
235a0 39 31 34 2d 34 38 30 37 34 20 2a 2f 0a 20 20 20  914-48074 */.   
235b0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
235c0 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
235d0 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61  3BtreeCursorIsVa
235e0 6c 69 64 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  lid(pC->uc.pCurs
235f0 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 76  or) );.        v
23600 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49   = sqlite3BtreeI
23610 6e 74 65 67 65 72 4b 65 79 28 70 43 2d 3e 75 63  ntegerKey(pC->uc
23620 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20  .pCursor);.     
23630 20 20 20 69 66 28 20 76 3e 3d 4d 41 58 5f 52 4f     if( v>=MAX_RO
23640 57 49 44 20 29 7b 0a 20 20 20 20 20 20 20 20 20  WID ){.         
23650 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f   pC->useRandomRo
23660 77 69 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 20  wid = 1;.       
23670 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
23680 20 20 76 2b 2b 3b 20 20 20 2f 2a 20 49 4d 50 3a    v++;   /* IMP:
23690 20 52 2d 32 39 35 33 38 2d 33 34 39 38 37 20 2a   R-29538-34987 *
236a0 2f 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  /.        }.    
236b0 20 20 7d 0a 20 20 20 20 7d 0a 0a 23 69 66 6e 64    }.    }..#ifnd
236c0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
236d0 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 20  UTOINCREMENT.   
236e0 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a   if( pOp->p3 ){.
236f0 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20        /* Assert 
23700 74 68 61 74 20 50 33 20 69 73 20 61 20 76 61 6c  that P3 is a val
23710 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20  id memory cell. 
23720 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  */.      assert(
23730 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20   pOp->p3>0 );.  
23740 20 20 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d      if( p->pFram
23750 65 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 72  e ){.        for
23760 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d  (pFrame=p->pFram
23770 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65  e; pFrame->pPare
23780 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d  nt; pFrame=pFram
23790 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20  e->pParent);.   
237a0 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74       /* Assert t
237b0 68 61 74 20 50 33 20 69 73 20 61 20 76 61 6c 69  hat P3 is a vali
237c0 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a  d memory cell. *
237d0 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  /.        assert
237e0 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 46 72 61 6d  ( pOp->p3<=pFram
237f0 65 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20  e->nMem );.     
23800 20 20 20 70 4d 65 6d 20 3d 20 26 70 46 72 61 6d     pMem = &pFram
23810 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  e->aMem[pOp->p3]
23820 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
23830 20 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74         /* Assert
23840 20 74 68 61 74 20 50 33 20 69 73 20 61 20 76 61   that P3 is a va
23850 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e  lid memory cell.
23860 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65   */.        asse
23870 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d  rt( pOp->p3<=(p-
23880 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
23890 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20  rsor) );.       
238a0 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f   pMem = &aMem[pO
238b0 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 20 20  p->p3];.        
238c0 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
238d0 28 70 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20  (p, pMem);.     
238e0 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74 28   }.      assert(
238f0 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4d 65 6d   memIsValid(pMem
23900 29 20 29 3b 0a 0a 20 20 20 20 20 20 52 45 47 49  ) );..      REGI
23910 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
23920 70 33 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20  p3, pMem);.     
23930 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
23940 6e 74 65 67 65 72 69 66 79 28 70 4d 65 6d 29 3b  ntegerify(pMem);
23950 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
23960 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pMem->flags & ME
23970 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 20 20 2f 2a  M_Int)!=0 );  /*
23980 20 6d 65 6d 28 50 33 29 20 68 6f 6c 64 73 20 61   mem(P3) holds a
23990 6e 20 69 6e 74 65 67 65 72 20 2a 2f 0a 20 20 20  n integer */.   
239a0 20 20 20 69 66 28 20 70 4d 65 6d 2d 3e 75 2e 69     if( pMem->u.i
239b0 3d 3d 4d 41 58 5f 52 4f 57 49 44 20 7c 7c 20 70  ==MAX_ROWID || p
239c0 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69  C->useRandomRowi
239d0 64 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  d ){.        rc 
239e0 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20  = SQLITE_FULL;  
239f0 20 2f 2a 20 49 4d 50 3a 20 52 2d 31 32 32 37 35   /* IMP: R-12275
23a00 2d 36 31 33 33 38 20 2a 2f 0a 20 20 20 20 20 20  -61338 */.      
23a10 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
23a20 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
23a30 20 7d 0a 20 20 20 20 20 20 69 66 28 20 76 3c 70   }.      if( v<p
23a40 4d 65 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a 20 20  Mem->u.i+1 ){.  
23a50 20 20 20 20 20 20 76 20 3d 20 70 4d 65 6d 2d 3e        v = pMem->
23a60 75 2e 69 20 2b 20 31 3b 0a 20 20 20 20 20 20 7d  u.i + 1;.      }
23a70 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 75 2e 69  .      pMem->u.i
23a80 20 3d 20 76 3b 0a 20 20 20 20 7d 0a 23 65 6e 64   = v;.    }.#end
23a90 69 66 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 75  if.    if( pC->u
23aa0 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b  seRandomRowid ){
23ab0 0a 20 20 20 20 20 20 2f 2a 20 49 4d 50 4c 45 4d  .      /* IMPLEM
23ac0 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 30  ENTATION-OF: R-0
23ad0 37 36 37 37 2d 34 31 38 38 31 20 49 66 20 74 68  7677-41881 If th
23ae0 65 20 6c 61 72 67 65 73 74 20 52 4f 57 49 44 20  e largest ROWID 
23af0 69 73 20 65 71 75 61 6c 20 74 6f 20 74 68 65 0a  is equal to the.
23b00 20 20 20 20 20 20 2a 2a 20 6c 61 72 67 65 73 74        ** largest
23b10 20 70 6f 73 73 69 62 6c 65 20 69 6e 74 65 67 65   possible intege
23b20 72 20 28 39 32 32 33 33 37 32 30 33 36 38 35 34  r (9223372036854
23b30 37 37 35 38 30 37 29 20 74 68 65 6e 20 74 68 65  775807) then the
23b40 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 20 20   database.      
23b50 2a 2a 20 65 6e 67 69 6e 65 20 73 74 61 72 74 73  ** engine starts
23b60 20 70 69 63 6b 69 6e 67 20 70 6f 73 69 74 69 76   picking positiv
23b70 65 20 63 61 6e 64 69 64 61 74 65 20 52 4f 57 49  e candidate ROWI
23b80 44 73 20 61 74 20 72 61 6e 64 6f 6d 20 75 6e 74  Ds at random unt
23b90 69 6c 0a 20 20 20 20 20 20 2a 2a 20 69 74 20 66  il.      ** it f
23ba0 69 6e 64 73 20 6f 6e 65 20 74 68 61 74 20 69 73  inds one that is
23bb0 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20   not previously 
23bc0 75 73 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20 61  used. */.      a
23bd0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d 3d  ssert( pOp->p3==
23be0 30 20 29 3b 20 20 2f 2a 20 57 65 20 63 61 6e 6e  0 );  /* We cann
23bf0 6f 74 20 62 65 20 69 6e 20 72 61 6e 64 6f 6d 20  ot be in random 
23c00 72 6f 77 69 64 20 6d 6f 64 65 20 69 66 20 74 68  rowid mode if th
23c10 69 73 20 69 73 0a 20 20 20 20 20 20 20 20 20 20  is is.          
23c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23c30 20 20 20 2a 2a 20 61 6e 20 41 55 54 4f 49 4e 43     ** an AUTOINC
23c40 52 45 4d 45 4e 54 20 74 61 62 6c 65 2e 20 2a 2f  REMENT table. */
23c50 0a 20 20 20 20 20 20 63 6e 74 20 3d 20 30 3b 0a  .      cnt = 0;.
23c60 20 20 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20        do{.      
23c70 20 20 73 71 6c 69 74 65 33 5f 72 61 6e 64 6f 6d    sqlite3_random
23c80 6e 65 73 73 28 73 69 7a 65 6f 66 28 76 29 2c 20  ness(sizeof(v), 
23c90 26 76 29 3b 0a 20 20 20 20 20 20 20 20 76 20 26  &v);.        v &
23ca0 3d 20 28 4d 41 58 5f 52 4f 57 49 44 3e 3e 31 29  = (MAX_ROWID>>1)
23cb0 3b 20 76 2b 2b 3b 20 20 2f 2a 20 45 6e 73 75 72  ; v++;  /* Ensur
23cc0 65 20 74 68 61 74 20 76 20 69 73 20 67 72 65 61  e that v is grea
23cd0 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 20 2a 2f  ter than zero */
23ce0 0a 20 20 20 20 20 20 7d 77 68 69 6c 65 28 20 20  .      }while(  
23cf0 28 28 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74  ((rc = sqlite3Bt
23d00 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65  reeMovetoUnpacke
23d10 64 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  d(pC->uc.pCursor
23d20 2c 20 30 2c 20 28 75 36 34 29 76 2c 0a 20 20 20  , 0, (u64)v,.   
23d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 2c                0,
23d60 20 26 72 65 73 29 29 3d 3d 53 51 4c 49 54 45 5f   &res))==SQLITE_
23d70 4f 4b 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  OK).            
23d80 26 26 20 28 72 65 73 3d 3d 30 29 0a 20 20 20 20  && (res==0).    
23d90 20 20 20 20 20 20 20 20 26 26 20 28 2b 2b 63 6e          && (++cn
23da0 74 3c 31 30 30 29 29 3b 0a 20 20 20 20 20 20 69  t<100));.      i
23db0 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
23dc0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
23dd0 0a 20 20 20 20 20 20 69 66 28 20 72 65 73 3d 3d  .      if( res==
23de0 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  0 ){.        rc 
23df0 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20  = SQLITE_FULL;  
23e00 20 2f 2a 20 49 4d 50 3a 20 52 2d 33 38 32 31 39   /* IMP: R-38219
23e10 2d 35 33 30 30 32 20 2a 2f 0a 20 20 20 20 20 20  -53002 */.      
23e20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
23e30 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
23e40 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74 28   }.      assert(
23e50 20 76 3e 30 20 29 3b 20 20 2f 2a 20 45 56 3a 20   v>0 );  /* EV: 
23e60 52 2d 34 30 38 31 32 2d 30 33 35 37 30 20 2a 2f  R-40812-03570 */
23e70 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 64  .    }.    pC->d
23e80 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
23e90 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65  0;.    pC->cache
23ea0 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
23eb0 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 70 4f 75 74  TALE;.  }.  pOut
23ec0 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65  ->u.i = v;.  bre
23ed0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
23ee0 3a 20 49 6e 73 65 72 74 20 50 31 20 50 32 20 50  : Insert P1 P2 P
23ef0 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
23f00 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72 5b 50 33  sis: intkey=r[P3
23f10 5d 20 64 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a  ] data=r[P2].**.
23f20 2a 2a 20 57 72 69 74 65 20 61 6e 20 65 6e 74 72  ** Write an entr
23f30 79 20 69 6e 74 6f 20 74 68 65 20 74 61 62 6c 65  y into the table
23f40 20 6f 66 20 63 75 72 73 6f 72 20 50 31 2e 20 20   of cursor P1.  
23f50 41 20 6e 65 77 20 65 6e 74 72 79 20 69 73 0a 2a  A new entry is.*
23f60 2a 20 63 72 65 61 74 65 64 20 69 66 20 69 74 20  * created if it 
23f70 64 6f 65 73 6e 27 74 20 61 6c 72 65 61 64 79 20  doesn't already 
23f80 65 78 69 73 74 20 6f 72 20 74 68 65 20 64 61 74  exist or the dat
23f90 61 20 66 6f 72 20 61 6e 20 65 78 69 73 74 69 6e  a for an existin
23fa0 67 0a 2a 2a 20 65 6e 74 72 79 20 69 73 20 6f 76  g.** entry is ov
23fb0 65 72 77 72 69 74 74 65 6e 2e 20 20 54 68 65 20  erwritten.  The 
23fc0 64 61 74 61 20 69 73 20 74 68 65 20 76 61 6c 75  data is the valu
23fd0 65 20 4d 45 4d 5f 42 6c 6f 62 20 73 74 6f 72 65  e MEM_Blob store
23fe0 64 20 69 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a  d in register.**
23ff0 20 6e 75 6d 62 65 72 20 50 32 2e 20 54 68 65 20   number P2. The 
24000 6b 65 79 20 69 73 20 73 74 6f 72 65 64 20 69 6e  key is stored in
24010 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 54 68   register P3. Th
24020 65 20 6b 65 79 20 6d 75 73 74 0a 2a 2a 20 62 65  e key must.** be
24030 20 61 20 4d 45 4d 5f 49 6e 74 2e 0a 2a 2a 0a 2a   a MEM_Int..**.*
24040 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f  * If the OPFLAG_
24050 4e 43 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20  NCHANGE flag of 
24060 50 35 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  P5 is set, then 
24070 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20 63  the row change c
24080 6f 75 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65  ount is.** incre
24090 6d 65 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73  mented (otherwis
240a0 65 20 6e 6f 74 29 2e 20 20 49 66 20 74 68 65 20  e not).  If the 
240b0 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44  OPFLAG_LASTROWID
240c0 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73   flag of P5 is s
240d0 65 74 2c 0a 2a 2a 20 74 68 65 6e 20 72 6f 77 69  et,.** then rowi
240e0 64 20 69 73 20 73 74 6f 72 65 64 20 66 6f 72 20  d is stored for 
240f0 73 75 62 73 65 71 75 65 6e 74 20 72 65 74 75 72  subsequent retur
24100 6e 20 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69  n by the.** sqli
24110 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f  te3_last_insert_
24120 72 6f 77 69 64 28 29 20 66 75 6e 63 74 69 6f 6e  rowid() function
24130 20 28 6f 74 68 65 72 77 69 73 65 20 69 74 20 69   (otherwise it i
24140 73 20 75 6e 6d 6f 64 69 66 69 65 64 29 2e 0a 2a  s unmodified)..*
24150 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c  *.** If the OPFL
24160 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54  AG_USESEEKRESULT
24170 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73   flag of P5 is s
24180 65 74 20 61 6e 64 20 69 66 20 74 68 65 20 72 65  et and if the re
24190 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20 6c  sult of.** the l
241a0 61 73 74 20 73 65 65 6b 20 6f 70 65 72 61 74 69  ast seek operati
241b0 6f 6e 20 28 4f 50 5f 4e 6f 74 45 78 69 73 74 73  on (OP_NotExists
241c0 20 6f 72 20 4f 50 5f 53 65 65 6b 52 6f 77 69 64   or OP_SeekRowid
241d0 29 20 77 61 73 20 61 20 73 75 63 63 65 73 73 2c  ) was a success,
241e0 0a 2a 2a 20 74 68 65 6e 20 74 68 69 73 0a 2a 2a  .** then this.**
241f0 20 6f 70 65 72 61 74 69 6f 6e 20 77 69 6c 6c 20   operation will 
24200 6e 6f 74 20 61 74 74 65 6d 70 74 20 74 6f 20 66  not attempt to f
24210 69 6e 64 20 74 68 65 20 61 70 70 72 6f 70 72 69  ind the appropri
24220 61 74 65 20 72 6f 77 20 62 65 66 6f 72 65 20 64  ate row before d
24230 6f 69 6e 67 0a 2a 2a 20 74 68 65 20 69 6e 73 65  oing.** the inse
24240 72 74 20 62 75 74 20 77 69 6c 6c 20 69 6e 73 74  rt but will inst
24250 65 61 64 20 6f 76 65 72 77 72 69 74 65 20 74 68  ead overwrite th
24260 65 20 72 6f 77 20 74 68 61 74 20 74 68 65 20 63  e row that the c
24270 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 75 72 72  ursor is.** curr
24280 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74  ently pointing t
24290 6f 2e 20 20 50 72 65 73 75 6d 61 62 6c 79 2c 20  o.  Presumably, 
242a0 74 68 65 20 70 72 69 6f 72 20 4f 50 5f 4e 6f 74  the prior OP_Not
242b0 45 78 69 73 74 73 20 6f 72 0a 2a 2a 20 4f 50 5f  Exists or.** OP_
242c0 53 65 65 6b 52 6f 77 69 64 20 6f 70 63 6f 64 65  SeekRowid opcode
242d0 0a 2a 2a 20 68 61 73 20 61 6c 72 65 61 64 79 20  .** has already 
242e0 70 6f 73 69 74 69 6f 6e 65 64 20 74 68 65 20 63  positioned the c
242f0 75 72 73 6f 72 20 63 6f 72 72 65 63 74 6c 79 2e  ursor correctly.
24300 20 20 54 68 69 73 20 69 73 20 61 6e 20 6f 70 74    This is an opt
24310 69 6d 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74 68 61  imization.** tha
24320 74 20 62 6f 6f 73 74 73 20 70 65 72 66 6f 72 6d  t boosts perform
24330 61 6e 63 65 20 62 79 20 61 76 6f 69 64 69 6e 67  ance by avoiding
24340 20 72 65 64 75 6e 64 61 6e 74 20 73 65 65 6b 73   redundant seeks
24350 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
24360 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20 66  PFLAG_ISUPDATE f
24370 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e  lag is set, then
24380 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   this opcode is 
24390 70 61 72 74 20 6f 66 20 61 6e 0a 2a 2a 20 55 50  part of an.** UP
243a0 44 41 54 45 20 6f 70 65 72 61 74 69 6f 6e 2e 20  DATE operation. 
243b0 20 4f 74 68 65 72 77 69 73 65 20 28 69 66 20 74   Otherwise (if t
243c0 68 65 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72  he flag is clear
243d0 29 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f  ) then this opco
243e0 64 65 0a 2a 2a 20 69 73 20 70 61 72 74 20 6f 66  de.** is part of
243f0 20 61 6e 20 49 4e 53 45 52 54 20 6f 70 65 72 61   an INSERT opera
24400 74 69 6f 6e 2e 20 20 54 68 65 20 64 69 66 66 65  tion.  The diffe
24410 72 65 6e 63 65 20 69 73 20 6f 6e 6c 79 20 69 6d  rence is only im
24420 70 6f 72 74 61 6e 74 20 74 6f 0a 2a 2a 20 74 68  portant to.** th
24430 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 2e 0a 2a  e update hook..*
24440 2a 0a 2a 2a 20 50 61 72 61 6d 65 74 65 72 20 50  *.** Parameter P
24450 34 20 6d 61 79 20 70 6f 69 6e 74 20 74 6f 20 61  4 may point to a
24460 20 54 61 62 6c 65 20 73 74 72 75 63 74 75 72 65   Table structure
24470 2c 20 6f 72 20 6d 61 79 20 62 65 20 4e 55 4c 4c  , or may be NULL
24480 2e 20 49 66 20 69 74 20 69 73 20 0a 2a 2a 20 6e  . If it is .** n
24490 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68  ot NULL, then th
244a0 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 28 73  e update-hook (s
244b0 71 6c 69 74 65 33 2e 78 55 70 64 61 74 65 43 61  qlite3.xUpdateCa
244c0 6c 6c 62 61 63 6b 29 20 69 73 20 69 6e 76 6f 6b  llback) is invok
244d0 65 64 20 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67  ed .** following
244e0 20 61 20 73 75 63 63 65 73 73 66 75 6c 20 69 6e   a successful in
244f0 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 28 57 41 52  sert..**.** (WAR
24500 4e 49 4e 47 2f 54 4f 44 4f 3a 20 49 66 20 50 31  NING/TODO: If P1
24510 20 69 73 20 61 20 70 73 65 75 64 6f 2d 63 75 72   is a pseudo-cur
24520 73 6f 72 20 61 6e 64 20 50 32 20 69 73 20 64 79  sor and P2 is dy
24530 6e 61 6d 69 63 61 6c 6c 79 0a 2a 2a 20 61 6c 6c  namically.** all
24540 6f 63 61 74 65 64 2c 20 74 68 65 6e 20 6f 77 6e  ocated, then own
24550 65 72 73 68 69 70 20 6f 66 20 50 32 20 69 73 20  ership of P2 is 
24560 74 72 61 6e 73 66 65 72 72 65 64 20 74 6f 20 74  transferred to t
24570 68 65 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72  he pseudo-cursor
24580 0a 2a 2a 20 61 6e 64 20 72 65 67 69 73 74 65 72  .** and register
24590 20 50 32 20 62 65 63 6f 6d 65 73 20 65 70 68 65   P2 becomes ephe
245a0 6d 65 72 61 6c 2e 20 20 49 66 20 74 68 65 20 63  meral.  If the c
245b0 75 72 73 6f 72 20 69 73 20 63 68 61 6e 67 65 64  ursor is changed
245c0 2c 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f  , the.** value o
245d0 66 20 72 65 67 69 73 74 65 72 20 50 32 20 77 69  f register P2 wi
245e0 6c 6c 20 74 68 65 6e 20 63 68 61 6e 67 65 2e 20  ll then change. 
245f0 20 4d 61 6b 65 20 73 75 72 65 20 74 68 69 73 20   Make sure this 
24600 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 63 61 75 73  does not.** caus
24610 65 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 29  e any problems.)
24620 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74  .**.** This inst
24630 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72  ruction only wor
24640 6b 73 20 6f 6e 20 74 61 62 6c 65 73 2e 20 20 54  ks on tables.  T
24650 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69 6e  he equivalent in
24660 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72  struction.** for
24670 20 69 6e 64 69 63 65 73 20 69 73 20 4f 50 5f 49   indices is OP_I
24680 64 78 49 6e 73 65 72 74 2e 0a 2a 2f 0a 2f 2a 20  dxInsert..*/./* 
24690 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72 74 49 6e  Opcode: InsertIn
246a0 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  t P1 P2 P3 P4 P5
246b0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e  .** Synopsis: in
246c0 74 6b 65 79 3d 50 33 20 64 61 74 61 3d 72 5b 50  tkey=P3 data=r[P
246d0 32 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f  2].**.** This wo
246e0 72 6b 73 20 65 78 61 63 74 6c 79 20 6c 69 6b 65  rks exactly like
246f0 20 4f 50 5f 49 6e 73 65 72 74 20 65 78 63 65 70   OP_Insert excep
24700 74 20 74 68 61 74 20 74 68 65 20 6b 65 79 20 69  t that the key i
24710 73 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72  s the.** integer
24720 20 76 61 6c 75 65 20 50 33 2c 20 6e 6f 74 20 74   value P3, not t
24730 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
24740 69 6e 74 65 67 65 72 20 73 74 6f 72 65 64 20 69  integer stored i
24750 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
24760 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65 72 74  /.case OP_Insert
24770 3a 20 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65 72  : .case OP_Inser
24780 74 49 6e 74 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70  tInt: {.  Mem *p
24790 44 61 74 61 3b 20 20 20 20 20 20 20 2f 2a 20 4d  Data;       /* M
247a0 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20  EM cell holding 
247b0 64 61 74 61 20 66 6f 72 20 74 68 65 20 72 65 63  data for the rec
247c0 6f 72 64 20 74 6f 20 62 65 20 69 6e 73 65 72 74  ord to be insert
247d0 65 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4b 65  ed */.  Mem *pKe
247e0 79 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d  y;        /* MEM
247f0 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 6b 65   cell holding ke
24800 79 20 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72  y  for the recor
24810 64 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  d */.  VdbeCurso
24820 72 20 2a 70 43 3b 20 20 20 2f 2a 20 43 75 72 73  r *pC;   /* Curs
24830 6f 72 20 74 6f 20 74 61 62 6c 65 20 69 6e 74 6f  or to table into
24840 20 77 68 69 63 68 20 69 6e 73 65 72 74 20 69 73   which insert is
24850 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e   written */.  in
24860 74 20 73 65 65 6b 52 65 73 75 6c 74 3b 20 20 20  t seekResult;   
24870 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 70 72 69  /* Result of pri
24880 6f 72 20 73 65 65 6b 20 6f 72 20 30 20 69 66 20  or seek or 0 if 
24890 6e 6f 20 55 53 45 53 45 45 4b 52 45 53 55 4c 54  no USESEEKRESULT
248a0 20 66 6c 61 67 20 2a 2f 0a 20 20 63 6f 6e 73 74   flag */.  const
248b0 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 2f 2a 20   char *zDb;  /* 
248c0 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 2d 20  database name - 
248d0 75 73 65 64 20 62 79 20 74 68 65 20 75 70 64 61  used by the upda
248e0 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20 54 61 62  te hook */.  Tab
248f0 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 2f  le *pTab;      /
24900 2a 20 54 61 62 6c 65 20 73 74 72 75 63 74 75 72  * Table structur
24910 65 20 2d 20 75 73 65 64 20 62 79 20 75 70 64 61  e - used by upda
24920 74 65 20 61 6e 64 20 70 72 65 2d 75 70 64 61 74  te and pre-updat
24930 65 20 68 6f 6f 6b 73 20 2a 2f 0a 20 20 69 6e 74  e hooks */.  int
24940 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f   op;           /
24950 2a 20 4f 70 63 6f 64 65 20 66 6f 72 20 75 70 64  * Opcode for upd
24960 61 74 65 20 68 6f 6f 6b 3a 20 53 51 4c 49 54 45  ate hook: SQLITE
24970 5f 55 50 44 41 54 45 20 6f 72 20 53 51 4c 49 54  _UPDATE or SQLIT
24980 45 5f 49 4e 53 45 52 54 20 2a 2f 0a 20 20 42 74  E_INSERT */.  Bt
24990 72 65 65 50 61 79 6c 6f 61 64 20 78 3b 20 20 20  reePayload x;   
249a0 2f 2a 20 50 61 79 6c 6f 61 64 20 74 6f 20 62 65  /* Payload to be
249b0 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 0a 20 20   inserted */..  
249c0 6f 70 20 3d 20 30 3b 0a 20 20 70 44 61 74 61 20  op = 0;.  pData 
249d0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
249e0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
249f0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
24a00 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
24a10 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
24a20 61 6c 69 64 28 70 44 61 74 61 29 20 29 3b 0a 20  alid(pData) );. 
24a30 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
24a40 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
24a50 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
24a60 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
24a70 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
24a80 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  E );.  assert( p
24a90 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30  C->uc.pCursor!=0
24aa0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
24ab0 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 61  ->isTable );.  a
24ac0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
24ad0 70 65 3d 3d 50 34 5f 54 41 42 4c 45 20 7c 7c 20  pe==P4_TABLE || 
24ae0 70 4f 70 2d 3e 70 34 74 79 70 65 3e 3d 50 34 5f  pOp->p4type>=P4_
24af0 53 54 41 54 49 43 20 29 3b 0a 20 20 52 45 47 49  STATIC );.  REGI
24b00 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
24b10 70 32 2c 20 70 44 61 74 61 29 3b 0a 0a 20 20 69  p2, pData);..  i
24b20 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
24b30 4f 50 5f 49 6e 73 65 72 74 20 29 7b 0a 20 20 20  OP_Insert ){.   
24b40 20 70 4b 65 79 20 3d 20 26 61 4d 65 6d 5b 70 4f   pKey = &aMem[pO
24b50 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 61 73 73 65  p->p3];.    asse
24b60 72 74 28 20 70 4b 65 79 2d 3e 66 6c 61 67 73 20  rt( pKey->flags 
24b70 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20  & MEM_Int );.   
24b80 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
24b90 6c 69 64 28 70 4b 65 79 29 20 29 3b 0a 20 20 20  lid(pKey) );.   
24ba0 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
24bb0 70 4f 70 2d 3e 70 33 2c 20 70 4b 65 79 29 3b 0a  pOp->p3, pKey);.
24bc0 20 20 20 20 78 2e 6e 4b 65 79 20 3d 20 70 4b 65      x.nKey = pKe
24bd0 79 2d 3e 75 2e 69 3b 0a 20 20 7d 65 6c 73 65 7b  y->u.i;.  }else{
24be0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
24bf0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73  ->opcode==OP_Ins
24c00 65 72 74 49 6e 74 20 29 3b 0a 20 20 20 20 78 2e  ertInt );.    x.
24c10 6e 4b 65 79 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  nKey = pOp->p3;.
24c20 20 20 7d 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e    }..  if( pOp->
24c30 70 34 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45  p4type==P4_TABLE
24c40 20 26 26 20 48 41 53 5f 55 50 44 41 54 45 5f 48   && HAS_UPDATE_H
24c50 4f 4f 4b 28 64 62 29 20 29 7b 0a 20 20 20 20 61  OOK(db) ){.    a
24c60 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
24c70 6c 65 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  le );.    assert
24c80 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a  ( pC->iDb>=0 );.
24c90 20 20 20 20 7a 44 62 20 3d 20 64 62 2d 3e 61 44      zDb = db->aD
24ca0 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 44 62 53 4e  b[pC->iDb].zDbSN
24cb0 61 6d 65 3b 0a 20 20 20 20 70 54 61 62 20 3d 20  ame;.    pTab = 
24cc0 70 4f 70 2d 3e 70 34 2e 70 54 61 62 3b 0a 20 20  pOp->p4.pTab;.  
24cd0 20 20 61 73 73 65 72 74 28 20 48 61 73 52 6f 77    assert( HasRow
24ce0 69 64 28 70 54 61 62 29 20 29 3b 0a 20 20 20 20  id(pTab) );.    
24cf0 6f 70 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26  op = ((pOp->p5 &
24d00 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45   OPFLAG_ISUPDATE
24d10 29 20 3f 20 53 51 4c 49 54 45 5f 55 50 44 41 54  ) ? SQLITE_UPDAT
24d20 45 20 3a 20 53 51 4c 49 54 45 5f 49 4e 53 45 52  E : SQLITE_INSER
24d30 54 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  T);.  }else{.   
24d40 20 70 54 61 62 20 3d 20 30 3b 20 2f 2a 20 4e 6f   pTab = 0; /* No
24d50 74 20 6e 65 65 64 65 64 2e 20 20 53 69 6c 65 6e  t needed.  Silen
24d60 63 65 20 61 20 63 6f 6d 69 6c 65 72 20 77 61 72  ce a comiler war
24d70 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 7a 44 62  ning. */.    zDb
24d80 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65   = 0;  /* Not ne
24d90 65 64 65 64 2e 20 20 53 69 6c 65 6e 63 65 20 61  eded.  Silence a
24da0 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e   compiler warnin
24db0 67 2e 20 2a 2f 0a 20 20 7d 0a 0a 23 69 66 64 65  g. */.  }..#ifde
24dc0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
24dd0 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20  PREUPDATE_HOOK. 
24de0 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 70   /* Invoke the p
24df0 72 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b 2c 20  re-update hook, 
24e00 69 66 20 61 6e 79 20 2a 2f 0a 20 20 69 66 28 20  if any */.  if( 
24e10 64 62 2d 3e 78 50 72 65 55 70 64 61 74 65 43 61  db->xPreUpdateCa
24e20 6c 6c 62 61 63 6b 20 0a 20 20 20 26 26 20 70 4f  llback .   && pO
24e30 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54 41  p->p4type==P4_TA
24e40 42 4c 45 0a 20 20 20 26 26 20 21 28 70 4f 70 2d  BLE.   && !(pOp-
24e50 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 55  >p5 & OPFLAG_ISU
24e60 50 44 41 54 45 29 0a 20 20 29 7b 0a 20 20 20 20  PDATE).  ){.    
24e70 73 71 6c 69 74 65 33 56 64 62 65 50 72 65 55 70  sqlite3VdbePreUp
24e80 64 61 74 65 48 6f 6f 6b 28 70 2c 20 70 43 2c 20  dateHook(p, pC, 
24e90 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 2c 20 7a  SQLITE_INSERT, z
24ea0 44 62 2c 20 70 54 61 62 2c 20 78 2e 6e 4b 65 79  Db, pTab, x.nKey
24eb0 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 7d 0a  , pOp->p2);.  }.
24ec0 23 65 6e 64 69 66 0a 0a 20 20 69 66 28 20 70 4f  #endif..  if( pO
24ed0 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4e  p->p5 & OPFLAG_N
24ee0 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61  CHANGE ) p->nCha
24ef0 6e 67 65 2b 2b 3b 0a 20 20 69 66 28 20 70 4f 70  nge++;.  if( pOp
24f00 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4c 41  ->p5 & OPFLAG_LA
24f10 53 54 52 4f 57 49 44 20 29 20 64 62 2d 3e 6c 61  STROWID ) db->la
24f20 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f  stRowid = lastRo
24f30 77 69 64 20 3d 20 78 2e 6e 4b 65 79 3b 0a 20 20  wid = x.nKey;.  
24f40 69 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73  if( pData->flags
24f50 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
24f60 20 20 20 78 2e 70 44 61 74 61 20 3d 20 30 3b 0a     x.pData = 0;.
24f70 20 20 20 20 78 2e 6e 44 61 74 61 20 3d 20 30 3b      x.nData = 0;
24f80 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
24f90 73 65 72 74 28 20 70 44 61 74 61 2d 3e 66 6c 61  sert( pData->fla
24fa0 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d  gs & (MEM_Blob|M
24fb0 45 4d 5f 53 74 72 29 20 29 3b 0a 20 20 20 20 78  EM_Str) );.    x
24fc0 2e 70 44 61 74 61 20 3d 20 70 44 61 74 61 2d 3e  .pData = pData->
24fd0 7a 3b 0a 20 20 20 20 78 2e 6e 44 61 74 61 20 3d  z;.    x.nData =
24fe0 20 70 44 61 74 61 2d 3e 6e 3b 0a 20 20 7d 0a 20   pData->n;.  }. 
24ff0 20 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 28 28   seekResult = ((
25000 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
25010 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 29 20  _USESEEKRESULT) 
25020 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74  ? pC->seekResult
25030 20 3a 20 30 29 3b 0a 20 20 69 66 28 20 70 44 61   : 0);.  if( pDa
25040 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ta->flags & MEM_
25050 5a 65 72 6f 20 29 7b 0a 20 20 20 20 78 2e 6e 5a  Zero ){.    x.nZ
25060 65 72 6f 20 3d 20 70 44 61 74 61 2d 3e 75 2e 6e  ero = pData->u.n
25070 5a 65 72 6f 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  Zero;.  }else{. 
25080 20 20 20 78 2e 6e 5a 65 72 6f 20 3d 20 30 3b 0a     x.nZero = 0;.
25090 20 20 7d 0a 20 20 78 2e 70 4b 65 79 20 3d 20 30    }.  x.pKey = 0
250a0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
250b0 42 74 72 65 65 49 6e 73 65 72 74 28 70 43 2d 3e  BtreeInsert(pC->
250c0 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 78 2c 0a  uc.pCursor, &x,.
250d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
250e0 20 20 20 20 20 20 20 20 20 20 28 70 4f 70 2d 3e            (pOp->
250f0 70 35 20 26 20 4f 50 46 4c 41 47 5f 41 50 50 45  p5 & OPFLAG_APPE
25100 4e 44 29 21 3d 30 2c 20 73 65 65 6b 52 65 73 75  ND)!=0, seekResu
25110 6c 74 0a 20 20 29 3b 0a 20 20 70 43 2d 3e 64 65  lt.  );.  pC->de
25120 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
25130 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
25140 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
25150 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  E;..  /* Invoke 
25160 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20  the update-hook 
25170 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a  if required. */.
25180 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
25190 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
251a0 6f 72 3b 0a 20 20 69 66 28 20 64 62 2d 3e 78 55  or;.  if( db->xU
251b0 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26  pdateCallback &&
251c0 20 6f 70 20 29 7b 0a 20 20 20 20 64 62 2d 3e 78   op ){.    db->x
251d0 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28 64  UpdateCallback(d
251e0 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 20 6f  b->pUpdateArg, o
251f0 70 2c 20 7a 44 62 2c 20 70 54 61 62 2d 3e 7a 4e  p, zDb, pTab->zN
25200 61 6d 65 2c 20 78 2e 6e 4b 65 79 29 3b 0a 20 20  ame, x.nKey);.  
25210 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
25220 20 4f 70 63 6f 64 65 3a 20 44 65 6c 65 74 65 20   Opcode: Delete 
25230 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
25240 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 74 68 65 20  *.** Delete the 
25250 72 65 63 6f 72 64 20 61 74 20 77 68 69 63 68 20  record at which 
25260 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 69 73  the P1 cursor is
25270 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
25280 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ing..**.** If th
25290 65 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53  e OPFLAG_SAVEPOS
252a0 49 54 49 4f 4e 20 62 69 74 20 6f 66 20 74 68 65  ITION bit of the
252b0 20 50 35 20 70 61 72 61 6d 65 74 65 72 20 69 73   P5 parameter is
252c0 20 73 65 74 2c 20 74 68 65 6e 0a 2a 2a 20 74 68   set, then.** th
252d0 65 20 63 75 72 73 6f 72 20 77 69 6c 6c 20 62 65  e cursor will be
252e0 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61   left pointing a
252f0 74 20 20 65 69 74 68 65 72 20 74 68 65 20 6e 65  t  either the ne
25300 78 74 20 6f 72 20 74 68 65 20 70 72 65 76 69 6f  xt or the previo
25310 75 73 0a 2a 2a 20 72 65 63 6f 72 64 20 69 6e 20  us.** record in 
25320 74 68 65 20 74 61 62 6c 65 2e 20 49 66 20 69 74  the table. If it
25330 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e   is left pointin
25340 67 20 61 74 20 74 68 65 20 6e 65 78 74 20 72 65  g at the next re
25350 63 6f 72 64 2c 20 74 68 65 6e 0a 2a 2a 20 74 68  cord, then.** th
25360 65 20 6e 65 78 74 20 4e 65 78 74 20 69 6e 73 74  e next Next inst
25370 72 75 63 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20  ruction will be 
25380 61 20 6e 6f 2d 6f 70 2e 20 41 73 20 61 20 72 65  a no-op. As a re
25390 73 75 6c 74 2c 20 69 6e 20 74 68 69 73 20 63 61  sult, in this ca
253a0 73 65 0a 2a 2a 20 69 74 20 69 73 20 6f 6b 20 74  se.** it is ok t
253b0 6f 20 64 65 6c 65 74 65 20 61 20 72 65 63 6f 72  o delete a recor
253c0 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20  d from within a 
253d0 4e 65 78 74 20 6c 6f 6f 70 2e 20 49 66 20 0a 2a  Next loop. If .*
253e0 2a 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53  * OPFLAG_SAVEPOS
253f0 49 54 49 4f 4e 20 62 69 74 20 6f 66 20 50 35 20  ITION bit of P5 
25400 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e 20 74  is clear, then t
25410 68 65 20 63 75 72 73 6f 72 20 77 69 6c 6c 20 62  he cursor will b
25420 65 0a 2a 2a 20 6c 65 66 74 20 69 6e 20 61 6e 20  e.** left in an 
25430 75 6e 64 65 66 69 6e 65 64 20 73 74 61 74 65 2e  undefined state.
25440 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
25450 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 20 62  FLAG_AUXDELETE b
25460 69 74 20 69 73 20 73 65 74 20 6f 6e 20 50 35 2c  it is set on P5,
25470 20 74 68 61 74 20 69 6e 64 69 63 61 74 65 73 20   that indicates 
25480 74 68 61 74 20 74 68 69 73 0a 2a 2a 20 64 65 6c  that this.** del
25490 65 74 65 20 6f 6e 65 20 6f 66 20 73 65 76 65 72  ete one of sever
254a0 61 6c 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  al associated wi
254b0 74 68 20 64 65 6c 65 74 69 6e 67 20 61 20 74 61  th deleting a ta
254c0 62 6c 65 20 72 6f 77 20 61 6e 64 20 61 6c 6c 20  ble row and all 
254d0 69 74 73 0a 2a 2a 20 61 73 73 6f 63 69 61 74 65  its.** associate
254e0 64 20 69 6e 64 65 78 20 65 6e 74 72 69 65 73 2e  d index entries.
254f0 20 20 45 78 61 63 74 6c 79 20 6f 6e 65 20 6f 66    Exactly one of
25500 20 74 68 6f 73 65 20 64 65 6c 65 74 65 73 20 69   those deletes i
25510 73 20 74 68 65 20 22 70 72 69 6d 61 72 79 22 0a  s the "primary".
25520 2a 2a 20 64 65 6c 65 74 65 2e 20 20 54 68 65 20  ** delete.  The 
25530 6f 74 68 65 72 73 20 61 72 65 20 61 6c 6c 20 6f  others are all o
25540 6e 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45  n OPFLAG_FORDELE
25550 54 45 20 63 75 72 73 6f 72 73 20 6f 72 20 65 6c  TE cursors or el
25560 73 65 20 61 72 65 0a 2a 2a 20 6d 61 72 6b 65 64  se are.** marked
25570 20 77 69 74 68 20 74 68 65 20 41 55 58 44 45 4c   with the AUXDEL
25580 45 54 45 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20  ETE flag..**.** 
25590 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43  If the OPFLAG_NC
255a0 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 32  HANGE flag of P2
255b0 20 28 4e 42 3a 20 50 32 20 6e 6f 74 20 50 35 29   (NB: P2 not P5)
255c0 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68   is set, then th
255d0 65 20 72 6f 77 0a 2a 2a 20 63 68 61 6e 67 65 20  e row.** change 
255e0 63 6f 75 6e 74 20 69 73 20 69 6e 63 72 65 6d 65  count is increme
255f0 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73 65 20  nted (otherwise 
25600 6e 6f 74 29 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 6d  not)..**.** P1 m
25610 75 73 74 20 6e 6f 74 20 62 65 20 70 73 65 75 64  ust not be pseud
25620 6f 2d 74 61 62 6c 65 2e 20 20 49 74 20 68 61 73  o-table.  It has
25630 20 74 6f 20 62 65 20 61 20 72 65 61 6c 20 74 61   to be a real ta
25640 62 6c 65 20 77 69 74 68 0a 2a 2a 20 6d 75 6c 74  ble with.** mult
25650 69 70 6c 65 20 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a  iple rows..**.**
25660 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55   If P4 is not NU
25670 4c 4c 20 74 68 65 6e 20 69 74 20 70 6f 69 6e 74  LL then it point
25680 73 20 74 6f 20 61 20 54 61 62 6c 65 20 73 74 72  s to a Table str
25690 75 74 75 72 65 2e 20 49 6e 20 74 68 69 73 20 63  uture. In this c
256a0 61 73 65 20 65 69 74 68 65 72 20 0a 2a 2a 20 74  ase either .** t
256b0 68 65 20 75 70 64 61 74 65 20 6f 72 20 70 72 65  he update or pre
256c0 2d 75 70 64 61 74 65 20 68 6f 6f 6b 2c 20 6f 72  -update hook, or
256d0 20 62 6f 74 68 2c 20 6d 61 79 20 62 65 20 69 6e   both, may be in
256e0 76 6f 6b 65 64 2e 20 54 68 65 20 50 31 20 63 75  voked. The P1 cu
256f0 72 73 6f 72 20 6d 75 73 74 0a 2a 2a 20 68 61 76  rsor must.** hav
25700 65 20 62 65 65 6e 20 70 6f 73 69 74 69 6f 6e 65  e been positione
25710 64 20 75 73 69 6e 67 20 4f 50 5f 4e 6f 74 46 6f  d using OP_NotFo
25720 75 6e 64 20 70 72 69 6f 72 20 74 6f 20 69 6e 76  und prior to inv
25730 6f 6b 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64  oking this opcod
25740 65 20 69 6e 20 0a 2a 2a 20 74 68 69 73 20 63 61  e in .** this ca
25750 73 65 2e 20 53 70 65 63 69 66 69 63 61 6c 6c 79  se. Specifically
25760 2c 20 69 66 20 6f 6e 65 20 69 73 20 63 6f 6e 66  , if one is conf
25770 69 67 75 72 65 64 2c 20 74 68 65 20 70 72 65 2d  igured, the pre-
25780 75 70 64 61 74 65 20 68 6f 6f 6b 20 69 73 20 0a  update hook is .
25790 2a 2a 20 69 6e 76 6f 6b 65 64 20 69 66 20 50 34  ** invoked if P4
257a0 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20 54 68   is not NULL. Th
257b0 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 73  e update-hook is
257c0 20 69 6e 76 6f 6b 65 64 20 69 66 20 6f 6e 65 20   invoked if one 
257d0 69 73 20 63 6f 6e 66 69 67 75 72 65 64 2c 20 0a  is configured, .
257e0 2a 2a 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c  ** P4 is not NUL
257f0 4c 2c 20 61 6e 64 20 74 68 65 20 4f 50 46 4c 41  L, and the OPFLA
25800 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20 69  G_NCHANGE flag i
25810 73 20 73 65 74 20 69 6e 20 50 32 2e 0a 2a 2a 0a  s set in P2..**.
25820 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  ** If the OPFLAG
25830 5f 49 53 55 50 44 41 54 45 20 66 6c 61 67 20 69  _ISUPDATE flag i
25840 73 20 73 65 74 20 69 6e 20 50 32 2c 20 74 68 65  s set in P2, the
25850 6e 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68  n P3 contains th
25860 65 20 61 64 64 72 65 73 73 0a 2a 2a 20 6f 66 20  e address.** of 
25870 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  the memory cell 
25880 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68  that contains th
25890 65 20 76 61 6c 75 65 20 74 68 61 74 20 74 68 65  e value that the
258a0 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 72 6f   rowid of the ro
258b0 77 20 77 69 6c 6c 0a 2a 2a 20 62 65 20 73 65 74  w will.** be set
258c0 20 74 6f 20 62 79 20 74 68 65 20 75 70 64 61 74   to by the updat
258d0 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65  e..*/.case OP_De
258e0 6c 65 74 65 3a 20 7b 0a 20 20 56 64 62 65 43 75  lete: {.  VdbeCu
258f0 72 73 6f 72 20 2a 70 43 3b 0a 20 20 63 6f 6e 73  rsor *pC;.  cons
25900 74 20 63 68 61 72 20 2a 7a 44 62 3b 0a 20 20 54  t char *zDb;.  T
25910 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 69 6e  able *pTab;.  in
25920 74 20 6f 70 66 6c 61 67 73 3b 0a 0a 20 20 6f 70  t opflags;..  op
25930 66 6c 61 67 73 20 3d 20 70 4f 70 2d 3e 70 32 3b  flags = pOp->p2;
25940 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
25950 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
25960 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
25970 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
25980 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
25990 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
259a0 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
259b0 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
259c0 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  E );.  assert( p
259d0 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30  C->uc.pCursor!=0
259e0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
259f0 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
25a00 3d 3d 30 20 29 3b 0a 0a 23 69 66 64 65 66 20 53  ==0 );..#ifdef S
25a10 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66  QLITE_DEBUG.  if
25a20 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
25a30 34 5f 54 41 42 4c 45 20 26 26 20 48 61 73 52 6f  4_TABLE && HasRo
25a40 77 69 64 28 70 4f 70 2d 3e 70 34 2e 70 54 61 62  wid(pOp->p4.pTab
25a50 29 20 26 26 20 70 4f 70 2d 3e 70 35 3d 3d 30 20  ) && pOp->p5==0 
25a60 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 70 35 20  ){.    /* If p5 
25a70 69 73 20 7a 65 72 6f 2c 20 74 68 65 20 73 65 65  is zero, the see
25a80 6b 20 6f 70 65 72 61 74 69 6f 6e 20 74 68 61 74  k operation that
25a90 20 70 6f 73 69 74 69 6f 6e 65 64 20 74 68 65 20   positioned the 
25aa0 63 75 72 73 6f 72 20 70 72 69 6f 72 20 74 6f 0a  cursor prior to.
25ab0 20 20 20 20 2a 2a 20 4f 50 5f 44 65 6c 65 74 65      ** OP_Delete
25ac0 20 77 69 6c 6c 20 68 61 76 65 20 61 6c 73 6f 20   will have also 
25ad0 73 65 74 20 74 68 65 20 70 43 2d 3e 6d 6f 76 65  set the pC->move
25ae0 74 6f 54 61 72 67 65 74 20 66 69 65 6c 64 20 74  toTarget field t
25af0 6f 20 74 68 65 20 72 6f 77 69 64 20 6f 66 0a 20  o the rowid of. 
25b00 20 20 20 2a 2a 20 74 68 65 20 72 6f 77 20 74 68     ** the row th
25b10 61 74 20 69 73 20 62 65 69 6e 67 20 64 65 6c 65  at is being dele
25b20 74 65 64 20 2a 2f 0a 20 20 20 20 69 36 34 20 69  ted */.    i64 i
25b30 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 42 74 72  Key = sqlite3Btr
25b40 65 65 49 6e 74 65 67 65 72 4b 65 79 28 70 43 2d  eeIntegerKey(pC-
25b50 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20  >uc.pCursor);.  
25b60 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 6d 6f    assert( pC->mo
25b70 76 65 74 6f 54 61 72 67 65 74 3d 3d 69 4b 65 79  vetoTarget==iKey
25b80 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a   );.  }.#endif..
25b90 20 20 2f 2a 20 49 66 20 74 68 65 20 75 70 64 61    /* If the upda
25ba0 74 65 2d 68 6f 6f 6b 20 6f 72 20 70 72 65 2d 75  te-hook or pre-u
25bb0 70 64 61 74 65 2d 68 6f 6f 6b 20 77 69 6c 6c 20  pdate-hook will 
25bc0 62 65 20 69 6e 76 6f 6b 65 64 2c 20 73 65 74 20  be invoked, set 
25bd0 7a 44 62 20 74 6f 0a 20 20 2a 2a 20 74 68 65 20  zDb to.  ** the 
25be0 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 62 20 74  name of the db t
25bf0 6f 20 70 61 73 73 20 61 73 20 74 6f 20 69 74 2e  o pass as to it.
25c00 20 41 6c 73 6f 20 73 65 74 20 6c 6f 63 61 6c 20   Also set local 
25c10 70 54 61 62 20 74 6f 20 61 20 63 6f 70 79 0a 20  pTab to a copy. 
25c20 20 2a 2a 20 6f 66 20 70 34 2e 70 54 61 62 2e 20   ** of p4.pTab. 
25c30 46 69 6e 61 6c 6c 79 2c 20 69 66 20 70 35 20 69  Finally, if p5 i
25c40 73 20 74 72 75 65 2c 20 69 6e 64 69 63 61 74 69  s true, indicati
25c50 6e 67 20 74 68 61 74 20 74 68 69 73 20 63 75 72  ng that this cur
25c60 73 6f 72 20 77 61 73 0a 20 20 2a 2a 20 6c 61 73  sor was.  ** las
25c70 74 20 6d 6f 76 65 64 20 77 69 74 68 20 4f 50 5f  t moved with OP_
25c80 4e 65 78 74 20 6f 72 20 4f 50 5f 50 72 65 76 2c  Next or OP_Prev,
25c90 20 6e 6f 74 20 53 65 65 6b 20 6f 72 20 4e 6f 74   not Seek or Not
25ca0 46 6f 75 6e 64 2c 20 73 65 74 20 0a 20 20 2a 2a  Found, set .  **
25cb0 20 56 64 62 65 43 75 72 73 6f 72 2e 6d 6f 76 65   VdbeCursor.move
25cc0 74 6f 54 61 72 67 65 74 20 74 6f 20 74 68 65 20  toTarget to the 
25cd0 63 75 72 72 65 6e 74 20 72 6f 77 69 64 2e 20 20  current rowid.  
25ce0 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34  */.  if( pOp->p4
25cf0 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45 20 26  type==P4_TABLE &
25d00 26 20 48 41 53 5f 55 50 44 41 54 45 5f 48 4f 4f  & HAS_UPDATE_HOO
25d10 4b 28 64 62 29 20 29 7b 0a 20 20 20 20 61 73 73  K(db) ){.    ass
25d20 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20  ert( pC->iDb>=0 
25d30 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
25d40 4f 70 2d 3e 70 34 2e 70 54 61 62 21 3d 30 20 29  Op->p4.pTab!=0 )
25d50 3b 0a 20 20 20 20 7a 44 62 20 3d 20 64 62 2d 3e  ;.    zDb = db->
25d60 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 44 62  aDb[pC->iDb].zDb
25d70 53 4e 61 6d 65 3b 0a 20 20 20 20 70 54 61 62 20  SName;.    pTab 
25d80 3d 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62 3b 0a  = pOp->p4.pTab;.
25d90 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 70 35      if( (pOp->p5
25da0 20 26 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f   & OPFLAG_SAVEPO
25db0 53 49 54 49 4f 4e 29 21 3d 30 20 26 26 20 70 43  SITION)!=0 && pC
25dc0 2d 3e 69 73 54 61 62 6c 65 20 29 7b 0a 20 20 20  ->isTable ){.   
25dd0 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72     pC->movetoTar
25de0 67 65 74 20 3d 20 73 71 6c 69 74 65 33 42 74 72  get = sqlite3Btr
25df0 65 65 49 6e 74 65 67 65 72 4b 65 79 28 70 43 2d  eeIntegerKey(pC-
25e00 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20  >uc.pCursor);.  
25e10 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
25e20 20 7a 44 62 20 3d 20 30 3b 20 20 20 2f 2a 20 4e   zDb = 0;   /* N
25e30 6f 74 20 6e 65 65 64 65 64 2e 20 20 53 69 6c 65  ot needed.  Sile
25e40 6e 63 65 20 61 20 63 6f 6d 70 69 6c 65 72 20 77  nce a compiler w
25e50 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 70  arning. */.    p
25e60 54 61 62 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74  Tab = 0;  /* Not
25e70 20 6e 65 65 64 65 64 2e 20 20 53 69 6c 65 6e 63   needed.  Silenc
25e80 65 20 61 20 63 6f 6d 70 69 6c 65 72 20 77 61 72  e a compiler war
25e90 6e 69 6e 67 2e 20 2a 2f 0a 20 20 7d 0a 0a 23 69  ning. */.  }..#i
25ea0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
25eb0 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f 4f  LE_PREUPDATE_HOO
25ec0 4b 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68  K.  /* Invoke th
25ed0 65 20 70 72 65 2d 75 70 64 61 74 65 2d 68 6f 6f  e pre-update-hoo
25ee0 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a  k if required. *
25ef0 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72 65  /.  if( db->xPre
25f00 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26  UpdateCallback &
25f10 26 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62 20 26  & pOp->p4.pTab &
25f20 26 20 48 61 73 52 6f 77 69 64 28 70 54 61 62 29  & HasRowid(pTab)
25f30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
25f40 21 28 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c  !(opflags & OPFL
25f50 41 47 5f 49 53 55 50 44 41 54 45 29 20 7c 7c 20  AG_ISUPDATE) || 
25f60 28 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 66  (aMem[pOp->p3].f
25f70 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 20  lags & MEM_Int) 
25f80 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
25f90 62 65 50 72 65 55 70 64 61 74 65 48 6f 6f 6b 28  bePreUpdateHook(
25fa0 70 2c 20 70 43 2c 0a 20 20 20 20 20 20 20 20 28  p, pC,.        (
25fb0 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 41 47  opflags & OPFLAG
25fc0 5f 49 53 55 50 44 41 54 45 29 20 3f 20 53 51 4c  _ISUPDATE) ? SQL
25fd0 49 54 45 5f 55 50 44 41 54 45 20 3a 20 53 51 4c  ITE_UPDATE : SQL
25fe0 49 54 45 5f 44 45 4c 45 54 45 2c 20 0a 20 20 20  ITE_DELETE, .   
25ff0 20 20 20 20 20 7a 44 62 2c 20 70 54 61 62 2c 20       zDb, pTab, 
26000 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74  pC->movetoTarget
26010 2c 0a 20 20 20 20 20 20 20 20 70 4f 70 2d 3e 70  ,.        pOp->p
26020 33 0a 20 20 20 20 29 3b 0a 20 20 7d 0a 20 20 69  3.    );.  }.  i
26030 66 28 20 6f 70 66 6c 61 67 73 20 26 20 4f 50 46  f( opflags & OPF
26040 4c 41 47 5f 49 53 4e 4f 4f 50 20 29 20 62 72 65  LAG_ISNOOP ) bre
26050 61 6b 3b 0a 23 65 6e 64 69 66 0a 20 0a 20 20 2f  ak;.#endif. .  /
26060 2a 20 4f 6e 6c 79 20 66 6c 61 67 73 20 74 68 61  * Only flags tha
26070 74 20 63 61 6e 20 62 65 20 73 65 74 20 61 72 65  t can be set are
26080 20 53 41 56 45 50 4f 49 53 54 49 4f 4e 20 61 6e   SAVEPOISTION an
26090 64 20 41 55 58 44 45 4c 45 54 45 20 2a 2f 20 0a  d AUXDELETE */ .
260a0 20 20 61 73 73 65 72 74 28 20 28 70 4f 70 2d 3e    assert( (pOp->
260b0 70 35 20 26 20 7e 28 4f 50 46 4c 41 47 5f 53 41  p5 & ~(OPFLAG_SA
260c0 56 45 50 4f 53 49 54 49 4f 4e 7c 4f 50 46 4c 41  VEPOSITION|OPFLA
260d0 47 5f 41 55 58 44 45 4c 45 54 45 29 29 3d 3d 30  G_AUXDELETE))==0
260e0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50   );.  assert( OP
260f0 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f  FLAG_SAVEPOSITIO
26100 4e 3d 3d 42 54 52 45 45 5f 53 41 56 45 50 4f 53  N==BTREE_SAVEPOS
26110 49 54 49 4f 4e 20 29 3b 0a 20 20 61 73 73 65 72  ITION );.  asser
26120 74 28 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c  t( OPFLAG_AUXDEL
26130 45 54 45 3d 3d 42 54 52 45 45 5f 41 55 58 44 45  ETE==BTREE_AUXDE
26140 4c 45 54 45 20 29 3b 0a 0a 23 69 66 64 65 66 20  LETE );..#ifdef 
26150 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69  SQLITE_DEBUG.  i
26160 66 28 20 70 2d 3e 70 46 72 61 6d 65 3d 3d 30 20  f( p->pFrame==0 
26170 29 7b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 69  ){.    if( pC->i
26180 73 45 70 68 65 6d 65 72 61 6c 3d 3d 30 0a 20 20  sEphemeral==0.  
26190 20 20 20 20 20 20 26 26 20 28 70 4f 70 2d 3e 70        && (pOp->p
261a0 35 20 26 20 4f 50 46 4c 41 47 5f 41 55 58 44 45  5 & OPFLAG_AUXDE
261b0 4c 45 54 45 29 3d 3d 30 0a 20 20 20 20 20 20 20  LETE)==0.       
261c0 20 26 26 20 28 70 43 2d 3e 77 72 46 6c 61 67 20   && (pC->wrFlag 
261d0 26 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45  & OPFLAG_FORDELE
261e0 54 45 29 3d 3d 30 0a 20 20 20 20 20 20 29 7b 0a  TE)==0.      ){.
261f0 20 20 20 20 20 20 6e 45 78 74 72 61 44 65 6c 65        nExtraDele
26200 74 65 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  te++;.    }.    
26210 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50  if( pOp->p2 & OP
26220 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 7b 0a  FLAG_NCHANGE ){.
26230 20 20 20 20 20 20 6e 45 78 74 72 61 44 65 6c 65        nExtraDele
26240 74 65 2d 2d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  te--;.    }.  }.
26250 23 65 6e 64 69 66 0a 0a 20 20 72 63 20 3d 20 73  #endif..  rc = s
26260 71 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65 74  qlite3BtreeDelet
26270 65 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  e(pC->uc.pCursor
26280 2c 20 70 4f 70 2d 3e 70 35 29 3b 0a 20 20 70 43  , pOp->p5);.  pC
26290 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
262a0 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69  CACHE_STALE;.  i
262b0 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
262c0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
262d0 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68  ..  /* Invoke th
262e0 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66  e update-hook if
262f0 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20   required. */.  
26300 69 66 28 20 6f 70 66 6c 61 67 73 20 26 20 4f 50  if( opflags & OP
26310 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 7b 0a  FLAG_NCHANGE ){.
26320 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b      p->nChange++
26330 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 78 55  ;.    if( db->xU
26340 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26  pdateCallback &&
26350 20 48 61 73 52 6f 77 69 64 28 70 54 61 62 29 20   HasRowid(pTab) 
26360 29 7b 0a 20 20 20 20 20 20 64 62 2d 3e 78 55 70  ){.      db->xUp
26370 64 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d  dateCallback(db-
26380 3e 70 55 70 64 61 74 65 41 72 67 2c 20 53 51 4c  >pUpdateArg, SQL
26390 49 54 45 5f 44 45 4c 45 54 45 2c 20 7a 44 62 2c  ITE_DELETE, zDb,
263a0 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c 0a 20 20   pTab->zName,.  
263b0 20 20 20 20 20 20 20 20 70 43 2d 3e 6d 6f 76 65          pC->move
263c0 74 6f 54 61 72 67 65 74 29 3b 0a 20 20 20 20 20  toTarget);.     
263d0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62   assert( pC->iDb
263e0 3e 3d 30 20 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  >=0 );.    }.  }
263f0 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 2f 2a 20  ..  break;.}./* 
26400 4f 70 63 6f 64 65 3a 20 52 65 73 65 74 43 6f 75  Opcode: ResetCou
26410 6e 74 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  nt * * * * *.**.
26420 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20  ** The value of 
26430 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  the change count
26440 65 72 20 69 73 20 63 6f 70 69 65 64 20 74 6f 20  er is copied to 
26450 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e  the database han
26460 64 6c 65 0a 2a 2a 20 63 68 61 6e 67 65 20 63 6f  dle.** change co
26470 75 6e 74 65 72 20 28 72 65 74 75 72 6e 65 64 20  unter (returned 
26480 62 79 20 73 75 62 73 65 71 75 65 6e 74 20 63 61  by subsequent ca
26490 6c 6c 73 20 74 6f 20 73 71 6c 69 74 65 33 5f 63  lls to sqlite3_c
264a0 68 61 6e 67 65 73 28 29 29 2e 0a 2a 2a 20 54 68  hanges())..** Th
264b0 65 6e 20 74 68 65 20 56 4d 73 20 69 6e 74 65 72  en the VMs inter
264c0 6e 61 6c 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  nal change count
264d0 65 72 20 72 65 73 65 74 73 20 74 6f 20 30 2e 0a  er resets to 0..
264e0 2a 2a 20 54 68 69 73 20 69 73 20 75 73 65 64 20  ** This is used 
264f0 62 79 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  by trigger progr
26500 61 6d 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ams..*/.case OP_
26510 52 65 73 65 74 43 6f 75 6e 74 3a 20 7b 0a 20 20  ResetCount: {.  
26520 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 68  sqlite3VdbeSetCh
26530 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68  anges(db, p->nCh
26540 61 6e 67 65 29 3b 0a 20 20 70 2d 3e 6e 43 68 61  ange);.  p->nCha
26550 6e 67 65 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b  nge = 0;.  break
26560 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
26570 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 20 50 31  SorterCompare P1
26580 20 50 32 20 50 33 20 50 34 0a 2a 2a 20 53 79 6e   P2 P3 P4.** Syn
26590 6f 70 73 69 73 3a 20 69 66 20 6b 65 79 28 50 31  opsis: if key(P1
265a0 29 21 3d 74 72 69 6d 28 72 5b 50 33 5d 2c 50 34  )!=trim(r[P3],P4
265b0 29 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  ) goto P2.**.** 
265c0 50 31 20 69 73 20 61 20 73 6f 72 74 65 72 20 63  P1 is a sorter c
265d0 75 72 73 6f 72 2e 20 54 68 69 73 20 69 6e 73 74  ursor. This inst
265e0 72 75 63 74 69 6f 6e 20 63 6f 6d 70 61 72 65 73  ruction compares
265f0 20 61 20 70 72 65 66 69 78 20 6f 66 20 74 68 65   a prefix of the
26600 0a 2a 2a 20 72 65 63 6f 72 64 20 62 6c 6f 62 20  .** record blob 
26610 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61  in register P3 a
26620 67 61 69 6e 73 74 20 61 20 70 72 65 66 69 78 20  gainst a prefix 
26630 6f 66 20 74 68 65 20 65 6e 74 72 79 20 74 68 61  of the entry tha
26640 74 20 0a 2a 2a 20 74 68 65 20 73 6f 72 74 65 72  t .** the sorter
26650 20 63 75 72 73 6f 72 20 63 75 72 72 65 6e 74 6c   cursor currentl
26660 79 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20 4f 6e  y points to.  On
26670 6c 79 20 74 68 65 20 66 69 72 73 74 20 50 34 20  ly the first P4 
26680 66 69 65 6c 64 73 0a 2a 2a 20 6f 66 20 72 5b 50  fields.** of r[P
26690 33 5d 20 61 6e 64 20 74 68 65 20 73 6f 72 74 65  3] and the sorte
266a0 72 20 72 65 63 6f 72 64 20 61 72 65 20 63 6f 6d  r record are com
266b0 70 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  pared..**.** If 
266c0 65 69 74 68 65 72 20 50 33 20 6f 72 20 74 68 65  either P3 or the
266d0 20 73 6f 72 74 65 72 20 63 6f 6e 74 61 69 6e 73   sorter contains
266e0 20 61 20 4e 55 4c 4c 20 69 6e 20 6f 6e 65 20 6f   a NULL in one o
266f0 66 20 74 68 65 69 72 20 73 69 67 6e 69 66 69 63  f their signific
26700 61 6e 74 0a 2a 2a 20 66 69 65 6c 64 73 20 28 6e  ant.** fields (n
26710 6f 74 20 63 6f 75 6e 74 69 6e 67 20 74 68 65 20  ot counting the 
26720 50 34 20 66 69 65 6c 64 73 20 61 74 20 74 68 65  P4 fields at the
26730 20 65 6e 64 20 77 68 69 63 68 20 61 72 65 20 69   end which are i
26740 67 6e 6f 72 65 64 29 20 74 68 65 6e 0a 2a 2a 20  gnored) then.** 
26750 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69  the comparison i
26760 73 20 61 73 73 75 6d 65 64 20 74 6f 20 62 65 20  s assumed to be 
26770 65 71 75 61 6c 2e 0a 2a 2a 0a 2a 2a 20 46 61 6c  equal..**.** Fal
26780 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 6e 65 78  l through to nex
26790 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 66  t instruction if
267a0 20 74 68 65 20 74 77 6f 20 72 65 63 6f 72 64 73   the two records
267b0 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 20 74   compare equal t
267c0 6f 0a 2a 2a 20 65 61 63 68 20 6f 74 68 65 72 2e  o.** each other.
267d0 20 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20    Jump to P2 if 
267e0 74 68 65 79 20 61 72 65 20 64 69 66 66 65 72 65  they are differe
267f0 6e 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  nt..*/.case OP_S
26800 6f 72 74 65 72 43 6f 6d 70 61 72 65 3a 20 7b 0a  orterCompare: {.
26810 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
26820 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69  ;.  int res;.  i
26830 6e 74 20 6e 4b 65 79 43 6f 6c 3b 0a 0a 20 20 70  nt nKeyCol;..  p
26840 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
26850 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
26860 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b   isSorter(pC) );
26870 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
26880 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
26890 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d   );.  pIn3 = &aM
268a0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6e  em[pOp->p3];.  n
268b0 4b 65 79 43 6f 6c 20 3d 20 70 4f 70 2d 3e 70 34  KeyCol = pOp->p4
268c0 2e 69 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20  .i;.  res = 0;. 
268d0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
268e0 65 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 28 70  eSorterCompare(p
268f0 43 2c 20 70 49 6e 33 2c 20 6e 4b 65 79 43 6f 6c  C, pIn3, nKeyCol
26900 2c 20 26 72 65 73 29 3b 0a 20 20 56 64 62 65 42  , &res);.  VdbeB
26910 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d  ranchTaken(res!=
26920 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 63 20 29  0,2);.  if( rc )
26930 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
26940 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20  to_error;.  if( 
26950 72 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  res ) goto jump_
26960 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a  to_p2;.  break;.
26970 7d 3b 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  };../* Opcode: S
26980 6f 72 74 65 72 44 61 74 61 20 50 31 20 50 32 20  orterData P1 P2 
26990 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
269a0 69 73 3a 20 72 5b 50 32 5d 3d 64 61 74 61 0a 2a  is: r[P2]=data.*
269b0 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20  *.** Write into 
269c0 72 65 67 69 73 74 65 72 20 50 32 20 74 68 65 20  register P2 the 
269d0 63 75 72 72 65 6e 74 20 73 6f 72 74 65 72 20 64  current sorter d
269e0 61 74 61 20 66 6f 72 20 73 6f 72 74 65 72 20 63  ata for sorter c
269f0 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65  ursor P1..** The
26a00 6e 20 63 6c 65 61 72 20 74 68 65 20 63 6f 6c 75  n clear the colu
26a10 6d 6e 20 68 65 61 64 65 72 20 63 61 63 68 65 20  mn header cache 
26a20 6f 6e 20 63 75 72 73 6f 72 20 50 33 2e 0a 2a 2a  on cursor P3..**
26a30 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
26a40 69 73 20 6e 6f 72 6d 61 6c 6c 79 20 75 73 65 20  is normally use 
26a50 74 6f 20 6d 6f 76 65 20 61 20 72 65 63 6f 72 64  to move a record
26a60 20 6f 75 74 20 6f 66 20 74 68 65 20 73 6f 72 74   out of the sort
26a70 65 72 20 61 6e 64 20 69 6e 74 6f 0a 2a 2a 20 61  er and into.** a
26a80 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20 69   register that i
26a90 73 20 74 68 65 20 73 6f 75 72 63 65 20 66 6f 72  s the source for
26aa0 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20   a pseudo-table 
26ab0 63 75 72 73 6f 72 20 63 72 65 61 74 65 64 20 75  cursor created u
26ac0 73 69 6e 67 0a 2a 2a 20 4f 70 65 6e 50 73 65 75  sing.** OpenPseu
26ad0 64 6f 2e 20 20 54 68 61 74 20 70 73 65 75 64 6f  do.  That pseudo
26ae0 2d 74 61 62 6c 65 20 63 75 72 73 6f 72 20 69 73  -table cursor is
26af0 20 74 68 65 20 6f 6e 65 20 74 68 61 74 20 69 73   the one that is
26b00 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 0a 2a   identified by.*
26b10 2a 20 70 61 72 61 6d 65 74 65 72 20 50 33 2e 20  * parameter P3. 
26b20 20 43 6c 65 61 72 69 6e 67 20 74 68 65 20 50 33   Clearing the P3
26b30 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20 61 73   column cache as
26b40 20 70 61 72 74 20 6f 66 20 74 68 69 73 20 6f 70   part of this op
26b50 63 6f 64 65 20 73 61 76 65 73 0a 2a 2a 20 75 73  code saves.** us
26b60 20 66 72 6f 6d 20 68 61 76 69 6e 67 20 74 6f 20   from having to 
26b70 69 73 73 75 65 20 61 20 73 65 70 61 72 61 74 65  issue a separate
26b80 20 4e 75 6c 6c 52 6f 77 20 69 6e 73 74 72 75 63   NullRow instruc
26b90 74 69 6f 6e 20 74 6f 20 63 6c 65 61 72 20 74 68  tion to clear th
26ba0 61 74 20 63 61 63 68 65 2e 0a 2a 2f 0a 63 61 73  at cache..*/.cas
26bb0 65 20 4f 50 5f 53 6f 72 74 65 72 44 61 74 61 3a  e OP_SorterData:
26bc0 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
26bd0 2a 70 43 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26  *pC;..  pOut = &
26be0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
26bf0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
26c00 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
26c10 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20  t( isSorter(pC) 
26c20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
26c30 33 56 64 62 65 53 6f 72 74 65 72 52 6f 77 6b 65  3VdbeSorterRowke
26c40 79 28 70 43 2c 20 70 4f 75 74 29 3b 0a 20 20 61  y(pC, pOut);.  a
26c50 73 73 65 72 74 28 20 72 63 21 3d 53 51 4c 49 54  ssert( rc!=SQLIT
26c60 45 5f 4f 4b 20 7c 7c 20 28 70 4f 75 74 2d 3e 66  E_OK || (pOut->f
26c70 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 29  lags & MEM_Blob)
26c80 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
26c90 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
26ca0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
26cb0 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
26cc0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
26cd0 72 72 6f 72 3b 0a 20 20 70 2d 3e 61 70 43 73 72  rror;.  p->apCsr
26ce0 5b 70 4f 70 2d 3e 70 33 5d 2d 3e 63 61 63 68 65  [pOp->p3]->cache
26cf0 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
26d00 54 41 4c 45 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  TALE;.  break;.}
26d10 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77  ../* Opcode: Row
26d20 44 61 74 61 20 50 31 20 50 32 20 2a 20 2a 20 2a  Data P1 P2 * * *
26d30 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
26d40 50 32 5d 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57  P2]=data.**.** W
26d50 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74  rite into regist
26d60 65 72 20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65  er P2 the comple
26d70 74 65 20 72 6f 77 20 64 61 74 61 20 66 6f 72 20  te row data for 
26d80 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68  cursor P1..** Th
26d90 65 72 65 20 69 73 20 6e 6f 20 69 6e 74 65 72 70  ere is no interp
26da0 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  retation of the 
26db0 64 61 74 61 2e 20 20 0a 2a 2a 20 49 74 20 69 73  data.  .** It is
26dc0 20 6a 75 73 74 20 63 6f 70 69 65 64 20 6f 6e 74   just copied ont
26dd0 6f 20 74 68 65 20 50 32 20 72 65 67 69 73 74 65  o the P2 registe
26de0 72 20 65 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a  r exactly as .**
26df0 20 69 74 20 69 73 20 66 6f 75 6e 64 20 69 6e 20   it is found in 
26e00 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
26e10 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  e..**.** If the 
26e20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62  P1 cursor must b
26e30 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20  e pointing to a 
26e40 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61  valid row (not a
26e50 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66   NULL row).** of
26e60 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e   a real table, n
26e70 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  ot a pseudo-tabl
26e80 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  e..*/./* Opcode:
26e90 20 52 6f 77 4b 65 79 20 50 31 20 50 32 20 2a 20   RowKey P1 P2 * 
26ea0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
26eb0 20 72 5b 50 32 5d 3d 6b 65 79 0a 2a 2a 0a 2a 2a   r[P2]=key.**.**
26ec0 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69   Write into regi
26ed0 73 74 65 72 20 50 32 20 74 68 65 20 63 6f 6d 70  ster P2 the comp
26ee0 6c 65 74 65 20 72 6f 77 20 6b 65 79 20 66 6f 72  lete row key for
26ef0 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54   cursor P1..** T
26f00 68 65 72 65 20 69 73 20 6e 6f 20 69 6e 74 65 72  here is no inter
26f10 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  pretation of the
26f20 20 64 61 74 61 2e 20 20 0a 2a 2a 20 54 68 65 20   data.  .** The 
26f30 6b 65 79 20 69 73 20 63 6f 70 69 65 64 20 6f 6e  key is copied on
26f40 74 6f 20 74 68 65 20 50 32 20 72 65 67 69 73 74  to the P2 regist
26f50 65 72 20 65 78 61 63 74 6c 79 20 61 73 20 0a 2a  er exactly as .*
26f60 2a 20 69 74 20 69 73 20 66 6f 75 6e 64 20 69 6e  * it is found in
26f70 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
26f80 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  le..**.** If the
26f90 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20   P1 cursor must 
26fa0 62 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61  be pointing to a
26fb0 20 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20   valid row (not 
26fc0 61 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f  a NULL row).** o
26fd0 66 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20  f a real table, 
26fe0 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62  not a pseudo-tab
26ff0 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  le..*/.case OP_R
27000 6f 77 4b 65 79 3a 0a 63 61 73 65 20 4f 50 5f 52  owKey:.case OP_R
27010 6f 77 44 61 74 61 3a 20 7b 0a 20 20 56 64 62 65  owData: {.  Vdbe
27020 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74  Cursor *pC;.  Bt
27030 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
27040 20 75 33 32 20 6e 3b 0a 0a 20 20 70 4f 75 74 20   u32 n;..  pOut 
27050 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
27060 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
27070 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 0a  ange(p, pOut);..
27080 20 20 2f 2a 20 4e 6f 74 65 20 74 68 61 74 20 52    /* Note that R
27090 6f 77 4b 65 79 20 61 6e 64 20 52 6f 77 44 61 74  owKey and RowDat
270a0 61 20 61 72 65 20 72 65 61 6c 6c 79 20 65 78 61  a are really exa
270b0 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20 69 6e  ctly the same in
270c0 73 74 72 75 63 74 69 6f 6e 20 2a 2f 0a 20 20 61  struction */.  a
270d0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
270e0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
270f0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
27100 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
27110 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
27120 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
27130 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
27140 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
27150 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72  .  assert( isSor
27160 74 65 72 28 70 43 29 3d 3d 30 20 29 3b 0a 20 20  ter(pC)==0 );.  
27170 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
27180 62 6c 65 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  ble || pOp->opco
27190 64 65 21 3d 4f 50 5f 52 6f 77 44 61 74 61 20 29  de!=OP_RowData )
271a0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
271b0 69 73 54 61 62 6c 65 3d 3d 30 20 7c 7c 20 70 4f  isTable==0 || pO
271c0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 6f  p->opcode==OP_Ro
271d0 77 44 61 74 61 20 29 3b 0a 20 20 61 73 73 65 72  wData );.  asser
271e0 74 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d  t( pC->nullRow==
271f0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
27200 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30  C->uc.pCursor!=0
27210 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43   );.  pCrsr = pC
27220 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 0a 20  ->uc.pCursor;.. 
27230 20 2f 2a 20 54 68 65 20 4f 50 5f 52 6f 77 4b 65   /* The OP_RowKe
27240 79 20 61 6e 64 20 4f 50 5f 52 6f 77 44 61 74 61  y and OP_RowData
27250 20 6f 70 63 6f 64 65 73 20 61 6c 77 61 79 73 20   opcodes always 
27260 66 6f 6c 6c 6f 77 20 4f 50 5f 4e 6f 74 45 78 69  follow OP_NotExi
27270 73 74 73 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f 53  sts or.  ** OP_S
27280 65 65 6b 52 6f 77 69 64 20 6f 72 20 4f 50 5f 52  eekRowid or OP_R
27290 65 77 69 6e 64 2f 4f 70 5f 4e 65 78 74 20 77 69  ewind/Op_Next wi
272a0 74 68 20 6e 6f 20 69 6e 74 65 72 76 65 6e 69 6e  th no intervenin
272b0 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 0a 20  g instructions. 
272c0 20 2a 2a 20 74 68 61 74 20 6d 69 67 68 74 20 69   ** that might i
272d0 6e 76 61 6c 69 64 61 74 65 20 74 68 65 20 63 75  nvalidate the cu
272e0 72 73 6f 72 2e 0a 20 20 2a 2a 20 49 66 20 74 68  rsor..  ** If th
272f0 69 73 20 77 68 65 72 65 20 6e 6f 74 20 74 68 65  is where not the
27300 20 63 61 73 65 2c 20 6f 6e 20 6f 66 20 74 68 65   case, on of the
27310 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 73 73 65 72   following asser
27320 74 28 29 73 0a 20 20 2a 2a 20 77 6f 75 6c 64 20  t()s.  ** would 
27330 66 61 69 6c 2e 20 20 53 68 6f 75 6c 64 20 74 68  fail.  Should th
27340 69 73 20 65 76 65 72 20 63 68 61 6e 67 65 20 28  is ever change (
27350 62 65 63 61 75 73 65 20 6f 66 20 63 68 61 6e 67  because of chang
27360 65 73 20 69 6e 20 74 68 65 20 63 6f 64 65 0a 20  es in the code. 
27370 20 2a 2a 20 67 65 6e 65 72 61 74 6f 72 29 20 74   ** generator) t
27380 68 65 6e 20 74 68 65 20 66 69 78 20 77 6f 75 6c  hen the fix woul
27390 64 20 62 65 20 74 6f 20 69 6e 73 65 72 74 20 61  d be to insert a
273a0 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73 71   call to.  ** sq
273b0 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
273c0 6f 76 65 74 6f 28 29 2e 0a 20 20 2a 2f 0a 20 20  oveto()..  */.  
273d0 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65  assert( pC->defe
273e0 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
273f0 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74  .  assert( sqlit
27400 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56  e3BtreeCursorIsV
27410 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a 23  alid(pCrsr) );.#
27420 69 66 20 30 20 20 2f 2a 20 4e 6f 74 20 72 65 71  if 0  /* Not req
27430 75 69 72 65 64 20 64 75 65 20 74 6f 20 74 68 65  uired due to the
27440 20 70 72 65 76 69 6f 75 73 20 74 6f 20 61 73 73   previous to ass
27450 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
27460 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   */.  rc = sqlit
27470 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
27480 74 6f 28 70 43 29 3b 0a 20 20 69 66 28 20 72 63  to(pC);.  if( rc
27490 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f  !=SQLITE_OK ) go
274a0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
274b0 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66 0a 0a 20  error;.#endif.. 
274c0 20 6e 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65   n = sqlite3Btre
274d0 65 50 61 79 6c 6f 61 64 53 69 7a 65 28 70 43 72  ePayloadSize(pCr
274e0 73 72 29 3b 0a 20 20 69 66 28 20 6e 3e 28 75 33  sr);.  if( n>(u3
274f0 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  2)db->aLimit[SQL
27500 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
27510 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ] ){.    goto to
27520 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 74 65 73  o_big;.  }.  tes
27530 74 63 61 73 65 28 20 6e 3d 3d 30 20 29 3b 0a 20  tcase( n==0 );. 
27540 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
27550 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65 73 69 7a  MemClearAndResiz
27560 65 28 70 4f 75 74 2c 20 4d 41 58 28 6e 2c 33 32  e(pOut, MAX(n,32
27570 29 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e  )) ){.    goto n
27580 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 70 4f 75  o_mem;.  }.  pOu
27590 74 2d 3e 6e 20 3d 20 6e 3b 0a 20 20 4d 65 6d 53  t->n = n;.  MemS
275a0 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
275b0 20 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 69 66   MEM_Blob);.  if
275c0 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30  ( pC->isTable==0
275d0 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
275e0 69 74 65 33 42 74 72 65 65 4b 65 79 28 70 43 72  ite3BtreeKey(pCr
275f0 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e  sr, 0, n, pOut->
27600 7a 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  z);.  }else{.   
27610 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
27620 65 65 44 61 74 61 28 70 43 72 73 72 2c 20 30 2c  eeData(pCrsr, 0,
27630 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20   n, pOut->z);.  
27640 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  }.  if( rc ) got
27650 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
27660 72 72 6f 72 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e  rror;.  pOut->en
27670 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b  c = SQLITE_UTF8;
27680 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74 68 65    /* In case the
27690 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20 63 61   blob is ever ca
276a0 73 74 20 74 6f 20 74 65 78 74 20 2a 2f 0a 20 20  st to text */.  
276b0 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
276c0 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 52 45 47  IZE(pOut);.  REG
276d0 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
276e0 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 62 72  >p2, pOut);.  br
276f0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
27700 65 3a 20 52 6f 77 69 64 20 50 31 20 50 32 20 2a  e: Rowid P1 P2 *
27710 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
27720 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a  : r[P2]=rowid.**
27730 0a 2a 2a 20 53 74 6f 72 65 20 69 6e 20 72 65 67  .** Store in reg
27740 69 73 74 65 72 20 50 32 20 61 6e 20 69 6e 74 65  ister P2 an inte
27750 67 65 72 20 77 68 69 63 68 20 69 73 20 74 68 65  ger which is the
27760 20 6b 65 79 20 6f 66 20 74 68 65 20 74 61 62 6c   key of the tabl
27770 65 20 65 6e 74 72 79 20 74 68 61 74 0a 2a 2a 20  e entry that.** 
27780 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  P1 is currently 
27790 70 6f 69 6e 74 20 74 6f 2e 0a 2a 2a 0a 2a 2a 20  point to..**.** 
277a0 50 31 20 63 61 6e 20 62 65 20 65 69 74 68 65 72  P1 can be either
277b0 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 74 61 62   an ordinary tab
277c0 6c 65 20 6f 72 20 61 20 76 69 72 74 75 61 6c 20  le or a virtual 
277d0 74 61 62 6c 65 2e 20 20 54 68 65 72 65 20 75 73  table.  There us
277e0 65 64 20 74 6f 0a 2a 2a 20 62 65 20 61 20 73 65  ed to.** be a se
277f0 70 61 72 61 74 65 20 4f 50 5f 56 52 6f 77 69 64  parate OP_VRowid
27800 20 6f 70 63 6f 64 65 20 66 6f 72 20 75 73 65 20   opcode for use 
27810 77 69 74 68 20 76 69 72 74 75 61 6c 20 74 61 62  with virtual tab
27820 6c 65 73 2c 20 62 75 74 20 74 68 69 73 0a 2a 2a  les, but this.**
27830 20 6f 6e 65 20 6f 70 63 6f 64 65 20 6e 6f 77 20   one opcode now 
27840 77 6f 72 6b 73 20 66 6f 72 20 62 6f 74 68 20 74  works for both t
27850 61 62 6c 65 20 74 79 70 65 73 2e 0a 2a 2f 0a 63  able types..*/.c
27860 61 73 65 20 4f 50 5f 52 6f 77 69 64 3a 20 7b 20  ase OP_Rowid: { 
27870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27880 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 56 64 62  /* out2 */.  Vdb
27890 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69  eCursor *pC;.  i
278a0 36 34 20 76 3b 0a 20 20 73 71 6c 69 74 65 33 5f  64 v;.  sqlite3_
278b0 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63  vtab *pVtab;.  c
278c0 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64  onst sqlite3_mod
278d0 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20  ule *pModule;.. 
278e0 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
278f0 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
27900 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
27910 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
27920 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
27930 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
27940 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
27950 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
27960 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
27970 65 21 3d 43 55 52 54 59 50 45 5f 50 53 45 55 44  e!=CURTYPE_PSEUD
27980 4f 20 7c 7c 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  O || pC->nullRow
27990 20 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 6e 75   );.  if( pC->nu
279a0 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 70 4f 75  llRow ){.    pOu
279b0 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e  t->flags = MEM_N
279c0 75 6c 6c 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  ull;.    break;.
279d0 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e    }else if( pC->
279e0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 29  deferredMoveto )
279f0 7b 0a 20 20 20 20 76 20 3d 20 70 43 2d 3e 6d 6f  {.    v = pC->mo
27a00 76 65 74 6f 54 61 72 67 65 74 3b 0a 23 69 66 6e  vetoTarget;.#ifn
27a10 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
27a20 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 7d  VIRTUALTABLE.  }
27a30 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 65 43 75  else if( pC->eCu
27a40 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 56  rType==CURTYPE_V
27a50 54 41 42 20 29 7b 0a 20 20 20 20 61 73 73 65 72  TAB ){.    asser
27a60 74 28 20 70 43 2d 3e 75 63 2e 70 56 43 75 72 21  t( pC->uc.pVCur!
27a70 3d 30 20 29 3b 0a 20 20 20 20 70 56 74 61 62 20  =0 );.    pVtab 
27a80 3d 20 70 43 2d 3e 75 63 2e 70 56 43 75 72 2d 3e  = pC->uc.pVCur->
27a90 70 56 74 61 62 3b 0a 20 20 20 20 70 4d 6f 64 75  pVtab;.    pModu
27aa0 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64  le = pVtab->pMod
27ab0 75 6c 65 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ule;.    assert(
27ac0 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64   pModule->xRowid
27ad0 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f   );.    rc = pMo
27ae0 64 75 6c 65 2d 3e 78 52 6f 77 69 64 28 70 43 2d  dule->xRowid(pC-
27af0 3e 75 63 2e 70 56 43 75 72 2c 20 26 76 29 3b 0a  >uc.pVCur, &v);.
27b00 20 20 20 20 73 71 6c 69 74 65 33 56 74 61 62 49      sqlite3VtabI
27b10 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70  mportErrmsg(p, p
27b20 56 74 61 62 29 3b 0a 20 20 20 20 69 66 28 20 72  Vtab);.    if( r
27b30 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
27b40 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e  ue_to_error;.#en
27b50 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
27b60 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
27b70 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  */.  }else{.    
27b80 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
27b90 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
27ba0 52 45 45 20 29 3b 0a 20 20 20 20 61 73 73 65 72  REE );.    asser
27bb0 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  t( pC->uc.pCurso
27bc0 72 21 3d 30 20 29 3b 0a 20 20 20 20 72 63 20 3d  r!=0 );.    rc =
27bd0 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
27be0 6f 72 52 65 73 74 6f 72 65 28 70 43 29 3b 0a 20  orRestore(pC);. 
27bf0 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f     if( rc ) goto
27c00 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
27c10 72 6f 72 3b 0a 20 20 20 20 69 66 28 20 70 43 2d  ror;.    if( pC-
27c20 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
27c30 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
27c40 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20  MEM_Null;.      
27c50 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20  break;.    }.   
27c60 20 76 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65   v = sqlite3Btre
27c70 65 49 6e 74 65 67 65 72 4b 65 79 28 70 43 2d 3e  eIntegerKey(pC->
27c80 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d  uc.pCursor);.  }
27c90 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76  .  pOut->u.i = v
27ca0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
27cb0 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f 77   Opcode: NullRow
27cc0 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
27cd0 2a 20 4d 6f 76 65 20 74 68 65 20 63 75 72 73 6f  * Move the curso
27ce0 72 20 50 31 20 74 6f 20 61 20 6e 75 6c 6c 20 72  r P1 to a null r
27cf0 6f 77 2e 20 20 41 6e 79 20 4f 50 5f 43 6f 6c 75  ow.  Any OP_Colu
27d00 6d 6e 20 6f 70 65 72 61 74 69 6f 6e 73 0a 2a 2a  mn operations.**
27d10 20 74 68 61 74 20 6f 63 63 75 72 20 77 68 69 6c   that occur whil
27d20 65 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  e the cursor is 
27d30 6f 6e 20 74 68 65 20 6e 75 6c 6c 20 72 6f 77 20  on the null row 
27d40 77 69 6c 6c 20 61 6c 77 61 79 73 0a 2a 2a 20 77  will always.** w
27d50 72 69 74 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a  rite a NULL..*/.
27d60 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3a  case OP_NullRow:
27d70 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
27d80 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  *pC;..  assert( 
27d90 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
27da0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
27db0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
27dc0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
27dd0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
27de0 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  .  pC->nullRow =
27df0 20 31 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   1;.  pC->cacheS
27e00 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
27e10 41 4c 45 3b 0a 20 20 69 66 28 20 70 43 2d 3e 65  ALE;.  if( pC->e
27e20 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
27e30 5f 42 54 52 45 45 20 29 7b 0a 20 20 20 20 61 73  _BTREE ){.    as
27e40 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75  sert( pC->uc.pCu
27e50 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 73  rsor!=0 );.    s
27e60 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61 72  qlite3BtreeClear
27e70 43 75 72 73 6f 72 28 70 43 2d 3e 75 63 2e 70 43  Cursor(pC->uc.pC
27e80 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 62 72  ursor);.  }.  br
27e90 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
27ea0 65 3a 20 4c 61 73 74 20 50 31 20 50 32 20 50 33  e: Last P1 P2 P3
27eb0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e   * *.**.** The n
27ec0 65 78 74 20 75 73 65 20 6f 66 20 74 68 65 20 52  ext use of the R
27ed0 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f  owid or Column o
27ee0 72 20 50 72 65 76 20 69 6e 73 74 72 75 63 74 69  r Prev instructi
27ef0 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69  on for P1 .** wi
27f00 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65 20  ll refer to the 
27f10 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68  last entry in th
27f20 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
27f30 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66   or index..** If
27f40 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
27f50 64 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e 64  dex is empty and
27f60 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70   P2>0, then jump
27f70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
27f80 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20  P2..** If P2 is 
27f90 30 20 6f 72 20 69 66 20 74 68 65 20 74 61 62 6c  0 or if the tabl
27fa0 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f  e or index is no
27fb0 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68  t empty, fall th
27fc0 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20  rough.** to the 
27fd0 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75  following instru
27fe0 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  ction..**.** Thi
27ff0 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20  s opcode leaves 
28000 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69  the cursor confi
28010 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e  gured to move in
28020 20 72 65 76 65 72 73 65 20 6f 72 64 65 72 2c 0a   reverse order,.
28030 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e 64 20  ** from the end 
28040 74 6f 77 61 72 64 20 74 68 65 20 62 65 67 69 6e  toward the begin
28050 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72 20  ning.  In other 
28060 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f  words, the curso
28070 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72  r is.** configur
28080 65 64 20 74 6f 20 75 73 65 20 50 72 65 76 2c 20  ed to use Prev, 
28090 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2f 0a 63 61 73  not Next..*/.cas
280a0 65 20 4f 50 5f 4c 61 73 74 3a 20 7b 20 20 20 20  e OP_Last: {    
280b0 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
280c0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
280d0 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
280e0 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a  sr;.  int res;..
280f0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
28100 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
28110 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
28120 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
28130 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
28140 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
28150 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
28160 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
28170 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43   );.  pCrsr = pC
28180 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20  ->uc.pCursor;.  
28190 72 65 73 20 3d 20 30 3b 0a 20 20 61 73 73 65 72  res = 0;.  asser
281a0 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20  t( pCrsr!=0 );. 
281b0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
281c0 65 65 4c 61 73 74 28 70 43 72 73 72 2c 20 26 72  eeLast(pCrsr, &r
281d0 65 73 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  es);.  pC->nullR
281e0 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20  ow = (u8)res;.  
281f0 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
28200 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61  to = 0;.  pC->ca
28210 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
28220 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 2d 3e 73  E_STALE;.  pC->s
28230 65 65 6b 52 65 73 75 6c 74 20 3d 20 70 4f 70 2d  eekResult = pOp-
28240 3e 70 33 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  >p3;.#ifdef SQLI
28250 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73  TE_DEBUG.  pC->s
28260 65 65 6b 4f 70 20 3d 20 4f 50 5f 4c 61 73 74 3b  eekOp = OP_Last;
28270 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 72 63  .#endif.  if( rc
28280 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
28290 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66  e_to_error;.  if
282a0 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 7b 0a 20  ( pOp->p2>0 ){. 
282b0 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
282c0 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20  en(res!=0,2);.  
282d0 20 20 69 66 28 20 72 65 73 20 29 20 67 6f 74 6f    if( res ) goto
282e0 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d   jump_to_p2;.  }
282f0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a  .  break;.}.../*
28300 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 20 50 31   Opcode: Sort P1
28310 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
28320 54 68 69 73 20 6f 70 63 6f 64 65 20 64 6f 65 73  This opcode does
28330 20 65 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d   exactly the sam
28340 65 20 74 68 69 6e 67 20 61 73 20 4f 50 5f 52 65  e thing as OP_Re
28350 77 69 6e 64 20 65 78 63 65 70 74 20 74 68 61 74  wind except that
28360 0a 2a 2a 20 69 74 20 69 6e 63 72 65 6d 65 6e 74  .** it increment
28370 73 20 61 6e 20 75 6e 64 6f 63 75 6d 65 6e 74 65  s an undocumente
28380 64 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  d global variabl
28390 65 20 75 73 65 64 20 66 6f 72 20 74 65 73 74 69  e used for testi
283a0 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e  ng..**.** Sortin
283b0 67 20 69 73 20 61 63 63 6f 6d 70 6c 69 73 68 65  g is accomplishe
283c0 64 20 62 79 20 77 72 69 74 69 6e 67 20 72 65 63  d by writing rec
283d0 6f 72 64 73 20 69 6e 74 6f 20 61 20 73 6f 72 74  ords into a sort
283e0 69 6e 67 20 69 6e 64 65 78 2c 0a 2a 2a 20 74 68  ing index,.** th
283f0 65 6e 20 72 65 77 69 6e 64 69 6e 67 20 74 68 61  en rewinding tha
28400 74 20 69 6e 64 65 78 20 61 6e 64 20 70 6c 61 79  t index and play
28410 69 6e 67 20 69 74 20 62 61 63 6b 20 66 72 6f 6d  ing it back from
28420 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a   beginning to.**
28430 20 65 6e 64 2e 20 20 57 65 20 75 73 65 20 74 68   end.  We use th
28440 65 20 4f 50 5f 53 6f 72 74 20 6f 70 63 6f 64 65  e OP_Sort opcode
28450 20 69 6e 73 74 65 61 64 20 6f 66 20 4f 50 5f 52   instead of OP_R
28460 65 77 69 6e 64 20 74 6f 20 64 6f 20 74 68 65 0a  ewind to do the.
28470 2a 2a 20 72 65 77 69 6e 64 69 6e 67 20 73 6f 20  ** rewinding so 
28480 74 68 61 74 20 74 68 65 20 67 6c 6f 62 61 6c 20  that the global 
28490 76 61 72 69 61 62 6c 65 20 77 69 6c 6c 20 62 65  variable will be
284a0 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e 64   incremented and
284b0 0a 2a 2a 20 72 65 67 72 65 73 73 69 6f 6e 20 74  .** regression t
284c0 65 73 74 73 20 63 61 6e 20 64 65 74 65 72 6d 69  ests can determi
284d0 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ne whether or no
284e0 74 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20  t the optimizer 
284f0 69 73 0a 2a 2a 20 63 6f 72 72 65 63 74 6c 79 20  is.** correctly 
28500 6f 70 74 69 6d 69 7a 69 6e 67 20 6f 75 74 20 73  optimizing out s
28510 6f 72 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  orts..*/.case OP
28520 5f 53 6f 72 74 65 72 53 6f 72 74 3a 20 20 20 20  _SorterSort:    
28530 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20  /* jump */.case 
28540 4f 50 5f 53 6f 72 74 3a 20 7b 20 20 20 20 20 20  OP_Sort: {      
28550 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69 66    /* jump */.#if
28560 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
28570 20 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63    sqlite3_sort_c
28580 6f 75 6e 74 2b 2b 3b 0a 20 20 73 71 6c 69 74 65  ount++;.  sqlite
28590 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2d 2d  3_search_count--
285a0 3b 0a 23 65 6e 64 69 66 0a 20 20 70 2d 3e 61 43  ;.#endif.  p->aC
285b0 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54  ounter[SQLITE_ST
285c0 4d 54 53 54 41 54 55 53 5f 53 4f 52 54 5d 2b 2b  MTSTATUS_SORT]++
285d0 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f  ;.  /* Fall thro
285e0 75 67 68 20 69 6e 74 6f 20 4f 50 5f 52 65 77 69  ugh into OP_Rewi
285f0 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64  nd */.}./* Opcod
28600 65 3a 20 52 65 77 69 6e 64 20 50 31 20 50 32 20  e: Rewind P1 P2 
28610 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20  * * *.**.** The 
28620 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65 20  next use of the 
28630 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20  Rowid or Column 
28640 6f 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74  or Next instruct
28650 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77  ion for P1 .** w
28660 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65  ill refer to the
28670 20 66 69 72 73 74 20 65 6e 74 72 79 20 69 6e 20   first entry in 
28680 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62  the database tab
28690 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20  le or index..** 
286a0 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  If the table or 
286b0 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 2c 20  index is empty, 
286c0 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
286d0 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 74 68   to P2..** If th
286e0 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
286f0 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66   is not empty, f
28700 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
28710 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 0a 2a 2a  he following .**
28720 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
28730 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
28740 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f  leaves the curso
28750 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  r configured to 
28760 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61 72 64 20  move in forward 
28770 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74  order,.** from t
28780 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77  he beginning tow
28790 61 72 64 20 74 68 65 20 65 6e 64 2e 20 20 49 6e  ard the end.  In
287a0 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
287b0 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63  e cursor is.** c
287c0 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65  onfigured to use
287d0 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e   Next, not Prev.
287e0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 77 69  .*/.case OP_Rewi
287f0 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  nd: {        /* 
28800 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75  jump */.  VdbeCu
28810 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75  rsor *pC;.  BtCu
28820 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69  rsor *pCrsr;.  i
28830 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72  nt res;..  asser
28840 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
28850 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
28860 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
28870 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
28880 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
28890 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73   );.  assert( is
288a0 53 6f 72 74 65 72 28 70 43 29 3d 3d 28 70 4f 70  Sorter(pC)==(pOp
288b0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72  ->opcode==OP_Sor
288c0 74 65 72 53 6f 72 74 29 20 29 3b 0a 20 20 72 65  terSort) );.  re
288d0 73 20 3d 20 31 3b 0a 23 69 66 64 65 66 20 53 51  s = 1;.#ifdef SQ
288e0 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d  LITE_DEBUG.  pC-
288f0 3e 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 52 65 77  >seekOp = OP_Rew
28900 69 6e 64 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66  ind;.#endif.  if
28910 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29  ( isSorter(pC) )
28920 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
28930 65 33 56 64 62 65 53 6f 72 74 65 72 52 65 77 69  e3VdbeSorterRewi
28940 6e 64 28 70 43 2c 20 26 72 65 73 29 3b 0a 20 20  nd(pC, &res);.  
28950 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
28960 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
28970 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
28980 3b 0a 20 20 20 20 70 43 72 73 72 20 3d 20 70 43  ;.    pCrsr = pC
28990 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20  ->uc.pCursor;.  
289a0 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72 20    assert( pCrsr 
289b0 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
289c0 74 65 33 42 74 72 65 65 46 69 72 73 74 28 70 43  te3BtreeFirst(pC
289d0 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  rsr, &res);.    
289e0 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
289f0 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e  to = 0;.    pC->
28a00 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
28a10 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20  CHE_STALE;.  }. 
28a20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
28a30 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
28a40 72 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  r;.  pC->nullRow
28a50 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 61 73   = (u8)res;.  as
28a60 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
28a70 26 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f  && pOp->p2<p->nO
28a80 70 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  p );.  VdbeBranc
28a90 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29  hTaken(res!=0,2)
28aa0 3b 0a 20 20 69 66 28 20 72 65 73 20 29 20 67 6f  ;.  if( res ) go
28ab0 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
28ac0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
28ad0 63 6f 64 65 3a 20 4e 65 78 74 20 50 31 20 50 32  code: Next P1 P2
28ae0 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
28af0 41 64 76 61 6e 63 65 20 63 75 72 73 6f 72 20 50  Advance cursor P
28b00 31 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69  1 so that it poi
28b10 6e 74 73 20 74 6f 20 74 68 65 20 6e 65 78 74 20  nts to the next 
28b20 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20 69 6e  key/data pair in
28b30 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72   its.** table or
28b40 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68 65 72   index.  If ther
28b50 65 20 61 72 65 20 6e 6f 20 6d 6f 72 65 20 6b 65  e are no more ke
28b60 79 2f 76 61 6c 75 65 20 70 61 69 72 73 20 74 68  y/value pairs th
28b70 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a  en fall through.
28b80 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77  ** to the follow
28b90 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ing instruction.
28ba0 20 20 42 75 74 20 69 66 20 74 68 65 20 63 75 72    But if the cur
28bb0 73 6f 72 20 61 64 76 61 6e 63 65 20 77 61 73 20  sor advance was 
28bc0 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a  successful,.** j
28bd0 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ump immediately 
28be0 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  to P2..**.** The
28bf0 20 4e 65 78 74 20 6f 70 63 6f 64 65 20 69 73 20   Next opcode is 
28c00 6f 6e 6c 79 20 76 61 6c 69 64 20 66 6f 6c 6c 6f  only valid follo
28c10 77 69 6e 67 20 61 6e 20 53 65 65 6b 47 54 2c 20  wing an SeekGT, 
28c20 53 65 65 6b 47 45 2c 20 6f 72 0a 2a 2a 20 4f 50  SeekGE, or.** OP
28c30 5f 52 65 77 69 6e 64 20 6f 70 63 6f 64 65 20 75  _Rewind opcode u
28c40 73 65 64 20 74 6f 20 70 6f 73 69 74 69 6f 6e 20  sed to position 
28c50 74 68 65 20 63 75 72 73 6f 72 2e 20 20 4e 65 78  the cursor.  Nex
28c60 74 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64  t is not allowed
28c70 0a 2a 2a 20 74 6f 20 66 6f 6c 6c 6f 77 20 53 65  .** to follow Se
28c80 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 6f 72  ekLT, SeekLE, or
28c90 20 4f 50 5f 4c 61 73 74 2e 0a 2a 2a 0a 2a 2a 20   OP_Last..**.** 
28ca0 54 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75  The P1 cursor mu
28cb0 73 74 20 62 65 20 66 6f 72 20 61 20 72 65 61 6c  st be for a real
28cc0 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73   table, not a ps
28cd0 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20 50 31 20  eudo-table.  P1 
28ce0 6d 75 73 74 20 68 61 76 65 0a 2a 2a 20 62 65 65  must have.** bee
28cf0 6e 20 6f 70 65 6e 65 64 20 70 72 69 6f 72 20 74  n opened prior t
28d00 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20 6f 72  o this opcode or
28d10 20 74 68 65 20 70 72 6f 67 72 61 6d 20 77 69 6c   the program wil
28d20 6c 20 73 65 67 66 61 75 6c 74 2e 0a 2a 2a 0a 2a  l segfault..**.*
28d30 2a 20 54 68 65 20 50 33 20 76 61 6c 75 65 20 69  * The P3 value i
28d40 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20  s a hint to the 
28d50 62 74 72 65 65 20 69 6d 70 6c 65 6d 65 6e 74 61  btree implementa
28d60 74 69 6f 6e 2e 20 49 66 20 50 33 3d 3d 31 2c 20  tion. If P3==1, 
28d70 74 68 61 74 0a 2a 2a 20 6d 65 61 6e 73 20 50 31  that.** means P1
28d80 20 69 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78   is an SQL index
28d90 20 61 6e 64 20 74 68 61 74 20 74 68 69 73 20 69   and that this i
28da0 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 75 6c 64  nstruction could
28db0 20 68 61 76 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d   have been.** om
28dc0 69 74 74 65 64 20 69 66 20 74 68 61 74 20 69 6e  itted if that in
28dd0 64 65 78 20 68 61 64 20 62 65 65 6e 20 75 6e 69  dex had been uni
28de0 71 75 65 2e 20 20 50 33 20 69 73 20 75 73 75 61  que.  P3 is usua
28df0 6c 6c 79 20 30 2e 20 20 50 33 20 69 73 0a 2a 2a  lly 0.  P3 is.**
28e00 20 61 6c 77 61 79 73 20 65 69 74 68 65 72 20 30   always either 0
28e10 20 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20   or 1..**.** P4 
28e20 69 73 20 61 6c 77 61 79 73 20 6f 66 20 74 79 70  is always of typ
28e30 65 20 50 34 5f 41 44 56 41 4e 43 45 2e 20 54 68  e P4_ADVANCE. Th
28e40 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74  e function point
28e50 65 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20  er points to.** 
28e60 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74  sqlite3BtreeNext
28e70 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  ()..**.** If P5 
28e80 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e 64 20  is positive and 
28e90 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
28ea0 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20 63 6f  n, then event co
28eb0 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20  unter.** number 
28ec0 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72 65 70  P5-1 in the prep
28ed0 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69  ared statement i
28ee0 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a  s incremented..*
28ef0 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 50  *.** See also: P
28f00 72 65 76 2c 20 4e 65 78 74 49 66 4f 70 65 6e 0a  rev, NextIfOpen.
28f10 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65  */./* Opcode: Ne
28f20 78 74 49 66 4f 70 65 6e 20 50 31 20 50 32 20 50  xtIfOpen P1 P2 P
28f30 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68  3 P4 P5.**.** Th
28f40 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20  is opcode works 
28f50 6a 75 73 74 20 6c 69 6b 65 20 4e 65 78 74 20 65  just like Next e
28f60 78 63 65 70 74 20 74 68 61 74 20 69 66 20 63 75  xcept that if cu
28f70 72 73 6f 72 20 50 31 20 69 73 20 6e 6f 74 0a 2a  rsor P1 is not.*
28f80 2a 20 6f 70 65 6e 20 69 74 20 62 65 68 61 76 65  * open it behave
28f90 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 2f 2a  s a no-op..*/./*
28fa0 20 4f 70 63 6f 64 65 3a 20 50 72 65 76 20 50 31   Opcode: Prev P1
28fb0 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
28fc0 2a 2a 20 42 61 63 6b 20 75 70 20 63 75 72 73 6f  ** Back up curso
28fd0 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20  r P1 so that it 
28fe0 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 70 72  points to the pr
28ff0 65 76 69 6f 75 73 20 6b 65 79 2f 64 61 74 61 20  evious key/data 
29000 70 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74  pair in its.** t
29010 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20  able or index.  
29020 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 70  If there is no p
29030 72 65 76 69 6f 75 73 20 6b 65 79 2f 76 61 6c 75  revious key/valu
29040 65 20 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c  e pairs then fal
29050 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20  l through.** to 
29060 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e  the following in
29070 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20  struction.  But 
29080 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 62 61  if the cursor ba
29090 63 6b 75 70 20 77 61 73 20 73 75 63 63 65 73 73  ckup was success
290a0 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d  ful,.** jump imm
290b0 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a  ediately to P2..
290c0 2a 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 72 65  **.**.** The Pre
290d0 76 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79  v opcode is only
290e0 20 76 61 6c 69 64 20 66 6f 6c 6c 6f 77 69 6e 67   valid following
290f0 20 61 6e 20 53 65 65 6b 4c 54 2c 20 53 65 65 6b   an SeekLT, Seek
29100 4c 45 2c 20 6f 72 0a 2a 2a 20 4f 50 5f 4c 61 73  LE, or.** OP_Las
29110 74 20 6f 70 63 6f 64 65 20 75 73 65 64 20 74 6f  t opcode used to
29120 20 70 6f 73 69 74 69 6f 6e 20 74 68 65 20 63 75   position the cu
29130 72 73 6f 72 2e 20 20 50 72 65 76 20 69 73 20 6e  rsor.  Prev is n
29140 6f 74 20 61 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f  ot allowed.** to
29150 20 66 6f 6c 6c 6f 77 20 53 65 65 6b 47 54 2c 20   follow SeekGT, 
29160 53 65 65 6b 47 45 2c 20 6f 72 20 4f 50 5f 52 65  SeekGE, or OP_Re
29170 77 69 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  wind..**.** The 
29180 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62  P1 cursor must b
29190 65 20 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62  e for a real tab
291a0 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f  le, not a pseudo
291b0 2d 74 61 62 6c 65 2e 20 20 49 66 20 50 31 20 69  -table.  If P1 i
291c0 73 0a 2a 2a 20 6e 6f 74 20 6f 70 65 6e 20 74 68  s.** not open th
291d0 65 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72 20  en the behavior 
291e0 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a  is undefined..**
291f0 0a 2a 2a 20 54 68 65 20 50 33 20 76 61 6c 75 65  .** The P3 value
29200 20 69 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68   is a hint to th
29210 65 20 62 74 72 65 65 20 69 6d 70 6c 65 6d 65 6e  e btree implemen
29220 74 61 74 69 6f 6e 2e 20 49 66 20 50 33 3d 3d 31  tation. If P3==1
29230 2c 20 74 68 61 74 0a 2a 2a 20 6d 65 61 6e 73 20  , that.** means 
29240 50 31 20 69 73 20 61 6e 20 53 51 4c 20 69 6e 64  P1 is an SQL ind
29250 65 78 20 61 6e 64 20 74 68 61 74 20 74 68 69 73  ex and that this
29260 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 75   instruction cou
29270 6c 64 20 68 61 76 65 20 62 65 65 6e 0a 2a 2a 20  ld have been.** 
29280 6f 6d 69 74 74 65 64 20 69 66 20 74 68 61 74 20  omitted if that 
29290 69 6e 64 65 78 20 68 61 64 20 62 65 65 6e 20 75  index had been u
292a0 6e 69 71 75 65 2e 20 20 50 33 20 69 73 20 75 73  nique.  P3 is us
292b0 75 61 6c 6c 79 20 30 2e 20 20 50 33 20 69 73 0a  ually 0.  P3 is.
292c0 2a 2a 20 61 6c 77 61 79 73 20 65 69 74 68 65 72  ** always either
292d0 20 30 20 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50   0 or 1..**.** P
292e0 34 20 69 73 20 61 6c 77 61 79 73 20 6f 66 20 74  4 is always of t
292f0 79 70 65 20 50 34 5f 41 44 56 41 4e 43 45 2e 20  ype P4_ADVANCE. 
29300 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69  The function poi
29310 6e 74 65 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a  nter points to.*
29320 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 72  * sqlite3BtreePr
29330 65 76 69 6f 75 73 28 29 2e 0a 2a 2a 0a 2a 2a 20  evious()..**.** 
29340 49 66 20 50 35 20 69 73 20 70 6f 73 69 74 69 76  If P5 is positiv
29350 65 20 61 6e 64 20 74 68 65 20 6a 75 6d 70 20 69  e and the jump i
29360 73 20 74 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76  s taken, then ev
29370 65 6e 74 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e  ent counter.** n
29380 75 6d 62 65 72 20 50 35 2d 31 20 69 6e 20 74 68  umber P5-1 in th
29390 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  e prepared state
293a0 6d 65 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e  ment is incremen
293b0 74 65 64 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ted..*/./* Opcod
293c0 65 3a 20 50 72 65 76 49 66 4f 70 65 6e 20 50 31  e: PrevIfOpen P1
293d0 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
293e0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77  ** This opcode w
293f0 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 50  orks just like P
29400 72 65 76 20 65 78 63 65 70 74 20 74 68 61 74 20  rev except that 
29410 69 66 20 63 75 72 73 6f 72 20 50 31 20 69 73 20  if cursor P1 is 
29420 6e 6f 74 0a 2a 2a 20 6f 70 65 6e 20 69 74 20 62  not.** open it b
29430 65 68 61 76 65 73 20 61 20 6e 6f 2d 6f 70 2e 0a  ehaves a no-op..
29440 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65  */.case OP_Sorte
29450 72 4e 65 78 74 3a 20 7b 20 20 2f 2a 20 6a 75 6d  rNext: {  /* jum
29460 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  p */.  VdbeCurso
29470 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73  r *pC;.  int res
29480 3b 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  ;..  pC = p->apC
29490 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
294a0 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28  ssert( isSorter(
294b0 70 43 29 20 29 3b 0a 20 20 72 65 73 20 3d 20 30  pC) );.  res = 0
294c0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
294d0 56 64 62 65 53 6f 72 74 65 72 4e 65 78 74 28 64  VdbeSorterNext(d
294e0 62 2c 20 70 43 2c 20 26 72 65 73 29 3b 0a 20 20  b, pC, &res);.  
294f0 67 6f 74 6f 20 6e 65 78 74 5f 74 61 69 6c 3b 0a  goto next_tail;.
29500 63 61 73 65 20 4f 50 5f 50 72 65 76 49 66 4f 70  case OP_PrevIfOp
29510 65 6e 3a 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a  en:    /* jump *
29520 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74 49 66  /.case OP_NextIf
29530 4f 70 65 6e 3a 20 20 20 20 2f 2a 20 6a 75 6d 70  Open:    /* jump
29540 20 2a 2f 0a 20 20 69 66 28 20 70 2d 3e 61 70 43   */.  if( p->apC
29550 73 72 5b 70 4f 70 2d 3e 70 31 5d 3d 3d 30 20 29  sr[pOp->p1]==0 )
29560 20 62 72 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c   break;.  /* Fal
29570 6c 20 74 68 72 6f 75 67 68 20 2a 2f 0a 63 61 73  l through */.cas
29580 65 20 4f 50 5f 50 72 65 76 3a 20 20 20 20 20 20  e OP_Prev:      
29590 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63      /* jump */.c
295a0 61 73 65 20 4f 50 5f 4e 65 78 74 3a 20 20 20 20  ase OP_Next:    
295b0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
295c0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
295d0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
295e0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
295f0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35   assert( pOp->p5
29600 3c 41 72 72 61 79 53 69 7a 65 28 70 2d 3e 61 43  <ArraySize(p->aC
29610 6f 75 6e 74 65 72 29 20 29 3b 0a 20 20 70 43 20  ounter) );.  pC 
29620 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
29630 70 31 5d 3b 0a 20 20 72 65 73 20 3d 20 70 4f 70  p1];.  res = pOp
29640 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p3;.  assert( 
29650 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
29660 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
29670 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73  oveto==0 );.  as
29680 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
29690 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
296a0 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72  E );.  assert( r
296b0 65 73 3d 3d 30 20 7c 7c 20 28 72 65 73 3d 3d 31  es==0 || (res==1
296c0 20 26 26 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d   && pC->isTable=
296d0 3d 30 29 20 29 3b 0a 20 20 74 65 73 74 63 61 73  =0) );.  testcas
296e0 65 28 20 72 65 73 3d 3d 31 20 29 3b 0a 20 20 61  e( res==1 );.  a
296f0 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
29700 64 65 21 3d 4f 50 5f 4e 65 78 74 20 7c 7c 20 70  de!=OP_Next || p
29710 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d  Op->p4.xAdvance=
29720 3d 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78  =sqlite3BtreeNex
29730 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  t );.  assert( p
29740 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50  Op->opcode!=OP_P
29750 72 65 76 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78  rev || pOp->p4.x
29760 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33  Advance==sqlite3
29770 42 74 72 65 65 50 72 65 76 69 6f 75 73 20 29 3b  BtreePrevious );
29780 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
29790 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 49  opcode!=OP_NextI
297a0 66 4f 70 65 6e 20 7c 7c 20 70 4f 70 2d 3e 70 34  fOpen || pOp->p4
297b0 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74  .xAdvance==sqlit
297c0 65 33 42 74 72 65 65 4e 65 78 74 20 29 3b 0a 20  e3BtreeNext );. 
297d0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
297e0 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 49 66 4f  code!=OP_PrevIfO
297f0 70 65 6e 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78  pen || pOp->p4.x
29800 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33  Advance==sqlite3
29810 42 74 72 65 65 50 72 65 76 69 6f 75 73 29 3b 0a  BtreePrevious);.
29820 0a 20 20 2f 2a 20 54 68 65 20 4e 65 78 74 20 6f  .  /* The Next o
29830 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 75 73  pcode is only us
29840 65 64 20 61 66 74 65 72 20 53 65 65 6b 47 54 2c  ed after SeekGT,
29850 20 53 65 65 6b 47 45 2c 20 61 6e 64 20 52 65 77   SeekGE, and Rew
29860 69 6e 64 2e 0a 20 20 2a 2a 20 54 68 65 20 50 72  ind..  ** The Pr
29870 65 76 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c  ev opcode is onl
29880 79 20 75 73 65 64 20 61 66 74 65 72 20 53 65 65  y used after See
29890 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 61 6e 64  kLT, SeekLE, and
298a0 20 4c 61 73 74 2e 20 2a 2f 0a 20 20 61 73 73 65   Last. */.  asse
298b0 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21  rt( pOp->opcode!
298c0 3d 4f 50 5f 4e 65 78 74 20 7c 7c 20 70 4f 70 2d  =OP_Next || pOp-
298d0 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74  >opcode!=OP_Next
298e0 49 66 4f 70 65 6e 0a 20 20 20 20 20 20 20 7c 7c  IfOpen.       ||
298f0 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f   pC->seekOp==OP_
29900 53 65 65 6b 47 54 20 7c 7c 20 70 43 2d 3e 73 65  SeekGT || pC->se
29910 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 47 45 0a  ekOp==OP_SeekGE.
29920 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65         || pC->se
29930 65 6b 4f 70 3d 3d 4f 50 5f 52 65 77 69 6e 64 20  ekOp==OP_Rewind 
29940 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f  || pC->seekOp==O
29950 50 5f 46 6f 75 6e 64 29 3b 0a 20 20 61 73 73 65  P_Found);.  asse
29960 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21  rt( pOp->opcode!
29970 3d 4f 50 5f 50 72 65 76 20 7c 7c 20 70 4f 70 2d  =OP_Prev || pOp-
29980 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76  >opcode!=OP_Prev
29990 49 66 4f 70 65 6e 0a 20 20 20 20 20 20 20 7c 7c  IfOpen.       ||
299a0 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f   pC->seekOp==OP_
299b0 53 65 65 6b 4c 54 20 7c 7c 20 70 43 2d 3e 73 65  SeekLT || pC->se
299c0 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 4c 45 0a  ekOp==OP_SeekLE.
299d0 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65         || pC->se
299e0 65 6b 4f 70 3d 3d 4f 50 5f 4c 61 73 74 20 29 3b  ekOp==OP_Last );
299f0 0a 0a 20 20 72 63 20 3d 20 70 4f 70 2d 3e 70 34  ..  rc = pOp->p4
29a00 2e 78 41 64 76 61 6e 63 65 28 70 43 2d 3e 75 63  .xAdvance(pC->uc
29a10 2e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b  .pCursor, &res);
29a20 0a 6e 65 78 74 5f 74 61 69 6c 3a 0a 20 20 70 43  .next_tail:.  pC
29a30 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
29a40 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 56  CACHE_STALE;.  V
29a50 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
29a60 65 73 3d 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20  es==0,2);.  if( 
29a70 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
29a80 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
29a90 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20  if( res==0 ){.  
29aa0 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
29ab0 30 3b 0a 20 20 20 20 70 2d 3e 61 43 6f 75 6e 74  0;.    p->aCount
29ac0 65 72 5b 70 4f 70 2d 3e 70 35 5d 2b 2b 3b 0a 23  er[pOp->p5]++;.#
29ad0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
29ae0 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 65  T.    sqlite3_se
29af0 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65  arch_count++;.#e
29b00 6e 64 69 66 0a 20 20 20 20 67 6f 74 6f 20 6a 75  ndif.    goto ju
29b10 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68 65  mp_to_p2_and_che
29b20 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74  ck_for_interrupt
29b30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
29b40 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a  C->nullRow = 1;.
29b50 20 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b    }.  goto check
29b60 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a  _for_interrupt;.
29b70 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  }../* Opcode: Id
29b80 78 49 6e 73 65 72 74 20 50 31 20 50 32 20 50 33  xInsert P1 P2 P3
29b90 20 2a 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69   * P5.** Synopsi
29ba0 73 3a 20 6b 65 79 3d 72 5b 50 32 5d 0a 2a 2a 0a  s: key=r[P2].**.
29bb0 2a 2a 20 52 65 67 69 73 74 65 72 20 50 32 20 68  ** Register P2 h
29bc0 6f 6c 64 73 20 61 6e 20 53 51 4c 20 69 6e 64 65  olds an SQL inde
29bd0 78 20 6b 65 79 20 6d 61 64 65 20 75 73 69 6e 67  x key made using
29be0 20 74 68 65 0a 2a 2a 20 4d 61 6b 65 52 65 63 6f   the.** MakeReco
29bf0 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 2e  rd instructions.
29c00 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 72    This opcode wr
29c10 69 74 65 73 20 74 68 61 74 20 6b 65 79 0a 2a 2a  ites that key.**
29c20 20 69 6e 74 6f 20 74 68 65 20 69 6e 64 65 78 20   into the index 
29c30 50 31 2e 20 20 44 61 74 61 20 66 6f 72 20 74 68  P1.  Data for th
29c40 65 20 65 6e 74 72 79 20 69 73 20 6e 69 6c 2e 0a  e entry is nil..
29c50 2a 2a 0a 2a 2a 20 50 33 20 69 73 20 61 20 66 6c  **.** P3 is a fl
29c60 61 67 20 74 68 61 74 20 70 72 6f 76 69 64 65 73  ag that provides
29c70 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62   a hint to the b
29c80 2d 74 72 65 65 20 6c 61 79 65 72 20 74 68 61 74  -tree layer that
29c90 20 74 68 69 73 0a 2a 2a 20 69 6e 73 65 72 74 20   this.** insert 
29ca0 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20  is likely to be 
29cb0 61 6e 20 61 70 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a  an append..**.**
29cc0 20 49 66 20 50 35 20 68 61 73 20 74 68 65 20 4f   If P5 has the O
29cd0 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 62 69  PFLAG_NCHANGE bi
29ce0 74 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20  t set, then the 
29cf0 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69  change counter i
29d00 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64  s.** incremented
29d10 20 62 79 20 74 68 69 73 20 69 6e 73 74 72 75 63   by this instruc
29d20 74 69 6f 6e 2e 20 20 49 66 20 74 68 65 20 4f 50  tion.  If the OP
29d30 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 62 69 74  FLAG_NCHANGE bit
29d40 20 69 73 20 63 6c 65 61 72 2c 0a 2a 2a 20 74 68   is clear,.** th
29d50 65 6e 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f  en the change co
29d60 75 6e 74 65 72 20 69 73 20 75 6e 63 68 61 6e 67  unter is unchang
29d70 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  ed..**.** If P5 
29d80 68 61 73 20 74 68 65 20 4f 50 46 4c 41 47 5f 55  has the OPFLAG_U
29d90 53 45 53 45 45 4b 52 45 53 55 4c 54 20 62 69 74  SESEEKRESULT bit
29da0 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 63   set, then the c
29db0 75 72 73 6f 72 20 6d 75 73 74 20 68 61 76 65 0a  ursor must have.
29dc0 2a 2a 20 6a 75 73 74 20 64 6f 6e 65 20 61 20 73  ** just done a s
29dd0 65 65 6b 20 74 6f 20 74 68 65 20 73 70 6f 74 20  eek to the spot 
29de0 77 68 65 72 65 20 74 68 65 20 6e 65 77 20 65 6e  where the new en
29df0 74 72 79 20 69 73 20 74 6f 20 62 65 20 69 6e 73  try is to be ins
29e00 65 72 74 65 64 2e 0a 2a 2a 20 54 68 69 73 20 66  erted..** This f
29e10 6c 61 67 20 61 76 6f 69 64 73 20 64 6f 69 6e 67  lag avoids doing
29e20 20 61 6e 20 65 78 74 72 61 20 73 65 65 6b 2e 0a   an extra seek..
29e30 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
29e40 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b  uction only work
29e50 73 20 66 6f 72 20 69 6e 64 69 63 65 73 2e 20 20  s for indices.  
29e60 54 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69  The equivalent i
29e70 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f  nstruction.** fo
29e80 72 20 74 61 62 6c 65 73 20 69 73 20 4f 50 5f 49  r tables is OP_I
29e90 6e 73 65 72 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f  nsert..*/.case O
29ea0 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 3a 20  P_SorterInsert: 
29eb0 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a        /* in2 */.
29ec0 63 61 73 65 20 4f 50 5f 49 64 78 49 6e 73 65 72  case OP_IdxInser
29ed0 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69  t: {        /* i
29ee0 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  n2 */.  VdbeCurs
29ef0 6f 72 20 2a 70 43 3b 0a 20 20 42 74 72 65 65 50  or *pC;.  BtreeP
29f00 61 79 6c 6f 61 64 20 78 3b 0a 0a 20 20 61 73 73  ayload x;..  ass
29f10 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
29f20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
29f30 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
29f40 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
29f50 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
29f60 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
29f70 69 73 53 6f 72 74 65 72 28 70 43 29 3d 3d 28 70  isSorter(pC)==(p
29f80 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53  Op->opcode==OP_S
29f90 6f 72 74 65 72 49 6e 73 65 72 74 29 20 29 3b 0a  orterInsert) );.
29fa0 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
29fb0 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72  Op->p2];.  asser
29fc0 74 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26  t( pIn2->flags &
29fd0 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 69   MEM_Blob );.  i
29fe0 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  f( pOp->p5 & OPF
29ff0 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d  LAG_NCHANGE ) p-
2a000 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 61 73  >nChange++;.  as
2a010 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
2a020 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
2a030 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  E || pOp->opcode
2a040 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72  ==OP_SorterInser
2a050 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  t );.  assert( p
2a060 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b  C->isTable==0 );
2a070 0a 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c  .  rc = ExpandBl
2a080 6f 62 28 70 49 6e 32 29 3b 0a 20 20 69 66 28 20  ob(pIn2);.  if( 
2a090 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
2a0a0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
2a0b0 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
2a0c0 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74  =OP_SorterInsert
2a0d0 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
2a0e0 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 57 72  ite3VdbeSorterWr
2a0f0 69 74 65 28 70 43 2c 20 70 49 6e 32 29 3b 0a 20  ite(pC, pIn2);. 
2a100 20 7d 65 6c 73 65 7b 0a 20 20 20 20 78 2e 6e 4b   }else{.    x.nK
2a110 65 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20  ey = pIn2->n;.  
2a120 20 20 78 2e 70 4b 65 79 20 3d 20 70 49 6e 32 2d    x.pKey = pIn2-
2a130 3e 7a 3b 0a 20 20 20 20 78 2e 6e 44 61 74 61 20  >z;.    x.nData 
2a140 3d 20 30 3b 0a 20 20 20 20 78 2e 6e 5a 65 72 6f  = 0;.    x.nZero
2a150 20 3d 20 30 3b 0a 20 20 20 20 78 2e 70 44 61 74   = 0;.    x.pDat
2a160 61 20 3d 20 30 3b 0a 20 20 20 20 72 63 20 3d 20  a = 0;.    rc = 
2a170 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 73 65  sqlite3BtreeInse
2a180 72 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  rt(pC->uc.pCurso
2a190 72 2c 20 26 78 2c 20 70 4f 70 2d 3e 70 33 2c 20  r, &x, pOp->p3, 
2a1a0 0a 20 20 20 20 20 20 20 20 28 28 70 4f 70 2d 3e  .        ((pOp->
2a1b0 70 35 20 26 20 4f 50 46 4c 41 47 5f 55 53 45 53  p5 & OPFLAG_USES
2a1c0 45 45 4b 52 45 53 55 4c 54 29 20 3f 20 70 43 2d  EEKRESULT) ? pC-
2a1d0 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a 20 30 29  >seekResult : 0)
2a1e0 0a 20 20 20 20 20 20 20 20 29 3b 0a 20 20 20 20  .        );.    
2a1f0 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65  assert( pC->defe
2a200 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
2a210 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
2a220 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
2a230 4c 45 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63  LE;.  }.  if( rc
2a240 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
2a250 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65  _to_error;.  bre
2a260 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2a270 3a 20 49 64 78 44 65 6c 65 74 65 20 50 31 20 50  : IdxDelete P1 P
2a280 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
2a290 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 32 40 50  psis: key=r[P2@P
2a2a0 33 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6e  3].**.** The con
2a2b0 74 65 6e 74 20 6f 66 20 50 33 20 72 65 67 69 73  tent of P3 regis
2a2c0 74 65 72 73 20 73 74 61 72 74 69 6e 67 20 61 74  ters starting at
2a2d0 20 72 65 67 69 73 74 65 72 20 50 32 20 66 6f 72   register P2 for
2a2e0 6d 0a 2a 2a 20 61 6e 20 75 6e 70 61 63 6b 65 64  m.** an unpacked
2a2f0 20 69 6e 64 65 78 20 6b 65 79 2e 20 54 68 69 73   index key. This
2a300 20 6f 70 63 6f 64 65 20 72 65 6d 6f 76 65 73 20   opcode removes 
2a310 74 68 61 74 20 65 6e 74 72 79 20 66 72 6f 6d 20  that entry from 
2a320 74 68 65 20 0a 2a 2a 20 69 6e 64 65 78 20 6f 70  the .** index op
2a330 65 6e 65 64 20 62 79 20 63 75 72 73 6f 72 20 50  ened by cursor P
2a340 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64  1..*/.case OP_Id
2a350 78 44 65 6c 65 74 65 3a 20 7b 0a 20 20 56 64 62  xDelete: {.  Vdb
2a360 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
2a370 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
2a380 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70    int res;.  Unp
2a390 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a  ackedRecord r;..
2a3a0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2a3b0 33 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  3>0 );.  assert(
2a3c0 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f   pOp->p2>0 && pO
2a3d0 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33 3c 3d 28  p->p2+pOp->p3<=(
2a3e0 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
2a3f0 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 61  Cursor)+1 );.  a
2a400 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
2a410 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
2a420 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
2a430 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
2a440 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2a450 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
2a460 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
2a470 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
2a480 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75  .  pCrsr = pC->u
2a490 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73  c.pCursor;.  ass
2a4a0 65 72 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b  ert( pCrsr!=0 );
2a4b0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2a4c0 70 35 3d 3d 30 20 29 3b 0a 20 20 72 2e 70 4b 65  p5==0 );.  r.pKe
2a4d0 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79  yInfo = pC->pKey
2a4e0 49 6e 66 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c 64  Info;.  r.nField
2a4f0 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 33 3b   = (u16)pOp->p3;
2a500 0a 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20  .  r.default_rc 
2a510 3d 20 30 3b 0a 20 20 72 2e 61 4d 65 6d 20 3d 20  = 0;.  r.aMem = 
2a520 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
2a530 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
2a540 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65  reeMovetoUnpacke
2a550 64 28 70 43 72 73 72 2c 20 26 72 2c 20 30 2c 20  d(pCrsr, &r, 0, 
2a560 30 2c 20 26 72 65 73 29 3b 0a 20 20 69 66 28 20  0, &res);.  if( 
2a570 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
2a580 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
2a590 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20  if( res==0 ){.  
2a5a0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
2a5b0 72 65 65 44 65 6c 65 74 65 28 70 43 72 73 72 2c  reeDelete(pCrsr,
2a5c0 20 42 54 52 45 45 5f 41 55 58 44 45 4c 45 54 45   BTREE_AUXDELETE
2a5d0 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20  );.    if( rc ) 
2a5e0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
2a5f0 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 61  o_error;.  }.  a
2a600 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
2a610 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
2a620 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
2a630 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
2a640 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2a650 4f 70 63 6f 64 65 3a 20 53 65 65 6b 20 50 31 20  Opcode: Seek P1 
2a660 2a 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  * P3 P4 *.** Syn
2a670 6f 70 73 69 73 3a 20 4d 6f 76 65 20 50 33 20 74  opsis: Move P3 t
2a680 6f 20 50 31 2e 72 6f 77 69 64 0a 2a 2a 0a 2a 2a  o P1.rowid.**.**
2a690 20 50 31 20 69 73 20 61 6e 20 6f 70 65 6e 20 69   P1 is an open i
2a6a0 6e 64 65 78 20 63 75 72 73 6f 72 20 61 6e 64 20  ndex cursor and 
2a6b0 50 33 20 69 73 20 61 20 63 75 72 73 6f 72 20 6f  P3 is a cursor o
2a6c0 6e 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  n the correspond
2a6d0 69 6e 67 0a 2a 2a 20 74 61 62 6c 65 2e 20 20 54  ing.** table.  T
2a6e0 68 69 73 20 6f 70 63 6f 64 65 20 64 6f 65 73 20  his opcode does 
2a6f0 61 20 64 65 66 65 72 72 65 64 20 73 65 65 6b 20  a deferred seek 
2a700 6f 66 20 74 68 65 20 50 33 20 74 61 62 6c 65 20  of the P3 table 
2a710 63 75 72 73 6f 72 0a 2a 2a 20 74 6f 20 74 68 65  cursor.** to the
2a720 20 72 6f 77 20 74 68 61 74 20 63 6f 72 72 65 73   row that corres
2a730 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 63 75 72  ponds to the cur
2a740 72 65 6e 74 20 72 6f 77 20 6f 66 20 50 31 2e 0a  rent row of P1..
2a750 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61 20  **.** This is a 
2a760 64 65 66 65 72 72 65 64 20 73 65 65 6b 2e 20 20  deferred seek.  
2a770 4e 6f 74 68 69 6e 67 20 61 63 74 75 61 6c 6c 79  Nothing actually
2a780 20 68 61 70 70 65 6e 73 20 75 6e 74 69 6c 0a 2a   happens until.*
2a790 2a 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  * the cursor is 
2a7a0 75 73 65 64 20 74 6f 20 72 65 61 64 20 61 20 72  used to read a r
2a7b0 65 63 6f 72 64 2e 20 20 54 68 61 74 20 77 61 79  ecord.  That way
2a7c0 2c 20 69 66 20 6e 6f 20 72 65 61 64 73 0a 2a 2a  , if no reads.**
2a7d0 20 6f 63 63 75 72 2c 20 6e 6f 20 75 6e 6e 65 63   occur, no unnec
2a7e0 65 73 73 61 72 79 20 49 2f 4f 20 68 61 70 70 65  essary I/O happe
2a7f0 6e 73 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79  ns..**.** P4 may
2a800 20 62 65 20 61 6e 20 61 72 72 61 79 20 6f 66 20   be an array of 
2a810 69 6e 74 65 67 65 72 73 20 28 74 79 70 65 20 50  integers (type P
2a820 34 5f 49 4e 54 41 52 52 41 59 29 20 63 6f 6e 74  4_INTARRAY) cont
2a830 61 69 6e 69 6e 67 0a 2a 2a 20 6f 6e 65 20 65 6e  aining.** one en
2a840 74 72 79 20 66 6f 72 20 65 61 63 68 20 63 6f 6c  try for each col
2a850 75 6d 6e 20 69 6e 20 74 68 65 20 50 33 20 74 61  umn in the P3 ta
2a860 62 6c 65 2e 20 20 49 66 20 61 72 72 61 79 20 65  ble.  If array e
2a870 6e 74 72 79 20 61 28 69 29 0a 2a 2a 20 69 73 20  ntry a(i).** is 
2a880 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 72  non-zero, then r
2a890 65 61 64 69 6e 67 20 63 6f 6c 75 6d 6e 20 61 28  eading column a(
2a8a0 69 29 2d 31 20 66 72 6f 6d 20 63 75 72 73 6f 72  i)-1 from cursor
2a8b0 20 50 33 20 69 73 20 0a 2a 2a 20 65 71 75 69 76   P3 is .** equiv
2a8c0 61 6c 65 6e 74 20 74 6f 20 70 65 72 66 6f 72 6d  alent to perform
2a8d0 69 6e 67 20 74 68 65 20 64 65 66 65 72 72 65 64  ing the deferred
2a8e0 20 73 65 65 6b 20 61 6e 64 20 74 68 65 6e 20 72   seek and then r
2a8f0 65 61 64 69 6e 67 20 63 6f 6c 75 6d 6e 20 69 20  eading column i 
2a900 0a 2a 2a 20 66 72 6f 6d 20 50 31 2e 20 20 54 68  .** from P1.  Th
2a910 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69  is information i
2a920 73 20 73 74 6f 72 65 64 20 69 6e 20 50 33 20 61  s stored in P3 a
2a930 6e 64 20 75 73 65 64 20 74 6f 20 72 65 64 69 72  nd used to redir
2a940 65 63 74 0a 2a 2a 20 72 65 61 64 73 20 61 67 61  ect.** reads aga
2a950 69 6e 73 74 20 50 33 20 6f 76 65 72 20 74 6f 20  inst P3 over to 
2a960 50 31 2c 20 74 68 75 73 20 70 6f 73 73 69 62 6c  P1, thus possibl
2a970 79 20 61 76 6f 69 64 69 6e 67 20 74 68 65 20 6e  y avoiding the n
2a980 65 65 64 20 74 6f 0a 2a 2a 20 73 65 65 6b 20 61  eed to.** seek a
2a990 6e 64 20 72 65 61 64 20 63 75 72 73 6f 72 20 50  nd read cursor P
2a9a0 33 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  3..*/./* Opcode:
2a9b0 20 49 64 78 52 6f 77 69 64 20 50 31 20 50 32 20   IdxRowid P1 P2 
2a9c0 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
2a9d0 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a  s: r[P2]=rowid.*
2a9e0 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20  *.** Write into 
2a9f0 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 20 69  register P2 an i
2aa00 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73 20  nteger which is 
2aa10 74 68 65 20 6c 61 73 74 20 65 6e 74 72 79 20 69  the last entry i
2aa20 6e 20 74 68 65 20 72 65 63 6f 72 64 20 61 74 0a  n the record at.
2aa30 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  ** the end of th
2aa40 65 20 69 6e 64 65 78 20 6b 65 79 20 70 6f 69 6e  e index key poin
2aa50 74 65 64 20 74 6f 20 62 79 20 63 75 72 73 6f 72  ted to by cursor
2aa60 20 50 31 2e 20 20 54 68 69 73 20 69 6e 74 65 67   P1.  This integ
2aa70 65 72 20 73 68 6f 75 6c 64 20 62 65 0a 2a 2a 20  er should be.** 
2aa80 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65  the rowid of the
2aa90 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74 6f 20   table entry to 
2aaa0 77 68 69 63 68 20 74 68 69 73 20 69 6e 64 65 78  which this index
2aab0 20 65 6e 74 72 79 20 70 6f 69 6e 74 73 2e 0a 2a   entry points..*
2aac0 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 52  *.** See also: R
2aad0 6f 77 69 64 2c 20 4d 61 6b 65 52 65 63 6f 72 64  owid, MakeRecord
2aae0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65  ..*/.case OP_See
2aaf0 6b 3a 0a 63 61 73 65 20 4f 50 5f 49 64 78 52 6f  k:.case OP_IdxRo
2ab00 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20  wid: {          
2ab10 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
2ab20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
2ab30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ab40 2f 2a 20 54 68 65 20 50 31 20 69 6e 64 65 78 20  /* The P1 index 
2ab50 63 75 72 73 6f 72 20 2a 2f 0a 20 20 56 64 62 65  cursor */.  Vdbe
2ab60 43 75 72 73 6f 72 20 2a 70 54 61 62 43 75 72 3b  Cursor *pTabCur;
2ab70 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
2ab80 65 20 50 32 20 74 61 62 6c 65 20 63 75 72 73 6f  e P2 table curso
2ab90 72 20 28 4f 50 5f 53 65 65 6b 20 6f 6e 6c 79 29  r (OP_Seek only)
2aba0 20 2a 2f 0a 20 20 69 36 34 20 72 6f 77 69 64 3b   */.  i64 rowid;
2abb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2abc0 20 20 20 20 20 2f 2a 20 52 6f 77 69 64 20 74 68       /* Rowid th
2abd0 61 74 20 50 31 20 63 75 72 72 65 6e 74 20 70 6f  at P1 current po
2abe0 69 6e 74 73 20 74 6f 20 2a 2f 0a 0a 20 20 61 73  ints to */..  as
2abf0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
2ac00 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
2ac10 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
2ac20 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
2ac30 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
2ac40 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
2ac50 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
2ac60 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
2ac70 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63    assert( pC->uc
2ac80 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  .pCursor!=0 );. 
2ac90 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
2aca0 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 61 73 73  able==0 );.  ass
2acb0 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
2acc0 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
2acd0 61 73 73 65 72 74 28 20 21 70 43 2d 3e 6e 75 6c  assert( !pC->nul
2ace0 6c 52 6f 77 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  lRow || pOp->opc
2acf0 6f 64 65 3d 3d 4f 50 5f 49 64 78 52 6f 77 69 64  ode==OP_IdxRowid
2ad00 20 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 49 64   );..  /* The Id
2ad10 78 52 6f 77 69 64 20 61 6e 64 20 53 65 65 6b 20  xRowid and Seek 
2ad20 6f 70 63 6f 64 65 73 20 61 72 65 20 63 6f 6d 62  opcodes are comb
2ad30 69 6e 65 64 20 62 65 63 61 75 73 65 20 6f 66 20  ined because of 
2ad40 74 68 65 20 63 6f 6d 6d 6f 6e 61 6c 69 74 79 0a  the commonality.
2ad50 20 20 2a 2a 20 6f 66 20 73 71 6c 69 74 65 33 56    ** of sqlite3V
2ad60 64 62 65 43 75 72 73 6f 72 52 65 73 74 6f 72 65  dbeCursorRestore
2ad70 28 29 20 61 6e 64 20 73 71 6c 69 74 65 33 56 64  () and sqlite3Vd
2ad80 62 65 49 64 78 52 6f 77 69 64 28 29 2e 20 2a 2f  beIdxRowid(). */
2ad90 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
2ada0 64 62 65 43 75 72 73 6f 72 52 65 73 74 6f 72 65  dbeCursorRestore
2adb0 28 70 43 29 3b 0a 0a 20 20 2f 2a 20 73 71 6c 69  (pC);..  /* sqli
2adc0 74 65 33 56 62 65 43 75 72 73 6f 72 52 65 73 74  te3VbeCursorRest
2add0 6f 72 65 28 29 20 63 61 6e 20 6f 6e 6c 79 20 66  ore() can only f
2ade0 61 69 6c 20 69 66 20 74 68 65 20 72 65 63 6f 72  ail if the recor
2adf0 64 20 68 61 73 20 62 65 65 6e 20 64 65 6c 65 74  d has been delet
2ae00 65 64 0a 20 20 2a 2a 20 6f 75 74 20 66 72 6f 6d  ed.  ** out from
2ae10 20 75 6e 64 65 72 20 74 68 65 20 63 75 72 73 6f   under the curso
2ae20 72 2e 20 20 54 68 61 74 20 77 69 6c 6c 20 6e 65  r.  That will ne
2ae30 76 65 72 20 68 61 70 70 65 6e 73 20 66 6f 72 20  ver happens for 
2ae40 61 6e 20 49 64 78 52 6f 77 69 64 0a 20 20 2a 2a  an IdxRowid.  **
2ae50 20 6f 72 20 53 65 65 6b 20 6f 70 63 6f 64 65 20   or Seek opcode 
2ae60 2a 2f 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72  */.  if( NEVER(r
2ae70 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 20  c!=SQLITE_OK) ) 
2ae80 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
2ae90 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 69 66 28 20  o_error;..  if( 
2aea0 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a  !pC->nullRow ){.
2aeb0 20 20 20 20 72 6f 77 69 64 20 3d 20 30 3b 20 20      rowid = 0;  
2aec0 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20  /* Not needed.  
2aed0 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 69 6c  Only used to sil
2aee0 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20  ence a warning. 
2aef0 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  */.    rc = sqli
2af00 74 65 33 56 64 62 65 49 64 78 52 6f 77 69 64 28  te3VdbeIdxRowid(
2af10 64 62 2c 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  db, pC->uc.pCurs
2af20 6f 72 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20 20  or, &rowid);.   
2af30 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
2af40 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  OK ){.      goto
2af50 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2af60 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  ror;.    }.    i
2af70 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
2af80 4f 50 5f 53 65 65 6b 20 29 7b 0a 20 20 20 20 20  OP_Seek ){.     
2af90 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
2afa0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 70  >=0 && pOp->p3<p
2afb0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 20  ->nCursor );.   
2afc0 20 20 20 70 54 61 62 43 75 72 20 3d 20 70 2d 3e     pTabCur = p->
2afd0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  apCsr[pOp->p3];.
2afe0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 54        assert( pT
2aff0 61 62 43 75 72 21 3d 30 20 29 3b 0a 20 20 20 20  abCur!=0 );.    
2b000 20 20 61 73 73 65 72 74 28 20 70 54 61 62 43 75    assert( pTabCu
2b010 72 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  r->eCurType==CUR
2b020 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
2b030 20 20 20 20 61 73 73 65 72 74 28 20 70 54 61 62      assert( pTab
2b040 43 75 72 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21  Cur->uc.pCursor!
2b050 3d 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  =0 );.      asse
2b060 72 74 28 20 70 54 61 62 43 75 72 2d 3e 69 73 54  rt( pTabCur->isT
2b070 61 62 6c 65 20 29 3b 0a 20 20 20 20 20 20 70 54  able );.      pT
2b080 61 62 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  abCur->nullRow =
2b090 20 30 3b 0a 20 20 20 20 20 20 70 54 61 62 43 75   0;.      pTabCu
2b0a0 72 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20  r->movetoTarget 
2b0b0 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 20 20 70  = rowid;.      p
2b0c0 54 61 62 43 75 72 2d 3e 64 65 66 65 72 72 65 64  TabCur->deferred
2b0d0 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a 20 20 20 20  Moveto = 1;.    
2b0e0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2b0f0 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52 52  4type==P4_INTARR
2b100 41 59 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 61 69  AY || pOp->p4.ai
2b110 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 70 54 61  ==0 );.      pTa
2b120 62 43 75 72 2d 3e 61 41 6c 74 4d 61 70 20 3d 20  bCur->aAltMap = 
2b130 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20 20 20 20  pOp->p4.ai;.    
2b140 20 20 70 54 61 62 43 75 72 2d 3e 70 41 6c 74 43    pTabCur->pAltC
2b150 75 72 73 6f 72 20 3d 20 70 43 3b 0a 20 20 20 20  ursor = pC;.    
2b160 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 4f 75  }else{.      pOu
2b170 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
2b180 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 20 20  se(p, pOp);.    
2b190 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 6f    pOut->u.i = ro
2b1a0 77 69 64 3b 0a 20 20 20 20 20 20 70 4f 75 74 2d  wid;.      pOut-
2b1b0 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
2b1c0 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
2b1d0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
2b1e0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
2b1f0 52 6f 77 69 64 20 29 3b 0a 20 20 20 20 73 71 6c  Rowid );.    sql
2b200 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
2b210 6c 6c 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  ll(&aMem[pOp->p2
2b220 5d 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  ]);.  }.  break;
2b230 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
2b240 64 78 47 45 20 50 31 20 50 32 20 50 33 20 50 34  dxGE P1 P2 P3 P4
2b250 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
2b260 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
2b270 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73  .** The P4 regis
2b280 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e  ter values begin
2b290 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72  ning with P3 for
2b2a0 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  m an unpacked in
2b2b0 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74  dex .** key that
2b2c0 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41   omits the PRIMA
2b2d0 52 59 20 4b 45 59 2e 20 20 43 6f 6d 70 61 72 65  RY KEY.  Compare
2b2e0 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20   this key value 
2b2f0 61 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65  against the inde
2b300 78 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73  x .** that P1 is
2b310 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
2b320 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67  ing to, ignoring
2b330 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
2b340 20 6f 72 20 52 4f 57 49 44 20 0a 2a 2a 20 66 69   or ROWID .** fi
2b350 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64 2e  elds at the end.
2b360 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31  .**.** If the P1
2b370 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20   index entry is 
2b380 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20  greater than or 
2b390 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79  equal to the key
2b3a0 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a   value.** then j
2b3b0 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74 68 65  ump to P2.  Othe
2b3c0 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75  rwise fall throu
2b3d0 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
2b3e0 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f  nstruction..*/./
2b3f0 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 47 54 20  * Opcode: IdxGT 
2b400 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
2b410 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
2b420 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54  r[P3@P4].**.** T
2b430 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76  he P4 register v
2b440 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20  alues beginning 
2b450 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20  with P3 form an 
2b460 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a  unpacked index .
2b470 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74  ** key that omit
2b480 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  s the PRIMARY KE
2b490 59 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73  Y.  Compare this
2b4a0 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e   key value again
2b4b0 73 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a  st the index .**
2b4c0 20 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72   that P1 is curr
2b4d0 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74  ently pointing t
2b4e0 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20  o, ignoring the 
2b4f0 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52  PRIMARY KEY or R
2b500 4f 57 49 44 20 0a 2a 2a 20 66 69 65 6c 64 73 20  OWID .** fields 
2b510 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2a 0a 2a  at the end..**.*
2b520 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65  * If the P1 inde
2b530 78 20 65 6e 74 72 79 20 69 73 20 67 72 65 61 74  x entry is great
2b540 65 72 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20  er than the key 
2b550 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75  value.** then ju
2b560 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74 68 65 72  mp to P2.  Other
2b570 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67  wise fall throug
2b580 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
2b590 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  struction..*/./*
2b5a0 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c 54 20 50   Opcode: IdxLT P
2b5b0 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
2b5c0 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
2b5d0 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68  [P3@P4].**.** Th
2b5e0 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61  e P4 register va
2b5f0 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77  lues beginning w
2b600 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75  ith P3 form an u
2b610 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a  npacked index .*
2b620 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73  * key that omits
2b630 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
2b640 20 6f 72 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70   or ROWID.  Comp
2b650 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c  are this key val
2b660 75 65 20 61 67 61 69 6e 73 74 0a 2a 2a 20 74 68  ue against.** th
2b670 65 20 69 6e 64 65 78 20 74 68 61 74 20 50 31 20  e index that P1 
2b680 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
2b690 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69  nting to, ignori
2b6a0 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  ng the PRIMARY K
2b6b0 45 59 20 6f 72 0a 2a 2a 20 52 4f 57 49 44 20 6f  EY or.** ROWID o
2b6c0 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a  n the P1 index..
2b6d0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
2b6e0 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 6c  index entry is l
2b6f0 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79  ess than the key
2b700 20 76 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70   value then jump
2b710 20 74 6f 20 50 32 2e 0a 2a 2a 20 4f 74 68 65 72   to P2..** Other
2b720 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67  wise fall throug
2b730 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
2b740 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  struction..*/./*
2b750 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c 45 20 50   Opcode: IdxLE P
2b760 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
2b770 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
2b780 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68  [P3@P4].**.** Th
2b790 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61  e P4 register va
2b7a0 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77  lues beginning w
2b7b0 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75  ith P3 form an u
2b7c0 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a  npacked index .*
2b7d0 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73  * key that omits
2b7e0 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
2b7f0 20 6f 72 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70   or ROWID.  Comp
2b800 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c  are this key val
2b810 75 65 20 61 67 61 69 6e 73 74 0a 2a 2a 20 74 68  ue against.** th
2b820 65 20 69 6e 64 65 78 20 74 68 61 74 20 50 31 20  e index that P1 
2b830 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
2b840 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69  nting to, ignori
2b850 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  ng the PRIMARY K
2b860 45 59 20 6f 72 0a 2a 2a 20 52 4f 57 49 44 20 6f  EY or.** ROWID o
2b870 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a  n the P1 index..
2b880 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
2b890 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 6c  index entry is l
2b8a0 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ess than or equa
2b8b0 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c  l to the key val
2b8c0 75 65 20 74 68 65 6e 20 6a 75 6d 70 0a 2a 2a 20  ue then jump.** 
2b8d0 74 6f 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65  to P2. Otherwise
2b8e0 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
2b8f0 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
2b900 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
2b910 50 5f 49 64 78 4c 45 3a 20 20 20 20 20 20 20 20  P_IdxLE:        
2b920 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73    /* jump */.cas
2b930 65 20 4f 50 5f 49 64 78 47 54 3a 20 20 20 20 20  e OP_IdxGT:     
2b940 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
2b950 63 61 73 65 20 4f 50 5f 49 64 78 4c 54 3a 20 20  case OP_IdxLT:  
2b960 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
2b970 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 47 45  */.case OP_IdxGE
2b980 3a 20 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75  :  {       /* ju
2b990 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  mp */.  VdbeCurs
2b9a0 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65  or *pC;.  int re
2b9b0 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63  s;.  UnpackedRec
2b9c0 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74  ord r;..  assert
2b9d0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
2b9e0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
2b9f0 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
2ba00 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
2ba10 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
2ba20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
2ba30 3e 69 73 4f 72 64 65 72 65 64 20 29 3b 0a 20 20  >isOrdered );.  
2ba40 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
2ba50 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
2ba60 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28  REE );.  assert(
2ba70 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21   pC->uc.pCursor!
2ba80 3d 30 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  =0);.  assert( p
2ba90 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
2baa0 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  o==0 );.  assert
2bab0 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20  ( pOp->p5==0 || 
2bac0 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20  pOp->p5==1 );.  
2bad0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
2bae0 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b  ype==P4_INT32 );
2baf0 0a 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20  .  r.pKeyInfo = 
2bb00 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  pC->pKeyInfo;.  
2bb10 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29  r.nField = (u16)
2bb20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 69 66 28  pOp->p4.i;.  if(
2bb30 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3c 4f 50 5f   pOp->opcode<OP_
2bb40 49 64 78 4c 54 20 29 7b 0a 20 20 20 20 61 73 73  IdxLT ){.    ass
2bb50 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
2bb60 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c 7c 20 70 4f  ==OP_IdxLE || pO
2bb70 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  p->opcode==OP_Id
2bb80 78 47 54 20 29 3b 0a 20 20 20 20 72 2e 64 65 66  xGT );.    r.def
2bb90 61 75 6c 74 5f 72 63 20 3d 20 2d 31 3b 0a 20 20  ault_rc = -1;.  
2bba0 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
2bbb0 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
2bbc0 4f 50 5f 49 64 78 47 45 20 7c 7c 20 70 4f 70 2d  OP_IdxGE || pOp-
2bbd0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c  >opcode==OP_IdxL
2bbe0 54 20 29 3b 0a 20 20 20 20 72 2e 64 65 66 61 75  T );.    r.defau
2bbf0 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20 7d 0a 20  lt_rc = 0;.  }. 
2bc00 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b   r.aMem = &aMem[
2bc10 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66  pOp->p3];.#ifdef
2bc20 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
2bc30 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30  { int i; for(i=0
2bc40 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b  ; i<r.nField; i+
2bc50 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73  +) assert( memIs
2bc60 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d  Valid(&r.aMem[i]
2bc70 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20  ) ); }.#endif.  
2bc80 72 65 73 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74  res = 0;  /* Not
2bc90 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75   needed.  Only u
2bca0 73 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61  sed to silence a
2bcb0 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72   warning. */.  r
2bcc0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  c = sqlite3VdbeI
2bcd0 64 78 4b 65 79 43 6f 6d 70 61 72 65 28 64 62 2c  dxKeyCompare(db,
2bce0 20 70 43 2c 20 26 72 2c 20 26 72 65 73 29 3b 0a   pC, &r, &res);.
2bcf0 20 20 61 73 73 65 72 74 28 20 28 4f 50 5f 49 64    assert( (OP_Id
2bd00 78 4c 45 26 31 29 3d 3d 28 4f 50 5f 49 64 78 4c  xLE&1)==(OP_IdxL
2bd10 54 26 31 29 20 26 26 20 28 4f 50 5f 49 64 78 47  T&1) && (OP_IdxG
2bd20 45 26 31 29 3d 3d 28 4f 50 5f 49 64 78 47 54 26  E&1)==(OP_IdxGT&
2bd30 31 29 20 29 3b 0a 20 20 69 66 28 20 28 70 4f 70  1) );.  if( (pOp
2bd40 2d 3e 6f 70 63 6f 64 65 26 31 29 3d 3d 28 4f 50  ->opcode&1)==(OP
2bd50 5f 49 64 78 4c 54 26 31 29 20 29 7b 0a 20 20 20  _IdxLT&1) ){.   
2bd60 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
2bd70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c  code==OP_IdxLE |
2bd80 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
2bd90 50 5f 49 64 78 4c 54 20 29 3b 0a 20 20 20 20 72  P_IdxLT );.    r
2bda0 65 73 20 3d 20 2d 72 65 73 3b 0a 20 20 7d 65 6c  es = -res;.  }el
2bdb0 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
2bdc0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
2bdd0 49 64 78 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70  IdxGE || pOp->op
2bde0 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29  code==OP_IdxGT )
2bdf0 3b 0a 20 20 20 20 72 65 73 2b 2b 3b 0a 20 20 7d  ;.    res++;.  }
2be00 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
2be10 65 6e 28 72 65 73 3e 30 2c 32 29 3b 0a 20 20 69  en(res>0,2);.  i
2be20 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
2be30 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
2be40 0a 20 20 69 66 28 20 72 65 73 3e 30 20 29 20 67  .  if( res>0 ) g
2be50 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
2be60 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2be70 70 63 6f 64 65 3a 20 44 65 73 74 72 6f 79 20 50  pcode: Destroy P
2be80 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
2be90 2a 20 44 65 6c 65 74 65 20 61 6e 20 65 6e 74 69  * Delete an enti
2bea0 72 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  re database tabl
2beb0 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65  e or index whose
2bec0 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 74 68   root page in th
2bed0 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69  e database.** fi
2bee0 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79 20 50  le is given by P
2bef0 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62  1..**.** The tab
2bf00 6c 65 20 62 65 69 6e 67 20 64 65 73 74 72 6f 79  le being destroy
2bf10 65 64 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69  ed is in the mai
2bf20 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
2bf30 69 66 20 50 33 3d 3d 30 2e 20 20 49 66 0a 2a 2a  if P3==0.  If.**
2bf40 20 50 33 3d 3d 31 20 74 68 65 6e 20 74 68 65 20   P3==1 then the 
2bf50 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61  table to be clea
2bf60 72 20 69 73 20 69 6e 20 74 68 65 20 61 75 78 69  r is in the auxi
2bf70 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66  liary database f
2bf80 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75  ile.** that is u
2bf90 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62  sed to store tab
2bfa0 6c 65 73 20 63 72 65 61 74 65 20 75 73 69 6e 67  les create using
2bfb0 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52   CREATE TEMPORAR
2bfc0 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49  Y TABLE..**.** I
2bfd0 66 20 41 55 54 4f 56 41 43 55 55 4d 20 69 73 20  f AUTOVACUUM is 
2bfe0 65 6e 61 62 6c 65 64 20 74 68 65 6e 20 69 74 20  enabled then it 
2bff0 69 73 20 70 6f 73 73 69 62 6c 65 20 74 68 61 74  is possible that
2c000 20 61 6e 6f 74 68 65 72 20 72 6f 6f 74 20 70 61   another root pa
2c010 67 65 0a 2a 2a 20 6d 69 67 68 74 20 62 65 20 6d  ge.** might be m
2c020 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20 6e 65  oved into the ne
2c030 77 6c 79 20 64 65 6c 65 74 65 64 20 72 6f 6f 74  wly deleted root
2c040 20 70 61 67 65 20 69 6e 20 6f 72 64 65 72 20 74   page in order t
2c050 6f 20 6b 65 65 70 20 61 6c 6c 0a 2a 2a 20 72 6f  o keep all.** ro
2c060 6f 74 20 70 61 67 65 73 20 63 6f 6e 74 69 67 75  ot pages contigu
2c070 6f 75 73 20 61 74 20 74 68 65 20 62 65 67 69 6e  ous at the begin
2c080 6e 69 6e 67 20 6f 66 20 74 68 65 20 64 61 74 61  ning of the data
2c090 62 61 73 65 2e 20 20 54 68 65 20 66 6f 72 6d 65  base.  The forme
2c0a0 72 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20 74 68  r.** value of th
2c0b0 65 20 72 6f 6f 74 20 70 61 67 65 20 74 68 61 74  e root page that
2c0c0 20 6d 6f 76 65 64 20 2d 20 69 74 73 20 76 61 6c   moved - its val
2c0d0 75 65 20 62 65 66 6f 72 65 20 74 68 65 20 6d 6f  ue before the mo
2c0e0 76 65 20 6f 63 63 75 72 72 65 64 20 2d 0a 2a 2a  ve occurred -.**
2c0f0 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
2c100 67 69 73 74 65 72 20 50 32 2e 20 20 49 66 20 6e  gister P2.  If n
2c110 6f 20 70 61 67 65 20 0a 2a 2a 20 6d 6f 76 65 6d  o page .** movem
2c120 65 6e 74 20 77 61 73 20 72 65 71 75 69 72 65 64  ent was required
2c130 20 28 62 65 63 61 75 73 65 20 74 68 65 20 74 61   (because the ta
2c140 62 6c 65 20 62 65 69 6e 67 20 64 72 6f 70 70 65  ble being droppe
2c150 64 20 77 61 73 20 61 6c 72 65 61 64 79 20 0a 2a  d was already .*
2c160 2a 20 74 68 65 20 6c 61 73 74 20 6f 6e 65 20 69  * the last one i
2c170 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 29 20  n the database) 
2c180 74 68 65 6e 20 61 20 7a 65 72 6f 20 69 73 20 73  then a zero is s
2c190 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
2c1a0 72 20 50 32 2e 0a 2a 2a 20 49 66 20 41 55 54 4f  r P2..** If AUTO
2c1b0 56 41 43 55 55 4d 20 69 73 20 64 69 73 61 62 6c  VACUUM is disabl
2c1c0 65 64 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 69  ed then a zero i
2c1d0 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
2c1e0 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53  ster P2..**.** S
2c1f0 65 65 20 61 6c 73 6f 3a 20 43 6c 65 61 72 0a 2a  ee also: Clear.*
2c200 2f 0a 63 61 73 65 20 4f 50 5f 44 65 73 74 72 6f  /.case OP_Destro
2c210 79 3a 20 7b 20 20 20 20 20 2f 2a 20 6f 75 74 32  y: {     /* out2
2c220 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 6f 76 65 64   */.  int iMoved
2c230 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 0a 20 20  ;.  int iDb;..  
2c240 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
2c250 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  nly==0 );.  asse
2c260 72 74 28 20 70 4f 70 2d 3e 70 31 3e 31 20 29 3b  rt( pOp->p1>1 );
2c270 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
2c280 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
2c290 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
2c2a0 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 69 66  = MEM_Null;.  if
2c2b0 28 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 20  ( db->nVdbeRead 
2c2c0 3e 20 64 62 2d 3e 6e 56 44 65 73 74 72 6f 79 2b  > db->nVDestroy+
2c2d0 31 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51  1 ){.    rc = SQ
2c2e0 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20  LITE_LOCKED;.   
2c2f0 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20   p->errorAction 
2c300 3d 20 4f 45 5f 41 62 6f 72 74 3b 0a 20 20 20 20  = OE_Abort;.    
2c310 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
2c320 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 65 6c 73 65  o_error;.  }else
2c330 7b 0a 20 20 20 20 69 44 62 20 3d 20 70 4f 70 2d  {.    iDb = pOp-
2c340 3e 70 33 3b 0a 20 20 20 20 61 73 73 65 72 74 28  >p3;.    assert(
2c350 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
2c360 74 72 65 65 4d 61 73 6b 2c 20 69 44 62 29 20 29  treeMask, iDb) )
2c370 3b 0a 20 20 20 20 69 4d 6f 76 65 64 20 3d 20 30  ;.    iMoved = 0
2c380 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64  ;  /* Not needed
2c390 2e 20 20 4f 6e 6c 79 20 74 6f 20 73 69 6c 65 6e  .  Only to silen
2c3a0 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f  ce a warning. */
2c3b0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
2c3c0 33 42 74 72 65 65 44 72 6f 70 54 61 62 6c 65 28  3BtreeDropTable(
2c3d0 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74  db->aDb[iDb].pBt
2c3e0 2c 20 70 4f 70 2d 3e 70 31 2c 20 26 69 4d 6f 76  , pOp->p1, &iMov
2c3f0 65 64 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  ed);.    pOut->f
2c400 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
2c410 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
2c420 69 4d 6f 76 65 64 3b 0a 20 20 20 20 69 66 28 20  iMoved;.    if( 
2c430 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
2c440 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 69  due_to_error;.#i
2c450 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2c460 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20 20  T_AUTOVACUUM.   
2c470 20 69 66 28 20 69 4d 6f 76 65 64 21 3d 30 20 29   if( iMoved!=0 )
2c480 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52  {.      sqlite3R
2c490 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 64 62 2c  ootPageMoved(db,
2c4a0 20 69 44 62 2c 20 69 4d 6f 76 65 64 2c 20 70 4f   iDb, iMoved, pO
2c4b0 70 2d 3e 70 31 29 3b 0a 20 20 20 20 20 20 2f 2a  p->p1);.      /*
2c4c0 20 41 6c 6c 20 4f 50 5f 44 65 73 74 72 6f 79 20   All OP_Destroy 
2c4d0 6f 70 65 72 61 74 69 6f 6e 73 20 6f 63 63 75 72  operations occur
2c4e0 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 62 74 72   on the same btr
2c4f0 65 65 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65  ee */.      asse
2c500 72 74 28 20 72 65 73 65 74 53 63 68 65 6d 61 4f  rt( resetSchemaO
2c510 6e 46 61 75 6c 74 3d 3d 30 20 7c 7c 20 72 65 73  nFault==0 || res
2c520 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3d  etSchemaOnFault=
2c530 3d 69 44 62 2b 31 20 29 3b 0a 20 20 20 20 20 20  =iDb+1 );.      
2c540 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75  resetSchemaOnFau
2c550 6c 74 20 3d 20 69 44 62 2b 31 3b 0a 20 20 20 20  lt = iDb+1;.    
2c560 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62  }.#endif.  }.  b
2c570 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2c580 64 65 3a 20 43 6c 65 61 72 20 50 31 20 50 32 20  de: Clear P1 P2 
2c590 50 33 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20  P3.**.** Delete 
2c5a0 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20  all contents of 
2c5b0 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62  the database tab
2c5c0 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73  le or index whos
2c5d0 65 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 69  e root page.** i
2c5e0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
2c5f0 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79 20  ile is given by 
2c600 50 31 2e 20 20 42 75 74 2c 20 75 6e 6c 69 6b 65  P1.  But, unlike
2c610 20 44 65 73 74 72 6f 79 2c 20 64 6f 20 6e 6f 74   Destroy, do not
2c620 0a 2a 2a 20 72 65 6d 6f 76 65 20 74 68 65 20 74  .** remove the t
2c630 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 66 72  able or index fr
2c640 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
2c650 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  file..**.** The 
2c660 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61  table being clea
2c670 72 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e  r is in the main
2c680 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
2c690 66 20 50 32 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20  f P2==0.  If.** 
2c6a0 50 32 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74  P2==1 then the t
2c6b0 61 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72  able to be clear
2c6c0 20 69 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c   is in the auxil
2c6d0 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69  iary database fi
2c6e0 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73  le.** that is us
2c6f0 65 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c  ed to store tabl
2c700 65 73 20 63 72 65 61 74 65 20 75 73 69 6e 67 20  es create using 
2c710 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59  CREATE TEMPORARY
2c720 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66   TABLE..**.** If
2c730 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 69 73   the P3 value is
2c740 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20   non-zero, then 
2c750 74 68 65 20 74 61 62 6c 65 20 72 65 66 65 72 72  the table referr
2c760 65 64 20 74 6f 20 6d 75 73 74 20 62 65 20 61 6e  ed to must be an
2c770 0a 2a 2a 20 69 6e 74 6b 65 79 20 74 61 62 6c 65  .** intkey table
2c780 20 28 61 6e 20 53 51 4c 20 74 61 62 6c 65 2c 20   (an SQL table, 
2c790 6e 6f 74 20 61 6e 20 69 6e 64 65 78 29 2e 20 49  not an index). I
2c7a0 6e 20 74 68 69 73 20 63 61 73 65 20 74 68 65 20  n this case the 
2c7b0 72 6f 77 20 63 68 61 6e 67 65 20 0a 2a 2a 20 63  row change .** c
2c7c0 6f 75 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e  ount is incremen
2c7d0 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65  ted by the numbe
2c7e0 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65  r of rows in the
2c7f0 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65   table being cle
2c800 61 72 65 64 2e 20 0a 2a 2a 20 49 66 20 50 33 20  ared. .** If P3 
2c810 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
2c820 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 76  zero, then the v
2c830 61 6c 75 65 20 73 74 6f 72 65 64 20 69 6e 20 72  alue stored in r
2c840 65 67 69 73 74 65 72 20 50 33 20 69 73 0a 2a 2a  egister P3 is.**
2c850 20 61 6c 73 6f 20 69 6e 63 72 65 6d 65 6e 74 65   also incremente
2c860 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20  d by the number 
2c870 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74  of rows in the t
2c880 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72  able being clear
2c890 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ed..**.** See al
2c8a0 73 6f 3a 20 44 65 73 74 72 6f 79 0a 2a 2f 0a 63  so: Destroy.*/.c
2c8b0 61 73 65 20 4f 50 5f 43 6c 65 61 72 3a 20 7b 0a  ase OP_Clear: {.
2c8c0 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 0a 20    int nChange;. 
2c8d0 0a 20 20 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a  .  nChange = 0;.
2c8e0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
2c8f0 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 73  dOnly==0 );.  as
2c900 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74  sert( DbMaskTest
2c910 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70  (p->btreeMask, p
2c920 4f 70 2d 3e 70 32 29 20 29 3b 0a 20 20 72 63 20  Op->p2) );.  rc 
2c930 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c  = sqlite3BtreeCl
2c940 65 61 72 54 61 62 6c 65 28 0a 20 20 20 20 20 20  earTable(.      
2c950 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 32 5d  db->aDb[pOp->p2]
2c960 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 28  .pBt, pOp->p1, (
2c970 70 4f 70 2d 3e 70 33 20 3f 20 26 6e 43 68 61 6e  pOp->p3 ? &nChan
2c980 67 65 20 3a 20 30 29 0a 20 20 29 3b 0a 20 20 69  ge : 0).  );.  i
2c990 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20  f( pOp->p3 ){.  
2c9a0 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 2b 3d 20    p->nChange += 
2c9b0 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 69 66 28  nChange;.    if(
2c9c0 20 70 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20 20   pOp->p3>0 ){.  
2c9d0 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
2c9e0 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70  sValid(&aMem[pOp
2c9f0 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20  ->p3]) );.      
2ca00 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
2ca10 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  (p, &aMem[pOp->p
2ca20 33 5d 29 3b 0a 20 20 20 20 20 20 61 4d 65 6d 5b  3]);.      aMem[
2ca30 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20 2b 3d 20  pOp->p3].u.i += 
2ca40 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 7d 0a 20  nChange;.    }. 
2ca50 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f   }.  if( rc ) go
2ca60 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
2ca70 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a  error;.  break;.
2ca80 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  }../* Opcode: Re
2ca90 73 65 74 53 6f 72 74 65 72 20 50 31 20 2a 20 2a  setSorter P1 * *
2caa0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74   * *.**.** Delet
2cab0 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 66  e all contents f
2cac0 72 6f 6d 20 74 68 65 20 65 70 68 65 6d 65 72 61  rom the ephemera
2cad0 6c 20 74 61 62 6c 65 20 6f 72 20 73 6f 72 74 65  l table or sorte
2cae0 72 0a 2a 2a 20 74 68 61 74 20 69 73 20 6f 70 65  r.** that is ope
2caf0 6e 20 6f 6e 20 63 75 72 73 6f 72 20 50 31 2e 0a  n on cursor P1..
2cb00 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
2cb10 65 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72  e only works for
2cb20 20 63 75 72 73 6f 72 73 20 75 73 65 64 20 66 6f   cursors used fo
2cb30 72 20 73 6f 72 74 69 6e 67 20 61 6e 64 0a 2a 2a  r sorting and.**
2cb40 20 6f 70 65 6e 65 64 20 77 69 74 68 20 4f 50 5f   opened with OP_
2cb50 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 72  OpenEphemeral or
2cb60 20 4f 50 5f 53 6f 72 74 65 72 4f 70 65 6e 2e 0a   OP_SorterOpen..
2cb70 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65 74  */.case OP_Reset
2cb80 53 6f 72 74 65 72 3a 20 7b 0a 20 20 56 64 62 65  Sorter: {.  Vdbe
2cb90 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 0a 20 20  Cursor *pC;. .  
2cba0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
2cbb0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
2cbc0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
2cbd0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
2cbe0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
2cbf0 70 43 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 69  pC!=0 );.  if( i
2cc00 73 53 6f 72 74 65 72 28 70 43 29 20 29 7b 0a 20  sSorter(pC) ){. 
2cc10 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f     sqlite3VdbeSo
2cc20 72 74 65 72 52 65 73 65 74 28 64 62 2c 20 70 43  rterReset(db, pC
2cc30 2d 3e 75 63 2e 70 53 6f 72 74 65 72 29 3b 0a 20  ->uc.pSorter);. 
2cc40 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
2cc50 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
2cc60 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
2cc70 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
2cc80 43 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c 20 29  C->isEphemeral )
2cc90 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
2cca0 65 33 42 74 72 65 65 43 6c 65 61 72 54 61 62 6c  e3BtreeClearTabl
2ccb0 65 4f 66 43 75 72 73 6f 72 28 70 43 2d 3e 75 63  eOfCursor(pC->uc
2ccc0 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 69  .pCursor);.    i
2ccd0 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
2cce0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
2ccf0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2cd00 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65 61  ./* Opcode: Crea
2cd10 74 65 54 61 62 6c 65 20 50 31 20 50 32 20 2a 20  teTable P1 P2 * 
2cd20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
2cd30 20 72 5b 50 32 5d 3d 72 6f 6f 74 20 69 44 62 3d   r[P2]=root iDb=
2cd40 50 31 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74  P1.**.** Allocat
2cd50 65 20 61 20 6e 65 77 20 74 61 62 6c 65 20 69 6e  e a new table in
2cd60 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
2cd70 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 30  se file if P1==0
2cd80 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75   or in the.** au
2cd90 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
2cda0 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f   file if P1==1 o
2cdb0 72 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64  r in an attached
2cdc0 20 64 61 74 61 62 61 73 65 20 69 66 0a 2a 2a 20   database if.** 
2cdd0 50 31 3e 31 2e 20 20 57 72 69 74 65 20 74 68 65  P1>1.  Write the
2cde0 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65   root page numbe
2cdf0 72 20 6f 66 20 74 68 65 20 6e 65 77 20 74 61 62  r of the new tab
2ce00 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73  le into.** regis
2ce10 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65  ter P2.**.** The
2ce20 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77   difference betw
2ce30 65 65 6e 20 61 20 74 61 62 6c 65 20 61 6e 64 20  een a table and 
2ce40 61 6e 20 69 6e 64 65 78 20 69 73 20 74 68 69 73  an index is this
2ce50 3a 20 20 41 20 74 61 62 6c 65 20 6d 75 73 74 0a  :  A table must.
2ce60 2a 2a 20 68 61 76 65 20 61 20 34 2d 62 79 74 65  ** have a 4-byte
2ce70 20 69 6e 74 65 67 65 72 20 6b 65 79 20 61 6e 64   integer key and
2ce80 20 63 61 6e 20 68 61 76 65 20 61 72 62 69 74 72   can have arbitr
2ce90 61 72 79 20 64 61 74 61 2e 20 20 41 6e 20 69 6e  ary data.  An in
2cea0 64 65 78 0a 2a 2a 20 68 61 73 20 61 6e 20 61 72  dex.** has an ar
2ceb0 62 69 74 72 61 72 79 20 6b 65 79 20 62 75 74 20  bitrary key but 
2cec0 6e 6f 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 53  no data..**.** S
2ced0 65 65 20 61 6c 73 6f 3a 20 43 72 65 61 74 65 49  ee also: CreateI
2cee0 6e 64 65 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ndex.*/./* Opcod
2cef0 65 3a 20 43 72 65 61 74 65 49 6e 64 65 78 20 50  e: CreateIndex P
2cf00 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
2cf10 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f  nopsis: r[P2]=ro
2cf20 6f 74 20 69 44 62 3d 50 31 0a 2a 2a 0a 2a 2a 20  ot iDb=P1.**.** 
2cf30 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77 20 69  Allocate a new i
2cf40 6e 64 65 78 20 69 6e 20 74 68 65 20 6d 61 69 6e  ndex in the main
2cf50 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
2cf60 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68  f P1==0 or in th
2cf70 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79 20 64  e.** auxiliary d
2cf80 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20  atabase file if 
2cf90 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61  P1==1 or in an a
2cfa0 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
2cfb0 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72   if.** P1>1.  Wr
2cfc0 69 74 65 20 74 68 65 20 72 6f 6f 74 20 70 61 67  ite the root pag
2cfd0 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  e number of the 
2cfe0 6e 65 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a  new table into.*
2cff0 2a 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  * register P2..*
2d000 2a 0a 2a 2a 20 53 65 65 20 64 6f 63 75 6d 65 6e  *.** See documen
2d010 74 61 74 69 6f 6e 20 6f 6e 20 4f 50 5f 43 72 65  tation on OP_Cre
2d020 61 74 65 54 61 62 6c 65 20 66 6f 72 20 61 64 64  ateTable for add
2d030 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
2d040 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
2d050 43 72 65 61 74 65 49 6e 64 65 78 3a 20 20 20 20  CreateIndex:    
2d060 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
2d070 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65 61 74  */.case OP_Creat
2d080 65 54 61 62 6c 65 3a 20 7b 20 20 20 20 20 20 20  eTable: {       
2d090 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
2d0a0 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 69 6e 74 20  int pgno;.  int 
2d0b0 66 6c 61 67 73 3b 0a 20 20 44 62 20 2a 70 44 62  flags;.  Db *pDb
2d0c0 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  ;..  pOut = out2
2d0d0 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
2d0e0 70 29 3b 0a 20 20 70 67 6e 6f 20 3d 20 30 3b 0a  p);.  pgno = 0;.
2d0f0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2d100 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
2d110 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
2d120 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
2d130 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f  p->btreeMask, pO
2d140 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73 73 65  p->p1) );.  asse
2d150 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
2d160 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64  =0 );.  pDb = &d
2d170 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b  b->aDb[pOp->p1];
2d180 0a 20 20 61 73 73 65 72 74 28 20 70 44 62 2d 3e  .  assert( pDb->
2d190 70 42 74 21 3d 30 20 29 3b 0a 20 20 69 66 28 20  pBt!=0 );.  if( 
2d1a0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
2d1b0 43 72 65 61 74 65 54 61 62 6c 65 20 29 7b 0a 20  CreateTable ){. 
2d1c0 20 20 20 2f 2a 20 66 6c 61 67 73 20 3d 20 42 54     /* flags = BT
2d1d0 52 45 45 5f 49 4e 54 4b 45 59 3b 20 2a 2f 0a 20  REE_INTKEY; */. 
2d1e0 20 20 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45     flags = BTREE
2d1f0 5f 49 4e 54 4b 45 59 3b 0a 20 20 7d 65 6c 73 65  _INTKEY;.  }else
2d200 7b 0a 20 20 20 20 66 6c 61 67 73 20 3d 20 42 54  {.    flags = BT
2d210 52 45 45 5f 42 4c 4f 42 4b 45 59 3b 0a 20 20 7d  REE_BLOBKEY;.  }
2d220 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
2d230 74 72 65 65 43 72 65 61 74 65 54 61 62 6c 65 28  treeCreateTable(
2d240 70 44 62 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c  pDb->pBt, &pgno,
2d250 20 66 6c 61 67 73 29 3b 0a 20 20 69 66 28 20 72   flags);.  if( r
2d260 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
2d270 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70  ue_to_error;.  p
2d280 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 67 6e 6f 3b  Out->u.i = pgno;
2d290 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2d2a0 4f 70 63 6f 64 65 3a 20 50 61 72 73 65 53 63 68  Opcode: ParseSch
2d2b0 65 6d 61 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  ema P1 * * P4 *.
2d2c0 2a 2a 0a 2a 2a 20 52 65 61 64 20 61 6e 64 20 70  **.** Read and p
2d2d0 61 72 73 65 20 61 6c 6c 20 65 6e 74 72 69 65 73  arse all entries
2d2e0 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 49 54 45   from the SQLITE
2d2f0 5f 4d 41 53 54 45 52 20 74 61 62 6c 65 20 6f 66  _MASTER table of
2d300 20 64 61 74 61 62 61 73 65 20 50 31 0a 2a 2a 20   database P1.** 
2d310 74 68 61 74 20 6d 61 74 63 68 20 74 68 65 20 57  that match the W
2d320 48 45 52 45 20 63 6c 61 75 73 65 20 50 34 2e 20  HERE clause P4. 
2d330 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
2d340 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 70  de invokes the p
2d350 61 72 73 65 72 20 74 6f 20 63 72 65 61 74 65 20  arser to create 
2d360 61 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d 61  a new virtual ma
2d370 63 68 69 6e 65 2c 0a 2a 2a 20 74 68 65 6e 20 72  chine,.** then r
2d380 75 6e 73 20 74 68 65 20 6e 65 77 20 76 69 72 74  uns the new virt
2d390 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49 74  ual machine.  It
2d3a0 20 69 73 20 74 68 75 73 20 61 20 72 65 2d 65 6e   is thus a re-en
2d3b0 74 72 61 6e 74 20 6f 70 63 6f 64 65 2e 0a 2a 2f  trant opcode..*/
2d3c0 0a 63 61 73 65 20 4f 50 5f 50 61 72 73 65 53 63  .case OP_ParseSc
2d3d0 68 65 6d 61 3a 20 7b 0a 20 20 69 6e 74 20 69 44  hema: {.  int iD
2d3e0 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  b;.  const char 
2d3f0 2a 7a 4d 61 73 74 65 72 3b 0a 20 20 63 68 61 72  *zMaster;.  char
2d400 20 2a 7a 53 71 6c 3b 0a 20 20 49 6e 69 74 44 61   *zSql;.  InitDa
2d410 74 61 20 69 6e 69 74 44 61 74 61 3b 0a 0a 20 20  ta initData;..  
2d420 2f 2a 20 41 6e 79 20 70 72 65 70 61 72 65 64 20  /* Any prepared 
2d430 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 69  statement that i
2d440 6e 76 6f 6b 65 73 20 74 68 69 73 20 6f 70 63 6f  nvokes this opco
2d450 64 65 20 77 69 6c 6c 20 68 6f 6c 64 20 6d 75 74  de will hold mut
2d460 65 78 65 73 0a 20 20 2a 2a 20 6f 6e 20 65 76 65  exes.  ** on eve
2d470 72 79 20 62 74 72 65 65 2e 20 20 54 68 69 73 20  ry btree.  This 
2d480 69 73 20 61 20 70 72 65 72 65 71 75 69 73 69 74  is a prerequisit
2d490 65 20 66 6f 72 20 69 6e 76 6f 6b 69 6e 67 20 0a  e for invoking .
2d4a0 20 20 2a 2a 20 73 71 6c 69 74 65 33 49 6e 69 74    ** sqlite3Init
2d4b0 43 61 6c 6c 62 61 63 6b 28 29 2e 0a 20 20 2a 2f  Callback()..  */
2d4c0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
2d4d0 45 42 55 47 0a 20 20 66 6f 72 28 69 44 62 3d 30  EBUG.  for(iDb=0
2d4e0 3b 20 69 44 62 3c 64 62 2d 3e 6e 44 62 3b 20 69  ; iDb<db->nDb; i
2d4f0 44 62 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72  Db++){.    asser
2d500 74 28 20 69 44 62 3d 3d 31 20 7c 7c 20 73 71 6c  t( iDb==1 || sql
2d510 69 74 65 33 42 74 72 65 65 48 6f 6c 64 73 4d 75  ite3BtreeHoldsMu
2d520 74 65 78 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d  tex(db->aDb[iDb]
2d530 2e 70 42 74 29 20 29 3b 0a 20 20 7d 0a 23 65 6e  .pBt) );.  }.#en
2d540 64 69 66 0a 0a 20 20 69 44 62 20 3d 20 70 4f 70  dif..  iDb = pOp
2d550 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p1;.  assert( 
2d560 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62  iDb>=0 && iDb<db
2d570 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
2d580 74 28 20 44 62 48 61 73 50 72 6f 70 65 72 74 79  t( DbHasProperty
2d590 28 64 62 2c 20 69 44 62 2c 20 44 42 5f 53 63 68  (db, iDb, DB_Sch
2d5a0 65 6d 61 4c 6f 61 64 65 64 29 20 29 3b 0a 20 20  emaLoaded) );.  
2d5b0 2f 2a 20 55 73 65 64 20 74 6f 20 62 65 20 61 20  /* Used to be a 
2d5c0 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 2a 2f 20 7b  conditional */ {
2d5d0 0a 20 20 20 20 7a 4d 61 73 74 65 72 20 3d 20 53  .    zMaster = S
2d5e0 43 48 45 4d 41 5f 54 41 42 4c 45 28 69 44 62 29  CHEMA_TABLE(iDb)
2d5f0 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e 64  ;.    initData.d
2d600 62 20 3d 20 64 62 3b 0a 20 20 20 20 69 6e 69 74  b = db;.    init
2d610 44 61 74 61 2e 69 44 62 20 3d 20 70 4f 70 2d 3e  Data.iDb = pOp->
2d620 70 31 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61  p1;.    initData
2d630 2e 70 7a 45 72 72 4d 73 67 20 3d 20 26 70 2d 3e  .pzErrMsg = &p->
2d640 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20 7a 53 71  zErrMsg;.    zSq
2d650 6c 20 3d 20 73 71 6c 69 74 65 33 4d 50 72 69 6e  l = sqlite3MPrin
2d660 74 66 28 64 62 2c 0a 20 20 20 20 20 20 20 22 53  tf(db,.       "S
2d670 45 4c 45 43 54 20 6e 61 6d 65 2c 20 72 6f 6f 74  ELECT name, root
2d680 70 61 67 65 2c 20 73 71 6c 20 46 52 4f 4d 20 27  page, sql FROM '
2d690 25 71 27 2e 25 73 20 57 48 45 52 45 20 25 73 20  %q'.%s WHERE %s 
2d6a0 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64 22 2c  ORDER BY rowid",
2d6b0 0a 20 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b  .       db->aDb[
2d6c0 69 44 62 5d 2e 7a 44 62 53 4e 61 6d 65 2c 20 7a  iDb].zDbSName, z
2d6d0 4d 61 73 74 65 72 2c 20 70 4f 70 2d 3e 70 34 2e  Master, pOp->p4.
2d6e0 7a 29 3b 0a 20 20 20 20 69 66 28 20 7a 53 71 6c  z);.    if( zSql
2d6f0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20  ==0 ){.      rc 
2d700 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42  = SQLITE_NOMEM_B
2d710 4b 50 54 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  KPT;.    }else{.
2d720 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62        assert( db
2d730 2d 3e 69 6e 69 74 2e 62 75 73 79 3d 3d 30 20 29  ->init.busy==0 )
2d740 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74  ;.      db->init
2d750 2e 62 75 73 79 20 3d 20 31 3b 0a 20 20 20 20 20  .busy = 1;.     
2d760 20 69 6e 69 74 44 61 74 61 2e 72 63 20 3d 20 53   initData.rc = S
2d770 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20  QLITE_OK;.      
2d780 61 73 73 65 72 74 28 20 21 64 62 2d 3e 6d 61 6c  assert( !db->mal
2d790 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 20  locFailed );.   
2d7a0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
2d7b0 65 78 65 63 28 64 62 2c 20 7a 53 71 6c 2c 20 73  exec(db, zSql, s
2d7c0 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61  qlite3InitCallba
2d7d0 63 6b 2c 20 26 69 6e 69 74 44 61 74 61 2c 20 30  ck, &initData, 0
2d7e0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d  );.      if( rc=
2d7f0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 72 63 20  =SQLITE_OK ) rc 
2d800 3d 20 69 6e 69 74 44 61 74 61 2e 72 63 3b 0a 20  = initData.rc;. 
2d810 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
2d820 65 65 28 64 62 2c 20 7a 53 71 6c 29 3b 0a 20 20  ee(db, zSql);.  
2d830 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73      db->init.bus
2d840 79 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d  y = 0;.    }.  }
2d850 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20  .  if( rc ){.   
2d860 20 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c   sqlite3ResetAll
2d870 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74  SchemasOfConnect
2d880 69 6f 6e 28 64 62 29 3b 0a 20 20 20 20 69 66 28  ion(db);.    if(
2d890 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45   rc==SQLITE_NOME
2d8a0 4d 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  M ){.      goto 
2d8b0 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20  no_mem;.    }.  
2d8c0 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
2d8d0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20  _to_error;.  }. 
2d8e0 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 0a 23 69 66   break;  .}..#if
2d8f0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
2d900 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 0a 2f  _OMIT_ANALYZE)./
2d910 2a 20 4f 70 63 6f 64 65 3a 20 4c 6f 61 64 41 6e  * Opcode: LoadAn
2d920 61 6c 79 73 69 73 20 50 31 20 2a 20 2a 20 2a 20  alysis P1 * * * 
2d930 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 74 68 65  *.**.** Read the
2d940 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61   sqlite_stat1 ta
2d950 62 6c 65 20 66 6f 72 20 64 61 74 61 62 61 73 65  ble for database
2d960 20 50 31 20 61 6e 64 20 6c 6f 61 64 20 74 68 65   P1 and load the
2d970 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 6f 66 20 74   content.** of t
2d980 68 61 74 20 74 61 62 6c 65 20 69 6e 74 6f 20 74  hat table into t
2d990 68 65 20 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65  he internal inde
2d9a0 78 20 68 61 73 68 20 74 61 62 6c 65 2e 20 20 54  x hash table.  T
2d9b0 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65 0a 2a  his will cause.*
2d9c0 2a 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20 74  * the analysis t
2d9d0 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e 20 70  o be used when p
2d9e0 72 65 70 61 72 69 6e 67 20 61 6c 6c 20 73 75 62  reparing all sub
2d9f0 73 65 71 75 65 6e 74 20 71 75 65 72 69 65 73 2e  sequent queries.
2da00 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 6f 61 64  .*/.case OP_Load
2da10 41 6e 61 6c 79 73 69 73 3a 20 7b 0a 20 20 61 73  Analysis: {.  as
2da20 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
2da30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
2da40 6e 44 62 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  nDb );.  rc = sq
2da50 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61  lite3AnalysisLoa
2da60 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a  d(db, pOp->p1);.
2da70 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
2da80 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2da90 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d  or;.  break;  .}
2daa0 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69  .#endif /* !defi
2dab0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
2dac0 41 4e 41 4c 59 5a 45 29 20 2a 2f 0a 0a 2f 2a 20  ANALYZE) */../* 
2dad0 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 61 62 6c  Opcode: DropTabl
2dae0 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  e P1 * * P4 *.**
2daf0 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69  .** Remove the i
2db00 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f  nternal (in-memo
2db10 72 79 29 20 64 61 74 61 20 73 74 72 75 63 74 75  ry) data structu
2db20 72 65 73 20 74 68 61 74 20 64 65 73 63 72 69 62  res that describ
2db30 65 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 6e  e.** the table n
2db40 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61 62  amed P4 in datab
2db50 61 73 65 20 50 31 2e 20 20 54 68 69 73 20 69 73  ase P1.  This is
2db60 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61 20   called after a 
2db70 74 61 62 6c 65 0a 2a 2a 20 69 73 20 64 72 6f 70  table.** is drop
2db80 70 65 64 20 66 72 6f 6d 20 64 69 73 6b 20 28 75  ped from disk (u
2db90 73 69 6e 67 20 74 68 65 20 44 65 73 74 72 6f 79  sing the Destroy
2dba0 20 6f 70 63 6f 64 65 29 20 69 6e 20 6f 72 64 65   opcode) in orde
2dbb0 72 20 74 6f 20 6b 65 65 70 20 0a 2a 2a 20 74 68  r to keep .** th
2dbc0 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65  e internal repre
2dbd0 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  sentation of the
2dbe0 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69  .** schema consi
2dbf0 73 74 65 6e 74 20 77 69 74 68 20 77 68 61 74 20  stent with what 
2dc00 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63  is on disk..*/.c
2dc10 61 73 65 20 4f 50 5f 44 72 6f 70 54 61 62 6c 65  ase OP_DropTable
2dc20 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c  : {.  sqlite3Unl
2dc30 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62 6c  inkAndDeleteTabl
2dc40 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  e(db, pOp->p1, p
2dc50 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65  Op->p4.z);.  bre
2dc60 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2dc70 3a 20 44 72 6f 70 49 6e 64 65 78 20 50 31 20 2a  : DropIndex P1 *
2dc80 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65   * P4 *.**.** Re
2dc90 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61  move the interna
2dca0 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61  l (in-memory) da
2dcb0 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68  ta structures th
2dcc0 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74  at describe.** t
2dcd0 68 65 20 69 6e 64 65 78 20 6e 61 6d 65 64 20 50  he index named P
2dce0 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31  4 in database P1
2dcf0 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65  .  This is calle
2dd00 64 20 61 66 74 65 72 20 61 6e 20 69 6e 64 65 78  d after an index
2dd10 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 66  .** is dropped f
2dd20 72 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e 67 20  rom disk (using 
2dd30 74 68 65 20 44 65 73 74 72 6f 79 20 6f 70 63 6f  the Destroy opco
2dd40 64 65 29 0a 2a 2a 20 69 6e 20 6f 72 64 65 72 20  de).** in order 
2dd50 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65  to keep the inte
2dd60 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74  rnal representat
2dd70 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63  ion of the.** sc
2dd80 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20  hema consistent 
2dd90 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20  with what is on 
2dda0 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  disk..*/.case OP
2ddb0 5f 44 72 6f 70 49 6e 64 65 78 3a 20 7b 0a 20 20  _DropIndex: {.  
2ddc0 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
2ddd0 44 65 6c 65 74 65 49 6e 64 65 78 28 64 62 2c 20  DeleteIndex(db, 
2dde0 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34  pOp->p1, pOp->p4
2ddf0 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .z);.  break;.}.
2de00 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70  ./* Opcode: Drop
2de10 54 72 69 67 67 65 72 20 50 31 20 2a 20 2a 20 50  Trigger P1 * * P
2de20 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65  4 *.**.** Remove
2de30 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69   the internal (i
2de40 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73  n-memory) data s
2de50 74 72 75 63 74 75 72 65 73 20 74 68 61 74 20 64  tructures that d
2de60 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 74  escribe.** the t
2de70 72 69 67 67 65 72 20 6e 61 6d 65 64 20 50 34 20  rigger named P4 
2de80 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20  in database P1. 
2de90 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20   This is called 
2dea0 61 66 74 65 72 20 61 20 74 72 69 67 67 65 72 0a  after a trigger.
2deb0 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 66 72  ** is dropped fr
2dec0 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e 67 20 74  om disk (using t
2ded0 68 65 20 44 65 73 74 72 6f 79 20 6f 70 63 6f 64  he Destroy opcod
2dee0 65 29 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b  e) in order to k
2def0 65 65 70 20 0a 2a 2a 20 74 68 65 20 69 6e 74 65  eep .** the inte
2df00 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74  rnal representat
2df10 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63  ion of the.** sc
2df20 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20  hema consistent 
2df30 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20  with what is on 
2df40 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  disk..*/.case OP
2df50 5f 44 72 6f 70 54 72 69 67 67 65 72 3a 20 7b 0a  _DropTrigger: {.
2df60 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41    sqlite3UnlinkA
2df70 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72 28  ndDeleteTrigger(
2df80 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  db, pOp->p1, pOp
2df90 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b  ->p4.z);.  break
2dfa0 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51  ;.}...#ifndef SQ
2dfb0 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52  LITE_OMIT_INTEGR
2dfc0 49 54 59 5f 43 48 45 43 4b 0a 2f 2a 20 4f 70 63  ITY_CHECK./* Opc
2dfd0 6f 64 65 3a 20 49 6e 74 65 67 72 69 74 79 43 6b  ode: IntegrityCk
2dfe0 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
2dff0 2a 2a 0a 2a 2a 20 44 6f 20 61 6e 20 61 6e 61 6c  **.** Do an anal
2e000 79 73 69 73 20 6f 66 20 74 68 65 20 63 75 72 72  ysis of the curr
2e010 65 6e 74 6c 79 20 6f 70 65 6e 20 64 61 74 61 62  ently open datab
2e020 61 73 65 2e 20 20 53 74 6f 72 65 20 69 6e 0a 2a  ase.  Store in.*
2e030 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 74 68  * register P1 th
2e040 65 20 74 65 78 74 20 6f 66 20 61 6e 20 65 72 72  e text of an err
2e050 6f 72 20 6d 65 73 73 61 67 65 20 64 65 73 63 72  or message descr
2e060 69 62 69 6e 67 20 61 6e 79 20 70 72 6f 62 6c 65  ibing any proble
2e070 6d 73 2e 0a 2a 2a 20 49 66 20 6e 6f 20 70 72 6f  ms..** If no pro
2e080 62 6c 65 6d 73 20 61 72 65 20 66 6f 75 6e 64 2c  blems are found,
2e090 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e   store a NULL in
2e0a0 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
2e0b0 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65 72  .** The register
2e0c0 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65   P3 contains the
2e0d0 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20   maximum number 
2e0e0 6f 66 20 61 6c 6c 6f 77 65 64 20 65 72 72 6f 72  of allowed error
2e0f0 73 2e 0a 2a 2a 20 41 74 20 6d 6f 73 74 20 72 65  s..** At most re
2e100 67 28 50 33 29 20 65 72 72 6f 72 73 20 77 69 6c  g(P3) errors wil
2e110 6c 20 62 65 20 72 65 70 6f 72 74 65 64 2e 0a 2a  l be reported..*
2e120 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  * In other words
2e130 2c 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20 73  , the analysis s
2e140 74 6f 70 73 20 61 73 20 73 6f 6f 6e 20 61 73 20  tops as soon as 
2e150 72 65 67 28 50 31 29 20 65 72 72 6f 72 73 20 61  reg(P1) errors a
2e160 72 65 20 0a 2a 2a 20 73 65 65 6e 2e 20 20 52 65  re .** seen.  Re
2e170 67 28 50 31 29 20 69 73 20 75 70 64 61 74 65 64  g(P1) is updated
2e180 20 77 69 74 68 20 74 68 65 20 6e 75 6d 62 65 72   with the number
2e190 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69   of errors remai
2e1a0 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ning..**.** The 
2e1b0 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72  root page number
2e1c0 73 20 6f 66 20 61 6c 6c 20 74 61 62 6c 65 73 20  s of all tables 
2e1d0 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
2e1e0 61 72 65 20 69 6e 74 65 67 65 72 73 0a 2a 2a 20  are integers.** 
2e1f0 73 74 6f 72 65 64 20 69 6e 20 50 34 5f 49 4e 54  stored in P4_INT
2e200 41 52 52 41 59 20 61 72 67 75 6d 65 6e 74 2e 0a  ARRAY argument..
2e210 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e  **.** If P5 is n
2e220 6f 74 20 7a 65 72 6f 2c 20 74 68 65 20 63 68 65  ot zero, the che
2e230 63 6b 20 69 73 20 64 6f 6e 65 20 6f 6e 20 74 68  ck is done on th
2e240 65 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61  e auxiliary data
2e250 62 61 73 65 0a 2a 2a 20 66 69 6c 65 2c 20 6e 6f  base.** file, no
2e260 74 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  t the main datab
2e270 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20  ase file..**.** 
2e280 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75  This opcode is u
2e290 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74  sed to implement
2e2a0 20 74 68 65 20 69 6e 74 65 67 72 69 74 79 5f 63   the integrity_c
2e2b0 68 65 63 6b 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a  heck pragma..*/.
2e2c0 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 72 69 74  case OP_Integrit
2e2d0 79 43 6b 3a 20 7b 0a 20 20 69 6e 74 20 6e 52 6f  yCk: {.  int nRo
2e2e0 6f 74 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ot;      /* Numb
2e2f0 65 72 20 6f 66 20 74 61 62 6c 65 73 20 74 6f 20  er of tables to 
2e300 63 68 65 63 6b 2e 20 20 28 4e 75 6d 62 65 72 20  check.  (Number 
2e310 6f 66 20 72 6f 6f 74 20 70 61 67 65 73 2e 29 20  of root pages.) 
2e320 2a 2f 0a 20 20 69 6e 74 20 2a 61 52 6f 6f 74 3b  */.  int *aRoot;
2e330 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66       /* Array of
2e340 20 72 6f 6f 74 70 61 67 65 20 6e 75 6d 62 65 72   rootpage number
2e350 73 20 66 6f 72 20 74 61 62 6c 65 73 20 74 6f 20  s for tables to 
2e360 62 65 20 63 68 65 63 6b 65 64 20 2a 2f 0a 20 20  be checked */.  
2e370 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20  int nErr;       
2e380 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72  /* Number of err
2e390 6f 72 73 20 72 65 70 6f 72 74 65 64 20 2a 2f 0a  ors reported */.
2e3a0 20 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 20    char *z;      
2e3b0 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65    /* Text of the
2e3c0 20 65 72 72 6f 72 20 72 65 70 6f 72 74 20 2a 2f   error report */
2e3d0 0a 20 20 4d 65 6d 20 2a 70 6e 45 72 72 3b 20 20  .  Mem *pnErr;  
2e3e0 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 6b     /* Register k
2e3f0 65 65 70 69 6e 67 20 74 72 61 63 6b 20 6f 66 20  eeping track of 
2e400 65 72 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67  errors remaining
2e410 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70   */..  assert( p
2e420 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20  ->bIsReader );. 
2e430 20 6e 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70 32   nRoot = pOp->p2
2e440 3b 0a 20 20 61 52 6f 6f 74 20 3d 20 70 4f 70 2d  ;.  aRoot = pOp-
2e450 3e 70 34 2e 61 69 3b 0a 20 20 61 73 73 65 72 74  >p4.ai;.  assert
2e460 28 20 6e 52 6f 6f 74 3e 30 20 29 3b 0a 20 20 61  ( nRoot>0 );.  a
2e470 73 73 65 72 74 28 20 61 52 6f 6f 74 5b 6e 52 6f  ssert( aRoot[nRo
2e480 6f 74 5d 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  ot]==0 );.  asse
2e490 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26  rt( pOp->p3>0 &&
2e4a0 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d   pOp->p3<=(p->nM
2e4b0 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
2e4c0 72 29 20 29 3b 0a 20 20 70 6e 45 72 72 20 3d 20  r) );.  pnErr = 
2e4d0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
2e4e0 20 20 61 73 73 65 72 74 28 20 28 70 6e 45 72 72    assert( (pnErr
2e4f0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
2e500 74 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  t)!=0 );.  asser
2e510 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73  t( (pnErr->flags
2e520 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
2e530 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 70  Blob))==0 );.  p
2e540 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
2e550 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
2e560 70 4f 70 2d 3e 70 35 3c 64 62 2d 3e 6e 44 62 20  pOp->p5<db->nDb 
2e570 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d  );.  assert( DbM
2e580 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65  askTest(p->btree
2e590 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 35 29 20 29  Mask, pOp->p5) )
2e5a0 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 42  ;.  z = sqlite3B
2e5b0 74 72 65 65 49 6e 74 65 67 72 69 74 79 43 68 65  treeIntegrityChe
2e5c0 63 6b 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e  ck(db->aDb[pOp->
2e5d0 70 35 5d 2e 70 42 74 2c 20 61 52 6f 6f 74 2c 20  p5].pBt, aRoot, 
2e5e0 6e 52 6f 6f 74 2c 0a 20 20 20 20 20 20 20 20 20  nRoot,.         
2e5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e600 20 20 20 20 20 20 20 20 28 69 6e 74 29 70 6e 45          (int)pnE
2e610 72 72 2d 3e 75 2e 69 2c 20 26 6e 45 72 72 29 3b  rr->u.i, &nErr);
2e620 0a 20 20 70 6e 45 72 72 2d 3e 75 2e 69 20 2d 3d  .  pnErr->u.i -=
2e630 20 6e 45 72 72 3b 0a 20 20 73 71 6c 69 74 65 33   nErr;.  sqlite3
2e640 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
2e650 49 6e 31 29 3b 0a 20 20 69 66 28 20 6e 45 72 72  In1);.  if( nErr
2e660 3d 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72  ==0 ){.    asser
2e670 74 28 20 7a 3d 3d 30 20 29 3b 0a 20 20 7d 65 6c  t( z==0 );.  }el
2e680 73 65 20 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20  se if( z==0 ){. 
2e690 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
2e6a0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c    }else{.    sql
2e6b0 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74  ite3VdbeMemSetSt
2e6c0 72 28 70 49 6e 31 2c 20 7a 2c 20 2d 31 2c 20 53  r(pIn1, z, -1, S
2e6d0 51 4c 49 54 45 5f 55 54 46 38 2c 20 73 71 6c 69  QLITE_UTF8, sqli
2e6e0 74 65 33 5f 66 72 65 65 29 3b 0a 20 20 7d 0a 20  te3_free);.  }. 
2e6f0 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
2e700 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 73 71  SIZE(pIn1);.  sq
2e710 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45  lite3VdbeChangeE
2e720 6e 63 6f 64 69 6e 67 28 70 49 6e 31 2c 20 65 6e  ncoding(pIn1, en
2e730 63 6f 64 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b  coding);.  break
2e740 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
2e750 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52  LITE_OMIT_INTEGR
2e760 49 54 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a 2f 2a  ITY_CHECK */../*
2e770 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 41   Opcode: RowSetA
2e780 64 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  dd P1 P2 * * *.*
2e790 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 77 73  * Synopsis: rows
2e7a0 65 74 28 50 31 29 3d 72 5b 50 32 5d 0a 2a 2a 0a  et(P1)=r[P2].**.
2e7b0 2a 2a 20 49 6e 73 65 72 74 20 74 68 65 20 69 6e  ** Insert the in
2e7c0 74 65 67 65 72 20 76 61 6c 75 65 20 68 65 6c 64  teger value held
2e7d0 20 62 79 20 72 65 67 69 73 74 65 72 20 50 32 20   by register P2 
2e7e0 69 6e 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 69  into a boolean i
2e7f0 6e 64 65 78 0a 2a 2a 20 68 65 6c 64 20 69 6e 20  ndex.** held in 
2e800 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a  register P1..**.
2e810 2a 2a 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20  ** An assertion 
2e820 66 61 69 6c 73 20 69 66 20 50 32 20 69 73 20 6e  fails if P2 is n
2e830 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a  ot an integer..*
2e840 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74  /.case OP_RowSet
2e850 41 64 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20  Add: {       /* 
2e860 69 6e 31 2c 20 69 6e 32 20 2a 2f 0a 20 20 70 49  in1, in2 */.  pI
2e870 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
2e880 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61  p1];.  pIn2 = &a
2e890 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
2e8a0 61 73 73 65 72 74 28 20 28 70 49 6e 32 2d 3e 66  assert( (pIn2->f
2e8b0 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21  lags & MEM_Int)!
2e8c0 3d 30 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e  =0 );.  if( (pIn
2e8d0 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  1->flags & MEM_R
2e8e0 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20  owSet)==0 ){.   
2e8f0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2e900 65 74 52 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a  etRowSet(pIn1);.
2e910 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66      if( (pIn1->f
2e920 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65  lags & MEM_RowSe
2e930 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  t)==0 ) goto no_
2e940 6d 65 6d 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  mem;.  }.  sqlit
2e950 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70  e3RowSetInsert(p
2e960 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20  In1->u.pRowSet, 
2e970 70 49 6e 32 2d 3e 75 2e 69 29 3b 0a 20 20 62 72  pIn2->u.i);.  br
2e980 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2e990 65 3a 20 52 6f 77 53 65 74 52 65 61 64 20 50 31  e: RowSetRead P1
2e9a0 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
2e9b0 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 6f  nopsis: r[P3]=ro
2e9c0 77 73 65 74 28 50 31 29 0a 2a 2a 0a 2a 2a 20 45  wset(P1).**.** E
2e9d0 78 74 72 61 63 74 20 74 68 65 20 73 6d 61 6c 6c  xtract the small
2e9e0 65 73 74 20 76 61 6c 75 65 20 66 72 6f 6d 20 62  est value from b
2e9f0 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20  oolean index P1 
2ea00 61 6e 64 20 70 75 74 20 74 68 61 74 20 76 61 6c  and put that val
2ea10 75 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73  ue into.** regis
2ea20 74 65 72 20 50 33 2e 20 20 4f 72 2c 20 69 66 20  ter P3.  Or, if 
2ea30 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31  boolean index P1
2ea40 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 20 65 6d   is initially em
2ea50 70 74 79 2c 20 6c 65 61 76 65 20 50 33 0a 2a 2a  pty, leave P3.**
2ea60 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 20 6a   unchanged and j
2ea70 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69  ump to instructi
2ea80 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  on P2..*/.case O
2ea90 50 5f 52 6f 77 53 65 74 52 65 61 64 3a 20 7b 20  P_RowSetRead: { 
2eaa0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
2eab0 6e 31 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36  n1, out3 */.  i6
2eac0 34 20 76 61 6c 3b 0a 0a 20 20 70 49 6e 31 20 3d  4 val;..  pIn1 =
2ead0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
2eae0 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
2eaf0 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74  ags & MEM_RowSet
2eb00 29 3d 3d 30 20 0a 20 20 20 7c 7c 20 73 71 6c 69  )==0 .   || sqli
2eb10 74 65 33 52 6f 77 53 65 74 4e 65 78 74 28 70 49  te3RowSetNext(pI
2eb20 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 26  n1->u.pRowSet, &
2eb30 76 61 6c 29 3d 3d 30 0a 20 20 29 7b 0a 20 20 20  val)==0.  ){.   
2eb40 20 2f 2a 20 54 68 65 20 62 6f 6f 6c 65 61 6e 20   /* The boolean 
2eb50 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 2a  index is empty *
2eb60 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  /.    sqlite3Vdb
2eb70 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31  eMemSetNull(pIn1
2eb80 29 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  );.    VdbeBranc
2eb90 68 54 61 6b 65 6e 28 31 2c 32 29 3b 0a 20 20 20  hTaken(1,2);.   
2eba0 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
2ebb0 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69  _and_check_for_i
2ebc0 6e 74 65 72 72 75 70 74 3b 0a 20 20 7d 65 6c 73  nterrupt;.  }els
2ebd0 65 7b 0a 20 20 20 20 2f 2a 20 41 20 76 61 6c 75  e{.    /* A valu
2ebe0 65 20 77 61 73 20 70 75 6c 6c 65 64 20 66 72 6f  e was pulled fro
2ebf0 6d 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20  m the index */. 
2ec00 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
2ec10 65 6e 28 30 2c 32 29 3b 0a 20 20 20 20 73 71 6c  en(0,2);.    sql
2ec20 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e  ite3VdbeMemSetIn
2ec30 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t64(&aMem[pOp->p
2ec40 33 5d 2c 20 76 61 6c 29 3b 0a 20 20 7d 0a 20 20  3], val);.  }.  
2ec50 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69  goto check_for_i
2ec60 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20  nterrupt;.}../* 
2ec70 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 54 65  Opcode: RowSetTe
2ec80 73 74 20 50 31 20 50 32 20 50 33 20 50 34 0a 2a  st P1 P2 P3 P4.*
2ec90 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72  * Synopsis: if r
2eca0 5b 50 33 5d 20 69 6e 20 72 6f 77 73 65 74 28 50  [P3] in rowset(P
2ecb0 31 29 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  1) goto P2.**.**
2ecc0 20 52 65 67 69 73 74 65 72 20 50 33 20 69 73 20   Register P3 is 
2ecd0 61 73 73 75 6d 65 64 20 74 6f 20 68 6f 6c 64 20  assumed to hold 
2ece0 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72  a 64-bit integer
2ecf0 20 76 61 6c 75 65 2e 20 49 66 20 72 65 67 69 73   value. If regis
2ed00 74 65 72 20 50 31 0a 2a 2a 20 63 6f 6e 74 61 69  ter P1.** contai
2ed10 6e 73 20 61 20 52 6f 77 53 65 74 20 6f 62 6a 65  ns a RowSet obje
2ed20 63 74 20 61 6e 64 20 74 68 61 74 20 52 6f 77 53  ct and that RowS
2ed30 65 74 20 6f 62 6a 65 63 74 20 63 6f 6e 74 61 69  et object contai
2ed40 6e 73 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20  ns.** the value 
2ed50 68 65 6c 64 20 69 6e 20 50 33 2c 20 6a 75 6d 70  held in P3, jump
2ed60 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e   to register P2.
2ed70 20 4f 74 68 65 72 77 69 73 65 2c 20 69 6e 73 65   Otherwise, inse
2ed80 72 74 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65  rt the.** intege
2ed90 72 20 69 6e 20 50 33 20 69 6e 74 6f 20 74 68 65  r in P3 into the
2eda0 20 52 6f 77 53 65 74 20 61 6e 64 20 63 6f 6e 74   RowSet and cont
2edb0 69 6e 75 65 20 6f 6e 20 74 6f 20 74 68 65 0a 2a  inue on to the.*
2edc0 2a 20 6e 65 78 74 20 6f 70 63 6f 64 65 2e 0a 2a  * next opcode..*
2edd0 2a 0a 2a 2a 20 54 68 65 20 52 6f 77 53 65 74 20  *.** The RowSet 
2ede0 6f 62 6a 65 63 74 20 69 73 20 6f 70 74 69 6d 69  object is optimi
2edf0 7a 65 64 20 66 6f 72 20 74 68 65 20 63 61 73 65  zed for the case
2ee00 20 77 68 65 72 65 20 73 75 63 63 65 73 73 69 76   where successiv
2ee10 65 20 73 65 74 73 0a 2a 2a 20 6f 66 20 69 6e 74  e sets.** of int
2ee20 65 67 65 72 73 2c 20 77 68 65 72 65 20 65 61 63  egers, where eac
2ee30 68 20 73 65 74 20 63 6f 6e 74 61 69 6e 73 20 6e  h set contains n
2ee40 6f 20 64 75 70 6c 69 63 61 74 65 73 2e 20 45 61  o duplicates. Ea
2ee50 63 68 20 73 65 74 0a 2a 2a 20 6f 66 20 76 61 6c  ch set.** of val
2ee60 75 65 73 20 69 73 20 69 64 65 6e 74 69 66 69 65  ues is identifie
2ee70 64 20 62 79 20 61 20 75 6e 69 71 75 65 20 50 34  d by a unique P4
2ee80 20 76 61 6c 75 65 2e 20 54 68 65 20 66 69 72 73   value. The firs
2ee90 74 20 73 65 74 0a 2a 2a 20 6d 75 73 74 20 68 61  t set.** must ha
2eea0 76 65 20 50 34 3d 3d 30 2c 20 74 68 65 20 66 69  ve P4==0, the fi
2eeb0 6e 61 6c 20 73 65 74 20 50 34 3d 2d 31 2e 20 20  nal set P4=-1.  
2eec0 50 34 20 6d 75 73 74 20 62 65 20 65 69 74 68 65  P4 must be eithe
2eed0 72 20 2d 31 20 6f 72 0a 2a 2a 20 6e 6f 6e 2d 6e  r -1 or.** non-n
2eee0 65 67 61 74 69 76 65 2e 20 20 46 6f 72 20 6e 6f  egative.  For no
2eef0 6e 2d 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65  n-negative value
2ef00 73 20 6f 66 20 50 34 20 6f 6e 6c 79 20 74 68 65  s of P4 only the
2ef10 20 6c 6f 77 65 72 20 34 0a 2a 2a 20 62 69 74 73   lower 4.** bits
2ef20 20 61 72 65 20 73 69 67 6e 69 66 69 63 61 6e 74   are significant
2ef30 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 61 6c 6c  ..**.** This all
2ef40 6f 77 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  ows optimization
2ef50 73 3a 20 28 61 29 20 77 68 65 6e 20 50 34 3d 3d  s: (a) when P4==
2ef60 30 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65  0 there is no ne
2ef70 65 64 20 74 6f 20 74 65 73 74 0a 2a 2a 20 74 68  ed to test.** th
2ef80 65 20 72 6f 77 73 65 74 20 6f 62 6a 65 63 74 20  e rowset object 
2ef90 66 6f 72 20 50 33 2c 20 61 73 20 69 74 20 69 73  for P3, as it is
2efa0 20 67 75 61 72 61 6e 74 65 65 64 20 6e 6f 74 20   guaranteed not 
2efb0 74 6f 20 63 6f 6e 74 61 69 6e 20 69 74 2c 0a 2a  to contain it,.*
2efc0 2a 20 28 62 29 20 77 68 65 6e 20 50 34 3d 3d 2d  * (b) when P4==-
2efd0 31 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65  1 there is no ne
2efe0 65 64 20 74 6f 20 69 6e 73 65 72 74 20 74 68 65  ed to insert the
2eff0 20 76 61 6c 75 65 2c 20 61 73 20 69 74 20 77 69   value, as it wi
2f000 6c 6c 0a 2a 2a 20 6e 65 76 65 72 20 62 65 20 74  ll.** never be t
2f010 65 73 74 65 64 20 66 6f 72 2c 20 61 6e 64 20 28  ested for, and (
2f020 63 29 20 77 68 65 6e 20 61 20 76 61 6c 75 65 20  c) when a value 
2f030 74 68 61 74 20 69 73 20 70 61 72 74 20 6f 66 20  that is part of 
2f040 73 65 74 20 58 20 69 73 0a 2a 2a 20 69 6e 73 65  set X is.** inse
2f050 72 74 65 64 2c 20 74 68 65 72 65 20 69 73 20 6e  rted, there is n
2f060 6f 20 6e 65 65 64 20 74 6f 20 73 65 61 72 63 68  o need to search
2f070 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 20 73   to see if the s
2f080 61 6d 65 20 76 61 6c 75 65 20 77 61 73 0a 2a 2a  ame value was.**
2f090 20 70 72 65 76 69 6f 75 73 6c 79 20 69 6e 73 65   previously inse
2f0a0 72 74 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  rted as part of 
2f0b0 73 65 74 20 58 20 28 6f 6e 6c 79 20 69 66 20 69  set X (only if i
2f0c0 74 20 77 61 73 20 70 72 65 76 69 6f 75 73 6c 79  t was previously
2f0d0 0a 2a 2a 20 69 6e 73 65 72 74 65 64 20 61 73 20  .** inserted as 
2f0e0 70 61 72 74 20 6f 66 20 73 6f 6d 65 20 6f 74 68  part of some oth
2f0f0 65 72 20 73 65 74 29 2e 0a 2a 2f 0a 63 61 73 65  er set)..*/.case
2f100 20 4f 50 5f 52 6f 77 53 65 74 54 65 73 74 3a 20   OP_RowSetTest: 
2f110 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
2f120 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
2f130 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74  n1, in3 */.  int
2f140 20 69 53 65 74 3b 0a 20 20 69 6e 74 20 65 78 69   iSet;.  int exi
2f150 73 74 73 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26  sts;..  pIn1 = &
2f160 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
2f170 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
2f180 70 2d 3e 70 33 5d 3b 0a 20 20 69 53 65 74 20 3d  p->p3];.  iSet =
2f190 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 61 73   pOp->p4.i;.  as
2f1a0 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67  sert( pIn3->flag
2f1b0 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 0a 20 20  s&MEM_Int );..  
2f1c0 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 61  /* If there is a
2f1d0 6e 79 74 68 69 6e 67 20 6f 74 68 65 72 20 74 68  nything other th
2f1e0 61 6e 20 61 20 72 6f 77 73 65 74 20 6f 62 6a 65  an a rowset obje
2f1f0 63 74 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c  ct in memory cel
2f200 6c 20 50 31 2c 0a 20 20 2a 2a 20 64 65 6c 65 74  l P1,.  ** delet
2f210 65 20 69 74 20 6e 6f 77 20 61 6e 64 20 69 6e 69  e it now and ini
2f220 74 69 61 6c 69 7a 65 20 50 31 20 77 69 74 68 20  tialize P1 with 
2f230 61 6e 20 65 6d 70 74 79 20 72 6f 77 73 65 74 0a  an empty rowset.
2f240 20 20 2a 2f 0a 20 20 69 66 28 20 28 70 49 6e 31    */.  if( (pIn1
2f250 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f  ->flags & MEM_Ro
2f260 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20  wSet)==0 ){.    
2f270 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
2f280 74 52 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a 20  tRowSet(pIn1);. 
2f290 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c     if( (pIn1->fl
2f2a0 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74  ags & MEM_RowSet
2f2b0 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  )==0 ) goto no_m
2f2c0 65 6d 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72  em;.  }..  asser
2f2d0 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
2f2e0 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 61 73  P4_INT32 );.  as
2f2f0 73 65 72 74 28 20 69 53 65 74 3d 3d 2d 31 20 7c  sert( iSet==-1 |
2f300 7c 20 69 53 65 74 3e 3d 30 20 29 3b 0a 20 20 69  | iSet>=0 );.  i
2f310 66 28 20 69 53 65 74 20 29 7b 0a 20 20 20 20 65  f( iSet ){.    e
2f320 78 69 73 74 73 20 3d 20 73 71 6c 69 74 65 33 52  xists = sqlite3R
2f330 6f 77 53 65 74 54 65 73 74 28 70 49 6e 31 2d 3e  owSetTest(pIn1->
2f340 75 2e 70 52 6f 77 53 65 74 2c 20 69 53 65 74 2c  u.pRowSet, iSet,
2f350 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 20   pIn3->u.i);.   
2f360 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
2f370 28 65 78 69 73 74 73 21 3d 30 2c 32 29 3b 0a 20  (exists!=0,2);. 
2f380 20 20 20 69 66 28 20 65 78 69 73 74 73 20 29 20     if( exists ) 
2f390 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
2f3a0 0a 20 20 7d 0a 20 20 69 66 28 20 69 53 65 74 3e  .  }.  if( iSet>
2f3b0 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
2f3c0 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49  3RowSetInsert(pI
2f3d0 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70  n1->u.pRowSet, p
2f3e0 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 7d 0a 20  In3->u.i);.  }. 
2f3f0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e   break;.}...#ifn
2f400 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2f410 54 52 49 47 47 45 52 0a 0a 2f 2a 20 4f 70 63 6f  TRIGGER../* Opco
2f420 64 65 3a 20 50 72 6f 67 72 61 6d 20 50 31 20 50  de: Program P1 P
2f430 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
2f440 20 45 78 65 63 75 74 65 20 74 68 65 20 74 72 69   Execute the tri
2f450 67 67 65 72 20 70 72 6f 67 72 61 6d 20 70 61 73  gger program pas
2f460 73 65 64 20 61 73 20 50 34 20 28 74 79 70 65 20  sed as P4 (type 
2f470 50 34 5f 53 55 42 50 52 4f 47 52 41 4d 29 2e 20  P4_SUBPROGRAM). 
2f480 0a 2a 2a 0a 2a 2a 20 50 31 20 63 6f 6e 74 61 69  .**.** P1 contai
2f490 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20 6f  ns the address o
2f4a0 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c  f the memory cel
2f4b0 6c 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  l that contains 
2f4c0 74 68 65 20 66 69 72 73 74 20 6d 65 6d 6f 72 79  the first memory
2f4d0 20 0a 2a 2a 20 63 65 6c 6c 20 69 6e 20 61 6e 20   .** cell in an 
2f4e0 61 72 72 61 79 20 6f 66 20 76 61 6c 75 65 73 20  array of values 
2f4f0 75 73 65 64 20 61 73 20 61 72 67 75 6d 65 6e 74  used as argument
2f500 73 20 74 6f 20 74 68 65 20 73 75 62 2d 70 72 6f  s to the sub-pro
2f510 67 72 61 6d 2e 20 50 32 20 0a 2a 2a 20 63 6f 6e  gram. P2 .** con
2f520 74 61 69 6e 73 20 74 68 65 20 61 64 64 72 65 73  tains the addres
2f530 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66 20  s to jump to if 
2f540 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  the sub-program 
2f550 74 68 72 6f 77 73 20 61 6e 20 49 47 4e 4f 52 45  throws an IGNORE
2f560 20 0a 2a 2a 20 65 78 63 65 70 74 69 6f 6e 20 75   .** exception u
2f570 73 69 6e 67 20 74 68 65 20 52 41 49 53 45 28 29  sing the RAISE()
2f580 20 66 75 6e 63 74 69 6f 6e 2e 20 52 65 67 69 73   function. Regis
2f590 74 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20  ter P3 contains 
2f5a0 74 68 65 20 61 64 64 72 65 73 73 20 0a 2a 2a 20  the address .** 
2f5b0 6f 66 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  of a memory cell
2f5c0 20 69 6e 20 74 68 69 73 20 28 74 68 65 20 70 61   in this (the pa
2f5d0 72 65 6e 74 29 20 56 4d 20 74 68 61 74 20 69 73  rent) VM that is
2f5e0 20 75 73 65 64 20 74 6f 20 61 6c 6c 6f 63 61 74   used to allocat
2f5f0 65 20 74 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79  e the .** memory
2f600 20 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65   required by the
2f610 20 73 75 62 2d 76 64 62 65 20 61 74 20 72 75 6e   sub-vdbe at run
2f620 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69  time..**.** P4 i
2f630 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
2f640 68 65 20 56 4d 20 63 6f 6e 74 61 69 6e 69 6e 67  he VM containing
2f650 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f   the trigger pro
2f660 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  gram..**.** If P
2f670 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  5 is non-zero, t
2f680 68 65 6e 20 72 65 63 75 72 73 69 76 65 20 70 72  hen recursive pr
2f690 6f 67 72 61 6d 20 69 6e 76 6f 63 61 74 69 6f 6e  ogram invocation
2f6a0 20 69 73 20 65 6e 61 62 6c 65 64 2e 0a 2a 2f 0a   is enabled..*/.
2f6b0 63 61 73 65 20 4f 50 5f 50 72 6f 67 72 61 6d 3a  case OP_Program:
2f6c0 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
2f6d0 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b  p */.  int nMem;
2f6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2f6f0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f  * Number of memo
2f700 72 79 20 72 65 67 69 73 74 65 72 73 20 66 6f 72  ry registers for
2f710 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a   sub-program */.
2f720 20 20 69 6e 74 20 6e 42 79 74 65 3b 20 20 20 20    int nByte;    
2f730 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 79 74            /* Byt
2f740 65 73 20 6f 66 20 72 75 6e 74 69 6d 65 20 73 70  es of runtime sp
2f750 61 63 65 20 72 65 71 75 69 72 65 64 20 66 6f 72  ace required for
2f760 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a   sub-program */.
2f770 20 20 4d 65 6d 20 2a 70 52 74 3b 20 20 20 20 20    Mem *pRt;     
2f780 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67            /* Reg
2f790 69 73 74 65 72 20 74 6f 20 61 6c 6c 6f 63 61 74  ister to allocat
2f7a0 65 20 72 75 6e 74 69 6d 65 20 73 70 61 63 65 20  e runtime space 
2f7b0 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20  */.  Mem *pMem; 
2f7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2f7d0 55 73 65 64 20 74 6f 20 69 74 65 72 61 74 65 20  Used to iterate 
2f7e0 74 68 72 6f 75 67 68 20 6d 65 6d 6f 72 79 20 63  through memory c
2f7f0 65 6c 6c 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  ells */.  Mem *p
2f800 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  End;            
2f810 20 20 2f 2a 20 4c 61 73 74 20 6d 65 6d 6f 72 79    /* Last memory
2f820 20 63 65 6c 6c 20 69 6e 20 6e 65 77 20 61 72 72   cell in new arr
2f830 61 79 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d  ay */.  VdbeFram
2f840 65 20 2a 70 46 72 61 6d 65 3b 20 20 20 20 20 20  e *pFrame;      
2f850 2f 2a 20 4e 65 77 20 76 64 62 65 20 66 72 61 6d  /* New vdbe fram
2f860 65 20 74 6f 20 65 78 65 63 75 74 65 20 69 6e 20  e to execute in 
2f870 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72 61 6d 20  */.  SubProgram 
2f880 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20  *pProgram;   /* 
2f890 53 75 62 2d 70 72 6f 67 72 61 6d 20 74 6f 20 65  Sub-program to e
2f8a0 78 65 63 75 74 65 20 2a 2f 0a 20 20 76 6f 69 64  xecute */.  void
2f8b0 20 2a 74 3b 20 20 20 20 20 20 20 20 20 20 20 20   *t;            
2f8c0 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 69 64 65      /* Token ide
2f8d0 6e 74 69 66 79 69 6e 67 20 74 72 69 67 67 65 72  ntifying trigger
2f8e0 20 2a 2f 0a 0a 20 20 70 50 72 6f 67 72 61 6d 20   */..  pProgram 
2f8f0 3d 20 70 4f 70 2d 3e 70 34 2e 70 50 72 6f 67 72  = pOp->p4.pProgr
2f900 61 6d 3b 0a 20 20 70 52 74 20 3d 20 26 61 4d 65  am;.  pRt = &aMe
2f910 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73  m[pOp->p3];.  as
2f920 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e  sert( pProgram->
2f930 6e 4f 70 3e 30 20 29 3b 0a 20 20 0a 20 20 2f 2a  nOp>0 );.  .  /*
2f940 20 49 66 20 74 68 65 20 70 35 20 66 6c 61 67 20   If the p5 flag 
2f950 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e 20 72  is clear, then r
2f960 65 63 75 72 73 69 76 65 20 69 6e 76 6f 63 61 74  ecursive invocat
2f970 69 6f 6e 20 6f 66 20 74 72 69 67 67 65 72 73 20  ion of triggers 
2f980 69 73 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65  is .  ** disable
2f990 64 20 66 6f 72 20 62 61 63 6b 77 61 72 64 73 20  d for backwards 
2f9a0 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 28 70  compatibility (p
2f9b0 35 20 69 73 20 73 65 74 20 69 66 20 74 68 69 73  5 is set if this
2f9c0 20 73 75 62 2d 70 72 6f 67 72 61 6d 0a 20 20 2a   sub-program.  *
2f9d0 2a 20 69 73 20 72 65 61 6c 6c 79 20 61 20 74 72  * is really a tr
2f9e0 69 67 67 65 72 2c 20 6e 6f 74 20 61 20 66 6f 72  igger, not a for
2f9f0 65 69 67 6e 20 6b 65 79 20 61 63 74 69 6f 6e 2c  eign key action,
2fa00 20 61 6e 64 20 74 68 65 20 66 6c 61 67 20 73 65   and the flag se
2fa10 74 0a 20 20 2a 2a 20 61 6e 64 20 63 6c 65 61 72  t.  ** and clear
2fa20 65 64 20 62 79 20 74 68 65 20 22 50 52 41 47 4d  ed by the "PRAGM
2fa30 41 20 72 65 63 75 72 73 69 76 65 5f 74 72 69 67  A recursive_trig
2fa40 67 65 72 73 22 20 63 6f 6d 6d 61 6e 64 20 69 73  gers" command is
2fa50 20 63 6c 65 61 72 29 2e 0a 20 20 2a 2a 20 0a 20   clear)..  ** . 
2fa60 20 2a 2a 20 49 74 20 69 73 20 72 65 63 75 72 73   ** It is recurs
2fa70 69 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f  ive invocation o
2fa80 66 20 74 72 69 67 67 65 72 73 2c 20 61 74 20 74  f triggers, at t
2fa90 68 65 20 53 51 4c 20 6c 65 76 65 6c 2c 20 74 68  he SQL level, th
2faa0 61 74 20 69 73 20 0a 20 20 2a 2a 20 64 69 73 61  at is .  ** disa
2fab0 62 6c 65 64 2e 20 49 6e 20 73 6f 6d 65 20 63 61  bled. In some ca
2fac0 73 65 73 20 61 20 73 69 6e 67 6c 65 20 74 72 69  ses a single tri
2fad0 67 67 65 72 20 6d 61 79 20 67 65 6e 65 72 61 74  gger may generat
2fae0 65 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20  e more than one 
2faf0 0a 20 20 2a 2a 20 53 75 62 50 72 6f 67 72 61 6d  .  ** SubProgram
2fb00 20 28 69 66 20 74 68 65 20 74 72 69 67 67 65 72   (if the trigger
2fb10 20 6d 61 79 20 62 65 20 65 78 65 63 75 74 65 64   may be executed
2fb20 20 77 69 74 68 20 6d 6f 72 65 20 74 68 61 6e 20   with more than 
2fb30 6f 6e 65 20 64 69 66 66 65 72 65 6e 74 20 0a 20  one different . 
2fb40 20 2a 2a 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20   ** ON CONFLICT 
2fb50 61 6c 67 6f 72 69 74 68 6d 29 2e 20 53 75 62 50  algorithm). SubP
2fb60 72 6f 67 72 61 6d 20 73 74 72 75 63 74 75 72 65  rogram structure
2fb70 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
2fb80 68 20 61 0a 20 20 2a 2a 20 73 69 6e 67 6c 65 20  h a.  ** single 
2fb90 74 72 69 67 67 65 72 20 61 6c 6c 20 68 61 76 65  trigger all have
2fba0 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20   the same value 
2fbb0 66 6f 72 20 74 68 65 20 53 75 62 50 72 6f 67 72  for the SubProgr
2fbc0 61 6d 2e 74 6f 6b 65 6e 20 0a 20 20 2a 2a 20 76  am.token .  ** v
2fbd0 61 72 69 61 62 6c 65 2e 20 20 2a 2f 0a 20 20 69  ariable.  */.  i
2fbe0 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20  f( pOp->p5 ){.  
2fbf0 20 20 74 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e    t = pProgram->
2fc00 74 6f 6b 65 6e 3b 0a 20 20 20 20 66 6f 72 28 70  token;.    for(p
2fc10 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b  Frame=p->pFrame;
2fc20 20 70 46 72 61 6d 65 20 26 26 20 70 46 72 61 6d   pFrame && pFram
2fc30 65 2d 3e 74 6f 6b 65 6e 21 3d 74 3b 20 70 46 72  e->token!=t; pFr
2fc40 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72  ame=pFrame->pPar
2fc50 65 6e 74 29 3b 0a 20 20 20 20 69 66 28 20 70 46  ent);.    if( pF
2fc60 72 61 6d 65 20 29 20 62 72 65 61 6b 3b 0a 20 20  rame ) break;.  
2fc70 7d 0a 0a 20 20 69 66 28 20 70 2d 3e 6e 46 72 61  }..  if( p->nFra
2fc80 6d 65 3e 3d 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  me>=db->aLimit[S
2fc90 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 54 52 49 47  QLITE_LIMIT_TRIG
2fca0 47 45 52 5f 44 45 50 54 48 5d 20 29 7b 0a 20 20  GER_DEPTH] ){.  
2fcb0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52    rc = SQLITE_ER
2fcc0 52 4f 52 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  ROR;.    sqlite3
2fcd0 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 74 6f  VdbeError(p, "to
2fce0 6f 20 6d 61 6e 79 20 6c 65 76 65 6c 73 20 6f 66  o many levels of
2fcf0 20 74 72 69 67 67 65 72 20 72 65 63 75 72 73 69   trigger recursi
2fd00 6f 6e 22 29 3b 0a 20 20 20 20 67 6f 74 6f 20 61  on");.    goto a
2fd10 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
2fd20 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52 65 67  r;.  }..  /* Reg
2fd30 69 73 74 65 72 20 70 52 74 20 69 73 20 75 73 65  ister pRt is use
2fd40 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 6d  d to store the m
2fd50 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20 74  emory required t
2fd60 6f 20 73 61 76 65 20 74 68 65 20 73 74 61 74 65  o save the state
2fd70 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 63 75 72  .  ** of the cur
2fd80 72 65 6e 74 20 70 72 6f 67 72 61 6d 2c 20 61 6e  rent program, an
2fd90 64 20 74 68 65 20 6d 65 6d 6f 72 79 20 72 65 71  d the memory req
2fda0 75 69 72 65 64 20 61 74 20 72 75 6e 74 69 6d 65  uired at runtime
2fdb0 20 74 6f 20 65 78 65 63 75 74 65 0a 20 20 2a 2a   to execute.  **
2fdc0 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f   the trigger pro
2fdd0 67 72 61 6d 2e 20 49 66 20 74 68 69 73 20 74 72  gram. If this tr
2fde0 69 67 67 65 72 20 68 61 73 20 62 65 65 6e 20 66  igger has been f
2fdf0 69 72 65 64 20 62 65 66 6f 72 65 2c 20 74 68 65  ired before, the
2fe00 6e 20 70 52 74 20 0a 20 20 2a 2a 20 69 73 20 61  n pRt .  ** is a
2fe10 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61 74 65 64  lready allocated
2fe20 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 74 20  . Otherwise, it 
2fe30 6d 75 73 74 20 62 65 20 69 6e 69 74 69 61 6c 69  must be initiali
2fe40 7a 65 64 2e 20 20 2a 2f 0a 20 20 69 66 28 20 28  zed.  */.  if( (
2fe50 70 52 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 46  pRt->flags&MEM_F
2fe60 72 61 6d 65 29 3d 3d 30 20 29 7b 0a 20 20 20 20  rame)==0 ){.    
2fe70 2f 2a 20 53 75 62 50 72 6f 67 72 61 6d 2e 6e 4d  /* SubProgram.nM
2fe80 65 6d 20 69 73 20 73 65 74 20 74 6f 20 74 68 65  em is set to the
2fe90 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72   number of memor
2fea0 79 20 63 65 6c 6c 73 20 75 73 65 64 20 62 79 20  y cells used by 
2feb0 74 68 65 20 0a 20 20 20 20 2a 2a 20 70 72 6f 67  the .    ** prog
2fec0 72 61 6d 20 73 74 6f 72 65 64 20 69 6e 20 53 75  ram stored in Su
2fed0 62 50 72 6f 67 72 61 6d 2e 61 4f 70 2e 20 41 73  bProgram.aOp. As
2fee0 20 77 65 6c 6c 20 61 73 20 74 68 65 73 65 2c 20   well as these, 
2fef0 6f 6e 65 20 6d 65 6d 6f 72 79 0a 20 20 20 20 2a  one memory.    *
2ff00 2a 20 63 65 6c 6c 20 69 73 20 72 65 71 75 69 72  * cell is requir
2ff10 65 64 20 66 6f 72 20 65 61 63 68 20 63 75 72 73  ed for each curs
2ff20 6f 72 20 75 73 65 64 20 62 79 20 74 68 65 20 70  or used by the p
2ff30 72 6f 67 72 61 6d 2e 20 53 65 74 20 6c 6f 63 61  rogram. Set loca
2ff40 6c 0a 20 20 20 20 2a 2a 20 76 61 72 69 61 62 6c  l.    ** variabl
2ff50 65 20 6e 4d 65 6d 20 28 61 6e 64 20 6c 61 74 65  e nMem (and late
2ff60 72 2c 20 56 64 62 65 46 72 61 6d 65 2e 6e 43 68  r, VdbeFrame.nCh
2ff70 69 6c 64 4d 65 6d 29 20 74 6f 20 74 68 69 73 20  ildMem) to this 
2ff80 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a 20 20  value..    */.  
2ff90 20 20 6e 4d 65 6d 20 3d 20 70 50 72 6f 67 72 61    nMem = pProgra
2ffa0 6d 2d 3e 6e 4d 65 6d 20 2b 20 70 50 72 6f 67 72  m->nMem + pProgr
2ffb0 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 61 73  am->nCsr;.    as
2ffc0 73 65 72 74 28 20 6e 4d 65 6d 3e 30 20 29 3b 0a  sert( nMem>0 );.
2ffd0 20 20 20 20 69 66 28 20 70 50 72 6f 67 72 61 6d      if( pProgram
2ffe0 2d 3e 6e 43 73 72 3d 3d 30 20 29 20 6e 4d 65 6d  ->nCsr==0 ) nMem
2fff0 2b 2b 3b 0a 20 20 20 20 6e 42 79 74 65 20 3d 20  ++;.    nByte = 
30000 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 56 64  ROUND8(sizeof(Vd
30010 62 65 46 72 61 6d 65 29 29 0a 20 20 20 20 20 20  beFrame)).      
30020 20 20 20 20 20 20 20 20 2b 20 6e 4d 65 6d 20 2a          + nMem *
30030 20 73 69 7a 65 6f 66 28 4d 65 6d 29 0a 20 20 20   sizeof(Mem).   
30040 20 20 20 20 20 20 20 20 20 20 20 2b 20 70 50 72             + pPr
30050 6f 67 72 61 6d 2d 3e 6e 43 73 72 20 2a 20 73 69  ogram->nCsr * si
30060 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72 20  zeof(VdbeCursor 
30070 2a 29 3b 0a 20 20 20 20 70 46 72 61 6d 65 20 3d  *);.    pFrame =
30080 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
30090 5a 65 72 6f 28 64 62 2c 20 6e 42 79 74 65 29 3b  Zero(db, nByte);
300a0 0a 20 20 20 20 69 66 28 20 21 70 46 72 61 6d 65  .    if( !pFrame
300b0 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e   ){.      goto n
300c0 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20  o_mem;.    }.   
300d0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
300e0 65 6c 65 61 73 65 28 70 52 74 29 3b 0a 20 20 20  elease(pRt);.   
300f0 20 70 52 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45   pRt->flags = ME
30100 4d 5f 46 72 61 6d 65 3b 0a 20 20 20 20 70 52 74  M_Frame;.    pRt
30110 2d 3e 75 2e 70 46 72 61 6d 65 20 3d 20 70 46 72  ->u.pFrame = pFr
30120 61 6d 65 3b 0a 0a 20 20 20 20 70 46 72 61 6d 65  ame;..    pFrame
30130 2d 3e 76 20 3d 20 70 3b 0a 20 20 20 20 70 46 72  ->v = p;.    pFr
30140 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 3d  ame->nChildMem =
30150 20 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d   nMem;.    pFram
30160 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20 3d 20 70  e->nChildCsr = p
30170 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20  Program->nCsr;. 
30180 20 20 20 70 46 72 61 6d 65 2d 3e 70 63 20 3d 20     pFrame->pc = 
30190 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29  (int)(pOp - aOp)
301a0 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4d  ;.    pFrame->aM
301b0 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20  em = p->aMem;.  
301c0 20 20 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 3d    pFrame->nMem =
301d0 20 70 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 70 46   p->nMem;.    pF
301e0 72 61 6d 65 2d 3e 61 70 43 73 72 20 3d 20 70 2d  rame->apCsr = p-
301f0 3e 61 70 43 73 72 3b 0a 20 20 20 20 70 46 72 61  >apCsr;.    pFra
30200 6d 65 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 70 2d  me->nCursor = p-
30210 3e 6e 43 75 72 73 6f 72 3b 0a 20 20 20 20 70 46  >nCursor;.    pF
30220 72 61 6d 65 2d 3e 61 4f 70 20 3d 20 70 2d 3e 61  rame->aOp = p->a
30230 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  Op;.    pFrame->
30240 6e 4f 70 20 3d 20 70 2d 3e 6e 4f 70 3b 0a 20 20  nOp = p->nOp;.  
30250 20 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 20    pFrame->token 
30260 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65  = pProgram->toke
30270 6e 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  n;.#ifdef SQLITE
30280 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41  _ENABLE_STMT_SCA
30290 4e 53 54 41 54 55 53 0a 20 20 20 20 70 46 72 61  NSTATUS.    pFra
302a0 6d 65 2d 3e 61 6e 45 78 65 63 20 3d 20 70 2d 3e  me->anExec = p->
302b0 61 6e 45 78 65 63 3b 0a 23 65 6e 64 69 66 0a 0a  anExec;.#endif..
302c0 20 20 20 20 70 45 6e 64 20 3d 20 26 56 64 62 65      pEnd = &Vdbe
302d0 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29  FrameMem(pFrame)
302e0 5b 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d  [pFrame->nChildM
302f0 65 6d 5d 3b 0a 20 20 20 20 66 6f 72 28 70 4d 65  em];.    for(pMe
30300 6d 3d 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70  m=VdbeFrameMem(p
30310 46 72 61 6d 65 29 3b 20 70 4d 65 6d 21 3d 70 45  Frame); pMem!=pE
30320 6e 64 3b 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20  nd; pMem++){.   
30330 20 20 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d     pMem->flags =
30340 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a   MEM_Undefined;.
30350 20 20 20 20 20 20 70 4d 65 6d 2d 3e 64 62 20 3d        pMem->db =
30360 20 64 62 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c   db;.    }.  }el
30370 73 65 7b 0a 20 20 20 20 70 46 72 61 6d 65 20 3d  se{.    pFrame =
30380 20 70 52 74 2d 3e 75 2e 70 46 72 61 6d 65 3b 0a   pRt->u.pFrame;.
30390 20 20 20 20 61 73 73 65 72 74 28 20 70 50 72 6f      assert( pPro
303a0 67 72 61 6d 2d 3e 6e 4d 65 6d 2b 70 50 72 6f 67  gram->nMem+pProg
303b0 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d  ram->nCsr==pFram
303c0 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 0a 20 20  e->nChildMem .  
303d0 20 20 20 20 20 20 7c 7c 20 28 70 50 72 6f 67 72        || (pProgr
303e0 61 6d 2d 3e 6e 43 73 72 3d 3d 30 20 26 26 20 70  am->nCsr==0 && p
303f0 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 2b 31 3d  Program->nMem+1=
30400 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d  =pFrame->nChildM
30410 65 6d 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72  em) );.    asser
30420 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73  t( pProgram->nCs
30430 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c  r==pFrame->nChil
30440 64 43 73 72 20 29 3b 0a 20 20 20 20 61 73 73 65  dCsr );.    asse
30450 72 74 28 20 28 69 6e 74 29 28 70 4f 70 20 2d 20  rt( (int)(pOp - 
30460 61 4f 70 29 3d 3d 70 46 72 61 6d 65 2d 3e 70 63  aOp)==pFrame->pc
30470 20 29 3b 0a 20 20 7d 0a 0a 20 20 70 2d 3e 6e 46   );.  }..  p->nF
30480 72 61 6d 65 2b 2b 3b 0a 20 20 70 46 72 61 6d 65  rame++;.  pFrame
30490 2d 3e 70 50 61 72 65 6e 74 20 3d 20 70 2d 3e 70  ->pParent = p->p
304a0 46 72 61 6d 65 3b 0a 20 20 70 46 72 61 6d 65 2d  Frame;.  pFrame-
304b0 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73  >lastRowid = las
304c0 74 52 6f 77 69 64 3b 0a 20 20 70 46 72 61 6d 65  tRowid;.  pFrame
304d0 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 70 2d 3e 6e  ->nChange = p->n
304e0 43 68 61 6e 67 65 3b 0a 20 20 70 46 72 61 6d 65  Change;.  pFrame
304f0 2d 3e 6e 44 62 43 68 61 6e 67 65 20 3d 20 70 2d  ->nDbChange = p-
30500 3e 64 62 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20  >db->nChange;.  
30510 61 73 73 65 72 74 28 20 70 46 72 61 6d 65 2d 3e  assert( pFrame->
30520 70 41 75 78 44 61 74 61 3d 3d 30 20 29 3b 0a 20  pAuxData==0 );. 
30530 20 70 46 72 61 6d 65 2d 3e 70 41 75 78 44 61 74   pFrame->pAuxDat
30540 61 20 3d 20 70 2d 3e 70 41 75 78 44 61 74 61 3b  a = p->pAuxData;
30550 0a 20 20 70 2d 3e 70 41 75 78 44 61 74 61 20 3d  .  p->pAuxData =
30560 20 30 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65   0;.  p->nChange
30570 20 3d 20 30 3b 0a 20 20 70 2d 3e 70 46 72 61 6d   = 0;.  p->pFram
30580 65 20 3d 20 70 46 72 61 6d 65 3b 0a 20 20 70 2d  e = pFrame;.  p-
30590 3e 61 4d 65 6d 20 3d 20 61 4d 65 6d 20 3d 20 56  >aMem = aMem = V
305a0 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61  dbeFrameMem(pFra
305b0 6d 65 29 3b 0a 20 20 70 2d 3e 6e 4d 65 6d 20 3d  me);.  p->nMem =
305c0 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d   pFrame->nChildM
305d0 65 6d 3b 0a 20 20 70 2d 3e 6e 43 75 72 73 6f 72  em;.  p->nCursor
305e0 20 3d 20 28 75 31 36 29 70 46 72 61 6d 65 2d 3e   = (u16)pFrame->
305f0 6e 43 68 69 6c 64 43 73 72 3b 0a 20 20 70 2d 3e  nChildCsr;.  p->
30600 61 70 43 73 72 20 3d 20 28 56 64 62 65 43 75 72  apCsr = (VdbeCur
30610 73 6f 72 20 2a 2a 29 26 61 4d 65 6d 5b 70 2d 3e  sor **)&aMem[p->
30620 6e 4d 65 6d 5d 3b 0a 20 20 70 2d 3e 61 4f 70 20  nMem];.  p->aOp 
30630 3d 20 61 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d  = aOp = pProgram
30640 2d 3e 61 4f 70 3b 0a 20 20 70 2d 3e 6e 4f 70 20  ->aOp;.  p->nOp 
30650 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3b  = pProgram->nOp;
30660 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
30670 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53  NABLE_STMT_SCANS
30680 54 41 54 55 53 0a 20 20 70 2d 3e 61 6e 45 78 65  TATUS.  p->anExe
30690 63 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20  c = 0;.#endif.  
306a0 70 4f 70 20 3d 20 26 61 4f 70 5b 2d 31 5d 3b 0a  pOp = &aOp[-1];.
306b0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
306c0 4f 70 63 6f 64 65 3a 20 50 61 72 61 6d 20 50 31  Opcode: Param P1
306d0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
306e0 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6f  This opcode is o
306f0 6e 6c 79 20 65 76 65 72 20 70 72 65 73 65 6e 74  nly ever present
30700 20 69 6e 20 73 75 62 2d 70 72 6f 67 72 61 6d 73   in sub-programs
30710 20 63 61 6c 6c 65 64 20 76 69 61 20 74 68 65 20   called via the 
30720 0a 2a 2a 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69  .** OP_Program i
30730 6e 73 74 72 75 63 74 69 6f 6e 2e 20 43 6f 70 79  nstruction. Copy
30740 20 61 20 76 61 6c 75 65 20 63 75 72 72 65 6e 74   a value current
30750 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6d  ly stored in a m
30760 65 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 6f  emory .** cell o
30770 66 20 74 68 65 20 63 61 6c 6c 69 6e 67 20 28 70  f the calling (p
30780 61 72 65 6e 74 29 20 66 72 61 6d 65 20 74 6f 20  arent) frame to 
30790 63 65 6c 6c 20 50 32 20 69 6e 20 74 68 65 20 63  cell P2 in the c
307a0 75 72 72 65 6e 74 20 66 72 61 6d 65 73 20 0a 2a  urrent frames .*
307b0 2a 20 61 64 64 72 65 73 73 20 73 70 61 63 65 2e  * address space.
307c0 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79   This is used by
307d0 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
307e0 73 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20  s to access the 
307f0 6e 65 77 2e 2a 20 0a 2a 2a 20 61 6e 64 20 6f 6c  new.* .** and ol
30800 64 2e 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a  d.* values..**.*
30810 2a 20 54 68 65 20 61 64 64 72 65 73 73 20 6f 66  * The address of
30820 20 74 68 65 20 63 65 6c 6c 20 69 6e 20 74 68 65   the cell in the
30830 20 70 61 72 65 6e 74 20 66 72 61 6d 65 20 69 73   parent frame is
30840 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 61   determined by a
30850 64 64 69 6e 67 0a 2a 2a 20 74 68 65 20 76 61 6c  dding.** the val
30860 75 65 20 6f 66 20 74 68 65 20 50 31 20 61 72 67  ue of the P1 arg
30870 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 76 61 6c  ument to the val
30880 75 65 20 6f 66 20 74 68 65 20 50 31 20 61 72 67  ue of the P1 arg
30890 75 6d 65 6e 74 20 74 6f 20 74 68 65 0a 2a 2a 20  ument to the.** 
308a0 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72  calling OP_Progr
308b0 61 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  am instruction..
308c0 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 61 6d  */.case OP_Param
308d0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
308e0 20 6f 75 74 32 20 2a 2f 0a 20 20 56 64 62 65 46   out2 */.  VdbeF
308f0 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20  rame *pFrame;.  
30900 4d 65 6d 20 2a 70 49 6e 3b 0a 20 20 70 4f 75 74  Mem *pIn;.  pOut
30910 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
30920 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 46 72  e(p, pOp);.  pFr
30930 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b  ame = p->pFrame;
30940 0a 20 20 70 49 6e 20 3d 20 26 70 46 72 61 6d 65  .  pIn = &pFrame
30950 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 20 2b  ->aMem[pOp->p1 +
30960 20 70 46 72 61 6d 65 2d 3e 61 4f 70 5b 70 46 72   pFrame->aOp[pFr
30970 61 6d 65 2d 3e 70 63 5d 2e 70 31 5d 3b 20 20 20  ame->pc].p1];   
30980 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
30990 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75  mShallowCopy(pOu
309a0 74 2c 20 70 49 6e 2c 20 4d 45 4d 5f 45 70 68 65  t, pIn, MEM_Ephe
309b0 6d 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  m);.  break;.}..
309c0 23 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65  #endif /* #ifnde
309d0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  f SQLITE_OMIT_TR
309e0 49 47 47 45 52 20 2a 2f 0a 0a 23 69 66 6e 64 65  IGGER */..#ifnde
309f0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  f SQLITE_OMIT_FO
30a00 52 45 49 47 4e 5f 4b 45 59 0a 2f 2a 20 4f 70 63  REIGN_KEY./* Opc
30a10 6f 64 65 3a 20 46 6b 43 6f 75 6e 74 65 72 20 50  ode: FkCounter P
30a20 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
30a30 6e 6f 70 73 69 73 3a 20 66 6b 63 74 72 5b 50 31  nopsis: fkctr[P1
30a40 5d 2b 3d 50 32 0a 2a 2a 0a 2a 2a 20 49 6e 63 72  ]+=P2.**.** Incr
30a50 65 6d 65 6e 74 20 61 20 22 63 6f 6e 73 74 72 61  ement a "constra
30a60 69 6e 74 20 63 6f 75 6e 74 65 72 22 20 62 79 20  int counter" by 
30a70 50 32 20 28 50 32 20 6d 61 79 20 62 65 20 6e 65  P2 (P2 may be ne
30a80 67 61 74 69 76 65 20 6f 72 20 70 6f 73 69 74 69  gative or positi
30a90 76 65 29 2e 0a 2a 2a 20 49 66 20 50 31 20 69 73  ve)..** If P1 is
30aa0 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 20 64   non-zero, the d
30ab0 61 74 61 62 61 73 65 20 63 6f 6e 73 74 72 61 69  atabase constrai
30ac0 6e 74 20 63 6f 75 6e 74 65 72 20 69 73 20 69 6e  nt counter is in
30ad0 63 72 65 6d 65 6e 74 65 64 20 0a 2a 2a 20 28 64  cremented .** (d
30ae0 65 66 65 72 72 65 64 20 66 6f 72 65 69 67 6e 20  eferred foreign 
30af0 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 29  key constraints)
30b00 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20  . Otherwise, if 
30b10 50 31 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 20  P1 is zero, the 
30b20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 63 6f  .** statement co
30b30 75 6e 74 65 72 20 69 73 20 69 6e 63 72 65 6d 65  unter is increme
30b40 6e 74 65 64 20 28 69 6d 6d 65 64 69 61 74 65 20  nted (immediate 
30b50 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
30b60 74 72 61 69 6e 74 73 29 2e 0a 2a 2f 0a 63 61 73  traints)..*/.cas
30b70 65 20 4f 50 5f 46 6b 43 6f 75 6e 74 65 72 3a 20  e OP_FkCounter: 
30b80 7b 0a 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67  {.  if( db->flag
30b90 73 20 26 20 53 51 4c 49 54 45 5f 44 65 66 65 72  s & SQLITE_Defer
30ba0 46 4b 73 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e  FKs ){.    db->n
30bb0 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20  DeferredImmCons 
30bc0 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65  += pOp->p2;.  }e
30bd0 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 31 20  lse if( pOp->p1 
30be0 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 44 65 66 65  ){.    db->nDefe
30bf0 72 72 65 64 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d  rredCons += pOp-
30c00 3e 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  >p2;.  }else{.  
30c10 20 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69    p->nFkConstrai
30c20 6e 74 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  nt += pOp->p2;. 
30c30 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
30c40 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 49 66 5a 65  * Opcode: FkIfZe
30c50 72 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ro P1 P2 * * *.*
30c60 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 66  * Synopsis: if f
30c70 6b 63 74 72 5b 50 31 5d 3d 3d 30 20 67 6f 74 6f  kctr[P1]==0 goto
30c80 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f   P2.**.** This o
30c90 70 63 6f 64 65 20 74 65 73 74 73 20 69 66 20 61  pcode tests if a
30ca0 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
30cb0 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20  straint-counter 
30cc0 69 73 20 63 75 72 72 65 6e 74 6c 79 20 7a 65 72  is currently zer
30cd0 6f 2e 0a 2a 2a 20 49 66 20 73 6f 2c 20 6a 75 6d  o..** If so, jum
30ce0 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e  p to instruction
30cf0 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20   P2. Otherwise, 
30d00 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
30d10 74 68 65 20 6e 65 78 74 20 0a 2a 2a 20 69 6e 73  the next .** ins
30d20 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  truction..**.** 
30d30 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72  If P1 is non-zer
30d40 6f 2c 20 74 68 65 6e 20 74 68 65 20 6a 75 6d 70  o, then the jump
30d50 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65   is taken if the
30d60 20 64 61 74 61 62 61 73 65 20 63 6f 6e 73 74 72   database constr
30d70 61 69 6e 74 2d 63 6f 75 6e 74 65 72 0a 2a 2a 20  aint-counter.** 
30d80 69 73 20 7a 65 72 6f 20 28 74 68 65 20 6f 6e 65  is zero (the one
30d90 20 74 68 61 74 20 63 6f 75 6e 74 73 20 64 65 66   that counts def
30da0 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74  erred constraint
30db0 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 20 49 66   violations). If
30dc0 20 50 31 20 69 73 0a 2a 2a 20 7a 65 72 6f 2c 20   P1 is.** zero, 
30dd0 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
30de0 6e 20 69 66 20 74 68 65 20 73 74 61 74 65 6d 65  n if the stateme
30df0 6e 74 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f  nt constraint-co
30e00 75 6e 74 65 72 20 69 73 20 7a 65 72 6f 0a 2a 2a  unter is zero.**
30e10 20 28 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65   (immediate fore
30e20 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
30e30 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 0a  nt violations)..
30e40 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 49 66 5a  */.case OP_FkIfZ
30e50 65 72 6f 3a 20 7b 20 20 20 20 20 20 20 20 20 2f  ero: {         /
30e60 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20  * jump */.  if( 
30e70 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 56  pOp->p1 ){.    V
30e80 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 64  dbeBranchTaken(d
30e90 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  b->nDeferredCons
30ea0 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65  ==0 && db->nDefe
30eb0 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c 20  rredImmCons==0, 
30ec0 32 29 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e  2);.    if( db->
30ed0 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30  nDeferredCons==0
30ee0 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65   && db->nDeferre
30ef0 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20 67 6f  dImmCons==0 ) go
30f00 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
30f10 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62 65   }else{.    Vdbe
30f20 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 2d 3e 6e  BranchTaken(p->n
30f30 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20  FkConstraint==0 
30f40 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64  && db->nDeferred
30f50 49 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32 29 3b 0a  ImmCons==0, 2);.
30f60 20 20 20 20 69 66 28 20 70 2d 3e 6e 46 6b 43 6f      if( p->nFkCo
30f70 6e 73 74 72 61 69 6e 74 3d 3d 30 20 26 26 20 64  nstraint==0 && d
30f80 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  b->nDeferredImmC
30f90 6f 6e 73 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75  ons==0 ) goto ju
30fa0 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20  mp_to_p2;.  }.  
30fb0 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
30fc0 2f 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /* #ifndef SQLIT
30fd0 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  E_OMIT_FOREIGN_K
30fe0 45 59 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  EY */..#ifndef S
30ff0 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49  QLITE_OMIT_AUTOI
31000 4e 43 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63 6f  NCREMENT./* Opco
31010 64 65 3a 20 4d 65 6d 4d 61 78 20 50 31 20 50 32  de: MemMax P1 P2
31020 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
31030 69 73 3a 20 72 5b 50 31 5d 3d 6d 61 78 28 72 5b  is: r[P1]=max(r[
31040 50 31 5d 2c 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a  P1],r[P2]).**.**
31050 20 50 31 20 69 73 20 61 20 72 65 67 69 73 74 65   P1 is a registe
31060 72 20 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72  r in the root fr
31070 61 6d 65 20 6f 66 20 74 68 69 73 20 56 4d 20 28  ame of this VM (
31080 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 69  the root frame i
31090 73 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74 20 66  s.** different f
310a0 72 6f 6d 20 74 68 65 20 63 75 72 72 65 6e 74 20  rom the current 
310b0 66 72 61 6d 65 20 69 66 20 74 68 69 73 20 69 6e  frame if this in
310c0 73 74 72 75 63 74 69 6f 6e 20 69 73 20 62 65 69  struction is bei
310d0 6e 67 20 65 78 65 63 75 74 65 64 0a 2a 2a 20 77  ng executed.** w
310e0 69 74 68 69 6e 20 61 20 73 75 62 2d 70 72 6f 67  ithin a sub-prog
310f0 72 61 6d 29 2e 20 53 65 74 20 74 68 65 20 76 61  ram). Set the va
31100 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20  lue of register 
31110 50 31 20 74 6f 20 74 68 65 20 6d 61 78 69 6d 75  P1 to the maximu
31120 6d 20 6f 66 20 0a 2a 2a 20 69 74 73 20 63 75 72  m of .** its cur
31130 72 65 6e 74 20 76 61 6c 75 65 20 61 6e 64 20 74  rent value and t
31140 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
31150 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  ster P2..**.** T
31160 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
31170 74 68 72 6f 77 73 20 61 6e 20 65 72 72 6f 72 20  throws an error 
31180 69 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65  if the memory ce
31190 6c 6c 20 69 73 20 6e 6f 74 20 69 6e 69 74 69 61  ll is not initia
311a0 6c 6c 79 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65  lly.** an intege
311b0 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 65  r..*/.case OP_Me
311c0 6d 4d 61 78 3a 20 7b 20 20 20 20 20 20 20 20 2f  mMax: {        /
311d0 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 46  * in2 */.  VdbeF
311e0 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20  rame *pFrame;.  
311f0 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b  if( p->pFrame ){
31200 0a 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d  .    for(pFrame=
31210 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d  p->pFrame; pFram
31220 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46 72 61  e->pParent; pFra
31230 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65  me=pFrame->pPare
31240 6e 74 29 3b 0a 20 20 20 20 70 49 6e 31 20 3d 20  nt);.    pIn1 = 
31250 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f  &pFrame->aMem[pO
31260 70 2d 3e 70 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b  p->p1];.  }else{
31270 0a 20 20 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  .    pIn1 = &aMe
31280 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 0a  m[pOp->p1];.  }.
31290 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
312a0 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20  alid(pIn1) );.  
312b0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
312c0 74 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a  tegerify(pIn1);.
312d0 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
312e0 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74  Op->p2];.  sqlit
312f0 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
31300 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 69 66 28  ify(pIn2);.  if(
31310 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 49 6e 32 2d   pIn1->u.i<pIn2-
31320 3e 75 2e 69 29 7b 0a 20 20 20 20 70 49 6e 31 2d  >u.i){.    pIn1-
31330 3e 75 2e 69 20 3d 20 70 49 6e 32 2d 3e 75 2e 69  >u.i = pIn2->u.i
31340 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
31350 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
31360 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45  E_OMIT_AUTOINCRE
31370 4d 45 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f  MENT */../* Opco
31380 64 65 3a 20 49 66 50 6f 73 20 50 31 20 50 32 20  de: IfPos P1 P2 
31390 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
313a0 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e 30 20 74  is: if r[P1]>0 t
313b0 68 65 6e 20 72 5b 50 31 5d 2d 3d 50 33 2c 20 67  hen r[P1]-=P3, g
313c0 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67  oto P2.**.** Reg
313d0 69 73 74 65 72 20 50 31 20 6d 75 73 74 20 63 6f  ister P1 must co
313e0 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72  ntain an integer
313f0 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75  ..** If the valu
31400 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31  e of register P1
31410 20 69 73 20 31 20 6f 72 20 67 72 65 61 74 65 72   is 1 or greater
31420 2c 20 73 75 62 74 72 61 63 74 20 50 33 20 66 72  , subtract P3 fr
31430 6f 6d 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20  om the.** value 
31440 69 6e 20 50 31 20 61 6e 64 20 6a 75 6d 70 20 74  in P1 and jump t
31450 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  o P2..**.** If t
31460 68 65 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65  he initial value
31470 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20   of register P1 
31480 69 73 20 6c 65 73 73 20 74 68 61 6e 20 31 2c 20  is less than 1, 
31490 74 68 65 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75  then the.** valu
314a0 65 20 69 73 20 75 6e 63 68 61 6e 67 65 64 20 61  e is unchanged a
314b0 6e 64 20 63 6f 6e 74 72 6f 6c 20 70 61 73 73 65  nd control passe
314c0 73 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  s through to the
314d0 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
314e0 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66  n..*/.case OP_If
314f0 50 6f 73 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  Pos: {        /*
31500 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
31510 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
31520 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
31530 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d   pIn1->flags&MEM
31540 5f 49 6e 74 20 29 3b 0a 20 20 56 64 62 65 42 72  _Int );.  VdbeBr
31550 61 6e 63 68 54 61 6b 65 6e 28 20 70 49 6e 31 2d  anchTaken( pIn1-
31560 3e 75 2e 69 3e 30 2c 20 32 29 3b 0a 20 20 69 66  >u.i>0, 2);.  if
31570 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 20 29 7b  ( pIn1->u.i>0 ){
31580 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2d  .    pIn1->u.i -
31590 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 67  = pOp->p3;.    g
315a0 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
315b0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
315c0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 66 66 73 65  /* Opcode: Offse
315d0 74 4c 69 6d 69 74 20 50 31 20 50 32 20 50 33 20  tLimit P1 P2 P3 
315e0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
315f0 20 69 66 20 72 5b 50 31 5d 3e 30 20 74 68 65 6e   if r[P1]>0 then
31600 20 72 5b 50 32 5d 3d 72 5b 50 31 5d 2b 6d 61 78   r[P2]=r[P1]+max
31610 28 30 2c 72 5b 50 33 5d 29 20 65 6c 73 65 20 72  (0,r[P3]) else r
31620 5b 50 32 5d 3d 28 2d 31 29 0a 2a 2a 0a 2a 2a 20  [P2]=(-1).**.** 
31630 54 68 69 73 20 6f 70 63 6f 64 65 20 70 65 72 66  This opcode perf
31640 6f 72 6d 73 20 61 20 63 6f 6d 6d 6f 6e 6c 79 20  orms a commonly 
31650 75 73 65 64 20 63 6f 6d 70 75 74 61 74 69 6f 6e  used computation
31660 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
31670 0a 2a 2a 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46  .** LIMIT and OF
31680 46 53 45 54 20 70 72 6f 63 65 73 73 2e 20 20 72  FSET process.  r
31690 5b 50 31 5d 20 68 6f 6c 64 73 20 74 68 65 20 6c  [P1] holds the l
316a0 69 6d 69 74 20 63 6f 75 6e 74 65 72 2e 20 20 72  imit counter.  r
316b0 5b 50 33 5d 0a 2a 2a 20 68 6f 6c 64 73 20 74 68  [P3].** holds th
316c0 65 20 6f 66 66 73 65 74 20 63 6f 75 6e 74 65 72  e offset counter
316d0 2e 20 20 54 68 65 20 6f 70 63 6f 64 65 20 63 6f  .  The opcode co
316e0 6d 70 75 74 65 73 20 74 68 65 20 63 6f 6d 62 69  mputes the combi
316f0 6e 65 64 20 76 61 6c 75 65 0a 2a 2a 20 6f 66 20  ned value.** of 
31700 74 68 65 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46  the LIMIT and OF
31710 46 53 45 54 20 61 6e 64 20 73 74 6f 72 65 73 20  FSET and stores 
31720 74 68 61 74 20 76 61 6c 75 65 20 69 6e 20 72 5b  that value in r[
31730 50 32 5d 2e 20 20 54 68 65 20 72 5b 50 32 5d 0a  P2].  The r[P2].
31740 2a 2a 20 76 61 6c 75 65 20 63 6f 6d 70 75 74 65  ** value compute
31750 64 20 69 73 20 74 68 65 20 74 6f 74 61 6c 20 6e  d is the total n
31760 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 74 68  umber of rows th
31770 61 74 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20  at will need to 
31780 62 65 0a 2a 2a 20 76 69 73 69 74 65 64 20 69 6e  be.** visited in
31790 20 6f 72 64 65 72 20 74 6f 20 63 6f 6d 70 6c 65   order to comple
317a0 74 65 20 74 68 65 20 71 75 65 72 79 2e 0a 2a 2a  te the query..**
317b0 0a 2a 2a 20 49 66 20 72 5b 50 33 5d 20 69 73 20  .** If r[P3] is 
317c0 7a 65 72 6f 20 6f 72 20 6e 65 67 61 74 69 76 65  zero or negative
317d0 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 65  , that means the
317e0 72 65 20 69 73 20 6e 6f 20 4f 46 46 53 45 54 0a  re is no OFFSET.
317f0 2a 2a 20 61 6e 64 20 72 5b 50 32 5d 20 69 73 20  ** and r[P2] is 
31800 73 65 74 20 74 6f 20 62 65 20 74 68 65 20 76 61  set to be the va
31810 6c 75 65 20 6f 66 20 74 68 65 20 4c 49 4d 49 54  lue of the LIMIT
31820 2c 20 72 5b 50 31 5d 2e 0a 2a 2a 0a 2a 2a 20 69  , r[P1]..**.** i
31830 66 20 72 5b 50 31 5d 20 69 73 20 7a 65 72 6f 20  f r[P1] is zero 
31840 6f 72 20 6e 65 67 61 74 69 76 65 2c 20 74 68 61  or negative, tha
31850 74 20 6d 65 61 6e 73 20 74 68 65 72 65 20 69 73  t means there is
31860 20 6e 6f 20 4c 49 4d 49 54 0a 2a 2a 20 61 6e 64   no LIMIT.** and
31870 20 72 5b 50 32 5d 20 69 73 20 73 65 74 20 74 6f   r[P2] is set to
31880 20 2d 31 2e 20 0a 2a 2a 0a 2a 2a 20 4f 74 68 65   -1. .**.** Othe
31890 72 77 69 73 65 2c 20 72 5b 50 32 5d 20 69 73 20  rwise, r[P2] is 
318a0 73 65 74 20 74 6f 20 74 68 65 20 73 75 6d 20 6f  set to the sum o
318b0 66 20 72 5b 50 31 5d 20 61 6e 64 20 72 5b 50 33  f r[P1] and r[P3
318c0 5d 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 66  ]..*/.case OP_Of
318d0 66 73 65 74 4c 69 6d 69 74 3a 20 7b 20 20 20 20  fsetLimit: {    
318e0 2f 2a 20 69 6e 31 2c 20 6f 75 74 32 2c 20 69 6e  /* in1, out2, in
318f0 33 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  3 */.  pIn1 = &a
31900 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
31910 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
31920 2d 3e 70 33 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  ->p3];.  pOut = 
31930 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
31940 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65 72 74  , pOp);.  assert
31950 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
31960 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73  MEM_Int );.  ass
31970 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73  ert( pIn3->flags
31980 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20   & MEM_Int );.  
31990 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 49 6e 31  pOut->u.i = pIn1
319a0 2d 3e 75 2e 69 3c 3d 30 20 3f 20 2d 31 20 3a 20  ->u.i<=0 ? -1 : 
319b0 70 49 6e 31 2d 3e 75 2e 69 2b 28 70 49 6e 33 2d  pIn1->u.i+(pIn3-
319c0 3e 75 2e 69 3e 30 3f 70 49 6e 33 2d 3e 75 2e 69  >u.i>0?pIn3->u.i
319d0 3a 30 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  :0);.  break;.}.
319e0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f  ./* Opcode: IfNo
319f0 74 5a 65 72 6f 20 50 31 20 50 32 20 50 33 20 2a  tZero P1 P2 P3 *
31a00 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
31a10 69 66 20 72 5b 50 31 5d 21 3d 30 20 74 68 65 6e  if r[P1]!=0 then
31a20 20 72 5b 50 31 5d 2d 3d 50 33 2c 20 67 6f 74 6f   r[P1]-=P3, goto
31a30 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74   P2.**.** Regist
31a40 65 72 20 50 31 20 6d 75 73 74 20 63 6f 6e 74 61  er P1 must conta
31a50 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20  in an integer.  
31a60 49 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  If the content o
31a70 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  f register P1 is
31a80 0a 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 6e 6f  .** initially no
31a90 6e 7a 65 72 6f 2c 20 74 68 65 6e 20 73 75 62 74  nzero, then subt
31aa0 72 61 63 74 20 50 33 20 66 72 6f 6d 20 74 68 65  ract P3 from the
31ab0 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
31ac0 65 72 20 50 31 20 61 6e 64 0a 2a 2a 20 6a 75 6d  er P1 and.** jum
31ad0 70 20 74 6f 20 50 32 2e 20 20 49 66 20 72 65 67  p to P2.  If reg
31ae0 69 73 74 65 72 20 50 31 20 69 73 20 69 6e 69 74  ister P1 is init
31af0 69 61 6c 6c 79 20 7a 65 72 6f 2c 20 6c 65 61 76  ially zero, leav
31b00 65 20 69 74 20 75 6e 63 68 61 6e 67 65 64 0a 2a  e it unchanged.*
31b10 2a 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75  * and fall throu
31b20 67 68 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  gh..*/.case OP_I
31b30 66 4e 6f 74 5a 65 72 6f 3a 20 7b 20 20 20 20 20  fNotZero: {     
31b40 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
31b50 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
31b60 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
31b70 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
31b80 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 56  s&MEM_Int );.  V
31b90 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70  dbeBranchTaken(p
31ba0 49 6e 31 2d 3e 75 2e 69 3c 30 2c 20 32 29 3b 0a  In1->u.i<0, 2);.
31bb0 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 20    if( pIn1->u.i 
31bc0 29 7b 0a 20 20 20 20 20 70 49 6e 31 2d 3e 75 2e  ){.     pIn1->u.
31bd0 69 20 2d 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  i -= pOp->p3;.  
31be0 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
31bf0 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  p2;.  }.  break;
31c00 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  .}../* Opcode: D
31c10 65 63 72 4a 75 6d 70 5a 65 72 6f 20 50 31 20 50  ecrJumpZero P1 P
31c20 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
31c30 73 69 73 3a 20 69 66 20 28 2d 2d 72 5b 50 31 5d  sis: if (--r[P1]
31c40 29 3d 3d 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  )==0 goto P2.**.
31c50 2a 2a 20 52 65 67 69 73 74 65 72 20 50 31 20 6d  ** Register P1 m
31c60 75 73 74 20 68 6f 6c 64 20 61 6e 20 69 6e 74 65  ust hold an inte
31c70 67 65 72 2e 20 20 44 65 63 72 65 6d 65 6e 74 20  ger.  Decrement 
31c80 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
31c90 69 73 74 65 72 20 50 31 0a 2a 2a 20 74 68 65 6e  ister P1.** then
31ca0 20 6a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74   jump to P2 if t
31cb0 68 65 20 6e 65 77 20 76 61 6c 75 65 20 69 73 20  he new value is 
31cc0 65 78 61 63 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2f  exactly zero..*/
31cd0 0a 63 61 73 65 20 4f 50 5f 44 65 63 72 4a 75 6d  .case OP_DecrJum
31ce0 70 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 2f 2a  pZero: {      /*
31cf0 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
31d00 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
31d10 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
31d20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d   pIn1->flags&MEM
31d30 5f 49 6e 74 20 29 3b 0a 20 20 70 49 6e 31 2d 3e  _Int );.  pIn1->
31d40 75 2e 69 2d 2d 3b 0a 20 20 56 64 62 65 42 72 61  u.i--;.  VdbeBra
31d50 6e 63 68 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75  nchTaken(pIn1->u
31d60 2e 69 3d 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28  .i==0, 2);.  if(
31d70 20 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29 20   pIn1->u.i==0 ) 
31d80 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
31d90 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a  .  break;.}.../*
31da0 20 4f 70 63 6f 64 65 3a 20 41 67 67 53 74 65 70   Opcode: AggStep
31db0 30 20 2a 20 50 32 20 50 33 20 50 34 20 50 35 0a  0 * P2 P3 P4 P5.
31dc0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 63 63  ** Synopsis: acc
31dd0 75 6d 3d 72 5b 50 33 5d 20 73 74 65 70 28 72 5b  um=r[P3] step(r[
31de0 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 45 78  P2@P5]).**.** Ex
31df0 65 63 75 74 65 20 74 68 65 20 73 74 65 70 20 66  ecute the step f
31e00 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61  unction for an a
31e10 67 67 72 65 67 61 74 65 2e 20 20 54 68 65 0a 2a  ggregate.  The.*
31e20 2a 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 50  * function has P
31e30 35 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 20 50  5 arguments.   P
31e40 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
31e50 6f 20 74 68 65 20 46 75 6e 63 44 65 66 0a 2a 2a  o the FuncDef.**
31e60 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74 20   structure that 
31e70 73 70 65 63 69 66 69 65 73 20 74 68 65 20 66 75  specifies the fu
31e80 6e 63 74 69 6f 6e 2e 20 20 52 65 67 69 73 74 65  nction.  Registe
31e90 72 20 50 33 20 69 73 20 74 68 65 0a 2a 2a 20 61  r P3 is the.** a
31ea0 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a  ccumulator..**.*
31eb0 2a 20 54 68 65 20 50 35 20 61 72 67 75 6d 65 6e  * The P5 argumen
31ec0 74 73 20 61 72 65 20 74 61 6b 65 6e 20 66 72 6f  ts are taken fro
31ed0 6d 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  m register P2 an
31ee0 64 20 69 74 73 0a 2a 2a 20 73 75 63 63 65 73 73  d its.** success
31ef0 6f 72 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ors..*/./* Opcod
31f00 65 3a 20 41 67 67 53 74 65 70 20 2a 20 50 32 20  e: AggStep * P2 
31f10 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
31f20 70 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50 33  psis: accum=r[P3
31f30 5d 20 73 74 65 70 28 72 5b 50 32 40 50 35 5d 29  ] step(r[P2@P5])
31f40 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74  .**.** Execute t
31f50 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e  he step function
31f60 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74   for an aggregat
31f70 65 2e 20 20 54 68 65 0a 2a 2a 20 66 75 6e 63 74  e.  The.** funct
31f80 69 6f 6e 20 68 61 73 20 50 35 20 61 72 67 75 6d  ion has P5 argum
31f90 65 6e 74 73 2e 20 20 20 50 34 20 69 73 20 61 20  ents.   P4 is a 
31fa0 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 73 71  pointer to an sq
31fb0 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 0a 2a 2a  lite3_context.**
31fc0 20 6f 62 6a 65 63 74 20 74 68 61 74 20 69 73 20   object that is 
31fd0 75 73 65 64 20 74 6f 20 72 75 6e 20 74 68 65 20  used to run the 
31fe0 66 75 6e 63 74 69 6f 6e 2e 20 20 52 65 67 69 73  function.  Regis
31ff0 74 65 72 20 50 33 20 69 73 0a 2a 2a 20 61 73 20  ter P3 is.** as 
32000 74 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e  the accumulator.
32010 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61 72  .**.** The P5 ar
32020 67 75 6d 65 6e 74 73 20 61 72 65 20 74 61 6b 65  guments are take
32030 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20  n from register 
32040 50 32 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75  P2 and its.** su
32050 63 63 65 73 73 6f 72 73 2e 0a 2a 2a 0a 2a 2a 20  ccessors..**.** 
32060 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 69  This opcode is i
32070 6e 69 74 69 61 6c 6c 79 20 63 6f 64 65 64 20 61  nitially coded a
32080 73 20 4f 50 5f 41 67 67 53 74 65 70 30 2e 20 20  s OP_AggStep0.  
32090 4f 6e 20 66 69 72 73 74 20 65 76 61 6c 75 61 74  On first evaluat
320a0 69 6f 6e 2c 0a 2a 2a 20 74 68 65 20 46 75 6e 63  ion,.** the Func
320b0 44 65 66 20 73 74 6f 72 65 64 20 69 6e 20 50 34  Def stored in P4
320c0 20 69 73 20 63 6f 6e 76 65 72 74 65 64 20 69 6e   is converted in
320d0 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 63 6f  to an sqlite3_co
320e0 6e 74 65 78 74 20 61 6e 64 0a 2a 2a 20 74 68 65  ntext and.** the
320f0 20 6f 70 63 6f 64 65 20 69 73 20 63 68 61 6e 67   opcode is chang
32100 65 64 2e 20 20 49 6e 20 74 68 69 73 20 77 61 79  ed.  In this way
32110 2c 20 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61  , the initializa
32120 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73  tion of the.** s
32130 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f  qlite3_context o
32140 6e 6c 79 20 68 61 70 70 65 6e 73 20 6f 6e 63 65  nly happens once
32150 2c 20 69 6e 73 74 65 61 64 20 6f 66 20 6f 6e 20  , instead of on 
32160 65 61 63 68 20 63 61 6c 6c 20 74 6f 20 74 68 65  each call to the
32170 0a 2a 2a 20 73 74 65 70 20 66 75 6e 63 74 69 6f  .** step functio
32180 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67  n..*/.case OP_Ag
32190 67 53 74 65 70 30 3a 20 7b 0a 20 20 69 6e 74 20  gStep0: {.  int 
321a0 6e 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  n;.  sqlite3_con
321b0 74 65 78 74 20 2a 70 43 74 78 3b 0a 0a 20 20 61  text *pCtx;..  a
321c0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
321d0 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20 29  pe==P4_FUNCDEF )
321e0 3b 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b  ;.  n = pOp->p5;
321f0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
32200 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
32210 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
32220 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 61  >nCursor) );.  a
32230 73 73 65 72 74 28 20 6e 3d 3d 30 20 7c 7c 20 28  ssert( n==0 || (
32240 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70  pOp->p2>0 && pOp
32250 2d 3e 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d  ->p2+n<=(p->nMem
32260 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
32270 2b 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  +1) );.  assert(
32280 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 32   pOp->p3<pOp->p2
32290 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70   || pOp->p3>=pOp
322a0 2d 3e 70 32 2b 6e 20 29 3b 0a 20 20 70 43 74 78  ->p2+n );.  pCtx
322b0 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c   = sqlite3DbMall
322c0 6f 63 52 61 77 4e 4e 28 64 62 2c 20 73 69 7a 65  ocRawNN(db, size
322d0 6f 66 28 2a 70 43 74 78 29 20 2b 20 28 6e 2d 31  of(*pCtx) + (n-1
322e0 29 2a 73 69 7a 65 6f 66 28 73 71 6c 69 74 65 33  )*sizeof(sqlite3
322f0 5f 76 61 6c 75 65 2a 29 29 3b 0a 20 20 69 66 28  _value*));.  if(
32300 20 70 43 74 78 3d 3d 30 20 29 20 67 6f 74 6f 20   pCtx==0 ) goto 
32310 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 74 78 2d 3e  no_mem;.  pCtx->
32320 70 4d 65 6d 20 3d 20 30 3b 0a 20 20 70 43 74 78  pMem = 0;.  pCtx
32330 2d 3e 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70  ->pFunc = pOp->p
32340 34 2e 70 46 75 6e 63 3b 0a 20 20 70 43 74 78 2d  4.pFunc;.  pCtx-
32350 3e 69 4f 70 20 3d 20 28 69 6e 74 29 28 70 4f 70  >iOp = (int)(pOp
32360 20 2d 20 61 4f 70 29 3b 0a 20 20 70 43 74 78 2d   - aOp);.  pCtx-
32370 3e 70 56 64 62 65 20 3d 20 70 3b 0a 20 20 70 43  >pVdbe = p;.  pC
32380 74 78 2d 3e 61 72 67 63 20 3d 20 6e 3b 0a 20 20  tx->argc = n;.  
32390 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20 50 34  pOp->p4type = P4
323a0 5f 46 55 4e 43 43 54 58 3b 0a 20 20 70 4f 70 2d  _FUNCCTX;.  pOp-
323b0 3e 70 34 2e 70 43 74 78 20 3d 20 70 43 74 78 3b  >p4.pCtx = pCtx;
323c0 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d  .  pOp->opcode =
323d0 20 4f 50 5f 41 67 67 53 74 65 70 3b 0a 20 20 2f   OP_AggStep;.  /
323e0 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69  * Fall through i
323f0 6e 74 6f 20 4f 50 5f 41 67 67 53 74 65 70 20 2a  nto OP_AggStep *
32400 2f 0a 7d 0a 63 61 73 65 20 4f 50 5f 41 67 67 53  /.}.case OP_AggS
32410 74 65 70 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a  tep: {.  int i;.
32420 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78    sqlite3_contex
32430 74 20 2a 70 43 74 78 3b 0a 20 20 4d 65 6d 20 2a  t *pCtx;.  Mem *
32440 70 4d 65 6d 3b 0a 20 20 4d 65 6d 20 74 3b 0a 0a  pMem;.  Mem t;..
32450 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
32460 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43 43 54  4type==P4_FUNCCT
32470 58 20 29 3b 0a 20 20 70 43 74 78 20 3d 20 70 4f  X );.  pCtx = pO
32480 70 2d 3e 70 34 2e 70 43 74 78 3b 0a 20 20 70 4d  p->p4.pCtx;.  pM
32490 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  em = &aMem[pOp->
324a0 70 33 5d 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68  p3];..  /* If th
324b0 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 69  is function is i
324c0 6e 73 69 64 65 20 6f 66 20 61 20 74 72 69 67 67  nside of a trigg
324d0 65 72 2c 20 74 68 65 20 72 65 67 69 73 74 65 72  er, the register
324e0 20 61 72 72 61 79 20 69 6e 20 61 4d 65 6d 5b 5d   array in aMem[]
324f0 0a 20 20 2a 2a 20 6d 69 67 68 74 20 63 68 61 6e  .  ** might chan
32500 67 65 20 66 72 6f 6d 20 6f 6e 65 20 65 76 61 6c  ge from one eval
32510 75 61 74 69 6f 6e 20 74 6f 20 74 68 65 20 6e 65  uation to the ne
32520 78 74 2e 20 20 54 68 65 20 6e 65 78 74 20 62 6c  xt.  The next bl
32530 6f 63 6b 20 6f 66 20 63 6f 64 65 0a 20 20 2a 2a  ock of code.  **
32540 20 63 68 65 63 6b 73 20 74 6f 20 73 65 65 20 69   checks to see i
32550 66 20 74 68 65 20 72 65 67 69 73 74 65 72 20 61  f the register a
32560 72 72 61 79 20 68 61 73 20 63 68 61 6e 67 65 64  rray has changed
32570 2c 20 61 6e 64 20 69 66 20 73 6f 20 69 74 0a 20  , and if so it. 
32580 20 2a 2a 20 72 65 69 6e 69 74 69 61 6c 69 7a 65   ** reinitialize
32590 73 20 74 68 65 20 72 65 6c 61 76 61 6e 74 20 70  s the relavant p
325a0 61 72 74 73 20 6f 66 20 74 68 65 20 73 71 6c 69  arts of the sqli
325b0 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f 62 6a 65  te3_context obje
325c0 63 74 20 2a 2f 0a 20 20 69 66 28 20 70 43 74 78  ct */.  if( pCtx
325d0 2d 3e 70 4d 65 6d 20 21 3d 20 70 4d 65 6d 20 29  ->pMem != pMem )
325e0 7b 0a 20 20 20 20 70 43 74 78 2d 3e 70 4d 65 6d  {.    pCtx->pMem
325f0 20 3d 20 70 4d 65 6d 3b 0a 20 20 20 20 66 6f 72   = pMem;.    for
32600 28 69 3d 70 43 74 78 2d 3e 61 72 67 63 2d 31 3b  (i=pCtx->argc-1;
32610 20 69 3e 3d 30 3b 20 69 2d 2d 29 20 70 43 74 78   i>=0; i--) pCtx
32620 2d 3e 61 72 67 76 5b 69 5d 20 3d 20 26 61 4d 65  ->argv[i] = &aMe
32630 6d 5b 70 4f 70 2d 3e 70 32 2b 69 5d 3b 0a 20 20  m[pOp->p2+i];.  
32640 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  }..#ifdef SQLITE
32650 5f 44 45 42 55 47 0a 20 20 66 6f 72 28 69 3d 30  _DEBUG.  for(i=0
32660 3b 20 69 3c 70 43 74 78 2d 3e 61 72 67 63 3b 20  ; i<pCtx->argc; 
32670 69 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74  i++){.    assert
32680 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 43 74  ( memIsValid(pCt
32690 78 2d 3e 61 72 67 76 5b 69 5d 29 20 29 3b 0a 20  x->argv[i]) );. 
326a0 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
326b0 45 28 70 4f 70 2d 3e 70 32 2b 69 2c 20 70 43 74  E(pOp->p2+i, pCt
326c0 78 2d 3e 61 72 67 76 5b 69 5d 29 3b 0a 20 20 7d  x->argv[i]);.  }
326d0 0a 23 65 6e 64 69 66 0a 0a 20 20 70 4d 65 6d 2d  .#endif..  pMem-
326e0 3e 6e 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33 56  >n++;.  sqlite3V
326f0 64 62 65 4d 65 6d 49 6e 69 74 28 26 74 2c 20 64  dbeMemInit(&t, d
32700 62 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20  b, MEM_Null);.  
32710 70 43 74 78 2d 3e 70 4f 75 74 20 3d 20 26 74 3b  pCtx->pOut = &t;
32720 0a 20 20 70 43 74 78 2d 3e 66 45 72 72 6f 72 4f  .  pCtx->fErrorO
32730 72 41 75 78 20 3d 20 30 3b 0a 20 20 70 43 74 78  rAux = 0;.  pCtx
32740 2d 3e 73 6b 69 70 46 6c 61 67 20 3d 20 30 3b 0a  ->skipFlag = 0;.
32750 20 20 28 70 43 74 78 2d 3e 70 46 75 6e 63 2d 3e    (pCtx->pFunc->
32760 78 53 46 75 6e 63 29 28 70 43 74 78 2c 70 43 74  xSFunc)(pCtx,pCt
32770 78 2d 3e 61 72 67 63 2c 70 43 74 78 2d 3e 61 72  x->argc,pCtx->ar
32780 67 76 29 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d 32  gv); /* IMP: R-2
32790 34 35 30 35 2d 32 33 32 33 30 20 2a 2f 0a 20 20  4505-23230 */.  
327a0 69 66 28 20 70 43 74 78 2d 3e 66 45 72 72 6f 72  if( pCtx->fError
327b0 4f 72 41 75 78 20 29 7b 0a 20 20 20 20 69 66 28  OrAux ){.    if(
327c0 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 20 29   pCtx->isError )
327d0 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
327e0 64 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22  dbeError(p, "%s"
327f0 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  , sqlite3_value_
32800 74 65 78 74 28 26 74 29 29 3b 0a 20 20 20 20 20  text(&t));.     
32810 20 72 63 20 3d 20 70 43 74 78 2d 3e 69 73 45 72   rc = pCtx->isEr
32820 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73  ror;.    }.    s
32830 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c  qlite3VdbeMemRel
32840 65 61 73 65 28 26 74 29 3b 0a 20 20 20 20 69 66  ease(&t);.    if
32850 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
32860 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
32870 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
32880 65 72 74 28 20 74 2e 66 6c 61 67 73 3d 3d 4d 45  ert( t.flags==ME
32890 4d 5f 4e 75 6c 6c 20 29 3b 0a 20 20 7d 0a 20 20  M_Null );.  }.  
328a0 69 66 28 20 70 43 74 78 2d 3e 73 6b 69 70 46 6c  if( pCtx->skipFl
328b0 61 67 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  ag ){.    assert
328c0 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65  ( pOp[-1].opcode
328d0 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a  ==OP_CollSeq );.
328e0 20 20 20 20 69 20 3d 20 70 4f 70 5b 2d 31 5d 2e      i = pOp[-1].
328f0 70 31 3b 0a 20 20 20 20 69 66 28 20 69 20 29 20  p1;.    if( i ) 
32900 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
32910 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b 69 5d 2c  tInt64(&aMem[i],
32920 20 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b   1);.  }.  break
32930 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
32940 41 67 67 46 69 6e 61 6c 20 50 31 20 50 32 20 2a  AggFinal P1 P2 *
32950 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
32960 73 3a 20 61 63 63 75 6d 3d 72 5b 50 31 5d 20 4e  s: accum=r[P1] N
32970 3d 50 32 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74  =P2.**.** Execut
32980 65 20 74 68 65 20 66 69 6e 61 6c 69 7a 65 72 20  e the finalizer 
32990 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20  function for an 
329a0 61 67 67 72 65 67 61 74 65 2e 20 20 50 31 20 69  aggregate.  P1 i
329b0 73 0a 2a 2a 20 74 68 65 20 6d 65 6d 6f 72 79 20  s.** the memory 
329c0 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 69 73  location that is
329d0 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72   the accumulator
329e0 20 66 6f 72 20 74 68 65 20 61 67 67 72 65 67 61   for the aggrega
329f0 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20  te..**.** P2 is 
32a00 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72  the number of ar
32a10 67 75 6d 65 6e 74 73 20 74 68 61 74 20 74 68 65  guments that the
32a20 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 74   step function t
32a30 61 6b 65 73 20 61 6e 64 0a 2a 2a 20 50 34 20 69  akes and.** P4 i
32a40 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
32a50 68 65 20 46 75 6e 63 44 65 66 20 66 6f 72 20 74  he FuncDef for t
32a60 68 69 73 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54  his function.  T
32a70 68 65 20 50 32 0a 2a 2a 20 61 72 67 75 6d 65 6e  he P2.** argumen
32a80 74 20 69 73 20 6e 6f 74 20 75 73 65 64 20 62 79  t is not used by
32a90 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 49   this opcode.  I
32aa0 74 20 69 73 20 6f 6e 6c 79 20 74 68 65 72 65 20  t is only there 
32ab0 74 6f 20 64 69 73 61 6d 62 69 67 75 61 74 65 0a  to disambiguate.
32ac0 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 74 68 61  ** functions tha
32ad0 74 20 63 61 6e 20 74 61 6b 65 20 76 61 72 79 69  t can take varyi
32ae0 6e 67 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 72  ng numbers of ar
32af0 67 75 6d 65 6e 74 73 2e 20 20 54 68 65 0a 2a 2a  guments.  The.**
32b00 20 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20   P4 argument is 
32b10 6f 6e 6c 79 20 6e 65 65 64 65 64 20 66 6f 72 20  only needed for 
32b20 74 68 65 20 64 65 67 65 6e 65 72 61 74 65 20 63  the degenerate c
32b30 61 73 65 20 77 68 65 72 65 0a 2a 2a 20 74 68 65  ase where.** the
32b40 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 77   step function w
32b50 61 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c  as not previousl
32b60 79 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 63 61 73  y called..*/.cas
32b70 65 20 4f 50 5f 41 67 67 46 69 6e 61 6c 3a 20 7b  e OP_AggFinal: {
32b80 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20  .  Mem *pMem;.  
32b90 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
32ba0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70  0 && pOp->p1<=(p
32bb0 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
32bc0 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4d 65 6d  ursor) );.  pMem
32bd0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
32be0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d  ];.  assert( (pM
32bf0 65 6d 2d 3e 66 6c 61 67 73 20 26 20 7e 28 4d 45  em->flags & ~(ME
32c00 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 41 67 67 29 29  M_Null|MEM_Agg))
32c10 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  ==0 );.  rc = sq
32c20 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 69 6e 61  lite3VdbeMemFina
32c30 6c 69 7a 65 28 70 4d 65 6d 2c 20 70 4f 70 2d 3e  lize(pMem, pOp->
32c40 70 34 2e 70 46 75 6e 63 29 3b 0a 20 20 69 66 28  p4.pFunc);.  if(
32c50 20 72 63 20 29 7b 0a 20 20 20 20 73 71 6c 69 74   rc ){.    sqlit
32c60 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22  e3VdbeError(p, "
32c70 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  %s", sqlite3_val
32c80 75 65 5f 74 65 78 74 28 70 4d 65 6d 29 29 3b 0a  ue_text(pMem));.
32c90 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
32ca0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d  ue_to_error;.  }
32cb0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  .  sqlite3VdbeCh
32cc0 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4d 65  angeEncoding(pMe
32cd0 6d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  m, encoding);.  
32ce0 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
32cf0 49 5a 45 28 70 4d 65 6d 29 3b 0a 20 20 69 66 28  IZE(pMem);.  if(
32d00 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54   sqlite3VdbeMemT
32d10 6f 6f 42 69 67 28 70 4d 65 6d 29 20 29 7b 0a 20  ooBig(pMem) ){. 
32d20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
32d30 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
32d40 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
32d50 4f 4d 49 54 5f 57 41 4c 0a 2f 2a 20 4f 70 63 6f  OMIT_WAL./* Opco
32d60 64 65 3a 20 43 68 65 63 6b 70 6f 69 6e 74 20 50  de: Checkpoint P
32d70 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
32d80 2a 20 43 68 65 63 6b 70 6f 69 6e 74 20 64 61 74  * Checkpoint dat
32d90 61 62 61 73 65 20 50 31 2e 20 54 68 69 73 20 69  abase P1. This i
32da0 73 20 61 20 6e 6f 2d 6f 70 20 69 66 20 50 31 20  s a no-op if P1 
32db0 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79  is not currently
32dc0 20 69 6e 0a 2a 2a 20 57 41 4c 20 6d 6f 64 65 2e   in.** WAL mode.
32dd0 20 50 61 72 61 6d 65 74 65 72 20 50 32 20 69 73   Parameter P2 is
32de0 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 43   one of SQLITE_C
32df0 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56  HECKPOINT_PASSIV
32e00 45 2c 20 46 55 4c 4c 2c 0a 2a 2a 20 52 45 53 54  E, FULL,.** REST
32e10 41 52 54 2c 20 6f 72 20 54 52 55 4e 43 41 54 45  ART, or TRUNCATE
32e20 2e 20 20 57 72 69 74 65 20 31 20 6f 72 20 30 20  .  Write 1 or 0 
32e30 69 6e 74 6f 20 6d 65 6d 5b 50 33 5d 20 69 66 20  into mem[P3] if 
32e40 74 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 20 72  the checkpoint r
32e50 65 74 75 72 6e 73 0a 2a 2a 20 53 51 4c 49 54 45  eturns.** SQLITE
32e60 5f 42 55 53 59 20 6f 72 20 6e 6f 74 2c 20 72 65  _BUSY or not, re
32e70 73 70 65 63 74 69 76 65 6c 79 2e 20 20 57 72 69  spectively.  Wri
32e80 74 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  te the number of
32e90 20 70 61 67 65 73 20 69 6e 20 74 68 65 0a 2a 2a   pages in the.**
32ea0 20 57 41 4c 20 61 66 74 65 72 20 74 68 65 20 63   WAL after the c
32eb0 68 65 63 6b 70 6f 69 6e 74 20 69 6e 74 6f 20 6d  heckpoint into m
32ec0 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 20 74 68 65  em[P3+1] and the
32ed0 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
32ee0 0a 2a 2a 20 69 6e 20 74 68 65 20 57 41 4c 20 74  .** in the WAL t
32ef0 68 61 74 20 68 61 76 65 20 62 65 65 6e 20 63 68  hat have been ch
32f00 65 63 6b 70 6f 69 6e 74 65 64 20 61 66 74 65 72  eckpointed after
32f10 20 74 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 0a   the checkpoint.
32f20 2a 2a 20 63 6f 6d 70 6c 65 74 65 73 20 69 6e 74  ** completes int
32f30 6f 20 6d 65 6d 5b 50 33 2b 32 5d 2e 20 20 48 6f  o mem[P3+2].  Ho
32f40 77 65 76 65 72 20 6f 6e 20 61 6e 20 65 72 72 6f  wever on an erro
32f50 72 2c 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64  r, mem[P3+1] and
32f60 0a 2a 2a 20 6d 65 6d 5b 50 33 2b 32 5d 20 61 72  .** mem[P3+2] ar
32f70 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f  e initialized to
32f80 20 2d 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   -1..*/.case OP_
32f90 43 68 65 63 6b 70 6f 69 6e 74 3a 20 7b 0a 20 20  Checkpoint: {.  
32fa0 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20  int i;          
32fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32fc0 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20  /* Loop counter 
32fd0 2a 2f 0a 20 20 69 6e 74 20 61 52 65 73 5b 33 5d  */.  int aRes[3]
32fe0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
32ff0 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 73 20       /* Results 
33000 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20  */.  Mem *pMem; 
33010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33020 20 20 20 20 20 2f 2a 20 57 72 69 74 65 20 72 65       /* Write re
33030 73 75 6c 74 73 20 68 65 72 65 20 2a 2f 0a 0a 20  sults here */.. 
33040 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
33050 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 52 65  Only==0 );.  aRe
33060 73 5b 30 5d 20 3d 20 30 3b 0a 20 20 61 52 65 73  s[0] = 0;.  aRes
33070 5b 31 5d 20 3d 20 61 52 65 73 5b 32 5d 20 3d 20  [1] = aRes[2] = 
33080 2d 31 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  -1;.  assert( pO
33090 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48  p->p2==SQLITE_CH
330a0 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45  ECKPOINT_PASSIVE
330b0 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e  .       || pOp->
330c0 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b  p2==SQLITE_CHECK
330d0 50 4f 49 4e 54 5f 46 55 4c 4c 0a 20 20 20 20 20  POINT_FULL.     
330e0 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51    || pOp->p2==SQ
330f0 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f  LITE_CHECKPOINT_
33100 52 45 53 54 41 52 54 0a 20 20 20 20 20 20 20 7c  RESTART.       |
33110 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54  | pOp->p2==SQLIT
33120 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 54 52 55  E_CHECKPOINT_TRU
33130 4e 43 41 54 45 0a 20 20 29 3b 0a 20 20 72 63 20  NCATE.  );.  rc 
33140 3d 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70 6f  = sqlite3Checkpo
33150 69 6e 74 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  int(db, pOp->p1,
33160 20 70 4f 70 2d 3e 70 32 2c 20 26 61 52 65 73 5b   pOp->p2, &aRes[
33170 31 5d 2c 20 26 61 52 65 73 5b 32 5d 29 3b 0a 20  1], &aRes[2]);. 
33180 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 69   if( rc ){.    i
33190 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 42 55  f( rc!=SQLITE_BU
331a0 53 59 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  SY ) goto abort_
331b0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
331c0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b    rc = SQLITE_OK
331d0 3b 0a 20 20 20 20 61 52 65 73 5b 30 5d 20 3d 20  ;.    aRes[0] = 
331e0 31 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 30  1;.  }.  for(i=0
331f0 2c 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70  , pMem = &aMem[p
33200 4f 70 2d 3e 70 33 5d 3b 20 69 3c 33 3b 20 69 2b  Op->p3]; i<3; i+
33210 2b 2c 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20  +, pMem++){.    
33220 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
33230 74 49 6e 74 36 34 28 70 4d 65 6d 2c 20 28 69 36  tInt64(pMem, (i6
33240 34 29 61 52 65 73 5b 69 5d 29 3b 0a 20 20 7d 20  4)aRes[i]);.  } 
33250 20 20 20 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 20     .  break;.}; 
33260 20 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65   .#endif..#ifnde
33270 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  f SQLITE_OMIT_PR
33280 41 47 4d 41 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  AGMA./* Opcode: 
33290 4a 6f 75 72 6e 61 6c 4d 6f 64 65 20 50 31 20 50  JournalMode P1 P
332a0 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43  2 P3 * *.**.** C
332b0 68 61 6e 67 65 20 74 68 65 20 6a 6f 75 72 6e 61  hange the journa
332c0 6c 20 6d 6f 64 65 20 6f 66 20 64 61 74 61 62 61  l mode of databa
332d0 73 65 20 50 31 20 74 6f 20 50 33 2e 20 50 33 20  se P1 to P3. P3 
332e0 6d 75 73 74 20 62 65 20 6f 6e 65 20 6f 66 20 74  must be one of t
332f0 68 65 0a 2a 2a 20 50 41 47 45 52 5f 4a 4f 55 52  he.** PAGER_JOUR
33300 4e 41 4c 4d 4f 44 45 5f 58 58 58 20 76 61 6c 75  NALMODE_XXX valu
33310 65 73 2e 20 49 66 20 63 68 61 6e 67 69 6e 67 20  es. If changing 
33320 62 65 74 77 65 65 6e 20 74 68 65 20 76 61 72 69  between the vari
33330 6f 75 73 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20  ous rollback.** 
33340 6d 6f 64 65 73 20 28 64 65 6c 65 74 65 2c 20 74  modes (delete, t
33350 72 75 6e 63 61 74 65 2c 20 70 65 72 73 69 73 74  runcate, persist
33360 2c 20 6f 66 66 20 61 6e 64 20 6d 65 6d 6f 72 79  , off and memory
33370 29 2c 20 74 68 69 73 20 69 73 20 61 20 73 69 6d  ), this is a sim
33380 70 6c 65 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e  ple.** operation
33390 2e 20 4e 6f 20 49 4f 20 69 73 20 72 65 71 75 69  . No IO is requi
333a0 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 63 68  red..**.** If ch
333b0 61 6e 67 69 6e 67 20 69 6e 74 6f 20 6f 72 20 6f  anging into or o
333c0 75 74 20 6f 66 20 57 41 4c 20 6d 6f 64 65 20 74  ut of WAL mode t
333d0 68 65 20 70 72 6f 63 65 64 75 72 65 20 69 73 20  he procedure is 
333e0 6d 6f 72 65 20 63 6f 6d 70 6c 69 63 61 74 65 64  more complicated
333f0 2e 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20  ..**.** Write a 
33400 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e  string containin
33410 67 20 74 68 65 20 66 69 6e 61 6c 20 6a 6f 75 72  g the final jour
33420 6e 61 6c 2d 6d 6f 64 65 20 74 6f 20 72 65 67 69  nal-mode to regi
33430 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  ster P2..*/.case
33440 20 4f 50 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65 3a   OP_JournalMode:
33450 20 7b 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f   {    /* out2 */
33460 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20 20  .  Btree *pBt;  
33470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33480 20 20 20 2f 2a 20 42 74 72 65 65 20 74 6f 20 63     /* Btree to c
33490 68 61 6e 67 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f  hange journal mo
334a0 64 65 20 6f 66 20 2a 2f 0a 20 20 50 61 67 65 72  de of */.  Pager
334b0 20 2a 70 50 61 67 65 72 3b 20 20 20 20 20 20 20   *pPager;       
334c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
334d0 67 65 72 20 61 73 73 6f 63 69 61 74 65 64 20 77  ger associated w
334e0 69 74 68 20 70 42 74 20 2a 2f 0a 20 20 69 6e 74  ith pBt */.  int
334f0 20 65 4e 65 77 3b 20 20 20 20 20 20 20 20 20 20   eNew;          
33500 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
33510 4e 65 77 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65  New journal mode
33520 20 2a 2f 0a 20 20 69 6e 74 20 65 4f 6c 64 3b 20   */.  int eOld; 
33530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33540 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 6c 64        /* The old
33550 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f   journal mode */
33560 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
33570 4f 4d 49 54 5f 57 41 4c 0a 20 20 63 6f 6e 73 74  OMIT_WAL.  const
33580 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65   char *zFilename
33590 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61  ;          /* Na
335a0 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 66  me of database f
335b0 69 6c 65 20 66 6f 72 20 70 50 61 67 65 72 20 2a  ile for pPager *
335c0 2f 0a 23 65 6e 64 69 66 0a 0a 20 20 70 4f 75 74  /.#endif..  pOut
335d0 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
335e0 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 65 4e 65  e(p, pOp);.  eNe
335f0 77 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61  w = pOp->p3;.  a
33600 73 73 65 72 74 28 20 65 4e 65 77 3d 3d 50 41 47  ssert( eNew==PAG
33610 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 44  ER_JOURNALMODE_D
33620 45 4c 45 54 45 20 0a 20 20 20 20 20 20 20 7c 7c  ELETE .       ||
33630 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
33640 52 4e 41 4c 4d 4f 44 45 5f 54 52 55 4e 43 41 54  RNALMODE_TRUNCAT
33650 45 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65  E .       || eNe
33660 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
33670 4d 4f 44 45 5f 50 45 52 53 49 53 54 20 0a 20 20  MODE_PERSIST .  
33680 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41       || eNew==PA
33690 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
336a0 4f 46 46 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e  OFF.       || eN
336b0 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
336c0 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 0a 20 20 20  LMODE_MEMORY.   
336d0 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47      || eNew==PAG
336e0 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57  ER_JOURNALMODE_W
336f0 41 4c 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65  AL.       || eNe
33700 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
33710 4d 4f 44 45 5f 51 55 45 52 59 0a 20 20 29 3b 0a  MODE_QUERY.  );.
33720 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
33730 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
33740 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
33750 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
33760 3d 3d 30 20 29 3b 0a 0a 20 20 70 42 74 20 3d 20  ==0 );..  pBt = 
33770 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
33780 2e 70 42 74 3b 0a 20 20 70 50 61 67 65 72 20 3d  .pBt;.  pPager =
33790 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67   sqlite3BtreePag
337a0 65 72 28 70 42 74 29 3b 0a 20 20 65 4f 6c 64 20  er(pBt);.  eOld 
337b0 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 47 65  = sqlite3PagerGe
337c0 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61  tJournalMode(pPa
337d0 67 65 72 29 3b 0a 20 20 69 66 28 20 65 4e 65 77  ger);.  if( eNew
337e0 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
337f0 4f 44 45 5f 51 55 45 52 59 20 29 20 65 4e 65 77  ODE_QUERY ) eNew
33800 20 3d 20 65 4f 6c 64 3b 0a 20 20 69 66 28 20 21   = eOld;.  if( !
33810 73 71 6c 69 74 65 33 50 61 67 65 72 4f 6b 54 6f  sqlite3PagerOkTo
33820 43 68 61 6e 67 65 4a 6f 75 72 6e 61 6c 4d 6f 64  ChangeJournalMod
33830 65 28 70 50 61 67 65 72 29 20 29 20 65 4e 65 77  e(pPager) ) eNew
33840 20 3d 20 65 4f 6c 64 3b 0a 0a 23 69 66 6e 64 65   = eOld;..#ifnde
33850 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41  f SQLITE_OMIT_WA
33860 4c 0a 20 20 7a 46 69 6c 65 6e 61 6d 65 20 3d 20  L.  zFilename = 
33870 73 71 6c 69 74 65 33 50 61 67 65 72 46 69 6c 65  sqlite3PagerFile
33880 6e 61 6d 65 28 70 50 61 67 65 72 2c 20 31 29 3b  name(pPager, 1);
33890 0a 0a 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c  ..  /* Do not al
338a0 6c 6f 77 20 61 20 74 72 61 6e 73 69 74 69 6f 6e  low a transition
338b0 20 74 6f 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65   to journal_mode
338c0 3d 57 41 4c 20 66 6f 72 20 61 20 64 61 74 61 62  =WAL for a datab
338d0 61 73 65 0a 20 20 2a 2a 20 69 6e 20 74 65 6d 70  ase.  ** in temp
338e0 6f 72 61 72 79 20 73 74 6f 72 61 67 65 20 6f 72  orary storage or
338f0 20 69 66 20 74 68 65 20 56 46 53 20 64 6f 65 73   if the VFS does
33900 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 73 68 61   not support sha
33910 72 65 64 20 6d 65 6d 6f 72 79 20 0a 20 20 2a 2f  red memory .  */
33920 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d 50 41 47  .  if( eNew==PAG
33930 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57  ER_JOURNALMODE_W
33940 41 4c 0a 20 20 20 26 26 20 28 73 71 6c 69 74 65  AL.   && (sqlite
33950 33 53 74 72 6c 65 6e 33 30 28 7a 46 69 6c 65 6e  3Strlen30(zFilen
33960 61 6d 65 29 3d 3d 30 20 20 20 20 20 20 20 20 20  ame)==0         
33970 20 20 2f 2a 20 54 65 6d 70 20 66 69 6c 65 20 2a    /* Temp file *
33980 2f 0a 20 20 20 20 20 20 20 7c 7c 20 21 73 71 6c  /.       || !sql
33990 69 74 65 33 50 61 67 65 72 57 61 6c 53 75 70 70  ite3PagerWalSupp
339a0 6f 72 74 65 64 28 70 50 61 67 65 72 29 29 20 20  orted(pPager))  
339b0 20 2f 2a 20 4e 6f 20 73 68 61 72 65 64 2d 6d 65   /* No shared-me
339c0 6d 6f 72 79 20 73 75 70 70 6f 72 74 20 2a 2f 0a  mory support */.
339d0 20 20 29 7b 0a 20 20 20 20 65 4e 65 77 20 3d 20    ){.    eNew = 
339e0 65 4f 6c 64 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  eOld;.  }..  if(
339f0 20 28 65 4e 65 77 21 3d 65 4f 6c 64 29 0a 20 20   (eNew!=eOld).  
33a00 20 26 26 20 28 65 4f 6c 64 3d 3d 50 41 47 45 52   && (eOld==PAGER
33a10 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c  _JOURNALMODE_WAL
33a20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f   || eNew==PAGER_
33a30 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 29  JOURNALMODE_WAL)
33a40 0a 20 20 29 7b 0a 20 20 20 20 69 66 28 20 21 64  .  ){.    if( !d
33a50 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 7c 7c  b->autoCommit ||
33a60 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 3e 31   db->nVdbeRead>1
33a70 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53   ){.      rc = S
33a80 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20  QLITE_ERROR;.   
33a90 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
33aa0 72 6f 72 28 70 2c 0a 20 20 20 20 20 20 20 20 20  ror(p,.         
33ab0 20 22 63 61 6e 6e 6f 74 20 63 68 61 6e 67 65 20   "cannot change 
33ac0 25 73 20 77 61 6c 20 6d 6f 64 65 20 66 72 6f 6d  %s wal mode from
33ad0 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61   within a transa
33ae0 63 74 69 6f 6e 22 2c 0a 20 20 20 20 20 20 20 20  ction",.        
33af0 20 20 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a    (eNew==PAGER_J
33b00 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f  OURNALMODE_WAL ?
33b10 20 22 69 6e 74 6f 22 20 3a 20 22 6f 75 74 20 6f   "into" : "out o
33b20 66 22 29 0a 20 20 20 20 20 20 29 3b 0a 20 20 20  f").      );.   
33b30 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
33b40 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
33b50 7d 65 6c 73 65 7b 0a 20 0a 20 20 20 20 20 20 69  }else{. .      i
33b60 66 28 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a  f( eOld==PAGER_J
33b70 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 29  OURNALMODE_WAL )
33b80 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20  {.        /* If 
33b90 6c 65 61 76 69 6e 67 20 57 41 4c 20 6d 6f 64 65  leaving WAL mode
33ba0 2c 20 63 6c 6f 73 65 20 74 68 65 20 6c 6f 67 20  , close the log 
33bb0 66 69 6c 65 2e 20 49 66 20 73 75 63 63 65 73 73  file. If success
33bc0 66 75 6c 2c 20 74 68 65 20 63 61 6c 6c 0a 20 20  ful, the call.  
33bd0 20 20 20 20 20 20 2a 2a 20 74 6f 20 50 61 67 65        ** to Page
33be0 72 43 6c 6f 73 65 57 61 6c 28 29 20 63 68 65 63  rCloseWal() chec
33bf0 6b 70 6f 69 6e 74 73 20 61 6e 64 20 64 65 6c 65  kpoints and dele
33c00 74 65 73 20 74 68 65 20 77 72 69 74 65 2d 61 68  tes the write-ah
33c10 65 61 64 2d 6c 6f 67 20 0a 20 20 20 20 20 20 20  ead-log .       
33c20 20 2a 2a 20 66 69 6c 65 2e 20 41 6e 20 45 58 43   ** file. An EXC
33c30 4c 55 53 49 56 45 20 6c 6f 63 6b 20 6d 61 79 20  LUSIVE lock may 
33c40 73 74 69 6c 6c 20 62 65 20 68 65 6c 64 20 6f 6e  still be held on
33c50 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
33c60 6c 65 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 61  le .        ** a
33c70 66 74 65 72 20 61 20 73 75 63 63 65 73 73 66 75  fter a successfu
33c80 6c 20 72 65 74 75 72 6e 2e 20 0a 20 20 20 20 20  l return. .     
33c90 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 72 63     */.        rc
33ca0 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 43   = sqlite3PagerC
33cb0 6c 6f 73 65 57 61 6c 28 70 50 61 67 65 72 29 3b  loseWal(pPager);
33cc0 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63 3d  .        if( rc=
33cd0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
33ce0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 50          sqlite3P
33cf0 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f  agerSetJournalMo
33d00 64 65 28 70 50 61 67 65 72 2c 20 65 4e 65 77 29  de(pPager, eNew)
33d10 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
33d20 20 20 7d 65 6c 73 65 20 69 66 28 20 65 4f 6c 64    }else if( eOld
33d30 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
33d40 4f 44 45 5f 4d 45 4d 4f 52 59 20 29 7b 0a 20 20  ODE_MEMORY ){.  
33d50 20 20 20 20 20 20 2f 2a 20 43 61 6e 6e 6f 74 20        /* Cannot 
33d60 74 72 61 6e 73 69 74 69 6f 6e 20 64 69 72 65 63  transition direc
33d70 74 6c 79 20 66 72 6f 6d 20 4d 45 4d 4f 52 59 20  tly from MEMORY 
33d80 74 6f 20 57 41 4c 2e 20 20 55 73 65 20 6d 6f 64  to WAL.  Use mod
33d90 65 20 4f 46 46 0a 20 20 20 20 20 20 20 20 2a 2a  e OFF.        **
33da0 20 61 73 20 61 6e 20 69 6e 74 65 72 6d 65 64 69   as an intermedi
33db0 61 74 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 73  ate */.        s
33dc0 71 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f  qlite3PagerSetJo
33dd0 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72  urnalMode(pPager
33de0 2c 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  , PAGER_JOURNALM
33df0 4f 44 45 5f 4f 46 46 29 3b 0a 20 20 20 20 20 20  ODE_OFF);.      
33e00 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 4f 70  }.  .      /* Op
33e10 65 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  en a transaction
33e20 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   on the database
33e30 20 66 69 6c 65 2e 20 52 65 67 61 72 64 6c 65 73   file. Regardles
33e40 73 20 6f 66 20 74 68 65 20 6a 6f 75 72 6e 61 6c  s of the journal
33e50 0a 20 20 20 20 20 20 2a 2a 20 6d 6f 64 65 2c 20  .      ** mode, 
33e60 74 68 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e  this transaction
33e70 20 61 6c 77 61 79 73 20 75 73 65 73 20 61 20 72   always uses a r
33e80 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e  ollback journal.
33e90 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
33ea0 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42  assert( sqlite3B
33eb0 74 72 65 65 49 73 49 6e 54 72 61 6e 73 28 70 42  treeIsInTrans(pB
33ec0 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 69  t)==0 );.      i
33ed0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
33ee0 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
33ef0 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74   sqlite3BtreeSet
33f00 56 65 72 73 69 6f 6e 28 70 42 74 2c 20 28 65 4e  Version(pBt, (eN
33f10 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
33f20 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 32 20 3a 20  LMODE_WAL ? 2 : 
33f30 31 29 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  1));.      }.   
33f40 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a   }.  }.#endif /*
33f50 20 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f   ifndef SQLITE_O
33f60 4d 49 54 5f 57 41 4c 20 2a 2f 0a 0a 20 20 69 66  MIT_WAL */..  if
33f70 28 20 72 63 20 29 20 65 4e 65 77 20 3d 20 65 4f  ( rc ) eNew = eO
33f80 6c 64 3b 0a 20 20 65 4e 65 77 20 3d 20 73 71 6c  ld;.  eNew = sql
33f90 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72  ite3PagerSetJour
33fa0 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20  nalMode(pPager, 
33fb0 65 4e 65 77 29 3b 0a 0a 20 20 70 4f 75 74 2d 3e  eNew);..  pOut->
33fc0 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c  flags = MEM_Str|
33fd0 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54  MEM_Static|MEM_T
33fe0 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d  erm;.  pOut->z =
33ff0 20 28 63 68 61 72 20 2a 29 73 71 6c 69 74 65 33   (char *)sqlite3
34000 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28  JournalModename(
34010 65 4e 65 77 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e  eNew);.  pOut->n
34020 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e   = sqlite3Strlen
34030 33 30 28 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 70  30(pOut->z);.  p
34040 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54  Out->enc = SQLIT
34050 45 5f 55 54 46 38 3b 0a 20 20 73 71 6c 69 74 65  E_UTF8;.  sqlite
34060 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
34070 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69  ing(pOut, encodi
34080 6e 67 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  ng);.  if( rc ) 
34090 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
340a0 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b  o_error;.  break
340b0 3b 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53  ;.};.#endif /* S
340c0 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d  QLITE_OMIT_PRAGM
340d0 41 20 2a 2f 0a 0a 23 69 66 20 21 64 65 66 69 6e  A */..#if !defin
340e0 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ed(SQLITE_OMIT_V
340f0 41 43 55 55 4d 29 20 26 26 20 21 64 65 66 69 6e  ACUUM) && !defin
34100 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ed(SQLITE_OMIT_A
34110 54 54 41 43 48 29 0a 2f 2a 20 4f 70 63 6f 64 65  TTACH)./* Opcode
34120 3a 20 56 61 63 75 75 6d 20 50 31 20 2a 20 2a 20  : Vacuum P1 * * 
34130 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56 61 63 75 75 6d  * *.**.** Vacuum
34140 20 74 68 65 20 65 6e 74 69 72 65 20 64 61 74 61   the entire data
34150 62 61 73 65 20 50 31 2e 20 20 50 31 20 69 73 20  base P1.  P1 is 
34160 30 20 66 6f 72 20 22 6d 61 69 6e 22 2c 20 61 6e  0 for "main", an
34170 64 20 32 20 6f 72 20 6d 6f 72 65 0a 2a 2a 20 66  d 2 or more.** f
34180 6f 72 20 61 6e 20 61 74 74 61 63 68 65 64 20 64  or an attached d
34190 61 74 61 62 61 73 65 2e 20 20 54 68 65 20 22 74  atabase.  The "t
341a0 65 6d 70 22 20 64 61 74 61 62 61 73 65 20 6d 61  emp" database ma
341b0 79 20 6e 6f 74 20 62 65 20 76 61 63 75 75 6d 65  y not be vacuume
341c0 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61  d..*/.case OP_Va
341d0 63 75 75 6d 3a 20 7b 0a 20 20 61 73 73 65 72 74  cuum: {.  assert
341e0 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
341f0 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
34200 65 33 52 75 6e 56 61 63 75 75 6d 28 26 70 2d 3e  e3RunVacuum(&p->
34210 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 70 4f 70  zErrMsg, db, pOp
34220 2d 3e 70 31 29 3b 0a 20 20 69 66 28 20 72 63 20  ->p1);.  if( rc 
34230 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
34240 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65  _to_error;.  bre
34250 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ak;.}.#endif..#i
34260 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
34270 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55  E_OMIT_AUTOVACUU
34280 4d 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  M)./* Opcode: In
34290 63 72 56 61 63 75 75 6d 20 50 31 20 50 32 20 2a  crVacuum P1 P2 *
342a0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 65 72 66 6f   * *.**.** Perfo
342b0 72 6d 20 61 20 73 69 6e 67 6c 65 20 73 74 65 70  rm a single step
342c0 20 6f 66 20 74 68 65 20 69 6e 63 72 65 6d 65 6e   of the incremen
342d0 74 61 6c 20 76 61 63 75 75 6d 20 70 72 6f 63 65  tal vacuum proce
342e0 64 75 72 65 20 6f 6e 0a 2a 2a 20 74 68 65 20 50  dure on.** the P
342f0 31 20 64 61 74 61 62 61 73 65 2e 20 49 66 20 74  1 database. If t
34300 68 65 20 76 61 63 75 75 6d 20 68 61 73 20 66 69  he vacuum has fi
34310 6e 69 73 68 65 64 2c 20 6a 75 6d 70 20 74 6f 20  nished, jump to 
34320 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 50  instruction.** P
34330 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 66 61  2. Otherwise, fa
34340 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
34350 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
34360 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  on..*/.case OP_I
34370 6e 63 72 56 61 63 75 75 6d 3a 20 7b 20 20 20 20  ncrVacuum: {    
34380 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
34390 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20   Btree *pBt;..  
343a0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
343b0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62  =0 && pOp->p1<db
343c0 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
343d0 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d  t( DbMaskTest(p-
343e0 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d  >btreeMask, pOp-
343f0 3e 70 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74  >p1) );.  assert
34400 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
34410 20 29 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e   );.  pBt = db->
34420 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74  aDb[pOp->p1].pBt
34430 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
34440 42 74 72 65 65 49 6e 63 72 56 61 63 75 75 6d 28  BtreeIncrVacuum(
34450 70 42 74 29 3b 0a 20 20 56 64 62 65 42 72 61 6e  pBt);.  VdbeBran
34460 63 68 54 61 6b 65 6e 28 72 63 3d 3d 53 51 4c 49  chTaken(rc==SQLI
34470 54 45 5f 44 4f 4e 45 2c 32 29 3b 0a 20 20 69 66  TE_DONE,2);.  if
34480 28 20 72 63 20 29 7b 0a 20 20 20 20 69 66 28 20  ( rc ){.    if( 
34490 72 63 21 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20  rc!=SQLITE_DONE 
344a0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
344b0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 72  _to_error;.    r
344c0 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20  c = SQLITE_OK;. 
344d0 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
344e0 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  p2;.  }.  break;
344f0 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70  .}.#endif../* Op
34500 63 6f 64 65 3a 20 45 78 70 69 72 65 20 50 31 20  code: Expire P1 
34510 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 61  * * * *.**.** Ca
34520 75 73 65 20 70 72 65 63 6f 6d 70 69 6c 65 64 20  use precompiled 
34530 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 65 78  statements to ex
34540 70 69 72 65 2e 20 20 57 68 65 6e 20 61 6e 20 65  pire.  When an e
34550 78 70 69 72 65 64 20 73 74 61 74 65 6d 65 6e 74  xpired statement
34560 0a 2a 2a 20 69 73 20 65 78 65 63 75 74 65 64 20  .** is executed 
34570 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 73 74  using sqlite3_st
34580 65 70 28 29 20 69 74 20 77 69 6c 6c 20 65 69 74  ep() it will eit
34590 68 65 72 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  her automaticall
345a0 79 0a 2a 2a 20 72 65 70 72 65 70 61 72 65 20 69  y.** reprepare i
345b0 74 73 65 6c 66 20 28 69 66 20 69 74 20 77 61 73  tself (if it was
345c0 20 6f 72 69 67 69 6e 61 6c 6c 79 20 63 72 65 61   originally crea
345d0 74 65 64 20 75 73 69 6e 67 20 73 71 6c 69 74 65  ted using sqlite
345e0 33 5f 70 72 65 70 61 72 65 5f 76 32 28 29 29 0a  3_prepare_v2()).
345f0 2a 2a 20 6f 72 20 69 74 20 77 69 6c 6c 20 66 61  ** or it will fa
34600 69 6c 20 77 69 74 68 20 53 51 4c 49 54 45 5f 53  il with SQLITE_S
34610 43 48 45 4d 41 2e 0a 2a 2a 20 0a 2a 2a 20 49 66  CHEMA..** .** If
34620 20 50 31 20 69 73 20 30 2c 20 74 68 65 6e 20 61   P1 is 0, then a
34630 6c 6c 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  ll SQL statement
34640 73 20 62 65 63 6f 6d 65 20 65 78 70 69 72 65 64  s become expired
34650 2e 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a  . If P1 is non-z
34660 65 72 6f 2c 0a 2a 2a 20 74 68 65 6e 20 6f 6e 6c  ero,.** then onl
34670 79 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20  y the currently 
34680 65 78 65 63 75 74 69 6e 67 20 73 74 61 74 65 6d  executing statem
34690 65 6e 74 20 69 73 20 65 78 70 69 72 65 64 2e 0a  ent is expired..
346a0 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 78 70 69 72  */.case OP_Expir
346b0 65 3a 20 7b 0a 20 20 69 66 28 20 21 70 4f 70 2d  e: {.  if( !pOp-
346c0 3e 70 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  >p1 ){.    sqlit
346d0 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64  e3ExpirePrepared
346e0 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a  Statements(db);.
346f0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e    }else{.    p->
34700 65 78 70 69 72 65 64 20 3d 20 31 3b 0a 20 20 7d  expired = 1;.  }
34710 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66  .  break;.}..#if
34720 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
34730 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 2f 2a  _SHARED_CACHE./*
34740 20 4f 70 63 6f 64 65 3a 20 54 61 62 6c 65 4c 6f   Opcode: TableLo
34750 63 6b 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  ck P1 P2 P3 P4 *
34760 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 44  .** Synopsis: iD
34770 62 3d 50 31 20 72 6f 6f 74 3d 50 32 20 77 72 69  b=P1 root=P2 wri
34780 74 65 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 62 74 61  te=P3.**.** Obta
34790 69 6e 20 61 20 6c 6f 63 6b 20 6f 6e 20 61 20 70  in a lock on a p
347a0 61 72 74 69 63 75 6c 61 72 20 74 61 62 6c 65 2e  articular table.
347b0 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
347c0 6e 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 77  n is only used w
347d0 68 65 6e 0a 2a 2a 20 74 68 65 20 73 68 61 72 65  hen.** the share
347e0 64 2d 63 61 63 68 65 20 66 65 61 74 75 72 65 20  d-cache feature 
347f0 69 73 20 65 6e 61 62 6c 65 64 2e 20 0a 2a 2a 0a  is enabled. .**.
34800 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e 64  ** P1 is the ind
34810 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ex of the databa
34820 73 65 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44  se in sqlite3.aD
34830 62 5b 5d 20 6f 66 20 74 68 65 20 64 61 74 61 62  b[] of the datab
34840 61 73 65 0a 2a 2a 20 6f 6e 20 77 68 69 63 68 20  ase.** on which 
34850 74 68 65 20 6c 6f 63 6b 20 69 73 20 61 63 71 75  the lock is acqu
34860 69 72 65 64 2e 20 20 41 20 72 65 61 64 6c 6f 63  ired.  A readloc
34870 6b 20 69 73 20 6f 62 74 61 69 6e 65 64 20 69 66  k is obtained if
34880 20 50 33 3d 3d 30 20 6f 72 0a 2a 2a 20 61 20 77   P3==0 or.** a w
34890 72 69 74 65 20 6c 6f 63 6b 20 69 66 20 50 33 3d  rite lock if P3=
348a0 3d 31 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 63 6f 6e  =1..**.** P2 con
348b0 74 61 69 6e 73 20 74 68 65 20 72 6f 6f 74 2d 70  tains the root-p
348c0 61 67 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  age of the table
348d0 20 74 6f 20 6c 6f 63 6b 2e 0a 2a 2a 0a 2a 2a 20   to lock..**.** 
348e0 50 34 20 63 6f 6e 74 61 69 6e 73 20 61 20 70 6f  P4 contains a po
348f0 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6e 61 6d  inter to the nam
34900 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 62  e of the table b
34910 65 69 6e 67 20 6c 6f 63 6b 65 64 2e 20 54 68 69  eing locked. Thi
34920 73 20 69 73 20 6f 6e 6c 79 0a 2a 2a 20 75 73 65  s is only.** use
34930 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61 6e  d to generate an
34940 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 69   error message i
34950 66 20 74 68 65 20 6c 6f 63 6b 20 63 61 6e 6e 6f  f the lock canno
34960 74 20 62 65 20 6f 62 74 61 69 6e 65 64 2e 0a 2a  t be obtained..*
34970 2f 0a 63 61 73 65 20 4f 50 5f 54 61 62 6c 65 4c  /.case OP_TableL
34980 6f 63 6b 3a 20 7b 0a 20 20 75 38 20 69 73 57 72  ock: {.  u8 isWr
34990 69 74 65 4c 6f 63 6b 20 3d 20 28 75 38 29 70 4f  iteLock = (u8)pO
349a0 70 2d 3e 70 33 3b 0a 20 20 69 66 28 20 69 73 57  p->p3;.  if( isW
349b0 72 69 74 65 4c 6f 63 6b 20 7c 7c 20 30 3d 3d 28  riteLock || 0==(
349c0 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45  db->flags&SQLITE
349d0 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64  _ReadUncommitted
349e0 29 20 29 7b 0a 20 20 20 20 69 6e 74 20 70 31 20  ) ){.    int p1 
349f0 3d 20 70 4f 70 2d 3e 70 31 3b 20 0a 20 20 20 20  = pOp->p1; .    
34a00 61 73 73 65 72 74 28 20 70 31 3e 3d 30 20 26 26  assert( p1>=0 &&
34a10 20 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20   p1<db->nDb );. 
34a20 20 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73     assert( DbMas
34a30 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61  kTest(p->btreeMa
34a40 73 6b 2c 20 70 31 29 20 29 3b 0a 20 20 20 20 61  sk, p1) );.    a
34a50 73 73 65 72 74 28 20 69 73 57 72 69 74 65 4c 6f  ssert( isWriteLo
34a60 63 6b 3d 3d 30 20 7c 7c 20 69 73 57 72 69 74 65  ck==0 || isWrite
34a70 4c 6f 63 6b 3d 3d 31 20 29 3b 0a 20 20 20 20 72  Lock==1 );.    r
34a80 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
34a90 4c 6f 63 6b 54 61 62 6c 65 28 64 62 2d 3e 61 44  LockTable(db->aD
34aa0 62 5b 70 31 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e  b[p1].pBt, pOp->
34ab0 70 32 2c 20 69 73 57 72 69 74 65 4c 6f 63 6b 29  p2, isWriteLock)
34ac0 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 7b 0a  ;.    if( rc ){.
34ad0 20 20 20 20 20 20 69 66 28 20 28 72 63 26 30 78        if( (rc&0x
34ae0 46 46 29 3d 3d 53 51 4c 49 54 45 5f 4c 4f 43 4b  FF)==SQLITE_LOCK
34af0 45 44 20 29 7b 0a 20 20 20 20 20 20 20 20 63 6f  ED ){.        co
34b00 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d 20 70 4f  nst char *z = pO
34b10 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 20 20 20  p->p4.z;.       
34b20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f   sqlite3VdbeErro
34b30 72 28 70 2c 20 22 64 61 74 61 62 61 73 65 20 74  r(p, "database t
34b40 61 62 6c 65 20 69 73 20 6c 6f 63 6b 65 64 3a 20  able is locked: 
34b50 25 73 22 2c 20 7a 29 3b 0a 20 20 20 20 20 20 7d  %s", z);.      }
34b60 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  .      goto abor
34b70 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
34b80 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
34b90 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
34ba0 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45  QLITE_OMIT_SHARE
34bb0 44 5f 43 41 43 48 45 20 2a 2f 0a 0a 23 69 66 6e  D_CACHE */..#ifn
34bc0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
34bd0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
34be0 4f 70 63 6f 64 65 3a 20 56 42 65 67 69 6e 20 2a  Opcode: VBegin *
34bf0 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
34c00 50 34 20 6d 61 79 20 62 65 20 61 20 70 6f 69 6e  P4 may be a poin
34c10 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74 65  ter to an sqlite
34c20 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65  3_vtab structure
34c30 2e 20 49 66 20 73 6f 2c 20 63 61 6c 6c 20 74 68  . If so, call th
34c40 65 20 0a 2a 2a 20 78 42 65 67 69 6e 20 6d 65 74  e .** xBegin met
34c50 68 6f 64 20 66 6f 72 20 74 68 61 74 20 74 61 62  hod for that tab
34c60 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c 20  le..**.** Also, 
34c70 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 50  whether or not P
34c80 34 20 69 73 20 73 65 74 2c 20 63 68 65 63 6b 20  4 is set, check 
34c90 74 68 61 74 20 74 68 69 73 20 69 73 20 6e 6f 74  that this is not
34ca0 20 62 65 69 6e 67 20 63 61 6c 6c 65 64 20 66 72   being called fr
34cb0 6f 6d 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 63  om.** within a c
34cc0 61 6c 6c 62 61 63 6b 20 74 6f 20 61 20 76 69 72  allback to a vir
34cd0 74 75 61 6c 20 74 61 62 6c 65 20 78 53 79 6e 63  tual table xSync
34ce0 28 29 20 6d 65 74 68 6f 64 2e 20 49 66 20 69 74  () method. If it
34cf0 20 69 73 2c 20 74 68 65 20 65 72 72 6f 72 0a 2a   is, the error.*
34d00 2a 20 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 73  * code will be s
34d10 65 74 20 74 6f 20 53 51 4c 49 54 45 5f 4c 4f 43  et to SQLITE_LOC
34d20 4b 45 44 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  KED..*/.case OP_
34d30 56 42 65 67 69 6e 3a 20 7b 0a 20 20 56 54 61 62  VBegin: {.  VTab
34d40 6c 65 20 2a 70 56 54 61 62 3b 0a 20 20 70 56 54  le *pVTab;.  pVT
34d50 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74  ab = pOp->p4.pVt
34d60 61 62 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  ab;.  rc = sqlit
34d70 65 33 56 74 61 62 42 65 67 69 6e 28 64 62 2c 20  e3VtabBegin(db, 
34d80 70 56 54 61 62 29 3b 0a 20 20 69 66 28 20 70 56  pVTab);.  if( pV
34d90 54 61 62 20 29 20 73 71 6c 69 74 65 33 56 74 61  Tab ) sqlite3Vta
34da0 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c  bImportErrmsg(p,
34db0 20 70 56 54 61 62 2d 3e 70 56 74 61 62 29 3b 0a   pVTab->pVtab);.
34dc0 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
34dd0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
34de0 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  or;.  break;.}.#
34df0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
34e00 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
34e10 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
34e20 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
34e30 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
34e40 3a 20 56 43 72 65 61 74 65 20 50 31 20 50 32 20  : VCreate P1 P2 
34e50 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 32 20 69  * * *.**.** P2 i
34e60 73 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61  s a register tha
34e70 74 20 68 6f 6c 64 73 20 74 68 65 20 6e 61 6d 65  t holds the name
34e80 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74 61   of a virtual ta
34e90 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73 65 20  ble in database 
34ea0 0a 2a 2a 20 50 31 2e 20 43 61 6c 6c 20 74 68 65  .** P1. Call the
34eb0 20 78 43 72 65 61 74 65 20 6d 65 74 68 6f 64 20   xCreate method 
34ec0 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65 2e 0a  for that table..
34ed0 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43 72 65 61  */.case OP_VCrea
34ee0 74 65 3a 20 7b 0a 20 20 4d 65 6d 20 73 4d 65 6d  te: {.  Mem sMem
34ef0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f  ;          /* Fo
34f00 72 20 73 74 6f 72 69 6e 67 20 74 68 65 20 72 65  r storing the re
34f10 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64  cord being decod
34f20 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  ed */.  const ch
34f30 61 72 20 2a 7a 54 61 62 3b 20 20 2f 2a 20 4e 61  ar *zTab;  /* Na
34f40 6d 65 20 6f 66 20 74 68 65 20 76 69 72 74 75 61  me of the virtua
34f50 6c 20 74 61 62 6c 65 20 2a 2f 0a 0a 20 20 6d 65  l table */..  me
34f60 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c 20 73  mset(&sMem, 0, s
34f70 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a 20 20  izeof(sMem));.  
34f80 73 4d 65 6d 2e 64 62 20 3d 20 64 62 3b 0a 20 20  sMem.db = db;.  
34f90 2f 2a 20 42 65 63 61 75 73 65 20 50 32 20 69 73  /* Because P2 is
34fa0 20 61 6c 77 61 79 73 20 61 20 73 74 61 74 69 63   always a static
34fb0 20 73 74 72 69 6e 67 2c 20 69 74 20 69 73 20 69   string, it is i
34fc0 6d 70 6f 73 73 69 62 6c 65 20 66 6f 72 20 74 68  mpossible for th
34fd0 65 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64  e.  ** sqlite3Vd
34fe0 62 65 4d 65 6d 43 6f 70 79 28 29 20 74 6f 20 66  beMemCopy() to f
34ff0 61 69 6c 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ail */.  assert(
35000 20 28 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 2e   (aMem[pOp->p2].
35010 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 29  flags & MEM_Str)
35020 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
35030 20 28 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 2e   (aMem[pOp->p2].
35040 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 61 74  flags & MEM_Stat
35050 69 63 29 21 3d 30 20 29 3b 0a 20 20 72 63 20 3d  ic)!=0 );.  rc =
35060 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43   sqlite3VdbeMemC
35070 6f 70 79 28 26 73 4d 65 6d 2c 20 26 61 4d 65 6d  opy(&sMem, &aMem
35080 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 61 73  [pOp->p2]);.  as
35090 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
350a0 5f 4f 4b 20 29 3b 0a 20 20 7a 54 61 62 20 3d 20  _OK );.  zTab = 
350b0 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c  (const char*)sql
350c0 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
350d0 26 73 4d 65 6d 29 3b 0a 20 20 61 73 73 65 72 74  &sMem);.  assert
350e0 28 20 7a 54 61 62 20 7c 7c 20 64 62 2d 3e 6d 61  ( zTab || db->ma
350f0 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20  llocFailed );.  
35100 69 66 28 20 7a 54 61 62 20 29 7b 0a 20 20 20 20  if( zTab ){.    
35110 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62  rc = sqlite3Vtab
35120 43 61 6c 6c 43 72 65 61 74 65 28 64 62 2c 20 70  CallCreate(db, p
35130 4f 70 2d 3e 70 31 2c 20 7a 54 61 62 2c 20 26 70  Op->p1, zTab, &p
35140 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 7d 0a  ->zErrMsg);.  }.
35150 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
35160 52 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a  Release(&sMem);.
35170 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
35180 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
35190 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  or;.  break;.}.#
351a0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
351b0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
351c0 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
351d0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
351e0 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
351f0 3a 20 56 44 65 73 74 72 6f 79 20 50 31 20 2a 20  : VDestroy P1 * 
35200 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
35210 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  is the name of a
35220 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69   virtual table i
35230 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20  n database P1.  
35240 43 61 6c 6c 20 74 68 65 20 78 44 65 73 74 72 6f  Call the xDestro
35250 79 20 6d 65 74 68 6f 64 0a 2a 2a 20 6f 66 20 74  y method.** of t
35260 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61  hat table..*/.ca
35270 73 65 20 4f 50 5f 56 44 65 73 74 72 6f 79 3a 20  se OP_VDestroy: 
35280 7b 0a 20 20 64 62 2d 3e 6e 56 44 65 73 74 72 6f  {.  db->nVDestro
35290 79 2b 2b 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  y++;.  rc = sqli
352a0 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72  te3VtabCallDestr
352b0 6f 79 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  oy(db, pOp->p1, 
352c0 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 64 62  pOp->p4.z);.  db
352d0 2d 3e 6e 56 44 65 73 74 72 6f 79 2d 2d 3b 0a 20  ->nVDestroy--;. 
352e0 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
352f0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
35300 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  r;.  break;.}.#e
35310 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
35320 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
35330 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
35340 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
35350 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
35360 20 56 4f 70 65 6e 20 50 31 20 2a 20 2a 20 50 34   VOpen P1 * * P4
35370 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61   *.**.** P4 is a
35380 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69   pointer to a vi
35390 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65  rtual table obje
353a0 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76  ct, an sqlite3_v
353b0 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  tab structure..*
353c0 2a 20 50 31 20 69 73 20 61 20 63 75 72 73 6f 72  * P1 is a cursor
353d0 20 6e 75 6d 62 65 72 2e 20 20 54 68 69 73 20 6f   number.  This o
353e0 70 63 6f 64 65 20 6f 70 65 6e 73 20 61 20 63 75  pcode opens a cu
353f0 72 73 6f 72 20 74 6f 20 74 68 65 20 76 69 72 74  rsor to the virt
35400 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 61 6e 64  ual.** table and
35410 20 73 74 6f 72 65 73 20 74 68 61 74 20 63 75 72   stores that cur
35420 73 6f 72 20 69 6e 20 50 31 2e 0a 2a 2f 0a 63 61  sor in P1..*/.ca
35430 73 65 20 4f 50 5f 56 4f 70 65 6e 3a 20 7b 0a 20  se OP_VOpen: {. 
35440 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75   VdbeCursor *pCu
35450 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  r;.  sqlite3_vta
35460 62 5f 63 75 72 73 6f 72 20 2a 70 56 43 75 72 3b  b_cursor *pVCur;
35470 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
35480 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20  *pVtab;.  const 
35490 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
354a0 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 61 73 73 65  pModule;..  asse
354b0 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
354c0 20 29 3b 0a 20 20 70 43 75 72 20 3d 20 30 3b 0a   );.  pCur = 0;.
354d0 20 20 70 56 43 75 72 20 3d 20 30 3b 0a 20 20 70    pVCur = 0;.  p
354e0 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Vtab = pOp->p4.p
354f0 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 69  Vtab->pVtab;.  i
35500 66 28 20 70 56 74 61 62 3d 3d 30 20 7c 7c 20 4e  f( pVtab==0 || N
35510 45 56 45 52 28 70 56 74 61 62 2d 3e 70 4d 6f 64  EVER(pVtab->pMod
35520 75 6c 65 3d 3d 30 29 20 29 7b 0a 20 20 20 20 72  ule==0) ){.    r
35530 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45  c = SQLITE_LOCKE
35540 44 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  D;.    goto abor
35550 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
35560 20 20 7d 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20    }.  pModule = 
35570 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a  pVtab->pModule;.
35580 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e    rc = pModule->
35590 78 4f 70 65 6e 28 70 56 74 61 62 2c 20 26 70 56  xOpen(pVtab, &pV
355a0 43 75 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  Cur);.  sqlite3V
355b0 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28  tabImportErrmsg(
355c0 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28  p, pVtab);.  if(
355d0 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
355e0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a  _due_to_error;..
355f0 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20    /* Initialize 
35600 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72  sqlite3_vtab_cur
35610 73 6f 72 20 62 61 73 65 20 63 6c 61 73 73 20 2a  sor base class *
35620 2f 0a 20 20 70 56 43 75 72 2d 3e 70 56 74 61 62  /.  pVCur->pVtab
35630 20 3d 20 70 56 74 61 62 3b 0a 0a 20 20 2f 2a 20   = pVtab;..  /* 
35640 49 6e 69 74 69 61 6c 69 7a 65 20 76 64 62 65 20  Initialize vdbe 
35650 63 75 72 73 6f 72 20 6f 62 6a 65 63 74 20 2a 2f  cursor object */
35660 0a 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61  .  pCur = alloca
35670 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d  teCursor(p, pOp-
35680 3e 70 31 2c 20 30 2c 20 2d 31 2c 20 43 55 52 54  >p1, 0, -1, CURT
35690 59 50 45 5f 56 54 41 42 29 3b 0a 20 20 69 66 28  YPE_VTAB);.  if(
356a0 20 70 43 75 72 20 29 7b 0a 20 20 20 20 70 43 75   pCur ){.    pCu
356b0 72 2d 3e 75 63 2e 70 56 43 75 72 20 3d 20 70 56  r->uc.pVCur = pV
356c0 43 75 72 3b 0a 20 20 20 20 70 56 74 61 62 2d 3e  Cur;.    pVtab->
356d0 6e 52 65 66 2b 2b 3b 0a 20 20 7d 65 6c 73 65 7b  nRef++;.  }else{
356e0 0a 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d  .    assert( db-
356f0 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b  >mallocFailed );
35700 0a 20 20 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 43  .    pModule->xC
35710 6c 6f 73 65 28 70 56 43 75 72 29 3b 0a 20 20 20  lose(pVCur);.   
35720 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
35730 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
35740 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
35750 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
35760 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
35770 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
35780 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
35790 56 46 69 6c 74 65 72 20 50 31 20 50 32 20 50 33  VFilter P1 P2 P3
357a0 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
357b0 73 3a 20 69 70 6c 61 6e 3d 72 5b 50 33 5d 20 7a  s: iplan=r[P3] z
357c0 70 6c 61 6e 3d 27 50 34 27 0a 2a 2a 0a 2a 2a 20  plan='P4'.**.** 
357d0 50 31 20 69 73 20 61 20 63 75 72 73 6f 72 20 6f  P1 is a cursor o
357e0 70 65 6e 65 64 20 75 73 69 6e 67 20 56 4f 70 65  pened using VOpe
357f0 6e 2e 20 20 50 32 20 69 73 20 61 6e 20 61 64 64  n.  P2 is an add
35800 72 65 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20  ress to jump to 
35810 69 66 0a 2a 2a 20 74 68 65 20 66 69 6c 74 65 72  if.** the filter
35820 65 64 20 72 65 73 75 6c 74 20 73 65 74 20 69 73  ed result set is
35830 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 50 34   empty..**.** P4
35840 20 69 73 20 65 69 74 68 65 72 20 4e 55 4c 4c 20   is either NULL 
35850 6f 72 20 61 20 73 74 72 69 6e 67 20 74 68 61 74  or a string that
35860 20 77 61 73 20 67 65 6e 65 72 61 74 65 64 20 62   was generated b
35870 79 20 74 68 65 20 78 42 65 73 74 49 6e 64 65 78  y the xBestIndex
35880 0a 2a 2a 20 6d 65 74 68 6f 64 20 6f 66 20 74 68  .** method of th
35890 65 20 6d 6f 64 75 6c 65 2e 20 20 54 68 65 20 69  e module.  The i
358a0 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66  nterpretation of
358b0 20 74 68 65 20 50 34 20 73 74 72 69 6e 67 20 69   the P4 string i
358c0 73 20 6c 65 66 74 0a 2a 2a 20 74 6f 20 74 68 65  s left.** to the
358d0 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e   module implemen
358e0 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  tation..**.** Th
358f0 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65  is opcode invoke
35900 73 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65  s the xFilter me
35910 74 68 6f 64 20 6f 6e 20 74 68 65 20 76 69 72 74  thod on the virt
35920 75 61 6c 20 74 61 62 6c 65 20 73 70 65 63 69 66  ual table specif
35930 69 65 64 0a 2a 2a 20 62 79 20 50 31 2e 20 20 54  ied.** by P1.  T
35940 68 65 20 69 6e 74 65 67 65 72 20 71 75 65 72 79  he integer query
35950 20 70 6c 61 6e 20 70 61 72 61 6d 65 74 65 72 20   plan parameter 
35960 74 6f 20 78 46 69 6c 74 65 72 20 69 73 20 73 74  to xFilter is st
35970 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
35980 0a 2a 2a 20 50 33 2e 20 52 65 67 69 73 74 65 72  .** P3. Register
35990 20 50 33 2b 31 20 73 74 6f 72 65 73 20 74 68 65   P3+1 stores the
359a0 20 61 72 67 63 20 70 61 72 61 6d 65 74 65 72 20   argc parameter 
359b0 74 6f 20 62 65 20 70 61 73 73 65 64 20 74 6f 20  to be passed to 
359c0 74 68 65 0a 2a 2a 20 78 46 69 6c 74 65 72 20 6d  the.** xFilter m
359d0 65 74 68 6f 64 2e 20 52 65 67 69 73 74 65 72 73  ethod. Registers
359e0 20 50 33 2b 32 2e 2e 50 33 2b 31 2b 61 72 67 63   P3+2..P3+1+argc
359f0 20 61 72 65 20 74 68 65 20 61 72 67 63 0a 2a 2a   are the argc.**
35a00 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 61 72 61   additional para
35a10 6d 65 74 65 72 73 20 77 68 69 63 68 20 61 72 65  meters which are
35a20 20 70 61 73 73 65 64 20 74 6f 0a 2a 2a 20 78 46   passed to.** xF
35a30 69 6c 74 65 72 20 61 73 20 61 72 67 76 2e 20 52  ilter as argv. R
35a40 65 67 69 73 74 65 72 20 50 33 2b 32 20 62 65 63  egister P3+2 bec
35a50 6f 6d 65 73 20 61 72 67 76 5b 30 5d 20 77 68 65  omes argv[0] whe
35a60 6e 20 70 61 73 73 65 64 20 74 6f 20 78 46 69 6c  n passed to xFil
35a70 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 41 20 6a 75 6d  ter..**.** A jum
35a80 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32 20  p is made to P2 
35a90 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  if the result se
35aa0 74 20 61 66 74 65 72 20 66 69 6c 74 65 72 69 6e  t after filterin
35ab0 67 20 77 6f 75 6c 64 20 62 65 20 65 6d 70 74 79  g would be empty
35ac0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 46 69  ..*/.case OP_VFi
35ad0 6c 74 65 72 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d  lter: {   /* jum
35ae0 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 72 67 3b  p */.  int nArg;
35af0 0a 20 20 69 6e 74 20 69 51 75 65 72 79 3b 0a 20  .  int iQuery;. 
35b00 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
35b10 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
35b20 20 20 4d 65 6d 20 2a 70 51 75 65 72 79 3b 0a 20    Mem *pQuery;. 
35b30 20 4d 65 6d 20 2a 70 41 72 67 63 3b 0a 20 20 73   Mem *pArgc;.  s
35b40 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73  qlite3_vtab_curs
35b50 6f 72 20 2a 70 56 43 75 72 3b 0a 20 20 73 71 6c  or *pVCur;.  sql
35b60 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
35b70 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
35b80 70 43 75 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b  pCur;.  int res;
35b90 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20  .  int i;.  Mem 
35ba0 2a 2a 61 70 41 72 67 3b 0a 0a 20 20 70 51 75 65  **apArg;..  pQue
35bb0 72 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ry = &aMem[pOp->
35bc0 70 33 5d 3b 0a 20 20 70 41 72 67 63 20 3d 20 26  p3];.  pArgc = &
35bd0 70 51 75 65 72 79 5b 31 5d 3b 0a 20 20 70 43 75  pQuery[1];.  pCu
35be0 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  r = p->apCsr[pOp
35bf0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
35c00 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 51 75 65   memIsValid(pQue
35c10 72 79 29 20 29 3b 0a 20 20 52 45 47 49 53 54 45  ry) );.  REGISTE
35c20 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
35c30 20 70 51 75 65 72 79 29 3b 0a 20 20 61 73 73 65   pQuery);.  asse
35c40 72 74 28 20 70 43 75 72 2d 3e 65 43 75 72 54 79  rt( pCur->eCurTy
35c50 70 65 3d 3d 43 55 52 54 59 50 45 5f 56 54 41 42  pe==CURTYPE_VTAB
35c60 20 29 3b 0a 20 20 70 56 43 75 72 20 3d 20 70 43   );.  pVCur = pC
35c70 75 72 2d 3e 75 63 2e 70 56 43 75 72 3b 0a 20 20  ur->uc.pVCur;.  
35c80 70 56 74 61 62 20 3d 20 70 56 43 75 72 2d 3e 70  pVtab = pVCur->p
35c90 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20  Vtab;.  pModule 
35ca0 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  = pVtab->pModule
35cb0 3b 0a 0a 20 20 2f 2a 20 47 72 61 62 20 74 68 65  ;..  /* Grab the
35cc0 20 69 6e 64 65 78 20 6e 75 6d 62 65 72 20 61 6e   index number an
35cd0 64 20 61 72 67 63 20 70 61 72 61 6d 65 74 65 72  d argc parameter
35ce0 73 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 28  s */.  assert( (
35cf0 70 51 75 65 72 79 2d 3e 66 6c 61 67 73 26 4d 45  pQuery->flags&ME
35d00 4d 5f 49 6e 74 29 21 3d 30 20 26 26 20 70 41 72  M_Int)!=0 && pAr
35d10 67 63 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49  gc->flags==MEM_I
35d20 6e 74 20 29 3b 0a 20 20 6e 41 72 67 20 3d 20 28  nt );.  nArg = (
35d30 69 6e 74 29 70 41 72 67 63 2d 3e 75 2e 69 3b 0a  int)pArgc->u.i;.
35d40 20 20 69 51 75 65 72 79 20 3d 20 28 69 6e 74 29    iQuery = (int)
35d50 70 51 75 65 72 79 2d 3e 75 2e 69 3b 0a 0a 20 20  pQuery->u.i;..  
35d60 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 78 46  /* Invoke the xF
35d70 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 2a 2f 0a  ilter method */.
35d80 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 61 70 41    res = 0;.  apA
35d90 72 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20  rg = p->apArg;. 
35da0 20 66 6f 72 28 69 20 3d 20 30 3b 20 69 3c 6e 41   for(i = 0; i<nA
35db0 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 70  rg; i++){.    ap
35dc0 41 72 67 5b 69 5d 20 3d 20 26 70 41 72 67 63 5b  Arg[i] = &pArgc[
35dd0 69 2b 31 5d 3b 0a 20 20 7d 0a 20 20 72 63 20 3d  i+1];.  }.  rc =
35de0 20 70 4d 6f 64 75 6c 65 2d 3e 78 46 69 6c 74 65   pModule->xFilte
35df0 72 28 70 56 43 75 72 2c 20 69 51 75 65 72 79 2c  r(pVCur, iQuery,
35e00 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 6e 41 72 67   pOp->p4.z, nArg
35e10 2c 20 61 70 41 72 67 29 3b 0a 20 20 73 71 6c 69  , apArg);.  sqli
35e20 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72  te3VtabImportErr
35e30 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20  msg(p, pVtab);. 
35e40 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
35e50 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
35e60 72 3b 0a 20 20 72 65 73 20 3d 20 70 4d 6f 64 75  r;.  res = pModu
35e70 6c 65 2d 3e 78 45 6f 66 28 70 56 43 75 72 29 3b  le->xEof(pVCur);
35e80 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77  .  pCur->nullRow
35e90 20 3d 20 30 3b 0a 20 20 56 64 62 65 42 72 61 6e   = 0;.  VdbeBran
35ea0 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32  chTaken(res!=0,2
35eb0 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29 20 67  );.  if( res ) g
35ec0 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
35ed0 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
35ee0 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
35ef0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
35f00 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
35f10 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
35f20 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43  LE./* Opcode: VC
35f30 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20 2a  olumn P1 P2 P3 *
35f40 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
35f50 72 5b 50 33 5d 3d 76 63 6f 6c 75 6d 6e 28 50 32  r[P3]=vcolumn(P2
35f60 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68  ).**.** Store th
35f70 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50  e value of the P
35f80 32 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 0a 2a  2-th column of.*
35f90 2a 20 74 68 65 20 72 6f 77 20 6f 66 20 74 68 65  * the row of the
35fa0 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 20 74   virtual-table t
35fb0 68 61 74 20 74 68 65 20 0a 2a 2a 20 50 31 20 63  hat the .** P1 c
35fc0 75 72 73 6f 72 20 69 73 20 70 6f 69 6e 74 69 6e  ursor is pointin
35fd0 67 20 74 6f 20 69 6e 74 6f 20 72 65 67 69 73 74  g to into regist
35fe0 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P3..*/.case O
35ff0 50 5f 56 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 73  P_VColumn: {.  s
36000 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
36010 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69  ab;.  const sqli
36020 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
36030 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 44 65 73  ule;.  Mem *pDes
36040 74 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  t;.  sqlite3_con
36050 74 65 78 74 20 73 43 6f 6e 74 65 78 74 3b 0a 0a  text sContext;..
36060 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
36070 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  ur = p->apCsr[pO
36080 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
36090 28 20 70 43 75 72 2d 3e 65 43 75 72 54 79 70 65  ( pCur->eCurType
360a0 3d 3d 43 55 52 54 59 50 45 5f 56 54 41 42 20 29  ==CURTYPE_VTAB )
360b0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
360c0 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33  >p3>0 && pOp->p3
360d0 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
360e0 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
360f0 70 44 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f  pDest = &aMem[pO
36100 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f  p->p3];.  memAbo
36110 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 44  utToChange(p, pD
36120 65 73 74 29 3b 0a 20 20 69 66 28 20 70 43 75 72  est);.  if( pCur
36130 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20  ->nullRow ){.   
36140 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
36150 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20  etNull(pDest);. 
36160 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
36170 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e 75 63  pVtab = pCur->uc
36180 2e 70 56 43 75 72 2d 3e 70 56 74 61 62 3b 0a 20  .pVCur->pVtab;. 
36190 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62   pModule = pVtab
361a0 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73  ->pModule;.  ass
361b0 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 43  ert( pModule->xC
361c0 6f 6c 75 6d 6e 20 29 3b 0a 20 20 6d 65 6d 73 65  olumn );.  memse
361d0 74 28 26 73 43 6f 6e 74 65 78 74 2c 20 30 2c 20  t(&sContext, 0, 
361e0 73 69 7a 65 6f 66 28 73 43 6f 6e 74 65 78 74 29  sizeof(sContext)
361f0 29 3b 0a 20 20 73 43 6f 6e 74 65 78 74 2e 70 4f  );.  sContext.pO
36200 75 74 20 3d 20 70 44 65 73 74 3b 0a 20 20 4d 65  ut = pDest;.  Me
36210 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 44 65  mSetTypeFlag(pDe
36220 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20  st, MEM_Null);. 
36230 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78   rc = pModule->x
36240 43 6f 6c 75 6d 6e 28 70 43 75 72 2d 3e 75 63 2e  Column(pCur->uc.
36250 70 56 43 75 72 2c 20 26 73 43 6f 6e 74 65 78 74  pVCur, &sContext
36260 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 73 71  , pOp->p2);.  sq
36270 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45  lite3VtabImportE
36280 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b  rrmsg(p, pVtab);
36290 0a 20 20 69 66 28 20 73 43 6f 6e 74 65 78 74 2e  .  if( sContext.
362a0 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 72  isError ){.    r
362b0 63 20 3d 20 73 43 6f 6e 74 65 78 74 2e 69 73 45  c = sContext.isE
362c0 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  rror;.  }.  sqli
362d0 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
362e0 6f 64 69 6e 67 28 70 44 65 73 74 2c 20 65 6e 63  oding(pDest, enc
362f0 6f 64 69 6e 67 29 3b 0a 20 20 52 45 47 49 53 54  oding);.  REGIST
36300 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
36310 2c 20 70 44 65 73 74 29 3b 0a 20 20 55 50 44 41  , pDest);.  UPDA
36320 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
36330 70 44 65 73 74 29 3b 0a 0a 20 20 69 66 28 20 73  pDest);..  if( s
36340 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f  qlite3VdbeMemToo
36350 42 69 67 28 70 44 65 73 74 29 20 29 7b 0a 20 20  Big(pDest) ){.  
36360 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
36370 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67    }.  if( rc ) g
36380 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
36390 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b  _error;.  break;
363a0 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
363b0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
363c0 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
363d0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
363e0 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
363f0 63 6f 64 65 3a 20 56 4e 65 78 74 20 50 31 20 50  code: VNext P1 P
36400 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64  2 * * *.**.** Ad
36410 76 61 6e 63 65 20 76 69 72 74 75 61 6c 20 74 61  vance virtual ta
36420 62 6c 65 20 50 31 20 74 6f 20 74 68 65 20 6e 65  ble P1 to the ne
36430 78 74 20 72 6f 77 20 69 6e 20 69 74 73 20 72 65  xt row in its re
36440 73 75 6c 74 20 73 65 74 20 61 6e 64 0a 2a 2a 20  sult set and.** 
36450 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74  jump to instruct
36460 69 6f 6e 20 50 32 2e 20 20 4f 72 2c 20 69 66 20  ion P2.  Or, if 
36470 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
36480 65 20 68 61 73 20 72 65 61 63 68 65 64 0a 2a 2a  e has reached.**
36490 20 74 68 65 20 65 6e 64 20 6f 66 20 69 74 73 20   the end of its 
364a0 72 65 73 75 6c 74 20 73 65 74 2c 20 74 68 65 6e  result set, then
364b0 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
364c0 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
364d0 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
364e0 50 5f 56 4e 65 78 74 3a 20 7b 20 20 20 2f 2a 20  P_VNext: {   /* 
364f0 6a 75 6d 70 20 2a 2f 0a 20 20 73 71 6c 69 74 65  jump */.  sqlite
36500 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
36510 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
36520 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
36530 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 56 64 62    int res;.  Vdb
36540 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 0a  eCursor *pCur;..
36550 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 70 43 75    res = 0;.  pCu
36560 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  r = p->apCsr[pOp
36570 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
36580 20 70 43 75 72 2d 3e 65 43 75 72 54 79 70 65 3d   pCur->eCurType=
36590 3d 43 55 52 54 59 50 45 5f 56 54 41 42 20 29 3b  =CURTYPE_VTAB );
365a0 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c  .  if( pCur->nul
365b0 6c 52 6f 77 20 29 7b 0a 20 20 20 20 62 72 65 61  lRow ){.    brea
365c0 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62 20 3d  k;.  }.  pVtab =
365d0 20 70 43 75 72 2d 3e 75 63 2e 70 56 43 75 72 2d   pCur->uc.pVCur-
365e0 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c  >pVtab;.  pModul
365f0 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75  e = pVtab->pModu
36600 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4d  le;.  assert( pM
36610 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 20 29 3b 0a  odule->xNext );.
36620 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65  .  /* Invoke the
36630 20 78 4e 65 78 74 28 29 20 6d 65 74 68 6f 64 20   xNext() method 
36640 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20 54  of the module. T
36650 68 65 72 65 20 69 73 20 6e 6f 20 77 61 79 20 66  here is no way f
36660 6f 72 20 74 68 65 0a 20 20 2a 2a 20 75 6e 64 65  or the.  ** unde
36670 72 6c 79 69 6e 67 20 69 6d 70 6c 65 6d 65 6e 74  rlying implement
36680 61 74 69 6f 6e 20 74 6f 20 72 65 74 75 72 6e 20  ation to return 
36690 61 6e 20 65 72 72 6f 72 20 69 66 20 6f 6e 65 20  an error if one 
366a0 6f 63 63 75 72 73 20 64 75 72 69 6e 67 0a 20 20  occurs during.  
366b0 2a 2a 20 78 4e 65 78 74 28 29 2e 20 49 6e 73 74  ** xNext(). Inst
366c0 65 61 64 2c 20 69 66 20 61 6e 20 65 72 72 6f 72  ead, if an error
366d0 20 6f 63 63 75 72 73 2c 20 74 72 75 65 20 69 73   occurs, true is
366e0 20 72 65 74 75 72 6e 65 64 20 28 69 6e 64 69 63   returned (indic
366f0 61 74 69 6e 67 20 74 68 61 74 20 0a 20 20 2a 2a  ating that .  **
36700 20 64 61 74 61 20 69 73 20 61 76 61 69 6c 61 62   data is availab
36710 6c 65 29 20 61 6e 64 20 74 68 65 20 65 72 72 6f  le) and the erro
36720 72 20 63 6f 64 65 20 72 65 74 75 72 6e 65 64 20  r code returned 
36730 77 68 65 6e 20 78 43 6f 6c 75 6d 6e 20 6f 72 0a  when xColumn or.
36740 20 20 2a 2a 20 73 6f 6d 65 20 6f 74 68 65 72 20    ** some other 
36750 6d 65 74 68 6f 64 20 69 73 20 6e 65 78 74 20 69  method is next i
36760 6e 76 6f 6b 65 64 20 6f 6e 20 74 68 65 20 73 61  nvoked on the sa
36770 76 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ve virtual table
36780 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20   cursor..  */.  
36790 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e  rc = pModule->xN
367a0 65 78 74 28 70 43 75 72 2d 3e 75 63 2e 70 56 43  ext(pCur->uc.pVC
367b0 75 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 74  ur);.  sqlite3Vt
367c0 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70  abImportErrmsg(p
367d0 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20  , pVtab);.  if( 
367e0 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
367f0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
36800 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78  res = pModule->x
36810 45 6f 66 28 70 43 75 72 2d 3e 75 63 2e 70 56 43  Eof(pCur->uc.pVC
36820 75 72 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  ur);.  VdbeBranc
36830 68 54 61 6b 65 6e 28 21 72 65 73 2c 32 29 3b 0a  hTaken(!res,2);.
36840 20 20 69 66 28 20 21 72 65 73 20 29 7b 0a 20 20    if( !res ){.  
36850 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73    /* If there is
36860 20 64 61 74 61 2c 20 6a 75 6d 70 20 74 6f 20 50   data, jump to P
36870 32 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6a 75  2 */.    goto ju
36880 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68 65  mp_to_p2_and_che
36890 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74  ck_for_interrupt
368a0 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65  ;.  }.  goto che
368b0 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74  ck_for_interrupt
368c0 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
368d0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
368e0 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64  LTABLE */..#ifnd
368f0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
36900 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
36910 70 63 6f 64 65 3a 20 56 52 65 6e 61 6d 65 20 50  pcode: VRename P
36920 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
36930 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
36940 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61   to a virtual ta
36950 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73  ble object, an s
36960 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75  qlite3_vtab stru
36970 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73 20 6f  cture..** This o
36980 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68  pcode invokes th
36990 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
369a0 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e 20  xRename method. 
369b0 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20  The value.** in 
369c0 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 70  register P1 is p
369d0 61 73 73 65 64 20 61 73 20 74 68 65 20 7a 4e 61  assed as the zNa
369e0 6d 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  me argument to t
369f0 68 65 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f  he xRename metho
36a00 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 52  d..*/.case OP_VR
36a10 65 6e 61 6d 65 3a 20 7b 0a 20 20 73 71 6c 69 74  ename: {.  sqlit
36a20 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
36a30 20 20 4d 65 6d 20 2a 70 4e 61 6d 65 3b 0a 0a 20    Mem *pName;.. 
36a40 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34   pVtab = pOp->p4
36a50 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20  .pVtab->pVtab;. 
36a60 20 70 4e 61 6d 65 20 3d 20 26 61 4d 65 6d 5b 70   pName = &aMem[p
36a70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
36a80 74 28 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c  t( pVtab->pModul
36a90 65 2d 3e 78 52 65 6e 61 6d 65 20 29 3b 0a 20 20  e->xRename );.  
36aa0 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
36ab0 69 64 28 70 4e 61 6d 65 29 20 29 3b 0a 20 20 61  id(pName) );.  a
36ac0 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
36ad0 6c 79 3d 3d 30 20 29 3b 0a 20 20 52 45 47 49 53  ly==0 );.  REGIS
36ae0 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
36af0 31 2c 20 70 4e 61 6d 65 29 3b 0a 20 20 61 73 73  1, pName);.  ass
36b00 65 72 74 28 20 70 4e 61 6d 65 2d 3e 66 6c 61 67  ert( pName->flag
36b10 73 20 26 20 4d 45 4d 5f 53 74 72 20 29 3b 0a 20  s & MEM_Str );. 
36b20 20 74 65 73 74 63 61 73 65 28 20 70 4e 61 6d 65   testcase( pName
36b30 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54  ->enc==SQLITE_UT
36b40 46 38 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  F8 );.  testcase
36b50 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51  ( pName->enc==SQ
36b60 4c 49 54 45 5f 55 54 46 31 36 42 45 20 29 3b 0a  LITE_UTF16BE );.
36b70 20 20 74 65 73 74 63 61 73 65 28 20 70 4e 61 6d    testcase( pNam
36b80 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55  e->enc==SQLITE_U
36b90 54 46 31 36 4c 45 20 29 3b 0a 20 20 72 63 20 3d  TF16LE );.  rc =
36ba0 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
36bb0 67 65 45 6e 63 6f 64 69 6e 67 28 70 4e 61 6d 65  geEncoding(pName
36bc0 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a  , SQLITE_UTF8);.
36bd0 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
36be0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
36bf0 6f 72 3b 0a 20 20 72 63 20 3d 20 70 56 74 61 62  or;.  rc = pVtab
36c00 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61  ->pModule->xRena
36c10 6d 65 28 70 56 74 61 62 2c 20 70 4e 61 6d 65 2d  me(pVtab, pName-
36c20 3e 7a 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 74  >z);.  sqlite3Vt
36c30 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70  abImportErrmsg(p
36c40 2c 20 70 56 74 61 62 29 3b 0a 20 20 70 2d 3e 65  , pVtab);.  p->e
36c50 78 70 69 72 65 64 20 3d 20 30 3b 0a 20 20 69 66  xpired = 0;.  if
36c60 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
36c70 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
36c80 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
36c90 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
36ca0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
36cb0 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
36cc0 55 70 64 61 74 65 20 50 31 20 50 32 20 50 33 20  Update P1 P2 P3 
36cd0 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
36ce0 73 3a 20 64 61 74 61 3d 72 5b 50 33 40 50 32 5d  s: data=r[P3@P2]
36cf0 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
36d00 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74  ointer to a virt
36d10 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74  ual table object
36d20 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61  , an sqlite3_vta
36d30 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20  b structure..** 
36d40 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f  This opcode invo
36d50 6b 65 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f  kes the correspo
36d60 6e 64 69 6e 67 20 78 55 70 64 61 74 65 20 6d 65  nding xUpdate me
36d70 74 68 6f 64 2e 20 50 32 20 76 61 6c 75 65 73 0a  thod. P2 values.
36d80 2a 2a 20 61 72 65 20 63 6f 6e 74 69 67 75 6f 75  ** are contiguou
36d90 73 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 73  s memory cells s
36da0 74 61 72 74 69 6e 67 20 61 74 20 50 33 20 74 6f  tarting at P3 to
36db0 20 70 61 73 73 20 74 6f 20 74 68 65 20 78 55 70   pass to the xUp
36dc0 64 61 74 65 20 0a 2a 2a 20 69 6e 76 6f 63 61 74  date .** invocat
36dd0 69 6f 6e 2e 20 54 68 65 20 76 61 6c 75 65 20 69  ion. The value i
36de0 6e 20 72 65 67 69 73 74 65 72 20 28 50 33 2b 50  n register (P3+P
36df0 32 2d 31 29 20 63 6f 72 72 65 73 70 6f 6e 64 73  2-1) corresponds
36e00 20 74 6f 20 74 68 65 20 0a 2a 2a 20 70 32 74 68   to the .** p2th
36e10 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20   element of the 
36e20 61 72 67 76 20 61 72 72 61 79 20 70 61 73 73 65  argv array passe
36e30 64 20 74 6f 20 78 55 70 64 61 74 65 2e 0a 2a 2a  d to xUpdate..**
36e40 0a 2a 2a 20 54 68 65 20 78 55 70 64 61 74 65 20  .** The xUpdate 
36e50 6d 65 74 68 6f 64 20 77 69 6c 6c 20 64 6f 20 61  method will do a
36e60 20 44 45 4c 45 54 45 20 6f 72 20 61 6e 20 49 4e   DELETE or an IN
36e70 53 45 52 54 20 6f 72 20 62 6f 74 68 2e 0a 2a 2a  SERT or both..**
36e80 20 54 68 65 20 61 72 67 76 5b 30 5d 20 65 6c 65   The argv[0] ele
36e90 6d 65 6e 74 20 28 77 68 69 63 68 20 63 6f 72 72  ment (which corr
36ea0 65 73 70 6f 6e 64 73 20 74 6f 20 6d 65 6d 6f 72  esponds to memor
36eb0 79 20 63 65 6c 6c 20 50 33 29 0a 2a 2a 20 69 73  y cell P3).** is
36ec0 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 61 20   the rowid of a 
36ed0 72 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e 20 20  row to delete.  
36ee0 49 66 20 61 72 67 76 5b 30 5d 20 69 73 20 4e 55  If argv[0] is NU
36ef0 4c 4c 20 74 68 65 6e 20 6e 6f 20 0a 2a 2a 20 64  LL then no .** d
36f00 65 6c 65 74 69 6f 6e 20 6f 63 63 75 72 73 2e 20  eletion occurs. 
36f10 20 54 68 65 20 61 72 67 76 5b 31 5d 20 65 6c 65   The argv[1] ele
36f20 6d 65 6e 74 20 69 73 20 74 68 65 20 72 6f 77 69  ment is the rowi
36f30 64 20 6f 66 20 74 68 65 20 6e 65 77 20 0a 2a 2a  d of the new .**
36f40 20 72 6f 77 2e 20 20 54 68 69 73 20 63 61 6e 20   row.  This can 
36f50 62 65 20 4e 55 4c 4c 20 74 6f 20 68 61 76 65 20  be NULL to have 
36f60 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
36f70 65 20 73 65 6c 65 63 74 20 74 68 65 20 6e 65 77  e select the new
36f80 20 0a 2a 2a 20 72 6f 77 69 64 20 66 6f 72 20 69   .** rowid for i
36f90 74 73 65 6c 66 2e 20 20 54 68 65 20 73 75 62 73  tself.  The subs
36fa0 65 71 75 65 6e 74 20 65 6c 65 6d 65 6e 74 73 20  equent elements 
36fb0 69 6e 20 74 68 65 20 61 72 72 61 79 20 61 72 65  in the array are
36fc0 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20   .** the values 
36fd0 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
36fe0 65 20 6e 65 77 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a  e new row..**.**
36ff0 20 49 66 20 50 32 3d 3d 31 20 74 68 65 6e 20 6e   If P2==1 then n
37000 6f 20 69 6e 73 65 72 74 20 69 73 20 70 65 72 66  o insert is perf
37010 6f 72 6d 65 64 2e 20 20 61 72 67 76 5b 30 5d 20  ormed.  argv[0] 
37020 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66 0a  is the rowid of.
37030 2a 2a 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65  ** a row to dele
37040 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  te..**.** P1 is 
37050 61 20 62 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e 20  a boolean flag. 
37060 49 66 20 69 74 20 69 73 20 73 65 74 20 74 6f 20  If it is set to 
37070 74 72 75 65 20 61 6e 64 20 74 68 65 20 78 55 70  true and the xUp
37080 64 61 74 65 20 63 61 6c 6c 0a 2a 2a 20 69 73 20  date call.** is 
37090 73 75 63 63 65 73 73 66 75 6c 2c 20 74 68 65 6e  successful, then
370a0 20 74 68 65 20 76 61 6c 75 65 20 72 65 74 75 72   the value retur
370b0 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 6c  ned by sqlite3_l
370c0 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64  ast_insert_rowid
370d0 28 29 20 0a 2a 2a 20 69 73 20 73 65 74 20 74 6f  () .** is set to
370e0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
370f0 65 20 72 6f 77 69 64 20 66 6f 72 20 74 68 65 20  e rowid for the 
37100 72 6f 77 20 6a 75 73 74 20 69 6e 73 65 72 74 65  row just inserte
37110 64 2e 0a 2a 2a 0a 2a 2a 20 50 35 20 69 73 20 74  d..**.** P5 is t
37120 68 65 20 65 72 72 6f 72 20 61 63 74 69 6f 6e 73  he error actions
37130 20 28 4f 45 5f 52 65 70 6c 61 63 65 2c 20 4f 45   (OE_Replace, OE
37140 5f 46 61 69 6c 2c 20 4f 45 5f 49 67 6e 6f 72 65  _Fail, OE_Ignore
37150 2c 20 65 74 63 29 20 74 6f 0a 2a 2a 20 61 70 70  , etc) to.** app
37160 6c 79 20 69 6e 20 74 68 65 20 63 61 73 65 20 6f  ly in the case o
37170 66 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 66  f a constraint f
37180 61 69 6c 75 72 65 20 6f 6e 20 61 6e 20 69 6e 73  ailure on an ins
37190 65 72 74 20 6f 72 20 75 70 64 61 74 65 2e 0a 2a  ert or update..*
371a0 2f 0a 63 61 73 65 20 4f 50 5f 56 55 70 64 61 74  /.case OP_VUpdat
371b0 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76  e: {.  sqlite3_v
371c0 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f  tab *pVtab;.  co
371d0 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  nst sqlite3_modu
371e0 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69  le *pModule;.  i
371f0 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69  nt nArg;.  int i
37200 3b 0a 20 20 73 71 6c 69 74 65 5f 69 6e 74 36 34  ;.  sqlite_int64
37210 20 72 6f 77 69 64 3b 0a 20 20 4d 65 6d 20 2a 2a   rowid;.  Mem **
37220 61 70 41 72 67 3b 0a 20 20 4d 65 6d 20 2a 70 58  apArg;.  Mem *pX
37230 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
37240 2d 3e 70 32 3d 3d 31 20 20 20 20 20 20 20 20 7c  ->p2==1        |
37250 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 46 61  | pOp->p5==OE_Fa
37260 69 6c 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d  il   || pOp->p5=
37270 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 0a 20 20  =OE_Rollback .  
37280 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d       || pOp->p5=
37290 3d 4f 45 5f 41 62 6f 72 74 20 7c 7c 20 70 4f 70  =OE_Abort || pOp
372a0 2d 3e 70 35 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20  ->p5==OE_Ignore 
372b0 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52  || pOp->p5==OE_R
372c0 65 70 6c 61 63 65 0a 20 20 29 3b 0a 20 20 61 73  eplace.  );.  as
372d0 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
372e0 79 3d 3d 30 20 29 3b 0a 20 20 70 56 74 61 62 20  y==0 );.  pVtab 
372f0 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d  = pOp->p4.pVtab-
37300 3e 70 56 74 61 62 3b 0a 20 20 69 66 28 20 70 56  >pVtab;.  if( pV
37310 74 61 62 3d 3d 30 20 7c 7c 20 4e 45 56 45 52 28  tab==0 || NEVER(
37320 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3d 3d  pVtab->pModule==
37330 30 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  0) ){.    rc = S
37340 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20  QLITE_LOCKED;.  
37350 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
37360 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20  _to_error;.  }. 
37370 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62   pModule = pVtab
37380 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 6e 41 72  ->pModule;.  nAr
37390 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61  g = pOp->p2;.  a
373a0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
373b0 70 65 3d 3d 50 34 5f 56 54 41 42 20 29 3b 0a 20  pe==P4_VTAB );. 
373c0 20 69 66 28 20 41 4c 57 41 59 53 28 70 4d 6f 64   if( ALWAYS(pMod
373d0 75 6c 65 2d 3e 78 55 70 64 61 74 65 29 20 29 7b  ule->xUpdate) ){
373e0 0a 20 20 20 20 75 38 20 76 74 61 62 4f 6e 43 6f  .    u8 vtabOnCo
373f0 6e 66 6c 69 63 74 20 3d 20 64 62 2d 3e 76 74 61  nflict = db->vta
37400 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 0a 20 20 20  bOnConflict;.   
37410 20 61 70 41 72 67 20 3d 20 70 2d 3e 61 70 41 72   apArg = p->apAr
37420 67 3b 0a 20 20 20 20 70 58 20 3d 20 26 61 4d 65  g;.    pX = &aMe
37430 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20  m[pOp->p3];.    
37440 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b  for(i=0; i<nArg;
37450 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 73 73   i++){.      ass
37460 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
37470 70 58 29 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d  pX) );.      mem
37480 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
37490 20 70 58 29 3b 0a 20 20 20 20 20 20 61 70 41 72   pX);.      apAr
374a0 67 5b 69 5d 20 3d 20 70 58 3b 0a 20 20 20 20 20  g[i] = pX;.     
374b0 20 70 58 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20   pX++;.    }.   
374c0 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c   db->vtabOnConfl
374d0 69 63 74 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20  ict = pOp->p5;. 
374e0 20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d     rc = pModule-
374f0 3e 78 55 70 64 61 74 65 28 70 56 74 61 62 2c 20  >xUpdate(pVtab, 
37500 6e 41 72 67 2c 20 61 70 41 72 67 2c 20 26 72 6f  nArg, apArg, &ro
37510 77 69 64 29 3b 0a 20 20 20 20 64 62 2d 3e 76 74  wid);.    db->vt
37520 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 76  abOnConflict = v
37530 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 0a 20  tabOnConflict;. 
37540 20 20 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d     sqlite3VtabIm
37550 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56  portErrmsg(p, pV
37560 74 61 62 29 3b 0a 20 20 20 20 69 66 28 20 72 63  tab);.    if( rc
37570 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70  ==SQLITE_OK && p
37580 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 20 20  Op->p1 ){.      
37590 61 73 73 65 72 74 28 20 6e 41 72 67 3e 31 20 26  assert( nArg>1 &
375a0 26 20 61 70 41 72 67 5b 30 5d 20 26 26 20 28 61  & apArg[0] && (a
375b0 70 41 72 67 5b 30 5d 2d 3e 66 6c 61 67 73 26 4d  pArg[0]->flags&M
375c0 45 4d 5f 4e 75 6c 6c 29 20 29 3b 0a 20 20 20 20  EM_Null) );.    
375d0 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20    db->lastRowid 
375e0 3d 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 72 6f  = lastRowid = ro
375f0 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  wid;.    }.    i
37600 66 28 20 28 72 63 26 30 78 66 66 29 3d 3d 53 51  f( (rc&0xff)==SQ
37610 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20  LITE_CONSTRAINT 
37620 26 26 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62  && pOp->p4.pVtab
37630 2d 3e 62 43 6f 6e 73 74 72 61 69 6e 74 20 29 7b  ->bConstraint ){
37640 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  .      if( pOp->
37650 70 35 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 29 7b  p5==OE_Ignore ){
37660 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51  .        rc = SQ
37670 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 7d  LITE_OK;.      }
37680 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 2d  else{.        p-
37690 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 28  >errorAction = (
376a0 28 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65 70  (pOp->p5==OE_Rep
376b0 6c 61 63 65 29 20 3f 20 4f 45 5f 41 62 6f 72 74  lace) ? OE_Abort
376c0 20 3a 20 70 4f 70 2d 3e 70 35 29 3b 0a 20 20 20   : pOp->p5);.   
376d0 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a     }.    }else{.
376e0 20 20 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65        p->nChange
376f0 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ++;.    }.    if
37700 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
37710 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
37720 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
37730 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
37740 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
37750 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 20 53  E */..#ifndef  S
37760 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
37770 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f  _PRAGMAS./* Opco
37780 64 65 3a 20 50 61 67 65 63 6f 75 6e 74 20 50 31  de: Pagecount P1
37790 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
377a0 57 72 69 74 65 20 74 68 65 20 63 75 72 72 65 6e  Write the curren
377b0 74 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  t number of page
377c0 73 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31  s in database P1
377d0 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20   to memory cell 
377e0 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50  P2..*/.case OP_P
377f0 61 67 65 63 6f 75 6e 74 3a 20 7b 20 20 20 20 20  agecount: {     
37800 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
37810 2f 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  /.  pOut = out2P
37820 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
37830 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
37840 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73   sqlite3BtreeLas
37850 74 50 61 67 65 28 64 62 2d 3e 61 44 62 5b 70 4f  tPage(db->aDb[pO
37860 70 2d 3e 70 31 5d 2e 70 42 74 29 3b 0a 20 20 62  p->p1].pBt);.  b
37870 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
37880 0a 23 69 66 6e 64 65 66 20 20 53 51 4c 49 54 45  .#ifndef  SQLITE
37890 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47  _OMIT_PAGER_PRAG
378a0 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d  MAS./* Opcode: M
378b0 61 78 50 67 63 6e 74 20 50 31 20 50 32 20 50 33  axPgcnt P1 P2 P3
378c0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 72 79 20 74   * *.**.** Try t
378d0 6f 20 73 65 74 20 74 68 65 20 6d 61 78 69 6d 75  o set the maximu
378e0 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 66 6f 72  m page count for
378f0 20 64 61 74 61 62 61 73 65 20 50 31 20 74 6f 20   database P1 to 
37900 74 68 65 20 76 61 6c 75 65 20 69 6e 20 50 33 2e  the value in P3.
37910 0a 2a 2a 20 44 6f 20 6e 6f 74 20 6c 65 74 20 74  .** Do not let t
37920 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20  he maximum page 
37930 63 6f 75 6e 74 20 66 61 6c 6c 20 62 65 6c 6f 77  count fall below
37940 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 61 67   the current pag
37950 65 20 63 6f 75 6e 74 20 61 6e 64 0a 2a 2a 20 64  e count and.** d
37960 6f 20 6e 6f 74 20 63 68 61 6e 67 65 20 74 68 65  o not change the
37970 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f   maximum page co
37980 75 6e 74 20 76 61 6c 75 65 20 69 66 20 50 33 3d  unt value if P3=
37990 3d 30 2e 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20  =0..**.** Store 
379a0 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65  the maximum page
379b0 20 63 6f 75 6e 74 20 61 66 74 65 72 20 74 68 65   count after the
379c0 20 63 68 61 6e 67 65 20 69 6e 20 72 65 67 69 73   change in regis
379d0 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
379e0 4f 50 5f 4d 61 78 50 67 63 6e 74 3a 20 7b 20 20  OP_MaxPgcnt: {  
379f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
37a00 32 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  2 */.  unsigned 
37a10 69 6e 74 20 6e 65 77 4d 61 78 3b 0a 20 20 42 74  int newMax;.  Bt
37a20 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20 70 4f 75  ree *pBt;..  pOu
37a30 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
37a40 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 42  se(p, pOp);.  pB
37a50 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  t = db->aDb[pOp-
37a60 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 6e 65 77 4d  >p1].pBt;.  newM
37a70 61 78 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 4f  ax = 0;.  if( pO
37a80 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 6e 65 77  p->p3 ){.    new
37a90 4d 61 78 20 3d 20 73 71 6c 69 74 65 33 42 74 72  Max = sqlite3Btr
37aa0 65 65 4c 61 73 74 50 61 67 65 28 70 42 74 29 3b  eeLastPage(pBt);
37ab0 0a 20 20 20 20 69 66 28 20 6e 65 77 4d 61 78 20  .    if( newMax 
37ac0 3c 20 28 75 6e 73 69 67 6e 65 64 29 70 4f 70 2d  < (unsigned)pOp-
37ad0 3e 70 33 20 29 20 6e 65 77 4d 61 78 20 3d 20 28  >p3 ) newMax = (
37ae0 75 6e 73 69 67 6e 65 64 29 70 4f 70 2d 3e 70 33  unsigned)pOp->p3
37af0 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e  ;.  }.  pOut->u.
37b00 69 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  i = sqlite3Btree
37b10 4d 61 78 50 61 67 65 43 6f 75 6e 74 28 70 42 74  MaxPageCount(pBt
37b20 2c 20 6e 65 77 4d 61 78 29 3b 0a 20 20 62 72 65  , newMax);.  bre
37b30 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f  ak;.}.#endif.../
37b40 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 69 74 20 50  * Opcode: Init P
37b50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53  1 P2 * P4 *.** S
37b60 79 6e 6f 70 73 69 73 3a 20 53 74 61 72 74 20 61  ynopsis: Start a
37b70 74 20 50 32 0a 2a 2a 0a 2a 2a 20 50 72 6f 67 72  t P2.**.** Progr
37b80 61 6d 73 20 63 6f 6e 74 61 69 6e 20 61 20 73 69  ams contain a si
37b90 6e 67 6c 65 20 69 6e 73 74 61 6e 63 65 20 6f 66  ngle instance of
37ba0 20 74 68 69 73 20 6f 70 63 6f 64 65 20 61 73 20   this opcode as 
37bb0 74 68 65 20 76 65 72 79 20 66 69 72 73 74 0a 2a  the very first.*
37bc0 2a 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  * opcode..**.** 
37bd0 49 66 20 74 72 61 63 69 6e 67 20 69 73 20 65 6e  If tracing is en
37be0 61 62 6c 65 64 20 28 62 79 20 74 68 65 20 73 71  abled (by the sq
37bf0 6c 69 74 65 33 5f 74 72 61 63 65 28 29 29 20 69  lite3_trace()) i
37c00 6e 74 65 72 66 61 63 65 2c 20 74 68 65 6e 0a 2a  nterface, then.*
37c10 2a 20 74 68 65 20 55 54 46 2d 38 20 73 74 72 69  * the UTF-8 stri
37c20 6e 67 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  ng contained in 
37c30 50 34 20 69 73 20 65 6d 69 74 74 65 64 20 6f 6e  P4 is emitted on
37c40 20 74 68 65 20 74 72 61 63 65 20 63 61 6c 6c 62   the trace callb
37c50 61 63 6b 2e 0a 2a 2a 20 4f 72 20 69 66 20 50 34  ack..** Or if P4
37c60 20 69 73 20 62 6c 61 6e 6b 2c 20 75 73 65 20 74   is blank, use t
37c70 68 65 20 73 74 72 69 6e 67 20 72 65 74 75 72 6e  he string return
37c80 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 73 71  ed by sqlite3_sq
37c90 6c 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32  l()..**.** If P2
37ca0 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 6a 75   is not zero, ju
37cb0 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f  mp to instructio
37cc0 6e 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 6e 63 72  n P2..**.** Incr
37cd0 65 6d 65 6e 74 20 74 68 65 20 76 61 6c 75 65 20  ement the value 
37ce0 6f 66 20 50 31 20 73 6f 20 74 68 61 74 20 4f 50  of P1 so that OP
37cf0 5f 4f 6e 63 65 20 6f 70 63 6f 64 65 73 20 77 69  _Once opcodes wi
37d00 6c 6c 20 6a 75 6d 70 20 74 68 65 0a 2a 2a 20 66  ll jump the.** f
37d10 69 72 73 74 20 74 69 6d 65 20 74 68 65 79 20 61  irst time they a
37d20 72 65 20 65 76 61 6c 75 61 74 65 64 20 66 6f 72  re evaluated for
37d30 20 74 68 69 73 20 72 75 6e 2e 0a 2a 2f 0a 63 61   this run..*/.ca
37d40 73 65 20 4f 50 5f 49 6e 69 74 3a 20 7b 20 20 20  se OP_Init: {   
37d50 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
37d60 2f 0a 20 20 63 68 61 72 20 2a 7a 54 72 61 63 65  /.  char *zTrace
37d70 3b 0a 20 20 69 6e 74 20 69 3b 0a 0a 20 20 2f 2a  ;.  int i;..  /*
37d80 20 49 66 20 74 68 65 20 50 34 20 61 72 67 75 6d   If the P4 argum
37d90 65 6e 74 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c  ent is not NULL,
37da0 20 74 68 65 6e 20 69 74 20 6d 75 73 74 20 62 65   then it must be
37db0 20 61 6e 20 53 51 4c 20 63 6f 6d 6d 65 6e 74 20   an SQL comment 
37dc0 73 74 72 69 6e 67 2e 0a 20 20 2a 2a 20 54 68 65  string..  ** The
37dd0 20 22 2d 2d 22 20 73 74 72 69 6e 67 20 69 73 20   "--" string is 
37de0 62 72 6f 6b 65 6e 20 75 70 20 74 6f 20 70 72 65  broken up to pre
37df0 76 65 6e 74 20 66 61 6c 73 65 2d 70 6f 73 69 74  vent false-posit
37e00 69 76 65 73 20 77 69 74 68 20 73 72 63 63 6b 31  ives with srcck1
37e10 2e 63 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  .c..  **.  ** Th
37e20 69 73 20 61 73 73 65 72 74 28 29 20 70 72 6f 76  is assert() prov
37e30 69 64 65 73 20 65 76 69 64 65 6e 63 65 20 66 6f  ides evidence fo
37e40 72 3a 0a 20 20 2a 2a 20 45 56 49 44 45 4e 43 45  r:.  ** EVIDENCE
37e50 2d 4f 46 3a 20 52 2d 35 30 36 37 36 2d 30 39 38  -OF: R-50676-098
37e60 36 30 20 54 68 65 20 63 61 6c 6c 62 61 63 6b 20  60 The callback 
37e70 63 61 6e 20 63 6f 6d 70 75 74 65 20 74 68 65 20  can compute the 
37e80 73 61 6d 65 20 74 65 78 74 20 74 68 61 74 0a 20  same text that. 
37e90 20 2a 2a 20 77 6f 75 6c 64 20 68 61 76 65 20 62   ** would have b
37ea0 65 65 6e 20 72 65 74 75 72 6e 65 64 20 62 79 20  een returned by 
37eb0 74 68 65 20 6c 65 67 61 63 79 20 73 71 6c 69 74  the legacy sqlit
37ec0 65 33 5f 74 72 61 63 65 28 29 20 69 6e 74 65 72  e3_trace() inter
37ed0 66 61 63 65 20 62 79 0a 20 20 2a 2a 20 75 73 69  face by.  ** usi
37ee0 6e 67 20 74 68 65 20 58 20 61 72 67 75 6d 65 6e  ng the X argumen
37ef0 74 20 77 68 65 6e 20 58 20 62 65 67 69 6e 73 20  t when X begins 
37f00 77 69 74 68 20 22 2d 2d 22 20 61 6e 64 20 69 6e  with "--" and in
37f10 76 6f 6b 69 6e 67 0a 20 20 2a 2a 20 73 71 6c 69  voking.  ** sqli
37f20 74 65 33 5f 65 78 70 61 6e 64 65 64 5f 73 71 6c  te3_expanded_sql
37f30 28 50 29 20 6f 74 68 65 72 77 69 73 65 2e 0a 20  (P) otherwise.. 
37f40 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
37f50 70 2d 3e 70 34 2e 7a 3d 3d 30 20 7c 7c 20 73 74  p->p4.z==0 || st
37f60 72 6e 63 6d 70 28 70 4f 70 2d 3e 70 34 2e 7a 2c  rncmp(pOp->p4.z,
37f70 20 22 2d 22 20 22 2d 20 22 2c 20 33 29 3d 3d 30   "-" "- ", 3)==0
37f80 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
37f90 70 3d 3d 70 2d 3e 61 4f 70 20 29 3b 20 20 2f 2a  p==p->aOp );  /*
37fa0 20 41 6c 77 61 79 73 20 69 6e 73 74 72 75 63 74   Always instruct
37fb0 69 6f 6e 20 30 20 2a 2f 0a 0a 23 69 66 6e 64 65  ion 0 */..#ifnde
37fc0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  f SQLITE_OMIT_TR
37fd0 41 43 45 0a 20 20 69 66 28 20 28 64 62 2d 3e 6d  ACE.  if( (db->m
37fe0 54 72 61 63 65 20 26 20 28 53 51 4c 49 54 45 5f  Trace & (SQLITE_
37ff0 54 52 41 43 45 5f 53 54 4d 54 7c 53 51 4c 49 54  TRACE_STMT|SQLIT
38000 45 5f 54 52 41 43 45 5f 4c 45 47 41 43 59 29 29  E_TRACE_LEGACY))
38010 21 3d 30 0a 20 20 20 26 26 20 21 70 2d 3e 64 6f  !=0.   && !p->do
38020 69 6e 67 52 65 72 75 6e 0a 20 20 20 26 26 20 28  ingRerun.   && (
38030 7a 54 72 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70  zTrace = (pOp->p
38040 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20  4.z ? pOp->p4.z 
38050 3a 20 70 2d 3e 7a 53 71 6c 29 29 21 3d 30 0a 20  : p->zSql))!=0. 
38060 20 29 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   ){.#ifndef SQLI
38070 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54  TE_OMIT_DEPRECAT
38080 45 44 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6d  ED.    if( db->m
38090 54 72 61 63 65 20 26 20 53 51 4c 49 54 45 5f 54  Trace & SQLITE_T
380a0 52 41 43 45 5f 4c 45 47 41 43 59 20 29 7b 0a 20  RACE_LEGACY ){. 
380b0 20 20 20 20 20 76 6f 69 64 20 28 2a 78 29 28 76       void (*x)(v
380c0 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  oid*,const char*
380d0 29 20 3d 20 28 76 6f 69 64 28 2a 29 28 76 6f 69  ) = (void(*)(voi
380e0 64 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 29  d*,const char*))
380f0 64 62 2d 3e 78 54 72 61 63 65 3b 0a 20 20 20 20  db->xTrace;.    
38100 20 20 63 68 61 72 20 2a 7a 20 3d 20 73 71 6c 69    char *z = sqli
38110 74 65 33 56 64 62 65 45 78 70 61 6e 64 53 71 6c  te3VdbeExpandSql
38120 28 70 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20 20  (p, zTrace);.   
38130 20 20 20 78 28 64 62 2d 3e 70 54 72 61 63 65 41     x(db->pTraceA
38140 72 67 2c 20 7a 29 3b 0a 20 20 20 20 20 20 73 71  rg, z);.      sq
38150 6c 69 74 65 33 5f 66 72 65 65 28 7a 29 3b 0a 20  lite3_free(z);. 
38160 20 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a     }else.#endif.
38170 20 20 20 20 7b 0a 20 20 20 20 20 20 28 76 6f 69      {.      (voi
38180 64 29 64 62 2d 3e 78 54 72 61 63 65 28 53 51 4c  d)db->xTrace(SQL
38190 49 54 45 5f 54 52 41 43 45 5f 53 54 4d 54 2c 20  ITE_TRACE_STMT, 
381a0 64 62 2d 3e 70 54 72 61 63 65 41 72 67 2c 20 70  db->pTraceArg, p
381b0 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20 20 20 7d  , zTrace);.    }
381c0 0a 20 20 7d 0a 23 69 66 64 65 66 20 53 51 4c 49  .  }.#ifdef SQLI
381d0 54 45 5f 55 53 45 5f 46 43 4e 54 4c 5f 54 52 41  TE_USE_FCNTL_TRA
381e0 43 45 0a 20 20 7a 54 72 61 63 65 20 3d 20 28 70  CE.  zTrace = (p
381f0 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e  Op->p4.z ? pOp->
38200 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 3b  p4.z : p->zSql);
38210 0a 20 20 69 66 28 20 7a 54 72 61 63 65 20 29 7b  .  if( zTrace ){
38220 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20  .    int i;.    
38230 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e  for(i=0; i<db->n
38240 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  Db; i++){.      
38250 69 66 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70  if( DbMaskTest(p
38260 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 29 3d  ->btreeMask, i)=
38270 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20  =0 ) continue;. 
38280 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6c       sqlite3_fil
38290 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 64 62  e_control(db, db
382a0 2d 3e 61 44 62 5b 69 5d 2e 7a 44 62 53 4e 61 6d  ->aDb[i].zDbSNam
382b0 65 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f  e, SQLITE_FCNTL_
382c0 54 52 41 43 45 2c 20 7a 54 72 61 63 65 29 3b 0a  TRACE, zTrace);.
382d0 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66      }.  }.#endif
382e0 20 2f 2a 20 53 51 4c 49 54 45 5f 55 53 45 5f 46   /* SQLITE_USE_F
382f0 43 4e 54 4c 5f 54 52 41 43 45 20 2a 2f 0a 23 69  CNTL_TRACE */.#i
38300 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
38310 47 0a 20 20 69