/ Hex Artifact Content
Login

Artifact ccc1e17a30325068ae4f0292e8601997946886d23acc989c68f2a261a2795c70:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 66  implements the f
01a0: 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 72 75 6e  unction that run
01b0: 73 20 74 68 65 0a 2a 2a 20 62 79 74 65 63 6f 64  s the.** bytecod
01c0: 65 20 6f 66 20 61 20 70 72 65 70 61 72 65 64 20  e of a prepared 
01d0: 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  statement..**.**
01e0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
01f0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
0200: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0210: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0220: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0230: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0240: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0250: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0260: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0270: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0280: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0290: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
02a0: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
02b0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
02c0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
02d0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
02e0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
02f0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
0300: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0310: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0320: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0330: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0340: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0350: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0360: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0370: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  ../*.** Invoke t
0380: 68 69 73 20 6d 61 63 72 6f 20 6f 6e 20 6d 65 6d  his macro on mem
0390: 6f 72 79 20 63 65 6c 6c 73 20 6a 75 73 74 20 70  ory cells just p
03a0: 72 69 6f 72 20 74 6f 20 63 68 61 6e 67 69 6e 67  rior to changing
03b0: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
03c0: 20 74 68 65 20 63 65 6c 6c 2e 20 20 54 68 69 73   the cell.  This
03d0: 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73 20   macro verifies 
03e0: 74 68 61 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70  that shallow cop
03f0: 69 65 73 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 6d  ies are.** not m
0400: 69 73 75 73 65 64 2e 20 20 41 20 73 68 61 6c 6c  isused.  A shall
0410: 6f 77 20 63 6f 70 79 20 6f 66 20 61 20 73 74 72  ow copy of a str
0420: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6a 75 73 74  ing or blob just
0430: 20 63 6f 70 69 65 73 20 61 0a 2a 2a 20 70 6f 69   copies a.** poi
0440: 6e 74 65 72 20 74 6f 20 74 68 65 20 73 74 72 69  nter to the stri
0450: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 6e 6f 74 20  ng or blob, not 
0460: 74 68 65 20 63 6f 6e 74 65 6e 74 2e 20 20 49 66  the content.  If
0470: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a   the original.**
0480: 20 69 73 20 63 68 61 6e 67 65 64 20 77 68 69 6c   is changed whil
0490: 65 20 74 68 65 20 63 6f 70 79 20 69 73 20 73 74  e the copy is st
04a0: 69 6c 6c 20 69 6e 20 75 73 65 2c 20 74 68 65 20  ill in use, the 
04b0: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d  string or blob m
04c0: 69 67 68 74 0a 2a 2a 20 62 65 20 63 68 61 6e 67  ight.** be chang
04d0: 65 64 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65  ed out from unde
04e0: 72 20 74 68 65 20 63 6f 70 79 2e 20 20 54 68 69  r the copy.  Thi
04f0: 73 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73  s macro verifies
0500: 20 74 68 61 74 20 6e 6f 74 68 69 6e 67 0a 2a 2a   that nothing.**
0510: 20 6c 69 6b 65 20 74 68 61 74 20 65 76 65 72 20   like that ever 
0520: 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 23 69 66 64  happens..*/.#ifd
0530: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
0540: 23 20 64 65 66 69 6e 65 20 6d 65 6d 41 62 6f 75  # define memAbou
0550: 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 20 73  tToChange(P,M) s
0560: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 41 62 6f  qlite3VdbeMemAbo
0570: 75 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 0a  utToChange(P,M).
0580: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 6d  #else.# define m
0590: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
05a0: 50 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  P,M).#endif../*.
05b0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
05c0: 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
05d0: 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
05e0: 65 76 65 72 79 20 74 69 6d 65 20 61 20 63 75 72  every time a cur
05f0: 73 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65 69  sor.** moves, ei
0600: 74 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f 53  ther by the OP_S
0610: 65 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c 20  eekXX, OP_Next, 
0620: 6f 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f 64  or OP_Prev opcod
0630: 65 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a 2a  es.  The test.**
0640: 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65 20   procedures use 
0650: 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  this information
0660: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68   to make sure th
0670: 61 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a 2a  at indices are.*
0680: 2a 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63  * working correc
0690: 74 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69 61  tly.  This varia
06a0: 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74  ble has no funct
06b0: 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74  ion other than t
06c0: 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79  o.** help verify
06d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
06e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69  ration of the li
06f0: 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  brary..*/.#ifdef
0700: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74   SQLITE_TEST.int
0710: 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
0720: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0730: 66 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68  f../*.** When th
0740: 69 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  is global variab
0750: 6c 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c 20  le is positive, 
0760: 69 74 20 67 65 74 73 20 64 65 63 72 65 6d 65 6e  it gets decremen
0770: 74 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65 0a  ted once before.
0780: 2a 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63 74  ** each instruct
0790: 69 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45 2e  ion in the VDBE.
07a0: 20 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65    When it reache
07b0: 73 20 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e 69  s zero, the u1.i
07c0: 73 49 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a 20  sInterrupted.** 
07d0: 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c  field of the sql
07e0: 69 74 65 33 20 73 74 72 75 63 74 75 72 65 20 69  ite3 structure i
07f0: 73 20 73 65 74 20 69 6e 20 6f 72 64 65 72 20 74  s set in order t
0800: 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e  o simulate an in
0810: 74 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20 54  terrupt..**.** T
0820: 68 69 73 20 66 61 63 69 6c 69 74 79 20 69 73 20  his facility is 
0830: 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67  used for testing
0840: 20 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e 20   purposes only. 
0850: 20 49 74 20 64 6f 65 73 20 6e 6f 74 20 66 75 6e   It does not fun
0860: 63 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20 6f  ction.** in an o
0870: 72 64 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a 2a  rdinary build..*
0880: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
0890: 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33  TEST.int sqlite3
08a0: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
08b0: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a   = 0;.#endif../*
08c0: 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f  .** The next glo
08d0: 62 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20  bal variable is 
08e0: 69 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68  incremented each
08f0: 20 74 79 70 65 20 74 68 65 20 4f 50 5f 53 6f 72   type the OP_Sor
0900: 74 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  t opcode.** is e
0910: 78 65 63 75 74 65 64 2e 20 20 54 68 65 20 74 65  xecuted.  The te
0920: 73 74 20 70 72 6f 63 65 64 75 72 65 73 20 75 73  st procedures us
0930: 65 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69  e this informati
0940: 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  on to make sure 
0950: 74 68 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67 20  that.** sorting 
0960: 69 73 20 6f 63 63 75 72 72 69 6e 67 20 6f 72 20  is occurring or 
0970: 6e 6f 74 20 6f 63 63 75 72 72 69 6e 67 20 61 74  not occurring at
0980: 20 61 70 70 72 6f 70 72 69 61 74 65 20 74 69 6d   appropriate tim
0990: 65 73 2e 20 20 20 54 68 69 73 20 76 61 72 69 61  es.   This varia
09a0: 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75  ble.** has no fu
09b0: 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61  nction other tha
09c0: 6e 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79  n to help verify
09d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
09e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  ration of the.**
09f0: 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66   library..*/.#if
0a00: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
0a10: 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72 74  int sqlite3_sort
0a20: 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64  _count = 0;.#end
0a30: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65  if../*.** The ne
0a40: 78 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  xt global variab
0a50: 6c 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 73  le records the s
0a60: 69 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65  ize of the large
0a70: 73 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f  st MEM_Blob.** o
0a80: 72 20 4d 45 4d 5f 53 74 72 20 74 68 61 74 20 68  r MEM_Str that h
0a90: 61 73 20 62 65 65 6e 20 75 73 65 64 20 62 79 20  as been used by 
0aa0: 61 20 56 44 42 45 20 6f 70 63 6f 64 65 2e 20 20  a VDBE opcode.  
0ab0: 54 68 65 20 74 65 73 74 20 70 72 6f 63 65 64 75  The test procedu
0ac0: 72 65 73 0a 2a 2a 20 75 73 65 20 74 68 69 73 20  res.** use this 
0ad0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d  information to m
0ae0: 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68  ake sure that th
0af0: 65 20 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e 63  e zero-blob func
0b00: 74 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73 20  tionality.** is 
0b10: 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c  working correctl
0b20: 79 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62  y.   This variab
0b30: 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69  le has no functi
0b40: 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f  on other than to
0b50: 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20  .** help verify 
0b60: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0b70: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62  ation of the lib
0b80: 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  rary..*/.#ifdef 
0b90: 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20  SQLITE_TEST.int 
0ba0: 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62  sqlite3_max_blob
0bb0: 73 69 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69 63  size = 0;.static
0bc0: 20 76 6f 69 64 20 75 70 64 61 74 65 4d 61 78 42   void updateMaxB
0bd0: 6c 6f 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29 7b  lobsize(Mem *p){
0be0: 0a 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73  .  if( (p->flags
0bf0: 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
0c00: 42 6c 6f 62 29 29 21 3d 30 20 26 26 20 70 2d 3e  Blob))!=0 && p->
0c10: 6e 3e 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c  n>sqlite3_max_bl
0c20: 6f 62 73 69 7a 65 20 29 7b 0a 20 20 20 20 73 71  obsize ){.    sq
0c30: 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69  lite3_max_blobsi
0c40: 7a 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d  ze = p->n;.  }.}
0c50: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
0c60: 68 69 73 20 6d 61 63 72 6f 20 65 76 61 6c 75 61  his macro evalua
0c70: 74 65 73 20 74 6f 20 74 72 75 65 20 69 66 20 65  tes to true if e
0c80: 69 74 68 65 72 20 74 68 65 20 75 70 64 61 74 65  ither the update
0c90: 20 68 6f 6f 6b 20 6f 72 20 74 68 65 20 70 72 65   hook or the pre
0ca0: 75 70 64 61 74 65 0a 2a 2a 20 68 6f 6f 6b 20 61  update.** hook a
0cb0: 72 65 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 64  re enabled for d
0cc0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 20  atabase connect 
0cd0: 44 42 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  DB..*/.#ifdef SQ
0ce0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55  LITE_ENABLE_PREU
0cf0: 50 44 41 54 45 5f 48 4f 4f 4b 0a 23 20 64 65 66  PDATE_HOOK.# def
0d00: 69 6e 65 20 48 41 53 5f 55 50 44 41 54 45 5f 48  ine HAS_UPDATE_H
0d10: 4f 4f 4b 28 44 42 29 20 28 28 44 42 29 2d 3e 78  OOK(DB) ((DB)->x
0d20: 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63  PreUpdateCallbac
0d30: 6b 7c 7c 28 44 42 29 2d 3e 78 55 70 64 61 74 65  k||(DB)->xUpdate
0d40: 43 61 6c 6c 62 61 63 6b 29 0a 23 65 6c 73 65 0a  Callback).#else.
0d50: 23 20 64 65 66 69 6e 65 20 48 41 53 5f 55 50 44  # define HAS_UPD
0d60: 41 54 45 5f 48 4f 4f 4b 28 44 42 29 20 28 28 44  ATE_HOOK(DB) ((D
0d70: 42 29 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  B)->xUpdateCallb
0d80: 61 63 6b 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ack).#endif../*.
0d90: 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f 62  ** The next glob
0da0: 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20 69  al variable is i
0db0: 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68 20  ncremented each 
0dc0: 74 69 6d 65 20 74 68 65 20 4f 50 5f 46 6f 75 6e  time the OP_Foun
0dd0: 64 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  d opcode.** is e
0de0: 78 65 63 75 74 65 64 2e 20 54 68 69 73 20 69 73  xecuted. This is
0df0: 20 75 73 65 64 20 74 6f 20 74 65 73 74 20 77 68   used to test wh
0e00: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
0e10: 20 66 6f 72 65 69 67 6e 20 6b 65 79 0a 2a 2a 20   foreign key.** 
0e20: 6f 70 65 72 61 74 69 6f 6e 20 69 6d 70 6c 65 6d  operation implem
0e30: 65 6e 74 65 64 20 75 73 69 6e 67 20 4f 50 5f 46  ented using OP_F
0e40: 6b 49 73 5a 65 72 6f 20 69 73 20 77 6f 72 6b 69  kIsZero is worki
0e50: 6e 67 2e 20 54 68 69 73 20 76 61 72 69 61 62 6c  ng. This variabl
0e60: 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75 6e 63  e.** has no func
0e70: 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20  tion other than 
0e80: 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79 20 74  to help verify t
0e90: 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61  he correct opera
0ea0: 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 6c  tion of the.** l
0eb0: 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65  ibrary..*/.#ifde
0ec0: 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e  f SQLITE_TEST.in
0ed0: 74 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f  t sqlite3_found_
0ee0: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0ef0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 61 20  f../*.** Test a 
0f00: 72 65 67 69 73 74 65 72 20 74 6f 20 73 65 65 20  register to see 
0f10: 69 66 20 69 74 20 65 78 63 65 65 64 73 20 74 68  if it exceeds th
0f20: 65 20 63 75 72 72 65 6e 74 20 6d 61 78 69 6d 75  e current maximu
0f30: 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2a 20  m blob size..** 
0f40: 49 66 20 69 74 20 64 6f 65 73 2c 20 72 65 63 6f  If it does, reco
0f50: 72 64 20 74 68 65 20 6e 65 77 20 6d 61 78 69 6d  rd the new maxim
0f60: 75 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2f  um blob size..*/
0f70: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
0f80: 49 54 45 5f 54 45 53 54 29 20 26 26 20 21 64 65  ITE_TEST) && !de
0f90: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 55 4e 54  fined(SQLITE_UNT
0fa0: 45 53 54 41 42 4c 45 29 0a 23 20 64 65 66 69 6e  ESTABLE).# defin
0fb0: 65 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f  e UPDATE_MAX_BLO
0fc0: 42 53 49 5a 45 28 50 29 20 20 75 70 64 61 74 65  BSIZE(P)  update
0fd0: 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50 29 0a 23  MaxBlobsize(P).#
0fe0: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 55 50  else.# define UP
0ff0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
1000: 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E(P).#endif../*.
1010: 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 56 44  ** Invoke the VD
1020: 42 45 20 63 6f 76 65 72 61 67 65 20 63 61 6c 6c  BE coverage call
1030: 62 61 63 6b 2c 20 69 66 20 74 68 61 74 20 63 61  back, if that ca
1040: 6c 6c 62 61 63 6b 20 69 73 20 64 65 66 69 6e 65  llback is define
1050: 64 2e 20 20 54 68 69 73 0a 2a 2a 20 66 65 61 74  d.  This.** feat
1060: 75 72 65 20 69 73 20 75 73 65 64 20 66 6f 72 20  ure is used for 
1070: 74 65 73 74 20 73 75 69 74 65 20 76 61 6c 69 64  test suite valid
1080: 61 74 69 6f 6e 20 6f 6e 6c 79 20 61 6e 64 20 64  ation only and d
1090: 6f 65 73 20 6e 6f 74 20 61 70 70 65 61 72 20 61  oes not appear a
10a0: 6e 0a 2a 2a 20 70 72 6f 64 75 63 74 69 6f 6e 20  n.** production 
10b0: 62 75 69 6c 64 73 2e 0a 2a 2a 0a 2a 2a 20 4d 20  builds..**.** M 
10c0: 69 73 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 32  is an integer, 2
10d0: 20 6f 72 20 33 2c 20 74 68 61 74 20 69 6e 64 69   or 3, that indi
10e0: 63 65 73 20 68 6f 77 20 6d 61 6e 79 20 64 69 66  ces how many dif
10f0: 66 65 72 65 6e 74 20 77 61 79 73 20 74 68 65 0a  ferent ways the.
1100: 2a 2a 20 62 72 61 6e 63 68 20 63 61 6e 20 67 6f  ** branch can go
1110: 2e 20 20 49 74 20 69 73 20 75 73 75 61 6c 6c 79  .  It is usually
1120: 20 32 2e 20 20 22 49 22 20 69 73 20 74 68 65 20   2.  "I" is the 
1130: 64 69 72 65 63 74 69 6f 6e 20 74 68 65 20 62 72  direction the br
1140: 61 6e 63 68 0a 2a 2a 20 67 6f 65 73 2e 20 20 30  anch.** goes.  0
1150: 20 6d 65 61 6e 73 20 66 61 6c 6c 73 20 74 68 72   means falls thr
1160: 6f 75 67 68 2e 20 20 31 20 6d 65 61 6e 73 20 62  ough.  1 means b
1170: 72 61 6e 63 68 20 69 73 20 74 61 6b 65 6e 2e 20  ranch is taken. 
1180: 20 32 20 6d 65 61 6e 73 20 74 68 65 0a 2a 2a 20   2 means the.** 
1190: 73 65 63 6f 6e 64 20 61 6c 74 65 72 6e 61 74 69  second alternati
11a0: 76 65 20 62 72 61 6e 63 68 20 69 73 20 74 61 6b  ve branch is tak
11b0: 65 6e 2e 0a 2a 2a 0a 2a 2a 20 69 53 72 63 4c 69  en..**.** iSrcLi
11c0: 6e 65 20 69 73 20 74 68 65 20 73 6f 75 72 63 65  ne is the source
11d0: 20 63 6f 64 65 20 6c 69 6e 65 20 28 66 72 6f 6d   code line (from
11e0: 20 74 68 65 20 5f 5f 4c 49 4e 45 5f 5f 20 6d 61   the __LINE__ ma
11f0: 63 72 6f 29 20 74 68 61 74 0a 2a 2a 20 67 65 6e  cro) that.** gen
1200: 65 72 61 74 65 64 20 74 68 65 20 56 44 42 45 20  erated the VDBE 
1210: 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 54 68  instruction.  Th
1220: 69 73 20 69 6e 73 74 72 75 6d 65 6e 74 61 74 69  is instrumentati
1230: 6f 6e 20 61 73 73 75 6d 65 73 20 74 68 61 74 20  on assumes that 
1240: 61 6c 6c 0a 2a 2a 20 73 6f 75 72 63 65 20 63 6f  all.** source co
1250: 64 65 20 69 73 20 69 6e 20 61 20 73 69 6e 67 6c  de is in a singl
1260: 65 20 66 69 6c 65 20 28 74 68 65 20 61 6d 61 6c  e file (the amal
1270: 67 61 6d 61 74 69 6f 6e 29 2e 20 20 53 70 65 63  gamation).  Spec
1280: 69 61 6c 20 76 61 6c 75 65 73 20 31 0a 2a 2a 20  ial values 1.** 
1290: 61 6e 64 20 32 20 66 6f 72 20 74 68 65 20 69 53  and 2 for the iS
12a0: 72 63 4c 69 6e 65 20 70 61 72 61 6d 65 74 65 72  rcLine parameter
12b0: 20 6d 65 61 6e 20 74 68 61 74 20 74 68 69 73 20   mean that this 
12c0: 70 61 72 74 69 63 75 6c 61 72 20 62 72 61 6e 63  particular branc
12d0: 68 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 74  h is.** always t
12e0: 61 6b 65 6e 20 6f 72 20 6e 65 76 65 72 20 74 61  aken or never ta
12f0: 6b 65 6e 2c 20 72 65 73 70 65 63 74 69 76 65 6c  ken, respectivel
1300: 79 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  y..*/.#if !defin
1310: 65 64 28 53 51 4c 49 54 45 5f 56 44 42 45 5f 43  ed(SQLITE_VDBE_C
1320: 4f 56 45 52 41 47 45 29 0a 23 20 64 65 66 69 6e  OVERAGE).# defin
1330: 65 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65  e VdbeBranchTake
1340: 6e 28 49 2c 4d 29 0a 23 65 6c 73 65 0a 23 20 64  n(I,M).#else.# d
1350: 65 66 69 6e 65 20 56 64 62 65 42 72 61 6e 63 68  efine VdbeBranch
1360: 54 61 6b 65 6e 28 49 2c 4d 29 20 76 64 62 65 54  Taken(I,M) vdbeT
1370: 61 6b 65 42 72 61 6e 63 68 28 70 4f 70 2d 3e 69  akeBranch(pOp->i
1380: 53 72 63 4c 69 6e 65 2c 49 2c 4d 29 0a 20 20 73  SrcLine,I,M).  s
1390: 74 61 74 69 63 20 76 6f 69 64 20 76 64 62 65 54  tatic void vdbeT
13a0: 61 6b 65 42 72 61 6e 63 68 28 69 6e 74 20 69 53  akeBranch(int iS
13b0: 72 63 4c 69 6e 65 2c 20 75 38 20 49 2c 20 75 38  rcLine, u8 I, u8
13c0: 20 4d 29 7b 0a 20 20 20 20 69 66 28 20 69 53 72   M){.    if( iSr
13d0: 63 4c 69 6e 65 3c 3d 32 20 26 26 20 41 4c 57 41  cLine<=2 && ALWA
13e0: 59 53 28 69 53 72 63 4c 69 6e 65 3e 30 29 20 29  YS(iSrcLine>0) )
13f0: 7b 0a 20 20 20 20 20 20 4d 20 3d 20 69 53 72 63  {.      M = iSrc
1400: 4c 69 6e 65 3b 0a 20 20 20 20 20 20 2f 2a 20 41  Line;.      /* A
1410: 73 73 65 72 74 20 74 68 65 20 74 72 75 74 68 20  ssert the truth 
1420: 6f 66 20 56 64 62 65 43 6f 76 65 72 61 67 65 41  of VdbeCoverageA
1430: 6c 77 61 79 73 54 61 6b 65 6e 28 29 20 61 6e 64  lwaysTaken() and
1440: 20 0a 20 20 20 20 20 20 2a 2a 20 56 64 62 65 43   .      ** VdbeC
1450: 6f 76 65 72 61 67 65 4e 65 76 65 72 54 61 6b 65  overageNeverTake
1460: 6e 28 29 20 2a 2f 0a 20 20 20 20 20 20 61 73 73  n() */.      ass
1470: 65 72 74 28 20 28 4d 20 26 20 49 29 3d 3d 49 20  ert( (M & I)==I 
1480: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
1490: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 47      if( sqlite3G
14a0: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 56 64 62  lobalConfig.xVdb
14b0: 65 42 72 61 6e 63 68 3d 3d 30 20 29 20 72 65 74  eBranch==0 ) ret
14c0: 75 72 6e 3b 20 20 2f 2a 4e 4f 5f 54 45 53 54 2a  urn;  /*NO_TEST*
14d0: 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 47  /.      sqlite3G
14e0: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 56 64 62  lobalConfig.xVdb
14f0: 65 42 72 61 6e 63 68 28 73 71 6c 69 74 65 33 47  eBranch(sqlite3G
1500: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 70 56 64 62  lobalConfig.pVdb
1510: 65 42 72 61 6e 63 68 41 72 67 2c 0a 20 20 20 20  eBranchArg,.    
1520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1540: 20 20 69 53 72 63 4c 69 6e 65 2c 49 2c 4d 29 3b    iSrcLine,I,M);
1550: 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69  .    }.  }.#endi
1560: 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74  f../*.** Convert
1570: 20 74 68 65 20 67 69 76 65 6e 20 72 65 67 69 73   the given regis
1580: 74 65 72 20 69 6e 74 6f 20 61 20 73 74 72 69 6e  ter into a strin
1590: 67 20 69 66 20 69 74 20 69 73 6e 27 74 20 6f 6e  g if it isn't on
15a0: 65 0a 2a 2a 20 61 6c 72 65 61 64 79 2e 20 52 65  e.** already. Re
15b0: 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66  turn non-zero if
15c0: 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c   a malloc() fail
15d0: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 74  s..*/.#define St
15e0: 72 69 6e 67 69 66 79 28 50 2c 20 65 6e 63 29 20  ringify(P, enc) 
15f0: 5c 0a 20 20 20 69 66 28 28 28 50 29 2d 3e 66 6c  \.   if(((P)->fl
1600: 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  ags&(MEM_Str|MEM
1610: 5f 42 6c 6f 62 29 29 3d 3d 30 20 26 26 20 73 71  _Blob))==0 && sq
1620: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69  lite3VdbeMemStri
1630: 6e 67 69 66 79 28 50 2c 65 6e 63 2c 30 29 29 20  ngify(P,enc,0)) 
1640: 5c 0a 20 20 20 20 20 7b 20 67 6f 74 6f 20 6e 6f  \.     { goto no
1650: 5f 6d 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a 2a 20 41  _mem; }../*.** A
1660: 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69  n ephemeral stri
1670: 6e 67 20 76 61 6c 75 65 20 28 73 69 67 6e 69 66  ng value (signif
1680: 69 65 64 20 62 79 20 74 68 65 20 4d 45 4d 5f 45  ied by the MEM_E
1690: 70 68 65 6d 20 66 6c 61 67 29 20 63 6f 6e 74 61  phem flag) conta
16a0: 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e 74 65 72  ins.** a pointer
16b0: 20 74 6f 20 61 20 64 79 6e 61 6d 69 63 61 6c 6c   to a dynamicall
16c0: 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 74 72 69  y allocated stri
16d0: 6e 67 20 77 68 65 72 65 20 73 6f 6d 65 20 6f 74  ng where some ot
16e0: 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a 20 69 73  her entity.** is
16f0: 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72   responsible for
1700: 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68   deallocating th
1710: 61 74 20 73 74 72 69 6e 67 2e 20 20 42 65 63 61  at string.  Beca
1720: 75 73 65 20 74 68 65 20 72 65 67 69 73 74 65 72  use the register
1730: 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e  .** does not con
1740: 74 72 6f 6c 20 74 68 65 20 73 74 72 69 6e 67 2c  trol the string,
1750: 20 69 74 20 6d 69 67 68 74 20 62 65 20 64 65 6c   it might be del
1760: 65 74 65 64 20 77 69 74 68 6f 75 74 20 74 68 65  eted without the
1770: 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6b 6e 6f   register.** kno
1780: 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 54  wing it..**.** T
1790: 68 69 73 20 72 6f 75 74 69 6e 65 20 63 6f 6e 76  his routine conv
17a0: 65 72 74 73 20 61 6e 20 65 70 68 65 6d 65 72 61  erts an ephemera
17b0: 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20  l string into a 
17c0: 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
17d0: 63 61 74 65 64 0a 2a 2a 20 73 74 72 69 6e 67 20  cated.** string 
17e0: 74 68 61 74 20 74 68 65 20 72 65 67 69 73 74 65  that the registe
17f0: 72 20 69 74 73 65 6c 66 20 63 6f 6e 74 72 6f 6c  r itself control
1800: 73 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  s.  In other wor
1810: 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e 76 65 72  ds, it.** conver
1820: 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68 65 6d 20  ts an MEM_Ephem 
1830: 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20 73 74  string into a st
1840: 72 69 6e 67 20 77 69 74 68 20 50 2e 7a 3d 3d 50  ring with P.z==P
1850: 2e 7a 4d 61 6c 6c 6f 63 2e 0a 2a 2f 0a 23 64 65  .zMalloc..*/.#de
1860: 66 69 6e 65 20 44 65 65 70 68 65 6d 65 72 61 6c  fine Deephemeral
1870: 69 7a 65 28 50 29 20 5c 0a 20 20 20 69 66 28 20  ize(P) \.   if( 
1880: 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  ((P)->flags&MEM_
1890: 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20 20 20 20  Ephem)!=0 \.    
18a0: 20 20 20 26 26 20 73 71 6c 69 74 65 33 56 64 62     && sqlite3Vdb
18b0: 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c  eMemMakeWriteabl
18c0: 65 28 50 29 20 29 7b 20 67 6f 74 6f 20 6e 6f 5f  e(P) ){ goto no_
18d0: 6d 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74 75 72 6e  mem;}../* Return
18e0: 20 74 72 75 65 20 69 66 20 74 68 65 20 63 75 72   true if the cur
18f0: 73 6f 72 20 77 61 73 20 6f 70 65 6e 65 64 20 75  sor was opened u
1900: 73 69 6e 67 20 74 68 65 20 4f 50 5f 4f 70 65 6e  sing the OP_Open
1910: 53 6f 72 74 65 72 20 6f 70 63 6f 64 65 2e 20 2a  Sorter opcode. *
1920: 2f 0a 23 64 65 66 69 6e 65 20 69 73 53 6f 72 74  /.#define isSort
1930: 65 72 28 78 29 20 28 28 78 29 2d 3e 65 43 75 72  er(x) ((x)->eCur
1940: 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 53 4f  Type==CURTYPE_SO
1950: 52 54 45 52 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  RTER)../*.** All
1960: 6f 63 61 74 65 20 56 64 62 65 43 75 72 73 6f 72  ocate VdbeCursor
1970: 20 6e 75 6d 62 65 72 20 69 43 75 72 2e 20 20 52   number iCur.  R
1980: 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65 72 20  eturn a pointer 
1990: 74 6f 20 69 74 2e 20 20 52 65 74 75 72 6e 20 4e  to it.  Return N
19a0: 55 4c 4c 0a 2a 2a 20 69 66 20 77 65 20 72 75 6e  ULL.** if we run
19b0: 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 2e 0a   out of memory..
19c0: 2a 2f 0a 73 74 61 74 69 63 20 56 64 62 65 43 75  */.static VdbeCu
19d0: 72 73 6f 72 20 2a 61 6c 6c 6f 63 61 74 65 43 75  rsor *allocateCu
19e0: 72 73 6f 72 28 0a 20 20 56 64 62 65 20 2a 70 2c  rsor(.  Vdbe *p,
19f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1a00: 20 54 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63   The virtual mac
1a10: 68 69 6e 65 20 2a 2f 0a 20 20 69 6e 74 20 69 43  hine */.  int iC
1a20: 75 72 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  ur,             
1a30: 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65 20  /* Index of the 
1a40: 6e 65 77 20 56 64 62 65 43 75 72 73 6f 72 20 2a  new VdbeCursor *
1a50: 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 2c 20  /.  int nField, 
1a60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1a70: 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e  ber of fields in
1a80: 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
1a90: 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62  dex */.  int iDb
1aa0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
1ab0: 2a 20 44 61 74 61 62 61 73 65 20 74 68 65 20 63  * Database the c
1ac0: 75 72 73 6f 72 20 62 65 6c 6f 6e 67 73 20 74 6f  ursor belongs to
1ad0: 2c 20 6f 72 20 2d 31 20 2a 2f 0a 20 20 75 38 20  , or -1 */.  u8 
1ae0: 65 43 75 72 54 79 70 65 20 20 20 20 20 20 20 20  eCurType        
1af0: 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 74 68     /* Type of th
1b00: 65 20 6e 65 77 20 63 75 72 73 6f 72 20 2a 2f 0a  e new cursor */.
1b10: 29 7b 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65  ){.  /* Find the
1b20: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61   memory cell tha
1b30: 74 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 74  t will be used t
1b40: 6f 20 73 74 6f 72 65 20 74 68 65 20 62 6c 6f 62  o store the blob
1b50: 20 6f 66 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a 20   of memory.  ** 
1b60: 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69  required for thi
1b70: 73 20 56 64 62 65 43 75 72 73 6f 72 20 73 74 72  s VdbeCursor str
1b80: 75 63 74 75 72 65 2e 20 49 74 20 69 73 20 63 6f  ucture. It is co
1b90: 6e 76 65 6e 69 65 6e 74 20 74 6f 20 75 73 65 20  nvenient to use 
1ba0: 61 20 0a 20 20 2a 2a 20 76 64 62 65 20 6d 65 6d  a .  ** vdbe mem
1bb0: 6f 72 79 20 63 65 6c 6c 20 74 6f 20 6d 61 6e 61  ory cell to mana
1bc0: 67 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c  ge the memory al
1bd0: 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 69 72 65  location require
1be0: 64 20 66 6f 72 20 61 0a 20 20 2a 2a 20 56 64 62  d for a.  ** Vdb
1bf0: 65 43 75 72 73 6f 72 20 73 74 72 75 63 74 75 72  eCursor structur
1c00: 65 20 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77  e for the follow
1c10: 69 6e 67 20 72 65 61 73 6f 6e 73 3a 0a 20 20 2a  ing reasons:.  *
1c20: 2a 0a 20 20 2a 2a 20 20 20 2a 20 53 6f 6d 65 74  *.  **   * Somet
1c30: 69 6d 65 73 20 63 75 72 73 6f 72 20 6e 75 6d 62  imes cursor numb
1c40: 65 72 73 20 61 72 65 20 75 73 65 64 20 66 6f 72  ers are used for
1c50: 20 61 20 63 6f 75 70 6c 65 20 6f 66 20 64 69 66   a couple of dif
1c60: 66 65 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20 20  ferent.  **     
1c70: 70 75 72 70 6f 73 65 73 20 69 6e 20 61 20 76 64  purposes in a vd
1c80: 62 65 20 70 72 6f 67 72 61 6d 2e 20 54 68 65 20  be program. The 
1c90: 64 69 66 66 65 72 65 6e 74 20 75 73 65 73 20 6d  different uses m
1ca0: 69 67 68 74 20 72 65 71 75 69 72 65 0a 20 20 2a  ight require.  *
1cb0: 2a 20 20 20 20 20 64 69 66 66 65 72 65 6e 74 20  *     different 
1cc0: 73 69 7a 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e  sized allocation
1cd0: 73 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  s. Memory cells 
1ce0: 70 72 6f 76 69 64 65 20 67 72 6f 77 61 62 6c 65  provide growable
1cf0: 0a 20 20 2a 2a 20 20 20 20 20 61 6c 6c 6f 63 61  .  **     alloca
1d00: 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  tions..  **.  **
1d10: 20 20 20 2a 20 57 68 65 6e 20 75 73 69 6e 67 20     * When using 
1d20: 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41  ENABLE_MEMORY_MA
1d30: 4e 41 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72 79  NAGEMENT, memory
1d40: 20 63 65 6c 6c 20 62 75 66 66 65 72 73 20 63 61   cell buffers ca
1d50: 6e 0a 20 20 2a 2a 20 20 20 20 20 62 65 20 66 72  n.  **     be fr
1d60: 65 65 64 20 6c 61 7a 69 6c 79 20 76 69 61 20 74  eed lazily via t
1d70: 68 65 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61  he sqlite3_relea
1d80: 73 65 5f 6d 65 6d 6f 72 79 28 29 20 41 50 49 2e  se_memory() API.
1d90: 20 54 68 69 73 0a 20 20 2a 2a 20 20 20 20 20 6d   This.  **     m
1da0: 69 6e 69 6d 69 7a 65 73 20 74 68 65 20 6e 75 6d  inimizes the num
1db0: 62 65 72 20 6f 66 20 6d 61 6c 6c 6f 63 20 63 61  ber of malloc ca
1dc0: 6c 6c 73 20 6d 61 64 65 20 62 79 20 74 68 65 20  lls made by the 
1dd0: 73 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20 2a  system..  **.  *
1de0: 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c  * The memory cel
1df0: 6c 20 66 6f 72 20 63 75 72 73 6f 72 20 30 20 69  l for cursor 0 i
1e00: 73 20 61 4d 65 6d 5b 30 5d 2e 20 54 68 65 20 72  s aMem[0]. The r
1e10: 65 73 74 20 61 72 65 20 61 6c 6c 6f 63 61 74 65  est are allocate
1e20: 64 20 66 72 6f 6d 0a 20 20 2a 2a 20 74 68 65 20  d from.  ** the 
1e30: 74 6f 70 20 6f 66 20 74 68 65 20 72 65 67 69 73  top of the regis
1e40: 74 65 72 20 73 70 61 63 65 2e 20 20 43 75 72 73  ter space.  Curs
1e50: 6f 72 20 31 20 69 73 20 61 74 20 4d 65 6d 5b 70  or 1 is at Mem[p
1e60: 2d 3e 6e 4d 65 6d 2d 31 5d 2e 0a 20 20 2a 2a 20  ->nMem-1]..  ** 
1e70: 43 75 72 73 6f 72 20 32 20 69 73 20 61 74 20 4d  Cursor 2 is at M
1e80: 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d 32 5d 2e 20 41  em[p->nMem-2]. A
1e90: 6e 64 20 73 6f 20 66 6f 72 74 68 2e 0a 20 20 2a  nd so forth..  *
1ea0: 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20  /.  Mem *pMem = 
1eb0: 69 43 75 72 3e 30 20 3f 20 26 70 2d 3e 61 4d 65  iCur>0 ? &p->aMe
1ec0: 6d 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72 5d 20  m[p->nMem-iCur] 
1ed0: 3a 20 70 2d 3e 61 4d 65 6d 3b 0a 0a 20 20 69 6e  : p->aMem;..  in
1ee0: 74 20 6e 42 79 74 65 3b 0a 20 20 56 64 62 65 43  t nByte;.  VdbeC
1ef0: 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b 0a  ursor *pCx = 0;.
1f00: 20 20 6e 42 79 74 65 20 3d 20 0a 20 20 20 20 20    nByte = .     
1f10: 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 56   ROUND8(sizeof(V
1f20: 64 62 65 43 75 72 73 6f 72 29 29 20 2b 20 32 2a  dbeCursor)) + 2*
1f30: 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69 65  sizeof(u32)*nFie
1f40: 6c 64 20 2b 20 0a 20 20 20 20 20 20 28 65 43 75  ld + .      (eCu
1f50: 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
1f60: 54 52 45 45 3f 73 71 6c 69 74 65 33 42 74 72 65  TREE?sqlite3Btre
1f70: 65 43 75 72 73 6f 72 53 69 7a 65 28 29 3a 30 29  eCursorSize():0)
1f80: 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 43 75  ;..  assert( iCu
1f90: 72 3e 3d 30 20 26 26 20 69 43 75 72 3c 70 2d 3e  r>=0 && iCur<p->
1fa0: 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66 28  nCursor );.  if(
1fb0: 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20   p->apCsr[iCur] 
1fc0: 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f  ){ /*OPTIMIZATIO
1fd0: 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20  N-IF-FALSE*/.   
1fe0: 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65 65   sqlite3VdbeFree
1ff0: 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43  Cursor(p, p->apC
2000: 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20 20 70  sr[iCur]);.    p
2010: 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d 20  ->apCsr[iCur] = 
2020: 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53 51 4c  0;.  }.  if( SQL
2030: 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65 33 56  ITE_OK==sqlite3V
2040: 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65  dbeMemClearAndRe
2050: 73 69 7a 65 28 70 4d 65 6d 2c 20 6e 42 79 74 65  size(pMem, nByte
2060: 29 20 29 7b 0a 20 20 20 20 70 2d 3e 61 70 43 73  ) ){.    p->apCs
2070: 72 5b 69 43 75 72 5d 20 3d 20 70 43 78 20 3d 20  r[iCur] = pCx = 
2080: 28 56 64 62 65 43 75 72 73 6f 72 2a 29 70 4d 65  (VdbeCursor*)pMe
2090: 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65 6d 73 65 74  m->z;.    memset
20a0: 28 70 43 78 2c 20 30 2c 20 6f 66 66 73 65 74 6f  (pCx, 0, offseto
20b0: 66 28 56 64 62 65 43 75 72 73 6f 72 2c 70 41 6c  f(VdbeCursor,pAl
20c0: 74 43 75 72 73 6f 72 29 29 3b 0a 20 20 20 20 70  tCursor));.    p
20d0: 43 78 2d 3e 65 43 75 72 54 79 70 65 20 3d 20 65  Cx->eCurType = e
20e0: 43 75 72 54 79 70 65 3b 0a 20 20 20 20 70 43 78  CurType;.    pCx
20f0: 2d 3e 69 44 62 20 3d 20 69 44 62 3b 0a 20 20 20  ->iDb = iDb;.   
2100: 20 70 43 78 2d 3e 6e 46 69 65 6c 64 20 3d 20 6e   pCx->nField = n
2110: 46 69 65 6c 64 3b 0a 20 20 20 20 70 43 78 2d 3e  Field;.    pCx->
2120: 61 4f 66 66 73 65 74 20 3d 20 26 70 43 78 2d 3e  aOffset = &pCx->
2130: 61 54 79 70 65 5b 6e 46 69 65 6c 64 5d 3b 0a 20  aType[nField];. 
2140: 20 20 20 69 66 28 20 65 43 75 72 54 79 70 65 3d     if( eCurType=
2150: 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
2160: 7b 0a 20 20 20 20 20 20 70 43 78 2d 3e 75 63 2e  {.      pCx->uc.
2170: 70 43 75 72 73 6f 72 20 3d 20 28 42 74 43 75 72  pCursor = (BtCur
2180: 73 6f 72 2a 29 0a 20 20 20 20 20 20 20 20 20 20  sor*).          
2190: 26 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44 38 28  &pMem->z[ROUND8(
21a0: 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f  sizeof(VdbeCurso
21b0: 72 29 29 2b 32 2a 73 69 7a 65 6f 66 28 75 33 32  r))+2*sizeof(u32
21c0: 29 2a 6e 46 69 65 6c 64 5d 3b 0a 20 20 20 20 20  )*nField];.     
21d0: 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
21e0: 73 6f 72 5a 65 72 6f 28 70 43 78 2d 3e 75 63 2e  sorZero(pCx->uc.
21f0: 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a  pCursor);.    }.
2200: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 70 43 78    }.  return pCx
2210: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74  ;.}../*.** Try t
2220: 6f 20 63 6f 6e 76 65 72 74 20 61 20 76 61 6c 75  o convert a valu
2230: 65 20 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63  e into a numeric
2240: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
2250: 69 66 20 77 65 20 63 61 6e 0a 2a 2a 20 64 6f 20  if we can.** do 
2260: 73 6f 20 77 69 74 68 6f 75 74 20 6c 6f 73 73 20  so without loss 
2270: 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20  of information. 
2280: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
2290: 20 69 66 20 74 68 65 20 73 74 72 69 6e 67 0a 2a   if the string.*
22a0: 2a 20 6c 6f 6f 6b 73 20 6c 69 6b 65 20 61 20 6e  * looks like a n
22b0: 75 6d 62 65 72 2c 20 63 6f 6e 76 65 72 74 20 69  umber, convert i
22c0: 74 20 69 6e 74 6f 20 61 20 6e 75 6d 62 65 72 2e  t into a number.
22d0: 20 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74    If it does not
22e0: 0a 2a 2a 20 6c 6f 6f 6b 20 6c 69 6b 65 20 61 20  .** look like a 
22f0: 6e 75 6d 62 65 72 2c 20 6c 65 61 76 65 20 69 74  number, leave it
2300: 20 61 6c 6f 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66   alone..**.** If
2310: 20 74 68 65 20 62 54 72 79 46 6f 72 49 6e 74 20   the bTryForInt 
2320: 66 6c 61 67 20 69 73 20 74 72 75 65 2c 20 74 68  flag is true, th
2330: 65 6e 20 65 78 74 72 61 20 65 66 66 6f 72 74 20  en extra effort 
2340: 69 73 20 6d 61 64 65 20 74 6f 20 67 69 76 65 0a  is made to give.
2350: 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65  ** an integer re
2360: 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20 20 53  presentation.  S
2370: 74 72 69 6e 67 73 20 74 68 61 74 20 6c 6f 6f 6b  trings that look
2380: 20 6c 69 6b 65 20 66 6c 6f 61 74 69 6e 67 20 70   like floating p
2390: 6f 69 6e 74 0a 2a 2a 20 76 61 6c 75 65 73 20 62  oint.** values b
23a0: 75 74 20 77 68 69 63 68 20 68 61 76 65 20 6e 6f  ut which have no
23b0: 20 66 72 61 63 74 69 6f 6e 61 6c 20 63 6f 6d 70   fractional comp
23c0: 6f 6e 65 6e 74 20 28 65 78 61 6d 70 6c 65 3a 20  onent (example: 
23d0: 27 34 38 2e 30 30 27 29 0a 2a 2a 20 77 69 6c 6c  '48.00').** will
23e0: 20 68 61 76 65 20 61 20 4d 45 4d 5f 49 6e 74 20   have a MEM_Int 
23f0: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 77  representation w
2400: 68 65 6e 20 62 54 72 79 46 6f 72 49 6e 74 20 69  hen bTryForInt i
2410: 73 20 74 72 75 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  s true..**.** If
2420: 20 62 54 72 79 46 6f 72 49 6e 74 20 69 73 20 66   bTryForInt is f
2430: 61 6c 73 65 2c 20 74 68 65 6e 20 69 66 20 74 68  alse, then if th
2440: 65 20 69 6e 70 75 74 20 73 74 72 69 6e 67 20 63  e input string c
2450: 6f 6e 74 61 69 6e 73 20 61 20 64 65 63 69 6d 61  ontains a decima
2460: 6c 0a 2a 2a 20 70 6f 69 6e 74 20 6f 72 20 65 78  l.** point or ex
2470: 70 6f 6e 65 6e 74 69 61 6c 20 6e 6f 74 61 74 69  ponential notati
2480: 6f 6e 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  on, the result i
2490: 73 20 6f 6e 6c 79 20 4d 45 4d 5f 52 65 61 6c 2c  s only MEM_Real,
24a0: 20 65 76 65 6e 0a 2a 2a 20 69 66 20 74 68 65 72   even.** if ther
24b0: 65 20 69 73 20 61 6e 20 65 78 61 63 74 20 69 6e  e is an exact in
24c0: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
24d0: 74 69 6f 6e 20 6f 66 20 74 68 65 20 71 75 61 6e  tion of the quan
24e0: 74 69 74 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  tity..*/.static 
24f0: 76 6f 69 64 20 61 70 70 6c 79 4e 75 6d 65 72 69  void applyNumeri
2500: 63 41 66 66 69 6e 69 74 79 28 4d 65 6d 20 2a 70  cAffinity(Mem *p
2510: 52 65 63 2c 20 69 6e 74 20 62 54 72 79 46 6f 72  Rec, int bTryFor
2520: 49 6e 74 29 7b 0a 20 20 64 6f 75 62 6c 65 20 72  Int){.  double r
2530: 56 61 6c 75 65 3b 0a 20 20 69 36 34 20 69 56 61  Value;.  i64 iVa
2540: 6c 75 65 3b 0a 20 20 75 38 20 65 6e 63 20 3d 20  lue;.  u8 enc = 
2550: 70 52 65 63 2d 3e 65 6e 63 3b 0a 20 20 61 73 73  pRec->enc;.  ass
2560: 65 72 74 28 20 28 70 52 65 63 2d 3e 66 6c 61 67  ert( (pRec->flag
2570: 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  s & (MEM_Str|MEM
2580: 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 3d  _Int|MEM_Real))=
2590: 3d 4d 45 4d 5f 53 74 72 20 29 3b 0a 20 20 69 66  =MEM_Str );.  if
25a0: 28 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70 52  ( sqlite3AtoF(pR
25b0: 65 63 2d 3e 7a 2c 20 26 72 56 61 6c 75 65 2c 20  ec->z, &rValue, 
25c0: 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 3d 3d 30  pRec->n, enc)==0
25d0: 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 69 66 28   ) return;.  if(
25e0: 20 30 3d 3d 73 71 6c 69 74 65 33 41 74 6f 69 36   0==sqlite3Atoi6
25f0: 34 28 70 52 65 63 2d 3e 7a 2c 20 26 69 56 61 6c  4(pRec->z, &iVal
2600: 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20 65 6e 63  ue, pRec->n, enc
2610: 29 20 29 7b 0a 20 20 20 20 70 52 65 63 2d 3e 75  ) ){.    pRec->u
2620: 2e 69 20 3d 20 69 56 61 6c 75 65 3b 0a 20 20 20  .i = iValue;.   
2630: 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20   pRec->flags |= 
2640: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 65 6c 73 65  MEM_Int;.  }else
2650: 7b 0a 20 20 20 20 70 52 65 63 2d 3e 75 2e 72 20  {.    pRec->u.r 
2660: 3d 20 72 56 61 6c 75 65 3b 0a 20 20 20 20 70 52  = rValue;.    pR
2670: 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d  ec->flags |= MEM
2680: 5f 52 65 61 6c 3b 0a 20 20 20 20 69 66 28 20 62  _Real;.    if( b
2690: 54 72 79 46 6f 72 49 6e 74 20 29 20 73 71 6c 69  TryForInt ) sqli
26a0: 74 65 33 56 64 62 65 49 6e 74 65 67 65 72 41 66  te3VdbeIntegerAf
26b0: 66 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20  finity(pRec);.  
26c0: 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 63 65  }.}../*.** Proce
26d0: 73 73 69 6e 67 20 69 73 20 64 65 74 65 72 6d 69  ssing is determi
26e0: 6e 65 20 62 79 20 74 68 65 20 61 66 66 69 6e 69  ne by the affini
26f0: 74 79 20 70 61 72 61 6d 65 74 65 72 3a 0a 2a 2a  ty parameter:.**
2700: 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 49  .** SQLITE_AFF_I
2710: 4e 54 45 47 45 52 3a 0a 2a 2a 20 53 51 4c 49 54  NTEGER:.** SQLIT
2720: 45 5f 41 46 46 5f 52 45 41 4c 3a 0a 2a 2a 20 53  E_AFF_REAL:.** S
2730: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
2740: 43 3a 0a 2a 2a 20 20 20 20 54 72 79 20 74 6f 20  C:.**    Try to 
2750: 63 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f 20  convert pRec to 
2760: 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65  an integer repre
2770: 73 65 6e 74 61 74 69 6f 6e 20 6f 72 20 61 20 0a  sentation or a .
2780: 2a 2a 20 20 20 20 66 6c 6f 61 74 69 6e 67 2d 70  **    floating-p
2790: 6f 69 6e 74 20 72 65 70 72 65 73 65 6e 74 61 74  oint representat
27a0: 69 6f 6e 20 69 66 20 61 6e 20 69 6e 74 65 67 65  ion if an intege
27b0: 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  r representation
27c0: 0a 2a 2a 20 20 20 20 69 73 20 6e 6f 74 20 70 6f  .**    is not po
27d0: 73 73 69 62 6c 65 2e 20 20 4e 6f 74 65 20 74 68  ssible.  Note th
27e0: 61 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 72  at the integer r
27f0: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 73  epresentation is
2800: 0a 2a 2a 20 20 20 20 61 6c 77 61 79 73 20 70 72  .**    always pr
2810: 65 66 65 72 72 65 64 2c 20 65 76 65 6e 20 69 66  eferred, even if
2820: 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 69 73   the affinity is
2830: 20 52 45 41 4c 2c 20 62 65 63 61 75 73 65 0a 2a   REAL, because.*
2840: 2a 20 20 20 20 61 6e 20 69 6e 74 65 67 65 72 20  *    an integer 
2850: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69  representation i
2860: 73 20 6d 6f 72 65 20 73 70 61 63 65 20 65 66 66  s more space eff
2870: 69 63 69 65 6e 74 20 6f 6e 20 64 69 73 6b 2e 0a  icient on disk..
2880: 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46  **.** SQLITE_AFF
2890: 5f 54 45 58 54 3a 0a 2a 2a 20 20 20 20 43 6f 6e  _TEXT:.**    Con
28a0: 76 65 72 74 20 70 52 65 63 20 74 6f 20 61 20 74  vert pRec to a t
28b0: 65 78 74 20 72 65 70 72 65 73 65 6e 74 61 74 69  ext representati
28c0: 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45  on..**.** SQLITE
28d0: 5f 41 46 46 5f 42 4c 4f 42 3a 0a 2a 2a 20 20 20  _AFF_BLOB:.**   
28e0: 20 4e 6f 2d 6f 70 2e 20 20 70 52 65 63 20 69 73   No-op.  pRec is
28f0: 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2f 0a 73   unchanged..*/.s
2900: 74 61 74 69 63 20 76 6f 69 64 20 61 70 70 6c 79  tatic void apply
2910: 41 66 66 69 6e 69 74 79 28 0a 20 20 4d 65 6d 20  Affinity(.  Mem 
2920: 2a 70 52 65 63 2c 20 20 20 20 20 20 20 20 20 20  *pRec,          
2930: 2f 2a 20 54 68 65 20 76 61 6c 75 65 20 74 6f 20  /* The value to 
2940: 61 70 70 6c 79 20 61 66 66 69 6e 69 74 79 20 74  apply affinity t
2950: 6f 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69  o */.  char affi
2960: 6e 69 74 79 2c 20 20 20 20 20 20 2f 2a 20 54 68  nity,      /* Th
2970: 65 20 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65  e affinity to be
2980: 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20 20 75 38   applied */.  u8
2990: 20 65 6e 63 20 20 20 20 20 20 20 20 20 20 20 20   enc            
29a0: 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20 74 65    /* Use this te
29b0: 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 29  xt encoding */.)
29c0: 7b 0a 20 20 69 66 28 20 61 66 66 69 6e 69 74 79  {.  if( affinity
29d0: 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  >=SQLITE_AFF_NUM
29e0: 45 52 49 43 20 29 7b 0a 20 20 20 20 61 73 73 65  ERIC ){.    asse
29f0: 72 74 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51  rt( affinity==SQ
2a00: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
2a10: 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53 51   || affinity==SQ
2a20: 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 0a 20 20  LITE_AFF_REAL.  
2a30: 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 61 66             || af
2a40: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
2a50: 46 46 5f 4e 55 4d 45 52 49 43 20 29 3b 0a 20 20  FF_NUMERIC );.  
2a60: 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61    if( (pRec->fla
2a70: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30  gs & MEM_Int)==0
2a80: 20 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49   ){ /*OPTIMIZATI
2a90: 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20  ON-IF-FALSE*/.  
2aa0: 20 20 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66      if( (pRec->f
2ab0: 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29  lags & MEM_Real)
2ac0: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 69  ==0 ){.        i
2ad0: 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26  f( pRec->flags &
2ae0: 20 4d 45 4d 5f 53 74 72 20 29 20 61 70 70 6c 79   MEM_Str ) apply
2af0: 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
2b00: 70 52 65 63 2c 31 29 3b 0a 20 20 20 20 20 20 7d  pRec,1);.      }
2b10: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71  else{.        sq
2b20: 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67 65 72  lite3VdbeInteger
2b30: 41 66 66 69 6e 69 74 79 28 70 52 65 63 29 3b 0a  Affinity(pRec);.
2b40: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
2b50: 7d 65 6c 73 65 20 69 66 28 20 61 66 66 69 6e 69  }else if( affini
2b60: 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54  ty==SQLITE_AFF_T
2b70: 45 58 54 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e  EXT ){.    /* On
2b80: 6c 79 20 61 74 74 65 6d 70 74 20 74 68 65 20 63  ly attempt the c
2b90: 6f 6e 76 65 72 73 69 6f 6e 20 74 6f 20 54 45 58  onversion to TEX
2ba0: 54 20 69 66 20 74 68 65 72 65 20 69 73 20 61 6e  T if there is an
2bb0: 20 69 6e 74 65 67 65 72 20 6f 72 20 72 65 61 6c   integer or real
2bc0: 0a 20 20 20 20 2a 2a 20 72 65 70 72 65 73 65 6e  .    ** represen
2bd0: 74 61 74 69 6f 6e 20 28 62 6c 6f 62 20 61 6e 64  tation (blob and
2be0: 20 4e 55 4c 4c 20 64 6f 20 6e 6f 74 20 67 65 74   NULL do not get
2bf0: 20 63 6f 6e 76 65 72 74 65 64 29 20 62 75 74 20   converted) but 
2c00: 6e 6f 20 73 74 72 69 6e 67 0a 20 20 20 20 2a 2a  no string.    **
2c10: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e   representation.
2c20: 20 20 49 74 20 77 6f 75 6c 64 20 62 65 20 68 61    It would be ha
2c30: 72 6d 6c 65 73 73 20 74 6f 20 72 65 70 65 61 74  rmless to repeat
2c40: 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20   the conversion 
2c50: 69 66 20 0a 20 20 20 20 2a 2a 20 74 68 65 72 65  if .    ** there
2c60: 20 69 73 20 61 6c 72 65 61 64 79 20 61 20 73 74   is already a st
2c70: 72 69 6e 67 20 72 65 70 2c 20 62 75 74 20 69 74  ring rep, but it
2c80: 20 69 73 20 70 6f 69 6e 74 6c 65 73 73 20 74 6f   is pointless to
2c90: 20 77 61 73 74 65 20 74 68 6f 73 65 0a 20 20 20   waste those.   
2ca0: 20 2a 2a 20 43 50 55 20 63 79 63 6c 65 73 2e 20   ** CPU cycles. 
2cb0: 2a 2f 0a 20 20 20 20 69 66 28 20 30 3d 3d 28 70  */.    if( 0==(p
2cc0: 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 53  Rec->flags&MEM_S
2cd0: 74 72 29 20 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a  tr) ){ /*OPTIMIZ
2ce0: 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f  ATION-IF-FALSE*/
2cf0: 0a 20 20 20 20 20 20 69 66 28 20 28 70 52 65 63  .      if( (pRec
2d00: 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 52 65 61  ->flags&(MEM_Rea
2d10: 6c 7c 4d 45 4d 5f 49 6e 74 29 29 20 29 7b 0a 20  l|MEM_Int)) ){. 
2d20: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
2d30: 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 70  beMemStringify(p
2d40: 52 65 63 2c 20 65 6e 63 2c 20 31 29 3b 0a 20 20  Rec, enc, 1);.  
2d50: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
2d60: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 3d 20 7e  pRec->flags &= ~
2d70: 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e  (MEM_Real|MEM_In
2d80: 74 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a  t);.  }.}../*.**
2d90: 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20   Try to convert 
2da0: 74 68 65 20 74 79 70 65 20 6f 66 20 61 20 66 75  the type of a fu
2db0: 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20  nction argument 
2dc0: 6f 72 20 61 20 72 65 73 75 6c 74 20 63 6f 6c 75  or a result colu
2dd0: 6d 6e 0a 2a 2a 20 69 6e 74 6f 20 61 20 6e 75 6d  mn.** into a num
2de0: 65 72 69 63 20 72 65 70 72 65 73 65 6e 74 61 74  eric representat
2df0: 69 6f 6e 2e 20 20 55 73 65 20 65 69 74 68 65 72  ion.  Use either
2e00: 20 49 4e 54 45 47 45 52 20 6f 72 20 52 45 41 4c   INTEGER or REAL
2e10: 20 77 68 69 63 68 65 76 65 72 0a 2a 2a 20 69 73   whichever.** is
2e20: 20 61 70 70 72 6f 70 72 69 61 74 65 2e 20 20 42   appropriate.  B
2e30: 75 74 20 6f 6e 6c 79 20 64 6f 20 74 68 65 20 63  ut only do the c
2e40: 6f 6e 76 65 72 73 69 6f 6e 20 69 66 20 69 74 20  onversion if it 
2e50: 69 73 20 70 6f 73 73 69 62 6c 65 20 77 69 74 68  is possible with
2e60: 6f 75 74 0a 2a 2a 20 6c 6f 73 73 20 6f 66 20 69  out.** loss of i
2e70: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 6e 64 20 72  nformation and r
2e80: 65 74 75 72 6e 20 74 68 65 20 72 65 76 69 73 65  eturn the revise
2e90: 64 20 74 79 70 65 20 6f 66 20 74 68 65 20 61 72  d type of the ar
2ea0: 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73  gument..*/.int s
2eb0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 6e 75 6d  qlite3_value_num
2ec0: 65 72 69 63 5f 74 79 70 65 28 73 71 6c 69 74 65  eric_type(sqlite
2ed0: 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b 0a  3_value *pVal){.
2ee0: 20 20 69 6e 74 20 65 54 79 70 65 20 3d 20 73 71    int eType = sq
2ef0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65  lite3_value_type
2f00: 28 70 56 61 6c 29 3b 0a 20 20 69 66 28 20 65 54  (pVal);.  if( eT
2f10: 79 70 65 3d 3d 53 51 4c 49 54 45 5f 54 45 58 54  ype==SQLITE_TEXT
2f20: 20 29 7b 0a 20 20 20 20 4d 65 6d 20 2a 70 4d 65   ){.    Mem *pMe
2f30: 6d 20 3d 20 28 4d 65 6d 2a 29 70 56 61 6c 3b 0a  m = (Mem*)pVal;.
2f40: 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63      applyNumeric
2f50: 41 66 66 69 6e 69 74 79 28 70 4d 65 6d 2c 20 30  Affinity(pMem, 0
2f60: 29 3b 0a 20 20 20 20 65 54 79 70 65 20 3d 20 73  );.    eType = s
2f70: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70  qlite3_value_typ
2f80: 65 28 70 56 61 6c 29 3b 0a 20 20 7d 0a 20 20 72  e(pVal);.  }.  r
2f90: 65 74 75 72 6e 20 65 54 79 70 65 3b 0a 7d 0a 0a  eturn eType;.}..
2fa0: 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74 65 64 20 76  /*.** Exported v
2fb0: 65 72 73 69 6f 6e 20 6f 66 20 61 70 70 6c 79 41  ersion of applyA
2fc0: 66 66 69 6e 69 74 79 28 29 2e 20 54 68 69 73 20  ffinity(). This 
2fd0: 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e 20 73 71 6c  one works on sql
2fe0: 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 0a 2a 2a  ite3_value*, .**
2ff0: 20 6e 6f 74 20 74 68 65 20 69 6e 74 65 72 6e 61   not the interna
3000: 6c 20 4d 65 6d 2a 20 74 79 70 65 2e 0a 2a 2f 0a  l Mem* type..*/.
3010: 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
3020: 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a  eApplyAffinity(.
3030: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
3040: 2a 70 56 61 6c 2c 20 0a 20 20 75 38 20 61 66 66  *pVal, .  u8 aff
3050: 69 6e 69 74 79 2c 20 0a 20 20 75 38 20 65 6e 63  inity, .  u8 enc
3060: 0a 29 7b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e  .){.  applyAffin
3070: 69 74 79 28 28 4d 65 6d 20 2a 29 70 56 61 6c 2c  ity((Mem *)pVal,
3080: 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 29 3b   affinity, enc);
3090: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 70 4d 65 6d 20 63  .}../*.** pMem c
30a0: 75 72 72 65 6e 74 6c 79 20 6f 6e 6c 79 20 68 6f  urrently only ho
30b0: 6c 64 73 20 61 20 73 74 72 69 6e 67 20 74 79 70  lds a string typ
30c0: 65 20 28 6f 72 20 6d 61 79 62 65 20 61 20 42 4c  e (or maybe a BL
30d0: 4f 42 20 74 68 61 74 20 77 65 20 63 61 6e 0a 2a  OB that we can.*
30e0: 2a 20 69 6e 74 65 72 70 72 65 74 20 61 73 20 61  * interpret as a
30f0: 20 73 74 72 69 6e 67 20 69 66 20 77 65 20 77 61   string if we wa
3100: 6e 74 20 74 6f 29 2e 20 20 43 6f 6d 70 75 74 65  nt to).  Compute
3110: 20 69 74 73 20 63 6f 72 72 65 73 70 6f 6e 64 69   its correspondi
3120: 6e 67 0a 2a 2a 20 6e 75 6d 65 72 69 63 20 74 79  ng.** numeric ty
3130: 70 65 2c 20 69 66 20 68 61 73 20 6f 6e 65 2e 20  pe, if has one. 
3140: 20 53 65 74 20 74 68 65 20 70 4d 65 6d 2d 3e 75   Set the pMem->u
3150: 2e 72 20 61 6e 64 20 70 4d 65 6d 2d 3e 75 2e 69  .r and pMem->u.i
3160: 20 66 69 65 6c 64 73 0a 2a 2a 20 61 63 63 6f 72   fields.** accor
3170: 64 69 6e 67 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69  dingly..*/.stati
3180: 63 20 75 31 36 20 53 51 4c 49 54 45 5f 4e 4f 49  c u16 SQLITE_NOI
3190: 4e 4c 49 4e 45 20 63 6f 6d 70 75 74 65 4e 75 6d  NLINE computeNum
31a0: 65 72 69 63 54 79 70 65 28 4d 65 6d 20 2a 70 4d  ericType(Mem *pM
31b0: 65 6d 29 7b 0a 20 20 61 73 73 65 72 74 28 20 28  em){.  assert( (
31c0: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pMem->flags & (M
31d0: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29  EM_Int|MEM_Real)
31e0: 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  )==0 );.  assert
31f0: 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  ( (pMem->flags &
3200: 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c   (MEM_Str|MEM_Bl
3210: 6f 62 29 29 21 3d 30 20 29 3b 0a 20 20 69 66 28  ob))!=0 );.  if(
3220: 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70 4d 65   sqlite3AtoF(pMe
3230: 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d 3e 75 2e 72  m->z, &pMem->u.r
3240: 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d  , pMem->n, pMem-
3250: 3e 65 6e 63 29 3d 3d 30 20 29 7b 0a 20 20 20 20  >enc)==0 ){.    
3260: 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20  return 0;.  }.  
3270: 69 66 28 20 73 71 6c 69 74 65 33 41 74 6f 69 36  if( sqlite3Atoi6
3280: 34 28 70 4d 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d  4(pMem->z, &pMem
3290: 2d 3e 75 2e 69 2c 20 70 4d 65 6d 2d 3e 6e 2c 20  ->u.i, pMem->n, 
32a0: 70 4d 65 6d 2d 3e 65 6e 63 29 3d 3d 30 20 29 7b  pMem->enc)==0 ){
32b0: 0a 20 20 20 20 72 65 74 75 72 6e 20 4d 45 4d 5f  .    return MEM_
32c0: 49 6e 74 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  Int;.  }.  retur
32d0: 6e 20 4d 45 4d 5f 52 65 61 6c 3b 0a 7d 0a 0a 2f  n MEM_Real;.}../
32e0: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20  *.** Return the 
32f0: 6e 75 6d 65 72 69 63 20 74 79 70 65 20 66 6f 72  numeric type for
3300: 20 70 4d 65 6d 2c 20 65 69 74 68 65 72 20 4d 45   pMem, either ME
3310: 4d 5f 49 6e 74 20 6f 72 20 4d 45 4d 5f 52 65 61  M_Int or MEM_Rea
3320: 6c 20 6f 72 20 62 6f 74 68 20 6f 72 0a 2a 2a 20  l or both or.** 
3330: 6e 6f 6e 65 2e 20 20 0a 2a 2a 0a 2a 2a 20 55 6e  none.  .**.** Un
3340: 6c 69 6b 65 20 61 70 70 6c 79 4e 75 6d 65 72 69  like applyNumeri
3350: 63 41 66 66 69 6e 69 74 79 28 29 2c 20 74 68 69  cAffinity(), thi
3360: 73 20 72 6f 75 74 69 6e 65 20 64 6f 65 73 20 6e  s routine does n
3370: 6f 74 20 6d 6f 64 69 66 79 20 70 4d 65 6d 2d 3e  ot modify pMem->
3380: 66 6c 61 67 73 2e 0a 2a 2a 20 42 75 74 20 69 74  flags..** But it
3390: 20 64 6f 65 73 20 73 65 74 20 70 4d 65 6d 2d 3e   does set pMem->
33a0: 75 2e 72 20 61 6e 64 20 70 4d 65 6d 2d 3e 75 2e  u.r and pMem->u.
33b0: 69 20 61 70 70 72 6f 70 72 69 61 74 65 6c 79 2e  i appropriately.
33c0: 0a 2a 2f 0a 73 74 61 74 69 63 20 75 31 36 20 6e  .*/.static u16 n
33d0: 75 6d 65 72 69 63 54 79 70 65 28 4d 65 6d 20 2a  umericType(Mem *
33e0: 70 4d 65 6d 29 7b 0a 20 20 69 66 28 20 70 4d 65  pMem){.  if( pMe
33f0: 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  m->flags & (MEM_
3400: 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 20 29 7b  Int|MEM_Real) ){
3410: 0a 20 20 20 20 72 65 74 75 72 6e 20 70 4d 65 6d  .    return pMem
3420: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49  ->flags & (MEM_I
3430: 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20 20  nt|MEM_Real);.  
3440: 7d 0a 20 20 69 66 28 20 70 4d 65 6d 2d 3e 66 6c  }.  if( pMem->fl
3450: 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d  ags & (MEM_Str|M
3460: 45 4d 5f 42 6c 6f 62 29 20 29 7b 0a 20 20 20 20  EM_Blob) ){.    
3470: 72 65 74 75 72 6e 20 63 6f 6d 70 75 74 65 4e 75  return computeNu
3480: 6d 65 72 69 63 54 79 70 65 28 70 4d 65 6d 29 3b  mericType(pMem);
3490: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b  .  }.  return 0;
34a0: 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .}..#ifdef SQLIT
34b0: 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 57 72  E_DEBUG./*.** Wr
34c0: 69 74 65 20 61 20 6e 69 63 65 20 73 74 72 69 6e  ite a nice strin
34d0: 67 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  g representation
34e0: 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 73   of the contents
34f0: 20 6f 66 20 63 65 6c 6c 20 70 4d 65 6d 0a 2a 2a   of cell pMem.**
3500: 20 69 6e 74 6f 20 62 75 66 66 65 72 20 7a 42 75   into buffer zBu
3510: 66 2c 20 6c 65 6e 67 74 68 20 6e 42 75 66 2e 0a  f, length nBuf..
3520: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  */.void sqlite3V
3530: 64 62 65 4d 65 6d 50 72 65 74 74 79 50 72 69 6e  dbeMemPrettyPrin
3540: 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20 63 68 61  t(Mem *pMem, cha
3550: 72 20 2a 7a 42 75 66 29 7b 0a 20 20 63 68 61 72  r *zBuf){.  char
3560: 20 2a 7a 43 73 72 20 3d 20 7a 42 75 66 3b 0a 20   *zCsr = zBuf;. 
3570: 20 69 6e 74 20 66 20 3d 20 70 4d 65 6d 2d 3e 66   int f = pMem->f
3580: 6c 61 67 73 3b 0a 0a 20 20 73 74 61 74 69 63 20  lags;..  static 
3590: 63 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73  const char *cons
35a0: 74 20 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b  t encnames[] = {
35b0: 22 28 58 29 22 2c 20 22 28 38 29 22 2c 20 22 28  "(X)", "(8)", "(
35c0: 31 36 4c 45 29 22 2c 20 22 28 31 36 42 45 29 22  16LE)", "(16BE)"
35d0: 7d 3b 0a 0a 20 20 69 66 28 20 66 26 4d 45 4d 5f  };..  if( f&MEM_
35e0: 42 6c 6f 62 20 29 7b 0a 20 20 20 20 69 6e 74 20  Blob ){.    int 
35f0: 69 3b 0a 20 20 20 20 63 68 61 72 20 63 3b 0a 20  i;.    char c;. 
3600: 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44     if( f & MEM_D
3610: 79 6e 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20  yn ){.      c = 
3620: 27 7a 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  'z';.      asser
3630: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61  t( (f & (MEM_Sta
3640: 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d  tic|MEM_Ephem))=
3650: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  =0 );.    }else 
3660: 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 61 74  if( f & MEM_Stat
3670: 69 63 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20  ic ){.      c = 
3680: 27 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  't';.      asser
3690: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e  t( (f & (MEM_Dyn
36a0: 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20  |MEM_Ephem))==0 
36b0: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
36c0: 20 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29   f & MEM_Ephem )
36d0: 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 65 27 3b  {.      c = 'e';
36e0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
36f0: 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c  f & (MEM_Static|
3700: 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a  MEM_Dyn))==0 );.
3710: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
3720: 20 63 20 3d 20 27 73 27 3b 0a 20 20 20 20 7d 0a   c = 's';.    }.
3730: 20 20 20 20 2a 28 7a 43 73 72 2b 2b 29 20 3d 20      *(zCsr++) = 
3740: 63 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  c;.    sqlite3_s
3750: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
3760: 72 2c 20 22 25 64 5b 22 2c 20 70 4d 65 6d 2d 3e  r, "%d[", pMem->
3770: 6e 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20  n);.    zCsr += 
3780: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
3790: 7a 43 73 72 29 3b 0a 20 20 20 20 66 6f 72 28 69  zCsr);.    for(i
37a0: 3d 30 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d  =0; i<16 && i<pM
37b0: 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20  em->n; i++){.   
37c0: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
37d0: 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22  ntf(100, zCsr, "
37e0: 25 30 32 58 22 2c 20 28 28 69 6e 74 29 70 4d 65  %02X", ((int)pMe
37f0: 6d 2d 3e 7a 5b 69 5d 20 26 20 30 78 46 46 29 29  m->z[i] & 0xFF))
3800: 3b 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20  ;.      zCsr += 
3810: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
3820: 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20  zCsr);.    }.   
3830: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26   for(i=0; i<16 &
3840: 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b  & i<pMem->n; i++
3850: 29 7b 0a 20 20 20 20 20 20 63 68 61 72 20 7a 20  ){.      char z 
3860: 3d 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20  = pMem->z[i];.  
3870: 20 20 20 20 69 66 28 20 7a 3c 33 32 20 7c 7c 20      if( z<32 || 
3880: 7a 3e 31 32 36 20 29 20 2a 7a 43 73 72 2b 2b 20  z>126 ) *zCsr++ 
3890: 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20 65 6c 73  = '.';.      els
38a0: 65 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20  e *zCsr++ = z;. 
38b0: 20 20 20 7d 0a 20 20 20 20 2a 28 7a 43 73 72 2b     }.    *(zCsr+
38c0: 2b 29 20 3d 20 27 5d 27 3b 0a 20 20 20 20 69 66  +) = ']';.    if
38d0: 28 20 66 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29  ( f & MEM_Zero )
38e0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
38f0: 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43  snprintf(100, zC
3900: 73 72 2c 22 2b 25 64 7a 22 2c 70 4d 65 6d 2d 3e  sr,"+%dz",pMem->
3910: 75 2e 6e 5a 65 72 6f 29 3b 0a 20 20 20 20 20 20  u.nZero);.      
3920: 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53  zCsr += sqlite3S
3930: 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20  trlen30(zCsr);. 
3940: 20 20 20 7d 0a 20 20 20 20 2a 7a 43 73 72 20 3d     }.    *zCsr =
3950: 20 27 5c 30 27 3b 0a 20 20 7d 65 6c 73 65 20 69   '\0';.  }else i
3960: 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 72 20 29  f( f & MEM_Str )
3970: 7b 0a 20 20 20 20 69 6e 74 20 6a 2c 20 6b 3b 0a  {.    int j, k;.
3980: 20 20 20 20 7a 42 75 66 5b 30 5d 20 3d 20 27 20      zBuf[0] = ' 
3990: 27 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d  ';.    if( f & M
39a0: 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20  EM_Dyn ){.      
39b0: 7a 42 75 66 5b 31 5d 20 3d 20 27 7a 27 3b 0a 20  zBuf[1] = 'z';. 
39c0: 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20       assert( (f 
39d0: 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45  & (MEM_Static|ME
39e0: 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a  M_Ephem))==0 );.
39f0: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20      }else if( f 
3a00: 26 20 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a  & MEM_Static ){.
3a10: 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20        zBuf[1] = 
3a20: 27 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  't';.      asser
3a30: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e  t( (f & (MEM_Dyn
3a40: 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20  |MEM_Ephem))==0 
3a50: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  );.    }else if(
3a60: 20 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29   f & MEM_Ephem )
3a70: 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20  {.      zBuf[1] 
3a80: 3d 20 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73  = 'e';.      ass
3a90: 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53  ert( (f & (MEM_S
3aa0: 74 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d  tatic|MEM_Dyn))=
3ab0: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  =0 );.    }else{
3ac0: 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d  .      zBuf[1] =
3ad0: 20 27 73 27 3b 0a 20 20 20 20 7d 0a 20 20 20 20   's';.    }.    
3ae0: 6b 20 3d 20 32 3b 0a 20 20 20 20 73 71 6c 69 74  k = 2;.    sqlit
3af0: 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c  e3_snprintf(100,
3b00: 20 26 7a 42 75 66 5b 6b 5d 2c 20 22 25 64 22 2c   &zBuf[k], "%d",
3b10: 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 6b   pMem->n);.    k
3b20: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
3b30: 6e 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20  n30(&zBuf[k]);. 
3b40: 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27     zBuf[k++] = '
3b50: 5b 27 3b 0a 20 20 20 20 66 6f 72 28 6a 3d 30 3b  [';.    for(j=0;
3b60: 20 6a 3c 31 35 20 26 26 20 6a 3c 70 4d 65 6d 2d   j<15 && j<pMem-
3b70: 3e 6e 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20  >n; j++){.      
3b80: 75 38 20 63 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a  u8 c = pMem->z[j
3b90: 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 63 3e 3d  ];.      if( c>=
3ba0: 30 78 32 30 20 26 26 20 63 3c 30 78 37 66 20 29  0x20 && c<0x7f )
3bb0: 7b 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b  {.        zBuf[k
3bc0: 2b 2b 5d 20 3d 20 63 3b 0a 20 20 20 20 20 20 7d  ++] = c;.      }
3bd0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 42  else{.        zB
3be0: 75 66 5b 6b 2b 2b 5d 20 3d 20 27 2e 27 3b 0a 20  uf[k++] = '.';. 
3bf0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
3c00: 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5d 27   zBuf[k++] = ']'
3c10: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ;.    sqlite3_sn
3c20: 70 72 69 6e 74 66 28 31 30 30 2c 26 7a 42 75 66  printf(100,&zBuf
3c30: 5b 6b 5d 2c 20 65 6e 63 6e 61 6d 65 73 5b 70 4d  [k], encnames[pM
3c40: 65 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20 20 20 6b  em->enc]);.    k
3c50: 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65   += sqlite3Strle
3c60: 6e 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20  n30(&zBuf[k]);. 
3c70: 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 30     zBuf[k++] = 0
3c80: 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a  ;.  }.}.#endif..
3c90: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
3ca0: 42 55 47 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20  BUG./*.** Print 
3cb0: 74 68 65 20 76 61 6c 75 65 20 6f 66 20 61 20 72  the value of a r
3cc0: 65 67 69 73 74 65 72 20 66 6f 72 20 74 72 61 63  egister for trac
3cd0: 69 6e 67 20 70 75 72 70 6f 73 65 73 3a 0a 2a 2f  ing purposes:.*/
3ce0: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 6d 65 6d  .static void mem
3cf0: 54 72 61 63 65 50 72 69 6e 74 28 4d 65 6d 20 2a  TracePrint(Mem *
3d00: 70 29 7b 0a 20 20 69 66 28 20 70 2d 3e 66 6c 61  p){.  if( p->fla
3d10: 67 73 20 26 20 4d 45 4d 5f 55 6e 64 65 66 69 6e  gs & MEM_Undefin
3d20: 65 64 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66  ed ){.    printf
3d30: 28 22 20 75 6e 64 65 66 69 6e 65 64 22 29 3b 0a  (" undefined");.
3d40: 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66    }else if( p->f
3d50: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
3d60: 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 70 2d  ){.    printf(p-
3d70: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72  >flags & MEM_Zer
3d80: 6f 20 3f 20 22 20 4e 55 4c 4c 2d 6e 6f 63 68 6e  o ? " NULL-nochn
3d90: 67 22 20 3a 20 22 20 4e 55 4c 4c 22 29 3b 0a 20  g" : " NULL");. 
3da0: 20 7d 65 6c 73 65 20 69 66 28 20 28 70 2d 3e 66   }else if( (p->f
3db0: 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c  lags & (MEM_Int|
3dc0: 4d 45 4d 5f 53 74 72 29 29 3d 3d 28 4d 45 4d 5f  MEM_Str))==(MEM_
3dd0: 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 20 29 7b 0a  Int|MEM_Str) ){.
3de0: 20 20 20 20 70 72 69 6e 74 66 28 22 20 73 69 3a      printf(" si:
3df0: 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a  %lld", p->u.i);.
3e00: 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66    }else if( p->f
3e10: 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
3e20: 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 69  {.    printf(" i
3e30: 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29 3b  :%lld", p->u.i);
3e40: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
3e50: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
3e60: 49 4e 54 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  INT.  }else if( 
3e70: 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  p->flags & MEM_R
3e80: 65 61 6c 20 29 7b 0a 20 20 20 20 70 72 69 6e 74  eal ){.    print
3e90: 66 28 22 20 72 3a 25 67 22 2c 20 70 2d 3e 75 2e  f(" r:%g", p->u.
3ea0: 72 29 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 65 6c  r);.#endif.  }el
3eb0: 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20  se if( p->flags 
3ec0: 26 20 4d 45 4d 5f 52 6f 77 53 65 74 20 29 7b 0a  & MEM_RowSet ){.
3ed0: 20 20 20 20 70 72 69 6e 74 66 28 22 20 28 72 6f      printf(" (ro
3ee0: 77 73 65 74 29 22 29 3b 0a 20 20 7d 65 6c 73 65  wset)");.  }else
3ef0: 7b 0a 20 20 20 20 63 68 61 72 20 7a 42 75 66 5b  {.    char zBuf[
3f00: 32 30 30 5d 3b 0a 20 20 20 20 73 71 6c 69 74 65  200];.    sqlite
3f10: 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79 50 72  3VdbeMemPrettyPr
3f20: 69 6e 74 28 70 2c 20 7a 42 75 66 29 3b 0a 20 20  int(p, zBuf);.  
3f30: 20 20 70 72 69 6e 74 66 28 22 20 25 73 22 2c 20    printf(" %s", 
3f40: 7a 42 75 66 29 3b 0a 20 20 7d 0a 20 20 69 66 28  zBuf);.  }.  if(
3f50: 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f   p->flags & MEM_
3f60: 53 75 62 74 79 70 65 20 29 20 70 72 69 6e 74 66  Subtype ) printf
3f70: 28 22 20 73 75 62 74 79 70 65 3d 30 78 25 30 32  (" subtype=0x%02
3f80: 78 22 2c 20 70 2d 3e 65 53 75 62 74 79 70 65 29  x", p->eSubtype)
3f90: 3b 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64 20  ;.}.static void 
3fa0: 72 65 67 69 73 74 65 72 54 72 61 63 65 28 69 6e  registerTrace(in
3fb0: 74 20 69 52 65 67 2c 20 4d 65 6d 20 2a 70 29 7b  t iReg, Mem *p){
3fc0: 0a 20 20 70 72 69 6e 74 66 28 22 52 45 47 5b 25  .  printf("REG[%
3fd0: 64 5d 20 3d 20 22 2c 20 69 52 65 67 29 3b 0a 20  d] = ", iReg);. 
3fe0: 20 6d 65 6d 54 72 61 63 65 50 72 69 6e 74 28 70   memTracePrint(p
3ff0: 29 3b 0a 20 20 70 72 69 6e 74 66 28 22 5c 6e 22  );.  printf("\n"
4000: 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
4010: 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e  CheckMemInvarian
4020: 74 73 28 70 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a  ts(p);.}.#endif.
4030: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
4040: 45 42 55 47 0a 23 20 20 64 65 66 69 6e 65 20 52  EBUG.#  define R
4050: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 52 2c  EGISTER_TRACE(R,
4060: 4d 29 20 69 66 28 64 62 2d 3e 66 6c 61 67 73 26  M) if(db->flags&
4070: 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65  SQLITE_VdbeTrace
4080: 29 72 65 67 69 73 74 65 72 54 72 61 63 65 28 52  )registerTrace(R
4090: 2c 4d 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66  ,M).#else.#  def
40a0: 69 6e 65 20 52 45 47 49 53 54 45 52 5f 54 52 41  ine REGISTER_TRA
40b0: 43 45 28 52 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a  CE(R,M).#endif..
40c0: 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f  .#ifdef VDBE_PRO
40d0: 46 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a 20 68 77 74  FILE../* .** hwt
40e0: 69 6d 65 2e 68 20 63 6f 6e 74 61 69 6e 73 20 69  ime.h contains i
40f0: 6e 6c 69 6e 65 20 61 73 73 65 6d 62 6c 65 72 20  nline assembler 
4100: 63 6f 64 65 20 66 6f 72 20 69 6d 70 6c 65 6d 65  code for impleme
4110: 6e 74 69 6e 67 20 0a 2a 2a 20 68 69 67 68 2d 70  nting .** high-p
4120: 65 72 66 6f 72 6d 61 6e 63 65 20 74 69 6d 69 6e  erformance timin
4130: 67 20 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a 23  g routines..*/.#
4140: 69 6e 63 6c 75 64 65 20 22 68 77 74 69 6d 65 2e  include "hwtime.
4150: 68 22 0a 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  h"..#endif..#ifn
4160: 64 65 66 20 4e 44 45 42 55 47 0a 2f 2a 0a 2a 2a  def NDEBUG./*.**
4170: 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69   This function i
4180: 73 20 6f 6e 6c 79 20 63 61 6c 6c 65 64 20 66 72  s only called fr
4190: 6f 6d 20 77 69 74 68 69 6e 20 61 6e 20 61 73 73  om within an ass
41a0: 65 72 74 28 29 20 65 78 70 72 65 73 73 69 6f 6e  ert() expression
41b0: 2e 20 49 74 0a 2a 2a 20 63 68 65 63 6b 73 20 74  . It.** checks t
41c0: 68 61 74 20 74 68 65 20 73 71 6c 69 74 65 33 2e  hat the sqlite3.
41d0: 6e 54 72 61 6e 73 61 63 74 69 6f 6e 20 76 61 72  nTransaction var
41e0: 69 61 62 6c 65 20 69 73 20 63 6f 72 72 65 63 74  iable is correct
41f0: 6c 79 20 73 65 74 20 74 6f 0a 2a 2a 20 74 68 65  ly set to.** the
4200: 20 6e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74   number of non-t
4210: 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70  ransaction savep
4220: 6f 69 6e 74 73 20 63 75 72 72 65 6e 74 6c 79 20  oints currently 
4230: 69 6e 20 74 68 65 20 0a 2a 2a 20 6c 69 6e 6b 65  in the .** linke
4240: 64 20 6c 69 73 74 20 73 74 61 72 74 69 6e 67 20  d list starting 
4250: 61 74 20 73 71 6c 69 74 65 33 2e 70 53 61 76 65  at sqlite3.pSave
4260: 70 6f 69 6e 74 2e 0a 2a 2a 20 0a 2a 2a 20 55 73  point..** .** Us
4270: 61 67 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61  age:.**.**     a
4280: 73 73 65 72 74 28 20 63 68 65 63 6b 53 61 76 65  ssert( checkSave
4290: 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29 20 29  pointCount(db) )
42a0: 3b 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ;.*/.static int 
42b0: 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f  checkSavepointCo
42c0: 75 6e 74 28 73 71 6c 69 74 65 33 20 2a 64 62 29  unt(sqlite3 *db)
42d0: 7b 0a 20 20 69 6e 74 20 6e 20 3d 20 30 3b 0a 20  {.  int n = 0;. 
42e0: 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 3b 0a 20   Savepoint *p;. 
42f0: 20 66 6f 72 28 70 3d 64 62 2d 3e 70 53 61 76 65   for(p=db->pSave
4300: 70 6f 69 6e 74 3b 20 70 3b 20 70 3d 70 2d 3e 70  point; p; p=p->p
4310: 4e 65 78 74 29 20 6e 2b 2b 3b 0a 20 20 61 73 73  Next) n++;.  ass
4320: 65 72 74 28 20 6e 3d 3d 28 64 62 2d 3e 6e 53 61  ert( n==(db->nSa
4330: 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 69 73  vepoint + db->is
4340: 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70  TransactionSavep
4350: 6f 69 6e 74 29 20 29 3b 0a 20 20 72 65 74 75 72  oint) );.  retur
4360: 6e 20 31 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  n 1;.}.#endif../
4370: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20  *.** Return the 
4380: 72 65 67 69 73 74 65 72 20 6f 66 20 70 4f 70 2d  register of pOp-
4390: 3e 70 32 20 61 66 74 65 72 20 66 69 72 73 74 20  >p2 after first 
43a0: 70 72 65 70 61 72 69 6e 67 20 69 74 20 74 6f 20  preparing it to 
43b0: 62 65 0a 2a 2a 20 6f 76 65 72 77 72 69 74 74 65  be.** overwritte
43c0: 6e 20 77 69 74 68 20 61 6e 20 69 6e 74 65 67 65  n with an intege
43d0: 72 20 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74  r value..*/.stat
43e0: 69 63 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49  ic SQLITE_NOINLI
43f0: 4e 45 20 4d 65 6d 20 2a 6f 75 74 32 50 72 65 72  NE Mem *out2Prer
4400: 65 6c 65 61 73 65 57 69 74 68 43 6c 65 61 72 28  eleaseWithClear(
4410: 4d 65 6d 20 2a 70 4f 75 74 29 7b 0a 20 20 73 71  Mem *pOut){.  sq
4420: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
4430: 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 70 4f 75  ull(pOut);.  pOu
4440: 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  t->flags = MEM_I
4450: 6e 74 3b 0a 20 20 72 65 74 75 72 6e 20 70 4f 75  nt;.  return pOu
4460: 74 3b 0a 7d 0a 73 74 61 74 69 63 20 4d 65 6d 20  t;.}.static Mem 
4470: 2a 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28  *out2Prerelease(
4480: 56 64 62 65 20 2a 70 2c 20 56 64 62 65 4f 70 20  Vdbe *p, VdbeOp 
4490: 2a 70 4f 70 29 7b 0a 20 20 4d 65 6d 20 2a 70 4f  *pOp){.  Mem *pO
44a0: 75 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  ut;.  assert( pO
44b0: 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 61 73 73  p->p2>0 );.  ass
44c0: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70  ert( pOp->p2<=(p
44d0: 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
44e0: 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74  ursor) );.  pOut
44f0: 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d   = &p->aMem[pOp-
4500: 3e 70 32 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  >p2];.  memAbout
4510: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74  ToChange(p, pOut
4520: 29 3b 0a 20 20 69 66 28 20 56 64 62 65 4d 65 6d  );.  if( VdbeMem
4530: 44 79 6e 61 6d 69 63 28 70 4f 75 74 29 20 29 7b  Dynamic(pOut) ){
4540: 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d   /*OPTIMIZATION-
4550: 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20 72  IF-FALSE*/.    r
4560: 65 74 75 72 6e 20 6f 75 74 32 50 72 65 72 65 6c  eturn out2Prerel
4570: 65 61 73 65 57 69 74 68 43 6c 65 61 72 28 70 4f  easeWithClear(pO
4580: 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ut);.  }else{.  
4590: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
45a0: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 72 65 74  MEM_Int;.    ret
45b0: 75 72 6e 20 70 4f 75 74 3b 0a 20 20 7d 0a 7d 0a  urn pOut;.  }.}.
45c0: 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20  ../*.** Execute 
45d0: 61 73 20 6d 75 63 68 20 6f 66 20 61 20 56 44 42  as much of a VDB
45e0: 45 20 70 72 6f 67 72 61 6d 20 61 73 20 77 65 20  E program as we 
45f0: 63 61 6e 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20  can..** This is 
4600: 74 68 65 20 63 6f 72 65 20 6f 66 20 73 71 6c 69  the core of sqli
4610: 74 65 33 5f 73 74 65 70 28 29 2e 20 20 0a 2a 2f  te3_step().  .*/
4620: 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65  .int sqlite3Vdbe
4630: 45 78 65 63 28 0a 20 20 56 64 62 65 20 2a 70 20  Exec(.  Vdbe *p 
4640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4650: 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 2a     /* The VDBE *
4660: 2f 0a 29 7b 0a 20 20 4f 70 20 2a 61 4f 70 20 3d  /.){.  Op *aOp =
4670: 20 70 2d 3e 61 4f 70 3b 20 20 20 20 20 20 20 20   p->aOp;        
4680: 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e    /* Copy of p->
4690: 61 4f 70 20 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70  aOp */.  Op *pOp
46a0: 20 3d 20 61 4f 70 3b 20 20 20 20 20 20 20 20 20   = aOp;         
46b0: 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 6f      /* Current o
46c0: 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 20  peration */.#if 
46d0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
46e0: 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64  EBUG) || defined
46f0: 28 56 44 42 45 5f 50 52 4f 46 49 4c 45 29 0a 20  (VDBE_PROFILE). 
4700: 20 4f 70 20 2a 70 4f 72 69 67 4f 70 3b 20 20 20   Op *pOrigOp;   
4710: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
4720: 61 6c 75 65 20 6f 66 20 70 4f 70 20 61 74 20 74  alue of pOp at t
4730: 68 65 20 74 6f 70 20 6f 66 20 74 68 65 20 6c 6f  he top of the lo
4740: 6f 70 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66  op */.#endif.#if
4750: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
4760: 0a 20 20 69 6e 74 20 6e 45 78 74 72 61 44 65 6c  .  int nExtraDel
4770: 65 74 65 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a  ete = 0;      /*
4780: 20 56 65 72 69 66 69 65 73 20 46 4f 52 44 45 4c   Verifies FORDEL
4790: 45 54 45 20 61 6e 64 20 41 55 58 44 45 4c 45 54  ETE and AUXDELET
47a0: 45 20 66 6c 61 67 73 20 2a 2f 0a 23 65 6e 64 69  E flags */.#endi
47b0: 66 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c  f.  int rc = SQL
47c0: 49 54 45 5f 4f 4b 3b 20 20 20 20 20 20 20 20 2f  ITE_OK;        /
47d0: 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72  * Value to retur
47e0: 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a  n */.  sqlite3 *
47f0: 64 62 20 3d 20 70 2d 3e 64 62 3b 20 20 20 20 20  db = p->db;     
4800: 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73    /* The databas
4810: 65 20 2a 2f 0a 20 20 75 38 20 72 65 73 65 74 53  e */.  u8 resetS
4820: 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 30  chemaOnFault = 0
4830: 3b 20 2f 2a 20 52 65 73 65 74 20 73 63 68 65 6d  ; /* Reset schem
4840: 61 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72  a after an error
4850: 20 69 66 20 70 6f 73 69 74 69 76 65 20 2a 2f 0a   if positive */.
4860: 20 20 75 38 20 65 6e 63 6f 64 69 6e 67 20 3d 20    u8 encoding = 
4870: 45 4e 43 28 64 62 29 3b 20 20 20 20 20 2f 2a 20  ENC(db);     /* 
4880: 54 68 65 20 64 61 74 61 62 61 73 65 20 65 6e 63  The database enc
4890: 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69  oding */.  int i
48a0: 43 6f 6d 70 61 72 65 20 3d 20 30 3b 20 20 20 20  Compare = 0;    
48b0: 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20        /* Result 
48c0: 6f 66 20 6c 61 73 74 20 63 6f 6d 70 61 72 69 73  of last comparis
48d0: 6f 6e 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  on */.  unsigned
48e0: 20 6e 56 6d 53 74 65 70 20 3d 20 30 3b 20 20 20   nVmStep = 0;   
48f0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
4900: 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20  virtual machine 
4910: 73 74 65 70 73 20 2a 2f 0a 23 69 66 6e 64 65 66  steps */.#ifndef
4920: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
4930: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20  GRESS_CALLBACK. 
4940: 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67 72   unsigned nProgr
4950: 65 73 73 4c 69 6d 69 74 3b 20 20 20 2f 2a 20 49  essLimit;   /* I
4960: 6e 76 6f 6b 65 20 78 50 72 6f 67 72 65 73 73 28  nvoke xProgress(
4970: 29 20 77 68 65 6e 20 6e 56 6d 53 74 65 70 20 72  ) when nVmStep r
4980: 65 61 63 68 65 73 20 74 68 69 73 20 2a 2f 0a 23  eaches this */.#
4990: 65 6e 64 69 66 0a 20 20 4d 65 6d 20 2a 61 4d 65  endif.  Mem *aMe
49a0: 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 20 20 20 20  m = p->aMem;    
49b0: 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d     /* Copy of p-
49c0: 3e 61 4d 65 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a  >aMem */.  Mem *
49d0: 70 49 6e 31 20 3d 20 30 3b 20 20 20 20 20 20 20  pIn1 = 0;       
49e0: 20 20 20 20 20 20 2f 2a 20 31 73 74 20 69 6e 70        /* 1st inp
49f0: 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  ut operand */.  
4a00: 4d 65 6d 20 2a 70 49 6e 32 20 3d 20 30 3b 20 20  Mem *pIn2 = 0;  
4a10: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32 6e             /* 2n
4a20: 64 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20  d input operand 
4a30: 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 33 20 3d  */.  Mem *pIn3 =
4a40: 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   0;             
4a50: 2f 2a 20 33 72 64 20 69 6e 70 75 74 20 6f 70 65  /* 3rd input ope
4a60: 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  rand */.  Mem *p
4a70: 4f 75 74 20 3d 20 30 3b 20 20 20 20 20 20 20 20  Out = 0;        
4a80: 20 20 20 20 20 2f 2a 20 4f 75 74 70 75 74 20 6f       /* Output o
4a90: 70 65 72 61 6e 64 20 2a 2f 0a 23 69 66 64 65 66  perand */.#ifdef
4aa0: 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20   VDBE_PROFILE.  
4ab0: 75 36 34 20 73 74 61 72 74 3b 20 20 20 20 20 20  u64 start;      
4ac0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 50             /* CP
4ad0: 55 20 63 6c 6f 63 6b 20 63 6f 75 6e 74 20 61 74  U clock count at
4ae0: 20 73 74 61 72 74 20 6f 66 20 6f 70 63 6f 64 65   start of opcode
4af0: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 2f 2a 2a   */.#endif.  /**
4b00: 2a 20 49 4e 53 45 52 54 20 53 54 41 43 4b 20 55  * INSERT STACK U
4b10: 4e 49 4f 4e 20 48 45 52 45 20 2a 2a 2a 2f 0a 0a  NION HERE ***/..
4b20: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6d 61 67    assert( p->mag
4b30: 69 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52  ic==VDBE_MAGIC_R
4b40: 55 4e 20 29 3b 20 20 2f 2a 20 73 71 6c 69 74 65  UN );  /* sqlite
4b50: 33 5f 73 74 65 70 28 29 20 76 65 72 69 66 69 65  3_step() verifie
4b60: 73 20 74 68 69 73 20 2a 2f 0a 20 20 73 71 6c 69  s this */.  sqli
4b70: 74 65 33 56 64 62 65 45 6e 74 65 72 28 70 29 3b  te3VdbeEnter(p);
4b80: 0a 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51  .  if( p->rc==SQ
4b90: 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20  LITE_NOMEM ){.  
4ba0: 20 20 2f 2a 20 54 68 69 73 20 68 61 70 70 65 6e    /* This happen
4bb0: 73 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20  s if a malloc() 
4bc0: 69 6e 73 69 64 65 20 61 20 63 61 6c 6c 20 74 6f  inside a call to
4bd0: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
4be0: 74 65 78 74 28 29 20 6f 72 0a 20 20 20 20 2a 2a  text() or.    **
4bf0: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
4c00: 74 65 78 74 31 36 28 29 20 66 61 69 6c 65 64 2e  text16() failed.
4c10: 20 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6e 6f    */.    goto no
4c20: 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 61 73 73 65  _mem;.  }.  asse
4c30: 72 74 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54  rt( p->rc==SQLIT
4c40: 45 5f 4f 4b 20 7c 7c 20 28 70 2d 3e 72 63 26 30  E_OK || (p->rc&0
4c50: 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53  xff)==SQLITE_BUS
4c60: 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Y );.  assert( p
4c70: 2d 3e 62 49 73 52 65 61 64 65 72 20 7c 7c 20 70  ->bIsReader || p
4c80: 2d 3e 72 65 61 64 4f 6e 6c 79 21 3d 30 20 29 3b  ->readOnly!=0 );
4c90: 0a 20 20 70 2d 3e 69 43 75 72 72 65 6e 74 54 69  .  p->iCurrentTi
4ca0: 6d 65 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74  me = 0;.  assert
4cb0: 28 20 70 2d 3e 65 78 70 6c 61 69 6e 3d 3d 30 20  ( p->explain==0 
4cc0: 29 3b 0a 20 20 70 2d 3e 70 52 65 73 75 6c 74 53  );.  p->pResultS
4cd0: 65 74 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 62 75  et = 0;.  db->bu
4ce0: 73 79 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79 20  syHandler.nBusy 
4cf0: 3d 20 30 3b 0a 20 20 69 66 28 20 64 62 2d 3e 75  = 0;.  if( db->u
4d00: 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 20  1.isInterrupted 
4d10: 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
4d20: 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20  _to_interrupt;. 
4d30: 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72   sqlite3VdbeIOTr
4d40: 61 63 65 53 71 6c 28 70 29 3b 0a 23 69 66 6e 64  aceSql(p);.#ifnd
4d50: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
4d60: 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
4d70: 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67  .  if( db->xProg
4d80: 72 65 73 73 20 29 7b 0a 20 20 20 20 75 33 32 20  ress ){.    u32 
4d90: 69 50 72 69 6f 72 20 3d 20 70 2d 3e 61 43 6f 75  iPrior = p->aCou
4da0: 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54  nter[SQLITE_STMT
4db0: 53 54 41 54 55 53 5f 56 4d 5f 53 54 45 50 5d 3b  STATUS_VM_STEP];
4dc0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 30 20 3c  .    assert( 0 <
4dd0: 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70   db->nProgressOp
4de0: 73 20 29 3b 0a 20 20 20 20 6e 50 72 6f 67 72 65  s );.    nProgre
4df0: 73 73 4c 69 6d 69 74 20 3d 20 64 62 2d 3e 6e 50  ssLimit = db->nP
4e00: 72 6f 67 72 65 73 73 4f 70 73 20 2d 20 28 69 50  rogressOps - (iP
4e10: 72 69 6f 72 20 25 20 64 62 2d 3e 6e 50 72 6f 67  rior % db->nProg
4e20: 72 65 73 73 4f 70 73 29 3b 0a 20 20 7d 65 6c 73  ressOps);.  }els
4e30: 65 7b 0a 20 20 20 20 6e 50 72 6f 67 72 65 73 73  e{.    nProgress
4e40: 4c 69 6d 69 74 20 3d 20 30 78 66 66 66 66 66 66  Limit = 0xffffff
4e50: 66 66 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 23  ff;.  }.#endif.#
4e60: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
4e70: 55 47 0a 20 20 73 71 6c 69 74 65 33 42 65 67 69  UG.  sqlite3Begi
4e80: 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b  nBenignMalloc();
4e90: 0a 20 20 69 66 28 20 70 2d 3e 70 63 3d 3d 30 0a  .  if( p->pc==0.
4ea0: 20 20 20 26 26 20 28 70 2d 3e 64 62 2d 3e 66 6c     && (p->db->fl
4eb0: 61 67 73 20 26 20 28 53 51 4c 49 54 45 5f 56 64  ags & (SQLITE_Vd
4ec0: 62 65 4c 69 73 74 69 6e 67 7c 53 51 4c 49 54 45  beListing|SQLITE
4ed0: 5f 56 64 62 65 45 51 50 7c 53 51 4c 49 54 45 5f  _VdbeEQP|SQLITE_
4ee0: 56 64 62 65 54 72 61 63 65 29 29 21 3d 30 0a 20  VdbeTrace))!=0. 
4ef0: 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20   ){.    int i;. 
4f00: 20 20 20 69 6e 74 20 6f 6e 63 65 20 3d 20 31 3b     int once = 1;
4f10: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
4f20: 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20 20  PrintSql(p);.   
4f30: 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67   if( p->db->flag
4f40: 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 4c  s & SQLITE_VdbeL
4f50: 69 73 74 69 6e 67 20 29 7b 0a 20 20 20 20 20 20  isting ){.      
4f60: 70 72 69 6e 74 66 28 22 56 44 42 45 20 50 72 6f  printf("VDBE Pro
4f70: 67 72 61 6d 20 4c 69 73 74 69 6e 67 3a 5c 6e 22  gram Listing:\n"
4f80: 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30  );.      for(i=0
4f90: 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29  ; i<p->nOp; i++)
4fa0: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
4fb0: 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74 64  3VdbePrintOp(std
4fc0: 6f 75 74 2c 20 69 2c 20 26 61 4f 70 5b 69 5d 29  out, i, &aOp[i])
4fd0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
4fe0: 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66      if( p->db->f
4ff0: 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64  lags & SQLITE_Vd
5000: 62 65 45 51 50 20 29 7b 0a 20 20 20 20 20 20 66  beEQP ){.      f
5010: 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70  or(i=0; i<p->nOp
5020: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; i++){.        
5030: 69 66 28 20 61 4f 70 5b 69 5d 2e 6f 70 63 6f 64  if( aOp[i].opcod
5040: 65 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e 20 29 7b  e==OP_Explain ){
5050: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 6f  .          if( o
5060: 6e 63 65 20 29 20 70 72 69 6e 74 66 28 22 56 44  nce ) printf("VD
5070: 42 45 20 51 75 65 72 79 20 50 6c 61 6e 3a 5c 6e  BE Query Plan:\n
5080: 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70 72  ");.          pr
5090: 69 6e 74 66 28 22 25 73 5c 6e 22 2c 20 61 4f 70  intf("%s\n", aOp
50a0: 5b 69 5d 2e 70 34 2e 7a 29 3b 0a 20 20 20 20 20  [i].p4.z);.     
50b0: 20 20 20 20 20 6f 6e 63 65 20 3d 20 30 3b 0a 20       once = 0;. 
50c0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
50d0: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70  .    }.    if( p
50e0: 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51  ->db->flags & SQ
50f0: 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 20 29  LITE_VdbeTrace )
5100: 20 20 70 72 69 6e 74 66 28 22 56 44 42 45 20 54    printf("VDBE T
5110: 72 61 63 65 3a 5c 6e 22 29 3b 0a 20 20 7d 0a 20  race:\n");.  }. 
5120: 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67   sqlite3EndBenig
5130: 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 23 65 6e 64 69  nMalloc();.#endi
5140: 66 0a 20 20 66 6f 72 28 70 4f 70 3d 26 61 4f 70  f.  for(pOp=&aOp
5150: 5b 70 2d 3e 70 63 5d 3b 20 31 3b 20 70 4f 70 2b  [p->pc]; 1; pOp+
5160: 2b 29 7b 0a 20 20 20 20 2f 2a 20 45 72 72 6f 72  +){.    /* Error
5170: 73 20 61 72 65 20 64 65 74 65 63 74 65 64 20 62  s are detected b
5180: 79 20 69 6e 64 69 76 69 64 75 61 6c 20 6f 70 63  y individual opc
5190: 6f 64 65 73 2c 20 77 69 74 68 20 61 6e 20 69 6d  odes, with an im
51a0: 6d 65 64 69 61 74 65 0a 20 20 20 20 2a 2a 20 6a  mediate.    ** j
51b0: 75 6d 70 73 20 74 6f 20 61 62 6f 72 74 5f 64 75  umps to abort_du
51c0: 65 5f 74 6f 5f 65 72 72 6f 72 2e 20 2a 2f 0a 20  e_to_error. */. 
51d0: 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
51e0: 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 0a 20 20 20  QLITE_OK );..   
51f0: 20 61 73 73 65 72 74 28 20 70 4f 70 3e 3d 61 4f   assert( pOp>=aO
5200: 70 20 26 26 20 70 4f 70 3c 26 61 4f 70 5b 70 2d  p && pOp<&aOp[p-
5210: 3e 6e 4f 70 5d 29 3b 0a 23 69 66 64 65 66 20 56  >nOp]);.#ifdef V
5220: 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20 20  DBE_PROFILE.    
5230: 73 74 61 72 74 20 3d 20 73 71 6c 69 74 65 33 48  start = sqlite3H
5240: 77 74 69 6d 65 28 29 3b 0a 23 65 6e 64 69 66 0a  wtime();.#endif.
5250: 20 20 20 20 6e 56 6d 53 74 65 70 2b 2b 3b 0a 23      nVmStep++;.#
5260: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
5270: 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41  BLE_STMT_SCANSTA
5280: 54 55 53 0a 20 20 20 20 69 66 28 20 70 2d 3e 61  TUS.    if( p->a
5290: 6e 45 78 65 63 20 29 20 70 2d 3e 61 6e 45 78 65  nExec ) p->anExe
52a0: 63 5b 28 69 6e 74 29 28 70 4f 70 2d 61 4f 70 29  c[(int)(pOp-aOp)
52b0: 5d 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20  ]++;.#endif..   
52c0: 20 2f 2a 20 4f 6e 6c 79 20 61 6c 6c 6f 77 20 74   /* Only allow t
52d0: 72 61 63 69 6e 67 20 69 66 20 53 51 4c 49 54 45  racing if SQLITE
52e0: 5f 44 45 42 55 47 20 69 73 20 64 65 66 69 6e 65  _DEBUG is define
52f0: 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65 66  d..    */.#ifdef
5300: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
5310: 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20    if( db->flags 
5320: 26 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61  & SQLITE_VdbeTra
5330: 63 65 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ce ){.      sqli
5340: 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73  te3VdbePrintOp(s
5350: 74 64 6f 75 74 2c 20 28 69 6e 74 29 28 70 4f 70  tdout, (int)(pOp
5360: 20 2d 20 61 4f 70 29 2c 20 70 4f 70 29 3b 0a 20   - aOp), pOp);. 
5370: 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20     }.#endif.    
5380: 20 20 0a 0a 20 20 20 20 2f 2a 20 43 68 65 63 6b    ..    /* Check
5390: 20 74 6f 20 73 65 65 20 69 66 20 77 65 20 6e 65   to see if we ne
53a0: 65 64 20 74 6f 20 73 69 6d 75 6c 61 74 65 20 61  ed to simulate a
53b0: 6e 20 69 6e 74 65 72 72 75 70 74 2e 20 20 54 68  n interrupt.  Th
53c0: 69 73 20 6f 6e 6c 79 20 68 61 70 70 65 6e 73 0a  is only happens.
53d0: 20 20 20 20 2a 2a 20 69 66 20 77 65 20 68 61 76      ** if we hav
53e0: 65 20 61 20 73 70 65 63 69 61 6c 20 74 65 73 74  e a special test
53f0: 20 62 75 69 6c 64 2e 0a 20 20 20 20 2a 2f 0a 23   build..    */.#
5400: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
5410: 54 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  T.    if( sqlite
5420: 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e  3_interrupt_coun
5430: 74 3e 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  t>0 ){.      sql
5440: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63  ite3_interrupt_c
5450: 6f 75 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 69 66  ount--;.      if
5460: 28 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72  ( sqlite3_interr
5470: 75 70 74 5f 63 6f 75 6e 74 3d 3d 30 20 29 7b 0a  upt_count==0 ){.
5480: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
5490: 69 6e 74 65 72 72 75 70 74 28 64 62 29 3b 0a 20  interrupt(db);. 
54a0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e       }.    }.#en
54b0: 64 69 66 0a 0a 20 20 20 20 2f 2a 20 53 61 6e 69  dif..    /* Sani
54c0: 74 79 20 63 68 65 63 6b 69 6e 67 20 6f 6e 20 6f  ty checking on o
54d0: 74 68 65 72 20 6f 70 65 72 61 6e 64 73 20 2a 2f  ther operands */
54e0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
54f0: 45 42 55 47 0a 20 20 20 20 7b 0a 20 20 20 20 20  EBUG.    {.     
5500: 20 75 38 20 6f 70 50 72 6f 70 65 72 74 79 20 3d   u8 opProperty =
5510: 20 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72   sqlite3OpcodePr
5520: 6f 70 65 72 74 79 5b 70 4f 70 2d 3e 6f 70 63 6f  operty[pOp->opco
5530: 64 65 5d 3b 0a 20 20 20 20 20 20 69 66 28 20 28  de];.      if( (
5540: 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46  opProperty & OPF
5550: 4c 47 5f 49 4e 31 29 21 3d 30 20 29 7b 0a 20 20  LG_IN1)!=0 ){.  
5560: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5570: 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 20 20 20  p->p1>0 );.     
5580: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5590: 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  p1<=(p->nMem+1 -
55a0: 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a   p->nCursor) );.
55b0: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
55c0: 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d  memIsValid(&aMem
55d0: 5b 70 4f 70 2d 3e 70 31 5d 29 20 29 3b 0a 20 20  [pOp->p1]) );.  
55e0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
55f0: 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65  lite3VdbeCheckMe
5600: 6d 49 6e 76 61 72 69 61 6e 74 73 28 26 61 4d 65  mInvariants(&aMe
5610: 6d 5b 70 4f 70 2d 3e 70 31 5d 29 20 29 3b 0a 20  m[pOp->p1]) );. 
5620: 20 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f         REGISTER_
5630: 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 26  TRACE(pOp->p1, &
5640: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a  aMem[pOp->p1]);.
5650: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
5660: 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20  ( (opProperty & 
5670: 4f 50 46 4c 47 5f 49 4e 32 29 21 3d 30 20 29 7b  OPFLG_IN2)!=0 ){
5680: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
5690: 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20   pOp->p2>0 );.  
56a0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
56b0: 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p->p2<=(p->nMem+
56c0: 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20  1 - p->nCursor) 
56d0: 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
56e0: 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61  t( memIsValid(&a
56f0: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 20 29 3b  Mem[pOp->p2]) );
5700: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
5710: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63   sqlite3VdbeChec
5720: 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 26  kMemInvariants(&
5730: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 20 29  aMem[pOp->p2]) )
5740: 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49 53 54  ;.        REGIST
5750: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
5760: 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  , &aMem[pOp->p2]
5770: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
5780: 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72 74 79   if( (opProperty
5790: 20 26 20 4f 50 46 4c 47 5f 49 4e 33 29 21 3d 30   & OPFLG_IN3)!=0
57a0: 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
57b0: 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b  rt( pOp->p3>0 );
57c0: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
57d0: 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d   pOp->p3<=(p->nM
57e0: 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
57f0: 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  r) );.        as
5800: 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
5810: 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29  (&aMem[pOp->p3])
5820: 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
5830: 72 74 28 20 73 71 6c 69 74 65 33 56 64 62 65 43  rt( sqlite3VdbeC
5840: 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74  heckMemInvariant
5850: 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  s(&aMem[pOp->p3]
5860: 29 20 29 3b 0a 20 20 20 20 20 20 20 20 52 45 47  ) );.        REG
5870: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
5880: 3e 70 33 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  >p3, &aMem[pOp->
5890: 70 33 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  p3]);.      }.  
58a0: 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65      if( (opPrope
58b0: 72 74 79 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32  rty & OPFLG_OUT2
58c0: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )!=0 ){.        
58d0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
58e0: 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  0 );.        ass
58f0: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70  ert( pOp->p2<=(p
5900: 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
5910: 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20  ursor) );.      
5920: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
5930: 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ge(p, &aMem[pOp-
5940: 3e 70 32 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20  >p2]);.      }. 
5950: 20 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70       if( (opProp
5960: 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 4f 55 54  erty & OPFLG_OUT
5970: 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  3)!=0 ){.       
5980: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
5990: 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  >0 );.        as
59a0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28  sert( pOp->p3<=(
59b0: 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
59c0: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20  Cursor) );.     
59d0: 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
59e0: 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70  nge(p, &aMem[pOp
59f0: 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 7d 0a  ->p3]);.      }.
5a00: 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 23 69 66      }.#endif.#if
5a10: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
5a20: 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65  DEBUG) || define
5a30: 64 28 56 44 42 45 5f 50 52 4f 46 49 4c 45 29 0a  d(VDBE_PROFILE).
5a40: 20 20 20 20 70 4f 72 69 67 4f 70 20 3d 20 70 4f      pOrigOp = pO
5a50: 70 3b 0a 23 65 6e 64 69 66 0a 20 20 0a 20 20 20  p;.#endif.  .   
5a60: 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70   switch( pOp->op
5a70: 63 6f 64 65 20 29 7b 0a 0a 2f 2a 2a 2a 2a 2a 2a  code ){../******
5a80: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5a90: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5aa0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5ab0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5ac0: 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57 68 61 74 20  *******.** What 
5ad0: 66 6f 6c 6c 6f 77 73 20 69 73 20 61 20 6d 61 73  follows is a mas
5ae0: 73 69 76 65 20 73 77 69 74 63 68 20 73 74 61 74  sive switch stat
5af0: 65 6d 65 6e 74 20 77 68 65 72 65 20 65 61 63 68  ement where each
5b00: 20 63 61 73 65 20 69 6d 70 6c 65 6d 65 6e 74 73   case implements
5b10: 20 61 0a 2a 2a 20 73 65 70 61 72 61 74 65 20 69   a.** separate i
5b20: 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e 20 74 68  nstruction in th
5b30: 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  e virtual machin
5b40: 65 2e 20 20 49 66 20 77 65 20 66 6f 6c 6c 6f 77  e.  If we follow
5b50: 20 74 68 65 20 75 73 75 61 6c 0a 2a 2a 20 69 6e   the usual.** in
5b60: 64 65 6e 74 61 74 69 6f 6e 20 63 6f 6e 76 65 6e  dentation conven
5b70: 74 69 6f 6e 73 2c 20 65 61 63 68 20 63 61 73 65  tions, each case
5b80: 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 64 65 6e   should be inden
5b90: 74 65 64 20 62 79 20 36 20 73 70 61 63 65 73 2e  ted by 6 spaces.
5ba0: 20 20 42 75 74 0a 2a 2a 20 74 68 61 74 20 69 73    But.** that is
5bb0: 20 61 20 6c 6f 74 20 6f 66 20 77 61 73 74 65 64   a lot of wasted
5bc0: 20 73 70 61 63 65 20 6f 6e 20 74 68 65 20 6c 65   space on the le
5bd0: 66 74 20 6d 61 72 67 69 6e 2e 20 20 53 6f 20 74  ft margin.  So t
5be0: 68 65 20 63 6f 64 65 20 77 69 74 68 69 6e 0a 2a  he code within.*
5bf0: 2a 20 74 68 65 20 73 77 69 74 63 68 20 73 74 61  * the switch sta
5c00: 74 65 6d 65 6e 74 20 77 69 6c 6c 20 62 72 65 61  tement will brea
5c10: 6b 20 77 69 74 68 20 63 6f 6e 76 65 6e 74 69 6f  k with conventio
5c20: 6e 20 61 6e 64 20 62 65 20 66 6c 75 73 68 2d 6c  n and be flush-l
5c30: 65 66 74 2e 20 41 6e 6f 74 68 65 72 0a 2a 2a 20  eft. Another.** 
5c40: 62 69 67 20 63 6f 6d 6d 65 6e 74 20 28 73 69 6d  big comment (sim
5c50: 69 6c 61 72 20 74 6f 20 74 68 69 73 20 6f 6e 65  ilar to this one
5c60: 29 20 77 69 6c 6c 20 6d 61 72 6b 20 74 68 65 20  ) will mark the 
5c70: 70 6f 69 6e 74 20 69 6e 20 74 68 65 20 63 6f 64  point in the cod
5c80: 65 20 77 68 65 72 65 0a 2a 2a 20 77 65 20 74 72  e where.** we tr
5c90: 61 6e 73 69 74 69 6f 6e 20 62 61 63 6b 20 74 6f  ansition back to
5ca0: 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61 74   normal indentat
5cb0: 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66  ion..**.** The f
5cc0: 6f 72 6d 61 74 74 69 6e 67 20 6f 66 20 65 61 63  ormatting of eac
5cd0: 68 20 63 61 73 65 20 69 73 20 69 6d 70 6f 72 74  h case is import
5ce0: 61 6e 74 2e 20 20 54 68 65 20 6d 61 6b 65 66 69  ant.  The makefi
5cf0: 6c 65 20 66 6f 72 20 53 51 4c 69 74 65 0a 2a 2a  le for SQLite.**
5d00: 20 67 65 6e 65 72 61 74 65 73 20 74 77 6f 20 43   generates two C
5d10: 20 66 69 6c 65 73 20 22 6f 70 63 6f 64 65 73 2e   files "opcodes.
5d20: 68 22 20 61 6e 64 20 22 6f 70 63 6f 64 65 73 2e  h" and "opcodes.
5d30: 63 22 20 62 79 20 73 63 61 6e 6e 69 6e 67 20 74  c" by scanning t
5d40: 68 69 73 0a 2a 2a 20 66 69 6c 65 20 6c 6f 6f 6b  his.** file look
5d50: 69 6e 67 20 66 6f 72 20 6c 69 6e 65 73 20 74 68  ing for lines th
5d60: 61 74 20 62 65 67 69 6e 20 77 69 74 68 20 22 63  at begin with "c
5d70: 61 73 65 20 4f 50 5f 22 2e 20 20 54 68 65 20 6f  ase OP_".  The o
5d80: 70 63 6f 64 65 73 2e 68 20 66 69 6c 65 73 0a 2a  pcodes.h files.*
5d90: 2a 20 77 69 6c 6c 20 62 65 20 66 69 6c 6c 65 64  * will be filled
5da0: 20 77 69 74 68 20 23 64 65 66 69 6e 65 73 20 74   with #defines t
5db0: 68 61 74 20 67 69 76 65 20 75 6e 69 71 75 65 20  hat give unique 
5dc0: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73 20 74  integer values t
5dd0: 6f 20 65 61 63 68 0a 2a 2a 20 6f 70 63 6f 64 65  o each.** opcode
5de0: 20 61 6e 64 20 74 68 65 20 6f 70 63 6f 64 65 73   and the opcodes
5df0: 2e 63 20 66 69 6c 65 20 69 73 20 66 69 6c 6c 65  .c file is fille
5e00: 64 20 77 69 74 68 20 61 6e 20 61 72 72 61 79 20  d with an array 
5e10: 6f 66 20 73 74 72 69 6e 67 73 20 77 68 65 72 65  of strings where
5e20: 0a 2a 2a 20 65 61 63 68 20 73 74 72 69 6e 67 20  .** each string 
5e30: 69 73 20 74 68 65 20 73 79 6d 62 6f 6c 69 63 20  is the symbolic 
5e40: 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 63 6f 72  name for the cor
5e50: 72 65 73 70 6f 6e 64 69 6e 67 20 6f 70 63 6f 64  responding opcod
5e60: 65 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 63 61  e.  If the.** ca
5e70: 73 65 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  se statement is 
5e80: 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 63 6f  followed by a co
5e90: 6d 6d 65 6e 74 20 6f 66 20 74 68 65 20 66 6f 72  mment of the for
5ea0: 6d 20 22 2f 23 20 73 61 6d 65 20 61 73 20 2e 2e  m "/# same as ..
5eb0: 2e 20 23 2f 22 0a 2a 2a 20 74 68 61 74 20 63 6f  . #/".** that co
5ec0: 6d 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74 6f  mment is used to
5ed0: 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 70   determine the p
5ee0: 61 72 74 69 63 75 6c 61 72 20 76 61 6c 75 65 20  articular value 
5ef0: 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 0a 2a  of the opcode..*
5f00: 2a 0a 2a 2a 20 4f 74 68 65 72 20 6b 65 79 77 6f  *.** Other keywo
5f10: 72 64 73 20 69 6e 20 74 68 65 20 63 6f 6d 6d 65  rds in the comme
5f20: 6e 74 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20  nt that follows 
5f30: 65 61 63 68 20 63 61 73 65 20 61 72 65 20 75 73  each case are us
5f40: 65 64 20 74 6f 0a 2a 2a 20 63 6f 6e 73 74 72 75  ed to.** constru
5f50: 63 74 20 74 68 65 20 4f 50 46 4c 47 5f 49 4e 49  ct the OPFLG_INI
5f60: 54 49 41 4c 49 5a 45 52 20 76 61 6c 75 65 20 74  TIALIZER value t
5f70: 68 61 74 20 69 6e 69 74 69 61 6c 69 7a 65 73 20  hat initializes 
5f80: 6f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d  opcodeProperty[]
5f90: 2e 0a 2a 2a 20 4b 65 79 77 6f 72 64 73 20 69 6e  ..** Keywords in
5fa0: 63 6c 75 64 65 3a 20 69 6e 31 2c 20 69 6e 32 2c  clude: in1, in2,
5fb0: 20 69 6e 33 2c 20 6f 75 74 32 2c 20 6f 75 74 33   in3, out2, out3
5fc0: 2e 20 20 53 65 65 0a 2a 2a 20 74 68 65 20 6d 6b  .  See.** the mk
5fd0: 6f 70 63 6f 64 65 68 2e 61 77 6b 20 73 63 72 69  opcodeh.awk scri
5fe0: 70 74 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  pt for additiona
5ff0: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
6000: 2a 0a 2a 2a 20 44 6f 63 75 6d 65 6e 74 61 74 69  *.** Documentati
6010: 6f 6e 20 61 62 6f 75 74 20 56 44 42 45 20 6f 70  on about VDBE op
6020: 63 6f 64 65 73 20 69 73 20 67 65 6e 65 72 61 74  codes is generat
6030: 65 64 20 62 79 20 73 63 61 6e 6e 69 6e 67 20 74  ed by scanning t
6040: 68 69 73 20 66 69 6c 65 0a 2a 2a 20 66 6f 72 20  his file.** for 
6050: 6c 69 6e 65 73 20 6f 66 20 74 68 61 74 20 63 6f  lines of that co
6060: 6e 74 61 69 6e 20 22 4f 70 63 6f 64 65 3a 22 2e  ntain "Opcode:".
6070: 20 20 54 68 61 74 20 6c 69 6e 65 20 61 6e 64 20    That line and 
6080: 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 0a 2a  all subsequent.*
6090: 2a 20 63 6f 6d 6d 65 6e 74 20 6c 69 6e 65 73 20  * comment lines 
60a0: 61 72 65 20 75 73 65 64 20 69 6e 20 74 68 65 20  are used in the 
60b0: 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 74 68  generation of th
60c0: 65 20 6f 70 63 6f 64 65 2e 68 74 6d 6c 20 64 6f  e opcode.html do
60d0: 63 75 6d 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20 66  cumentation.** f
60e0: 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 55 4d 4d 41  ile..**.** SUMMA
60f0: 52 59 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 46 6f  RY:.**.**     Fo
6100: 72 6d 61 74 74 69 6e 67 20 69 73 20 69 6d 70 6f  rmatting is impo
6110: 72 74 61 6e 74 20 74 6f 20 73 63 72 69 70 74 73  rtant to scripts
6120: 20 74 68 61 74 20 73 63 61 6e 20 74 68 69 73 20   that scan this 
6130: 66 69 6c 65 2e 0a 2a 2a 20 20 20 20 20 44 6f 20  file..**     Do 
6140: 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72 6f 6d  not deviate from
6150: 20 74 68 65 20 66 6f 72 6d 61 74 74 69 6e 67 20   the formatting 
6160: 73 74 79 6c 65 20 63 75 72 72 65 6e 74 6c 79 20  style currently 
6170: 69 6e 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a  in use..**.*****
6180: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6190: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
61a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
61b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
61c0: 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 20 4f 70  ********/../* Op
61d0: 63 6f 64 65 3a 20 20 47 6f 74 6f 20 2a 20 50 32  code:  Goto * P2
61e0: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6e 20   * * *.**.** An 
61f0: 75 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 6a 75  unconditional ju
6200: 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20 50 32  mp to address P2
6210: 2e 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 69 6e  ..** The next in
6220: 73 74 72 75 63 74 69 6f 6e 20 65 78 65 63 75 74  struction execut
6230: 65 64 20 77 69 6c 6c 20 62 65 20 0a 2a 2a 20 74  ed will be .** t
6240: 68 65 20 6f 6e 65 20 61 74 20 69 6e 64 65 78 20  he one at index 
6250: 50 32 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69  P2 from the begi
6260: 6e 6e 69 6e 67 20 6f 66 0a 2a 2a 20 74 68 65 20  nning of.** the 
6270: 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 54  program..**.** T
6280: 68 65 20 50 31 20 70 61 72 61 6d 65 74 65 72 20  he P1 parameter 
6290: 69 73 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20  is not actually 
62a0: 75 73 65 64 20 62 79 20 74 68 69 73 20 6f 70 63  used by this opc
62b0: 6f 64 65 2e 20 20 48 6f 77 65 76 65 72 2c 20 69  ode.  However, i
62c0: 74 0a 2a 2a 20 69 73 20 73 6f 6d 65 74 69 6d 65  t.** is sometime
62d0: 73 20 73 65 74 20 74 6f 20 31 20 69 6e 73 74 65  s set to 1 inste
62e0: 61 64 20 6f 66 20 30 20 61 73 20 61 20 68 69 6e  ad of 0 as a hin
62f0: 74 20 74 6f 20 74 68 65 20 63 6f 6d 6d 61 6e 64  t to the command
6300: 2d 6c 69 6e 65 20 73 68 65 6c 6c 0a 2a 2a 20 74  -line shell.** t
6310: 68 61 74 20 74 68 69 73 20 47 6f 74 6f 20 69 73  hat this Goto is
6320: 20 74 68 65 20 62 6f 74 74 6f 6d 20 6f 66 20 61   the bottom of a
6330: 20 6c 6f 6f 70 20 61 6e 64 20 74 68 61 74 20 74   loop and that t
6340: 68 65 20 6c 69 6e 65 73 20 66 72 6f 6d 20 50 32  he lines from P2
6350: 20 64 6f 77 6e 0a 2a 2a 20 74 6f 20 74 68 65 20   down.** to the 
6360: 63 75 72 72 65 6e 74 20 6c 69 6e 65 20 73 68 6f  current line sho
6370: 75 6c 64 20 62 65 20 69 6e 64 65 6e 74 65 64 20  uld be indented 
6380: 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70  for EXPLAIN outp
6390: 75 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47  ut..*/.case OP_G
63a0: 6f 74 6f 3a 20 7b 20 20 20 20 20 20 20 20 20 20  oto: {          
63b0: 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 6a 75     /* jump */.ju
63c0: 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68 65  mp_to_p2_and_che
63d0: 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74  ck_for_interrupt
63e0: 3a 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70  :.  pOp = &aOp[p
63f0: 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a 0a 20 20  Op->p2 - 1];..  
6400: 2f 2a 20 4f 70 63 6f 64 65 73 20 74 68 61 74 20  /* Opcodes that 
6410: 61 72 65 20 75 73 65 64 20 61 73 20 74 68 65 20  are used as the 
6420: 62 6f 74 74 6f 6d 20 6f 66 20 61 20 6c 6f 6f 70  bottom of a loop
6430: 20 28 4f 50 5f 4e 65 78 74 2c 20 4f 50 5f 50 72   (OP_Next, OP_Pr
6440: 65 76 2c 0a 20 20 2a 2a 20 4f 50 5f 56 4e 65 78  ev,.  ** OP_VNex
6450: 74 2c 20 6f 72 20 4f 50 5f 53 6f 72 74 65 72 4e  t, or OP_SorterN
6460: 65 78 74 29 20 61 6c 6c 20 6a 75 6d 70 20 68 65  ext) all jump he
6470: 72 65 20 75 70 6f 6e 0a 20 20 2a 2a 20 63 6f 6d  re upon.  ** com
6480: 70 6c 65 74 69 6f 6e 2e 20 20 43 68 65 63 6b 20  pletion.  Check 
6490: 74 6f 20 73 65 65 20 69 66 20 73 71 6c 69 74 65  to see if sqlite
64a0: 33 5f 69 6e 74 65 72 72 75 70 74 28 29 20 68 61  3_interrupt() ha
64b0: 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 0a 20 20  s been called.  
64c0: 2a 2a 20 6f 72 20 69 66 20 74 68 65 20 70 72 6f  ** or if the pro
64d0: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 6e  gress callback n
64e0: 65 65 64 73 20 74 6f 20 62 65 20 69 6e 76 6f 6b  eeds to be invok
64f0: 65 64 2e 20 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  ed. .  **.  ** T
6500: 68 69 73 20 63 6f 64 65 20 75 73 65 73 20 75 6e  his code uses un
6510: 73 74 72 75 63 74 75 72 65 64 20 22 67 6f 74 6f  structured "goto
6520: 22 20 73 74 61 74 65 6d 65 6e 74 73 20 61 6e 64  " statements and
6530: 20 64 6f 65 73 20 6e 6f 74 20 6c 6f 6f 6b 20 63   does not look c
6540: 6c 65 61 6e 2e 0a 20 20 2a 2a 20 42 75 74 20 74  lean..  ** But t
6550: 68 61 74 20 69 73 20 6e 6f 74 20 64 75 65 20 74  hat is not due t
6560: 6f 20 73 6c 6f 70 70 79 20 63 6f 64 69 6e 67 20  o sloppy coding 
6570: 68 61 62 69 74 73 2e 20 54 68 65 20 63 6f 64 65  habits. The code
6580: 20 69 73 20 77 72 69 74 74 65 6e 20 74 68 69 73   is written this
6590: 0a 20 20 2a 2a 20 77 61 79 20 66 6f 72 20 70 65  .  ** way for pe
65a0: 72 66 6f 72 6d 61 6e 63 65 2c 20 74 6f 20 61 76  rformance, to av
65b0: 6f 69 64 20 68 61 76 69 6e 67 20 74 6f 20 72 75  oid having to ru
65c0: 6e 20 74 68 65 20 69 6e 74 65 72 72 75 70 74 20  n the interrupt 
65d0: 61 6e 64 20 70 72 6f 67 72 65 73 73 0a 20 20 2a  and progress.  *
65e0: 2a 20 63 68 65 63 6b 73 20 6f 6e 20 65 76 65 72  * checks on ever
65f0: 79 20 6f 70 63 6f 64 65 2e 20 20 54 68 69 73 20  y opcode.  This 
6600: 68 65 6c 70 73 20 73 71 6c 69 74 65 33 5f 73 74  helps sqlite3_st
6610: 65 70 28 29 20 74 6f 20 72 75 6e 20 61 62 6f 75  ep() to run abou
6620: 74 20 31 2e 35 25 0a 20 20 2a 2a 20 66 61 73 74  t 1.5%.  ** fast
6630: 65 72 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20  er according to 
6640: 22 76 61 6c 67 72 69 6e 64 20 2d 2d 74 6f 6f 6c  "valgrind --tool
6650: 3d 63 61 63 68 65 67 72 69 6e 64 22 20 2a 2f 0a  =cachegrind" */.
6660: 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72  check_for_interr
6670: 75 70 74 3a 0a 20 20 69 66 28 20 64 62 2d 3e 75  upt:.  if( db->u
6680: 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 20  1.isInterrupted 
6690: 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
66a0: 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a 23  _to_interrupt;.#
66b0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
66c0: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
66d0: 42 41 43 4b 0a 20 20 2f 2a 20 43 61 6c 6c 20 74  BACK.  /* Call t
66e0: 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  he progress call
66f0: 62 61 63 6b 20 69 66 20 69 74 20 69 73 20 63 6f  back if it is co
6700: 6e 66 69 67 75 72 65 64 20 61 6e 64 20 74 68 65  nfigured and the
6710: 20 72 65 71 75 69 72 65 64 20 6e 75 6d 62 65 72   required number
6720: 0a 20 20 2a 2a 20 6f 66 20 56 44 42 45 20 6f 70  .  ** of VDBE op
6730: 73 20 68 61 76 65 20 62 65 65 6e 20 65 78 65 63  s have been exec
6740: 75 74 65 64 20 28 65 69 74 68 65 72 20 73 69 6e  uted (either sin
6750: 63 65 20 74 68 69 73 20 69 6e 76 6f 63 61 74 69  ce this invocati
6760: 6f 6e 20 6f 66 0a 20 20 2a 2a 20 73 71 6c 69 74  on of.  ** sqlit
6770: 65 33 56 64 62 65 45 78 65 63 28 29 20 6f 72 20  e3VdbeExec() or 
6780: 73 69 6e 63 65 20 6c 61 73 74 20 74 69 6d 65 20  since last time 
6790: 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  the progress cal
67a0: 6c 62 61 63 6b 20 77 61 73 20 63 61 6c 6c 65 64  lback was called
67b0: 29 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 70  )..  ** If the p
67c0: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
67d0: 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72   returns non-zer
67e0: 6f 2c 20 65 78 69 74 20 74 68 65 20 76 69 72 74  o, exit the virt
67f0: 75 61 6c 20 6d 61 63 68 69 6e 65 20 77 69 74 68  ual machine with
6800: 0a 20 20 2a 2a 20 61 20 72 65 74 75 72 6e 20 63  .  ** a return c
6810: 6f 64 65 20 53 51 4c 49 54 45 5f 41 42 4f 52 54  ode SQLITE_ABORT
6820: 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 6e 56 6d  ..  */.  if( nVm
6830: 53 74 65 70 3e 3d 6e 50 72 6f 67 72 65 73 73 4c  Step>=nProgressL
6840: 69 6d 69 74 20 26 26 20 64 62 2d 3e 78 50 72 6f  imit && db->xPro
6850: 67 72 65 73 73 21 3d 30 20 29 7b 0a 20 20 20 20  gress!=0 ){.    
6860: 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 50 72 6f  assert( db->nPro
6870: 67 72 65 73 73 4f 70 73 21 3d 30 20 29 3b 0a 20  gressOps!=0 );. 
6880: 20 20 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69     nProgressLimi
6890: 74 20 3d 20 6e 56 6d 53 74 65 70 20 2b 20 64 62  t = nVmStep + db
68a0: 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 2d  ->nProgressOps -
68b0: 20 28 6e 56 6d 53 74 65 70 25 64 62 2d 3e 6e 50   (nVmStep%db->nP
68c0: 72 6f 67 72 65 73 73 4f 70 73 29 3b 0a 20 20 20  rogressOps);.   
68d0: 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65   if( db->xProgre
68e0: 73 73 28 64 62 2d 3e 70 50 72 6f 67 72 65 73 73  ss(db->pProgress
68f0: 41 72 67 29 20 29 7b 0a 20 20 20 20 20 20 72 63  Arg) ){.      rc
6900: 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52   = SQLITE_INTERR
6910: 55 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20  UPT;.      goto 
6920: 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
6930: 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65  or;.    }.  }.#e
6940: 6e 64 69 66 0a 20 20 0a 20 20 62 72 65 61 6b 3b  ndif.  .  break;
6950: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  .}../* Opcode:  
6960: 47 6f 73 75 62 20 50 31 20 50 32 20 2a 20 2a 20  Gosub P1 P2 * * 
6970: 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68  *.**.** Write th
6980: 65 20 63 75 72 72 65 6e 74 20 61 64 64 72 65 73  e current addres
6990: 73 20 6f 6e 74 6f 20 72 65 67 69 73 74 65 72 20  s onto register 
69a0: 50 31 0a 2a 2a 20 61 6e 64 20 74 68 65 6e 20 6a  P1.** and then j
69b0: 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20 50  ump to address P
69c0: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f  2..*/.case OP_Go
69d0: 73 75 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20  sub: {          
69e0: 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61    /* jump */.  a
69f0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
6a00: 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d   && pOp->p1<=(p-
6a10: 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
6a20: 72 73 6f 72 29 20 29 3b 0a 20 20 70 49 6e 31 20  rsor) );.  pIn1 
6a30: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
6a40: 3b 0a 20 20 61 73 73 65 72 74 28 20 56 64 62 65  ;.  assert( Vdbe
6a50: 4d 65 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31 29  MemDynamic(pIn1)
6a60: 3d 3d 30 20 29 3b 0a 20 20 6d 65 6d 41 62 6f 75  ==0 );.  memAbou
6a70: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e  tToChange(p, pIn
6a80: 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67  1);.  pIn1->flag
6a90: 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70  s = MEM_Int;.  p
6aa0: 49 6e 31 2d 3e 75 2e 69 20 3d 20 28 69 6e 74 29  In1->u.i = (int)
6ab0: 28 70 4f 70 2d 61 4f 70 29 3b 0a 20 20 52 45 47  (pOp-aOp);.  REG
6ac0: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
6ad0: 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 0a 20 20 2f  >p1, pIn1);..  /
6ae0: 2a 20 4d 6f 73 74 20 6a 75 6d 70 20 6f 70 65 72  * Most jump oper
6af0: 61 74 69 6f 6e 73 20 64 6f 20 61 20 67 6f 74 6f  ations do a goto
6b00: 20 74 6f 20 74 68 69 73 20 73 70 6f 74 20 69 6e   to this spot in
6b10: 20 6f 72 64 65 72 20 74 6f 20 75 70 64 61 74 65   order to update
6b20: 0a 20 20 2a 2a 20 74 68 65 20 70 4f 70 20 70 6f  .  ** the pOp po
6b30: 69 6e 74 65 72 2e 20 2a 2f 0a 6a 75 6d 70 5f 74  inter. */.jump_t
6b40: 6f 5f 70 32 3a 0a 20 20 70 4f 70 20 3d 20 26 61  o_p2:.  pOp = &a
6b50: 4f 70 5b 70 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b  Op[pOp->p2 - 1];
6b60: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
6b70: 4f 70 63 6f 64 65 3a 20 20 52 65 74 75 72 6e 20  Opcode:  Return 
6b80: 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
6b90: 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 6e 65 78   Jump to the nex
6ba0: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 66  t instruction af
6bb0: 74 65 72 20 74 68 65 20 61 64 64 72 65 73 73 20  ter the address 
6bc0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  in register P1. 
6bd0: 20 41 66 74 65 72 0a 2a 2a 20 74 68 65 20 6a 75   After.** the ju
6be0: 6d 70 2c 20 72 65 67 69 73 74 65 72 20 50 31 20  mp, register P1 
6bf0: 62 65 63 6f 6d 65 73 20 75 6e 64 65 66 69 6e 65  becomes undefine
6c00: 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  d..*/.case OP_Re
6c10: 74 75 72 6e 3a 20 7b 20 20 20 20 20 20 20 20 20  turn: {         
6c20: 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49    /* in1 */.  pI
6c30: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
6c40: 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
6c50: 49 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f  In1->flags==MEM_
6c60: 49 6e 74 20 29 3b 0a 20 20 70 4f 70 20 3d 20 26  Int );.  pOp = &
6c70: 61 4f 70 5b 70 49 6e 31 2d 3e 75 2e 69 5d 3b 0a  aOp[pIn1->u.i];.
6c80: 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20    pIn1->flags = 
6c90: 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20  MEM_Undefined;. 
6ca0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
6cb0: 63 6f 64 65 3a 20 49 6e 69 74 43 6f 72 6f 75 74  code: InitCorout
6cc0: 69 6e 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ine P1 P2 P3 * *
6cd0: 0a 2a 2a 0a 2a 2a 20 53 65 74 20 75 70 20 72 65  .**.** Set up re
6ce0: 67 69 73 74 65 72 20 50 31 20 73 6f 20 74 68 61  gister P1 so tha
6cf0: 74 20 69 74 20 77 69 6c 6c 20 59 69 65 6c 64 20  t it will Yield 
6d00: 74 6f 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65  to the coroutine
6d10: 0a 2a 2a 20 6c 6f 63 61 74 65 64 20 61 74 20 61  .** located at a
6d20: 64 64 72 65 73 73 20 50 33 2e 0a 2a 2a 0a 2a 2a  ddress P3..**.**
6d30: 20 49 66 20 50 32 21 3d 30 20 74 68 65 6e 20 74   If P2!=0 then t
6d40: 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 69 6d 70  he coroutine imp
6d50: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69 6d 6d 65  lementation imme
6d60: 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 73 0a  diately follows.
6d70: 2a 2a 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20  ** this opcode. 
6d80: 20 53 6f 20 6a 75 6d 70 20 6f 76 65 72 20 74 68   So jump over th
6d90: 65 20 63 6f 72 6f 75 74 69 6e 65 20 69 6d 70 6c  e coroutine impl
6da0: 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 0a 2a 2a  ementation to.**
6db0: 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a 0a   address P2..**.
6dc0: 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 45 6e 64  ** See also: End
6dd0: 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73  Coroutine.*/.cas
6de0: 65 20 4f 50 5f 49 6e 69 74 43 6f 72 6f 75 74 69  e OP_InitCorouti
6df0: 6e 65 3a 20 7b 20 20 20 20 20 2f 2a 20 6a 75 6d  ne: {     /* jum
6e00: 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  p */.  assert( p
6e10: 4f 70 2d 3e 70 31 3e 30 20 26 26 20 20 70 4f 70  Op->p1>0 &&  pOp
6e20: 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ->p1<=(p->nMem+1
6e30: 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29   - p->nCursor) )
6e40: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
6e50: 3e 70 32 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p2>=0 && pOp->p
6e60: 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 61 73  2<p->nOp );.  as
6e70: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30  sert( pOp->p3>=0
6e80: 20 26 26 20 70 4f 70 2d 3e 70 33 3c 70 2d 3e 6e   && pOp->p3<p->n
6e90: 4f 70 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26  Op );.  pOut = &
6ea0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
6eb0: 20 61 73 73 65 72 74 28 20 21 56 64 62 65 4d 65   assert( !VdbeMe
6ec0: 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74 29 20 29  mDynamic(pOut) )
6ed0: 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
6ee0: 70 4f 70 2d 3e 70 33 20 2d 20 31 3b 0a 20 20 70  pOp->p3 - 1;.  p
6ef0: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
6f00: 5f 49 6e 74 3b 0a 20 20 69 66 28 20 70 4f 70 2d  _Int;.  if( pOp-
6f10: 3e 70 32 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  >p2 ) goto jump_
6f20: 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a  to_p2;.  break;.
6f30: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 45  }../* Opcode:  E
6f40: 6e 64 43 6f 72 6f 75 74 69 6e 65 20 50 31 20 2a  ndCoroutine P1 *
6f50: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65   * * *.**.** The
6f60: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 20   instruction at 
6f70: 74 68 65 20 61 64 64 72 65 73 73 20 69 6e 20 72  the address in r
6f80: 65 67 69 73 74 65 72 20 50 31 20 69 73 20 61 20  egister P1 is a 
6f90: 59 69 65 6c 64 2e 0a 2a 2a 20 4a 75 6d 70 20 74  Yield..** Jump t
6fa0: 6f 20 74 68 65 20 50 32 20 70 61 72 61 6d 65 74  o the P2 paramet
6fb0: 65 72 20 6f 66 20 74 68 61 74 20 59 69 65 6c 64  er of that Yield
6fc0: 2e 0a 2a 2a 20 41 66 74 65 72 20 74 68 65 20 6a  ..** After the j
6fd0: 75 6d 70 2c 20 72 65 67 69 73 74 65 72 20 50 31  ump, register P1
6fe0: 20 62 65 63 6f 6d 65 73 20 75 6e 64 65 66 69 6e   becomes undefin
6ff0: 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ed..**.** See al
7000: 73 6f 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e  so: InitCoroutin
7010: 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 6e 64  e.*/.case OP_End
7020: 43 6f 72 6f 75 74 69 6e 65 3a 20 7b 20 20 20 20  Coroutine: {    
7030: 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f         /* in1 */
7040: 0a 20 20 56 64 62 65 4f 70 20 2a 70 43 61 6c 6c  .  VdbeOp *pCall
7050: 65 72 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  er;.  pIn1 = &aM
7060: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
7070: 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
7080: 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  gs==MEM_Int );. 
7090: 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 75   assert( pIn1->u
70a0: 2e 69 3e 3d 30 20 26 26 20 70 49 6e 31 2d 3e 75  .i>=0 && pIn1->u
70b0: 2e 69 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70  .i<p->nOp );.  p
70c0: 43 61 6c 6c 65 72 20 3d 20 26 61 4f 70 5b 70 49  Caller = &aOp[pI
70d0: 6e 31 2d 3e 75 2e 69 5d 3b 0a 20 20 61 73 73 65  n1->u.i];.  asse
70e0: 72 74 28 20 70 43 61 6c 6c 65 72 2d 3e 6f 70 63  rt( pCaller->opc
70f0: 6f 64 65 3d 3d 4f 50 5f 59 69 65 6c 64 20 29 3b  ode==OP_Yield );
7100: 0a 20 20 61 73 73 65 72 74 28 20 70 43 61 6c 6c  .  assert( pCall
7110: 65 72 2d 3e 70 32 3e 3d 30 20 26 26 20 70 43 61  er->p2>=0 && pCa
7120: 6c 6c 65 72 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20  ller->p2<p->nOp 
7130: 29 3b 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b  );.  pOp = &aOp[
7140: 70 43 61 6c 6c 65 72 2d 3e 70 32 20 2d 20 31 5d  pCaller->p2 - 1]
7150: 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  ;.  pIn1->flags 
7160: 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b  = MEM_Undefined;
7170: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
7180: 4f 70 63 6f 64 65 3a 20 20 59 69 65 6c 64 20 50  Opcode:  Yield P
7190: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
71a0: 20 53 77 61 70 20 74 68 65 20 70 72 6f 67 72 61   Swap the progra
71b0: 6d 20 63 6f 75 6e 74 65 72 20 77 69 74 68 20 74  m counter with t
71c0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
71d0: 73 74 65 72 20 50 31 2e 20 20 54 68 69 73 0a 2a  ster P1.  This.*
71e0: 2a 20 68 61 73 20 74 68 65 20 65 66 66 65 63 74  * has the effect
71f0: 20 6f 66 20 79 69 65 6c 64 69 6e 67 20 74 6f 20   of yielding to 
7200: 61 20 63 6f 72 6f 75 74 69 6e 65 2e 0a 2a 2a 0a  a coroutine..**.
7210: 2a 2a 20 49 66 20 74 68 65 20 63 6f 72 6f 75 74  ** If the corout
7220: 69 6e 65 20 74 68 61 74 20 69 73 20 6c 61 75 6e  ine that is laun
7230: 63 68 65 64 20 62 79 20 74 68 69 73 20 69 6e 73  ched by this ins
7240: 74 72 75 63 74 69 6f 6e 20 65 6e 64 73 20 77 69  truction ends wi
7250: 74 68 0a 2a 2a 20 59 69 65 6c 64 20 6f 72 20 52  th.** Yield or R
7260: 65 74 75 72 6e 20 74 68 65 6e 20 63 6f 6e 74 69  eturn then conti
7270: 6e 75 65 20 74 6f 20 74 68 65 20 6e 65 78 74 20  nue to the next 
7280: 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75  instruction.  Bu
7290: 74 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 72 6f  t if.** the coro
72a0: 75 74 69 6e 65 20 6c 61 75 6e 63 68 65 64 20 62  utine launched b
72b0: 79 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  y this instructi
72c0: 6f 6e 20 65 6e 64 73 20 77 69 74 68 0a 2a 2a 20  on ends with.** 
72d0: 45 6e 64 43 6f 72 6f 75 74 69 6e 65 2c 20 74 68  EndCoroutine, th
72e0: 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 20 72 61  en jump to P2 ra
72f0: 74 68 65 72 20 74 68 61 6e 20 63 6f 6e 74 69 6e  ther than contin
7300: 75 69 6e 67 20 77 69 74 68 20 74 68 65 0a 2a 2a  uing with the.**
7310: 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
7320: 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  n..**.** See als
7330: 6f 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65  o: InitCoroutine
7340: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 59 69 65 6c  .*/.case OP_Yiel
7350: 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  d: {            
7360: 2f 2a 20 69 6e 31 2c 20 6a 75 6d 70 20 2a 2f 0a  /* in1, jump */.
7370: 20 20 69 6e 74 20 70 63 44 65 73 74 3b 0a 20 20    int pcDest;.  
7380: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
7390: 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
73a0: 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28   VdbeMemDynamic(
73b0: 70 49 6e 31 29 3d 3d 30 20 29 3b 0a 20 20 70 49  pIn1)==0 );.  pI
73c0: 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  n1->flags = MEM_
73d0: 49 6e 74 3b 0a 20 20 70 63 44 65 73 74 20 3d 20  Int;.  pcDest = 
73e0: 28 69 6e 74 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a  (int)pIn1->u.i;.
73f0: 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 28 69    pIn1->u.i = (i
7400: 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a  nt)(pOp - aOp);.
7410: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
7420: 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b  (pOp->p1, pIn1);
7430: 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 63  .  pOp = &aOp[pc
7440: 44 65 73 74 5d 3b 0a 20 20 62 72 65 61 6b 3b 0a  Dest];.  break;.
7450: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48  }../* Opcode:  H
7460: 61 6c 74 49 66 4e 75 6c 6c 20 20 50 31 20 50 32  altIfNull  P1 P2
7470: 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
7480: 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 33 5d 3d  opsis: if r[P3]=
7490: 6e 75 6c 6c 20 68 61 6c 74 0a 2a 2a 0a 2a 2a 20  null halt.**.** 
74a0: 43 68 65 63 6b 20 74 68 65 20 76 61 6c 75 65 20  Check the value 
74b0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 20  in register P3. 
74c0: 20 49 66 20 69 74 20 69 73 20 4e 55 4c 4c 20 74   If it is NULL t
74d0: 68 65 6e 20 48 61 6c 74 20 75 73 69 6e 67 0a 2a  hen Halt using.*
74e0: 2a 20 70 61 72 61 6d 65 74 65 72 20 50 31 2c 20  * parameter P1, 
74f0: 50 32 2c 20 61 6e 64 20 50 34 20 61 73 20 69 66  P2, and P4 as if
7500: 20 74 68 69 73 20 77 65 72 65 20 61 20 48 61 6c   this were a Hal
7510: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  t instruction.  
7520: 49 66 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20  If the.** value 
7530: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69  in register P3 i
7540: 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e  s not NULL, then
7550: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73   this routine is
7560: 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2a 20 54 68 65   a no-op..** The
7570: 20 50 35 20 70 61 72 61 6d 65 74 65 72 20 73 68   P5 parameter sh
7580: 6f 75 6c 64 20 62 65 20 31 2e 0a 2a 2f 0a 63 61  ould be 1..*/.ca
7590: 73 65 20 4f 50 5f 48 61 6c 74 49 66 4e 75 6c 6c  se OP_HaltIfNull
75a0: 3a 20 7b 20 20 20 20 20 20 2f 2a 20 69 6e 33 20  : {      /* in3 
75b0: 2a 2f 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65  */.  pIn3 = &aMe
75c0: 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66  m[pOp->p3];.  if
75d0: 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  ( (pIn3->flags &
75e0: 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 20   MEM_Null)==0 ) 
75f0: 62 72 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c  break;.  /* Fall
7600: 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50   through into OP
7610: 5f 48 61 6c 74 20 2a 2f 0a 7d 0a 0a 2f 2a 20 4f  _Halt */.}../* O
7620: 70 63 6f 64 65 3a 20 20 48 61 6c 74 20 50 31 20  pcode:  Halt P1 
7630: 50 32 20 2a 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  P2 * P4 P5.**.**
7640: 20 45 78 69 74 20 69 6d 6d 65 64 69 61 74 65 6c   Exit immediatel
7650: 79 2e 20 20 41 6c 6c 20 6f 70 65 6e 20 63 75 72  y.  All open cur
7660: 73 6f 72 73 2c 20 65 74 63 20 61 72 65 20 63 6c  sors, etc are cl
7670: 6f 73 65 64 0a 2a 2a 20 61 75 74 6f 6d 61 74 69  osed.** automati
7680: 63 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 50 31 20  cally..**.** P1 
7690: 69 73 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f  is the result co
76a0: 64 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73  de returned by s
76b0: 71 6c 69 74 65 33 5f 65 78 65 63 28 29 2c 20 73  qlite3_exec(), s
76c0: 71 6c 69 74 65 33 5f 72 65 73 65 74 28 29 2c 0a  qlite3_reset(),.
76d0: 2a 2a 20 6f 72 20 73 71 6c 69 74 65 33 5f 66 69  ** or sqlite3_fi
76e0: 6e 61 6c 69 7a 65 28 29 2e 20 20 46 6f 72 20 61  nalize().  For a
76f0: 20 6e 6f 72 6d 61 6c 20 68 61 6c 74 2c 20 74 68   normal halt, th
7700: 69 73 20 73 68 6f 75 6c 64 20 62 65 20 53 51 4c  is should be SQL
7710: 49 54 45 5f 4f 4b 20 28 30 29 2e 0a 2a 2a 20 46  ITE_OK (0)..** F
7720: 6f 72 20 65 72 72 6f 72 73 2c 20 69 74 20 63 61  or errors, it ca
7730: 6e 20 62 65 20 73 6f 6d 65 20 6f 74 68 65 72 20  n be some other 
7740: 76 61 6c 75 65 2e 20 20 49 66 20 50 31 21 3d 30  value.  If P1!=0
7750: 20 74 68 65 6e 20 50 32 20 77 69 6c 6c 20 64 65   then P2 will de
7760: 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68  termine.** wheth
7770: 65 72 20 6f 72 20 6e 6f 74 20 74 6f 20 72 6f 6c  er or not to rol
7780: 6c 62 61 63 6b 20 74 68 65 20 63 75 72 72 65 6e  lback the curren
7790: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20  t transaction.  
77a0: 44 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 0a  Do not rollback.
77b0: 2a 2a 20 69 66 20 50 32 3d 3d 4f 45 5f 46 61 69  ** if P2==OE_Fai
77c0: 6c 2e 20 44 6f 20 74 68 65 20 72 6f 6c 6c 62 61  l. Do the rollba
77d0: 63 6b 20 69 66 20 50 32 3d 3d 4f 45 5f 52 6f 6c  ck if P2==OE_Rol
77e0: 6c 62 61 63 6b 2e 20 20 49 66 20 50 32 3d 3d 4f  lback.  If P2==O
77f0: 45 5f 41 62 6f 72 74 2c 0a 2a 2a 20 74 68 65 6e  E_Abort,.** then
7800: 20 62 61 63 6b 20 6f 75 74 20 61 6c 6c 20 63 68   back out all ch
7810: 61 6e 67 65 73 20 74 68 61 74 20 68 61 76 65 20  anges that have 
7820: 6f 63 63 75 72 72 65 64 20 64 75 72 69 6e 67 20  occurred during 
7830: 74 68 69 73 20 65 78 65 63 75 74 69 6f 6e 20 6f  this execution o
7840: 66 20 74 68 65 0a 2a 2a 20 56 44 42 45 2c 20 62  f the.** VDBE, b
7850: 75 74 20 64 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61  ut do not rollba
7860: 63 6b 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  ck the transacti
7870: 6f 6e 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  on. .**.** If P4
7880: 20 69 73 20 6e 6f 74 20 6e 75 6c 6c 20 74 68 65   is not null the
7890: 6e 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f 72  n it is an error
78a0: 20 6d 65 73 73 61 67 65 20 73 74 72 69 6e 67 2e   message string.
78b0: 0a 2a 2a 0a 2a 2a 20 50 35 20 69 73 20 61 20 76  .**.** P5 is a v
78c0: 61 6c 75 65 20 62 65 74 77 65 65 6e 20 30 20 61  alue between 0 a
78d0: 6e 64 20 34 2c 20 69 6e 63 6c 75 73 69 76 65 2c  nd 4, inclusive,
78e0: 20 74 68 61 74 20 6d 6f 64 69 66 69 65 73 20 74   that modifies t
78f0: 68 65 20 50 34 20 73 74 72 69 6e 67 2e 0a 2a 2a  he P4 string..**
7900: 0a 2a 2a 20 20 20 20 30 3a 20 20 28 6e 6f 20 63  .**    0:  (no c
7910: 68 61 6e 67 65 29 0a 2a 2a 20 20 20 20 31 3a 20  hange).**    1: 
7920: 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 74 72 61   NOT NULL contra
7930: 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a  int failed: P4.*
7940: 2a 20 20 20 20 32 3a 20 20 55 4e 49 51 55 45 20  *    2:  UNIQUE 
7950: 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65  constraint faile
7960: 64 3a 20 50 34 0a 2a 2a 20 20 20 20 33 3a 20 20  d: P4.**    3:  
7970: 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74  CHECK constraint
7980: 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20   failed: P4.**  
7990: 20 20 34 3a 20 20 46 4f 52 45 49 47 4e 20 4b 45    4:  FOREIGN KE
79a0: 59 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69  Y constraint fai
79b0: 6c 65 64 3a 20 50 34 0a 2a 2a 0a 2a 2a 20 49 66  led: P4.**.** If
79c0: 20 50 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f 20   P5 is not zero 
79d0: 61 6e 64 20 50 34 20 69 73 20 4e 55 4c 4c 2c 20  and P4 is NULL, 
79e0: 74 68 65 6e 20 65 76 65 72 79 74 68 69 6e 67 20  then everything 
79f0: 61 66 74 65 72 20 74 68 65 20 22 3a 22 20 69 73  after the ":" is
7a00: 0a 2a 2a 20 6f 6d 69 74 74 65 64 2e 0a 2a 2a 0a  .** omitted..**.
7a10: 2a 2a 20 54 68 65 72 65 20 69 73 20 61 6e 20 69  ** There is an i
7a20: 6d 70 6c 69 65 64 20 22 48 61 6c 74 20 30 20 30  mplied "Halt 0 0
7a30: 20 30 22 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   0" instruction 
7a40: 69 6e 73 65 72 74 65 64 20 61 74 20 74 68 65 20  inserted at the 
7a50: 76 65 72 79 20 65 6e 64 20 6f 66 0a 2a 2a 20 65  very end of.** e
7a60: 76 65 72 79 20 70 72 6f 67 72 61 6d 2e 20 20 53  very program.  S
7a70: 6f 20 61 20 6a 75 6d 70 20 70 61 73 74 20 74 68  o a jump past th
7a80: 65 20 6c 61 73 74 20 69 6e 73 74 72 75 63 74 69  e last instructi
7a90: 6f 6e 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61  on of the progra
7aa0: 6d 0a 2a 2a 20 69 73 20 74 68 65 20 73 61 6d 65  m.** is the same
7ab0: 20 61 73 20 65 78 65 63 75 74 69 6e 67 20 48 61   as executing Ha
7ac0: 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48  lt..*/.case OP_H
7ad0: 61 6c 74 3a 20 7b 0a 20 20 56 64 62 65 46 72 61  alt: {.  VdbeFra
7ae0: 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69 6e  me *pFrame;.  in
7af0: 74 20 70 63 78 3b 0a 0a 20 20 70 63 78 20 3d 20  t pcx;..  pcx = 
7b00: 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29  (int)(pOp - aOp)
7b10: 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d  ;.  if( pOp->p1=
7b20: 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70 2d  =SQLITE_OK && p-
7b30: 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 2f  >pFrame ){.    /
7b40: 2a 20 48 61 6c 74 20 74 68 65 20 73 75 62 2d 70  * Halt the sub-p
7b50: 72 6f 67 72 61 6d 2e 20 52 65 74 75 72 6e 20 63  rogram. Return c
7b60: 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20 70 61  ontrol to the pa
7b70: 72 65 6e 74 20 66 72 61 6d 65 2e 20 2a 2f 0a 20  rent frame. */. 
7b80: 20 20 20 70 46 72 61 6d 65 20 3d 20 70 2d 3e 70     pFrame = p->p
7b90: 46 72 61 6d 65 3b 0a 20 20 20 20 70 2d 3e 70 46  Frame;.    p->pF
7ba0: 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 2d 3e 70  rame = pFrame->p
7bb0: 50 61 72 65 6e 74 3b 0a 20 20 20 20 70 2d 3e 6e  Parent;.    p->n
7bc0: 46 72 61 6d 65 2d 2d 3b 0a 20 20 20 20 73 71 6c  Frame--;.    sql
7bd0: 69 74 65 33 56 64 62 65 53 65 74 43 68 61 6e 67  ite3VdbeSetChang
7be0: 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67  es(db, p->nChang
7bf0: 65 29 3b 0a 20 20 20 20 70 63 78 20 3d 20 73 71  e);.    pcx = sq
7c00: 6c 69 74 65 33 56 64 62 65 46 72 61 6d 65 52 65  lite3VdbeFrameRe
7c10: 73 74 6f 72 65 28 70 46 72 61 6d 65 29 3b 0a 20  store(pFrame);. 
7c20: 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d     if( pOp->p2==
7c30: 4f 45 5f 49 67 6e 6f 72 65 20 29 7b 0a 20 20 20  OE_Ignore ){.   
7c40: 20 20 20 2f 2a 20 49 6e 73 74 72 75 63 74 69 6f     /* Instructio
7c50: 6e 20 70 63 78 20 69 73 20 74 68 65 20 4f 50 5f  n pcx is the OP_
7c60: 50 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6e 76  Program that inv
7c70: 6f 6b 65 64 20 74 68 65 20 73 75 62 2d 70 72 6f  oked the sub-pro
7c80: 67 72 61 6d 20 0a 20 20 20 20 20 20 2a 2a 20 63  gram .      ** c
7c90: 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 68  urrently being h
7ca0: 61 6c 74 65 64 2e 20 49 66 20 74 68 65 20 70 32  alted. If the p2
7cb0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20   instruction of 
7cc0: 74 68 69 73 20 4f 50 5f 48 61 6c 74 0a 20 20 20  this OP_Halt.   
7cd0: 20 20 20 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f     ** instructio
7ce0: 6e 20 69 73 20 73 65 74 20 74 6f 20 4f 45 5f 49  n is set to OE_I
7cf0: 67 6e 6f 72 65 2c 20 74 68 65 6e 20 74 68 65 20  gnore, then the 
7d00: 73 75 62 2d 70 72 6f 67 72 61 6d 20 69 73 20 74  sub-program is t
7d10: 68 72 6f 77 69 6e 67 0a 20 20 20 20 20 20 2a 2a  hrowing.      **
7d20: 20 61 6e 20 49 47 4e 4f 52 45 20 65 78 63 65 70   an IGNORE excep
7d30: 74 69 6f 6e 2e 20 49 6e 20 74 68 69 73 20 63 61  tion. In this ca
7d40: 73 65 20 6a 75 6d 70 20 74 6f 20 74 68 65 20 61  se jump to the a
7d50: 64 64 72 65 73 73 20 73 70 65 63 69 66 69 65 64  ddress specified
7d60: 0a 20 20 20 20 20 20 2a 2a 20 61 73 20 74 68 65  .      ** as the
7d70: 20 70 32 20 6f 66 20 74 68 65 20 63 61 6c 6c 69   p2 of the calli
7d80: 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d 2e 20 20  ng OP_Program.  
7d90: 2a 2f 0a 20 20 20 20 20 20 70 63 78 20 3d 20 70  */.      pcx = p
7da0: 2d 3e 61 4f 70 5b 70 63 78 5d 2e 70 32 2d 31 3b  ->aOp[pcx].p2-1;
7db0: 0a 20 20 20 20 7d 0a 20 20 20 20 61 4f 70 20 3d  .    }.    aOp =
7dc0: 20 70 2d 3e 61 4f 70 3b 0a 20 20 20 20 61 4d 65   p->aOp;.    aMe
7dd0: 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20  m = p->aMem;.   
7de0: 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 63 78 5d   pOp = &aOp[pcx]
7df0: 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
7e00: 0a 20 20 70 2d 3e 72 63 20 3d 20 70 4f 70 2d 3e  .  p->rc = pOp->
7e10: 70 31 3b 0a 20 20 70 2d 3e 65 72 72 6f 72 41 63  p1;.  p->errorAc
7e20: 74 69 6f 6e 20 3d 20 28 75 38 29 70 4f 70 2d 3e  tion = (u8)pOp->
7e30: 70 32 3b 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63  p2;.  p->pc = pc
7e40: 78 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  x;.  assert( pOp
7e50: 2d 3e 70 35 3c 3d 34 20 29 3b 0a 20 20 69 66 28  ->p5<=4 );.  if(
7e60: 20 70 2d 3e 72 63 20 29 7b 0a 20 20 20 20 69 66   p->rc ){.    if
7e70: 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20  ( pOp->p5 ){.   
7e80: 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
7e90: 63 68 61 72 20 2a 20 63 6f 6e 73 74 20 61 7a 54  char * const azT
7ea0: 79 70 65 5b 5d 20 3d 20 7b 20 22 4e 4f 54 20 4e  ype[] = { "NOT N
7eb0: 55 4c 4c 22 2c 20 22 55 4e 49 51 55 45 22 2c 20  ULL", "UNIQUE", 
7ec0: 22 43 48 45 43 4b 22 2c 0a 20 20 20 20 20 20 20  "CHECK",.       
7ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ef0: 20 20 20 20 20 20 22 46 4f 52 45 49 47 4e 20 4b        "FOREIGN K
7f00: 45 59 22 20 7d 3b 0a 20 20 20 20 20 20 74 65 73  EY" };.      tes
7f10: 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d  tcase( pOp->p5==
7f20: 31 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63  1 );.      testc
7f30: 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 32 20  ase( pOp->p5==2 
7f40: 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73  );.      testcas
7f50: 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 33 20 29 3b  e( pOp->p5==3 );
7f60: 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28  .      testcase(
7f70: 20 70 4f 70 2d 3e 70 35 3d 3d 34 20 29 3b 0a 20   pOp->p5==4 );. 
7f80: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
7f90: 45 72 72 6f 72 28 70 2c 20 22 25 73 20 63 6f 6e  Error(p, "%s con
7fa0: 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 22 2c  straint failed",
7fb0: 20 61 7a 54 79 70 65 5b 70 4f 70 2d 3e 70 35 2d   azType[pOp->p5-
7fc0: 31 5d 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  1]);.      if( p
7fd0: 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20  Op->p4.z ){.    
7fe0: 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d      p->zErrMsg =
7ff0: 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28   sqlite3MPrintf(
8000: 64 62 2c 20 22 25 7a 3a 20 25 73 22 2c 20 70 2d  db, "%z: %s", p-
8010: 3e 7a 45 72 72 4d 73 67 2c 20 70 4f 70 2d 3e 70  >zErrMsg, pOp->p
8020: 34 2e 7a 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  4.z);.      }.  
8030: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73    }else{.      s
8040: 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28  qlite3VdbeError(
8050: 70 2c 20 22 25 73 22 2c 20 70 4f 70 2d 3e 70 34  p, "%s", pOp->p4
8060: 2e 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73  .z);.    }.    s
8070: 71 6c 69 74 65 33 5f 6c 6f 67 28 70 4f 70 2d 3e  qlite3_log(pOp->
8080: 70 31 2c 20 22 61 62 6f 72 74 20 61 74 20 25 64  p1, "abort at %d
8090: 20 69 6e 20 5b 25 73 5d 3a 20 25 73 22 2c 20 70   in [%s]: %s", p
80a0: 63 78 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70 2d 3e  cx, p->zSql, p->
80b0: 7a 45 72 72 4d 73 67 29 3b 0a 20 20 7d 0a 20 20  zErrMsg);.  }.  
80c0: 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
80d0: 48 61 6c 74 28 70 29 3b 0a 20 20 61 73 73 65 72  Halt(p);.  asser
80e0: 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55  t( rc==SQLITE_BU
80f0: 53 59 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45  SY || rc==SQLITE
8100: 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54  _OK || rc==SQLIT
8110: 45 5f 45 52 52 4f 52 20 29 3b 0a 20 20 69 66 28  E_ERROR );.  if(
8120: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59   rc==SQLITE_BUSY
8130: 20 29 7b 0a 20 20 20 20 70 2d 3e 72 63 20 3d 20   ){.    p->rc = 
8140: 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d  SQLITE_BUSY;.  }
8150: 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
8160: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
8170: 7c 7c 20 28 70 2d 3e 72 63 26 30 78 66 66 29 3d  || (p->rc&0xff)=
8180: 3d 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49  =SQLITE_CONSTRAI
8190: 4e 54 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  NT );.    assert
81a0: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
81b0: 7c 7c 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64  || db->nDeferred
81c0: 43 6f 6e 73 3e 30 20 7c 7c 20 64 62 2d 3e 6e 44  Cons>0 || db->nD
81d0: 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3e 30  eferredImmCons>0
81e0: 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 70 2d 3e   );.    rc = p->
81f0: 72 63 20 3f 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc ? SQLITE_ERRO
8200: 52 20 3a 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b  R : SQLITE_DONE;
8210: 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65  .  }.  goto vdbe
8220: 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f  _return;.}../* O
8230: 70 63 6f 64 65 3a 20 49 6e 74 65 67 65 72 20 50  pcode: Integer P
8240: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
8250: 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 31  nopsis: r[P2]=P1
8260: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 33 32 2d 62 69  .**.** The 32-bi
8270: 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  t integer value 
8280: 50 31 20 69 73 20 77 72 69 74 74 65 6e 20 69 6e  P1 is written in
8290: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
82a0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67  */.case OP_Integ
82b0: 65 72 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a  er: {         /*
82c0: 20 6f 75 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20   out2 */.  pOut 
82d0: 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
82e0: 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74  (p, pOp);.  pOut
82f0: 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 31 3b  ->u.i = pOp->p1;
8300: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
8310: 4f 70 63 6f 64 65 3a 20 49 6e 74 36 34 20 2a 20  Opcode: Int64 * 
8320: 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  P2 * P4 *.** Syn
8330: 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34 0a  opsis: r[P2]=P4.
8340: 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
8350: 69 6e 74 65 72 20 74 6f 20 61 20 36 34 2d 62 69  inter to a 64-bi
8360: 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e  t integer value.
8370: 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20 76  .** Write that v
8380: 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74  alue into regist
8390: 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
83a0: 50 5f 49 6e 74 36 34 3a 20 7b 20 20 20 20 20 20  P_Int64: {      
83b0: 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
83c0: 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
83d0: 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
83e0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
83f0: 70 34 2e 70 49 36 34 21 3d 30 20 29 3b 0a 20 20  p4.pI64!=0 );.  
8400: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 2a 70 4f 70  pOut->u.i = *pOp
8410: 2d 3e 70 34 2e 70 49 36 34 3b 0a 20 20 62 72 65  ->p4.pI64;.  bre
8420: 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53  ak;.}..#ifndef S
8430: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
8440: 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63  ING_POINT./* Opc
8450: 6f 64 65 3a 20 52 65 61 6c 20 2a 20 50 32 20 2a  ode: Real * P2 *
8460: 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
8470: 73 3a 20 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a  s: r[P2]=P4.**.*
8480: 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
8490: 72 20 74 6f 20 61 20 36 34 2d 62 69 74 20 66 6c  r to a 64-bit fl
84a0: 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c  oating point val
84b0: 75 65 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 61  ue..** Write tha
84c0: 74 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67  t value into reg
84d0: 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73  ister P2..*/.cas
84e0: 65 20 4f 50 5f 52 65 61 6c 3a 20 7b 20 20 20 20  e OP_Real: {    
84f0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
8500: 61 73 20 54 4b 5f 46 4c 4f 41 54 2c 20 6f 75 74  as TK_FLOAT, out
8510: 32 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 6f 75  2 */.  pOut = ou
8520: 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
8530: 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c  pOp);.  pOut->fl
8540: 61 67 73 20 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a  ags = MEM_Real;.
8550: 20 20 61 73 73 65 72 74 28 20 21 73 71 6c 69 74    assert( !sqlit
8560: 65 33 49 73 4e 61 4e 28 2a 70 4f 70 2d 3e 70 34  e3IsNaN(*pOp->p4
8570: 2e 70 52 65 61 6c 29 20 29 3b 0a 20 20 70 4f 75  .pReal) );.  pOu
8580: 74 2d 3e 75 2e 72 20 3d 20 2a 70 4f 70 2d 3e 70  t->u.r = *pOp->p
8590: 34 2e 70 52 65 61 6c 3b 0a 20 20 62 72 65 61 6b  4.pReal;.  break
85a0: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f  ;.}.#endif../* O
85b0: 70 63 6f 64 65 3a 20 53 74 72 69 6e 67 38 20 2a  pcode: String8 *
85c0: 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79   P2 * P4 *.** Sy
85d0: 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 27 50  nopsis: r[P2]='P
85e0: 34 27 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e  4'.**.** P4 poin
85f0: 74 73 20 74 6f 20 61 20 6e 75 6c 20 74 65 72 6d  ts to a nul term
8600: 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73 74 72  inated UTF-8 str
8610: 69 6e 67 2e 20 54 68 69 73 20 6f 70 63 6f 64 65  ing. This opcode
8620: 20 69 73 20 74 72 61 6e 73 66 6f 72 6d 65 64 20   is transformed 
8630: 0a 2a 2a 20 69 6e 74 6f 20 61 20 53 74 72 69 6e  .** into a Strin
8640: 67 20 6f 70 63 6f 64 65 20 62 65 66 6f 72 65 20  g opcode before 
8650: 69 74 20 69 73 20 65 78 65 63 75 74 65 64 20 66  it is executed f
8660: 6f 72 20 74 68 65 20 66 69 72 73 74 20 74 69 6d  or the first tim
8670: 65 2e 20 20 44 75 72 69 6e 67 0a 2a 2a 20 74 68  e.  During.** th
8680: 69 73 20 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f  is transformatio
8690: 6e 2c 20 74 68 65 20 6c 65 6e 67 74 68 20 6f 66  n, the length of
86a0: 20 73 74 72 69 6e 67 20 50 34 20 69 73 20 63 6f   string P4 is co
86b0: 6d 70 75 74 65 64 20 61 6e 64 20 73 74 6f 72 65  mputed and store
86c0: 64 0a 2a 2a 20 61 73 20 74 68 65 20 50 31 20 70  d.** as the P1 p
86d0: 61 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a 63 61 73  arameter..*/.cas
86e0: 65 20 4f 50 5f 53 74 72 69 6e 67 38 3a 20 7b 20  e OP_String8: { 
86f0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
8700: 61 73 20 54 4b 5f 53 54 52 49 4e 47 2c 20 6f 75  as TK_STRING, ou
8710: 74 32 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  t2 */.  assert( 
8720: 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a  pOp->p4.z!=0 );.
8730: 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
8740: 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
8750: 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d  .  pOp->opcode =
8760: 20 4f 50 5f 53 74 72 69 6e 67 3b 0a 20 20 70 4f   OP_String;.  pO
8770: 70 2d 3e 70 31 20 3d 20 73 71 6c 69 74 65 33 53  p->p1 = sqlite3S
8780: 74 72 6c 65 6e 33 30 28 70 4f 70 2d 3e 70 34 2e  trlen30(pOp->p4.
8790: 7a 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  z);..#ifndef SQL
87a0: 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20  ITE_OMIT_UTF16. 
87b0: 20 69 66 28 20 65 6e 63 6f 64 69 6e 67 21 3d 53   if( encoding!=S
87c0: 51 4c 49 54 45 5f 55 54 46 38 20 29 7b 0a 20 20  QLITE_UTF8 ){.  
87d0: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
87e0: 62 65 4d 65 6d 53 65 74 53 74 72 28 70 4f 75 74  beMemSetStr(pOut
87f0: 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 2d 31 2c  , pOp->p4.z, -1,
8800: 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51   SQLITE_UTF8, SQ
8810: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
8820: 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
8830: 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53  LITE_OK || rc==S
8840: 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20 29 3b 0a  QLITE_TOOBIG );.
8850: 20 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f      if( SQLITE_O
8860: 4b 21 3d 73 71 6c 69 74 65 33 56 64 62 65 43 68  K!=sqlite3VdbeCh
8870: 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75  angeEncoding(pOu
8880: 74 2c 20 65 6e 63 6f 64 69 6e 67 29 20 29 20 67  t, encoding) ) g
8890: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20  oto no_mem;.    
88a0: 61 73 73 65 72 74 28 20 70 4f 75 74 2d 3e 73 7a  assert( pOut->sz
88b0: 4d 61 6c 6c 6f 63 3e 30 20 26 26 20 70 4f 75 74  Malloc>0 && pOut
88c0: 2d 3e 7a 4d 61 6c 6c 6f 63 3d 3d 70 4f 75 74 2d  ->zMalloc==pOut-
88d0: 3e 7a 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  >z );.    assert
88e0: 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63  ( VdbeMemDynamic
88f0: 28 70 4f 75 74 29 3d 3d 30 20 29 3b 0a 20 20 20  (pOut)==0 );.   
8900: 20 70 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 20   pOut->szMalloc 
8910: 3d 20 30 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  = 0;.    pOut->f
8920: 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 53 74 61 74  lags |= MEM_Stat
8930: 69 63 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d  ic;.    if( pOp-
8940: 3e 70 34 74 79 70 65 3d 3d 50 34 5f 44 59 4e 41  >p4type==P4_DYNA
8950: 4d 49 43 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  MIC ){.      sql
8960: 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70  ite3DbFree(db, p
8970: 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d  Op->p4.z);.    }
8980: 0a 20 20 20 20 70 4f 70 2d 3e 70 34 74 79 70 65  .    pOp->p4type
8990: 20 3d 20 50 34 5f 44 59 4e 41 4d 49 43 3b 0a 20   = P4_DYNAMIC;. 
89a0: 20 20 20 70 4f 70 2d 3e 70 34 2e 7a 20 3d 20 70     pOp->p4.z = p
89b0: 4f 75 74 2d 3e 7a 3b 0a 20 20 20 20 70 4f 70 2d  Out->z;.    pOp-
89c0: 3e 70 31 20 3d 20 70 4f 75 74 2d 3e 6e 3b 0a 20  >p1 = pOut->n;. 
89d0: 20 7d 0a 20 20 74 65 73 74 63 61 73 65 28 20 72   }.  testcase( r
89e0: 63 3d 3d 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47  c==SQLITE_TOOBIG
89f0: 20 29 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28   );.#endif.  if(
8a00: 20 70 4f 70 2d 3e 70 31 3e 64 62 2d 3e 61 4c 69   pOp->p1>db->aLi
8a10: 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  mit[SQLITE_LIMIT
8a20: 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20  _LENGTH] ){.    
8a30: 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
8a40: 7d 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d  }.  assert( rc==
8a50: 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 2f  SQLITE_OK );.  /
8a60: 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  * Fall through t
8a70: 6f 20 74 68 65 20 6e 65 78 74 20 63 61 73 65 2c  o the next case,
8a80: 20 4f 50 5f 53 74 72 69 6e 67 20 2a 2f 0a 7d 0a   OP_String */.}.
8a90: 20 20 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74    ./* Opcode: St
8aa0: 72 69 6e 67 20 50 31 20 50 32 20 50 33 20 50 34  ring P1 P2 P3 P4
8ab0: 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
8ac0: 20 72 5b 50 32 5d 3d 27 50 34 27 20 28 6c 65 6e   r[P2]='P4' (len
8ad0: 3d 50 31 29 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73  =P1).**.** The s
8ae0: 74 72 69 6e 67 20 76 61 6c 75 65 20 50 34 20 6f  tring value P4 o
8af0: 66 20 6c 65 6e 67 74 68 20 50 31 20 28 62 79 74  f length P1 (byt
8b00: 65 73 29 20 69 73 20 73 74 6f 72 65 64 20 69 6e  es) is stored in
8b10: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
8b20: 0a 2a 2a 20 49 66 20 50 33 20 69 73 20 6e 6f 74  .** If P3 is not
8b30: 20 7a 65 72 6f 20 61 6e 64 20 74 68 65 20 63 6f   zero and the co
8b40: 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
8b50: 72 20 50 33 20 69 73 20 65 71 75 61 6c 20 74 6f  r P3 is equal to
8b60: 20 50 35 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65   P5, then.** the
8b70: 20 64 61 74 61 74 79 70 65 20 6f 66 20 74 68 65   datatype of the
8b80: 20 72 65 67 69 73 74 65 72 20 50 32 20 69 73 20   register P2 is 
8b90: 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 42 4c 4f  converted to BLO
8ba0: 42 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e 74 20  B.  The content 
8bb0: 69 73 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 73  is.** the same s
8bc0: 65 71 75 65 6e 63 65 20 6f 66 20 62 79 74 65 73  equence of bytes
8bd0: 2c 20 69 74 20 69 73 20 6d 65 72 65 6c 79 20 69  , it is merely i
8be0: 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 61 20  nterpreted as a 
8bf0: 42 4c 4f 42 20 69 6e 73 74 65 61 64 0a 2a 2a 20  BLOB instead.** 
8c00: 6f 66 20 61 20 73 74 72 69 6e 67 2c 20 61 73 20  of a string, as 
8c10: 69 66 20 69 74 20 68 61 64 20 62 65 65 6e 20 43  if it had been C
8c20: 41 53 54 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  AST.  In other w
8c30: 6f 72 64 73 3a 0a 2a 2a 0a 2a 2a 20 69 66 28 20  ords:.**.** if( 
8c40: 50 33 21 3d 30 20 61 6e 64 20 72 65 67 5b 50 33  P3!=0 and reg[P3
8c50: 5d 3d 3d 50 35 20 29 20 72 65 67 5b 50 32 5d 20  ]==P5 ) reg[P2] 
8c60: 3a 3d 20 43 41 53 54 28 72 65 67 5b 50 32 5d 20  := CAST(reg[P2] 
8c70: 61 73 20 42 4c 4f 42 29 0a 2a 2f 0a 63 61 73 65  as BLOB).*/.case
8c80: 20 4f 50 5f 53 74 72 69 6e 67 3a 20 7b 20 20 20   OP_String: {   
8c90: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
8ca0: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
8cb0: 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f  >p4.z!=0 );.  pO
8cc0: 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
8cd0: 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70  ase(p, pOp);.  p
8ce0: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
8cf0: 5f 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c  _Str|MEM_Static|
8d00: 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74  MEM_Term;.  pOut
8d10: 2d 3e 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b  ->z = pOp->p4.z;
8d20: 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 70 4f 70  .  pOut->n = pOp
8d30: 2d 3e 70 31 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e  ->p1;.  pOut->en
8d40: 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20  c = encoding;.  
8d50: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
8d60: 49 5a 45 28 70 4f 75 74 29 3b 0a 23 69 66 6e 64  IZE(pOut);.#ifnd
8d70: 65 66 20 53 51 4c 49 54 45 5f 4c 49 4b 45 5f 44  ef SQLITE_LIKE_D
8d80: 4f 45 53 4e 54 5f 4d 41 54 43 48 5f 42 4c 4f 42  OESNT_MATCH_BLOB
8d90: 53 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 3e  S.  if( pOp->p3>
8da0: 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  0 ){.    assert(
8db0: 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d   pOp->p3<=(p->nM
8dc0: 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
8dd0: 72 29 20 29 3b 0a 20 20 20 20 70 49 6e 33 20 3d  r) );.    pIn3 =
8de0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
8df0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e  .    assert( pIn
8e00: 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  3->flags & MEM_I
8e10: 6e 74 20 29 3b 0a 20 20 20 20 69 66 28 20 70 49  nt );.    if( pI
8e20: 6e 33 2d 3e 75 2e 69 3d 3d 70 4f 70 2d 3e 70 35  n3->u.i==pOp->p5
8e30: 20 29 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d   ) pOut->flags =
8e40: 20 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74   MEM_Blob|MEM_St
8e50: 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20  atic|MEM_Term;. 
8e60: 20 7d 0a 23 65 6e 64 69 66 0a 20 20 62 72 65 61   }.#endif.  brea
8e70: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
8e80: 20 4e 75 6c 6c 20 50 31 20 50 32 20 50 33 20 2a   Null P1 P2 P3 *
8e90: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
8ea0: 72 5b 50 32 2e 2e 50 33 5d 3d 4e 55 4c 4c 0a 2a  r[P2..P3]=NULL.*
8eb0: 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 4e 55 4c  *.** Write a NUL
8ec0: 4c 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 73  L into registers
8ed0: 20 50 32 2e 20 20 49 66 20 50 33 20 67 72 65 61   P2.  If P3 grea
8ee0: 74 65 72 20 74 68 61 6e 20 50 32 2c 20 74 68 65  ter than P2, the
8ef0: 6e 20 61 6c 73 6f 20 77 72 69 74 65 0a 2a 2a 20  n also write.** 
8f00: 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73 74  NULL into regist
8f10: 65 72 20 50 33 20 61 6e 64 20 65 76 65 72 79 20  er P3 and every 
8f20: 72 65 67 69 73 74 65 72 20 69 6e 20 62 65 74 77  register in betw
8f30: 65 65 6e 20 50 32 20 61 6e 64 20 50 33 2e 20 20  een P2 and P3.  
8f40: 49 66 20 50 33 0a 2a 2a 20 69 73 20 6c 65 73 73  If P3.** is less
8f50: 20 74 68 61 6e 20 50 32 20 28 74 79 70 69 63 61   than P2 (typica
8f60: 6c 6c 79 20 50 33 20 69 73 20 7a 65 72 6f 29 20  lly P3 is zero) 
8f70: 74 68 65 6e 20 6f 6e 6c 79 20 72 65 67 69 73 74  then only regist
8f80: 65 72 20 50 32 20 69 73 0a 2a 2a 20 73 65 74 20  er P2 is.** set 
8f90: 74 6f 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 49  to NULL..**.** I
8fa0: 66 20 74 68 65 20 50 31 20 76 61 6c 75 65 20 69  f the P1 value i
8fb0: 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
8fc0: 20 61 6c 73 6f 20 73 65 74 20 74 68 65 20 4d 45   also set the ME
8fd0: 4d 5f 43 6c 65 61 72 65 64 20 66 6c 61 67 20 73  M_Cleared flag s
8fe0: 6f 20 74 68 61 74 0a 2a 2a 20 4e 55 4c 4c 20 76  o that.** NULL v
8ff0: 61 6c 75 65 73 20 77 69 6c 6c 20 6e 6f 74 20 63  alues will not c
9000: 6f 6d 70 61 72 65 20 65 71 75 61 6c 20 65 76 65  ompare equal eve
9010: 6e 20 69 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  n if SQLITE_NULL
9020: 45 51 20 69 73 20 73 65 74 20 6f 6e 0a 2a 2a 20  EQ is set on.** 
9030: 4f 50 5f 4e 65 20 6f 72 20 4f 50 5f 45 71 2e 0a  OP_Ne or OP_Eq..
9040: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 3a  */.case OP_Null:
9050: 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
9060: 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20 63 6e  out2 */.  int cn
9070: 74 3b 0a 20 20 75 31 36 20 6e 75 6c 6c 46 6c 61  t;.  u16 nullFla
9080: 67 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  g;.  pOut = out2
9090: 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
90a0: 70 29 3b 0a 20 20 63 6e 74 20 3d 20 70 4f 70 2d  p);.  cnt = pOp-
90b0: 3e 70 33 2d 70 4f 70 2d 3e 70 32 3b 0a 20 20 61  >p3-pOp->p2;.  a
90c0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d  ssert( pOp->p3<=
90d0: 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
90e0: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f  nCursor) );.  pO
90f0: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e 75 6c 6c  ut->flags = null
9100: 46 6c 61 67 20 3d 20 70 4f 70 2d 3e 70 31 20 3f  Flag = pOp->p1 ?
9110: 20 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 43   (MEM_Null|MEM_C
9120: 6c 65 61 72 65 64 29 20 3a 20 4d 45 4d 5f 4e 75  leared) : MEM_Nu
9130: 6c 6c 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20  ll;.  pOut->n = 
9140: 30 3b 0a 20 20 77 68 69 6c 65 28 20 63 6e 74 3e  0;.  while( cnt>
9150: 30 20 29 7b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b  0 ){.    pOut++;
9160: 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  .    memAboutToC
9170: 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a  hange(p, pOut);.
9180: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
9190: 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b  emSetNull(pOut);
91a0: 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  .    pOut->flags
91b0: 20 3d 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20 20   = nullFlag;.   
91c0: 20 70 4f 75 74 2d 3e 6e 20 3d 20 30 3b 0a 20 20   pOut->n = 0;.  
91d0: 20 20 63 6e 74 2d 2d 3b 0a 20 20 7d 0a 20 20 62    cnt--;.  }.  b
91e0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
91f0: 64 65 3a 20 53 6f 66 74 4e 75 6c 6c 20 50 31 20  de: SoftNull P1 
9200: 2a 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  * * * *.** Synop
9210: 73 69 73 3a 20 72 5b 50 31 5d 3d 4e 55 4c 4c 0a  sis: r[P1]=NULL.
9220: 2a 2a 0a 2a 2a 20 53 65 74 20 72 65 67 69 73 74  **.** Set regist
9230: 65 72 20 50 31 20 74 6f 20 68 61 76 65 20 74 68  er P1 to have th
9240: 65 20 76 61 6c 75 65 20 4e 55 4c 4c 20 61 73 20  e value NULL as 
9250: 73 65 65 6e 20 62 79 20 74 68 65 20 4f 50 5f 4d  seen by the OP_M
9260: 61 6b 65 52 65 63 6f 72 64 0a 2a 2a 20 69 6e 73  akeRecord.** ins
9270: 74 72 75 63 74 69 6f 6e 2c 20 62 75 74 20 64 6f  truction, but do
9280: 20 6e 6f 74 20 66 72 65 65 20 61 6e 79 20 73 74   not free any st
9290: 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d 65 6d  ring or blob mem
92a0: 6f 72 79 20 61 73 73 6f 63 69 61 74 65 64 20 77  ory associated w
92b0: 69 74 68 0a 2a 2a 20 74 68 65 20 72 65 67 69 73  ith.** the regis
92c0: 74 65 72 2c 20 73 6f 20 74 68 61 74 20 69 66 20  ter, so that if 
92d0: 74 68 65 20 76 61 6c 75 65 20 77 61 73 20 61 20  the value was a 
92e0: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74  string or blob t
92f0: 68 61 74 20 77 61 73 0a 2a 2a 20 70 72 65 76 69  hat was.** previ
9300: 6f 75 73 6c 79 20 63 6f 70 69 65 64 20 75 73 69  ously copied usi
9310: 6e 67 20 4f 50 5f 53 43 6f 70 79 2c 20 74 68 65  ng OP_SCopy, the
9320: 20 63 6f 70 69 65 73 20 77 69 6c 6c 20 63 6f 6e   copies will con
9330: 74 69 6e 75 65 20 74 6f 20 62 65 20 76 61 6c 69  tinue to be vali
9340: 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f  d..*/.case OP_So
9350: 66 74 4e 75 6c 6c 3a 20 7b 0a 20 20 61 73 73 65  ftNull: {.  asse
9360: 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26  rt( pOp->p1>0 &&
9370: 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d   pOp->p1<=(p->nM
9380: 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
9390: 72 29 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26  r) );.  pOut = &
93a0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
93b0: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 28   pOut->flags = (
93c0: 70 4f 75 74 2d 3e 66 6c 61 67 73 26 7e 28 4d 45  pOut->flags&~(ME
93d0: 4d 5f 55 6e 64 65 66 69 6e 65 64 7c 4d 45 4d 5f  M_Undefined|MEM_
93e0: 41 66 66 4d 61 73 6b 29 29 7c 4d 45 4d 5f 4e 75  AffMask))|MEM_Nu
93f0: 6c 6c 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  ll;.  break;.}..
9400: 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 6c 6f 62 20  /* Opcode: Blob 
9410: 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20  P1 P2 * P4 *.** 
9420: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
9430: 50 34 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a  P4 (len=P1).**.*
9440: 2a 20 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61  * P4 points to a
9450: 20 62 6c 6f 62 20 6f 66 20 64 61 74 61 20 50 31   blob of data P1
9460: 20 62 79 74 65 73 20 6c 6f 6e 67 2e 20 20 53 74   bytes long.  St
9470: 6f 72 65 20 74 68 69 73 0a 2a 2a 20 62 6c 6f 62  ore this.** blob
9480: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
9490: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 6c 6f 62  .*/.case OP_Blob
94a0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
94b0: 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
94c0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 20  assert( pOp->p1 
94d0: 3c 3d 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45  <= SQLITE_MAX_LE
94e0: 4e 47 54 48 20 29 3b 0a 20 20 70 4f 75 74 20 3d  NGTH );.  pOut =
94f0: 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
9500: 70 2c 20 70 4f 70 29 3b 0a 20 20 73 71 6c 69 74  p, pOp);.  sqlit
9510: 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28  e3VdbeMemSetStr(
9520: 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c  pOut, pOp->p4.z,
9530: 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 30 29 3b   pOp->p1, 0, 0);
9540: 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65  .  pOut->enc = e
9550: 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54  ncoding;.  UPDAT
9560: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
9570: 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
9580: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61 72  ../* Opcode: Var
9590: 69 61 62 6c 65 20 50 31 20 50 32 20 2a 20 50 34  iable P1 P2 * P4
95a0: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
95b0: 72 5b 50 32 5d 3d 70 61 72 61 6d 65 74 65 72 28  r[P2]=parameter(
95c0: 50 31 2c 50 34 29 0a 2a 2a 0a 2a 2a 20 54 72 61  P1,P4).**.** Tra
95d0: 6e 73 66 65 72 20 74 68 65 20 76 61 6c 75 65 73  nsfer the values
95e0: 20 6f 66 20 62 6f 75 6e 64 20 70 61 72 61 6d 65   of bound parame
95f0: 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69  ter P1 into regi
9600: 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 49 66  ster P2.**.** If
9610: 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 20 69   the parameter i
9620: 73 20 6e 61 6d 65 64 2c 20 74 68 65 6e 20 69 74  s named, then it
9630: 73 20 6e 61 6d 65 20 61 70 70 65 61 72 73 20 69  s name appears i
9640: 6e 20 50 34 2e 0a 2a 2a 20 54 68 65 20 50 34 20  n P4..** The P4 
9650: 76 61 6c 75 65 20 69 73 20 75 73 65 64 20 62 79  value is used by
9660: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61   sqlite3_bind_pa
9670: 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28 29 2e 0a  rameter_name()..
9680: 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61 72 69 61  */.case OP_Varia
9690: 62 6c 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ble: {          
96a0: 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 4d    /* out2 */.  M
96b0: 65 6d 20 2a 70 56 61 72 3b 20 20 20 20 20 20 20  em *pVar;       
96c0: 2f 2a 20 56 61 6c 75 65 20 62 65 69 6e 67 20 74  /* Value being t
96d0: 72 61 6e 73 66 65 72 72 65 64 20 2a 2f 0a 0a 20  ransferred */.. 
96e0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
96f0: 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70  >0 && pOp->p1<=p
9700: 2d 3e 6e 56 61 72 20 29 3b 0a 20 20 61 73 73 65  ->nVar );.  asse
9710: 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 30  rt( pOp->p4.z==0
9720: 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 73   || pOp->p4.z==s
9730: 71 6c 69 74 65 33 56 4c 69 73 74 4e 75 6d 54 6f  qlite3VListNumTo
9740: 4e 61 6d 65 28 70 2d 3e 70 56 4c 69 73 74 2c 70  Name(p->pVList,p
9750: 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 70 56 61  Op->p1) );.  pVa
9760: 72 20 3d 20 26 70 2d 3e 61 56 61 72 5b 70 4f 70  r = &p->aVar[pOp
9770: 2d 3e 70 31 20 2d 20 31 5d 3b 0a 20 20 69 66 28  ->p1 - 1];.  if(
9780: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54   sqlite3VdbeMemT
9790: 6f 6f 42 69 67 28 70 56 61 72 29 20 29 7b 0a 20  ooBig(pVar) ){. 
97a0: 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
97b0: 0a 20 20 7d 0a 20 20 70 4f 75 74 20 3d 20 26 61  .  }.  pOut = &a
97c0: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
97d0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68  sqlite3VdbeMemSh
97e0: 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20  allowCopy(pOut, 
97f0: 70 56 61 72 2c 20 4d 45 4d 5f 53 74 61 74 69 63  pVar, MEM_Static
9800: 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
9810: 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a  BLOBSIZE(pOut);.
9820: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
9830: 70 63 6f 64 65 3a 20 4d 6f 76 65 20 50 31 20 50  pcode: Move P1 P
9840: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
9850: 70 73 69 73 3a 20 72 5b 50 32 40 50 33 5d 3d 72  psis: r[P2@P3]=r
9860: 5b 50 31 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 4d 6f  [P1@P3].**.** Mo
9870: 76 65 20 74 68 65 20 50 33 20 76 61 6c 75 65 73  ve the P3 values
9880: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
9890: 2e 50 31 2b 50 33 2d 31 20 6f 76 65 72 20 69 6e  .P1+P3-1 over in
98a0: 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 73 20  to.** registers 
98b0: 50 32 2e 2e 50 32 2b 50 33 2d 31 2e 20 20 52 65  P2..P2+P3-1.  Re
98c0: 67 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50  gisters P1..P1+P
98d0: 33 2d 31 20 61 72 65 0a 2a 2a 20 6c 65 66 74 20  3-1 are.** left 
98e0: 68 6f 6c 64 69 6e 67 20 61 20 4e 55 4c 4c 2e 20  holding a NULL. 
98f0: 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20   It is an error 
9900: 66 6f 72 20 72 65 67 69 73 74 65 72 20 72 61 6e  for register ran
9910: 67 65 73 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50 33  ges.** P1..P1+P3
9920: 2d 31 20 61 6e 64 20 50 32 2e 2e 50 32 2b 50 33  -1 and P2..P2+P3
9930: 2d 31 20 74 6f 20 6f 76 65 72 6c 61 70 2e 20 20  -1 to overlap.  
9940: 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 0a 2a  It is an error.*
9950: 2a 20 66 6f 72 20 50 33 20 74 6f 20 62 65 20 6c  * for P3 to be l
9960: 65 73 73 20 74 68 61 6e 20 31 2e 0a 2a 2f 0a 63  ess than 1..*/.c
9970: 61 73 65 20 4f 50 5f 4d 6f 76 65 3a 20 7b 0a 20  ase OP_Move: {. 
9980: 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20   int n;         
9990: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72    /* Number of r
99a0: 65 67 69 73 74 65 72 73 20 6c 65 66 74 20 74 6f  egisters left to
99b0: 20 63 6f 70 79 20 2a 2f 0a 20 20 69 6e 74 20 70   copy */.  int p
99c0: 31 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52  1;          /* R
99d0: 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20  egister to copy 
99e0: 66 72 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20 70 32  from */.  int p2
99f0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65  ;          /* Re
9a00: 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20 74  gister to copy t
9a10: 6f 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d  o */..  n = pOp-
9a20: 3e 70 33 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d  >p3;.  p1 = pOp-
9a30: 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d  >p1;.  p2 = pOp-
9a40: 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  >p2;.  assert( n
9a50: 3e 30 20 26 26 20 70 31 3e 30 20 26 26 20 70 32  >0 && p1>0 && p2
9a60: 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  >0 );.  assert( 
9a70: 70 31 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32 2b 6e  p1+n<=p2 || p2+n
9a80: 3c 3d 70 31 20 29 3b 0a 0a 20 20 70 49 6e 31 20  <=p1 );..  pIn1 
9a90: 3d 20 26 61 4d 65 6d 5b 70 31 5d 3b 0a 20 20 70  = &aMem[p1];.  p
9aa0: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b  Out = &aMem[p2];
9ab0: 0a 20 20 64 6f 7b 0a 20 20 20 20 61 73 73 65 72  .  do{.    asser
9ac0: 74 28 20 70 4f 75 74 3c 3d 26 61 4d 65 6d 5b 28  t( pOut<=&aMem[(
9ad0: 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
9ae0: 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20  Cursor)] );.    
9af0: 61 73 73 65 72 74 28 20 70 49 6e 31 3c 3d 26 61  assert( pIn1<=&a
9b00: 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  Mem[(p->nMem+1 -
9b10: 20 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b   p->nCursor)] );
9b20: 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
9b30: 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b  IsValid(pIn1) );
9b40: 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  .    memAboutToC
9b50: 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a  hange(p, pOut);.
9b60: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
9b70: 65 6d 4d 6f 76 65 28 70 4f 75 74 2c 20 70 49 6e  emMove(pOut, pIn
9b80: 31 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  1);.#ifdef SQLIT
9b90: 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20  E_DEBUG.    if( 
9ba0: 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d  pOut->pScopyFrom
9bb0: 3e 3d 26 61 4d 65 6d 5b 70 31 5d 20 26 26 20 70  >=&aMem[p1] && p
9bc0: 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3c  Out->pScopyFrom<
9bd0: 70 4f 75 74 20 29 7b 0a 20 20 20 20 20 20 70 4f  pOut ){.      pO
9be0: 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 2b  ut->pScopyFrom +
9bf0: 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 70 31 3b 0a  = pOp->p2 - p1;.
9c00: 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20      }.#endif.   
9c10: 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28   Deephemeralize(
9c20: 70 4f 75 74 29 3b 0a 20 20 20 20 52 45 47 49 53  pOut);.    REGIS
9c30: 54 45 52 5f 54 52 41 43 45 28 70 32 2b 2b 2c 20  TER_TRACE(p2++, 
9c40: 70 4f 75 74 29 3b 0a 20 20 20 20 70 49 6e 31 2b  pOut);.    pIn1+
9c50: 2b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20  +;.    pOut++;. 
9c60: 20 7d 77 68 69 6c 65 28 20 2d 2d 6e 20 29 3b 0a   }while( --n );.
9c70: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
9c80: 70 63 6f 64 65 3a 20 43 6f 70 79 20 50 31 20 50  pcode: Copy P1 P
9c90: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
9ca0: 70 73 69 73 3a 20 72 5b 50 32 40 50 33 2b 31 5d  psis: r[P2@P3+1]
9cb0: 3d 72 5b 50 31 40 50 33 2b 31 5d 0a 2a 2a 0a 2a  =r[P1@P3+1].**.*
9cc0: 2a 20 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f 66  * Make a copy of
9cd0: 20 72 65 67 69 73 74 65 72 73 20 50 31 2e 2e 50   registers P1..P
9ce0: 31 2b 50 33 20 69 6e 74 6f 20 72 65 67 69 73 74  1+P3 into regist
9cf0: 65 72 73 20 50 32 2e 2e 50 32 2b 50 33 2e 0a 2a  ers P2..P2+P3..*
9d00: 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
9d10: 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 64 65  ction makes a de
9d20: 65 70 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76  ep copy of the v
9d30: 61 6c 75 65 2e 20 20 41 20 64 75 70 6c 69 63 61  alue.  A duplica
9d40: 74 65 0a 2a 2a 20 69 73 20 6d 61 64 65 20 6f 66  te.** is made of
9d50: 20 61 6e 79 20 73 74 72 69 6e 67 20 6f 72 20 62   any string or b
9d60: 6c 6f 62 20 63 6f 6e 73 74 61 6e 74 2e 20 20 53  lob constant.  S
9d70: 65 65 20 61 6c 73 6f 20 4f 50 5f 53 43 6f 70 79  ee also OP_SCopy
9d80: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 70  ..*/.case OP_Cop
9d90: 79 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20  y: {.  int n;.. 
9da0: 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20   n = pOp->p3;.  
9db0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
9dc0: 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  ->p1];.  pOut = 
9dd0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
9de0: 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 21 3d    assert( pOut!=
9df0: 70 49 6e 31 20 29 3b 0a 20 20 77 68 69 6c 65 28  pIn1 );.  while(
9e00: 20 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65   1 ){.    sqlite
9e10: 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43  3VdbeMemShallowC
9e20: 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20  opy(pOut, pIn1, 
9e30: 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 20 20  MEM_Ephem);.    
9e40: 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70  Deephemeralize(p
9e50: 4f 75 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  Out);.#ifdef SQL
9e60: 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 70 4f  ITE_DEBUG.    pO
9e70: 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 3d  ut->pScopyFrom =
9e80: 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 52   0;.#endif.    R
9e90: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
9ea0: 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33 2d 6e 2c  p->p2+pOp->p3-n,
9eb0: 20 70 4f 75 74 29 3b 0a 20 20 20 20 69 66 28 20   pOut);.    if( 
9ec0: 28 6e 2d 2d 29 3d 3d 30 20 29 20 62 72 65 61 6b  (n--)==0 ) break
9ed0: 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20  ;.    pOut++;.  
9ee0: 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20    pIn1++;.  }.  
9ef0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
9f00: 6f 64 65 3a 20 53 43 6f 70 79 20 50 31 20 50 32  ode: SCopy P1 P2
9f10: 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
9f20: 69 73 3a 20 72 5b 50 32 5d 3d 72 5b 50 31 5d 0a  is: r[P2]=r[P1].
9f30: 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 73 68 61  **.** Make a sha
9f40: 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 72 65 67  llow copy of reg
9f50: 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65  ister P1 into re
9f60: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
9f70: 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
9f80: 6e 20 6d 61 6b 65 73 20 61 20 73 68 61 6c 6c 6f  n makes a shallo
9f90: 77 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61  w copy of the va
9fa0: 6c 75 65 2e 20 20 49 66 20 74 68 65 20 76 61 6c  lue.  If the val
9fb0: 75 65 0a 2a 2a 20 69 73 20 61 20 73 74 72 69 6e  ue.** is a strin
9fc0: 67 20 6f 72 20 62 6c 6f 62 2c 20 74 68 65 6e 20  g or blob, then 
9fd0: 74 68 65 20 63 6f 70 79 20 69 73 20 6f 6e 6c 79  the copy is only
9fe0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
9ff0: 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 61 6e  e.** original an
a000: 64 20 68 65 6e 63 65 20 69 66 20 74 68 65 20 6f  d hence if the o
a010: 72 69 67 69 6e 61 6c 20 63 68 61 6e 67 65 73 20  riginal changes 
a020: 73 6f 20 77 69 6c 6c 20 74 68 65 20 63 6f 70 79  so will the copy
a030: 2e 0a 2a 2a 20 57 6f 72 73 65 2c 20 69 66 20 74  ..** Worse, if t
a040: 68 65 20 6f 72 69 67 69 6e 61 6c 20 69 73 20 64  he original is d
a050: 65 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 20  eallocated, the 
a060: 63 6f 70 79 20 62 65 63 6f 6d 65 73 20 69 6e 76  copy becomes inv
a070: 61 6c 69 64 2e 0a 2a 2a 20 54 68 75 73 20 74 68  alid..** Thus th
a080: 65 20 70 72 6f 67 72 61 6d 20 6d 75 73 74 20 67  e program must g
a090: 75 61 72 61 6e 74 65 65 20 74 68 61 74 20 74 68  uarantee that th
a0a0: 65 20 6f 72 69 67 69 6e 61 6c 20 77 69 6c 6c 20  e original will 
a0b0: 6e 6f 74 20 63 68 61 6e 67 65 0a 2a 2a 20 64 75  not change.** du
a0c0: 72 69 6e 67 20 74 68 65 20 6c 69 66 65 74 69 6d  ring the lifetim
a0d0: 65 20 6f 66 20 74 68 65 20 63 6f 70 79 2e 20 20  e of the copy.  
a0e0: 55 73 65 20 4f 50 5f 43 6f 70 79 20 74 6f 20 6d  Use OP_Copy to m
a0f0: 61 6b 65 20 61 20 63 6f 6d 70 6c 65 74 65 0a 2a  ake a complete.*
a100: 2a 20 63 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20  * copy..*/.case 
a110: 4f 50 5f 53 43 6f 70 79 3a 20 7b 20 20 20 20 20  OP_SCopy: {     
a120: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
a130: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
a140: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75  [pOp->p1];.  pOu
a150: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
a160: 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  2];.  assert( pO
a170: 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 73 71  ut!=pIn1 );.  sq
a180: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c  lite3VdbeMemShal
a190: 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49  lowCopy(pOut, pI
a1a0: 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a  n1, MEM_Ephem);.
a1b0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
a1c0: 42 55 47 0a 20 20 69 66 28 20 70 4f 75 74 2d 3e  BUG.  if( pOut->
a1d0: 70 53 63 6f 70 79 46 72 6f 6d 3d 3d 30 20 29 20  pScopyFrom==0 ) 
a1e0: 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d  pOut->pScopyFrom
a1f0: 20 3d 20 70 49 6e 31 3b 0a 23 65 6e 64 69 66 0a   = pIn1;.#endif.
a200: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
a210: 70 63 6f 64 65 3a 20 49 6e 74 43 6f 70 79 20 50  pcode: IntCopy P
a220: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
a230: 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 5b  nopsis: r[P2]=r[
a240: 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66  P1].**.** Transf
a250: 65 72 20 74 68 65 20 69 6e 74 65 67 65 72 20 76  er the integer v
a260: 61 6c 75 65 20 68 65 6c 64 20 69 6e 20 72 65 67  alue held in reg
a270: 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65  ister P1 into re
a280: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
a290: 20 54 68 69 73 20 69 73 20 61 6e 20 6f 70 74 69   This is an opti
a2a0: 6d 69 7a 65 64 20 76 65 72 73 69 6f 6e 20 6f 66  mized version of
a2b0: 20 53 43 6f 70 79 20 74 68 61 74 20 77 6f 72 6b   SCopy that work
a2c0: 73 20 6f 6e 6c 79 20 66 6f 72 20 69 6e 74 65 67  s only for integ
a2d0: 65 72 0a 2a 2a 20 76 61 6c 75 65 73 2e 0a 2a 2f  er.** values..*/
a2e0: 0a 63 61 73 65 20 4f 50 5f 49 6e 74 43 6f 70 79  .case OP_IntCopy
a2f0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
a300: 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31  * out2 */.  pIn1
a310: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
a320: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 49  ];.  assert( (pI
a330: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
a340: 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 70 4f 75  Int)!=0 );.  pOu
a350: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
a360: 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  2];.  sqlite3Vdb
a370: 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4f 75  eMemSetInt64(pOu
a380: 74 2c 20 70 49 6e 31 2d 3e 75 2e 69 29 3b 0a 20  t, pIn1->u.i);. 
a390: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
a3a0: 63 6f 64 65 3a 20 52 65 73 75 6c 74 52 6f 77 20  code: ResultRow 
a3b0: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
a3c0: 79 6e 6f 70 73 69 73 3a 20 6f 75 74 70 75 74 3d  ynopsis: output=
a3d0: 72 5b 50 31 40 50 32 5d 0a 2a 2a 0a 2a 2a 20 54  r[P1@P2].**.** T
a3e0: 68 65 20 72 65 67 69 73 74 65 72 73 20 50 31 20  he registers P1 
a3f0: 74 68 72 6f 75 67 68 20 50 31 2b 50 32 2d 31 20  through P1+P2-1 
a400: 63 6f 6e 74 61 69 6e 20 61 20 73 69 6e 67 6c 65  contain a single
a410: 20 72 6f 77 20 6f 66 0a 2a 2a 20 72 65 73 75 6c   row of.** resul
a420: 74 73 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20  ts. This opcode 
a430: 63 61 75 73 65 73 20 74 68 65 20 73 71 6c 69 74  causes the sqlit
a440: 65 33 5f 73 74 65 70 28 29 20 63 61 6c 6c 20 74  e3_step() call t
a450: 6f 20 74 65 72 6d 69 6e 61 74 65 0a 2a 2a 20 77  o terminate.** w
a460: 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 52 4f  ith an SQLITE_RO
a470: 57 20 72 65 74 75 72 6e 20 63 6f 64 65 20 61 6e  W return code an
a480: 64 20 69 74 20 73 65 74 73 20 75 70 20 74 68 65  d it sets up the
a490: 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 0a 2a 2a   sqlite3_stmt.**
a4a0: 20 73 74 72 75 63 74 75 72 65 20 74 6f 20 70 72   structure to pr
a4b0: 6f 76 69 64 65 20 61 63 63 65 73 73 20 74 6f 20  ovide access to 
a4c0: 74 68 65 20 72 28 50 31 29 2e 2e 72 28 50 31 2b  the r(P1)..r(P1+
a4d0: 50 32 2d 31 29 20 76 61 6c 75 65 73 20 61 73 0a  P2-1) values as.
a4e0: 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 20 72 6f  ** the result ro
a4f0: 77 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  w..*/.case OP_Re
a500: 73 75 6c 74 52 6f 77 3a 20 7b 0a 20 20 4d 65 6d  sultRow: {.  Mem
a510: 20 2a 70 4d 65 6d 3b 0a 20 20 69 6e 74 20 69 3b   *pMem;.  int i;
a520: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6e 52  .  assert( p->nR
a530: 65 73 43 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e 70  esColumn==pOp->p
a540: 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  2 );.  assert( p
a550: 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 61 73  Op->p1>0 );.  as
a560: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 2b 70 4f  sert( pOp->p1+pO
a570: 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p->p2<=(p->nMem+
a580: 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b  1 - p->nCursor)+
a590: 31 20 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  1 );..#ifndef SQ
a5a0: 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45  LITE_OMIT_PROGRE
a5b0: 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 2f 2a  SS_CALLBACK.  /*
a5c0: 20 52 75 6e 20 74 68 65 20 70 72 6f 67 72 65 73   Run the progres
a5d0: 73 20 63 6f 75 6e 74 65 72 20 6a 75 73 74 20 62  s counter just b
a5e0: 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 2e  efore returning.
a5f0: 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e  .  */.  if( db->
a600: 78 50 72 6f 67 72 65 73 73 21 3d 30 0a 20 20 20  xProgress!=0.   
a610: 26 26 20 6e 56 6d 53 74 65 70 3e 3d 6e 50 72 6f  && nVmStep>=nPro
a620: 67 72 65 73 73 4c 69 6d 69 74 20 0a 20 20 20 26  gressLimit .   &
a630: 26 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 28  & db->xProgress(
a640: 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41 72 67  db->pProgressArg
a650: 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 72 63  )!=0.  ){.    rc
a660: 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52   = SQLITE_INTERR
a670: 55 50 54 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62  UPT;.    goto ab
a680: 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
a690: 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20  ;.  }.#endif..  
a6a0: 2f 2a 20 49 66 20 74 68 69 73 20 73 74 61 74 65  /* If this state
a6b0: 6d 65 6e 74 20 68 61 73 20 76 69 6f 6c 61 74 65  ment has violate
a6c0: 64 20 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65  d immediate fore
a6d0: 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
a6e0: 6e 74 73 2c 20 64 6f 0a 20 20 2a 2a 20 6e 6f 74  nts, do.  ** not
a6f0: 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62   return the numb
a700: 65 72 20 6f 66 20 72 6f 77 73 20 6d 6f 64 69 66  er of rows modif
a710: 69 65 64 2e 20 41 6e 64 20 64 6f 20 6e 6f 74 20  ied. And do not 
a720: 52 45 4c 45 41 53 45 20 74 68 65 20 73 74 61 74  RELEASE the stat
a730: 65 6d 65 6e 74 0a 20 20 2a 2a 20 74 72 61 6e 73  ement.  ** trans
a740: 61 63 74 69 6f 6e 2e 20 49 74 20 6e 65 65 64 73  action. It needs
a750: 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61   to be rolled ba
a760: 63 6b 2e 20 20 2a 2f 0a 20 20 69 66 28 20 53 51  ck.  */.  if( SQ
a770: 4c 49 54 45 5f 4f 4b 21 3d 28 72 63 20 3d 20 73  LITE_OK!=(rc = s
a780: 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 46  qlite3VdbeCheckF
a790: 6b 28 70 2c 20 30 29 29 20 29 7b 0a 20 20 20 20  k(p, 0)) ){.    
a7a0: 61 73 73 65 72 74 28 20 64 62 2d 3e 66 6c 61 67  assert( db->flag
a7b0: 73 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f  s&SQLITE_CountRo
a7c0: 77 73 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  ws );.    assert
a7d0: 28 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75  ( p->usesStmtJou
a7e0: 72 6e 61 6c 20 29 3b 0a 20 20 20 20 67 6f 74 6f  rnal );.    goto
a7f0: 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
a800: 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49  ror;.  }..  /* I
a810: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 43 6f 75  f the SQLITE_Cou
a820: 6e 74 52 6f 77 73 20 66 6c 61 67 20 69 73 20 73  ntRows flag is s
a830: 65 74 20 69 6e 20 73 71 6c 69 74 65 33 2e 66 6c  et in sqlite3.fl
a840: 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 0a  ags mask, then .
a850: 20 20 2a 2a 20 44 4d 4c 20 73 74 61 74 65 6d 65    ** DML stateme
a860: 6e 74 73 20 69 6e 76 6f 6b 65 20 74 68 69 73 20  nts invoke this 
a870: 6f 70 63 6f 64 65 20 74 6f 20 72 65 74 75 72 6e  opcode to return
a880: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
a890: 6f 77 73 20 0a 20 20 2a 2a 20 6d 6f 64 69 66 69  ows .  ** modifi
a8a0: 65 64 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20  ed to the user. 
a8b0: 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79  This is the only
a8c0: 20 77 61 79 20 74 68 61 74 20 61 20 56 4d 20 74   way that a VM t
a8d0: 68 61 74 0a 20 20 2a 2a 20 6f 70 65 6e 73 20 61  hat.  ** opens a
a8e0: 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
a8f0: 61 63 74 69 6f 6e 20 6d 61 79 20 69 6e 76 6f 6b  action may invok
a900: 65 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 20  e this opcode.. 
a910: 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 63 61 73 65   **.  ** In case
a920: 20 74 68 69 73 20 69 73 20 73 75 63 68 20 61 20   this is such a 
a930: 73 74 61 74 65 6d 65 6e 74 2c 20 63 6c 6f 73 65  statement, close
a940: 20 61 6e 79 20 73 74 61 74 65 6d 65 6e 74 20 74   any statement t
a950: 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20 2a 2a 20  ransaction.  ** 
a960: 6f 70 65 6e 65 64 20 62 79 20 74 68 69 73 20 56  opened by this V
a970: 4d 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69  M before returni
a980: 6e 67 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68  ng control to th
a990: 65 20 75 73 65 72 2e 20 54 68 69 73 20 69 73 20  e user. This is 
a9a0: 74 6f 0a 20 20 2a 2a 20 65 6e 73 75 72 65 20 74  to.  ** ensure t
a9b0: 68 61 74 20 73 74 61 74 65 6d 65 6e 74 2d 74 72  hat statement-tr
a9c0: 61 6e 73 61 63 74 69 6f 6e 73 20 61 72 65 20 61  ansactions are a
a9d0: 6c 77 61 79 73 20 6e 65 73 74 65 64 2c 20 6e 6f  lways nested, no
a9e0: 74 20 6f 76 65 72 6c 61 70 70 69 6e 67 2e 0a 20  t overlapping.. 
a9f0: 20 2a 2a 20 49 66 20 74 68 65 20 6f 70 65 6e 20   ** If the open 
aa00: 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61  statement-transa
aa10: 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 63 6c 6f  ction is not clo
aa20: 73 65 64 20 68 65 72 65 2c 20 74 68 65 6e 20 74  sed here, then t
aa30: 68 65 20 75 73 65 72 0a 20 20 2a 2a 20 6d 61 79  he user.  ** may
aa40: 20 73 74 65 70 20 61 6e 6f 74 68 65 72 20 56 4d   step another VM
aa50: 20 74 68 61 74 20 6f 70 65 6e 73 20 69 74 73 20   that opens its 
aa60: 6f 77 6e 20 73 74 61 74 65 6d 65 6e 74 20 74 72  own statement tr
aa70: 61 6e 73 61 63 74 69 6f 6e 2e 20 54 68 69 73 0a  ansaction. This.
aa80: 20 20 2a 2a 20 6d 61 79 20 6c 65 61 64 20 74 6f    ** may lead to
aa90: 20 6f 76 65 72 6c 61 70 70 69 6e 67 20 73 74 61   overlapping sta
aaa0: 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
aab0: 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  ons..  **.  ** T
aac0: 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  he statement tra
aad0: 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 65 76 65  nsaction is neve
aae0: 72 20 61 20 74 6f 70 2d 6c 65 76 65 6c 20 74 72  r a top-level tr
aaf0: 61 6e 73 61 63 74 69 6f 6e 2e 20 20 48 65 6e 63  ansaction.  Henc
ab00: 65 0a 20 20 2a 2a 20 74 68 65 20 52 45 4c 45 41  e.  ** the RELEA
ab10: 53 45 20 63 61 6c 6c 20 62 65 6c 6f 77 20 63 61  SE call below ca
ab20: 6e 20 6e 65 76 65 72 20 66 61 69 6c 2e 0a 20 20  n never fail..  
ab30: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  */.  assert( p->
ab40: 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 7c 7c  iStatement==0 ||
ab50: 20 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54   db->flags&SQLIT
ab60: 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20  E_CountRows );. 
ab70: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
ab80: 65 43 6c 6f 73 65 53 74 61 74 65 6d 65 6e 74 28  eCloseStatement(
ab90: 70 2c 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  p, SAVEPOINT_REL
aba0: 45 41 53 45 29 3b 0a 20 20 61 73 73 65 72 74 28  EASE);.  assert(
abb0: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
abc0: 3b 0a 0a 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61  ;..  /* Invalida
abd0: 74 65 20 61 6c 6c 20 65 70 68 65 6d 65 72 61 6c  te all ephemeral
abe0: 20 63 75 72 73 6f 72 20 72 6f 77 20 63 61 63 68   cursor row cach
abf0: 65 73 20 2a 2f 0a 20 20 70 2d 3e 63 61 63 68 65  es */.  p->cache
ac00: 43 74 72 20 3d 20 28 70 2d 3e 63 61 63 68 65 43  Ctr = (p->cacheC
ac10: 74 72 20 2b 20 32 29 7c 31 3b 0a 0a 20 20 2f 2a  tr + 2)|1;..  /*
ac20: 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 72   Make sure the r
ac30: 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63 75  esults of the cu
ac40: 72 72 65 6e 74 20 72 6f 77 20 61 72 65 20 5c 30  rrent row are \0
ac50: 30 30 20 74 65 72 6d 69 6e 61 74 65 64 0a 20 20  00 terminated.  
ac60: 2a 2a 20 61 6e 64 20 68 61 76 65 20 61 6e 20 61  ** and have an a
ac70: 73 73 69 67 6e 65 64 20 74 79 70 65 2e 20 20 54  ssigned type.  T
ac80: 68 65 20 72 65 73 75 6c 74 73 20 61 72 65 20 64  he results are d
ac90: 65 2d 65 70 68 65 6d 65 72 61 6c 69 7a 65 64 20  e-ephemeralized 
aca0: 61 73 0a 20 20 2a 2a 20 61 20 73 69 64 65 20 65  as.  ** a side e
acb0: 66 66 65 63 74 2e 0a 20 20 2a 2f 0a 20 20 70 4d  ffect..  */.  pM
acc0: 65 6d 20 3d 20 70 2d 3e 70 52 65 73 75 6c 74 53  em = p->pResultS
acd0: 65 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  et = &aMem[pOp->
ace0: 70 31 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20  p1];.  for(i=0; 
acf0: 69 3c 70 4f 70 2d 3e 70 32 3b 20 69 2b 2b 29 7b  i<pOp->p2; i++){
ad00: 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
ad10: 49 73 56 61 6c 69 64 28 26 70 4d 65 6d 5b 69 5d  IsValid(&pMem[i]
ad20: 29 20 29 3b 0a 20 20 20 20 44 65 65 70 68 65 6d  ) );.    Deephem
ad30: 65 72 61 6c 69 7a 65 28 26 70 4d 65 6d 5b 69 5d  eralize(&pMem[i]
ad40: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28  );.    assert( (
ad50: 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73 20 26 20  pMem[i].flags & 
ad60: 4d 45 4d 5f 45 70 68 65 6d 29 3d 3d 30 0a 20 20  MEM_Ephem)==0.  
ad70: 20 20 20 20 20 20 20 20 20 20 7c 7c 20 28 70 4d            || (pM
ad80: 65 6d 5b 69 5d 2e 66 6c 61 67 73 20 26 20 28 4d  em[i].flags & (M
ad90: 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29  EM_Str|MEM_Blob)
ada0: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69  )==0 );.    sqli
adb0: 74 65 33 56 64 62 65 4d 65 6d 4e 75 6c 54 65 72  te3VdbeMemNulTer
adc0: 6d 69 6e 61 74 65 28 26 70 4d 65 6d 5b 69 5d 29  minate(&pMem[i])
add0: 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
ade0: 52 41 43 45 28 70 4f 70 2d 3e 70 31 2b 69 2c 20  RACE(pOp->p1+i, 
adf0: 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 7d 0a 20  &pMem[i]);.  }. 
ae00: 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46   if( db->mallocF
ae10: 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f  ailed ) goto no_
ae20: 6d 65 6d 3b 0a 0a 20 20 69 66 28 20 64 62 2d 3e  mem;..  if( db->
ae30: 6d 54 72 61 63 65 20 26 20 53 51 4c 49 54 45 5f  mTrace & SQLITE_
ae40: 54 52 41 43 45 5f 52 4f 57 20 29 7b 0a 20 20 20  TRACE_ROW ){.   
ae50: 20 64 62 2d 3e 78 54 72 61 63 65 28 53 51 4c 49   db->xTrace(SQLI
ae60: 54 45 5f 54 52 41 43 45 5f 52 4f 57 2c 20 64 62  TE_TRACE_ROW, db
ae70: 2d 3e 70 54 72 61 63 65 41 72 67 2c 20 70 2c 20  ->pTraceArg, p, 
ae80: 30 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52 65  0);.  }..  /* Re
ae90: 74 75 72 6e 20 53 51 4c 49 54 45 5f 52 4f 57 0a  turn SQLITE_ROW.
aea0: 20 20 2a 2f 0a 20 20 70 2d 3e 70 63 20 3d 20 28    */.  p->pc = (
aeb0: 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 20  int)(pOp - aOp) 
aec0: 2b 20 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49  + 1;.  rc = SQLI
aed0: 54 45 5f 52 4f 57 3b 0a 20 20 67 6f 74 6f 20 76  TE_ROW;.  goto v
aee0: 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f  dbe_return;.}../
aef0: 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6e 63 61 74  * Opcode: Concat
af00: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
af10: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
af20: 3d 72 5b 50 32 5d 2b 72 5b 50 31 5d 0a 2a 2a 0a  =r[P2]+r[P1].**.
af30: 2a 2a 20 41 64 64 20 74 68 65 20 74 65 78 74 20  ** Add the text 
af40: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 6f  in register P1 o
af50: 6e 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74  nto the end of t
af60: 68 65 20 74 65 78 74 20 69 6e 0a 2a 2a 20 72 65  he text in.** re
af70: 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 73 74  gister P2 and st
af80: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
af90: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
afa0: 2a 20 49 66 20 65 69 74 68 65 72 20 74 68 65 20  * If either the 
afb0: 50 31 20 6f 72 20 50 32 20 74 65 78 74 20 61 72  P1 or P2 text ar
afc0: 65 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72  e NULL then stor
afd0: 65 20 4e 55 4c 4c 20 69 6e 20 50 33 2e 0a 2a 2a  e NULL in P3..**
afe0: 0a 2a 2a 20 20 20 50 33 20 3d 20 50 32 20 7c 7c  .**   P3 = P2 ||
aff0: 20 50 31 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20   P1.**.** It is 
b000: 69 6c 6c 65 67 61 6c 20 66 6f 72 20 50 31 20 61  illegal for P1 a
b010: 6e 64 20 50 33 20 74 6f 20 62 65 20 74 68 65 20  nd P3 to be the 
b020: 73 61 6d 65 20 72 65 67 69 73 74 65 72 2e 20 53  same register. S
b030: 6f 6d 65 74 69 6d 65 73 2c 0a 2a 2a 20 69 66 20  ometimes,.** if 
b040: 50 33 20 69 73 20 74 68 65 20 73 61 6d 65 20 72  P3 is the same r
b050: 65 67 69 73 74 65 72 20 61 73 20 50 32 2c 20 74  egister as P2, t
b060: 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
b070: 6e 20 69 73 20 61 62 6c 65 0a 2a 2a 20 74 6f 20  n is able.** to 
b080: 61 76 6f 69 64 20 61 20 6d 65 6d 63 70 79 28 29  avoid a memcpy()
b090: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6e  ..*/.case OP_Con
b0a0: 63 61 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  cat: {          
b0b0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 43   /* same as TK_C
b0c0: 4f 4e 43 41 54 2c 20 69 6e 31 2c 20 69 6e 32 2c  ONCAT, in1, in2,
b0d0: 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 6e   out3 */.  i64 n
b0e0: 42 79 74 65 3b 0a 0a 20 20 70 49 6e 31 20 3d 20  Byte;..  pIn1 = 
b0f0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
b100: 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
b110: 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 20  Op->p2];.  pOut 
b120: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
b130: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  ;.  assert( pIn1
b140: 21 3d 70 4f 75 74 20 29 3b 0a 20 20 69 66 28 20  !=pOut );.  if( 
b150: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70  (pIn1->flags | p
b160: 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45  In2->flags) & ME
b170: 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71  M_Null ){.    sq
b180: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
b190: 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62  ull(pOut);.    b
b1a0: 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 66 28 20  reak;.  }.  if( 
b1b0: 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29  ExpandBlob(pIn1)
b1c0: 20 7c 7c 20 45 78 70 61 6e 64 42 6c 6f 62 28 70   || ExpandBlob(p
b1d0: 49 6e 32 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  In2) ) goto no_m
b1e0: 65 6d 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28  em;.  Stringify(
b1f0: 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  pIn1, encoding);
b200: 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e  .  Stringify(pIn
b210: 32 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  2, encoding);.  
b220: 6e 42 79 74 65 20 3d 20 70 49 6e 31 2d 3e 6e 20  nByte = pIn1->n 
b230: 2b 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 69 66 28  + pIn2->n;.  if(
b240: 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69   nByte>db->aLimi
b250: 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
b260: 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f  ENGTH] ){.    go
b270: 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
b280: 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
b290: 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20 28  eMemGrow(pOut, (
b2a0: 69 6e 74 29 6e 42 79 74 65 2b 32 2c 20 70 4f 75  int)nByte+2, pOu
b2b0: 74 3d 3d 70 49 6e 32 29 20 29 7b 0a 20 20 20 20  t==pIn2) ){.    
b2c0: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
b2d0: 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
b2e0: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 53 74 72 29  g(pOut, MEM_Str)
b2f0: 3b 0a 20 20 69 66 28 20 70 4f 75 74 21 3d 70 49  ;.  if( pOut!=pI
b300: 6e 32 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79  n2 ){.    memcpy
b310: 28 70 4f 75 74 2d 3e 7a 2c 20 70 49 6e 32 2d 3e  (pOut->z, pIn2->
b320: 7a 2c 20 70 49 6e 32 2d 3e 6e 29 3b 0a 20 20 7d  z, pIn2->n);.  }
b330: 0a 20 20 6d 65 6d 63 70 79 28 26 70 4f 75 74 2d  .  memcpy(&pOut-
b340: 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c 20 70 49 6e  >z[pIn2->n], pIn
b350: 31 2d 3e 7a 2c 20 70 49 6e 31 2d 3e 6e 29 3b 0a  1->z, pIn1->n);.
b360: 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 5d    pOut->z[nByte]
b370: 3d 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42  =0;.  pOut->z[nB
b380: 79 74 65 2b 31 5d 20 3d 20 30 3b 0a 20 20 70 4f  yte+1] = 0;.  pO
b390: 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d  ut->flags |= MEM
b3a0: 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 6e  _Term;.  pOut->n
b3b0: 20 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20   = (int)nByte;. 
b3c0: 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63   pOut->enc = enc
b3d0: 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f  oding;.  UPDATE_
b3e0: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75  MAX_BLOBSIZE(pOu
b3f0: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
b400: 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 20 50  /* Opcode: Add P
b410: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
b420: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72  ynopsis: r[P3]=r
b430: 5b 50 31 5d 2b 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  [P1]+r[P2].**.**
b440: 20 41 64 64 20 74 68 65 20 76 61 6c 75 65 20 69   Add the value i
b450: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f  n register P1 to
b460: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
b470: 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64  gister P2.** and
b480: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
b490: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
b4a0: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
b4b0: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
b4c0: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
b4d0: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
b4e0: 4d 75 6c 74 69 70 6c 79 20 50 31 20 50 32 20 50  Multiply P1 P2 P
b4f0: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
b500: 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 2a 72  s: r[P3]=r[P1]*r
b510: 5b 50 32 5d 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d 75  [P2].**.**.** Mu
b520: 6c 74 69 70 6c 79 20 74 68 65 20 76 61 6c 75 65  ltiply the value
b530: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
b540: 62 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  by the value in 
b550: 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61  register P2.** a
b560: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
b570: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
b580: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
b590: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
b5a0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
b5b0: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
b5c0: 3a 20 53 75 62 74 72 61 63 74 20 50 31 20 50 32  : Subtract P1 P2
b5d0: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
b5e0: 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d  sis: r[P3]=r[P2]
b5f0: 2d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 75 62  -r[P1].**.** Sub
b600: 74 72 61 63 74 20 74 68 65 20 76 61 6c 75 65 20  tract the value 
b610: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 66  in register P1 f
b620: 72 6f 6d 20 74 68 65 20 76 61 6c 75 65 20 69 6e  rom the value in
b630: 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20   register P2.** 
b640: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
b650: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
b660: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
b670: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
b680: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
b690: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
b6a0: 65 3a 20 44 69 76 69 64 65 20 50 31 20 50 32 20  e: Divide P1 P2 
b6b0: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
b6c0: 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2f  is: r[P3]=r[P2]/
b6d0: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 44 69 76 69  r[P1].**.** Divi
b6e0: 64 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  de the value in 
b6f0: 72 65 67 69 73 74 65 72 20 50 31 20 62 79 20 74  register P1 by t
b700: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
b710: 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73  ster P2.** and s
b720: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
b730: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 28  in register P3 (
b740: 50 33 3d 50 32 2f 50 31 29 2e 20 49 66 20 74 68  P3=P2/P1). If th
b750: 65 20 76 61 6c 75 65 20 69 6e 20 0a 2a 2a 20 72  e value in .** r
b760: 65 67 69 73 74 65 72 20 50 31 20 69 73 20 7a 65  egister P1 is ze
b770: 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 72 65 73  ro, then the res
b780: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 20 49 66 20  ult is NULL. If 
b790: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
b7a0: 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65  .** NULL, the re
b7b0: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
b7c0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6d 61  ./* Opcode: Rema
b7d0: 69 6e 64 65 72 20 50 31 20 50 32 20 50 33 20 2a  inder P1 P2 P3 *
b7e0: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
b7f0: 72 5b 50 33 5d 3d 72 5b 50 32 5d 25 72 5b 50 31  r[P3]=r[P2]%r[P1
b800: 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 75 74 65 20  ].**.** Compute 
b810: 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20 61 66  the remainder af
b820: 74 65 72 20 69 6e 74 65 67 65 72 20 72 65 67 69  ter integer regi
b830: 73 74 65 72 20 50 32 20 69 73 20 64 69 76 69 64  ster P2 is divid
b840: 65 64 20 62 79 20 0a 2a 2a 20 72 65 67 69 73 74  ed by .** regist
b850: 65 72 20 50 31 20 61 6e 64 20 73 74 6f 72 65 20  er P1 and store 
b860: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
b870: 67 69 73 74 65 72 20 50 33 2e 20 0a 2a 2a 20 49  gister P3. .** I
b880: 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
b890: 65 67 69 73 74 65 72 20 50 31 20 69 73 20 7a 65  egister P1 is ze
b8a0: 72 6f 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  ro the result is
b8b0: 20 4e 55 4c 4c 2e 0a 2a 2a 20 49 66 20 65 69 74   NULL..** If eit
b8c0: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
b8d0: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
b8e0: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  is NULL..*/.case
b8f0: 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20   OP_Add:        
b900: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
b910: 6d 65 20 61 73 20 54 4b 5f 50 4c 55 53 2c 20 69  me as TK_PLUS, i
b920: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
b930: 0a 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63  .case OP_Subtrac
b940: 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t:              
b950: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4d 49  /* same as TK_MI
b960: 4e 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  NUS, in1, in2, o
b970: 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d  ut3 */.case OP_M
b980: 75 6c 74 69 70 6c 79 3a 20 20 20 20 20 20 20 20  ultiply:        
b990: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
b9a0: 20 54 4b 5f 53 54 41 52 2c 20 69 6e 31 2c 20 69   TK_STAR, in1, i
b9b0: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
b9c0: 20 4f 50 5f 44 69 76 69 64 65 3a 20 20 20 20 20   OP_Divide:     
b9d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
b9e0: 6d 65 20 61 73 20 54 4b 5f 53 4c 41 53 48 2c 20  me as TK_SLASH, 
b9f0: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
ba00: 2f 0a 63 61 73 65 20 4f 50 5f 52 65 6d 61 69 6e  /.case OP_Remain
ba10: 64 65 72 3a 20 7b 20 20 20 20 20 20 20 20 20 20  der: {          
ba20: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52   /* same as TK_R
ba30: 45 4d 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  EM, in1, in2, ou
ba40: 74 33 20 2a 2f 0a 20 20 63 68 61 72 20 62 49 6e  t3 */.  char bIn
ba50: 74 69 6e 74 3b 20 20 20 2f 2a 20 53 74 61 72 74  tint;   /* Start
ba60: 65 64 20 6f 75 74 20 61 73 20 74 77 6f 20 69 6e  ed out as two in
ba70: 74 65 67 65 72 20 6f 70 65 72 61 6e 64 73 20 2a  teger operands *
ba80: 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 3b 20 20  /.  u16 flags;  
ba90: 20 20 20 20 2f 2a 20 43 6f 6d 62 69 6e 65 64 20      /* Combined 
baa0: 4d 45 4d 5f 2a 20 66 6c 61 67 73 20 66 72 6f 6d  MEM_* flags from
bab0: 20 62 6f 74 68 20 69 6e 70 75 74 73 20 2a 2f 0a   both inputs */.
bac0: 20 20 75 31 36 20 74 79 70 65 31 3b 20 20 20 20    u16 type1;    
bad0: 20 20 2f 2a 20 4e 75 6d 65 72 69 63 20 74 79 70    /* Numeric typ
bae0: 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e  e of left operan
baf0: 64 20 2a 2f 0a 20 20 75 31 36 20 74 79 70 65 32  d */.  u16 type2
bb00: 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 65 72 69  ;      /* Numeri
bb10: 63 20 74 79 70 65 20 6f 66 20 72 69 67 68 74 20  c type of right 
bb20: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36 34  operand */.  i64
bb30: 20 69 41 3b 20 20 20 20 20 20 20 20 20 2f 2a 20   iA;         /* 
bb40: 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f 66  Integer value of
bb50: 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f   left operand */
bb60: 0a 20 20 69 36 34 20 69 42 3b 20 20 20 20 20 20  .  i64 iB;      
bb70: 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61     /* Integer va
bb80: 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65  lue of right ope
bb90: 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65  rand */.  double
bba0: 20 72 41 3b 20 20 20 20 20 20 2f 2a 20 52 65 61   rA;      /* Rea
bbb0: 6c 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74 20  l value of left 
bbc0: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75  operand */.  dou
bbd0: 62 6c 65 20 72 42 3b 20 20 20 20 20 20 2f 2a 20  ble rB;      /* 
bbe0: 52 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 72 69  Real value of ri
bbf0: 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 0a  ght operand */..
bc00: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
bc10: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 74 79 70 65 31  Op->p1];.  type1
bc20: 20 3d 20 6e 75 6d 65 72 69 63 54 79 70 65 28 70   = numericType(p
bc30: 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26  In1);.  pIn2 = &
bc40: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
bc50: 20 74 79 70 65 32 20 3d 20 6e 75 6d 65 72 69 63   type2 = numeric
bc60: 54 79 70 65 28 70 49 6e 32 29 3b 0a 20 20 70 4f  Type(pIn2);.  pO
bc70: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
bc80: 70 33 5d 3b 0a 20 20 66 6c 61 67 73 20 3d 20 70  p3];.  flags = p
bc90: 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e  In1->flags | pIn
bca0: 32 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20  2->flags;.  if( 
bcb0: 28 74 79 70 65 31 20 26 20 74 79 70 65 32 20 26  (type1 & type2 &
bcc0: 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 7b 0a   MEM_Int)!=0 ){.
bcd0: 20 20 20 20 69 41 20 3d 20 70 49 6e 31 2d 3e 75      iA = pIn1->u
bce0: 2e 69 3b 0a 20 20 20 20 69 42 20 3d 20 70 49 6e  .i;.    iB = pIn
bcf0: 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 62 49 6e 74  2->u.i;.    bInt
bd00: 69 6e 74 20 3d 20 31 3b 0a 20 20 20 20 73 77 69  int = 1;.    swi
bd10: 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  tch( pOp->opcode
bd20: 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f   ){.      case O
bd30: 50 5f 41 64 64 3a 20 20 20 20 20 20 20 69 66 28  P_Add:       if(
bd40: 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34   sqlite3AddInt64
bd50: 28 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20  (&iB,iA) ) goto 
bd60: 66 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b  fp_math;  break;
bd70: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 53  .      case OP_S
bd80: 75 62 74 72 61 63 74 3a 20 20 69 66 28 20 73 71  ubtract:  if( sq
bd90: 6c 69 74 65 33 53 75 62 49 6e 74 36 34 28 26 69  lite3SubInt64(&i
bda0: 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f  B,iA) ) goto fp_
bdb0: 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20  math;  break;.  
bdc0: 20 20 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74      case OP_Mult
bdd0: 69 70 6c 79 3a 20 20 69 66 28 20 73 71 6c 69 74  iply:  if( sqlit
bde0: 65 33 4d 75 6c 49 6e 74 36 34 28 26 69 42 2c 69  e3MulInt64(&iB,i
bdf0: 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74  A) ) goto fp_mat
be00: 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20  h;  break;.     
be10: 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a   case OP_Divide:
be20: 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69   {.        if( i
be30: 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74  A==0 ) goto arit
be40: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
be50: 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69  _null;.        i
be60: 66 28 20 69 41 3d 3d 2d 31 20 26 26 20 69 42 3d  f( iA==-1 && iB=
be70: 3d 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20  =SMALLEST_INT64 
be80: 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 0a  ) goto fp_math;.
be90: 20 20 20 20 20 20 20 20 69 42 20 2f 3d 20 69 41          iB /= iA
bea0: 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
beb0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64  .      }.      d
bec0: 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20  efault: {.      
bed0: 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f    if( iA==0 ) go
bee0: 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65  to arithmetic_re
bef0: 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20  sult_is_null;.  
bf00: 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31        if( iA==-1
bf10: 20 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20 20   ) iA = 1;.     
bf20: 20 20 20 69 42 20 25 3d 20 69 41 3b 0a 20 20 20     iB %= iA;.   
bf30: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
bf40: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f    }.    }.    pO
bf50: 75 74 2d 3e 75 2e 69 20 3d 20 69 42 3b 0a 20 20  ut->u.i = iB;.  
bf60: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
bf70: 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pOut, MEM_Int);
bf80: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 28 66 6c  .  }else if( (fl
bf90: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21  ags & MEM_Null)!
bfa0: 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 61  =0 ){.    goto a
bfb0: 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74  rithmetic_result
bfc0: 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 7d 65 6c 73  _is_null;.  }els
bfd0: 65 7b 0a 20 20 20 20 62 49 6e 74 69 6e 74 20 3d  e{.    bIntint =
bfe0: 20 30 3b 0a 66 70 5f 6d 61 74 68 3a 0a 20 20 20   0;.fp_math:.   
bff0: 20 72 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rA = sqlite3Vdb
c000: 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29  eRealValue(pIn1)
c010: 3b 0a 20 20 20 20 72 42 20 3d 20 73 71 6c 69 74  ;.    rB = sqlit
c020: 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28  e3VdbeRealValue(
c030: 70 49 6e 32 29 3b 0a 20 20 20 20 73 77 69 74 63  pIn2);.    switc
c040: 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29  h( pOp->opcode )
c050: 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  {.      case OP_
c060: 41 64 64 3a 20 20 20 20 20 20 20 20 20 72 42 20  Add:         rB 
c070: 2b 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72 65  += rA;       bre
c080: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
c090: 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 72  P_Subtract:    r
c0a0: 42 20 2d 3d 20 72 41 3b 20 20 20 20 20 20 20 62  B -= rA;       b
c0b0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
c0c0: 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20   OP_Multiply:   
c0d0: 20 72 42 20 2a 3d 20 72 41 3b 20 20 20 20 20 20   rB *= rA;      
c0e0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
c0f0: 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a  se OP_Divide: {.
c100: 20 20 20 20 20 20 20 20 2f 2a 20 28 64 6f 75 62          /* (doub
c110: 6c 65 29 30 20 49 6e 20 63 61 73 65 20 6f 66 20  le)0 In case of 
c120: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
c130: 54 49 4e 47 5f 50 4f 49 4e 54 2e 2e 2e 20 2a 2f  TING_POINT... */
c140: 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 41 3d  .        if( rA=
c150: 3d 28 64 6f 75 62 6c 65 29 30 20 29 20 67 6f 74  =(double)0 ) got
c160: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
c170: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
c180: 20 20 20 20 20 72 42 20 2f 3d 20 72 41 3b 0a 20       rB /= rA;. 
c190: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
c1a0: 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61      }.      defa
c1b0: 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69  ult: {.        i
c1c0: 41 20 3d 20 28 69 36 34 29 72 41 3b 0a 20 20 20  A = (i64)rA;.   
c1d0: 20 20 20 20 20 69 42 20 3d 20 28 69 36 34 29 72       iB = (i64)r
c1e0: 42 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69  B;.        if( i
c1f0: 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74  A==0 ) goto arit
c200: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
c210: 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69  _null;.        i
c220: 66 28 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d  f( iA==-1 ) iA =
c230: 20 31 3b 0a 20 20 20 20 20 20 20 20 72 42 20 3d   1;.        rB =
c240: 20 28 64 6f 75 62 6c 65 29 28 69 42 20 25 20 69   (double)(iB % i
c250: 41 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  A);.        brea
c260: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  k;.      }.    }
c270: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
c280: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
c290: 4e 54 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  NT.    pOut->u.i
c2a0: 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65   = rB;.    MemSe
c2b0: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
c2c0: 4d 45 4d 5f 49 6e 74 29 3b 0a 23 65 6c 73 65 0a  MEM_Int);.#else.
c2d0: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 49      if( sqlite3I
c2e0: 73 4e 61 4e 28 72 42 29 20 29 7b 0a 20 20 20 20  sNaN(rB) ){.    
c2f0: 20 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69    goto arithmeti
c300: 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c  c_result_is_null
c310: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74  ;.    }.    pOut
c320: 2d 3e 75 2e 72 20 3d 20 72 42 3b 0a 20 20 20 20  ->u.r = rB;.    
c330: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
c340: 4f 75 74 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b 0a  Out, MEM_Real);.
c350: 20 20 20 20 69 66 28 20 28 28 74 79 70 65 31 7c      if( ((type1|
c360: 74 79 70 65 32 29 26 4d 45 4d 5f 52 65 61 6c 29  type2)&MEM_Real)
c370: 3d 3d 30 20 26 26 20 21 62 49 6e 74 69 6e 74 20  ==0 && !bIntint 
c380: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
c390: 56 64 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e  VdbeIntegerAffin
c3a0: 69 74 79 28 70 4f 75 74 29 3b 0a 20 20 20 20 7d  ity(pOut);.    }
c3b0: 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72  .#endif.  }.  br
c3c0: 65 61 6b 3b 0a 0a 61 72 69 74 68 6d 65 74 69 63  eak;..arithmetic
c3d0: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3a  _result_is_null:
c3e0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
c3f0: 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
c400: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
c410: 70 63 6f 64 65 3a 20 43 6f 6c 6c 53 65 71 20 50  pcode: CollSeq P
c420: 31 20 2a 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50  1 * * P4.**.** P
c430: 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
c440: 6f 20 61 20 43 6f 6c 6c 53 65 71 20 6f 62 6a 65  o a CollSeq obje
c450: 63 74 2e 20 49 66 20 74 68 65 20 6e 65 78 74 20  ct. If the next 
c460: 63 61 6c 6c 20 74 6f 20 61 20 75 73 65 72 20 66  call to a user f
c470: 75 6e 63 74 69 6f 6e 0a 2a 2a 20 6f 72 20 61 67  unction.** or ag
c480: 67 72 65 67 61 74 65 20 63 61 6c 6c 73 20 73 71  gregate calls sq
c490: 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c  lite3GetFuncColl
c4a0: 53 65 71 28 29 2c 20 74 68 69 73 20 63 6f 6c 6c  Seq(), this coll
c4b0: 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 77  ation sequence w
c4c0: 69 6c 6c 0a 2a 2a 20 62 65 20 72 65 74 75 72 6e  ill.** be return
c4d0: 65 64 2e 20 54 68 69 73 20 69 73 20 75 73 65 64  ed. This is used
c4e0: 20 62 79 20 74 68 65 20 62 75 69 6c 74 2d 69 6e   by the built-in
c4f0: 20 6d 69 6e 28 29 2c 20 6d 61 78 28 29 20 61 6e   min(), max() an
c500: 64 20 6e 75 6c 6c 69 66 28 29 0a 2a 2a 20 66 75  d nullif().** fu
c510: 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49  nctions..**.** I
c520: 66 20 50 31 20 69 73 20 6e 6f 74 20 7a 65 72 6f  f P1 is not zero
c530: 2c 20 74 68 65 6e 20 69 74 20 69 73 20 61 20 72  , then it is a r
c540: 65 67 69 73 74 65 72 20 74 68 61 74 20 61 20 73  egister that a s
c550: 75 62 73 65 71 75 65 6e 74 20 6d 69 6e 28 29 20  ubsequent min() 
c560: 6f 72 0a 2a 2a 20 6d 61 78 28 29 20 61 67 67 72  or.** max() aggr
c570: 65 67 61 74 65 20 77 69 6c 6c 20 73 65 74 20 74  egate will set t
c580: 6f 20 31 20 69 66 20 74 68 65 20 63 75 72 72 65  o 1 if the curre
c590: 6e 74 20 72 6f 77 20 69 73 20 6e 6f 74 20 74 68  nt row is not th
c5a0: 65 20 6d 69 6e 69 6d 75 6d 20 6f 72 0a 2a 2a 20  e minimum or.** 
c5b0: 6d 61 78 69 6d 75 6d 2e 20 20 54 68 65 20 50 31  maximum.  The P1
c5c0: 20 72 65 67 69 73 74 65 72 20 69 73 20 69 6e 69   register is ini
c5d0: 74 69 61 6c 69 7a 65 64 20 74 6f 20 30 20 62 79  tialized to 0 by
c5e0: 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
c5f0: 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 74  n..**.** The int
c600: 65 72 66 61 63 65 20 75 73 65 64 20 62 79 20 74  erface used by t
c610: 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
c620: 6e 20 6f 66 20 74 68 65 20 61 66 6f 72 65 6d 65  n of the aforeme
c630: 6e 74 69 6f 6e 65 64 20 66 75 6e 63 74 69 6f 6e  ntioned function
c640: 73 0a 2a 2a 20 74 6f 20 72 65 74 72 69 65 76 65  s.** to retrieve
c650: 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73   the collation s
c660: 65 71 75 65 6e 63 65 20 73 65 74 20 62 79 20 74  equence set by t
c670: 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6e 6f  his opcode is no
c680: 74 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 70  t available.** p
c690: 75 62 6c 69 63 6c 79 2e 20 20 4f 6e 6c 79 20 62  ublicly.  Only b
c6a0: 75 69 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e  uilt-in function
c6b0: 73 20 68 61 76 65 20 61 63 63 65 73 73 20 74 6f  s have access to
c6c0: 20 74 68 69 73 20 66 65 61 74 75 72 65 2e 0a 2a   this feature..*
c6d0: 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 6c 53 65  /.case OP_CollSe
c6e0: 71 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70  q: {.  assert( p
c6f0: 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43  Op->p4type==P4_C
c700: 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 69 66 28 20  OLLSEQ );.  if( 
c710: 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73  pOp->p1 ){.    s
c720: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
c730: 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d  Int64(&aMem[pOp-
c740: 3e 70 31 5d 2c 20 30 29 3b 0a 20 20 7d 0a 20 20  >p1], 0);.  }.  
c750: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
c760: 6f 64 65 3a 20 42 69 74 41 6e 64 20 50 31 20 50  ode: BitAnd P1 P
c770: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
c780: 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 31  psis: r[P3]=r[P1
c790: 5d 26 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61  ]&r[P2].**.** Ta
c7a0: 6b 65 20 74 68 65 20 62 69 74 2d 77 69 73 65 20  ke the bit-wise 
c7b0: 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65  AND of the value
c7c0: 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
c7d0: 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73   and P2 and.** s
c7e0: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
c7f0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
c800: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
c810: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
c820: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
c830: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69  */./* Opcode: Bi
c840: 74 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a  tOr P1 P2 P3 * *
c850: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
c860: 50 33 5d 3d 72 5b 50 31 5d 7c 72 5b 50 32 5d 0a  P3]=r[P1]|r[P2].
c870: 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 62  **.** Take the b
c880: 69 74 2d 77 69 73 65 20 4f 52 20 6f 66 20 74 68  it-wise OR of th
c890: 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
c8a0: 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20 61  ster P1 and P2 a
c8b0: 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20  nd.** store the 
c8c0: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
c8d0: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
c8e0: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
c8f0: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
c900: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
c910: 6f 64 65 3a 20 53 68 69 66 74 4c 65 66 74 20 50  ode: ShiftLeft P
c920: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
c930: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72  ynopsis: r[P3]=r
c940: 5b 50 32 5d 3c 3c 72 5b 50 31 5d 0a 2a 2a 0a 2a  [P2]<<r[P1].**.*
c950: 2a 20 53 68 69 66 74 20 74 68 65 20 69 6e 74 65  * Shift the inte
c960: 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72 65 67  ger value in reg
c970: 69 73 74 65 72 20 50 32 20 74 6f 20 74 68 65 20  ister P2 to the 
c980: 6c 65 66 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e  left by the.** n
c990: 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20 73 70  umber of bits sp
c9a0: 65 63 69 66 69 65 64 20 62 79 20 74 68 65 20 69  ecified by the i
c9b0: 6e 74 65 67 65 72 20 69 6e 20 72 65 67 69 73 74  nteger in regist
c9c0: 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20  er P1..** Store 
c9d0: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
c9e0: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
c9f0: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
ca00: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
ca10: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
ca20: 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 52 69   Opcode: ShiftRi
ca30: 67 68 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ght P1 P2 P3 * *
ca40: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
ca50: 50 33 5d 3d 72 5b 50 32 5d 3e 3e 72 5b 50 31 5d  P3]=r[P2]>>r[P1]
ca60: 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65  .**.** Shift the
ca70: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69   integer value i
ca80: 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f  n register P2 to
ca90: 20 74 68 65 20 72 69 67 68 74 20 62 79 20 74 68   the right by th
caa0: 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62  e.** number of b
cab0: 69 74 73 20 73 70 65 63 69 66 69 65 64 20 62 79  its specified by
cac0: 20 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20   the integer in 
cad0: 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20  register P1..** 
cae0: 53 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  Store the result
caf0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
cb00: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
cb10: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
cb20: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
cb30: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 41  .*/.case OP_BitA
cb40: 6e 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  nd:             
cb50: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
cb60: 4b 5f 42 49 54 41 4e 44 2c 20 69 6e 31 2c 20 69  K_BITAND, in1, i
cb70: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
cb80: 20 4f 50 5f 42 69 74 4f 72 3a 20 20 20 20 20 20   OP_BitOr:      
cb90: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
cba0: 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4f 52 2c  ame as TK_BITOR,
cbb0: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
cbc0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74  */.case OP_Shift
cbd0: 4c 65 66 74 3a 20 20 20 20 20 20 20 20 20 20 20  Left:           
cbe0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
cbf0: 5f 4c 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e  _LSHIFT, in1, in
cc00: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
cc10: 4f 50 5f 53 68 69 66 74 52 69 67 68 74 3a 20 7b  OP_ShiftRight: {
cc20: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
cc30: 6d 65 20 61 73 20 54 4b 5f 52 53 48 49 46 54 2c  me as TK_RSHIFT,
cc40: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
cc50: 2a 2f 0a 20 20 69 36 34 20 69 41 3b 0a 20 20 75  */.  i64 iA;.  u
cc60: 36 34 20 75 41 3b 0a 20 20 69 36 34 20 69 42 3b  64 uA;.  i64 iB;
cc70: 0a 20 20 75 38 20 6f 70 3b 0a 0a 20 20 70 49 6e  .  u8 op;..  pIn
cc80: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
cc90: 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d  1];.  pIn2 = &aM
cca0: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70  em[pOp->p2];.  p
ccb0: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
ccc0: 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e  >p3];.  if( (pIn
ccd0: 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d  1->flags | pIn2-
cce0: 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75  >flags) & MEM_Nu
ccf0: 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ll ){.    sqlite
cd00: 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
cd10: 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b  pOut);.    break
cd20: 3b 0a 20 20 7d 0a 20 20 69 41 20 3d 20 73 71 6c  ;.  }.  iA = sql
cd30: 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
cd40: 28 70 49 6e 32 29 3b 0a 20 20 69 42 20 3d 20 73  (pIn2);.  iB = s
cd50: 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
cd60: 75 65 28 70 49 6e 31 29 3b 0a 20 20 6f 70 20 3d  ue(pIn1);.  op =
cd70: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20   pOp->opcode;.  
cd80: 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 41 6e  if( op==OP_BitAn
cd90: 64 20 29 7b 0a 20 20 20 20 69 41 20 26 3d 20 69  d ){.    iA &= i
cda0: 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 6f  B;.  }else if( o
cdb0: 70 3d 3d 4f 50 5f 42 69 74 4f 72 20 29 7b 0a 20  p==OP_BitOr ){. 
cdc0: 20 20 20 69 41 20 7c 3d 20 69 42 3b 0a 20 20 7d     iA |= iB;.  }
cdd0: 65 6c 73 65 20 69 66 28 20 69 42 21 3d 30 20 29  else if( iB!=0 )
cde0: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 70  {.    assert( op
cdf0: 3d 3d 4f 50 5f 53 68 69 66 74 52 69 67 68 74 20  ==OP_ShiftRight 
ce00: 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c  || op==OP_ShiftL
ce10: 65 66 74 20 29 3b 0a 0a 20 20 20 20 2f 2a 20 49  eft );..    /* I
ce20: 66 20 73 68 69 66 74 69 6e 67 20 62 79 20 61 20  f shifting by a 
ce30: 6e 65 67 61 74 69 76 65 20 61 6d 6f 75 6e 74 2c  negative amount,
ce40: 20 73 68 69 66 74 20 69 6e 20 74 68 65 20 6f 74   shift in the ot
ce50: 68 65 72 20 64 69 72 65 63 74 69 6f 6e 20 2a 2f  her direction */
ce60: 0a 20 20 20 20 69 66 28 20 69 42 3c 30 20 29 7b  .    if( iB<0 ){
ce70: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f  .      assert( O
ce80: 50 5f 53 68 69 66 74 52 69 67 68 74 3d 3d 4f 50  P_ShiftRight==OP
ce90: 5f 53 68 69 66 74 4c 65 66 74 2b 31 20 29 3b 0a  _ShiftLeft+1 );.
cea0: 20 20 20 20 20 20 6f 70 20 3d 20 32 2a 4f 50 5f        op = 2*OP_
ceb0: 53 68 69 66 74 4c 65 66 74 20 2b 20 31 20 2d 20  ShiftLeft + 1 - 
cec0: 6f 70 3b 0a 20 20 20 20 20 20 69 42 20 3d 20 69  op;.      iB = i
ced0: 42 3e 28 2d 36 34 29 20 3f 20 2d 69 42 20 3a 20  B>(-64) ? -iB : 
cee0: 36 34 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69  64;.    }..    i
cef0: 66 28 20 69 42 3e 3d 36 34 20 29 7b 0a 20 20 20  f( iB>=64 ){.   
cf00: 20 20 20 69 41 20 3d 20 28 69 41 3e 3d 30 20 7c     iA = (iA>=0 |
cf10: 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65  | op==OP_ShiftLe
cf20: 66 74 29 20 3f 20 30 20 3a 20 2d 31 3b 0a 20 20  ft) ? 0 : -1;.  
cf30: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6d    }else{.      m
cf40: 65 6d 63 70 79 28 26 75 41 2c 20 26 69 41 2c 20  emcpy(&uA, &iA, 
cf50: 73 69 7a 65 6f 66 28 75 41 29 29 3b 0a 20 20 20  sizeof(uA));.   
cf60: 20 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 53 68     if( op==OP_Sh
cf70: 69 66 74 4c 65 66 74 20 29 7b 0a 20 20 20 20 20  iftLeft ){.     
cf80: 20 20 20 75 41 20 3c 3c 3d 20 69 42 3b 0a 20 20     uA <<= iB;.  
cf90: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
cfa0: 20 20 20 75 41 20 3e 3e 3d 20 69 42 3b 0a 20 20     uA >>= iB;.  
cfb0: 20 20 20 20 20 20 2f 2a 20 53 69 67 6e 2d 65 78        /* Sign-ex
cfc0: 74 65 6e 64 20 6f 6e 20 61 20 72 69 67 68 74 20  tend on a right 
cfd0: 73 68 69 66 74 20 6f 66 20 61 20 6e 65 67 61 74  shift of a negat
cfe0: 69 76 65 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20  ive number */.  
cff0: 20 20 20 20 20 20 69 66 28 20 69 41 3c 30 20 29        if( iA<0 )
d000: 20 75 41 20 7c 3d 20 28 28 28 28 75 36 34 29 30   uA |= ((((u64)0
d010: 78 66 66 66 66 66 66 66 66 29 3c 3c 33 32 29 7c  xffffffff)<<32)|
d020: 30 78 66 66 66 66 66 66 66 66 29 20 3c 3c 20 28  0xffffffff) << (
d030: 36 34 2d 69 42 29 3b 0a 20 20 20 20 20 20 7d 0a  64-iB);.      }.
d040: 20 20 20 20 20 20 6d 65 6d 63 70 79 28 26 69 41        memcpy(&iA
d050: 2c 20 26 75 41 2c 20 73 69 7a 65 6f 66 28 69 41  , &uA, sizeof(iA
d060: 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  ));.    }.  }.  
d070: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 41 3b 0a  pOut->u.i = iA;.
d080: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
d090: 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pOut, MEM_Int);
d0a0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
d0b0: 4f 70 63 6f 64 65 3a 20 41 64 64 49 6d 6d 20 20  Opcode: AddImm  
d0c0: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
d0d0: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d 72  ynopsis: r[P1]=r
d0e0: 5b 50 31 5d 2b 50 32 0a 2a 2a 20 0a 2a 2a 20 41  [P1]+P2.** .** A
d0f0: 64 64 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20  dd the constant 
d100: 50 32 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  P2 to the value 
d110: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
d120: 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 20 69 73  ** The result is
d130: 20 61 6c 77 61 79 73 20 61 6e 20 69 6e 74 65 67   always an integ
d140: 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 66 6f 72  er..**.** To for
d150: 63 65 20 61 6e 79 20 72 65 67 69 73 74 65 72 20  ce any register 
d160: 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72  to be an integer
d170: 2c 20 6a 75 73 74 20 61 64 64 20 30 2e 0a 2a 2f  , just add 0..*/
d180: 0a 63 61 73 65 20 4f 50 5f 41 64 64 49 6d 6d 3a  .case OP_AddImm:
d190: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
d1a0: 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
d1b0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
d1c0: 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61  .  memAboutToCha
d1d0: 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20  nge(p, pIn1);.  
d1e0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
d1f0: 74 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a  tegerify(pIn1);.
d200: 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70    pIn1->u.i += p
d210: 4f 70 2d 3e 70 32 3b 0a 20 20 62 72 65 61 6b 3b  Op->p2;.  break;
d220: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d  .}../* Opcode: M
d230: 75 73 74 42 65 49 6e 74 20 50 31 20 50 32 20 2a  ustBeInt P1 P2 *
d240: 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f 72 63   * *.** .** Forc
d250: 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
d260: 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65  egister P1 to be
d270: 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66   an integer.  If
d280: 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e   the value.** in
d290: 20 50 31 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e   P1 is not an in
d2a0: 74 65 67 65 72 20 61 6e 64 20 63 61 6e 6e 6f 74  teger and cannot
d2b0: 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e   be converted in
d2c0: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a  to an integer.**
d2d0: 20 77 69 74 68 6f 75 74 20 64 61 74 61 20 6c 6f   without data lo
d2e0: 73 73 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d  ss, then jump im
d2f0: 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2c  mediately to P2,
d300: 20 6f 72 20 69 66 20 50 32 3d 3d 30 0a 2a 2a 20   or if P2==0.** 
d310: 72 61 69 73 65 20 61 6e 20 53 51 4c 49 54 45 5f  raise an SQLITE_
d320: 4d 49 53 4d 41 54 43 48 20 65 78 63 65 70 74 69  MISMATCH excepti
d330: 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d  on..*/.case OP_M
d340: 75 73 74 42 65 49 6e 74 3a 20 7b 20 20 20 20 20  ustBeInt: {     
d350: 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
d360: 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
d370: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
d380: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
d390: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30  gs & MEM_Int)==0
d3a0: 20 29 7b 0a 20 20 20 20 61 70 70 6c 79 41 66 66   ){.    applyAff
d3b0: 69 6e 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49  inity(pIn1, SQLI
d3c0: 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20  TE_AFF_NUMERIC, 
d3d0: 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 56  encoding);.    V
d3e0: 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 28  dbeBranchTaken((
d3f0: 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn1->flags&MEM_
d400: 49 6e 74 29 3d 3d 30 2c 20 32 29 3b 0a 20 20 20  Int)==0, 2);.   
d410: 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
d420: 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20  s & MEM_Int)==0 
d430: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70  ){.      if( pOp
d440: 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ->p2==0 ){.     
d450: 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d     rc = SQLITE_M
d460: 49 53 4d 41 54 43 48 3b 0a 20 20 20 20 20 20 20  ISMATCH;.       
d470: 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
d480: 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
d490: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 67  }else{.        g
d4a0: 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
d4b0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
d4c0: 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  }.  MemSetTypeFl
d4d0: 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 49 6e 74  ag(pIn1, MEM_Int
d4e0: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23  );.  break;.}..#
d4f0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
d500: 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
d510: 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61  T./* Opcode: Rea
d520: 6c 41 66 66 69 6e 69 74 79 20 50 31 20 2a 20 2a  lAffinity P1 * *
d530: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 72 65   * *.**.** If re
d540: 67 69 73 74 65 72 20 50 31 20 68 6f 6c 64 73 20  gister P1 holds 
d550: 61 6e 20 69 6e 74 65 67 65 72 20 63 6f 6e 76 65  an integer conve
d560: 72 74 20 69 74 20 74 6f 20 61 20 72 65 61 6c 20  rt it to a real 
d570: 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  value..**.** Thi
d580: 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64  s opcode is used
d590: 20 77 68 65 6e 20 65 78 74 72 61 63 74 69 6e 67   when extracting
d5a0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f   information fro
d5b0: 6d 20 61 20 63 6f 6c 75 6d 6e 20 74 68 61 74 0a  m a column that.
d5c0: 2a 2a 20 68 61 73 20 52 45 41 4c 20 61 66 66 69  ** has REAL affi
d5d0: 6e 69 74 79 2e 20 20 53 75 63 68 20 63 6f 6c 75  nity.  Such colu
d5e0: 6d 6e 20 76 61 6c 75 65 73 20 6d 61 79 20 73 74  mn values may st
d5f0: 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 61 73  ill be stored as
d600: 0a 2a 2a 20 69 6e 74 65 67 65 72 73 2c 20 66 6f  .** integers, fo
d610: 72 20 73 70 61 63 65 20 65 66 66 69 63 69 65 6e  r space efficien
d620: 63 79 2c 20 62 75 74 20 61 66 74 65 72 20 65 78  cy, but after ex
d630: 74 72 61 63 74 69 6f 6e 20 77 65 20 77 61 6e 74  traction we want
d640: 20 74 68 65 6d 0a 2a 2a 20 74 6f 20 68 61 76 65   them.** to have
d650: 20 6f 6e 6c 79 20 61 20 72 65 61 6c 20 76 61 6c   only a real val
d660: 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  ue..*/.case OP_R
d670: 65 61 6c 41 66 66 69 6e 69 74 79 3a 20 7b 20 20  ealAffinity: {  
d680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d690: 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  /* in1 */.  pIn1
d6a0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
d6b0: 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66  ];.  if( pIn1->f
d6c0: 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
d6d0: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
d6e0: 65 4d 65 6d 52 65 61 6c 69 66 79 28 70 49 6e 31  eMemRealify(pIn1
d6f0: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
d700: 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  }.#endif..#ifnde
d710: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41  f SQLITE_OMIT_CA
d720: 53 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 61  ST./* Opcode: Ca
d730: 73 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  st P1 P2 * * *.*
d740: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 66 66 69  * Synopsis: affi
d750: 6e 69 74 79 28 72 5b 50 31 5d 29 0a 2a 2a 0a 2a  nity(r[P1]).**.*
d760: 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75  * Force the valu
d770: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
d780: 20 74 6f 20 62 65 20 74 68 65 20 74 79 70 65 20   to be the type 
d790: 64 65 66 69 6e 65 64 20 62 79 20 50 32 2e 0a 2a  defined by P2..*
d7a0: 2a 20 0a 2a 2a 20 3c 75 6c 3e 0a 2a 2a 20 3c 6c  * .** <ul>.** <l
d7b0: 69 3e 20 50 32 3d 3d 27 41 27 20 26 72 61 72 72  i> P2=='A' &rarr
d7c0: 3b 20 42 4c 4f 42 0a 2a 2a 20 3c 6c 69 3e 20 50  ; BLOB.** <li> P
d7d0: 32 3d 3d 27 42 27 20 26 72 61 72 72 3b 20 54 45  2=='B' &rarr; TE
d7e0: 58 54 0a 2a 2a 20 3c 6c 69 3e 20 50 32 3d 3d 27  XT.** <li> P2=='
d7f0: 43 27 20 26 72 61 72 72 3b 20 4e 55 4d 45 52 49  C' &rarr; NUMERI
d800: 43 0a 2a 2a 20 3c 6c 69 3e 20 50 32 3d 3d 27 44  C.** <li> P2=='D
d810: 27 20 26 72 61 72 72 3b 20 49 4e 54 45 47 45 52  ' &rarr; INTEGER
d820: 0a 2a 2a 20 3c 6c 69 3e 20 50 32 3d 3d 27 45 27  .** <li> P2=='E'
d830: 20 26 72 61 72 72 3b 20 52 45 41 4c 0a 2a 2a 20   &rarr; REAL.** 
d840: 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55  </ul>.**.** A NU
d850: 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20  LL value is not 
d860: 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20  changed by this 
d870: 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d  routine.  It rem
d880: 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  ains NULL..*/.ca
d890: 73 65 20 4f 50 5f 43 61 73 74 3a 20 7b 20 20 20  se OP_Cast: {   
d8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d8b0: 2a 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72  * in1 */.  asser
d8c0: 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 53 51 4c 49  t( pOp->p2>=SQLI
d8d0: 54 45 5f 41 46 46 5f 42 4c 4f 42 20 26 26 20 70  TE_AFF_BLOB && p
d8e0: 4f 70 2d 3e 70 32 3c 3d 53 51 4c 49 54 45 5f 41  Op->p2<=SQLITE_A
d8f0: 46 46 5f 52 45 41 4c 20 29 3b 0a 20 20 74 65 73  FF_REAL );.  tes
d900: 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d  tcase( pOp->p2==
d910: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20  SQLITE_AFF_TEXT 
d920: 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70  );.  testcase( p
d930: 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41  Op->p2==SQLITE_A
d940: 46 46 5f 42 4c 4f 42 20 29 3b 0a 20 20 74 65 73  FF_BLOB );.  tes
d950: 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d  tcase( pOp->p2==
d960: 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52  SQLITE_AFF_NUMER
d970: 49 43 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  IC );.  testcase
d980: 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54  ( pOp->p2==SQLIT
d990: 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 29 3b  E_AFF_INTEGER );
d9a0: 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70  .  testcase( pOp
d9b0: 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46  ->p2==SQLITE_AFF
d9c0: 5f 52 45 41 4c 20 29 3b 0a 20 20 70 49 6e 31 20  _REAL );.  pIn1 
d9d0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
d9e0: 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
d9f0: 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20  ange(p, pIn1);. 
da00: 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62   rc = ExpandBlob
da10: 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65  (pIn1);.  sqlite
da20: 33 56 64 62 65 4d 65 6d 43 61 73 74 28 70 49 6e  3VdbeMemCast(pIn
da30: 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 65 6e 63 6f  1, pOp->p2, enco
da40: 64 69 6e 67 29 3b 0a 20 20 55 50 44 41 54 45 5f  ding);.  UPDATE_
da50: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e  MAX_BLOBSIZE(pIn
da60: 31 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  1);.  if( rc ) g
da70: 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
da80: 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b  _error;.  break;
da90: 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
daa0: 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 20 2a 2f  ITE_OMIT_CAST */
dab0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 71 20  ../* Opcode: Eq 
dac0: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
dad0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49 46 20 72  * Synopsis: IF r
dae0: 5b 50 33 5d 3d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a  [P3]==r[P1].**.*
daf0: 2a 20 43 6f 6d 70 61 72 65 20 74 68 65 20 76 61  * Compare the va
db00: 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
db10: 20 50 31 20 61 6e 64 20 50 33 2e 20 20 49 66 20   P1 and P3.  If 
db20: 72 65 67 28 50 33 29 3d 3d 72 65 67 28 50 31 29  reg(P3)==reg(P1)
db30: 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f   then.** jump to
db40: 20 61 64 64 72 65 73 73 20 50 32 2e 20 20 4f 72   address P2.  Or
db50: 20 69 66 20 74 68 65 20 53 51 4c 49 54 45 5f 53   if the SQLITE_S
db60: 54 4f 52 45 50 32 20 66 6c 61 67 20 69 73 20 73  TOREP2 flag is s
db70: 65 74 20 69 6e 20 50 35 2c 20 74 68 65 6e 0a 2a  et in P5, then.*
db80: 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  * store the resu
db90: 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e  lt of comparison
dba0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
dbb0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54  .**.** The SQLIT
dbc0: 45 5f 41 46 46 5f 4d 41 53 4b 20 70 6f 72 74 69  E_AFF_MASK porti
dbd0: 6f 6e 20 6f 66 20 50 35 20 6d 75 73 74 20 62 65  on of P5 must be
dbe0: 20 61 6e 20 61 66 66 69 6e 69 74 79 20 63 68 61   an affinity cha
dbf0: 72 61 63 74 65 72 20 2d 0a 2a 2a 20 53 51 4c 49  racter -.** SQLI
dc00: 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 53 51 4c  TE_AFF_TEXT, SQL
dc10: 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 2c  ITE_AFF_INTEGER,
dc20: 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 41   and so forth. A
dc30: 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64  n attempt is mad
dc40: 65 20 0a 2a 2a 20 74 6f 20 63 6f 65 72 63 65 20  e .** to coerce 
dc50: 62 6f 74 68 20 69 6e 70 75 74 73 20 61 63 63 6f  both inputs acco
dc60: 72 64 69 6e 67 20 74 6f 20 74 68 69 73 20 61 66  rding to this af
dc70: 66 69 6e 69 74 79 20 62 65 66 6f 72 65 20 74 68  finity before th
dc80: 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20  e.** comparison 
dc90: 69 73 20 6d 61 64 65 2e 20 49 66 20 74 68 65 20  is made. If the 
dca0: 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20  SQLITE_AFF_MASK 
dcb0: 69 73 20 30 78 30 30 2c 20 74 68 65 6e 20 6e 75  is 0x00, then nu
dcc0: 6d 65 72 69 63 0a 2a 2a 20 61 66 66 69 6e 69 74  meric.** affinit
dcd0: 79 20 69 73 20 75 73 65 64 2e 20 4e 6f 74 65 20  y is used. Note 
dce0: 74 68 61 74 20 74 68 65 20 61 66 66 69 6e 69 74  that the affinit
dcf0: 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 61 72  y conversions ar
dd00: 65 20 73 74 6f 72 65 64 0a 2a 2a 20 62 61 63 6b  e stored.** back
dd10: 20 69 6e 74 6f 20 74 68 65 20 69 6e 70 75 74 20   into the input 
dd20: 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64  registers P1 and
dd30: 20 50 33 2e 20 20 53 6f 20 74 68 69 73 20 6f 70   P3.  So this op
dd40: 63 6f 64 65 20 63 61 6e 20 63 61 75 73 65 0a 2a  code can cause.*
dd50: 2a 20 70 65 72 73 69 73 74 65 6e 74 20 63 68 61  * persistent cha
dd60: 6e 67 65 73 20 74 6f 20 72 65 67 69 73 74 65 72  nges to register
dd70: 73 20 50 31 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a  s P1 and P3..**.
dd80: 2a 2a 20 4f 6e 63 65 20 61 6e 79 20 63 6f 6e 76  ** Once any conv
dd90: 65 72 73 69 6f 6e 73 20 68 61 76 65 20 74 61 6b  ersions have tak
dda0: 65 6e 20 70 6c 61 63 65 2c 20 61 6e 64 20 6e 65  en place, and ne
ddb0: 69 74 68 65 72 20 76 61 6c 75 65 20 69 73 20 4e  ither value is N
ddc0: 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20 76 61 6c  ULL, .** the val
ddd0: 75 65 73 20 61 72 65 20 63 6f 6d 70 61 72 65 64  ues are compared
dde0: 2e 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73  . If both values
ddf0: 20 61 72 65 20 62 6c 6f 62 73 20 74 68 65 6e 20   are blobs then 
de00: 6d 65 6d 63 6d 70 28 29 20 69 73 0a 2a 2a 20 75  memcmp() is.** u
de10: 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  sed to determine
de20: 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
de30: 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  the comparison. 
de40: 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 0a   If both values.
de50: 2a 2a 20 61 72 65 20 74 65 78 74 2c 20 74 68 65  ** are text, the
de60: 6e 20 74 68 65 20 61 70 70 72 6f 70 72 69 61 74  n the appropriat
de70: 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63  e collating func
de80: 74 69 6f 6e 20 73 70 65 63 69 66 69 65 64 20 69  tion specified i
de90: 6e 0a 2a 2a 20 50 34 20 69 73 20 75 73 65 64 20  n.** P4 is used 
dea0: 74 6f 20 64 6f 20 74 68 65 20 63 6f 6d 70 61 72  to do the compar
deb0: 69 73 6f 6e 2e 20 20 49 66 20 50 34 20 69 73 20  ison.  If P4 is 
dec0: 6e 6f 74 20 73 70 65 63 69 66 69 65 64 20 74 68  not specified th
ded0: 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29 20 69  en.** memcmp() i
dee0: 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72  s used to compar
def0: 65 20 74 65 78 74 20 73 74 72 69 6e 67 2e 20 20  e text string.  
df00: 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61  If both values a
df10: 72 65 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c 20 74  re.** numeric, t
df20: 68 65 6e 20 61 20 6e 75 6d 65 72 69 63 20 63 6f  hen a numeric co
df30: 6d 70 61 72 69 73 6f 6e 20 69 73 20 75 73 65 64  mparison is used
df40: 2e 20 49 66 20 74 68 65 20 74 77 6f 20 76 61 6c  . If the two val
df50: 75 65 73 0a 2a 2a 20 61 72 65 20 6f 66 20 64 69  ues.** are of di
df60: 66 66 65 72 65 6e 74 20 74 79 70 65 73 2c 20 74  fferent types, t
df70: 68 65 6e 20 6e 75 6d 62 65 72 73 20 61 72 65 20  hen numbers are 
df80: 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20  considered less 
df90: 74 68 61 6e 0a 2a 2a 20 73 74 72 69 6e 67 73 20  than.** strings 
dfa0: 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65 20  and strings are 
dfb0: 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20  considered less 
dfc0: 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a  than blobs..**.*
dfd0: 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  * If SQLITE_NULL
dfe0: 45 51 20 69 73 20 73 65 74 20 69 6e 20 50 35 20  EQ is set in P5 
dff0: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
e000: 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  of comparison is
e010: 20 61 6c 77 61 79 73 20 65 69 74 68 65 72 0a 2a   always either.*
e020: 2a 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65 20  * true or false 
e030: 61 6e 64 20 69 73 20 6e 65 76 65 72 20 4e 55 4c  and is never NUL
e040: 4c 2e 20 20 49 66 20 62 6f 74 68 20 6f 70 65 72  L.  If both oper
e050: 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20 74 68  ands are NULL th
e060: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a  en the result.**
e070: 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69   of comparison i
e080: 73 20 74 72 75 65 2e 20 20 49 66 20 65 69 74 68  s true.  If eith
e090: 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
e0a0: 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  LL then the resu
e0b0: 6c 74 20 69 73 20 66 61 6c 73 65 2e 0a 2a 2a 20  lt is false..** 
e0c0: 49 66 20 6e 65 69 74 68 65 72 20 6f 70 65 72 61  If neither opera
e0d0: 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 20 72  nd is NULL the r
e0e0: 65 73 75 6c 74 20 69 73 20 74 68 65 20 73 61 6d  esult is the sam
e0f0: 65 20 61 73 20 69 74 20 77 6f 75 6c 64 20 62 65  e as it would be
e100: 20 69 66 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54   if.** the SQLIT
e110: 45 5f 4e 55 4c 4c 45 51 20 66 6c 61 67 20 77 65  E_NULLEQ flag we
e120: 72 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20  re omitted from 
e130: 50 35 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 62 6f 74  P5..**.** If bot
e140: 68 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32  h SQLITE_STOREP2
e150: 20 61 6e 64 20 53 51 4c 49 54 45 5f 4b 45 45 50   and SQLITE_KEEP
e160: 4e 55 4c 4c 20 66 6c 61 67 73 20 61 72 65 20 73  NULL flags are s
e170: 65 74 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 63  et then the.** c
e180: 6f 6e 74 65 6e 74 20 6f 66 20 72 5b 50 32 5d 20  ontent of r[P2] 
e190: 69 73 20 6f 6e 6c 79 20 63 68 61 6e 67 65 64 20  is only changed 
e1a0: 69 66 20 74 68 65 20 6e 65 77 20 76 61 6c 75 65  if the new value
e1b0: 20 69 73 20 4e 55 4c 4c 20 6f 72 20 30 20 28 66   is NULL or 0 (f
e1c0: 61 6c 73 65 29 2e 0a 2a 2a 20 49 6e 20 6f 74 68  alse)..** In oth
e1d0: 65 72 20 77 6f 72 64 73 2c 20 61 20 70 72 69 6f  er words, a prio
e1e0: 72 20 72 5b 50 32 5d 20 76 61 6c 75 65 20 77 69  r r[P2] value wi
e1f0: 6c 6c 20 6e 6f 74 20 62 65 20 6f 76 65 72 77 72  ll not be overwr
e200: 69 74 74 65 6e 20 62 79 20 31 20 28 74 72 75 65  itten by 1 (true
e210: 29 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  )..*/./* Opcode:
e220: 20 4e 65 20 50 31 20 50 32 20 50 33 20 50 34 20   Ne P1 P2 P3 P4 
e230: 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
e240: 49 46 20 72 5b 50 33 5d 21 3d 72 5b 50 31 5d 0a  IF r[P3]!=r[P1].
e250: 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73  **.** This works
e260: 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 45   just like the E
e270: 71 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20  q opcode except 
e280: 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73  that the jump is
e290: 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65   taken if.** the
e2a0: 20 6f 70 65 72 61 6e 64 73 20 69 6e 20 72 65 67   operands in reg
e2b0: 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33  isters P1 and P3
e2c0: 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 2e 20   are not equal. 
e2d0: 20 53 65 65 20 74 68 65 20 45 71 20 6f 70 63 6f   See the Eq opco
e2e0: 64 65 20 66 6f 72 0a 2a 2a 20 61 64 64 69 74 69  de for.** additi
e2f0: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
e300: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 62 6f 74 68 20  ..**.** If both 
e310: 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 61  SQLITE_STOREP2 a
e320: 6e 64 20 53 51 4c 49 54 45 5f 4b 45 45 50 4e 55  nd SQLITE_KEEPNU
e330: 4c 4c 20 66 6c 61 67 73 20 61 72 65 20 73 65 74  LL flags are set
e340: 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 63 6f 6e   then the.** con
e350: 74 65 6e 74 20 6f 66 20 72 5b 50 32 5d 20 69 73  tent of r[P2] is
e360: 20 6f 6e 6c 79 20 63 68 61 6e 67 65 64 20 69 66   only changed if
e370: 20 74 68 65 20 6e 65 77 20 76 61 6c 75 65 20 69   the new value i
e380: 73 20 4e 55 4c 4c 20 6f 72 20 31 20 28 74 72 75  s NULL or 1 (tru
e390: 65 29 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20  e)..** In other 
e3a0: 77 6f 72 64 73 2c 20 61 20 70 72 69 6f 72 20 72  words, a prior r
e3b0: 5b 50 32 5d 20 76 61 6c 75 65 20 77 69 6c 6c 20  [P2] value will 
e3c0: 6e 6f 74 20 62 65 20 6f 76 65 72 77 72 69 74 74  not be overwritt
e3d0: 65 6e 20 62 79 20 30 20 28 66 61 6c 73 65 29 2e  en by 0 (false).
e3e0: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c  .*/./* Opcode: L
e3f0: 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  t P1 P2 P3 P4 P5
e400: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49 46  .** Synopsis: IF
e410: 20 72 5b 50 33 5d 3c 72 5b 50 31 5d 0a 2a 2a 0a   r[P3]<r[P1].**.
e420: 2a 2a 20 43 6f 6d 70 61 72 65 20 74 68 65 20 76  ** Compare the v
e430: 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
e440: 72 20 50 31 20 61 6e 64 20 50 33 2e 20 20 49 66  r P1 and P3.  If
e450: 20 72 65 67 28 50 33 29 3c 72 65 67 28 50 31 29   reg(P3)<reg(P1)
e460: 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f   then.** jump to
e470: 20 61 64 64 72 65 73 73 20 50 32 2e 20 20 4f 72   address P2.  Or
e480: 20 69 66 20 74 68 65 20 53 51 4c 49 54 45 5f 53   if the SQLITE_S
e490: 54 4f 52 45 50 32 20 66 6c 61 67 20 69 73 20 73  TOREP2 flag is s
e4a0: 65 74 20 69 6e 20 50 35 20 73 74 6f 72 65 0a 2a  et in P5 store.*
e4b0: 2a 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  * the result of 
e4c0: 63 6f 6d 70 61 72 69 73 6f 6e 20 28 30 20 6f 72  comparison (0 or
e4d0: 20 31 20 6f 72 20 4e 55 4c 4c 29 20 69 6e 74 6f   1 or NULL) into
e4e0: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
e4f0: 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54  .** If the SQLIT
e500: 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74  E_JUMPIFNULL bit
e510: 20 6f 66 20 50 35 20 69 73 20 73 65 74 20 61 6e   of P5 is set an
e520: 64 20 65 69 74 68 65 72 20 72 65 67 28 50 31 29  d either reg(P1)
e530: 20 6f 72 0a 2a 2a 20 72 65 67 28 50 33 29 20 69   or.** reg(P3) i
e540: 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20  s NULL then the 
e550: 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 2e 20 20  take the jump.  
e560: 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55  If the SQLITE_JU
e570: 4d 50 49 46 4e 55 4c 4c 20 0a 2a 2a 20 62 69 74  MPIFNULL .** bit
e580: 20 69 73 20 63 6c 65 61 72 20 74 68 65 6e 20 66   is clear then f
e590: 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 66 20 65  all through if e
e5a0: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
e5b0: 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65   NULL..**.** The
e5c0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b   SQLITE_AFF_MASK
e5d0: 20 70 6f 72 74 69 6f 6e 20 6f 66 20 50 35 20 6d   portion of P5 m
e5e0: 75 73 74 20 62 65 20 61 6e 20 61 66 66 69 6e 69  ust be an affini
e5f0: 74 79 20 63 68 61 72 61 63 74 65 72 20 2d 0a 2a  ty character -.*
e600: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58  * SQLITE_AFF_TEX
e610: 54 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  T, SQLITE_AFF_IN
e620: 54 45 47 45 52 2c 20 61 6e 64 20 73 6f 20 66 6f  TEGER, and so fo
e630: 72 74 68 2e 20 41 6e 20 61 74 74 65 6d 70 74 20  rth. An attempt 
e640: 69 73 20 6d 61 64 65 20 0a 2a 2a 20 74 6f 20 63  is made .** to c
e650: 6f 65 72 63 65 20 62 6f 74 68 20 69 6e 70 75 74  oerce both input
e660: 73 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74  s according to t
e670: 68 69 73 20 61 66 66 69 6e 69 74 79 20 62 65 66  his affinity bef
e680: 6f 72 65 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61  ore the.** compa
e690: 72 69 73 6f 6e 20 69 73 20 6d 61 64 65 2e 20 49  rison is made. I
e6a0: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46  f the SQLITE_AFF
e6b0: 5f 4d 41 53 4b 20 69 73 20 30 78 30 30 2c 20 74  _MASK is 0x00, t
e6c0: 68 65 6e 20 6e 75 6d 65 72 69 63 0a 2a 2a 20 61  hen numeric.** a
e6d0: 66 66 69 6e 69 74 79 20 69 73 20 75 73 65 64 2e  ffinity is used.
e6e0: 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 61   Note that the a
e6f0: 66 66 69 6e 69 74 79 20 63 6f 6e 76 65 72 73 69  ffinity conversi
e700: 6f 6e 73 20 61 72 65 20 73 74 6f 72 65 64 0a 2a  ons are stored.*
e710: 2a 20 62 61 63 6b 20 69 6e 74 6f 20 74 68 65 20  * back into the 
e720: 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 20  input registers 
e730: 50 31 20 61 6e 64 20 50 33 2e 20 20 53 6f 20 74  P1 and P3.  So t
e740: 68 69 73 20 6f 70 63 6f 64 65 20 63 61 6e 20 63  his opcode can c
e750: 61 75 73 65 0a 2a 2a 20 70 65 72 73 69 73 74 65  ause.** persiste
e760: 6e 74 20 63 68 61 6e 67 65 73 20 74 6f 20 72 65  nt changes to re
e770: 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50  gisters P1 and P
e780: 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e  3..**.** Once an
e790: 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 68 61  y conversions ha
e7a0: 76 65 20 74 61 6b 65 6e 20 70 6c 61 63 65 2c 20  ve taken place, 
e7b0: 61 6e 64 20 6e 65 69 74 68 65 72 20 76 61 6c 75  and neither valu
e7c0: 65 20 69 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74  e is NULL, .** t
e7d0: 68 65 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f  he values are co
e7e0: 6d 70 61 72 65 64 2e 20 49 66 20 62 6f 74 68 20  mpared. If both 
e7f0: 76 61 6c 75 65 73 20 61 72 65 20 62 6c 6f 62 73  values are blobs
e800: 20 74 68 65 6e 20 6d 65 6d 63 6d 70 28 29 20 69   then memcmp() i
e810: 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20 64 65 74  s.** used to det
e820: 65 72 6d 69 6e 65 20 74 68 65 20 72 65 73 75 6c  ermine the resul
e830: 74 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72  ts of the compar
e840: 69 73 6f 6e 2e 20 20 49 66 20 62 6f 74 68 20 76  ison.  If both v
e850: 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 74 65 78  alues.** are tex
e860: 74 2c 20 74 68 65 6e 20 74 68 65 20 61 70 70 72  t, then the appr
e870: 6f 70 72 69 61 74 65 20 63 6f 6c 6c 61 74 69 6e  opriate collatin
e880: 67 20 66 75 6e 63 74 69 6f 6e 20 73 70 65 63 69  g function speci
e890: 66 69 65 64 20 69 6e 0a 2a 2a 20 50 34 20 69 73  fied in.** P4 is
e8a0: 20 20 75 73 65 64 20 74 6f 20 64 6f 20 74 68 65    used to do the
e8b0: 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66   comparison.  If
e8c0: 20 50 34 20 69 73 20 6e 6f 74 20 73 70 65 63 69   P4 is not speci
e8d0: 66 69 65 64 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d  fied then.** mem
e8e0: 63 6d 70 28 29 20 69 73 20 75 73 65 64 20 74 6f  cmp() is used to
e8f0: 20 63 6f 6d 70 61 72 65 20 74 65 78 74 20 73 74   compare text st
e900: 72 69 6e 67 2e 20 20 49 66 20 62 6f 74 68 20 76  ring.  If both v
e910: 61 6c 75 65 73 20 61 72 65 0a 2a 2a 20 6e 75 6d  alues are.** num
e920: 65 72 69 63 2c 20 74 68 65 6e 20 61 20 6e 75 6d  eric, then a num
e930: 65 72 69 63 20 63 6f 6d 70 61 72 69 73 6f 6e 20  eric comparison 
e940: 69 73 20 75 73 65 64 2e 20 49 66 20 74 68 65 20  is used. If the 
e950: 74 77 6f 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72  two values.** ar
e960: 65 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20 74  e of different t
e970: 79 70 65 73 2c 20 74 68 65 6e 20 6e 75 6d 62 65  ypes, then numbe
e980: 72 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  rs are considere
e990: 64 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 73  d less than.** s
e9a0: 74 72 69 6e 67 73 20 61 6e 64 20 73 74 72 69 6e  trings and strin
e9b0: 67 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  gs are considere
e9c0: 64 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62  d less than blob
e9d0: 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  s..*/./* Opcode:
e9e0: 20 4c 65 20 50 31 20 50 32 20 50 33 20 50 34 20   Le P1 P2 P3 P4 
e9f0: 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
ea00: 49 46 20 72 5b 50 33 5d 3c 3d 72 5b 50 31 5d 0a  IF r[P3]<=r[P1].
ea10: 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73  **.** This works
ea20: 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c   just like the L
ea30: 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20  t opcode except 
ea40: 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73  that the jump is
ea50: 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65   taken if.** the
ea60: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
ea70: 73 74 65 72 20 50 33 20 69 73 20 6c 65 73 73 20  ster P3 is less 
ea80: 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
ea90: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a   the content of.
eaa0: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  ** register P1. 
eab0: 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f   See the Lt opco
eac0: 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  de for additiona
ead0: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
eae0: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 74 20  /./* Opcode: Gt 
eaf0: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
eb00: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49 46 20 72  * Synopsis: IF r
eb10: 5b 50 33 5d 3e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  [P3]>r[P1].**.**
eb20: 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74   This works just
eb30: 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63   like the Lt opc
eb40: 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20  ode except that 
eb50: 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
eb60: 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74  n if.** the cont
eb70: 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
eb80: 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68  P3 is greater th
eb90: 61 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  an the content o
eba0: 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31  f.** register P1
ebb0: 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70  .  See the Lt op
ebc0: 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f  code for additio
ebd0: 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
ebe0: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47  .*/./* Opcode: G
ebf0: 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
ec00: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49 46  .** Synopsis: IF
ec10: 20 72 5b 50 33 5d 3e 3d 72 5b 50 31 5d 0a 2a 2a   r[P3]>=r[P1].**
ec20: 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a  .** This works j
ec30: 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20  ust like the Lt 
ec40: 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68  opcode except th
ec50: 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  at the jump is t
ec60: 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63  aken if.** the c
ec70: 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
ec80: 65 72 20 50 33 20 69 73 20 67 72 65 61 74 65 72  er P3 is greater
ec90: 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
eca0: 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  o the content of
ecb0: 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e  .** register P1.
ecc0: 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63    See the Lt opc
ecd0: 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ode for addition
ece0: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
ecf0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 71 3a 20 20  */.case OP_Eq:  
ed00: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ed10: 73 61 6d 65 20 61 73 20 54 4b 5f 45 51 2c 20 6a  same as TK_EQ, j
ed20: 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
ed30: 0a 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20  .case OP_Ne:    
ed40: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
ed50: 6d 65 20 61 73 20 54 4b 5f 4e 45 2c 20 6a 75 6d  me as TK_NE, jum
ed60: 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63  p, in1, in3 */.c
ed70: 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20 20 20  ase OP_Lt:      
ed80: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
ed90: 20 61 73 20 54 4b 5f 4c 54 2c 20 6a 75 6d 70 2c   as TK_LT, jump,
eda0: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73   in1, in3 */.cas
edb0: 65 20 4f 50 5f 4c 65 3a 20 20 20 20 20 20 20 20  e OP_Le:        
edc0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
edd0: 73 20 54 4b 5f 4c 45 2c 20 6a 75 6d 70 2c 20 69  s TK_LE, jump, i
ede0: 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  n1, in3 */.case 
edf0: 4f 50 5f 47 74 3a 20 20 20 20 20 20 20 20 20 20  OP_Gt:          
ee00: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
ee10: 54 4b 5f 47 54 2c 20 6a 75 6d 70 2c 20 69 6e 31  TK_GT, jump, in1
ee20: 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
ee30: 5f 47 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  _Ge: {          
ee40: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
ee50: 5f 47 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _GE, jump, in1, 
ee60: 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73  in3 */.  int res
ee70: 2c 20 72 65 73 32 3b 20 20 20 20 20 20 2f 2a 20  , res2;      /* 
ee80: 52 65 73 75 6c 74 20 6f 66 20 74 68 65 20 63 6f  Result of the co
ee90: 6d 70 61 72 69 73 6f 6e 20 6f 66 20 70 49 6e 31  mparison of pIn1
eea0: 20 61 67 61 69 6e 73 74 20 70 49 6e 33 20 2a 2f   against pIn3 */
eeb0: 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79  .  char affinity
eec0: 3b 20 20 20 20 20 20 2f 2a 20 41 66 66 69 6e 69  ;      /* Affini
eed0: 74 79 20 74 6f 20 75 73 65 20 66 6f 72 20 63 6f  ty to use for co
eee0: 6d 70 61 72 69 73 6f 6e 20 2a 2f 0a 20 20 75 31  mparison */.  u1
eef0: 36 20 66 6c 61 67 73 31 3b 20 20 20 20 20 20 20  6 flags1;       
ef00: 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 69 6e 69    /* Copy of ini
ef10: 74 69 61 6c 20 76 61 6c 75 65 20 6f 66 20 70 49  tial value of pI
ef20: 6e 31 2d 3e 66 6c 61 67 73 20 2a 2f 0a 20 20 75  n1->flags */.  u
ef30: 31 36 20 66 6c 61 67 73 33 3b 20 20 20 20 20 20  16 flags3;      
ef40: 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 69 6e     /* Copy of in
ef50: 69 74 69 61 6c 20 76 61 6c 75 65 20 6f 66 20 70  itial value of p
ef60: 49 6e 33 2d 3e 66 6c 61 67 73 20 2a 2f 0a 0a 20  In3->flags */.. 
ef70: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
ef80: 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d  p->p1];.  pIn3 =
ef90: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
efa0: 0a 20 20 66 6c 61 67 73 31 20 3d 20 70 49 6e 31  .  flags1 = pIn1
efb0: 2d 3e 66 6c 61 67 73 3b 0a 20 20 66 6c 61 67 73  ->flags;.  flags
efc0: 33 20 3d 20 70 49 6e 33 2d 3e 66 6c 61 67 73 3b  3 = pIn3->flags;
efd0: 0a 20 20 69 66 28 20 28 66 6c 61 67 73 31 20 7c  .  if( (flags1 |
efe0: 20 66 6c 61 67 73 33 29 26 4d 45 4d 5f 4e 75 6c   flags3)&MEM_Nul
eff0: 6c 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 65 20  l ){.    /* One 
f000: 6f 72 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73  or both operands
f010: 20 61 72 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20   are NULL */.   
f020: 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53   if( pOp->p5 & S
f030: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 29 7b 0a  QLITE_NULLEQ ){.
f040: 20 20 20 20 20 20 2f 2a 20 49 66 20 53 51 4c 49        /* If SQLI
f050: 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74  TE_NULLEQ is set
f060: 20 28 77 68 69 63 68 20 77 69 6c 6c 20 6f 6e 6c   (which will onl
f070: 79 20 68 61 70 70 65 6e 20 69 66 20 74 68 65 20  y happen if the 
f080: 6f 70 65 72 61 74 6f 72 20 69 73 0a 20 20 20 20  operator is.    
f090: 20 20 2a 2a 20 4f 50 5f 45 71 20 6f 72 20 4f 50    ** OP_Eq or OP
f0a0: 5f 4e 65 29 20 74 68 65 6e 20 74 61 6b 65 20 74  _Ne) then take t
f0b0: 68 65 20 6a 75 6d 70 20 6f 72 20 6e 6f 74 20 64  he jump or not d
f0c0: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74  epending on whet
f0d0: 68 65 72 0a 20 20 20 20 20 20 2a 2a 20 6f 72 20  her.      ** or 
f0e0: 6e 6f 74 20 62 6f 74 68 20 6f 70 65 72 61 6e 64  not both operand
f0f0: 73 20 61 72 65 20 6e 75 6c 6c 2e 0a 20 20 20 20  s are null..    
f100: 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72    */.      asser
f110: 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
f120: 4f 50 5f 45 71 20 7c 7c 20 70 4f 70 2d 3e 6f 70  OP_Eq || pOp->op
f130: 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20  code==OP_Ne );. 
f140: 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66 6c       assert( (fl
f150: 61 67 73 31 20 26 20 4d 45 4d 5f 43 6c 65 61 72  ags1 & MEM_Clear
f160: 65 64 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  ed)==0 );.      
f170: 61 73 73 65 72 74 28 20 28 70 4f 70 2d 3e 70 35  assert( (pOp->p5
f180: 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46   & SQLITE_JUMPIF
f190: 4e 55 4c 4c 29 3d 3d 30 20 29 3b 0a 20 20 20 20  NULL)==0 );.    
f1a0: 20 20 69 66 28 20 28 66 6c 61 67 73 31 26 66 6c    if( (flags1&fl
f1b0: 61 67 73 33 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d  ags3&MEM_Null)!=
f1c0: 30 0a 20 20 20 20 20 20 20 26 26 20 28 66 6c 61  0.       && (fla
f1d0: 67 73 33 26 4d 45 4d 5f 43 6c 65 61 72 65 64 29  gs3&MEM_Cleared)
f1e0: 3d 3d 30 0a 20 20 20 20 20 20 29 7b 0a 20 20 20  ==0.      ){.   
f1f0: 20 20 20 20 20 72 65 73 20 3d 20 30 3b 20 20 2f       res = 0;  /
f200: 2a 20 4f 70 65 72 61 6e 64 73 20 61 72 65 20 65  * Operands are e
f210: 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 65  qual */.      }e
f220: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 72 65 73  lse{.        res
f230: 20 3d 20 31 3b 20 20 2f 2a 20 4f 70 65 72 61 6e   = 1;  /* Operan
f240: 64 73 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c  ds are not equal
f250: 20 2a 2f 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   */.      }.    
f260: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20  }else{.      /* 
f270: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73  SQLITE_NULLEQ is
f280: 20 63 6c 65 61 72 20 61 6e 64 20 61 74 20 6c 65   clear and at le
f290: 61 73 74 20 6f 6e 65 20 6f 70 65 72 61 6e 64 20  ast one operand 
f2a0: 69 73 20 4e 55 4c 4c 2c 0a 20 20 20 20 20 20 2a  is NULL,.      *
f2b0: 2a 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  * then the resul
f2c0: 74 20 69 73 20 61 6c 77 61 79 73 20 4e 55 4c 4c  t is always NULL
f2d0: 2e 0a 20 20 20 20 20 20 2a 2a 20 54 68 65 20 6a  ..      ** The j
f2e0: 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20  ump is taken if 
f2f0: 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  the SQLITE_JUMPI
f300: 46 4e 55 4c 4c 20 62 69 74 20 69 73 20 73 65 74  FNULL bit is set
f310: 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
f320: 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53   if( pOp->p5 & S
f330: 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b  QLITE_STOREP2 ){
f340: 0a 20 20 20 20 20 20 20 20 70 4f 75 74 20 3d 20  .        pOut = 
f350: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
f360: 20 20 20 20 20 20 20 20 69 43 6f 6d 70 61 72 65          iCompare
f370: 20 3d 20 31 3b 20 20 20 20 2f 2a 20 4f 70 65 72   = 1;    /* Oper
f380: 61 6e 64 73 20 61 72 65 20 6e 6f 74 20 65 71 75  ands are not equ
f390: 61 6c 20 2a 2f 0a 20 20 20 20 20 20 20 20 6d 65  al */.        me
f3a0: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
f3b0: 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 20  , pOut);.       
f3c0: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
f3d0: 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b  pOut, MEM_Null);
f3e0: 0a 20 20 20 20 20 20 20 20 52 45 47 49 53 54 45  .        REGISTE
f3f0: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c  R_TRACE(pOp->p2,
f400: 20 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 7d 65   pOut);.      }e
f410: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 56 64 62  lse{.        Vdb
f420: 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 32 2c 33  eBranchTaken(2,3
f430: 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  );.        if( p
f440: 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f  Op->p5 & SQLITE_
f450: 4a 55 4d 50 49 46 4e 55 4c 4c 20 29 7b 0a 20 20  JUMPIFNULL ){.  
f460: 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d          goto jum
f470: 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 20 20 20  p_to_p2;.       
f480: 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20   }.      }.     
f490: 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
f4a0: 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 4e 65  }else{.    /* Ne
f4b0: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
f4c0: 20 4e 55 4c 4c 2e 20 20 44 6f 20 61 20 63 6f 6d   NULL.  Do a com
f4d0: 70 61 72 69 73 6f 6e 2e 20 2a 2f 0a 20 20 20 20  parison. */.    
f4e0: 61 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e  affinity = pOp->
f4f0: 70 35 20 26 20 53 51 4c 49 54 45 5f 41 46 46 5f  p5 & SQLITE_AFF_
f500: 4d 41 53 4b 3b 0a 20 20 20 20 69 66 28 20 61 66  MASK;.    if( af
f510: 66 69 6e 69 74 79 3e 3d 53 51 4c 49 54 45 5f 41  finity>=SQLITE_A
f520: 46 46 5f 4e 55 4d 45 52 49 43 20 29 7b 0a 20 20  FF_NUMERIC ){.  
f530: 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 31 20      if( (flags1 
f540: 7c 20 66 6c 61 67 73 33 29 26 4d 45 4d 5f 53 74  | flags3)&MEM_St
f550: 72 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28  r ){.        if(
f560: 20 28 66 6c 61 67 73 31 20 26 20 28 4d 45 4d 5f   (flags1 & (MEM_
f570: 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d  Int|MEM_Real|MEM
f580: 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20  _Str))==MEM_Str 
f590: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 61 70 70  ){.          app
f5a0: 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
f5b0: 79 28 70 49 6e 31 2c 30 29 3b 0a 20 20 20 20 20  y(pIn1,0);.     
f5c0: 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 66       testcase( f
f5d0: 6c 61 67 73 33 21 3d 70 49 6e 33 2d 3e 66 6c 61  lags3!=pIn3->fla
f5e0: 67 73 20 29 3b 20 2f 2a 20 50 6f 73 73 69 62 6c  gs ); /* Possibl
f5f0: 65 20 69 66 20 70 49 6e 31 3d 3d 70 49 6e 33 20  e if pIn1==pIn3 
f600: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 66 6c 61  */.          fla
f610: 67 73 33 20 3d 20 70 49 6e 33 2d 3e 66 6c 61 67  gs3 = pIn3->flag
f620: 73 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  s;.        }.   
f630: 20 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 33       if( (flags3
f640: 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f   & (MEM_Int|MEM_
f650: 52 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d  Real|MEM_Str))==
f660: 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 20  MEM_Str ){.     
f670: 20 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69       applyNumeri
f680: 63 41 66 66 69 6e 69 74 79 28 70 49 6e 33 2c 30  cAffinity(pIn3,0
f690: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
f6a0: 20 20 20 7d 0a 20 20 20 20 20 20 2f 2a 20 48 61     }.      /* Ha
f6b0: 6e 64 6c 65 20 74 68 65 20 63 6f 6d 6d 6f 6e 20  ndle the common 
f6c0: 63 61 73 65 20 6f 66 20 69 6e 74 65 67 65 72 20  case of integer 
f6d0: 63 6f 6d 70 61 72 69 73 6f 6e 20 68 65 72 65 2c  comparison here,
f6e0: 20 61 73 20 61 6e 0a 20 20 20 20 20 20 2a 2a 20   as an.      ** 
f6f0: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2c 20 74 6f  optimization, to
f700: 20 61 76 6f 69 64 20 61 20 63 61 6c 6c 20 74 6f   avoid a call to
f710: 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61   sqlite3MemCompa
f720: 72 65 28 29 20 2a 2f 0a 20 20 20 20 20 20 69 66  re() */.      if
f730: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
f740: 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn3->flags & M
f750: 45 4d 5f 49 6e 74 29 21 3d 30 20 29 7b 0a 20 20  EM_Int)!=0 ){.  
f760: 20 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e        if( pIn3->
f770: 75 2e 69 20 3e 20 70 49 6e 31 2d 3e 75 2e 69 20  u.i > pIn1->u.i 
f780: 29 7b 20 72 65 73 20 3d 20 2b 31 3b 20 67 6f 74  ){ res = +1; got
f790: 6f 20 63 6f 6d 70 61 72 65 5f 6f 70 3b 20 7d 0a  o compare_op; }.
f7a0: 20 20 20 20 20 20 20 20 69 66 28 20 70 49 6e 33          if( pIn3
f7b0: 2d 3e 75 2e 69 20 3c 20 70 49 6e 31 2d 3e 75 2e  ->u.i < pIn1->u.
f7c0: 69 20 29 7b 20 72 65 73 20 3d 20 2d 31 3b 20 67  i ){ res = -1; g
f7d0: 6f 74 6f 20 63 6f 6d 70 61 72 65 5f 6f 70 3b 20  oto compare_op; 
f7e0: 7d 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d 20  }.        res = 
f7f0: 30 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  0;.        goto 
f800: 63 6f 6d 70 61 72 65 5f 6f 70 3b 0a 20 20 20 20  compare_op;.    
f810: 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 20 69 66    }.    }else if
f820: 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49  ( affinity==SQLI
f830: 54 45 5f 41 46 46 5f 54 45 58 54 20 29 7b 0a 20  TE_AFF_TEXT ){. 
f840: 20 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 31       if( (flags1
f850: 20 26 20 4d 45 4d 5f 53 74 72 29 3d 3d 30 20 26   & MEM_Str)==0 &
f860: 26 20 28 66 6c 61 67 73 31 20 26 20 28 4d 45 4d  & (flags1 & (MEM
f870: 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 21  _Int|MEM_Real))!
f880: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 74 65  =0 ){.        te
f890: 73 74 63 61 73 65 28 20 70 49 6e 31 2d 3e 66 6c  stcase( pIn1->fl
f8a0: 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b  ags & MEM_Int );
f8b0: 0a 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73  .        testcas
f8c0: 65 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  e( pIn1->flags &
f8d0: 20 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a 20 20 20   MEM_Real );.   
f8e0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
f8f0: 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 70 49 6e  MemStringify(pIn
f900: 31 2c 20 65 6e 63 6f 64 69 6e 67 2c 20 31 29 3b  1, encoding, 1);
f910: 0a 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73  .        testcas
f920: 65 28 20 28 66 6c 61 67 73 31 26 4d 45 4d 5f 44  e( (flags1&MEM_D
f930: 79 6e 29 20 21 3d 20 28 70 49 6e 31 2d 3e 66 6c  yn) != (pIn1->fl
f940: 61 67 73 26 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a  ags&MEM_Dyn) );.
f950: 20 20 20 20 20 20 20 20 66 6c 61 67 73 31 20 3d          flags1 =
f960: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
f970: 7e 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c  ~MEM_TypeMask) |
f980: 20 28 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f 54   (flags1 & MEM_T
f990: 79 70 65 4d 61 73 6b 29 3b 0a 20 20 20 20 20 20  ypeMask);.      
f9a0: 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 21 3d    assert( pIn1!=
f9b0: 70 49 6e 33 20 29 3b 0a 20 20 20 20 20 20 7d 0a  pIn3 );.      }.
f9c0: 20 20 20 20 20 20 69 66 28 20 28 66 6c 61 67 73        if( (flags
f9d0: 33 20 26 20 4d 45 4d 5f 53 74 72 29 3d 3d 30 20  3 & MEM_Str)==0 
f9e0: 26 26 20 28 66 6c 61 67 73 33 20 26 20 28 4d 45  && (flags3 & (ME
f9f0: 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29  M_Int|MEM_Real))
fa00: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 74  !=0 ){.        t
fa10: 65 73 74 63 61 73 65 28 20 70 49 6e 33 2d 3e 66  estcase( pIn3->f
fa20: 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
fa30: 3b 0a 20 20 20 20 20 20 20 20 74 65 73 74 63 61  ;.        testca
fa40: 73 65 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20  se( pIn3->flags 
fa50: 26 20 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a 20 20  & MEM_Real );.  
fa60: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
fa70: 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 70 49  eMemStringify(pI
fa80: 6e 33 2c 20 65 6e 63 6f 64 69 6e 67 2c 20 31 29  n3, encoding, 1)
fa90: 3b 0a 20 20 20 20 20 20 20 20 74 65 73 74 63 61  ;.        testca
faa0: 73 65 28 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f  se( (flags3&MEM_
fab0: 44 79 6e 29 20 21 3d 20 28 70 49 6e 33 2d 3e 66  Dyn) != (pIn3->f
fac0: 6c 61 67 73 26 4d 45 4d 5f 44 79 6e 29 20 29 3b  lags&MEM_Dyn) );
fad0: 0a 20 20 20 20 20 20 20 20 66 6c 61 67 73 33 20  .        flags3 
fae0: 3d 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  = (pIn3->flags &
faf0: 20 7e 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20   ~MEM_TypeMask) 
fb00: 7c 20 28 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f  | (flags3 & MEM_
fb10: 54 79 70 65 4d 61 73 6b 29 3b 0a 20 20 20 20 20  TypeMask);.     
fb20: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73   }.    }.    ass
fb30: 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
fb40: 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 7c 7c 20  ==P4_COLLSEQ || 
fb50: 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 3d 3d 30  pOp->p4.pColl==0
fb60: 20 29 3b 0a 20 20 20 20 72 65 73 20 3d 20 73 71   );.    res = sq
fb70: 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28  lite3MemCompare(
fb80: 70 49 6e 33 2c 20 70 49 6e 31 2c 20 70 4f 70 2d  pIn3, pIn1, pOp-
fb90: 3e 70 34 2e 70 43 6f 6c 6c 29 3b 0a 20 20 7d 0a  >p4.pColl);.  }.
fba0: 63 6f 6d 70 61 72 65 5f 6f 70 3a 0a 20 20 2f 2a  compare_op:.  /*
fbb0: 20 41 74 20 74 68 69 73 20 70 6f 69 6e 74 2c 20   At this point, 
fbc0: 72 65 73 20 69 73 20 6e 65 67 61 74 69 76 65 2c  res is negative,
fbd0: 20 7a 65 72 6f 2c 20 6f 72 20 70 6f 73 69 74 69   zero, or positi
fbe0: 76 65 20 69 66 20 72 65 67 5b 50 31 5d 20 69 73  ve if reg[P1] is
fbf0: 0a 20 20 2a 2a 20 6c 65 73 73 20 74 68 61 6e 2c  .  ** less than,
fc00: 20 65 71 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72   equal to, or gr
fc10: 65 61 74 65 72 20 74 68 61 6e 20 72 65 67 5b 50  eater than reg[P
fc20: 33 5d 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  3], respectively
fc30: 2e 20 20 43 6f 6d 70 75 74 65 0a 20 20 2a 2a 20  .  Compute.  ** 
fc40: 74 68 65 20 61 6e 73 77 65 72 20 74 6f 20 74 68  the answer to th
fc50: 69 73 20 6f 70 65 72 61 74 6f 72 20 69 6e 20 72  is operator in r
fc60: 65 73 32 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f  es2, depending o
fc70: 6e 20 77 68 61 74 20 74 68 65 20 63 6f 6d 70 61  n what the compa
fc80: 72 69 73 6f 6e 0a 20 20 2a 2a 20 6f 70 65 72 61  rison.  ** opera
fc90: 74 6f 72 20 61 63 74 75 61 6c 6c 79 20 69 73 2e  tor actually is.
fca0: 20 20 54 68 65 20 6e 65 78 74 20 62 6c 6f 63 6b    The next block
fcb0: 20 6f 66 20 63 6f 64 65 20 64 65 70 65 6e 64 73   of code depends
fcc0: 20 6f 6e 20 74 68 65 20 66 61 63 74 0a 20 20 2a   on the fact.  *
fcd0: 2a 20 74 68 61 74 20 74 68 65 20 36 20 63 6f 6d  * that the 6 com
fce0: 70 61 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f 72  parison operator
fcf0: 73 20 61 72 65 20 63 6f 6e 73 65 63 75 74 69 76  s are consecutiv
fd00: 65 20 69 6e 74 65 67 65 72 73 20 69 6e 20 74 68  e integers in th
fd10: 69 73 0a 20 20 2a 2a 20 6f 72 64 65 72 3a 20 20  is.  ** order:  
fd20: 4e 45 2c 20 45 51 2c 20 47 54 2c 20 4c 45 2c 20  NE, EQ, GT, LE, 
fd30: 4c 54 2c 20 47 45 20 2a 2f 0a 20 20 61 73 73 65  LT, GE */.  asse
fd40: 72 74 28 20 4f 50 5f 45 71 3d 3d 4f 50 5f 4e 65  rt( OP_Eq==OP_Ne
fd50: 2b 31 20 29 3b 20 61 73 73 65 72 74 28 20 4f 50  +1 ); assert( OP
fd60: 5f 47 74 3d 3d 4f 50 5f 4e 65 2b 32 20 29 3b 20  _Gt==OP_Ne+2 ); 
fd70: 61 73 73 65 72 74 28 20 4f 50 5f 4c 65 3d 3d 4f  assert( OP_Le==O
fd80: 50 5f 4e 65 2b 33 20 29 3b 0a 20 20 61 73 73 65  P_Ne+3 );.  asse
fd90: 72 74 28 20 4f 50 5f 4c 74 3d 3d 4f 50 5f 4e 65  rt( OP_Lt==OP_Ne
fda0: 2b 34 20 29 3b 20 61 73 73 65 72 74 28 20 4f 50  +4 ); assert( OP
fdb0: 5f 47 65 3d 3d 4f 50 5f 4e 65 2b 35 20 29 3b 0a  _Ge==OP_Ne+5 );.
fdc0: 20 20 69 66 28 20 72 65 73 3c 30 20 29 7b 20 20    if( res<0 ){  
fdd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fde0: 20 20 20 20 20 20 2f 2a 20 6e 65 2c 20 65 71 2c        /* ne, eq,
fdf0: 20 67 74 2c 20 6c 65 2c 20 6c 74 2c 20 67 65 20   gt, le, lt, ge 
fe00: 2a 2f 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f  */.    static co
fe10: 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
fe20: 72 20 61 4c 54 62 5b 5d 20 3d 20 7b 20 31 2c 20  r aLTb[] = { 1, 
fe30: 20 30 2c 20 20 30 2c 20 20 31 2c 20 20 31 2c 20   0,  0,  1,  1, 
fe40: 20 30 20 7d 3b 0a 20 20 20 20 72 65 73 32 20 3d   0 };.    res2 =
fe50: 20 61 4c 54 62 5b 70 4f 70 2d 3e 6f 70 63 6f 64   aLTb[pOp->opcod
fe60: 65 20 2d 20 4f 50 5f 4e 65 5d 3b 0a 20 20 7d 65  e - OP_Ne];.  }e
fe70: 6c 73 65 20 69 66 28 20 72 65 73 3d 3d 30 20 29  lse if( res==0 )
fe80: 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e  {.    static con
fe90: 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
fea0: 20 61 45 51 62 5b 5d 20 3d 20 7b 20 30 2c 20 20   aEQb[] = { 0,  
feb0: 31 2c 20 20 30 2c 20 20 31 2c 20 20 30 2c 20 20  1,  0,  1,  0,  
fec0: 31 20 7d 3b 0a 20 20 20 20 72 65 73 32 20 3d 20  1 };.    res2 = 
fed0: 61 45 51 62 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65  aEQb[pOp->opcode
fee0: 20 2d 20 4f 50 5f 4e 65 5d 3b 0a 20 20 7d 65 6c   - OP_Ne];.  }el
fef0: 73 65 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63  se{.    static c
ff00: 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
ff10: 61 72 20 61 47 54 62 5b 5d 20 3d 20 7b 20 31 2c  ar aGTb[] = { 1,
ff20: 20 20 30 2c 20 20 31 2c 20 20 30 2c 20 20 30 2c    0,  1,  0,  0,
ff30: 20 20 31 20 7d 3b 0a 20 20 20 20 72 65 73 32 20    1 };.    res2 
ff40: 3d 20 61 47 54 62 5b 70 4f 70 2d 3e 6f 70 63 6f  = aGTb[pOp->opco
ff50: 64 65 20 2d 20 4f 50 5f 4e 65 5d 3b 0a 20 20 7d  de - OP_Ne];.  }
ff60: 0a 0a 20 20 2f 2a 20 55 6e 64 6f 20 61 6e 79 20  ..  /* Undo any 
ff70: 63 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20  changes made by 
ff80: 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 29 20  applyAffinity() 
ff90: 74 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65 67  to the input reg
ffa0: 69 73 74 65 72 73 2e 20 2a 2f 0a 20 20 61 73 73  isters. */.  ass
ffb0: 65 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67  ert( (pIn1->flag
ffc0: 73 20 26 20 4d 45 4d 5f 44 79 6e 29 20 3d 3d 20  s & MEM_Dyn) == 
ffd0: 28 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f 44 79  (flags1 & MEM_Dy
ffe0: 6e 29 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c  n) );.  pIn1->fl
fff0: 61 67 73 20 3d 20 66 6c 61 67 73 31 3b 0a 20 20  ags = flags1;.  
10000 61 73 73 65 72 74 28 20 28 70 49 6e 33 2d 3e 66  assert( (pIn3->f
10010 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 20  lags & MEM_Dyn) 
10020 3d 3d 20 28 66 6c 61 67 73 33 20 26 20 4d 45 4d  == (flags3 & MEM
10030 5f 44 79 6e 29 20 29 3b 0a 20 20 70 49 6e 33 2d  _Dyn) );.  pIn3-
10040 3e 66 6c 61 67 73 20 3d 20 66 6c 61 67 73 33 3b  >flags = flags3;
10050 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  ..  if( pOp->p5 
10060 26 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32  & SQLITE_STOREP2
10070 20 29 7b 0a 20 20 20 20 70 4f 75 74 20 3d 20 26   ){.    pOut = &
10080 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
10090 20 20 20 69 43 6f 6d 70 61 72 65 20 3d 20 72 65     iCompare = re
100a0 73 3b 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d  s;.    if( (pOp-
100b0 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4b 45 45  >p5 & SQLITE_KEE
100c0 50 4e 55 4c 4c 29 21 3d 30 20 29 7b 0a 20 20 20  PNULL)!=0 ){.   
100d0 20 20 20 2f 2a 20 54 68 65 20 4b 45 45 50 4e 55     /* The KEEPNU
100e0 4c 4c 20 66 6c 61 67 20 70 72 65 76 65 6e 74 73  LL flag prevents
100f0 20 4f 50 5f 45 71 20 66 72 6f 6d 20 6f 76 65 72   OP_Eq from over
10100 77 72 69 74 69 6e 67 20 61 20 4e 55 4c 4c 20 77  writing a NULL w
10110 69 74 68 20 31 0a 20 20 20 20 20 20 2a 2a 20 61  ith 1.      ** a
10120 6e 64 20 70 72 65 76 65 6e 74 73 20 4f 50 5f 4e  nd prevents OP_N
10130 65 20 66 72 6f 6d 20 6f 76 65 72 77 72 69 74 69  e from overwriti
10140 6e 67 20 4e 55 4c 4c 20 77 69 74 68 20 30 2e 20  ng NULL with 0. 
10150 20 54 68 69 73 20 66 6c 61 67 0a 20 20 20 20 20   This flag.     
10160 20 2a 2a 20 69 73 20 6f 6e 6c 79 20 75 73 65 64   ** is only used
10170 20 69 6e 20 63 6f 6e 74 65 78 74 73 20 77 68 65   in contexts whe
10180 72 65 20 65 69 74 68 65 72 3a 0a 20 20 20 20 20  re either:.     
10190 20 2a 2a 20 20 20 28 31 29 20 6f 70 3d 3d 4f 50   **   (1) op==OP
101a0 5f 45 71 20 26 26 20 28 72 5b 50 32 5d 3d 3d 4e  _Eq && (r[P2]==N
101b0 55 4c 4c 20 7c 7c 20 72 5b 50 32 5d 3d 3d 30 29  ULL || r[P2]==0)
101c0 0a 20 20 20 20 20 20 2a 2a 20 20 20 28 32 29 20  .      **   (2) 
101d0 6f 70 3d 3d 4f 50 5f 4e 65 20 26 26 20 28 72 5b  op==OP_Ne && (r[
101e0 50 32 5d 3d 3d 4e 55 4c 4c 20 7c 7c 20 72 5b 50  P2]==NULL || r[P
101f0 32 5d 3d 3d 31 29 0a 20 20 20 20 20 20 2a 2a 20  2]==1).      ** 
10200 54 68 65 72 65 66 6f 72 65 20 69 74 20 69 73 20  Therefore it is 
10210 6e 6f 74 20 6e 65 63 65 73 73 61 72 79 20 74 6f  not necessary to
10220 20 63 68 65 63 6b 20 74 68 65 20 63 6f 6e 74 65   check the conte
10230 6e 74 20 6f 66 20 72 5b 50 32 5d 20 66 6f 72 0a  nt of r[P2] for.
10240 20 20 20 20 20 20 2a 2a 20 4e 55 4c 4c 2e 20 2a        ** NULL. *
10250 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  /.      assert( 
10260 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
10270 4e 65 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  Ne || pOp->opcod
10280 65 3d 3d 4f 50 5f 45 71 20 29 3b 0a 20 20 20 20  e==OP_Eq );.    
10290 20 20 61 73 73 65 72 74 28 20 72 65 73 32 3d 3d    assert( res2==
102a0 30 20 7c 7c 20 72 65 73 32 3d 3d 31 20 29 3b 0a  0 || res2==1 );.
102b0 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
102c0 72 65 73 32 3d 3d 30 20 26 26 20 70 4f 70 2d 3e  res2==0 && pOp->
102d0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 29 3b  opcode==OP_Eq );
102e0 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28  .      testcase(
102f0 20 72 65 73 32 3d 3d 31 20 26 26 20 70 4f 70 2d   res2==1 && pOp-
10300 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 29  >opcode==OP_Eq )
10310 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65  ;.      testcase
10320 28 20 72 65 73 32 3d 3d 30 20 26 26 20 70 4f 70  ( res2==0 && pOp
10330 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20  ->opcode==OP_Ne 
10340 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73  );.      testcas
10350 65 28 20 72 65 73 32 3d 3d 31 20 26 26 20 70 4f  e( res2==1 && pO
10360 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65  p->opcode==OP_Ne
10370 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 28 70   );.      if( (p
10380 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45  Op->opcode==OP_E
10390 71 29 3d 3d 72 65 73 32 20 29 20 62 72 65 61 6b  q)==res2 ) break
103a0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6d 65 6d 41  ;.    }.    memA
103b0 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
103c0 70 4f 75 74 29 3b 0a 20 20 20 20 4d 65 6d 53 65  pOut);.    MemSe
103d0 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
103e0 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 70 4f  MEM_Int);.    pO
103f0 75 74 2d 3e 75 2e 69 20 3d 20 72 65 73 32 3b 0a  ut->u.i = res2;.
10400 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
10410 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74  CE(pOp->p2, pOut
10420 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
10430 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
10440 72 65 73 21 3d 30 2c 20 28 70 4f 70 2d 3e 70 35  res!=0, (pOp->p5
10450 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51   & SQLITE_NULLEQ
10460 29 3f 32 3a 33 29 3b 0a 20 20 20 20 69 66 28 20  )?2:3);.    if( 
10470 72 65 73 32 20 29 7b 0a 20 20 20 20 20 20 67 6f  res2 ){.      go
10480 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
10490 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
104a0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
104b0 45 6c 73 65 4e 6f 74 45 71 20 2a 20 50 32 20 2a  ElseNotEq * P2 *
104c0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   * *.**.** This 
104d0 6f 70 63 6f 64 65 20 6d 75 73 74 20 69 6d 6d 65  opcode must imme
104e0 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 20 61  diately follow a
104f0 6e 20 4f 50 5f 4c 74 20 6f 72 20 4f 50 5f 47 74  n OP_Lt or OP_Gt
10500 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72   comparison oper
10510 61 74 6f 72 2e 0a 2a 2a 20 49 66 20 72 65 73 75  ator..** If resu
10520 6c 74 20 6f 66 20 61 6e 20 4f 50 5f 45 71 20 63  lt of an OP_Eq c
10530 6f 6d 70 61 72 69 73 6f 6e 20 6f 6e 20 74 68 65  omparison on the
10540 20 73 61 6d 65 20 74 77 6f 20 6f 70 65 72 61 6e   same two operan
10550 64 73 0a 2a 2a 20 77 6f 75 6c 64 20 68 61 76 65  ds.** would have
10560 20 62 65 20 4e 55 4c 4c 20 6f 72 20 66 61 6c 73   be NULL or fals
10570 65 20 28 30 29 2c 20 74 68 65 6e 20 74 68 65 6e  e (0), then then
10580 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a   jump to P2. .**
10590 20 49 66 20 74 68 65 20 72 65 73 75 6c 74 20 6f   If the result o
105a0 66 20 61 6e 20 4f 50 5f 45 71 20 63 6f 6d 70 61  f an OP_Eq compa
105b0 72 69 73 6f 6e 20 6f 6e 20 74 68 65 20 74 77 6f  rison on the two
105c0 20 70 72 65 76 69 6f 75 73 20 6f 70 65 72 61 6e   previous operan
105d0 64 73 0a 2a 2a 20 77 6f 75 6c 64 20 68 61 76 65  ds.** would have
105e0 20 62 65 65 6e 20 74 72 75 65 20 28 31 29 2c 20   been true (1), 
105f0 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67  then fall throug
10600 68 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 6c  h..*/.case OP_El
10610 73 65 4e 6f 74 45 71 3a 20 7b 20 20 20 20 20 20  seNotEq: {      
10620 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 45   /* same as TK_E
10630 53 43 41 50 45 2c 20 6a 75 6d 70 20 2a 2f 0a 20  SCAPE, jump */. 
10640 20 61 73 73 65 72 74 28 20 70 4f 70 3e 61 4f 70   assert( pOp>aOp
10650 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
10660 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50  p[-1].opcode==OP
10670 5f 4c 74 20 7c 7c 20 70 4f 70 5b 2d 31 5d 2e 6f  _Lt || pOp[-1].o
10680 70 63 6f 64 65 3d 3d 4f 50 5f 47 74 20 29 3b 0a  pcode==OP_Gt );.
10690 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31    assert( pOp[-1
106a0 5d 2e 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54  ].p5 & SQLITE_ST
106b0 4f 52 45 50 32 20 29 3b 0a 20 20 56 64 62 65 42  OREP2 );.  VdbeB
106c0 72 61 6e 63 68 54 61 6b 65 6e 28 69 43 6f 6d 70  ranchTaken(iComp
106d0 61 72 65 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66  are!=0, 2);.  if
106e0 28 20 69 43 6f 6d 70 61 72 65 21 3d 30 20 29 20  ( iCompare!=0 ) 
106f0 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
10700 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a  .  break;.}.../*
10710 20 4f 70 63 6f 64 65 3a 20 50 65 72 6d 75 74 61   Opcode: Permuta
10720 74 69 6f 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a  tion * * * P4 *.
10730 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 70 65  **.** Set the pe
10740 72 6d 75 74 61 74 69 6f 6e 20 75 73 65 64 20 62  rmutation used b
10750 79 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65  y the OP_Compare
10760 20 6f 70 65 72 61 74 6f 72 20 69 6e 20 74 68 65   operator in the
10770 20 6e 65 78 74 0a 2a 2a 20 69 6e 73 74 72 75 63   next.** instruc
10780 74 69 6f 6e 2e 20 20 54 68 65 20 70 65 72 6d 75  tion.  The permu
10790 74 61 74 69 6f 6e 20 69 73 20 73 74 6f 72 65 64  tation is stored
107a0 20 69 6e 20 74 68 65 20 50 34 20 6f 70 65 72 61   in the P4 opera
107b0 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 65  nd..**.** The pe
107c0 72 6d 75 74 61 74 69 6f 6e 20 69 73 20 6f 6e 6c  rmutation is onl
107d0 79 20 76 61 6c 69 64 20 75 6e 74 69 6c 20 74 68  y valid until th
107e0 65 20 6e 65 78 74 20 4f 50 5f 43 6f 6d 70 61 72  e next OP_Compar
107f0 65 20 74 68 61 74 20 68 61 73 0a 2a 2a 20 74 68  e that has.** th
10800 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45  e OPFLAG_PERMUTE
10810 20 62 69 74 20 73 65 74 20 69 6e 20 50 35 2e 20   bit set in P5. 
10820 54 79 70 69 63 61 6c 6c 79 20 74 68 65 20 4f 50  Typically the OP
10830 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20 73 68 6f  _Permutation sho
10840 75 6c 64 20 0a 2a 2a 20 6f 63 63 75 72 20 69 6d  uld .** occur im
10850 6d 65 64 69 61 74 65 6c 79 20 70 72 69 6f 72 20  mediately prior 
10860 74 6f 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72  to the OP_Compar
10870 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 69 72  e..**.** The fir
10880 73 74 20 69 6e 74 65 67 65 72 20 69 6e 20 74 68  st integer in th
10890 65 20 50 34 20 69 6e 74 65 67 65 72 20 61 72 72  e P4 integer arr
108a0 61 79 20 69 73 20 74 68 65 20 6c 65 6e 67 74 68  ay is the length
108b0 20 6f 66 20 74 68 65 20 61 72 72 61 79 0a 2a 2a   of the array.**
108c0 20 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 62 65   and does not be
108d0 63 6f 6d 65 20 70 61 72 74 20 6f 66 20 74 68 65  come part of the
108e0 20 70 65 72 6d 75 74 61 74 69 6f 6e 2e 0a 2a 2f   permutation..*/
108f0 0a 63 61 73 65 20 4f 50 5f 50 65 72 6d 75 74 61  .case OP_Permuta
10900 74 69 6f 6e 3a 20 7b 0a 20 20 61 73 73 65 72 74  tion: {.  assert
10910 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
10920 34 5f 49 4e 54 41 52 52 41 59 20 29 3b 0a 20 20  4_INTARRAY );.  
10930 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
10940 61 69 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ai );.  assert( 
10950 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f  pOp[1].opcode==O
10960 50 5f 43 6f 6d 70 61 72 65 20 29 3b 0a 20 20 61  P_Compare );.  a
10970 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70 35  ssert( pOp[1].p5
10980 20 26 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54   & OPFLAG_PERMUT
10990 45 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  E );.  break;.}.
109a0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6d 70  ./* Opcode: Comp
109b0 61 72 65 20 50 31 20 50 32 20 50 33 20 50 34 20  are P1 P2 P3 P4 
109c0 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
109d0 72 5b 50 31 40 50 33 5d 20 3c 2d 3e 20 72 5b 50  r[P1@P3] <-> r[P
109e0 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70  2@P3].**.** Comp
109f0 61 72 65 20 74 77 6f 20 76 65 63 74 6f 72 73 20  are two vectors 
10a00 6f 66 20 72 65 67 69 73 74 65 72 73 20 69 6e 20  of registers in 
10a10 72 65 67 28 50 31 29 2e 2e 72 65 67 28 50 31 2b  reg(P1)..reg(P1+
10a20 50 33 2d 31 29 20 28 63 61 6c 6c 20 74 68 69 73  P3-1) (call this
10a30 0a 2a 2a 20 76 65 63 74 6f 72 20 22 41 22 29 20  .** vector "A") 
10a40 61 6e 64 20 69 6e 20 72 65 67 28 50 32 29 2e 2e  and in reg(P2)..
10a50 72 65 67 28 50 32 2b 50 33 2d 31 29 20 28 22 42  reg(P2+P3-1) ("B
10a60 22 29 2e 20 20 53 61 76 65 20 74 68 65 20 72 65  ").  Save the re
10a70 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20 63  sult of.** the c
10a80 6f 6d 70 61 72 69 73 6f 6e 20 66 6f 72 20 75 73  omparison for us
10a90 65 20 62 79 20 74 68 65 20 6e 65 78 74 20 4f 50  e by the next OP
10aa0 5f 4a 75 6d 70 20 69 6e 73 74 72 75 63 74 2e 0a  _Jump instruct..
10ab0 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20  **.** If P5 has 
10ac0 74 68 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55  the OPFLAG_PERMU
10ad0 54 45 20 62 69 74 20 73 65 74 2c 20 74 68 65 6e  TE bit set, then
10ae0 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20 63 6f   the order of co
10af0 6d 70 61 72 69 73 6f 6e 20 69 73 0a 2a 2a 20 64  mparison is.** d
10b00 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65  etermined by the
10b10 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f 50 5f   most recent OP_
10b20 50 65 72 6d 75 74 61 74 69 6f 6e 20 6f 70 65 72  Permutation oper
10b30 61 74 6f 72 2e 20 20 49 66 20 74 68 65 0a 2a 2a  ator.  If the.**
10b40 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20   OPFLAG_PERMUTE 
10b50 62 69 74 20 69 73 20 63 6c 65 61 72 2c 20 74 68  bit is clear, th
10b60 65 6e 20 72 65 67 69 73 74 65 72 20 61 72 65 20  en register are 
10b70 63 6f 6d 70 61 72 65 64 20 69 6e 20 73 65 71 75  compared in sequ
10b80 65 6e 74 69 61 6c 0a 2a 2a 20 6f 72 64 65 72 2e  ential.** order.
10b90 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 4b  .**.** P4 is a K
10ba0 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65  eyInfo structure
10bb0 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 63 6f   that defines co
10bc0 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
10bd0 73 20 61 6e 64 20 73 6f 72 74 0a 2a 2a 20 6f 72  s and sort.** or
10be0 64 65 72 73 20 66 6f 72 20 74 68 65 20 63 6f 6d  ders for the com
10bf0 70 61 72 69 73 6f 6e 2e 20 20 54 68 65 20 70 65  parison.  The pe
10c00 72 6d 75 74 61 74 69 6f 6e 20 61 70 70 6c 69 65  rmutation applie
10c10 73 20 74 6f 20 72 65 67 69 73 74 65 72 73 0a 2a  s to registers.*
10c20 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 20 4b 65 79  * only.  The Key
10c30 49 6e 66 6f 20 65 6c 65 6d 65 6e 74 73 20 61 72  Info elements ar
10c40 65 20 75 73 65 64 20 73 65 71 75 65 6e 74 69 61  e used sequentia
10c50 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63  lly..**.** The c
10c60 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 20 73  omparison is a s
10c70 6f 72 74 20 63 6f 6d 70 61 72 69 73 6f 6e 2c 20  ort comparison, 
10c80 73 6f 20 4e 55 4c 4c 73 20 63 6f 6d 70 61 72 65  so NULLs compare
10c90 20 65 71 75 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73   equal,.** NULLs
10ca0 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 6e   are less than n
10cb0 75 6d 62 65 72 73 2c 20 6e 75 6d 62 65 72 73 20  umbers, numbers 
10cc0 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 73 74  are less than st
10cd0 72 69 6e 67 73 2c 0a 2a 2a 20 61 6e 64 20 73 74  rings,.** and st
10ce0 72 69 6e 67 73 20 61 72 65 20 6c 65 73 73 20 74  rings are less t
10cf0 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 63 61  han blobs..*/.ca
10d00 73 65 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 7b  se OP_Compare: {
10d10 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20  .  int n;.  int 
10d20 69 3b 0a 20 20 69 6e 74 20 70 31 3b 0a 20 20 69  i;.  int p1;.  i
10d30 6e 74 20 70 32 3b 0a 20 20 63 6f 6e 73 74 20 4b  nt p2;.  const K
10d40 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f  eyInfo *pKeyInfo
10d50 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 43  ;.  int idx;.  C
10d60 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b 20 20  ollSeq *pColl;  
10d70 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73    /* Collating s
10d80 65 71 75 65 6e 63 65 20 74 6f 20 75 73 65 20 6f  equence to use o
10d90 6e 20 74 68 69 73 20 74 65 72 6d 20 2a 2f 0a 20  n this term */. 
10da0 20 69 6e 74 20 62 52 65 76 3b 20 20 20 20 20 20   int bRev;      
10db0 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20      /* True for 
10dc0 44 45 53 43 45 4e 44 49 4e 47 20 73 6f 72 74 20  DESCENDING sort 
10dd0 6f 72 64 65 72 20 2a 2f 0a 20 20 69 6e 74 20 2a  order */.  int *
10de0 61 50 65 72 6d 75 74 65 3b 20 20 20 20 20 2f 2a  aPermute;     /*
10df0 20 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e   The permutation
10e00 20 2a 2f 0a 0a 20 20 69 66 28 20 28 70 4f 70 2d   */..  if( (pOp-
10e10 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 45 52  >p5 & OPFLAG_PER
10e20 4d 55 54 45 29 3d 3d 30 20 29 7b 0a 20 20 20 20  MUTE)==0 ){.    
10e30 61 50 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20  aPermute = 0;.  
10e40 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
10e50 74 28 20 70 4f 70 3e 61 4f 70 20 29 3b 0a 20 20  t( pOp>aOp );.  
10e60 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31    assert( pOp[-1
10e70 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 50 65 72  ].opcode==OP_Per
10e80 6d 75 74 61 74 69 6f 6e 20 29 3b 0a 20 20 20 20  mutation );.    
10e90 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e  assert( pOp[-1].
10ea0 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52  p4type==P4_INTAR
10eb0 52 41 59 20 29 3b 0a 20 20 20 20 61 50 65 72 6d  RAY );.    aPerm
10ec0 75 74 65 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34  ute = pOp[-1].p4
10ed0 2e 61 69 20 2b 20 31 3b 0a 20 20 20 20 61 73 73  .ai + 1;.    ass
10ee0 65 72 74 28 20 61 50 65 72 6d 75 74 65 21 3d 30  ert( aPermute!=0
10ef0 20 29 3b 0a 20 20 7d 0a 20 20 6e 20 3d 20 70 4f   );.  }.  n = pO
10f00 70 2d 3e 70 33 3b 0a 20 20 70 4b 65 79 49 6e 66  p->p3;.  pKeyInf
10f10 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79  o = pOp->p4.pKey
10f20 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28 20  Info;.  assert( 
10f30 6e 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  n>0 );.  assert(
10f40 20 70 4b 65 79 49 6e 66 6f 21 3d 30 20 29 3b 0a   pKeyInfo!=0 );.
10f50 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a    p1 = pOp->p1;.
10f60 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a    p2 = pOp->p2;.
10f70 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
10f80 42 55 47 0a 20 20 69 66 28 20 61 50 65 72 6d 75  BUG.  if( aPermu
10f90 74 65 20 29 7b 0a 20 20 20 20 69 6e 74 20 6b 2c  te ){.    int k,
10fa0 20 6d 78 20 3d 20 30 3b 0a 20 20 20 20 66 6f 72   mx = 0;.    for
10fb0 28 6b 3d 30 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29 20  (k=0; k<n; k++) 
10fc0 69 66 28 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3e  if( aPermute[k]>
10fd0 6d 78 20 29 20 6d 78 20 3d 20 61 50 65 72 6d 75  mx ) mx = aPermu
10fe0 74 65 5b 6b 5d 3b 0a 20 20 20 20 61 73 73 65 72  te[k];.    asser
10ff0 74 28 20 70 31 3e 30 20 26 26 20 70 31 2b 6d 78  t( p1>0 && p1+mx
11000 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
11010 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a  ->nCursor)+1 );.
11020 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3e 30      assert( p2>0
11030 20 26 26 20 70 32 2b 6d 78 3c 3d 28 70 2d 3e 6e   && p2+mx<=(p->n
11040 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
11050 6f 72 29 2b 31 20 29 3b 0a 20 20 7d 65 6c 73 65  or)+1 );.  }else
11060 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 31  {.    assert( p1
11070 3e 30 20 26 26 20 70 31 2b 6e 3c 3d 28 70 2d 3e  >0 && p1+n<=(p->
11080 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
11090 73 6f 72 29 2b 31 20 29 3b 0a 20 20 20 20 61 73  sor)+1 );.    as
110a0 73 65 72 74 28 20 70 32 3e 30 20 26 26 20 70 32  sert( p2>0 && p2
110b0 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  +n<=(p->nMem+1 -
110c0 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29   p->nCursor)+1 )
110d0 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ;.  }.#endif /* 
110e0 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a  SQLITE_DEBUG */.
110f0 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20    for(i=0; i<n; 
11100 69 2b 2b 29 7b 0a 20 20 20 20 69 64 78 20 3d 20  i++){.    idx = 
11110 61 50 65 72 6d 75 74 65 20 3f 20 61 50 65 72 6d  aPermute ? aPerm
11120 75 74 65 5b 69 5d 20 3a 20 69 3b 0a 20 20 20 20  ute[i] : i;.    
11130 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
11140 69 64 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d  id(&aMem[p1+idx]
11150 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ) );.    assert(
11160 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65   memIsValid(&aMe
11170 6d 5b 70 32 2b 69 64 78 5d 29 20 29 3b 0a 20 20  m[p2+idx]) );.  
11180 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
11190 28 70 31 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70  (p1+idx, &aMem[p
111a0 31 2b 69 64 78 5d 29 3b 0a 20 20 20 20 52 45 47  1+idx]);.    REG
111b0 49 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b 69  ISTER_TRACE(p2+i
111c0 64 78 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78  dx, &aMem[p2+idx
111d0 5d 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  ]);.    assert( 
111e0 69 3c 70 4b 65 79 49 6e 66 6f 2d 3e 6e 4b 65 79  i<pKeyInfo->nKey
111f0 46 69 65 6c 64 20 29 3b 0a 20 20 20 20 70 43 6f  Field );.    pCo
11200 6c 6c 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61  ll = pKeyInfo->a
11210 43 6f 6c 6c 5b 69 5d 3b 0a 20 20 20 20 62 52 65  Coll[i];.    bRe
11220 76 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 53  v = pKeyInfo->aS
11230 6f 72 74 4f 72 64 65 72 5b 69 5d 3b 0a 20 20 20  ortOrder[i];.   
11240 20 69 43 6f 6d 70 61 72 65 20 3d 20 73 71 6c 69   iCompare = sqli
11250 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 26 61  te3MemCompare(&a
11260 4d 65 6d 5b 70 31 2b 69 64 78 5d 2c 20 26 61 4d  Mem[p1+idx], &aM
11270 65 6d 5b 70 32 2b 69 64 78 5d 2c 20 70 43 6f 6c  em[p2+idx], pCol
11280 6c 29 3b 0a 20 20 20 20 69 66 28 20 69 43 6f 6d  l);.    if( iCom
11290 70 61 72 65 20 29 7b 0a 20 20 20 20 20 20 69 66  pare ){.      if
112a0 28 20 62 52 65 76 20 29 20 69 43 6f 6d 70 61 72  ( bRev ) iCompar
112b0 65 20 3d 20 2d 69 43 6f 6d 70 61 72 65 3b 0a 20  e = -iCompare;. 
112c0 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
112d0 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
112e0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 75 6d  ../* Opcode: Jum
112f0 70 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  p P1 P2 P3 * *.*
11300 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65  *.** Jump to the
11310 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 20   instruction at 
11320 61 64 64 72 65 73 73 20 50 31 2c 20 50 32 2c 20  address P1, P2, 
11330 6f 72 20 50 33 20 64 65 70 65 6e 64 69 6e 67 20  or P3 depending 
11340 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 69 6e  on whether.** in
11350 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
11360 20 4f 50 5f 43 6f 6d 70 61 72 65 20 69 6e 73 74   OP_Compare inst
11370 72 75 63 74 69 6f 6e 20 74 68 65 20 50 31 20 76  ruction the P1 v
11380 65 63 74 6f 72 20 77 61 73 20 6c 65 73 73 20 74  ector was less t
11390 68 61 6e 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 2c  han.** equal to,
113a0 20 6f 72 20 67 72 65 61 74 65 72 20 74 68 61 6e   or greater than
113b0 20 74 68 65 20 50 32 20 76 65 63 74 6f 72 2c 20   the P2 vector, 
113c0 72 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f  respectively..*/
113d0 0a 63 61 73 65 20 4f 50 5f 4a 75 6d 70 3a 20 7b  .case OP_Jump: {
113e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
113f0 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 69 43  jump */.  if( iC
11400 6f 6d 70 61 72 65 3c 30 20 29 7b 0a 20 20 20 20  ompare<0 ){.    
11410 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
11420 30 2c 33 29 3b 20 70 4f 70 20 3d 20 26 61 4f 70  0,3); pOp = &aOp
11430 5b 70 4f 70 2d 3e 70 31 20 2d 20 31 5d 3b 0a 20  [pOp->p1 - 1];. 
11440 20 7d 65 6c 73 65 20 69 66 28 20 69 43 6f 6d 70   }else if( iComp
11450 61 72 65 3d 3d 30 20 29 7b 0a 20 20 20 20 56 64  are==0 ){.    Vd
11460 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c  beBranchTaken(1,
11470 33 29 3b 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70  3); pOp = &aOp[p
11480 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 7d  Op->p2 - 1];.  }
11490 65 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72  else{.    VdbeBr
114a0 61 6e 63 68 54 61 6b 65 6e 28 32 2c 33 29 3b 20  anchTaken(2,3); 
114b0 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e  pOp = &aOp[pOp->
114c0 70 33 20 2d 20 31 5d 3b 0a 20 20 7d 0a 20 20 62  p3 - 1];.  }.  b
114d0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
114e0 64 65 3a 20 41 6e 64 20 50 31 20 50 32 20 50 33  de: And P1 P2 P3
114f0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
11500 3a 20 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20 26  : r[P3]=(r[P1] &
11510 26 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54  & r[P2]).**.** T
11520 61 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20  ake the logical 
11530 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65  AND of the value
11540 73 20 69 6e 20 72 65 67 69 73 74 65 72 73 20 50  s in registers P
11550 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20  1 and P2 and.** 
11560 77 72 69 74 65 20 74 68 65 20 72 65 73 75 6c 74  write the result
11570 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
11580 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68  3..**.** If eith
11590 65 72 20 50 31 20 6f 72 20 50 32 20 69 73 20 30  er P1 or P2 is 0
115a0 20 28 66 61 6c 73 65 29 20 74 68 65 6e 20 74 68   (false) then th
115b0 65 20 72 65 73 75 6c 74 20 69 73 20 30 20 65 76  e result is 0 ev
115c0 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 74 68  en if.** the oth
115d0 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
115e0 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 74 72  .  A NULL and tr
115f0 75 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 20  ue or two NULLs 
11600 67 69 76 65 0a 2a 2a 20 61 20 4e 55 4c 4c 20 6f  give.** a NULL o
11610 75 74 70 75 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  utput..*/./* Opc
11620 6f 64 65 3a 20 4f 72 20 50 31 20 50 32 20 50 33  ode: Or P1 P2 P3
11630 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
11640 3a 20 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20 7c  : r[P3]=(r[P1] |
11650 7c 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54  | r[P2]).**.** T
11660 61 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20  ake the logical 
11670 4f 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73  OR of the values
11680 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
11690 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74  and P2 and.** st
116a0 6f 72 65 20 74 68 65 20 61 6e 73 77 65 72 20 69  ore the answer i
116b0 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
116c0 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50  *.** If either P
116d0 31 20 6f 72 20 50 32 20 69 73 20 6e 6f 6e 7a 65  1 or P2 is nonze
116e0 72 6f 20 28 74 72 75 65 29 20 74 68 65 6e 20 74  ro (true) then t
116f0 68 65 20 72 65 73 75 6c 74 20 69 73 20 31 20 28  he result is 1 (
11700 74 72 75 65 29 0a 2a 2a 20 65 76 65 6e 20 69 66  true).** even if
11710 20 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74   the other input
11720 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c   is NULL.  A NUL
11730 4c 20 61 6e 64 20 66 61 6c 73 65 20 6f 72 20 74  L and false or t
11740 77 6f 20 4e 55 4c 4c 73 0a 2a 2a 20 67 69 76 65  wo NULLs.** give
11750 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a   a NULL output..
11760 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 6e 64 3a 20  */.case OP_And: 
11770 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
11780 73 61 6d 65 20 61 73 20 54 4b 5f 41 4e 44 2c 20  same as TK_AND, 
11790 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
117a0 2f 0a 63 61 73 65 20 4f 50 5f 4f 72 3a 20 7b 20  /.case OP_Or: { 
117b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
117c0 61 6d 65 20 61 73 20 54 4b 5f 4f 52 2c 20 69 6e  ame as TK_OR, in
117d0 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
117e0 20 20 69 6e 74 20 76 31 3b 20 20 20 20 2f 2a 20    int v1;    /* 
117f0 4c 65 66 74 20 6f 70 65 72 61 6e 64 3a 20 20 30  Left operand:  0
11800 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45  ==FALSE, 1==TRUE
11810 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20  , 2==UNKNOWN or 
11820 4e 55 4c 4c 20 2a 2f 0a 20 20 69 6e 74 20 76 32  NULL */.  int v2
11830 3b 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 70  ;    /* Right op
11840 65 72 61 6e 64 3a 20 30 3d 3d 46 41 4c 53 45 2c  erand: 0==FALSE,
11850 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b   1==TRUE, 2==UNK
11860 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a  NOWN or NULL */.
11870 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
11880 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20  pOp->p1];.  if( 
11890 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
118a0 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76 31  M_Null ){.    v1
118b0 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   = 2;.  }else{. 
118c0 20 20 20 76 31 20 3d 20 73 71 6c 69 74 65 33 56     v1 = sqlite3V
118d0 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31  dbeIntValue(pIn1
118e0 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 70 49 6e 32  )!=0;.  }.  pIn2
118f0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
11900 5d 3b 0a 20 20 69 66 28 20 70 49 6e 32 2d 3e 66  ];.  if( pIn2->f
11910 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
11920 29 7b 0a 20 20 20 20 76 32 20 3d 20 32 3b 0a 20  ){.    v2 = 2;. 
11930 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76 32 20 3d   }else{.    v2 =
11940 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
11950 61 6c 75 65 28 70 49 6e 32 29 21 3d 30 3b 0a 20  alue(pIn2)!=0;. 
11960 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70   }.  if( pOp->op
11970 63 6f 64 65 3d 3d 4f 50 5f 41 6e 64 20 29 7b 0a  code==OP_And ){.
11980 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
11990 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 61   unsigned char a
119a0 6e 64 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30  nd_logic[] = { 0
119b0 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c 20 32 2c  , 0, 0, 0, 1, 2,
119c0 20 30 2c 20 32 2c 20 32 20 7d 3b 0a 20 20 20 20   0, 2, 2 };.    
119d0 76 31 20 3d 20 61 6e 64 5f 6c 6f 67 69 63 5b 76  v1 = and_logic[v
119e0 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 65 6c 73 65  1*3+v2];.  }else
119f0 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e  {.    static con
11a00 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
11a10 20 6f 72 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20   or_logic[] = { 
11a20 30 2c 20 31 2c 20 32 2c 20 31 2c 20 31 2c 20 31  0, 1, 2, 1, 1, 1
11a30 2c 20 32 2c 20 31 2c 20 32 20 7d 3b 0a 20 20 20  , 2, 1, 2 };.   
11a40 20 76 31 20 3d 20 6f 72 5f 6c 6f 67 69 63 5b 76   v1 = or_logic[v
11a50 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 0a 20 20 70  1*3+v2];.  }.  p
11a60 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
11a70 3e 70 33 5d 3b 0a 20 20 69 66 28 20 76 31 3d 3d  >p3];.  if( v1==
11a80 32 20 29 7b 0a 20 20 20 20 4d 65 6d 53 65 74 54  2 ){.    MemSetT
11a90 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
11aa0 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 7d 65 6c 73 65  M_Null);.  }else
11ab0 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20  {.    pOut->u.i 
11ac0 3d 20 76 31 3b 0a 20 20 20 20 4d 65 6d 53 65 74  = v1;.    MemSet
11ad0 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
11ae0 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20 20 62  EM_Int);.  }.  b
11af0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
11b00 64 65 3a 20 4e 6f 74 20 50 31 20 50 32 20 2a 20  de: Not P1 P2 * 
11b10 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
11b20 20 72 5b 50 32 5d 3d 20 21 72 5b 50 31 5d 0a 2a   r[P2]= !r[P1].*
11b30 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74  *.** Interpret t
11b40 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
11b50 73 74 65 72 20 50 31 20 61 73 20 61 20 62 6f 6f  ster P1 as a boo
11b60 6c 65 61 6e 20 76 61 6c 75 65 2e 20 20 53 74 6f  lean value.  Sto
11b70 72 65 20 74 68 65 0a 2a 2a 20 62 6f 6f 6c 65 61  re the.** boolea
11b80 6e 20 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 20  n complement in 
11b90 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66  register P2.  If
11ba0 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
11bb0 67 69 73 74 65 72 20 50 31 20 69 73 20 0a 2a 2a  gister P1 is .**
11bc0 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 61 20 4e 55   NULL, then a NU
11bd0 4c 4c 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  LL is stored in 
11be0 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  P2..*/.case OP_N
11bf0 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ot: {           
11c00 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
11c10 54 4b 5f 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74  TK_NOT, in1, out
11c20 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  2 */.  pIn1 = &a
11c30 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
11c40 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
11c50 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33  ->p2];.  sqlite3
11c60 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
11c70 4f 75 74 29 3b 0a 20 20 69 66 28 20 28 70 49 6e  Out);.  if( (pIn
11c80 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
11c90 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70  ull)==0 ){.    p
11ca0 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
11cb0 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  _Int;.    pOut->
11cc0 75 2e 69 20 3d 20 21 73 71 6c 69 74 65 33 56 64  u.i = !sqlite3Vd
11cd0 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29  beIntValue(pIn1)
11ce0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
11cf0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74  ../* Opcode: Bit
11d00 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Not P1 P2 * * *.
11d10 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
11d20 31 5d 3d 20 7e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  1]= ~r[P1].**.**
11d30 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 63   Interpret the c
11d40 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
11d50 65 72 20 50 31 20 61 73 20 61 6e 20 69 6e 74 65  er P1 as an inte
11d60 67 65 72 2e 20 20 53 74 6f 72 65 20 74 68 65 0a  ger.  Store the.
11d70 2a 2a 20 6f 6e 65 73 2d 63 6f 6d 70 6c 65 6d 65  ** ones-compleme
11d80 6e 74 20 6f 66 20 74 68 65 20 50 31 20 76 61 6c  nt of the P1 val
11d90 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  ue into register
11da0 20 50 32 2e 20 20 49 66 20 50 31 20 68 6f 6c 64   P2.  If P1 hold
11db0 73 0a 2a 2a 20 61 20 4e 55 4c 4c 20 74 68 65 6e  s.** a NULL then
11dc0 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e   store a NULL in
11dd0 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
11de0 42 69 74 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20  BitNot: {       
11df0 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
11e00 20 54 4b 5f 42 49 54 4e 4f 54 2c 20 69 6e 31 2c   TK_BITNOT, in1,
11e10 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20   out2 */.  pIn1 
11e20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
11e30 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
11e40 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c  [pOp->p2];.  sql
11e50 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
11e60 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 69 66 28 20  ll(pOut);.  if( 
11e70 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
11e80 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20  EM_Null)==0 ){. 
11e90 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d     pOut->flags =
11ea0 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f   MEM_Int;.    pO
11eb0 75 74 2d 3e 75 2e 69 20 3d 20 7e 73 71 6c 69 74  ut->u.i = ~sqlit
11ec0 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
11ed0 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  In1);.  }.  brea
11ee0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
11ef0 20 4f 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20   Once P1 P2 * * 
11f00 2a 0a 2a 2a 0a 2a 2a 20 46 61 6c 6c 20 74 68 72  *.**.** Fall thr
11f10 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
11f20 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 65   instruction the
11f30 20 66 69 72 73 74 20 74 69 6d 65 20 74 68 69 73   first time this
11f40 20 6f 70 63 6f 64 65 20 69 73 0a 2a 2a 20 65 6e   opcode is.** en
11f50 63 6f 75 6e 74 65 72 65 64 20 6f 6e 20 65 61 63  countered on eac
11f60 68 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20  h invocation of 
11f70 74 68 65 20 62 79 74 65 2d 63 6f 64 65 20 70 72  the byte-code pr
11f80 6f 67 72 61 6d 2e 20 20 4a 75 6d 70 20 74 6f 20  ogram.  Jump to 
11f90 50 32 0a 2a 2a 20 6f 6e 20 74 68 65 20 73 65 63  P2.** on the sec
11fa0 6f 6e 64 20 61 6e 64 20 61 6c 6c 20 73 75 62 73  ond and all subs
11fb0 65 71 75 65 6e 74 20 65 6e 63 6f 75 6e 74 65 72  equent encounter
11fc0 73 20 64 75 72 69 6e 67 20 74 68 65 20 73 61 6d  s during the sam
11fd0 65 20 69 6e 76 6f 63 61 74 69 6f 6e 2e 0a 2a 2a  e invocation..**
11fe0 0a 2a 2a 20 54 6f 70 2d 6c 65 76 65 6c 20 70 72  .** Top-level pr
11ff0 6f 67 72 61 6d 73 20 64 65 74 65 72 6d 69 6e 65  ograms determine
12000 20 66 69 72 73 74 20 69 6e 76 6f 63 61 74 69 6f   first invocatio
12010 6e 20 62 79 20 63 6f 6d 70 61 72 69 6e 67 20 74  n by comparing t
12020 68 65 20 50 31 0a 2a 2a 20 6f 70 65 72 61 6e 64  he P1.** operand
12030 20 61 67 61 69 6e 73 74 20 74 68 65 20 50 31 20   against the P1 
12040 6f 70 65 72 61 6e 64 20 6f 6e 20 74 68 65 20 4f  operand on the O
12050 50 5f 49 6e 69 74 20 6f 70 63 6f 64 65 20 61 74  P_Init opcode at
12060 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a 2a   the beginning.*
12070 2a 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61 6d  * of the program
12080 2e 20 20 49 66 20 74 68 65 20 50 31 20 76 61 6c  .  If the P1 val
12090 75 65 73 20 64 69 66 66 65 72 2c 20 74 68 65 6e  ues differ, then
120a0 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 61 6e   fall through an
120b0 64 20 6d 61 6b 65 0a 2a 2a 20 74 68 65 20 50 31  d make.** the P1
120c0 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65 20   of this opcode 
120d0 65 71 75 61 6c 20 74 6f 20 74 68 65 20 50 31 20  equal to the P1 
120e0 6f 66 20 4f 50 5f 49 6e 69 74 2e 20 20 49 66 20  of OP_Init.  If 
120f0 50 31 20 76 61 6c 75 65 73 20 61 72 65 0a 2a 2a  P1 values are.**
12100 20 74 68 65 20 73 61 6d 65 20 74 68 65 6e 20 74   the same then t
12110 61 6b 65 20 74 68 65 20 6a 75 6d 70 2e 0a 2a 2a  ake the jump..**
12120 0a 2a 2a 20 46 6f 72 20 73 75 62 70 72 6f 67 72  .** For subprogr
12130 61 6d 73 2c 20 74 68 65 72 65 20 69 73 20 61 20  ams, there is a 
12140 62 69 74 6d 61 73 6b 20 69 6e 20 74 68 65 20 56  bitmask in the V
12150 64 62 65 46 72 61 6d 65 20 74 68 61 74 20 64 65  dbeFrame that de
12160 74 65 72 6d 69 6e 65 73 0a 2a 2a 20 77 68 65 74  termines.** whet
12170 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 6a  her or not the j
12180 75 6d 70 20 73 68 6f 75 6c 64 20 62 65 20 74 61  ump should be ta
12190 6b 65 6e 2e 20 20 54 68 65 20 62 69 74 6d 61 73  ken.  The bitmas
121a0 6b 20 69 73 20 6e 65 63 65 73 73 61 72 79 0a 2a  k is necessary.*
121b0 2a 20 62 65 63 61 75 73 65 20 74 68 65 20 73 65  * because the se
121c0 6c 66 2d 61 6c 74 65 72 69 6e 67 20 63 6f 64 65  lf-altering code
121d0 20 74 72 69 63 6b 20 64 6f 65 73 20 6e 6f 74 20   trick does not 
121e0 77 6f 72 6b 20 66 6f 72 20 72 65 63 75 72 73 69  work for recursi
121f0 76 65 0a 2a 2a 20 74 72 69 67 67 65 72 73 2e 0a  ve.** triggers..
12200 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 6e 63 65 3a  */.case OP_Once:
12210 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f   {             /
12220 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 75 33 32 20  * jump */.  u32 
12230 69 41 64 64 72 3b 20 20 20 20 20 20 20 20 20 20  iAddr;          
12240 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73 73        /* Address
12250 20 6f 66 20 74 68 69 73 20 69 6e 73 74 72 75 63   of this instruc
12260 74 69 6f 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74  tion */.  assert
12270 28 20 70 2d 3e 61 4f 70 5b 30 5d 2e 6f 70 63 6f  ( p->aOp[0].opco
12280 64 65 3d 3d 4f 50 5f 49 6e 69 74 20 29 3b 0a 20  de==OP_Init );. 
12290 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29   if( p->pFrame )
122a0 7b 0a 20 20 20 20 69 41 64 64 72 20 3d 20 28 69  {.    iAddr = (i
122b0 6e 74 29 28 70 4f 70 20 2d 20 70 2d 3e 61 4f 70  nt)(pOp - p->aOp
122c0 29 3b 0a 20 20 20 20 69 66 28 20 28 70 2d 3e 70  );.    if( (p->p
122d0 46 72 61 6d 65 2d 3e 61 4f 6e 63 65 5b 69 41 64  Frame->aOnce[iAd
122e0 64 72 2f 38 5d 20 26 20 28 31 3c 3c 28 69 41 64  dr/8] & (1<<(iAd
122f0 64 72 20 26 20 37 29 29 29 21 3d 30 20 29 7b 0a  dr & 7)))!=0 ){.
12300 20 20 20 20 20 20 56 64 62 65 42 72 61 6e 63 68        VdbeBranch
12310 54 61 6b 65 6e 28 31 2c 20 32 29 3b 0a 20 20 20  Taken(1, 2);.   
12320 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
12330 70 32 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 2d  p2;.    }.    p-
12340 3e 70 46 72 61 6d 65 2d 3e 61 4f 6e 63 65 5b 69  >pFrame->aOnce[i
12350 41 64 64 72 2f 38 5d 20 7c 3d 20 31 3c 3c 28 69  Addr/8] |= 1<<(i
12360 41 64 64 72 20 26 20 37 29 3b 0a 20 20 7d 65 6c  Addr & 7);.  }el
12370 73 65 7b 0a 20 20 20 20 69 66 28 20 70 2d 3e 61  se{.    if( p->a
12380 4f 70 5b 30 5d 2e 70 31 3d 3d 70 4f 70 2d 3e 70  Op[0].p1==pOp->p
12390 31 20 29 7b 0a 20 20 20 20 20 20 56 64 62 65 42  1 ){.      VdbeB
123a0 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 20 32 29  ranchTaken(1, 2)
123b0 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d  ;.      goto jum
123c0 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a 20  p_to_p2;.    }. 
123d0 20 7d 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54   }.  VdbeBranchT
123e0 61 6b 65 6e 28 30 2c 20 32 29 3b 0a 20 20 70 4f  aken(0, 2);.  pO
123f0 70 2d 3e 70 31 20 3d 20 70 2d 3e 61 4f 70 5b 30  p->p1 = p->aOp[0
12400 5d 2e 70 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ].p1;.  break;.}
12410 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 20  ../* Opcode: If 
12420 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
12430 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66  ** Jump to P2 if
12440 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
12450 67 69 73 74 65 72 20 50 31 20 69 73 20 74 72 75  gister P1 is tru
12460 65 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a  e.  The value.**
12470 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74   is considered t
12480 72 75 65 20 69 66 20 69 74 20 69 73 20 6e 75 6d  rue if it is num
12490 65 72 69 63 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72  eric and non-zer
124a0 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  o.  If the value
124b0 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c  .** in P1 is NUL
124c0 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20  L then take the 
124d0 6a 75 6d 70 20 69 66 20 61 6e 64 20 6f 6e 6c 79  jump if and only
124e0 20 69 66 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65   if P3 is non-ze
124f0 72 6f 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  ro..*/./* Opcode
12500 3a 20 49 66 4e 6f 74 20 50 31 20 50 32 20 50 33  : IfNot P1 P2 P3
12510 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20   * *.**.** Jump 
12520 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c  to P2 if the val
12530 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
12540 31 20 69 73 20 46 61 6c 73 65 2e 20 20 54 68 65  1 is False.  The
12550 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e   value.** is con
12560 73 69 64 65 72 65 64 20 66 61 6c 73 65 20 69 66  sidered false if
12570 20 69 74 20 68 61 73 20 61 20 6e 75 6d 65 72 69   it has a numeri
12580 63 20 76 61 6c 75 65 20 6f 66 20 7a 65 72 6f 2e  c value of zero.
12590 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a    If the value.*
125a0 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20  * in P1 is NULL 
125b0 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75  then take the ju
125c0 6d 70 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69  mp if and only i
125d0 66 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P3 is non-zero
125e0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 3a  ..*/.case OP_If:
125f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12600 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f   /* jump, in1 */
12610 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74 3a 20  .case OP_IfNot: 
12620 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
12630 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69  jump, in1 */.  i
12640 6e 74 20 63 3b 0a 20 20 70 49 6e 31 20 3d 20 26  nt c;.  pIn1 = &
12650 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
12660 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73   if( pIn1->flags
12670 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
12680 20 20 20 63 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a     c = pOp->p3;.
12690 20 20 7d 65 6c 73 65 7b 0a 23 69 66 64 65 66 20    }else{.#ifdef 
126a0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
126b0 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 63  TING_POINT.    c
126c0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
126d0 74 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b  tValue(pIn1)!=0;
126e0 0a 23 65 6c 73 65 0a 20 20 20 20 63 20 3d 20 73  .#else.    c = s
126f0 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61  qlite3VdbeRealVa
12700 6c 75 65 28 70 49 6e 31 29 21 3d 30 2e 30 3b 0a  lue(pIn1)!=0.0;.
12710 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20 70  #endif.    if( p
12720 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
12730 66 4e 6f 74 20 29 20 63 20 3d 20 21 63 3b 0a 20  fNot ) c = !c;. 
12740 20 7d 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54   }.  VdbeBranchT
12750 61 6b 65 6e 28 63 21 3d 30 2c 20 32 29 3b 0a 20  aken(c!=0, 2);. 
12760 20 69 66 28 20 63 20 29 7b 0a 20 20 20 20 67 6f   if( c ){.    go
12770 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
12780 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
12790 2a 20 4f 70 63 6f 64 65 3a 20 49 73 4e 75 6c 6c  * Opcode: IsNull
127a0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
127b0 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50  Synopsis: if r[P
127c0 31 5d 3d 3d 4e 55 4c 4c 20 67 6f 74 6f 20 50 32  1]==NULL goto P2
127d0 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50  .**.** Jump to P
127e0 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69  2 if the value i
127f0 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
12800 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
12810 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20 20 20 20 20  P_IsNull: {     
12820 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
12830 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20 6a 75 6d  s TK_ISNULL, jum
12840 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  p, in1 */.  pIn1
12850 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
12860 5d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  ];.  VdbeBranchT
12870 61 6b 65 6e 28 20 28 70 49 6e 31 2d 3e 66 6c 61  aken( (pIn1->fla
12880 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d  gs & MEM_Null)!=
12890 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 28 70 49  0, 2);.  if( (pI
128a0 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
128b0 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a 20 20 20 20  Null)!=0 ){.    
128c0 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
128d0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
128e0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 4e  ./* Opcode: NotN
128f0 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ull P1 P2 * * *.
12900 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
12910 72 5b 50 31 5d 21 3d 4e 55 4c 4c 20 67 6f 74 6f  r[P1]!=NULL goto
12920 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74   P2.**.** Jump t
12930 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75  o P2 if the valu
12940 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
12950 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20 20 0a   is not NULL.  .
12960 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 4e 75  */.case OP_NotNu
12970 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ll: {           
12980 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e   /* same as TK_N
12990 4f 54 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e  OTNULL, jump, in
129a0 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
129b0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
129c0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
129d0 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
129e0 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 2c 20 32 29  MEM_Null)==0, 2)
129f0 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
12a00 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
12a10 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  ==0 ){.    goto 
12a20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a  jump_to_p2;.  }.
12a30 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
12a40 70 63 6f 64 65 3a 20 49 66 4e 75 6c 6c 52 6f 77  pcode: IfNullRow
12a50 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
12a60 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 50 31   Synopsis: if P1
12a70 2e 6e 75 6c 6c 52 6f 77 20 74 68 65 6e 20 72 5b  .nullRow then r[
12a80 50 33 5d 3d 4e 55 4c 4c 2c 20 67 6f 74 6f 20 50  P3]=NULL, goto P
12a90 32 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68  2.**.** Check th
12aa0 65 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20 73  e cursor P1 to s
12ab0 65 65 20 69 66 20 69 74 20 69 73 20 63 75 72 72  ee if it is curr
12ac0 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 61  ently pointing a
12ad0 74 20 61 20 4e 55 4c 4c 20 72 6f 77 2e 0a 2a 2a  t a NULL row..**
12ae0 20 49 66 20 69 74 20 69 73 2c 20 74 68 65 6e 20   If it is, then 
12af0 73 65 74 20 72 65 67 69 73 74 65 72 20 50 33 20  set register P3 
12b00 74 6f 20 4e 55 4c 4c 20 61 6e 64 20 6a 75 6d 70  to NULL and jump
12b10 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
12b20 50 32 2e 0a 2a 2a 20 49 66 20 50 31 20 69 73 20  P2..** If P1 is 
12b30 6e 6f 74 20 6f 6e 20 61 20 4e 55 4c 4c 20 72 6f  not on a NULL ro
12b40 77 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  w, then fall thr
12b50 6f 75 67 68 20 77 69 74 68 6f 75 74 20 6d 61 6b  ough without mak
12b60 69 6e 67 20 61 6e 79 0a 2a 2a 20 63 68 61 6e 67  ing any.** chang
12b70 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  es..*/.case OP_I
12b80 66 4e 75 6c 6c 52 6f 77 3a 20 7b 20 20 20 20 20  fNullRow: {     
12b90 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
12ba0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
12bb0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
12bc0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
12bd0 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b  ssert( p->apCsr[
12be0 70 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b 0a 20  pOp->p1]!=0 );. 
12bf0 20 69 66 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f   if( p->apCsr[pO
12c00 70 2d 3e 70 31 5d 2d 3e 6e 75 6c 6c 52 6f 77 20  p->p1]->nullRow 
12c10 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
12c20 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 61 4d 65  beMemSetNull(aMe
12c30 6d 20 2b 20 70 4f 70 2d 3e 70 33 29 3b 0a 20 20  m + pOp->p3);.  
12c40 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
12c50 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  2;.  }.  break;.
12c60 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  }..#ifdef SQLITE
12c70 5f 45 4e 41 42 4c 45 5f 4f 46 46 53 45 54 5f 53  _ENABLE_OFFSET_S
12c80 51 4c 5f 46 55 4e 43 0a 2f 2a 20 4f 70 63 6f 64  QL_FUNC./* Opcod
12c90 65 3a 20 4f 66 66 73 65 74 20 50 31 20 50 32 20  e: Offset P1 P2 
12ca0 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
12cb0 69 73 3a 20 72 5b 50 33 5d 20 3d 20 73 71 6c 69  is: r[P3] = sqli
12cc0 74 65 5f 6f 66 66 73 65 74 28 50 31 29 0a 2a 2a  te_offset(P1).**
12cd0 0a 2a 2a 20 53 74 6f 72 65 20 69 6e 20 72 65 67  .** Store in reg
12ce0 69 73 74 65 72 20 72 5b 50 33 5d 20 74 68 65 20  ister r[P3] the 
12cf0 62 79 74 65 20 6f 66 66 73 65 74 20 69 6e 74 6f  byte offset into
12d00 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
12d10 6c 65 20 74 68 61 74 20 69 73 20 74 68 65 0a 2a  le that is the.*
12d20 2a 20 73 74 61 72 74 20 6f 66 20 74 68 65 20 70  * start of the p
12d30 61 79 6c 6f 61 64 20 66 6f 72 20 74 68 65 20 72  ayload for the r
12d40 65 63 6f 72 64 20 61 74 20 77 68 69 63 68 20 74  ecord at which t
12d50 68 61 74 20 63 75 72 73 6f 72 20 50 31 20 69 73  hat cursor P1 is
12d60 20 63 75 72 72 65 6e 74 6c 79 0a 2a 2a 20 70 6f   currently.** po
12d70 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 50 32  inting..**.** P2
12d80 20 69 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6e   is the column n
12d90 75 6d 62 65 72 20 66 6f 72 20 74 68 65 20 61 72  umber for the ar
12da0 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 73 71  gument to the sq
12db0 6c 69 74 65 5f 6f 66 66 73 65 74 28 29 20 66 75  lite_offset() fu
12dc0 6e 63 74 69 6f 6e 2e 0a 2a 2a 20 54 68 69 73 20  nction..** This 
12dd0 6f 70 63 6f 64 65 20 64 6f 65 73 20 6e 6f 74 20  opcode does not 
12de0 75 73 65 20 50 32 20 69 74 73 65 6c 66 2c 20 62  use P2 itself, b
12df0 75 74 20 74 68 65 20 50 32 20 76 61 6c 75 65 20  ut the P2 value 
12e00 69 73 20 75 73 65 64 20 62 79 20 74 68 65 0a 2a  is used by the.*
12e10 2a 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72  * code generator
12e20 2e 20 20 54 68 65 20 50 31 2c 20 50 32 2c 20 61  .  The P1, P2, a
12e30 6e 64 20 50 33 20 6f 70 65 72 61 6e 64 73 20 74  nd P3 operands t
12e40 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20 61 72  o this opcode ar
12e50 65 20 74 68 65 0a 2a 2a 20 61 73 20 61 73 20 66  e the.** as as f
12e60 6f 72 20 4f 50 5f 43 6f 6c 75 6d 6e 2e 0a 2a 2a  or OP_Column..**
12e70 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
12e80 69 73 20 6f 6e 6c 79 20 61 76 61 69 6c 61 62 6c  is only availabl
12e90 65 20 69 66 20 53 51 4c 69 74 65 20 69 73 20 63  e if SQLite is c
12ea0 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 74 68 65  ompiled with the
12eb0 0a 2a 2a 20 2d 44 53 51 4c 49 54 45 5f 45 4e 41  .** -DSQLITE_ENA
12ec0 42 4c 45 5f 4f 46 46 53 45 54 5f 53 51 4c 5f 46  BLE_OFFSET_SQL_F
12ed0 55 4e 43 20 6f 70 74 69 6f 6e 2e 0a 2a 2f 0a 63  UNC option..*/.c
12ee0 61 73 65 20 4f 50 5f 4f 66 66 73 65 74 3a 20 7b  ase OP_Offset: {
12ef0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
12f00 33 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  3 */.  VdbeCurso
12f10 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20 54 68 65  r *pC;    /* The
12f20 20 56 44 42 45 20 63 75 72 73 6f 72 20 2a 2f 0a   VDBE cursor */.
12f30 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
12f40 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
12f50 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
12f60 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
12f70 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d  p->p1];.  pOut =
12f80 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
12f90 33 5d 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28  3];.  if( NEVER(
12fa0 70 43 3d 3d 30 29 20 7c 7c 20 70 43 2d 3e 65 43  pC==0) || pC->eC
12fb0 75 72 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f  urType!=CURTYPE_
12fc0 42 54 52 45 45 20 29 7b 0a 20 20 20 20 73 71 6c  BTREE ){.    sql
12fd0 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
12fe0 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73  ll(pOut);.  }els
12ff0 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  e{.    sqlite3Vd
13000 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4f  beMemSetInt64(pO
13010 75 74 2c 20 73 71 6c 69 74 65 33 42 74 72 65 65  ut, sqlite3Btree
13020 4f 66 66 73 65 74 28 70 43 2d 3e 75 63 2e 70 43  Offset(pC->uc.pC
13030 75 72 73 6f 72 29 29 3b 0a 20 20 7d 0a 20 20 62  ursor));.  }.  b
13040 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
13050 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  * SQLITE_ENABLE_
13060 4f 46 46 53 45 54 5f 53 51 4c 5f 46 55 4e 43 20  OFFSET_SQL_FUNC 
13070 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  */../* Opcode: C
13080 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20 50  olumn P1 P2 P3 P
13090 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
130a0 3a 20 72 5b 50 33 5d 3d 50 58 0a 2a 2a 0a 2a 2a  : r[P3]=PX.**.**
130b0 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 64   Interpret the d
130c0 61 74 61 20 74 68 61 74 20 63 75 72 73 6f 72 20  ata that cursor 
130d0 50 31 20 70 6f 69 6e 74 73 20 74 6f 20 61 73 20  P1 points to as 
130e0 61 20 73 74 72 75 63 74 75 72 65 20 62 75 69 6c  a structure buil
130f0 74 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20 4d  t using.** the M
13100 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74 72 75  akeRecord instru
13110 63 74 69 6f 6e 2e 20 20 28 53 65 65 20 74 68 65  ction.  (See the
13120 20 4d 61 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f   MakeRecord opco
13130 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  de for additiona
13140 6c 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  l.** information
13150 20 61 62 6f 75 74 20 74 68 65 20 66 6f 72 6d 61   about the forma
13160 74 20 6f 66 20 74 68 65 20 64 61 74 61 2e 29 20  t of the data.) 
13170 20 45 78 74 72 61 63 74 20 74 68 65 20 50 32 2d   Extract the P2-
13180 74 68 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 66 72 6f  th column.** fro
13190 6d 20 74 68 69 73 20 72 65 63 6f 72 64 2e 20 20  m this record.  
131a0 49 66 20 74 68 65 72 65 20 61 72 65 20 6c 65 73  If there are les
131b0 73 20 74 68 61 74 20 28 50 32 2b 31 29 20 0a 2a  s that (P2+1) .*
131c0 2a 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20  * values in the 
131d0 72 65 63 6f 72 64 2c 20 65 78 74 72 61 63 74 20  record, extract 
131e0 61 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68  a NULL..**.** Th
131f0 65 20 76 61 6c 75 65 20 65 78 74 72 61 63 74 65  e value extracte
13200 64 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  d is stored in r
13210 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a  egister P3..**.*
13220 2a 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20  * If the record 
13230 63 6f 6e 74 61 69 6e 73 20 66 65 77 65 72 20 74  contains fewer t
13240 68 61 6e 20 50 32 20 66 69 65 6c 64 73 2c 20 74  han P2 fields, t
13250 68 65 6e 20 65 78 74 72 61 63 74 20 61 20 4e 55  hen extract a NU
13260 4c 4c 2e 20 20 4f 72 2c 0a 2a 2a 20 69 66 20 74  LL.  Or,.** if t
13270 68 65 20 50 34 20 61 72 67 75 6d 65 6e 74 20 69  he P4 argument i
13280 73 20 61 20 50 34 5f 4d 45 4d 20 75 73 65 20 74  s a P4_MEM use t
13290 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
132a0 50 34 20 61 72 67 75 6d 65 6e 74 20 61 73 0a 2a  P4 argument as.*
132b0 2a 20 74 68 65 20 72 65 73 75 6c 74 2e 0a 2a 2a  * the result..**
132c0 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41  .** If the OPFLA
132d0 47 5f 43 4c 45 41 52 43 41 43 48 45 20 62 69 74  G_CLEARCACHE bit
132e0 20 69 73 20 73 65 74 20 6f 6e 20 50 35 20 61 6e   is set on P5 an
132f0 64 20 50 31 20 69 73 20 61 20 70 73 65 75 64 6f  d P1 is a pseudo
13300 2d 74 61 62 6c 65 20 63 75 72 73 6f 72 2c 0a 2a  -table cursor,.*
13310 2a 20 74 68 65 6e 20 74 68 65 20 63 61 63 68 65  * then the cache
13320 20 6f 66 20 74 68 65 20 63 75 72 73 6f 72 20 69   of the cursor i
13330 73 20 72 65 73 65 74 20 70 72 69 6f 72 20 74 6f  s reset prior to
13340 20 65 78 74 72 61 63 74 69 6e 67 20 74 68 65 20   extracting the 
13350 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 54 68 65 20 66  column..** The f
13360 69 72 73 74 20 4f 50 5f 43 6f 6c 75 6d 6e 20 61  irst OP_Column a
13370 67 61 69 6e 73 74 20 61 20 70 73 65 75 64 6f 2d  gainst a pseudo-
13380 74 61 62 6c 65 20 61 66 74 65 72 20 74 68 65 20  table after the 
13390 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63 6f 6e  value of the con
133a0 74 65 6e 74 0a 2a 2a 20 72 65 67 69 73 74 65 72  tent.** register
133b0 20 68 61 73 20 63 68 61 6e 67 65 64 20 73 68 6f   has changed sho
133c0 75 6c 64 20 68 61 76 65 20 74 68 69 73 20 62 69  uld have this bi
133d0 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  t set..**.** If 
133e0 74 68 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54  the OPFLAG_LENGT
133f0 48 41 52 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f  HARG and OPFLAG_
13400 54 59 50 45 4f 46 41 52 47 20 62 69 74 73 20 61  TYPEOFARG bits a
13410 72 65 20 73 65 74 20 6f 6e 20 50 35 20 74 68 65  re set on P5 the
13420 6e 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 20  n.** the result 
13430 69 73 20 67 75 61 72 61 6e 74 65 65 64 20 74 6f  is guaranteed to
13440 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 61 73   only be used as
13450 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 6f 66   the argument of
13460 20 61 20 6c 65 6e 67 74 68 28 29 0a 2a 2a 20 6f   a length().** o
13470 72 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74  r typeof() funct
13480 69 6f 6e 2c 20 72 65 73 70 65 63 74 69 76 65 6c  ion, respectivel
13490 79 2e 20 20 54 68 65 20 6c 6f 61 64 69 6e 67 20  y.  The loading 
134a0 6f 66 20 6c 61 72 67 65 20 62 6c 6f 62 73 20 63  of large blobs c
134b0 61 6e 20 62 65 0a 2a 2a 20 73 6b 69 70 70 65 64  an be.** skipped
134c0 20 66 6f 72 20 6c 65 6e 67 74 68 28 29 20 61 6e   for length() an
134d0 64 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 20 6c 6f  d all content lo
134e0 61 64 69 6e 67 20 63 61 6e 20 62 65 20 73 6b 69  ading can be ski
134f0 70 70 65 64 20 66 6f 72 20 74 79 70 65 6f 66 28  pped for typeof(
13500 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f  )..*/.case OP_Co
13510 6c 75 6d 6e 3a 20 7b 0a 20 20 69 6e 74 20 70 32  lumn: {.  int p2
13520 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
13530 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 74 6f  column number to
13540 20 72 65 74 72 69 65 76 65 20 2a 2f 0a 20 20 56   retrieve */.  V
13550 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20  dbeCursor *pC;  
13560 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75    /* The VDBE cu
13570 72 73 6f 72 20 2a 2f 0a 20 20 42 74 43 75 72 73  rsor */.  BtCurs
13580 6f 72 20 2a 70 43 72 73 72 3b 20 20 20 2f 2a 20  or *pCrsr;   /* 
13590 54 68 65 20 42 54 72 65 65 20 63 75 72 73 6f 72  The BTree cursor
135a0 20 2a 2f 0a 20 20 75 33 32 20 2a 61 4f 66 66 73   */.  u32 *aOffs
135b0 65 74 3b 20 20 20 20 20 20 2f 2a 20 61 4f 66 66  et;      /* aOff
135c0 73 65 74 5b 69 5d 20 69 73 20 6f 66 66 73 65 74  set[i] is offset
135d0 20 74 6f 20 73 74 61 72 74 20 6f 66 20 64 61 74   to start of dat
135e0 61 20 66 6f 72 20 69 2d 74 68 20 63 6f 6c 75 6d  a for i-th colum
135f0 6e 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b 20  n */.  int len; 
13600 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
13610 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73   length of the s
13620 65 72 69 61 6c 69 7a 65 64 20 64 61 74 61 20 66  erialized data f
13630 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 2a 2f  or the column */
13640 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20  .  int i;       
13650 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f        /* Loop co
13660 75 6e 74 65 72 20 2a 2f 0a 20 20 4d 65 6d 20 2a  unter */.  Mem *
13670 70 44 65 73 74 3b 20 20 20 20 20 20 20 20 2f 2a  pDest;        /*
13680 20 57 68 65 72 65 20 74 6f 20 77 72 69 74 65 20   Where to write 
13690 74 68 65 20 65 78 74 72 61 63 74 65 64 20 76 61  the extracted va
136a0 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d 20 73 4d 65  lue */.  Mem sMe
136b0 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  m;          /* F
136c0 6f 72 20 73 74 6f 72 69 6e 67 20 74 68 65 20 72  or storing the r
136d0 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f  ecord being deco
136e0 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75  ded */.  const u
136f0 38 20 2a 7a 44 61 74 61 3b 20 20 20 2f 2a 20 50  8 *zData;   /* P
13700 61 72 74 20 6f 66 20 74 68 65 20 72 65 63 6f 72  art of the recor
13710 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64 20  d being decoded 
13720 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a  */.  const u8 *z
13730 48 64 72 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20  Hdr;    /* Next 
13740 75 6e 70 61 72 73 65 64 20 62 79 74 65 20 6f 66  unparsed byte of
13750 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a 20   the header */. 
13760 20 63 6f 6e 73 74 20 75 38 20 2a 7a 45 6e 64 48   const u8 *zEndH
13770 64 72 3b 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74  dr; /* Pointer t
13780 6f 20 66 69 72 73 74 20 62 79 74 65 20 61 66 74  o first byte aft
13790 65 72 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f  er the header */
137a0 0a 20 20 75 36 34 20 6f 66 66 73 65 74 36 34 3b  .  u64 offset64;
137b0 20 20 20 20 20 20 2f 2a 20 36 34 2d 62 69 74 20        /* 64-bit 
137c0 6f 66 66 73 65 74 20 2a 2f 0a 20 20 75 33 32 20  offset */.  u32 
137d0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  t;             /
137e0 2a 20 41 20 74 79 70 65 20 63 6f 64 65 20 66 72  * A type code fr
137f0 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 20 68 65  om the record he
13800 61 64 65 72 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  ader */.  Mem *p
13810 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Reg;         /* 
13820 50 73 65 75 64 6f 54 61 62 6c 65 20 69 6e 70 75  PseudoTable inpu
13830 74 20 72 65 67 69 73 74 65 72 20 2a 2f 0a 0a 20  t register */.. 
13840 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
13850 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 32 20 3d 20  Op->p1];.  p2 = 
13860 70 4f 70 2d 3e 70 32 3b 0a 0a 20 20 2f 2a 20 49  pOp->p2;..  /* I
13870 66 20 74 68 65 20 63 75 72 73 6f 72 20 63 61 63  f the cursor cac
13880 68 65 20 69 73 20 73 74 61 6c 65 20 28 6d 65 61  he is stale (mea
13890 6e 69 6e 67 20 69 74 20 69 73 20 6e 6f 74 20 63  ning it is not c
138a0 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20 61  urrently point a
138b0 74 0a 20 20 2a 2a 20 74 68 65 20 63 6f 72 72 65  t.  ** the corre
138c0 63 74 20 72 6f 77 29 20 74 68 65 6e 20 62 72 69  ct row) then bri
138d0 6e 67 20 69 74 20 75 70 2d 74 6f 2d 64 61 74 65  ng it up-to-date
138e0 20 62 79 20 64 6f 69 6e 67 20 74 68 65 20 6e 65   by doing the ne
138f0 63 65 73 73 61 72 79 20 0a 20 20 2a 2a 20 42 2d  cessary .  ** B-
13900 54 72 65 65 20 73 65 65 6b 2e 20 2a 2f 0a 20 20  Tree seek. */.  
13910 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
13920 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 26 70 43  CursorMoveto(&pC
13930 2c 20 26 70 32 29 3b 0a 20 20 69 66 28 20 72 63  , &p2);.  if( rc
13940 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
13950 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 61  e_to_error;..  a
13960 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
13970 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d   && pOp->p3<=(p-
13980 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
13990 72 73 6f 72 29 20 29 3b 0a 20 20 70 44 65 73 74  rsor) );.  pDest
139a0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
139b0 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  ];.  memAboutToC
139c0 68 61 6e 67 65 28 70 2c 20 70 44 65 73 74 29 3b  hange(p, pDest);
139d0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
139e0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
139f0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
13a00 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
13a10 3b 0a 20 20 61 73 73 65 72 74 28 20 70 32 3c 70  ;.  assert( p2<p
13a20 43 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a 20 20 61  C->nField );.  a
13a30 4f 66 66 73 65 74 20 3d 20 70 43 2d 3e 61 4f 66  Offset = pC->aOf
13a40 66 73 65 74 3b 0a 20 20 61 73 73 65 72 74 28 20  fset;.  assert( 
13a50 70 43 2d 3e 65 43 75 72 54 79 70 65 21 3d 43 55  pC->eCurType!=CU
13a60 52 54 59 50 45 5f 56 54 41 42 20 29 3b 0a 20 20  RTYPE_VTAB );.  
13a70 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
13a80 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f 50 53  Type!=CURTYPE_PS
13a90 45 55 44 4f 20 7c 7c 20 70 43 2d 3e 6e 75 6c 6c  EUDO || pC->null
13aa0 52 6f 77 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Row );.  assert(
13ab0 20 70 43 2d 3e 65 43 75 72 54 79 70 65 21 3d 43   pC->eCurType!=C
13ac0 55 52 54 59 50 45 5f 53 4f 52 54 45 52 20 29 3b  URTYPE_SORTER );
13ad0 0a 0a 20 20 69 66 28 20 70 43 2d 3e 63 61 63 68  ..  if( pC->cach
13ae0 65 53 74 61 74 75 73 21 3d 70 2d 3e 63 61 63 68  eStatus!=p->cach
13af0 65 43 74 72 20 29 7b 20 20 20 20 20 20 20 20 20  eCtr ){         
13b00 20 20 20 20 20 20 20 2f 2a 4f 50 54 49 4d 49 5a         /*OPTIMIZ
13b10 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f  ATION-IF-FALSE*/
13b20 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c  .    if( pC->nul
13b30 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20 20 69 66  lRow ){.      if
13b40 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
13b50 43 55 52 54 59 50 45 5f 50 53 45 55 44 4f 20 29  CURTYPE_PSEUDO )
13b60 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72  {.        /* For
13b70 20 74 68 65 20 73 70 65 63 69 61 6c 20 63 61 73   the special cas
13b80 65 20 6f 66 20 61 73 20 70 73 65 75 64 6f 2d 63  e of as pseudo-c
13b90 75 72 73 6f 72 2c 20 74 68 65 20 73 65 65 6b 52  ursor, the seekR
13ba0 65 73 75 6c 74 20 66 69 65 6c 64 0a 20 20 20 20  esult field.    
13bb0 20 20 20 20 2a 2a 20 69 64 65 6e 74 69 66 69 65      ** identifie
13bc0 73 20 74 68 65 20 72 65 67 69 73 74 65 72 20 74  s the register t
13bd0 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20 72 65  hat holds the re
13be0 63 6f 72 64 20 2a 2f 0a 20 20 20 20 20 20 20 20  cord */.        
13bf0 61 73 73 65 72 74 28 20 70 43 2d 3e 73 65 65 6b  assert( pC->seek
13c00 52 65 73 75 6c 74 3e 30 20 29 3b 0a 20 20 20 20  Result>0 );.    
13c10 20 20 20 20 70 52 65 67 20 3d 20 26 61 4d 65 6d      pReg = &aMem
13c20 5b 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 5d  [pC->seekResult]
13c30 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
13c40 28 20 70 52 65 67 2d 3e 66 6c 61 67 73 20 26 20  ( pReg->flags & 
13c50 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20  MEM_Blob );.    
13c60 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
13c70 73 56 61 6c 69 64 28 70 52 65 67 29 20 29 3b 0a  sValid(pReg) );.
13c80 20 20 20 20 20 20 20 20 70 43 2d 3e 70 61 79 6c          pC->payl
13c90 6f 61 64 53 69 7a 65 20 3d 20 70 43 2d 3e 73 7a  oadSize = pC->sz
13ca0 52 6f 77 20 3d 20 70 52 65 67 2d 3e 6e 3b 0a 20  Row = pReg->n;. 
13cb0 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20         pC->aRow 
13cc0 3d 20 28 75 38 2a 29 70 52 65 67 2d 3e 7a 3b 0a  = (u8*)pReg->z;.
13cd0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
13ce0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
13cf0 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73 74  MemSetNull(pDest
13d00 29 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  );.        goto 
13d10 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20  op_column_out;. 
13d20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
13d30 7b 0a 20 20 20 20 20 20 70 43 72 73 72 20 3d 20  {.      pCrsr = 
13d40 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a  pC->uc.pCursor;.
13d50 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43        assert( pC
13d60 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
13d70 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 20  YPE_BTREE );.   
13d80 20 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72     assert( pCrsr
13d90 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
13da0 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  ( sqlite3BtreeCu
13db0 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73  rsorIsValid(pCrs
13dc0 72 29 20 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e  r) );.      pC->
13dd0 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 73 71  payloadSize = sq
13de0 6c 69 74 65 33 42 74 72 65 65 50 61 79 6c 6f 61  lite3BtreePayloa
13df0 64 53 69 7a 65 28 70 43 72 73 72 29 3b 0a 20 20  dSize(pCrsr);.  
13e00 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 73      pC->aRow = s
13e10 71 6c 69 74 65 33 42 74 72 65 65 50 61 79 6c 6f  qlite3BtreePaylo
13e20 61 64 46 65 74 63 68 28 70 43 72 73 72 2c 20 26  adFetch(pCrsr, &
13e30 70 43 2d 3e 73 7a 52 6f 77 29 3b 0a 20 20 20 20  pC->szRow);.    
13e40 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 73 7a    assert( pC->sz
13e50 52 6f 77 3c 3d 70 43 2d 3e 70 61 79 6c 6f 61 64  Row<=pC->payload
13e60 53 69 7a 65 20 29 3b 0a 20 20 20 20 20 20 61 73  Size );.      as
13e70 73 65 72 74 28 20 70 43 2d 3e 73 7a 52 6f 77 3c  sert( pC->szRow<
13e80 3d 36 35 35 33 36 20 29 3b 20 20 2f 2a 20 4d 61  =65536 );  /* Ma
13e90 78 69 6d 75 6d 20 70 61 67 65 20 73 69 7a 65 20  ximum page size 
13ea0 69 73 20 36 34 4b 69 42 20 2a 2f 0a 20 20 20 20  is 64KiB */.    
13eb0 20 20 69 66 28 20 70 43 2d 3e 70 61 79 6c 6f 61    if( pC->payloa
13ec0 64 53 69 7a 65 20 3e 20 28 75 33 32 29 64 62 2d  dSize > (u32)db-
13ed0 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
13ee0 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a  IMIT_LENGTH] ){.
13ef0 20 20 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f          goto too
13f00 5f 62 69 67 3b 0a 20 20 20 20 20 20 7d 0a 20 20  _big;.      }.  
13f10 20 20 7d 0a 20 20 20 20 70 43 2d 3e 63 61 63 68    }.    pC->cach
13f20 65 53 74 61 74 75 73 20 3d 20 70 2d 3e 63 61 63  eStatus = p->cac
13f30 68 65 43 74 72 3b 0a 20 20 20 20 70 43 2d 3e 69  heCtr;.    pC->i
13f40 48 64 72 4f 66 66 73 65 74 20 3d 20 67 65 74 56  HdrOffset = getV
13f50 61 72 69 6e 74 33 32 28 70 43 2d 3e 61 52 6f 77  arint32(pC->aRow
13f60 2c 20 61 4f 66 66 73 65 74 5b 30 5d 29 3b 0a 20  , aOffset[0]);. 
13f70 20 20 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65     pC->nHdrParse
13f80 64 20 3d 20 30 3b 0a 0a 0a 20 20 20 20 69 66 28  d = 0;...    if(
13f90 20 70 43 2d 3e 73 7a 52 6f 77 3c 61 4f 66 66 73   pC->szRow<aOffs
13fa0 65 74 5b 30 5d 20 29 7b 20 20 20 20 20 20 2f 2a  et[0] ){      /*
13fb0 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d  OPTIMIZATION-IF-
13fc0 46 41 4c 53 45 2a 2f 0a 20 20 20 20 20 20 2f 2a  FALSE*/.      /*
13fd0 20 70 43 2d 3e 61 52 6f 77 20 64 6f 65 73 20 6e   pC->aRow does n
13fe0 6f 74 20 68 61 76 65 20 74 6f 20 68 6f 6c 64 20  ot have to hold 
13ff0 74 68 65 20 65 6e 74 69 72 65 20 72 6f 77 2c 20  the entire row, 
14000 62 75 74 20 69 74 20 64 6f 65 73 20 61 74 20 6c  but it does at l
14010 65 61 73 74 0a 20 20 20 20 20 20 2a 2a 20 6e 65  east.      ** ne
14020 65 64 20 74 6f 20 63 6f 76 65 72 20 74 68 65 20  ed to cover the 
14030 68 65 61 64 65 72 20 6f 66 20 74 68 65 20 72 65  header of the re
14040 63 6f 72 64 2e 20 20 49 66 20 70 43 2d 3e 61 52  cord.  If pC->aR
14050 6f 77 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74  ow does not cont
14060 61 69 6e 0a 20 20 20 20 20 20 2a 2a 20 74 68 65  ain.      ** the
14070 20 63 6f 6d 70 6c 65 74 65 20 68 65 61 64 65 72   complete header
14080 2c 20 74 68 65 6e 20 73 65 74 20 69 74 20 74 6f  , then set it to
14090 20 7a 65 72 6f 2c 20 66 6f 72 63 69 6e 67 20 74   zero, forcing t
140a0 68 65 20 68 65 61 64 65 72 20 74 6f 20 62 65 0a  he header to be.
140b0 20 20 20 20 20 20 2a 2a 20 64 79 6e 61 6d 69 63        ** dynamic
140c0 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 2e 20  ally allocated. 
140d0 2a 2f 0a 20 20 20 20 20 20 70 43 2d 3e 61 52 6f  */.      pC->aRo
140e0 77 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 43 2d  w = 0;.      pC-
140f0 3e 73 7a 52 6f 77 20 3d 20 30 3b 0a 0a 20 20 20  >szRow = 0;..   
14100 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20     /* Make sure 
14110 61 20 63 6f 72 72 75 70 74 20 64 61 74 61 62 61  a corrupt databa
14120 73 65 20 68 61 73 20 6e 6f 74 20 67 69 76 65 6e  se has not given
14130 20 75 73 20 61 6e 20 6f 76 65 72 73 69 7a 65 20   us an oversize 
14140 68 65 61 64 65 72 2e 0a 20 20 20 20 20 20 2a 2a  header..      **
14150 20 44 6f 20 74 68 69 73 20 6e 6f 77 20 74 6f 20   Do this now to 
14160 61 76 6f 69 64 20 61 6e 20 6f 76 65 72 73 69 7a  avoid an oversiz
14170 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
14180 69 6f 6e 2e 0a 20 20 20 20 20 20 2a 2a 0a 20 20  ion..      **.  
14190 20 20 20 20 2a 2a 20 54 79 70 65 20 65 6e 74 72      ** Type entr
141a0 69 65 73 20 63 61 6e 20 62 65 20 62 65 74 77 65  ies can be betwe
141b0 65 6e 20 31 20 61 6e 64 20 35 20 62 79 74 65 73  en 1 and 5 bytes
141c0 20 65 61 63 68 2e 20 20 42 75 74 20 34 20 61 6e   each.  But 4 an
141d0 64 20 35 20 62 79 74 65 0a 20 20 20 20 20 20 2a  d 5 byte.      *
141e0 2a 20 74 79 70 65 73 20 75 73 65 20 73 6f 20 6d  * types use so m
141f0 75 63 68 20 64 61 74 61 20 73 70 61 63 65 20 74  uch data space t
14200 68 61 74 20 74 68 65 72 65 20 63 61 6e 20 6f 6e  hat there can on
14210 6c 79 20 62 65 20 34 30 39 36 20 61 6e 64 20 33  ly be 4096 and 3
14220 32 20 6f 66 0a 20 20 20 20 20 20 2a 2a 20 74 68  2 of.      ** th
14230 65 6d 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  em, respectively
14240 2e 20 20 53 6f 20 74 68 65 20 6d 61 78 69 6d 75  .  So the maximu
14250 6d 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68 20  m header length 
14260 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 61 0a 20  results from a. 
14270 20 20 20 20 20 2a 2a 20 33 2d 62 79 74 65 20 74       ** 3-byte t
14280 79 70 65 20 66 6f 72 20 65 61 63 68 20 6f 66 20  ype for each of 
14290 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20 33  the maximum of 3
142a0 32 37 36 38 20 63 6f 6c 75 6d 6e 73 20 70 6c 75  2768 columns plu
142b0 73 20 74 68 72 65 65 0a 20 20 20 20 20 20 2a 2a  s three.      **
142c0 20 65 78 74 72 61 20 62 79 74 65 73 20 66 6f 72   extra bytes for
142d0 20 74 68 65 20 68 65 61 64 65 72 20 6c 65 6e 67   the header leng
142e0 74 68 20 69 74 73 65 6c 66 2e 20 20 33 32 37 36  th itself.  3276
142f0 38 2a 33 20 2b 20 33 20 3d 20 39 38 33 30 37 2e  8*3 + 3 = 98307.
14300 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
14310 69 66 28 20 61 4f 66 66 73 65 74 5b 30 5d 20 3e  if( aOffset[0] >
14320 20 39 38 33 30 37 20 7c 7c 20 61 4f 66 66 73 65   98307 || aOffse
14330 74 5b 30 5d 20 3e 20 70 43 2d 3e 70 61 79 6c 6f  t[0] > pC->paylo
14340 61 64 53 69 7a 65 20 29 7b 0a 20 20 20 20 20 20  adSize ){.      
14350 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e    goto op_column
14360 5f 63 6f 72 72 75 70 74 3b 0a 20 20 20 20 20 20  _corrupt;.      
14370 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  }.    }else{.   
14380 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20 61 6e     /* This is an
14390 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 20 20   optimization.  
143a0 42 79 20 73 6b 69 70 70 69 6e 67 20 6f 76 65 72  By skipping over
143b0 20 74 68 65 20 66 69 72 73 74 20 66 65 77 20 74   the first few t
143c0 65 73 74 73 0a 20 20 20 20 20 20 2a 2a 20 28 65  ests.      ** (e
143d0 78 3a 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65  x: pC->nHdrParse
143e0 64 3c 3d 70 32 29 20 69 6e 20 74 68 65 20 6e 65  d<=p2) in the ne
143f0 78 74 20 73 65 63 74 69 6f 6e 2c 20 77 65 20 61  xt section, we a
14400 63 68 69 65 76 65 20 61 0a 20 20 20 20 20 20 2a  chieve a.      *
14410 2a 20 6d 65 61 73 75 72 61 62 6c 65 20 70 65 72  * measurable per
14420 66 6f 72 6d 61 6e 63 65 20 67 61 69 6e 2e 0a 20  formance gain.. 
14430 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a       **.      **
14440 20 54 68 69 73 20 62 72 61 6e 63 68 20 69 73 20   This branch is 
14450 74 61 6b 65 6e 20 65 76 65 6e 20 69 66 20 61 4f  taken even if aO
14460 66 66 73 65 74 5b 30 5d 3d 3d 30 2e 20 20 53 75  ffset[0]==0.  Su
14470 63 68 20 61 20 72 65 63 6f 72 64 20 69 73 20 6e  ch a record is n
14480 65 76 65 72 0a 20 20 20 20 20 20 2a 2a 20 67 65  ever.      ** ge
14490 6e 65 72 61 74 65 64 20 62 79 20 53 51 4c 69 74  nerated by SQLit
144a0 65 2c 20 61 6e 64 20 63 6f 75 6c 64 20 62 65 20  e, and could be 
144b0 63 6f 6e 73 69 64 65 72 65 64 20 63 6f 72 72 75  considered corru
144c0 70 74 69 6f 6e 2c 20 62 75 74 20 77 65 0a 20 20  ption, but we.  
144d0 20 20 20 20 2a 2a 20 61 63 63 65 70 74 20 69 74      ** accept it
144e0 20 66 6f 72 20 68 69 73 74 6f 72 69 63 61 6c 20   for historical 
144f0 72 65 61 73 6f 6e 73 2e 20 20 57 68 65 6e 20 61  reasons.  When a
14500 4f 66 66 73 65 74 5b 30 5d 3d 3d 30 2c 20 74 68  Offset[0]==0, th
14510 65 20 63 6f 64 65 20 74 68 69 73 0a 20 20 20 20  e code this.    
14520 20 20 2a 2a 20 62 72 61 6e 63 68 20 6a 75 6d 70    ** branch jump
14530 73 20 74 6f 20 72 65 61 64 73 20 70 61 73 74 20  s to reads past 
14540 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72  the end of the r
14550 65 63 6f 72 64 2c 20 62 75 74 20 6e 65 76 65 72  ecord, but never
14560 20 6d 6f 72 65 0a 20 20 20 20 20 20 2a 2a 20 74   more.      ** t
14570 68 61 6e 20 61 20 66 65 77 20 62 79 74 65 73 2e  han a few bytes.
14580 20 20 45 76 65 6e 20 69 66 20 74 68 65 20 72 65    Even if the re
14590 63 6f 72 64 20 6f 63 63 75 72 73 20 61 74 20 74  cord occurs at t
145a0 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 70 61  he end of the pa
145b0 67 65 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6e 74  ge.      ** cont
145c0 65 6e 74 20 61 72 65 61 2c 20 74 68 65 20 22 70  ent area, the "p
145d0 61 67 65 20 68 65 61 64 65 72 22 20 63 6f 6d 65  age header" come
145e0 73 20 61 66 74 65 72 20 74 68 65 20 70 61 67 65  s after the page
145f0 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 73 6f 0a   content and so.
14600 20 20 20 20 20 20 2a 2a 20 74 68 69 73 20 6f 76        ** this ov
14610 65 72 72 65 61 64 20 69 73 20 68 61 72 6d 6c 65  erread is harmle
14620 73 73 2e 20 20 53 69 6d 69 6c 61 72 20 6f 76 65  ss.  Similar ove
14630 72 72 65 61 64 73 20 63 61 6e 20 6f 63 63 75 72  rreads can occur
14640 20 66 6f 72 20 61 20 63 6f 72 72 75 70 74 0a 20   for a corrupt. 
14650 20 20 20 20 20 2a 2a 20 64 61 74 61 62 61 73 65       ** database
14660 20 66 69 6c 65 2e 0a 20 20 20 20 20 20 2a 2f 0a   file..      */.
14670 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 70 43        zData = pC
14680 2d 3e 61 52 6f 77 3b 0a 20 20 20 20 20 20 61 73  ->aRow;.      as
14690 73 65 72 74 28 20 70 43 2d 3e 6e 48 64 72 50 61  sert( pC->nHdrPa
146a0 72 73 65 64 3c 3d 70 32 20 29 3b 20 20 20 20 20  rsed<=p2 );     
146b0 20 20 20 20 2f 2a 20 43 6f 6e 64 69 74 69 6f 6e      /* Condition
146c0 61 6c 20 73 6b 69 70 70 65 64 20 2a 2f 0a 20 20  al skipped */.  
146d0 20 20 20 20 74 65 73 74 63 61 73 65 28 20 61 4f      testcase( aO
146e0 66 66 73 65 74 5b 30 5d 3d 3d 30 20 29 3b 0a 20  ffset[0]==0 );. 
146f0 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c       goto op_col
14700 75 6d 6e 5f 72 65 61 64 5f 68 65 61 64 65 72 3b  umn_read_header;
14710 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a  .    }.  }..  /*
14720 20 4d 61 6b 65 20 73 75 72 65 20 61 74 20 6c 65   Make sure at le
14730 61 73 74 20 74 68 65 20 66 69 72 73 74 20 70 32  ast the first p2
14740 2b 31 20 65 6e 74 72 69 65 73 20 6f 66 20 74 68  +1 entries of th
14750 65 20 68 65 61 64 65 72 20 68 61 76 65 20 62 65  e header have be
14760 65 6e 0a 20 20 2a 2a 20 70 61 72 73 65 64 20 61  en.  ** parsed a
14770 6e 64 20 76 61 6c 69 64 20 69 6e 66 6f 72 6d 61  nd valid informa
14780 74 69 6f 6e 20 69 73 20 69 6e 20 61 4f 66 66 73  tion is in aOffs
14790 65 74 5b 5d 20 61 6e 64 20 70 43 2d 3e 61 54 79  et[] and pC->aTy
147a0 70 65 5b 5d 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  pe[]..  */.  if(
147b0 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c   pC->nHdrParsed<
147c0 3d 70 32 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66  =p2 ){.    /* If
147d0 20 74 68 65 72 65 20 69 73 20 6d 6f 72 65 20 68   there is more h
147e0 65 61 64 65 72 20 61 76 61 69 6c 61 62 6c 65 20  eader available 
147f0 66 6f 72 20 70 61 72 73 69 6e 67 20 69 6e 20 74  for parsing in t
14800 68 65 20 72 65 63 6f 72 64 2c 20 74 72 79 0a 20  he record, try. 
14810 20 20 20 2a 2a 20 74 6f 20 65 78 74 72 61 63 74     ** to extract
14820 20 61 64 64 69 74 69 6f 6e 61 6c 20 66 69 65 6c   additional fiel
14830 64 73 20 75 70 20 74 68 72 6f 75 67 68 20 74 68  ds up through th
14840 65 20 70 32 2b 31 2d 74 68 20 66 69 65 6c 64 20  e p2+1-th field 
14850 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
14860 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 3c 61  pC->iHdrOffset<a
14870 4f 66 66 73 65 74 5b 30 5d 20 29 7b 0a 20 20 20  Offset[0] ){.   
14880 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20     /* Make sure 
14890 7a 44 61 74 61 20 70 6f 69 6e 74 73 20 74 6f 20  zData points to 
148a0 65 6e 6f 75 67 68 20 6f 66 20 74 68 65 20 72 65  enough of the re
148b0 63 6f 72 64 20 74 6f 20 63 6f 76 65 72 20 74 68  cord to cover th
148c0 65 20 68 65 61 64 65 72 2e 20 2a 2f 0a 20 20 20  e header. */.   
148d0 20 20 20 69 66 28 20 70 43 2d 3e 61 52 6f 77 3d     if( pC->aRow=
148e0 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 6d 65  =0 ){.        me
148f0 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c 20 73  mset(&sMem, 0, s
14900 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a 20 20  izeof(sMem));.  
14910 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
14920 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72  e3VdbeMemFromBtr
14930 65 65 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  ee(pC->uc.pCurso
14940 72 2c 20 30 2c 20 61 4f 66 66 73 65 74 5b 30 5d  r, 0, aOffset[0]
14950 2c 20 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20  , &sMem);.      
14960 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
14970 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  _OK ) goto abort
14980 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
14990 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 28         zData = (
149a0 75 38 2a 29 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20  u8*)sMem.z;.    
149b0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
149c0 20 7a 44 61 74 61 20 3d 20 70 43 2d 3e 61 52 6f   zData = pC->aRo
149d0 77 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20  w;.      }.  .  
149e0 20 20 20 20 2f 2a 20 46 69 6c 6c 20 69 6e 20 70      /* Fill in p
149f0 43 2d 3e 61 54 79 70 65 5b 69 5d 20 61 6e 64 20  C->aType[i] and 
14a00 61 4f 66 66 73 65 74 5b 69 5d 20 76 61 6c 75 65  aOffset[i] value
14a10 73 20 74 68 72 6f 75 67 68 20 74 68 65 20 70 32  s through the p2
14a20 2d 74 68 20 66 69 65 6c 64 2e 20 2a 2f 0a 20 20  -th field. */.  
14a30 20 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 72 65 61 64    op_column_read
14a40 5f 68 65 61 64 65 72 3a 0a 20 20 20 20 20 20 69  _header:.      i
14a50 20 3d 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65   = pC->nHdrParse
14a60 64 3b 0a 20 20 20 20 20 20 6f 66 66 73 65 74 36  d;.      offset6
14a70 34 20 3d 20 61 4f 66 66 73 65 74 5b 69 5d 3b 0a  4 = aOffset[i];.
14a80 20 20 20 20 20 20 7a 48 64 72 20 3d 20 7a 44 61        zHdr = zDa
14a90 74 61 20 2b 20 70 43 2d 3e 69 48 64 72 4f 66 66  ta + pC->iHdrOff
14aa0 73 65 74 3b 0a 20 20 20 20 20 20 7a 45 6e 64 48  set;.      zEndH
14ab0 64 72 20 3d 20 7a 44 61 74 61 20 2b 20 61 4f 66  dr = zData + aOf
14ac0 66 73 65 74 5b 30 5d 3b 0a 20 20 20 20 20 20 74  fset[0];.      t
14ad0 65 73 74 63 61 73 65 28 20 7a 48 64 72 3e 3d 7a  estcase( zHdr>=z
14ae0 45 6e 64 48 64 72 20 29 3b 0a 20 20 20 20 20 20  EndHdr );.      
14af0 64 6f 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20  do{.        if( 
14b00 28 74 20 3d 20 7a 48 64 72 5b 30 5d 29 3c 30 78  (t = zHdr[0])<0x
14b10 38 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  80 ){.          
14b20 7a 48 64 72 2b 2b 3b 0a 20 20 20 20 20 20 20 20  zHdr++;.        
14b30 20 20 6f 66 66 73 65 74 36 34 20 2b 3d 20 73 71    offset64 += sq
14b40 6c 69 74 65 33 56 64 62 65 4f 6e 65 42 79 74 65  lite3VdbeOneByte
14b50 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 74 29  SerialTypeLen(t)
14b60 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  ;.        }else{
14b70 0a 20 20 20 20 20 20 20 20 20 20 7a 48 64 72 20  .          zHdr 
14b80 2b 3d 20 73 71 6c 69 74 65 33 47 65 74 56 61 72  += sqlite3GetVar
14b90 69 6e 74 33 32 28 7a 48 64 72 2c 20 26 74 29 3b  int32(zHdr, &t);
14ba0 0a 20 20 20 20 20 20 20 20 20 20 6f 66 66 73 65  .          offse
14bb0 74 36 34 20 2b 3d 20 73 71 6c 69 74 65 33 56 64  t64 += sqlite3Vd
14bc0 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28  beSerialTypeLen(
14bd0 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  t);.        }.  
14be0 20 20 20 20 20 20 70 43 2d 3e 61 54 79 70 65 5b        pC->aType[
14bf0 69 2b 2b 5d 20 3d 20 74 3b 0a 20 20 20 20 20 20  i++] = t;.      
14c00 20 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20 28    aOffset[i] = (
14c10 75 33 32 29 28 6f 66 66 73 65 74 36 34 20 26 20  u32)(offset64 & 
14c20 30 78 66 66 66 66 66 66 66 66 29 3b 0a 20 20 20  0xffffffff);.   
14c30 20 20 20 7d 77 68 69 6c 65 28 20 69 3c 3d 70 32     }while( i<=p2
14c40 20 26 26 20 7a 48 64 72 3c 7a 45 6e 64 48 64 72   && zHdr<zEndHdr
14c50 20 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 54 68   );..      /* Th
14c60 65 20 72 65 63 6f 72 64 20 69 73 20 63 6f 72 72  e record is corr
14c70 75 70 74 20 69 66 20 61 6e 79 20 6f 66 20 74 68  upt if any of th
14c80 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20  e following are 
14c90 74 72 75 65 3a 0a 20 20 20 20 20 20 2a 2a 20 28  true:.      ** (
14ca0 31 29 20 74 68 65 20 62 79 74 65 73 20 6f 66 20  1) the bytes of 
14cb0 74 68 65 20 68 65 61 64 65 72 20 65 78 74 65 6e  the header exten
14cc0 64 20 70 61 73 74 20 74 68 65 20 64 65 63 6c 61  d past the decla
14cd0 72 65 64 20 68 65 61 64 65 72 20 73 69 7a 65 0a  red header size.
14ce0 20 20 20 20 20 20 2a 2a 20 28 32 29 20 74 68 65        ** (2) the
14cf0 20 65 6e 74 69 72 65 20 68 65 61 64 65 72 20 77   entire header w
14d00 61 73 20 75 73 65 64 20 62 75 74 20 6e 6f 74 20  as used but not 
14d10 61 6c 6c 20 64 61 74 61 20 77 61 73 20 75 73 65  all data was use
14d20 64 0a 20 20 20 20 20 20 2a 2a 20 28 33 29 20 74  d.      ** (3) t
14d30 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 64 61  he end of the da
14d40 74 61 20 65 78 74 65 6e 64 73 20 62 65 79 6f 6e  ta extends beyon
14d50 64 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  d the end of the
14d60 20 72 65 63 6f 72 64 2e 0a 20 20 20 20 20 20 2a   record..      *
14d70 2f 0a 20 20 20 20 20 20 69 66 28 20 28 7a 48 64  /.      if( (zHd
14d80 72 3e 3d 7a 45 6e 64 48 64 72 20 26 26 20 28 7a  r>=zEndHdr && (z
14d90 48 64 72 3e 7a 45 6e 64 48 64 72 20 7c 7c 20 6f  Hdr>zEndHdr || o
14da0 66 66 73 65 74 36 34 21 3d 70 43 2d 3e 70 61 79  ffset64!=pC->pay
14db0 6c 6f 61 64 53 69 7a 65 29 29 0a 20 20 20 20 20  loadSize)).     
14dc0 20 20 7c 7c 20 28 6f 66 66 73 65 74 36 34 20 3e    || (offset64 >
14dd0 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65   pC->payloadSize
14de0 29 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20  ).      ){.     
14df0 20 20 20 69 66 28 20 61 4f 66 66 73 65 74 5b 30     if( aOffset[0
14e00 5d 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  ]==0 ){.        
14e10 20 20 69 20 3d 20 30 3b 0a 20 20 20 20 20 20 20    i = 0;.       
14e20 20 20 20 7a 48 64 72 20 3d 20 7a 45 6e 64 48 64     zHdr = zEndHd
14e30 72 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  r;.        }else
14e40 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  {.          if( 
14e50 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 20 73 71  pC->aRow==0 ) sq
14e60 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
14e70 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20 20 20 20  ase(&sMem);.    
14e80 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f        goto op_co
14e90 6c 75 6d 6e 5f 63 6f 72 72 75 70 74 3b 0a 20 20  lumn_corrupt;.  
14ea0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
14eb0 0a 20 20 20 20 20 20 70 43 2d 3e 6e 48 64 72 50  .      pC->nHdrP
14ec0 61 72 73 65 64 20 3d 20 69 3b 0a 20 20 20 20 20  arsed = i;.     
14ed0 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 20   pC->iHdrOffset 
14ee0 3d 20 28 75 33 32 29 28 7a 48 64 72 20 2d 20 7a  = (u32)(zHdr - z
14ef0 44 61 74 61 29 3b 0a 20 20 20 20 20 20 69 66 28  Data);.      if(
14f00 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 20 73   pC->aRow==0 ) s
14f10 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c  qlite3VdbeMemRel
14f20 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20 20 20  ease(&sMem);.   
14f30 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 74 20   }else{.      t 
14f40 3d 20 30 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  = 0;.    }..    
14f50 2f 2a 20 49 66 20 61 66 74 65 72 20 74 72 79 69  /* If after tryi
14f60 6e 67 20 74 6f 20 65 78 74 72 61 63 74 20 6e 65  ng to extract ne
14f70 77 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74  w entries from t
14f80 68 65 20 68 65 61 64 65 72 2c 20 6e 48 64 72 50  he header, nHdrP
14f90 61 72 73 65 64 20 69 73 0a 20 20 20 20 2a 2a 20  arsed is.    ** 
14fa0 73 74 69 6c 6c 20 6e 6f 74 20 75 70 20 74 6f 20  still not up to 
14fb0 70 32 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74  p2, that means t
14fc0 68 61 74 20 74 68 65 20 72 65 63 6f 72 64 20 68  hat the record h
14fd0 61 73 20 66 65 77 65 72 20 74 68 61 6e 20 70 32  as fewer than p2
14fe0 0a 20 20 20 20 2a 2a 20 63 6f 6c 75 6d 6e 73 2e  .    ** columns.
14ff0 20 20 53 6f 20 74 68 65 20 72 65 73 75 6c 74 20    So the result 
15000 77 69 6c 6c 20 62 65 20 65 69 74 68 65 72 20 74  will be either t
15010 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  he default value
15020 20 6f 72 20 61 20 4e 55 4c 4c 2e 0a 20 20 20 20   or a NULL..    
15030 2a 2f 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e  */.    if( pC->n
15040 48 64 72 50 61 72 73 65 64 3c 3d 70 32 20 29 7b  HdrParsed<=p2 ){
15050 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  .      if( pOp->
15060 70 34 74 79 70 65 3d 3d 50 34 5f 4d 45 4d 20 29  p4type==P4_MEM )
15070 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
15080 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43  3VdbeMemShallowC
15090 6f 70 79 28 70 44 65 73 74 2c 20 70 4f 70 2d 3e  opy(pDest, pOp->
150a0 70 34 2e 70 4d 65 6d 2c 20 4d 45 4d 5f 53 74 61  p4.pMem, MEM_Sta
150b0 74 69 63 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  tic);.      }els
150c0 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  e{.        sqlit
150d0 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
150e0 28 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 7d  (pDest);.      }
150f0 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63  .      goto op_c
15100 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d  olumn_out;.    }
15110 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 74 20  .  }else{.    t 
15120 3d 20 70 43 2d 3e 61 54 79 70 65 5b 70 32 5d 3b  = pC->aType[p2];
15130 0a 20 20 7d 0a 0a 20 20 2f 2a 20 45 78 74 72 61  .  }..  /* Extra
15140 63 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 66  ct the content f
15150 6f 72 20 74 68 65 20 70 32 2b 31 2d 74 68 20 63  or the p2+1-th c
15160 6f 6c 75 6d 6e 2e 20 20 43 6f 6e 74 72 6f 6c 20  olumn.  Control 
15170 63 61 6e 20 6f 6e 6c 79 0a 20 20 2a 2a 20 72 65  can only.  ** re
15180 61 63 68 20 74 68 69 73 20 70 6f 69 6e 74 20 69  ach this point i
15190 66 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 61  f aOffset[p2], a
151a0 4f 66 66 73 65 74 5b 70 32 2b 31 5d 2c 20 61 6e  Offset[p2+1], an
151b0 64 20 70 43 2d 3e 61 54 79 70 65 5b 70 32 5d 20  d pC->aType[p2] 
151c0 61 72 65 0a 20 20 2a 2a 20 61 6c 6c 20 76 61 6c  are.  ** all val
151d0 69 64 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72  id..  */.  asser
151e0 74 28 20 70 32 3c 70 43 2d 3e 6e 48 64 72 50 61  t( p2<pC->nHdrPa
151f0 72 73 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74  rsed );.  assert
15200 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
15210 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c  );.  assert( sql
15220 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d  ite3VdbeCheckMem
15230 49 6e 76 61 72 69 61 6e 74 73 28 70 44 65 73 74  Invariants(pDest
15240 29 20 29 3b 0a 20 20 69 66 28 20 56 64 62 65 4d  ) );.  if( VdbeM
15250 65 6d 44 79 6e 61 6d 69 63 28 70 44 65 73 74 29  emDynamic(pDest)
15260 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
15270 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44  dbeMemSetNull(pD
15280 65 73 74 29 3b 0a 20 20 7d 0a 20 20 61 73 73 65  est);.  }.  asse
15290 72 74 28 20 74 3d 3d 70 43 2d 3e 61 54 79 70 65  rt( t==pC->aType
152a0 5b 70 32 5d 20 29 3b 0a 20 20 69 66 28 20 70 43  [p2] );.  if( pC
152b0 2d 3e 73 7a 52 6f 77 3e 3d 61 4f 66 66 73 65 74  ->szRow>=aOffset
152c0 5b 70 32 2b 31 5d 20 29 7b 0a 20 20 20 20 2f 2a  [p2+1] ){.    /*
152d0 20 54 68 69 73 20 69 73 20 74 68 65 20 63 6f 6d   This is the com
152e0 6d 6f 6e 20 63 61 73 65 20 77 68 65 72 65 20 74  mon case where t
152f0 68 65 20 64 65 73 69 72 65 64 20 63 6f 6e 74 65  he desired conte
15300 6e 74 20 66 69 74 73 20 6f 6e 20 74 68 65 20 6f  nt fits on the o
15310 72 69 67 69 6e 61 6c 0a 20 20 20 20 2a 2a 20 70  riginal.    ** p
15320 61 67 65 20 2d 20 77 68 65 72 65 20 74 68 65 20  age - where the 
15330 63 6f 6e 74 65 6e 74 20 69 73 20 6e 6f 74 20 6f  content is not o
15340 6e 20 61 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61  n an overflow pa
15350 67 65 20 2a 2f 0a 20 20 20 20 7a 44 61 74 61 20  ge */.    zData 
15360 3d 20 70 43 2d 3e 61 52 6f 77 20 2b 20 61 4f 66  = pC->aRow + aOf
15370 66 73 65 74 5b 70 32 5d 3b 0a 20 20 20 20 69 66  fset[p2];.    if
15380 28 20 74 3c 31 32 20 29 7b 0a 20 20 20 20 20 20  ( t<12 ){.      
15390 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
153a0 6c 47 65 74 28 7a 44 61 74 61 2c 20 74 2c 20 70  lGet(zData, t, p
153b0 44 65 73 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65  Dest);.    }else
153c0 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68  {.      /* If th
153d0 65 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 69  e column value i
153e0 73 20 61 20 73 74 72 69 6e 67 2c 20 77 65 20 6e  s a string, we n
153f0 65 65 64 20 61 20 70 65 72 73 69 73 74 65 6e 74  eed a persistent
15400 20 76 61 6c 75 65 2c 20 6e 6f 74 0a 20 20 20 20   value, not.    
15410 20 20 2a 2a 20 61 20 4d 45 4d 5f 45 70 68 65 6d    ** a MEM_Ephem
15420 20 76 61 6c 75 65 2e 20 20 54 68 69 73 20 62 72   value.  This br
15430 61 6e 63 68 20 69 73 20 61 20 66 61 73 74 20 73  anch is a fast s
15440 68 6f 72 74 2d 63 75 74 20 74 68 61 74 20 69 73  hort-cut that is
15450 20 65 71 75 69 76 61 6c 65 6e 74 0a 20 20 20 20   equivalent.    
15460 20 20 2a 2a 20 74 6f 20 63 61 6c 6c 69 6e 67 20    ** to calling 
15470 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
15480 6c 47 65 74 28 29 20 61 6e 64 20 73 71 6c 69 74  lGet() and sqlit
15490 65 33 56 64 62 65 44 65 65 70 68 65 6d 65 72 61  e3VdbeDeephemera
154a0 6c 69 7a 65 28 29 2e 0a 20 20 20 20 20 20 2a 2f  lize()..      */
154b0 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f  .      static co
154c0 6e 73 74 20 75 31 36 20 61 46 6c 61 67 5b 5d 20  nst u16 aFlag[] 
154d0 3d 20 7b 20 4d 45 4d 5f 42 6c 6f 62 2c 20 4d 45  = { MEM_Blob, ME
154e0 4d 5f 53 74 72 7c 4d 45 4d 5f 54 65 72 6d 20 7d  M_Str|MEM_Term }
154f0 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e 6e  ;.      pDest->n
15500 20 3d 20 6c 65 6e 20 3d 20 28 74 2d 31 32 29 2f   = len = (t-12)/
15510 32 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e  2;.      pDest->
15520 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a  enc = encoding;.
15530 20 20 20 20 20 20 69 66 28 20 70 44 65 73 74 2d        if( pDest-
15540 3e 73 7a 4d 61 6c 6c 6f 63 20 3c 20 6c 65 6e 2b  >szMalloc < len+
15550 32 20 29 7b 0a 20 20 20 20 20 20 20 20 70 44 65  2 ){.        pDe
15560 73 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  st->flags = MEM_
15570 4e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66  Null;.        if
15580 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
15590 47 72 6f 77 28 70 44 65 73 74 2c 20 6c 65 6e 2b  Grow(pDest, len+
155a0 32 2c 20 30 29 20 29 20 67 6f 74 6f 20 6e 6f 5f  2, 0) ) goto no_
155b0 6d 65 6d 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  mem;.      }else
155c0 7b 0a 20 20 20 20 20 20 20 20 70 44 65 73 74 2d  {.        pDest-
155d0 3e 7a 20 3d 20 70 44 65 73 74 2d 3e 7a 4d 61 6c  >z = pDest->zMal
155e0 6c 6f 63 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  loc;.      }.   
155f0 20 20 20 6d 65 6d 63 70 79 28 70 44 65 73 74 2d     memcpy(pDest-
15600 3e 7a 2c 20 7a 44 61 74 61 2c 20 6c 65 6e 29 3b  >z, zData, len);
15610 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e 7a 5b  .      pDest->z[
15620 6c 65 6e 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20  len] = 0;.      
15630 70 44 65 73 74 2d 3e 7a 5b 6c 65 6e 2b 31 5d 20  pDest->z[len+1] 
15640 3d 20 30 3b 0a 20 20 20 20 20 20 70 44 65 73 74  = 0;.      pDest
15650 2d 3e 66 6c 61 67 73 20 3d 20 61 46 6c 61 67 5b  ->flags = aFlag[
15660 74 26 31 5d 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  t&1];.    }.  }e
15670 6c 73 65 7b 0a 20 20 20 20 70 44 65 73 74 2d 3e  lse{.    pDest->
15680 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a  enc = encoding;.
15690 20 20 20 20 2f 2a 20 54 68 69 73 20 62 72 61 6e      /* This bran
156a0 63 68 20 68 61 70 70 65 6e 73 20 6f 6e 6c 79 20  ch happens only 
156b0 77 68 65 6e 20 63 6f 6e 74 65 6e 74 20 69 73 20  when content is 
156c0 6f 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65  on overflow page
156d0 73 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 28 70  s */.    if( ((p
156e0 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46 4c 41 47  Op->p5 & (OPFLAG
156f0 5f 4c 45 4e 47 54 48 41 52 47 7c 4f 50 46 4c 41  _LENGTHARG|OPFLA
15700 47 5f 54 59 50 45 4f 46 41 52 47 29 29 21 3d 30  G_TYPEOFARG))!=0
15710 0a 20 20 20 20 20 20 20 20 20 20 26 26 20 28 28  .          && ((
15720 74 3e 3d 31 32 20 26 26 20 28 74 26 31 29 3d 3d  t>=12 && (t&1)==
15730 30 29 20 7c 7c 20 28 70 4f 70 2d 3e 70 35 20 26  0) || (pOp->p5 &
15740 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52   OPFLAG_TYPEOFAR
15750 47 29 21 3d 30 29 29 0a 20 20 20 20 20 7c 7c 20  G)!=0)).     || 
15760 28 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33 56 64  (len = sqlite3Vd
15770 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28  beSerialTypeLen(
15780 74 29 29 3d 3d 30 0a 20 20 20 20 29 7b 0a 20 20  t))==0.    ){.  
15790 20 20 20 20 2f 2a 20 43 6f 6e 74 65 6e 74 20 69      /* Content i
157a0 73 20 69 72 72 65 6c 65 76 61 6e 74 20 66 6f 72  s irrelevant for
157b0 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 31 2e 20  .      **    1. 
157c0 74 68 65 20 74 79 70 65 6f 66 28 29 20 66 75 6e  the typeof() fun
157d0 63 74 69 6f 6e 2c 0a 20 20 20 20 20 20 2a 2a 20  ction,.      ** 
157e0 20 20 20 32 2e 20 74 68 65 20 6c 65 6e 67 74 68     2. the length
157f0 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 66 20  (X) function if 
15800 58 20 69 73 20 61 20 62 6c 6f 62 2c 20 61 6e 64  X is a blob, and
15810 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 33 2e 20  .      **    3. 
15820 69 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6c  if the content l
15830 65 6e 67 74 68 20 69 73 20 7a 65 72 6f 2e 0a 20  ength is zero.. 
15840 20 20 20 20 20 2a 2a 20 53 6f 20 77 65 20 6d 69       ** So we mi
15850 67 68 74 20 61 73 20 77 65 6c 6c 20 75 73 65 20  ght as well use 
15860 62 6f 67 75 73 20 63 6f 6e 74 65 6e 74 20 72 61  bogus content ra
15870 74 68 65 72 20 74 68 61 6e 20 72 65 61 64 69 6e  ther than readin
15880 67 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6e 74 65  g.      ** conte
15890 6e 74 20 66 72 6f 6d 20 64 69 73 6b 2e 20 0a 20  nt from disk. . 
158a0 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a       **.      **
158b0 20 41 6c 74 68 6f 75 67 68 20 73 71 6c 69 74 65   Although sqlite
158c0 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 29  3VdbeSerialGet()
158d0 20 6d 61 79 20 72 65 61 64 20 61 74 20 6d 6f 73   may read at mos
158e0 74 20 38 20 62 79 74 65 73 20 66 72 6f 6d 20 74  t 8 bytes from t
158f0 68 65 0a 20 20 20 20 20 20 2a 2a 20 62 75 66 66  he.      ** buff
15900 65 72 20 70 61 73 73 65 64 20 74 6f 20 69 74 2c  er passed to it,
15910 20 64 65 62 75 67 67 69 6e 67 20 66 75 6e 63 74   debugging funct
15920 69 6f 6e 20 56 64 62 65 4d 65 6d 50 72 65 74 74  ion VdbeMemPrett
15930 79 50 72 69 6e 74 28 29 20 6d 61 79 0a 20 20 20  yPrint() may.   
15940 20 20 20 2a 2a 20 72 65 61 64 20 75 70 20 74 6f     ** read up to
15950 20 31 36 2e 20 53 6f 20 31 36 20 62 79 74 65 73   16. So 16 bytes
15960 20 6f 66 20 62 6f 67 75 73 20 63 6f 6e 74 65 6e   of bogus conten
15970 74 20 69 73 20 73 75 70 70 6c 69 65 64 2e 0a 20  t is supplied.. 
15980 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 74       */.      st
15990 61 74 69 63 20 75 38 20 61 5a 65 72 6f 5b 31 36  atic u8 aZero[16
159a0 5d 3b 20 20 2f 2a 20 54 68 69 73 20 69 73 20 74  ];  /* This is t
159b0 68 65 20 62 6f 67 75 73 20 63 6f 6e 74 65 6e 74  he bogus content
159c0 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65   */.      sqlite
159d0 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 61  3VdbeSerialGet(a
159e0 5a 65 72 6f 2c 20 74 2c 20 70 44 65 73 74 29 3b  Zero, t, pDest);
159f0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
15a00 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
15a10 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70  beMemFromBtree(p
15a20 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 61  C->uc.pCursor, a
15a30 4f 66 66 73 65 74 5b 70 32 5d 2c 20 6c 65 6e 2c  Offset[p2], len,
15a40 20 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 69   pDest);.      i
15a50 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
15a60 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
15a70 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
15a80 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72    sqlite3VdbeSer
15a90 69 61 6c 47 65 74 28 28 63 6f 6e 73 74 20 75 38  ialGet((const u8
15aa0 2a 29 70 44 65 73 74 2d 3e 7a 2c 20 74 2c 20 70  *)pDest->z, t, p
15ab0 44 65 73 74 29 3b 0a 20 20 20 20 20 20 70 44 65  Dest);.      pDe
15ac0 73 74 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45  st->flags &= ~ME
15ad0 4d 5f 45 70 68 65 6d 3b 0a 20 20 20 20 7d 0a 20  M_Ephem;.    }. 
15ae0 20 7d 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75   }..op_column_ou
15af0 74 3a 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  t:.  UPDATE_MAX_
15b00 42 4c 4f 42 53 49 5a 45 28 70 44 65 73 74 29 3b  BLOBSIZE(pDest);
15b10 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
15b20 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74  E(pOp->p3, pDest
15b30 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 0a 6f 70 5f  );.  break;..op_
15b40 63 6f 6c 75 6d 6e 5f 63 6f 72 72 75 70 74 3a 0a  column_corrupt:.
15b50 20 20 69 66 28 20 61 4f 70 5b 30 5d 2e 70 33 3e    if( aOp[0].p3>
15b60 30 20 29 7b 0a 20 20 20 20 70 4f 70 20 3d 20 26  0 ){.    pOp = &
15b70 61 4f 70 5b 61 4f 70 5b 30 5d 2e 70 33 2d 31 5d  aOp[aOp[0].p3-1]
15b80 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
15b90 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 53  else{.    rc = S
15ba0 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b  QLITE_CORRUPT_BK
15bb0 50 54 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f  PT;.    goto abo
15bc0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
15bd0 0a 20 20 7d 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  .  }.}../* Opcod
15be0 65 3a 20 41 66 66 69 6e 69 74 79 20 50 31 20 50  e: Affinity P1 P
15bf0 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f  2 * P4 *.** Syno
15c00 70 73 69 73 3a 20 61 66 66 69 6e 69 74 79 28 72  psis: affinity(r
15c10 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 41  [P1@P2]).**.** A
15c20 70 70 6c 79 20 61 66 66 69 6e 69 74 69 65 73 20  pply affinities 
15c30 74 6f 20 61 20 72 61 6e 67 65 20 6f 66 20 50 32  to a range of P2
15c40 20 72 65 67 69 73 74 65 72 73 20 73 74 61 72 74   registers start
15c50 69 6e 67 20 77 69 74 68 20 50 31 2e 0a 2a 2a 0a  ing with P1..**.
15c60 2a 2a 20 50 34 20 69 73 20 61 20 73 74 72 69 6e  ** P4 is a strin
15c70 67 20 74 68 61 74 20 69 73 20 50 32 20 63 68 61  g that is P2 cha
15c80 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 54 68  racters long. Th
15c90 65 20 4e 2d 74 68 20 63 68 61 72 61 63 74 65 72  e N-th character
15ca0 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e   of the.** strin
15cb0 67 20 69 6e 64 69 63 61 74 65 73 20 74 68 65 20  g indicates the 
15cc0 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20  column affinity 
15cd0 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75  that should be u
15ce0 73 65 64 20 66 6f 72 20 74 68 65 20 4e 2d 74 68  sed for the N-th
15cf0 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  .** memory cell 
15d00 69 6e 20 74 68 65 20 72 61 6e 67 65 2e 0a 2a 2f  in the range..*/
15d10 0a 63 61 73 65 20 4f 50 5f 41 66 66 69 6e 69 74  .case OP_Affinit
15d20 79 3a 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61  y: {.  const cha
15d30 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20  r *zAffinity;   
15d40 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20  /* The affinity 
15d50 74 6f 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f  to be applied */
15d60 0a 0a 20 20 7a 41 66 66 69 6e 69 74 79 20 3d 20  ..  zAffinity = 
15d70 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73  pOp->p4.z;.  ass
15d80 65 72 74 28 20 7a 41 66 66 69 6e 69 74 79 21 3d  ert( zAffinity!=
15d90 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
15da0 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 61 73  Op->p2>0 );.  as
15db0 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74 79 5b  sert( zAffinity[
15dc0 70 4f 70 2d 3e 70 32 5d 3d 3d 30 20 29 3b 0a 20  pOp->p2]==0 );. 
15dd0 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
15de0 70 2d 3e 70 31 5d 3b 0a 20 20 64 6f 7b 0a 20 20  p->p1];.  do{.  
15df0 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 20 3c    assert( pIn1 <
15e00 3d 20 26 70 2d 3e 61 4d 65 6d 5b 28 70 2d 3e 6e  = &p->aMem[(p->n
15e10 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
15e20 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73 65  or)] );.    asse
15e30 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
15e40 49 6e 31 29 20 29 3b 0a 20 20 20 20 61 70 70 6c  In1) );.    appl
15e50 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20  yAffinity(pIn1, 
15e60 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29 2c 20  *(zAffinity++), 
15e70 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 70  encoding);.    p
15e80 49 6e 31 2b 2b 3b 0a 20 20 7d 77 68 69 6c 65 28  In1++;.  }while(
15e90 20 7a 41 66 66 69 6e 69 74 79 5b 30 5d 20 29 3b   zAffinity[0] );
15ea0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
15eb0 4f 70 63 6f 64 65 3a 20 4d 61 6b 65 52 65 63 6f  Opcode: MakeReco
15ec0 72 64 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  rd P1 P2 P3 P4 *
15ed0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
15ee0 50 33 5d 3d 6d 6b 72 65 63 28 72 5b 50 31 40 50  P3]=mkrec(r[P1@P
15ef0 32 5d 29 0a 2a 2a 0a 2a 2a 20 43 6f 6e 76 65 72  2]).**.** Conver
15f00 74 20 50 32 20 72 65 67 69 73 74 65 72 73 20 62  t P2 registers b
15f10 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 31  eginning with P1
15f20 20 69 6e 74 6f 20 74 68 65 20 5b 72 65 63 6f 72   into the [recor
15f30 64 20 66 6f 72 6d 61 74 5d 0a 2a 2a 20 75 73 65  d format].** use
15f40 20 61 73 20 61 20 64 61 74 61 20 72 65 63 6f 72   as a data recor
15f50 64 20 69 6e 20 61 20 64 61 74 61 62 61 73 65 20  d in a database 
15f60 74 61 62 6c 65 20 6f 72 20 61 73 20 61 20 6b 65  table or as a ke
15f70 79 0a 2a 2a 20 69 6e 20 61 6e 20 69 6e 64 65 78  y.** in an index
15f80 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e  .  The OP_Column
15f90 20 6f 70 63 6f 64 65 20 63 61 6e 20 64 65 63 6f   opcode can deco
15fa0 64 65 20 74 68 65 20 72 65 63 6f 72 64 20 6c 61  de the record la
15fb0 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61  ter..**.** P4 ma
15fc0 79 20 62 65 20 61 20 73 74 72 69 6e 67 20 74 68  y be a string th
15fd0 61 74 20 69 73 20 50 32 20 63 68 61 72 61 63 74  at is P2 charact
15fe0 65 72 73 20 6c 6f 6e 67 2e 20 20 54 68 65 20 4e  ers long.  The N
15ff0 2d 74 68 20 63 68 61 72 61 63 74 65 72 20 6f 66  -th character of
16000 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69   the.** string i
16010 6e 64 69 63 61 74 65 73 20 74 68 65 20 63 6f 6c  ndicates the col
16020 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68 61  umn affinity tha
16030 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64  t should be used
16040 20 66 6f 72 20 74 68 65 20 4e 2d 74 68 0a 2a 2a   for the N-th.**
16050 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 69 6e   field of the in
16060 64 65 78 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54  dex key..**.** T
16070 68 65 20 6d 61 70 70 69 6e 67 20 66 72 6f 6d 20  he mapping from 
16080 63 68 61 72 61 63 74 65 72 20 74 6f 20 61 66 66  character to aff
16090 69 6e 69 74 79 20 69 73 20 67 69 76 65 6e 20 62  inity is given b
160a0 79 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46  y the SQLITE_AFF
160b0 5f 0a 2a 2a 20 6d 61 63 72 6f 73 20 64 65 66 69  _.** macros defi
160c0 6e 65 64 20 69 6e 20 73 71 6c 69 74 65 49 6e 74  ned in sqliteInt
160d0 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20  .h..**.** If P4 
160e0 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 61 6c 6c  is NULL then all
160f0 20 69 6e 64 65 78 20 66 69 65 6c 64 73 20 68 61   index fields ha
16100 76 65 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  ve the affinity 
16110 42 4c 4f 42 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  BLOB..*/.case OP
16120 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20 7b 0a 20  _MakeRecord: {. 
16130 20 75 38 20 2a 7a 4e 65 77 52 65 63 6f 72 64 3b   u8 *zNewRecord;
16140 20 20 20 20 20 20 20 20 2f 2a 20 41 20 62 75 66          /* A buf
16150 66 65 72 20 74 6f 20 68 6f 6c 64 20 74 68 65 20  fer to hold the 
16160 64 61 74 61 20 66 6f 72 20 74 68 65 20 6e 65 77  data for the new
16170 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d   record */.  Mem
16180 20 2a 70 52 65 63 3b 20 20 20 20 20 20 20 20 20   *pRec;         
16190 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72      /* The new r
161a0 65 63 6f 72 64 20 2a 2f 0a 20 20 75 36 34 20 6e  ecord */.  u64 n
161b0 44 61 74 61 3b 20 20 20 20 20 20 20 20 20 20 20  Data;           
161c0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
161d0 79 74 65 73 20 6f 66 20 64 61 74 61 20 73 70 61  ytes of data spa
161e0 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 64 72  ce */.  int nHdr
161f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
16200 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
16210 73 20 6f 66 20 68 65 61 64 65 72 20 73 70 61 63  s of header spac
16220 65 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65  e */.  i64 nByte
16230 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
16240 20 44 61 74 61 20 73 70 61 63 65 20 72 65 71 75   Data space requ
16250 69 72 65 64 20 66 6f 72 20 74 68 69 73 20 72 65  ired for this re
16260 63 6f 72 64 20 2a 2f 0a 20 20 69 36 34 20 6e 5a  cord */.  i64 nZ
16270 65 72 6f 3b 20 20 20 20 20 20 20 20 20 20 20 20  ero;            
16280 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65   /* Number of ze
16290 72 6f 20 62 79 74 65 73 20 61 74 20 74 68 65 20  ro bytes at the 
162a0 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72  end of the recor
162b0 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 61 72 69  d */.  int nVari
162c0 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  nt;           /*
162d0 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
162e0 20 69 6e 20 61 20 76 61 72 69 6e 74 20 2a 2f 0a   in a varint */.
162f0 20 20 75 33 32 20 73 65 72 69 61 6c 5f 74 79 70    u32 serial_typ
16300 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 79 70 65  e;       /* Type
16310 20 66 69 65 6c 64 20 2a 2f 0a 20 20 4d 65 6d 20   field */.  Mem 
16320 2a 70 44 61 74 61 30 3b 20 20 20 20 20 20 20 20  *pData0;        
16330 20 20 20 2f 2a 20 46 69 72 73 74 20 66 69 65 6c     /* First fiel
16340 64 20 74 6f 20 62 65 20 63 6f 6d 62 69 6e 65 64  d to be combined
16350 20 69 6e 74 6f 20 74 68 65 20 72 65 63 6f 72 64   into the record
16360 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c 61 73 74   */.  Mem *pLast
16370 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
16380 4c 61 73 74 20 66 69 65 6c 64 20 6f 66 20 74 68  Last field of th
16390 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
163a0 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20  t nField;       
163b0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
163c0 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20  f fields in the 
163d0 72 65 63 6f 72 64 20 2a 2f 0a 20 20 63 68 61 72  record */.  char
163e0 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 20   *zAffinity;    
163f0 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69     /* The affini
16400 74 79 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68  ty string for th
16410 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
16420 74 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20  t file_format;  
16430 20 20 20 20 20 2f 2a 20 46 69 6c 65 20 66 6f 72       /* File for
16440 6d 61 74 20 74 6f 20 75 73 65 20 66 6f 72 20 65  mat to use for e
16450 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74  ncoding */.  int
16460 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   i;             
16470 20 20 20 20 2f 2a 20 53 70 61 63 65 20 75 73 65      /* Space use
16480 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b  d in zNewRecord[
16490 5d 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 69 6e  ] header */.  in
164a0 74 20 6a 3b 20 20 20 20 20 20 20 20 20 20 20 20  t j;            
164b0 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20 75 73       /* Space us
164c0 65 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64  ed in zNewRecord
164d0 5b 5d 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20  [] content */.  
164e0 75 33 32 20 6c 65 6e 3b 20 20 20 20 20 20 20 20  u32 len;        
164f0 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68         /* Length
16500 20 6f 66 20 61 20 66 69 65 6c 64 20 2a 2f 0a 0a   of a field */..
16510 20 20 2f 2a 20 41 73 73 75 6d 69 6e 67 20 74 68    /* Assuming th
16520 65 20 72 65 63 6f 72 64 20 63 6f 6e 74 61 69 6e  e record contain
16530 73 20 4e 20 66 69 65 6c 64 73 2c 20 74 68 65 20  s N fields, the 
16540 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 20 6c 6f  record format lo
16550 6f 6b 73 0a 20 20 2a 2a 20 6c 69 6b 65 20 74 68  oks.  ** like th
16560 69 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 2d 2d  is:.  **.  ** --
16570 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16580 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16590 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
165a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
165b0 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 20 7c 20 68 64  ------.  ** | hd
165c0 72 2d 73 69 7a 65 20 7c 20 74 79 70 65 20 30 20  r-size | type 0 
165d0 7c 20 74 79 70 65 20 31 20 7c 20 2e 2e 2e 20 7c  | type 1 | ... |
165e0 20 74 79 70 65 20 4e 2d 31 20 7c 20 64 61 74 61   type N-1 | data
165f0 30 20 7c 20 2e 2e 2e 20 7c 20 64 61 74 61 20 4e  0 | ... | data N
16600 2d 31 20 7c 20 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d  -1 | .  ** -----
16610 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16620 2d 2d 2d 2d 2d 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 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 61  ---.  **.  ** Da
16660 74 61 28 30 29 20 69 73 20 74 61 6b 65 6e 20 66  ta(0) is taken f
16670 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31 2e  rom register P1.
16680 20 20 44 61 74 61 28 31 29 20 63 6f 6d 65 73 20    Data(1) comes 
16690 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31  from register P1
166a0 2b 31 0a 20 20 2a 2a 20 61 6e 64 20 73 6f 20 66  +1.  ** and so f
166b0 6f 72 74 68 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  orth..  **.  ** 
166c0 45 61 63 68 20 74 79 70 65 20 66 69 65 6c 64 20  Each type field 
166d0 69 73 20 61 20 76 61 72 69 6e 74 20 72 65 70 72  is a varint repr
166e0 65 73 65 6e 74 69 6e 67 20 74 68 65 20 73 65 72  esenting the ser
166f0 69 61 6c 20 74 79 70 65 20 6f 66 20 74 68 65 20  ial type of the 
16700 0a 20 20 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64  .  ** correspond
16710 69 6e 67 20 64 61 74 61 20 65 6c 65 6d 65 6e 74  ing data element
16720 20 28 73 65 65 20 73 71 6c 69 74 65 33 56 64 62   (see sqlite3Vdb
16730 65 53 65 72 69 61 6c 54 79 70 65 28 29 29 2e 20  eSerialType()). 
16740 54 68 65 0a 20 20 2a 2a 20 68 64 72 2d 73 69 7a  The.  ** hdr-siz
16750 65 20 66 69 65 6c 64 20 69 73 20 61 6c 73 6f 20  e field is also 
16760 61 20 76 61 72 69 6e 74 20 77 68 69 63 68 20 69  a varint which i
16770 73 20 74 68 65 20 6f 66 66 73 65 74 20 66 72 6f  s the offset fro
16780 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a  m the beginning.
16790 20 20 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f    ** of the reco
167a0 72 64 20 74 6f 20 64 61 74 61 30 2e 0a 20 20 2a  rd to data0..  *
167b0 2f 0a 20 20 6e 44 61 74 61 20 3d 20 30 3b 20 20  /.  nData = 0;  
167c0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
167d0 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61 74   of bytes of dat
167e0 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e 48 64  a space */.  nHd
167f0 72 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  r = 0;          
16800 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
16810 65 73 20 6f 66 20 68 65 61 64 65 72 20 73 70 61  es of header spa
16820 63 65 20 2a 2f 0a 20 20 6e 5a 65 72 6f 20 3d 20  ce */.  nZero = 
16830 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  0;         /* Nu
16840 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20 62 79 74  mber of zero byt
16850 65 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66  es at the end of
16860 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
16870 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70   nField = pOp->p
16880 31 3b 0a 20 20 7a 41 66 66 69 6e 69 74 79 20 3d  1;.  zAffinity =
16890 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73   pOp->p4.z;.  as
168a0 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 30 20 26  sert( nField>0 &
168b0 26 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70  & pOp->p2>0 && p
168c0 4f 70 2d 3e 70 32 2b 6e 46 69 65 6c 64 3c 3d 28  Op->p2+nField<=(
168d0 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
168e0 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 70  Cursor)+1 );.  p
168f0 44 61 74 61 30 20 3d 20 26 61 4d 65 6d 5b 6e 46  Data0 = &aMem[nF
16900 69 65 6c 64 5d 3b 0a 20 20 6e 46 69 65 6c 64 20  ield];.  nField 
16910 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 4c 61  = pOp->p2;.  pLa
16920 73 74 20 3d 20 26 70 44 61 74 61 30 5b 6e 46 69  st = &pData0[nFi
16930 65 6c 64 2d 31 5d 3b 0a 20 20 66 69 6c 65 5f 66  eld-1];.  file_f
16940 6f 72 6d 61 74 20 3d 20 70 2d 3e 6d 69 6e 57 72  ormat = p->minWr
16950 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 3b 0a 0a  iteFileFormat;..
16960 20 20 2f 2a 20 49 64 65 6e 74 69 66 79 20 74 68    /* Identify th
16970 65 20 6f 75 74 70 75 74 20 72 65 67 69 73 74 65  e output registe
16980 72 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  r */.  assert( p
16990 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 31 20 7c  Op->p3<pOp->p1 |
169a0 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e  | pOp->p3>=pOp->
169b0 70 31 2b 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20  p1+pOp->p2 );.  
169c0 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
169d0 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75  ->p3];.  memAbou
169e0 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75  tToChange(p, pOu
169f0 74 29 3b 0a 0a 20 20 2f 2a 20 41 70 70 6c 79 20  t);..  /* Apply 
16a00 74 68 65 20 72 65 71 75 65 73 74 65 64 20 61 66  the requested af
16a10 66 69 6e 69 74 79 20 74 6f 20 61 6c 6c 20 69 6e  finity to all in
16a20 70 75 74 73 0a 20 20 2a 2f 0a 20 20 61 73 73 65  puts.  */.  asse
16a30 72 74 28 20 70 44 61 74 61 30 3c 3d 70 4c 61 73  rt( pData0<=pLas
16a40 74 20 29 3b 0a 20 20 69 66 28 20 7a 41 66 66 69  t );.  if( zAffi
16a50 6e 69 74 79 20 29 7b 0a 20 20 20 20 70 52 65 63  nity ){.    pRec
16a60 20 3d 20 70 44 61 74 61 30 3b 0a 20 20 20 20 64   = pData0;.    d
16a70 6f 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 41 66  o{.      applyAf
16a80 66 69 6e 69 74 79 28 70 52 65 63 2b 2b 2c 20 2a  finity(pRec++, *
16a90 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29 2c 20 65  (zAffinity++), e
16aa0 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 20 20  ncoding);.      
16ab0 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74  assert( zAffinit
16ac0 79 5b 30 5d 3d 3d 30 20 7c 7c 20 70 52 65 63 3c  y[0]==0 || pRec<
16ad0 3d 70 4c 61 73 74 20 29 3b 0a 20 20 20 20 7d 77  =pLast );.    }w
16ae0 68 69 6c 65 28 20 7a 41 66 66 69 6e 69 74 79 5b  hile( zAffinity[
16af0 30 5d 20 29 3b 0a 20 20 7d 0a 0a 23 69 66 64 65  0] );.  }..#ifde
16b00 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
16b10 4e 55 4c 4c 5f 54 52 49 4d 0a 20 20 2f 2a 20 4e  NULL_TRIM.  /* N
16b20 55 4c 4c 73 20 63 61 6e 20 62 65 20 73 61 66 65  ULLs can be safe
16b30 6c 79 20 74 72 69 6d 6d 65 64 20 66 72 6f 6d 20  ly trimmed from 
16b40 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72  the end of the r
16b50 65 63 6f 72 64 2c 20 61 73 20 6c 6f 6e 67 20 61  ecord, as long a
16b60 73 0a 20 20 2a 2a 20 61 73 20 74 68 65 20 73 63  s.  ** as the sc
16b70 68 65 6d 61 20 66 6f 72 6d 61 74 20 69 73 20 32  hema format is 2
16b80 20 6f 72 20 6d 6f 72 65 20 61 6e 64 20 6e 6f 6e   or more and non
16b90 65 20 6f 66 20 74 68 65 20 6f 6d 69 74 74 65 64  e of the omitted
16ba0 20 63 6f 6c 75 6d 6e 73 0a 20 20 2a 2a 20 68 61   columns.  ** ha
16bb0 76 65 20 61 20 6e 6f 6e 2d 4e 55 4c 4c 20 64 65  ve a non-NULL de
16bc0 66 61 75 6c 74 20 76 61 6c 75 65 2e 20 20 41 6c  fault value.  Al
16bd0 73 6f 2c 20 74 68 65 20 72 65 63 6f 72 64 20 6d  so, the record m
16be0 75 73 74 20 62 65 20 6c 65 66 74 20 77 69 74 68  ust be left with
16bf0 0a 20 20 2a 2a 20 61 74 20 6c 65 61 73 74 20 6f  .  ** at least o
16c00 6e 65 20 66 69 65 6c 64 2e 20 20 49 66 20 50 35  ne field.  If P5
16c10 3e 30 20 74 68 65 6e 20 69 74 20 77 69 6c 6c 20  >0 then it will 
16c20 62 65 20 6f 6e 65 20 6d 6f 72 65 20 74 68 61 6e  be one more than
16c30 20 74 68 65 0a 20 20 2a 2a 20 69 6e 64 65 78 20   the.  ** index 
16c40 6f 66 20 74 68 65 20 72 69 67 68 74 2d 6d 6f 73  of the right-mos
16c50 74 20 63 6f 6c 75 6d 6e 20 77 69 74 68 20 61 20  t column with a 
16c60 6e 6f 6e 2d 4e 55 4c 4c 20 64 65 66 61 75 6c 74  non-NULL default
16c70 20 76 61 6c 75 65 20 2a 2f 0a 20 20 69 66 28 20   value */.  if( 
16c80 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 77  pOp->p5 ){.    w
16c90 68 69 6c 65 28 20 28 70 4c 61 73 74 2d 3e 66 6c  hile( (pLast->fl
16ca0 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21  ags & MEM_Null)!
16cb0 3d 30 20 26 26 20 6e 46 69 65 6c 64 3e 70 4f 70  =0 && nField>pOp
16cc0 2d 3e 70 35 20 29 7b 0a 20 20 20 20 20 20 70 4c  ->p5 ){.      pL
16cd0 61 73 74 2d 2d 3b 0a 20 20 20 20 20 20 6e 46 69  ast--;.      nFi
16ce0 65 6c 64 2d 2d 3b 0a 20 20 20 20 7d 0a 20 20 7d  eld--;.    }.  }
16cf0 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 4c 6f  .#endif..  /* Lo
16d00 6f 70 20 74 68 72 6f 75 67 68 20 74 68 65 20 65  op through the e
16d10 6c 65 6d 65 6e 74 73 20 74 68 61 74 20 77 69 6c  lements that wil
16d20 6c 20 6d 61 6b 65 20 75 70 20 74 68 65 20 72 65  l make up the re
16d30 63 6f 72 64 20 74 6f 20 66 69 67 75 72 65 0a 20  cord to figure. 
16d40 20 2a 2a 20 6f 75 74 20 68 6f 77 20 6d 75 63 68   ** out how much
16d50 20 73 70 61 63 65 20 69 73 20 72 65 71 75 69 72   space is requir
16d60 65 64 20 66 6f 72 20 74 68 65 20 6e 65 77 20 72  ed for the new r
16d70 65 63 6f 72 64 2e 0a 20 20 2a 2f 0a 20 20 70 52  ecord..  */.  pR
16d80 65 63 20 3d 20 70 4c 61 73 74 3b 0a 20 20 64 6f  ec = pLast;.  do
16d90 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  {.    assert( me
16da0 6d 49 73 56 61 6c 69 64 28 70 52 65 63 29 20 29  mIsValid(pRec) )
16db0 3b 0a 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70  ;.    serial_typ
16dc0 65 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  e = sqlite3VdbeS
16dd0 65 72 69 61 6c 54 79 70 65 28 70 52 65 63 2c 20  erialType(pRec, 
16de0 66 69 6c 65 5f 66 6f 72 6d 61 74 2c 20 26 6c 65  file_format, &le
16df0 6e 29 3b 0a 20 20 20 20 69 66 28 20 70 52 65 63  n);.    if( pRec
16e00 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65  ->flags & MEM_Ze
16e10 72 6f 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  ro ){.      if( 
16e20 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d 30 20 29  serial_type==0 )
16e30 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c  {.        /* Val
16e40 75 65 73 20 77 69 74 68 20 4d 45 4d 5f 4e 75 6c  ues with MEM_Nul
16e50 6c 20 61 6e 64 20 4d 45 4d 5f 5a 65 72 6f 20 61  l and MEM_Zero a
16e60 72 65 20 63 72 65 61 74 65 64 20 62 79 20 78 43  re created by xC
16e70 6f 6c 75 6d 6e 20 76 69 72 74 75 61 6c 0a 20 20  olumn virtual.  
16e80 20 20 20 20 20 20 2a 2a 20 74 61 62 6c 65 20 6d        ** table m
16e90 65 74 68 6f 64 73 20 74 68 61 74 20 6e 65 76 65  ethods that neve
16ea0 72 20 69 6e 76 6f 6b 65 20 73 71 6c 69 74 65 33  r invoke sqlite3
16eb0 5f 72 65 73 75 6c 74 5f 78 78 78 78 78 28 29 20  _result_xxxxx() 
16ec0 77 68 69 6c 65 0a 20 20 20 20 20 20 20 20 2a 2a  while.        **
16ed0 20 63 6f 6d 70 75 74 69 6e 67 20 61 6e 20 75 6e   computing an un
16ee0 63 68 61 6e 67 69 6e 67 20 63 6f 6c 75 6d 6e 20  changing column 
16ef0 76 61 6c 75 65 20 69 6e 20 61 6e 20 55 50 44 41  value in an UPDA
16f00 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 0a 20 20  TE statement..  
16f10 20 20 20 20 20 20 2a 2a 20 47 69 76 65 20 73 75        ** Give su
16f20 63 68 20 76 61 6c 75 65 73 20 61 20 73 70 65 63  ch values a spec
16f30 69 61 6c 20 69 6e 74 65 72 6e 61 6c 2d 75 73 65  ial internal-use
16f40 2d 6f 6e 6c 79 20 73 65 72 69 61 6c 2d 74 79 70  -only serial-typ
16f50 65 20 6f 66 20 31 30 0a 20 20 20 20 20 20 20 20  e of 10.        
16f60 2a 2a 20 73 6f 20 74 68 61 74 20 74 68 65 79 20  ** so that they 
16f70 63 61 6e 20 62 65 20 70 61 73 73 65 64 20 74 68  can be passed th
16f80 72 6f 75 67 68 20 74 6f 20 78 55 70 64 61 74 65  rough to xUpdate
16f90 20 61 6e 64 20 68 61 76 65 0a 20 20 20 20 20 20   and have.      
16fa0 20 20 2a 2a 20 61 20 74 72 75 65 20 73 71 6c 69    ** a true sqli
16fb0 74 65 33 5f 76 61 6c 75 65 5f 6e 6f 63 68 61 6e  te3_value_nochan
16fc0 67 65 28 29 2e 20 2a 2f 0a 20 20 20 20 20 20 20  ge(). */.       
16fd0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35   assert( pOp->p5
16fe0 3d 3d 4f 50 46 4c 41 47 5f 4e 4f 43 48 4e 47 5f  ==OPFLAG_NOCHNG_
16ff0 4d 41 47 49 43 20 7c 7c 20 43 4f 52 52 55 50 54  MAGIC || CORRUPT
17000 5f 44 42 20 29 3b 0a 20 20 20 20 20 20 20 20 73  _DB );.        s
17010 65 72 69 61 6c 5f 74 79 70 65 20 3d 20 31 30 3b  erial_type = 10;
17020 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
17030 20 6e 44 61 74 61 20 29 7b 0a 20 20 20 20 20 20   nData ){.      
17040 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
17050 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28 70  eMemExpandBlob(p
17060 52 65 63 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  Rec) ) goto no_m
17070 65 6d 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  em;.      }else{
17080 0a 20 20 20 20 20 20 20 20 6e 5a 65 72 6f 20 2b  .        nZero +
17090 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b  = pRec->u.nZero;
170a0 0a 20 20 20 20 20 20 20 20 6c 65 6e 20 2d 3d 20  .        len -= 
170b0 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20  pRec->u.nZero;. 
170c0 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
170d0 20 6e 44 61 74 61 20 2b 3d 20 6c 65 6e 3b 0a 20   nData += len;. 
170e0 20 20 20 74 65 73 74 63 61 73 65 28 20 73 65 72     testcase( ser
170f0 69 61 6c 5f 74 79 70 65 3d 3d 31 32 37 20 29 3b  ial_type==127 );
17100 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20 73  .    testcase( s
17110 65 72 69 61 6c 5f 74 79 70 65 3d 3d 31 32 38 20  erial_type==128 
17120 29 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 73  );.    nHdr += s
17130 65 72 69 61 6c 5f 74 79 70 65 3c 3d 31 32 37 20  erial_type<=127 
17140 3f 20 31 20 3a 20 73 71 6c 69 74 65 33 56 61 72  ? 1 : sqlite3Var
17150 69 6e 74 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79  intLen(serial_ty
17160 70 65 29 3b 0a 20 20 20 20 70 52 65 63 2d 3e 75  pe);.    pRec->u
17170 54 65 6d 70 20 3d 20 73 65 72 69 61 6c 5f 74 79  Temp = serial_ty
17180 70 65 3b 0a 20 20 20 20 69 66 28 20 70 52 65 63  pe;.    if( pRec
17190 3d 3d 70 44 61 74 61 30 20 29 20 62 72 65 61 6b  ==pData0 ) break
171a0 3b 0a 20 20 20 20 70 52 65 63 2d 2d 3b 0a 20 20  ;.    pRec--;.  
171b0 7d 77 68 69 6c 65 28 31 29 3b 0a 0a 20 20 2f 2a  }while(1);..  /*
171c0 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
171d0 32 32 35 36 34 2d 31 31 36 34 37 20 54 68 65 20  22564-11647 The 
171e0 68 65 61 64 65 72 20 62 65 67 69 6e 73 20 77 69  header begins wi
171f0 74 68 20 61 20 73 69 6e 67 6c 65 20 76 61 72 69  th a single vari
17200 6e 74 0a 20 20 2a 2a 20 77 68 69 63 68 20 64 65  nt.  ** which de
17210 74 65 72 6d 69 6e 65 73 20 74 68 65 20 74 6f 74  termines the tot
17220 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74  al number of byt
17230 65 73 20 69 6e 20 74 68 65 20 68 65 61 64 65 72  es in the header
17240 2e 20 54 68 65 20 76 61 72 69 6e 74 0a 20 20 2a  . The varint.  *
17250 2a 20 76 61 6c 75 65 20 69 73 20 74 68 65 20 73  * value is the s
17260 69 7a 65 20 6f 66 20 74 68 65 20 68 65 61 64 65  ize of the heade
17270 72 20 69 6e 20 62 79 74 65 73 20 69 6e 63 6c 75  r in bytes inclu
17280 64 69 6e 67 20 74 68 65 20 73 69 7a 65 20 76 61  ding the size va
17290 72 69 6e 74 0a 20 20 2a 2a 20 69 74 73 65 6c 66  rint.  ** itself
172a0 2e 20 2a 2f 0a 20 20 74 65 73 74 63 61 73 65 28  . */.  testcase(
172b0 20 6e 48 64 72 3d 3d 31 32 36 20 29 3b 0a 20 20   nHdr==126 );.  
172c0 74 65 73 74 63 61 73 65 28 20 6e 48 64 72 3d 3d  testcase( nHdr==
172d0 31 32 37 20 29 3b 0a 20 20 69 66 28 20 6e 48 64  127 );.  if( nHd
172e0 72 3c 3d 31 32 36 20 29 7b 0a 20 20 20 20 2f 2a  r<=126 ){.    /*
172f0 20 54 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65   The common case
17300 20 2a 2f 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20   */.    nHdr += 
17310 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  1;.  }else{.    
17320 2f 2a 20 52 61 72 65 20 63 61 73 65 20 6f 66 20  /* Rare case of 
17330 61 20 72 65 61 6c 6c 79 20 6c 61 72 67 65 20 68  a really large h
17340 65 61 64 65 72 20 2a 2f 0a 20 20 20 20 6e 56 61  eader */.    nVa
17350 72 69 6e 74 20 3d 20 73 71 6c 69 74 65 33 56 61  rint = sqlite3Va
17360 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29 3b 0a 20  rintLen(nHdr);. 
17370 20 20 20 6e 48 64 72 20 2b 3d 20 6e 56 61 72 69     nHdr += nVari
17380 6e 74 3b 0a 20 20 20 20 69 66 28 20 6e 56 61 72  nt;.    if( nVar
17390 69 6e 74 3c 73 71 6c 69 74 65 33 56 61 72 69 6e  int<sqlite3Varin
173a0 74 4c 65 6e 28 6e 48 64 72 29 20 29 20 6e 48 64  tLen(nHdr) ) nHd
173b0 72 2b 2b 3b 0a 20 20 7d 0a 20 20 6e 42 79 74 65  r++;.  }.  nByte
173c0 20 3d 20 6e 48 64 72 2b 6e 44 61 74 61 3b 0a 20   = nHdr+nData;. 
173d0 20 69 66 28 20 6e 42 79 74 65 2b 6e 5a 65 72 6f   if( nByte+nZero
173e0 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  >db->aLimit[SQLI
173f0 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
17400 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
17410 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  _big;.  }..  /* 
17420 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 6f 75  Make sure the ou
17430 74 70 75 74 20 72 65 67 69 73 74 65 72 20 68 61  tput register ha
17440 73 20 61 20 62 75 66 66 65 72 20 6c 61 72 67 65  s a buffer large
17450 20 65 6e 6f 75 67 68 20 74 6f 20 73 74 6f 72 65   enough to store
17460 20 0a 20 20 2a 2a 20 74 68 65 20 6e 65 77 20 72   .  ** the new r
17470 65 63 6f 72 64 2e 20 54 68 65 20 6f 75 74 70 75  ecord. The outpu
17480 74 20 72 65 67 69 73 74 65 72 20 28 70 4f 70 2d  t register (pOp-
17490 3e 70 33 29 20 69 73 20 6e 6f 74 20 61 6c 6c 6f  >p3) is not allo
174a0 77 65 64 20 74 6f 0a 20 20 2a 2a 20 62 65 20 6f  wed to.  ** be o
174b0 6e 65 20 6f 66 20 74 68 65 20 69 6e 70 75 74 20  ne of the input 
174c0 72 65 67 69 73 74 65 72 73 20 28 62 65 63 61 75  registers (becau
174d0 73 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  se the following
174e0 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73 71   call to.  ** sq
174f0 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c 65 61  lite3VdbeMemClea
17500 72 41 6e 64 52 65 73 69 7a 65 28 29 20 63 6f 75  rAndResize() cou
17510 6c 64 20 63 6c 6f 62 62 65 72 20 74 68 65 20 76  ld clobber the v
17520 61 6c 75 65 20 62 65 66 6f 72 65 20 69 74 20 69  alue before it i
17530 73 20 75 73 65 64 29 2e 0a 20 20 2a 2f 0a 20 20  s used)..  */.  
17540 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
17550 65 6d 43 6c 65 61 72 41 6e 64 52 65 73 69 7a 65  emClearAndResize
17560 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79 74  (pOut, (int)nByt
17570 65 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e  e) ){.    goto n
17580 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 7a 4e 65  o_mem;.  }.  zNe
17590 77 52 65 63 6f 72 64 20 3d 20 28 75 38 20 2a 29  wRecord = (u8 *)
175a0 70 4f 75 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20 57  pOut->z;..  /* W
175b0 72 69 74 65 20 74 68 65 20 72 65 63 6f 72 64 20  rite the record 
175c0 2a 2f 0a 20 20 69 20 3d 20 70 75 74 56 61 72 69  */.  i = putVari
175d0 6e 74 33 32 28 7a 4e 65 77 52 65 63 6f 72 64 2c  nt32(zNewRecord,
175e0 20 6e 48 64 72 29 3b 0a 20 20 6a 20 3d 20 6e 48   nHdr);.  j = nH
175f0 64 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44  dr;.  assert( pD
17600 61 74 61 30 3c 3d 70 4c 61 73 74 20 29 3b 0a 20  ata0<=pLast );. 
17610 20 70 52 65 63 20 3d 20 70 44 61 74 61 30 3b 0a   pRec = pData0;.
17620 20 20 64 6f 7b 0a 20 20 20 20 73 65 72 69 61 6c    do{.    serial
17630 5f 74 79 70 65 20 3d 20 70 52 65 63 2d 3e 75 54  _type = pRec->uT
17640 65 6d 70 3b 0a 20 20 20 20 2f 2a 20 45 56 49 44  emp;.    /* EVID
17650 45 4e 43 45 2d 4f 46 3a 20 52 2d 30 36 35 32 39  ENCE-OF: R-06529
17660 2d 34 37 33 36 32 20 46 6f 6c 6c 6f 77 69 6e 67  -47362 Following
17670 20 74 68 65 20 73 69 7a 65 20 76 61 72 69 6e 74   the size varint
17680 20 61 72 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65   are one or more
17690 0a 20 20 20 20 2a 2a 20 61 64 64 69 74 69 6f 6e  .    ** addition
176a0 61 6c 20 76 61 72 69 6e 74 73 2c 20 6f 6e 65 20  al varints, one 
176b0 70 65 72 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20  per column. */. 
176c0 20 20 20 69 20 2b 3d 20 70 75 74 56 61 72 69 6e     i += putVarin
176d0 74 33 32 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b  t32(&zNewRecord[
176e0 69 5d 2c 20 73 65 72 69 61 6c 5f 74 79 70 65 29  i], serial_type)
176f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
17700 73 65 72 69 61 6c 20 74 79 70 65 20 2a 2f 0a 20  serial type */. 
17710 20 20 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f     /* EVIDENCE-O
17720 46 3a 20 52 2d 36 34 35 33 36 2d 35 31 37 32 38  F: R-64536-51728
17730 20 54 68 65 20 76 61 6c 75 65 73 20 66 6f 72 20   The values for 
17740 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74  each column in t
17750 68 65 20 72 65 63 6f 72 64 0a 20 20 20 20 2a 2a  he record.    **
17760 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c   immediately fol
17770 6c 6f 77 20 74 68 65 20 68 65 61 64 65 72 2e 20  low the header. 
17780 2a 2f 0a 20 20 20 20 6a 20 2b 3d 20 73 71 6c 69  */.    j += sqli
17790 74 65 33 56 64 62 65 53 65 72 69 61 6c 50 75 74  te3VdbeSerialPut
177a0 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b 6a 5d 2c  (&zNewRecord[j],
177b0 20 70 52 65 63 2c 20 73 65 72 69 61 6c 5f 74 79   pRec, serial_ty
177c0 70 65 29 3b 20 2f 2a 20 63 6f 6e 74 65 6e 74 20  pe); /* content 
177d0 2a 2f 0a 20 20 7d 77 68 69 6c 65 28 20 28 2b 2b  */.  }while( (++
177e0 70 52 65 63 29 3c 3d 70 4c 61 73 74 20 29 3b 0a  pRec)<=pLast );.
177f0 20 20 61 73 73 65 72 74 28 20 69 3d 3d 6e 48 64    assert( i==nHd
17800 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6a  r );.  assert( j
17810 3d 3d 6e 42 79 74 65 20 29 3b 0a 0a 20 20 61 73  ==nByte );..  as
17820 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
17830 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e  && pOp->p3<=(p->
17840 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
17850 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e  sor) );.  pOut->
17860 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a  n = (int)nByte;.
17870 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
17880 4d 45 4d 5f 42 6c 6f 62 3b 0a 20 20 69 66 28 20  MEM_Blob;.  if( 
17890 6e 5a 65 72 6f 20 29 7b 0a 20 20 20 20 70 4f 75  nZero ){.    pOu
178a0 74 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20 6e 5a 65  t->u.nZero = nZe
178b0 72 6f 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c  ro;.    pOut->fl
178c0 61 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65 72 6f 3b  ags |= MEM_Zero;
178d0 0a 20 20 7d 0a 20 20 52 45 47 49 53 54 45 52 5f  .  }.  REGISTER_
178e0 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
178f0 4f 75 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d  Out);.  UPDATE_M
17900 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
17910 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
17920 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 75 6e 74 20  * Opcode: Count 
17930 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
17940 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 63  ynopsis: r[P2]=c
17950 6f 75 6e 74 28 29 0a 2a 2a 0a 2a 2a 20 53 74 6f  ount().**.** Sto
17960 72 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  re the number of
17970 20 65 6e 74 72 69 65 73 20 28 61 6e 20 69 6e 74   entries (an int
17980 65 67 65 72 20 76 61 6c 75 65 29 20 69 6e 20 74  eger value) in t
17990 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
179a0 78 20 0a 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20  x .** opened by 
179b0 63 75 72 73 6f 72 20 50 31 20 69 6e 20 72 65 67  cursor P1 in reg
179c0 69 73 74 65 72 20 50 32 0a 2a 2f 0a 23 69 66 6e  ister P2.*/.#ifn
179d0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
179e0 42 54 52 45 45 43 4f 55 4e 54 0a 63 61 73 65 20  BTREECOUNT.case 
179f0 4f 50 5f 43 6f 75 6e 74 3a 20 7b 20 20 20 20 20  OP_Count: {     
17a00 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
17a10 20 69 36 34 20 6e 45 6e 74 72 79 3b 0a 20 20 42   i64 nEntry;.  B
17a20 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
17a30 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70  .  assert( p->ap
17a40 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 65 43  Csr[pOp->p1]->eC
17a50 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
17a60 42 54 52 45 45 20 29 3b 0a 20 20 70 43 72 73 72  BTREE );.  pCrsr
17a70 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
17a80 3e 70 31 5d 2d 3e 75 63 2e 70 43 75 72 73 6f 72  >p1]->uc.pCursor
17a90 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73  ;.  assert( pCrs
17aa0 72 20 29 3b 0a 20 20 6e 45 6e 74 72 79 20 3d 20  r );.  nEntry = 
17ab0 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65  0;  /* Not neede
17ac0 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f  d.  Only used to
17ad0 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69   silence a warni
17ae0 6e 67 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71  ng. */.  rc = sq
17af0 6c 69 74 65 33 42 74 72 65 65 43 6f 75 6e 74 28  lite3BtreeCount(
17b00 70 43 72 73 72 2c 20 26 6e 45 6e 74 72 79 29 3b  pCrsr, &nEntry);
17b10 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
17b20 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
17b30 72 6f 72 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75  ror;.  pOut = ou
17b40 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
17b50 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  pOp);.  pOut->u.
17b60 69 20 3d 20 6e 45 6e 74 72 79 3b 0a 20 20 62 72  i = nEntry;.  br
17b70 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  eak;.}.#endif../
17b80 2a 20 4f 70 63 6f 64 65 3a 20 53 61 76 65 70 6f  * Opcode: Savepo
17b90 69 6e 74 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  int P1 * * P4 *.
17ba0 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c 20 72 65 6c 65  **.** Open, rele
17bb0 61 73 65 20 6f 72 20 72 6f 6c 6c 62 61 63 6b 20  ase or rollback 
17bc0 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 6e 61  the savepoint na
17bd0 6d 65 64 20 62 79 20 70 61 72 61 6d 65 74 65 72  med by parameter
17be0 20 50 34 2c 20 64 65 70 65 6e 64 69 6e 67 0a 2a   P4, depending.*
17bf0 2a 20 6f 6e 20 74 68 65 20 76 61 6c 75 65 20 6f  * on the value o
17c00 66 20 50 31 2e 20 54 6f 20 6f 70 65 6e 20 61 20  f P1. To open a 
17c10 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 2c 20 50  new savepoint, P
17c20 31 3d 3d 30 2e 20 54 6f 20 72 65 6c 65 61 73 65  1==0. To release
17c30 20 28 63 6f 6d 6d 69 74 29 20 61 6e 0a 2a 2a 20   (commit) an.** 
17c40 65 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69  existing savepoi
17c50 6e 74 2c 20 50 31 3d 3d 31 2c 20 6f 72 20 74 6f  nt, P1==1, or to
17c60 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 20 65 78 69   rollback an exi
17c70 73 74 69 6e 67 20 73 61 76 65 70 6f 69 6e 74 20  sting savepoint 
17c80 50 31 3d 3d 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  P1==2..*/.case O
17c90 50 5f 53 61 76 65 70 6f 69 6e 74 3a 20 7b 0a 20  P_Savepoint: {. 
17ca0 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20 20   int p1;        
17cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17cc0 20 2f 2a 20 56 61 6c 75 65 20 6f 66 20 50 31 20   /* Value of P1 
17cd0 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 63 68 61  operand */.  cha
17ce0 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
17cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
17d00 4e 61 6d 65 20 6f 66 20 73 61 76 65 70 6f 69 6e  Name of savepoin
17d10 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 4e 61 6d 65  t */.  int nName
17d20 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70  ;.  Savepoint *p
17d30 4e 65 77 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74  New;.  Savepoint
17d40 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20   *pSavepoint;.  
17d50 53 61 76 65 70 6f 69 6e 74 20 2a 70 54 6d 70 3b  Savepoint *pTmp;
17d60 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e  .  int iSavepoin
17d70 74 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 0a 20 20  t;.  int ii;..  
17d80 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  p1 = pOp->p1;.  
17d90 7a 4e 61 6d 65 20 3d 20 70 4f 70 2d 3e 70 34 2e  zName = pOp->p4.
17da0 7a 3b 0a 0a 20 20 2f 2a 20 41 73 73 65 72 74 20  z;..  /* Assert 
17db0 74 68 61 74 20 74 68 65 20 70 31 20 70 61 72 61  that the p1 para
17dc0 6d 65 74 65 72 20 69 73 20 76 61 6c 69 64 2e 20  meter is valid. 
17dd0 41 6c 73 6f 20 74 68 61 74 20 69 66 20 74 68 65  Also that if the
17de0 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 0a 20 20  re is no open.  
17df0 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20  ** transaction, 
17e00 74 68 65 6e 20 74 68 65 72 65 20 63 61 6e 6e 6f  then there canno
17e10 74 20 62 65 20 61 6e 79 20 73 61 76 65 70 6f 69  t be any savepoi
17e20 6e 74 73 2e 20 0a 20 20 2a 2f 0a 20 20 61 73 73  nts. .  */.  ass
17e30 65 72 74 28 20 64 62 2d 3e 70 53 61 76 65 70 6f  ert( db->pSavepo
17e40 69 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61 75  int==0 || db->au
17e50 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20  toCommit==0 );. 
17e60 20 61 73 73 65 72 74 28 20 70 31 3d 3d 53 41 56   assert( p1==SAV
17e70 45 50 4f 49 4e 54 5f 42 45 47 49 4e 7c 7c 70 31  EPOINT_BEGIN||p1
17e80 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45  ==SAVEPOINT_RELE
17e90 41 53 45 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49  ASE||p1==SAVEPOI
17ea0 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 3b 0a 20  NT_ROLLBACK );. 
17eb0 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61   assert( db->pSa
17ec0 76 65 70 6f 69 6e 74 20 7c 7c 20 64 62 2d 3e 69  vepoint || db->i
17ed0 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65  sTransactionSave
17ee0 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a 20 20 61 73  point==0 );.  as
17ef0 73 65 72 74 28 20 63 68 65 63 6b 53 61 76 65 70  sert( checkSavep
17f00 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29 20 29 3b  ointCount(db) );
17f10 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49  .  assert( p->bI
17f20 73 52 65 61 64 65 72 20 29 3b 0a 0a 20 20 69 66  sReader );..  if
17f30 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ( p1==SAVEPOINT_
17f40 42 45 47 49 4e 20 29 7b 0a 20 20 20 20 69 66 28  BEGIN ){.    if(
17f50 20 64 62 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e   db->nVdbeWrite>
17f60 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41 20  0 ){.      /* A 
17f70 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20 63 61  new savepoint ca
17f80 6e 6e 6f 74 20 62 65 20 63 72 65 61 74 65 64 20  nnot be created 
17f90 69 66 20 74 68 65 72 65 20 61 72 65 20 61 63 74  if there are act
17fa0 69 76 65 20 77 72 69 74 65 20 0a 20 20 20 20 20  ive write .     
17fb0 20 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 20 28   ** statements (
17fc0 69 2e 65 2e 20 6f 70 65 6e 20 72 65 61 64 2f 77  i.e. open read/w
17fd0 72 69 74 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c  rite incremental
17fe0 20 62 6c 6f 62 20 68 61 6e 64 6c 65 73 29 2e 0a   blob handles)..
17ff0 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73        */.      s
18000 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28  qlite3VdbeError(
18010 70 2c 20 22 63 61 6e 6e 6f 74 20 6f 70 65 6e 20  p, "cannot open 
18020 73 61 76 65 70 6f 69 6e 74 20 2d 20 53 51 4c 20  savepoint - SQL 
18030 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72  statements in pr
18040 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 20 20  ogress");.      
18050 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
18060 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
18070 20 20 20 6e 4e 61 6d 65 20 3d 20 73 71 6c 69 74     nName = sqlit
18080 65 33 53 74 72 6c 65 6e 33 30 28 7a 4e 61 6d 65  e3Strlen30(zName
18090 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  );..#ifndef SQLI
180a0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
180b0 41 42 4c 45 0a 20 20 20 20 20 20 2f 2a 20 54 68  ABLE.      /* Th
180c0 69 73 20 63 61 6c 6c 20 69 73 20 4f 6b 20 65 76  is call is Ok ev
180d0 65 6e 20 69 66 20 74 68 69 73 20 73 61 76 65 70  en if this savep
180e0 6f 69 6e 74 20 69 73 20 61 63 74 75 61 6c 6c 79  oint is actually
180f0 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20   a transaction. 
18100 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e       ** savepoin
18110 74 20 28 61 6e 64 20 74 68 65 72 65 66 6f 72 65  t (and therefore
18120 20 73 68 6f 75 6c 64 20 6e 6f 74 20 70 72 6f 6d   should not prom
18130 70 74 20 78 53 61 76 65 70 6f 69 6e 74 28 29 29  pt xSavepoint())
18140 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 20 20 20 20   callbacks..    
18150 20 20 2a 2a 20 49 66 20 74 68 69 73 20 69 73 20    ** If this is 
18160 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61  a transaction sa
18170 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70  vepoint being op
18180 65 6e 65 64 2c 20 69 74 20 69 73 20 67 75 61 72  ened, it is guar
18190 61 6e 74 65 65 64 0a 20 20 20 20 20 20 2a 2a 20  anteed.      ** 
181a0 74 68 61 74 20 74 68 65 20 64 62 2d 3e 61 56 54  that the db->aVT
181b0 72 61 6e 73 5b 5d 20 61 72 72 61 79 20 69 73 20  rans[] array is 
181c0 65 6d 70 74 79 2e 20 20 2a 2f 0a 20 20 20 20 20  empty.  */.     
181d0 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61 75 74   assert( db->aut
181e0 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62  oCommit==0 || db
181f0 2d 3e 6e 56 54 72 61 6e 73 3d 3d 30 20 29 3b 0a  ->nVTrans==0 );.
18200 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
18210 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28  e3VtabSavepoint(
18220 64 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f 42 45  db, SAVEPOINT_BE
18230 47 49 4e 2c 0a 20 20 20 20 20 20 20 20 20 20 20  GIN,.           
18240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18250 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d       db->nStatem
18260 65 6e 74 2b 64 62 2d 3e 6e 53 61 76 65 70 6f 69  ent+db->nSavepoi
18270 6e 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  nt);.      if( r
18280 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67  c!=SQLITE_OK ) g
18290 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
182a0 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66 0a 0a  _error;.#endif..
182b0 20 20 20 20 20 20 2f 2a 20 43 72 65 61 74 65 20        /* Create 
182c0 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20  a new savepoint 
182d0 73 74 72 75 63 74 75 72 65 2e 20 2a 2f 0a 20 20  structure. */.  
182e0 20 20 20 20 70 4e 65 77 20 3d 20 73 71 6c 69 74      pNew = sqlit
182f0 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28  e3DbMallocRawNN(
18300 64 62 2c 20 73 69 7a 65 6f 66 28 53 61 76 65 70  db, sizeof(Savep
18310 6f 69 6e 74 29 2b 6e 4e 61 6d 65 2b 31 29 3b 0a  oint)+nName+1);.
18320 20 20 20 20 20 20 69 66 28 20 70 4e 65 77 20 29        if( pNew )
18330 7b 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e  {.        pNew->
18340 7a 4e 61 6d 65 20 3d 20 28 63 68 61 72 20 2a 29  zName = (char *)
18350 26 70 4e 65 77 5b 31 5d 3b 0a 20 20 20 20 20 20  &pNew[1];.      
18360 20 20 6d 65 6d 63 70 79 28 70 4e 65 77 2d 3e 7a    memcpy(pNew->z
18370 4e 61 6d 65 2c 20 7a 4e 61 6d 65 2c 20 6e 4e 61  Name, zName, nNa
18380 6d 65 2b 31 29 3b 0a 20 20 20 20 0a 20 20 20 20  me+1);.    .    
18390 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20      /* If there 
183a0 69 73 20 6e 6f 20 6f 70 65 6e 20 74 72 61 6e 73  is no open trans
183b0 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20 6d 61 72  action, then mar
183c0 6b 20 74 68 69 73 20 61 73 20 61 20 73 70 65 63  k this as a spec
183d0 69 61 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20 22  ial.        ** "
183e0 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65  transaction save
183f0 70 6f 69 6e 74 22 2e 20 2a 2f 0a 20 20 20 20 20  point". */.     
18400 20 20 20 69 66 28 20 64 62 2d 3e 61 75 74 6f 43     if( db->autoC
18410 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 20 20 20  ommit ){.       
18420 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
18430 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20  t = 0;.         
18440 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69   db->isTransacti
18450 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20 31 3b  onSavepoint = 1;
18460 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
18470 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53            db->nS
18480 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20  avepoint++;.    
18490 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 2f      }..        /
184a0 2a 20 4c 69 6e 6b 20 74 68 65 20 6e 65 77 20 73  * Link the new s
184b0 61 76 65 70 6f 69 6e 74 20 69 6e 74 6f 20 74 68  avepoint into th
184c0 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  e database handl
184d0 65 27 73 20 6c 69 73 74 2e 20 2a 2f 0a 20 20 20  e's list. */.   
184e0 20 20 20 20 20 70 4e 65 77 2d 3e 70 4e 65 78 74       pNew->pNext
184f0 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e   = db->pSavepoin
18500 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70  t;.        db->p
18510 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 4e 65 77  Savepoint = pNew
18520 3b 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e  ;.        pNew->
18530 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20 3d 20  nDeferredCons = 
18540 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  db->nDeferredCon
18550 73 3b 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d  s;.        pNew-
18560 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
18570 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65  s = db->nDeferre
18580 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 20 20  dImmCons;.      
18590 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  }.    }.  }else{
185a0 0a 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74 20  .    iSavepoint 
185b0 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a 20 46 69 6e  = 0;..    /* Fin
185c0 64 20 74 68 65 20 6e 61 6d 65 64 20 73 61 76 65  d the named save
185d0 70 6f 69 6e 74 2e 20 49 66 20 74 68 65 72 65 20  point. If there 
185e0 69 73 20 6e 6f 20 73 75 63 68 20 73 61 76 65 70  is no such savep
185f0 6f 69 6e 74 2c 20 74 68 65 6e 20 61 6e 0a 20 20  oint, then an.  
18600 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20 69 73    ** an error is
18610 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68 65   returned to the
18620 20 75 73 65 72 2e 20 20 2a 2f 0a 20 20 20 20 66   user.  */.    f
18630 6f 72 28 0a 20 20 20 20 20 20 70 53 61 76 65 70  or(.      pSavep
18640 6f 69 6e 74 20 3d 20 64 62 2d 3e 70 53 61 76 65  oint = db->pSave
18650 70 6f 69 6e 74 3b 20 0a 20 20 20 20 20 20 70 53  point; .      pS
18660 61 76 65 70 6f 69 6e 74 20 26 26 20 73 71 6c 69  avepoint && sqli
18670 74 65 33 53 74 72 49 43 6d 70 28 70 53 61 76 65  te3StrICmp(pSave
18680 70 6f 69 6e 74 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e  point->zName, zN
18690 61 6d 65 29 3b 0a 20 20 20 20 20 20 70 53 61 76  ame);.      pSav
186a0 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70 6f  epoint = pSavepo
186b0 69 6e 74 2d 3e 70 4e 65 78 74 0a 20 20 20 20 29  int->pNext.    )
186c0 7b 0a 20 20 20 20 20 20 69 53 61 76 65 70 6f 69  {.      iSavepoi
186d0 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  nt++;.    }.    
186e0 69 66 28 20 21 70 53 61 76 65 70 6f 69 6e 74 20  if( !pSavepoint 
186f0 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
18700 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 6e 6f  VdbeError(p, "no
18710 20 73 75 63 68 20 73 61 76 65 70 6f 69 6e 74 3a   such savepoint:
18720 20 25 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20   %s", zName);.  
18730 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
18740 45 52 52 4f 52 3b 0a 20 20 20 20 7d 65 6c 73 65  ERROR;.    }else
18750 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 57 72   if( db->nVdbeWr
18760 69 74 65 3e 30 20 26 26 20 70 31 3d 3d 53 41 56  ite>0 && p1==SAV
18770 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29  EPOINT_RELEASE )
18780 7b 0a 20 20 20 20 20 20 2f 2a 20 49 74 20 69 73  {.      /* It is
18790 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 74 6f   not possible to
187a0 20 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74   release (commit
187b0 29 20 61 20 73 61 76 65 70 6f 69 6e 74 20 69 66  ) a savepoint if
187c0 20 74 68 65 72 65 20 61 72 65 20 0a 20 20 20 20   there are .    
187d0 20 20 2a 2a 20 61 63 74 69 76 65 20 77 72 69 74    ** active writ
187e0 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 20 20  e statements..  
187f0 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c      */.      sql
18800 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
18810 20 22 63 61 6e 6e 6f 74 20 72 65 6c 65 61 73 65   "cannot release
18820 20 73 61 76 65 70 6f 69 6e 74 20 2d 20 22 0a 20   savepoint - ". 
18830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18840 20 20 20 20 20 20 20 20 20 22 53 51 4c 20 73 74           "SQL st
18850 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67  atements in prog
18860 72 65 73 73 22 29 3b 0a 20 20 20 20 20 20 72 63  ress");.      rc
18870 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
18880 20 20 20 20 7d 65 6c 73 65 7b 0a 0a 20 20 20 20      }else{..    
18890 20 20 2f 2a 20 44 65 74 65 72 6d 69 6e 65 20 77    /* Determine w
188a0 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68  hether or not th
188b0 69 73 20 69 73 20 61 20 74 72 61 6e 73 61 63 74  is is a transact
188c0 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 2e 20 49  ion savepoint. I
188d0 66 20 73 6f 2c 0a 20 20 20 20 20 20 2a 2a 20 61  f so,.      ** a
188e0 6e 64 20 74 68 69 73 20 69 73 20 61 20 52 45 4c  nd this is a REL
188f0 45 41 53 45 20 63 6f 6d 6d 61 6e 64 2c 20 74 68  EASE command, th
18900 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  en the current t
18910 72 61 6e 73 61 63 74 69 6f 6e 20 0a 20 20 20 20  ransaction .    
18920 20 20 2a 2a 20 69 73 20 63 6f 6d 6d 69 74 74 65    ** is committe
18930 64 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  d. .      */.   
18940 20 20 20 69 6e 74 20 69 73 54 72 61 6e 73 61 63     int isTransac
18950 74 69 6f 6e 20 3d 20 70 53 61 76 65 70 6f 69 6e  tion = pSavepoin
18960 74 2d 3e 70 4e 65 78 74 3d 3d 30 20 26 26 20 64  t->pNext==0 && d
18970 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  b->isTransaction
18980 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20  Savepoint;.     
18990 20 69 66 28 20 69 73 54 72 61 6e 73 61 63 74 69   if( isTransacti
189a0 6f 6e 20 26 26 20 70 31 3d 3d 53 41 56 45 50 4f  on && p1==SAVEPO
189b0 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20  INT_RELEASE ){. 
189c0 20 20 20 20 20 20 20 69 66 28 20 28 72 63 20 3d         if( (rc =
189d0 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63   sqlite3VdbeChec
189e0 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49  kFk(p, 1))!=SQLI
189f0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
18a00 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74     goto vdbe_ret
18a10 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  urn;.        }. 
18a20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43         db->autoC
18a30 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 20  ommit = 1;.     
18a40 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64     if( sqlite3Vd
18a50 62 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54  beHalt(p)==SQLIT
18a60 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20  E_BUSY ){.      
18a70 20 20 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e 74      p->pc = (int
18a80 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20  )(pOp - aOp);.  
18a90 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f          db->auto
18aa0 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20  Commit = 0;.    
18ab0 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63        p->rc = rc
18ac0 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
18ad0 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76            goto v
18ae0 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20  dbe_return;.    
18af0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62      }.        db
18b00 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
18b10 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 20 20  avepoint = 0;.  
18b20 20 20 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63        rc = p->rc
18b30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
18b40 20 20 20 20 20 20 20 69 6e 74 20 69 73 53 63 68         int isSch
18b50 65 6d 61 43 68 61 6e 67 65 3b 0a 20 20 20 20 20  emaChange;.     
18b60 20 20 20 69 53 61 76 65 70 6f 69 6e 74 20 3d 20     iSavepoint = 
18b70 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2d  db->nSavepoint -
18b80 20 69 53 61 76 65 70 6f 69 6e 74 20 2d 20 31 3b   iSavepoint - 1;
18b90 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 31 3d  .        if( p1=
18ba0 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42  =SAVEPOINT_ROLLB
18bb0 41 43 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ACK ){.         
18bc0 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65 20   isSchemaChange 
18bd0 3d 20 28 64 62 2d 3e 6d 44 62 46 6c 61 67 73 20  = (db->mDbFlags 
18be0 26 20 44 42 46 4c 41 47 5f 53 63 68 65 6d 61 43  & DBFLAG_SchemaC
18bf0 68 61 6e 67 65 29 21 3d 30 3b 0a 20 20 20 20 20  hange)!=0;.     
18c00 20 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69       for(ii=0; i
18c10 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29  i<db->nDb; ii++)
18c20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 63  {.            rc
18c30 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 54   = sqlite3BtreeT
18c40 72 69 70 41 6c 6c 43 75 72 73 6f 72 73 28 64 62  ripAllCursors(db
18c50 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 0a 20  ->aDb[ii].pBt,. 
18c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c80 20 20 20 20 20 20 53 51 4c 49 54 45 5f 41 42 4f        SQLITE_ABO
18c90 52 54 5f 52 4f 4c 4c 42 41 43 4b 2c 0a 20 20 20  RT_ROLLBACK,.   
18ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18cc0 20 20 20 20 69 73 53 63 68 65 6d 61 43 68 61 6e      isSchemaChan
18cd0 67 65 3d 3d 30 29 3b 0a 20 20 20 20 20 20 20 20  ge==0);.        
18ce0 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
18cf0 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f  TE_OK ) goto abo
18d00 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
18d10 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
18d20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
18d30 20 20 20 20 20 20 69 73 53 63 68 65 6d 61 43 68        isSchemaCh
18d40 61 6e 67 65 20 3d 20 30 3b 0a 20 20 20 20 20 20  ange = 0;.      
18d50 20 20 7d 0a 20 20 20 20 20 20 20 20 66 6f 72 28    }.        for(
18d60 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62  ii=0; ii<db->nDb
18d70 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  ; ii++){.       
18d80 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
18d90 74 72 65 65 53 61 76 65 70 6f 69 6e 74 28 64 62  treeSavepoint(db
18da0 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20 70  ->aDb[ii].pBt, p
18db0 31 2c 20 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a  1, iSavepoint);.
18dc0 20 20 20 20 20 20 20 20 20 20 69 66 28 20 72 63            if( rc
18dd0 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
18de0 20 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20             goto 
18df0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
18e00 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  or;.          }.
18e10 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
18e20 20 20 69 66 28 20 69 73 53 63 68 65 6d 61 43 68    if( isSchemaCh
18e30 61 6e 67 65 20 29 7b 0a 20 20 20 20 20 20 20 20  ange ){.        
18e40 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50    sqlite3ExpireP
18e50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74  reparedStatement
18e60 73 28 64 62 29 3b 0a 20 20 20 20 20 20 20 20 20  s(db);.         
18e70 20 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c   sqlite3ResetAll
18e80 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74  SchemasOfConnect
18e90 69 6f 6e 28 64 62 29 3b 0a 20 20 20 20 20 20 20  ion(db);.       
18ea0 20 20 20 64 62 2d 3e 6d 44 62 46 6c 61 67 73 20     db->mDbFlags 
18eb0 7c 3d 20 44 42 46 4c 41 47 5f 53 63 68 65 6d 61  |= DBFLAG_Schema
18ec0 43 68 61 6e 67 65 3b 0a 20 20 20 20 20 20 20 20  Change;.        
18ed0 7d 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20  }.      }.  .   
18ee0 20 20 20 2f 2a 20 52 65 67 61 72 64 6c 65 73 73     /* Regardless
18ef0 20 6f 66 20 77 68 65 74 68 65 72 20 74 68 69 73   of whether this
18f00 20 69 73 20 61 20 52 45 4c 45 41 53 45 20 6f 72   is a RELEASE or
18f10 20 52 4f 4c 4c 42 41 43 4b 2c 20 64 65 73 74 72   ROLLBACK, destr
18f20 6f 79 20 61 6c 6c 20 0a 20 20 20 20 20 20 2a 2a  oy all .      **
18f30 20 73 61 76 65 70 6f 69 6e 74 73 20 6e 65 73 74   savepoints nest
18f40 65 64 20 69 6e 73 69 64 65 20 6f 66 20 74 68 65  ed inside of the
18f50 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67   savepoint being
18f60 20 6f 70 65 72 61 74 65 64 20 6f 6e 2e 20 2a 2f   operated on. */
18f70 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20 64 62  .      while( db
18f80 2d 3e 70 53 61 76 65 70 6f 69 6e 74 21 3d 70 53  ->pSavepoint!=pS
18f90 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20  avepoint ){.    
18fa0 20 20 20 20 70 54 6d 70 20 3d 20 64 62 2d 3e 70      pTmp = db->p
18fb0 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20  Savepoint;.     
18fc0 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e     db->pSavepoin
18fd0 74 20 3d 20 70 54 6d 70 2d 3e 70 4e 65 78 74 3b  t = pTmp->pNext;
18fe0 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
18ff0 44 62 46 72 65 65 28 64 62 2c 20 70 54 6d 70 29  DbFree(db, pTmp)
19000 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53  ;.        db->nS
19010 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20  avepoint--;.    
19020 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66    }..      /* If
19030 20 69 74 20 69 73 20 61 20 52 45 4c 45 41 53 45   it is a RELEASE
19040 2c 20 74 68 65 6e 20 64 65 73 74 72 6f 79 20 74  , then destroy t
19050 68 65 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69  he savepoint bei
19060 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 0a  ng operated on .
19070 20 20 20 20 20 20 2a 2a 20 74 6f 6f 2e 20 49 66        ** too. If
19080 20 69 74 20 69 73 20 61 20 52 4f 4c 4c 42 41 43   it is a ROLLBAC
19090 4b 20 54 4f 2c 20 74 68 65 6e 20 73 65 74 20 74  K TO, then set t
190a0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 65 66  he number of def
190b0 65 72 72 65 64 20 0a 20 20 20 20 20 20 2a 2a 20  erred .      ** 
190c0 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
190d0 74 69 6f 6e 73 20 70 72 65 73 65 6e 74 20 69 6e  tions present in
190e0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 6f   the database to
190f0 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65   the value store
19100 64 0a 20 20 20 20 20 20 2a 2a 20 77 68 65 6e 20  d.      ** when 
19110 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 77 61  the savepoint wa
19120 73 20 63 72 65 61 74 65 64 2e 20 20 2a 2f 0a 20  s created.  */. 
19130 20 20 20 20 20 69 66 28 20 70 31 3d 3d 53 41 56       if( p1==SAV
19140 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29  EPOINT_RELEASE )
19150 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
19160 28 20 70 53 61 76 65 70 6f 69 6e 74 3d 3d 64 62  ( pSavepoint==db
19170 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 29 3b 0a  ->pSavepoint );.
19180 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76          db->pSav
19190 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70 6f  epoint = pSavepo
191a0 69 6e 74 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20  int->pNext;.    
191b0 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
191c0 65 28 64 62 2c 20 70 53 61 76 65 70 6f 69 6e 74  e(db, pSavepoint
191d0 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 21  );.        if( !
191e0 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 29 7b  isTransaction ){
191f0 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e  .          db->n
19200 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20  Savepoint--;.   
19210 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c       }.      }el
19220 73 65 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  se{.        db->
19230 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20 3d 20  nDeferredCons = 
19240 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66  pSavepoint->nDef
19250 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20  erredCons;.     
19260 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64     db->nDeferred
19270 49 6d 6d 43 6f 6e 73 20 3d 20 70 53 61 76 65 70  ImmCons = pSavep
19280 6f 69 6e 74 2d 3e 6e 44 65 66 65 72 72 65 64 49  oint->nDeferredI
19290 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d 0a  mmCons;.      }.
192a0 0a 20 20 20 20 20 20 69 66 28 20 21 69 73 54 72  .      if( !isTr
192b0 61 6e 73 61 63 74 69 6f 6e 20 7c 7c 20 70 31 3d  ansaction || p1=
192c0 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42  =SAVEPOINT_ROLLB
192d0 41 43 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72  ACK ){.        r
192e0 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53  c = sqlite3VtabS
192f0 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 70 31 2c  avepoint(db, p1,
19300 20 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20   iSavepoint);.  
19310 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
19320 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
19330 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
19340 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  r;.      }.    }
19350 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20  .  }.  if( rc ) 
19360 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
19370 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 62 72 65 61  o_error;..  brea
19380 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
19390 20 41 75 74 6f 43 6f 6d 6d 69 74 20 50 31 20 50   AutoCommit P1 P
193a0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65  2 * * *.**.** Se
193b0 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61  t the database a
193c0 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 20  uto-commit flag 
193d0 74 6f 20 50 31 20 28 31 20 6f 72 20 30 29 2e 20  to P1 (1 or 0). 
193e0 49 66 20 50 32 20 69 73 20 74 72 75 65 2c 20 72  If P2 is true, r
193f0 6f 6c 6c 0a 2a 2a 20 62 61 63 6b 20 61 6e 79 20  oll.** back any 
19400 63 75 72 72 65 6e 74 6c 79 20 61 63 74 69 76 65  currently active
19410 20 62 74 72 65 65 20 74 72 61 6e 73 61 63 74 69   btree transacti
19420 6f 6e 73 2e 20 49 66 20 74 68 65 72 65 20 61 72  ons. If there ar
19430 65 20 61 6e 79 20 61 63 74 69 76 65 0a 2a 2a 20  e any active.** 
19440 56 4d 73 20 28 61 70 61 72 74 20 66 72 6f 6d 20  VMs (apart from 
19450 74 68 69 73 20 6f 6e 65 29 2c 20 74 68 65 6e 20  this one), then 
19460 61 20 52 4f 4c 4c 42 41 43 4b 20 66 61 69 6c 73  a ROLLBACK fails
19470 2e 20 20 41 20 43 4f 4d 4d 49 54 20 66 61 69 6c  .  A COMMIT fail
19480 73 20 69 66 0a 2a 2a 20 74 68 65 72 65 20 61 72  s if.** there ar
19490 65 20 61 63 74 69 76 65 20 77 72 69 74 69 6e 67  e active writing
194a0 20 56 4d 73 20 6f 72 20 61 63 74 69 76 65 20 56   VMs or active V
194b0 4d 73 20 74 68 61 74 20 75 73 65 20 73 68 61 72  Ms that use shar
194c0 65 64 20 63 61 63 68 65 2e 0a 2a 2a 0a 2a 2a 20  ed cache..**.** 
194d0 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
194e0 20 63 61 75 73 65 73 20 74 68 65 20 56 4d 20 74   causes the VM t
194f0 6f 20 68 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20  o halt..*/.case 
19500 4f 50 5f 41 75 74 6f 43 6f 6d 6d 69 74 3a 20 7b  OP_AutoCommit: {
19510 0a 20 20 69 6e 74 20 64 65 73 69 72 65 64 41 75  .  int desiredAu
19520 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 69 6e 74 20  toCommit;.  int 
19530 69 52 6f 6c 6c 62 61 63 6b 3b 0a 0a 20 20 64 65  iRollback;..  de
19540 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20  siredAutoCommit 
19550 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 52 6f  = pOp->p1;.  iRo
19560 6c 6c 62 61 63 6b 20 3d 20 70 4f 70 2d 3e 70 32  llback = pOp->p2
19570 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65 73 69  ;.  assert( desi
19580 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31  redAutoCommit==1
19590 20 7c 7c 20 64 65 73 69 72 65 64 41 75 74 6f 43   || desiredAutoC
195a0 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20 61 73  ommit==0 );.  as
195b0 73 65 72 74 28 20 64 65 73 69 72 65 64 41 75 74  sert( desiredAut
195c0 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 69 52  oCommit==1 || iR
195d0 6f 6c 6c 62 61 63 6b 3d 3d 30 20 29 3b 0a 20 20  ollback==0 );.  
195e0 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 56 64 62  assert( db->nVdb
195f0 65 41 63 74 69 76 65 3e 30 20 29 3b 20 20 2f 2a  eActive>0 );  /*
19600 20 41 74 20 6c 65 61 73 74 20 74 68 69 73 20 6f   At least this o
19610 6e 65 20 56 4d 20 69 73 20 61 63 74 69 76 65 20  ne VM is active 
19620 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  */.  assert( p->
19630 62 49 73 52 65 61 64 65 72 20 29 3b 0a 0a 20 20  bIsReader );..  
19640 69 66 28 20 64 65 73 69 72 65 64 41 75 74 6f 43  if( desiredAutoC
19650 6f 6d 6d 69 74 21 3d 64 62 2d 3e 61 75 74 6f 43  ommit!=db->autoC
19660 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 69 66 28  ommit ){.    if(
19670 20 69 52 6f 6c 6c 62 61 63 6b 20 29 7b 0a 20 20   iRollback ){.  
19680 20 20 20 20 61 73 73 65 72 74 28 20 64 65 73 69      assert( desi
19690 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31  redAutoCommit==1
196a0 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   );.      sqlite
196b0 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 64 62 2c  3RollbackAll(db,
196c0 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f   SQLITE_ABORT_RO
196d0 4c 4c 42 41 43 4b 29 3b 0a 20 20 20 20 20 20 64  LLBACK);.      d
196e0 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
196f0 31 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28  1;.    }else if(
19700 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
19710 69 74 20 26 26 20 64 62 2d 3e 6e 56 64 62 65 57  it && db->nVdbeW
19720 72 69 74 65 3e 30 20 29 7b 0a 20 20 20 20 20 20  rite>0 ){.      
19730 2f 2a 20 49 66 20 74 68 69 73 20 69 6e 73 74 72  /* If this instr
19740 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74  uction implement
19750 73 20 61 20 43 4f 4d 4d 49 54 20 61 6e 64 20 6f  s a COMMIT and o
19760 74 68 65 72 20 56 4d 73 20 61 72 65 20 77 72 69  ther VMs are wri
19770 74 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20 72 65  ting.      ** re
19780 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 6e  turn an error in
19790 64 69 63 61 74 69 6e 67 20 74 68 61 74 20 74 68  dicating that th
197a0 65 20 6f 74 68 65 72 20 56 4d 73 20 6d 75 73 74  e other VMs must
197b0 20 63 6f 6d 70 6c 65 74 65 20 66 69 72 73 74 2e   complete first.
197c0 20 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20   .      */.     
197d0 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f   sqlite3VdbeErro
197e0 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20 63 6f 6d  r(p, "cannot com
197f0 6d 69 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  mit transaction 
19800 2d 20 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  - ".            
19810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53                "S
19820 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  QL statements in
19830 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20   progress");.   
19840 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42     rc = SQLITE_B
19850 55 53 59 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20  USY;.      goto 
19860 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
19870 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66  or;.    }else if
19880 28 20 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56  ( (rc = sqlite3V
19890 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 31 29  dbeCheckFk(p, 1)
198a0 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  )!=SQLITE_OK ){.
198b0 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f        goto vdbe_
198c0 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 65 6c 73  return;.    }els
198d0 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74  e{.      db->aut
198e0 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29 64 65  oCommit = (u8)de
198f0 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b  siredAutoCommit;
19900 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 73  .    }.    if( s
19910 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70  qlite3VdbeHalt(p
19920 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29  )==SQLITE_BUSY )
19930 7b 0a 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20  {.      p->pc = 
19940 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29  (int)(pOp - aOp)
19950 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f  ;.      db->auto
19960 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29 28 31 2d  Commit = (u8)(1-
19970 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
19980 74 29 3b 0a 20 20 20 20 20 20 70 2d 3e 72 63 20  t);.      p->rc 
19990 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55  = rc = SQLITE_BU
199a0 53 59 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76  SY;.      goto v
199b0 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20  dbe_return;.    
199c0 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20 64 62  }.    assert( db
199d0 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20  ->nStatement==0 
199e0 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 43 6c  );.    sqlite3Cl
199f0 6f 73 65 53 61 76 65 70 6f 69 6e 74 73 28 64 62  oseSavepoints(db
19a00 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 72 63  );.    if( p->rc
19a10 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
19a20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
19a30 5f 44 4f 4e 45 3b 0a 20 20 20 20 7d 65 6c 73 65  _DONE;.    }else
19a40 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
19a50 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d  ITE_ERROR;.    }
19a60 0a 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72  .    goto vdbe_r
19a70 65 74 75 72 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a  eturn;.  }else{.
19a80 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45      sqlite3VdbeE
19a90 72 72 6f 72 28 70 2c 0a 20 20 20 20 20 20 20 20  rror(p,.        
19aa0 28 21 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  (!desiredAutoCom
19ab0 6d 69 74 29 3f 22 63 61 6e 6e 6f 74 20 73 74 61  mit)?"cannot sta
19ac0 72 74 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  rt a transaction
19ad0 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61   within a transa
19ae0 63 74 69 6f 6e 22 3a 28 0a 20 20 20 20 20 20 20  ction":(.       
19af0 20 28 69 52 6f 6c 6c 62 61 63 6b 29 3f 22 63 61   (iRollback)?"ca
19b00 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 2d 20  nnot rollback - 
19b10 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  no transaction i
19b20 73 20 61 63 74 69 76 65 22 3a 0a 20 20 20 20 20  s active":.     
19b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
19b40 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 2d 20 6e  annot commit - n
19b50 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  o transaction is
19b60 20 61 63 74 69 76 65 22 29 29 3b 0a 20 20 20 20   active"));.    
19b70 20 20 20 20 20 0a 20 20 20 20 72 63 20 3d 20 53       .    rc = S
19b80 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20  QLITE_ERROR;.   
19b90 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
19ba0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20  to_error;.  }.  
19bb0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
19bc0 6f 64 65 3a 20 54 72 61 6e 73 61 63 74 69 6f 6e  ode: Transaction
19bd0 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
19be0 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20 61 20 74 72  **.** Begin a tr
19bf0 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 64 61 74  ansaction on dat
19c00 61 62 61 73 65 20 50 31 20 69 66 20 61 20 74 72  abase P1 if a tr
19c10 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74  ansaction is not
19c20 20 61 6c 72 65 61 64 79 0a 2a 2a 20 61 63 74 69   already.** acti
19c30 76 65 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20  ve..** If P2 is 
19c40 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61  non-zero, then a
19c50 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69   write-transacti
19c60 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2c 20 6f  on is started, o
19c70 72 20 69 66 20 61 20 0a 2a 2a 20 72 65 61 64 2d  r if a .** read-
19c80 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61  transaction is a
19c90 6c 72 65 61 64 79 20 61 63 74 69 76 65 2c 20 69  lready active, i
19ca0 74 20 69 73 20 75 70 67 72 61 64 65 64 20 74 6f  t is upgraded to
19cb0 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63   a write-transac
19cc0 74 69 6f 6e 2e 0a 2a 2a 20 49 66 20 50 32 20 69  tion..** If P2 i
19cd0 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20 72  s zero, then a r
19ce0 65 61 64 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20  ead-transaction 
19cf0 69 73 20 73 74 61 72 74 65 64 2e 0a 2a 2a 0a 2a  is started..**.*
19d00 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e 64 65  * P1 is the inde
19d10 78 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  x of the databas
19d20 65 20 66 69 6c 65 20 6f 6e 20 77 68 69 63 68 20  e file on which 
19d30 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  the transaction 
19d40 69 73 0a 2a 2a 20 73 74 61 72 74 65 64 2e 20 20  is.** started.  
19d50 49 6e 64 65 78 20 30 20 69 73 20 74 68 65 20 6d  Index 0 is the m
19d60 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
19d70 65 20 61 6e 64 20 69 6e 64 65 78 20 31 20 69 73  e and index 1 is
19d80 20 74 68 65 0a 2a 2a 20 66 69 6c 65 20 75 73 65   the.** file use
19d90 64 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20  d for temporary 
19da0 74 61 62 6c 65 73 2e 20 20 49 6e 64 69 63 65 73  tables.  Indices
19db0 20 6f 66 20 32 20 6f 72 20 6d 6f 72 65 20 61 72   of 2 or more ar
19dc0 65 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20 61 74  e used for.** at
19dd0 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
19de0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 20 77 72 69  ..**.** If a wri
19df0 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  te-transaction i
19e00 73 20 73 74 61 72 74 65 64 20 61 6e 64 20 74 68  s started and th
19e10 65 20 56 64 62 65 2e 75 73 65 73 53 74 6d 74 4a  e Vdbe.usesStmtJ
19e20 6f 75 72 6e 61 6c 20 66 6c 61 67 20 69 73 0a 2a  ournal flag is.*
19e30 2a 20 74 72 75 65 20 28 74 68 69 73 20 66 6c 61  * true (this fla
19e40 67 20 69 73 20 73 65 74 20 69 66 20 74 68 65 20  g is set if the 
19e50 56 64 62 65 20 6d 61 79 20 6d 6f 64 69 66 79 20  Vdbe may modify 
19e60 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 72 6f  more than one ro
19e70 77 20 61 6e 64 20 6d 61 79 0a 2a 2a 20 74 68 72  w and may.** thr
19e80 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78 63 65  ow an ABORT exce
19e90 70 74 69 6f 6e 29 2c 20 61 20 73 74 61 74 65 6d  ption), a statem
19ea0 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
19eb0 6d 61 79 20 61 6c 73 6f 20 62 65 20 6f 70 65 6e  may also be open
19ec0 65 64 2e 0a 2a 2a 20 4d 6f 72 65 20 73 70 65 63  ed..** More spec
19ed0 69 66 69 63 61 6c 6c 79 2c 20 61 20 73 74 61 74  ifically, a stat
19ee0 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
19ef0 6e 20 69 73 20 6f 70 65 6e 65 64 20 69 66 66 20  n is opened iff 
19f00 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  the database.** 
19f10 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 75  connection is cu
19f20 72 72 65 6e 74 6c 79 20 6e 6f 74 20 69 6e 20 61  rrently not in a
19f30 75 74 6f 63 6f 6d 6d 69 74 20 6d 6f 64 65 2c 20  utocommit mode, 
19f40 6f 72 20 69 66 20 74 68 65 72 65 20 61 72 65 20  or if there are 
19f50 6f 74 68 65 72 0a 2a 2a 20 61 63 74 69 76 65 20  other.** active 
19f60 73 74 61 74 65 6d 65 6e 74 73 2e 20 41 20 73 74  statements. A st
19f70 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
19f80 69 6f 6e 20 61 6c 6c 6f 77 73 20 74 68 65 20 63  ion allows the c
19f90 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20 74  hanges made by t
19fa0 68 69 73 0a 2a 2a 20 56 44 42 45 20 74 6f 20 62  his.** VDBE to b
19fb0 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 61 66  e rolled back af
19fc0 74 65 72 20 61 6e 20 65 72 72 6f 72 20 77 69 74  ter an error wit
19fd0 68 6f 75 74 20 68 61 76 69 6e 67 20 74 6f 20 72  hout having to r
19fe0 6f 6c 6c 20 62 61 63 6b 20 74 68 65 0a 2a 2a 20  oll back the.** 
19ff0 65 6e 74 69 72 65 20 74 72 61 6e 73 61 63 74 69  entire transacti
1a000 6f 6e 2e 20 49 66 20 6e 6f 20 65 72 72 6f 72 20  on. If no error 
1a010 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2c 20  is encountered, 
1a020 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72  the statement tr
1a030 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 77 69 6c  ansaction.** wil
1a040 6c 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  l automatically 
1a050 63 6f 6d 6d 69 74 20 77 68 65 6e 20 74 68 65 20  commit when the 
1a060 56 44 42 45 20 68 61 6c 74 73 2e 0a 2a 2a 0a 2a  VDBE halts..**.*
1a070 2a 20 49 66 20 50 35 21 3d 30 20 74 68 65 6e 20  * If P5!=0 then 
1a080 74 68 69 73 20 6f 70 63 6f 64 65 20 61 6c 73 6f  this opcode also
1a090 20 63 68 65 63 6b 73 20 74 68 65 20 73 63 68 65   checks the sche
1a0a0 6d 61 20 63 6f 6f 6b 69 65 20 61 67 61 69 6e 73  ma cookie agains
1a0b0 74 20 50 33 0a 2a 2a 20 61 6e 64 20 74 68 65 20  t P3.** and the 
1a0c0 73 63 68 65 6d 61 20 67 65 6e 65 72 61 74 69 6f  schema generatio
1a0d0 6e 20 63 6f 75 6e 74 65 72 20 61 67 61 69 6e 73  n counter agains
1a0e0 74 20 50 34 2e 0a 2a 2a 20 54 68 65 20 63 6f 6f  t P4..** The coo
1a0f0 6b 69 65 20 63 68 61 6e 67 65 73 20 69 74 73 20  kie changes its 
1a100 76 61 6c 75 65 20 77 68 65 6e 65 76 65 72 20 74  value whenever t
1a110 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
1a120 6d 61 20 63 68 61 6e 67 65 73 2e 0a 2a 2a 20 54  ma changes..** T
1a130 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 69 73  his operation is
1a140 20 75 73 65 64 20 74 6f 20 64 65 74 65 63 74 20   used to detect 
1a150 77 68 65 6e 20 74 68 61 74 20 74 68 65 20 63 6f  when that the co
1a160 6f 6b 69 65 20 68 61 73 20 63 68 61 6e 67 65 64  okie has changed
1a170 0a 2a 2a 20 61 6e 64 20 74 68 61 74 20 74 68 65  .** and that the
1a180 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73   current process
1a190 20 6e 65 65 64 73 20 74 6f 20 72 65 72 65 61 64   needs to reread
1a1a0 20 74 68 65 20 73 63 68 65 6d 61 2e 20 20 49 66   the schema.  If
1a1b0 20 74 68 65 20 73 63 68 65 6d 61 0a 2a 2a 20 63   the schema.** c
1a1c0 6f 6f 6b 69 65 20 69 6e 20 50 33 20 64 69 66 66  ookie in P3 diff
1a1d0 65 72 73 20 66 72 6f 6d 20 74 68 65 20 73 63 68  ers from the sch
1a1e0 65 6d 61 20 63 6f 6f 6b 69 65 20 69 6e 20 74 68  ema cookie in th
1a1f0 65 20 64 61 74 61 62 61 73 65 20 68 65 61 64 65  e database heade
1a200 72 20 6f 72 0a 2a 2a 20 69 66 20 74 68 65 20 73  r or.** if the s
1a210 63 68 65 6d 61 20 67 65 6e 65 72 61 74 69 6f 6e  chema generation
1a220 20 63 6f 75 6e 74 65 72 20 69 6e 20 50 34 20 64   counter in P4 d
1a230 69 66 66 65 72 73 20 66 72 6f 6d 20 74 68 65 20  iffers from the 
1a240 63 75 72 72 65 6e 74 0a 2a 2a 20 67 65 6e 65 72  current.** gener
1a250 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2c 20 74  ation counter, t
1a260 68 65 6e 20 61 6e 20 53 51 4c 49 54 45 5f 53 43  hen an SQLITE_SC
1a270 48 45 4d 41 20 65 72 72 6f 72 20 69 73 20 72 61  HEMA error is ra
1a280 69 73 65 64 20 61 6e 64 20 65 78 65 63 75 74 69  ised and executi
1a290 6f 6e 0a 2a 2a 20 68 61 6c 74 73 2e 20 20 54 68  on.** halts.  Th
1a2a0 65 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  e sqlite3_step()
1a2b0 20 77 72 61 70 70 65 72 20 66 75 6e 63 74 69 6f   wrapper functio
1a2c0 6e 20 6d 69 67 68 74 20 74 68 65 6e 20 72 65 70  n might then rep
1a2d0 72 65 70 61 72 65 20 74 68 65 0a 2a 2a 20 73 74  repare the.** st
1a2e0 61 74 65 6d 65 6e 74 20 61 6e 64 20 72 65 72 75  atement and reru
1a2f0 6e 20 69 74 20 66 72 6f 6d 20 74 68 65 20 62 65  n it from the be
1a300 67 69 6e 6e 69 6e 67 2e 0a 2a 2f 0a 63 61 73 65  ginning..*/.case
1a310 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 3a   OP_Transaction:
1a320 20 7b 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b   {.  Btree *pBt;
1a330 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20  .  int iMeta;.  
1a340 69 6e 74 20 69 47 65 6e 3b 0a 0a 20 20 61 73 73  int iGen;..  ass
1a350 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65  ert( p->bIsReade
1a360 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
1a370 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 7c 7c  ->readOnly==0 ||
1a380 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 3b 0a 20   pOp->p2==0 );. 
1a390 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1a3a0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
1a3b0 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
1a3c0 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70  rt( DbMaskTest(p
1a3d0 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70  ->btreeMask, pOp
1a3e0 2d 3e 70 31 29 20 29 3b 0a 20 20 69 66 28 20 70  ->p1) );.  if( p
1a3f0 4f 70 2d 3e 70 32 20 26 26 20 28 64 62 2d 3e 66  Op->p2 && (db->f
1a400 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 51 75  lags & SQLITE_Qu
1a410 65 72 79 4f 6e 6c 79 29 21 3d 30 20 29 7b 0a 20  eryOnly)!=0 ){. 
1a420 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 52     rc = SQLITE_R
1a430 45 41 44 4f 4e 4c 59 3b 0a 20 20 20 20 67 6f 74  EADONLY;.    got
1a440 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1a450 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 70 42 74 20  rror;.  }.  pBt 
1a460 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  = db->aDb[pOp->p
1a470 31 5d 2e 70 42 74 3b 0a 0a 20 20 69 66 28 20 70  1].pBt;..  if( p
1a480 42 74 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  Bt ){.    rc = s
1a490 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e  qlite3BtreeBegin
1a4a0 54 72 61 6e 73 28 70 42 74 2c 20 70 4f 70 2d 3e  Trans(pBt, pOp->
1a4b0 70 32 29 3b 0a 20 20 20 20 74 65 73 74 63 61 73  p2);.    testcas
1a4c0 65 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55  e( rc==SQLITE_BU
1a4d0 53 59 5f 53 4e 41 50 53 48 4f 54 20 29 3b 0a 20  SY_SNAPSHOT );. 
1a4e0 20 20 20 74 65 73 74 63 61 73 65 28 20 72 63 3d     testcase( rc=
1a4f0 3d 53 51 4c 49 54 45 5f 42 55 53 59 5f 52 45 43  =SQLITE_BUSY_REC
1a500 4f 56 45 52 59 20 29 3b 0a 20 20 20 20 69 66 28  OVERY );.    if(
1a510 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
1a520 7b 0a 20 20 20 20 20 20 69 66 28 20 28 72 63 26  {.      if( (rc&
1a530 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f 42 55  0xff)==SQLITE_BU
1a540 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20 70 2d  SY ){.        p-
1a550 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f 70 20  >pc = (int)(pOp 
1a560 2d 20 61 4f 70 29 3b 0a 20 20 20 20 20 20 20 20  - aOp);.        
1a570 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 20 20  p->rc = rc;.    
1a580 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65      goto vdbe_re
1a590 74 75 72 6e 3b 0a 20 20 20 20 20 20 7d 0a 20 20  turn;.      }.  
1a5a0 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
1a5b0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
1a5c0 20 7d 0a 0a 20 20 20 20 69 66 28 20 70 4f 70 2d   }..    if( pOp-
1a5d0 3e 70 32 20 26 26 20 70 2d 3e 75 73 65 73 53 74  >p2 && p->usesSt
1a5e0 6d 74 4a 6f 75 72 6e 61 6c 20 0a 20 20 20 20 20  mtJournal .     
1a5f0 26 26 20 28 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  && (db->autoComm
1a600 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56 64  it==0 || db->nVd
1a610 62 65 52 65 61 64 3e 31 29 20 0a 20 20 20 20 29  beRead>1) .    )
1a620 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
1a630 73 71 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e  sqlite3BtreeIsIn
1a640 54 72 61 6e 73 28 70 42 74 29 20 29 3b 0a 20 20  Trans(pBt) );.  
1a650 20 20 20 20 69 66 28 20 70 2d 3e 69 53 74 61 74      if( p->iStat
1a660 65 6d 65 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20  ement==0 ){.    
1a670 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
1a680 6e 53 74 61 74 65 6d 65 6e 74 3e 3d 30 20 26 26  nStatement>=0 &&
1a690 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 3e   db->nSavepoint>
1a6a0 3d 30 20 29 3b 0a 20 20 20 20 20 20 20 20 64 62  =0 );.        db
1a6b0 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 2b 3b 20  ->nStatement++; 
1a6c0 0a 20 20 20 20 20 20 20 20 70 2d 3e 69 53 74 61  .        p->iSta
1a6d0 74 65 6d 65 6e 74 20 3d 20 64 62 2d 3e 6e 53 61  tement = db->nSa
1a6e0 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 6e 53  vepoint + db->nS
1a6f0 74 61 74 65 6d 65 6e 74 3b 0a 20 20 20 20 20 20  tatement;.      
1a700 7d 0a 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  }..      rc = sq
1a710 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69  lite3VtabSavepoi
1a720 6e 74 28 64 62 2c 20 53 41 56 45 50 4f 49 4e 54  nt(db, SAVEPOINT
1a730 5f 42 45 47 49 4e 2c 20 70 2d 3e 69 53 74 61 74  _BEGIN, p->iStat
1a740 65 6d 65 6e 74 2d 31 29 3b 0a 20 20 20 20 20 20  ement-1);.      
1a750 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
1a760 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  K ){.        rc 
1a770 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 42 65  = sqlite3BtreeBe
1a780 67 69 6e 53 74 6d 74 28 70 42 74 2c 20 70 2d 3e  ginStmt(pBt, p->
1a790 69 53 74 61 74 65 6d 65 6e 74 29 3b 0a 20 20 20  iStatement);.   
1a7a0 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 53     }..      /* S
1a7b0 74 6f 72 65 20 74 68 65 20 63 75 72 72 65 6e 74  tore the current
1a7c0 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 64 61   value of the da
1a7d0 74 61 62 61 73 65 20 68 61 6e 64 6c 65 73 20 64  tabase handles d
1a7e0 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69  eferred constrai
1a7f0 6e 74 0a 20 20 20 20 20 20 2a 2a 20 63 6f 75 6e  nt.      ** coun
1a800 74 65 72 2e 20 49 66 20 74 68 65 20 73 74 61 74  ter. If the stat
1a810 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
1a820 6e 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 6f  n needs to be ro
1a830 6c 6c 65 64 20 62 61 63 6b 2c 0a 20 20 20 20 20  lled back,.     
1a840 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66   ** the value of
1a850 20 74 68 69 73 20 63 6f 75 6e 74 65 72 20 6e 65   this counter ne
1a860 65 64 73 20 74 6f 20 62 65 20 72 65 73 74 6f 72  eds to be restor
1a870 65 64 20 74 6f 6f 2e 20 20 2a 2f 0a 20 20 20 20  ed too.  */.    
1a880 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66 43 6f 6e    p->nStmtDefCon
1a890 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65  s = db->nDeferre
1a8a0 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 70 2d 3e  dCons;.      p->
1a8b0 6e 53 74 6d 74 44 65 66 49 6d 6d 43 6f 6e 73 20  nStmtDefImmCons 
1a8c0 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49  = db->nDeferredI
1a8d0 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 7d 0a 0a 20  mmCons;.    }.. 
1a8e0 20 20 20 2f 2a 20 47 61 74 68 65 72 20 74 68 65     /* Gather the
1a8f0 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 20   schema version 
1a900 6e 75 6d 62 65 72 20 66 6f 72 20 63 68 65 63 6b  number for check
1a910 69 6e 67 3a 0a 20 20 20 20 2a 2a 20 49 4d 50 4c  ing:.    ** IMPL
1a920 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52  EMENTATION-OF: R
1a930 2d 30 33 31 38 39 2d 35 31 31 33 35 20 41 73 20  -03189-51135 As 
1a940 65 61 63 68 20 53 51 4c 20 73 74 61 74 65 6d 65  each SQL stateme
1a950 6e 74 20 72 75 6e 73 2c 20 74 68 65 20 73 63 68  nt runs, the sch
1a960 65 6d 61 0a 20 20 20 20 2a 2a 20 76 65 72 73 69  ema.    ** versi
1a970 6f 6e 20 69 73 20 63 68 65 63 6b 65 64 20 74 6f  on is checked to
1a980 20 65 6e 73 75 72 65 20 74 68 61 74 20 74 68 65   ensure that the
1a990 20 73 63 68 65 6d 61 20 68 61 73 20 6e 6f 74 20   schema has not 
1a9a0 63 68 61 6e 67 65 64 20 73 69 6e 63 65 20 74 68  changed since th
1a9b0 65 0a 20 20 20 20 2a 2a 20 53 51 4c 20 73 74 61  e.    ** SQL sta
1a9c0 74 65 6d 65 6e 74 20 77 61 73 20 70 72 65 70 61  tement was prepa
1a9d0 72 65 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  red..    */.    
1a9e0 73 71 6c 69 74 65 33 42 74 72 65 65 47 65 74 4d  sqlite3BtreeGetM
1a9f0 65 74 61 28 70 42 74 2c 20 42 54 52 45 45 5f 53  eta(pBt, BTREE_S
1aa00 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 2c 20 28  CHEMA_VERSION, (
1aa10 75 33 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20  u32 *)&iMeta);. 
1aa20 20 20 20 69 47 65 6e 20 3d 20 64 62 2d 3e 61 44     iGen = db->aD
1aa30 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65  b[pOp->p1].pSche
1aa40 6d 61 2d 3e 69 47 65 6e 65 72 61 74 69 6f 6e 3b  ma->iGeneration;
1aa50 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 47  .  }else{.    iG
1aa60 65 6e 20 3d 20 69 4d 65 74 61 20 3d 20 30 3b 0a  en = iMeta = 0;.
1aa70 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 4f    }.  assert( pO
1aa80 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d  p->p5==0 || pOp-
1aa90 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
1aaa0 32 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  2 );.  if( pOp->
1aab0 70 35 20 26 26 20 28 69 4d 65 74 61 21 3d 70 4f  p5 && (iMeta!=pO
1aac0 70 2d 3e 70 33 20 7c 7c 20 69 47 65 6e 21 3d 70  p->p3 || iGen!=p
1aad0 4f 70 2d 3e 70 34 2e 69 29 20 29 7b 0a 20 20 20  Op->p4.i) ){.   
1aae0 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
1aaf0 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a  b, p->zErrMsg);.
1ab00 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d      p->zErrMsg =
1ab10 20 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70   sqlite3DbStrDup
1ab20 28 64 62 2c 20 22 64 61 74 61 62 61 73 65 20 73  (db, "database s
1ab30 63 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65  chema has change
1ab40 64 22 29 3b 0a 20 20 20 20 2f 2a 20 49 66 20 74  d");.    /* If t
1ab50 68 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69 65  he schema-cookie
1ab60 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61   from the databa
1ab70 73 65 20 66 69 6c 65 20 6d 61 74 63 68 65 73 20  se file matches 
1ab80 74 68 65 20 63 6f 6f 6b 69 65 20 0a 20 20 20 20  the cookie .    
1ab90 2a 2a 20 73 74 6f 72 65 64 20 77 69 74 68 20 74  ** stored with t
1aba0 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 72 65 70  he in-memory rep
1abb0 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
1abc0 68 65 20 73 63 68 65 6d 61 2c 20 64 6f 0a 20 20  he schema, do.  
1abd0 20 20 2a 2a 20 6e 6f 74 20 72 65 6c 6f 61 64 20    ** not reload 
1abe0 74 68 65 20 73 63 68 65 6d 61 20 66 72 6f 6d 20  the schema from 
1abf0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
1ac00 65 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a  e..    **.    **
1ac10 20 49 66 20 76 69 72 74 75 61 6c 2d 74 61 62 6c   If virtual-tabl
1ac20 65 73 20 61 72 65 20 69 6e 20 75 73 65 2c 20 74  es are in use, t
1ac30 68 69 73 20 69 73 20 6e 6f 74 20 6a 75 73 74 20  his is not just 
1ac40 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e  an optimization.
1ac50 0a 20 20 20 20 2a 2a 20 4f 66 74 65 6e 2c 20 76  .    ** Often, v
1ac60 2d 74 61 62 6c 65 73 20 73 74 6f 72 65 20 74 68  -tables store th
1ac70 65 69 72 20 64 61 74 61 20 69 6e 20 6f 74 68 65  eir data in othe
1ac80 72 20 53 51 4c 69 74 65 20 74 61 62 6c 65 73 2c  r SQLite tables,
1ac90 20 77 68 69 63 68 0a 20 20 20 20 2a 2a 20 61 72   which.    ** ar
1aca0 65 20 71 75 65 72 69 65 64 20 66 72 6f 6d 20 77  e queried from w
1acb0 69 74 68 69 6e 20 78 4e 65 78 74 28 29 20 61 6e  ithin xNext() an
1acc0 64 20 6f 74 68 65 72 20 76 2d 74 61 62 6c 65 20  d other v-table 
1acd0 6d 65 74 68 6f 64 73 20 75 73 69 6e 67 0a 20 20  methods using.  
1ace0 20 20 2a 2a 20 70 72 65 70 61 72 65 64 20 71 75    ** prepared qu
1acf0 65 72 69 65 73 2e 20 49 66 20 73 75 63 68 20 61  eries. If such a
1ad00 20 71 75 65 72 79 20 69 73 20 6f 75 74 2d 6f 66   query is out-of
1ad10 2d 64 61 74 65 2c 20 77 65 20 64 6f 20 6e 6f 74  -date, we do not
1ad20 20 77 61 6e 74 20 74 6f 0a 20 20 20 20 2a 2a 20   want to.    ** 
1ad30 64 69 73 63 61 72 64 20 74 68 65 20 64 61 74 61  discard the data
1ad40 62 61 73 65 20 73 63 68 65 6d 61 2c 20 61 73 20  base schema, as 
1ad50 74 68 65 20 75 73 65 72 20 63 6f 64 65 20 69 6d  the user code im
1ad60 70 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65 0a 20  plementing the. 
1ad70 20 20 20 2a 2a 20 76 2d 74 61 62 6c 65 20 77 6f     ** v-table wo
1ad80 75 6c 64 20 68 61 76 65 20 74 6f 20 62 65 20 72  uld have to be r
1ad90 65 61 64 79 20 66 6f 72 20 74 68 65 20 73 71 6c  eady for the sql
1ada0 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74  ite3_vtab struct
1adb0 75 72 65 20 69 74 73 65 6c 66 0a 20 20 20 20 2a  ure itself.    *
1adc0 2a 20 74 6f 20 62 65 20 69 6e 76 61 6c 69 64 61  * to be invalida
1add0 74 65 64 20 77 68 65 6e 65 76 65 72 20 73 71 6c  ted whenever sql
1ade0 69 74 65 33 5f 73 74 65 70 28 29 20 69 73 20 63  ite3_step() is c
1adf0 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69  alled from withi
1ae00 6e 20 0a 20 20 20 20 2a 2a 20 61 20 76 2d 74 61  n .    ** a v-ta
1ae10 62 6c 65 20 6d 65 74 68 6f 64 2e 0a 20 20 20 20  ble method..    
1ae20 2a 2f 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 61  */.    if( db->a
1ae30 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68  Db[pOp->p1].pSch
1ae40 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b  ema->schema_cook
1ae50 69 65 21 3d 69 4d 65 74 61 20 29 7b 0a 20 20 20  ie!=iMeta ){.   
1ae60 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f     sqlite3ResetO
1ae70 6e 65 53 63 68 65 6d 61 28 64 62 2c 20 70 4f 70  neSchema(db, pOp
1ae80 2d 3e 70 31 29 3b 0a 20 20 20 20 7d 0a 20 20 20  ->p1);.    }.   
1ae90 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31 3b   p->expired = 1;
1aea0 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
1aeb0 5f 53 43 48 45 4d 41 3b 0a 20 20 7d 0a 20 20 69  _SCHEMA;.  }.  i
1aec0 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
1aed0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1aee0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1aef0 4f 70 63 6f 64 65 3a 20 52 65 61 64 43 6f 6f 6b  Opcode: ReadCook
1af00 69 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ie P1 P2 P3 * *.
1af10 2a 2a 0a 2a 2a 20 52 65 61 64 20 63 6f 6f 6b 69  **.** Read cooki
1af20 65 20 6e 75 6d 62 65 72 20 50 33 20 66 72 6f 6d  e number P3 from
1af30 20 64 61 74 61 62 61 73 65 20 50 31 20 61 6e 64   database P1 and
1af40 20 77 72 69 74 65 20 69 74 20 69 6e 74 6f 20 72   write it into r
1af50 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 50  egister P2..** P
1af60 33 3d 3d 31 20 69 73 20 74 68 65 20 73 63 68 65  3==1 is the sche
1af70 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 50 33 3d  ma version.  P3=
1af80 3d 32 20 69 73 20 74 68 65 20 64 61 74 61 62 61  =2 is the databa
1af90 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50 33  se format..** P3
1afa0 3d 3d 33 20 69 73 20 74 68 65 20 72 65 63 6f 6d  ==3 is the recom
1afb0 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63 61 63  mended pager cac
1afc0 68 65 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20  he size, and so 
1afd0 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69 73  forth.  P1==0 is
1afe0 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74  .** the main dat
1aff0 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50  abase file and P
1b000 31 3d 3d 31 20 69 73 20 74 68 65 20 64 61 74 61  1==1 is the data
1b010 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20 74  base file used t
1b020 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 65 6d 70 6f  o store.** tempo
1b030 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a  rary tables..**.
1b040 2a 2a 20 54 68 65 72 65 20 6d 75 73 74 20 62 65  ** There must be
1b050 20 61 20 72 65 61 64 2d 6c 6f 63 6b 20 6f 6e 20   a read-lock on 
1b060 74 68 65 20 64 61 74 61 62 61 73 65 20 28 65 69  the database (ei
1b070 74 68 65 72 20 61 20 74 72 61 6e 73 61 63 74 69  ther a transacti
1b080 6f 6e 0a 2a 2a 20 6d 75 73 74 20 62 65 20 73 74  on.** must be st
1b090 61 72 74 65 64 20 6f 72 20 74 68 65 72 65 20 6d  arted or there m
1b0a0 75 73 74 20 62 65 20 61 6e 20 6f 70 65 6e 20 63  ust be an open c
1b0b0 75 72 73 6f 72 29 20 62 65 66 6f 72 65 0a 2a 2a  ursor) before.**
1b0c0 20 65 78 65 63 75 74 69 6e 67 20 74 68 69 73 20   executing this 
1b0d0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
1b0e0 63 61 73 65 20 4f 50 5f 52 65 61 64 43 6f 6f 6b  case OP_ReadCook
1b0f0 69 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ie: {           
1b100 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
1b110 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69 6e   int iMeta;.  in
1b120 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 69 43 6f  t iDb;.  int iCo
1b130 6f 6b 69 65 3b 0a 0a 20 20 61 73 73 65 72 74 28  okie;..  assert(
1b140 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b   p->bIsReader );
1b150 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31  .  iDb = pOp->p1
1b160 3b 0a 20 20 69 43 6f 6f 6b 69 65 20 3d 20 70 4f  ;.  iCookie = pO
1b170 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28  p->p3;.  assert(
1b180 20 70 4f 70 2d 3e 70 33 3c 53 51 4c 49 54 45 5f   pOp->p3<SQLITE_
1b190 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a  N_BTREE_META );.
1b1a0 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30    assert( iDb>=0
1b1b0 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20   && iDb<db->nDb 
1b1c0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  );.  assert( db-
1b1d0 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 21 3d 30  >aDb[iDb].pBt!=0
1b1e0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62   );.  assert( Db
1b1f0 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65  MaskTest(p->btre
1b200 65 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a 0a  eMask, iDb) );..
1b210 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65    sqlite3BtreeGe
1b220 74 4d 65 74 61 28 64 62 2d 3e 61 44 62 5b 69 44  tMeta(db->aDb[iD
1b230 62 5d 2e 70 42 74 2c 20 69 43 6f 6f 6b 69 65 2c  b].pBt, iCookie,
1b240 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29 3b   (u32 *)&iMeta);
1b250 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
1b260 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
1b270 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
1b280 69 4d 65 74 61 3b 0a 20 20 62 72 65 61 6b 3b 0a  iMeta;.  break;.
1b290 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  }../* Opcode: Se
1b2a0 74 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33  tCookie P1 P2 P3
1b2b0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65   * *.**.** Write
1b2c0 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c   the integer val
1b2d0 75 65 20 50 33 20 69 6e 74 6f 20 63 6f 6f 6b 69  ue P3 into cooki
1b2e0 65 20 6e 75 6d 62 65 72 20 50 32 20 6f 66 20 64  e number P2 of d
1b2f0 61 74 61 62 61 73 65 20 50 31 2e 0a 2a 2a 20 50  atabase P1..** P
1b300 32 3d 3d 31 20 69 73 20 74 68 65 20 73 63 68 65  2==1 is the sche
1b310 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 50 32 3d  ma version.  P2=
1b320 3d 32 20 69 73 20 74 68 65 20 64 61 74 61 62 61  =2 is the databa
1b330 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50 32  se format..** P2
1b340 3d 3d 33 20 69 73 20 74 68 65 20 72 65 63 6f 6d  ==3 is the recom
1b350 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63 61 63  mended pager cac
1b360 68 65 20 0a 2a 2a 20 73 69 7a 65 2c 20 61 6e 64  he .** size, and
1b370 20 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d   so forth.  P1==
1b380 30 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61  0 is the main da
1b390 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20  tabase file and 
1b3a0 50 31 3d 3d 31 20 69 73 20 74 68 65 20 0a 2a 2a  P1==1 is the .**
1b3b0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 75   database file u
1b3c0 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 65 6d  sed to store tem
1b3d0 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a  porary tables..*
1b3e0 2a 0a 2a 2a 20 41 20 74 72 61 6e 73 61 63 74 69  *.** A transacti
1b3f0 6f 6e 20 6d 75 73 74 20 62 65 20 73 74 61 72 74  on must be start
1b400 65 64 20 62 65 66 6f 72 65 20 65 78 65 63 75 74  ed before execut
1b410 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e  ing this opcode.
1b420 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 74 43  .*/.case OP_SetC
1b430 6f 6f 6b 69 65 3a 20 7b 0a 20 20 44 62 20 2a 70  ookie: {.  Db *p
1b440 44 62 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  Db;.  assert( pO
1b450 70 2d 3e 70 32 3c 53 51 4c 49 54 45 5f 4e 5f 42  p->p2<SQLITE_N_B
1b460 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20 20 61  TREE_META );.  a
1b470 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1b480 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d  0 && pOp->p1<db-
1b490 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
1b4a0 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e  ( DbMaskTest(p->
1b4b0 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e  btreeMask, pOp->
1b4c0 70 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  p1) );.  assert(
1b4d0 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
1b4e0 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e  );.  pDb = &db->
1b4f0 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  aDb[pOp->p1];.  
1b500 61 73 73 65 72 74 28 20 70 44 62 2d 3e 70 42 74  assert( pDb->pBt
1b510 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
1b520 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75   sqlite3SchemaMu
1b530 74 65 78 48 65 6c 64 28 64 62 2c 20 70 4f 70 2d  texHeld(db, pOp-
1b540 3e 70 31 2c 20 30 29 20 29 3b 0a 20 20 2f 2a 20  >p1, 0) );.  /* 
1b550 53 65 65 20 6e 6f 74 65 20 61 62 6f 75 74 20 69  See note about i
1b560 6e 64 65 78 20 73 68 69 66 74 69 6e 67 20 6f 6e  ndex shifting on
1b570 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 20 2a   OP_ReadCookie *
1b580 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  /.  rc = sqlite3
1b590 42 74 72 65 65 55 70 64 61 74 65 4d 65 74 61 28  BtreeUpdateMeta(
1b5a0 70 44 62 2d 3e 70 42 74 2c 20 70 4f 70 2d 3e 70  pDb->pBt, pOp->p
1b5b0 32 2c 20 70 4f 70 2d 3e 70 33 29 3b 0a 20 20 69  2, pOp->p3);.  i
1b5c0 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45  f( pOp->p2==BTRE
1b5d0 45 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e  E_SCHEMA_VERSION
1b5e0 20 29 7b 0a 20 20 20 20 2f 2a 20 57 68 65 6e 20   ){.    /* When 
1b5f0 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69  the schema cooki
1b600 65 20 63 68 61 6e 67 65 73 2c 20 72 65 63 6f 72  e changes, recor
1b610 64 20 74 68 65 20 6e 65 77 20 63 6f 6f 6b 69 65  d the new cookie
1b620 20 69 6e 74 65 72 6e 61 6c 6c 79 20 2a 2f 0a 20   internally */. 
1b630 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d     pDb->pSchema-
1b640 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 20 3d  >schema_cookie =
1b650 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 64 62   pOp->p3;.    db
1b660 2d 3e 6d 44 62 46 6c 61 67 73 20 7c 3d 20 44 42  ->mDbFlags |= DB
1b670 46 4c 41 47 5f 53 63 68 65 6d 61 43 68 61 6e 67  FLAG_SchemaChang
1b680 65 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  e;.  }else if( p
1b690 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 46 49  Op->p2==BTREE_FI
1b6a0 4c 45 5f 46 4f 52 4d 41 54 20 29 7b 0a 20 20 20  LE_FORMAT ){.   
1b6b0 20 2f 2a 20 52 65 63 6f 72 64 20 63 68 61 6e 67   /* Record chang
1b6c0 65 73 20 69 6e 20 74 68 65 20 66 69 6c 65 20 66  es in the file f
1b6d0 6f 72 6d 61 74 20 2a 2f 0a 20 20 20 20 70 44 62  ormat */.    pDb
1b6e0 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f  ->pSchema->file_
1b6f0 66 6f 72 6d 61 74 20 3d 20 70 4f 70 2d 3e 70 33  format = pOp->p3
1b700 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  ;.  }.  if( pOp-
1b710 3e 70 31 3d 3d 31 20 29 7b 0a 20 20 20 20 2f 2a  >p1==1 ){.    /*
1b720 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20   Invalidate all 
1b730 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
1b740 6e 74 73 20 77 68 65 6e 65 76 65 72 20 74 68 65  nts whenever the
1b750 20 54 45 4d 50 20 64 61 74 61 62 61 73 65 0a 20   TEMP database. 
1b760 20 20 20 2a 2a 20 73 63 68 65 6d 61 20 69 73 20     ** schema is 
1b770 63 68 61 6e 67 65 64 2e 20 20 54 69 63 6b 65 74  changed.  Ticket
1b780 20 23 31 36 34 34 20 2a 2f 0a 20 20 20 20 73 71   #1644 */.    sq
1b790 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61  lite3ExpirePrepa
1b7a0 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62  redStatements(db
1b7b0 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65  );.    p->expire
1b7c0 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28  d = 0;.  }.  if(
1b7d0 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
1b7e0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1b7f0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1b800 63 6f 64 65 3a 20 4f 70 65 6e 52 65 61 64 20 50  code: OpenRead P
1b810 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
1b820 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d   Synopsis: root=
1b830 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20  P2 iDb=P3.**.** 
1b840 4f 70 65 6e 20 61 20 72 65 61 64 2d 6f 6e 6c 79  Open a read-only
1b850 20 63 75 72 73 6f 72 20 66 6f 72 20 74 68 65 20   cursor for the 
1b860 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 77  database table w
1b870 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69  hose root page i
1b880 73 0a 2a 2a 20 50 32 20 69 6e 20 61 20 64 61 74  s.** P2 in a dat
1b890 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54 68 65  abase file.  The
1b8a0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
1b8b0 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  s determined by 
1b8c0 50 33 2e 20 0a 2a 2a 20 50 33 3d 3d 30 20 6d 65  P3. .** P3==0 me
1b8d0 61 6e 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74  ans the main dat
1b8e0 61 62 61 73 65 2c 20 50 33 3d 3d 31 20 6d 65 61  abase, P3==1 mea
1b8f0 6e 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ns the database 
1b900 75 73 65 64 20 66 6f 72 20 0a 2a 2a 20 74 65 6d  used for .** tem
1b910 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2c 20 61  porary tables, a
1b920 6e 64 20 50 33 3e 31 20 6d 65 61 6e 73 20 75 73  nd P3>1 means us
1b930 65 64 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  ed the correspon
1b940 64 69 6e 67 20 61 74 74 61 63 68 65 64 0a 2a 2a  ding attached.**
1b950 20 64 61 74 61 62 61 73 65 2e 20 20 47 69 76 65   database.  Give
1b960 20 74 68 65 20 6e 65 77 20 63 75 72 73 6f 72 20   the new cursor 
1b970 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20 6f 66  an identifier of
1b980 20 50 31 2e 20 20 54 68 65 20 50 31 0a 2a 2a 20   P1.  The P1.** 
1b990 76 61 6c 75 65 73 20 6e 65 65 64 20 6e 6f 74 20  values need not 
1b9a0 62 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 62 75  be contiguous bu
1b9b0 74 20 61 6c 6c 20 50 31 20 76 61 6c 75 65 73 20  t all P1 values 
1b9c0 73 68 6f 75 6c 64 20 62 65 20 73 6d 61 6c 6c 20  should be small 
1b9d0 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 49 74 20  integers..** It 
1b9e0 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f 72 20  is an error for 
1b9f0 50 31 20 74 6f 20 62 65 20 6e 65 67 61 74 69 76  P1 to be negativ
1ba00 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d  e..**.** If P5!=
1ba10 30 20 74 68 65 6e 20 75 73 65 20 74 68 65 20 63  0 then use the c
1ba20 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
1ba30 65 72 20 50 32 20 61 73 20 74 68 65 20 72 6f 6f  er P2 as the roo
1ba40 74 20 70 61 67 65 2c 20 6e 6f 74 0a 2a 2a 20 74  t page, not.** t
1ba50 68 65 20 76 61 6c 75 65 20 6f 66 20 50 32 20 69  he value of P2 i
1ba60 74 73 65 6c 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  tself..**.** The
1ba70 72 65 20 77 69 6c 6c 20 62 65 20 61 20 72 65 61  re will be a rea
1ba80 64 20 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61  d lock on the da
1ba90 74 61 62 61 73 65 20 77 68 65 6e 65 76 65 72 20  tabase whenever 
1baa0 74 68 65 72 65 20 69 73 20 61 6e 0a 2a 2a 20 6f  there is an.** o
1bab0 70 65 6e 20 63 75 72 73 6f 72 2e 20 20 49 66 20  pen cursor.  If 
1bac0 74 68 65 20 64 61 74 61 62 61 73 65 20 77 61 73  the database was
1bad0 20 75 6e 6c 6f 63 6b 65 64 20 70 72 69 6f 72 20   unlocked prior 
1bae0 74 6f 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  to this instruct
1baf0 69 6f 6e 0a 2a 2a 20 74 68 65 6e 20 61 20 72 65  ion.** then a re
1bb00 61 64 20 6c 6f 63 6b 20 69 73 20 61 63 71 75 69  ad lock is acqui
1bb10 72 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 74  red as part of t
1bb20 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  his instruction.
1bb30 20 20 41 20 72 65 61 64 0a 2a 2a 20 6c 6f 63 6b    A read.** lock
1bb40 20 61 6c 6c 6f 77 73 20 6f 74 68 65 72 20 70 72   allows other pr
1bb50 6f 63 65 73 73 65 73 20 74 6f 20 72 65 61 64 20  ocesses to read 
1bb60 74 68 65 20 64 61 74 61 62 61 73 65 20 62 75 74  the database but
1bb70 20 70 72 6f 68 69 62 69 74 73 0a 2a 2a 20 61 6e   prohibits.** an
1bb80 79 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73 20  y other process 
1bb90 66 72 6f 6d 20 6d 6f 64 69 66 79 69 6e 67 20 74  from modifying t
1bba0 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68  he database.  Th
1bbb0 65 20 72 65 61 64 20 6c 6f 63 6b 20 69 73 0a 2a  e read lock is.*
1bbc0 2a 20 72 65 6c 65 61 73 65 64 20 77 68 65 6e 20  * released when 
1bbd0 61 6c 6c 20 63 75 72 73 6f 72 73 20 61 72 65 20  all cursors are 
1bbe0 63 6c 6f 73 65 64 2e 20 20 49 66 20 74 68 69 73  closed.  If this
1bbf0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 74   instruction att
1bc00 65 6d 70 74 73 0a 2a 2a 20 74 6f 20 67 65 74 20  empts.** to get 
1bc10 61 20 72 65 61 64 20 6c 6f 63 6b 20 62 75 74 20  a read lock but 
1bc20 66 61 69 6c 73 2c 20 74 68 65 20 73 63 72 69 70  fails, the scrip
1bc30 74 20 74 65 72 6d 69 6e 61 74 65 73 20 77 69 74  t terminates wit
1bc40 68 20 61 6e 0a 2a 2a 20 53 51 4c 49 54 45 5f 42  h an.** SQLITE_B
1bc50 55 53 59 20 65 72 72 6f 72 20 63 6f 64 65 2e 0a  USY error code..
1bc60 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c  **.** The P4 val
1bc70 75 65 20 6d 61 79 20 62 65 20 65 69 74 68 65 72  ue may be either
1bc80 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50 34 5f   an integer (P4_
1bc90 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f 69 6e  INT32) or a poin
1bca0 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49  ter to.** a KeyI
1bcb0 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 28 50  nfo structure (P
1bcc0 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20 69  4_KEYINFO). If i
1bcd0 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  t is a pointer t
1bce0 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20  o a KeyInfo .** 
1bcf0 73 74 72 75 63 74 75 72 65 2c 20 74 68 65 6e 20  structure, then 
1bd00 73 61 69 64 20 73 74 72 75 63 74 75 72 65 20 64  said structure d
1bd10 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e 74 65  efines the conte
1bd20 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67  nt and collating
1bd30 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f 66   .** sequence of
1bd40 20 74 68 65 20 69 6e 64 65 78 20 62 65 69 6e 67   the index being
1bd50 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72 77 69   opened. Otherwi
1bd60 73 65 2c 20 69 66 20 50 34 20 69 73 20 61 6e 20  se, if P4 is an 
1bd70 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75  integer .** valu
1bd80 65 2c 20 69 74 20 69 73 20 73 65 74 20 74 6f 20  e, it is set to 
1bd90 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
1bda0 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62  lumns in the tab
1bdb0 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  le..**.** See al
1bdc0 73 6f 3a 20 4f 70 65 6e 57 72 69 74 65 2c 20 52  so: OpenWrite, R
1bdd0 65 6f 70 65 6e 49 64 78 0a 2a 2f 0a 2f 2a 20 4f  eopenIdx.*/./* O
1bde0 70 63 6f 64 65 3a 20 52 65 6f 70 65 6e 49 64 78  pcode: ReopenIdx
1bdf0 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
1be00 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f  ** Synopsis: roo
1be10 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a  t=P2 iDb=P3.**.*
1be20 2a 20 54 68 65 20 52 65 6f 70 65 6e 49 64 78 20  * The ReopenIdx 
1be30 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 65 78 61  opcode works exa
1be40 63 74 6c 79 20 6c 69 6b 65 20 52 65 61 64 4f 70  ctly like ReadOp
1be50 65 6e 20 65 78 63 65 70 74 20 74 68 61 74 20 69  en except that i
1be60 74 20 66 69 72 73 74 0a 2a 2a 20 63 68 65 63 6b  t first.** check
1be70 73 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 20  s to see if the 
1be80 63 75 72 73 6f 72 20 6f 6e 20 50 31 20 69 73 20  cursor on P1 is 
1be90 61 6c 72 65 61 64 79 20 6f 70 65 6e 20 77 69 74  already open wit
1bea0 68 20 61 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a  h a root page.**
1beb0 20 6e 75 6d 62 65 72 20 6f 66 20 50 32 20 61 6e   number of P2 an
1bec0 64 20 69 66 20 69 74 20 69 73 20 74 68 69 73 20  d if it is this 
1bed0 6f 70 63 6f 64 65 20 62 65 63 6f 6d 65 73 20 61  opcode becomes a
1bee0 20 6e 6f 2d 6f 70 2e 20 20 49 6e 20 6f 74 68 65   no-op.  In othe
1bef0 72 20 77 6f 72 64 73 2c 0a 2a 2a 20 69 66 20 74  r words,.** if t
1bf00 68 65 20 63 75 72 73 6f 72 20 69 73 20 61 6c 72  he cursor is alr
1bf10 65 61 64 79 20 6f 70 65 6e 2c 20 64 6f 20 6e 6f  eady open, do no
1bf20 74 20 72 65 6f 70 65 6e 20 69 74 2e 0a 2a 2a 0a  t reopen it..**.
1bf30 2a 2a 20 54 68 65 20 52 65 6f 70 65 6e 49 64 78  ** The ReopenIdx
1bf40 20 6f 70 63 6f 64 65 20 6d 61 79 20 6f 6e 6c 79   opcode may only
1bf50 20 62 65 20 75 73 65 64 20 77 69 74 68 20 50 35   be used with P5
1bf60 3d 3d 30 20 61 6e 64 20 77 69 74 68 20 50 34 20  ==0 and with P4 
1bf70 62 65 69 6e 67 0a 2a 2a 20 61 20 50 34 5f 4b 45  being.** a P4_KE
1bf80 59 49 4e 46 4f 20 6f 62 6a 65 63 74 2e 20 20 46  YINFO object.  F
1bf90 75 72 74 68 65 72 6d 6f 72 65 2c 20 74 68 65 20  urthermore, the 
1bfa0 50 33 20 76 61 6c 75 65 20 6d 75 73 74 20 62 65  P3 value must be
1bfb0 20 74 68 65 20 73 61 6d 65 20 61 73 0a 2a 2a 20   the same as.** 
1bfc0 65 76 65 72 79 20 6f 74 68 65 72 20 52 65 6f 70  every other Reop
1bfd0 65 6e 49 64 78 20 6f 72 20 4f 70 65 6e 52 65 61  enIdx or OpenRea
1bfe0 64 20 66 6f 72 20 74 68 65 20 73 61 6d 65 20 63  d for the same c
1bff0 75 72 73 6f 72 20 6e 75 6d 62 65 72 2e 0a 2a 2a  ursor number..**
1c000 0a 2a 2a 20 53 65 65 20 74 68 65 20 4f 70 65 6e  .** See the Open
1c010 52 65 61 64 20 6f 70 63 6f 64 65 20 64 6f 63 75  Read opcode docu
1c020 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20 61 64  mentation for ad
1c030 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
1c040 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tion..*/./* Opco
1c050 64 65 3a 20 4f 70 65 6e 57 72 69 74 65 20 50 31  de: OpenWrite P1
1c060 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
1c070 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50  Synopsis: root=P
1c080 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f  2 iDb=P3.**.** O
1c090 70 65 6e 20 61 20 72 65 61 64 2f 77 72 69 74 65  pen a read/write
1c0a0 20 63 75 72 73 6f 72 20 6e 61 6d 65 64 20 50 31   cursor named P1
1c0b0 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72   on the table or
1c0c0 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f   index whose roo
1c0d0 74 0a 2a 2a 20 70 61 67 65 20 69 73 20 50 32 2e  t.** page is P2.
1c0e0 20 20 4f 72 20 69 66 20 50 35 21 3d 30 20 75 73    Or if P5!=0 us
1c0f0 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  e the content of
1c100 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20   register P2 to 
1c110 66 69 6e 64 20 74 68 65 0a 2a 2a 20 72 6f 6f 74  find the.** root
1c120 20 70 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65   page..**.** The
1c130 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62 65   P4 value may be
1c140 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67   either an integ
1c150 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72  er (P4_INT32) or
1c160 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a   a pointer to.**
1c170 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63   a KeyInfo struc
1c180 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f  ture (P4_KEYINFO
1c190 29 2e 20 49 66 20 69 74 20 69 73 20 61 20 70 6f  ). If it is a po
1c1a0 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e  inter to a KeyIn
1c1b0 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  fo .** structure
1c1c0 2c 20 74 68 65 6e 20 73 61 69 64 20 73 74 72 75  , then said stru
1c1d0 63 74 75 72 65 20 64 65 66 69 6e 65 73 20 74 68  cture defines th
1c1e0 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f  e content and co
1c1f0 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75  llating .** sequ
1c200 65 6e 63 65 20 6f 66 20 74 68 65 20 69 6e 64 65  ence of the inde
1c210 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20  x being opened. 
1c220 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 34  Otherwise, if P4
1c230 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a   is an integer .
1c240 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20  ** value, it is 
1c250 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65  set to the numbe
1c260 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
1c270 74 68 65 20 74 61 62 6c 65 2c 20 6f 72 20 74 6f  the table, or to
1c280 20 74 68 65 0a 2a 2a 20 6c 61 72 67 65 73 74 20   the.** largest 
1c290 69 6e 64 65 78 20 6f 66 20 61 6e 79 20 63 6f 6c  index of any col
1c2a0 75 6d 6e 20 6f 66 20 74 68 65 20 74 61 62 6c 65  umn of the table
1c2b0 20 74 68 61 74 20 69 73 20 61 63 74 75 61 6c 6c   that is actuall
1c2c0 79 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  y used..**.** Th
1c2d0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77  is instruction w
1c2e0 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 4f  orks just like O
1c2f0 70 65 6e 52 65 61 64 20 65 78 63 65 70 74 20 74  penRead except t
1c300 68 61 74 20 69 74 20 6f 70 65 6e 73 20 74 68 65  hat it opens the
1c310 20 63 75 72 73 6f 72 0a 2a 2a 20 69 6e 20 72 65   cursor.** in re
1c320 61 64 2f 77 72 69 74 65 20 6d 6f 64 65 2e 20 20  ad/write mode.  
1c330 46 6f 72 20 61 20 67 69 76 65 6e 20 74 61 62 6c  For a given tabl
1c340 65 2c 20 74 68 65 72 65 20 63 61 6e 20 62 65 20  e, there can be 
1c350 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72 65 61 64  one or more read
1c360 2d 6f 6e 6c 79 0a 2a 2a 20 63 75 72 73 6f 72 73  -only.** cursors
1c370 20 6f 72 20 61 20 73 69 6e 67 6c 65 20 72 65 61   or a single rea
1c380 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20 62  d/write cursor b
1c390 75 74 20 6e 6f 74 20 62 6f 74 68 2e 0a 2a 2a 0a  ut not both..**.
1c3a0 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70 65 6e  ** See also Open
1c3b0 52 65 61 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  Read..*/.case OP
1c3c0 5f 52 65 6f 70 65 6e 49 64 78 3a 20 7b 0a 20 20  _ReopenIdx: {.  
1c3d0 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20 4b 65  int nField;.  Ke
1c3e0 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b  yInfo *pKeyInfo;
1c3f0 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20 69 6e 74  .  int p2;.  int
1c400 20 69 44 62 3b 0a 20 20 69 6e 74 20 77 72 46 6c   iDb;.  int wrFl
1c410 61 67 3b 0a 20 20 42 74 72 65 65 20 2a 70 58 3b  ag;.  Btree *pX;
1c420 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1c430 43 75 72 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a  Cur;.  Db *pDb;.
1c440 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1c450 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35  p5==0 || pOp->p5
1c460 3d 3d 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20  ==OPFLAG_SEEKEQ 
1c470 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
1c480 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59  ->p4type==P4_KEY
1c490 49 4e 46 4f 20 29 3b 0a 20 20 70 43 75 72 20 3d  INFO );.  pCur =
1c4a0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1c4b0 31 5d 3b 0a 20 20 69 66 28 20 70 43 75 72 20 26  1];.  if( pCur &
1c4c0 26 20 70 43 75 72 2d 3e 70 67 6e 6f 52 6f 6f 74  & pCur->pgnoRoot
1c4d0 3d 3d 28 75 33 32 29 70 4f 70 2d 3e 70 32 20 29  ==(u32)pOp->p2 )
1c4e0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  {.    assert( pC
1c4f0 75 72 2d 3e 69 44 62 3d 3d 70 4f 70 2d 3e 70 33  ur->iDb==pOp->p3
1c500 20 29 3b 20 20 20 20 20 20 2f 2a 20 47 75 61 72   );      /* Guar
1c510 61 6e 74 65 65 64 20 62 79 20 74 68 65 20 63 6f  anteed by the co
1c520 64 65 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a  de generator */.
1c530 20 20 20 20 67 6f 74 6f 20 6f 70 65 6e 5f 63 75      goto open_cu
1c540 72 73 6f 72 5f 73 65 74 5f 68 69 6e 74 73 3b 0a  rsor_set_hints;.
1c550 20 20 7d 0a 20 20 2f 2a 20 49 66 20 74 68 65 20    }.  /* If the 
1c560 63 75 72 73 6f 72 20 69 73 20 6e 6f 74 20 63 75  cursor is not cu
1c570 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 6f 72 20  rrently open or 
1c580 69 73 20 6f 70 65 6e 20 6f 6e 20 61 20 64 69 66  is open on a dif
1c590 66 65 72 65 6e 74 0a 20 20 2a 2a 20 69 6e 64 65  ferent.  ** inde
1c5a0 78 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  x, then fall thr
1c5b0 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 4f 70 65  ough into OP_Ope
1c5c0 6e 52 65 61 64 20 74 6f 20 66 6f 72 63 65 20 61  nRead to force a
1c5d0 20 72 65 6f 70 65 6e 20 2a 2f 0a 63 61 73 65 20   reopen */.case 
1c5e0 4f 50 5f 4f 70 65 6e 52 65 61 64 3a 0a 63 61 73  OP_OpenRead:.cas
1c5f0 65 20 4f 50 5f 4f 70 65 6e 57 72 69 74 65 3a 0a  e OP_OpenWrite:.
1c600 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1c610 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57  opcode==OP_OpenW
1c620 72 69 74 65 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d  rite || pOp->p5=
1c630 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f  =0 || pOp->p5==O
1c640 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 29 3b 0a  PFLAG_SEEKEQ );.
1c650 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73    assert( p->bIs
1c660 52 65 61 64 65 72 20 29 3b 0a 20 20 61 73 73 65  Reader );.  asse
1c670 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
1c680 3d 4f 50 5f 4f 70 65 6e 52 65 61 64 20 7c 7c 20  =OP_OpenRead || 
1c690 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
1c6a0 52 65 6f 70 65 6e 49 64 78 0a 20 20 20 20 20 20  ReopenIdx.      
1c6b0 20 20 20 20 7c 7c 20 70 2d 3e 72 65 61 64 4f 6e      || p->readOn
1c6c0 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 69 66 28 20  ly==0 );..  if( 
1c6d0 70 2d 3e 65 78 70 69 72 65 64 20 29 7b 0a 20 20  p->expired ){.  
1c6e0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 41 42    rc = SQLITE_AB
1c6f0 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20  ORT_ROLLBACK;.  
1c700 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
1c710 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 0a  _to_error;.  }..
1c720 20 20 6e 46 69 65 6c 64 20 3d 20 30 3b 0a 20 20    nField = 0;.  
1c730 70 4b 65 79 49 6e 66 6f 20 3d 20 30 3b 0a 20 20  pKeyInfo = 0;.  
1c740 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  p2 = pOp->p2;.  
1c750 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  iDb = pOp->p3;. 
1c760 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20   assert( iDb>=0 
1c770 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29  && iDb<db->nDb )
1c780 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61  ;.  assert( DbMa
1c790 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d  skTest(p->btreeM
1c7a0 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a 20 20 70  ask, iDb) );.  p
1c7b0 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69 44  Db = &db->aDb[iD
1c7c0 62 5d 3b 0a 20 20 70 58 20 3d 20 70 44 62 2d 3e  b];.  pX = pDb->
1c7d0 70 42 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70  pBt;.  assert( p
1c7e0 58 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f  X!=0 );.  if( pO
1c7f0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70  p->opcode==OP_Op
1c800 65 6e 57 72 69 74 65 20 29 7b 0a 20 20 20 20 61  enWrite ){.    a
1c810 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 46 4f  ssert( OPFLAG_FO
1c820 52 44 45 4c 45 54 45 3d 3d 42 54 52 45 45 5f 46  RDELETE==BTREE_F
1c830 4f 52 44 45 4c 45 54 45 20 29 3b 0a 20 20 20 20  ORDELETE );.    
1c840 77 72 46 6c 61 67 20 3d 20 42 54 52 45 45 5f 57  wrFlag = BTREE_W
1c850 52 43 53 52 20 7c 20 28 70 4f 70 2d 3e 70 35 20  RCSR | (pOp->p5 
1c860 26 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45  & OPFLAG_FORDELE
1c870 54 45 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  TE);.    assert(
1c880 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75   sqlite3SchemaMu
1c890 74 65 78 48 65 6c 64 28 64 62 2c 20 69 44 62 2c  texHeld(db, iDb,
1c8a0 20 30 29 20 29 3b 0a 20 20 20 20 69 66 28 20 70   0) );.    if( p
1c8b0 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c  Db->pSchema->fil
1c8c0 65 5f 66 6f 72 6d 61 74 20 3c 20 70 2d 3e 6d 69  e_format < p->mi
1c8d0 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74  nWriteFileFormat
1c8e0 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 69 6e   ){.      p->min
1c8f0 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20  WriteFileFormat 
1c900 3d 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e  = pDb->pSchema->
1c910 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 0a 20 20 20  file_format;.   
1c920 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
1c930 77 72 46 6c 61 67 20 3d 20 30 3b 0a 20 20 7d 0a  wrFlag = 0;.  }.
1c940 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
1c950 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47 20 29  OPFLAG_P2ISREG )
1c960 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32  {.    assert( p2
1c970 3e 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  >0 );.    assert
1c980 28 20 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ( p2<=(p->nMem+1
1c990 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29   - p->nCursor) )
1c9a0 3b 0a 20 20 20 20 70 49 6e 32 20 3d 20 26 61 4d  ;.    pIn2 = &aM
1c9b0 65 6d 5b 70 32 5d 3b 0a 20 20 20 20 61 73 73 65  em[p2];.    asse
1c9c0 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
1c9d0 49 6e 32 29 20 29 3b 0a 20 20 20 20 61 73 73 65  In2) );.    asse
1c9e0 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73  rt( (pIn2->flags
1c9f0 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
1ca00 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
1ca10 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70  eMemIntegerify(p
1ca20 49 6e 32 29 3b 0a 20 20 20 20 70 32 20 3d 20 28  In2);.    p2 = (
1ca30 69 6e 74 29 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20  int)pIn2->u.i;. 
1ca40 20 20 20 2f 2a 20 54 68 65 20 70 32 20 76 61 6c     /* The p2 val
1ca50 75 65 20 61 6c 77 61 79 73 20 63 6f 6d 65 73 20  ue always comes 
1ca60 66 72 6f 6d 20 61 20 70 72 69 6f 72 20 4f 50 5f  from a prior OP_
1ca70 43 72 65 61 74 65 42 74 72 65 65 20 6f 70 63 6f  CreateBtree opco
1ca80 64 65 20 61 6e 64 0a 20 20 20 20 2a 2a 20 74 68  de and.    ** th
1ca90 61 74 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61  at opcode will a
1caa0 6c 77 61 79 73 20 73 65 74 20 74 68 65 20 70 32  lways set the p2
1cab0 20 76 61 6c 75 65 20 74 6f 20 32 20 6f 72 20 6d   value to 2 or m
1cac0 6f 72 65 20 6f 72 20 65 6c 73 65 20 66 61 69 6c  ore or else fail
1cad0 2e 0a 20 20 20 20 2a 2a 20 49 66 20 74 68 65 72  ..    ** If ther
1cae0 65 20 77 65 72 65 20 61 20 66 61 69 6c 75 72 65  e were a failure
1caf0 2c 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73  , the prepared s
1cb00 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64 20 68  tatement would h
1cb10 61 76 65 20 68 61 6c 74 65 64 0a 20 20 20 20 2a  ave halted.    *
1cb20 2a 20 62 65 66 6f 72 65 20 72 65 61 63 68 69 6e  * before reachin
1cb30 67 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  g this instructi
1cb40 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61 73 73 65 72  on. */.    asser
1cb50 74 28 20 70 32 3e 3d 32 20 29 3b 0a 20 20 7d 0a  t( p2>=2 );.  }.
1cb60 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70    if( pOp->p4typ
1cb70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 7b  e==P4_KEYINFO ){
1cb80 0a 20 20 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20  .    pKeyInfo = 
1cb90 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f  pOp->p4.pKeyInfo
1cba0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4b  ;.    assert( pK
1cbb0 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43  eyInfo->enc==ENC
1cbc0 28 64 62 29 20 29 3b 0a 20 20 20 20 61 73 73 65  (db) );.    asse
1cbd0 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 64 62  rt( pKeyInfo->db
1cbe0 3d 3d 64 62 20 29 3b 0a 20 20 20 20 6e 46 69 65  ==db );.    nFie
1cbf0 6c 64 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e  ld = pKeyInfo->n
1cc00 41 6c 6c 46 69 65 6c 64 3b 0a 20 20 7d 65 6c 73  AllField;.  }els
1cc10 65 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70  e if( pOp->p4typ
1cc20 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 7b 0a 20  e==P4_INT32 ){. 
1cc30 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d     nField = pOp-
1cc40 3e 70 34 2e 69 3b 0a 20 20 7d 0a 20 20 61 73 73  >p4.i;.  }.  ass
1cc50 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1cc60 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69  );.  assert( nFi
1cc70 65 6c 64 3e 3d 30 20 29 3b 0a 20 20 74 65 73 74  eld>=0 );.  test
1cc80 63 61 73 65 28 20 6e 46 69 65 6c 64 3d 3d 30 20  case( nField==0 
1cc90 29 3b 20 20 2f 2a 20 54 61 62 6c 65 20 77 69 74  );  /* Table wit
1cca0 68 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  h INTEGER PRIMAR
1ccb0 59 20 4b 45 59 20 61 6e 64 20 6e 6f 74 68 69 6e  Y KEY and nothin
1ccc0 67 20 65 6c 73 65 20 2a 2f 0a 20 20 70 43 75 72  g else */.  pCur
1ccd0 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f   = allocateCurso
1cce0 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 6e 46  r(p, pOp->p1, nF
1ccf0 69 65 6c 64 2c 20 69 44 62 2c 20 43 55 52 54 59  ield, iDb, CURTY
1cd00 50 45 5f 42 54 52 45 45 29 3b 0a 20 20 69 66 28  PE_BTREE);.  if(
1cd10 20 70 43 75 72 3d 3d 30 20 29 20 67 6f 74 6f 20   pCur==0 ) goto 
1cd20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 75 72 2d 3e  no_mem;.  pCur->
1cd30 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70  nullRow = 1;.  p
1cd40 43 75 72 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d  Cur->isOrdered =
1cd50 20 31 3b 0a 20 20 70 43 75 72 2d 3e 70 67 6e 6f   1;.  pCur->pgno
1cd60 52 6f 6f 74 20 3d 20 70 32 3b 0a 23 69 66 64 65  Root = p2;.#ifde
1cd70 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
1cd80 20 70 43 75 72 2d 3e 77 72 46 6c 61 67 20 3d 20   pCur->wrFlag = 
1cd90 77 72 46 6c 61 67 3b 0a 23 65 6e 64 69 66 0a 20  wrFlag;.#endif. 
1cda0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1cdb0 65 65 43 75 72 73 6f 72 28 70 58 2c 20 70 32 2c  eeCursor(pX, p2,
1cdc0 20 77 72 46 6c 61 67 2c 20 70 4b 65 79 49 6e 66   wrFlag, pKeyInf
1cdd0 6f 2c 20 70 43 75 72 2d 3e 75 63 2e 70 43 75 72  o, pCur->uc.pCur
1cde0 73 6f 72 29 3b 0a 20 20 70 43 75 72 2d 3e 70 4b  sor);.  pCur->pK
1cdf0 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66  eyInfo = pKeyInf
1ce00 6f 3b 0a 20 20 2f 2a 20 53 65 74 20 74 68 65 20  o;.  /* Set the 
1ce10 56 64 62 65 43 75 72 73 6f 72 2e 69 73 54 61 62  VdbeCursor.isTab
1ce20 6c 65 20 76 61 72 69 61 62 6c 65 2e 20 50 72 65  le variable. Pre
1ce30 76 69 6f 75 73 20 76 65 72 73 69 6f 6e 73 20 6f  vious versions o
1ce40 66 0a 20 20 2a 2a 20 53 51 4c 69 74 65 20 75 73  f.  ** SQLite us
1ce50 65 64 20 74 6f 20 63 68 65 63 6b 20 69 66 20 74  ed to check if t
1ce60 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 66 6c 61  he root-page fla
1ce70 67 73 20 77 65 72 65 20 73 61 6e 65 20 61 74 20  gs were sane at 
1ce80 74 68 69 73 20 70 6f 69 6e 74 0a 20 20 2a 2a 20  this point.  ** 
1ce90 61 6e 64 20 72 65 70 6f 72 74 20 64 61 74 61 62  and report datab
1cea0 61 73 65 20 63 6f 72 72 75 70 74 69 6f 6e 20 69  ase corruption i
1ceb0 66 20 74 68 65 79 20 77 65 72 65 20 6e 6f 74 2c  f they were not,
1cec0 20 62 75 74 20 74 68 69 73 20 63 68 65 63 6b 20   but this check 
1ced0 68 61 73 0a 20 20 2a 2a 20 73 69 6e 63 65 20 6d  has.  ** since m
1cee0 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20 62 74  oved into the bt
1cef0 72 65 65 20 6c 61 79 65 72 2e 20 20 2a 2f 20 20  ree layer.  */  
1cf00 0a 20 20 70 43 75 72 2d 3e 69 73 54 61 62 6c 65  .  pCur->isTable
1cf10 20 3d 20 70 4f 70 2d 3e 70 34 74 79 70 65 21 3d   = pOp->p4type!=
1cf20 50 34 5f 4b 45 59 49 4e 46 4f 3b 0a 0a 6f 70 65  P4_KEYINFO;..ope
1cf30 6e 5f 63 75 72 73 6f 72 5f 73 65 74 5f 68 69 6e  n_cursor_set_hin
1cf40 74 73 3a 0a 20 20 61 73 73 65 72 74 28 20 4f 50  ts:.  assert( OP
1cf50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 3d 3d 42 54  FLAG_BULKCSR==BT
1cf60 52 45 45 5f 42 55 4c 4b 4c 4f 41 44 20 29 3b 0a  REE_BULKLOAD );.
1cf70 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47    assert( OPFLAG
1cf80 5f 53 45 45 4b 45 51 3d 3d 42 54 52 45 45 5f 53  _SEEKEQ==BTREE_S
1cf90 45 45 4b 5f 45 51 20 29 3b 0a 20 20 74 65 73 74  EEK_EQ );.  test
1cfa0 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 20 26 20  case( pOp->p5 & 
1cfb0 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 29  OPFLAG_BULKCSR )
1cfc0 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
1cfd0 45 4e 41 42 4c 45 5f 43 55 52 53 4f 52 5f 48 49  ENABLE_CURSOR_HI
1cfe0 4e 54 53 0a 20 20 74 65 73 74 63 61 73 65 28 20  NTS.  testcase( 
1cff0 70 4f 70 2d 3e 70 32 20 26 20 4f 50 46 4c 41 47  pOp->p2 & OPFLAG
1d000 5f 53 45 45 4b 45 51 20 29 3b 0a 23 65 6e 64 69  _SEEKEQ );.#endi
1d010 66 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65  f.  sqlite3Btree
1d020 43 75 72 73 6f 72 48 69 6e 74 46 6c 61 67 73 28  CursorHintFlags(
1d030 70 43 75 72 2d 3e 75 63 2e 70 43 75 72 73 6f 72  pCur->uc.pCursor
1d040 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1d050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d060 20 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46   (pOp->p5 & (OPF
1d070 4c 41 47 5f 42 55 4c 4b 43 53 52 7c 4f 50 46 4c  LAG_BULKCSR|OPFL
1d080 41 47 5f 53 45 45 4b 45 51 29 29 29 3b 0a 20 20  AG_SEEKEQ)));.  
1d090 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
1d0a0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
1d0b0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1d0c0 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 44 75 70   Opcode: OpenDup
1d0d0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
1d0e0 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75  ** Open a new cu
1d0f0 72 73 6f 72 20 50 31 20 74 68 61 74 20 70 6f 69  rsor P1 that poi
1d100 6e 74 73 20 74 6f 20 74 68 65 20 73 61 6d 65 20  nts to the same 
1d110 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20  ephemeral table 
1d120 61 73 0a 2a 2a 20 63 75 72 73 6f 72 20 50 32 2e  as.** cursor P2.
1d130 20 20 54 68 65 20 50 32 20 63 75 72 73 6f 72 20    The P2 cursor 
1d140 6d 75 73 74 20 68 61 76 65 20 62 65 65 6e 20 6f  must have been o
1d150 70 65 6e 65 64 20 62 79 20 61 20 70 72 69 6f 72  pened by a prior
1d160 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
1d170 6c 0a 2a 2a 20 6f 70 63 6f 64 65 2e 20 20 4f 6e  l.** opcode.  On
1d180 6c 79 20 65 70 68 65 6d 65 72 61 6c 20 63 75 72  ly ephemeral cur
1d190 73 6f 72 73 20 6d 61 79 20 62 65 20 64 75 70 6c  sors may be dupl
1d1a0 69 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 44 75  icated..**.** Du
1d1b0 70 6c 69 63 61 74 65 20 65 70 68 65 6d 65 72 61  plicate ephemera
1d1c0 6c 20 63 75 72 73 6f 72 73 20 61 72 65 20 75 73  l cursors are us
1d1d0 65 64 20 66 6f 72 20 73 65 6c 66 2d 6a 6f 69 6e  ed for self-join
1d1e0 73 20 6f 66 20 6d 61 74 65 72 69 61 6c 69 7a 65  s of materialize
1d1f0 64 20 76 69 65 77 73 2e 0a 2a 2f 0a 63 61 73 65  d views..*/.case
1d200 20 4f 50 5f 4f 70 65 6e 44 75 70 3a 20 7b 0a 20   OP_OpenDup: {. 
1d210 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 4f 72   VdbeCursor *pOr
1d220 69 67 3b 20 20 20 20 2f 2a 20 54 68 65 20 6f 72  ig;    /* The or
1d230 69 67 69 6e 61 6c 20 63 75 72 73 6f 72 20 74 6f  iginal cursor to
1d240 20 62 65 20 64 75 70 6c 69 63 61 74 65 64 20 2a   be duplicated *
1d250 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
1d260 70 43 78 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  pCx;      /* The
1d270 20 6e 65 77 20 63 75 72 73 6f 72 20 2a 2f 0a 0a   new cursor */..
1d280 20 20 70 4f 72 69 67 20 3d 20 70 2d 3e 61 70 43    pOrig = p->apC
1d290 73 72 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61  sr[pOp->p2];.  a
1d2a0 73 73 65 72 74 28 20 70 4f 72 69 67 2d 3e 70 42  ssert( pOrig->pB
1d2b0 74 78 21 3d 30 20 29 3b 20 20 2f 2a 20 4f 6e 6c  tx!=0 );  /* Onl
1d2c0 79 20 65 70 68 65 6d 65 72 61 6c 20 63 75 72 73  y ephemeral curs
1d2d0 6f 72 73 20 63 61 6e 20 62 65 20 64 75 70 6c 69  ors can be dupli
1d2e0 63 61 74 65 64 20 2a 2f 0a 0a 20 20 70 43 78 20  cated */..  pCx 
1d2f0 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72  = allocateCursor
1d300 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 72  (p, pOp->p1, pOr
1d310 69 67 2d 3e 6e 46 69 65 6c 64 2c 20 2d 31 2c 20  ig->nField, -1, 
1d320 43 55 52 54 59 50 45 5f 42 54 52 45 45 29 3b 0a  CURTYPE_BTREE);.
1d330 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67    if( pCx==0 ) g
1d340 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43  oto no_mem;.  pC
1d350 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a  x->nullRow = 1;.
1d360 20 20 70 43 78 2d 3e 69 73 45 70 68 65 6d 65 72    pCx->isEphemer
1d370 61 6c 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 70  al = 1;.  pCx->p
1d380 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 72 69 67 2d  KeyInfo = pOrig-
1d390 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 70 43 78  >pKeyInfo;.  pCx
1d3a0 2d 3e 69 73 54 61 62 6c 65 20 3d 20 70 4f 72 69  ->isTable = pOri
1d3b0 67 2d 3e 69 73 54 61 62 6c 65 3b 0a 20 20 72 63  g->isTable;.  rc
1d3c0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
1d3d0 75 72 73 6f 72 28 70 4f 72 69 67 2d 3e 70 42 74  ursor(pOrig->pBt
1d3e0 78 2c 20 4d 41 53 54 45 52 5f 52 4f 4f 54 2c 20  x, MASTER_ROOT, 
1d3f0 42 54 52 45 45 5f 57 52 43 53 52 2c 0a 20 20 20  BTREE_WRCSR,.   
1d400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d410 20 20 20 20 20 20 20 70 43 78 2d 3e 70 4b 65 79         pCx->pKey
1d420 49 6e 66 6f 2c 20 70 43 78 2d 3e 75 63 2e 70 43  Info, pCx->uc.pC
1d430 75 72 73 6f 72 29 3b 0a 20 20 2f 2a 20 54 68 65  ursor);.  /* The
1d440 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
1d450 73 6f 72 28 29 20 72 6f 75 74 69 6e 65 20 63 61  sor() routine ca
1d460 6e 20 6f 6e 6c 79 20 66 61 69 6c 20 66 6f 72 20  n only fail for 
1d470 74 68 65 20 66 69 72 73 74 20 63 75 72 73 6f 72  the first cursor
1d480 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 20 66 6f 72  .  ** opened for
1d490 20 61 20 64 61 74 61 62 61 73 65 2e 20 20 53 69   a database.  Si
1d4a0 6e 63 65 20 74 68 65 72 65 20 69 73 20 61 6c 72  nce there is alr
1d4b0 65 61 64 79 20 61 6e 20 6f 70 65 6e 20 63 75 72  eady an open cur
1d4c0 73 6f 72 20 77 68 65 6e 20 74 68 69 73 0a 20 20  sor when this.  
1d4d0 2a 2a 20 6f 70 63 6f 64 65 20 69 73 20 72 75 6e  ** opcode is run
1d4e0 2c 20 74 68 65 20 73 71 6c 69 74 65 33 42 74 72  , the sqlite3Btr
1d4f0 65 65 43 75 72 73 6f 72 28 29 20 63 61 6e 6e 6f  eeCursor() canno
1d500 74 20 66 61 69 6c 20 2a 2f 0a 20 20 61 73 73 65  t fail */.  asse
1d510 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
1d520 4b 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  K );.  break;.}.
1d530 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65  ../* Opcode: Ope
1d540 6e 45 70 68 65 6d 65 72 61 6c 20 50 31 20 50 32  nEphemeral P1 P2
1d550 20 2a 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f   * P4 P5.** Syno
1d560 70 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d 50 32  psis: nColumn=P2
1d570 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65  .**.** Open a ne
1d580 77 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61  w cursor P1 to a
1d590 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65   transient table
1d5a0 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20  ..** The cursor 
1d5b0 69 73 20 61 6c 77 61 79 73 20 6f 70 65 6e 65 64  is always opened
1d5c0 20 72 65 61 64 2f 77 72 69 74 65 20 65 76 65 6e   read/write even
1d5d0 20 69 66 20 0a 2a 2a 20 74 68 65 20 6d 61 69 6e   if .** the main
1d5e0 20 64 61 74 61 62 61 73 65 20 69 73 20 72 65 61   database is rea
1d5f0 64 2d 6f 6e 6c 79 2e 20 20 54 68 65 20 65 70 68  d-only.  The eph
1d600 65 6d 65 72 61 6c 0a 2a 2a 20 74 61 62 6c 65 20  emeral.** table 
1d610 69 73 20 64 65 6c 65 74 65 64 20 61 75 74 6f 6d  is deleted autom
1d620 61 74 69 63 61 6c 6c 79 20 77 68 65 6e 20 74 68  atically when th
1d630 65 20 63 75 72 73 6f 72 20 69 73 20 63 6c 6f 73  e cursor is clos
1d640 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20  ed..**.** P2 is 
1d650 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
1d660 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 65 70 68  lumns in the eph
1d670 65 6d 65 72 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a  emeral table..**
1d680 20 54 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e   The cursor poin
1d690 74 73 20 74 6f 20 61 20 42 54 72 65 65 20 74 61  ts to a BTree ta
1d6a0 62 6c 65 20 69 66 20 50 34 3d 3d 30 20 61 6e 64  ble if P4==0 and
1d6b0 20 74 6f 20 61 20 42 54 72 65 65 20 69 6e 64 65   to a BTree inde
1d6c0 78 0a 2a 2a 20 69 66 20 50 34 20 69 73 20 6e 6f  x.** if P4 is no
1d6d0 74 20 30 2e 20 20 49 66 20 50 34 20 69 73 20 6e  t 0.  If P4 is n
1d6e0 6f 74 20 4e 55 4c 4c 2c 20 69 74 20 70 6f 69 6e  ot NULL, it poin
1d6f0 74 73 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20  ts to a KeyInfo 
1d700 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 74 68 61  structure.** tha
1d710 74 20 64 65 66 69 6e 65 73 20 74 68 65 20 66 6f  t defines the fo
1d720 72 6d 61 74 20 6f 66 20 6b 65 79 73 20 69 6e 20  rmat of keys in 
1d730 74 68 65 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a  the index..**.**
1d740 20 54 68 65 20 50 35 20 70 61 72 61 6d 65 74 65   The P5 paramete
1d750 72 20 63 61 6e 20 62 65 20 61 20 6d 61 73 6b 20  r can be a mask 
1d760 6f 66 20 74 68 65 20 42 54 52 45 45 5f 2a 20 66  of the BTREE_* f
1d770 6c 61 67 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20  lags defined.** 
1d780 69 6e 20 62 74 72 65 65 2e 68 2e 20 20 54 68 65  in btree.h.  The
1d790 73 65 20 66 6c 61 67 73 20 63 6f 6e 74 72 6f 6c  se flags control
1d7a0 20 61 73 70 65 63 74 73 20 6f 66 20 74 68 65 20   aspects of the 
1d7b0 6f 70 65 72 61 74 69 6f 6e 20 6f 66 0a 2a 2a 20  operation of.** 
1d7c0 74 68 65 20 62 74 72 65 65 2e 20 20 54 68 65 20  the btree.  The 
1d7d0 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e  BTREE_OMIT_JOURN
1d7e0 41 4c 20 61 6e 64 20 42 54 52 45 45 5f 53 49 4e  AL and BTREE_SIN
1d7f0 47 4c 45 20 66 6c 61 67 73 20 61 72 65 0a 2a 2a  GLE flags are.**
1d800 20 61 64 64 65 64 20 61 75 74 6f 6d 61 74 69 63   added automatic
1d810 61 6c 6c 79 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  ally..*/./* Opco
1d820 64 65 3a 20 4f 70 65 6e 41 75 74 6f 69 6e 64 65  de: OpenAutoinde
1d830 78 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  x P1 P2 * P4 *.*
1d840 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c  * Synopsis: nCol
1d850 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69  umn=P2.**.** Thi
1d860 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 74  s opcode works t
1d870 68 65 20 73 61 6d 65 20 61 73 20 4f 50 5f 4f 70  he same as OP_Op
1d880 65 6e 45 70 68 65 6d 65 72 61 6c 2e 20 20 49 74  enEphemeral.  It
1d890 20 68 61 73 20 61 0a 2a 2a 20 64 69 66 66 65 72   has a.** differ
1d8a0 65 6e 74 20 6e 61 6d 65 20 74 6f 20 64 69 73 74  ent name to dist
1d8b0 69 6e 67 75 69 73 68 20 69 74 73 20 75 73 65 2e  inguish its use.
1d8c0 20 20 54 61 62 6c 65 73 20 63 72 65 61 74 65 64    Tables created
1d8d0 20 75 73 69 6e 67 0a 2a 2a 20 62 79 20 74 68 69   using.** by thi
1d8e0 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65  s opcode will be
1d8f0 20 75 73 65 64 20 66 6f 72 20 61 75 74 6f 6d 61   used for automa
1d900 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20  tically created 
1d910 74 72 61 6e 73 69 65 6e 74 0a 2a 2a 20 69 6e 64  transient.** ind
1d920 69 63 65 73 20 69 6e 20 6a 6f 69 6e 73 2e 0a 2a  ices in joins..*
1d930 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 41 75  /.case OP_OpenAu
1d940 74 6f 69 6e 64 65 78 3a 20 0a 63 61 73 65 20 4f  toindex: .case O
1d950 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 3a  P_OpenEphemeral:
1d960 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
1d970 2a 70 43 78 3b 0a 20 20 4b 65 79 49 6e 66 6f 20  *pCx;.  KeyInfo 
1d980 2a 70 4b 65 79 49 6e 66 6f 3b 0a 0a 20 20 73 74  *pKeyInfo;..  st
1d990 61 74 69 63 20 63 6f 6e 73 74 20 69 6e 74 20 76  atic const int v
1d9a0 66 73 46 6c 61 67 73 20 3d 20 0a 20 20 20 20 20  fsFlags = .     
1d9b0 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 52 45 41   SQLITE_OPEN_REA
1d9c0 44 57 52 49 54 45 20 7c 0a 20 20 20 20 20 20 53  DWRITE |.      S
1d9d0 51 4c 49 54 45 5f 4f 50 45 4e 5f 43 52 45 41 54  QLITE_OPEN_CREAT
1d9e0 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45  E |.      SQLITE
1d9f0 5f 4f 50 45 4e 5f 45 58 43 4c 55 53 49 56 45 20  _OPEN_EXCLUSIVE 
1da00 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f  |.      SQLITE_O
1da10 50 45 4e 5f 44 45 4c 45 54 45 4f 4e 43 4c 4f 53  PEN_DELETEONCLOS
1da20 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45  E |.      SQLITE
1da30 5f 4f 50 45 4e 5f 54 52 41 4e 53 49 45 4e 54 5f  _OPEN_TRANSIENT_
1da40 44 42 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  DB;.  assert( pO
1da50 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73  p->p1>=0 );.  as
1da60 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30  sert( pOp->p2>=0
1da70 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f   );.  pCx = allo
1da80 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f  cateCursor(p, pO
1da90 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20  p->p1, pOp->p2, 
1daa0 2d 31 2c 20 43 55 52 54 59 50 45 5f 42 54 52 45  -1, CURTYPE_BTRE
1dab0 45 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30  E);.  if( pCx==0
1dac0 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
1dad0 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d    pCx->nullRow =
1dae0 20 31 3b 0a 20 20 70 43 78 2d 3e 69 73 45 70 68   1;.  pCx->isEph
1daf0 65 6d 65 72 61 6c 20 3d 20 31 3b 0a 20 20 72 63  emeral = 1;.  rc
1db00 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4f   = sqlite3BtreeO
1db10 70 65 6e 28 64 62 2d 3e 70 56 66 73 2c 20 30 2c  pen(db->pVfs, 0,
1db20 20 64 62 2c 20 26 70 43 78 2d 3e 70 42 74 78 2c   db, &pCx->pBtx,
1db30 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
1db40 20 20 20 20 20 20 20 20 20 20 42 54 52 45 45 5f            BTREE_
1db50 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20 7c 20 42  OMIT_JOURNAL | B
1db60 54 52 45 45 5f 53 49 4e 47 4c 45 20 7c 20 70 4f  TREE_SINGLE | pO
1db70 70 2d 3e 70 35 2c 20 76 66 73 46 6c 61 67 73 29  p->p5, vfsFlags)
1db80 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
1db90 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63 20  TE_OK ){.    rc 
1dba0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 42 65  = sqlite3BtreeBe
1dbb0 67 69 6e 54 72 61 6e 73 28 70 43 78 2d 3e 70 42  ginTrans(pCx->pB
1dbc0 74 78 2c 20 31 29 3b 0a 20 20 7d 0a 20 20 69 66  tx, 1);.  }.  if
1dbd0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
1dbe0 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 61 20 74  ){.    /* If a t
1dbf0 72 61 6e 73 69 65 6e 74 20 69 6e 64 65 78 20 69  ransient index i
1dc00 73 20 72 65 71 75 69 72 65 64 2c 20 63 72 65 61  s required, crea
1dc10 74 65 20 69 74 20 62 79 20 63 61 6c 6c 69 6e 67  te it by calling
1dc20 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 42  .    ** sqlite3B
1dc30 74 72 65 65 43 72 65 61 74 65 54 61 62 6c 65 28  treeCreateTable(
1dc40 29 20 77 69 74 68 20 74 68 65 20 42 54 52 45 45  ) with the BTREE
1dc50 5f 42 4c 4f 42 4b 45 59 20 66 6c 61 67 20 62 65  _BLOBKEY flag be
1dc60 66 6f 72 65 0a 20 20 20 20 2a 2a 20 6f 70 65 6e  fore.    ** open
1dc70 69 6e 67 20 69 74 2e 20 49 66 20 61 20 74 72 61  ing it. If a tra
1dc80 6e 73 69 65 6e 74 20 74 61 62 6c 65 20 69 73 20  nsient table is 
1dc90 72 65 71 75 69 72 65 64 2c 20 6a 75 73 74 20 75  required, just u
1dca0 73 65 20 74 68 65 0a 20 20 20 20 2a 2a 20 61 75  se the.    ** au
1dcb0 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61  tomatically crea
1dcc0 74 65 64 20 74 61 62 6c 65 20 77 69 74 68 20 72  ted table with r
1dcd0 6f 6f 74 2d 70 61 67 65 20 31 20 28 61 6e 20 42  oot-page 1 (an B
1dce0 4c 4f 42 5f 49 4e 54 4b 45 59 20 74 61 62 6c 65  LOB_INTKEY table
1dcf0 29 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  )..    */.    if
1dd00 28 20 28 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f  ( (pCx->pKeyInfo
1dd10 20 3d 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f   = pKeyInfo = pO
1dd20 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 29 21  p->p4.pKeyInfo)!
1dd30 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20  =0 ){.      int 
1dd40 70 67 6e 6f 3b 0a 20 20 20 20 20 20 61 73 73 65  pgno;.      asse
1dd50 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
1dd60 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20  =P4_KEYINFO );. 
1dd70 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1dd80 33 42 74 72 65 65 43 72 65 61 74 65 54 61 62 6c  3BtreeCreateTabl
1dd90 65 28 70 43 78 2d 3e 70 42 74 78 2c 20 26 70 67  e(pCx->pBtx, &pg
1dda0 6e 6f 2c 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45  no, BTREE_BLOBKE
1ddb0 59 20 7c 20 70 4f 70 2d 3e 70 35 29 3b 20 0a 20  Y | pOp->p5); . 
1ddc0 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
1ddd0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
1dde0 20 20 61 73 73 65 72 74 28 20 70 67 6e 6f 3d 3d    assert( pgno==
1ddf0 4d 41 53 54 45 52 5f 52 4f 4f 54 2b 31 20 29 3b  MASTER_ROOT+1 );
1de00 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1de10 20 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64   pKeyInfo->db==d
1de20 62 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  b );.        ass
1de30 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 65  ert( pKeyInfo->e
1de40 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20  nc==ENC(db) );. 
1de50 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
1de60 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70  te3BtreeCursor(p
1de70 43 78 2d 3e 70 42 74 78 2c 20 70 67 6e 6f 2c 20  Cx->pBtx, pgno, 
1de80 42 54 52 45 45 5f 57 52 43 53 52 2c 0a 20 20 20  BTREE_WRCSR,.   
1de90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dea0 20 20 20 20 20 20 20 20 20 20 20 20 20 70 4b 65               pKe
1deb0 79 49 6e 66 6f 2c 20 70 43 78 2d 3e 75 63 2e 70  yInfo, pCx->uc.p
1dec0 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 7d  Cursor);.      }
1ded0 0a 20 20 20 20 20 20 70 43 78 2d 3e 69 73 54 61  .      pCx->isTa
1dee0 62 6c 65 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c  ble = 0;.    }el
1def0 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73  se{.      rc = s
1df00 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
1df10 72 28 70 43 78 2d 3e 70 42 74 78 2c 20 4d 41 53  r(pCx->pBtx, MAS
1df20 54 45 52 5f 52 4f 4f 54 2c 20 42 54 52 45 45 5f  TER_ROOT, BTREE_
1df30 57 52 43 53 52 2c 0a 20 20 20 20 20 20 20 20 20  WRCSR,.         
1df40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df50 20 20 20 20 20 30 2c 20 70 43 78 2d 3e 75 63 2e       0, pCx->uc.
1df60 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20  pCursor);.      
1df70 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31  pCx->isTable = 1
1df80 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66  ;.    }.  }.  if
1df90 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
1dfa0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1dfb0 20 20 70 43 78 2d 3e 69 73 4f 72 64 65 72 65 64    pCx->isOrdered
1dfc0 20 3d 20 28 70 4f 70 2d 3e 70 35 21 3d 42 54 52   = (pOp->p5!=BTR
1dfd0 45 45 5f 55 4e 4f 52 44 45 52 45 44 29 3b 0a 20  EE_UNORDERED);. 
1dfe0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1dff0 63 6f 64 65 3a 20 53 6f 72 74 65 72 4f 70 65 6e  code: SorterOpen
1e000 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
1e010 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
1e020 20 77 6f 72 6b 73 20 6c 69 6b 65 20 4f 50 5f 4f   works like OP_O
1e030 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 65 78 63  penEphemeral exc
1e040 65 70 74 20 74 68 61 74 20 69 74 20 6f 70 65 6e  ept that it open
1e050 73 0a 2a 2a 20 61 20 74 72 61 6e 73 69 65 6e 74  s.** a transient
1e060 20 69 6e 64 65 78 20 74 68 61 74 20 69 73 20 73   index that is s
1e070 70 65 63 69 66 69 63 61 6c 6c 79 20 64 65 73 69  pecifically desi
1e080 67 6e 65 64 20 74 6f 20 73 6f 72 74 20 6c 61 72  gned to sort lar
1e090 67 65 0a 2a 2a 20 74 61 62 6c 65 73 20 75 73 69  ge.** tables usi
1e0a0 6e 67 20 61 6e 20 65 78 74 65 72 6e 61 6c 20 6d  ng an external m
1e0b0 65 72 67 65 2d 73 6f 72 74 20 61 6c 67 6f 72 69  erge-sort algori
1e0c0 74 68 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 72  thm..**.** If ar
1e0d0 67 75 6d 65 6e 74 20 50 33 20 69 73 20 6e 6f 6e  gument P3 is non
1e0e0 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74 20 69  -zero, then it i
1e0f0 6e 64 69 63 61 74 65 73 20 74 68 61 74 20 74 68  ndicates that th
1e100 65 20 73 6f 72 74 65 72 20 6d 61 79 0a 2a 2a 20  e sorter may.** 
1e110 61 73 73 75 6d 65 20 74 68 61 74 20 61 20 73 74  assume that a st
1e120 61 62 6c 65 20 73 6f 72 74 20 63 6f 6e 73 69 64  able sort consid
1e130 65 72 69 6e 67 20 74 68 65 20 66 69 72 73 74 20  ering the first 
1e140 50 33 20 66 69 65 6c 64 73 20 6f 66 20 65 61 63  P3 fields of eac
1e150 68 0a 2a 2a 20 6b 65 79 20 69 73 20 73 75 66 66  h.** key is suff
1e160 69 63 69 65 6e 74 20 74 6f 20 70 72 6f 64 75 63  icient to produc
1e170 65 20 74 68 65 20 72 65 71 75 69 72 65 64 20 72  e the required r
1e180 65 73 75 6c 74 73 2e 0a 2a 2f 0a 63 61 73 65 20  esults..*/.case 
1e190 4f 50 5f 53 6f 72 74 65 72 4f 70 65 6e 3a 20 7b  OP_SorterOpen: {
1e1a0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1e1b0 43 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  Cx;..  assert( p
1e1c0 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61  Op->p1>=0 );.  a
1e1d0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d  ssert( pOp->p2>=
1e1e0 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c  0 );.  pCx = all
1e1f0 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70  ocateCursor(p, p
1e200 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c  Op->p1, pOp->p2,
1e210 20 2d 31 2c 20 43 55 52 54 59 50 45 5f 53 4f 52   -1, CURTYPE_SOR
1e220 54 45 52 29 3b 0a 20 20 69 66 28 20 70 43 78 3d  TER);.  if( pCx=
1e230 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
1e240 3b 0a 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66  ;.  pCx->pKeyInf
1e250 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79  o = pOp->p4.pKey
1e260 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28 20  Info;.  assert( 
1e270 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 64  pCx->pKeyInfo->d
1e280 62 3d 3d 64 62 20 29 3b 0a 20 20 61 73 73 65 72  b==db );.  asser
1e290 74 28 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f  t( pCx->pKeyInfo
1e2a0 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29  ->enc==ENC(db) )
1e2b0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
1e2c0 56 64 62 65 53 6f 72 74 65 72 49 6e 69 74 28 64  VdbeSorterInit(d
1e2d0 62 2c 20 70 4f 70 2d 3e 70 33 2c 20 70 43 78 29  b, pOp->p3, pCx)
1e2e0 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
1e2f0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1e300 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  rror;.  break;.}
1e310 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71  ../* Opcode: Seq
1e320 75 65 6e 63 65 54 65 73 74 20 50 31 20 50 32 20  uenceTest P1 P2 
1e330 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
1e340 73 3a 20 69 66 28 20 63 75 72 73 6f 72 5b 50 31  s: if( cursor[P1
1e350 5d 2e 63 74 72 2b 2b 20 29 20 70 63 20 3d 20 50  ].ctr++ ) pc = P
1e360 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20  2.**.** P1 is a 
1e370 73 6f 72 74 65 72 20 63 75 72 73 6f 72 2e 20 49  sorter cursor. I
1e380 66 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 63  f the sequence c
1e390 6f 75 6e 74 65 72 20 69 73 20 63 75 72 72 65 6e  ounter is curren
1e3a0 74 6c 79 20 7a 65 72 6f 2c 20 6a 75 6d 70 0a 2a  tly zero, jump.*
1e3b0 2a 20 74 6f 20 50 32 2e 20 52 65 67 61 72 64 6c  * to P2. Regardl
1e3c0 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f  ess of whether o
1e3d0 72 20 6e 6f 74 20 74 68 65 20 6a 75 6d 70 20 69  r not the jump i
1e3e0 73 20 74 61 6b 65 6e 2c 20 69 6e 63 72 65 6d 65  s taken, increme
1e3f0 6e 74 20 74 68 65 0a 2a 2a 20 74 68 65 20 73 65  nt the.** the se
1e400 71 75 65 6e 63 65 20 76 61 6c 75 65 2e 0a 2a 2f  quence value..*/
1e410 0a 63 61 73 65 20 4f 50 5f 53 65 71 75 65 6e 63  .case OP_Sequenc
1e420 65 54 65 73 74 3a 20 7b 0a 20 20 56 64 62 65 43  eTest: {.  VdbeC
1e430 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 61 73 73  ursor *pC;.  ass
1e440 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1e450 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
1e460 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
1e470 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1e480 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53  ];.  assert( isS
1e490 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20 69  orter(pC) );.  i
1e4a0 66 28 20 28 70 43 2d 3e 73 65 71 43 6f 75 6e 74  f( (pC->seqCount
1e4b0 2b 2b 29 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f  ++)==0 ){.    go
1e4c0 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
1e4d0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
1e4e0 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 50 73  * Opcode: OpenPs
1e4f0 65 75 64 6f 20 50 31 20 50 32 20 50 33 20 2a 20  eudo P1 P2 P3 * 
1e500 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 50  *.** Synopsis: P
1e510 33 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 72 5b 50  3 columns in r[P
1e520 32 5d 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20  2].**.** Open a 
1e530 6e 65 77 20 63 75 72 73 6f 72 20 74 68 61 74 20  new cursor that 
1e540 70 6f 69 6e 74 73 20 74 6f 20 61 20 66 61 6b 65  points to a fake
1e550 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74   table that cont
1e560 61 69 6e 73 20 61 20 73 69 6e 67 6c 65 0a 2a 2a  ains a single.**
1e570 20 72 6f 77 20 6f 66 20 64 61 74 61 2e 20 20 54   row of data.  T
1e580 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68  he content of th
1e590 61 74 20 6f 6e 65 20 72 6f 77 20 69 73 20 74 68  at one row is th
1e5a0 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 6d 65 6d  e content of mem
1e5b0 6f 72 79 0a 2a 2a 20 72 65 67 69 73 74 65 72 20  ory.** register 
1e5c0 50 32 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  P2.  In other wo
1e5d0 72 64 73 2c 20 63 75 72 73 6f 72 20 50 31 20 62  rds, cursor P1 b
1e5e0 65 63 6f 6d 65 73 20 61 6e 20 61 6c 69 61 73 20  ecomes an alias 
1e5f0 66 6f 72 20 74 68 65 20 0a 2a 2a 20 4d 45 4d 5f  for the .** MEM_
1e600 42 6c 6f 62 20 63 6f 6e 74 65 6e 74 20 63 6f 6e  Blob content con
1e610 74 61 69 6e 65 64 20 69 6e 20 72 65 67 69 73 74  tained in regist
1e620 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41 20 70  er P2..**.** A p
1e630 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 72 65 61  seudo-table crea
1e640 74 65 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f  ted by this opco
1e650 64 65 20 69 73 20 75 73 65 64 20 74 6f 20 68 6f  de is used to ho
1e660 6c 64 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72  ld a single.** r
1e670 6f 77 20 6f 75 74 70 75 74 20 66 72 6f 6d 20 74  ow output from t
1e680 68 65 20 73 6f 72 74 65 72 20 73 6f 20 74 68 61  he sorter so tha
1e690 74 20 74 68 65 20 72 6f 77 20 63 61 6e 20 62 65  t the row can be
1e6a0 20 64 65 63 6f 6d 70 6f 73 65 64 20 69 6e 74 6f   decomposed into
1e6b0 0a 2a 2a 20 69 6e 64 69 76 69 64 75 61 6c 20 63  .** individual c
1e6c0 6f 6c 75 6d 6e 73 20 75 73 69 6e 67 20 74 68 65  olumns using the
1e6d0 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64   OP_Column opcod
1e6e0 65 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75 6d  e.  The OP_Colum
1e6f0 6e 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 74  n opcode.** is t
1e700 68 65 20 6f 6e 6c 79 20 63 75 72 73 6f 72 20 6f  he only cursor o
1e710 70 63 6f 64 65 20 74 68 61 74 20 77 6f 72 6b 73  pcode that works
1e720 20 77 69 74 68 20 61 20 70 73 65 75 64 6f 2d 74   with a pseudo-t
1e730 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69  able..**.** P3 i
1e740 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
1e750 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65  fields in the re
1e760 63 6f 72 64 73 20 74 68 61 74 20 77 69 6c 6c 20  cords that will 
1e770 62 65 20 73 74 6f 72 65 64 20 62 79 0a 2a 2a 20  be stored by.** 
1e780 74 68 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  the pseudo-table
1e790 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65  ..*/.case OP_Ope
1e7a0 6e 50 73 65 75 64 6f 3a 20 7b 0a 20 20 56 64 62  nPseudo: {.  Vdb
1e7b0 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 20  eCursor *pCx;.. 
1e7c0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1e7d0 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  >=0 );.  assert(
1e7e0 20 70 4f 70 2d 3e 70 33 3e 3d 30 20 29 3b 0a 20   pOp->p3>=0 );. 
1e7f0 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43   pCx = allocateC
1e800 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31  ursor(p, pOp->p1
1e810 2c 20 70 4f 70 2d 3e 70 33 2c 20 2d 31 2c 20 43  , pOp->p3, -1, C
1e820 55 52 54 59 50 45 5f 50 53 45 55 44 4f 29 3b 0a  URTYPE_PSEUDO);.
1e830 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67    if( pCx==0 ) g
1e840 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43  oto no_mem;.  pC
1e850 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a  x->nullRow = 1;.
1e860 20 20 70 43 78 2d 3e 73 65 65 6b 52 65 73 75 6c    pCx->seekResul
1e870 74 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70  t = pOp->p2;.  p
1e880 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b  Cx->isTable = 1;
1e890 0a 20 20 2f 2a 20 47 69 76 65 20 74 68 69 73 20  .  /* Give this 
1e8a0 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 20 61 20  pseudo-cursor a 
1e8b0 66 61 6b 65 20 42 74 43 75 72 73 6f 72 20 70 6f  fake BtCursor po
1e8c0 69 6e 74 65 72 20 73 6f 20 74 68 61 74 20 70 43  inter so that pC
1e8d0 78 0a 20 20 2a 2a 20 63 61 6e 20 62 65 20 73 61  x.  ** can be sa
1e8e0 66 65 6c 79 20 70 61 73 73 65 64 20 74 6f 20 73  fely passed to s
1e8f0 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72  qlite3VdbeCursor
1e900 4d 6f 76 65 74 6f 28 29 2e 20 20 54 68 69 73 20  Moveto().  This 
1e910 61 76 6f 69 64 73 20 61 20 74 65 73 74 0a 20 20  avoids a test.  
1e920 2a 2a 20 66 6f 72 20 70 43 78 2d 3e 65 43 75 72  ** for pCx->eCur
1e930 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
1e940 52 45 45 20 69 6e 73 69 64 65 20 6f 66 20 73 71  REE inside of sq
1e950 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
1e960 6f 76 65 74 6f 28 29 0a 20 20 2a 2a 20 77 68 69  oveto().  ** whi
1e970 63 68 20 69 73 20 61 20 70 65 72 66 6f 72 6d 61  ch is a performa
1e980 6e 63 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  nce optimization
1e990 20 2a 2f 0a 20 20 70 43 78 2d 3e 75 63 2e 70 43   */.  pCx->uc.pC
1e9a0 75 72 73 6f 72 20 3d 20 73 71 6c 69 74 65 33 42  ursor = sqlite3B
1e9b0 74 72 65 65 46 61 6b 65 56 61 6c 69 64 43 75 72  treeFakeValidCur
1e9c0 73 6f 72 28 29 3b 0a 20 20 61 73 73 65 72 74 28  sor();.  assert(
1e9d0 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20   pOp->p5==0 );. 
1e9e0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1e9f0 63 6f 64 65 3a 20 43 6c 6f 73 65 20 50 31 20 2a  code: Close P1 *
1ea00 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6c 6f   * * *.**.** Clo
1ea10 73 65 20 61 20 63 75 72 73 6f 72 20 70 72 65 76  se a cursor prev
1ea20 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 61 73  iously opened as
1ea30 20 50 31 2e 20 20 49 66 20 50 31 20 69 73 20 6e   P1.  If P1 is n
1ea40 6f 74 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20  ot.** currently 
1ea50 6f 70 65 6e 2c 20 74 68 69 73 20 69 6e 73 74 72  open, this instr
1ea60 75 63 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f  uction is a no-o
1ea70 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c  p..*/.case OP_Cl
1ea80 6f 73 65 3a 20 7b 0a 20 20 61 73 73 65 72 74 28  ose: {.  assert(
1ea90 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
1eaa0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
1eab0 72 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  r );.  sqlite3Vd
1eac0 62 65 46 72 65 65 43 75 72 73 6f 72 28 70 2c 20  beFreeCursor(p, 
1ead0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1eae0 5d 29 3b 0a 20 20 70 2d 3e 61 70 43 73 72 5b 70  ]);.  p->apCsr[p
1eaf0 4f 70 2d 3e 70 31 5d 20 3d 20 30 3b 0a 20 20 62  Op->p1] = 0;.  b
1eb00 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 64 65 66 20  reak;.}..#ifdef 
1eb10 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f  SQLITE_ENABLE_CO
1eb20 4c 55 4d 4e 5f 55 53 45 44 5f 4d 41 53 4b 0a 2f  LUMN_USED_MASK./
1eb30 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e  * Opcode: Column
1eb40 73 55 73 65 64 20 50 31 20 2a 20 2a 20 50 34 20  sUsed P1 * * P4 
1eb50 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  *.**.** This opc
1eb60 6f 64 65 20 28 77 68 69 63 68 20 6f 6e 6c 79 20  ode (which only 
1eb70 65 78 69 73 74 73 20 69 66 20 53 51 4c 69 74 65  exists if SQLite
1eb80 20 77 61 73 20 63 6f 6d 70 69 6c 65 64 20 77 69   was compiled wi
1eb90 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41  th.** SQLITE_ENA
1eba0 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 55 53 45 44 5f  BLE_COLUMN_USED_
1ebb0 4d 41 53 4b 29 20 69 64 65 6e 74 69 66 69 65 73  MASK) identifies
1ebc0 20 77 68 69 63 68 20 63 6f 6c 75 6d 6e 73 20 6f   which columns o
1ebd0 66 20 74 68 65 0a 2a 2a 20 74 61 62 6c 65 20 6f  f the.** table o
1ebe0 72 20 69 6e 64 65 78 20 66 6f 72 20 63 75 72 73  r index for curs
1ebf0 6f 72 20 50 31 20 61 72 65 20 75 73 65 64 2e 20  or P1 are used. 
1ec00 20 50 34 20 69 73 20 61 20 36 34 2d 62 69 74 20   P4 is a 64-bit 
1ec10 69 6e 74 65 67 65 72 0a 2a 2a 20 28 50 34 5f 49  integer.** (P4_I
1ec20 4e 54 36 34 29 20 69 6e 20 77 68 69 63 68 20 74  NT64) in which t
1ec30 68 65 20 66 69 72 73 74 20 36 33 20 62 69 74 73  he first 63 bits
1ec40 20 61 72 65 20 6f 6e 65 20 66 6f 72 20 65 61 63   are one for eac
1ec50 68 20 6f 66 20 74 68 65 0a 2a 2a 20 66 69 72 73  h of the.** firs
1ec60 74 20 36 33 20 63 6f 6c 75 6d 6e 73 20 6f 66 20  t 63 columns of 
1ec70 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
1ec80 65 78 20 74 68 61 74 20 61 72 65 20 61 63 74 75  ex that are actu
1ec90 61 6c 6c 79 20 75 73 65 64 0a 2a 2a 20 62 79 20  ally used.** by 
1eca0 74 68 65 20 63 75 72 73 6f 72 2e 20 20 54 68 65  the cursor.  The
1ecb0 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20   high-order bit 
1ecc0 69 73 20 73 65 74 20 69 66 20 61 6e 79 20 63 6f  is set if any co
1ecd0 6c 75 6d 6e 20 61 66 74 65 72 0a 2a 2a 20 74 68  lumn after.** th
1ece0 65 20 36 34 74 68 20 69 73 20 75 73 65 64 2e 0a  e 64th is used..
1ecf0 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 75 6d  */.case OP_Colum
1ed00 6e 73 55 73 65 64 3a 20 7b 0a 20 20 56 64 62 65  nsUsed: {.  Vdbe
1ed10 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 70 43  Cursor *pC;.  pC
1ed20 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
1ed30 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
1ed40 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
1ed50 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
1ed60 20 70 43 2d 3e 6d 61 73 6b 55 73 65 64 20 3d 20   pC->maskUsed = 
1ed70 2a 28 75 36 34 2a 29 70 4f 70 2d 3e 70 34 2e 70  *(u64*)pOp->p4.p
1ed80 49 36 34 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  I64;.  break;.}.
1ed90 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64  #endif../* Opcod
1eda0 65 3a 20 53 65 65 6b 47 45 20 50 31 20 50 32 20  e: SeekGE P1 P2 
1edb0 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
1edc0 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
1edd0 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f  ].**.** If curso
1ede0 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61  r P1 refers to a
1edf0 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54  n SQL table (B-T
1ee00 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e  ree that uses in
1ee10 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a  teger keys), .**
1ee20 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69   use the value i
1ee30 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73  n register P3 as
1ee40 20 74 68 65 20 6b 65 79 2e 20 20 49 66 20 63 75   the key.  If cu
1ee50 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a  rsor P1 refers .
1ee60 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64  ** to an SQL ind
1ee70 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74  ex, then P3 is t
1ee80 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61  he first in an a
1ee90 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73  rray of P4 regis
1eea0 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72  ters .** that ar
1eeb0 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70  e used as an unp
1eec0 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e  acked index key.
1eed0 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69   .**.** Repositi
1eee0 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  on cursor P1 so 
1eef0 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20  that  it points 
1ef00 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20  to the smallest 
1ef10 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69  entry that .** i
1ef20 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f  s greater than o
1ef30 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
1ef40 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65  ey value. If the
1ef50 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64  re are no record
1ef60 73 20 0a 2a 2a 20 67 72 65 61 74 65 72 20 74 68  s .** greater th
1ef70 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
1ef80 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73  he key and P2 is
1ef90 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20   not zero, then 
1efa0 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  jump to P2..**.*
1efb0 2a 20 49 66 20 74 68 65 20 63 75 72 73 6f 72 20  * If the cursor 
1efc0 50 31 20 77 61 73 20 6f 70 65 6e 65 64 20 75 73  P1 was opened us
1efd0 69 6e 67 20 74 68 65 20 4f 50 46 4c 41 47 5f 53  ing the OPFLAG_S
1efe0 45 45 4b 45 51 20 66 6c 61 67 2c 20 74 68 65 6e  EEKEQ flag, then
1eff0 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 20   this.** opcode 
1f000 77 69 6c 6c 20 61 6c 77 61 79 73 20 6c 61 6e 64  will always land
1f010 20 6f 6e 20 61 20 72 65 63 6f 72 64 20 74 68 61   on a record tha
1f020 74 20 65 71 75 61 6c 6c 79 20 65 71 75 61 6c 73  t equally equals
1f030 20 74 68 65 20 6b 65 79 2c 20 6f 72 0a 2a 2a 20   the key, or.** 
1f040 65 6c 73 65 20 6a 75 6d 70 20 69 6d 6d 65 64 69  else jump immedi
1f050 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 57 68  ately to P2.  Wh
1f060 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  en the cursor is
1f070 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 2c 20   OPFLAG_SEEKEQ, 
1f080 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 20 6d  this.** opcode m
1f090 75 73 74 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20  ust be followed 
1f0a0 62 79 20 61 6e 20 49 64 78 4c 45 20 6f 70 63 6f  by an IdxLE opco
1f0b0 64 65 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  de with the same
1f0c0 20 61 72 67 75 6d 65 6e 74 73 2e 0a 2a 2a 20 54   arguments..** T
1f0d0 68 65 20 49 64 78 4c 45 20 6f 70 63 6f 64 65 20  he IdxLE opcode 
1f0e0 77 69 6c 6c 20 62 65 20 73 6b 69 70 70 65 64 20  will be skipped 
1f0f0 69 66 20 74 68 69 73 20 6f 70 63 6f 64 65 20 73  if this opcode s
1f100 75 63 63 65 65 64 73 2c 20 62 75 74 20 74 68 65  ucceeds, but the
1f110 0a 2a 2a 20 49 64 78 4c 45 20 6f 70 63 6f 64 65  .** IdxLE opcode
1f120 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 6f 6e   will be used on
1f130 20 73 75 62 73 65 71 75 65 6e 74 20 6c 6f 6f 70   subsequent loop
1f140 20 69 74 65 72 61 74 69 6f 6e 73 2e 0a 2a 2a 0a   iterations..**.
1f150 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c  ** This opcode l
1f160 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
1f170 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d   configured to m
1f180 6f 76 65 20 69 6e 20 66 6f 72 77 61 72 64 20 6f  ove in forward o
1f190 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68  rder,.** from th
1f1a0 65 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61  e beginning towa
1f1b0 72 64 20 74 68 65 20 65 6e 64 2e 20 20 49 6e 20  rd the end.  In 
1f1c0 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
1f1d0 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f   cursor is.** co
1f1e0 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20  nfigured to use 
1f1f0 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a  Next, not Prev..
1f200 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
1f210 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c  Found, NotFound,
1f220 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47 74 2c   SeekLt, SeekGt,
1f230 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70   SeekLe.*/./* Op
1f240 63 6f 64 65 3a 20 53 65 65 6b 47 54 20 50 31 20  code: SeekGT P1 
1f250 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
1f260 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
1f270 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75  @P4].**.** If cu
1f280 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74  rsor P1 refers t
1f290 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28  o an SQL table (
1f2a0 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73  B-Tree that uses
1f2b0 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20   integer keys), 
1f2c0 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75  .** use the valu
1f2d0 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  e in register P3
1f2e0 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75   as a key. If cu
1f2f0 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a  rsor P1 refers .
1f300 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64  ** to an SQL ind
1f310 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74  ex, then P3 is t
1f320 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61  he first in an a
1f330 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73  rray of P4 regis
1f340 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72  ters .** that ar
1f350 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70  e used as an unp
1f360 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e  acked index key.
1f370 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69   .**.** Repositi
1f380 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  on cursor P1 so 
1f390 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20  that  it points 
1f3a0 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20  to the smallest 
1f3b0 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69  entry that .** i
1f3c0 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74  s greater than t
1f3d0 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66  he key value. If
1f3e0 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65   there are no re
1f3f0 63 6f 72 64 73 20 67 72 65 61 74 65 72 20 74 68  cords greater th
1f400 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61  an .** the key a
1f410 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72  nd P2 is not zer
1f420 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  o, then jump to 
1f430 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  P2..**.** This o
1f440 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65  pcode leaves the
1f450 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72   cursor configur
1f460 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66 6f  ed to move in fo
1f470 72 77 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a 20  rward order,.** 
1f480 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69  from the beginni
1f490 6e 67 20 74 6f 77 61 72 64 20 74 68 65 20 65 6e  ng toward the en
1f4a0 64 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  d.  In other wor
1f4b0 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69  ds, the cursor i
1f4c0 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20  s.** configured 
1f4d0 74 6f 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f 74  to use Next, not
1f4e0 20 50 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53 65 65   Prev..**.** See
1f4f0 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
1f500 74 46 6f 75 6e 64 2c 20 53 65 65 6b 4c 74 2c 20  tFound, SeekLt, 
1f510 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a  SeekGe, SeekLe.*
1f520 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65  /./* Opcode: See
1f530 6b 4c 54 20 50 31 20 50 32 20 50 33 20 50 34 20  kLT P1 P2 P3 P4 
1f540 2a 20 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  * .** Synopsis: 
1f550 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
1f560 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  ** If cursor P1 
1f570 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c  refers to an SQL
1f580 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74   table (B-Tree t
1f590 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72  hat uses integer
1f5a0 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20   keys), .** use 
1f5b0 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
1f5c0 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b 65  ister P3 as a ke
1f5d0 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  y. If cursor P1 
1f5e0 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e  refers .** to an
1f5f0 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e   SQL index, then
1f600 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74   P3 is the first
1f610 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20   in an array of 
1f620 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a  P4 registers .**
1f630 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61   that are used a
1f640 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  s an unpacked in
1f650 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20  dex key. .**.** 
1f660 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f  Reposition curso
1f670 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69 74  r P1 so that  it
1f680 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6c   points to the l
1f690 61 72 67 65 73 74 20 65 6e 74 72 79 20 74 68 61  argest entry tha
1f6a0 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68  t .** is less th
1f6b0 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  an the key value
1f6c0 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e  . If there are n
1f6d0 6f 20 72 65 63 6f 72 64 73 20 6c 65 73 73 20 74  o records less t
1f6e0 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20  han .** the key 
1f6f0 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65  and P2 is not ze
1f700 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  ro, then jump to
1f710 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P2..**.** This 
1f720 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68  opcode leaves th
1f730 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75  e cursor configu
1f740 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72  red to move in r
1f750 65 76 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a  everse order,.**
1f760 20 66 72 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f   from the end to
1f770 77 61 72 64 20 74 68 65 20 62 65 67 69 6e 6e 69  ward the beginni
1f780 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  ng.  In other wo
1f790 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20  rds, the cursor 
1f7a0 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64  is.** configured
1f7b0 20 74 6f 20 75 73 65 20 50 72 65 76 2c 20 6e 6f   to use Prev, no
1f7c0 74 20 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 53 65  t Next..**.** Se
1f7d0 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
1f7e0 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 47 74 2c  otFound, SeekGt,
1f7f0 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a   SeekGe, SeekLe.
1f800 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  */./* Opcode: Se
1f810 65 6b 4c 45 20 50 31 20 50 32 20 50 33 20 50 34  ekLE P1 P2 P3 P4
1f820 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
1f830 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
1f840 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  ** If cursor P1 
1f850 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c  refers to an SQL
1f860 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74   table (B-Tree t
1f870 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72  hat uses integer
1f880 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20   keys), .** use 
1f890 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
1f8a0 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b 65  ister P3 as a ke
1f8b0 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  y. If cursor P1 
1f8c0 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e  refers .** to an
1f8d0 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e   SQL index, then
1f8e0 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74   P3 is the first
1f8f0 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20   in an array of 
1f900 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a  P4 registers .**
1f910 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61   that are used a
1f920 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  s an unpacked in
1f930 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20  dex key. .**.** 
1f940 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f  Reposition curso
1f950 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20  r P1 so that it 
1f960 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6c 61  points to the la
1f970 72 67 65 73 74 20 65 6e 74 72 79 20 74 68 61 74  rgest entry that
1f980 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61   .** is less tha
1f990 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
1f9a0 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20  e key value. If 
1f9b0 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63  there are no rec
1f9c0 6f 72 64 73 20 0a 2a 2a 20 6c 65 73 73 20 74 68  ords .** less th
1f9d0 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
1f9e0 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73  he key and P2 is
1f9f0 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20   not zero, then 
1fa00 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  jump to P2..**.*
1fa10 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65  * This opcode le
1fa20 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20  aves the cursor 
1fa30 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f  configured to mo
1fa40 76 65 20 69 6e 20 72 65 76 65 72 73 65 20 6f 72  ve in reverse or
1fa50 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65  der,.** from the
1fa60 20 65 6e 64 20 74 6f 77 61 72 64 20 74 68 65 20   end toward the 
1fa70 62 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f  beginning.  In o
1fa80 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
1fa90 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e  cursor is.** con
1faa0 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 50  figured to use P
1fab0 72 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a  rev, not Next..*
1fac0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 75 72 73  *.** If the curs
1fad0 6f 72 20 50 31 20 77 61 73 20 6f 70 65 6e 65 64  or P1 was opened
1fae0 20 75 73 69 6e 67 20 74 68 65 20 4f 50 46 4c 41   using the OPFLA
1faf0 47 5f 53 45 45 4b 45 51 20 66 6c 61 67 2c 20 74  G_SEEKEQ flag, t
1fb00 68 65 6e 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f  hen this.** opco
1fb10 64 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 6c  de will always l
1fb20 61 6e 64 20 6f 6e 20 61 20 72 65 63 6f 72 64 20  and on a record 
1fb30 74 68 61 74 20 65 71 75 61 6c 6c 79 20 65 71 75  that equally equ
1fb40 61 6c 73 20 74 68 65 20 6b 65 79 2c 20 6f 72 0a  als the key, or.
1fb50 2a 2a 20 65 6c 73 65 20 6a 75 6d 70 20 69 6d 6d  ** else jump imm
1fb60 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20  ediately to P2. 
1fb70 20 57 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72   When the cursor
1fb80 20 69 73 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45   is OPFLAG_SEEKE
1fb90 51 2c 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64  Q, this.** opcod
1fba0 65 20 6d 75 73 74 20 62 65 20 66 6f 6c 6c 6f 77  e must be follow
1fbb0 65 64 20 62 79 20 61 6e 20 49 64 78 47 45 20 6f  ed by an IdxGE o
1fbc0 70 63 6f 64 65 20 77 69 74 68 20 74 68 65 20 73  pcode with the s
1fbd0 61 6d 65 20 61 72 67 75 6d 65 6e 74 73 2e 0a 2a  ame arguments..*
1fbe0 2a 20 54 68 65 20 49 64 78 47 45 20 6f 70 63 6f  * The IdxGE opco
1fbf0 64 65 20 77 69 6c 6c 20 62 65 20 73 6b 69 70 70  de will be skipp
1fc00 65 64 20 69 66 20 74 68 69 73 20 6f 70 63 6f 64  ed if this opcod
1fc10 65 20 73 75 63 63 65 65 64 73 2c 20 62 75 74 20  e succeeds, but 
1fc20 74 68 65 0a 2a 2a 20 49 64 78 47 45 20 6f 70 63  the.** IdxGE opc
1fc30 6f 64 65 20 77 69 6c 6c 20 62 65 20 75 73 65 64  ode will be used
1fc40 20 6f 6e 20 73 75 62 73 65 71 75 65 6e 74 20 6c   on subsequent l
1fc50 6f 6f 70 20 69 74 65 72 61 74 69 6f 6e 73 2e 0a  oop iterations..
1fc60 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
1fc70 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c  Found, NotFound,
1fc80 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c   SeekGt, SeekGe,
1fc90 20 53 65 65 6b 4c 74 0a 2a 2f 0a 63 61 73 65 20   SeekLt.*/.case 
1fca0 4f 50 5f 53 65 65 6b 4c 54 3a 20 20 20 20 20 20  OP_SeekLT:      
1fcb0 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
1fcc0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c  */.case OP_SeekL
1fcd0 45 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  E:         /* ju
1fce0 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  mp, in3 */.case 
1fcf0 4f 50 5f 53 65 65 6b 47 45 3a 20 20 20 20 20 20  OP_SeekGE:      
1fd00 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
1fd10 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 47  */.case OP_SeekG
1fd20 54 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75  T: {       /* ju
1fd30 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74  mp, in3 */.  int
1fd40 20 72 65 73 3b 20 20 20 20 20 20 20 20 20 20 20   res;           
1fd50 2f 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20 72 65  /* Comparison re
1fd60 73 75 6c 74 20 2a 2f 0a 20 20 69 6e 74 20 6f 63  sult */.  int oc
1fd70 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1fd80 4f 70 63 6f 64 65 20 2a 2f 0a 20 20 56 64 62 65  Opcode */.  Vdbe
1fd90 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 2f  Cursor *pC;    /
1fda0 2a 20 54 68 65 20 63 75 72 73 6f 72 20 74 6f 20  * The cursor to 
1fdb0 73 65 65 6b 20 2a 2f 0a 20 20 55 6e 70 61 63 6b  seek */.  Unpack
1fdc0 65 64 52 65 63 6f 72 64 20 72 3b 20 20 2f 2a 20  edRecord r;  /* 
1fdd0 54 68 65 20 6b 65 79 20 74 6f 20 73 65 65 6b 20  The key to seek 
1fde0 66 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69  for */.  int nFi
1fdf0 65 6c 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  eld;        /* N
1fe00 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
1fe10 20 6f 72 20 66 69 65 6c 64 73 20 69 6e 20 74 68   or fields in th
1fe20 65 20 6b 65 79 20 2a 2f 0a 20 20 69 36 34 20 69  e key */.  i64 i
1fe30 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Key;          /*
1fe40 20 54 68 65 20 72 6f 77 69 64 20 77 65 20 61 72   The rowid we ar
1fe50 65 20 74 6f 20 73 65 65 6b 20 74 6f 20 2a 2f 0a  e to seek to */.
1fe60 20 20 69 6e 74 20 65 71 4f 6e 6c 79 3b 20 20 20    int eqOnly;   
1fe70 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 69 6e 74       /* Only int
1fe80 65 72 65 73 74 65 64 20 69 6e 20 3d 3d 20 72 65  erested in == re
1fe90 73 75 6c 74 73 20 2a 2f 0a 0a 20 20 61 73 73 65  sults */..  asse
1fea0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1feb0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1fec0 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
1fed0 28 20 70 4f 70 2d 3e 70 32 21 3d 30 20 29 3b 0a  ( pOp->p2!=0 );.
1fee0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
1fef0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
1ff00 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
1ff10 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
1ff20 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
1ff30 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  EE );.  assert( 
1ff40 4f 50 5f 53 65 65 6b 4c 45 20 3d 3d 20 4f 50 5f  OP_SeekLE == OP_
1ff50 53 65 65 6b 4c 54 2b 31 20 29 3b 0a 20 20 61 73  SeekLT+1 );.  as
1ff60 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 45 20  sert( OP_SeekGE 
1ff70 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 32 20 29  == OP_SeekLT+2 )
1ff80 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53  ;.  assert( OP_S
1ff90 65 65 6b 47 54 20 3d 3d 20 4f 50 5f 53 65 65 6b  eekGT == OP_Seek
1ffa0 4c 54 2b 33 20 29 3b 0a 20 20 61 73 73 65 72 74  LT+3 );.  assert
1ffb0 28 20 70 43 2d 3e 69 73 4f 72 64 65 72 65 64 20  ( pC->isOrdered 
1ffc0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
1ffd0 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29  >uc.pCursor!=0 )
1ffe0 3b 0a 20 20 6f 63 20 3d 20 70 4f 70 2d 3e 6f 70  ;.  oc = pOp->op
1fff0 63 6f 64 65 3b 0a 20 20 65 71 4f 6e 6c 79 20 3d  code;.  eqOnly =
20000 20 30 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f   0;.  pC->nullRo
20010 77 20 3d 20 30 3b 0a 23 69 66 64 65 66 20 53 51  w = 0;.#ifdef SQ
20020 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d  LITE_DEBUG.  pC-
20030 3e 73 65 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f  >seekOp = pOp->o
20040 70 63 6f 64 65 3b 0a 23 65 6e 64 69 66 0a 0a 20  pcode;.#endif.. 
20050 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62 6c 65   if( pC->isTable
20060 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 42   ){.    /* The B
20070 54 52 45 45 5f 53 45 45 4b 5f 45 51 20 66 6c 61  TREE_SEEK_EQ fla
20080 67 20 69 73 20 6f 6e 6c 79 20 73 65 74 20 6f 6e  g is only set on
20090 20 69 6e 64 65 78 20 63 75 72 73 6f 72 73 20 2a   index cursors *
200a0 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 73 71  /.    assert( sq
200b0 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
200c0 48 61 73 48 69 6e 74 28 70 43 2d 3e 75 63 2e 70  HasHint(pC->uc.p
200d0 43 75 72 73 6f 72 2c 20 42 54 52 45 45 5f 53 45  Cursor, BTREE_SE
200e0 45 4b 5f 45 51 29 3d 3d 30 0a 20 20 20 20 20 20  EK_EQ)==0.      
200f0 20 20 20 20 20 20 20 20 7c 7c 20 43 4f 52 52 55          || CORRU
20100 50 54 5f 44 42 20 29 3b 0a 0a 20 20 20 20 2f 2a  PT_DB );..    /*
20110 20 54 68 65 20 69 6e 70 75 74 20 76 61 6c 75 65   The input value
20120 20 69 6e 20 50 33 20 6d 69 67 68 74 20 62 65 20   in P3 might be 
20130 6f 66 20 61 6e 79 20 74 79 70 65 3a 20 69 6e 74  of any type: int
20140 65 67 65 72 2c 20 72 65 61 6c 2c 20 73 74 72 69  eger, real, stri
20150 6e 67 2c 0a 20 20 20 20 2a 2a 20 62 6c 6f 62 2c  ng,.    ** blob,
20160 20 6f 72 20 4e 55 4c 4c 2e 20 20 42 75 74 20 69   or NULL.  But i
20170 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 61 6e  t needs to be an
20180 20 69 6e 74 65 67 65 72 20 62 65 66 6f 72 65 20   integer before 
20190 77 65 20 63 61 6e 20 64 6f 0a 20 20 20 20 2a 2a  we can do.    **
201a0 20 74 68 65 20 73 65 65 6b 2c 20 73 6f 20 63 6f   the seek, so co
201b0 6e 76 65 72 74 20 69 74 2e 20 2a 2f 0a 20 20 20  nvert it. */.   
201c0 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
201d0 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 69 66 28 20  p->p3];.    if( 
201e0 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 28  (pIn3->flags & (
201f0 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c  MEM_Int|MEM_Real
20200 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f  |MEM_Str))==MEM_
20210 53 74 72 20 29 7b 0a 20 20 20 20 20 20 61 70 70  Str ){.      app
20220 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
20230 79 28 70 49 6e 33 2c 20 30 29 3b 0a 20 20 20 20  y(pIn3, 0);.    
20240 7d 0a 20 20 20 20 69 4b 65 79 20 3d 20 73 71 6c  }.    iKey = sql
20250 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
20260 28 70 49 6e 33 29 3b 0a 0a 20 20 20 20 2f 2a 20  (pIn3);..    /* 
20270 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20  If the P3 value 
20280 63 6f 75 6c 64 20 6e 6f 74 20 62 65 20 63 6f 6e  could not be con
20290 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69  verted into an i
202a0 6e 74 65 67 65 72 20 77 69 74 68 6f 75 74 0a 20  nteger without. 
202b0 20 20 20 2a 2a 20 6c 6f 73 73 20 6f 66 20 69 6e     ** loss of in
202c0 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 6e 20  formation, then 
202d0 73 70 65 63 69 61 6c 20 70 72 6f 63 65 73 73 69  special processi
202e0 6e 67 20 69 73 20 72 65 71 75 69 72 65 64 2e 2e  ng is required..
202f0 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 70 49  . */.    if( (pI
20300 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
20310 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  Int)==0 ){.     
20320 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67   if( (pIn3->flag
20330 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30  s & MEM_Real)==0
20340 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49   ){.        /* I
20350 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 63  f the P3 value c
20360 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74  annot be convert
20370 65 64 20 69 6e 74 6f 20 61 6e 79 20 6b 69 6e 64  ed into any kind
20380 20 6f 66 20 61 20 6e 75 6d 62 65 72 2c 0a 20 20   of a number,.  
20390 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 74 68        ** then th
203a0 65 20 73 65 65 6b 20 69 73 20 6e 6f 74 20 70 6f  e seek is not po
203b0 73 73 69 62 6c 65 2c 20 73 6f 20 6a 75 6d 70 20  ssible, so jump 
203c0 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20 20 20 20  to P2 */.       
203d0 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
203e0 28 31 2c 32 29 3b 20 67 6f 74 6f 20 6a 75 6d 70  (1,2); goto jump
203f0 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 20 20 20 20  _to_p2;.        
20400 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 0a  break;.      }..
20410 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20        /* If the 
20420 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 69 4b  approximation iK
20430 65 79 20 69 73 20 6c 61 72 67 65 72 20 74 68 61  ey is larger tha
20440 6e 20 74 68 65 20 61 63 74 75 61 6c 20 72 65 61  n the actual rea
20450 6c 20 73 65 61 72 63 68 0a 20 20 20 20 20 20 2a  l search.      *
20460 2a 20 74 65 72 6d 2c 20 73 75 62 73 74 69 74 75  * term, substitu
20470 74 65 20 3e 3d 20 66 6f 72 20 3e 20 61 6e 64 20  te >= for > and 
20480 3c 20 66 6f 72 20 3c 3d 2e 20 65 2e 67 2e 20 69  < for <=. e.g. i
20490 66 20 74 68 65 20 73 65 61 72 63 68 20 74 65 72  f the search ter
204a0 6d 0a 20 20 20 20 20 20 2a 2a 20 69 73 20 34 2e  m.      ** is 4.
204b0 39 20 61 6e 64 20 74 68 65 20 69 6e 74 65 67 65  9 and the intege
204c0 72 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20  r approximation 
204d0 35 3a 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20  5:.      **.    
204e0 20 20 2a 2a 20 20 20 20 20 20 20 20 28 78 20 3e    **        (x >
204f0 20 20 34 2e 39 29 20 20 20 20 2d 3e 20 20 20 20    4.9)    ->    
20500 20 28 78 20 3e 3d 20 35 29 0a 20 20 20 20 20 20   (x >= 5).      
20510 2a 2a 20 20 20 20 20 20 20 20 28 78 20 3c 3d 20  **        (x <= 
20520 34 2e 39 29 20 20 20 20 2d 3e 20 20 20 20 20 28  4.9)    ->     (
20530 78 20 3c 20 20 35 29 0a 20 20 20 20 20 20 2a 2f  x <  5).      */
20540 0a 20 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d  .      if( pIn3-
20550 3e 75 2e 72 3c 28 64 6f 75 62 6c 65 29 69 4b 65  >u.r<(double)iKe
20560 79 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  y ){.        ass
20570 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 45 3d 3d  ert( OP_SeekGE==
20580 28 4f 50 5f 53 65 65 6b 47 54 2d 31 29 20 29 3b  (OP_SeekGT-1) );
20590 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
205a0 20 4f 50 5f 53 65 65 6b 4c 54 3d 3d 28 4f 50 5f   OP_SeekLT==(OP_
205b0 53 65 65 6b 4c 45 2d 31 29 20 29 3b 0a 20 20 20  SeekLE-1) );.   
205c0 20 20 20 20 20 61 73 73 65 72 74 28 20 28 4f 50       assert( (OP
205d0 5f 53 65 65 6b 4c 45 20 26 20 30 78 30 30 30 31  _SeekLE & 0x0001
205e0 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 20 26 20  )==(OP_SeekGT & 
205f0 30 78 30 30 30 31 29 20 29 3b 0a 20 20 20 20 20  0x0001) );.     
20600 20 20 20 69 66 28 20 28 6f 63 20 26 20 30 78 30     if( (oc & 0x0
20610 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 54  001)==(OP_SeekGT
20620 20 26 20 30 78 30 30 30 31 29 20 29 20 6f 63 2d   & 0x0001) ) oc-
20630 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  -;.      }..    
20640 20 20 2f 2a 20 49 66 20 74 68 65 20 61 70 70 72    /* If the appr
20650 6f 78 69 6d 61 74 69 6f 6e 20 69 4b 65 79 20 69  oximation iKey i
20660 73 20 73 6d 61 6c 6c 65 72 20 74 68 61 6e 20 74  s smaller than t
20670 68 65 20 61 63 74 75 61 6c 20 72 65 61 6c 20 73  he actual real s
20680 65 61 72 63 68 0a 20 20 20 20 20 20 2a 2a 20 74  earch.      ** t
20690 65 72 6d 2c 20 73 75 62 73 74 69 74 75 74 65 20  erm, substitute 
206a0 3c 3d 20 66 6f 72 20 3c 20 61 6e 64 20 3e 20 66  <= for < and > f
206b0 6f 72 20 3e 3d 2e 20 20 2a 2f 0a 20 20 20 20 20  or >=.  */.     
206c0 20 65 6c 73 65 20 69 66 28 20 70 49 6e 33 2d 3e   else if( pIn3->
206d0 75 2e 72 3e 28 64 6f 75 62 6c 65 29 69 4b 65 79  u.r>(double)iKey
206e0 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
206f0 72 74 28 20 4f 50 5f 53 65 65 6b 4c 45 3d 3d 28  rt( OP_SeekLE==(
20700 4f 50 5f 53 65 65 6b 4c 54 2b 31 29 20 29 3b 0a  OP_SeekLT+1) );.
20710 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
20720 4f 50 5f 53 65 65 6b 47 54 3d 3d 28 4f 50 5f 53  OP_SeekGT==(OP_S
20730 65 65 6b 47 45 2b 31 29 20 29 3b 0a 20 20 20 20  eekGE+1) );.    
20740 20 20 20 20 61 73 73 65 72 74 28 20 28 4f 50 5f      assert( (OP_
20750 53 65 65 6b 4c 54 20 26 20 30 78 30 30 30 31 29  SeekLT & 0x0001)
20760 3d 3d 28 4f 50 5f 53 65 65 6b 47 45 20 26 20 30  ==(OP_SeekGE & 0
20770 78 30 30 30 31 29 20 29 3b 0a 20 20 20 20 20 20  x0001) );.      
20780 20 20 69 66 28 20 28 6f 63 20 26 20 30 78 30 30    if( (oc & 0x00
20790 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 4c 54 20  01)==(OP_SeekLT 
207a0 26 20 30 78 30 30 30 31 29 20 29 20 6f 63 2b 2b  & 0x0001) ) oc++
207b0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20  ;.      }.    } 
207c0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
207d0 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61  3BtreeMovetoUnpa
207e0 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43 75 72  cked(pC->uc.pCur
207f0 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 69 4b 65  sor, 0, (u64)iKe
20800 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20  y, 0, &res);.   
20810 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65   pC->movetoTarge
20820 74 20 3d 20 69 4b 65 79 3b 20 20 2f 2a 20 55 73  t = iKey;  /* Us
20830 65 64 20 62 79 20 4f 50 5f 44 65 6c 65 74 65 20  ed by OP_Delete 
20840 2a 2f 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53  */.    if( rc!=S
20850 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
20860 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
20870 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d  _to_error;.    }
20880 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a  .  }else{.    /*
20890 20 46 6f 72 20 61 20 63 75 72 73 6f 72 20 77 69   For a cursor wi
208a0 74 68 20 74 68 65 20 42 54 52 45 45 5f 53 45 45  th the BTREE_SEE
208b0 4b 5f 45 51 20 68 69 6e 74 2c 20 6f 6e 6c 79 20  K_EQ hint, only 
208c0 74 68 65 20 4f 50 5f 53 65 65 6b 47 45 20 61 6e  the OP_SeekGE an
208d0 64 0a 20 20 20 20 2a 2a 20 4f 50 5f 53 65 65 6b  d.    ** OP_Seek
208e0 4c 45 20 6f 70 63 6f 64 65 73 20 61 72 65 20 61  LE opcodes are a
208f0 6c 6c 6f 77 65 64 2c 20 61 6e 64 20 74 68 65 73  llowed, and thes
20900 65 20 6d 75 73 74 20 62 65 20 69 6d 6d 65 64 69  e must be immedi
20910 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 65 64 0a 20  ately followed. 
20920 20 20 20 2a 2a 20 62 79 20 61 6e 20 4f 50 5f 49     ** by an OP_I
20930 64 78 47 54 20 6f 72 20 4f 50 5f 49 64 78 4c 54  dxGT or OP_IdxLT
20940 20 6f 70 63 6f 64 65 2c 20 72 65 73 70 65 63 74   opcode, respect
20950 69 76 65 6c 79 2c 20 77 69 74 68 20 74 68 65 20  ively, with the 
20960 73 61 6d 65 20 6b 65 79 2e 0a 20 20 20 20 2a 2f  same key..    */
20970 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
20980 42 74 72 65 65 43 75 72 73 6f 72 48 61 73 48 69  BtreeCursorHasHi
20990 6e 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  nt(pC->uc.pCurso
209a0 72 2c 20 42 54 52 45 45 5f 53 45 45 4b 5f 45 51  r, BTREE_SEEK_EQ
209b0 29 20 29 7b 0a 20 20 20 20 20 20 65 71 4f 6e 6c  ) ){.      eqOnl
209c0 79 20 3d 20 31 3b 0a 20 20 20 20 20 20 61 73 73  y = 1;.      ass
209d0 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
209e0 3d 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c 20 70  ==OP_SeekGE || p
209f0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53  Op->opcode==OP_S
20a00 65 65 6b 4c 45 20 29 3b 0a 20 20 20 20 20 20 61  eekLE );.      a
20a10 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 6f 70  ssert( pOp[1].op
20a20 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 7c  code==OP_IdxLT |
20a30 7c 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d  | pOp[1].opcode=
20a40 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20  =OP_IdxGT );.   
20a50 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31     assert( pOp[1
20a60 5d 2e 70 31 3d 3d 70 4f 70 5b 30 5d 2e 70 31 20  ].p1==pOp[0].p1 
20a70 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
20a80 20 70 4f 70 5b 31 5d 2e 70 32 3d 3d 70 4f 70 5b   pOp[1].p2==pOp[
20a90 30 5d 2e 70 32 20 29 3b 0a 20 20 20 20 20 20 61  0].p2 );.      a
20aa0 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70 33  ssert( pOp[1].p3
20ab0 3d 3d 70 4f 70 5b 30 5d 2e 70 33 20 29 3b 0a 20  ==pOp[0].p3 );. 
20ac0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
20ad0 5b 31 5d 2e 70 34 2e 69 3d 3d 70 4f 70 5b 30 5d  [1].p4.i==pOp[0]
20ae0 2e 70 34 2e 69 20 29 3b 0a 20 20 20 20 7d 0a 0a  .p4.i );.    }..
20af0 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70      nField = pOp
20b00 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 61 73 73 65  ->p4.i;.    asse
20b10 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
20b20 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 20  =P4_INT32 );.   
20b30 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e   assert( nField>
20b40 30 20 29 3b 0a 20 20 20 20 72 2e 70 4b 65 79 49  0 );.    r.pKeyI
20b50 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e  nfo = pC->pKeyIn
20b60 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64  fo;.    r.nField
20b70 20 3d 20 28 75 31 36 29 6e 46 69 65 6c 64 3b 0a   = (u16)nField;.
20b80 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74  .    /* The next
20b90 20 6c 69 6e 65 20 6f 66 20 63 6f 64 65 20 63 6f   line of code co
20ba0 6d 70 75 74 65 73 20 61 73 20 66 6f 6c 6c 6f 77  mputes as follow
20bb0 73 2c 20 6f 6e 6c 79 20 66 61 73 74 65 72 3a 0a  s, only faster:.
20bc0 20 20 20 20 2a 2a 20 20 20 69 66 28 20 6f 63 3d      **   if( oc=
20bd0 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c 20 6f 63  =OP_SeekGT || oc
20be0 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 7b 0a 20  ==OP_SeekLE ){. 
20bf0 20 20 20 2a 2a 20 20 20 20 20 72 2e 64 65 66 61     **     r.defa
20c00 75 6c 74 5f 72 63 20 3d 20 2d 31 3b 0a 20 20 20  ult_rc = -1;.   
20c10 20 2a 2a 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20   **   }else{.   
20c20 20 2a 2a 20 20 20 20 20 72 2e 64 65 66 61 75 6c   **     r.defaul
20c30 74 5f 72 63 20 3d 20 2b 31 3b 0a 20 20 20 20 2a  t_rc = +1;.    *
20c40 2a 20 20 20 7d 0a 20 20 20 20 2a 2f 0a 20 20 20  *   }.    */.   
20c50 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20   r.default_rc = 
20c60 28 28 31 20 26 20 28 6f 63 20 2d 20 4f 50 5f 53  ((1 & (oc - OP_S
20c70 65 65 6b 4c 54 29 29 20 3f 20 2d 31 20 3a 20 2b  eekLT)) ? -1 : +
20c80 31 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  1);.    assert( 
20c90 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c  oc!=OP_SeekGT ||
20ca0 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2d   r.default_rc==-
20cb0 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  1 );.    assert(
20cc0 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 45 20 7c   oc!=OP_SeekLE |
20cd0 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d  | r.default_rc==
20ce0 2d 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  -1 );.    assert
20cf0 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 45 20  ( oc!=OP_SeekGE 
20d00 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d  || r.default_rc=
20d10 3d 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72  =+1 );.    asser
20d20 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 54  t( oc!=OP_SeekLT
20d30 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63   || r.default_rc
20d40 3d 3d 2b 31 20 29 3b 0a 0a 20 20 20 20 72 2e 61  ==+1 );..    r.a
20d50 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Mem = &aMem[pOp-
20d60 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c  >p3];.#ifdef SQL
20d70 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 7b 20  ITE_DEBUG.    { 
20d80 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20  int i; for(i=0; 
20d90 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29  i<r.nField; i++)
20da0 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
20db0 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20  lid(&r.aMem[i]) 
20dc0 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20  ); }.#endif.    
20dd0 72 2e 65 71 53 65 65 6e 20 3d 20 30 3b 0a 20 20  r.eqSeen = 0;.  
20de0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
20df0 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65  reeMovetoUnpacke
20e00 64 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  d(pC->uc.pCursor
20e10 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65 73  , &r, 0, 0, &res
20e20 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53  );.    if( rc!=S
20e30 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
20e40 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
20e50 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d  _to_error;.    }
20e60 0a 20 20 20 20 69 66 28 20 65 71 4f 6e 6c 79 20  .    if( eqOnly 
20e70 26 26 20 72 2e 65 71 53 65 65 6e 3d 3d 30 20 29  && r.eqSeen==0 )
20e80 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
20e90 72 65 73 21 3d 30 20 29 3b 0a 20 20 20 20 20 20  res!=0 );.      
20ea0 67 6f 74 6f 20 73 65 65 6b 5f 6e 6f 74 5f 66 6f  goto seek_not_fo
20eb0 75 6e 64 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  und;.    }.  }. 
20ec0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
20ed0 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63  eto = 0;.  pC->c
20ee0 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
20ef0 48 45 5f 53 54 41 4c 45 3b 0a 23 69 66 64 65 66  HE_STALE;.#ifdef
20f00 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 73   SQLITE_TEST.  s
20f10 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f  qlite3_search_co
20f20 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20  unt++;.#endif.  
20f30 69 66 28 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b 47  if( oc>=OP_SeekG
20f40 45 20 29 7b 20 20 61 73 73 65 72 74 28 20 6f 63  E ){  assert( oc
20f50 3d 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c 20 6f  ==OP_SeekGE || o
20f60 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 29 3b 0a  c==OP_SeekGT );.
20f70 20 20 20 20 69 66 28 20 72 65 73 3c 30 20 7c 7c      if( res<0 ||
20f80 20 28 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d   (res==0 && oc==
20f90 4f 50 5f 53 65 65 6b 47 54 29 20 29 7b 0a 20 20  OP_SeekGT) ){.  
20fa0 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20      res = 0;.   
20fb0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
20fc0 74 72 65 65 4e 65 78 74 28 70 43 2d 3e 75 63 2e  treeNext(pC->uc.
20fd0 70 43 75 72 73 6f 72 2c 20 30 29 3b 0a 20 20 20  pCursor, 0);.   
20fe0 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
20ff0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
21000 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 44  if( rc==SQLITE_D
21010 4f 4e 45 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ONE ){.         
21020 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
21030 0a 20 20 20 20 20 20 20 20 20 20 72 65 73 20 3d  .          res =
21040 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73   1;.        }els
21050 65 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74  e{.          got
21060 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
21070 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a  rror;.        }.
21080 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
21090 65 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 30  e{.      res = 0
210a0 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
210b0 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 3d  .    assert( oc=
210c0 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 6f 63  =OP_SeekLT || oc
210d0 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 3b 0a 20  ==OP_SeekLE );. 
210e0 20 20 20 69 66 28 20 72 65 73 3e 30 20 7c 7c 20     if( res>0 || 
210f0 28 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f  (res==0 && oc==O
21100 50 5f 53 65 65 6b 4c 54 29 20 29 7b 0a 20 20 20  P_SeekLT) ){.   
21110 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20     res = 0;.    
21120 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
21130 72 65 65 50 72 65 76 69 6f 75 73 28 70 43 2d 3e  reePrevious(pC->
21140 75 63 2e 70 43 75 72 73 6f 72 2c 20 30 29 3b 0a  uc.pCursor, 0);.
21150 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
21160 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
21170 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
21180 45 5f 44 4f 4e 45 20 29 7b 0a 20 20 20 20 20 20  E_DONE ){.      
21190 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
211a0 4f 4b 3b 0a 20 20 20 20 20 20 20 20 20 20 72 65  OK;.          re
211b0 73 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d  s = 1;.        }
211c0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
211d0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
211e0 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20  o_error;.       
211f0 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d   }.      }.    }
21200 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 72  else{.      /* r
21210 65 73 20 6d 69 67 68 74 20 62 65 20 6e 65 67 61  es might be nega
21220 74 69 76 65 20 62 65 63 61 75 73 65 20 74 68 65  tive because the
21230 20 74 61 62 6c 65 20 69 73 20 65 6d 70 74 79 2e   table is empty.
21240 20 20 43 68 65 63 6b 20 74 6f 0a 20 20 20 20 20    Check to.     
21250 20 2a 2a 20 73 65 65 20 69 66 20 74 68 69 73 20   ** see if this 
21260 69 73 20 74 68 65 20 63 61 73 65 2e 0a 20 20 20  is the case..   
21270 20 20 20 2a 2f 0a 20 20 20 20 20 20 72 65 73 20     */.      res 
21280 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 45 6f  = sqlite3BtreeEo
21290 66 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  f(pC->uc.pCursor
212a0 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 73 65 65  );.    }.  }.see
212b0 6b 5f 6e 6f 74 5f 66 6f 75 6e 64 3a 0a 20 20 61  k_not_found:.  a
212c0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30  ssert( pOp->p2>0
212d0 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68   );.  VdbeBranch
212e0 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b  Taken(res!=0,2);
212f0 0a 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20  .  if( res ){.  
21300 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
21310 32 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 65  2;.  }else if( e
21320 71 4f 6e 6c 79 20 29 7b 0a 20 20 20 20 61 73 73  qOnly ){.    ass
21330 65 72 74 28 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f  ert( pOp[1].opco
21340 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 7c 7c 20  de==OP_IdxLT || 
21350 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f  pOp[1].opcode==O
21360 50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20 20 70  P_IdxGT );.    p
21370 4f 70 2b 2b 3b 20 2f 2a 20 53 6b 69 70 20 74 68  Op++; /* Skip th
21380 65 20 4f 50 5f 49 64 78 4c 74 20 6f 72 20 4f 50  e OP_IdxLt or OP
21390 5f 49 64 78 47 54 20 74 68 61 74 20 66 6f 6c 6c  _IdxGT that foll
213a0 6f 77 73 20 2a 2f 0a 20 20 7d 0a 20 20 62 72 65  ows */.  }.  bre
213b0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
213c0 3a 20 46 6f 75 6e 64 20 50 31 20 50 32 20 50 33  : Found P1 P2 P3
213d0 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
213e0 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
213f0 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74  **.** If P4==0 t
21400 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20  hen register P3 
21410 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e  holds a blob con
21420 73 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65  structed by Make
21430 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50  Record.  If.** P
21440 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74 65  4>0 then registe
21450 72 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  r P3 is the firs
21460 74 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  t of P4 register
21470 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75  s that form an u
21480 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72  npacked.** recor
21490 64 2e 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72 20  d..**.** Cursor 
214a0 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65  P1 is on an inde
214b0 78 20 62 74 72 65 65 2e 20 20 49 66 20 74 68 65  x btree.  If the
214c0 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69   record identifi
214d0 65 64 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a  ed by P3 and P4.
214e0 2a 2a 20 69 73 20 61 20 70 72 65 66 69 78 20 6f  ** is a prefix o
214f0 66 20 61 6e 79 20 65 6e 74 72 79 20 69 6e 20 50  f any entry in P
21500 31 20 74 68 65 6e 20 61 20 6a 75 6d 70 20 69 73  1 then a jump is
21510 20 6d 61 64 65 20 74 6f 20 50 32 20 61 6e 64 0a   made to P2 and.
21520 2a 2a 20 50 31 20 69 73 20 6c 65 66 74 20 70 6f  ** P1 is left po
21530 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6d 61  inting at the ma
21540 74 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a  tching entry..**
21550 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69  .** This operati
21560 6f 6e 20 6c 65 61 76 65 73 20 74 68 65 20 63 75  on leaves the cu
21570 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20  rsor in a state 
21580 77 68 65 72 65 20 69 74 20 63 61 6e 20 62 65 0a  where it can be.
21590 2a 2a 20 61 64 76 61 6e 63 65 64 20 69 6e 20 74  ** advanced in t
215a0 68 65 20 66 6f 72 77 61 72 64 20 64 69 72 65 63  he forward direc
215b0 74 69 6f 6e 2e 20 20 54 68 65 20 4e 65 78 74 20  tion.  The Next 
215c0 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 69 6c 6c  instruction will
215d0 20 77 6f 72 6b 2c 0a 2a 2a 20 62 75 74 20 6e 6f   work,.** but no
215e0 74 20 74 68 65 20 50 72 65 76 20 69 6e 73 74 72  t the Prev instr
215f0 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65  uction..**.** Se
21600 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64  e also: NotFound
21610 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20 4e 6f  , NoConflict, No
21620 74 45 78 69 73 74 73 2e 20 53 65 65 6b 47 65 0a  tExists. SeekGe.
21630 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f  */./* Opcode: No
21640 74 46 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20  tFound P1 P2 P3 
21650 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
21660 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
21670 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68  *.** If P4==0 th
21680 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 68  en register P3 h
21690 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73  olds a blob cons
216a0 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52  tructed by MakeR
216b0 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34  ecord.  If.** P4
216c0 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72  >0 then register
216d0 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74   P3 is the first
216e0 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73   of P4 registers
216f0 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e   that form an un
21700 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64  packed.** record
21710 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f 72 20  ..** .** Cursor 
21720 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65  P1 is on an inde
21730 78 20 62 74 72 65 65 2e 20 20 49 66 20 74 68 65  x btree.  If the
21740 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69   record identifi
21750 65 64 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a  ed by P3 and P4.
21760 2a 2a 20 69 73 20 6e 6f 74 20 74 68 65 20 70 72  ** is not the pr
21770 65 66 69 78 20 6f 66 20 61 6e 79 20 65 6e 74 72  efix of any entr
21780 79 20 69 6e 20 50 31 20 74 68 65 6e 20 61 20 6a  y in P1 then a j
21790 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50  ump is made to P
217a0 32 2e 20 20 49 66 20 50 31 20 0a 2a 2a 20 64 6f  2.  If P1 .** do
217b0 65 73 20 63 6f 6e 74 61 69 6e 20 61 6e 20 65 6e  es contain an en
217c0 74 72 79 20 77 68 6f 73 65 20 70 72 65 66 69 78  try whose prefix
217d0 20 6d 61 74 63 68 65 73 20 74 68 65 20 50 33 2f   matches the P3/
217e0 50 34 20 72 65 63 6f 72 64 20 74 68 65 6e 20 63  P4 record then c
217f0 6f 6e 74 72 6f 6c 0a 2a 2a 20 66 61 6c 6c 73 20  ontrol.** falls 
21800 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
21810 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ext instruction 
21820 61 6e 64 20 50 31 20 69 73 20 6c 65 66 74 20 70  and P1 is left p
21830 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 0a 2a  ointing at the.*
21840 2a 20 6d 61 74 63 68 69 6e 67 20 65 6e 74 72 79  * matching entry
21850 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65  ..**.** This ope
21860 72 61 74 69 6f 6e 20 6c 65 61 76 65 73 20 74 68  ration leaves th
21870 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74  e cursor in a st
21880 61 74 65 20 77 68 65 72 65 20 69 74 20 63 61 6e  ate where it can
21890 6e 6f 74 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63  not be.** advanc
218a0 65 64 20 69 6e 20 65 69 74 68 65 72 20 64 69 72  ed in either dir
218b0 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65  ection.  In othe
218c0 72 20 77 6f 72 64 73 2c 20 74 68 65 20 4e 65 78  r words, the Nex
218d0 74 20 61 6e 64 20 50 72 65 76 0a 2a 2a 20 6f 70  t and Prev.** op
218e0 63 6f 64 65 73 20 64 6f 20 6e 6f 74 20 77 6f 72  codes do not wor
218f0 6b 20 61 66 74 65 72 20 74 68 69 73 20 6f 70 65  k after this ope
21900 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65  ration..**.** Se
21910 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
21920 6f 74 45 78 69 73 74 73 2c 20 4e 6f 43 6f 6e 66  otExists, NoConf
21930 6c 69 63 74 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  lict.*/./* Opcod
21940 65 3a 20 4e 6f 43 6f 6e 66 6c 69 63 74 20 50 31  e: NoConflict P1
21950 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
21960 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
21970 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50  3@P4].**.** If P
21980 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74  4==0 then regist
21990 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c  er P3 holds a bl
219a0 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62  ob constructed b
219b0 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49  y MakeRecord.  I
219c0 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72  f.** P4>0 then r
219d0 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68  egister P3 is th
219e0 65 20 66 69 72 73 74 20 6f 66 20 50 34 20 72 65  e first of P4 re
219f0 67 69 73 74 65 72 73 20 74 68 61 74 20 66 6f 72  gisters that for
21a00 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a  m an unpacked.**
21a10 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20   record..** .** 
21a20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20  Cursor P1 is on 
21a30 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20  an index btree. 
21a40 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20 69   If the record i
21a50 64 65 6e 74 69 66 69 65 64 20 62 79 20 50 33 20  dentified by P3 
21a60 61 6e 64 20 50 34 0a 2a 2a 20 63 6f 6e 74 61 69  and P4.** contai
21a70 6e 73 20 61 6e 79 20 4e 55 4c 4c 20 76 61 6c 75  ns any NULL valu
21a80 65 2c 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  e, jump immediat
21a90 65 6c 79 20 74 6f 20 50 32 2e 20 20 49 66 20 61  ely to P2.  If a
21aa0 6c 6c 20 74 65 72 6d 73 20 6f 66 20 74 68 65 0a  ll terms of the.
21ab0 2a 2a 20 72 65 63 6f 72 64 20 61 72 65 20 6e 6f  ** record are no
21ac0 74 2d 4e 55 4c 4c 20 74 68 65 6e 20 61 20 63 68  t-NULL then a ch
21ad0 65 63 6b 20 69 73 20 64 6f 6e 65 20 74 6f 20 64  eck is done to d
21ae0 65 74 65 72 6d 69 6e 65 20 69 66 20 61 6e 79 20  etermine if any 
21af0 72 6f 77 20 69 6e 20 74 68 65 0a 2a 2a 20 50 31  row in the.** P1
21b00 20 69 6e 64 65 78 20 62 74 72 65 65 20 68 61 73   index btree has
21b10 20 61 20 6d 61 74 63 68 69 6e 67 20 6b 65 79 20   a matching key 
21b20 70 72 65 66 69 78 2e 20 20 49 66 20 74 68 65 72  prefix.  If ther
21b30 65 20 61 72 65 20 6e 6f 20 6d 61 74 63 68 65 73  e are no matches
21b40 2c 20 6a 75 6d 70 0a 2a 2a 20 69 6d 6d 65 64 69  , jump.** immedi
21b50 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 49 66  ately to P2.  If
21b60 20 74 68 65 72 65 20 69 73 20 61 20 6d 61 74 63   there is a matc
21b70 68 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  h, fall through 
21b80 61 6e 64 20 6c 65 61 76 65 20 74 68 65 20 50 31  and leave the P1
21b90 0a 2a 2a 20 63 75 72 73 6f 72 20 70 6f 69 6e 74  .** cursor point
21ba0 69 6e 67 20 74 6f 20 74 68 65 20 6d 61 74 63 68  ing to the match
21bb0 69 6e 67 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 54  ing row..**.** T
21bc0 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 73 69  his opcode is si
21bd0 6d 69 6c 61 72 20 74 6f 20 4f 50 5f 4e 6f 74 46  milar to OP_NotF
21be0 6f 75 6e 64 20 77 69 74 68 20 74 68 65 20 65 78  ound with the ex
21bf0 63 65 70 74 69 6f 6e 73 20 74 68 61 74 20 74 68  ceptions that th
21c00 65 0a 2a 2a 20 62 72 61 6e 63 68 20 69 73 20 61  e.** branch is a
21c10 6c 77 61 79 73 20 74 61 6b 65 6e 20 69 66 20 61  lways taken if a
21c20 6e 79 20 70 61 72 74 20 6f 66 20 74 68 65 20 73  ny part of the s
21c30 65 61 72 63 68 20 6b 65 79 20 69 6e 70 75 74 20  earch key input 
21c40 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54  is NULL..**.** T
21c50 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65  his operation le
21c60 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20  aves the cursor 
21c70 69 6e 20 61 20 73 74 61 74 65 20 77 68 65 72 65  in a state where
21c80 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 0a 2a 2a   it cannot be.**
21c90 20 61 64 76 61 6e 63 65 64 20 69 6e 20 65 69 74   advanced in eit
21ca0 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e 20 20  her direction.  
21cb0 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
21cc0 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50 72 65  the Next and Pre
21cd0 76 0a 2a 2a 20 6f 70 63 6f 64 65 73 20 64 6f 20  v.** opcodes do 
21ce0 6e 6f 74 20 77 6f 72 6b 20 61 66 74 65 72 20 74  not work after t
21cf0 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 2e 0a 2a  his operation..*
21d00 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e  *.** See also: N
21d10 6f 74 46 6f 75 6e 64 2c 20 46 6f 75 6e 64 2c 20  otFound, Found, 
21d20 4e 6f 74 45 78 69 73 74 73 0a 2a 2f 0a 63 61 73  NotExists.*/.cas
21d30 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 3a  e OP_NoConflict:
21d40 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
21d50 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74  3 */.case OP_Not
21d60 46 6f 75 6e 64 3a 20 20 20 20 20 20 20 2f 2a 20  Found:       /* 
21d70 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73  jump, in3 */.cas
21d80 65 20 4f 50 5f 46 6f 75 6e 64 3a 20 7b 20 20 20  e OP_Found: {   
21d90 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
21da0 33 20 2a 2f 0a 20 20 69 6e 74 20 61 6c 72 65 61  3 */.  int alrea
21db0 64 79 45 78 69 73 74 73 3b 0a 20 20 69 6e 74 20  dyExists;.  int 
21dc0 74 61 6b 65 4a 75 6d 70 3b 0a 20 20 69 6e 74 20  takeJump;.  int 
21dd0 69 69 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  ii;.  VdbeCursor
21de0 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b   *pC;.  int res;
21df0 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  .  UnpackedRecor
21e00 64 20 2a 70 46 72 65 65 3b 0a 20 20 55 6e 70 61  d *pFree;.  Unpa
21e10 63 6b 65 64 52 65 63 6f 72 64 20 2a 70 49 64 78  ckedRecord *pIdx
21e20 4b 65 79 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52  Key;.  UnpackedR
21e30 65 63 6f 72 64 20 72 3b 0a 0a 23 69 66 64 65 66  ecord r;..#ifdef
21e40 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 69   SQLITE_TEST.  i
21e50 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  f( pOp->opcode!=
21e60 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20 29 20  OP_NoConflict ) 
21e70 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f  sqlite3_found_co
21e80 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a 20  unt++;.#endif.. 
21e90 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
21ea0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
21eb0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
21ec0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
21ed0 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a  pe==P4_INT32 );.
21ee0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
21ef0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
21f00 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 23 69 66  rt( pC!=0 );.#if
21f10 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
21f20 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20  .  pC->seekOp = 
21f30 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e  pOp->opcode;.#en
21f40 64 69 66 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d  dif.  pIn3 = &aM
21f50 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61  em[pOp->p3];.  a
21f60 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
21f70 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
21f80 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  EE );.  assert( 
21f90 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d  pC->uc.pCursor!=
21fa0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
21fb0 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b  C->isTable==0 );
21fc0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 69  .  if( pOp->p4.i
21fd0 3e 30 20 29 7b 0a 20 20 20 20 72 2e 70 4b 65 79  >0 ){.    r.pKey
21fe0 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49  Info = pC->pKeyI
21ff0 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c  nfo;.    r.nFiel
22000 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 34  d = (u16)pOp->p4
22010 2e 69 3b 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d  .i;.    r.aMem =
22020 20 70 49 6e 33 3b 0a 23 69 66 64 65 66 20 53 51   pIn3;.#ifdef SQ
22030 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 66  LITE_DEBUG.    f
22040 6f 72 28 69 69 3d 30 3b 20 69 69 3c 72 2e 6e 46  or(ii=0; ii<r.nF
22050 69 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20 20 20  ield; ii++){.   
22060 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
22070 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 69  Valid(&r.aMem[ii
22080 5d 29 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  ]) );.      asse
22090 72 74 28 20 28 72 2e 61 4d 65 6d 5b 69 69 5d 2e  rt( (r.aMem[ii].
220a0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f  flags & MEM_Zero
220b0 29 3d 3d 30 20 7c 7c 20 72 2e 61 4d 65 6d 5b 69  )==0 || r.aMem[i
220c0 69 5d 2e 6e 3d 3d 30 20 29 3b 0a 20 20 20 20 20  i].n==0 );.     
220d0 20 69 66 28 20 69 69 20 29 20 52 45 47 49 53 54   if( ii ) REGIST
220e0 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
220f0 2b 69 69 2c 20 26 72 2e 61 4d 65 6d 5b 69 69 5d  +ii, &r.aMem[ii]
22100 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  );.    }.#endif.
22110 20 20 20 20 70 49 64 78 4b 65 79 20 3d 20 26 72      pIdxKey = &r
22120 3b 0a 20 20 20 20 70 46 72 65 65 20 3d 20 30 3b  ;.    pFree = 0;
22130 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
22140 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67  sert( pIn3->flag
22150 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a  s & MEM_Blob );.
22160 20 20 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42      rc = ExpandB
22170 6c 6f 62 28 70 49 6e 33 29 3b 0a 20 20 20 20 61  lob(pIn3);.    a
22180 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
22190 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c 49  E_OK || rc==SQLI
221a0 54 45 5f 4e 4f 4d 45 4d 20 29 3b 0a 20 20 20 20  TE_NOMEM );.    
221b0 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 6e 6f  if( rc ) goto no
221c0 5f 6d 65 6d 3b 0a 20 20 20 20 70 46 72 65 65 20  _mem;.    pFree 
221d0 3d 20 70 49 64 78 4b 65 79 20 3d 20 73 71 6c 69  = pIdxKey = sqli
221e0 74 65 33 56 64 62 65 41 6c 6c 6f 63 55 6e 70 61  te3VdbeAllocUnpa
221f0 63 6b 65 64 52 65 63 6f 72 64 28 70 43 2d 3e 70  ckedRecord(pC->p
22200 4b 65 79 49 6e 66 6f 29 3b 0a 20 20 20 20 69 66  KeyInfo);.    if
22210 28 20 70 49 64 78 4b 65 79 3d 3d 30 20 29 20 67  ( pIdxKey==0 ) g
22220 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20  oto no_mem;.    
22230 73 71 6c 69 74 65 33 56 64 62 65 52 65 63 6f 72  sqlite3VdbeRecor
22240 64 55 6e 70 61 63 6b 28 70 43 2d 3e 70 4b 65 79  dUnpack(pC->pKey
22250 49 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e 2c 20 70  Info, pIn3->n, p
22260 49 6e 33 2d 3e 7a 2c 20 70 49 64 78 4b 65 79 29  In3->z, pIdxKey)
22270 3b 0a 20 20 7d 0a 20 20 70 49 64 78 4b 65 79 2d  ;.  }.  pIdxKey-
22280 3e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b  >default_rc = 0;
22290 0a 20 20 74 61 6b 65 4a 75 6d 70 20 3d 20 30 3b  .  takeJump = 0;
222a0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
222b0 64 65 3d 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63  de==OP_NoConflic
222c0 74 20 29 7b 0a 20 20 20 20 2f 2a 20 46 6f 72 20  t ){.    /* For 
222d0 74 68 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63  the OP_NoConflic
222e0 74 20 6f 70 63 6f 64 65 2c 20 74 61 6b 65 20 74  t opcode, take t
222f0 68 65 20 6a 75 6d 70 20 69 66 20 61 6e 79 20 6f  he jump if any o
22300 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 69 6e 70  f the.    ** inp
22310 75 74 20 66 69 65 6c 64 73 20 61 72 65 20 4e 55  ut fields are NU
22320 4c 4c 2c 20 73 69 6e 63 65 20 61 6e 79 20 6b 65  LL, since any ke
22330 79 20 77 69 74 68 20 61 20 4e 55 4c 4c 20 77 69  y with a NULL wi
22340 6c 6c 20 6e 6f 74 0a 20 20 20 20 2a 2a 20 63 6f  ll not.    ** co
22350 6e 66 6c 69 63 74 20 2a 2f 0a 20 20 20 20 66 6f  nflict */.    fo
22360 72 28 69 69 3d 30 3b 20 69 69 3c 70 49 64 78 4b  r(ii=0; ii<pIdxK
22370 65 79 2d 3e 6e 46 69 65 6c 64 3b 20 69 69 2b 2b  ey->nField; ii++
22380 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 49 64  ){.      if( pId
22390 78 4b 65 79 2d 3e 61 4d 65 6d 5b 69 69 5d 2e 66  xKey->aMem[ii].f
223a0 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
223b0 29 7b 0a 20 20 20 20 20 20 20 20 74 61 6b 65 4a  ){.        takeJ
223c0 75 6d 70 20 3d 20 31 3b 0a 20 20 20 20 20 20 20  ump = 1;.       
223d0 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
223e0 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 63 20 3d      }.  }.  rc =
223f0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
22400 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e  etoUnpacked(pC->
22410 75 63 2e 70 43 75 72 73 6f 72 2c 20 70 49 64 78  uc.pCursor, pIdx
22420 4b 65 79 2c 20 30 2c 20 30 2c 20 26 72 65 73 29  Key, 0, 0, &res)
22430 3b 0a 20 20 69 66 28 20 70 46 72 65 65 20 29 20  ;.  if( pFree ) 
22440 73 71 6c 69 74 65 33 44 62 46 72 65 65 4e 4e 28  sqlite3DbFreeNN(
22450 64 62 2c 20 70 46 72 65 65 29 3b 0a 20 20 69 66  db, pFree);.  if
22460 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
22470 29 7b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  ){.    goto abor
22480 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
22490 20 20 7d 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65    }.  pC->seekRe
224a0 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20 61 6c  sult = res;.  al
224b0 72 65 61 64 79 45 78 69 73 74 73 20 3d 20 28 72  readyExists = (r
224c0 65 73 3d 3d 30 29 3b 0a 20 20 70 43 2d 3e 6e 75  es==0);.  pC->nu
224d0 6c 6c 52 6f 77 20 3d 20 31 2d 61 6c 72 65 61 64  llRow = 1-alread
224e0 79 45 78 69 73 74 73 3b 0a 20 20 70 43 2d 3e 64  yExists;.  pC->d
224f0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
22500 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  0;.  pC->cacheSt
22510 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
22520 4c 45 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f  LE;.  if( pOp->o
22530 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20  pcode==OP_Found 
22540 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  ){.    VdbeBranc
22550 68 54 61 6b 65 6e 28 61 6c 72 65 61 64 79 45 78  hTaken(alreadyEx
22560 69 73 74 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20  ists!=0,2);.    
22570 69 66 28 20 61 6c 72 65 61 64 79 45 78 69 73 74  if( alreadyExist
22580 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  s ) goto jump_to
22590 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  _p2;.  }else{.  
225a0 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
225b0 6e 28 74 61 6b 65 4a 75 6d 70 7c 7c 61 6c 72 65  n(takeJump||alre
225c0 61 64 79 45 78 69 73 74 73 3d 3d 30 2c 32 29 3b  adyExists==0,2);
225d0 0a 20 20 20 20 69 66 28 20 74 61 6b 65 4a 75 6d  .    if( takeJum
225e0 70 20 7c 7c 20 21 61 6c 72 65 61 64 79 45 78 69  p || !alreadyExi
225f0 73 74 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  sts ) goto jump_
22600 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65  to_p2;.  }.  bre
22610 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
22620 3a 20 53 65 65 6b 52 6f 77 69 64 20 50 31 20 50  : SeekRowid P1 P
22630 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
22640 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72 5b 50  psis: intkey=r[P
22650 33 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74  3].**.** P1 is t
22660 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20 63 75  he index of a cu
22670 72 73 6f 72 20 6f 70 65 6e 20 6f 6e 20 61 6e 20  rsor open on an 
22680 53 51 4c 20 74 61 62 6c 65 20 62 74 72 65 65 20  SQL table btree 
22690 28 77 69 74 68 20 69 6e 74 65 67 65 72 0a 2a 2a  (with integer.**
226a0 20 6b 65 79 73 29 2e 20 20 49 66 20 72 65 67 69   keys).  If regi
226b0 73 74 65 72 20 50 33 20 64 6f 65 73 20 6e 6f 74  ster P3 does not
226c0 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65   contain an inte
226d0 67 65 72 20 6f 72 20 69 66 20 50 31 20 64 6f 65  ger or if P1 doe
226e0 73 20 6e 6f 74 0a 2a 2a 20 63 6f 6e 74 61 69 6e  s not.** contain
226f0 20 61 20 72 65 63 6f 72 64 20 77 69 74 68 20 72   a record with r
22700 6f 77 69 64 20 50 33 20 74 68 65 6e 20 6a 75 6d  owid P3 then jum
22710 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
22720 20 50 32 2e 20 20 0a 2a 2a 20 4f 72 2c 20 69 66   P2.  .** Or, if
22730 20 50 32 20 69 73 20 30 2c 20 72 61 69 73 65 20   P2 is 0, raise 
22740 61 6e 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50  an SQLITE_CORRUP
22750 54 20 65 72 72 6f 72 2e 20 49 66 20 50 31 20 64  T error. If P1 d
22760 6f 65 73 20 63 6f 6e 74 61 69 6e 0a 2a 2a 20 61  oes contain.** a
22770 20 72 65 63 6f 72 64 20 77 69 74 68 20 72 6f 77   record with row
22780 69 64 20 50 33 20 74 68 65 6e 20 0a 2a 2a 20 6c  id P3 then .** l
22790 65 61 76 65 20 74 68 65 20 63 75 72 73 6f 72 20  eave the cursor 
227a0 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 61 74  pointing at that
227b0 20 72 65 63 6f 72 64 20 61 6e 64 20 66 61 6c 6c   record and fall
227c0 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
227d0 6e 65 78 74 0a 2a 2a 20 69 6e 73 74 72 75 63 74  next.** instruct
227e0 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f  ion..**.** The O
227f0 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 70 63 6f  P_NotExists opco
22800 64 65 20 70 65 72 66 6f 72 6d 73 20 74 68 65 20  de performs the 
22810 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 2c 20  same operation, 
22820 62 75 74 20 77 69 74 68 20 4f 50 5f 4e 6f 74 45  but with OP_NotE
22830 78 69 73 74 73 0a 2a 2a 20 74 68 65 20 50 33 20  xists.** the P3 
22840 72 65 67 69 73 74 65 72 20 6d 75 73 74 20 62 65  register must be
22850 20 67 75 61 72 61 6e 74 65 65 64 20 74 6f 20 63   guaranteed to c
22860 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65  ontain an intege
22870 72 20 76 61 6c 75 65 2e 20 20 57 69 74 68 20 74  r value.  With t
22880 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 2c 20 72  his.** opcode, r
22890 65 67 69 73 74 65 72 20 50 33 20 6d 69 67 68 74  egister P3 might
228a0 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20   not contain an 
228b0 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54  integer..**.** T
228c0 68 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 6f  he OP_NotFound o
228d0 70 63 6f 64 65 20 70 65 72 66 6f 72 6d 73 20 74  pcode performs t
228e0 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f  he same operatio
228f0 6e 20 6f 6e 20 69 6e 64 65 78 20 62 74 72 65 65  n on index btree
22900 73 0a 2a 2a 20 28 77 69 74 68 20 61 72 62 69 74  s.** (with arbit
22910 72 61 72 79 20 6d 75 6c 74 69 2d 76 61 6c 75 65  rary multi-value
22920 20 6b 65 79 73 29 2e 0a 2a 2a 0a 2a 2a 20 54 68   keys)..**.** Th
22930 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73  is opcode leaves
22940 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61   the cursor in a
22950 20 73 74 61 74 65 20 77 68 65 72 65 20 69 74 20   state where it 
22960 63 61 6e 6e 6f 74 20 62 65 20 61 64 76 61 6e 63  cannot be advanc
22970 65 64 0a 2a 2a 20 69 6e 20 65 69 74 68 65 72 20  ed.** in either 
22980 64 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f  direction.  In o
22990 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
229a0 4e 65 78 74 20 61 6e 64 20 50 72 65 76 20 6f 70  Next and Prev op
229b0 63 6f 64 65 73 20 77 69 6c 6c 0a 2a 2a 20 6e 6f  codes will.** no
229c0 74 20 77 6f 72 6b 20 66 6f 6c 6c 6f 77 69 6e 67  t work following
229d0 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a   this opcode..**
229e0 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
229f0 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e  und, NotFound, N
22a00 6f 43 6f 6e 66 6c 69 63 74 2c 20 53 65 65 6b 52  oConflict, SeekR
22a10 6f 77 69 64 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  owid.*/./* Opcod
22a20 65 3a 20 4e 6f 74 45 78 69 73 74 73 20 50 31 20  e: NotExists P1 
22a30 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
22a40 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72 5b  opsis: intkey=r[
22a50 50 33 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  P3].**.** P1 is 
22a60 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20 63  the index of a c
22a70 75 72 73 6f 72 20 6f 70 65 6e 20 6f 6e 20 61 6e  ursor open on an
22a80 20 53 51 4c 20 74 61 62 6c 65 20 62 74 72 65 65   SQL table btree
22a90 20 28 77 69 74 68 20 69 6e 74 65 67 65 72 0a 2a   (with integer.*
22aa0 2a 20 6b 65 79 73 29 2e 20 20 50 33 20 69 73 20  * keys).  P3 is 
22ab0 61 6e 20 69 6e 74 65 67 65 72 20 72 6f 77 69 64  an integer rowid
22ac0 2e 20 20 49 66 20 50 31 20 64 6f 65 73 20 6e 6f  .  If P1 does no
22ad0 74 20 63 6f 6e 74 61 69 6e 20 61 20 72 65 63 6f  t contain a reco
22ae0 72 64 20 77 69 74 68 0a 2a 2a 20 72 6f 77 69 64  rd with.** rowid
22af0 20 50 33 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d   P3 then jump im
22b00 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
22b10 20 20 4f 72 2c 20 69 66 20 50 32 20 69 73 20 30    Or, if P2 is 0
22b20 2c 20 72 61 69 73 65 20 61 6e 0a 2a 2a 20 53 51  , raise an.** SQ
22b30 4c 49 54 45 5f 43 4f 52 52 55 50 54 20 65 72 72  LITE_CORRUPT err
22b40 6f 72 2e 20 49 66 20 50 31 20 64 6f 65 73 20 63  or. If P1 does c
22b50 6f 6e 74 61 69 6e 20 61 20 72 65 63 6f 72 64 20  ontain a record 
22b60 77 69 74 68 20 72 6f 77 69 64 20 50 33 20 74 68  with rowid P3 th
22b70 65 6e 20 0a 2a 2a 20 6c 65 61 76 65 20 74 68 65  en .** leave the
22b80 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67   cursor pointing
22b90 20 61 74 20 74 68 61 74 20 72 65 63 6f 72 64 20   at that record 
22ba0 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  and fall through
22bb0 20 74 6f 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20   to the next.** 
22bc0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
22bd0 2a 2a 20 54 68 65 20 4f 50 5f 53 65 65 6b 52 6f  ** The OP_SeekRo
22be0 77 69 64 20 6f 70 63 6f 64 65 20 70 65 72 66 6f  wid opcode perfo
22bf0 72 6d 73 20 74 68 65 20 73 61 6d 65 20 6f 70 65  rms the same ope
22c00 72 61 74 69 6f 6e 20 62 75 74 20 61 6c 73 6f 20  ration but also 
22c10 61 6c 6c 6f 77 73 20 74 68 65 0a 2a 2a 20 50 33  allows the.** P3
22c20 20 72 65 67 69 73 74 65 72 20 74 6f 20 63 6f 6e   register to con
22c30 74 61 69 6e 20 61 20 6e 6f 6e 2d 69 6e 74 65 67  tain a non-integ
22c40 65 72 20 76 61 6c 75 65 2c 20 69 6e 20 77 68 69  er value, in whi
22c50 63 68 20 63 61 73 65 20 74 68 65 20 6a 75 6d 70  ch case the jump
22c60 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 74 61   is.** always ta
22c70 6b 65 6e 2e 20 20 54 68 69 73 20 6f 70 63 6f 64  ken.  This opcod
22c80 65 20 72 65 71 75 69 72 65 73 20 74 68 61 74 20  e requires that 
22c90 50 33 20 61 6c 77 61 79 73 20 63 6f 6e 74 61 69  P3 always contai
22ca0 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a  n an integer..**
22cb0 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e 6f 74 46 6f  .** The OP_NotFo
22cc0 75 6e 64 20 6f 70 63 6f 64 65 20 70 65 72 66 6f  und opcode perfo
22cd0 72 6d 73 20 74 68 65 20 73 61 6d 65 20 6f 70 65  rms the same ope
22ce0 72 61 74 69 6f 6e 20 6f 6e 20 69 6e 64 65 78 20  ration on index 
22cf0 62 74 72 65 65 73 0a 2a 2a 20 28 77 69 74 68 20  btrees.** (with 
22d00 61 72 62 69 74 72 61 72 79 20 6d 75 6c 74 69 2d  arbitrary multi-
22d10 76 61 6c 75 65 20 6b 65 79 73 29 2e 0a 2a 2a 0a  value keys)..**.
22d20 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c  ** This opcode l
22d30 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
22d40 20 69 6e 20 61 20 73 74 61 74 65 20 77 68 65 72   in a state wher
22d50 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 20 61  e it cannot be a
22d60 64 76 61 6e 63 65 64 0a 2a 2a 20 69 6e 20 65 69  dvanced.** in ei
22d70 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e 20  ther direction. 
22d80 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
22d90 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50 72   the Next and Pr
22da0 65 76 20 6f 70 63 6f 64 65 73 20 77 69 6c 6c 0a  ev opcodes will.
22db0 2a 2a 20 6e 6f 74 20 77 6f 72 6b 20 66 6f 6c 6c  ** not work foll
22dc0 6f 77 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64  owing this opcod
22dd0 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  e..**.** See als
22de0 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75  o: Found, NotFou
22df0 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20  nd, NoConflict, 
22e00 53 65 65 6b 52 6f 77 69 64 0a 2a 2f 0a 63 61 73  SeekRowid.*/.cas
22e10 65 20 4f 50 5f 53 65 65 6b 52 6f 77 69 64 3a 20  e OP_SeekRowid: 
22e20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
22e30 2c 20 69 6e 33 20 2a 2f 0a 20 20 56 64 62 65 43  , in3 */.  VdbeC
22e40 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
22e50 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
22e60 69 6e 74 20 72 65 73 3b 0a 20 20 75 36 34 20 69  int res;.  u64 i
22e70 4b 65 79 3b 0a 0a 20 20 70 49 6e 33 20 3d 20 26  Key;..  pIn3 = &
22e80 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
22e90 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67   if( (pIn3->flag
22ea0 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20  s & MEM_Int)==0 
22eb0 29 7b 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69  ){.    applyAffi
22ec0 6e 69 74 79 28 70 49 6e 33 2c 20 53 51 4c 49 54  nity(pIn3, SQLIT
22ed0 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20 65  E_AFF_NUMERIC, e
22ee0 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 69 66  ncoding);.    if
22ef0 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  ( (pIn3->flags &
22f00 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 20 67   MEM_Int)==0 ) g
22f10 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
22f20 20 20 7d 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68    }.  /* Fall th
22f30 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 4e 6f  rough into OP_No
22f40 74 45 78 69 73 74 73 20 2a 2f 0a 63 61 73 65 20  tExists */.case 
22f50 4f 50 5f 4e 6f 74 45 78 69 73 74 73 3a 20 20 20  OP_NotExists:   
22f60 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
22f70 69 6e 33 20 2a 2f 0a 20 20 70 49 6e 33 20 3d 20  in3 */.  pIn3 = 
22f80 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
22f90 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e    assert( pIn3->
22fa0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
22fb0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
22fc0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
22fd0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
22fe0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
22ff0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
23000 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 23 69  ert( pC!=0 );.#i
23010 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
23020 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d  G.  pC->seekOp =
23030 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20 61 73 73   0;.#endif.  ass
23040 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
23050 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
23060 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
23070 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 70  YPE_BTREE );.  p
23080 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43  Crsr = pC->uc.pC
23090 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28  ursor;.  assert(
230a0 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 72   pCrsr!=0 );.  r
230b0 65 73 20 3d 20 30 3b 0a 20 20 69 4b 65 79 20 3d  es = 0;.  iKey =
230c0 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 72 63   pIn3->u.i;.  rc
230d0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d   = sqlite3BtreeM
230e0 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43  ovetoUnpacked(pC
230f0 72 73 72 2c 20 30 2c 20 69 4b 65 79 2c 20 30 2c  rsr, 0, iKey, 0,
23100 20 26 72 65 73 29 3b 0a 20 20 61 73 73 65 72 74   &res);.  assert
23110 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
23120 7c 7c 20 72 65 73 3d 3d 30 20 29 3b 0a 20 20 70  || res==0 );.  p
23130 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20  C->movetoTarget 
23140 3d 20 69 4b 65 79 3b 20 20 2f 2a 20 55 73 65 64  = iKey;  /* Used
23150 20 62 79 20 4f 50 5f 44 65 6c 65 74 65 20 2a 2f   by OP_Delete */
23160 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  .  pC->nullRow =
23170 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   0;.  pC->cacheS
23180 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
23190 41 4c 45 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72  ALE;.  pC->defer
231a0 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20  redMoveto = 0;. 
231b0 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
231c0 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 70 43  (res!=0,2);.  pC
231d0 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 72  ->seekResult = r
231e0 65 73 3b 0a 20 20 69 66 28 20 72 65 73 21 3d 30  es;.  if( res!=0
231f0 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
23200 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
23210 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  .    if( pOp->p2
23220 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20  ==0 ){.      rc 
23230 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  = SQLITE_CORRUPT
23240 5f 42 4b 50 54 3b 0a 20 20 20 20 7d 65 6c 73 65  _BKPT;.    }else
23250 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d  {.      goto jum
23260 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a 20  p_to_p2;.    }. 
23270 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f   }.  if( rc ) go
23280 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
23290 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a  error;.  break;.
232a0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  }../* Opcode: Se
232b0 71 75 65 6e 63 65 20 50 31 20 50 32 20 2a 20 2a  quence P1 P2 * *
232c0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
232d0 72 5b 50 32 5d 3d 63 75 72 73 6f 72 5b 50 31 5d  r[P2]=cursor[P1]
232e0 2e 63 74 72 2b 2b 0a 2a 2a 0a 2a 2a 20 46 69 6e  .ctr++.**.** Fin
232f0 64 20 74 68 65 20 6e 65 78 74 20 61 76 61 69 6c  d the next avail
23300 61 62 6c 65 20 73 65 71 75 65 6e 63 65 20 6e 75  able sequence nu
23310 6d 62 65 72 20 66 6f 72 20 63 75 72 73 6f 72 20  mber for cursor 
23320 50 31 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 65  P1..** Write the
23330 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72   sequence number
23340 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
23350 32 2e 0a 2a 2a 20 54 68 65 20 73 65 71 75 65 6e  2..** The sequen
23360 63 65 20 6e 75 6d 62 65 72 20 6f 6e 20 74 68 65  ce number on the
23370 20 63 75 72 73 6f 72 20 69 73 20 69 6e 63 72 65   cursor is incre
23380 6d 65 6e 74 65 64 20 61 66 74 65 72 20 74 68 69  mented after thi
23390 73 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e  s.** instruction
233a0 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  .  .*/.case OP_S
233b0 65 71 75 65 6e 63 65 3a 20 7b 20 20 20 20 20 20  equence: {      
233c0 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
233d0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
233e0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
233f0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
23400 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72  assert( p->apCsr
23410 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b 0a  [pOp->p1]!=0 );.
23420 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43    assert( p->apC
23430 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 65 43 75  sr[pOp->p1]->eCu
23440 72 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f 56  rType!=CURTYPE_V
23450 54 41 42 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20  TAB );.  pOut = 
23460 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
23470 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e  , pOp);.  pOut->
23480 75 2e 69 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  u.i = p->apCsr[p
23490 4f 70 2d 3e 70 31 5d 2d 3e 73 65 71 43 6f 75 6e  Op->p1]->seqCoun
234a0 74 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  t++;.  break;.}.
234b0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 77  ../* Opcode: New
234c0 52 6f 77 69 64 20 50 31 20 50 32 20 50 33 20 2a  Rowid P1 P2 P3 *
234d0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
234e0 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a  r[P2]=rowid.**.*
234f0 2a 20 47 65 74 20 61 20 6e 65 77 20 69 6e 74 65  * Get a new inte
23500 67 65 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  ger record numbe
23510 72 20 28 61 2e 6b 2e 61 20 22 72 6f 77 69 64 22  r (a.k.a "rowid"
23520 29 20 75 73 65 64 20 61 73 20 74 68 65 20 6b 65  ) used as the ke
23530 79 20 74 6f 20 61 20 74 61 62 6c 65 2e 0a 2a 2a  y to a table..**
23540 20 54 68 65 20 72 65 63 6f 72 64 20 6e 75 6d 62   The record numb
23550 65 72 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f  er is not previo
23560 75 73 6c 79 20 75 73 65 64 20 61 73 20 61 20 6b  usly used as a k
23570 65 79 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ey in the databa
23580 73 65 0a 2a 2a 20 74 61 62 6c 65 20 74 68 61 74  se.** table that
23590 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74   cursor P1 point
235a0 73 20 74 6f 2e 20 20 54 68 65 20 6e 65 77 20 72  s to.  The new r
235b0 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20  ecord number is 
235c0 77 72 69 74 74 65 6e 0a 2a 2a 20 77 72 69 74 74  written.** writt
235d0 65 6e 20 74 6f 20 72 65 67 69 73 74 65 72 20 50  en to register P
235e0 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 3e 30  2..**.** If P3>0
235f0 20 74 68 65 6e 20 50 33 20 69 73 20 61 20 72 65   then P3 is a re
23600 67 69 73 74 65 72 20 69 6e 20 74 68 65 20 72 6f  gister in the ro
23610 6f 74 20 66 72 61 6d 65 20 6f 66 20 74 68 69 73  ot frame of this
23620 20 56 44 42 45 20 74 68 61 74 20 68 6f 6c 64 73   VDBE that holds
23630 20 0a 2a 2a 20 74 68 65 20 6c 61 72 67 65 73 74   .** the largest
23640 20 70 72 65 76 69 6f 75 73 6c 79 20 67 65 6e 65   previously gene
23650 72 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75 6d  rated record num
23660 62 65 72 2e 20 4e 6f 20 6e 65 77 20 72 65 63 6f  ber. No new reco
23670 72 64 20 6e 75 6d 62 65 72 73 20 61 72 65 0a 2a  rd numbers are.*
23680 2a 20 61 6c 6c 6f 77 65 64 20 74 6f 20 62 65 20  * allowed to be 
23690 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 76  less than this v
236a0 61 6c 75 65 2e 20 57 68 65 6e 20 74 68 69 73 20  alue. When this 
236b0 76 61 6c 75 65 20 72 65 61 63 68 65 73 20 69 74  value reaches it
236c0 73 20 6d 61 78 69 6d 75 6d 2c 20 0a 2a 2a 20 61  s maximum, .** a
236d0 6e 20 53 51 4c 49 54 45 5f 46 55 4c 4c 20 65 72  n SQLITE_FULL er
236e0 72 6f 72 20 69 73 20 67 65 6e 65 72 61 74 65 64  ror is generated
236f0 2e 20 54 68 65 20 50 33 20 72 65 67 69 73 74 65  . The P3 registe
23700 72 20 69 73 20 75 70 64 61 74 65 64 20 77 69 74  r is updated wit
23710 68 20 74 68 65 20 27 0a 2a 2a 20 67 65 6e 65 72  h the '.** gener
23720 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75 6d 62  ated record numb
23730 65 72 2e 20 54 68 69 73 20 50 33 20 6d 65 63 68  er. This P3 mech
23740 61 6e 69 73 6d 20 69 73 20 75 73 65 64 20 74 6f  anism is used to
23750 20 68 65 6c 70 20 69 6d 70 6c 65 6d 65 6e 74 20   help implement 
23760 74 68 65 0a 2a 2a 20 41 55 54 4f 49 4e 43 52 45  the.** AUTOINCRE
23770 4d 45 4e 54 20 66 65 61 74 75 72 65 2e 0a 2a 2f  MENT feature..*/
23780 0a 63 61 73 65 20 4f 50 5f 4e 65 77 52 6f 77 69  .case OP_NewRowi
23790 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  d: {           /
237a0 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 36 34 20  * out2 */.  i64 
237b0 76 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  v;              
237c0 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72 6f     /* The new ro
237d0 77 69 64 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  wid */.  VdbeCur
237e0 73 6f 72 20 2a 70 43 3b 20 20 20 20 20 20 20 20  sor *pC;        
237f0 2f 2a 20 43 75 72 73 6f 72 20 6f 66 20 74 61 62  /* Cursor of tab
23800 6c 65 20 74 6f 20 67 65 74 20 74 68 65 20 6e 65  le to get the ne
23810 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69 6e 74  w rowid */.  int
23820 20 72 65 73 3b 20 20 20 20 20 20 20 20 20 20 20   res;           
23830 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66      /* Result of
23840 20 61 6e 20 73 71 6c 69 74 65 33 42 74 72 65 65   an sqlite3Btree
23850 4c 61 73 74 28 29 20 2a 2f 0a 20 20 69 6e 74 20  Last() */.  int 
23860 63 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  cnt;            
23870 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20 74 6f     /* Counter to
23880 20 6c 69 6d 69 74 20 74 68 65 20 6e 75 6d 62 65   limit the numbe
23890 72 20 6f 66 20 73 65 61 72 63 68 65 73 20 2a 2f  r of searches */
238a0 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20  .  Mem *pMem;   
238b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67            /* Reg
238c0 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 6c 61  ister holding la
238d0 72 67 65 73 74 20 72 6f 77 69 64 20 66 6f 72 20  rgest rowid for 
238e0 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f  AUTOINCREMENT */
238f0 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46  .  VdbeFrame *pF
23900 72 61 6d 65 3b 20 20 20 20 20 2f 2a 20 52 6f 6f  rame;     /* Roo
23910 74 20 66 72 61 6d 65 20 6f 66 20 56 44 42 45 20  t frame of VDBE 
23920 2a 2f 0a 0a 20 20 76 20 3d 20 30 3b 0a 20 20 72  */..  v = 0;.  r
23930 65 73 20 3d 20 30 3b 0a 20 20 70 4f 75 74 20 3d  es = 0;.  pOut =
23940 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
23950 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65 72  p, pOp);.  asser
23960 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
23970 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
23980 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
23990 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
239a0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
239b0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
239c0 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
239d0 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61  YPE_BTREE );.  a
239e0 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43  ssert( pC->uc.pC
239f0 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 7b 0a  ursor!=0 );.  {.
23a00 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20      /* The next 
23a10 72 6f 77 69 64 20 6f 72 20 72 65 63 6f 72 64 20  rowid or record 
23a20 6e 75 6d 62 65 72 20 28 64 69 66 66 65 72 65 6e  number (differen
23a30 74 20 74 65 72 6d 73 20 66 6f 72 20 74 68 65 20  t terms for the 
23a40 73 61 6d 65 0a 20 20 20 20 2a 2a 20 74 68 69 6e  same.    ** thin
23a50 67 29 20 69 73 20 6f 62 74 61 69 6e 65 64 20 69  g) is obtained i
23a60 6e 20 61 20 74 77 6f 2d 73 74 65 70 20 61 6c 67  n a two-step alg
23a70 6f 72 69 74 68 6d 2e 0a 20 20 20 20 2a 2a 0a 20  orithm..    **. 
23a80 20 20 20 2a 2a 20 46 69 72 73 74 20 77 65 20 61     ** First we a
23a90 74 74 65 6d 70 74 20 74 6f 20 66 69 6e 64 20 74  ttempt to find t
23aa0 68 65 20 6c 61 72 67 65 73 74 20 65 78 69 73 74  he largest exist
23ab0 69 6e 67 20 72 6f 77 69 64 20 61 6e 64 20 61 64  ing rowid and ad
23ac0 64 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 74 6f 20  d one.    ** to 
23ad0 74 68 61 74 2e 20 20 42 75 74 20 69 66 20 74 68  that.  But if th
23ae0 65 20 6c 61 72 67 65 73 74 20 65 78 69 73 74 69  e largest existi
23af0 6e 67 20 72 6f 77 69 64 20 69 73 20 61 6c 72 65  ng rowid is alre
23b00 61 64 79 20 74 68 65 20 6d 61 78 69 6d 75 6d 0a  ady the maximum.
23b10 20 20 20 20 2a 2a 20 70 6f 73 69 74 69 76 65 20      ** positive 
23b20 69 6e 74 65 67 65 72 2c 20 77 65 20 68 61 76 65  integer, we have
23b30 20 74 6f 20 66 61 6c 6c 20 74 68 72 6f 75 67 68   to fall through
23b40 20 74 6f 20 74 68 65 20 73 65 63 6f 6e 64 0a 20   to the second. 
23b50 20 20 20 2a 2a 20 70 72 6f 62 61 62 69 6c 69 73     ** probabilis
23b60 74 69 63 20 61 6c 67 6f 72 69 74 68 6d 0a 20 20  tic algorithm.  
23b70 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 68 65 20    **.    ** The 
23b80 73 65 63 6f 6e 64 20 61 6c 67 6f 72 69 74 68 6d  second algorithm
23b90 20 69 73 20 74 6f 20 73 65 6c 65 63 74 20 61 20   is to select a 
23ba0 72 6f 77 69 64 20 61 74 20 72 61 6e 64 6f 6d 20  rowid at random 
23bb0 61 6e 64 20 73 65 65 20 69 66 0a 20 20 20 20 2a  and see if.    *
23bc0 2a 20 69 74 20 61 6c 72 65 61 64 79 20 65 78 69  * it already exi
23bd0 73 74 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  sts in the table
23be0 2e 20 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f  .  If it does no
23bf0 74 20 65 78 69 73 74 2c 20 77 65 20 68 61 76 65  t exist, we have
23c00 0a 20 20 20 20 2a 2a 20 73 75 63 63 65 65 64 65  .    ** succeede
23c10 64 2e 20 20 49 66 20 74 68 65 20 72 61 6e 64 6f  d.  If the rando
23c20 6d 20 72 6f 77 69 64 20 64 6f 65 73 20 65 78 69  m rowid does exi
23c30 73 74 2c 20 77 65 20 73 65 6c 65 63 74 20 61 20  st, we select a 
23c40 6e 65 77 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 61  new one.    ** a
23c50 6e 64 20 74 72 79 20 61 67 61 69 6e 2c 20 75 70  nd try again, up
23c60 20 74 6f 20 31 30 30 20 74 69 6d 65 73 2e 0a 20   to 100 times.. 
23c70 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74     */.    assert
23c80 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b  ( pC->isTable );
23c90 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
23ca0 33 32 42 49 54 5f 52 4f 57 49 44 0a 23 20 20 20  32BIT_ROWID.#   
23cb0 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44  define MAX_ROWID
23cc0 20 30 78 37 66 66 66 66 66 66 66 0a 23 65 6c 73   0x7fffffff.#els
23cd0 65 0a 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f  e.    /* Some co
23ce0 6d 70 69 6c 65 72 73 20 63 6f 6d 70 6c 61 69 6e  mpilers complain
23cf0 20 61 62 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73   about constants
23d00 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 30 78 37   of the form 0x7
23d10 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 2e  fffffffffffffff.
23d20 0a 20 20 20 20 2a 2a 20 4f 74 68 65 72 73 20 63  .    ** Others c
23d30 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 30 78  omplain about 0x
23d40 37 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66  7fffffffffffffff
23d50 66 4c 4c 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77  fLL.  The follow
23d60 69 6e 67 20 6d 61 63 72 6f 20 73 65 65 6d 73 0a  ing macro seems.
23d70 20 20 20 20 2a 2a 20 74 6f 20 70 72 6f 76 69 64      ** to provid
23d80 65 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 77  e the constant w
23d90 68 69 6c 65 20 6d 61 6b 69 6e 67 20 61 6c 6c 20  hile making all 
23da0 63 6f 6d 70 69 6c 65 72 73 20 68 61 70 70 79 2e  compilers happy.
23db0 0a 20 20 20 20 2a 2f 0a 23 20 20 20 64 65 66 69  .    */.#   defi
23dc0 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 20 28 69  ne MAX_ROWID  (i
23dd0 36 34 29 28 20 28 28 28 75 36 34 29 30 78 37 66  64)( (((u64)0x7f
23de0 66 66 66 66 66 66 29 3c 3c 33 32 29 20 7c 20 28  ffffff)<<32) | (
23df0 75 36 34 29 30 78 66 66 66 66 66 66 66 66 20 29  u64)0xffffffff )
23e00 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 69 66 28  .#endif..    if(
23e10 20 21 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52   !pC->useRandomR
23e20 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 72 63  owid ){.      rc
23e30 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c   = sqlite3BtreeL
23e40 61 73 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  ast(pC->uc.pCurs
23e50 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20  or, &res);.     
23e60 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
23e70 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f  OK ){.        go
23e80 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
23e90 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20  error;.      }. 
23ea0 20 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a       if( res ){.
23eb0 20 20 20 20 20 20 20 20 76 20 3d 20 31 3b 20 20          v = 1;  
23ec0 20 2f 2a 20 49 4d 50 3a 20 52 2d 36 31 39 31 34   /* IMP: R-61914
23ed0 2d 34 38 30 37 34 20 2a 2f 0a 20 20 20 20 20 20  -48074 */.      
23ee0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 61  }else{.        a
23ef0 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74  ssert( sqlite3Bt
23f00 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64  reeCursorIsValid
23f10 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29  (pC->uc.pCursor)
23f20 20 29 3b 0a 20 20 20 20 20 20 20 20 76 20 3d 20   );.        v = 
23f30 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65  sqlite3BtreeInte
23f40 67 65 72 4b 65 79 28 70 43 2d 3e 75 63 2e 70 43  gerKey(pC->uc.pC
23f50 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 20 20  ursor);.        
23f60 69 66 28 20 76 3e 3d 4d 41 58 5f 52 4f 57 49 44  if( v>=MAX_ROWID
23f70 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70 43   ){.          pC
23f80 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64  ->useRandomRowid
23f90 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65   = 1;.        }e
23fa0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 76  lse{.          v
23fb0 2b 2b 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d  ++;   /* IMP: R-
23fc0 32 39 35 33 38 2d 33 34 39 38 37 20 2a 2f 0a 20  29538-34987 */. 
23fd0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
23fe0 0a 20 20 20 20 7d 0a 0a 23 69 66 6e 64 65 66 20  .    }..#ifndef 
23ff0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
24000 49 4e 43 52 45 4d 45 4e 54 0a 20 20 20 20 69 66  INCREMENT.    if
24010 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20  ( pOp->p3 ){.   
24020 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61     /* Assert tha
24030 74 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20  t P3 is a valid 
24040 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a  memory cell. */.
24050 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
24060 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20  p->p3>0 );.     
24070 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29   if( p->pFrame )
24080 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 70 46  {.        for(pF
24090 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20  rame=p->pFrame; 
240a0 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b  pFrame->pParent;
240b0 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e   pFrame=pFrame->
240c0 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 20 20  pParent);.      
240d0 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74    /* Assert that
240e0 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d   P3 is a valid m
240f0 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20  emory cell. */. 
24100 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
24110 4f 70 2d 3e 70 33 3c 3d 70 46 72 61 6d 65 2d 3e  Op->p3<=pFrame->
24120 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 20 20  nMem );.        
24130 70 4d 65 6d 20 3d 20 26 70 46 72 61 6d 65 2d 3e  pMem = &pFrame->
24140 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
24150 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
24160 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68      /* Assert th
24170 61 74 20 50 33 20 69 73 20 61 20 76 61 6c 69 64  at P3 is a valid
24180 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f   memory cell. */
24190 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
241a0 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d   pOp->p3<=(p->nM
241b0 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
241c0 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 70 4d  r) );.        pM
241d0 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  em = &aMem[pOp->
241e0 70 33 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d  p3];.        mem
241f0 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
24200 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 7d 0a   pMem);.      }.
24210 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
24220 6d 49 73 56 61 6c 69 64 28 70 4d 65 6d 29 20 29  mIsValid(pMem) )
24230 3b 0a 0a 20 20 20 20 20 20 52 45 47 49 53 54 45  ;..      REGISTE
24240 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
24250 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 73 71   pMem);.      sq
24260 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
24270 67 65 72 69 66 79 28 70 4d 65 6d 29 3b 0a 20 20  gerify(pMem);.  
24280 20 20 20 20 61 73 73 65 72 74 28 20 28 70 4d 65      assert( (pMe
24290 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  m->flags & MEM_I
242a0 6e 74 29 21 3d 30 20 29 3b 20 20 2f 2a 20 6d 65  nt)!=0 );  /* me
242b0 6d 28 50 33 29 20 68 6f 6c 64 73 20 61 6e 20 69  m(P3) holds an i
242c0 6e 74 65 67 65 72 20 2a 2f 0a 20 20 20 20 20 20  nteger */.      
242d0 69 66 28 20 70 4d 65 6d 2d 3e 75 2e 69 3d 3d 4d  if( pMem->u.i==M
242e0 41 58 5f 52 4f 57 49 44 20 7c 7c 20 70 43 2d 3e  AX_ROWID || pC->
242f0 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29  useRandomRowid )
24300 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53  {.        rc = S
24310 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a  QLITE_FULL;   /*
24320 20 49 4d 50 3a 20 52 2d 31 37 38 31 37 2d 30 30   IMP: R-17817-00
24330 36 33 30 20 2a 2f 0a 20 20 20 20 20 20 20 20 67  630 */.        g
24340 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
24350 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
24360 20 20 20 20 20 20 69 66 28 20 76 3c 70 4d 65 6d        if( v<pMem
24370 2d 3e 75 2e 69 2b 31 20 29 7b 0a 20 20 20 20 20  ->u.i+1 ){.     
24380 20 20 20 76 20 3d 20 70 4d 65 6d 2d 3e 75 2e 69     v = pMem->u.i
24390 20 2b 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20   + 1;.      }.  
243a0 20 20 20 20 70 4d 65 6d 2d 3e 75 2e 69 20 3d 20      pMem->u.i = 
243b0 76 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  v;.    }.#endif.
243c0 20 20 20 20 69 66 28 20 70 43 2d 3e 75 73 65 52      if( pC->useR
243d0 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20  andomRowid ){.  
243e0 20 20 20 20 2f 2a 20 49 4d 50 4c 45 4d 45 4e 54      /* IMPLEMENT
243f0 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 30 37 36 37  ATION-OF: R-0767
24400 37 2d 34 31 38 38 31 20 49 66 20 74 68 65 20 6c  7-41881 If the l
24410 61 72 67 65 73 74 20 52 4f 57 49 44 20 69 73 20  argest ROWID is 
24420 65 71 75 61 6c 20 74 6f 20 74 68 65 0a 20 20 20  equal to the.   
24430 20 20 20 2a 2a 20 6c 61 72 67 65 73 74 20 70 6f     ** largest po
24440 73 73 69 62 6c 65 20 69 6e 74 65 67 65 72 20 28  ssible integer (
24450 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35  9223372036854775
24460 38 30 37 29 20 74 68 65 6e 20 74 68 65 20 64 61  807) then the da
24470 74 61 62 61 73 65 0a 20 20 20 20 20 20 2a 2a 20  tabase.      ** 
24480 65 6e 67 69 6e 65 20 73 74 61 72 74 73 20 70 69  engine starts pi
24490 63 6b 69 6e 67 20 70 6f 73 69 74 69 76 65 20 63  cking positive c
244a0 61 6e 64 69 64 61 74 65 20 52 4f 57 49 44 73 20  andidate ROWIDs 
244b0 61 74 20 72 61 6e 64 6f 6d 20 75 6e 74 69 6c 0a  at random until.
244c0 20 20 20 20 20 20 2a 2a 20 69 74 20 66 69 6e 64        ** it find
244d0 73 20 6f 6e 65 20 74 68 61 74 20 69 73 20 6e 6f  s one that is no
244e0 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73 65  t previously use
244f0 64 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65  d. */.      asse
24500 72 74 28 20 70 4f 70 2d 3e 70 33 3d 3d 30 20 29  rt( pOp->p3==0 )
24510 3b 20 20 2f 2a 20 57 65 20 63 61 6e 6e 6f 74 20  ;  /* We cannot 
24520 62 65 20 69 6e 20 72 61 6e 64 6f 6d 20 72 6f 77  be in random row
24530 69 64 20 6d 6f 64 65 20 69 66 20 74 68 69 73 20  id mode if this 
24540 69 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  is.             
24550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24560 2a 2a 20 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d  ** an AUTOINCREM
24570 45 4e 54 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20  ENT table. */.  
24580 20 20 20 20 63 6e 74 20 3d 20 30 3b 0a 20 20 20      cnt = 0;.   
24590 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20 20 73     do{.        s
245a0 71 6c 69 74 65 33 5f 72 61 6e 64 6f 6d 6e 65 73  qlite3_randomnes
245b0 73 28 73 69 7a 65 6f 66 28 76 29 2c 20 26 76 29  s(sizeof(v), &v)
245c0 3b 0a 20 20 20 20 20 20 20 20 76 20 26 3d 20 28  ;.        v &= (
245d0 4d 41 58 5f 52 4f 57 49 44 3e 3e 31 29 3b 20 76  MAX_ROWID>>1); v
245e0 2b 2b 3b 20 20 2f 2a 20 45 6e 73 75 72 65 20 74  ++;  /* Ensure t
245f0 68 61 74 20 76 20 69 73 20 67 72 65 61 74 65 72  hat v is greater
24600 20 74 68 61 6e 20 7a 65 72 6f 20 2a 2f 0a 20 20   than zero */.  
24610 20 20 20 20 7d 77 68 69 6c 65 28 20 20 28 28 72      }while(  ((r
24620 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
24630 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
24640 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 30  C->uc.pCursor, 0
24650 2c 20 28 75 36 34 29 76 2c 0a 20 20 20 20 20 20  , (u64)v,.      
24660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24680 20 20 20 20 20 20 20 20 20 20 20 30 2c 20 26 72             0, &r
24690 65 73 29 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 29  es))==SQLITE_OK)
246a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 26 26 20  .            && 
246b0 28 72 65 73 3d 3d 30 29 0a 20 20 20 20 20 20 20  (res==0).       
246c0 20 20 20 20 20 26 26 20 28 2b 2b 63 6e 74 3c 31       && (++cnt<1
246d0 30 30 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20  00));.      if( 
246e0 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
246f0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
24700 20 20 20 20 69 66 28 20 72 65 73 3d 3d 30 20 29      if( res==0 )
24710 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53  {.        rc = S
24720 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a  QLITE_FULL;   /*
24730 20 49 4d 50 3a 20 52 2d 33 38 32 31 39 2d 35 33   IMP: R-38219-53
24740 30 30 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 67  002 */.        g
24750 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
24760 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
24770 20 20 20 20 20 20 61 73 73 65 72 74 28 20 76 3e        assert( v>
24780 30 20 29 3b 20 20 2f 2a 20 45 56 3a 20 52 2d 34  0 );  /* EV: R-4
24790 30 38 31 32 2d 30 33 35 37 30 20 2a 2f 0a 20 20  0812-03570 */.  
247a0 20 20 7d 0a 20 20 20 20 70 43 2d 3e 64 65 66 65    }.    pC->defe
247b0 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
247c0 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61      pC->cacheSta
247d0 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
247e0 45 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75  E;.  }.  pOut->u
247f0 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b  .i = v;.  break;
24800 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
24810 6e 73 65 72 74 20 50 31 20 50 32 20 50 33 20 50  nsert P1 P2 P3 P
24820 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
24830 3a 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 20 64  : intkey=r[P3] d
24840 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20  ata=r[P2].**.** 
24850 57 72 69 74 65 20 61 6e 20 65 6e 74 72 79 20 69  Write an entry i
24860 6e 74 6f 20 74 68 65 20 74 61 62 6c 65 20 6f 66  nto the table of
24870 20 63 75 72 73 6f 72 20 50 31 2e 20 20 41 20 6e   cursor P1.  A n
24880 65 77 20 65 6e 74 72 79 20 69 73 0a 2a 2a 20 63  ew entry is.** c
24890 72 65 61 74 65 64 20 69 66 20 69 74 20 64 6f 65  reated if it doe
248a0 73 6e 27 74 20 61 6c 72 65 61 64 79 20 65 78 69  sn't already exi
248b0 73 74 20 6f 72 20 74 68 65 20 64 61 74 61 20 66  st or the data f
248c0 6f 72 20 61 6e 20 65 78 69 73 74 69 6e 67 0a 2a  or an existing.*
248d0 2a 20 65 6e 74 72 79 20 69 73 20 6f 76 65 72 77  * entry is overw
248e0 72 69 74 74 65 6e 2e 20 20 54 68 65 20 64 61 74  ritten.  The dat
248f0 61 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 4d  a is the value M
24900 45 4d 5f 42 6c 6f 62 20 73 74 6f 72 65 64 20 69  EM_Blob stored i
24910 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6e 75  n register.** nu
24920 6d 62 65 72 20 50 32 2e 20 54 68 65 20 6b 65 79  mber P2. The key
24930 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
24940 67 69 73 74 65 72 20 50 33 2e 20 54 68 65 20 6b  gister P3. The k
24950 65 79 20 6d 75 73 74 0a 2a 2a 20 62 65 20 61 20  ey must.** be a 
24960 4d 45 4d 5f 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49  MEM_Int..**.** I
24970 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48  f the OPFLAG_NCH
24980 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 35 20  ANGE flag of P5 
24990 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65  is set, then the
249a0 20 72 6f 77 20 63 68 61 6e 67 65 20 63 6f 75 6e   row change coun
249b0 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e  t is.** incremen
249c0 74 65 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e  ted (otherwise n
249d0 6f 74 29 2e 20 20 49 66 20 74 68 65 20 4f 50 46  ot).  If the OPF
249e0 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 66 6c  LAG_LASTROWID fl
249f0 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c  ag of P5 is set,
24a00 0a 2a 2a 20 74 68 65 6e 20 72 6f 77 69 64 20 69  .** then rowid i
24a10 73 20 73 74 6f 72 65 64 20 66 6f 72 20 73 75 62  s stored for sub
24a20 73 65 71 75 65 6e 74 20 72 65 74 75 72 6e 20 62  sequent return b
24a30 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33  y the.** sqlite3
24a40 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77  _last_insert_row
24a50 69 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 28 6f  id() function (o
24a60 74 68 65 72 77 69 73 65 20 69 74 20 69 73 20 75  therwise it is u
24a70 6e 6d 6f 64 69 66 69 65 64 29 2e 0a 2a 2a 0a 2a  nmodified)..**.*
24a80 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f  * If the OPFLAG_
24a90 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c  USESEEKRESULT fl
24aa0 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c  ag of P5 is set,
24ab0 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74   the implementat
24ac0 69 6f 6e 20 6d 69 67 68 74 0a 2a 2a 20 72 75 6e  ion might.** run
24ad0 20 66 61 73 74 65 72 20 62 79 20 61 76 6f 69 64   faster by avoid
24ae0 69 6e 67 20 61 6e 20 75 6e 6e 65 63 65 73 73 61  ing an unnecessa
24af0 72 79 20 73 65 65 6b 20 6f 6e 20 63 75 72 73 6f  ry seek on curso
24b00 72 20 50 31 2e 20 20 48 6f 77 65 76 65 72 2c 0a  r P1.  However,.
24b10 2a 2a 20 74 68 65 20 4f 50 46 4c 41 47 5f 55 53  ** the OPFLAG_US
24b20 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67  ESEEKRESULT flag
24b30 20 6d 75 73 74 20 6f 6e 6c 79 20 62 65 20 73 65   must only be se
24b40 74 20 69 66 20 74 68 65 72 65 20 68 61 76 65 20  t if there have 
24b50 62 65 65 6e 20 6e 6f 20 70 72 69 6f 72 0a 2a 2a  been no prior.**
24b60 20 73 65 65 6b 73 20 6f 6e 20 74 68 65 20 63 75   seeks on the cu
24b70 72 73 6f 72 20 6f 72 20 69 66 20 74 68 65 20 6d  rsor or if the m
24b80 6f 73 74 20 72 65 63 65 6e 74 20 73 65 65 6b 20  ost recent seek 
24b90 75 73 65 64 20 61 20 6b 65 79 20 65 71 75 61 6c  used a key equal
24ba0 20 74 6f 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66   to P3..**.** If
24bb0 20 74 68 65 20 4f 50 46 4c 41 47 5f 49 53 55 50   the OPFLAG_ISUP
24bc0 44 41 54 45 20 66 6c 61 67 20 69 73 20 73 65 74  DATE flag is set
24bd0 2c 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f  , then this opco
24be0 64 65 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e  de is part of an
24bf0 0a 2a 2a 20 55 50 44 41 54 45 20 6f 70 65 72 61  .** UPDATE opera
24c00 74 69 6f 6e 2e 20 20 4f 74 68 65 72 77 69 73 65  tion.  Otherwise
24c10 20 28 69 66 20 74 68 65 20 66 6c 61 67 20 69 73   (if the flag is
24c20 20 63 6c 65 61 72 29 20 74 68 65 6e 20 74 68 69   clear) then thi
24c30 73 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 70  s opcode.** is p
24c40 61 72 74 20 6f 66 20 61 6e 20 49 4e 53 45 52 54  art of an INSERT
24c50 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 54 68 65   operation.  The
24c60 20 64 69 66 66 65 72 65 6e 63 65 20 69 73 20 6f   difference is o
24c70 6e 6c 79 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f  nly important to
24c80 0a 2a 2a 20 74 68 65 20 75 70 64 61 74 65 20 68  .** the update h
24c90 6f 6f 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61 6d  ook..**.** Param
24ca0 65 74 65 72 20 50 34 20 6d 61 79 20 70 6f 69 6e  eter P4 may poin
24cb0 74 20 74 6f 20 61 20 54 61 62 6c 65 20 73 74 72  t to a Table str
24cc0 75 63 74 75 72 65 2c 20 6f 72 20 6d 61 79 20 62  ucture, or may b
24cd0 65 20 4e 55 4c 4c 2e 20 49 66 20 69 74 20 69 73  e NULL. If it is
24ce0 20 0a 2a 2a 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74   .** not NULL, t
24cf0 68 65 6e 20 74 68 65 20 75 70 64 61 74 65 2d 68  hen the update-h
24d00 6f 6f 6b 20 28 73 71 6c 69 74 65 33 2e 78 55 70  ook (sqlite3.xUp
24d10 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 20 69 73  dateCallback) is
24d20 20 69 6e 76 6f 6b 65 64 20 0a 2a 2a 20 66 6f 6c   invoked .** fol
24d30 6c 6f 77 69 6e 67 20 61 20 73 75 63 63 65 73 73  lowing a success
24d40 66 75 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a 0a 2a  ful insert..**.*
24d50 2a 20 28 57 41 52 4e 49 4e 47 2f 54 4f 44 4f 3a  * (WARNING/TODO:
24d60 20 49 66 20 50 31 20 69 73 20 61 20 70 73 65 75   If P1 is a pseu
24d70 64 6f 2d 63 75 72 73 6f 72 20 61 6e 64 20 50 32  do-cursor and P2
24d80 20 69 73 20 64 79 6e 61 6d 69 63 61 6c 6c 79 0a   is dynamically.
24d90 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68  ** allocated, th
24da0 65 6e 20 6f 77 6e 65 72 73 68 69 70 20 6f 66 20  en ownership of 
24db0 50 32 20 69 73 20 74 72 61 6e 73 66 65 72 72 65  P2 is transferre
24dc0 64 20 74 6f 20 74 68 65 20 70 73 65 75 64 6f 2d  d to the pseudo-
24dd0 63 75 72 73 6f 72 0a 2a 2a 20 61 6e 64 20 72 65  cursor.** and re
24de0 67 69 73 74 65 72 20 50 32 20 62 65 63 6f 6d 65  gister P2 become
24df0 73 20 65 70 68 65 6d 65 72 61 6c 2e 20 20 49 66  s ephemeral.  If
24e00 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 63   the cursor is c
24e10 68 61 6e 67 65 64 2c 20 74 68 65 0a 2a 2a 20 76  hanged, the.** v
24e20 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72  alue of register
24e30 20 50 32 20 77 69 6c 6c 20 74 68 65 6e 20 63 68   P2 will then ch
24e40 61 6e 67 65 2e 20 20 4d 61 6b 65 20 73 75 72 65  ange.  Make sure
24e50 20 74 68 69 73 20 64 6f 65 73 20 6e 6f 74 0a 2a   this does not.*
24e60 2a 20 63 61 75 73 65 20 61 6e 79 20 70 72 6f 62  * cause any prob
24e70 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54 68 69  lems.).**.** Thi
24e80 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e  s instruction on
24e90 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 74 61 62 6c  ly works on tabl
24ea0 65 73 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c  es.  The equival
24eb0 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a  ent instruction.
24ec0 2a 2a 20 66 6f 72 20 69 6e 64 69 63 65 73 20 69  ** for indices i
24ed0 73 20 4f 50 5f 49 64 78 49 6e 73 65 72 74 2e 0a  s OP_IdxInsert..
24ee0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  */./* Opcode: In
24ef0 73 65 72 74 49 6e 74 20 50 31 20 50 32 20 50 33  sertInt P1 P2 P3
24f00 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
24f10 69 73 3a 20 69 6e 74 6b 65 79 3d 50 33 20 64 61  is: intkey=P3 da
24f20 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54  ta=r[P2].**.** T
24f30 68 69 73 20 77 6f 72 6b 73 20 65 78 61 63 74 6c  his works exactl
24f40 79 20 6c 69 6b 65 20 4f 50 5f 49 6e 73 65 72 74  y like OP_Insert
24f50 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
24f60 20 6b 65 79 20 69 73 20 74 68 65 0a 2a 2a 20 69   key is the.** i
24f70 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50 33 2c  nteger value P3,
24f80 20 6e 6f 74 20 74 68 65 20 76 61 6c 75 65 20 6f   not the value o
24f90 66 20 74 68 65 20 69 6e 74 65 67 65 72 20 73 74  f the integer st
24fa0 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
24fb0 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P3..*/.case OP_
24fc0 49 6e 73 65 72 74 3a 20 0a 63 61 73 65 20 4f 50  Insert: .case OP
24fd0 5f 49 6e 73 65 72 74 49 6e 74 3a 20 7b 0a 20 20  _InsertInt: {.  
24fe0 4d 65 6d 20 2a 70 44 61 74 61 3b 20 20 20 20 20  Mem *pData;     
24ff0 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f    /* MEM cell ho
25000 6c 64 69 6e 67 20 64 61 74 61 20 66 6f 72 20 74  lding data for t
25010 68 65 20 72 65 63 6f 72 64 20 74 6f 20 62 65 20  he record to be 
25020 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20 4d 65  inserted */.  Me
25030 6d 20 2a 70 4b 65 79 3b 20 20 20 20 20 20 20 20  m *pKey;        
25040 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64  /* MEM cell hold
25050 69 6e 67 20 6b 65 79 20 20 66 6f 72 20 74 68 65  ing key  for the
25060 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 56 64 62   record */.  Vdb
25070 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 2f  eCursor *pC;   /
25080 2a 20 43 75 72 73 6f 72 20 74 6f 20 74 61 62 6c  * Cursor to tabl
25090 65 20 69 6e 74 6f 20 77 68 69 63 68 20 69 6e 73  e into which ins
250a0 65 72 74 20 69 73 20 77 72 69 74 74 65 6e 20 2a  ert is written *
250b0 2f 0a 20 20 69 6e 74 20 73 65 65 6b 52 65 73 75  /.  int seekResu
250c0 6c 74 3b 20 20 20 2f 2a 20 52 65 73 75 6c 74 20  lt;   /* Result 
250d0 6f 66 20 70 72 69 6f 72 20 73 65 65 6b 20 6f 72  of prior seek or
250e0 20 30 20 69 66 20 6e 6f 20 55 53 45 53 45 45 4b   0 if no USESEEK
250f0 52 45 53 55 4c 54 20 66 6c 61 67 20 2a 2f 0a 20  RESULT flag */. 
25100 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62   const char *zDb
25110 3b 20 20 2f 2a 20 64 61 74 61 62 61 73 65 20 6e  ;  /* database n
25120 61 6d 65 20 2d 20 75 73 65 64 20 62 79 20 74 68  ame - used by th
25130 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 20 2a 2f  e update hook */
25140 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20  .  Table *pTab; 
25150 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 73 74       /* Table st
25160 72 75 63 74 75 72 65 20 2d 20 75 73 65 64 20 62  ructure - used b
25170 79 20 75 70 64 61 74 65 20 61 6e 64 20 70 72 65  y update and pre
25180 2d 75 70 64 61 74 65 20 68 6f 6f 6b 73 20 2a 2f  -update hooks */
25190 0a 20 20 42 74 72 65 65 50 61 79 6c 6f 61 64 20  .  BtreePayload 
251a0 78 3b 20 20 20 2f 2a 20 50 61 79 6c 6f 61 64 20  x;   /* Payload 
251b0 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 20 2a  to be inserted *
251c0 2f 0a 0a 20 20 70 44 61 74 61 20 3d 20 26 61 4d  /..  pData = &aM
251d0 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61  em[pOp->p2];.  a
251e0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
251f0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
25200 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73  nCursor );.  ass
25210 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
25220 70 44 61 74 61 29 20 29 3b 0a 20 20 70 43 20 3d  pData) );.  pC =
25230 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
25240 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
25250 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
25260 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
25270 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
25280 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63    assert( pC->uc
25290 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  .pCursor!=0 );. 
252a0 20 61 73 73 65 72 74 28 20 28 70 4f 70 2d 3e 70   assert( (pOp->p
252b0 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f  5 & OPFLAG_ISNOO
252c0 50 29 20 7c 7c 20 70 43 2d 3e 69 73 54 61 62 6c  P) || pC->isTabl
252d0 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  e );.  assert( p
252e0 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54  Op->p4type==P4_T
252f0 41 42 4c 45 20 7c 7c 20 70 4f 70 2d 3e 70 34 74  ABLE || pOp->p4t
25300 79 70 65 3e 3d 50 34 5f 53 54 41 54 49 43 20 29  ype>=P4_STATIC )
25310 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
25320 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 44 61 74  CE(pOp->p2, pDat
25330 61 29 3b 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e  a);..  if( pOp->
25340 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72  opcode==OP_Inser
25350 74 20 29 7b 0a 20 20 20 20 70 4b 65 79 20 3d 20  t ){.    pKey = 
25360 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
25370 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79      assert( pKey
25380 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
25390 74 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  t );.    assert(
253a0 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4b 65 79   memIsValid(pKey
253b0 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45  ) );.    REGISTE
253c0 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
253d0 20 70 4b 65 79 29 3b 0a 20 20 20 20 78 2e 6e 4b   pKey);.    x.nK
253e0 65 79 20 3d 20 70 4b 65 79 2d 3e 75 2e 69 3b 0a  ey = pKey->u.i;.
253f0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
25400 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
25410 3d 3d 4f 50 5f 49 6e 73 65 72 74 49 6e 74 20 29  ==OP_InsertInt )
25420 3b 0a 20 20 20 20 78 2e 6e 4b 65 79 20 3d 20 70  ;.    x.nKey = p
25430 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 0a 20 20 69  Op->p3;.  }..  i
25440 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  f( pOp->p4type==
25450 50 34 5f 54 41 42 4c 45 20 26 26 20 48 41 53 5f  P4_TABLE && HAS_
25460 55 50 44 41 54 45 5f 48 4f 4f 4b 28 64 62 29 20  UPDATE_HOOK(db) 
25470 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
25480 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20  C->iDb>=0 );.   
25490 20 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70   zDb = db->aDb[p
254a0 43 2d 3e 69 44 62 5d 2e 7a 44 62 53 4e 61 6d 65  C->iDb].zDbSName
254b0 3b 0a 20 20 20 20 70 54 61 62 20 3d 20 70 4f 70  ;.    pTab = pOp
254c0 2d 3e 70 34 2e 70 54 61 62 3b 0a 20 20 20 20 61  ->p4.pTab;.    a
254d0 73 73 65 72 74 28 20 28 70 4f 70 2d 3e 70 35 20  ssert( (pOp->p5 
254e0 26 20 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 29  & OPFLAG_ISNOOP)
254f0 20 7c 7c 20 48 61 73 52 6f 77 69 64 28 70 54 61   || HasRowid(pTa
25500 62 29 20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  b) );.  }else{. 
25510 20 20 20 70 54 61 62 20 3d 20 30 3b 0a 20 20 20     pTab = 0;.   
25520 20 7a 44 62 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f   zDb = 0;  /* No
25530 74 20 6e 65 65 64 65 64 2e 20 20 53 69 6c 65 6e  t needed.  Silen
25540 63 65 20 61 20 63 6f 6d 70 69 6c 65 72 20 77 61  ce a compiler wa
25550 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 7d 0a 0a 23  rning. */.  }..#
25560 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
25570 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f  BLE_PREUPDATE_HO
25580 4f 4b 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74  OK.  /* Invoke t
25590 68 65 20 70 72 65 2d 75 70 64 61 74 65 20 68 6f  he pre-update ho
255a0 6f 6b 2c 20 69 66 20 61 6e 79 20 2a 2f 0a 20 20  ok, if any */.  
255b0 69 66 28 20 70 54 61 62 20 29 7b 0a 20 20 20 20  if( pTab ){.    
255c0 69 66 28 20 64 62 2d 3e 78 50 72 65 55 70 64 61  if( db->xPreUpda
255d0 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 21 28  teCallback && !(
255e0 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
255f0 5f 49 53 55 50 44 41 54 45 29 20 29 7b 0a 20 20  _ISUPDATE) ){.  
25600 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50      sqlite3VdbeP
25610 72 65 55 70 64 61 74 65 48 6f 6f 6b 28 70 2c 20  reUpdateHook(p, 
25620 70 43 2c 20 53 51 4c 49 54 45 5f 49 4e 53 45 52  pC, SQLITE_INSER
25630 54 2c 20 7a 44 62 2c 20 70 54 61 62 2c 20 78 2e  T, zDb, pTab, x.
25640 6e 4b 65 79 2c 70 4f 70 2d 3e 70 32 29 3b 0a 20  nKey,pOp->p2);. 
25650 20 20 20 7d 0a 20 20 20 20 69 66 28 20 64 62 2d     }.    if( db-
25660 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  >xUpdateCallback
25670 3d 3d 30 20 7c 7c 20 70 54 61 62 2d 3e 61 43 6f  ==0 || pTab->aCo
25680 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a  l==0 ){.      /*
25690 20 50 72 65 76 65 6e 74 20 70 6f 73 74 2d 75 70   Prevent post-up
256a0 64 61 74 65 20 68 6f 6f 6b 20 66 72 6f 6d 20 72  date hook from r
256b0 75 6e 6e 69 6e 67 20 69 6e 20 63 61 73 65 73 20  unning in cases 
256c0 77 68 65 6e 20 69 74 20 73 68 6f 75 6c 64 20 6e  when it should n
256d0 6f 74 20 2a 2f 0a 20 20 20 20 20 20 70 54 61 62  ot */.      pTab
256e0 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a   = 0;.    }.  }.
256f0 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
25700 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 20 29 20  OPFLAG_ISNOOP ) 
25710 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20  break;.#endif.. 
25720 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f   if( pOp->p5 & O
25730 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20  PFLAG_NCHANGE ) 
25740 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20  p->nChange++;.  
25750 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50  if( pOp->p5 & OP
25760 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 29  FLAG_LASTROWID )
25770 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d   db->lastRowid =
25780 20 78 2e 6e 4b 65 79 3b 0a 20 20 61 73 73 65 72   x.nKey;.  asser
25790 74 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20  t( pData->flags 
257a0 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f  & (MEM_Blob|MEM_
257b0 53 74 72 29 20 29 3b 0a 20 20 78 2e 70 44 61 74  Str) );.  x.pDat
257c0 61 20 3d 20 70 44 61 74 61 2d 3e 7a 3b 0a 20 20  a = pData->z;.  
257d0 78 2e 6e 44 61 74 61 20 3d 20 70 44 61 74 61 2d  x.nData = pData-
257e0 3e 6e 3b 0a 20 20 73 65 65 6b 52 65 73 75 6c 74  >n;.  seekResult
257f0 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f   = ((pOp->p5 & O
25800 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53  PFLAG_USESEEKRES
25810 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52  ULT) ? pC->seekR
25820 65 73 75 6c 74 20 3a 20 30 29 3b 0a 20 20 69 66  esult : 0);.  if
25830 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26  ( pData->flags &
25840 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20   MEM_Zero ){.   
25850 20 78 2e 6e 5a 65 72 6f 20 3d 20 70 44 61 74 61   x.nZero = pData
25860 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 7d 65 6c  ->u.nZero;.  }el
25870 73 65 7b 0a 20 20 20 20 78 2e 6e 5a 65 72 6f 20  se{.    x.nZero 
25880 3d 20 30 3b 0a 20 20 7d 0a 20 20 78 2e 70 4b 65  = 0;.  }.  x.pKe
25890 79 20 3d 20 30 3b 0a 20 20 72 63 20 3d 20 73 71  y = 0;.  rc = sq
258a0 6c 69 74 65 33 42 74 72 65 65 49 6e 73 65 72 74  lite3BtreeInsert
258b0 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
258c0 20 26 78 2c 0a 20 20 20 20 20 20 28 70 4f 70 2d   &x,.      (pOp-
258d0 3e 70 35 20 26 20 28 4f 50 46 4c 41 47 5f 41 50  >p5 & (OPFLAG_AP
258e0 50 45 4e 44 7c 4f 50 46 4c 41 47 5f 53 41 56 45  PEND|OPFLAG_SAVE
258f0 50 4f 53 49 54 49 4f 4e 29 29 2c 20 73 65 65 6b  POSITION)), seek
25900 52 65 73 75 6c 74 0a 20 20 29 3b 0a 20 20 70 43  Result.  );.  pC
25910 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
25920 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68   = 0;.  pC->cach
25930 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
25940 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76  STALE;..  /* Inv
25950 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d 68  oke the update-h
25960 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e  ook if required.
25970 20 2a 2f 0a 20 20 69 66 28 20 72 63 20 29 20 67   */.  if( rc ) g
25980 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
25990 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 70 54  _error;.  if( pT
259a0 61 62 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  ab ){.    assert
259b0 28 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c  ( db->xUpdateCal
259c0 6c 62 61 63 6b 21 3d 30 20 29 3b 0a 20 20 20 20  lback!=0 );.    
259d0 61 73 73 65 72 74 28 20 70 54 61 62 2d 3e 61 43  assert( pTab->aC
259e0 6f 6c 21 3d 30 20 29 3b 0a 20 20 20 20 64 62 2d  ol!=0 );.    db-
259f0 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  >xUpdateCallback
25a00 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c  (db->pUpdateArg,
25a10 0a 20 20 20 20 20 20 20 20 20 20 20 28 70 4f 70  .           (pOp
25a20 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53  ->p5 & OPFLAG_IS
25a30 55 50 44 41 54 45 29 20 3f 20 53 51 4c 49 54 45  UPDATE) ? SQLITE
25a40 5f 55 50 44 41 54 45 20 3a 20 53 51 4c 49 54 45  _UPDATE : SQLITE
25a50 5f 49 4e 53 45 52 54 2c 0a 20 20 20 20 20 20 20  _INSERT,.       
25a60 20 20 20 20 7a 44 62 2c 20 70 54 61 62 2d 3e 7a      zDb, pTab->z
25a70 4e 61 6d 65 2c 20 78 2e 6e 4b 65 79 29 3b 0a 20  Name, x.nKey);. 
25a80 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
25a90 2a 20 4f 70 63 6f 64 65 3a 20 44 65 6c 65 74 65  * Opcode: Delete
25aa0 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
25ab0 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 74 68 65  **.** Delete the
25ac0 20 72 65 63 6f 72 64 20 61 74 20 77 68 69 63 68   record at which
25ad0 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 69   the P1 cursor i
25ae0 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  s currently poin
25af0 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ting..**.** If t
25b00 68 65 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f  he OPFLAG_SAVEPO
25b10 53 49 54 49 4f 4e 20 62 69 74 20 6f 66 20 74 68  SITION bit of th
25b20 65 20 50 35 20 70 61 72 61 6d 65 74 65 72 20 69  e P5 parameter i
25b30 73 20 73 65 74 2c 20 74 68 65 6e 0a 2a 2a 20 74  s set, then.** t
25b40 68 65 20 63 75 72 73 6f 72 20 77 69 6c 6c 20 62  he cursor will b
25b50 65 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20  e left pointing 
25b60 61 74 20 20 65 69 74 68 65 72 20 74 68 65 20 6e  at  either the n
25b70 65 78 74 20 6f 72 20 74 68 65 20 70 72 65 76 69  ext or the previ
25b80 6f 75 73 0a 2a 2a 20 72 65 63 6f 72 64 20 69 6e  ous.** record in
25b90 20 74 68 65 20 74 61 62 6c 65 2e 20 49 66 20 69   the table. If i
25ba0 74 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69  t is left pointi
25bb0 6e 67 20 61 74 20 74 68 65 20 6e 65 78 74 20 72  ng at the next r
25bc0 65 63 6f 72 64 2c 20 74 68 65 6e 0a 2a 2a 20 74  ecord, then.** t
25bd0 68 65 20 6e 65 78 74 20 4e 65 78 74 20 69 6e 73  he next Next ins
25be0 74 72 75 63 74 69 6f 6e 20 77 69 6c 6c 20 62 65  truction will be
25bf0 20 61 20 6e 6f 2d 6f 70 2e 20 41 73 20 61 20 72   a no-op. As a r
25c00 65 73 75 6c 74 2c 20 69 6e 20 74 68 69 73 20 63  esult, in this c
25c10 61 73 65 0a 2a 2a 20 69 74 20 69 73 20 6f 6b 20  ase.** it is ok 
25c20 74 6f 20 64 65 6c 65 74 65 20 61 20 72 65 63 6f  to delete a reco
25c30 72 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61  rd from within a
25c40 20 4e 65 78 74 20 6c 6f 6f 70 2e 20 49 66 20 0a   Next loop. If .
25c50 2a 2a 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f  ** OPFLAG_SAVEPO
25c60 53 49 54 49 4f 4e 20 62 69 74 20 6f 66 20 50 35  SITION bit of P5
25c70 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e 20   is clear, then 
25c80 74 68 65 20 63 75 72 73 6f 72 20 77 69 6c 6c 20  the cursor will 
25c90 62 65 0a 2a 2a 20 6c 65 66 74 20 69 6e 20 61 6e  be.** left in an
25ca0 20 75 6e 64 65 66 69 6e 65 64 20 73 74 61 74 65   undefined state
25cb0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
25cc0 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 20  PFLAG_AUXDELETE 
25cd0 62 69 74 20 69 73 20 73 65 74 20 6f 6e 20 50 35  bit is set on P5
25ce0 2c 20 74 68 61 74 20 69 6e 64 69 63 61 74 65 73  , that indicates
25cf0 20 74 68 61 74 20 74 68 69 73 0a 2a 2a 20 64 65   that this.** de
25d00 6c 65 74 65 20 6f 6e 65 20 6f 66 20 73 65 76 65  lete one of seve
25d10 72 61 6c 20 61 73 73 6f 63 69 61 74 65 64 20 77  ral associated w
25d20 69 74 68 20 64 65 6c 65 74 69 6e 67 20 61 20 74  ith deleting a t
25d30 61 62 6c 65 20 72 6f 77 20 61 6e 64 20 61 6c 6c  able row and all
25d40 20 69 74 73 0a 2a 2a 20 61 73 73 6f 63 69 61 74   its.** associat
25d50 65 64 20 69 6e 64 65 78 20 65 6e 74 72 69 65 73  ed index entries
25d60 2e 20 20 45 78 61 63 74 6c 79 20 6f 6e 65 20 6f  .  Exactly one o
25d70 66 20 74 68 6f 73 65 20 64 65 6c 65 74 65 73 20  f those deletes 
25d80 69 73 20 74 68 65 20 22 70 72 69 6d 61 72 79 22  is the "primary"
25d90 0a 2a 2a 20 64 65 6c 65 74 65 2e 20 20 54 68 65  .** delete.  The
25da0 20 6f 74 68 65 72 73 20 61 72 65 20 61 6c 6c 20   others are all 
25db0 6f 6e 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c  on OPFLAG_FORDEL
25dc0 45 54 45 20 63 75 72 73 6f 72 73 20 6f 72 20 65  ETE cursors or e
25dd0 6c 73 65 20 61 72 65 0a 2a 2a 20 6d 61 72 6b 65  lse are.** marke
25de0 64 20 77 69 74 68 20 74 68 65 20 41 55 58 44 45  d with the AUXDE
25df0 4c 45 54 45 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a  LETE flag..**.**
25e00 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e   If the OPFLAG_N
25e10 43 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50  CHANGE flag of P
25e20 32 20 28 4e 42 3a 20 50 32 20 6e 6f 74 20 50 35  2 (NB: P2 not P5
25e30 29 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74  ) is set, then t
25e40 68 65 20 72 6f 77 0a 2a 2a 20 63 68 61 6e 67 65  he row.** change
25e50 20 63 6f 75 6e 74 20 69 73 20 69 6e 63 72 65 6d   count is increm
25e60 65 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73 65  ented (otherwise
25e70 20 6e 6f 74 29 2e 0a 2a 2a 0a 2a 2a 20 50 31 20   not)..**.** P1 
25e80 6d 75 73 74 20 6e 6f 74 20 62 65 20 70 73 65 75  must not be pseu
25e90 64 6f 2d 74 61 62 6c 65 2e 20 20 49 74 20 68 61  do-table.  It ha
25ea0 73 20 74 6f 20 62 65 20 61 20 72 65 61 6c 20 74  s to be a real t
25eb0 61 62 6c 65 20 77 69 74 68 0a 2a 2a 20 6d 75 6c  able with.** mul
25ec0 74 69 70 6c 65 20 72 6f 77 73 2e 0a 2a 2a 0a 2a  tiple rows..**.*
25ed0 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e  * If P4 is not N
25ee0 55 4c 4c 20 74 68 65 6e 20 69 74 20 70 6f 69 6e  ULL then it poin
25ef0 74 73 20 74 6f 20 61 20 54 61 62 6c 65 20 6f 62  ts to a Table ob
25f00 6a 65 63 74 2e 20 49 6e 20 74 68 69 73 20 63 61  ject. In this ca
25f10 73 65 20 65 69 74 68 65 72 20 0a 2a 2a 20 74 68  se either .** th
25f20 65 20 75 70 64 61 74 65 20 6f 72 20 70 72 65 2d  e update or pre-
25f30 75 70 64 61 74 65 20 68 6f 6f 6b 2c 20 6f 72 20  update hook, or 
25f40 62 6f 74 68 2c 20 6d 61 79 20 62 65 20 69 6e 76  both, may be inv
25f50 6f 6b 65 64 2e 20 54 68 65 20 50 31 20 63 75 72  oked. The P1 cur
25f60 73 6f 72 20 6d 75 73 74 0a 2a 2a 20 68 61 76 65  sor must.** have
25f70 20 62 65 65 6e 20 70 6f 73 69 74 69 6f 6e 65 64   been positioned
25f80 20 75 73 69 6e 67 20 4f 50 5f 4e 6f 74 46 6f 75   using OP_NotFou
25f90 6e 64 20 70 72 69 6f 72 20 74 6f 20 69 6e 76 6f  nd prior to invo
25fa0 6b 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65  king this opcode
25fb0 20 69 6e 20 0a 2a 2a 20 74 68 69 73 20 63 61 73   in .** this cas
25fc0 65 2e 20 53 70 65 63 69 66 69 63 61 6c 6c 79 2c  e. Specifically,
25fd0 20 69 66 20 6f 6e 65 20 69 73 20 63 6f 6e 66 69   if one is confi
25fe0 67 75 72 65 64 2c 20 74 68 65 20 70 72 65 2d 75  gured, the pre-u
25ff0 70 64 61 74 65 20 68 6f 6f 6b 20 69 73 20 0a 2a  pdate hook is .*
26000 2a 20 69 6e 76 6f 6b 65 64 20 69 66 20 50 34 20  * invoked if P4 
26010 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20 54 68 65  is not NULL. The
26020 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 73 20   update-hook is 
26030 69 6e 76 6f 6b 65 64 20 69 66 20 6f 6e 65 20 69  invoked if one i
26040 73 20 63 6f 6e 66 69 67 75 72 65 64 2c 20 0a 2a  s configured, .*
26050 2a 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  * P4 is not NULL
26060 2c 20 61 6e 64 20 74 68 65 20 4f 50 46 4c 41 47  , and the OPFLAG
26070 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20 69 73  _NCHANGE flag is
26080 20 73 65 74 20 69 6e 20 50 32 2e 0a 2a 2a 0a 2a   set in P2..**.*
26090 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f  * If the OPFLAG_
260a0 49 53 55 50 44 41 54 45 20 66 6c 61 67 20 69 73  ISUPDATE flag is
260b0 20 73 65 74 20 69 6e 20 50 32 2c 20 74 68 65 6e   set in P2, then
260c0 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65   P3 contains the
260d0 20 61 64 64 72 65 73 73 0a 2a 2a 20 6f 66 20 74   address.** of t
260e0 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74  he memory cell t
260f0 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  hat contains the
26100 20 76 61 6c 75 65 20 74 68 61 74 20 74 68 65 20   value that the 
26110 72 6f 77 69 64 20 6f 66 20 74 68 65 20 72 6f 77  rowid of the row
26120 20 77 69 6c 6c 0a 2a 2a 20 62 65 20 73 65 74 20   will.** be set 
26130 74 6f 20 62 79 20 74 68 65 20 75 70 64 61 74 65  to by the update
26140 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 6c  ..*/.case OP_Del
26150 65 74 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  ete: {.  VdbeCur
26160 73 6f 72 20 2a 70 43 3b 0a 20 20 63 6f 6e 73 74  sor *pC;.  const
26170 20 63 68 61 72 20 2a 7a 44 62 3b 0a 20 20 54 61   char *zDb;.  Ta
26180 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 69 6e 74  ble *pTab;.  int
26190 20 6f 70 66 6c 61 67 73 3b 0a 0a 20 20 6f 70 66   opflags;..  opf
261a0 6c 61 67 73 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a  lags = pOp->p2;.
261b0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
261c0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
261d0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
261e0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
261f0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
26200 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
26210 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
26220 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
26230 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
26240 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20  ->uc.pCursor!=0 
26250 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
26260 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
26270 3d 30 20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51  =0 );..#ifdef SQ
26280 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28  LITE_DEBUG.  if(
26290 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
262a0 5f 54 41 42 4c 45 20 26 26 20 48 61 73 52 6f 77  _TABLE && HasRow
262b0 69 64 28 70 4f 70 2d 3e 70 34 2e 70 54 61 62 29  id(pOp->p4.pTab)
262c0 20 26 26 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29   && pOp->p5==0 )
262d0 7b 0a 20 20 20 20 2f 2a 20 49 66 20 70 35 20 69  {.    /* If p5 i
262e0 73 20 7a 65 72 6f 2c 20 74 68 65 20 73 65 65 6b  s zero, the seek
262f0 20 6f 70 65 72 61 74 69 6f 6e 20 74 68 61 74 20   operation that 
26300 70 6f 73 69 74 69 6f 6e 65 64 20 74 68 65 20 63  positioned the c
26310 75 72 73 6f 72 20 70 72 69 6f 72 20 74 6f 0a 20  ursor prior to. 
26320 20 20 20 2a 2a 20 4f 50 5f 44 65 6c 65 74 65 20     ** OP_Delete 
26330 77 69 6c 6c 20 68 61 76 65 20 61 6c 73 6f 20 73  will have also s
26340 65 74 20 74 68 65 20 70 43 2d 3e 6d 6f 76 65 74  et the pC->movet
26350 6f 54 61 72 67 65 74 20 66 69 65 6c 64 20 74 6f  oTarget field to
26360 20 74 68 65 20 72 6f 77 69 64 20 6f 66 0a 20 20   the rowid of.  
26370 20 20 2a 2a 20 74 68 65 20 72 6f 77 20 74 68 61    ** the row tha
26380 74 20 69 73 20 62 65 69 6e 67 20 64 65 6c 65 74  t is being delet
26390 65 64 20 2a 2f 0a 20 20 20 20 69 36 34 20 69 4b  ed */.    i64 iK
263a0 65 79 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  ey = sqlite3Btre
263b0 65 49 6e 74 65 67 65 72 4b 65 79 28 70 43 2d 3e  eIntegerKey(pC->
263c0 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20  uc.pCursor);.   
263d0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 6d 6f 76   assert( pC->mov
263e0 65 74 6f 54 61 72 67 65 74 3d 3d 69 4b 65 79 20  etoTarget==iKey 
263f0 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20  );.  }.#endif.. 
26400 20 2f 2a 20 49 66 20 74 68 65 20 75 70 64 61 74   /* If the updat
26410 65 2d 68 6f 6f 6b 20 6f 72 20 70 72 65 2d 75 70  e-hook or pre-up
26420 64 61 74 65 2d 68 6f 6f 6b 20 77 69 6c 6c 20 62  date-hook will b
26430 65 20 69 6e 76 6f 6b 65 64 2c 20 73 65 74 20 7a  e invoked, set z
26440 44 62 20 74 6f 0a 20 20 2a 2a 20 74 68 65 20 6e  Db to.  ** the n
26450 61 6d 65 20 6f 66 20 74 68 65 20 64 62 20 74 6f  ame of the db to
26460 20 70 61 73 73 20 61 73 20 74 6f 20 69 74 2e 20   pass as to it. 
26470 41 6c 73 6f 20 73 65 74 20 6c 6f 63 61 6c 20 70  Also set local p
26480 54 61 62 20 74 6f 20 61 20 63 6f 70 79 0a 20 20  Tab to a copy.  
26490 2a 2a 20 6f 66 20 70 34 2e 70 54 61 62 2e 20 46  ** of p4.pTab. F
264a0 69 6e 61 6c 6c 79 2c 20 69 66 20 70 35 20 69 73  inally, if p5 is
264b0 20 74 72 75 65 2c 20 69 6e 64 69 63 61 74 69 6e   true, indicatin
264c0 67 20 74 68 61 74 20 74 68 69 73 20 63 75 72 73  g that this curs
264d0 6f 72 20 77 61 73 0a 20 20 2a 2a 20 6c 61 73 74  or was.  ** last
264e0 20 6d 6f 76 65 64 20 77 69 74 68 20 4f 50 5f 4e   moved with OP_N
264f0 65 78 74 20 6f 72 20 4f 50 5f 50 72 65 76 2c 20  ext or OP_Prev, 
26500 6e 6f 74 20 53 65 65 6b 20 6f 72 20 4e 6f 74 46  not Seek or NotF
26510 6f 75 6e 64 2c 20 73 65 74 20 0a 20 20 2a 2a 20  ound, set .  ** 
26520 56 64 62 65 43 75 72 73 6f 72 2e 6d 6f 76 65 74  VdbeCursor.movet
26530 6f 54 61 72 67 65 74 20 74 6f 20 74 68 65 20 63  oTarget to the c
26540 75 72 72 65 6e 74 20 72 6f 77 69 64 2e 20 20 2a  urrent rowid.  *
26550 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74  /.  if( pOp->p4t
26560 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45 20 26 26  ype==P4_TABLE &&
26570 20 48 41 53 5f 55 50 44 41 54 45 5f 48 4f 4f 4b   HAS_UPDATE_HOOK
26580 28 64 62 29 20 29 7b 0a 20 20 20 20 61 73 73 65  (db) ){.    asse
26590 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29  rt( pC->iDb>=0 )
265a0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
265b0 70 2d 3e 70 34 2e 70 54 61 62 21 3d 30 20 29 3b  p->p4.pTab!=0 );
265c0 0a 20 20 20 20 7a 44 62 20 3d 20 64 62 2d 3e 61  .    zDb = db->a
265d0 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 44 62 53  Db[pC->iDb].zDbS
265e0 4e 61 6d 65 3b 0a 20 20 20 20 70 54 61 62 20 3d  Name;.    pTab =
265f0 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62 3b 0a 20   pOp->p4.pTab;. 
26600 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 70 35 20     if( (pOp->p5 
26610 26 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53  & OPFLAG_SAVEPOS
26620 49 54 49 4f 4e 29 21 3d 30 20 26 26 20 70 43 2d  ITION)!=0 && pC-
26630 3e 69 73 54 61 62 6c 65 20 29 7b 0a 20 20 20 20  >isTable ){.    
26640 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67    pC->movetoTarg
26650 65 74 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  et = sqlite3Btre
26660 65 49 6e 74 65 67 65 72 4b 65 79 28 70 43 2d 3e  eIntegerKey(pC->
26670 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20  uc.pCursor);.   
26680 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
26690 7a 44 62 20 3d 20 30 3b 20 20 20 2f 2a 20 4e 6f  zDb = 0;   /* No
266a0 74 20 6e 65 65 64 65 64 2e 20 20 53 69 6c 65 6e  t needed.  Silen
266b0 63 65 20 61 20 63 6f 6d 70 69 6c 65 72 20 77 61  ce a compiler wa
266c0 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 70 54  rning. */.    pT
266d0 61 62 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20  ab = 0;  /* Not 
266e0 6e 65 65 64 65 64 2e 20 20 53 69 6c 65 6e 63 65  needed.  Silence
266f0 20 61 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e   a compiler warn
26700 69 6e 67 2e 20 2a 2f 0a 20 20 7d 0a 0a 23 69 66  ing. */.  }..#if
26710 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
26720 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b  E_PREUPDATE_HOOK
26730 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65  .  /* Invoke the
26740 20 70 72 65 2d 75 70 64 61 74 65 2d 68 6f 6f 6b   pre-update-hook
26750 20 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f   if required. */
26760 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72 65 55  .  if( db->xPreU
26770 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26  pdateCallback &&
26780 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62 20 29 7b   pOp->p4.pTab ){
26790 0a 20 20 20 20 61 73 73 65 72 74 28 20 21 28 6f  .    assert( !(o
267a0 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 41 47 5f  pflags & OPFLAG_
267b0 49 53 55 50 44 41 54 45 29 20 0a 20 20 20 20 20  ISUPDATE) .     
267c0 20 20 20 20 7c 7c 20 48 61 73 52 6f 77 69 64 28      || HasRowid(
267d0 70 54 61 62 29 3d 3d 30 20 0a 20 20 20 20 20 20  pTab)==0 .      
267e0 20 20 20 7c 7c 20 28 61 4d 65 6d 5b 70 4f 70 2d     || (aMem[pOp-
267f0 3e 70 33 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d  >p3].flags & MEM
26800 5f 49 6e 74 29 20 0a 20 20 20 20 29 3b 0a 20 20  _Int) .    );.  
26810 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 65    sqlite3VdbePre
26820 55 70 64 61 74 65 48 6f 6f 6b 28 70 2c 20 70 43  UpdateHook(p, pC
26830 2c 0a 20 20 20 20 20 20 20 20 28 6f 70 66 6c 61  ,.        (opfla
26840 67 73 20 26 20 4f 50 46 4c 41 47 5f 49 53 55 50  gs & OPFLAG_ISUP
26850 44 41 54 45 29 20 3f 20 53 51 4c 49 54 45 5f 55  DATE) ? SQLITE_U
26860 50 44 41 54 45 20 3a 20 53 51 4c 49 54 45 5f 44  PDATE : SQLITE_D
26870 45 4c 45 54 45 2c 20 0a 20 20 20 20 20 20 20 20  ELETE, .        
26880 7a 44 62 2c 20 70 54 61 62 2c 20 70 43 2d 3e 6d  zDb, pTab, pC->m
26890 6f 76 65 74 6f 54 61 72 67 65 74 2c 0a 20 20 20  ovetoTarget,.   
268a0 20 20 20 20 20 70 4f 70 2d 3e 70 33 0a 20 20 20       pOp->p3.   
268b0 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 6f 70   );.  }.  if( op
268c0 66 6c 61 67 73 20 26 20 4f 50 46 4c 41 47 5f 49  flags & OPFLAG_I
268d0 53 4e 4f 4f 50 20 29 20 62 72 65 61 6b 3b 0a 23  SNOOP ) break;.#
268e0 65 6e 64 69 66 0a 20 0a 20 20 2f 2a 20 4f 6e 6c  endif. .  /* Onl
268f0 79 20 66 6c 61 67 73 20 74 68 61 74 20 63 61 6e  y flags that can
26900 20 62 65 20 73 65 74 20 61 72 65 20 53 41 56 45   be set are SAVE
26910 50 4f 49 53 54 49 4f 4e 20 61 6e 64 20 41 55 58  POISTION and AUX
26920 44 45 4c 45 54 45 20 2a 2f 20 0a 20 20 61 73 73  DELETE */ .  ass
26930 65 72 74 28 20 28 70 4f 70 2d 3e 70 35 20 26 20  ert( (pOp->p5 & 
26940 7e 28 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53  ~(OPFLAG_SAVEPOS
26950 49 54 49 4f 4e 7c 4f 50 46 4c 41 47 5f 41 55 58  ITION|OPFLAG_AUX
26960 44 45 4c 45 54 45 29 29 3d 3d 30 20 29 3b 0a 20  DELETE))==0 );. 
26970 20 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f   assert( OPFLAG_
26980 53 41 56 45 50 4f 53 49 54 49 4f 4e 3d 3d 42 54  SAVEPOSITION==BT
26990 52 45 45 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e  REE_SAVEPOSITION
269a0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50   );.  assert( OP
269b0 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 3d 3d  FLAG_AUXDELETE==
269c0 42 54 52 45 45 5f 41 55 58 44 45 4c 45 54 45 20  BTREE_AUXDELETE 
269d0 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  );..#ifdef SQLIT
269e0 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 70 2d  E_DEBUG.  if( p-
269f0 3e 70 46 72 61 6d 65 3d 3d 30 20 29 7b 0a 20 20  >pFrame==0 ){.  
26a00 20 20 69 66 28 20 70 43 2d 3e 69 73 45 70 68 65    if( pC->isEphe
26a10 6d 65 72 61 6c 3d 3d 30 0a 20 20 20 20 20 20 20  meral==0.       
26a20 20 26 26 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f   && (pOp->p5 & O
26a30 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 29  PFLAG_AUXDELETE)
26a40 3d 3d 30 0a 20 20 20 20 20 20 20 20 26 26 20 28  ==0.        && (
26a50 70 43 2d 3e 77 72 46 6c 61 67 20 26 20 4f 50 46  pC->wrFlag & OPF
26a60 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 29 3d 3d  LAG_FORDELETE)==
26a70 30 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20  0.      ){.     
26a80 20 6e 45 78 74 72 61 44 65 6c 65 74 65 2b 2b 3b   nExtraDelete++;
26a90 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70  .    }.    if( p
26aa0 4f 70 2d 3e 70 32 20 26 20 4f 50 46 4c 41 47 5f  Op->p2 & OPFLAG_
26ab0 4e 43 48 41 4e 47 45 20 29 7b 0a 20 20 20 20 20  NCHANGE ){.     
26ac0 20 6e 45 78 74 72 61 44 65 6c 65 74 65 2d 2d 3b   nExtraDelete--;
26ad0 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69  .    }.  }.#endi
26ae0 66 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  f..  rc = sqlite
26af0 33 42 74 72 65 65 44 65 6c 65 74 65 28 70 43 2d  3BtreeDelete(pC-
26b00 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 70 4f 70  >uc.pCursor, pOp
26b10 2d 3e 70 35 29 3b 0a 20 20 70 43 2d 3e 63 61 63  ->p5);.  pC->cac
26b20 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
26b30 5f 53 54 41 4c 45 3b 0a 20 20 70 43 2d 3e 73 65  _STALE;.  pC->se
26b40 65 6b 52 65 73 75 6c 74 20 3d 20 30 3b 0a 20 20  ekResult = 0;.  
26b50 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
26b60 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
26b70 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74  ;..  /* Invoke t
26b80 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69  he update-hook i
26b90 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20  f required. */. 
26ba0 20 69 66 28 20 6f 70 66 6c 61 67 73 20 26 20 4f   if( opflags & O
26bb0 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 7b  PFLAG_NCHANGE ){
26bc0 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 2b  .    p->nChange+
26bd0 2b 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 78  +;.    if( db->x
26be0 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26  UpdateCallback &
26bf0 26 20 48 61 73 52 6f 77 69 64 28 70 54 61 62 29  & HasRowid(pTab)
26c00 20 29 7b 0a 20 20 20 20 20 20 64 62 2d 3e 78 55   ){.      db->xU
26c10 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62  pdateCallback(db
26c20 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 20 53 51  ->pUpdateArg, SQ
26c30 4c 49 54 45 5f 44 45 4c 45 54 45 2c 20 7a 44 62  LITE_DELETE, zDb
26c40 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c 0a 20  , pTab->zName,. 
26c50 20 20 20 20 20 20 20 20 20 70 43 2d 3e 6d 6f 76           pC->mov
26c60 65 74 6f 54 61 72 67 65 74 29 3b 0a 20 20 20 20  etoTarget);.    
26c70 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44    assert( pC->iD
26c80 62 3e 3d 30 20 29 3b 0a 20 20 20 20 7d 0a 20 20  b>=0 );.    }.  
26c90 7d 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 2f 2a  }..  break;.}./*
26ca0 20 4f 70 63 6f 64 65 3a 20 52 65 73 65 74 43 6f   Opcode: ResetCo
26cb0 75 6e 74 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  unt * * * * *.**
26cc0 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f 66  .** The value of
26cd0 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e   the change coun
26ce0 74 65 72 20 69 73 20 63 6f 70 69 65 64 20 74 6f  ter is copied to
26cf0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61   the database ha
26d00 6e 64 6c 65 0a 2a 2a 20 63 68 61 6e 67 65 20 63  ndle.** change c
26d10 6f 75 6e 74 65 72 20 28 72 65 74 75 72 6e 65 64  ounter (returned
26d20 20 62 79 20 73 75 62 73 65 71 75 65 6e 74 20 63   by subsequent c
26d30 61 6c 6c 73 20 74 6f 20 73 71 6c 69 74 65 33 5f  alls to sqlite3_
26d40 63 68 61 6e 67 65 73 28 29 29 2e 0a 2a 2a 20 54  changes())..** T
26d50 68 65 6e 20 74 68 65 20 56 4d 73 20 69 6e 74 65  hen the VMs inte
26d60 72 6e 61 6c 20 63 68 61 6e 67 65 20 63 6f 75 6e  rnal change coun
26d70 74 65 72 20 72 65 73 65 74 73 20 74 6f 20 30 2e  ter resets to 0.
26d80 0a 2a 2a 20 54 68 69 73 20 69 73 20 75 73 65 64  .** This is used
26d90 20 62 79 20 74 72 69 67 67 65 72 20 70 72 6f 67   by trigger prog
26da0 72 61 6d 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  rams..*/.case OP
26db0 5f 52 65 73 65 74 43 6f 75 6e 74 3a 20 7b 0a 20  _ResetCount: {. 
26dc0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
26dd0 68 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43  hanges(db, p->nC
26de0 68 61 6e 67 65 29 3b 0a 20 20 70 2d 3e 6e 43 68  hange);.  p->nCh
26df0 61 6e 67 65 20 3d 20 30 3b 0a 20 20 62 72 65 61  ange = 0;.  brea
26e00 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
26e10 20 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 20 50   SorterCompare P
26e20 31 20 50 32 20 50 33 20 50 34 0a 2a 2a 20 53 79  1 P2 P3 P4.** Sy
26e30 6e 6f 70 73 69 73 3a 20 69 66 20 6b 65 79 28 50  nopsis: if key(P
26e40 31 29 21 3d 74 72 69 6d 28 72 5b 50 33 5d 2c 50  1)!=trim(r[P3],P
26e50 34 29 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  4) goto P2.**.**
26e60 20 50 31 20 69 73 20 61 20 73 6f 72 74 65 72 20   P1 is a sorter 
26e70 63 75 72 73 6f 72 2e 20 54 68 69 73 20 69 6e 73  cursor. This ins
26e80 74 72 75 63 74 69 6f 6e 20 63 6f 6d 70 61 72 65  truction compare
26e90 73 20 61 20 70 72 65 66 69 78 20 6f 66 20 74 68  s a prefix of th
26ea0 65 0a 2a 2a 20 72 65 63 6f 72 64 20 62 6c 6f 62  e.** record blob
26eb0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
26ec0 61 67 61 69 6e 73 74 20 61 20 70 72 65 66 69 78  against a prefix
26ed0 20 6f 66 20 74 68 65 20 65 6e 74 72 79 20 74 68   of the entry th
26ee0 61 74 20 0a 2a 2a 20 74 68 65 20 73 6f 72 74 65  at .** the sorte
26ef0 72 20 63 75 72 73 6f 72 20 63 75 72 72 65 6e 74  r cursor current
26f00 6c 79 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20 4f  ly points to.  O
26f10 6e 6c 79 20 74 68 65 20 66 69 72 73 74 20 50 34  nly the first P4
26f20 20 66 69 65 6c 64 73 0a 2a 2a 20 6f 66 20 72 5b   fields.** of r[
26f30 50 33 5d 20 61 6e 64 20 74 68 65 20 73 6f 72 74  P3] and the sort
26f40 65 72 20 72 65 63 6f 72 64 20 61 72 65 20 63 6f  er record are co
26f50 6d 70 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66  mpared..**.** If
26f60 20 65 69 74 68 65 72 20 50 33 20 6f 72 20 74 68   either P3 or th
26f70 65 20 73 6f 72 74 65 72 20 63 6f 6e 74 61 69 6e  e sorter contain
26f80 73 20 61 20 4e 55 4c 4c 20 69 6e 20 6f 6e 65 20  s a NULL in one 
26f90 6f 66 20 74 68 65 69 72 20 73 69 67 6e 69 66 69  of their signifi
26fa0 63 61 6e 74 0a 2a 2a 20 66 69 65 6c 64 73 20 28  cant.** fields (
26fb0 6e 6f 74 20 63 6f 75 6e 74 69 6e 67 20 74 68 65  not counting the
26fc0 20 50 34 20 66 69 65 6c 64 73 20 61 74 20 74 68   P4 fields at th
26fd0 65 20 65 6e 64 20 77 68 69 63 68 20 61 72 65 20  e end which are 
26fe0 69 67 6e 6f 72 65 64 29 20 74 68 65 6e 0a 2a 2a  ignored) then.**
26ff0 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20   the comparison 
27000 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20 62 65  is assumed to be
27010 20 65 71 75 61 6c 2e 0a 2a 2a 0a 2a 2a 20 46 61   equal..**.** Fa
27020 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 6e 65  ll through to ne
27030 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  xt instruction i
27040 66 20 74 68 65 20 74 77 6f 20 72 65 63 6f 72 64  f the two record
27050 73 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 20  s compare equal 
27060 74 6f 0a 2a 2a 20 65 61 63 68 20 6f 74 68 65 72  to.** each other
27070 2e 20 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66  .  Jump to P2 if
27080 20 74 68 65 79 20 61 72 65 20 64 69 66 66 65 72   they are differ
27090 65 6e 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ent..*/.case OP_
270a0 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 3a 20 7b  SorterCompare: {
270b0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
270c0 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  C;.  int res;.  
270d0 69 6e 74 20 6e 4b 65 79 43 6f 6c 3b 0a 0a 20 20  int nKeyCol;..  
270e0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
270f0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
27100 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29  ( isSorter(pC) )
27110 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
27120 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
27130 32 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61  2 );.  pIn3 = &a
27140 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
27150 6e 4b 65 79 43 6f 6c 20 3d 20 70 4f 70 2d 3e 70  nKeyCol = pOp->p
27160 34 2e 69 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a  4.i;.  res = 0;.
27170 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
27180 62 65 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 28  beSorterCompare(
27190 70 43 2c 20 70 49 6e 33 2c 20 6e 4b 65 79 43 6f  pC, pIn3, nKeyCo
271a0 6c 2c 20 26 72 65 73 29 3b 0a 20 20 56 64 62 65  l, &res);.  Vdbe
271b0 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21  BranchTaken(res!
271c0 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 63 20  =0,2);.  if( rc 
271d0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
271e0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28  _to_error;.  if(
271f0 20 72 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70   res ) goto jump
27200 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b  _to_p2;.  break;
27210 0a 7d 3b 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  .};../* Opcode: 
27220 53 6f 72 74 65 72 44 61 74 61 20 50 31 20 50 32  SorterData P1 P2
27230 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
27240 73 69 73 3a 20 72 5b 50 32 5d 3d 64 61 74 61 0a  sis: r[P2]=data.
27250 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f  **.** Write into
27260 20 72 65 67 69 73 74 65 72 20 50 32 20 74 68 65   register P2 the
27270 20 63 75 72 72 65 6e 74 20 73 6f 72 74 65 72 20   current sorter 
27280 64 61 74 61 20 66 6f 72 20 73 6f 72 74 65 72 20  data for sorter 
27290 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68  cursor P1..** Th
272a0 65 6e 20 63 6c 65 61 72 20 74 68 65 20 63 6f 6c  en clear the col
272b0 75 6d 6e 20 68 65 61 64 65 72 20 63 61 63 68 65  umn header cache
272c0 20 6f 6e 20 63 75 72 73 6f 72 20 50 33 2e 0a 2a   on cursor P3..*
272d0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
272e0 20 69 73 20 6e 6f 72 6d 61 6c 6c 79 20 75 73 65   is normally use
272f0 20 74 6f 20 6d 6f 76 65 20 61 20 72 65 63 6f 72   to move a recor
27300 64 20 6f 75 74 20 6f 66 20 74 68 65 20 73 6f 72  d out of the sor
27310 74 65 72 20 61 6e 64 20 69 6e 74 6f 0a 2a 2a 20  ter and into.** 
27320 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20  a register that 
27330 69 73 20 74 68 65 20 73 6f 75 72 63 65 20 66 6f  is the source fo
27340 72 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  r a pseudo-table
27350 20 63 75 72 73 6f 72 20 63 72 65 61 74 65 64 20   cursor created 
27360 75 73 69 6e 67 0a 2a 2a 20 4f 70 65 6e 50 73 65  using.** OpenPse
27370 75 64 6f 2e 20 20 54 68 61 74 20 70 73 65 75 64  udo.  That pseud
27380 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f 72 20 69  o-table cursor i
27390 73 20 74 68 65 20 6f 6e 65 20 74 68 61 74 20 69  s the one that i
273a0 73 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 0a  s identified by.
273b0 2a 2a 20 70 61 72 61 6d 65 74 65 72 20 50 33 2e  ** parameter P3.
273c0 20 20 43 6c 65 61 72 69 6e 67 20 74 68 65 20 50    Clearing the P
273d0 33 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20 61  3 column cache a
273e0 73 20 70 61 72 74 20 6f 66 20 74 68 69 73 20 6f  s part of this o
273f0 70 63 6f 64 65 20 73 61 76 65 73 0a 2a 2a 20 75  pcode saves.** u
27400 73 20 66 72 6f 6d 20 68 61 76 69 6e 67 20 74 6f  s from having to
27410 20 69 73 73 75 65 20 61 20 73 65 70 61 72 61 74   issue a separat
27420 65 20 4e 75 6c 6c 52 6f 77 20 69 6e 73 74 72 75  e NullRow instru
27430 63 74 69 6f 6e 20 74 6f 20 63 6c 65 61 72 20 74  ction to clear t
27440 68 61 74 20 63 61 63 68 65 2e 0a 2a 2f 0a 63 61  hat cache..*/.ca
27450 73 65 20 4f 50 5f 53 6f 72 74 65 72 44 61 74 61  se OP_SorterData
27460 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
27470 20 2a 70 43 3b 0a 0a 20 20 70 4f 75 74 20 3d 20   *pC;..  pOut = 
27480 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
27490 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
274a0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
274b0 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29  rt( isSorter(pC)
274c0 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
274d0 65 33 56 64 62 65 53 6f 72 74 65 72 52 6f 77 6b  e3VdbeSorterRowk
274e0 65 79 28 70 43 2c 20 70 4f 75 74 29 3b 0a 20 20  ey(pC, pOut);.  
274f0 61 73 73 65 72 74 28 20 72 63 21 3d 53 51 4c 49  assert( rc!=SQLI
27500 54 45 5f 4f 4b 20 7c 7c 20 28 70 4f 75 74 2d 3e  TE_OK || (pOut->
27510 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62  flags & MEM_Blob
27520 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ) );.  assert( p
27530 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
27540 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
27550 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  );.  if( rc ) go
27560 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
27570 65 72 72 6f 72 3b 0a 20 20 70 2d 3e 61 70 43 73  error;.  p->apCs
27580 72 5b 70 4f 70 2d 3e 70 33 5d 2d 3e 63 61 63 68  r[pOp->p3]->cach
27590 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
275a0 53 54 41 4c 45 3b 0a 20 20 62 72 65 61 6b 3b 0a  STALE;.  break;.
275b0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f  }../* Opcode: Ro
275c0 77 44 61 74 61 20 50 31 20 50 32 20 50 33 20 2a  wData P1 P2 P3 *
275d0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
275e0 72 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a 0a 2a 2a  r[P2]=data.**.**
275f0 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69   Write into regi
27600 73 74 65 72 20 50 32 20 74 68 65 20 63 6f 6d 70  ster P2 the comp
27610 6c 65 74 65 20 72 6f 77 20 63 6f 6e 74 65 6e 74  lete row content
27620 20 66 6f 72 20 74 68 65 20 72 6f 77 20 61 74 20   for the row at 
27630 0a 2a 2a 20 77 68 69 63 68 20 63 75 72 73 6f 72  .** which cursor
27640 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
27650 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 20 54 68   pointing..** Th
27660 65 72 65 20 69 73 20 6e 6f 20 69 6e 74 65 72 70  ere is no interp
27670 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  retation of the 
27680 64 61 74 61 2e 20 20 0a 2a 2a 20 49 74 20 69 73  data.  .** It is
27690 20 6a 75 73 74 20 63 6f 70 69 65 64 20 6f 6e 74   just copied ont
276a0 6f 20 74 68 65 20 50 32 20 72 65 67 69 73 74 65  o the P2 registe
276b0 72 20 65 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a  r exactly as .**
276c0 20 69 74 20 69 73 20 66 6f 75 6e 64 20 69 6e 20   it is found in 
276d0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
276e0 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73  e..**.** If curs
276f0 6f 72 20 50 31 20 69 73 20 61 6e 20 69 6e 64 65  or P1 is an inde
27700 78 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 6e 74  x, then the cont
27710 65 6e 74 20 69 73 20 74 68 65 20 6b 65 79 20 6f  ent is the key o
27720 66 20 74 68 65 20 72 6f 77 2e 0a 2a 2a 20 49 66  f the row..** If
27730 20 63 75 72 73 6f 72 20 50 32 20 69 73 20 61 20   cursor P2 is a 
27740 74 61 62 6c 65 2c 20 74 68 65 6e 20 74 68 65 20  table, then the 
27750 63 6f 6e 74 65 6e 74 20 65 78 74 72 61 63 74 65  content extracte
27760 64 20 69 73 20 74 68 65 20 64 61 74 61 2e 0a 2a  d is the data..*
27770 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 63  *.** If the P1 c
27780 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 70 6f  ursor must be po
27790 69 6e 74 69 6e 67 20 74 6f 20 61 20 76 61 6c 69  inting to a vali
277a0 64 20 72 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c  d row (not a NUL
277b0 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72  L row).** of a r
277c0 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61  eal table, not a
277d0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a   pseudo-table..*
277e0 2a 0a 2a 2a 20 49 66 20 50 33 21 3d 30 20 74 68  *.** If P3!=0 th
277f0 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69  en this opcode i
27800 73 20 61 6c 6c 6f 77 65 64 20 74 6f 20 6d 61 6b  s allowed to mak
27810 65 20 61 6e 20 65 70 68 65 72 6d 65 72 61 6c 20  e an ephermeral 
27820 70 6f 69 6e 74 65 72 0a 2a 2a 20 69 6e 74 6f 20  pointer.** into 
27830 74 68 65 20 64 61 74 61 62 61 73 65 20 70 61 67  the database pag
27840 65 2e 20 20 54 68 61 74 20 6d 65 61 6e 73 20 74  e.  That means t
27850 68 61 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  hat the content 
27860 6f 66 20 74 68 65 20 6f 75 74 70 75 74 0a 2a 2a  of the output.**
27870 20 72 65 67 69 73 74 65 72 20 77 69 6c 6c 20 62   register will b
27880 65 20 69 6e 76 61 6c 69 64 61 74 65 64 20 61 73  e invalidated as
27890 20 73 6f 6f 6e 20 61 73 20 74 68 65 20 63 75 72   soon as the cur
278a0 73 6f 72 20 6d 6f 76 65 73 20 2d 20 69 6e 63 6c  sor moves - incl
278b0 75 64 69 6e 67 0a 2a 2a 20 6d 6f 76 65 73 20 63  uding.** moves c
278c0 61 75 73 65 64 20 62 79 20 6f 74 68 65 72 20 63  aused by other c
278d0 75 72 73 6f 72 73 20 74 68 61 74 20 22 73 61 76  ursors that "sav
278e0 65 22 20 74 68 65 20 74 68 65 20 63 75 72 72 65  e" the the curre
278f0 6e 74 20 63 75 72 73 6f 72 73 0a 2a 2a 20 70 6f  nt cursors.** po
27900 73 69 74 69 6f 6e 20 69 6e 20 6f 72 64 65 72 20  sition in order 
27910 74 68 61 74 20 74 68 65 79 20 63 61 6e 20 77 72  that they can wr
27920 69 74 65 20 74 6f 20 74 68 65 20 73 61 6d 65 20  ite to the same 
27930 74 61 62 6c 65 2e 20 20 49 66 20 50 33 3d 3d 30  table.  If P3==0
27940 0a 2a 2a 20 74 68 65 6e 20 61 20 63 6f 70 79 20  .** then a copy 
27950 6f 66 20 74 68 65 20 64 61 74 61 20 69 73 20 6d  of the data is m
27960 61 64 65 20 69 6e 74 6f 20 6d 65 6d 6f 72 79 2e  ade into memory.
27970 20 20 50 33 21 3d 30 20 69 73 20 66 61 73 74 65    P3!=0 is faste
27980 72 2c 20 62 75 74 0a 2a 2a 20 50 33 3d 3d 30 20  r, but.** P3==0 
27990 69 73 20 73 61 66 65 72 2e 0a 2a 2a 0a 2a 2a 20  is safer..**.** 
279a0 49 66 20 50 33 21 3d 30 20 74 68 65 6e 20 74 68  If P3!=0 then th
279b0 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65  e content of the
279c0 20 50 32 20 72 65 67 69 73 74 65 72 20 69 73 20   P2 register is 
279d0 75 6e 73 75 69 74 61 62 6c 65 20 66 6f 72 20 75  unsuitable for u
279e0 73 65 0a 2a 2a 20 69 6e 20 4f 50 5f 52 65 73 75  se.** in OP_Resu
279f0 6c 74 20 61 6e 64 20 61 6e 79 20 4f 50 5f 52 65  lt and any OP_Re
27a00 73 75 6c 74 20 77 69 6c 6c 20 69 6e 76 61 6c 69  sult will invali
27a10 64 61 74 65 20 74 68 65 20 50 32 20 72 65 67 69  date the P2 regi
27a20 73 74 65 72 20 63 6f 6e 74 65 6e 74 2e 0a 2a 2a  ster content..**
27a30 20 54 68 65 20 50 32 20 72 65 67 69 73 74 65 72   The P2 register
27a40 20 63 6f 6e 74 65 6e 74 20 69 73 20 69 6e 76 61   content is inva
27a50 6c 69 64 61 74 65 64 20 62 79 20 6f 70 63 6f 64  lidated by opcod
27a60 65 73 20 6c 69 6b 65 20 4f 50 5f 46 75 6e 63 74  es like OP_Funct
27a70 69 6f 6e 20 6f 72 0a 2a 2a 20 62 79 20 61 6e 79  ion or.** by any
27a80 20 75 73 65 20 6f 66 20 61 6e 6f 74 68 65 72 20   use of another 
27a90 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20  cursor pointing 
27aa0 74 6f 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c  to the same tabl
27ab0 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f  e..*/.case OP_Ro
27ac0 77 44 61 74 61 3a 20 7b 0a 20 20 56 64 62 65 43  wData: {.  VdbeC
27ad0 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
27ae0 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
27af0 75 33 32 20 6e 3b 0a 0a 20 20 70 4f 75 74 20 3d  u32 n;..  pOut =
27b00 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
27b10 70 2c 20 70 4f 70 29 3b 0a 0a 20 20 61 73 73 65  p, pOp);..  asse
27b20 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
27b30 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
27b40 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
27b50 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
27b60 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
27b70 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
27b80 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
27b90 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
27ba0 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72  assert( isSorter
27bb0 28 70 43 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73  (pC)==0 );.  ass
27bc0 65 72 74 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  ert( pC->nullRow
27bd0 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
27be0 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21   pC->uc.pCursor!
27bf0 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20  =0 );.  pCrsr = 
27c00 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a  pC->uc.pCursor;.
27c10 0a 20 20 2f 2a 20 54 68 65 20 4f 50 5f 52 6f 77  .  /* The OP_Row
27c20 44 61 74 61 20 6f 70 63 6f 64 65 73 20 61 6c 77  Data opcodes alw
27c30 61 79 73 20 66 6f 6c 6c 6f 77 20 4f 50 5f 4e 6f  ays follow OP_No
27c40 74 45 78 69 73 74 73 20 6f 72 0a 20 20 2a 2a 20  tExists or.  ** 
27c50 4f 50 5f 53 65 65 6b 52 6f 77 69 64 20 6f 72 20  OP_SeekRowid or 
27c60 4f 50 5f 52 65 77 69 6e 64 2f 4f 70 5f 4e 65 78  OP_Rewind/Op_Nex
27c70 74 20 77 69 74 68 20 6e 6f 20 69 6e 74 65 72 76  t with no interv
27c80 65 6e 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f  ening instructio
27c90 6e 73 0a 20 20 2a 2a 20 74 68 61 74 20 6d 69 67  ns.  ** that mig
27ca0 68 74 20 69 6e 76 61 6c 69 64 61 74 65 20 74 68  ht invalidate th
27cb0 65 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2a 20 49  e cursor..  ** I
27cc0 66 20 74 68 69 73 20 77 68 65 72 65 20 6e 6f 74  f this where not
27cd0 20 74 68 65 20 63 61 73 65 2c 20 6f 6e 20 6f 66   the case, on of
27ce0 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61   the following a
27cf0 73 73 65 72 74 28 29 73 0a 20 20 2a 2a 20 77 6f  ssert()s.  ** wo
27d00 75 6c 64 20 66 61 69 6c 2e 20 20 53 68 6f 75 6c  uld fail.  Shoul
27d10 64 20 74 68 69 73 20 65 76 65 72 20 63 68 61 6e  d this ever chan
27d20 67 65 20 28 62 65 63 61 75 73 65 20 6f 66 20 63  ge (because of c
27d30 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20 63 6f  hanges in the co
27d40 64 65 0a 20 20 2a 2a 20 67 65 6e 65 72 61 74 6f  de.  ** generato
27d50 72 29 20 74 68 65 6e 20 74 68 65 20 66 69 78 20  r) then the fix 
27d60 77 6f 75 6c 64 20 62 65 20 74 6f 20 69 6e 73 65  would be to inse
27d70 72 74 20 61 20 63 61 6c 6c 20 74 6f 0a 20 20 2a  rt a call to.  *
27d80 2a 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  * sqlite3VdbeCur
27d90 73 6f 72 4d 6f 76 65 74 6f 28 29 2e 0a 20 20 2a  sorMoveto()..  *
27da0 2f 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  /.  assert( pC->
27db0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
27dc0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73  0 );.  assert( s
27dd0 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
27de0 72 49 73 56 61 6c 69 64 28 70 43 72 73 72 29 20  rIsValid(pCrsr) 
27df0 29 3b 0a 23 69 66 20 30 20 20 2f 2a 20 4e 6f 74  );.#if 0  /* Not
27e00 20 72 65 71 75 69 72 65 64 20 64 75 65 20 74 6f   required due to
27e10 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 74 6f   the previous to
27e20 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d   assert() statem
27e30 65 6e 74 73 20 2a 2f 0a 20 20 72 63 20 3d 20 73  ents */.  rc = s
27e40 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72  qlite3VdbeCursor
27e50 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66  Moveto(pC);.  if
27e60 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
27e70 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
27e80 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69  _to_error;.#endi
27e90 66 0a 0a 20 20 6e 20 3d 20 73 71 6c 69 74 65 33  f..  n = sqlite3
27ea0 42 74 72 65 65 50 61 79 6c 6f 61 64 53 69 7a 65  BtreePayloadSize
27eb0 28 70 43 72 73 72 29 3b 0a 20 20 69 66 28 20 6e  (pCrsr);.  if( n
27ec0 3e 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74  >(u32)db->aLimit
27ed0 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
27ee0 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74  NGTH] ){.    got
27ef0 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20  o too_big;.  }. 
27f00 20 74 65 73 74 63 61 73 65 28 20 6e 3d 3d 30 20   testcase( n==0 
27f10 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
27f20 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65  3VdbeMemFromBtre
27f30 65 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70  e(pCrsr, 0, n, p
27f40 4f 75 74 29 3b 0a 20 20 69 66 28 20 72 63 20 29  Out);.  if( rc )
27f50 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
27f60 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20  to_error;.  if( 
27f70 21 70 4f 70 2d 3e 70 33 20 29 20 44 65 65 70 68  !pOp->p3 ) Deeph
27f80 65 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b  emeralize(pOut);
27f90 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
27fa0 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20  OBSIZE(pOut);.  
27fb0 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
27fc0 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20  Op->p2, pOut);. 
27fd0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
27fe0 63 6f 64 65 3a 20 52 6f 77 69 64 20 50 31 20 50  code: Rowid P1 P
27ff0 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
28000 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64  sis: r[P2]=rowid
28010 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 69 6e 20  .**.** Store in 
28020 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 20 69  register P2 an i
28030 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73 20  nteger which is 
28040 74 68 65 20 6b 65 79 20 6f 66 20 74 68 65 20 74  the key of the t
28050 61 62 6c 65 20 65 6e 74 72 79 20 74 68 61 74 0a  able entry that.
28060 2a 2a 20 50 31 20 69 73 20 63 75 72 72 65 6e 74  ** P1 is current
28070 6c 79 20 70 6f 69 6e 74 20 74 6f 2e 0a 2a 2a 0a  ly point to..**.
28080 2a 2a 20 50 31 20 63 61 6e 20 62 65 20 65 69 74  ** P1 can be eit
28090 68 65 72 20 61 6e 20 6f 72 64 69 6e 61 72 79 20  her an ordinary 
280a0 74 61 62 6c 65 20 6f 72 20 61 20 76 69 72 74 75  table or a virtu
280b0 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 65 72 65  al table.  There
280c0 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 61   used to.** be a
280d0 20 73 65 70 61 72 61 74 65 20 4f 50 5f 56 52 6f   separate OP_VRo
280e0 77 69 64 20 6f 70 63 6f 64 65 20 66 6f 72 20 75  wid opcode for u
280f0 73 65 20 77 69 74 68 20 76 69 72 74 75 61 6c 20  se with virtual 
28100 74 61 62 6c 65 73 2c 20 62 75 74 20 74 68 69 73  tables, but this
28110 0a 2a 2a 20 6f 6e 65 20 6f 70 63 6f 64 65 20 6e  .** one opcode n
28120 6f 77 20 77 6f 72 6b 73 20 66 6f 72 20 62 6f 74  ow works for bot
28130 68 20 74 61 62 6c 65 20 74 79 70 65 73 2e 0a 2a  h table types..*
28140 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 69 64 3a  /.case OP_Rowid:
28150 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
28160 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
28170 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
28180 20 20 69 36 34 20 76 3b 0a 20 20 73 71 6c 69 74    i64 v;.  sqlit
28190 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
281a0 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
281b0 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
281c0 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ..  pOut = out2P
281d0 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
281e0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
281f0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
28200 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
28210 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
28220 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
28230 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
28240 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
28250 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f 50 53  Type!=CURTYPE_PS
28260 45 55 44 4f 20 7c 7c 20 70 43 2d 3e 6e 75 6c 6c  EUDO || pC->null
28270 52 6f 77 20 29 3b 0a 20 20 69 66 28 20 70 43 2d  Row );.  if( pC-
28280 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
28290 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
282a0 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 62 72 65 61  M_Null;.    brea
282b0 6b 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  k;.  }else if( p
282c0 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
282d0 6f 20 29 7b 0a 20 20 20 20 76 20 3d 20 70 43 2d  o ){.    v = pC-
282e0 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 3b 0a 23  >movetoTarget;.#
282f0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
28300 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
28310 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e    }else if( pC->
28320 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
28330 45 5f 56 54 41 42 20 29 7b 0a 20 20 20 20 61 73  E_VTAB ){.    as
28340 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 56 43  sert( pC->uc.pVC
28350 75 72 21 3d 30 20 29 3b 0a 20 20 20 20 70 56 74  ur!=0 );.    pVt
28360 61 62 20 3d 20 70 43 2d 3e 75 63 2e 70 56 43 75  ab = pC->uc.pVCu
28370 72 2d 3e 70 56 74 61 62 3b 0a 20 20 20 20 70 4d  r->pVtab;.    pM
28380 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70  odule = pVtab->p
28390 4d 6f 64 75 6c 65 3b 0a 20 20 20 20 61 73 73 65  Module;.    asse
283a0 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f  rt( pModule->xRo
283b0 77 69 64 20 29 3b 0a 20 20 20 20 72 63 20 3d 20  wid );.    rc = 
283c0 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64 28  pModule->xRowid(
283d0 70 43 2d 3e 75 63 2e 70 56 43 75 72 2c 20 26 76  pC->uc.pVCur, &v
283e0 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74  );.    sqlite3Vt
283f0 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70  abImportErrmsg(p
28400 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20 69 66  , pVtab);.    if
28410 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
28420 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
28430 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
28440 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
28450 4c 45 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20  LE */.  }else{. 
28460 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65     assert( pC->e
28470 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
28480 5f 42 54 52 45 45 20 29 3b 0a 20 20 20 20 61 73  _BTREE );.    as
28490 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75  sert( pC->uc.pCu
284a0 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 72  rsor!=0 );.    r
284b0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
284c0 75 72 73 6f 72 52 65 73 74 6f 72 65 28 70 43 29  ursorRestore(pC)
284d0 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67  ;.    if( rc ) g
284e0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
284f0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 69 66 28 20  _error;.    if( 
28500 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  pC->nullRow ){. 
28510 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73       pOut->flags
28520 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20   = MEM_Null;.   
28530 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
28540 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33 42      v = sqlite3B
28550 74 72 65 65 49 6e 74 65 67 65 72 4b 65 79 28 70  treeIntegerKey(p
28560 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a  C->uc.pCursor);.
28570 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20    }.  pOut->u.i 
28580 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  = v;.  break;.}.
28590 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c  ./* Opcode: Null
285a0 52 6f 77 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  Row P1 * * * *.*
285b0 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20 63 75  *.** Move the cu
285c0 72 73 6f 72 20 50 31 20 74 6f 20 61 20 6e 75 6c  rsor P1 to a nul
285d0 6c 20 72 6f 77 2e 20 20 41 6e 79 20 4f 50 5f 43  l row.  Any OP_C
285e0 6f 6c 75 6d 6e 20 6f 70 65 72 61 74 69 6f 6e 73  olumn operations
285f0 0a 2a 2a 20 74 68 61 74 20 6f 63 63 75 72 20 77  .** that occur w
28600 68 69 6c 65 20 74 68 65 20 63 75 72 73 6f 72 20  hile the cursor 
28610 69 73 20 6f 6e 20 74 68 65 20 6e 75 6c 6c 20 72  is on the null r
28620 6f 77 20 77 69 6c 6c 20 61 6c 77 61 79 73 0a 2a  ow will always.*
28630 2a 20 77 72 69 74 65 20 61 20 4e 55 4c 4c 2e 0a  * write a NULL..
28640 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 52  */.case OP_NullR
28650 6f 77 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  ow: {.  VdbeCurs
28660 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72  or *pC;..  asser
28670 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
28680 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
28690 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
286a0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
286b0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
286c0 20 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f   );.  pC->nullRo
286d0 77 20 3d 20 31 3b 0a 20 20 70 43 2d 3e 63 61 63  w = 1;.  pC->cac
286e0 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
286f0 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 70 43  _STALE;.  if( pC
28700 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
28710 59 50 45 5f 42 54 52 45 45 20 29 7b 0a 20 20 20  YPE_BTREE ){.   
28720 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e   assert( pC->uc.
28730 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20  pCursor!=0 );.  
28740 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c    sqlite3BtreeCl
28750 65 61 72 43 75 72 73 6f 72 28 70 43 2d 3e 75 63  earCursor(pC->uc
28760 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20  .pCursor);.  }. 
28770 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
28780 63 6f 64 65 3a 20 53 65 65 6b 45 6e 64 20 50 31  code: SeekEnd P1
28790 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50   * * * *.**.** P
287a0 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50  osition cursor P
287b0 31 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20  1 at the end of 
287c0 74 68 65 20 62 74 72 65 65 20 66 6f 72 20 74 68  the btree for th
287d0 65 20 70 75 72 70 6f 73 65 20 6f 66 0a 2a 2a 20  e purpose of.** 
287e0 61 70 70 65 6e 64 69 6e 67 20 61 20 6e 65 77 20  appending a new 
287f0 65 6e 74 72 79 20 6f 6e 74 6f 20 74 68 65 20 62  entry onto the b
28800 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 74 20 69  tree..**.** It i
28810 73 20 61 73 73 75 6d 65 64 20 74 68 61 74 20 74  s assumed that t
28820 68 65 20 63 75 72 73 6f 72 20 69 73 20 75 73 65  he cursor is use
28830 64 20 6f 6e 6c 79 20 66 6f 72 20 61 70 70 65 6e  d only for appen
28840 64 69 6e 67 20 61 6e 64 20 73 6f 0a 2a 2a 20 69  ding and so.** i
28850 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  f the cursor is 
28860 76 61 6c 69 64 2c 20 74 68 65 6e 20 74 68 65 20  valid, then the 
28870 63 75 72 73 6f 72 20 6d 75 73 74 20 61 6c 72 65  cursor must alre
28880 61 64 79 20 62 65 20 70 6f 69 6e 74 69 6e 67 0a  ady be pointing.
28890 2a 2a 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66  ** at the end of
288a0 20 74 68 65 20 62 74 72 65 65 20 61 6e 64 20 73   the btree and s
288b0 6f 20 6e 6f 20 63 68 61 6e 67 65 73 20 61 72 65  o no changes are
288c0 20 6d 61 64 65 20 74 6f 0a 2a 2a 20 74 68 65 20   made to.** the 
288d0 63 75 72 73 6f 72 2e 0a 2a 2f 0a 2f 2a 20 4f 70  cursor..*/./* Op
288e0 63 6f 64 65 3a 20 4c 61 73 74 20 50 31 20 50 32  code: Last P1 P2
288f0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65   * * *.**.** The
28900 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65   next use of the
28910 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e   Rowid or Column
28920 20 6f 72 20 50 72 65 76 20 69 6e 73 74 72 75 63   or Prev instruc
28930 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20  tion for P1 .** 
28940 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68  will refer to th
28950 65 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20  e last entry in 
28960 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62  the database tab
28970 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20  le or index..** 
28980 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  If the table or 
28990 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 61  index is empty a
289a0 6e 64 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75  nd P2>0, then ju
289b0 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
289c0 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69  o P2..** If P2 i
289d0 73 20 30 20 6f 72 20 69 66 20 74 68 65 20 74 61  s 0 or if the ta
289e0 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20  ble or index is 
289f0 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20  not empty, fall 
28a00 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68  through.** to th
28a10 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74  e following inst
28a20 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  ruction..**.** T
28a30 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65  his opcode leave
28a40 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e  s the cursor con
28a50 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20  figured to move 
28a60 69 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65 72  in reverse order
28a70 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e  ,.** from the en
28a80 64 20 74 6f 77 61 72 64 20 74 68 65 20 62 65 67  d toward the beg
28a90 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65  inning.  In othe
28aa0 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72  r words, the cur
28ab0 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67  sor is.** config
28ac0 75 72 65 64 20 74 6f 20 75 73 65 20 50 72 65 76  ured to use Prev
28ad0 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2f 0a 63  , not Next..*/.c
28ae0 61 73 65 20 4f 50 5f 53 65 65 6b 45 6e 64 3a 0a  ase OP_SeekEnd:.
28af0 63 61 73 65 20 4f 50 5f 4c 61 73 74 3a 20 7b 20  case OP_Last: { 
28b00 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
28b10 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
28b20 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
28b30 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73  pCrsr;.  int res
28b40 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
28b50 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
28b60 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
28b70 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
28b80 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
28b90 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
28ba0 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
28bb0 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
28bc0 52 45 45 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  REE );.  pCrsr =
28bd0 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b   pC->uc.pCursor;
28be0 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 61 73  .  res = 0;.  as
28bf0 73 65 72 74 28 20 70 43 72 73 72 21 3d 30 20 29  sert( pCrsr!=0 )
28c00 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
28c10 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b  DEBUG.  pC->seek
28c20 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  Op = pOp->opcode
28c30 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70  ;.#endif.  if( p
28c40 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53  Op->opcode==OP_S
28c50 65 65 6b 45 6e 64 20 29 7b 0a 20 20 20 20 61 73  eekEnd ){.    as
28c60 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 30  sert( pOp->p2==0
28c70 20 29 3b 0a 20 20 20 20 70 43 2d 3e 73 65 65 6b   );.    pC->seek
28c80 52 65 73 75 6c 74 20 3d 20 2d 31 3b 0a 20 20 20  Result = -1;.   
28c90 20 69 66 28 20 73 71 6c 69 74 65 33 42 74 72 65   if( sqlite3Btre
28ca0 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 4e 4e  eCursorIsValidNN
28cb0 28 70 43 72 73 72 29 20 29 7b 0a 20 20 20 20 20  (pCrsr) ){.     
28cc0 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
28cd0 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  }.  rc = sqlite3
28ce0 42 74 72 65 65 4c 61 73 74 28 70 43 72 73 72 2c  BtreeLast(pCrsr,
28cf0 20 26 72 65 73 29 3b 0a 20 20 70 43 2d 3e 6e 75   &res);.  pC->nu
28d00 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b  llRow = (u8)res;
28d10 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  .  pC->deferredM
28d20 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d  oveto = 0;.  pC-
28d30 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
28d40 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66  ACHE_STALE;.  if
28d50 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
28d60 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
28d70 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3e 30 20    if( pOp->p2>0 
28d80 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  ){.    VdbeBranc
28d90 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29  hTaken(res!=0,2)
28da0 3b 0a 20 20 20 20 69 66 28 20 72 65 73 20 29 20  ;.    if( res ) 
28db0 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
28dc0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
28dd0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 53 6d  ./* Opcode: IfSm
28de0 61 6c 6c 65 72 20 50 31 20 50 32 20 50 33 20 2a  aller P1 P2 P3 *
28df0 20 2a 0a 2a 2a 0a 2a 2a 20 45 73 74 69 6d 61 74   *.**.** Estimat
28e00 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
28e10 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c  rows in the tabl
28e20 65 20 50 31 2e 20 20 4a 75 6d 70 20 74 6f 20 50  e P1.  Jump to P
28e30 32 20 69 66 20 74 68 61 74 0a 2a 2a 20 65 73 74  2 if that.** est
28e40 69 6d 61 74 65 20 69 73 20 6c 65 73 73 20 74 68  imate is less th
28e50 61 6e 20 61 70 70 72 6f 78 69 6d 61 74 65 6c 79  an approximately
28e60 20 32 2a 2a 28 30 2e 31 2a 50 33 29 2e 0a 2a 2f   2**(0.1*P3)..*/
28e70 0a 63 61 73 65 20 4f 50 5f 49 66 53 6d 61 6c 6c  .case OP_IfSmall
28e80 65 72 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  er: {        /* 
28e90 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75  jump */.  VdbeCu
28ea0 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75  rsor *pC;.  BtCu
28eb0 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69  rsor *pCrsr;.  i
28ec0 6e 74 20 72 65 73 3b 0a 20 20 69 36 34 20 73 7a  nt res;.  i64 sz
28ed0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
28ee0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
28ef0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
28f00 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
28f10 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
28f20 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
28f30 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70  pCrsr = pC->uc.p
28f40 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74  Cursor;.  assert
28f50 28 20 70 43 72 73 72 20 29 3b 0a 20 20 72 63 20  ( pCrsr );.  rc 
28f60 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 46 69  = sqlite3BtreeFi
28f70 72 73 74 28 70 43 72 73 72 2c 20 26 72 65 73 29  rst(pCrsr, &res)
28f80 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
28f90 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
28fa0 72 72 6f 72 3b 0a 20 20 69 66 28 20 72 65 73 3d  rror;.  if( res=
28fb0 3d 30 20 29 7b 0a 20 20 20 20 73 7a 20 3d 20 73  =0 ){.    sz = s
28fc0 71 6c 69 74 65 33 42 74 72 65 65 52 6f 77 43 6f  qlite3BtreeRowCo
28fd0 75 6e 74 45 73 74 28 70 43 72 73 72 29 3b 0a 20  untEst(pCrsr);. 
28fe0 20 20 20 69 66 28 20 41 4c 57 41 59 53 28 73 7a     if( ALWAYS(sz
28ff0 3e 3d 30 29 20 26 26 20 73 71 6c 69 74 65 33 4c  >=0) && sqlite3L
29000 6f 67 45 73 74 28 28 75 36 34 29 73 7a 29 3c 70  ogEst((u64)sz)<p
29010 4f 70 2d 3e 70 33 20 29 20 72 65 73 20 3d 20 31  Op->p3 ) res = 1
29020 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42 72 61 6e  ;.  }.  VdbeBran
29030 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32  chTaken(res!=0,2
29040 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29 20 67  );.  if( res ) g
29050 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
29060 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20    break;.}.../* 
29070 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 53 6f  Opcode: SorterSo
29080 72 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  rt P1 P2 * * *.*
29090 2a 0a 2a 2a 20 41 66 74 65 72 20 61 6c 6c 20 72  *.** After all r
290a0 65 63 6f 72 64 73 20 68 61 76 65 20 62 65 65 6e  ecords have been
290b0 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74   inserted into t
290c0 68 65 20 53 6f 72 74 65 72 20 6f 62 6a 65 63 74  he Sorter object
290d0 0a 2a 2a 20 69 64 65 6e 74 69 66 69 65 64 20 62  .** identified b
290e0 79 20 50 31 2c 20 69 6e 76 6f 6b 65 20 74 68 69  y P1, invoke thi
290f0 73 20 6f 70 63 6f 64 65 20 74 6f 20 61 63 74 75  s opcode to actu
29100 61 6c 6c 79 20 64 6f 20 74 68 65 20 73 6f 72 74  ally do the sort
29110 69 6e 67 2e 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20  ing..** Jump to 
29120 50 32 20 69 66 20 74 68 65 72 65 20 61 72 65 20  P2 if there are 
29130 6e 6f 20 72 65 63 6f 72 64 73 20 74 6f 20 62 65  no records to be
29140 20 73 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54   sorted..**.** T
29150 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 61 6e  his opcode is an
29160 20 61 6c 69 61 73 20 66 6f 72 20 4f 50 5f 53 6f   alias for OP_So
29170 72 74 20 61 6e 64 20 4f 50 5f 52 65 77 69 6e 64  rt and OP_Rewind
29180 20 74 68 61 74 20 69 73 20 75 73 65 64 0a 2a 2a   that is used.**
29190 20 66 6f 72 20 53 6f 72 74 65 72 20 6f 62 6a 65   for Sorter obje
291a0 63 74 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  cts..*/./* Opcod
291b0 65 3a 20 53 6f 72 74 20 50 31 20 50 32 20 2a 20  e: Sort P1 P2 * 
291c0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  * *.**.** This o
291d0 70 63 6f 64 65 20 64 6f 65 73 20 65 78 61 63 74  pcode does exact
291e0 6c 79 20 74 68 65 20 73 61 6d 65 20 74 68 69 6e  ly the same thin
291f0 67 20 61 73 20 4f 50 5f 52 65 77 69 6e 64 20 65  g as OP_Rewind e
29200 78 63 65 70 74 20 74 68 61 74 0a 2a 2a 20 69 74  xcept that.** it
29210 20 69 6e 63 72 65 6d 65 6e 74 73 20 61 6e 20 75   increments an u
29220 6e 64 6f 63 75 6d 65 6e 74 65 64 20 67 6c 6f 62  ndocumented glob
29230 61 6c 20 76 61 72 69 61 62 6c 65 20 75 73 65 64  al variable used
29240 20 66 6f 72 20 74 65 73 74 69 6e 67 2e 0a 2a 2a   for testing..**
29250 0a 2a 2a 20 53 6f 72 74 69 6e 67 20 69 73 20 61  .** Sorting is a
29260 63 63 6f 6d 70 6c 69 73 68 65 64 20 62 79 20 77  ccomplished by w
29270 72 69 74 69 6e 67 20 72 65 63 6f 72 64 73 20 69  riting records i
29280 6e 74 6f 20 61 20 73 6f 72 74 69 6e 67 20 69 6e  nto a sorting in
29290 64 65 78 2c 0a 2a 2a 20 74 68 65 6e 20 72 65 77  dex,.** then rew
292a0 69 6e 64 69 6e 67 20 74 68 61 74 20 69 6e 64 65  inding that inde
292b0 78 20 61 6e 64 20 70 6c 61 79 69 6e 67 20 69 74  x and playing it
292c0 20 62 61 63 6b 20 66 72 6f 6d 20 62 65 67 69 6e   back from begin
292d0 6e 69 6e 67 20 74 6f 0a 2a 2a 20 65 6e 64 2e 20  ning to.** end. 
292e0 20 57 65 20 75 73 65 20 74 68 65 20 4f 50 5f 53   We use the OP_S
292f0 6f 72 74 20 6f 70 63 6f 64 65 20 69 6e 73 74 65  ort opcode inste
29300 61 64 20 6f 66 20 4f 50 5f 52 65 77 69 6e 64 20  ad of OP_Rewind 
29310 74 6f 20 64 6f 20 74 68 65 0a 2a 2a 20 72 65 77  to do the.** rew
29320 69 6e 64 69 6e 67 20 73 6f 20 74 68 61 74 20 74  inding so that t
29330 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  he global variab
29340 6c 65 20 77 69 6c 6c 20 62 65 20 69 6e 63 72 65  le will be incre
29350 6d 65 6e 74 65 64 20 61 6e 64 0a 2a 2a 20 72 65  mented and.** re
29360 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73 20 63  gression tests c
29370 61 6e 20 64 65 74 65 72 6d 69 6e 65 20 77 68 65  an determine whe
29380 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20  ther or not the 
29390 6f 70 74 69 6d 69 7a 65 72 20 69 73 0a 2a 2a 20  optimizer is.** 
293a0 63 6f 72 72 65 63 74 6c 79 20 6f 70 74 69 6d 69  correctly optimi
293b0 7a 69 6e 67 20 6f 75 74 20 73 6f 72 74 73 2e 0a  zing out sorts..
293c0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65  */.case OP_Sorte
293d0 72 53 6f 72 74 3a 20 20 20 20 2f 2a 20 6a 75 6d  rSort:    /* jum
293e0 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72  p */.case OP_Sor
293f0 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  t: {        /* j
29400 75 6d 70 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  ump */.#ifdef SQ
29410 4c 49 54 45 5f 54 45 53 54 0a 20 20 73 71 6c 69  LITE_TEST.  sqli
29420 74 65 33 5f 73 6f 72 74 5f 63 6f 75 6e 74 2b 2b  te3_sort_count++
29430 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72  ;.  sqlite3_sear
29440 63 68 5f 63 6f 75 6e 74 2d 2d 3b 0a 23 65 6e 64  ch_count--;.#end
29450 69 66 0a 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72  if.  p->aCounter
29460 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54  [SQLITE_STMTSTAT
29470 55 53 5f 53 4f 52 54 5d 2b 2b 3b 0a 20 20 2f 2a  US_SORT]++;.  /*
29480 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e   Fall through in
29490 74 6f 20 4f 50 5f 52 65 77 69 6e 64 20 2a 2f 0a  to OP_Rewind */.
294a0 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 77  }./* Opcode: Rew
294b0 69 6e 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ind P1 P2 * * *.
294c0 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75  **.** The next u
294d0 73 65 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20  se of the Rowid 
294e0 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78  or Column or Nex
294f0 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f  t instruction fo
29500 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65  r P1 .** will re
29510 66 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74  fer to the first
29520 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61   entry in the da
29530 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
29540 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65  index..** If the
29550 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
29560 69 73 20 65 6d 70 74 79 2c 20 6a 75 6d 70 20 69  is empty, jump i
29570 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
29580 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c  ..** If the tabl
29590 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f  e or index is no
295a0 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68  t empty, fall th
295b0 72 6f 75 67 68 20 74 6f 20 74 68 65 20 66 6f 6c  rough to the fol
295c0 6c 6f 77 69 6e 67 20 0a 2a 2a 20 69 6e 73 74 72  lowing .** instr
295d0 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  uction..**.** Th
295e0 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73  is opcode leaves
295f0 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66   the cursor conf
29600 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69  igured to move i
29610 6e 20 66 6f 72 77 61 72 64 20 6f 72 64 65 72 2c  n forward order,
29620 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62 65 67  .** from the beg
29630 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20 74 68  inning toward th
29640 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72  e end.  In other
29650 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73   words, the curs
29660 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75  or is.** configu
29670 72 65 64 20 74 6f 20 75 73 65 20 4e 65 78 74 2c  red to use Next,
29680 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2f 0a 63 61   not Prev..*/.ca
29690 73 65 20 4f 50 5f 52 65 77 69 6e 64 3a 20 7b 20  se OP_Rewind: { 
296a0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
296b0 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
296c0 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
296d0 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73  pCrsr;.  int res
296e0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
296f0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
29700 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
29710 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
29720 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
29730 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
29740 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72  assert( isSorter
29750 28 70 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f  (pC)==(pOp->opco
29760 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 53 6f 72  de==OP_SorterSor
29770 74 29 20 29 3b 0a 20 20 72 65 73 20 3d 20 31 3b  t) );.  res = 1;
29780 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
29790 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f  EBUG.  pC->seekO
297a0 70 20 3d 20 4f 50 5f 52 65 77 69 6e 64 3b 0a 23  p = OP_Rewind;.#
297b0 65 6e 64 69 66 0a 20 20 69 66 28 20 69 73 53 6f  endif.  if( isSo
297c0 72 74 65 72 28 70 43 29 20 29 7b 0a 20 20 20 20  rter(pC) ){.    
297d0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
297e0 53 6f 72 74 65 72 52 65 77 69 6e 64 28 70 43 2c  SorterRewind(pC,
297f0 20 26 72 65 73 29 3b 0a 20 20 7d 65 6c 73 65 7b   &res);.  }else{
29800 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
29810 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
29820 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 20 20  PE_BTREE );.    
29830 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70  pCrsr = pC->uc.p
29840 43 75 72 73 6f 72 3b 0a 20 20 20 20 61 73 73 65  Cursor;.    asse
29850 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20 20  rt( pCrsr );.   
29860 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
29870 65 65 46 69 72 73 74 28 70 43 72 73 72 2c 20 26  eeFirst(pCrsr, &
29880 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 64 65  res);.    pC->de
29890 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
298a0 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53  ;.    pC->cacheS
298b0 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
298c0 41 4c 45 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72  ALE;.  }.  if( r
298d0 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
298e0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70  ue_to_error;.  p
298f0 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38  C->nullRow = (u8
29900 29 72 65 73 3b 0a 20 20 61 73 73 65 72 74 28 20  )res;.  assert( 
29910 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70  pOp->p2>0 && pOp
29920 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20  ->p2<p->nOp );. 
29930 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
29940 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66  (res!=0,2);.  if
29950 28 20 72 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d  ( res ) goto jum
29960 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b  p_to_p2;.  break
29970 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
29980 4e 65 78 74 20 50 31 20 50 32 20 50 33 20 50 34  Next P1 P2 P3 P4
29990 20 50 35 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63   P5.**.** Advanc
299a0 65 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74  e cursor P1 so t
299b0 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  hat it points to
299c0 20 74 68 65 20 6e 65 78 74 20 6b 65 79 2f 64 61   the next key/da
299d0 74 61 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a  ta pair in its.*
299e0 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  * table or index
299f0 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65 20  .  If there are 
29a00 6e 6f 20 6d 6f 72 65 20 6b 65 79 2f 76 61 6c 75  no more key/valu
29a10 65 20 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c  e pairs then fal
29a20 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20  l through.** to 
29a30 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e  the following in
29a40 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20  struction.  But 
29a50 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 61 64  if the cursor ad
29a60 76 61 6e 63 65 20 77 61 73 20 73 75 63 63 65 73  vance was succes
29a70 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d  sful,.** jump im
29a80 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
29a90 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4e 65 78 74 20  .**.** The Next 
29aa0 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 76  opcode is only v
29ab0 61 6c 69 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61  alid following a
29ac0 6e 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47 45  n SeekGT, SeekGE
29ad0 2c 20 6f 72 0a 2a 2a 20 4f 50 5f 52 65 77 69 6e  , or.** OP_Rewin
29ae0 64 20 6f 70 63 6f 64 65 20 75 73 65 64 20 74 6f  d opcode used to
29af0 20 70 6f 73 69 74 69 6f 6e 20 74 68 65 20 63 75   position the cu
29b00 72 73 6f 72 2e 20 20 4e 65 78 74 20 69 73 20 6e  rsor.  Next is n
29b10 6f 74 20 61 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f  ot allowed.** to
29b20 20 66 6f 6c 6c 6f 77 20 53 65 65 6b 4c 54 2c 20   follow SeekLT, 
29b30 53 65 65 6b 4c 45 2c 20 6f 72 20 4f 50 5f 4c 61  SeekLE, or OP_La
29b40 73 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31  st..**.** The P1
29b50 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20   cursor must be 
29b60 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65  for a real table
29b70 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74  , not a pseudo-t
29b80 61 62 6c 65 2e 20 20 50 31 20 6d 75 73 74 20 68  able.  P1 must h
29b90 61 76 65 0a 2a 2a 20 62 65 65 6e 20 6f 70 65 6e  ave.** been open
29ba0 65 64 20 70 72 69 6f 72 20 74 6f 20 74 68 69 73  ed prior to this
29bb0 20 6f 70 63 6f 64 65 20 6f 72 20 74 68 65 20 70   opcode or the p
29bc0 72 6f 67 72 61 6d 20 77 69 6c 6c 20 73 65 67 66  rogram will segf
29bd0 61 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ault..**.** The 
29be0 50 33 20 76 61 6c 75 65 20 69 73 20 61 20 68 69  P3 value is a hi
29bf0 6e 74 20 74 6f 20 74 68 65 20 62 74 72 65 65 20  nt to the btree 
29c00 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20  implementation. 
29c10 49 66 20 50 33 3d 3d 31 2c 20 74 68 61 74 0a 2a  If P3==1, that.*
29c20 2a 20 6d 65 61 6e 73 20 50 31 20 69 73 20 61 6e  * means P1 is an
29c30 20 53 51 4c 20 69 6e 64 65 78 20 61 6e 64 20 74   SQL index and t
29c40 68 61 74 20 74 68 69 73 20 69 6e 73 74 72 75 63  hat this instruc
29c50 74 69 6f 6e 20 63 6f 75 6c 64 20 68 61 76 65 20  tion could have 
29c60 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65 64 20  been.** omitted 
29c70 69 66 20 74 68 61 74 20 69 6e 64 65 78 20 68 61  if that index ha
29c80 64 20 62 65 65 6e 20 75 6e 69 71 75 65 2e 20 20  d been unique.  
29c90 50 33 20 69 73 20 75 73 75 61 6c 6c 79 20 30 2e  P3 is usually 0.
29ca0 20 20 50 33 20 69 73 0a 2a 2a 20 61 6c 77 61 79    P3 is.** alway
29cb0 73 20 65 69 74 68 65 72 20 30 20 6f 72 20 31 2e  s either 0 or 1.
29cc0 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 6c 77  .**.** P4 is alw
29cd0 61 79 73 20 6f 66 20 74 79 70 65 20 50 34 5f 41  ays of type P4_A
29ce0 44 56 41 4e 43 45 2e 20 54 68 65 20 66 75 6e 63  DVANCE. The func
29cf0 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70 6f 69  tion pointer poi
29d00 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65  nts to.** sqlite
29d10 33 42 74 72 65 65 4e 65 78 74 28 29 2e 0a 2a 2a  3BtreeNext()..**
29d20 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 70 6f 73  .** If P5 is pos
29d30 69 74 69 76 65 20 61 6e 64 20 74 68 65 20 6a 75  itive and the ju
29d40 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 74 68 65  mp is taken, the
29d50 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74 65 72 0a  n event counter.
29d60 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31 20 69  ** number P5-1 i
29d70 6e 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73  n the prepared s
29d80 74 61 74 65 6d 65 6e 74 20 69 73 20 69 6e 63 72  tatement is incr
29d90 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 53  emented..**.** S
29da0 65 65 20 61 6c 73 6f 3a 20 50 72 65 76 2c 20 4e  ee also: Prev, N
29db0 65 78 74 49 66 4f 70 65 6e 0a 2a 2f 0a 2f 2a 20  extIfOpen.*/./* 
29dc0 4f 70 63 6f 64 65 3a 20 4e 65 78 74 49 66 4f 70  Opcode: NextIfOp
29dd0 65 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 50  en P1 P2 P3 P4 P
29de0 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  5.**.** This opc
29df0 6f 64 65 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  ode works just l
29e00 69 6b 65 20 4e 65 78 74 20 65 78 63 65 70 74 20  ike Next except 
29e10 74 68 61 74 20 69 66 20 63 75 72 73 6f 72 20 50  that if cursor P
29e20 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 70 65 6e  1 is not.** open
29e30 20 69 74 20 62 65 68 61 76 65 73 20 61 20 6e 6f   it behaves a no
29e40 2d 6f 70 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  -op..*/./* Opcod
29e50 65 3a 20 50 72 65 76 20 50 31 20 50 32 20 50 33  e: Prev P1 P2 P3
29e60 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42 61 63   P4 P5.**.** Bac
29e70 6b 20 75 70 20 63 75 72 73 6f 72 20 50 31 20 73  k up cursor P1 s
29e80 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73  o that it points
29e90 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75 73   to the previous
29ea0 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20 69   key/data pair i
29eb0 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f  n its.** table o
29ec0 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68 65  r index.  If the
29ed0 72 65 20 69 73 20 6e 6f 20 70 72 65 76 69 6f 75  re is no previou
29ee0 73 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72  s key/value pair
29ef0 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f  s then fall thro
29f00 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f  ugh.** to the fo
29f10 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74  llowing instruct
29f20 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65  ion.  But if the
29f30 20 63 75 72 73 6f 72 20 62 61 63 6b 75 70 20 77   cursor backup w
29f40 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a  as successful,.*
29f50 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  * jump immediate
29f60 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 0a  ly to P2..**.**.
29f70 2a 2a 20 54 68 65 20 50 72 65 76 20 6f 70 63 6f  ** The Prev opco
29f80 64 65 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64  de is only valid
29f90 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20 53 65   following an Se
29fa0 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 6f 72  ekLT, SeekLE, or
29fb0 0a 2a 2a 20 4f 50 5f 4c 61 73 74 20 6f 70 63 6f  .** OP_Last opco
29fc0 64 65 20 75 73 65 64 20 74 6f 20 70 6f 73 69 74  de used to posit
29fd0 69 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 2e 20  ion the cursor. 
29fe0 20 50 72 65 76 20 69 73 20 6e 6f 74 20 61 6c 6c   Prev is not all
29ff0 6f 77 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c 6c 6f  owed.** to follo
2a000 77 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47 45  w SeekGT, SeekGE
2a010 2c 20 6f 72 20 4f 50 5f 52 65 77 69 6e 64 2e 0a  , or OP_Rewind..
2a020 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72  **.** The P1 cur
2a030 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20  sor must be for 
2a040 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f  a real table, no
2a050 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  t a pseudo-table
2a060 2e 20 20 49 66 20 50 31 20 69 73 0a 2a 2a 20 6e  .  If P1 is.** n
2a070 6f 74 20 6f 70 65 6e 20 74 68 65 6e 20 74 68 65  ot open then the
2a080 20 62 65 68 61 76 69 6f 72 20 69 73 20 75 6e 64   behavior is und
2a090 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  efined..**.** Th
2a0a0 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 61 20  e P3 value is a 
2a0b0 68 69 6e 74 20 74 6f 20 74 68 65 20 62 74 72 65  hint to the btre
2a0c0 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
2a0d0 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74 68 61 74  . If P3==1, that
2a0e0 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69 73 20  .** means P1 is 
2a0f0 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 61 6e 64  an SQL index and
2a100 20 74 68 61 74 20 74 68 69 73 20 69 6e 73 74 72   that this instr
2a110 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68 61 76  uction could hav
2a120 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65  e been.** omitte
2a130 64 20 69 66 20 74 68 61 74 20 69 6e 64 65 78 20  d if that index 
2a140 68 61 64 20 62 65 65 6e 20 75 6e 69 71 75 65 2e  had been unique.
2a150 20 20 50 33 20 69 73 20 75 73 75 61 6c 6c 79 20    P3 is usually 
2a160 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61 6c 77  0.  P3 is.** alw
2a170 61 79 73 20 65 69 74 68 65 72 20 30 20 6f 72 20  ays either 0 or 
2a180 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  1..**.** P4 is a
2a190 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20 50 34  lways of type P4
2a1a0 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20 66 75  _ADVANCE. The fu
2a1b0 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70  nction pointer p
2a1c0 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69  oints to.** sqli
2a1d0 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73  te3BtreePrevious
2a1e0 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  ()..**.** If P5 
2a1f0 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e 64 20  is positive and 
2a200 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
2a210 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20 63 6f  n, then event co
2a220 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20  unter.** number 
2a230 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72 65 70  P5-1 in the prep
2a240 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69  ared statement i
2a250 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a  s incremented..*
2a260 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65  /./* Opcode: Pre
2a270 76 49 66 4f 70 65 6e 20 50 31 20 50 32 20 50 33  vIfOpen P1 P2 P3
2a280 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69   P4 P5.**.** Thi
2a290 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a  s opcode works j
2a2a0 75 73 74 20 6c 69 6b 65 20 50 72 65 76 20 65 78  ust like Prev ex
2a2b0 63 65 70 74 20 74 68 61 74 20 69 66 20 63 75 72  cept that if cur
2a2c0 73 6f 72 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a  sor P1 is not.**
2a2d0 20 6f 70 65 6e 20 69 74 20 62 65 68 61 76 65 73   open it behaves
2a2e0 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 2f 2a 20   a no-op..*/./* 
2a2f0 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 4e 65  Opcode: SorterNe
2a300 78 74 20 50 31 20 50 32 20 2a 20 2a 20 50 35 0a  xt P1 P2 * * P5.
2a310 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
2a320 65 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  e works just lik
2a330 65 20 4f 50 5f 4e 65 78 74 20 65 78 63 65 70 74  e OP_Next except
2a340 20 74 68 61 74 20 50 31 20 6d 75 73 74 20 62 65   that P1 must be
2a350 20 61 0a 2a 2a 20 73 6f 72 74 65 72 20 6f 62 6a   a.** sorter obj
2a360 65 63 74 20 66 6f 72 20 77 68 69 63 68 20 74 68  ect for which th
2a370 65 20 4f 50 5f 53 6f 72 74 65 72 53 6f 72 74 20  e OP_SorterSort 
2a380 6f 70 63 6f 64 65 20 68 61 73 20 62 65 65 6e 0a  opcode has been.
2a390 2a 2a 20 69 6e 76 6f 6b 65 64 2e 20 20 54 68 69  ** invoked.  Thi
2a3a0 73 20 6f 70 63 6f 64 65 20 61 64 76 61 6e 63 65  s opcode advance
2a3b0 73 20 74 68 65 20 63 75 72 73 6f 72 20 74 6f 20  s the cursor to 
2a3c0 74 68 65 20 6e 65 78 74 20 73 6f 72 74 65 64 0a  the next sorted.
2a3d0 2a 2a 20 72 65 63 6f 72 64 2c 20 6f 72 20 6a 75  ** record, or ju
2a3e0 6d 70 73 20 74 6f 20 50 32 20 69 66 20 74 68 65  mps to P2 if the
2a3f0 72 65 20 61 72 65 20 6e 6f 20 6d 6f 72 65 20 73  re are no more s
2a400 6f 72 74 65 64 20 72 65 63 6f 72 64 73 2e 0a 2a  orted records..*
2a410 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72  /.case OP_Sorter
2a420 4e 65 78 74 3a 20 7b 20 20 2f 2a 20 6a 75 6d 70  Next: {  /* jump
2a430 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
2a440 20 2a 70 43 3b 0a 0a 20 20 70 43 20 3d 20 70 2d   *pC;..  pC = p-
2a450 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
2a460 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72  .  assert( isSor
2a470 74 65 72 28 70 43 29 20 29 3b 0a 20 20 72 63 20  ter(pC) );.  rc 
2a480 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72  = sqlite3VdbeSor
2a490 74 65 72 4e 65 78 74 28 64 62 2c 20 70 43 29 3b  terNext(db, pC);
2a4a0 0a 20 20 67 6f 74 6f 20 6e 65 78 74 5f 74 61 69  .  goto next_tai
2a4b0 6c 3b 0a 63 61 73 65 20 4f 50 5f 50 72 65 76 49  l;.case OP_PrevI
2a4c0 66 4f 70 65 6e 3a 20 20 20 20 2f 2a 20 6a 75 6d  fOpen:    /* jum
2a4d0 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78  p */.case OP_Nex
2a4e0 74 49 66 4f 70 65 6e 3a 20 20 20 20 2f 2a 20 6a  tIfOpen:    /* j
2a4f0 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 70 2d 3e  ump */.  if( p->
2a500 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3d 3d  apCsr[pOp->p1]==
2a510 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f 2a 20  0 ) break;.  /* 
2a520 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 2a 2f 0a  Fall through */.
2a530 63 61 73 65 20 4f 50 5f 50 72 65 76 3a 20 20 20  case OP_Prev:   
2a540 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
2a550 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74 3a 20  /.case OP_Next: 
2a560 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
2a570 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
2a580 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
2a590 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
2a5a0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
2a5b0 3e 70 35 3c 41 72 72 61 79 53 69 7a 65 28 70 2d  >p5<ArraySize(p-
2a5c0 3e 61 43 6f 75 6e 74 65 72 29 20 29 3b 0a 20 20  >aCounter) );.  
2a5d0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
2a5e0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
2a5f0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
2a600 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
2a610 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
2a620 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
2a630 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
2a640 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28  REE );.  assert(
2a650 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50   pOp->opcode!=OP
2a660 5f 4e 65 78 74 20 7c 7c 20 70 4f 70 2d 3e 70 34  _Next || pOp->p4
2a670 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74  .xAdvance==sqlit
2a680 65 33 42 74 72 65 65 4e 65 78 74 20 29 3b 0a 20  e3BtreeNext );. 
2a690 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
2a6a0 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 20 7c 7c  code!=OP_Prev ||
2a6b0 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63   pOp->p4.xAdvanc
2a6c0 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65 50  e==sqlite3BtreeP
2a6d0 72 65 76 69 6f 75 73 20 29 3b 0a 20 20 61 73 73  revious );.  ass
2a6e0 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
2a6f0 21 3d 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e 20  !=OP_NextIfOpen 
2a700 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61  || pOp->p4.xAdva
2a710 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65  nce==sqlite3Btre
2a720 65 4e 65 78 74 20 29 3b 0a 20 20 61 73 73 65 72  eNext );.  asser
2a730 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  t( pOp->opcode!=
2a740 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e 20 7c 7c  OP_PrevIfOpen ||
2a750 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63   pOp->p4.xAdvanc
2a760 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65 50  e==sqlite3BtreeP
2a770 72 65 76 69 6f 75 73 29 3b 0a 0a 20 20 2f 2a 20  revious);..  /* 
2a780 54 68 65 20 4e 65 78 74 20 6f 70 63 6f 64 65 20  The Next opcode 
2a790 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 61 66 74  is only used aft
2a7a0 65 72 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47  er SeekGT, SeekG
2a7b0 45 2c 20 61 6e 64 20 52 65 77 69 6e 64 2e 0a 20  E, and Rewind.. 
2a7c0 20 2a 2a 20 54 68 65 20 50 72 65 76 20 6f 70 63   ** The Prev opc
2a7d0 6f 64 65 20 69 73 20 6f 6e 6c 79 20 75 73 65 64  ode is only used
2a7e0 20 61 66 74 65 72 20 53 65 65 6b 4c 54 2c 20 53   after SeekLT, S
2a7f0 65 65 6b 4c 45 2c 20 61 6e 64 20 4c 61 73 74 2e  eekLE, and Last.
2a800 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
2a810 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65  p->opcode!=OP_Ne
2a820 78 74 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  xt || pOp->opcod
2a830 65 21 3d 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e  e!=OP_NextIfOpen
2a840 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73  .       || pC->s
2a850 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 47 54  eekOp==OP_SeekGT
2a860 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d   || pC->seekOp==
2a870 4f 50 5f 53 65 65 6b 47 45 0a 20 20 20 20 20 20  OP_SeekGE.      
2a880 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d   || pC->seekOp==
2a890 4f 50 5f 52 65 77 69 6e 64 20 7c 7c 20 70 43 2d  OP_Rewind || pC-
2a8a0 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 46 6f 75 6e  >seekOp==OP_Foun
2a8b0 64 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  d);.  assert( pO
2a8c0 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72  p->opcode!=OP_Pr
2a8d0 65 76 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  ev || pOp->opcod
2a8e0 65 21 3d 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e  e!=OP_PrevIfOpen
2a8f0 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73  .       || pC->s
2a900 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 4c 54  eekOp==OP_SeekLT
2a910 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d   || pC->seekOp==
2a920 4f 50 5f 53 65 65 6b 4c 45 0a 20 20 20 20 20 20  OP_SeekLE.      
2a930 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d   || pC->seekOp==
2a940 4f 50 5f 4c 61 73 74 20 29 3b 0a 0a 20 20 72 63  OP_Last );..  rc
2a950 20 3d 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61   = pOp->p4.xAdva
2a960 6e 63 65 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  nce(pC->uc.pCurs
2a970 6f 72 2c 20 70 4f 70 2d 3e 70 33 29 3b 0a 6e 65  or, pOp->p3);.ne
2a980 78 74 5f 74 61 69 6c 3a 0a 20 20 70 43 2d 3e 63  xt_tail:.  pC->c
2a990 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
2a9a0 48 45 5f 53 54 41 4c 45 3b 0a 20 20 56 64 62 65  HE_STALE;.  Vdbe
2a9b0 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 63 3d 3d  BranchTaken(rc==
2a9c0 53 51 4c 49 54 45 5f 4f 4b 2c 32 29 3b 0a 20 20  SQLITE_OK,2);.  
2a9d0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
2a9e0 4b 20 29 7b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c  K ){.    pC->nul
2a9f0 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 70 2d  lRow = 0;.    p-
2aa00 3e 61 43 6f 75 6e 74 65 72 5b 70 4f 70 2d 3e 70  >aCounter[pOp->p
2aa10 35 5d 2b 2b 3b 0a 23 69 66 64 65 66 20 53 51 4c  5]++;.#ifdef SQL
2aa20 49 54 45 5f 54 45 53 54 0a 20 20 20 20 73 71 6c  ITE_TEST.    sql
2aa30 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e  ite3_search_coun
2aa40 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20  t++;.#endif.    
2aa50 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 5f  goto jump_to_p2_
2aa60 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e  and_check_for_in
2aa70 74 65 72 72 75 70 74 3b 0a 20 20 7d 0a 20 20 69  terrupt;.  }.  i
2aa80 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 44 4f  f( rc!=SQLITE_DO
2aa90 4e 45 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  NE ) goto abort_
2aaa0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
2aab0 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
2aac0 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
2aad0 31 3b 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f  1;.  goto check_
2aae0 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d  for_interrupt;.}
2aaf0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  ../* Opcode: Idx
2ab00 49 6e 73 65 72 74 20 50 31 20 50 32 20 50 33 20  Insert P1 P2 P3 
2ab10 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
2ab20 73 3a 20 6b 65 79 3d 72 5b 50 32 5d 0a 2a 2a 0a  s: key=r[P2].**.
2ab30 2a 2a 20 52 65 67 69 73 74 65 72 20 50 32 20 68  ** Register P2 h
2ab40 6f 6c 64 73 20 61 6e 20 53 51 4c 20 69 6e 64 65  olds an SQL inde
2ab50 78 20 6b 65 79 20 6d 61 64 65 20 75 73 69 6e 67  x key made using
2ab60 20 74 68 65 0a 2a 2a 20 4d 61 6b 65 52 65 63 6f   the.** MakeReco
2ab70 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 2e  rd instructions.
2ab80 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 72    This opcode wr
2ab90 69 74 65 73 20 74 68 61 74 20 6b 65 79 0a 2a 2a  ites that key.**
2aba0 20 69 6e 74 6f 20 74 68 65 20 69 6e 64 65 78 20   into the index 
2abb0 50 31 2e 20 20 44 61 74 61 20 66 6f 72 20 74 68  P1.  Data for th
2abc0 65 20 65 6e 74 72 79 20 69 73 20 6e 69 6c 2e 0a  e entry is nil..
2abd0 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e  **.** If P4 is n
2abe0 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74  ot zero, then it
2abf0 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   is the number o
2ac00 66 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20  f values in the 
2ac10 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 6b 65 79 20  unpacked.** key 
2ac20 6f 66 20 72 65 67 28 50 32 29 2e 20 20 49 6e 20  of reg(P2).  In 
2ac30 74 68 61 74 20 63 61 73 65 2c 20 50 33 20 69 73  that case, P3 is
2ac40 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68   the index of th
2ac50 65 20 66 69 72 73 74 20 72 65 67 69 73 74 65 72  e first register
2ac60 0a 2a 2a 20 66 6f 72 20 74 68 65 20 75 6e 70 61  .** for the unpa
2ac70 63 6b 65 64 20 6b 65 79 2e 20 20 54 68 65 20 61  cked key.  The a
2ac80 76 61 69 6c 61 62 69 6c 69 74 79 20 6f 66 20 74  vailability of t
2ac90 68 65 20 75 6e 70 61 63 6b 65 64 20 6b 65 79 20  he unpacked key 
2aca0 63 61 6e 20 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a  can sometimes.**
2acb0 20 62 65 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74   be an optimizat
2acc0 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  ion..**.** If P5
2acd0 20 68 61 73 20 74 68 65 20 4f 50 46 4c 41 47 5f   has the OPFLAG_
2ace0 41 50 50 45 4e 44 20 62 69 74 20 73 65 74 2c 20  APPEND bit set, 
2acf0 74 68 61 74 20 69 73 20 61 20 68 69 6e 74 20 74  that is a hint t
2ad00 6f 20 74 68 65 20 62 2d 74 72 65 65 20 6c 61 79  o the b-tree lay
2ad10 65 72 0a 2a 2a 20 74 68 61 74 20 74 68 69 73 20  er.** that this 
2ad20 69 6e 73 65 72 74 20 69 73 20 6c 69 6b 65 6c 79  insert is likely
2ad30 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64   to be an append
2ad40 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61  ..**.** If P5 ha
2ad50 73 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48  s the OPFLAG_NCH
2ad60 41 4e 47 45 20 62 69 74 20 73 65 74 2c 20 74 68  ANGE bit set, th
2ad70 65 6e 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f  en the change co
2ad80 75 6e 74 65 72 20 69 73 0a 2a 2a 20 69 6e 63 72  unter is.** incr
2ad90 65 6d 65 6e 74 65 64 20 62 79 20 74 68 69 73 20  emented by this 
2ada0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 49 66  instruction.  If
2adb0 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41   the OPFLAG_NCHA
2adc0 4e 47 45 20 62 69 74 20 69 73 20 63 6c 65 61 72  NGE bit is clear
2add0 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 63 68  ,.** then the ch
2ade0 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73 20  ange counter is 
2adf0 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2a 0a 2a 2a  unchanged..**.**
2ae00 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 55   If the OPFLAG_U
2ae10 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61  SESEEKRESULT fla
2ae20 67 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20  g of P5 is set, 
2ae30 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  the implementati
2ae40 6f 6e 20 6d 69 67 68 74 0a 2a 2a 20 72 75 6e 20  on might.** run 
2ae50 66 61 73 74 65 72 20 62 79 20 61 76 6f 69 64 69  faster by avoidi
2ae60 6e 67 20 61 6e 20 75 6e 6e 65 63 65 73 73 61 72  ng an unnecessar
2ae70 79 20 73 65 65 6b 20 6f 6e 20 63 75 72 73 6f 72  y seek on cursor
2ae80 20 50 31 2e 20 20 48 6f 77 65 76 65 72 2c 0a 2a   P1.  However,.*
2ae90 2a 20 74 68 65 20 4f 50 46 4c 41 47 5f 55 53 45  * the OPFLAG_USE
2aea0 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20  SEEKRESULT flag 
2aeb0 6d 75 73 74 20 6f 6e 6c 79 20 62 65 20 73 65 74  must only be set
2aec0 20 69 66 20 74 68 65 72 65 20 68 61 76 65 20 62   if there have b
2aed0 65 65 6e 20 6e 6f 20 70 72 69 6f 72 0a 2a 2a 20  een no prior.** 
2aee0 73 65 65 6b 73 20 6f 6e 20 74 68 65 20 63 75 72  seeks on the cur
2aef0 73 6f 72 20 6f 72 20 69 66 20 74 68 65 20 6d 6f  sor or if the mo
2af00 73 74 20 72 65 63 65 6e 74 20 73 65 65 6b 20 75  st recent seek u
2af10 73 65 64 20 61 20 6b 65 79 20 65 71 75 69 76 61  sed a key equiva
2af20 6c 65 6e 74 0a 2a 2a 20 74 6f 20 50 32 2e 20 0a  lent.** to P2. .
2af30 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
2af40 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b  uction only work
2af50 73 20 66 6f 72 20 69 6e 64 69 63 65 73 2e 20 20  s for indices.  
2af60 54 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69  The equivalent i
2af70 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f  nstruction.** fo
2af80 72 20 74 61 62 6c 65 73 20 69 73 20 4f 50 5f 49  r tables is OP_I
2af90 6e 73 65 72 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  nsert..*/./* Opc
2afa0 6f 64 65 3a 20 53 6f 72 74 65 72 49 6e 73 65 72  ode: SorterInser
2afb0 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
2afc0 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
2afd0 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73  [P2].**.** Regis
2afe0 74 65 72 20 50 32 20 68 6f 6c 64 73 20 61 6e 20  ter P2 holds an 
2aff0 53 51 4c 20 69 6e 64 65 78 20 6b 65 79 20 6d 61  SQL index key ma
2b000 64 65 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20  de using the.** 
2b010 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74 72  MakeRecord instr
2b020 75 63 74 69 6f 6e 73 2e 20 20 54 68 69 73 20 6f  uctions.  This o
2b030 70 63 6f 64 65 20 77 72 69 74 65 73 20 74 68 61  pcode writes tha
2b040 74 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f 20 74 68  t key.** into th
2b050 65 20 73 6f 72 74 65 72 20 50 31 2e 20 20 44 61  e sorter P1.  Da
2b060 74 61 20 66 6f 72 20 74 68 65 20 65 6e 74 72 79  ta for the entry
2b070 20 69 73 20 6e 69 6c 2e 0a 2a 2f 0a 63 61 73 65   is nil..*/.case
2b080 20 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74   OP_SorterInsert
2b090 3a 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a  :       /* in2 *
2b0a0 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 49 6e 73  /.case OP_IdxIns
2b0b0 65 72 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ert: {        /*
2b0c0 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43 75   in2 */.  VdbeCu
2b0d0 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 72 65  rsor *pC;.  Btre
2b0e0 65 50 61 79 6c 6f 61 64 20 78 3b 0a 0a 20 20 61  ePayload x;..  a
2b0f0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
2b100 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
2b110 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
2b120 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
2b130 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2b140 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
2b150 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 3d 3d  ( isSorter(pC)==
2b160 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50  (pOp->opcode==OP
2b170 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 29 20 29  _SorterInsert) )
2b180 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
2b190 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73  [pOp->p2];.  ass
2b1a0 65 72 74 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73  ert( pIn2->flags
2b1b0 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20   & MEM_Blob );. 
2b1c0 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f   if( pOp->p5 & O
2b1d0 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20  PFLAG_NCHANGE ) 
2b1e0 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20  p->nChange++;.  
2b1f0 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
2b200 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
2b210 52 45 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  REE || pOp->opco
2b220 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73  de==OP_SorterIns
2b230 65 72 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ert );.  assert(
2b240 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20   pC->isTable==0 
2b250 29 3b 0a 20 20 72 63 20 3d 20 45 78 70 61 6e 64  );.  rc = Expand
2b260 42 6c 6f 62 28 70 49 6e 32 29 3b 0a 20 20 69 66  Blob(pIn2);.  if
2b270 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
2b280 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
2b290 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
2b2a0 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65  e==OP_SorterInse
2b2b0 72 74 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  rt ){.    rc = s
2b2c0 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72  qlite3VdbeSorter
2b2d0 57 72 69 74 65 28 70 43 2c 20 70 49 6e 32 29 3b  Write(pC, pIn2);
2b2e0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 78 2e  .  }else{.    x.
2b2f0 6e 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b 0a  nKey = pIn2->n;.
2b300 20 20 20 20 78 2e 70 4b 65 79 20 3d 20 70 49 6e      x.pKey = pIn
2b310 32 2d 3e 7a 3b 0a 20 20 20 20 78 2e 61 4d 65 6d  2->z;.    x.aMem
2b320 20 3d 20 61 4d 65 6d 20 2b 20 70 4f 70 2d 3e 70   = aMem + pOp->p
2b330 33 3b 0a 20 20 20 20 78 2e 6e 4d 65 6d 20 3d 20  3;.    x.nMem = 
2b340 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a  (u16)pOp->p4.i;.
2b350 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
2b360 42 74 72 65 65 49 6e 73 65 72 74 28 70 43 2d 3e  BtreeInsert(pC->
2b370 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 78 2c 0a  uc.pCursor, &x,.
2b380 20 20 20 20 20 20 20 20 20 28 70 4f 70 2d 3e 70           (pOp->p
2b390 35 20 26 20 28 4f 50 46 4c 41 47 5f 41 50 50 45  5 & (OPFLAG_APPE
2b3a0 4e 44 7c 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f  ND|OPFLAG_SAVEPO
2b3b0 53 49 54 49 4f 4e 29 29 2c 20 0a 20 20 20 20 20  SITION)), .     
2b3c0 20 20 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f     ((pOp->p5 & O
2b3d0 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53  PFLAG_USESEEKRES
2b3e0 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52  ULT) ? pC->seekR
2b3f0 65 73 75 6c 74 20 3a 20 30 29 0a 20 20 20 20 20  esult : 0).     
2b400 20 20 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74     );.    assert
2b410 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
2b420 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 70  veto==0 );.    p
2b430 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
2b440 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
2b450 7d 0a 20 20 69 66 28 20 72 63 29 20 67 6f 74 6f  }.  if( rc) goto
2b460 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2b470 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ror;.  break;.}.
2b480 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 44  ./* Opcode: IdxD
2b490 65 6c 65 74 65 20 50 31 20 50 32 20 50 33 20 2a  elete P1 P2 P3 *
2b4a0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
2b4b0 6b 65 79 3d 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a  key=r[P2@P3].**.
2b4c0 2a 2a 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ** The content o
2b4d0 66 20 50 33 20 72 65 67 69 73 74 65 72 73 20 73  f P3 registers s
2b4e0 74 61 72 74 69 6e 67 20 61 74 20 72 65 67 69 73  tarting at regis
2b4f0 74 65 72 20 50 32 20 66 6f 72 6d 0a 2a 2a 20 61  ter P2 form.** a
2b500 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
2b510 20 6b 65 79 2e 20 54 68 69 73 20 6f 70 63 6f 64   key. This opcod
2b520 65 20 72 65 6d 6f 76 65 73 20 74 68 61 74 20 65  e removes that e
2b530 6e 74 72 79 20 66 72 6f 6d 20 74 68 65 20 0a 2a  ntry from the .*
2b540 2a 20 69 6e 64 65 78 20 6f 70 65 6e 65 64 20 62  * index opened b
2b550 79 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a  y cursor P1..*/.
2b560 63 61 73 65 20 4f 50 5f 49 64 78 44 65 6c 65 74  case OP_IdxDelet
2b570 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  e: {.  VdbeCurso
2b580 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f  r *pC;.  BtCurso
2b590 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20  r *pCrsr;.  int 
2b5a0 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52  res;.  UnpackedR
2b5b0 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73 65  ecord r;..  asse
2b5c0 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b  rt( pOp->p3>0 );
2b5d0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2b5e0 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b  p2>0 && pOp->p2+
2b5f0 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
2b600 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
2b610 29 2b 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28  )+1 );.  assert(
2b620 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
2b630 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
2b640 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
2b650 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
2b660 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
2b670 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
2b680 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
2b690 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 70 43 72  E_BTREE );.  pCr
2b6a0 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72  sr = pC->uc.pCur
2b6b0 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70  sor;.  assert( p
2b6c0 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 61 73 73  Crsr!=0 );.  ass
2b6d0 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20  ert( pOp->p5==0 
2b6e0 29 3b 0a 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20  );.  r.pKeyInfo 
2b6f0 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a  = pC->pKeyInfo;.
2b700 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31    r.nField = (u1
2b710 36 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 72 2e 64  6)pOp->p3;.  r.d
2b720 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20  efault_rc = 0;. 
2b730 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b   r.aMem = &aMem[
2b740 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 72 63 20 3d  pOp->p2];.  rc =
2b750 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
2b760 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73  etoUnpacked(pCrs
2b770 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65  r, &r, 0, 0, &re
2b780 73 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  s);.  if( rc ) g
2b790 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
2b7a0 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 72 65  _error;.  if( re
2b7b0 73 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d  s==0 ){.    rc =
2b7c0 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 65 6c   sqlite3BtreeDel
2b7d0 65 74 65 28 70 43 72 73 72 2c 20 42 54 52 45 45  ete(pCrsr, BTREE
2b7e0 5f 41 55 58 44 45 4c 45 54 45 29 3b 0a 20 20 20  _AUXDELETE);.   
2b7f0 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
2b800 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
2b810 72 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28  r;.  }.  assert(
2b820 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
2b830 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 70 43 2d 3e  eto==0 );.  pC->
2b840 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
2b850 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 2d  CHE_STALE;.  pC-
2b860 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 30 3b  >seekResult = 0;
2b870 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2b880 4f 70 63 6f 64 65 3a 20 44 65 66 65 72 72 65 64  Opcode: Deferred
2b890 53 65 65 6b 20 50 31 20 2a 20 50 33 20 50 34 20  Seek P1 * P3 P4 
2b8a0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 4d  *.** Synopsis: M
2b8b0 6f 76 65 20 50 33 20 74 6f 20 50 31 2e 72 6f 77  ove P3 to P1.row
2b8c0 69 64 20 69 66 20 6e 65 65 64 65 64 0a 2a 2a 0a  id if needed.**.
2b8d0 2a 2a 20 50 31 20 69 73 20 61 6e 20 6f 70 65 6e  ** P1 is an open
2b8e0 20 69 6e 64 65 78 20 63 75 72 73 6f 72 20 61 6e   index cursor an
2b8f0 64 20 50 33 20 69 73 20 61 20 63 75 72 73 6f 72  d P3 is a cursor
2b900 20 6f 6e 20 74 68 65 20 63 6f 72 72 65 73 70 6f   on the correspo
2b910 6e 64 69 6e 67 0a 2a 2a 20 74 61 62 6c 65 2e 20  nding.** table. 
2b920 20 54 68 69 73 20 6f 70 63 6f 64 65 20 64 6f 65   This opcode doe
2b930 73 20 61 20 64 65 66 65 72 72 65 64 20 73 65 65  s a deferred see
2b940 6b 20 6f 66 20 74 68 65 20 50 33 20 74 61 62 6c  k of the P3 tabl
2b950 65 20 63 75 72 73 6f 72 0a 2a 2a 20 74 6f 20 74  e cursor.** to t
2b960 68 65 20 72 6f 77 20 74 68 61 74 20 63 6f 72 72  he row that corr
2b970 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 63  esponds to the c
2b980 75 72 72 65 6e 74 20 72 6f 77 20 6f 66 20 50 31  urrent row of P1
2b990 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20  ..**.** This is 
2b9a0 61 20 64 65 66 65 72 72 65 64 20 73 65 65 6b 2e  a deferred seek.
2b9b0 20 20 4e 6f 74 68 69 6e 67 20 61 63 74 75 61 6c    Nothing actual
2b9c0 6c 79 20 68 61 70 70 65 6e 73 20 75 6e 74 69 6c  ly happens until
2b9d0 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 20 69  .** the cursor i
2b9e0 73 20 75 73 65 64 20 74 6f 20 72 65 61 64 20 61  s used to read a
2b9f0 20 72 65 63 6f 72 64 2e 20 20 54 68 61 74 20 77   record.  That w
2ba00 61 79 2c 20 69 66 20 6e 6f 20 72 65 61 64 73 0a  ay, if no reads.
2ba10 2a 2a 20 6f 63 63 75 72 2c 20 6e 6f 20 75 6e 6e  ** occur, no unn
2ba20 65 63 65 73 73 61 72 79 20 49 2f 4f 20 68 61 70  ecessary I/O hap
2ba30 70 65 6e 73 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 6d  pens..**.** P4 m
2ba40 61 79 20 62 65 20 61 6e 20 61 72 72 61 79 20 6f  ay be an array o
2ba50 66 20 69 6e 74 65 67 65 72 73 20 28 74 79 70 65  f integers (type
2ba60 20 50 34 5f 49 4e 54 41 52 52 41 59 29 20 63 6f   P4_INTARRAY) co
2ba70 6e 74 61 69 6e 69 6e 67 0a 2a 2a 20 6f 6e 65 20  ntaining.** one 
2ba80 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20 63  entry for each c
2ba90 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 50 33 20  olumn in the P3 
2baa0 74 61 62 6c 65 2e 20 20 49 66 20 61 72 72 61 79  table.  If array
2bab0 20 65 6e 74 72 79 20 61 28 69 29 0a 2a 2a 20 69   entry a(i).** i
2bac0 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
2bad0 20 72 65 61 64 69 6e 67 20 63 6f 6c 75 6d 6e 20   reading column 
2bae0 61 28 69 29 2d 31 20 66 72 6f 6d 20 63 75 72 73  a(i)-1 from curs
2baf0 6f 72 20 50 33 20 69 73 20 0a 2a 2a 20 65 71 75  or P3 is .** equ
2bb00 69 76 61 6c 65 6e 74 20 74 6f 20 70 65 72 66 6f  ivalent to perfo
2bb10 72 6d 69 6e 67 20 74 68 65 20 64 65 66 65 72 72  rming the deferr
2bb20 65 64 20 73 65 65 6b 20 61 6e 64 20 74 68 65 6e  ed seek and then
2bb30 20 72 65 61 64 69 6e 67 20 63 6f 6c 75 6d 6e 20   reading column 
2bb40 69 20 0a 2a 2a 20 66 72 6f 6d 20 50 31 2e 20 20  i .** from P1.  
2bb50 54 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  This information
2bb60 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 50 33   is stored in P3
2bb70 20 61 6e 64 20 75 73 65 64 20 74 6f 20 72 65 64   and used to red
2bb80 69 72 65 63 74 0a 2a 2a 20 72 65 61 64 73 20 61  irect.** reads a
2bb90 67 61 69 6e 73 74 20 50 33 20 6f 76 65 72 20 74  gainst P3 over t
2bba0 6f 20 50 31 2c 20 74 68 75 73 20 70 6f 73 73 69  o P1, thus possi
2bbb0 62 6c 79 20 61 76 6f 69 64 69 6e 67 20 74 68 65  bly avoiding the
2bbc0 20 6e 65 65 64 20 74 6f 0a 2a 2a 20 73 65 65 6b   need to.** seek
2bbd0 20 61 6e 64 20 72 65 61 64 20 63 75 72 73 6f 72   and read cursor
2bbe0 20 50 33 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64   P3..*/./* Opcod
2bbf0 65 3a 20 49 64 78 52 6f 77 69 64 20 50 31 20 50  e: IdxRowid P1 P
2bc00 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
2bc10 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64  sis: r[P2]=rowid
2bc20 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74  .**.** Write int
2bc30 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  o register P2 an
2bc40 20 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69   integer which i
2bc50 73 20 74 68 65 20 6c 61 73 74 20 65 6e 74 72 79  s the last entry
2bc60 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 61   in the record a
2bc70 74 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20  t.** the end of 
2bc80 74 68 65 20 69 6e 64 65 78 20 6b 65 79 20 70 6f  the index key po
2bc90 69 6e 74 65 64 20 74 6f 20 62 79 20 63 75 72 73  inted to by curs
2bca0 6f 72 20 50 31 2e 20 20 54 68 69 73 20 69 6e 74  or P1.  This int
2bcb0 65 67 65 72 20 73 68 6f 75 6c 64 20 62 65 0a 2a  eger should be.*
2bcc0 2a 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74  * the rowid of t
2bcd0 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74  he table entry t
2bce0 6f 20 77 68 69 63 68 20 74 68 69 73 20 69 6e 64  o which this ind
2bcf0 65 78 20 65 6e 74 72 79 20 70 6f 69 6e 74 73 2e  ex entry points.
2bd00 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
2bd10 20 52 6f 77 69 64 2c 20 4d 61 6b 65 52 65 63 6f   Rowid, MakeReco
2bd20 72 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  rd..*/.case OP_D
2bd30 65 66 65 72 72 65 64 53 65 65 6b 3a 0a 63 61 73  eferredSeek:.cas
2bd40 65 20 4f 50 5f 49 64 78 52 6f 77 69 64 3a 20 7b  e OP_IdxRowid: {
2bd50 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
2bd60 74 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  t2 */.  VdbeCurs
2bd70 6f 72 20 2a 70 43 3b 20 20 20 20 20 20 20 20 20  or *pC;         
2bd80 20 20 20 20 2f 2a 20 54 68 65 20 50 31 20 69 6e      /* The P1 in
2bd90 64 65 78 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20  dex cursor */.  
2bda0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 54 61 62  VdbeCursor *pTab
2bdb0 43 75 72 3b 20 20 20 20 20 20 20 20 2f 2a 20 54  Cur;        /* T
2bdc0 68 65 20 50 32 20 74 61 62 6c 65 20 63 75 72 73  he P2 table curs
2bdd0 6f 72 20 28 4f 50 5f 44 65 66 65 72 72 65 64 53  or (OP_DeferredS
2bde0 65 65 6b 20 6f 6e 6c 79 29 20 2a 2f 0a 20 20 69  eek only) */.  i
2bdf0 36 34 20 72 6f 77 69 64 3b 20 20 20 20 20 20 20  64 rowid;       
2be00 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f             /* Ro
2be10 77 69 64 20 74 68 61 74 20 50 31 20 63 75 72 72  wid that P1 curr
2be20 65 6e 74 20 70 6f 69 6e 74 73 20 74 6f 20 2a 2f  ent points to */
2be30 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
2be40 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
2be50 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
2be60 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
2be70 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
2be80 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
2be90 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
2bea0 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
2beb0 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  EE );.  assert( 
2bec0 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d  pC->uc.pCursor!=
2bed0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
2bee0 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b  C->isTable==0 );
2bef0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64  .  assert( pC->d
2bf00 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
2bf10 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 21 70   );.  assert( !p
2bf20 43 2d 3e 6e 75 6c 6c 52 6f 77 20 7c 7c 20 70 4f  C->nullRow || pO
2bf30 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  p->opcode==OP_Id
2bf40 78 52 6f 77 69 64 20 29 3b 0a 0a 20 20 2f 2a 20  xRowid );..  /* 
2bf50 54 68 65 20 49 64 78 52 6f 77 69 64 20 61 6e 64  The IdxRowid and
2bf60 20 53 65 65 6b 20 6f 70 63 6f 64 65 73 20 61 72   Seek opcodes ar
2bf70 65 20 63 6f 6d 62 69 6e 65 64 20 62 65 63 61 75  e combined becau
2bf80 73 65 20 6f 66 20 74 68 65 20 63 6f 6d 6d 6f 6e  se of the common
2bf90 61 6c 69 74 79 0a 20 20 2a 2a 20 6f 66 20 73 71  ality.  ** of sq
2bfa0 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 52  lite3VdbeCursorR
2bfb0 65 73 74 6f 72 65 28 29 20 61 6e 64 20 73 71 6c  estore() and sql
2bfc0 69 74 65 33 56 64 62 65 49 64 78 52 6f 77 69 64  ite3VdbeIdxRowid
2bfd0 28 29 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71  (). */.  rc = sq
2bfe0 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 52  lite3VdbeCursorR
2bff0 65 73 74 6f 72 65 28 70 43 29 3b 0a 0a 20 20 2f  estore(pC);..  /
2c000 2a 20 73 71 6c 69 74 65 33 56 62 65 43 75 72 73  * sqlite3VbeCurs
2c010 6f 72 52 65 73 74 6f 72 65 28 29 20 63 61 6e 20  orRestore() can 
2c020 6f 6e 6c 79 20 66 61 69 6c 20 69 66 20 74 68 65  only fail if the
2c030 20 72 65 63 6f 72 64 20 68 61 73 20 62 65 65 6e   record has been
2c040 20 64 65 6c 65 74 65 64 0a 20 20 2a 2a 20 6f 75   deleted.  ** ou
2c050 74 20 66 72 6f 6d 20 75 6e 64 65 72 20 74 68 65  t from under the
2c060 20 63 75 72 73 6f 72 2e 20 20 54 68 61 74 20 77   cursor.  That w
2c070 69 6c 6c 20 6e 65 76 65 72 20 68 61 70 70 65 6e  ill never happen
2c080 73 20 66 6f 72 20 61 6e 20 49 64 78 52 6f 77 69  s for an IdxRowi
2c090 64 0a 20 20 2a 2a 20 6f 72 20 53 65 65 6b 20 6f  d.  ** or Seek o
2c0a0 70 63 6f 64 65 20 2a 2f 0a 20 20 69 66 28 20 4e  pcode */.  if( N
2c0b0 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54 45 5f  EVER(rc!=SQLITE_
2c0c0 4f 4b 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  OK) ) goto abort
2c0d0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a  _due_to_error;..
2c0e0 20 20 69 66 28 20 21 70 43 2d 3e 6e 75 6c 6c 52    if( !pC->nullR
2c0f0 6f 77 20 29 7b 0a 20 20 20 20 72 6f 77 69 64 20  ow ){.    rowid 
2c100 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65  = 0;  /* Not nee
2c110 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20  ded.  Only used 
2c120 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72  to silence a war
2c130 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 72 63 20  ning. */.    rc 
2c140 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 64 78  = sqlite3VdbeIdx
2c150 52 6f 77 69 64 28 64 62 2c 20 70 43 2d 3e 75 63  Rowid(db, pC->uc
2c160 2e 70 43 75 72 73 6f 72 2c 20 26 72 6f 77 69 64  .pCursor, &rowid
2c170 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53  );.    if( rc!=S
2c180 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
2c190 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
2c1a0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d  _to_error;.    }
2c1b0 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  .    if( pOp->op
2c1c0 63 6f 64 65 3d 3d 4f 50 5f 44 65 66 65 72 72 65  code==OP_Deferre
2c1d0 64 53 65 65 6b 20 29 7b 0a 20 20 20 20 20 20 61  dSeek ){.      a
2c1e0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d  ssert( pOp->p3>=
2c1f0 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 70 2d 3e  0 && pOp->p3<p->
2c200 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 20 20 20  nCursor );.     
2c210 20 70 54 61 62 43 75 72 20 3d 20 70 2d 3e 61 70   pTabCur = p->ap
2c220 43 73 72 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Csr[pOp->p3];.  
2c230 20 20 20 20 61 73 73 65 72 74 28 20 70 54 61 62      assert( pTab
2c240 43 75 72 21 3d 30 20 29 3b 0a 20 20 20 20 20 20  Cur!=0 );.      
2c250 61 73 73 65 72 74 28 20 70 54 61 62 43 75 72 2d  assert( pTabCur-
2c260 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
2c270 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 20 20  PE_BTREE );.    
2c280 20 20 61 73 73 65 72 74 28 20 70 54 61 62 43 75    assert( pTabCu
2c290 72 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30  r->uc.pCursor!=0
2c2a0 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
2c2b0 28 20 70 54 61 62 43 75 72 2d 3e 69 73 54 61 62  ( pTabCur->isTab
2c2c0 6c 65 20 29 3b 0a 20 20 20 20 20 20 70 54 61 62  le );.      pTab
2c2d0 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30  Cur->nullRow = 0
2c2e0 3b 0a 20 20 20 20 20 20 70 54 61 62 43 75 72 2d  ;.      pTabCur-
2c2f0 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20  >movetoTarget = 
2c300 72 6f 77 69 64 3b 0a 20 20 20 20 20 20 70 54 61  rowid;.      pTa
2c310 62 43 75 72 2d 3e 64 65 66 65 72 72 65 64 4d 6f  bCur->deferredMo
2c320 76 65 74 6f 20 3d 20 31 3b 0a 20 20 20 20 20 20  veto = 1;.      
2c330 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
2c340 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52 52 41 59  ype==P4_INTARRAY
2c350 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 61 69 3d 3d   || pOp->p4.ai==
2c360 30 20 29 3b 0a 20 20 20 20 20 20 70 54 61 62 43  0 );.      pTabC
2c370 75 72 2d 3e 61 41 6c 74 4d 61 70 20 3d 20 70 4f  ur->aAltMap = pO
2c380 70 2d 3e 70 34 2e 61 69 3b 0a 20 20 20 20 20 20  p->p4.ai;.      
2c390 70 54 61 62 43 75 72 2d 3e 70 41 6c 74 43 75 72  pTabCur->pAltCur
2c3a0 73 6f 72 20 3d 20 70 43 3b 0a 20 20 20 20 7d 65  sor = pC;.    }e
2c3b0 6c 73 65 7b 0a 20 20 20 20 20 20 70 4f 75 74 20  lse{.      pOut 
2c3c0 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
2c3d0 28 70 2c 20 70 4f 70 29 3b 0a 20 20 20 20 20 20  (p, pOp);.      
2c3e0 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 6f 77 69  pOut->u.i = rowi
2c3f0 64 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  d;.    }.  }else
2c400 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
2c410 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  p->opcode==OP_Id
2c420 78 52 6f 77 69 64 20 29 3b 0a 20 20 20 20 73 71  xRowid );.    sq
2c430 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
2c440 75 6c 6c 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  ull(&aMem[pOp->p
2c450 32 5d 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  2]);.  }.  break
2c460 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2c470 49 64 78 47 45 20 50 31 20 50 32 20 50 33 20 50  IdxGE P1 P2 P3 P
2c480 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
2c490 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
2c4a0 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69  *.** The P4 regi
2c4b0 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69  ster values begi
2c4c0 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f  nning with P3 fo
2c4d0 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  rm an unpacked i
2c4e0 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61  ndex .** key tha
2c4f0 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d  t omits the PRIM
2c500 41 52 59 20 4b 45 59 2e 20 20 43 6f 6d 70 61 72  ARY KEY.  Compar
2c510 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65  e this key value
2c520 20 61 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64   against the ind
2c530 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69  ex .** that P1 i
2c540 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  s currently poin
2c550 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e  ting to, ignorin
2c560 67 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  g the PRIMARY KE
2c570 59 20 6f 72 20 52 4f 57 49 44 20 0a 2a 2a 20 66  Y or ROWID .** f
2c580 69 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64  ields at the end
2c590 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
2c5a0 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73  1 index entry is
2c5b0 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72   greater than or
2c5c0 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65   equal to the ke
2c5d0 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20  y value.** then 
2c5e0 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74 68  jump to P2.  Oth
2c5f0 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f  erwise fall thro
2c600 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
2c610 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
2c620 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 47 54  /* Opcode: IdxGT
2c630 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
2c640 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
2c650 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
2c660 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20  The P4 register 
2c670 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67  values beginning
2c680 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e   with P3 form an
2c690 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
2c6a0 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69  .** key that omi
2c6b0 74 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  ts the PRIMARY K
2c6c0 45 59 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69  EY.  Compare thi
2c6d0 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69  s key value agai
2c6e0 6e 73 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a  nst the index .*
2c6f0 2a 20 74 68 61 74 20 50 31 20 69 73 20 63 75 72  * that P1 is cur
2c700 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20  rently pointing 
2c710 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65  to, ignoring the
2c720 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20   PRIMARY KEY or 
2c730 52 4f 57 49 44 20 0a 2a 2a 20 66 69 65 6c 64 73  ROWID .** fields
2c740 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2a 0a   at the end..**.
2c750 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e 64  ** If the P1 ind
2c760 65 78 20 65 6e 74 72 79 20 69 73 20 67 72 65 61  ex entry is grea
2c770 74 65 72 20 74 68 61 6e 20 74 68 65 20 6b 65 79  ter than the key
2c780 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a   value.** then j
2c790 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74 68 65  ump to P2.  Othe
2c7a0 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75  rwise fall throu
2c7b0 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
2c7c0 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f  nstruction..*/./
2c7d0 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c 54 20  * Opcode: IdxLT 
2c7e0 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
2c7f0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
2c800 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54  r[P3@P4].**.** T
2c810 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76  he P4 register v
2c820 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20  alues beginning 
2c830 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20  with P3 form an 
2c840 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a  unpacked index .
2c850 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74  ** key that omit
2c860 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  s the PRIMARY KE
2c870 59 20 6f 72 20 52 4f 57 49 44 2e 20 20 43 6f 6d  Y or ROWID.  Com
2c880 70 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61  pare this key va
2c890 6c 75 65 20 61 67 61 69 6e 73 74 0a 2a 2a 20 74  lue against.** t
2c8a0 68 65 20 69 6e 64 65 78 20 74 68 61 74 20 50 31  he index that P1
2c8b0 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f   is currently po
2c8c0 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72  inting to, ignor
2c8d0 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59 20  ing the PRIMARY 
2c8e0 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f 57 49 44 20  KEY or.** ROWID 
2c8f0 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e  on the P1 index.
2c900 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31  .**.** If the P1
2c910 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20   index entry is 
2c920 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65  less than the ke
2c930 79 20 76 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d  y value then jum
2c940 70 20 74 6f 20 50 32 2e 0a 2a 2a 20 4f 74 68 65  p to P2..** Othe
2c950 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75  rwise fall throu
2c960 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
2c970 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f  nstruction..*/./
2c980 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c 45 20  * Opcode: IdxLE 
2c990 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
2c9a0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
2c9b0 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54  r[P3@P4].**.** T
2c9c0 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76  he P4 register v
2c9d0 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20  alues beginning 
2c9e0 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20  with P3 form an 
2c9f0 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a  unpacked index .
2ca00 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74  ** key that omit
2ca10 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  s the PRIMARY KE
2ca20 59 20 6f 72 20 52 4f 57 49 44 2e 20 20 43 6f 6d  Y or ROWID.  Com
2ca30 70 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61  pare this key va
2ca40 6c 75 65 20 61 67 61 69 6e 73 74 0a 2a 2a 20 74  lue against.** t
2ca50 68 65 20 69 6e 64 65 78 20 74 68 61 74 20 50 31  he index that P1
2ca60 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f   is currently po
2ca70 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72  inting to, ignor
2ca80 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59 20  ing the PRIMARY 
2ca90 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f 57 49 44 20  KEY or.** ROWID 
2caa0 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e  on the P1 index.
2cab0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31  .**.** If the P1
2cac0 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20   index entry is 
2cad0 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75  less than or equ
2cae0 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61  al to the key va
2caf0 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70 0a 2a 2a  lue then jump.**
2cb00 20 74 6f 20 50 32 2e 20 4f 74 68 65 72 77 69 73   to P2. Otherwis
2cb10 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  e fall through t
2cb20 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
2cb30 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
2cb40 4f 50 5f 49 64 78 4c 45 3a 20 20 20 20 20 20 20  OP_IdxLE:       
2cb50 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61     /* jump */.ca
2cb60 73 65 20 4f 50 5f 49 64 78 47 54 3a 20 20 20 20  se OP_IdxGT:    
2cb70 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
2cb80 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c 54 3a 20  .case OP_IdxLT: 
2cb90 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
2cba0 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 47   */.case OP_IdxG
2cbb0 45 3a 20 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a  E:  {       /* j
2cbc0 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ump */.  VdbeCur
2cbd0 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72  sor *pC;.  int r
2cbe0 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65  es;.  UnpackedRe
2cbf0 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72  cord r;..  asser
2cc00 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
2cc10 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
2cc20 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
2cc30 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
2cc40 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
2cc50 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
2cc60 2d 3e 69 73 4f 72 64 65 72 65 64 20 29 3b 0a 20  ->isOrdered );. 
2cc70 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
2cc80 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
2cc90 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74  TREE );.  assert
2cca0 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  ( pC->uc.pCursor
2ccb0 21 3d 30 29 3b 0a 20 20 61 73 73 65 72 74 28 20  !=0);.  assert( 
2ccc0 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
2ccd0 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  to==0 );.  asser
2cce0 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c  t( pOp->p5==0 ||
2ccf0 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20   pOp->p5==1 );. 
2cd00 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
2cd10 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
2cd20 3b 0a 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d  ;.  r.pKeyInfo =
2cd30 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20   pC->pKeyInfo;. 
2cd40 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36   r.nField = (u16
2cd50 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 69 66  )pOp->p4.i;.  if
2cd60 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3c 4f 50  ( pOp->opcode<OP
2cd70 5f 49 64 78 4c 54 20 29 7b 0a 20 20 20 20 61 73  _IdxLT ){.    as
2cd80 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
2cd90 65 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c 7c 20 70  e==OP_IdxLE || p
2cda0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
2cdb0 64 78 47 54 20 29 3b 0a 20 20 20 20 72 2e 64 65  dxGT );.    r.de
2cdc0 66 61 75 6c 74 5f 72 63 20 3d 20 2d 31 3b 0a 20  fault_rc = -1;. 
2cdd0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
2cde0 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
2cdf0 3d 4f 50 5f 49 64 78 47 45 20 7c 7c 20 70 4f 70  =OP_IdxGE || pOp
2ce00 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
2ce10 4c 54 20 29 3b 0a 20 20 20 20 72 2e 64 65 66 61  LT );.    r.defa
2ce20 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20 7d 0a  ult_rc = 0;.  }.
2ce30 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d    r.aMem = &aMem
2ce40 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65  [pOp->p3];.#ifde
2ce50 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
2ce60 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d   { int i; for(i=
2ce70 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69  0; i<r.nField; i
2ce80 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49  ++) assert( memI
2ce90 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69  sValid(&r.aMem[i
2cea0 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20  ]) ); }.#endif. 
2ceb0 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f   res = 0;  /* No
2cec0 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20  t needed.  Only 
2ced0 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20  used to silence 
2cee0 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20  a warning. */.  
2cef0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
2cf00 49 64 78 4b 65 79 43 6f 6d 70 61 72 65 28 64 62  IdxKeyCompare(db
2cf10 2c 20 70 43 2c 20 26 72 2c 20 26 72 65 73 29 3b  , pC, &r, &res);
2cf20 0a 20 20 61 73 73 65 72 74 28 20 28 4f 50 5f 49  .  assert( (OP_I
2cf30 64 78 4c 45 26 31 29 3d 3d 28 4f 50 5f 49 64 78  dxLE&1)==(OP_Idx
2cf40 4c 54 26 31 29 20 26 26 20 28 4f 50 5f 49 64 78  LT&1) && (OP_Idx
2cf50 47 45 26 31 29 3d 3d 28 4f 50 5f 49 64 78 47 54  GE&1)==(OP_IdxGT
2cf60 26 31 29 20 29 3b 0a 20 20 69 66 28 20 28 70 4f  &1) );.  if( (pO
2cf70 70 2d 3e 6f 70 63 6f 64 65 26 31 29 3d 3d 28 4f  p->opcode&1)==(O
2cf80 50 5f 49 64 78 4c 54 26 31 29 20 29 7b 0a 20 20  P_IdxLT&1) ){.  
2cf90 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
2cfa0 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45 20  pcode==OP_IdxLE 
2cfb0 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
2cfc0 4f 50 5f 49 64 78 4c 54 20 29 3b 0a 20 20 20 20  OP_IdxLT );.    
2cfd0 72 65 73 20 3d 20 2d 72 65 73 3b 0a 20 20 7d 65  res = -res;.  }e
2cfe0 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
2cff0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
2d000 5f 49 64 78 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f  _IdxGE || pOp->o
2d010 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20  pcode==OP_IdxGT 
2d020 29 3b 0a 20 20 20 20 72 65 73 2b 2b 3b 0a 20 20  );.    res++;.  
2d030 7d 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  }.  VdbeBranchTa
2d040 6b 65 6e 28 72 65 73 3e 30 2c 32 29 3b 0a 20 20  ken(res>0,2);.  
2d050 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
2d060 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
2d070 3b 0a 20 20 69 66 28 20 72 65 73 3e 30 20 29 20  ;.  if( res>0 ) 
2d080 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
2d090 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2d0a0 4f 70 63 6f 64 65 3a 20 44 65 73 74 72 6f 79 20  Opcode: Destroy 
2d0b0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
2d0c0 2a 2a 20 44 65 6c 65 74 65 20 61 6e 20 65 6e 74  ** Delete an ent
2d0d0 69 72 65 20 64 61 74 61 62 61 73 65 20 74 61 62  ire database tab
2d0e0 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73  le or index whos
2d0f0 65 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 74  e root page in t
2d100 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 66  he database.** f
2d110 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79 20  ile is given by 
2d120 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61  P1..**.** The ta
2d130 62 6c 65 20 62 65 69 6e 67 20 64 65 73 74 72 6f  ble being destro
2d140 79 65 64 20 69 73 20 69 6e 20 74 68 65 20 6d 61  yed is in the ma
2d150 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
2d160 20 69 66 20 50 33 3d 3d 30 2e 20 20 49 66 0a 2a   if P3==0.  If.*
2d170 2a 20 50 33 3d 3d 31 20 74 68 65 6e 20 74 68 65  * P3==1 then the
2d180 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c 65   table to be cle
2d190 61 72 20 69 73 20 69 6e 20 74 68 65 20 61 75 78  ar is in the aux
2d1a0 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20  iliary database 
2d1b0 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73 20  file.** that is 
2d1c0 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 61  used to store ta
2d1d0 62 6c 65 73 20 63 72 65 61 74 65 20 75 73 69 6e  bles create usin
2d1e0 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41  g CREATE TEMPORA
2d1f0 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20  RY TABLE..**.** 
2d200 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20 69 73  If AUTOVACUUM is
2d210 20 65 6e 61 62 6c 65 64 20 74 68 65 6e 20 69 74   enabled then it
2d220 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74 68 61   is possible tha
2d230 74 20 61 6e 6f 74 68 65 72 20 72 6f 6f 74 20 70  t another root p
2d240 61 67 65 0a 2a 2a 20 6d 69 67 68 74 20 62 65 20  age.** might be 
2d250 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20 6e  moved into the n
2d260 65 77 6c 79 20 64 65 6c 65 74 65 64 20 72 6f 6f  ewly deleted roo
2d270 74 20 70 61 67 65 20 69 6e 20 6f 72 64 65 72 20  t page in order 
2d280 74 6f 20 6b 65 65 70 20 61 6c 6c 0a 2a 2a 20 72  to keep all.** r
2d290 6f 6f 74 20 70 61 67 65 73 20 63 6f 6e 74 69 67  oot pages contig
2d2a0 75 6f 75 73 20 61 74 20 74 68 65 20 62 65 67 69  uous at the begi
2d2b0 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 64 61 74  nning of the dat
2d2c0 61 62 61 73 65 2e 20 20 54 68 65 20 66 6f 72 6d  abase.  The form
2d2d0 65 72 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20 74  er.** value of t
2d2e0 68 65 20 72 6f 6f 74 20 70 61 67 65 20 74 68 61  he root page tha
2d2f0 74 20 6d 6f 76 65 64 20 2d 20 69 74 73 20 76 61  t moved - its va
2d300 6c 75 65 20 62 65 66 6f 72 65 20 74 68 65 20 6d  lue before the m
2d310 6f 76 65 20 6f 63 63 75 72 72 65 64 20 2d 0a 2a  ove occurred -.*
2d320 2a 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  * is stored in r
2d330 65 67 69 73 74 65 72 20 50 32 2e 20 49 66 20 6e  egister P2. If n
2d340 6f 20 70 61 67 65 20 6d 6f 76 65 6d 65 6e 74 20  o page movement 
2d350 77 61 73 20 72 65 71 75 69 72 65 64 20 28 62 65  was required (be
2d360 63 61 75 73 65 20 74 68 65 0a 2a 2a 20 74 61 62  cause the.** tab
2d370 6c 65 20 62 65 69 6e 67 20 64 72 6f 70 70 65 64  le being dropped
2d380 20 77 61 73 20 61 6c 72 65 61 64 79 20 74 68 65   was already the
2d390 20 6c 61 73 74 20 6f 6e 65 20 69 6e 20 74 68 65   last one in the
2d3a0 20 64 61 74 61 62 61 73 65 29 20 74 68 65 6e 20   database) then 
2d3b0 61 20 0a 2a 2a 20 7a 65 72 6f 20 69 73 20 73 74  a .** zero is st
2d3c0 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
2d3d0 20 50 32 2e 20 20 49 66 20 41 55 54 4f 56 41 43   P2.  If AUTOVAC
2d3e0 55 55 4d 20 69 73 20 64 69 73 61 62 6c 65 64 20  UUM is disabled 
2d3f0 74 68 65 6e 20 61 20 7a 65 72 6f 20 0a 2a 2a 20  then a zero .** 
2d400 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
2d410 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
2d420 54 68 69 73 20 6f 70 63 6f 64 65 20 74 68 72 6f  This opcode thro
2d430 77 73 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74  ws an error if t
2d440 68 65 72 65 20 61 72 65 20 61 6e 79 20 61 63 74  here are any act
2d450 69 76 65 20 72 65 61 64 65 72 20 56 4d 73 20 77  ive reader VMs w
2d460 68 65 6e 0a 2a 2a 20 69 74 20 69 73 20 69 6e 76  hen.** it is inv
2d470 6f 6b 65 64 2e 20 54 68 69 73 20 69 73 20 64 6f  oked. This is do
2d480 6e 65 20 74 6f 20 61 76 6f 69 64 20 74 68 65 20  ne to avoid the 
2d490 64 69 66 66 69 63 75 6c 74 79 20 61 73 73 6f 63  difficulty assoc
2d4a0 69 61 74 65 64 20 77 69 74 68 20 0a 2a 2a 20 75  iated with .** u
2d4b0 70 64 61 74 69 6e 67 20 65 78 69 73 74 69 6e 67  pdating existing
2d4c0 20 63 75 72 73 6f 72 73 20 77 68 65 6e 20 61 20   cursors when a 
2d4d0 72 6f 6f 74 20 70 61 67 65 20 69 73 20 6d 6f 76  root page is mov
2d4e0 65 64 20 69 6e 20 61 6e 20 41 55 54 4f 56 41 43  ed in an AUTOVAC
2d4f0 55 55 4d 20 0a 2a 2a 20 64 61 74 61 62 61 73 65  UUM .** database
2d500 2e 20 54 68 69 73 20 65 72 72 6f 72 20 69 73 20  . This error is 
2d510 74 68 72 6f 77 6e 20 65 76 65 6e 20 69 66 20 74  thrown even if t
2d520 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20 6e  he database is n
2d530 6f 74 20 61 6e 20 41 55 54 4f 56 41 43 55 55 4d  ot an AUTOVACUUM
2d540 20 0a 2a 2a 20 64 62 20 69 6e 20 6f 72 64 65 72   .** db in order
2d550 20 74 6f 20 61 76 6f 69 64 20 69 6e 74 72 6f 64   to avoid introd
2d560 75 63 69 6e 67 20 61 6e 20 69 6e 63 6f 6d 70 61  ucing an incompa
2d570 74 69 62 69 6c 69 74 79 20 62 65 74 77 65 65 6e  tibility between
2d580 20 61 75 74 6f 76 61 63 75 75 6d 20 0a 2a 2a 20   autovacuum .** 
2d590 61 6e 64 20 6e 6f 6e 2d 61 75 74 6f 76 61 63 75  and non-autovacu
2d5a0 75 6d 20 6d 6f 64 65 73 2e 0a 2a 2a 0a 2a 2a 20  um modes..**.** 
2d5b0 53 65 65 20 61 6c 73 6f 3a 20 43 6c 65 61 72 0a  See also: Clear.
2d5c0 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 73 74 72  */.case OP_Destr
2d5d0 6f 79 3a 20 7b 20 20 20 20 20 2f 2a 20 6f 75 74  oy: {     /* out
2d5e0 32 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 6f 76 65  2 */.  int iMove
2d5f0 64 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 0a 20  d;.  int iDb;.. 
2d600 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
2d610 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 73 73  Only==0 );.  ass
2d620 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 31 20 29  ert( pOp->p1>1 )
2d630 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ;.  pOut = out2P
2d640 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
2d650 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  );.  pOut->flags
2d660 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 69   = MEM_Null;.  i
2d670 66 28 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64  f( db->nVdbeRead
2d680 20 3e 20 64 62 2d 3e 6e 56 44 65 73 74 72 6f 79   > db->nVDestroy
2d690 2b 31 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  +1 ){.    rc = S
2d6a0 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20  QLITE_LOCKED;.  
2d6b0 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e    p->errorAction
2d6c0 20 3d 20 4f 45 5f 41 62 6f 72 74 3b 0a 20 20 20   = OE_Abort;.   
2d6d0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
2d6e0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 65 6c 73  to_error;.  }els
2d6f0 65 7b 0a 20 20 20 20 69 44 62 20 3d 20 70 4f 70  e{.    iDb = pOp
2d700 2d 3e 70 33 3b 0a 20 20 20 20 61 73 73 65 72 74  ->p3;.    assert
2d710 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e  ( DbMaskTest(p->
2d720 62 74 72 65 65 4d 61 73 6b 2c 20 69 44 62 29 20  btreeMask, iDb) 
2d730 29 3b 0a 20 20 20 20 69 4d 6f 76 65 64 20 3d 20  );.    iMoved = 
2d740 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65  0;  /* Not neede
2d750 64 2e 20 20 4f 6e 6c 79 20 74 6f 20 73 69 6c 65  d.  Only to sile
2d760 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a  nce a warning. *
2d770 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  /.    rc = sqlit
2d780 65 33 42 74 72 65 65 44 72 6f 70 54 61 62 6c 65  e3BtreeDropTable
2d790 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42  (db->aDb[iDb].pB
2d7a0 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 26 69 4d 6f  t, pOp->p1, &iMo
2d7b0 76 65 64 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  ved);.    pOut->
2d7c0 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
2d7d0 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
2d7e0 20 69 4d 6f 76 65 64 3b 0a 20 20 20 20 69 66 28   iMoved;.    if(
2d7f0 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
2d800 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23  _due_to_error;.#
2d810 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2d820 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20  IT_AUTOVACUUM.  
2d830 20 20 69 66 28 20 69 4d 6f 76 65 64 21 3d 30 20    if( iMoved!=0 
2d840 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
2d850 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 64 62  RootPageMoved(db
2d860 2c 20 69 44 62 2c 20 69 4d 6f 76 65 64 2c 20 70  , iDb, iMoved, p
2d870 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 20 20 2f  Op->p1);.      /
2d880 2a 20 41 6c 6c 20 4f 50 5f 44 65 73 74 72 6f 79  * All OP_Destroy
2d890 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f 63 63 75   operations occu
2d8a0 72 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 62 74  r on the same bt
2d8b0 72 65 65 20 2a 2f 0a 20 20 20 20 20 20 61 73 73  ree */.      ass
2d8c0 65 72 74 28 20 72 65 73 65 74 53 63 68 65 6d 61  ert( resetSchema
2d8d0 4f 6e 46 61 75 6c 74 3d 3d 30 20 7c 7c 20 72 65  OnFault==0 || re
2d8e0 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74  setSchemaOnFault
2d8f0 3d 3d 69 44 62 2b 31 20 29 3b 0a 20 20 20 20 20  ==iDb+1 );.     
2d900 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61   resetSchemaOnFa
2d910 75 6c 74 20 3d 20 69 44 62 2b 31 3b 0a 20 20 20  ult = iDb+1;.   
2d920 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20   }.#endif.  }.  
2d930 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2d940 6f 64 65 3a 20 43 6c 65 61 72 20 50 31 20 50 32  ode: Clear P1 P2
2d950 20 50 33 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65   P3.**.** Delete
2d960 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 6f 66   all contents of
2d970 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61   the database ta
2d980 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f  ble or index who
2d990 73 65 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20  se root page.** 
2d9a0 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
2d9b0 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79  file is given by
2d9c0 20 50 31 2e 20 20 42 75 74 2c 20 75 6e 6c 69 6b   P1.  But, unlik
2d9d0 65 20 44 65 73 74 72 6f 79 2c 20 64 6f 20 6e 6f  e Destroy, do no
2d9e0 74 0a 2a 2a 20 72 65 6d 6f 76 65 20 74 68 65 20  t.** remove the 
2d9f0 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 66  table or index f
2da00 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
2da10 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65   file..**.** The
2da20 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65   table being cle
2da30 61 72 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69  ar is in the mai
2da40 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
2da50 69 66 20 50 32 3d 3d 30 2e 20 20 49 66 0a 2a 2a  if P2==0.  If.**
2da60 20 50 32 3d 3d 31 20 74 68 65 6e 20 74 68 65 20   P2==1 then the 
2da70 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61  table to be clea
2da80 72 20 69 73 20 69 6e 20 74 68 65 20 61 75 78 69  r is in the auxi
2da90 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66  liary database f
2daa0 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75  ile.** that is u
2dab0 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62  sed to store tab
2dac0 6c 65 73 20 63 72 65 61 74 65 20 75 73 69 6e 67  les create using
2dad0 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52   CREATE TEMPORAR
2dae0 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49  Y TABLE..**.** I
2daf0 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 69  f the P3 value i
2db00 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
2db10 20 74 68 65 20 74 61 62 6c 65 20 72 65 66 65 72   the table refer
2db20 72 65 64 20 74 6f 20 6d 75 73 74 20 62 65 20 61  red to must be a
2db30 6e 0a 2a 2a 20 69 6e 74 6b 65 79 20 74 61 62 6c  n.** intkey tabl
2db40 65 20 28 61 6e 20 53 51 4c 20 74 61 62 6c 65 2c  e (an SQL table,
2db50 20 6e 6f 74 20 61 6e 20 69 6e 64 65 78 29 2e 20   not an index). 
2db60 49 6e 20 74 68 69 73 20 63 61 73 65 20 74 68 65  In this case the
2db70 20 72 6f 77 20 63 68 61 6e 67 65 20 0a 2a 2a 20   row change .** 
2db80 63 6f 75 6e 74 20 69 73 20 69 6e 63 72 65 6d 65  count is increme
2db90 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62  nted by the numb
2dba0 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68  er of rows in th
2dbb0 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c  e table being cl
2dbc0 65 61 72 65 64 2e 20 0a 2a 2a 20 49 66 20 50 33  eared. .** If P3
2dbd0 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
2dbe0 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20   zero, then the 
2dbf0 76 61 6c 75 65 20 73 74 6f 72 65 64 20 69 6e 20  value stored in 
2dc00 72 65 67 69 73 74 65 72 20 50 33 20 69 73 0a 2a  register P3 is.*
2dc10 2a 20 61 6c 73 6f 20 69 6e 63 72 65 6d 65 6e 74  * also increment
2dc20 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72  ed by the number
2dc30 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20   of rows in the 
2dc40 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61  table being clea
2dc50 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  red..**.** See a
2dc60 6c 73 6f 3a 20 44 65 73 74 72 6f 79 0a 2a 2f 0a  lso: Destroy.*/.
2dc70 63 61 73 65 20 4f 50 5f 43 6c 65 61 72 3a 20 7b  case OP_Clear: {
2dc80 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 0a  .  int nChange;.
2dc90 20 0a 20 20 6e 43 68 61 6e 67 65 20 3d 20 30 3b   .  nChange = 0;
2dca0 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65  .  assert( p->re
2dcb0 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61  adOnly==0 );.  a
2dcc0 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73  ssert( DbMaskTes
2dcd0 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20  t(p->btreeMask, 
2dce0 70 4f 70 2d 3e 70 32 29 20 29 3b 0a 20 20 72 63  pOp->p2) );.  rc
2dcf0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
2dd00 6c 65 61 72 54 61 62 6c 65 28 0a 20 20 20 20 20  learTable(.     
2dd10 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 32   db->aDb[pOp->p2
2dd20 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20  ].pBt, pOp->p1, 
2dd30 28 70 4f 70 2d 3e 70 33 20 3f 20 26 6e 43 68 61  (pOp->p3 ? &nCha
2dd40 6e 67 65 20 3a 20 30 29 0a 20 20 29 3b 0a 20 20  nge : 0).  );.  
2dd50 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20  if( pOp->p3 ){. 
2dd60 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 2b 3d     p->nChange +=
2dd70 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 69 66   nChange;.    if
2dd80 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20  ( pOp->p3>0 ){. 
2dd90 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d       assert( mem
2dda0 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f  IsValid(&aMem[pO
2ddb0 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20  p->p3]) );.     
2ddc0 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
2ddd0 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  e(p, &aMem[pOp->
2dde0 70 33 5d 29 3b 0a 20 20 20 20 20 20 61 4d 65 6d  p3]);.      aMem
2ddf0 5b 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20 2b 3d  [pOp->p3].u.i +=
2de00 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 7d 0a   nChange;.    }.
2de10 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67    }.  if( rc ) g
2de20 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
2de30 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b  _error;.  break;
2de40 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
2de50 65 73 65 74 53 6f 72 74 65 72 20 50 31 20 2a 20  esetSorter P1 * 
2de60 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65  * * *.**.** Dele
2de70 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20  te all contents 
2de80 66 72 6f 6d 20 74 68 65 20 65 70 68 65 6d 65 72  from the ephemer
2de90 61 6c 20 74 61 62 6c 65 20 6f 72 20 73 6f 72 74  al table or sort
2dea0 65 72 0a 2a 2a 20 74 68 61 74 20 69 73 20 6f 70  er.** that is op
2deb0 65 6e 20 6f 6e 20 63 75 72 73 6f 72 20 50 31 2e  en on cursor P1.
2dec0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
2ded0 64 65 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f  de only works fo
2dee0 72 20 63 75 72 73 6f 72 73 20 75 73 65 64 20 66  r cursors used f
2def0 6f 72 20 73 6f 72 74 69 6e 67 20 61 6e 64 0a 2a  or sorting and.*
2df00 2a 20 6f 70 65 6e 65 64 20 77 69 74 68 20 4f 50  * opened with OP
2df10 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f  _OpenEphemeral o
2df20 72 20 4f 50 5f 53 6f 72 74 65 72 4f 70 65 6e 2e  r OP_SorterOpen.
2df30 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65  .*/.case OP_Rese
2df40 74 53 6f 72 74 65 72 3a 20 7b 0a 20 20 56 64 62  tSorter: {.  Vdb
2df50 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 0a 20  eCursor *pC;. . 
2df60 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
2df70 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
2df80 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
2df90 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
2dfa0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2dfb0 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66 28 20   pC!=0 );.  if( 
2dfc0 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 7b 0a  isSorter(pC) ){.
2dfd0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
2dfe0 6f 72 74 65 72 52 65 73 65 74 28 64 62 2c 20 70  orterReset(db, p
2dff0 43 2d 3e 75 63 2e 70 53 6f 72 74 65 72 29 3b 0a  C->uc.pSorter);.
2e000 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
2e010 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
2e020 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
2e030 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
2e040 70 43 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c 20  pC->isEphemeral 
2e050 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
2e060 74 65 33 42 74 72 65 65 43 6c 65 61 72 54 61 62  te3BtreeClearTab
2e070 6c 65 4f 66 43 75 72 73 6f 72 28 70 43 2d 3e 75  leOfCursor(pC->u
2e080 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20  c.pCursor);.    
2e090 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
2e0a0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
2e0b0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
2e0c0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65  ../* Opcode: Cre
2e0d0 61 74 65 42 74 72 65 65 20 50 31 20 50 32 20 50  ateBtree P1 P2 P
2e0e0 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
2e0f0 73 3a 20 72 5b 50 32 5d 3d 72 6f 6f 74 20 69 44  s: r[P2]=root iD
2e100 62 3d 50 31 20 66 6c 61 67 73 3d 50 33 0a 2a 2a  b=P1 flags=P3.**
2e110 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e  .** Allocate a n
2e120 65 77 20 62 2d 74 72 65 65 20 69 6e 20 74 68 65  ew b-tree in the
2e130 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
2e140 69 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f 72 20  ile if P1==0 or 
2e150 69 6e 20 74 68 65 0a 2a 2a 20 54 45 4d 50 20 64  in the.** TEMP d
2e160 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20  atabase file if 
2e170 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61  P1==1 or in an a
2e180 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
2e190 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 54 68   if.** P1>1.  Th
2e1a0 65 20 50 33 20 61 72 67 75 6d 65 6e 74 20 6d 75  e P3 argument mu
2e1b0 73 74 20 62 65 20 31 20 28 42 54 52 45 45 5f 49  st be 1 (BTREE_I
2e1c0 4e 54 4b 45 59 29 20 66 6f 72 20 61 20 72 6f 77  NTKEY) for a row
2e1d0 69 64 20 74 61 62 6c 65 0a 2a 2a 20 69 74 20 6d  id table.** it m
2e1e0 75 73 74 20 62 65 20 32 20 28 42 54 52 45 45 5f  ust be 2 (BTREE_
2e1f0 42 4c 4f 42 4b 45 59 29 20 66 6f 72 20 61 20 69  BLOBKEY) for a i
2e200 6e 64 65 78 20 6f 72 20 57 49 54 48 4f 55 54 20  ndex or WITHOUT 
2e210 52 4f 57 49 44 20 74 61 62 6c 65 2e 0a 2a 2a 20  ROWID table..** 
2e220 54 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75  The root page nu
2e230 6d 62 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20  mber of the new 
2e240 62 2d 74 72 65 65 20 69 73 20 73 74 6f 72 65 64  b-tree is stored
2e250 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
2e260 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65 61  .*/.case OP_Crea
2e270 74 65 42 74 72 65 65 3a 20 7b 20 20 20 20 20 20  teBtree: {      
2e280 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
2e290 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 44 62 20   int pgno;.  Db 
2e2a0 2a 70 44 62 3b 0a 0a 20 20 70 4f 75 74 20 3d 20  *pDb;..  pOut = 
2e2b0 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
2e2c0 2c 20 70 4f 70 29 3b 0a 20 20 70 67 6e 6f 20 3d  , pOp);.  pgno =
2e2d0 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   0;.  assert( pO
2e2e0 70 2d 3e 70 33 3d 3d 42 54 52 45 45 5f 49 4e 54  p->p3==BTREE_INT
2e2f0 4b 45 59 20 7c 7c 20 70 4f 70 2d 3e 70 33 3d 3d  KEY || pOp->p3==
2e300 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 29 3b  BTREE_BLOBKEY );
2e310 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2e320 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
2e330 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
2e340 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74  sert( DbMaskTest
2e350 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70  (p->btreeMask, p
2e360 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73 73  Op->p1) );.  ass
2e370 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
2e380 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26  ==0 );.  pDb = &
2e390 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
2e3a0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44 62 2d  ;.  assert( pDb-
2e3b0 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20 72 63 20  >pBt!=0 );.  rc 
2e3c0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72  = sqlite3BtreeCr
2e3d0 65 61 74 65 54 61 62 6c 65 28 70 44 62 2d 3e 70  eateTable(pDb->p
2e3e0 42 74 2c 20 26 70 67 6e 6f 2c 20 70 4f 70 2d 3e  Bt, &pgno, pOp->
2e3f0 70 33 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  p3);.  if( rc ) 
2e400 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
2e410 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 4f 75 74 2d  o_error;.  pOut-
2e420 3e 75 2e 69 20 3d 20 70 67 6e 6f 3b 0a 20 20 62  >u.i = pgno;.  b
2e430 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2e440 64 65 3a 20 53 71 6c 45 78 65 63 20 2a 20 2a 20  de: SqlExec * * 
2e450 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 75 6e  * P4 *.**.** Run
2e460 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
2e470 6e 74 20 6f 72 20 73 74 61 74 65 6d 65 6e 74 73  nt or statements
2e480 20 73 70 65 63 69 66 69 65 64 20 69 6e 20 74 68   specified in th
2e490 65 20 50 34 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a  e P4 string..*/.
2e4a0 63 61 73 65 20 4f 50 5f 53 71 6c 45 78 65 63 3a  case OP_SqlExec:
2e4b0 20 7b 0a 20 20 64 62 2d 3e 6e 53 71 6c 45 78 65   {.  db->nSqlExe
2e4c0 63 2b 2b 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  c++;.  rc = sqli
2e4d0 74 65 33 5f 65 78 65 63 28 64 62 2c 20 70 4f 70  te3_exec(db, pOp
2e4e0 2d 3e 70 34 2e 7a 2c 20 30 2c 20 30 2c 20 30 29  ->p4.z, 0, 0, 0)
2e4f0 3b 0a 20 20 64 62 2d 3e 6e 53 71 6c 45 78 65 63  ;.  db->nSqlExec
2e500 2d 2d 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  --;.  if( rc ) g
2e510 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
2e520 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b  _error;.  break;
2e530 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  .}../* Opcode: P
2e540 61 72 73 65 53 63 68 65 6d 61 20 50 31 20 2a 20  arseSchema P1 * 
2e550 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61  * P4 *.**.** Rea
2e560 64 20 61 6e 64 20 70 61 72 73 65 20 61 6c 6c 20  d and parse all 
2e570 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74 68 65  entries from the
2e580 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 74   SQLITE_MASTER t
2e590 61 62 6c 65 20 6f 66 20 64 61 74 61 62 61 73 65  able of database
2e5a0 20 50 31 0a 2a 2a 20 74 68 61 74 20 6d 61 74 63   P1.** that matc
2e5b0 68 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75  h the WHERE clau
2e5c0 73 65 20 50 34 2e 20 0a 2a 2a 0a 2a 2a 20 54 68  se P4. .**.** Th
2e5d0 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65  is opcode invoke
2e5e0 73 20 74 68 65 20 70 61 72 73 65 72 20 74 6f 20  s the parser to 
2e5f0 63 72 65 61 74 65 20 61 20 6e 65 77 20 76 69 72  create a new vir
2e600 74 75 61 6c 20 6d 61 63 68 69 6e 65 2c 0a 2a 2a  tual machine,.**
2e610 20 74 68 65 6e 20 72 75 6e 73 20 74 68 65 20 6e   then runs the n
2e620 65 77 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  ew virtual machi
2e630 6e 65 2e 20 20 49 74 20 69 73 20 74 68 75 73 20  ne.  It is thus 
2e640 61 20 72 65 2d 65 6e 74 72 61 6e 74 20 6f 70 63  a re-entrant opc
2e650 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ode..*/.case OP_
2e660 50 61 72 73 65 53 63 68 65 6d 61 3a 20 7b 0a 20  ParseSchema: {. 
2e670 20 69 6e 74 20 69 44 62 3b 0a 20 20 63 6f 6e 73   int iDb;.  cons
2e680 74 20 63 68 61 72 20 2a 7a 4d 61 73 74 65 72 3b  t char *zMaster;
2e690 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20  .  char *zSql;. 
2e6a0 20 49 6e 69 74 44 61 74 61 20 69 6e 69 74 44 61   InitData initDa
2e6b0 74 61 3b 0a 0a 20 20 2f 2a 20 41 6e 79 20 70 72  ta;..  /* Any pr
2e6c0 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
2e6d0 20 74 68 61 74 20 69 6e 76 6f 6b 65 73 20 74 68   that invokes th
2e6e0 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 68  is opcode will h
2e6f0 6f 6c 64 20 6d 75 74 65 78 65 73 0a 20 20 2a 2a  old mutexes.  **
2e700 20 6f 6e 20 65 76 65 72 79 20 62 74 72 65 65 2e   on every btree.
2e710 20 20 54 68 69 73 20 69 73 20 61 20 70 72 65 72    This is a prer
2e720 65 71 75 69 73 69 74 65 20 66 6f 72 20 69 6e 76  equisite for inv
2e730 6f 6b 69 6e 67 20 0a 20 20 2a 2a 20 73 71 6c 69  oking .  ** sqli
2e740 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28  te3InitCallback(
2e750 29 2e 0a 20 20 2a 2f 0a 23 69 66 64 65 66 20 53  )..  */.#ifdef S
2e760 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 66 6f  QLITE_DEBUG.  fo
2e770 72 28 69 44 62 3d 30 3b 20 69 44 62 3c 64 62 2d  r(iDb=0; iDb<db-
2e780 3e 6e 44 62 3b 20 69 44 62 2b 2b 29 7b 0a 20 20  >nDb; iDb++){.  
2e790 20 20 61 73 73 65 72 74 28 20 69 44 62 3d 3d 31    assert( iDb==1
2e7a0 20 7c 7c 20 73 71 6c 69 74 65 33 42 74 72 65 65   || sqlite3Btree
2e7b0 48 6f 6c 64 73 4d 75 74 65 78 28 64 62 2d 3e 61  HoldsMutex(db->a
2e7c0 44 62 5b 69 44 62 5d 2e 70 42 74 29 20 29 3b 0a  Db[iDb].pBt) );.
2e7d0 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 69 44    }.#endif..  iD
2e7e0 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61  b = pOp->p1;.  a
2e7f0 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26  ssert( iDb>=0 &&
2e800 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a   iDb<db->nDb );.
2e810 20 20 61 73 73 65 72 74 28 20 44 62 48 61 73 50    assert( DbHasP
2e820 72 6f 70 65 72 74 79 28 64 62 2c 20 69 44 62 2c  roperty(db, iDb,
2e830 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64   DB_SchemaLoaded
2e840 29 20 29 3b 0a 20 20 2f 2a 20 55 73 65 64 20 74  ) );.  /* Used t
2e850 6f 20 62 65 20 61 20 63 6f 6e 64 69 74 69 6f 6e  o be a condition
2e860 61 6c 20 2a 2f 20 7b 0a 20 20 20 20 7a 4d 61 73  al */ {.    zMas
2e870 74 65 72 20 3d 20 4d 41 53 54 45 52 5f 4e 41 4d  ter = MASTER_NAM
2e880 45 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e  E;.    initData.
2e890 64 62 20 3d 20 64 62 3b 0a 20 20 20 20 69 6e 69  db = db;.    ini
2e8a0 74 44 61 74 61 2e 69 44 62 20 3d 20 70 4f 70 2d  tData.iDb = pOp-
2e8b0 3e 70 31 3b 0a 20 20 20 20 69 6e 69 74 44 61 74  >p1;.    initDat
2e8c0 61 2e 70 7a 45 72 72 4d 73 67 20 3d 20 26 70 2d  a.pzErrMsg = &p-
2e8d0 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20 7a 53  >zErrMsg;.    zS
2e8e0 71 6c 20 3d 20 73 71 6c 69 74 65 33 4d 50 72 69  ql = sqlite3MPri
2e8f0 6e 74 66 28 64 62 2c 0a 20 20 20 20 20 20 20 22  ntf(db,.       "
2e900 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20 72 6f 6f  SELECT name, roo
2e910 74 70 61 67 65 2c 20 73 71 6c 20 46 52 4f 4d 20  tpage, sql FROM 
2e920 27 25 71 27 2e 25 73 20 57 48 45 52 45 20 25 73  '%q'.%s WHERE %s
2e930 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64 22   ORDER BY rowid"
2e940 2c 0a 20 20 20 20 20 20 20 64 62 2d 3e 61 44 62  ,.       db->aDb
2e950 5b 69 44 62 5d 2e 7a 44 62 53 4e 61 6d 65 2c 20  [iDb].zDbSName, 
2e960 7a 4d 61 73 74 65 72 2c 20 70 4f 70 2d 3e 70 34  zMaster, pOp->p4
2e970 2e 7a 29 3b 0a 20 20 20 20 69 66 28 20 7a 53 71  .z);.    if( zSq
2e980 6c 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63  l==0 ){.      rc
2e990 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f   = SQLITE_NOMEM_
2e9a0 42 4b 50 54 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  BKPT;.    }else{
2e9b0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64  .      assert( d
2e9c0 62 2d 3e 69 6e 69 74 2e 62 75 73 79 3d 3d 30 20  b->init.busy==0 
2e9d0 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69  );.      db->ini
2e9e0 74 2e 62 75 73 79 20 3d 20 31 3b 0a 20 20 20 20  t.busy = 1;.    
2e9f0 20 20 69 6e 69 74 44 61 74 61 2e 72 63 20 3d 20    initData.rc = 
2ea00 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20  SQLITE_OK;.     
2ea10 20 61 73 73 65 72 74 28 20 21 64 62 2d 3e 6d 61   assert( !db->ma
2ea20 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20  llocFailed );.  
2ea30 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
2ea40 5f 65 78 65 63 28 64 62 2c 20 7a 53 71 6c 2c 20  _exec(db, zSql, 
2ea50 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62  sqlite3InitCallb
2ea60 61 63 6b 2c 20 26 69 6e 69 74 44 61 74 61 2c 20  ack, &initData, 
2ea70 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  0);.      if( rc
2ea80 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 72 63  ==SQLITE_OK ) rc
2ea90 20 3d 20 69 6e 69 74 44 61 74 61 2e 72 63 3b 0a   = initData.rc;.
2eaa0 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46        sqlite3DbF
2eab0 72 65 65 4e 4e 28 64 62 2c 20 7a 53 71 6c 29 3b  reeNN(db, zSql);
2eac0 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e  .      db->init.
2ead0 62 75 73 79 20 3d 20 30 3b 0a 20 20 20 20 7d 0a  busy = 0;.    }.
2eae0 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 7b 0a    }.  if( rc ){.
2eaf0 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74      sqlite3Reset
2eb00 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e  AllSchemasOfConn
2eb10 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20 20 20  ection(db);.    
2eb20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4e  if( rc==SQLITE_N
2eb30 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20 67 6f  OMEM ){.      go
2eb40 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d  to no_mem;.    }
2eb50 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f  .    goto abort_
2eb60 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
2eb70 7d 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 0a  }.  break;  .}..
2eb80 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
2eb90 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45  ITE_OMIT_ANALYZE
2eba0 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 6f 61  )./* Opcode: Loa
2ebb0 64 41 6e 61 6c 79 73 69 73 20 50 31 20 2a 20 2a  dAnalysis P1 * *
2ebc0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20   * *.**.** Read 
2ebd0 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61 74 31  the sqlite_stat1
2ebe0 20 74 61 62 6c 65 20 66 6f 72 20 64 61 74 61 62   table for datab
2ebf0 61 73 65 20 50 31 20 61 6e 64 20 6c 6f 61 64 20  ase P1 and load 
2ec00 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 6f  the content.** o
2ec10 66 20 74 68 61 74 20 74 61 62 6c 65 20 69 6e 74  f that table int
2ec20 6f 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 69  o the internal i
2ec30 6e 64 65 78 20 68 61 73 68 20 74 61 62 6c 65 2e  ndex hash table.
2ec40 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73    This will caus
2ec50 65 0a 2a 2a 20 74 68 65 20 61 6e 61 6c 79 73 69  e.** the analysi
2ec60 73 20 74 6f 20 62 65 20 75 73 65 64 20 77 68 65  s to be used whe
2ec70 6e 20 70 72 65 70 61 72 69 6e 67 20 61 6c 6c 20  n preparing all 
2ec80 73 75 62 73 65 71 75 65 6e 74 20 71 75 65 72 69  subsequent queri
2ec90 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c  es..*/.case OP_L
2eca0 6f 61 64 41 6e 61 6c 79 73 69 73 3a 20 7b 0a 20  oadAnalysis: {. 
2ecb0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
2ecc0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
2ecd0 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 72 63 20 3d  b->nDb );.  rc =
2ece0 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73 69 73   sqlite3Analysis
2ecf0 4c 6f 61 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31  Load(db, pOp->p1
2ed00 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  );.  if( rc ) go
2ed10 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
2ed20 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 20  error;.  break; 
2ed30 20 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64   .}.#endif /* !d
2ed40 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
2ed50 49 54 5f 41 4e 41 4c 59 5a 45 29 20 2a 2f 0a 0a  IT_ANALYZE) */..
2ed60 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54  /* Opcode: DropT
2ed70 61 62 6c 65 20 50 31 20 2a 20 2a 20 50 34 20 2a  able P1 * * P4 *
2ed80 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68  .**.** Remove th
2ed90 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d  e internal (in-m
2eda0 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75  emory) data stru
2edb0 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63  ctures that desc
2edc0 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 61 62 6c  ribe.** the tabl
2edd0 65 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61  e named P4 in da
2ede0 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73  tabase P1.  This
2edf0 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72   is called after
2ee00 20 61 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 64   a table.** is d
2ee10 72 6f 70 70 65 64 20 66 72 6f 6d 20 64 69 73 6b  ropped from disk
2ee20 20 28 75 73 69 6e 67 20 74 68 65 20 44 65 73 74   (using the Dest
2ee30 72 6f 79 20 6f 70 63 6f 64 65 29 20 69 6e 20 6f  roy opcode) in o
2ee40 72 64 65 72 20 74 6f 20 6b 65 65 70 20 0a 2a 2a  rder to keep .**
2ee50 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65   the internal re
2ee60 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
2ee70 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f  the.** schema co
2ee80 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68  nsistent with wh
2ee90 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a  at is on disk..*
2eea0 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 61  /.case OP_DropTa
2eeb0 62 6c 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  ble: {.  sqlite3
2eec0 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54  UnlinkAndDeleteT
2eed0 61 62 6c 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31  able(db, pOp->p1
2eee0 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
2eef0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2ef00 6f 64 65 3a 20 44 72 6f 70 49 6e 64 65 78 20 50  ode: DropIndex P
2ef10 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
2ef20 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65   Remove the inte
2ef30 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29  rnal (in-memory)
2ef40 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73   data structures
2ef50 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a   that describe.*
2ef60 2a 20 74 68 65 20 69 6e 64 65 78 20 6e 61 6d 65  * the index name
2ef70 64 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65  d P4 in database
2ef80 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61   P1.  This is ca
2ef90 6c 6c 65 64 20 61 66 74 65 72 20 61 6e 20 69 6e  lled after an in
2efa0 64 65 78 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65  dex.** is droppe
2efb0 64 20 66 72 6f 6d 20 64 69 73 6b 20 28 75 73 69  d from disk (usi
2efc0 6e 67 20 74 68 65 20 44 65 73 74 72 6f 79 20 6f  ng the Destroy o
2efd0 70 63 6f 64 65 29 0a 2a 2a 20 69 6e 20 6f 72 64  pcode).** in ord
2efe0 65 72 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69  er to keep the i
2eff0 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e  nternal represen
2f000 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  tation of the.**
2f010 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65   schema consiste
2f020 6e 74 20 77 69 74 68 20 77 68 61 74 20 69 73 20  nt with what is 
2f030 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65  on disk..*/.case
2f040 20 4f 50 5f 44 72 6f 70 49 6e 64 65 78 3a 20 7b   OP_DropIndex: {
2f050 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  .  sqlite3Unlink
2f060 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28 64  AndDeleteIndex(d
2f070 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  b, pOp->p1, pOp-
2f080 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b  >p4.z);.  break;
2f090 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  .}../* Opcode: D
2f0a0 72 6f 70 54 72 69 67 67 65 72 20 50 31 20 2a 20  ropTrigger P1 * 
2f0b0 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d  * P4 *.**.** Rem
2f0c0 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  ove the internal
2f0d0 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74   (in-memory) dat
2f0e0 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68 61  a structures tha
2f0f0 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68  t describe.** th
2f100 65 20 74 72 69 67 67 65 72 20 6e 61 6d 65 64 20  e trigger named 
2f110 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50  P4 in database P
2f120 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c  1.  This is call
2f130 65 64 20 61 66 74 65 72 20 61 20 74 72 69 67 67  ed after a trigg
2f140 65 72 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64  er.** is dropped
2f150 20 66 72 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e   from disk (usin
2f160 67 20 74 68 65 20 44 65 73 74 72 6f 79 20 6f 70  g the Destroy op
2f170 63 6f 64 65 29 20 69 6e 20 6f 72 64 65 72 20 74  code) in order t
2f180 6f 20 6b 65 65 70 20 0a 2a 2a 20 74 68 65 20 69  o keep .** the i
2f190 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e  nternal represen
2f1a0 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  tation of the.**
2f1b0 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65   schema consiste
2f1c0 6e 74 20 77 69 74 68 20 77 68 61 74 20 69 73 20  nt with what is 
2f1d0 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65  on disk..*/.case
2f1e0 20 4f 50 5f 44 72 6f 70 54 72 69 67 67 65 72 3a   OP_DropTrigger:
2f1f0 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69   {.  sqlite3Unli
2f200 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67  nkAndDeleteTrigg
2f210 65 72 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  er(db, pOp->p1, 
2f220 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72  pOp->p4.z);.  br
2f230 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66  eak;.}...#ifndef
2f240 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54   SQLITE_OMIT_INT
2f250 45 47 52 49 54 59 5f 43 48 45 43 4b 0a 2f 2a 20  EGRITY_CHECK./* 
2f260 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67 72 69 74  Opcode: Integrit
2f270 79 43 6b 20 50 31 20 50 32 20 50 33 20 50 34 20  yCk P1 P2 P3 P4 
2f280 50 35 0a 2a 2a 0a 2a 2a 20 44 6f 20 61 6e 20 61  P5.**.** Do an a
2f290 6e 61 6c 79 73 69 73 20 6f 66 20 74 68 65 20 63  nalysis of the c
2f2a0 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 64 61  urrently open da
2f2b0 74 61 62 61 73 65 2e 20 20 53 74 6f 72 65 20 69  tabase.  Store i
2f2c0 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31  n.** register P1
2f2d0 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 6e 20   the text of an 
2f2e0 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 64 65  error message de
2f2f0 73 63 72 69 62 69 6e 67 20 61 6e 79 20 70 72 6f  scribing any pro
2f300 62 6c 65 6d 73 2e 0a 2a 2a 20 49 66 20 6e 6f 20  blems..** If no 
2f310 70 72 6f 62 6c 65 6d 73 20 61 72 65 20 66 6f 75  problems are fou
2f320 6e 64 2c 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c  nd, store a NULL
2f330 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
2f340 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73  .**.** The regis
2f350 74 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20  ter P3 contains 
2f360 6f 6e 65 20 6c 65 73 73 20 74 68 61 6e 20 74 68  one less than th
2f370 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72  e maximum number
2f380 20 6f 66 20 61 6c 6c 6f 77 65 64 20 65 72 72 6f   of allowed erro
2f390 72 73 2e 0a 2a 2a 20 41 74 20 6d 6f 73 74 20 72  rs..** At most r
2f3a0 65 67 28 50 33 29 20 65 72 72 6f 72 73 20 77 69  eg(P3) errors wi
2f3b0 6c 6c 20 62 65 20 72 65 70 6f 72 74 65 64 2e 0a  ll be reported..
2f3c0 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  ** In other word
2f3d0 73 2c 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20  s, the analysis 
2f3e0 73 74 6f 70 73 20 61 73 20 73 6f 6f 6e 20 61 73  stops as soon as
2f3f0 20 72 65 67 28 50 31 29 20 65 72 72 6f 72 73 20   reg(P1) errors 
2f400 61 72 65 20 0a 2a 2a 20 73 65 65 6e 2e 20 20 52  are .** seen.  R
2f410 65 67 28 50 31 29 20 69 73 20 75 70 64 61 74 65  eg(P1) is update
2f420 64 20 77 69 74 68 20 74 68 65 20 6e 75 6d 62 65  d with the numbe
2f430 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61  r of errors rema
2f440 69 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ining..**.** The
2f450 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65   root page numbe
2f460 72 73 20 6f 66 20 61 6c 6c 20 74 61 62 6c 65 73  rs of all tables
2f470 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
2f480 20 61 72 65 20 69 6e 74 65 67 65 72 73 0a 2a 2a   are integers.**
2f490 20 73 74 6f 72 65 64 20 69 6e 20 50 34 5f 49 4e   stored in P4_IN
2f4a0 54 41 52 52 41 59 20 61 72 67 75 6d 65 6e 74 2e  TARRAY argument.
2f4b0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20  .**.** If P5 is 
2f4c0 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 20 63 68  not zero, the ch
2f4d0 65 63 6b 20 69 73 20 64 6f 6e 65 20 6f 6e 20 74  eck is done on t
2f4e0 68 65 20 61 75 78 69 6c 69 61 72 79 20 64 61 74  he auxiliary dat
2f4f0 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65 2c 20 6e  abase.** file, n
2f500 6f 74 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  ot the main data
2f510 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a  base file..**.**
2f520 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
2f530 75 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e  used to implemen
2f540 74 20 74 68 65 20 69 6e 74 65 67 72 69 74 79 5f  t the integrity_
2f550 63 68 65 63 6b 20 70 72 61 67 6d 61 2e 0a 2a 2f  check pragma..*/
2f560 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 72 69  .case OP_Integri
2f570 74 79 43 6b 3a 20 7b 0a 20 20 69 6e 74 20 6e 52  tyCk: {.  int nR
2f580 6f 6f 74 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d  oot;      /* Num
2f590 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20 74 6f  ber of tables to
2f5a0 20 63 68 65 63 6b 2e 20 20 28 4e 75 6d 62 65 72   check.  (Number
2f5b0 20 6f 66 20 72 6f 6f 74 20 70 61 67 65 73 2e 29   of root pages.)
2f5c0 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 52 6f 6f 74   */.  int *aRoot
2f5d0 3b 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f  ;     /* Array o
2f5e0 66 20 72 6f 6f 74 70 61 67 65 20 6e 75 6d 62 65  f rootpage numbe
2f5f0 72 73 20 66 6f 72 20 74 61 62 6c 65 73 20 74 6f  rs for tables to
2f600 20 62 65 20 63 68 65 63 6b 65 64 20 2a 2f 0a 20   be checked */. 
2f610 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20   int nErr;      
2f620 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72   /* Number of er
2f630 72 6f 72 73 20 72 65 70 6f 72 74 65 64 20 2a 2f  rors reported */
2f640 0a 20 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20  .  char *z;     
2f650 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68     /* Text of th
2f660 65 20 65 72 72 6f 72 20 72 65 70 6f 72 74 20 2a  e error report *
2f670 2f 0a 20 20 4d 65 6d 20 2a 70 6e 45 72 72 3b 20  /.  Mem *pnErr; 
2f680 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
2f690 6b 65 65 70 69 6e 67 20 74 72 61 63 6b 20 6f 66  keeping track of
2f6a0 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e   errors remainin
2f6b0 67 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20  g */..  assert( 
2f6c0 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a  p->bIsReader );.
2f6d0 20 20 6e 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70    nRoot = pOp->p
2f6e0 32 3b 0a 20 20 61 52 6f 6f 74 20 3d 20 70 4f 70  2;.  aRoot = pOp
2f6f0 2d 3e 70 34 2e 61 69 3b 0a 20 20 61 73 73 65 72  ->p4.ai;.  asser
2f700 74 28 20 6e 52 6f 6f 74 3e 30 20 29 3b 0a 20 20  t( nRoot>0 );.  
2f710 61 73 73 65 72 74 28 20 61 52 6f 6f 74 5b 30 5d  assert( aRoot[0]
2f720 3d 3d 6e 52 6f 6f 74 20 29 3b 0a 20 20 61 73 73  ==nRoot );.  ass
2f730 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
2f740 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  & pOp->p3<=(p->n
2f750 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
2f760 6f 72 29 20 29 3b 0a 20 20 70 6e 45 72 72 20 3d  or) );.  pnErr =
2f770 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
2f780 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e 45 72  .  assert( (pnEr
2f790 72 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  r->flags & MEM_I
2f7a0 6e 74 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  nt)!=0 );.  asse
2f7b0 72 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67  rt( (pnErr->flag
2f7c0 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  s & (MEM_Str|MEM
2f7d0 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20  _Blob))==0 );.  
2f7e0 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
2f7f0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2f800 20 70 4f 70 2d 3e 70 35 3c 64 62 2d 3e 6e 44 62   pOp->p5<db->nDb
2f810 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62   );.  assert( Db
2f820 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65  MaskTest(p->btre
2f830 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 35 29 20  eMask, pOp->p5) 
2f840 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33  );.  z = sqlite3
2f850 42 74 72 65 65 49 6e 74 65 67 72 69 74 79 43 68  BtreeIntegrityCh
2f860 65 63 6b 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  eck(db->aDb[pOp-
2f870 3e 70 35 5d 2e 70 42 74 2c 20 26 61 52 6f 6f 74  >p5].pBt, &aRoot
2f880 5b 31 5d 2c 20 6e 52 6f 6f 74 2c 0a 20 20 20 20  [1], nRoot,.    
2f890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 6e               (in
2f8b0 74 29 70 6e 45 72 72 2d 3e 75 2e 69 2b 31 2c 20  t)pnErr->u.i+1, 
2f8c0 26 6e 45 72 72 29 3b 0a 20 20 73 71 6c 69 74 65  &nErr);.  sqlite
2f8d0 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
2f8e0 70 49 6e 31 29 3b 0a 20 20 69 66 28 20 6e 45 72  pIn1);.  if( nEr
2f8f0 72 3d 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65  r==0 ){.    asse
2f900 72 74 28 20 7a 3d 3d 30 20 29 3b 0a 20 20 7d 65  rt( z==0 );.  }e
2f910 6c 73 65 20 69 66 28 20 7a 3d 3d 30 20 29 7b 0a  lse if( z==0 ){.
2f920 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
2f930 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 6e  .  }else{.    pn
2f940 45 72 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45 72 72  Err->u.i -= nErr
2f950 2d 31 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  -1;.    sqlite3V
2f960 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 49 6e  dbeMemSetStr(pIn
2f970 31 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45  1, z, -1, SQLITE
2f980 5f 55 54 46 38 2c 20 73 71 6c 69 74 65 33 5f 66  _UTF8, sqlite3_f
2f990 72 65 65 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41  ree);.  }.  UPDA
2f9a0 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
2f9b0 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33  pIn1);.  sqlite3
2f9c0 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
2f9d0 6e 67 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e  ng(pIn1, encodin
2f9e0 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  g);.  break;.}.#
2f9f0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
2fa00 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43  OMIT_INTEGRITY_C
2fa10 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f  HECK */../* Opco
2fa20 64 65 3a 20 52 6f 77 53 65 74 41 64 64 20 50 31  de: RowSetAdd P1
2fa30 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
2fa40 6f 70 73 69 73 3a 20 72 6f 77 73 65 74 28 50 31  opsis: rowset(P1
2fa50 29 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 49 6e  )=r[P2].**.** In
2fa60 73 65 72 74 20 74 68 65 20 69 6e 74 65 67 65 72  sert the integer
2fa70 20 76 61 6c 75 65 20 68 65 6c 64 20 62 79 20 72   value held by r
2fa80 65 67 69 73 74 65 72 20 50 32 20 69 6e 74 6f 20  egister P2 into 
2fa90 61 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 0a  a RowSet object.
2faa0 2a 2a 20 68 65 6c 64 20 69 6e 20 72 65 67 69 73  ** held in regis
2fab0 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 41 6e  ter P1..**.** An
2fac0 20 61 73 73 65 72 74 69 6f 6e 20 66 61 69 6c 73   assertion fails
2fad0 20 69 66 20 50 32 20 69 73 20 6e 6f 74 20 61 6e   if P2 is not an
2fae0 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73   integer..*/.cas
2faf0 65 20 4f 50 5f 52 6f 77 53 65 74 41 64 64 3a 20  e OP_RowSetAdd: 
2fb00 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20  {       /* in1, 
2fb10 69 6e 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in2 */.  pIn1 = 
2fb20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
2fb30 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
2fb40 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72  Op->p2];.  asser
2fb50 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20  t( (pIn2->flags 
2fb60 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b  & MEM_Int)!=0 );
2fb70 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
2fb80 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74  ags & MEM_RowSet
2fb90 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  )==0 ){.    sqli
2fba0 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77  te3VdbeMemSetRow
2fbb0 53 65 74 28 70 49 6e 31 29 3b 0a 20 20 20 20 69  Set(pIn1);.    i
2fbc0 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
2fbd0 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30  & MEM_RowSet)==0
2fbe0 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
2fbf0 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 52 6f 77    }.  sqlite3Row
2fc00 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e  SetInsert(pIn1->
2fc10 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e 32 2d  u.pRowSet, pIn2-
2fc20 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  >u.i);.  break;.
2fc30 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f  }../* Opcode: Ro
2fc40 77 53 65 74 52 65 61 64 20 50 31 20 50 32 20 50  wSetRead P1 P2 P
2fc50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
2fc60 73 3a 20 72 5b 50 33 5d 3d 72 6f 77 73 65 74 28  s: r[P3]=rowset(
2fc70 50 31 29 0a 2a 2a 0a 2a 2a 20 45 78 74 72 61 63  P1).**.** Extrac
2fc80 74 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 76  t the smallest v
2fc90 61 6c 75 65 20 66 72 6f 6d 20 74 68 65 20 52 6f  alue from the Ro
2fca0 77 53 65 74 20 6f 62 6a 65 63 74 20 69 6e 20 50  wSet object in P
2fcb0 31 0a 2a 2a 20 61 6e 64 20 70 75 74 20 74 68 61  1.** and put tha
2fcc0 74 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67  t value into reg
2fcd0 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 4f 72 2c  ister P3..** Or,
2fce0 20 69 66 20 52 6f 77 53 65 74 20 6f 62 6a 65 63   if RowSet objec
2fcf0 74 20 50 31 20 69 73 20 69 6e 69 74 69 61 6c 6c  t P1 is initiall
2fd00 79 20 65 6d 70 74 79 2c 20 6c 65 61 76 65 20 50  y empty, leave P
2fd10 33 0a 2a 2a 20 75 6e 63 68 61 6e 67 65 64 20 61  3.** unchanged a
2fd20 6e 64 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72  nd jump to instr
2fd30 75 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61  uction P2..*/.ca
2fd40 73 65 20 4f 50 5f 52 6f 77 53 65 74 52 65 61 64  se OP_RowSetRead
2fd50 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  : {       /* jum
2fd60 70 2c 20 69 6e 31 2c 20 6f 75 74 33 20 2a 2f 0a  p, in1, out3 */.
2fd70 20 20 69 36 34 20 76 61 6c 3b 0a 0a 20 20 70 49    i64 val;..  pI
2fd80 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
2fd90 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  p1];.  if( (pIn1
2fda0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f  ->flags & MEM_Ro
2fdb0 77 53 65 74 29 3d 3d 30 20 0a 20 20 20 7c 7c 20  wSet)==0 .   || 
2fdc0 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78  sqlite3RowSetNex
2fdd0 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65  t(pIn1->u.pRowSe
2fde0 74 2c 20 26 76 61 6c 29 3d 3d 30 0a 20 20 29 7b  t, &val)==0.  ){
2fdf0 0a 20 20 20 20 2f 2a 20 54 68 65 20 62 6f 6f 6c  .    /* The bool
2fe00 65 61 6e 20 69 6e 64 65 78 20 69 73 20 65 6d 70  ean index is emp
2fe10 74 79 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65  ty */.    sqlite
2fe20 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
2fe30 70 49 6e 31 29 3b 0a 20 20 20 20 56 64 62 65 42  pIn1);.    VdbeB
2fe40 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 32 29 3b  ranchTaken(1,2);
2fe50 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  .    goto jump_t
2fe60 6f 5f 70 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66  o_p2_and_check_f
2fe70 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20 20  or_interrupt;.  
2fe80 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 41 20  }else{.    /* A 
2fe90 76 61 6c 75 65 20 77 61 73 20 70 75 6c 6c 65 64  value was pulled
2fea0 20 66 72 6f 6d 20 74 68 65 20 69 6e 64 65 78 20   from the index 
2feb0 2a 2f 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  */.    VdbeBranc
2fec0 68 54 61 6b 65 6e 28 30 2c 32 29 3b 0a 20 20 20  hTaken(0,2);.   
2fed0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2fee0 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f  etInt64(&aMem[pO
2fef0 70 2d 3e 70 33 5d 2c 20 76 61 6c 29 3b 0a 20 20  p->p3], val);.  
2ff00 7d 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66  }.  goto check_f
2ff10 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a  or_interrupt;.}.
2ff20 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53  ./* Opcode: RowS
2ff30 65 74 54 65 73 74 20 50 31 20 50 32 20 50 33 20  etTest P1 P2 P3 
2ff40 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P4.** Synopsis: 
2ff50 69 66 20 72 5b 50 33 5d 20 69 6e 20 72 6f 77 73  if r[P3] in rows
2ff60 65 74 28 50 31 29 20 67 6f 74 6f 20 50 32 0a 2a  et(P1) goto P2.*
2ff70 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 33  *.** Register P3
2ff80 20 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20 68   is assumed to h
2ff90 6f 6c 64 20 61 20 36 34 2d 62 69 74 20 69 6e 74  old a 64-bit int
2ffa0 65 67 65 72 20 76 61 6c 75 65 2e 20 49 66 20 72  eger value. If r
2ffb0 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 63 6f  egister P1.** co
2ffc0 6e 74 61 69 6e 73 20 61 20 52 6f 77 53 65 74 20  ntains a RowSet 
2ffd0 6f 62 6a 65 63 74 20 61 6e 64 20 74 68 61 74 20  object and that 
2ffe0 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 63 6f  RowSet object co
2fff0 6e 74 61 69 6e 73 0a 2a 2a 20 74 68 65 20 76 61  ntains.** the va
30000 6c 75 65 20 68 65 6c 64 20 69 6e 20 50 33 2c 20  lue held in P3, 
30010 6a 75 6d 70 20 74 6f 20 72 65 67 69 73 74 65 72  jump to register
30020 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20   P2. Otherwise, 
30030 69 6e 73 65 72 74 20 74 68 65 0a 2a 2a 20 69 6e  insert the.** in
30040 74 65 67 65 72 20 69 6e 20 50 33 20 69 6e 74 6f  teger in P3 into
30050 20 74 68 65 20 52 6f 77 53 65 74 20 61 6e 64 20   the RowSet and 
30060 63 6f 6e 74 69 6e 75 65 20 6f 6e 20 74 6f 20 74  continue on to t
30070 68 65 0a 2a 2a 20 6e 65 78 74 20 6f 70 63 6f 64  he.** next opcod
30080 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 6f 77  e..**.** The Row
30090 53 65 74 20 6f 62 6a 65 63 74 20 69 73 20 6f 70  Set object is op
300a0 74 69 6d 69 7a 65 64 20 66 6f 72 20 74 68 65 20  timized for the 
300b0 63 61 73 65 20 77 68 65 72 65 20 73 65 74 73 20  case where sets 
300c0 6f 66 20 69 6e 74 65 67 65 72 73 0a 2a 2a 20 61  of integers.** a
300d0 72 65 20 69 6e 73 65 72 74 65 64 20 69 6e 20 64  re inserted in d
300e0 69 73 74 69 6e 63 74 20 70 68 61 73 65 73 2c 20  istinct phases, 
300f0 77 68 69 63 68 20 65 61 63 68 20 73 65 74 20 63  which each set c
30100 6f 6e 74 61 69 6e 73 20 6e 6f 20 64 75 70 6c 69  ontains no dupli
30110 63 61 74 65 73 2e 0a 2a 2a 20 45 61 63 68 20 73  cates..** Each s
30120 65 74 20 69 73 20 69 64 65 6e 74 69 66 69 65 64  et is identified
30130 20 62 79 20 61 20 75 6e 69 71 75 65 20 50 34 20   by a unique P4 
30140 76 61 6c 75 65 2e 20 54 68 65 20 66 69 72 73 74  value. The first
30150 20 73 65 74 0a 2a 2a 20 6d 75 73 74 20 68 61 76   set.** must hav
30160 65 20 50 34 3d 3d 30 2c 20 74 68 65 20 66 69 6e  e P4==0, the fin
30170 61 6c 20 73 65 74 20 6d 75 73 74 20 68 61 76 65  al set must have
30180 20 50 34 3d 3d 2d 31 2c 20 61 6e 64 20 66 6f 72   P4==-1, and for
30190 20 61 6c 6c 20 6f 74 68 65 72 20 73 65 74 73 0a   all other sets.
301a0 2a 2a 20 6d 75 73 74 20 68 61 76 65 20 50 34 3e  ** must have P4>
301b0 30 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 61 6c  0..**.** This al
301c0 6c 6f 77 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f  lows optimizatio
301d0 6e 73 3a 20 28 61 29 20 77 68 65 6e 20 50 34 3d  ns: (a) when P4=
301e0 3d 30 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e  =0 there is no n
301f0 65 65 64 20 74 6f 20 74 65 73 74 0a 2a 2a 20 74  eed to test.** t
30200 68 65 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74  he RowSet object
30210 20 66 6f 72 20 50 33 2c 20 61 73 20 69 74 20 69   for P3, as it i
30220 73 20 67 75 61 72 61 6e 74 65 65 64 20 6e 6f 74  s guaranteed not
30230 20 74 6f 20 63 6f 6e 74 61 69 6e 20 69 74 2c 0a   to contain it,.
30240 2a 2a 20 28 62 29 20 77 68 65 6e 20 50 34 3d 3d  ** (b) when P4==
30250 2d 31 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e  -1 there is no n
30260 65 65 64 20 74 6f 20 69 6e 73 65 72 74 20 74 68  eed to insert th
30270 65 20 76 61 6c 75 65 2c 20 61 73 20 69 74 20 77  e value, as it w
30280 69 6c 6c 0a 2a 2a 20 6e 65 76 65 72 20 62 65 20  ill.** never be 
30290 74 65 73 74 65 64 20 66 6f 72 2c 20 61 6e 64 20  tested for, and 
302a0 28 63 29 20 77 68 65 6e 20 61 20 76 61 6c 75 65  (c) when a value
302b0 20 74 68 61 74 20 69 73 20 70 61 72 74 20 6f 66   that is part of
302c0 20 73 65 74 20 58 20 69 73 0a 2a 2a 20 69 6e 73   set X is.** ins
302d0 65 72 74 65 64 2c 20 74 68 65 72 65 20 69 73 20  erted, there is 
302e0 6e 6f 20 6e 65 65 64 20 74 6f 20 73 65 61 72 63  no need to searc
302f0 68 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 20  h to see if the 
30300 73 61 6d 65 20 76 61 6c 75 65 20 77 61 73 0a 2a  same value was.*
30310 2a 20 70 72 65 76 69 6f 75 73 6c 79 20 69 6e 73  * previously ins
30320 65 72 74 65 64 20 61 73 20 70 61 72 74 20 6f 66  erted as part of
30330 20 73 65 74 20 58 20 28 6f 6e 6c 79 20 69 66 20   set X (only if 
30340 69 74 20 77 61 73 20 70 72 65 76 69 6f 75 73 6c  it was previousl
30350 79 0a 2a 2a 20 69 6e 73 65 72 74 65 64 20 61 73  y.** inserted as
30360 20 70 61 72 74 20 6f 66 20 73 6f 6d 65 20 6f 74   part of some ot
30370 68 65 72 20 73 65 74 29 2e 0a 2a 2f 0a 63 61 73  her set)..*/.cas
30380 65 20 4f 50 5f 52 6f 77 53 65 74 54 65 73 74 3a  e OP_RowSetTest:
30390 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
303a0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
303b0 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e  in1, in3 */.  in
303c0 74 20 69 53 65 74 3b 0a 20 20 69 6e 74 20 65 78  t iSet;.  int ex
303d0 69 73 74 73 3b 0a 0a 20 20 70 49 6e 31 20 3d 20  ists;..  pIn1 = 
303e0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
303f0 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
30400 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 53 65 74 20  Op->p3];.  iSet 
30410 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 61  = pOp->p4.i;.  a
30420 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61  ssert( pIn3->fla
30430 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 0a 20  gs&MEM_Int );.. 
30440 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20   /* If there is 
30450 61 6e 79 74 68 69 6e 67 20 6f 74 68 65 72 20 74  anything other t
30460 68 61 6e 20 61 20 72 6f 77 73 65 74 20 6f 62 6a  han a rowset obj
30470 65 63 74 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65  ect in memory ce
30480 6c 6c 20 50 31 2c 0a 20 20 2a 2a 20 64 65 6c 65  ll P1,.  ** dele
30490 74 65 20 69 74 20 6e 6f 77 20 61 6e 64 20 69 6e  te it now and in
304a0 69 74 69 61 6c 69 7a 65 20 50 31 20 77 69 74 68  itialize P1 with
304b0 20 61 6e 20 65 6d 70 74 79 20 72 6f 77 73 65 74   an empty rowset
304c0 0a 20 20 2a 2f 0a 20 20 69 66 28 20 28 70 49 6e  .  */.  if( (pIn
304d0 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  1->flags & MEM_R
304e0 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20  owSet)==0 ){.   
304f0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
30500 65 74 52 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a  etRowSet(pIn1);.
30510 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66      if( (pIn1->f
30520 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65  lags & MEM_RowSe
30530 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  t)==0 ) goto no_
30540 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65  mem;.  }..  asse
30550 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
30560 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 61  =P4_INT32 );.  a
30570 73 73 65 72 74 28 20 69 53 65 74 3d 3d 2d 31 20  ssert( iSet==-1 
30580 7c 7c 20 69 53 65 74 3e 3d 30 20 29 3b 0a 20 20  || iSet>=0 );.  
30590 69 66 28 20 69 53 65 74 20 29 7b 0a 20 20 20 20  if( iSet ){.    
305a0 65 78 69 73 74 73 20 3d 20 73 71 6c 69 74 65 33  exists = sqlite3
305b0 52 6f 77 53 65 74 54 65 73 74 28 70 49 6e 31 2d  RowSetTest(pIn1-
305c0 3e 75 2e 70 52 6f 77 53 65 74 2c 20 69 53 65 74  >u.pRowSet, iSet
305d0 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20  , pIn3->u.i);.  
305e0 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
305f0 6e 28 65 78 69 73 74 73 21 3d 30 2c 32 29 3b 0a  n(exists!=0,2);.
30600 20 20 20 20 69 66 28 20 65 78 69 73 74 73 20 29      if( exists )
30610 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
30620 3b 0a 20 20 7d 0a 20 20 69 66 28 20 69 53 65 74  ;.  }.  if( iSet
30630 3e 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  >=0 ){.    sqlit
30640 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70  e3RowSetInsert(p
30650 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20  In1->u.pRowSet, 
30660 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 7d 0a  pIn3->u.i);.  }.
30670 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66    break;.}...#if
30680 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
30690 5f 54 52 49 47 47 45 52 0a 0a 2f 2a 20 4f 70 63  _TRIGGER../* Opc
306a0 6f 64 65 3a 20 50 72 6f 67 72 61 6d 20 50 31 20  ode: Program P1 
306b0 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
306c0 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 74 72  * Execute the tr
306d0 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20 70 61  igger program pa
306e0 73 73 65 64 20 61 73 20 50 34 20 28 74 79 70 65  ssed as P4 (type
306f0 20 50 34 5f 53 55 42 50 52 4f 47 52 41 4d 29 2e   P4_SUBPROGRAM).
30700 20 0a 2a 2a 0a 2a 2a 20 50 31 20 63 6f 6e 74 61   .**.** P1 conta
30710 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20  ins the address 
30720 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65  of the memory ce
30730 6c 6c 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73  ll that contains
30740 20 74 68 65 20 66 69 72 73 74 20 6d 65 6d 6f 72   the first memor
30750 79 20 0a 2a 2a 20 63 65 6c 6c 20 69 6e 20 61 6e  y .** cell in an
30760 20 61 72 72 61 79 20 6f 66 20 76 61 6c 75 65 73   array of values
30770 20 75 73 65 64 20 61 73 20 61 72 67 75 6d 65 6e   used as argumen
30780 74 73 20 74 6f 20 74 68 65 20 73 75 62 2d 70 72  ts to the sub-pr
30790 6f 67 72 61 6d 2e 20 50 32 20 0a 2a 2a 20 63 6f  ogram. P2 .** co
307a0 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64 72 65  ntains the addre
307b0 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66  ss to jump to if
307c0 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d   the sub-program
307d0 20 74 68 72 6f 77 73 20 61 6e 20 49 47 4e 4f 52   throws an IGNOR
307e0 45 20 0a 2a 2a 20 65 78 63 65 70 74 69 6f 6e 20  E .** exception 
307f0 75 73 69 6e 67 20 74 68 65 20 52 41 49 53 45 28  using the RAISE(
30800 29 20 66 75 6e 63 74 69 6f 6e 2e 20 52 65 67 69  ) function. Regi
30810 73 74 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73  ster P3 contains
30820 20 74 68 65 20 61 64 64 72 65 73 73 20 0a 2a 2a   the address .**
30830 20 6f 66 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c   of a memory cel
30840 6c 20 69 6e 20 74 68 69 73 20 28 74 68 65 20 70  l in this (the p
30850 61 72 65 6e 74 29 20 56 4d 20 74 68 61 74 20 69  arent) VM that i
30860 73 20 75 73 65 64 20 74 6f 20 61 6c 6c 6f 63 61  s used to alloca
30870 74 65 20 74 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72  te the .** memor
30880 79 20 72 65 71 75 69 72 65 64 20 62 79 20 74 68  y required by th
30890 65 20 73 75 62 2d 76 64 62 65 20 61 74 20 72 75  e sub-vdbe at ru
308a0 6e 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20  ntime..**.** P4 
308b0 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
308c0 74 68 65 20 56 4d 20 63 6f 6e 74 61 69 6e 69 6e  the VM containin
308d0 67 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72  g the trigger pr
308e0 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ogram..**.** If 
308f0 50 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  P5 is non-zero, 
30900 74 68 65 6e 20 72 65 63 75 72 73 69 76 65 20 70  then recursive p
30910 72 6f 67 72 61 6d 20 69 6e 76 6f 63 61 74 69 6f  rogram invocatio
30920 6e 20 69 73 20 65 6e 61 62 6c 65 64 2e 0a 2a 2f  n is enabled..*/
30930 0a 63 61 73 65 20 4f 50 5f 50 72 6f 67 72 61 6d  .case OP_Program
30940 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
30950 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d  mp */.  int nMem
30960 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
30970 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d  /* Number of mem
30980 6f 72 79 20 72 65 67 69 73 74 65 72 73 20 66 6f  ory registers fo
30990 72 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f  r sub-program */
309a0 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 20 20 20  .  int nByte;   
309b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 79             /* By
309c0 74 65 73 20 6f 66 20 72 75 6e 74 69 6d 65 20 73  tes of runtime s
309d0 70 61 63 65 20 72 65 71 75 69 72 65 64 20 66 6f  pace required fo
309e0 72 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f  r sub-program */
309f0 0a 20 20 4d 65 6d 20 2a 70 52 74 3b 20 20 20 20  .  Mem *pRt;    
30a00 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
30a10 67 69 73 74 65 72 20 74 6f 20 61 6c 6c 6f 63 61  gister to alloca
30a20 74 65 20 72 75 6e 74 69 6d 65 20 73 70 61 63 65  te runtime space
30a30 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b   */.  Mem *pMem;
30a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
30a50 20 55 73 65 64 20 74 6f 20 69 74 65 72 61 74 65   Used to iterate
30a60 20 74 68 72 6f 75 67 68 20 6d 65 6d 6f 72 79 20   through memory 
30a70 63 65 6c 6c 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a  cells */.  Mem *
30a80 70 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20  pEnd;           
30a90 20 20 20 2f 2a 20 4c 61 73 74 20 6d 65 6d 6f 72     /* Last memor
30aa0 79 20 63 65 6c 6c 20 69 6e 20 6e 65 77 20 61 72  y cell in new ar
30ab0 72 61 79 20 2a 2f 0a 20 20 56 64 62 65 46 72 61  ray */.  VdbeFra
30ac0 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20 20 20 20  me *pFrame;     
30ad0 20 2f 2a 20 4e 65 77 20 76 64 62 65 20 66 72 61   /* New vdbe fra
30ae0 6d 65 20 74 6f 20 65 78 65 63 75 74 65 20 69 6e  me to execute in
30af0 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72 61 6d   */.  SubProgram
30b00 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a   *pProgram;   /*
30b10 20 53 75 62 2d 70 72 6f 67 72 61 6d 20 74 6f 20   Sub-program to 
30b20 65 78 65 63 75 74 65 20 2a 2f 0a 20 20 76 6f 69  execute */.  voi
30b30 64 20 2a 74 3b 20 20 20 20 20 20 20 20 20 20 20  d *t;           
30b40 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 69 64       /* Token id
30b50 65 6e 74 69 66 79 69 6e 67 20 74 72 69 67 67 65  entifying trigge
30b60 72 20 2a 2f 0a 0a 20 20 70 50 72 6f 67 72 61 6d  r */..  pProgram
30b70 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 50 72 6f 67   = pOp->p4.pProg
30b80 72 61 6d 3b 0a 20 20 70 52 74 20 3d 20 26 61 4d  ram;.  pRt = &aM
30b90 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61  em[pOp->p3];.  a
30ba0 73 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d  ssert( pProgram-
30bb0 3e 6e 4f 70 3e 30 20 29 3b 0a 20 20 0a 20 20 2f  >nOp>0 );.  .  /
30bc0 2a 20 49 66 20 74 68 65 20 70 35 20 66 6c 61 67  * If the p5 flag
30bd0 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e 20   is clear, then 
30be0 72 65 63 75 72 73 69 76 65 20 69 6e 76 6f 63 61  recursive invoca
30bf0 74 69 6f 6e 20 6f 66 20 74 72 69 67 67 65 72 73  tion of triggers
30c00 20 69 73 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c   is .  ** disabl
30c10 65 64 20 66 6f 72 20 62 61 63 6b 77 61 72 64 73  ed for backwards
30c20 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 28   compatibility (
30c30 70 35 20 69 73 20 73 65 74 20 69 66 20 74 68 69  p5 is set if thi
30c40 73 20 73 75 62 2d 70 72 6f 67 72 61 6d 0a 20 20  s sub-program.  
30c50 2a 2a 20 69 73 20 72 65 61 6c 6c 79 20 61 20 74  ** is really a t
30c60 72 69 67 67 65 72 2c 20 6e 6f 74 20 61 20 66 6f  rigger, not a fo
30c70 72 65 69 67 6e 20 6b 65 79 20 61 63 74 69 6f 6e  reign key action
30c80 2c 20 61 6e 64 20 74 68 65 20 66 6c 61 67 20 73  , and the flag s
30c90 65 74 0a 20 20 2a 2a 20 61 6e 64 20 63 6c 65 61  et.  ** and clea
30ca0 72 65 64 20 62 79 20 74 68 65 20 22 50 52 41 47  red by the "PRAG
30cb0 4d 41 20 72 65 63 75 72 73 69 76 65 5f 74 72 69  MA recursive_tri
30cc0 67 67 65 72 73 22 20 63 6f 6d 6d 61 6e 64 20 69  ggers" command i
30cd0 73 20 63 6c 65 61 72 29 2e 0a 20 20 2a 2a 20 0a  s clear)..  ** .
30ce0 20 20 2a 2a 20 49 74 20 69 73 20 72 65 63 75 72    ** It is recur
30cf0 73 69 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20  sive invocation 
30d00 6f 66 20 74 72 69 67 67 65 72 73 2c 20 61 74 20  of triggers, at 
30d10 74 68 65 20 53 51 4c 20 6c 65 76 65 6c 2c 20 74  the SQL level, t
30d20 68 61 74 20 69 73 20 0a 20 20 2a 2a 20 64 69 73  hat is .  ** dis
30d30 61 62 6c 65 64 2e 20 49 6e 20 73 6f 6d 65 20 63  abled. In some c
30d40 61 73 65 73 20 61 20 73 69 6e 67 6c 65 20 74 72  ases a single tr
30d50 69 67 67 65 72 20 6d 61 79 20 67 65 6e 65 72 61  igger may genera
30d60 74 65 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65  te more than one
30d70 20 0a 20 20 2a 2a 20 53 75 62 50 72 6f 67 72 61   .  ** SubProgra
30d80 6d 20 28 69 66 20 74 68 65 20 74 72 69 67 67 65  m (if the trigge
30d90 72 20 6d 61 79 20 62 65 20 65 78 65 63 75 74 65  r may be execute
30da0 64 20 77 69 74 68 20 6d 6f 72 65 20 74 68 61 6e  d with more than
30db0 20 6f 6e 65 20 64 69 66 66 65 72 65 6e 74 20 0a   one different .
30dc0 20 20 2a 2a 20 4f 4e 20 43 4f 4e 46 4c 49 43 54    ** ON CONFLICT
30dd0 20 61 6c 67 6f 72 69 74 68 6d 29 2e 20 53 75 62   algorithm). Sub
30de0 50 72 6f 67 72 61 6d 20 73 74 72 75 63 74 75 72  Program structur
30df0 65 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  es associated wi
30e00 74 68 20 61 0a 20 20 2a 2a 20 73 69 6e 67 6c 65  th a.  ** single
30e10 20 74 72 69 67 67 65 72 20 61 6c 6c 20 68 61 76   trigger all hav
30e20 65 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65  e the same value
30e30 20 66 6f 72 20 74 68 65 20 53 75 62 50 72 6f 67   for the SubProg
30e40 72 61 6d 2e 74 6f 6b 65 6e 20 0a 20 20 2a 2a 20  ram.token .  ** 
30e50 76 61 72 69 61 62 6c 65 2e 20 20 2a 2f 0a 20 20  variable.  */.  
30e60 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20  if( pOp->p5 ){. 
30e70 20 20 20 74 20 3d 20 70 50 72 6f 67 72 61 6d 2d     t = pProgram-
30e80 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20 66 6f 72 28  >token;.    for(
30e90 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65  pFrame=p->pFrame
30ea0 3b 20 70 46 72 61 6d 65 20 26 26 20 70 46 72 61  ; pFrame && pFra
30eb0 6d 65 2d 3e 74 6f 6b 65 6e 21 3d 74 3b 20 70 46  me->token!=t; pF
30ec0 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61  rame=pFrame->pPa
30ed0 72 65 6e 74 29 3b 0a 20 20 20 20 69 66 28 20 70  rent);.    if( p
30ee0 46 72 61 6d 65 20 29 20 62 72 65 61 6b 3b 0a 20  Frame ) break;. 
30ef0 20 7d 0a 0a 20 20 69 66 28 20 70 2d 3e 6e 46 72   }..  if( p->nFr
30f00 61 6d 65 3e 3d 64 62 2d 3e 61 4c 69 6d 69 74 5b  ame>=db->aLimit[
30f10 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 54 52 49  SQLITE_LIMIT_TRI
30f20 47 47 45 52 5f 44 45 50 54 48 5d 20 29 7b 0a 20  GGER_DEPTH] ){. 
30f30 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45     rc = SQLITE_E
30f40 52 52 4f 52 3b 0a 20 20 20 20 73 71 6c 69 74 65  RROR;.    sqlite
30f50 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 74  3VdbeError(p, "t
30f60 6f 6f 20 6d 61 6e 79 20 6c 65 76 65 6c 73 20 6f  oo many levels o
30f70 66 20 74 72 69 67 67 65 72 20 72 65 63 75 72 73  f trigger recurs
30f80 69 6f 6e 22 29 3b 0a 20 20 20 20 67 6f 74 6f 20  ion");.    goto 
30f90 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
30fa0 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52 65  or;.  }..  /* Re
30fb0 67 69 73 74 65 72 20 70 52 74 20 69 73 20 75 73  gister pRt is us
30fc0 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20  ed to store the 
30fd0 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20  memory required 
30fe0 74 6f 20 73 61 76 65 20 74 68 65 20 73 74 61 74  to save the stat
30ff0 65 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 63 75  e.  ** of the cu
31000 72 72 65 6e 74 20 70 72 6f 67 72 61 6d 2c 20 61  rrent program, a
31010 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79 20 72 65  nd the memory re
31020 71 75 69 72 65 64 20 61 74 20 72 75 6e 74 69 6d  quired at runtim
31030 65 20 74 6f 20 65 78 65 63 75 74 65 0a 20 20 2a  e to execute.  *
31040 2a 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72  * the trigger pr
31050 6f 67 72 61 6d 2e 20 49 66 20 74 68 69 73 20 74  ogram. If this t
31060 72 69 67 67 65 72 20 68 61 73 20 62 65 65 6e 20  rigger has been 
31070 66 69 72 65 64 20 62 65 66 6f 72 65 2c 20 74 68  fired before, th
31080 65 6e 20 70 52 74 20 0a 20 20 2a 2a 20 69 73 20  en pRt .  ** is 
31090 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61 74 65  already allocate
310a0 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 74  d. Otherwise, it
310b0 20 6d 75 73 74 20 62 65 20 69 6e 69 74 69 61 6c   must be initial
310c0 69 7a 65 64 2e 20 20 2a 2f 0a 20 20 69 66 28 20  ized.  */.  if( 
310d0 28 70 52 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  (pRt->flags&MEM_
310e0 46 72 61 6d 65 29 3d 3d 30 20 29 7b 0a 20 20 20  Frame)==0 ){.   
310f0 20 2f 2a 20 53 75 62 50 72 6f 67 72 61 6d 2e 6e   /* SubProgram.n
31100 4d 65 6d 20 69 73 20 73 65 74 20 74 6f 20 74 68  Mem is set to th
31110 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f  e number of memo
31120 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20 62 79  ry cells used by
31130 20 74 68 65 20 0a 20 20 20 20 2a 2a 20 70 72 6f   the .    ** pro
31140 67 72 61 6d 20 73 74 6f 72 65 64 20 69 6e 20 53  gram stored in S
31150 75 62 50 72 6f 67 72 61 6d 2e 61 4f 70 2e 20 41  ubProgram.aOp. A
31160 73 20 77 65 6c 6c 20 61 73 20 74 68 65 73 65 2c  s well as these,
31170 20 6f 6e 65 20 6d 65 6d 6f 72 79 0a 20 20 20 20   one memory.    
31180 2a 2a 20 63 65 6c 6c 20 69 73 20 72 65 71 75 69  ** cell is requi
31190 72 65 64 20 66 6f 72 20 65 61 63 68 20 63 75 72  red for each cur
311a0 73 6f 72 20 75 73 65 64 20 62 79 20 74 68 65 20  sor used by the 
311b0 70 72 6f 67 72 61 6d 2e 20 53 65 74 20 6c 6f 63  program. Set loc
311c0 61 6c 0a 20 20 20 20 2a 2a 20 76 61 72 69 61 62  al.    ** variab
311d0 6c 65 20 6e 4d 65 6d 20 28 61 6e 64 20 6c 61 74  le nMem (and lat
311e0 65 72 2c 20 56 64 62 65 46 72 61 6d 65 2e 6e 43  er, VdbeFrame.nC
311f0 68 69 6c 64 4d 65 6d 29 20 74 6f 20 74 68 69 73  hildMem) to this
31200 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a 20   value..    */. 
31210 20 20 20 6e 4d 65 6d 20 3d 20 70 50 72 6f 67 72     nMem = pProgr
31220 61 6d 2d 3e 6e 4d 65 6d 20 2b 20 70 50 72 6f 67  am->nMem + pProg
31230 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 61  ram->nCsr;.    a
31240 73 73 65 72 74 28 20 6e 4d 65 6d 3e 30 20 29 3b  ssert( nMem>0 );
31250 0a 20 20 20 20 69 66 28 20 70 50 72 6f 67 72 61  .    if( pProgra
31260 6d 2d 3e 6e 43 73 72 3d 3d 30 20 29 20 6e 4d 65  m->nCsr==0 ) nMe
31270 6d 2b 2b 3b 0a 20 20 20 20 6e 42 79 74 65 20 3d  m++;.    nByte =
31280 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 56   ROUND8(sizeof(V
31290 64 62 65 46 72 61 6d 65 29 29 0a 20 20 20 20 20  dbeFrame)).     
312a0 20 20 20 20 20 20 20 20 20 2b 20 6e 4d 65 6d 20           + nMem 
312b0 2a 20 73 69 7a 65 6f 66 28 4d 65 6d 29 0a 20 20  * sizeof(Mem).  
312c0 20 20 20 20 20 20 20 20 20 20 20 20 2b 20 70 50              + pP
312d0 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 20 2a 20 73  rogram->nCsr * s
312e0 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72  izeof(VdbeCursor
312f0 2a 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *).             
31300 20 2b 20 28 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f   + (pProgram->nO
31310 70 20 2b 20 37 29 2f 38 3b 0a 20 20 20 20 70 46  p + 7)/8;.    pF
31320 72 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 44 62  rame = sqlite3Db
31330 4d 61 6c 6c 6f 63 5a 65 72 6f 28 64 62 2c 20 6e  MallocZero(db, n
31340 42 79 74 65 29 3b 0a 20 20 20 20 69 66 28 20 21  Byte);.    if( !
31350 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 20 20  pFrame ){.      
31360 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20  goto no_mem;.   
31370 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64   }.    sqlite3Vd
31380 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 70 52 74  beMemRelease(pRt
31390 29 3b 0a 20 20 20 20 70 52 74 2d 3e 66 6c 61 67  );.    pRt->flag
313a0 73 20 3d 20 4d 45 4d 5f 46 72 61 6d 65 3b 0a 20  s = MEM_Frame;. 
313b0 20 20 20 70 52 74 2d 3e 75 2e 70 46 72 61 6d 65     pRt->u.pFrame
313c0 20 3d 20 70 46 72 61 6d 65 3b 0a 0a 20 20 20 20   = pFrame;..    
313d0 70 46 72 61 6d 65 2d 3e 76 20 3d 20 70 3b 0a 20  pFrame->v = p;. 
313e0 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c     pFrame->nChil
313f0 64 4d 65 6d 20 3d 20 6e 4d 65 6d 3b 0a 20 20 20  dMem = nMem;.   
31400 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43   pFrame->nChildC
31410 73 72 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  sr = pProgram->n
31420 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  Csr;.    pFrame-
31430 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f 70 20  >pc = (int)(pOp 
31440 2d 20 61 4f 70 29 3b 0a 20 20 20 20 70 46 72 61  - aOp);.    pFra
31450 6d 65 2d 3e 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d  me->aMem = p->aM
31460 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  em;.    pFrame->
31470 6e 4d 65 6d 20 3d 20 70 2d 3e 6e 4d 65 6d 3b 0a  nMem = p->nMem;.
31480 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 70 43 73      pFrame->apCs
31490 72 20 3d 20 70 2d 3e 61 70 43 73 72 3b 0a 20 20  r = p->apCsr;.  
314a0 20 20 70 46 72 61 6d 65 2d 3e 6e 43 75 72 73 6f    pFrame->nCurso
314b0 72 20 3d 20 70 2d 3e 6e 43 75 72 73 6f 72 3b 0a  r = p->nCursor;.
314c0 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4f 70 20      pFrame->aOp 
314d0 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20 20 70 46  = p->aOp;.    pF
314e0 72 61 6d 65 2d 3e 6e 4f 70 20 3d 20 70 2d 3e 6e  rame->nOp = p->n
314f0 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  Op;.    pFrame->
31500 74 6f 6b 65 6e 20 3d 20 70 50 72 6f 67 72 61 6d  token = pProgram
31510 2d 3e 74 6f 6b 65 6e 3b 0a 23 69 66 64 65 66 20  ->token;.#ifdef 
31520 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
31530 4d 54 5f 53 43 41 4e 53 54 41 54 55 53 0a 20 20  MT_SCANSTATUS.  
31540 20 20 70 46 72 61 6d 65 2d 3e 61 6e 45 78 65 63    pFrame->anExec
31550 20 3d 20 70 2d 3e 61 6e 45 78 65 63 3b 0a 23 65   = p->anExec;.#e
31560 6e 64 69 66 0a 0a 20 20 20 20 70 45 6e 64 20 3d  ndif..    pEnd =
31570 20 26 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70   &VdbeFrameMem(p
31580 46 72 61 6d 65 29 5b 70 46 72 61 6d 65 2d 3e 6e  Frame)[pFrame->n
31590 43 68 69 6c 64 4d 65 6d 5d 3b 0a 20 20 20 20 66  ChildMem];.    f
315a0 6f 72 28 70 4d 65 6d 3d 56 64 62 65 46 72 61 6d  or(pMem=VdbeFram
315b0 65 4d 65 6d 28 70 46 72 61 6d 65 29 3b 20 70 4d  eMem(pFrame); pM
315c0 65 6d 21 3d 70 45 6e 64 3b 20 70 4d 65 6d 2b 2b  em!=pEnd; pMem++
315d0 29 7b 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 66  ){.      pMem->f
315e0 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e 64 65 66  lags = MEM_Undef
315f0 69 6e 65 64 3b 0a 20 20 20 20 20 20 70 4d 65 6d  ined;.      pMem
31600 2d 3e 64 62 20 3d 20 64 62 3b 0a 20 20 20 20 7d  ->db = db;.    }
31610 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 46  .  }else{.    pF
31620 72 61 6d 65 20 3d 20 70 52 74 2d 3e 75 2e 70 46  rame = pRt->u.pF
31630 72 61 6d 65 3b 0a 20 20 20 20 61 73 73 65 72 74  rame;.    assert
31640 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d  ( pProgram->nMem
31650 2b 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d  +pProgram->nCsr=
31660 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d  =pFrame->nChildM
31670 65 6d 20 0a 20 20 20 20 20 20 20 20 7c 7c 20 28  em .        || (
31680 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d  pProgram->nCsr==
31690 30 20 26 26 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  0 && pProgram->n
316a0 4d 65 6d 2b 31 3d 3d 70 46 72 61 6d 65 2d 3e 6e  Mem+1==pFrame->n
316b0 43 68 69 6c 64 4d 65 6d 29 20 29 3b 0a 20 20 20  ChildMem) );.   
316c0 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61   assert( pProgra
316d0 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d  m->nCsr==pFrame-
316e0 3e 6e 43 68 69 6c 64 43 73 72 20 29 3b 0a 20 20  >nChildCsr );.  
316f0 20 20 61 73 73 65 72 74 28 20 28 69 6e 74 29 28    assert( (int)(
31700 70 4f 70 20 2d 20 61 4f 70 29 3d 3d 70 46 72 61  pOp - aOp)==pFra
31710 6d 65 2d 3e 70 63 20 29 3b 0a 20 20 7d 0a 0a 20  me->pc );.  }.. 
31720 20 70 2d 3e 6e 46 72 61 6d 65 2b 2b 3b 0a 20 20   p->nFrame++;.  
31730 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 20  pFrame->pParent 
31740 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70  = p->pFrame;.  p
31750 46 72 61 6d 65 2d 3e 6c 61 73 74 52 6f 77 69 64  Frame->lastRowid
31760 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64   = db->lastRowid
31770 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 61  ;.  pFrame->nCha
31780 6e 67 65 20 3d 20 70 2d 3e 6e 43 68 61 6e 67 65  nge = p->nChange
31790 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6e 44 62 43  ;.  pFrame->nDbC
317a0 68 61 6e 67 65 20 3d 20 70 2d 3e 64 62 2d 3e 6e  hange = p->db->n
317b0 43 68 61 6e 67 65 3b 0a 20 20 61 73 73 65 72 74  Change;.  assert
317c0 28 20 70 46 72 61 6d 65 2d 3e 70 41 75 78 44 61  ( pFrame->pAuxDa
317d0 74 61 3d 3d 30 20 29 3b 0a 20 20 70 46 72 61 6d  ta==0 );.  pFram
317e0 65 2d 3e 70 41 75 78 44 61 74 61 20 3d 20 70 2d  e->pAuxData = p-
317f0 3e 70 41 75 78 44 61 74 61 3b 0a 20 20 70 2d 3e  >pAuxData;.  p->
31800 70 41 75 78 44 61 74 61 20 3d 20 30 3b 0a 20 20  pAuxData = 0;.  
31810 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a  p->nChange = 0;.
31820 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70 46    p->pFrame = pF
31830 72 61 6d 65 3b 0a 20 20 70 2d 3e 61 4d 65 6d 20  rame;.  p->aMem 
31840 3d 20 61 4d 65 6d 20 3d 20 56 64 62 65 46 72 61  = aMem = VdbeFra
31850 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 3b 0a 20  meMem(pFrame);. 
31860 20 70 2d 3e 6e 4d 65 6d 20 3d 20 70 46 72 61 6d   p->nMem = pFram
31870 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 3b 0a 20 20  e->nChildMem;.  
31880 70 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 28 75 31  p->nCursor = (u1
31890 36 29 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64  6)pFrame->nChild
318a0 43 73 72 3b 0a 20 20 70 2d 3e 61 70 43 73 72 20  Csr;.  p->apCsr 
318b0 3d 20 28 56 64 62 65 43 75 72 73 6f 72 20 2a 2a  = (VdbeCursor **
318c0 29 26 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 5d 3b  )&aMem[p->nMem];
318d0 0a 20 20 70 46 72 61 6d 65 2d 3e 61 4f 6e 63 65  .  pFrame->aOnce
318e0 20 3d 20 28 75 38 2a 29 26 70 2d 3e 61 70 43 73   = (u8*)&p->apCs
318f0 72 5b 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72  r[pProgram->nCsr
31900 5d 3b 0a 20 20 6d 65 6d 73 65 74 28 70 46 72 61  ];.  memset(pFra
31910 6d 65 2d 3e 61 4f 6e 63 65 2c 20 30 2c 20 28 70  me->aOnce, 0, (p
31920 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 20 2b 20 37  Program->nOp + 7
31930 29 2f 38 29 3b 0a 20 20 70 2d 3e 61 4f 70 20 3d  )/8);.  p->aOp =
31940 20 61 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d   aOp = pProgram-
31950 3e 61 4f 70 3b 0a 20 20 70 2d 3e 6e 4f 70 20 3d  >aOp;.  p->nOp =
31960 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3b 0a   pProgram->nOp;.
31970 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
31980 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54  ABLE_STMT_SCANST
31990 41 54 55 53 0a 20 20 70 2d 3e 61 6e 45 78 65 63  ATUS.  p->anExec
319a0 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20 70   = 0;.#endif.  p
319b0 4f 70 20 3d 20 26 61 4f 70 5b 2d 31 5d 3b 0a 0a  Op = &aOp[-1];..
319c0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
319d0 70 63 6f 64 65 3a 20 50 61 72 61 6d 20 50 31 20  pcode: Param P1 
319e0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  P2 * * *.**.** T
319f0 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e  his opcode is on
31a00 6c 79 20 65 76 65 72 20 70 72 65 73 65 6e 74 20  ly ever present 
31a10 69 6e 20 73 75 62 2d 70 72 6f 67 72 61 6d 73 20  in sub-programs 
31a20 63 61 6c 6c 65 64 20 76 69 61 20 74 68 65 20 0a  called via the .
31a30 2a 2a 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e  ** OP_Program in
31a40 73 74 72 75 63 74 69 6f 6e 2e 20 43 6f 70 79 20  struction. Copy 
31a50 61 20 76 61 6c 75 65 20 63 75 72 72 65 6e 74 6c  a value currentl
31a60 79 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6d 65  y stored in a me
31a70 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 6f 66  mory .** cell of
31a80 20 74 68 65 20 63 61 6c 6c 69 6e 67 20 28 70 61   the calling (pa
31a90 72 65 6e 74 29 20 66 72 61 6d 65 20 74 6f 20 63  rent) frame to c
31aa0 65 6c 6c 20 50 32 20 69 6e 20 74 68 65 20 63 75  ell P2 in the cu
31ab0 72 72 65 6e 74 20 66 72 61 6d 65 73 20 0a 2a 2a  rrent frames .**
31ac0 20 61 64 64 72 65 73 73 20 73 70 61 63 65 2e 20   address space. 
31ad0 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20  This is used by 
31ae0 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73  trigger programs
31af0 20 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 6e   to access the n
31b00 65 77 2e 2a 20 0a 2a 2a 20 61 6e 64 20 6f 6c 64  ew.* .** and old
31b10 2e 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a  .* values..**.**
31b20 20 54 68 65 20 61 64 64 72 65 73 73 20 6f 66 20   The address of 
31b30 74 68 65 20 63 65 6c 6c 20 69 6e 20 74 68 65 20  the cell in the 
31b40 70 61 72 65 6e 74 20 66 72 61 6d 65 20 69 73 20  parent frame is 
31b50 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 61 64  determined by ad
31b60 64 69 6e 67 0a 2a 2a 20 74 68 65 20 76 61 6c 75  ding.** the valu
31b70 65 20 6f 66 20 74 68 65 20 50 31 20 61 72 67 75  e of the P1 argu
31b80 6d 65 6e 74 20 74 6f 20 74 68 65 20 76 61 6c 75  ment to the valu
31b90 65 20 6f 66 20 74 68 65 20 50 31 20 61 72 67 75  e of the P1 argu
31ba0 6d 65 6e 74 20 74 6f 20 74 68 65 0a 2a 2a 20 63  ment to the.** c
31bb0 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61  alling OP_Progra
31bc0 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  m instruction..*
31bd0 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 61 6d 3a  /.case OP_Param:
31be0 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
31bf0 6f 75 74 32 20 2a 2f 0a 20 20 56 64 62 65 46 72  out2 */.  VdbeFr
31c00 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 4d  ame *pFrame;.  M
31c10 65 6d 20 2a 70 49 6e 3b 0a 20 20 70 4f 75 74 20  em *pIn;.  pOut 
31c20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
31c30 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 46 72 61  (p, pOp);.  pFra
31c40 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a  me = p->pFrame;.
31c50 20 20 70 49 6e 20 3d 20 26 70 46 72 61 6d 65 2d    pIn = &pFrame-
31c60 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 20 2b 20  >aMem[pOp->p1 + 
31c70 70 46 72 61 6d 65 2d 3e 61 4f 70 5b 70 46 72 61  pFrame->aOp[pFra
31c80 6d 65 2d 3e 70 63 5d 2e 70 31 5d 3b 20 20 20 0a  me->pc].p1];   .
31c90 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
31ca0 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74  ShallowCopy(pOut
31cb0 2c 20 70 49 6e 2c 20 4d 45 4d 5f 45 70 68 65 6d  , pIn, MEM_Ephem
31cc0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23  );.  break;.}..#
31cd0 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66  endif /* #ifndef
31ce0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49   SQLITE_OMIT_TRI
31cf0 47 47 45 52 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  GGER */..#ifndef
31d00 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52   SQLITE_OMIT_FOR
31d10 45 49 47 4e 5f 4b 45 59 0a 2f 2a 20 4f 70 63 6f  EIGN_KEY./* Opco
31d20 64 65 3a 20 46 6b 43 6f 75 6e 74 65 72 20 50 31  de: FkCounter P1
31d30 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
31d40 6f 70 73 69 73 3a 20 66 6b 63 74 72 5b 50 31 5d  opsis: fkctr[P1]
31d50 2b 3d 50 32 0a 2a 2a 0a 2a 2a 20 49 6e 63 72 65  +=P2.**.** Incre
31d60 6d 65 6e 74 20 61 20 22 63 6f 6e 73 74 72 61 69  ment a "constrai
31d70 6e 74 20 63 6f 75 6e 74 65 72 22 20 62 79 20 50  nt counter" by P
31d80 32 20 28 50 32 20 6d 61 79 20 62 65 20 6e 65 67  2 (P2 may be neg
31d90 61 74 69 76 65 20 6f 72 20 70 6f 73 69 74 69 76  ative or positiv
31da0 65 29 2e 0a 2a 2a 20 49 66 20 50 31 20 69 73 20  e)..** If P1 is 
31db0 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 20 64 61  non-zero, the da
31dc0 74 61 62 61 73 65 20 63 6f 6e 73 74 72 61 69 6e  tabase constrain
31dd0 74 20 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63  t counter is inc
31de0 72 65 6d 65 6e 74 65 64 20 0a 2a 2a 20 28 64 65  remented .** (de
31df0 66 65 72 72 65 64 20 66 6f 72 65 69 67 6e 20 6b  ferred foreign k
31e00 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e  ey constraints).
31e10 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50   Otherwise, if P
31e20 31 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 20 0a  1 is zero, the .
31e30 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 75  ** statement cou
31e40 6e 74 65 72 20 69 73 20 69 6e 63 72 65 6d 65 6e  nter is incremen
31e50 74 65 64 20 28 69 6d 6d 65 64 69 61 74 65 20 66  ted (immediate f
31e60 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
31e70 72 61 69 6e 74 73 29 2e 0a 2a 2f 0a 63 61 73 65  raints)..*/.case
31e80 20 4f 50 5f 46 6b 43 6f 75 6e 74 65 72 3a 20 7b   OP_FkCounter: {
31e90 0a 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73  .  if( db->flags
31ea0 20 26 20 53 51 4c 49 54 45 5f 44 65 66 65 72 46   & SQLITE_DeferF
31eb0 4b 73 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 44  Ks ){.    db->nD
31ec0 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 2b  eferredImmCons +
31ed0 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c  = pOp->p2;.  }el
31ee0 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29  se if( pOp->p1 )
31ef0 7b 0a 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72  {.    db->nDefer
31f00 72 65 64 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e  redCons += pOp->
31f10 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  p2;.  }else{.   
31f20 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e   p->nFkConstrain
31f30 74 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  t += pOp->p2;.  
31f40 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
31f50 20 4f 70 63 6f 64 65 3a 20 46 6b 49 66 5a 65 72   Opcode: FkIfZer
31f60 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  o P1 P2 * * *.**
31f70 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 66 6b   Synopsis: if fk
31f80 63 74 72 5b 50 31 5d 3d 3d 30 20 67 6f 74 6f 20  ctr[P1]==0 goto 
31f90 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  P2.**.** This op
31fa0 63 6f 64 65 20 74 65 73 74 73 20 69 66 20 61 20  code tests if a 
31fb0 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
31fc0 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69  traint-counter i
31fd0 73 20 63 75 72 72 65 6e 74 6c 79 20 7a 65 72 6f  s currently zero
31fe0 2e 0a 2a 2a 20 49 66 20 73 6f 2c 20 6a 75 6d 70  ..** If so, jump
31ff0 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   to instruction 
32000 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 66  P2. Otherwise, f
32010 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
32020 68 65 20 6e 65 78 74 20 0a 2a 2a 20 69 6e 73 74  he next .** inst
32030 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49  ruction..**.** I
32040 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P1 is non-zero
32050 2c 20 74 68 65 6e 20 74 68 65 20 6a 75 6d 70 20  , then the jump 
32060 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20  is taken if the 
32070 64 61 74 61 62 61 73 65 20 63 6f 6e 73 74 72 61  database constra
32080 69 6e 74 2d 63 6f 75 6e 74 65 72 0a 2a 2a 20 69  int-counter.** i
32090 73 20 7a 65 72 6f 20 28 74 68 65 20 6f 6e 65 20  s zero (the one 
320a0 74 68 61 74 20 63 6f 75 6e 74 73 20 64 65 66 65  that counts defe
320b0 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 20  rred constraint 
320c0 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 20 49 66 20  violations). If 
320d0 50 31 20 69 73 0a 2a 2a 20 7a 65 72 6f 2c 20 74  P1 is.** zero, t
320e0 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
320f0 20 69 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e   if the statemen
32100 74 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75  t constraint-cou
32110 6e 74 65 72 20 69 73 20 7a 65 72 6f 0a 2a 2a 20  nter is zero.** 
32120 28 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69  (immediate forei
32130 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
32140 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 0a 2a  t violations)..*
32150 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 49 66 5a 65  /.case OP_FkIfZe
32160 72 6f 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a  ro: {         /*
32170 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 70   jump */.  if( p
32180 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 56 64  Op->p1 ){.    Vd
32190 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 64 62  beBranchTaken(db
321a0 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3d  ->nDeferredCons=
321b0 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72  =0 && db->nDefer
321c0 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32  redImmCons==0, 2
321d0 29 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6e  );.    if( db->n
321e0 44 65 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30 20  DeferredCons==0 
321f0 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64  && db->nDeferred
32200 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20 67 6f 74  ImmCons==0 ) got
32210 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
32220 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42  }else{.    VdbeB
32230 72 61 6e 63 68 54 61 6b 65 6e 28 70 2d 3e 6e 46  ranchTaken(p->nF
32240 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20 26  kConstraint==0 &
32250 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49  & db->nDeferredI
32260 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32 29 3b 0a 20  mmCons==0, 2);. 
32270 20 20 20 69 66 28 20 70 2d 3e 6e 46 6b 43 6f 6e     if( p->nFkCon
32280 73 74 72 61 69 6e 74 3d 3d 30 20 26 26 20 64 62  straint==0 && db
32290 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
322a0 6e 73 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d  ns==0 ) goto jum
322b0 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62  p_to_p2;.  }.  b
322c0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
322d0 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  * #ifndef SQLITE
322e0 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
322f0 59 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  Y */..#ifndef SQ
32300 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e  LITE_OMIT_AUTOIN
32310 43 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63 6f 64  CREMENT./* Opcod
32320 65 3a 20 4d 65 6d 4d 61 78 20 50 31 20 50 32 20  e: MemMax P1 P2 
32330 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
32340 73 3a 20 72 5b 50 31 5d 3d 6d 61 78 28 72 5b 50  s: r[P1]=max(r[P
32350 31 5d 2c 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20  1],r[P2]).**.** 
32360 50 31 20 69 73 20 61 20 72 65 67 69 73 74 65 72  P1 is a register
32370 20 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61   in the root fra
32380 6d 65 20 6f 66 20 74 68 69 73 20 56 4d 20 28 74  me of this VM (t
32390 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 69 73  he root frame is
323a0 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74 20 66 72  .** different fr
323b0 6f 6d 20 74 68 65 20 63 75 72 72 65 6e 74 20 66  om the current f
323c0 72 61 6d 65 20 69 66 20 74 68 69 73 20 69 6e 73  rame if this ins
323d0 74 72 75 63 74 69 6f 6e 20 69 73 20 62 65 69 6e  truction is bein
323e0 67 20 65 78 65 63 75 74 65 64 0a 2a 2a 20 77 69  g executed.** wi
323f0 74 68 69 6e 20 61 20 73 75 62 2d 70 72 6f 67 72  thin a sub-progr
32400 61 6d 29 2e 20 53 65 74 20 74 68 65 20 76 61 6c  am). Set the val
32410 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  ue of register P
32420 31 20 74 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d  1 to the maximum
32430 20 6f 66 20 0a 2a 2a 20 69 74 73 20 63 75 72 72   of .** its curr
32440 65 6e 74 20 76 61 6c 75 65 20 61 6e 64 20 74 68  ent value and th
32450 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
32460 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68  ter P2..**.** Th
32470 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74  is instruction t
32480 68 72 6f 77 73 20 61 6e 20 65 72 72 6f 72 20 69  hrows an error i
32490 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c  f the memory cel
324a0 6c 20 69 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c  l is not initial
324b0 6c 79 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72  ly.** an integer
324c0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 65 6d  ..*/.case OP_Mem
324d0 4d 61 78 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  Max: {        /*
324e0 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 46 72   in2 */.  VdbeFr
324f0 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69  ame *pFrame;.  i
32500 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a  f( p->pFrame ){.
32510 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70      for(pFrame=p
32520 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65  ->pFrame; pFrame
32530 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46 72 61 6d  ->pParent; pFram
32540 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e  e=pFrame->pParen
32550 74 29 3b 0a 20 20 20 20 70 49 6e 31 20 3d 20 26  t);.    pIn1 = &
32560 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70  pFrame->aMem[pOp
32570 2d 3e 70 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a  ->p1];.  }else{.
32580 20 20 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d      pIn1 = &aMem
32590 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 0a 20  [pOp->p1];.  }. 
325a0 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
325b0 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 73  lid(pIn1) );.  s
325c0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
325d0 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20  egerify(pIn1);. 
325e0 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
325f0 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65  p->p2];.  sqlite
32600 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69  3VdbeMemIntegeri
32610 66 79 28 70 49 6e 32 29 3b 0a 20 20 69 66 28 20  fy(pIn2);.  if( 
32620 70 49 6e 31 2d 3e 75 2e 69 3c 70 49 6e 32 2d 3e  pIn1->u.i<pIn2->
32630 75 2e 69 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e  u.i){.    pIn1->
32640 75 2e 69 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b  u.i = pIn2->u.i;
32650 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
32660 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
32670 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d  _OMIT_AUTOINCREM
32680 45 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64  ENT */../* Opcod
32690 65 3a 20 49 66 50 6f 73 20 50 31 20 50 32 20 50  e: IfPos P1 P2 P
326a0 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
326b0 73 3a 20 69 66 20 72 5b 50 31 5d 3e 30 20 74 68  s: if r[P1]>0 th
326c0 65 6e 20 72 5b 50 31 5d 2d 3d 50 33 2c 20 67 6f  en r[P1]-=P3, go
326d0 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69  to P2.**.** Regi
326e0 73 74 65 72 20 50 31 20 6d 75 73 74 20 63 6f 6e  ster P1 must con
326f0 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e  tain an integer.
32700 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65  .** If the value
32710 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20   of register P1 
32720 69 73 20 31 20 6f 72 20 67 72 65 61 74 65 72 2c  is 1 or greater,
32730 20 73 75 62 74 72 61 63 74 20 50 33 20 66 72 6f   subtract P3 fro
32740 6d 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69  m the.** value i
32750 6e 20 50 31 20 61 6e 64 20 6a 75 6d 70 20 74 6f  n P1 and jump to
32760 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68   P2..**.** If th
32770 65 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20  e initial value 
32780 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69  of register P1 i
32790 73 20 6c 65 73 73 20 74 68 61 6e 20 31 2c 20 74  s less than 1, t
327a0 68 65 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65  hen the.** value
327b0 20 69 73 20 75 6e 63 68 61 6e 67 65 64 20 61 6e   is unchanged an
327c0 64 20 63 6f 6e 74 72 6f 6c 20 70 61 73 73 65 73  d control passes
327d0 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
327e0 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
327f0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 50  ..*/.case OP_IfP
32800 6f 73 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  os: {        /* 
32810 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70  jump, in1 */.  p
32820 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
32830 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
32840 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn1->flags&MEM_
32850 49 6e 74 20 29 3b 0a 20 20 56 64 62 65 42 72 61  Int );.  VdbeBra
32860 6e 63 68 54 61 6b 65 6e 28 20 70 49 6e 31 2d 3e  nchTaken( pIn1->
32870 75 2e 69 3e 30 2c 20 32 29 3b 0a 20 20 69 66 28  u.i>0, 2);.  if(
32880 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 20 29 7b 0a   pIn1->u.i>0 ){.
32890 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2d 3d      pIn1->u.i -=
328a0 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 67 6f   pOp->p3;.    go
328b0 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
328c0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
328d0 2a 20 4f 70 63 6f 64 65 3a 20 4f 66 66 73 65 74  * Opcode: Offset
328e0 4c 69 6d 69 74 20 50 31 20 50 32 20 50 33 20 2a  Limit P1 P2 P3 *
328f0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
32900 69 66 20 72 5b 50 31 5d 3e 30 20 74 68 65 6e 20  if r[P1]>0 then 
32910 72 5b 50 32 5d 3d 72 5b 50 31 5d 2b 6d 61 78 28  r[P2]=r[P1]+max(
32920 30 2c 72 5b 50 33 5d 29 20 65 6c 73 65 20 72 5b  0,r[P3]) else r[
32930 50 32 5d 3d 28 2d 31 29 0a 2a 2a 0a 2a 2a 20 54  P2]=(-1).**.** T
32940 68 69 73 20 6f 70 63 6f 64 65 20 70 65 72 66 6f  his opcode perfo
32950 72 6d 73 20 61 20 63 6f 6d 6d 6f 6e 6c 79 20 75  rms a commonly u
32960 73 65 64 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20  sed computation 
32970 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 0a  associated with.
32980 2a 2a 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46 46  ** LIMIT and OFF
32990 53 45 54 20 70 72 6f 63 65 73 73 2e 20 20 72 5b  SET process.  r[
329a0 50 31 5d 20 68 6f 6c 64 73 20 74 68 65 20 6c 69  P1] holds the li
329b0 6d 69 74 20 63 6f 75 6e 74 65 72 2e 20 20 72 5b  mit counter.  r[
329c0 50 33 5d 0a 2a 2a 20 68 6f 6c 64 73 20 74 68 65  P3].** holds the
329d0 20 6f 66 66 73 65 74 20 63 6f 75 6e 74 65 72 2e   offset counter.
329e0 20 20 54 68 65 20 6f 70 63 6f 64 65 20 63 6f 6d    The opcode com
329f0 70 75 74 65 73 20 74 68 65 20 63 6f 6d 62 69 6e  putes the combin
32a00 65 64 20 76 61 6c 75 65 0a 2a 2a 20 6f 66 20 74  ed value.** of t
32a10 68 65 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46 46  he LIMIT and OFF
32a20 53 45 54 20 61 6e 64 20 73 74 6f 72 65 73 20 74  SET and stores t
32a30 68 61 74 20 76 61 6c 75 65 20 69 6e 20 72 5b 50  hat value in r[P
32a40 32 5d 2e 20 20 54 68 65 20 72 5b 50 32 5d 0a 2a  2].  The r[P2].*
32a50 2a 20 76 61 6c 75 65 20 63 6f 6d 70 75 74 65 64  * value computed
32a60 20 69 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75   is the total nu
32a70 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 74 68 61  mber of rows tha
32a80 74 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62  t will need to b
32a90 65 0a 2a 2a 20 76 69 73 69 74 65 64 20 69 6e 20  e.** visited in 
32aa0 6f 72 64 65 72 20 74 6f 20 63 6f 6d 70 6c 65 74  order to complet
32ab0 65 20 74 68 65 20 71 75 65 72 79 2e 0a 2a 2a 0a  e the query..**.
32ac0 2a 2a 20 49 66 20 72 5b 50 33 5d 20 69 73 20 7a  ** If r[P3] is z
32ad0 65 72 6f 20 6f 72 20 6e 65 67 61 74 69 76 65 2c  ero or negative,
32ae0 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 65 72   that means ther
32af0 65 20 69 73 20 6e 6f 20 4f 46 46 53 45 54 0a 2a  e is no OFFSET.*
32b00 2a 20 61 6e 64 20 72 5b 50 32 5d 20 69 73 20 73  * and r[P2] is s
32b10 65 74 20 74 6f 20 62 65 20 74 68 65 20 76 61 6c  et to be the val
32b20 75 65 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 2c  ue of the LIMIT,
32b30 20 72 5b 50 31 5d 2e 0a 2a 2a 0a 2a 2a 20 69 66   r[P1]..**.** if
32b40 20 72 5b 50 31 5d 20 69 73 20 7a 65 72 6f 20 6f   r[P1] is zero o
32b50 72 20 6e 65 67 61 74 69 76 65 2c 20 74 68 61 74  r negative, that
32b60 20 6d 65 61 6e 73 20 74 68 65 72 65 20 69 73 20   means there is 
32b70 6e 6f 20 4c 49 4d 49 54 0a 2a 2a 20 61 6e 64 20  no LIMIT.** and 
32b80 72 5b 50 32 5d 20 69 73 20 73 65 74 20 74 6f 20  r[P2] is set to 
32b90 2d 31 2e 20 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72  -1. .**.** Other
32ba0 77 69 73 65 2c 20 72 5b 50 32 5d 20 69 73 20 73  wise, r[P2] is s
32bb0 65 74 20 74 6f 20 74 68 65 20 73 75 6d 20 6f 66  et to the sum of
32bc0 20 72 5b 50 31 5d 20 61 6e 64 20 72 5b 50 33 5d   r[P1] and r[P3]
32bd0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 66 66  ..*/.case OP_Off
32be0 73 65 74 4c 69 6d 69 74 3a 20 7b 20 20 20 20 2f  setLimit: {    /
32bf0 2a 20 69 6e 31 2c 20 6f 75 74 32 2c 20 69 6e 33  * in1, out2, in3
32c00 20 2a 2f 0a 20 20 69 36 34 20 78 3b 0a 20 20 70   */.  i64 x;.  p
32c10 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
32c20 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26  >p1];.  pIn3 = &
32c30 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
32c40 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
32c50 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
32c60 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
32c70 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
32c80 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  );.  assert( pIn
32c90 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  3->flags & MEM_I
32ca0 6e 74 20 29 3b 0a 20 20 78 20 3d 20 70 49 6e 31  nt );.  x = pIn1
32cb0 2d 3e 75 2e 69 3b 0a 20 20 69 66 28 20 78 3c 3d  ->u.i;.  if( x<=
32cc0 30 20 7c 7c 20 73 71 6c 69 74 65 33 41 64 64 49  0 || sqlite3AddI
32cd0 6e 74 36 34 28 26 78 2c 20 70 49 6e 33 2d 3e 75  nt64(&x, pIn3->u
32ce0 2e 69 3e 30 3f 70 49 6e 33 2d 3e 75 2e 69 3a 30  .i>0?pIn3->u.i:0
32cf0 29 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74  ) ){.    /* If t
32d00 68 65 20 4c 49 4d 49 54 20 69 73 20 6c 65 73 73  he LIMIT is less
32d10 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
32d20 6f 20 7a 65 72 6f 2c 20 6c 6f 6f 70 20 66 6f 72  o zero, loop for
32d30 65 76 65 72 2e 20 20 54 68 69 73 0a 20 20 20 20  ever.  This.    
32d40 2a 2a 20 69 73 20 64 6f 63 75 6d 65 6e 74 65 64  ** is documented
32d50 2e 20 20 42 75 74 20 61 6c 73 6f 2c 20 69 66 20  .  But also, if 
32d60 74 68 65 20 4c 49 4d 49 54 2b 4f 46 46 53 45 54  the LIMIT+OFFSET
32d70 20 65 78 63 65 65 64 73 20 32 5e 36 33 20 74 68   exceeds 2^63 th
32d80 65 6e 0a 20 20 20 20 2a 2a 20 61 6c 73 6f 20 6c  en.    ** also l
32d90 6f 6f 70 20 66 6f 72 65 76 65 72 2e 20 20 54 68  oop forever.  Th
32da0 69 73 20 69 73 20 75 6e 64 6f 63 75 6d 65 6e 74  is is undocument
32db0 65 64 2e 20 20 49 6e 20 66 61 63 74 2c 20 6f 6e  ed.  In fact, on
32dc0 65 20 63 6f 75 6c 64 20 61 72 67 75 65 0a 20 20  e could argue.  
32dd0 20 20 2a 2a 20 74 68 61 74 20 74 68 65 20 6c 6f    ** that the lo
32de0 6f 70 20 73 68 6f 75 6c 64 20 74 65 72 6d 69 6e  op should termin
32df0 61 74 65 2e 20 20 42 75 74 20 61 73 73 75 6d 69  ate.  But assumi
32e00 6e 67 20 31 20 62 69 6c 6c 69 6f 6e 20 69 74 65  ng 1 billion ite
32e10 72 61 74 69 6f 6e 73 0a 20 20 20 20 2a 2a 20 70  rations.    ** p
32e20 65 72 20 73 65 63 6f 6e 64 20 28 66 61 72 20 65  er second (far e
32e30 78 63 65 65 64 69 6e 67 20 74 68 65 20 63 61 70  xceeding the cap
32e40 61 62 69 6c 69 74 69 65 73 20 6f 66 20 61 6e 79  abilities of any
32e50 20 63 75 72 72 65 6e 74 20 68 61 72 64 77 61 72   current hardwar
32e60 65 29 0a 20 20 20 20 2a 2a 20 69 74 20 77 6f 75  e).    ** it wou
32e70 6c 64 20 74 61 6b 65 20 6e 65 61 72 6c 79 20 33  ld take nearly 3
32e80 30 30 20 79 65 61 72 73 20 74 6f 20 61 63 74 75  00 years to actu
32e90 61 6c 6c 79 20 72 65 61 63 68 20 74 68 65 20 6c  ally reach the l
32ea0 69 6d 69 74 2e 20 20 53 6f 0a 20 20 20 20 2a 2a  imit.  So.    **
32eb0 20 6c 6f 6f 70 69 6e 67 20 66 6f 72 65 76 65 72   looping forever
32ec0 20 69 73 20 61 20 72 65 61 73 6f 6e 61 62 6c 65   is a reasonable
32ed0 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 2e 20   approximation. 
32ee0 2a 2f 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  */.    pOut->u.i
32ef0 20 3d 20 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a   = -1;.  }else{.
32f00 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
32f10 78 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  x;.  }.  break;.
32f20 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66  }../* Opcode: If
32f30 4e 6f 74 5a 65 72 6f 20 50 31 20 50 32 20 2a 20  NotZero P1 P2 * 
32f40 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
32f50 20 69 66 20 72 5b 50 31 5d 21 3d 30 20 74 68 65   if r[P1]!=0 the
32f60 6e 20 72 5b 50 31 5d 2d 2d 2c 20 67 6f 74 6f 20  n r[P1]--, goto 
32f70 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65  P2.**.** Registe
32f80 72 20 50 31 20 6d 75 73 74 20 63 6f 6e 74 61 69  r P1 must contai
32f90 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49  n an integer.  I
32fa0 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  f the content of
32fb0 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 0a   register P1 is.
32fc0 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 67 72 65  ** initially gre
32fd0 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 2c 20  ater than zero, 
32fe0 74 68 65 6e 20 64 65 63 72 65 6d 65 6e 74 20 74  then decrement t
32ff0 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
33000 73 74 65 72 20 50 31 2e 0a 2a 2a 20 49 66 20 69  ster P1..** If i
33010 74 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 28 6e  t is non-zero (n
33020 65 67 61 74 69 76 65 20 6f 72 20 70 6f 73 69 74  egative or posit
33030 69 76 65 29 20 61 6e 64 20 74 68 65 6e 20 61 6c  ive) and then al
33040 73 6f 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20  so jump to P2.  
33050 0a 2a 2a 20 49 66 20 72 65 67 69 73 74 65 72 20  .** If register 
33060 50 31 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 20  P1 is initially 
33070 7a 65 72 6f 2c 20 6c 65 61 76 65 20 69 74 20 75  zero, leave it u
33080 6e 63 68 61 6e 67 65 64 20 61 6e 64 20 66 61 6c  nchanged and fal
33090 6c 20 74 68 72 6f 75 67 68 2e 0a 2a 2f 0a 63 61  l through..*/.ca
330a0 73 65 20 4f 50 5f 49 66 4e 6f 74 5a 65 72 6f 3a  se OP_IfNotZero:
330b0 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
330c0 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  p, in1 */.  pIn1
330d0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
330e0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
330f0 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74  1->flags&MEM_Int
33100 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68   );.  VdbeBranch
33110 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3c  Taken(pIn1->u.i<
33120 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 49 6e  0, 2);.  if( pIn
33130 31 2d 3e 75 2e 69 20 29 7b 0a 20 20 20 20 20 69  1->u.i ){.     i
33140 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 20 29  f( pIn1->u.i>0 )
33150 20 70 49 6e 31 2d 3e 75 2e 69 2d 2d 3b 0a 20 20   pIn1->u.i--;.  
33160 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
33170 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  p2;.  }.  break;
33180 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  .}../* Opcode: D
33190 65 63 72 4a 75 6d 70 5a 65 72 6f 20 50 31 20 50  ecrJumpZero P1 P
331a0 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
331b0 73 69 73 3a 20 69 66 20 28 2d 2d 72 5b 50 31 5d  sis: if (--r[P1]
331c0 29 3d 3d 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  )==0 goto P2.**.
331d0 2a 2a 20 52 65 67 69 73 74 65 72 20 50 31 20 6d  ** Register P1 m
331e0 75 73 74 20 68 6f 6c 64 20 61 6e 20 69 6e 74 65  ust hold an inte
331f0 67 65 72 2e 20 20 44 65 63 72 65 6d 65 6e 74 20  ger.  Decrement 
33200 74 68 65 20 76 61 6c 75 65 20 69 6e 20 50 31 0a  the value in P1.
33210 2a 2a 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20 50  ** and jump to P
33220 32 20 69 66 20 74 68 65 20 6e 65 77 20 76 61 6c  2 if the new val
33230 75 65 20 69 73 20 65 78 61 63 74 6c 79 20 7a 65  ue is exactly ze
33240 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  ro..*/.case OP_D
33250 65 63 72 4a 75 6d 70 5a 65 72 6f 3a 20 7b 20 20  ecrJumpZero: {  
33260 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
33270 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
33280 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
33290 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
332a0 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  gs&MEM_Int );.  
332b0 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 53 4d  if( pIn1->u.i>SM
332c0 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29 20 70  ALLEST_INT64 ) p
332d0 49 6e 31 2d 3e 75 2e 69 2d 2d 3b 0a 20 20 56 64  In1->u.i--;.  Vd
332e0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 49  beBranchTaken(pI
332f0 6e 31 2d 3e 75 2e 69 3d 3d 30 2c 20 32 29 3b 0a  n1->u.i==0, 2);.
33300 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3d    if( pIn1->u.i=
33310 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  =0 ) goto jump_t
33320 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  o_p2;.  break;.}
33330 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67  .../* Opcode: Ag
33340 67 53 74 65 70 30 20 2a 20 50 32 20 50 33 20 50  gStep0 * P2 P3 P
33350 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
33360 3a 20 61 63 63 75 6d 3d 72 5b 50 33 5d 20 73 74  : accum=r[P3] st
33370 65 70 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a  ep(r[P2@P5]).**.
33380 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 73  ** Execute the s
33390 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72  tep function for
333a0 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20   an aggregate.  
333b0 54 68 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20  The.** function 
333c0 68 61 73 20 50 35 20 61 72 67 75 6d 65 6e 74 73  has P5 arguments
333d0 2e 20 20 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .   P4 is a poin
333e0 74 65 72 20 74 6f 20 74 68 65 20 46 75 6e 63 44  ter to the FuncD
333f0 65 66 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20  ef.** structure 
33400 74 68 61 74 20 73 70 65 63 69 66 69 65 73 20 74  that specifies t
33410 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20 52 65  he function.  Re
33420 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65  gister P3 is the
33430 0a 2a 2a 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e  .** accumulator.
33440 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61 72  .**.** The P5 ar
33450 67 75 6d 65 6e 74 73 20 61 72 65 20 74 61 6b 65  guments are take
33460 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20  n from register 
33470 50 32 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75  P2 and its.** su
33480 63 63 65 73 73 6f 72 73 2e 0a 2a 2f 0a 2f 2a 20  ccessors..*/./* 
33490 4f 70 63 6f 64 65 3a 20 41 67 67 53 74 65 70 20  Opcode: AggStep 
334a0 2a 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  * P2 P3 P4 P5.**
334b0 20 53 79 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d   Synopsis: accum
334c0 3d 72 5b 50 33 5d 20 73 74 65 70 28 72 5b 50 32  =r[P3] step(r[P2
334d0 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 45 78 65 63  @P5]).**.** Exec
334e0 75 74 65 20 74 68 65 20 73 74 65 70 20 66 75 6e  ute the step fun
334f0 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67  ction for an agg
33500 72 65 67 61 74 65 2e 20 20 54 68 65 0a 2a 2a 20  regate.  The.** 
33510 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 50 35 20  function has P5 
33520 61 72 67 75 6d 65 6e 74 73 2e 20 20 20 50 34 20  arguments.   P4 
33530 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
33540 61 6e 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  an sqlite3_conte
33550 78 74 0a 2a 2a 20 6f 62 6a 65 63 74 20 74 68 61  xt.** object tha
33560 74 20 69 73 20 75 73 65 64 20 74 6f 20 72 75 6e  t is used to run
33570 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20   the function.  
33580 52 65 67 69 73 74 65 72 20 50 33 20 69 73 0a 2a  Register P3 is.*
33590 2a 20 61 73 20 74 68 65 20 61 63 63 75 6d 75 6c  * as the accumul
335a0 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ator..**.** The 
335b0 50 35 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65  P5 arguments are
335c0 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69   taken from regi
335d0 73 74 65 72 20 50 32 20 61 6e 64 20 69 74 73 0a  ster P2 and its.
335e0 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a  ** successors..*
335f0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
33600 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 20 63 6f   is initially co
33610 64 65 64 20 61 73 20 4f 50 5f 41 67 67 53 74 65  ded as OP_AggSte
33620 70 30 2e 20 20 4f 6e 20 66 69 72 73 74 20 65 76  p0.  On first ev
33630 61 6c 75 61 74 69 6f 6e 2c 0a 2a 2a 20 74 68 65  aluation,.** the
33640 20 46 75 6e 63 44 65 66 20 73 74 6f 72 65 64 20   FuncDef stored 
33650 69 6e 20 50 34 20 69 73 20 63 6f 6e 76 65 72 74  in P4 is convert
33660 65 64 20 69 6e 74 6f 20 61 6e 20 73 71 6c 69 74  ed into an sqlit
33670 65 33 5f 63 6f 6e 74 65 78 74 20 61 6e 64 0a 2a  e3_context and.*
33680 2a 20 74 68 65 20 6f 70 63 6f 64 65 20 69 73 20  * the opcode is 
33690 63 68 61 6e 67 65 64 2e 20 20 49 6e 20 74 68 69  changed.  In thi
336a0 73 20 77 61 79 2c 20 74 68 65 20 69 6e 69 74 69  s way, the initi
336b0 61 6c 69 7a 61 74 69 6f 6e 20 6f 66 20 74 68 65  alization of the
336c0 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  .** sqlite3_cont
336d0 65 78 74 20 6f 6e 6c 79 20 68 61 70 70 65 6e 73  ext only happens
336e0 20 6f 6e 63 65 2c 20 69 6e 73 74 65 61 64 20 6f   once, instead o
336f0 66 20 6f 6e 20 65 61 63 68 20 63 61 6c 6c 20 74  f on each call t
33700 6f 20 74 68 65 0a 2a 2a 20 73 74 65 70 20 66 75  o the.** step fu
33710 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  nction..*/.case 
33720 4f 50 5f 41 67 67 53 74 65 70 30 3a 20 7b 0a 20  OP_AggStep0: {. 
33730 20 69 6e 74 20 6e 3b 0a 20 20 73 71 6c 69 74 65   int n;.  sqlite
33740 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 3b  3_context *pCtx;
33750 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
33760 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43  >p4type==P4_FUNC
33770 44 45 46 20 29 3b 0a 20 20 6e 20 3d 20 70 4f 70  DEF );.  n = pOp
33780 2d 3e 70 35 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p5;.  assert( 
33790 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
337a0 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ->p3<=(p->nMem+1
337b0 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29   - p->nCursor) )
337c0 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3d 3d 30  ;.  assert( n==0
337d0 20 7c 7c 20 28 70 4f 70 2d 3e 70 32 3e 30 20 26   || (pOp->p2>0 &
337e0 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c 3d 28 70 2d  & pOp->p2+n<=(p-
337f0 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
33800 72 73 6f 72 29 2b 31 29 20 29 3b 0a 20 20 61 73  rsor)+1) );.  as
33810 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f  sert( pOp->p3<pO
33820 70 2d 3e 70 32 20 7c 7c 20 70 4f 70 2d 3e 70 33  p->p2 || pOp->p3
33830 3e 3d 70 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a 20  >=pOp->p2+n );. 
33840 20 70 43 74 78 20 3d 20 73 71 6c 69 74 65 33 44   pCtx = sqlite3D
33850 62 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28 64 62 2c  bMallocRawNN(db,
33860 20 73 69 7a 65 6f 66 28 2a 70 43 74 78 29 20 2b   sizeof(*pCtx) +
33870 20 28 6e 2d 31 29 2a 73 69 7a 65 6f 66 28 73 71   (n-1)*sizeof(sq
33880 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 29 3b 0a  lite3_value*));.
33890 20 20 69 66 28 20 70 43 74 78 3d 3d 30 20 29 20    if( pCtx==0 ) 
338a0 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70  goto no_mem;.  p
338b0 43 74 78 2d 3e 70 4d 65 6d 20 3d 20 30 3b 0a 20  Ctx->pMem = 0;. 
338c0 20 70 43 74 78 2d 3e 70 46 75 6e 63 20 3d 20 70   pCtx->pFunc = p
338d0 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20  Op->p4.pFunc;.  
338e0 70 43 74 78 2d 3e 69 4f 70 20 3d 20 28 69 6e 74  pCtx->iOp = (int
338f0 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20  )(pOp - aOp);.  
33900 70 43 74 78 2d 3e 70 56 64 62 65 20 3d 20 70 3b  pCtx->pVdbe = p;
33910 0a 20 20 70 43 74 78 2d 3e 61 72 67 63 20 3d 20  .  pCtx->argc = 
33920 6e 3b 0a 20 20 70 4f 70 2d 3e 70 34 74 79 70 65  n;.  pOp->p4type
33930 20 3d 20 50 34 5f 46 55 4e 43 43 54 58 3b 0a 20   = P4_FUNCCTX;. 
33940 20 70 4f 70 2d 3e 70 34 2e 70 43 74 78 20 3d 20   pOp->p4.pCtx = 
33950 70 43 74 78 3b 0a 20 20 70 4f 70 2d 3e 6f 70 63  pCtx;.  pOp->opc
33960 6f 64 65 20 3d 20 4f 50 5f 41 67 67 53 74 65 70  ode = OP_AggStep
33970 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f  ;.  /* Fall thro
33980 75 67 68 20 69 6e 74 6f 20 4f 50 5f 41 67 67 53  ugh into OP_AggS
33990 74 65 70 20 2a 2f 0a 7d 0a 63 61 73 65 20 4f 50  tep */.}.case OP
339a0 5f 41 67 67 53 74 65 70 3a 20 7b 0a 20 20 69 6e  _AggStep: {.  in
339b0 74 20 69 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63  t i;.  sqlite3_c
339c0 6f 6e 74 65 78 74 20 2a 70 43 74 78 3b 0a 20 20  ontext *pCtx;.  
339d0 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 4d 65 6d  Mem *pMem;.  Mem
339e0 20 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70   t;..  assert( p
339f0 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46  Op->p4type==P4_F
33a00 55 4e 43 43 54 58 20 29 3b 0a 20 20 70 43 74 78  UNCCTX );.  pCtx
33a10 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 43 74 78 3b   = pOp->p4.pCtx;
33a20 0a 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b  .  pMem = &aMem[
33a30 70 4f 70 2d 3e 70 33 5d 3b 0a 0a 20 20 2f 2a 20  pOp->p3];..  /* 
33a40 49 66 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e  If this function
33a50 20 69 73 20 69 6e 73 69 64 65 20 6f 66 20 61 20   is inside of a 
33a60 74 72 69 67 67 65 72 2c 20 74 68 65 20 72 65 67  trigger, the reg
33a70 69 73 74 65 72 20 61 72 72 61 79 20 69 6e 20 61  ister array in a
33a80 4d 65 6d 5b 5d 0a 20 20 2a 2a 20 6d 69 67 68 74  Mem[].  ** might
33a90 20 63 68 61 6e 67 65 20 66 72 6f 6d 20 6f 6e 65   change from one
33aa0 20 65 76 61 6c 75 61 74 69 6f 6e 20 74 6f 20 74   evaluation to t
33ab0 68 65 20 6e 65 78 74 2e 20 20 54 68 65 20 6e 65  he next.  The ne
33ac0 78 74 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65  xt block of code
33ad0 0a 20 20 2a 2a 20 63 68 65 63 6b 73 20 74 6f 20  .  ** checks to 
33ae0 73 65 65 20 69 66 20 74 68 65 20 72 65 67 69 73  see if the regis
33af0 74 65 72 20 61 72 72 61 79 20 68 61 73 20 63 68  ter array has ch
33b00 61 6e 67 65 64 2c 20 61 6e 64 20 69 66 20 73 6f  anged, and if so
33b10 20 69 74 0a 20 20 2a 2a 20 72 65 69 6e 69 74 69   it.  ** reiniti
33b20 61 6c 69 7a 65 73 20 74 68 65 20 72 65 6c 61 76  alizes the relav
33b30 61 6e 74 20 70 61 72 74 73 20 6f 66 20 74 68 65  ant parts of the
33b40 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
33b50 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 69 66 28   object */.  if(
33b60 20 70 43 74 78 2d 3e 70 4d 65 6d 20 21 3d 20 70   pCtx->pMem != p
33b70 4d 65 6d 20 29 7b 0a 20 20 20 20 70 43 74 78 2d  Mem ){.    pCtx-
33b80 3e 70 4d 65 6d 20 3d 20 70 4d 65 6d 3b 0a 20 20  >pMem = pMem;.  
33b90 20 20 66 6f 72 28 69 3d 70 43 74 78 2d 3e 61 72    for(i=pCtx->ar
33ba0 67 63 2d 31 3b 20 69 3e 3d 30 3b 20 69 2d 2d 29  gc-1; i>=0; i--)
33bb0 20 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d 20 3d   pCtx->argv[i] =
33bc0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 2b 69   &aMem[pOp->p2+i
33bd0 5d 3b 0a 20 20 7d 0a 0a 23 69 66 64 65 66 20 53  ];.  }..#ifdef S
33be0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 66 6f  QLITE_DEBUG.  fo
33bf0 72 28 69 3d 30 3b 20 69 3c 70 43 74 78 2d 3e 61  r(i=0; i<pCtx->a
33c00 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61  rgc; i++){.    a
33c10 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
33c20 64 28 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d 29  d(pCtx->argv[i])
33c30 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52   );.    REGISTER
33c40 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b 69  _TRACE(pOp->p2+i
33c50 2c 20 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d 29  , pCtx->argv[i])
33c60 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20  ;.  }.#endif..  
33c70 70 4d 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20 73 71 6c  pMem->n++;.  sql
33c80 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 69 74 28  ite3VdbeMemInit(
33c90 26 74 2c 20 64 62 2c 20 4d 45 4d 5f 4e 75 6c 6c  &t, db, MEM_Null
33ca0 29 3b 0a 20 20 70 43 74 78 2d 3e 70 4f 75 74 20  );.  pCtx->pOut 
33cb0 3d 20 26 74 3b 0a 20 20 70 43 74 78 2d 3e 66 45  = &t;.  pCtx->fE
33cc0 72 72 6f 72 4f 72 41 75 78 20 3d 20 30 3b 0a 20  rrorOrAux = 0;. 
33cd0 20 70 43 74 78 2d 3e 73 6b 69 70 46 6c 61 67 20   pCtx->skipFlag 
33ce0 3d 20 30 3b 0a 20 20 28 70 43 74 78 2d 3e 70 46  = 0;.  (pCtx->pF
33cf0 75 6e 63 2d 3e 78 53 46 75 6e 63 29 28 70 43 74  unc->xSFunc)(pCt
33d00 78 2c 70 43 74 78 2d 3e 61 72 67 63 2c 70 43 74  x,pCtx->argc,pCt
33d10 78 2d 3e 61 72 67 76 29 3b 20 2f 2a 20 49 4d 50  x->argv); /* IMP
33d20 3a 20 52 2d 32 34 35 30 35 2d 32 33 32 33 30 20  : R-24505-23230 
33d30 2a 2f 0a 20 20 69 66 28 20 70 43 74 78 2d 3e 66  */.  if( pCtx->f
33d40 45 72 72 6f 72 4f 72 41 75 78 20 29 7b 0a 20 20  ErrorOrAux ){.  
33d50 20 20 69 66 28 20 70 43 74 78 2d 3e 69 73 45 72    if( pCtx->isEr
33d60 72 6f 72 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ror ){.      sql
33d70 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
33d80 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76   "%s", sqlite3_v
33d90 61 6c 75 65 5f 74 65 78 74 28 26 74 29 29 3b 0a  alue_text(&t));.
33da0 20 20 20 20 20 20 72 63 20 3d 20 70 43 74 78 2d        rc = pCtx-
33db0 3e 69 73 45 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  >isError;.    }.
33dc0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
33dd0 65 6d 52 65 6c 65 61 73 65 28 26 74 29 3b 0a 20  emRelease(&t);. 
33de0 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f     if( rc ) goto
33df0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
33e00 72 6f 72 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ror;.  }else{.  
33e10 20 20 61 73 73 65 72 74 28 20 74 2e 66 6c 61 67    assert( t.flag
33e20 73 3d 3d 4d 45 4d 5f 4e 75 6c 6c 20 29 3b 0a 20  s==MEM_Null );. 
33e30 20 7d 0a 20 20 69 66 28 20 70 43 74 78 2d 3e 73   }.  if( pCtx->s
33e40 6b 69 70 46 6c 61 67 20 29 7b 0a 20 20 20 20 61  kipFlag ){.    a
33e50 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f  ssert( pOp[-1].o
33e60 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65  pcode==OP_CollSe
33e70 71 20 29 3b 0a 20 20 20 20 69 20 3d 20 70 4f 70  q );.    i = pOp
33e80 5b 2d 31 5d 2e 70 31 3b 0a 20 20 20 20 69 66 28  [-1].p1;.    if(
33e90 20 69 20 29 20 73 71 6c 69 74 65 33 56 64 62 65   i ) sqlite3Vdbe
33ea0 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65  MemSetInt64(&aMe
33eb0 6d 5b 69 5d 2c 20 31 29 3b 0a 20 20 7d 0a 20 20  m[i], 1);.  }.  
33ec0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
33ed0 6f 64 65 3a 20 41 67 67 46 69 6e 61 6c 20 50 31  ode: AggFinal P1
33ee0 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79   P2 * P4 *.** Sy
33ef0 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b  nopsis: accum=r[
33f00 50 31 5d 20 4e 3d 50 32 0a 2a 2a 0a 2a 2a 20 45  P1] N=P2.**.** E
33f10 78 65 63 75 74 65 20 74 68 65 20 66 69 6e 61 6c  xecute the final
33f20 69 7a 65 72 20 66 75 6e 63 74 69 6f 6e 20 66 6f  izer function fo
33f30 72 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20  r an aggregate. 
33f40 20 50 31 20 69 73 0a 2a 2a 20 74 68 65 20 6d 65   P1 is.** the me
33f50 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68  mory location th
33f60 61 74 20 69 73 20 74 68 65 20 61 63 63 75 6d 75  at is the accumu
33f70 6c 61 74 6f 72 20 66 6f 72 20 74 68 65 20 61 67  lator for the ag
33f80 67 72 65 67 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 50  gregate..**.** P
33f90 32 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20  2 is the number 
33fa0 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61  of arguments tha
33fb0 74 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74  t the step funct
33fc0 69 6f 6e 20 74 61 6b 65 73 20 61 6e 64 0a 2a 2a  ion takes and.**
33fd0 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
33fe0 20 74 6f 20 74 68 65 20 46 75 6e 63 44 65 66 20   to the FuncDef 
33ff0 66 6f 72 20 74 68 69 73 20 66 75 6e 63 74 69 6f  for this functio
34000 6e 2e 20 20 54 68 65 20 50 32 0a 2a 2a 20 61 72  n.  The P2.** ar
34010 67 75 6d 65 6e 74 20 69 73 20 6e 6f 74 20 75 73  gument is not us
34020 65 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64  ed by this opcod
34030 65 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 74  e.  It is only t
34040 68 65 72 65 20 74 6f 20 64 69 73 61 6d 62 69 67  here to disambig
34050 75 61 74 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e  uate.** function
34060 73 20 74 68 61 74 20 63 61 6e 20 74 61 6b 65 20  s that can take 
34070 76 61 72 79 69 6e 67 20 6e 75 6d 62 65 72 73 20  varying numbers 
34080 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 54  of arguments.  T
34090 68 65 0a 2a 2a 20 50 34 20 61 72 67 75 6d 65 6e  he.** P4 argumen
340a0 74 20 69 73 20 6f 6e 6c 79 20 6e 65 65 64 65 64  t is only needed
340b0 20 66 6f 72 20 74 68 65 20 64 65 67 65 6e 65 72   for the degener
340c0 61 74 65 20 63 61 73 65 20 77 68 65 72 65 0a 2a  ate case where.*
340d0 2a 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74  * the step funct
340e0 69 6f 6e 20 77 61 73 20 6e 6f 74 20 70 72 65 76  ion was not prev
340f0 69 6f 75 73 6c 79 20 63 61 6c 6c 65 64 2e 0a 2a  iously called..*
34100 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67 46 69 6e  /.case OP_AggFin
34110 61 6c 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65  al: {.  Mem *pMe
34120 6d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  m;.  assert( pOp
34130 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p1>0 && pOp->p
34140 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  1<=(p->nMem+1 - 
34150 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
34160 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f   pMem = &aMem[pO
34170 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
34180 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  ( (pMem->flags &
34190 20 7e 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f   ~(MEM_Null|MEM_
341a0 41 67 67 29 29 3d 3d 30 20 29 3b 0a 20 20 72 63  Agg))==0 );.  rc
341b0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   = sqlite3VdbeMe
341c0 6d 46 69 6e 61 6c 69 7a 65 28 70 4d 65 6d 2c 20  mFinalize(pMem, 
341d0 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 29 3b 0a  pOp->p4.pFunc);.
341e0 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20    if( rc ){.    
341f0 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72  sqlite3VdbeError
34200 28 70 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65  (p, "%s", sqlite
34210 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 4d 65  3_value_text(pMe
34220 6d 29 29 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62  m));.    goto ab
34230 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
34240 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56  ;.  }.  sqlite3V
34250 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
34260 67 28 70 4d 65 6d 2c 20 65 6e 63 6f 64 69 6e 67  g(pMem, encoding
34270 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
34280 42 4c 4f 42 53 49 5a 45 28 70 4d 65 6d 29 3b 0a  BLOBSIZE(pMem);.
34290 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
342a0 65 4d 65 6d 54 6f 6f 42 69 67 28 70 4d 65 6d 29  eMemTooBig(pMem)
342b0 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
342c0 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61  _big;.  }.  brea
342d0 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  k;.}..#ifndef SQ
342e0 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 2f 2a  LITE_OMIT_WAL./*
342f0 20 4f 70 63 6f 64 65 3a 20 43 68 65 63 6b 70 6f   Opcode: Checkpo
34300 69 6e 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  int P1 P2 P3 * *
34310 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 70 6f 69 6e  .**.** Checkpoin
34320 74 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 54  t database P1. T
34330 68 69 73 20 69 73 20 61 20 6e 6f 2d 6f 70 20 69  his is a no-op i
34340 66 20 50 31 20 69 73 20 6e 6f 74 20 63 75 72 72  f P1 is not curr
34350 65 6e 74 6c 79 20 69 6e 0a 2a 2a 20 57 41 4c 20  ently in.** WAL 
34360 6d 6f 64 65 2e 20 50 61 72 61 6d 65 74 65 72 20  mode. Parameter 
34370 50 32 20 69 73 20 6f 6e 65 20 6f 66 20 53 51 4c  P2 is one of SQL
34380 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50  ITE_CHECKPOINT_P
34390 41 53 53 49 56 45 2c 20 46 55 4c 4c 2c 0a 2a 2a  ASSIVE, FULL,.**
343a0 20 52 45 53 54 41 52 54 2c 20 6f 72 20 54 52 55   RESTART, or TRU
343b0 4e 43 41 54 45 2e 20 20 57 72 69 74 65 20 31 20  NCATE.  Write 1 
343c0 6f 72 20 30 20 69 6e 74 6f 20 6d 65 6d 5b 50 33  or 0 into mem[P3
343d0 5d 20 69 66 20 74 68 65 20 63 68 65 63 6b 70 6f  ] if the checkpo
343e0 69 6e 74 20 72 65 74 75 72 6e 73 0a 2a 2a 20 53  int returns.** S
343f0 51 4c 49 54 45 5f 42 55 53 59 20 6f 72 20 6e 6f  QLITE_BUSY or no
34400 74 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  t, respectively.
34410 20 20 57 72 69 74 65 20 74 68 65 20 6e 75 6d 62    Write the numb
34420 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74  er of pages in t
34430 68 65 0a 2a 2a 20 57 41 4c 20 61 66 74 65 72 20  he.** WAL after 
34440 74 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 20 69  the checkpoint i
34450 6e 74 6f 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e  nto mem[P3+1] an
34460 64 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  d the number of 
34470 70 61 67 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20  pages.** in the 
34480 57 41 4c 20 74 68 61 74 20 68 61 76 65 20 62 65  WAL that have be
34490 65 6e 20 63 68 65 63 6b 70 6f 69 6e 74 65 64 20  en checkpointed 
344a0 61 66 74 65 72 20 74 68 65 20 63 68 65 63 6b 70  after the checkp
344b0 6f 69 6e 74 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65  oint.** complete
344c0 73 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b 32 5d  s into mem[P3+2]
344d0 2e 20 20 48 6f 77 65 76 65 72 20 6f 6e 20 61 6e  .  However on an
344e0 20 65 72 72 6f 72 2c 20 6d 65 6d 5b 50 33 2b 31   error, mem[P3+1
344f0 5d 20 61 6e 64 0a 2a 2a 20 6d 65 6d 5b 50 33 2b  ] and.** mem[P3+
34500 32 5d 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a  2] are initializ
34510 65 64 20 74 6f 20 2d 31 2e 0a 2a 2f 0a 63 61 73  ed to -1..*/.cas
34520 65 20 4f 50 5f 43 68 65 63 6b 70 6f 69 6e 74 3a  e OP_Checkpoint:
34530 20 7b 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20   {.  int i;     
34540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34550 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75       /* Loop cou
34560 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20 61 52  nter */.  int aR
34570 65 73 5b 33 5d 3b 20 20 20 20 20 20 20 20 20 20  es[3];          
34580 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73            /* Res
34590 75 6c 74 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  ults */.  Mem *p
345a0 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
345b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 72 69            /* Wri
345c0 74 65 20 72 65 73 75 6c 74 73 20 68 65 72 65 20  te results here 
345d0 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d  */..  assert( p-
345e0 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
345f0 20 20 61 52 65 73 5b 30 5d 20 3d 20 30 3b 0a 20    aRes[0] = 0;. 
34600 20 61 52 65 73 5b 31 5d 20 3d 20 61 52 65 73 5b   aRes[1] = aRes[
34610 32 5d 20 3d 20 2d 31 3b 0a 20 20 61 73 73 65 72  2] = -1;.  asser
34620 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49  t( pOp->p2==SQLI
34630 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41  TE_CHECKPOINT_PA
34640 53 53 49 56 45 0a 20 20 20 20 20 20 20 7c 7c 20  SSIVE.       || 
34650 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
34660 43 48 45 43 4b 50 4f 49 4e 54 5f 46 55 4c 4c 0a  CHECKPOINT_FULL.
34670 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70         || pOp->p
34680 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50  2==SQLITE_CHECKP
34690 4f 49 4e 54 5f 52 45 53 54 41 52 54 0a 20 20 20  OINT_RESTART.   
346a0 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d      || pOp->p2==
346b0 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e  SQLITE_CHECKPOIN
346c0 54 5f 54 52 55 4e 43 41 54 45 0a 20 20 29 3b 0a  T_TRUNCATE.  );.
346d0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 43 68    rc = sqlite3Ch
346e0 65 63 6b 70 6f 69 6e 74 28 64 62 2c 20 70 4f 70  eckpoint(db, pOp
346f0 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 26  ->p1, pOp->p2, &
34700 61 52 65 73 5b 31 5d 2c 20 26 61 52 65 73 5b 32  aRes[1], &aRes[2
34710 5d 29 3b 0a 20 20 69 66 28 20 72 63 20 29 7b 0a  ]);.  if( rc ){.
34720 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
34730 54 45 5f 42 55 53 59 20 29 20 67 6f 74 6f 20 61  TE_BUSY ) goto a
34740 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
34750 72 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  r;.    rc = SQLI
34760 54 45 5f 4f 4b 3b 0a 20 20 20 20 61 52 65 73 5b  TE_OK;.    aRes[
34770 30 5d 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 66 6f  0] = 1;.  }.  fo
34780 72 28 69 3d 30 2c 20 70 4d 65 6d 20 3d 20 26 61  r(i=0, pMem = &a
34790 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 20 69 3c  Mem[pOp->p3]; i<
347a0 33 3b 20 69 2b 2b 2c 20 70 4d 65 6d 2b 2b 29 7b  3; i++, pMem++){
347b0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
347c0 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4d 65 6d  MemSetInt64(pMem
347d0 2c 20 28 69 36 34 29 61 52 65 73 5b 69 5d 29 3b  , (i64)aRes[i]);
347e0 0a 20 20 7d 20 20 20 20 0a 20 20 62 72 65 61 6b  .  }    .  break
347f0 3b 0a 7d 3b 20 20 0a 23 65 6e 64 69 66 0a 0a 23  ;.};  .#endif..#
34800 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
34810 49 54 5f 50 52 41 47 4d 41 0a 2f 2a 20 4f 70 63  IT_PRAGMA./* Opc
34820 6f 64 65 3a 20 4a 6f 75 72 6e 61 6c 4d 6f 64 65  ode: JournalMode
34830 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
34840 0a 2a 2a 20 43 68 61 6e 67 65 20 74 68 65 20 6a  .** Change the j
34850 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20 64  ournal mode of d
34860 61 74 61 62 61 73 65 20 50 31 20 74 6f 20 50 33  atabase P1 to P3
34870 2e 20 50 33 20 6d 75 73 74 20 62 65 20 6f 6e 65  . P3 must be one
34880 20 6f 66 20 74 68 65 0a 2a 2a 20 50 41 47 45 52   of the.** PAGER
34890 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58 58 58  _JOURNALMODE_XXX
348a0 20 76 61 6c 75 65 73 2e 20 49 66 20 63 68 61 6e   values. If chan
348b0 67 69 6e 67 20 62 65 74 77 65 65 6e 20 74 68 65  ging between the
348c0 20 76 61 72 69 6f 75 73 20 72 6f 6c 6c 62 61 63   various rollbac
348d0 6b 0a 2a 2a 20 6d 6f 64 65 73 20 28 64 65 6c 65  k.** modes (dele
348e0 74 65 2c 20 74 72 75 6e 63 61 74 65 2c 20 70 65  te, truncate, pe
348f0 72 73 69 73 74 2c 20 6f 66 66 20 61 6e 64 20 6d  rsist, off and m
34900 65 6d 6f 72 79 29 2c 20 74 68 69 73 20 69 73 20  emory), this is 
34910 61 20 73 69 6d 70 6c 65 0a 2a 2a 20 6f 70 65 72  a simple.** oper
34920 61 74 69 6f 6e 2e 20 4e 6f 20 49 4f 20 69 73 20  ation. No IO is 
34930 72 65 71 75 69 72 65 64 2e 0a 2a 2a 0a 2a 2a 20  required..**.** 
34940 49 66 20 63 68 61 6e 67 69 6e 67 20 69 6e 74 6f  If changing into
34950 20 6f 72 20 6f 75 74 20 6f 66 20 57 41 4c 20 6d   or out of WAL m
34960 6f 64 65 20 74 68 65 20 70 72 6f 63 65 64 75 72  ode the procedur
34970 65 20 69 73 20 6d 6f 72 65 20 63 6f 6d 70 6c 69  e is more compli
34980 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 57 72 69  cated..**.** Wri
34990 74 65 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 74  te a string cont
349a0 61 69 6e 69 6e 67 20 74 68 65 20 66 69 6e 61 6c  aining the final
349b0 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65 20 74 6f   journal-mode to
349c0 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
349d0 0a 63 61 73 65 20 4f 50 5f 4a 6f 75 72 6e 61 6c  .case OP_Journal
349e0 4d 6f 64 65 3a 20 7b 20 20 20 20 2f 2a 20 6f 75  Mode: {    /* ou
349f0 74 32 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70  t2 */.  Btree *p
34a00 42 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Bt;             
34a10 20 20 20 20 20 20 20 20 2f 2a 20 42 74 72 65 65          /* Btree
34a20 20 74 6f 20 63 68 61 6e 67 65 20 6a 6f 75 72 6e   to change journ
34a30 61 6c 20 6d 6f 64 65 20 6f 66 20 2a 2f 0a 20 20  al mode of */.  
34a40 50 61 67 65 72 20 2a 70 50 61 67 65 72 3b 20 20  Pager *pPager;  
34a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34a60 2f 2a 20 50 61 67 65 72 20 61 73 73 6f 63 69 61  /* Pager associa
34a70 74 65 64 20 77 69 74 68 20 70 42 74 20 2a 2f 0a  ted with pBt */.
34a80 20 20 69 6e 74 20 65 4e 65 77 3b 20 20 20 20 20    int eNew;     
34a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34aa0 20 20 2f 2a 20 4e 65 77 20 6a 6f 75 72 6e 61 6c    /* New journal
34ab0 20 6d 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 65   mode */.  int e
34ac0 4f 6c 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  Old;            
34ad0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
34ae0 65 20 6f 6c 64 20 6a 6f 75 72 6e 61 6c 20 6d 6f  e old journal mo
34af0 64 65 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  de */.#ifndef SQ
34b00 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20  LITE_OMIT_WAL.  
34b10 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c  const char *zFil
34b20 65 6e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  ename;          
34b30 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62  /* Name of datab
34b40 61 73 65 20 66 69 6c 65 20 66 6f 72 20 70 50 61  ase file for pPa
34b50 67 65 72 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 20  ger */.#endif.. 
34b60 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
34b70 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
34b80 20 20 65 4e 65 77 20 3d 20 70 4f 70 2d 3e 70 33    eNew = pOp->p3
34b90 3b 0a 20 20 61 73 73 65 72 74 28 20 65 4e 65 77  ;.  assert( eNew
34ba0 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
34bb0 4f 44 45 5f 44 45 4c 45 54 45 20 0a 20 20 20 20  ODE_DELETE .    
34bc0 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45     || eNew==PAGE
34bd0 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 54 52  R_JOURNALMODE_TR
34be0 55 4e 43 41 54 45 20 0a 20 20 20 20 20 20 20 7c  UNCATE .       |
34bf0 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
34c00 55 52 4e 41 4c 4d 4f 44 45 5f 50 45 52 53 49 53  URNALMODE_PERSIS
34c10 54 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65  T .       || eNe
34c20 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
34c30 4d 4f 44 45 5f 4f 46 46 0a 20 20 20 20 20 20 20  MODE_OFF.       
34c40 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  || eNew==PAGER_J
34c50 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52  OURNALMODE_MEMOR
34c60 59 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77  Y.       || eNew
34c70 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
34c80 4f 44 45 5f 57 41 4c 0a 20 20 20 20 20 20 20 7c  ODE_WAL.       |
34c90 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
34ca0 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 0a  URNALMODE_QUERY.
34cb0 20 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70    );.  assert( p
34cc0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
34cd0 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
34ce0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
34cf0 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 70  dOnly==0 );..  p
34d00 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70  Bt = db->aDb[pOp
34d10 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 70 50 61  ->p1].pBt;.  pPa
34d20 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72  ger = sqlite3Btr
34d30 65 65 50 61 67 65 72 28 70 42 74 29 3b 0a 20 20  eePager(pBt);.  
34d40 65 4f 6c 64 20 3d 20 73 71 6c 69 74 65 33 50 61  eOld = sqlite3Pa
34d50 67 65 72 47 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64  gerGetJournalMod
34d60 65 28 70 50 61 67 65 72 29 3b 0a 20 20 69 66 28  e(pPager);.  if(
34d70 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
34d80 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 20 29  RNALMODE_QUERY )
34d90 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20   eNew = eOld;.  
34da0 69 66 28 20 21 73 71 6c 69 74 65 33 50 61 67 65  if( !sqlite3Page
34db0 72 4f 6b 54 6f 43 68 61 6e 67 65 4a 6f 75 72 6e  rOkToChangeJourn
34dc0 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 29 20 29  alMode(pPager) )
34dd0 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 0a 23   eNew = eOld;..#
34de0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
34df0 49 54 5f 57 41 4c 0a 20 20 7a 46 69 6c 65 6e 61  IT_WAL.  zFilena
34e00 6d 65 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65  me = sqlite3Page
34e10 72 46 69 6c 65 6e 61 6d 65 28 70 50 61 67 65 72  rFilename(pPager
34e20 2c 20 31 29 3b 0a 0a 20 20 2f 2a 20 44 6f 20 6e  , 1);..  /* Do n
34e30 6f 74 20 61 6c 6c 6f 77 20 61 20 74 72 61 6e 73  ot allow a trans
34e40 69 74 69 6f 6e 20 74 6f 20 6a 6f 75 72 6e 61 6c  ition to journal
34e50 5f 6d 6f 64 65 3d 57 41 4c 20 66 6f 72 20 61 20  _mode=WAL for a 
34e60 64 61 74 61 62 61 73 65 0a 20 20 2a 2a 20 69 6e  database.  ** in
34e70 20 74 65 6d 70 6f 72 61 72 79 20 73 74 6f 72 61   temporary stora
34e80 67 65 20 6f 72 20 69 66 20 74 68 65 20 56 46 53  ge or if the VFS
34e90 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72   does not suppor
34ea0 74 20 73 68 61 72 65 64 20 6d 65 6d 6f 72 79 20  t shared memory 
34eb0 0a 20 20 2a 2f 0a 20 20 69 66 28 20 65 4e 65 77  .  */.  if( eNew
34ec0 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
34ed0 4f 44 45 5f 57 41 4c 0a 20 20 20 26 26 20 28 73  ODE_WAL.   && (s
34ee0 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
34ef0 46 69 6c 65 6e 61 6d 65 29 3d 3d 30 20 20 20 20  Filename)==0    
34f00 20 20 20 20 20 20 20 2f 2a 20 54 65 6d 70 20 66         /* Temp f
34f10 69 6c 65 20 2a 2f 0a 20 20 20 20 20 20 20 7c 7c  ile */.       ||
34f20 20 21 73 71 6c 69 74 65 33 50 61 67 65 72 57 61   !sqlite3PagerWa
34f30 6c 53 75 70 70 6f 72 74 65 64 28 70 50 61 67 65  lSupported(pPage
34f40 72 29 29 20 20 20 2f 2a 20 4e 6f 20 73 68 61 72  r))   /* No shar
34f50 65 64 2d 6d 65 6d 6f 72 79 20 73 75 70 70 6f 72  ed-memory suppor
34f60 74 20 2a 2f 0a 20 20 29 7b 0a 20 20 20 20 65 4e  t */.  ){.    eN
34f70 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a 0a  ew = eOld;.  }..
34f80 20 20 69 66 28 20 28 65 4e 65 77 21 3d 65 4f 6c    if( (eNew!=eOl
34f90 64 29 0a 20 20 20 26 26 20 28 65 4f 6c 64 3d 3d  d).   && (eOld==
34fa0 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
34fb0 45 5f 57 41 4c 20 7c 7c 20 65 4e 65 77 3d 3d 50  E_WAL || eNew==P
34fc0 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
34fd0 5f 57 41 4c 29 0a 20 20 29 7b 0a 20 20 20 20 69  _WAL).  ){.    i
34fe0 66 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  f( !db->autoComm
34ff0 69 74 20 7c 7c 20 64 62 2d 3e 6e 56 64 62 65 52  it || db->nVdbeR
35000 65 61 64 3e 31 20 29 7b 0a 20 20 20 20 20 20 72  ead>1 ){.      r
35010 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
35020 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
35030 64 62 65 45 72 72 6f 72 28 70 2c 0a 20 20 20 20  dbeError(p,.    
35040 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 63 68        "cannot ch
35050 61 6e 67 65 20 25 73 20 77 61 6c 20 6d 6f 64 65  ange %s wal mode
35060 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 74   from within a t
35070 72 61 6e 73 61 63 74 69 6f 6e 22 2c 0a 20 20 20  ransaction",.   
35080 20 20 20 20 20 20 20 28 65 4e 65 77 3d 3d 50 41         (eNew==PA
35090 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
350a0 57 41 4c 20 3f 20 22 69 6e 74 6f 22 20 3a 20 22  WAL ? "into" : "
350b0 6f 75 74 20 6f 66 22 29 0a 20 20 20 20 20 20 29  out of").      )
350c0 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f  ;.      goto abo
350d0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
350e0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 0a 20 20  .    }else{. .  
350f0 20 20 20 20 69 66 28 20 65 4f 6c 64 3d 3d 50 41      if( eOld==PA
35100 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
35110 57 41 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 2f  WAL ){.        /
35120 2a 20 49 66 20 6c 65 61 76 69 6e 67 20 57 41 4c  * If leaving WAL
35130 20 6d 6f 64 65 2c 20 63 6c 6f 73 65 20 74 68 65   mode, close the
35140 20 6c 6f 67 20 66 69 6c 65 2e 20 49 66 20 73 75   log file. If su
35150 63 63 65 73 73 66 75 6c 2c 20 74 68 65 20 63 61  ccessful, the ca
35160 6c 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 6f  ll.        ** to
35170 20 50 61 67 65 72 43 6c 6f 73 65 57 61 6c 28 29   PagerCloseWal()
35180 20 63 68 65 63 6b 70 6f 69 6e 74 73 20 61 6e 64   checkpoints and
35190 20 64 65 6c 65 74 65 73 20 74 68 65 20 77 72 69   deletes the wri
351a0 74 65 2d 61 68 65 61 64 2d 6c 6f 67 20 0a 20 20  te-ahead-log .  
351b0 20 20 20 20 20 20 2a 2a 20 66 69 6c 65 2e 20 41        ** file. A
351c0 6e 20 45 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b  n EXCLUSIVE lock
351d0 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20 68 65   may still be he
351e0 6c 64 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  ld on the databa
351f0 73 65 20 66 69 6c 65 20 0a 20 20 20 20 20 20 20  se file .       
35200 20 2a 2a 20 61 66 74 65 72 20 61 20 73 75 63 63   ** after a succ
35210 65 73 73 66 75 6c 20 72 65 74 75 72 6e 2e 20 0a  essful return. .
35220 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20          */.     
35230 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 50     rc = sqlite3P
35240 61 67 65 72 43 6c 6f 73 65 57 61 6c 28 70 50 61  agerCloseWal(pPa
35250 67 65 72 2c 20 64 62 29 3b 0a 20 20 20 20 20 20  ger, db);.      
35260 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
35270 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20  _OK ){.         
35280 20 73 71 6c 69 74 65 33 50 61 67 65 72 53 65 74   sqlite3PagerSet
35290 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67  JournalMode(pPag
352a0 65 72 2c 20 65 4e 65 77 29 3b 0a 20 20 20 20 20  er, eNew);.     
352b0 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65     }.      }else
352c0 20 69 66 28 20 65 4f 6c 64 3d 3d 50 41 47 45 52   if( eOld==PAGER
352d0 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d  _JOURNALMODE_MEM
352e0 4f 52 59 20 29 7b 0a 20 20 20 20 20 20 20 20 2f  ORY ){.        /
352f0 2a 20 43 61 6e 6e 6f 74 20 74 72 61 6e 73 69 74  * Cannot transit
35300 69 6f 6e 20 64 69 72 65 63 74 6c 79 20 66 72 6f  ion directly fro
35310 6d 20 4d 45 4d 4f 52 59 20 74 6f 20 57 41 4c 2e  m MEMORY to WAL.
35320 20 20 55 73 65 20 6d 6f 64 65 20 4f 46 46 0a 20    Use mode OFF. 
35330 20 20 20 20 20 20 20 2a 2a 20 61 73 20 61 6e 20         ** as an 
35340 69 6e 74 65 72 6d 65 64 69 61 74 65 20 2a 2f 0a  intermediate */.
35350 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 50          sqlite3P
35360 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f  agerSetJournalMo
35370 64 65 28 70 50 61 67 65 72 2c 20 50 41 47 45 52  de(pPager, PAGER
35380 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46  _JOURNALMODE_OFF
35390 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20  );.      }.  .  
353a0 20 20 20 20 2f 2a 20 4f 70 65 6e 20 61 20 74 72      /* Open a tr
353b0 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65  ansaction on the
353c0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20   database file. 
353d0 52 65 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68  Regardless of th
353e0 65 20 6a 6f 75 72 6e 61 6c 0a 20 20 20 20 20 20  e journal.      
353f0 2a 2a 20 6d 6f 64 65 2c 20 74 68 69 73 20 74 72  ** mode, this tr
35400 61 6e 73 61 63 74 69 6f 6e 20 61 6c 77 61 79 73  ansaction always
35410 20 75 73 65 73 20 61 20 72 6f 6c 6c 62 61 63 6b   uses a rollback
35420 20 6a 6f 75 72 6e 61 6c 2e 0a 20 20 20 20 20 20   journal..      
35430 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  */.      assert(
35440 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 73 49   sqlite3BtreeIsI
35450 6e 54 72 61 6e 73 28 70 42 74 29 3d 3d 30 20 29  nTrans(pBt)==0 )
35460 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d  ;.      if( rc==
35470 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
35480 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
35490 33 42 74 72 65 65 53 65 74 56 65 72 73 69 6f 6e  3BtreeSetVersion
354a0 28 70 42 74 2c 20 28 65 4e 65 77 3d 3d 50 41 47  (pBt, (eNew==PAG
354b0 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57  ER_JOURNALMODE_W
354c0 41 4c 20 3f 20 32 20 3a 20 31 29 29 3b 0a 20 20  AL ? 2 : 1));.  
354d0 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
354e0 23 65 6e 64 69 66 20 2f 2a 20 69 66 6e 64 65 66  #endif /* ifndef
354f0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c   SQLITE_OMIT_WAL
35500 20 2a 2f 0a 0a 20 20 69 66 28 20 72 63 20 29 20   */..  if( rc ) 
35510 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 65  eNew = eOld;.  e
35520 4e 65 77 20 3d 20 73 71 6c 69 74 65 33 50 61 67  New = sqlite3Pag
35530 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65  erSetJournalMode
35540 28 70 50 61 67 65 72 2c 20 65 4e 65 77 29 3b 0a  (pPager, eNew);.
35550 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
35560 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74 61   MEM_Str|MEM_Sta
35570 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20  tic|MEM_Term;.  
35580 70 4f 75 74 2d 3e 7a 20 3d 20 28 63 68 61 72 20  pOut->z = (char 
35590 2a 29 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  *)sqlite3Journal
355a0 4d 6f 64 65 6e 61 6d 65 28 65 4e 65 77 29 3b 0a  Modename(eNew);.
355b0 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 73 71 6c 69    pOut->n = sqli
355c0 74 65 33 53 74 72 6c 65 6e 33 30 28 70 4f 75 74  te3Strlen30(pOut
355d0 2d 3e 7a 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e  ->z);.  pOut->en
355e0 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b  c = SQLITE_UTF8;
355f0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  .  sqlite3VdbeCh
35600 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75  angeEncoding(pOu
35610 74 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  t, encoding);.  
35620 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
35630 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
35640 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a 23 65  ;.  break;.};.#e
35650 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
35660 4d 49 54 5f 50 52 41 47 4d 41 20 2a 2f 0a 0a 23  MIT_PRAGMA */..#
35670 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
35680 54 45 5f 4f 4d 49 54 5f 56 41 43 55 55 4d 29 20  TE_OMIT_VACUUM) 
35690 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
356a0 54 45 5f 4f 4d 49 54 5f 41 54 54 41 43 48 29 0a  TE_OMIT_ATTACH).
356b0 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61 63 75 75  /* Opcode: Vacuu
356c0 6d 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  m P1 * * * *.**.
356d0 2a 2a 20 56 61 63 75 75 6d 20 74 68 65 20 65 6e  ** Vacuum the en
356e0 74 69 72 65 20 64 61 74 61 62 61 73 65 20 50 31  tire database P1
356f0 2e 20 20 50 31 20 69 73 20 30 20 66 6f 72 20 22  .  P1 is 0 for "
35700 6d 61 69 6e 22 2c 20 61 6e 64 20 32 20 6f 72 20  main", and 2 or 
35710 6d 6f 72 65 0a 2a 2a 20 66 6f 72 20 61 6e 20 61  more.** for an a
35720 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
35730 2e 20 20 54 68 65 20 22 74 65 6d 70 22 20 64 61  .  The "temp" da
35740 74 61 62 61 73 65 20 6d 61 79 20 6e 6f 74 20 62  tabase may not b
35750 65 20 76 61 63 75 75 6d 65 64 2e 0a 2a 2f 0a 63  e vacuumed..*/.c
35760 61 73 65 20 4f 50 5f 56 61 63 75 75 6d 3a 20 7b  ase OP_Vacuum: {
35770 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65  .  assert( p->re
35780 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 72  adOnly==0 );.  r
35790 63 20 3d 20 73 71 6c 69 74 65 33 52 75 6e 56 61  c = sqlite3RunVa
357a0 63 75 75 6d 28 26 70 2d 3e 7a 45 72 72 4d 73 67  cuum(&p->zErrMsg
357b0 2c 20 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a  , db, pOp->p1);.
357c0 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
357d0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
357e0 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  or;.  break;.}.#
357f0 65 6e 64 69 66 0a 0a 23 69 66 20 21 64 65 66 69  endif..#if !defi
35800 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
35810 41 55 54 4f 56 41 43 55 55 4d 29 0a 2f 2a 20 4f  AUTOVACUUM)./* O
35820 70 63 6f 64 65 3a 20 49 6e 63 72 56 61 63 75 75  pcode: IncrVacuu
35830 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  m P1 P2 * * *.**
35840 0a 2a 2a 20 50 65 72 66 6f 72 6d 20 61 20 73 69  .** Perform a si
35850 6e 67 6c 65 20 73 74 65 70 20 6f 66 20 74 68 65  ngle step of the
35860 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 76 61 63   incremental vac
35870 75 75 6d 20 70 72 6f 63 65 64 75 72 65 20 6f 6e  uum procedure on
35880 0a 2a 2a 20 74 68 65 20 50 31 20 64 61 74 61 62  .** the P1 datab
35890 61 73 65 2e 20 49 66 20 74 68 65 20 76 61 63 75  ase. If the vacu
358a0 75 6d 20 68 61 73 20 66 69 6e 69 73 68 65 64 2c  um has finished,
358b0 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63   jump to instruc
358c0 74 69 6f 6e 0a 2a 2a 20 50 32 2e 20 4f 74 68 65  tion.** P2. Othe
358d0 72 77 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f  rwise, fall thro
358e0 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
358f0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
35900 63 61 73 65 20 4f 50 5f 49 6e 63 72 56 61 63 75  case OP_IncrVacu
35910 75 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  um: {        /* 
35920 6a 75 6d 70 20 2a 2f 0a 20 20 42 74 72 65 65 20  jump */.  Btree 
35930 2a 70 42 74 3b 0a 0a 20 20 61 73 73 65 72 74 28  *pBt;..  assert(
35940 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
35950 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29  Op->p1<db->nDb )
35960 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61  ;.  assert( DbMa
35970 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d  skTest(p->btreeM
35980 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b  ask, pOp->p1) );
35990 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65  .  assert( p->re
359a0 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70  adOnly==0 );.  p
359b0 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70  Bt = db->aDb[pOp
359c0 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 72 63 20  ->p1].pBt;.  rc 
359d0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e  = sqlite3BtreeIn
359e0 63 72 56 61 63 75 75 6d 28 70 42 74 29 3b 0a 20  crVacuum(pBt);. 
359f0 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
35a00 28 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45  (rc==SQLITE_DONE
35a10 2c 32 29 3b 0a 20 20 69 66 28 20 72 63 20 29 7b  ,2);.  if( rc ){
35a20 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c  .    if( rc!=SQL
35a30 49 54 45 5f 44 4f 4e 45 20 29 20 67 6f 74 6f 20  ITE_DONE ) goto 
35a40 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
35a50 6f 72 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c  or;.    rc = SQL
35a60 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 67 6f 74 6f  ITE_OK;.    goto
35a70 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d   jump_to_p2;.  }
35a80 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
35a90 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45  if../* Opcode: E
35aa0 78 70 69 72 65 20 50 31 20 2a 20 2a 20 2a 20 2a  xpire P1 * * * *
35ab0 0a 2a 2a 0a 2a 2a 20 43 61 75 73 65 20 70 72 65  .**.** Cause pre
35ac0 63 6f 6d 70 69 6c 65 64 20 73 74 61 74 65 6d 65  compiled stateme
35ad0 6e 74 73 20 74 6f 20 65 78 70 69 72 65 2e 20 20  nts to expire.  
35ae0 57 68 65 6e 20 61 6e 20 65 78 70 69 72 65 64 20  When an expired 
35af0 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 69 73 20  statement.** is 
35b00 65 78 65 63 75 74 65 64 20 75 73 69 6e 67 20 73  executed using s
35b10 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 69 74  qlite3_step() it
35b20 20 77 69 6c 6c 20 65 69 74 68 65 72 20 61 75 74   will either aut
35b30 6f 6d 61 74 69 63 61 6c 6c 79 0a 2a 2a 20 72 65  omatically.** re
35b40 70 72 65 70 61 72 65 20 69 74 73 65 6c 66 20 28  prepare itself (
35b50 69 66 20 69 74 20 77 61 73 20 6f 72 69 67 69 6e  if it was origin
35b60 61 6c 6c 79 20 63 72 65 61 74 65 64 20 75 73 69  ally created usi
35b70 6e 67 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61  ng sqlite3_prepa
35b80 72 65 5f 76 32 28 29 29 0a 2a 2a 20 6f 72 20 69  re_v2()).** or i
35b90 74 20 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68  t will fail with
35ba0 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 2e 0a   SQLITE_SCHEMA..
35bb0 2a 2a 20 0a 2a 2a 20 49 66 20 50 31 20 69 73 20  ** .** If P1 is 
35bc0 30 2c 20 74 68 65 6e 20 61 6c 6c 20 53 51 4c 20  0, then all SQL 
35bd0 73 74 61 74 65 6d 65 6e 74 73 20 62 65 63 6f 6d  statements becom
35be0 65 20 65 78 70 69 72 65 64 2e 20 49 66 20 50 31  e expired. If P1
35bf0 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a   is non-zero,.**
35c00 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 65 20 63   then only the c
35c10 75 72 72 65 6e 74 6c 79 20 65 78 65 63 75 74 69  urrently executi
35c20 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  ng statement is 
35c30 65 78 70 69 72 65 64 2e 0a 2a 2f 0a 63 61 73 65  expired..*/.case
35c40 20 4f 50 5f 45 78 70 69 72 65 3a 20 7b 0a 20 20   OP_Expire: {.  
35c50 69 66 28 20 21 70 4f 70 2d 3e 70 31 20 29 7b 0a  if( !pOp->p1 ){.
35c60 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72      sqlite3Expir
35c70 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65  ePreparedStateme
35c80 6e 74 73 28 64 62 29 3b 0a 20 20 7d 65 6c 73 65  nts(db);.  }else
35c90 7b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64  {.    p->expired
35ca0 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   = 1;.  }.  brea
35cb0 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  k;.}..#ifndef SQ
35cc0 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44  LITE_OMIT_SHARED
35cd0 5f 43 41 43 48 45 0a 2f 2a 20 4f 70 63 6f 64 65  _CACHE./* Opcode
35ce0 3a 20 54 61 62 6c 65 4c 6f 63 6b 20 50 31 20 50  : TableLock P1 P
35cf0 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
35d00 6f 70 73 69 73 3a 20 69 44 62 3d 50 31 20 72 6f  opsis: iDb=P1 ro
35d10 6f 74 3d 50 32 20 77 72 69 74 65 3d 50 33 0a 2a  ot=P2 write=P3.*
35d20 2a 0a 2a 2a 20 4f 62 74 61 69 6e 20 61 20 6c 6f  *.** Obtain a lo
35d30 63 6b 20 6f 6e 20 61 20 70 61 72 74 69 63 75 6c  ck on a particul
35d40 61 72 20 74 61 62 6c 65 2e 20 54 68 69 73 20 69  ar table. This i
35d50 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 6f 6e  nstruction is on
35d60 6c 79 20 75 73 65 64 20 77 68 65 6e 0a 2a 2a 20  ly used when.** 
35d70 74 68 65 20 73 68 61 72 65 64 2d 63 61 63 68 65  the shared-cache
35d80 20 66 65 61 74 75 72 65 20 69 73 20 65 6e 61 62   feature is enab
35d90 6c 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 69  led. .**.** P1 i
35da0 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74  s the index of t
35db0 68 65 20 64 61 74 61 62 61 73 65 20 69 6e 20 73  he database in s
35dc0 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20  qlite3.aDb[] of 
35dd0 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  the database.** 
35de0 6f 6e 20 77 68 69 63 68 20 74 68 65 20 6c 6f 63  on which the loc
35df0 6b 20 69 73 20 61 63 71 75 69 72 65 64 2e 20 20  k is acquired.  
35e00 41 20 72 65 61 64 6c 6f 63 6b 20 69 73 20 6f 62  A readlock is ob
35e10 74 61 69 6e 65 64 20 69 66 20 50 33 3d 3d 30 20  tained if P3==0 
35e20 6f 72 0a 2a 2a 20 61 20 77 72 69 74 65 20 6c 6f  or.** a write lo
35e30 63 6b 20 69 66 20 50 33 3d 3d 31 2e 0a 2a 2a 0a  ck if P3==1..**.
35e40 2a 2a 20 50 32 20 63 6f 6e 74 61 69 6e 73 20 74  ** P2 contains t
35e50 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20  he root-page of 
35e60 74 68 65 20 74 61 62 6c 65 20 74 6f 20 6c 6f 63  the table to loc
35e70 6b 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 63 6f 6e 74  k..**.** P4 cont
35e80 61 69 6e 73 20 61 20 70 6f 69 6e 74 65 72 20 74  ains a pointer t
35e90 6f 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  o the name of th
35ea0 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6c 6f  e table being lo
35eb0 63 6b 65 64 2e 20 54 68 69 73 20 69 73 20 6f 6e  cked. This is on
35ec0 6c 79 0a 2a 2a 20 75 73 65 64 20 74 6f 20 67 65  ly.** used to ge
35ed0 6e 65 72 61 74 65 20 61 6e 20 65 72 72 6f 72 20  nerate an error 
35ee0 6d 65 73 73 61 67 65 20 69 66 20 74 68 65 20 6c  message if the l
35ef0 6f 63 6b 20 63 61 6e 6e 6f 74 20 62 65 20 6f 62  ock cannot be ob
35f00 74 61 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65 20  tained..*/.case 
35f10 4f 50 5f 54 61 62 6c 65 4c 6f 63 6b 3a 20 7b 0a  OP_TableLock: {.
35f20 20 20 75 38 20 69 73 57 72 69 74 65 4c 6f 63 6b    u8 isWriteLock
35f30 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70 33 3b 0a   = (u8)pOp->p3;.
35f40 20 20 69 66 28 20 69 73 57 72 69 74 65 4c 6f 63    if( isWriteLoc
35f50 6b 20 7c 7c 20 30 3d 3d 28 64 62 2d 3e 66 6c 61  k || 0==(db->fla
35f60 67 73 26 53 51 4c 49 54 45 5f 52 65 61 64 55 6e  gs&SQLITE_ReadUn
35f70 63 6f 6d 6d 69 74 29 20 29 7b 0a 20 20 20 20 69  commit) ){.    i
35f80 6e 74 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b  nt p1 = pOp->p1;
35f90 20 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 31   .    assert( p1
35fa0 3e 3d 30 20 26 26 20 70 31 3c 64 62 2d 3e 6e 44  >=0 && p1<db->nD
35fb0 62 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  b );.    assert(
35fc0 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
35fd0 74 72 65 65 4d 61 73 6b 2c 20 70 31 29 20 29 3b  treeMask, p1) );
35fe0 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 73 57  .    assert( isW
35ff0 72 69 74 65 4c 6f 63 6b 3d 3d 30 20 7c 7c 20 69  riteLock==0 || i
36000 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 31 20 29 3b  sWriteLock==1 );
36010 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
36020 33 42 74 72 65 65 4c 6f 63 6b 54 61 62 6c 65 28  3BtreeLockTable(
36030 64 62 2d 3e 61 44 62 5b 70 31 5d 2e 70 42 74 2c  db->aDb[p1].pBt,
36040 20 70 4f 70 2d 3e 70 32 2c 20 69 73 57 72 69 74   pOp->p2, isWrit
36050 65 4c 6f 63 6b 29 3b 0a 20 20 20 20 69 66 28 20  eLock);.    if( 
36060 72 63 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  rc ){.      if( 
36070 28 72 63 26 30 78 46 46 29 3d 3d 53 51 4c 49 54  (rc&0xFF)==SQLIT
36080 45 5f 4c 4f 43 4b 45 44 20 29 7b 0a 20 20 20 20  E_LOCKED ){.    
36090 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
360a0 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  z = pOp->p4.z;. 
360b0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
360c0 62 65 45 72 72 6f 72 28 70 2c 20 22 64 61 74 61  beError(p, "data
360d0 62 61 73 65 20 74 61 62 6c 65 20 69 73 20 6c 6f  base table is lo
360e0 63 6b 65 64 3a 20 25 73 22 2c 20 7a 29 3b 0a 20  cked: %s", z);. 
360f0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 67 6f 74       }.      got
36100 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
36110 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  rror;.    }.  }.
36120 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
36130 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
36140 5f 53 48 41 52 45 44 5f 43 41 43 48 45 20 2a 2f  _SHARED_CACHE */
36150 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
36160 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
36170 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 42  LE./* Opcode: VB
36180 65 67 69 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a  egin * * * P4 *.
36190 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20  **.** P4 may be 
361a0 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20  a pointer to an 
361b0 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72  sqlite3_vtab str
361c0 75 63 74 75 72 65 2e 20 49 66 20 73 6f 2c 20 63  ucture. If so, c
361d0 61 6c 6c 20 74 68 65 20 0a 2a 2a 20 78 42 65 67  all the .** xBeg
361e0 69 6e 20 6d 65 74 68 6f 64 20 66 6f 72 20 74 68  in method for th
361f0 61 74 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  at table..**.** 
36200 41 6c 73 6f 2c 20 77 68 65 74 68 65 72 20 6f 72  Also, whether or
36210 20 6e 6f 74 20 50 34 20 69 73 20 73 65 74 2c 20   not P4 is set, 
36220 63 68 65 63 6b 20 74 68 61 74 20 74 68 69 73 20  check that this 
36230 69 73 20 6e 6f 74 20 62 65 69 6e 67 20 63 61 6c  is not being cal
36240 6c 65 64 20 66 72 6f 6d 0a 2a 2a 20 77 69 74 68  led from.** with
36250 69 6e 20 61 20 63 61 6c 6c 62 61 63 6b 20 74 6f  in a callback to
36260 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
36270 20 78 53 79 6e 63 28 29 20 6d 65 74 68 6f 64 2e   xSync() method.
36280 20 49 66 20 69 74 20 69 73 2c 20 74 68 65 20 65   If it is, the e
36290 72 72 6f 72 0a 2a 2a 20 63 6f 64 65 20 77 69 6c  rror.** code wil
362a0 6c 20 62 65 20 73 65 74 20 74 6f 20 53 51 4c 49  l be set to SQLI
362b0 54 45 5f 4c 4f 43 4b 45 44 2e 0a 2a 2f 0a 63 61  TE_LOCKED..*/.ca
362c0 73 65 20 4f 50 5f 56 42 65 67 69 6e 3a 20 7b 0a  se OP_VBegin: {.
362d0 20 20 56 54 61 62 6c 65 20 2a 70 56 54 61 62 3b    VTable *pVTab;
362e0 0a 20 20 70 56 54 61 62 20 3d 20 70 4f 70 2d 3e  .  pVTab = pOp->
362f0 70 34 2e 70 56 74 61 62 3b 0a 20 20 72 63 20 3d  p4.pVtab;.  rc =
36300 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69   sqlite3VtabBegi
36310 6e 28 64 62 2c 20 70 56 54 61 62 29 3b 0a 20 20  n(db, pVTab);.  
36320 69 66 28 20 70 56 54 61 62 20 29 20 73 71 6c 69  if( pVTab ) sqli
36330 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72  te3VtabImportErr
36340 6d 73 67 28 70 2c 20 70 56 54 61 62 2d 3e 70 56  msg(p, pVTab->pV
36350 74 61 62 29 3b 0a 20 20 69 66 28 20 72 63 20 29  tab);.  if( rc )
36360 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
36370 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61  to_error;.  brea
36380 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
36390 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
363a0 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
363b0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
363c0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
363d0 4f 70 63 6f 64 65 3a 20 56 43 72 65 61 74 65 20  Opcode: VCreate 
363e0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
363f0 2a 20 50 32 20 69 73 20 61 20 72 65 67 69 73 74  * P2 is a regist
36400 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68  er that holds th
36410 65 20 6e 61 6d 65 20 6f 66 20 61 20 76 69 72 74  e name of a virt
36420 75 61 6c 20 74 61 62 6c 65 20 69 6e 20 64 61 74  ual table in dat
36430 61 62 61 73 65 20 0a 2a 2a 20 50 31 2e 20 43 61  abase .** P1. Ca
36440 6c 6c 20 74 68 65 20 78 43 72 65 61 74 65 20 6d  ll the xCreate m
36450 65 74 68 6f 64 20 66 6f 72 20 74 68 61 74 20 74  ethod for that t
36460 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  able..*/.case OP
36470 5f 56 43 72 65 61 74 65 3a 20 7b 0a 20 20 4d 65  _VCreate: {.  Me
36480 6d 20 73 4d 65 6d 3b 20 20 20 20 20 20 20 20 20  m sMem;         
36490 20 2f 2a 20 46 6f 72 20 73 74 6f 72 69 6e 67 20   /* For storing 
364a0 74 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67  the record being
364b0 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f   decoded */.  co
364c0 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 62 3b 20  nst char *zTab; 
364d0 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
364e0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f  virtual table */
364f0 0a 0a 20 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d  ..  memset(&sMem
36500 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d  , 0, sizeof(sMem
36510 29 29 3b 0a 20 20 73 4d 65 6d 2e 64 62 20 3d 20  ));.  sMem.db = 
36520 64 62 3b 0a 20 20 2f 2a 20 42 65 63 61 75 73 65  db;.  /* Because
36530 20 50 32 20 69 73 20 61 6c 77 61 79 73 20 61 20   P2 is always a 
36540 73 74 61 74 69 63 20 73 74 72 69 6e 67 2c 20 69  static string, i
36550 74 20 69 73 20 69 6d 70 6f 73 73 69 62 6c 65 20  t is impossible 
36560 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 73 71 6c  for the.  ** sql
36570 69 74 65 33 56 64 62 65 4d 65 6d 43 6f 70 79 28  ite3VdbeMemCopy(
36580 29 20 74 6f 20 66 61 69 6c 20 2a 2f 0a 20 20 61  ) to fail */.  a
36590 73 73 65 72 74 28 20 28 61 4d 65 6d 5b 70 4f 70  ssert( (aMem[pOp
365a0 2d 3e 70 32 5d 2e 66 6c 61 67 73 20 26 20 4d 45  ->p2].flags & ME
365b0 4d 5f 53 74 72 29 21 3d 30 20 29 3b 0a 20 20 61  M_Str)!=0 );.  a
365c0 73 73 65 72 74 28 20 28 61 4d 65 6d 5b 70 4f 70  ssert( (aMem[pOp
365d0 2d 3e 70 32 5d 2e 66 6c 61 67 73 20 26 20 4d 45  ->p2].flags & ME
365e0 4d 5f 53 74 61 74 69 63 29 21 3d 30 20 29 3b 0a  M_Static)!=0 );.
365f0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
36600 62 65 4d 65 6d 43 6f 70 79 28 26 73 4d 65 6d 2c  beMemCopy(&sMem,
36610 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29   &aMem[pOp->p2])
36620 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d  ;.  assert( rc==
36630 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 7a  SQLITE_OK );.  z
36640 54 61 62 20 3d 20 28 63 6f 6e 73 74 20 63 68 61  Tab = (const cha
36650 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  r*)sqlite3_value
36660 5f 74 65 78 74 28 26 73 4d 65 6d 29 3b 0a 20 20  _text(&sMem);.  
36670 61 73 73 65 72 74 28 20 7a 54 61 62 20 7c 7c 20  assert( zTab || 
36680 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
36690 20 29 3b 0a 20 20 69 66 28 20 7a 54 61 62 20 29   );.  if( zTab )
366a0 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
366b0 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61 74 65  e3VtabCallCreate
366c0 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 7a 54  (db, pOp->p1, zT
366d0 61 62 2c 20 26 70 2d 3e 7a 45 72 72 4d 73 67 29  ab, &p->zErrMsg)
366e0 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56  ;.  }.  sqlite3V
366f0 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 73  dbeMemRelease(&s
36700 4d 65 6d 29 3b 0a 20 20 69 66 28 20 72 63 20 29  Mem);.  if( rc )
36710 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
36720 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61  to_error;.  brea
36730 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
36740 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
36750 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
36760 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
36770 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
36780 4f 70 63 6f 64 65 3a 20 56 44 65 73 74 72 6f 79  Opcode: VDestroy
36790 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
367a0 2a 2a 20 50 34 20 69 73 20 74 68 65 20 6e 61 6d  ** P4 is the nam
367b0 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74  e of a virtual t
367c0 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73 65  able in database
367d0 20 50 31 2e 20 20 43 61 6c 6c 20 74 68 65 20 78   P1.  Call the x
367e0 44 65 73 74 72 6f 79 20 6d 65 74 68 6f 64 0a 2a  Destroy method.*
367f0 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65 2e  * of that table.
36800 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 44 65 73  .*/.case OP_VDes
36810 74 72 6f 79 3a 20 7b 0a 20 20 64 62 2d 3e 6e 56  troy: {.  db->nV
36820 44 65 73 74 72 6f 79 2b 2b 3b 0a 20 20 72 63 20  Destroy++;.  rc 
36830 3d 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c  = sqlite3VtabCal
36840 6c 44 65 73 74 72 6f 79 28 64 62 2c 20 70 4f 70  lDestroy(db, pOp
36850 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  ->p1, pOp->p4.z)
36860 3b 0a 20 20 64 62 2d 3e 6e 56 44 65 73 74 72 6f  ;.  db->nVDestro
36870 79 2d 2d 3b 0a 20 20 69 66 28 20 72 63 20 29 20  y--;.  if( rc ) 
36880 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
36890 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b  o_error;.  break
368a0 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
368b0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
368c0 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64  LTABLE */..#ifnd
368d0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
368e0 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
368f0 70 63 6f 64 65 3a 20 56 4f 70 65 6e 20 50 31 20  pcode: VOpen P1 
36900 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50  * * P4 *.**.** P
36910 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
36920 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  o a virtual tabl
36930 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c  e object, an sql
36940 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74  ite3_vtab struct
36950 75 72 65 2e 0a 2a 2a 20 50 31 20 69 73 20 61 20  ure..** P1 is a 
36960 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 2e 20 20  cursor number.  
36970 54 68 69 73 20 6f 70 63 6f 64 65 20 6f 70 65 6e  This opcode open
36980 73 20 61 20 63 75 72 73 6f 72 20 74 6f 20 74 68  s a cursor to th
36990 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62  e virtual.** tab
369a0 6c 65 20 61 6e 64 20 73 74 6f 72 65 73 20 74 68  le and stores th
369b0 61 74 20 63 75 72 73 6f 72 20 69 6e 20 50 31 2e  at cursor in P1.
369c0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 4f 70 65  .*/.case OP_VOpe
369d0 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  n: {.  VdbeCurso
369e0 72 20 2a 70 43 75 72 3b 0a 20 20 73 71 6c 69 74  r *pCur;.  sqlit
369f0 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a  e3_vtab_cursor *
36a00 70 56 43 75 72 3b 0a 20 20 73 71 6c 69 74 65 33  pVCur;.  sqlite3
36a10 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20  _vtab *pVtab;.  
36a20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f  const sqlite3_mo
36a30 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a  dule *pModule;..
36a40 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73    assert( p->bIs
36a50 52 65 61 64 65 72 20 29 3b 0a 20 20 70 43 75 72  Reader );.  pCur
36a60 20 3d 20 30 3b 0a 20 20 70 56 43 75 72 20 3d 20   = 0;.  pVCur = 
36a70 30 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70  0;.  pVtab = pOp
36a80 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61  ->p4.pVtab->pVta
36a90 62 3b 0a 20 20 69 66 28 20 70 56 74 61 62 3d 3d  b;.  if( pVtab==
36aa0 30 20 7c 7c 20 4e 45 56 45 52 28 70 56 74 61 62  0 || NEVER(pVtab
36ab0 2d 3e 70 4d 6f 64 75 6c 65 3d 3d 30 29 20 29 7b  ->pModule==0) ){
36ac0 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
36ad0 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 67 6f 74  _LOCKED;.    got
36ae0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
36af0 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 70 4d 6f 64  rror;.  }.  pMod
36b00 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f  ule = pVtab->pMo
36b10 64 75 6c 65 3b 0a 20 20 72 63 20 3d 20 70 4d 6f  dule;.  rc = pMo
36b20 64 75 6c 65 2d 3e 78 4f 70 65 6e 28 70 56 74 61  dule->xOpen(pVta
36b30 62 2c 20 26 70 56 43 75 72 29 3b 0a 20 20 73 71  b, &pVCur);.  sq
36b40 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45  lite3VtabImportE
36b50 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b  rrmsg(p, pVtab);
36b60 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
36b70 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
36b80 72 6f 72 3b 0a 0a 20 20 2f 2a 20 49 6e 69 74 69  ror;..  /* Initi
36b90 61 6c 69 7a 65 20 73 71 6c 69 74 65 33 5f 76 74  alize sqlite3_vt
36ba0 61 62 5f 63 75 72 73 6f 72 20 62 61 73 65 20 63  ab_cursor base c
36bb0 6c 61 73 73 20 2a 2f 0a 20 20 70 56 43 75 72 2d  lass */.  pVCur-
36bc0 3e 70 56 74 61 62 20 3d 20 70 56 74 61 62 3b 0a  >pVtab = pVtab;.
36bd0 0a 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65  .  /* Initialize
36be0 20 76 64 62 65 20 63 75 72 73 6f 72 20 6f 62 6a   vdbe cursor obj
36bf0 65 63 74 20 2a 2f 0a 20 20 70 43 75 72 20 3d 20  ect */.  pCur = 
36c00 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70  allocateCursor(p
36c10 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 2d 31  , pOp->p1, 0, -1
36c20 2c 20 43 55 52 54 59 50 45 5f 56 54 41 42 29 3b  , CURTYPE_VTAB);
36c30 0a 20 20 69 66 28 20 70 43 75 72 20 29 7b 0a 20  .  if( pCur ){. 
36c40 20 20 20 70 43 75 72 2d 3e 75 63 2e 70 56 43 75     pCur->uc.pVCu
36c50 72 20 3d 20 70 56 43 75 72 3b 0a 20 20 20 20 70  r = pVCur;.    p
36c60 56 74 61 62 2d 3e 6e 52 65 66 2b 2b 3b 0a 20 20  Vtab->nRef++;.  
36c70 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
36c80 74 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  t( db->mallocFai
36c90 6c 65 64 20 29 3b 0a 20 20 20 20 70 4d 6f 64 75  led );.    pModu
36ca0 6c 65 2d 3e 78 43 6c 6f 73 65 28 70 56 43 75 72  le->xClose(pVCur
36cb0 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  );.    goto no_m
36cc0 65 6d 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  em;.  }.  break;
36cd0 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
36ce0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
36cf0 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
36d00 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
36d10 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
36d20 63 6f 64 65 3a 20 56 46 69 6c 74 65 72 20 50 31  code: VFilter P1
36d30 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
36d40 79 6e 6f 70 73 69 73 3a 20 69 70 6c 61 6e 3d 72  ynopsis: iplan=r
36d50 5b 50 33 5d 20 7a 70 6c 61 6e 3d 27 50 34 27 0a  [P3] zplan='P4'.
36d60 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 63 75  **.** P1 is a cu
36d70 72 73 6f 72 20 6f 70 65 6e 65 64 20 75 73 69 6e  rsor opened usin
36d80 67 20 56 4f 70 65 6e 2e 20 20 50 32 20 69 73 20  g VOpen.  P2 is 
36d90 61 6e 20 61 64 64 72 65 73 73 20 74 6f 20 6a 75  an address to ju
36da0 6d 70 20 74 6f 20 69 66 0a 2a 2a 20 74 68 65 20  mp to if.** the 
36db0 66 69 6c 74 65 72 65 64 20 72 65 73 75 6c 74 20  filtered result 
36dc0 73 65 74 20 69 73 20 65 6d 70 74 79 2e 0a 2a 2a  set is empty..**
36dd0 0a 2a 2a 20 50 34 20 69 73 20 65 69 74 68 65 72  .** P4 is either
36de0 20 4e 55 4c 4c 20 6f 72 20 61 20 73 74 72 69 6e   NULL or a strin
36df0 67 20 74 68 61 74 20 77 61 73 20 67 65 6e 65 72  g that was gener
36e00 61 74 65 64 20 62 79 20 74 68 65 20 78 42 65 73  ated by the xBes
36e10 74 49 6e 64 65 78 0a 2a 2a 20 6d 65 74 68 6f 64  tIndex.** method
36e20 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20   of the module. 
36e30 20 54 68 65 20 69 6e 74 65 72 70 72 65 74 61 74   The interpretat
36e40 69 6f 6e 20 6f 66 20 74 68 65 20 50 34 20 73 74  ion of the P4 st
36e50 72 69 6e 67 20 69 73 20 6c 65 66 74 0a 2a 2a 20  ring is left.** 
36e60 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 69 6d  to the module im
36e70 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a  plementation..**
36e80 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
36e90 69 6e 76 6f 6b 65 73 20 74 68 65 20 78 46 69 6c  invokes the xFil
36ea0 74 65 72 20 6d 65 74 68 6f 64 20 6f 6e 20 74 68  ter method on th
36eb0 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
36ec0 73 70 65 63 69 66 69 65 64 0a 2a 2a 20 62 79 20  specified.** by 
36ed0 50 31 2e 20 20 54 68 65 20 69 6e 74 65 67 65 72  P1.  The integer
36ee0 20 71 75 65 72 79 20 70 6c 61 6e 20 70 61 72 61   query plan para
36ef0 6d 65 74 65 72 20 74 6f 20 78 46 69 6c 74 65 72  meter to xFilter
36f00 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
36f10 67 69 73 74 65 72 0a 2a 2a 20 50 33 2e 20 52 65  gister.** P3. Re
36f20 67 69 73 74 65 72 20 50 33 2b 31 20 73 74 6f 72  gister P3+1 stor
36f30 65 73 20 74 68 65 20 61 72 67 63 20 70 61 72 61  es the argc para
36f40 6d 65 74 65 72 20 74 6f 20 62 65 20 70 61 73 73  meter to be pass
36f50 65 64 20 74 6f 20 74 68 65 0a 2a 2a 20 78 46 69  ed to the.** xFi
36f60 6c 74 65 72 20 6d 65 74 68 6f 64 2e 20 52 65 67  lter method. Reg
36f70 69 73 74 65 72 73 20 50 33 2b 32 2e 2e 50 33 2b  isters P3+2..P3+
36f80 31 2b 61 72 67 63 20 61 72 65 20 74 68 65 20 61  1+argc are the a
36f90 72 67 63 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61  rgc.** additiona
36fa0 6c 20 70 61 72 61 6d 65 74 65 72 73 20 77 68 69  l parameters whi
36fb0 63 68 20 61 72 65 20 70 61 73 73 65 64 20 74 6f  ch are passed to
36fc0 0a 2a 2a 20 78 46 69 6c 74 65 72 20 61 73 20 61  .** xFilter as a
36fd0 72 67 76 2e 20 52 65 67 69 73 74 65 72 20 50 33  rgv. Register P3
36fe0 2b 32 20 62 65 63 6f 6d 65 73 20 61 72 67 76 5b  +2 becomes argv[
36ff0 30 5d 20 77 68 65 6e 20 70 61 73 73 65 64 20 74  0] when passed t
37000 6f 20 78 46 69 6c 74 65 72 2e 0a 2a 2a 0a 2a 2a  o xFilter..**.**
37010 20 41 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20   A jump is made 
37020 74 6f 20 50 32 20 69 66 20 74 68 65 20 72 65 73  to P2 if the res
37030 75 6c 74 20 73 65 74 20 61 66 74 65 72 20 66 69  ult set after fi
37040 6c 74 65 72 69 6e 67 20 77 6f 75 6c 64 20 62 65  ltering would be
37050 20 65 6d 70 74 79 2e 0a 2a 2f 0a 63 61 73 65 20   empty..*/.case 
37060 4f 50 5f 56 46 69 6c 74 65 72 3a 20 7b 20 20 20  OP_VFilter: {   
37070 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74  /* jump */.  int
37080 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69 51 75   nArg;.  int iQu
37090 65 72 79 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c  ery;.  const sql
370a0 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
370b0 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 51 75  dule;.  Mem *pQu
370c0 65 72 79 3b 0a 20 20 4d 65 6d 20 2a 70 41 72 67  ery;.  Mem *pArg
370d0 63 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  c;.  sqlite3_vta
370e0 62 5f 63 75 72 73 6f 72 20 2a 70 56 43 75 72 3b  b_cursor *pVCur;
370f0 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
37100 2a 70 56 74 61 62 3b 0a 20 20 56 64 62 65 43 75  *pVtab;.  VdbeCu
37110 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 69 6e  rsor *pCur;.  in
37120 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 69 3b 0a  t res;.  int i;.
37130 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a 0a    Mem **apArg;..
37140 20 20 70 51 75 65 72 79 20 3d 20 26 61 4d 65 6d    pQuery = &aMem
37150 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 41 72  [pOp->p3];.  pAr
37160 67 63 20 3d 20 26 70 51 75 65 72 79 5b 31 5d 3b  gc = &pQuery[1];
37170 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43  .  pCur = p->apC
37180 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
37190 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
371a0 64 28 70 51 75 65 72 79 29 20 29 3b 0a 20 20 52  d(pQuery) );.  R
371b0 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
371c0 70 2d 3e 70 33 2c 20 70 51 75 65 72 79 29 3b 0a  p->p3, pQuery);.
371d0 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e    assert( pCur->
371e0 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
371f0 45 5f 56 54 41 42 20 29 3b 0a 20 20 70 56 43 75  E_VTAB );.  pVCu
37200 72 20 3d 20 70 43 75 72 2d 3e 75 63 2e 70 56 43  r = pCur->uc.pVC
37210 75 72 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 56  ur;.  pVtab = pV
37220 43 75 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d  Cur->pVtab;.  pM
37230 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70  odule = pVtab->p
37240 4d 6f 64 75 6c 65 3b 0a 0a 20 20 2f 2a 20 47 72  Module;..  /* Gr
37250 61 62 20 74 68 65 20 69 6e 64 65 78 20 6e 75 6d  ab the index num
37260 62 65 72 20 61 6e 64 20 61 72 67 63 20 70 61 72  ber and argc par
37270 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20 61 73 73  ameters */.  ass
37280 65 72 74 28 20 28 70 51 75 65 72 79 2d 3e 66 6c  ert( (pQuery->fl
37290 61 67 73 26 4d 45 4d 5f 49 6e 74 29 21 3d 30 20  ags&MEM_Int)!=0 
372a0 26 26 20 70 41 72 67 63 2d 3e 66 6c 61 67 73 3d  && pArgc->flags=
372b0 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 6e 41  =MEM_Int );.  nA
372c0 72 67 20 3d 20 28 69 6e 74 29 70 41 72 67 63 2d  rg = (int)pArgc-
372d0 3e 75 2e 69 3b 0a 20 20 69 51 75 65 72 79 20 3d  >u.i;.  iQuery =
372e0 20 28 69 6e 74 29 70 51 75 65 72 79 2d 3e 75 2e   (int)pQuery->u.
372f0 69 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  i;..  /* Invoke 
37300 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65 74 68  the xFilter meth
37310 6f 64 20 2a 2f 0a 20 20 72 65 73 20 3d 20 30 3b  od */.  res = 0;
37320 0a 20 20 61 70 41 72 67 20 3d 20 70 2d 3e 61 70  .  apArg = p->ap
37330 41 72 67 3b 0a 20 20 66 6f 72 28 69 20 3d 20 30  Arg;.  for(i = 0
37340 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a  ; i<nArg; i++){.
37350 20 20 20 20 61 70 41 72 67 5b 69 5d 20 3d 20 26      apArg[i] = &
37360 70 41 72 67 63 5b 69 2b 31 5d 3b 0a 20 20 7d 0a  pArgc[i+1];.  }.
37370 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e    rc = pModule->
37380 78 46 69 6c 74 65 72 28 70 56 43 75 72 2c 20 69  xFilter(pVCur, i
37390 51 75 65 72 79 2c 20 70 4f 70 2d 3e 70 34 2e 7a  Query, pOp->p4.z
373a0 2c 20 6e 41 72 67 2c 20 61 70 41 72 67 29 3b 0a  , nArg, apArg);.
373b0 20 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70    sqlite3VtabImp
373c0 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74  ortErrmsg(p, pVt
373d0 61 62 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  ab);.  if( rc ) 
373e0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
373f0 6f 5f 65 72 72 6f 72 3b 0a 20 20 72 65 73 20 3d  o_error;.  res =
37400 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70   pModule->xEof(p
37410 56 43 75 72 29 3b 0a 20 20 70 43 75 72 2d 3e 6e  VCur);.  pCur->n
37420 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 56 64  ullRow = 0;.  Vd
37430 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65  beBranchTaken(re
37440 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72  s!=0,2);.  if( r
37450 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  es ) goto jump_t
37460 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  o_p2;.  break;.}
37470 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
37480 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
37490 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
374a0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
374b0 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
374c0 64 65 3a 20 56 43 6f 6c 75 6d 6e 20 50 31 20 50  de: VColumn P1 P
374d0 32 20 50 33 20 2a 20 50 35 0a 2a 2a 20 53 79 6e  2 P3 * P5.** Syn
374e0 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 76 63 6f  opsis: r[P3]=vco
374f0 6c 75 6d 6e 28 50 32 29 0a 2a 2a 0a 2a 2a 20 53  lumn(P2).**.** S
37500 74 6f 72 65 20 69 6e 20 72 65 67 69 73 74 65 72  tore in register
37510 20 50 33 20 74 68 65 20 76 61 6c 75 65 20 6f 66   P3 the value of
37520 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d   the P2-th colum
37530 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 63 75 72 72  n of.** the curr
37540 65 6e 74 20 72 6f 77 20 6f 66 20 74 68 65 20 76  ent row of the v
37550 69 72 74 75 61 6c 2d 74 61 62 6c 65 20 6f 66 20  irtual-table of 
37560 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 0a 2a 2a  cursor P1..**.**
37570 20 49 66 20 74 68 65 20 56 43 6f 6c 75 6d 6e 20   If the VColumn 
37580 6f 70 63 6f 64 65 20 69 73 20 62 65 69 6e 67 20  opcode is being 
37590 75 73 65 64 20 74 6f 20 66 65 74 63 68 20 74 68  used to fetch th
375a0 65 20 76 61 6c 75 65 20 6f 66 0a 2a 2a 20 61 6e  e value of.** an
375b0 20 75 6e 63 68 61 6e 67 69 6e 67 20 63 6f 6c 75   unchanging colu
375c0 6d 6e 20 64 75 72 69 6e 67 20 61 6e 20 55 50 44  mn during an UPD
375d0 41 54 45 20 6f 70 65 72 61 74 69 6f 6e 2c 20 74  ATE operation, t
375e0 68 65 6e 20 74 68 65 20 50 35 0a 2a 2a 20 76 61  hen the P5.** va
375f0 6c 75 65 20 69 73 20 31 2e 20 20 4f 74 68 65 72  lue is 1.  Other
37600 77 69 73 65 2c 20 50 35 20 69 73 20 30 2e 20 20  wise, P5 is 0.  
37610 54 68 65 20 50 35 20 76 61 6c 75 65 20 69 73 20  The P5 value is 
37620 72 65 74 75 72 6e 65 64 0a 2a 2a 20 62 79 20 73  returned.** by s
37630 71 6c 69 74 65 33 5f 76 74 61 62 5f 6e 6f 63 68  qlite3_vtab_noch
37640 61 6e 67 65 28 29 20 72 6f 75 74 69 6e 65 20 63  ange() routine c
37650 61 6e 20 63 61 6e 20 62 65 20 75 73 65 64 0a 2a  an can be used.*
37660 2a 20 62 79 20 76 69 72 74 75 61 6c 20 74 61 62  * by virtual tab
37670 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  le implementatio
37680 6e 73 20 74 6f 20 72 65 74 75 72 6e 20 73 70 65  ns to return spe
37690 63 69 61 6c 20 22 6e 6f 2d 63 68 61 6e 67 65 22  cial "no-change"
376a0 0a 2a 2a 20 6d 61 72 6b 73 20 77 68 69 63 68 20  .** marks which 
376b0 63 61 6e 20 62 65 20 6d 6f 72 65 20 65 66 66 69  can be more effi
376c0 63 69 65 6e 74 2c 20 64 65 70 65 6e 64 69 6e 67  cient, depending
376d0 20 6f 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20   on the virtual 
376e0 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  table..*/.case O
376f0 50 5f 56 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 73  P_VColumn: {.  s
37700 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
37710 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69  ab;.  const sqli
37720 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
37730 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 44 65 73  ule;.  Mem *pDes
37740 74 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  t;.  sqlite3_con
37750 74 65 78 74 20 73 43 6f 6e 74 65 78 74 3b 0a 0a  text sContext;..
37760 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
37770 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  ur = p->apCsr[pO
37780 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
37790 28 20 70 43 75 72 2d 3e 65 43 75 72 54 79 70 65  ( pCur->eCurType
377a0 3d 3d 43 55 52 54 59 50 45 5f 56 54 41 42 20 29  ==CURTYPE_VTAB )
377b0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
377c0 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33  >p3>0 && pOp->p3
377d0 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
377e0 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
377f0 70 44 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f  pDest = &aMem[pO
37800 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f  p->p3];.  memAbo
37810 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 44  utToChange(p, pD
37820 65 73 74 29 3b 0a 20 20 69 66 28 20 70 43 75 72  est);.  if( pCur
37830 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20  ->nullRow ){.   
37840 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
37850 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20  etNull(pDest);. 
37860 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
37870 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e 75 63  pVtab = pCur->uc
37880 2e 70 56 43 75 72 2d 3e 70 56 74 61 62 3b 0a 20  .pVCur->pVtab;. 
37890 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62   pModule = pVtab
378a0 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73  ->pModule;.  ass
378b0 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 43  ert( pModule->xC
378c0 6f 6c 75 6d 6e 20 29 3b 0a 20 20 6d 65 6d 73 65  olumn );.  memse
378d0 74 28 26 73 43 6f 6e 74 65 78 74 2c 20 30 2c 20  t(&sContext, 0, 
378e0 73 69 7a 65 6f 66 28 73 43 6f 6e 74 65 78 74 29  sizeof(sContext)
378f0 29 3b 0a 20 20 73 43 6f 6e 74 65 78 74 2e 70 4f  );.  sContext.pO
37900 75 74 20 3d 20 70 44 65 73 74 3b 0a 20 20 69 66  ut = pDest;.  if
37910 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20  ( pOp->p5 ){.   
37920 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
37930 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20  etNull(pDest);. 
37940 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20     pDest->flags 
37950 3d 20 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 5a  = MEM_Null|MEM_Z
37960 65 72 6f 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e  ero;.    pDest->
37970 75 2e 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 7d  u.nZero = 0;.  }
37980 65 6c 73 65 7b 0a 20 20 20 20 4d 65 6d 53 65 74  else{.    MemSet
37990 54 79 70 65 46 6c 61 67 28 70 44 65 73 74 2c 20  TypeFlag(pDest, 
379a0 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 7d 0a 20  MEM_Null);.  }. 
379b0 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78   rc = pModule->x
379c0 43 6f 6c 75 6d 6e 28 70 43 75 72 2d 3e 75 63 2e  Column(pCur->uc.
379d0 70 56 43 75 72 2c 20 26 73 43 6f 6e 74 65 78 74  pVCur, &sContext
379e0 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 73 71  , pOp->p2);.  sq
379f0 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45  lite3VtabImportE
37a00 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b  rrmsg(p, pVtab);
37a10 0a 20 20 69 66 28 20 73 43 6f 6e 74 65 78 74 2e  .  if( sContext.
37a20 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 72  isError ){.    r
37a30 63 20 3d 20 73 43 6f 6e 74 65 78 74 2e 69 73 45  c = sContext.isE
37a40 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  rror;.  }.  sqli
37a50 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
37a60 6f 64 69 6e 67 28 70 44 65 73 74 2c 20 65 6e 63  oding(pDest, enc
37a70 6f 64 69 6e 67 29 3b 0a 20 20 52 45 47 49 53 54  oding);.  REGIST
37a80 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
37a90 2c 20 70 44 65 73 74 29 3b 0a 20 20 55 50 44 41  , pDest);.  UPDA
37aa0 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
37ab0 70 44 65 73 74 29 3b 0a 0a 20 20 69 66 28 20 73  pDest);..  if( s
37ac0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f  qlite3VdbeMemToo
37ad0 42 69 67 28 70 44 65 73 74 29 20 29 7b 0a 20 20  Big(pDest) ){.  
37ae0 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
37af0 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67    }.  if( rc ) g
37b00 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
37b10 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b  _error;.  break;
37b20 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
37b30 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
37b40 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
37b50 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
37b60 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
37b70 63 6f 64 65 3a 20 56 4e 65 78 74 20 50 31 20 50  code: VNext P1 P
37b80 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64  2 * * *.**.** Ad
37b90 76 61 6e 63 65 20 76 69 72 74 75 61 6c 20 74 61  vance virtual ta
37ba0 62 6c 65 20 50 31 20 74 6f 20 74 68 65 20 6e 65  ble P1 to the ne
37bb0 78 74 20 72 6f 77 20 69 6e 20 69 74 73 20 72 65  xt row in its re
37bc0 73 75 6c 74 20 73 65 74 20 61 6e 64 0a 2a 2a 20  sult set and.** 
37bd0 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74  jump to instruct
37be0 69 6f 6e 20 50 32 2e 20 20 4f 72 2c 20 69 66 20  ion P2.  Or, if 
37bf0 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
37c00 65 20 68 61 73 20 72 65 61 63 68 65 64 0a 2a 2a  e has reached.**
37c10 20 74 68 65 20 65 6e 64 20 6f 66 20 69 74 73 20   the end of its 
37c20 72 65 73 75 6c 74 20 73 65 74 2c 20 74 68 65 6e  result set, then
37c30 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
37c40 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
37c50 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
37c60 50 5f 56 4e 65 78 74 3a 20 7b 20 20 20 2f 2a 20  P_VNext: {   /* 
37c70 6a 75 6d 70 20 2a 2f 0a 20 20 73 71 6c 69 74 65  jump */.  sqlite
37c80 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
37c90 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
37ca0 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
37cb0 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 56 64 62    int res;.  Vdb
37cc0 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 0a  eCursor *pCur;..
37cd0 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 70 43 75    res = 0;.  pCu
37ce0 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  r = p->apCsr[pOp
37cf0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
37d00 20 70 43 75 72 2d 3e 65 43 75 72 54 79 70 65 3d   pCur->eCurType=
37d10 3d 43 55 52 54 59 50 45 5f 56 54 41 42 20 29 3b  =CURTYPE_VTAB );
37d20 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c  .  if( pCur->nul
37d30 6c 52 6f 77 20 29 7b 0a 20 20 20 20 62 72 65 61  lRow ){.    brea
37d40 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62 20 3d  k;.  }.  pVtab =
37d50 20 70 43 75 72 2d 3e 75 63 2e 70 56 43 75 72 2d   pCur->uc.pVCur-
37d60 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c  >pVtab;.  pModul
37d70 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75  e = pVtab->pModu
37d80 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4d  le;.  assert( pM
37d90 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 20 29 3b 0a  odule->xNext );.
37da0 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65  .  /* Invoke the
37db0 20 78 4e 65 78 74 28 29 20 6d 65 74 68 6f 64 20   xNext() method 
37dc0 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20 54  of the module. T
37dd0 68 65 72 65 20 69 73 20 6e 6f 20 77 61 79 20 66  here is no way f
37de0 6f 72 20 74 68 65 0a 20 20 2a 2a 20 75 6e 64 65  or the.  ** unde
37df0 72 6c 79 69 6e 67 20 69 6d 70 6c 65 6d 65 6e 74  rlying implement
37e00 61 74 69 6f 6e 20 74 6f 20 72 65 74 75 72 6e 20  ation to return 
37e10 61 6e 20 65 72 72 6f 72 20 69 66 20 6f 6e 65 20  an error if one 
37e20 6f 63 63 75 72 73 20 64 75 72 69 6e 67 0a 20 20  occurs during.  
37e30 2a 2a 20 78 4e 65 78 74 28 29 2e 20 49 6e 73 74  ** xNext(). Inst
37e40 65 61 64 2c 20 69 66 20 61 6e 20 65 72 72 6f 72  ead, if an error
37e50 20 6f 63 63 75 72 73 2c 20 74 72 75 65 20 69 73   occurs, true is
37e60 20 72 65 74 75 72 6e 65 64 20 28 69 6e 64 69 63   returned (indic
37e70 61 74 69 6e 67 20 74 68 61 74 20 0a 20 20 2a 2a  ating that .  **
37e80 20 64 61 74 61 20 69 73 20 61 76 61 69 6c 61 62   data is availab
37e90 6c 65 29 20 61 6e 64 20 74 68 65 20 65 72 72 6f  le) and the erro
37ea0 72 20 63 6f 64 65 20 72 65 74 75 72 6e 65 64 20  r code returned 
37eb0 77 68 65 6e 20 78 43 6f 6c 75 6d 6e 20 6f 72 0a  when xColumn or.
37ec0 20 20 2a 2a 20 73 6f 6d 65 20 6f 74 68 65 72 20    ** some other 
37ed0 6d 65 74 68 6f 64 20 69 73 20 6e 65 78 74 20 69  method is next i
37ee0 6e 76 6f 6b 65 64 20 6f 6e 20 74 68 65 20 73 61  nvoked on the sa
37ef0 76 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ve virtual table
37f00 20 63 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20   cursor..  */.  
37f10 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e  rc = pModule->xN
37f20 65 78 74 28 70 43 75 72 2d 3e 75 63 2e 70 56 43  ext(pCur->uc.pVC
37f30 75 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 74  ur);.  sqlite3Vt
37f40 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70  abImportErrmsg(p
37f50 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20  , pVtab);.  if( 
37f60 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
37f70 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
37f80 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78  res = pModule->x
37f90 45 6f 66 28 70 43 75 72 2d 3e 75 63 2e 70 56 43  Eof(pCur->uc.pVC
37fa0 75 72 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  ur);.  VdbeBranc
37fb0 68 54 61 6b 65 6e 28 21 72 65 73 2c 32 29 3b 0a  hTaken(!res,2);.
37fc0 20 20 69 66 28 20 21 72 65 73 20 29 7b 0a 20 20    if( !res ){.  
37fd0 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73    /* If there is
37fe0 20 64 61 74 61 2c 20 6a 75 6d 70 20 74 6f 20 50   data, jump to P
37ff0 32 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6a 75  2 */.    goto ju
38000 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68 65  mp_to_p2_and_che
38010 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74  ck_for_interrupt
38020 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65  ;.  }.  goto che
38030 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74  ck_for_interrupt
38040 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
38050 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
38060 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64  LTABLE */..#ifnd
38070 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
38080 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
38090 70 63 6f 64 65 3a 20 56 52 65 6e 61 6d 65 20 50  pcode: VRename P
380a0 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
380b0 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
380c0 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61   to a virtual ta
380d0 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73  ble object, an s
380e0 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75  qlite3_vtab stru
380f0 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73 20 6f  cture..** This o
38100 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68  pcode invokes th
38110 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
38120 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e 20  xRename method. 
38130 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20  The value.** in 
38140 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 70  register P1 is p
38150 61 73 73 65 64 20 61 73 20 74 68 65 20 7a 4e 61  assed as the zNa
38160 6d 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  me argument to t
38170 68 65 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f  he xRename metho
38180 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 52  d..*/.case OP_VR
38190 65 6e 61 6d 65 3a 20 7b 0a 20 20 73 71 6c 69 74  ename: {.  sqlit
381a0 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
381b0 20 20 4d 65 6d 20 2a 70 4e 61 6d 65 3b 0a 0a 20    Mem *pName;.. 
381c0 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34   pVtab = pOp->p4
381d0 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20  .pVtab->pVtab;. 
381e0 20 70 4e 61 6d 65 20 3d 20 26 61 4d 65 6d 5b 70   pName = &aMem[p
381f0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
38200 74 28 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c  t( pVtab->pModul
38210 65 2d 3e 78 52 65 6e 61 6d 65 20 29 3b 0a 20 20  e->xRename );.  
38220 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
38230 69 64 28 70 4e 61 6d 65 29 20 29 3b 0a 20 20 61  id(pName) );.  a
38240 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
38250 6c 79 3d 3d 30 20 29 3b 0a 20 20 52 45 47 49 53  ly==0 );.  REGIS
38260 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
38270 31 2c 20 70 4e 61 6d 65 29 3b 0a 20 20 61 73 73  1, pName);.  ass
38280 65 72 74 28 20 70 4e 61 6d 65 2d 3e 66 6c 61 67  ert( pName->flag
38290 73 20 26 20 4d 45 4d 5f 53 74 72 20 29 3b 0a 20  s & MEM_Str );. 
382a0 20 74 65 73 74 63 61 73 65 28 20 70 4e 61 6d 65   testcase( pName
382b0 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54  ->enc==SQLITE_UT
382c0 46 38 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  F8 );.  testcase
382d0 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51  ( pName->enc==SQ
382e0 4c 49 54 45 5f 55