/ Hex Artifact Content
Login

Artifact 0254dc5bfb4d00b5ccc359332eeef26eb66dc5ee:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 66  implements the f
01a0: 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 72 75 6e  unction that run
01b0: 73 20 74 68 65 0a 2a 2a 20 62 79 74 65 63 6f 64  s the.** bytecod
01c0: 65 20 6f 66 20 61 20 70 72 65 70 61 72 65 64 20  e of a prepared 
01d0: 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  statement..**.**
01e0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
01f0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
0200: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0210: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0220: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0230: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0240: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0250: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0260: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0270: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0280: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0290: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
02a0: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
02b0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
02c0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
02d0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
02e0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
02f0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
0300: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0310: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0320: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0330: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0340: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0350: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0360: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0370: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  ../*.** Invoke t
0380: 68 69 73 20 6d 61 63 72 6f 20 6f 6e 20 6d 65 6d  his macro on mem
0390: 6f 72 79 20 63 65 6c 6c 73 20 6a 75 73 74 20 70  ory cells just p
03a0: 72 69 6f 72 20 74 6f 20 63 68 61 6e 67 69 6e 67  rior to changing
03b0: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
03c0: 20 74 68 65 20 63 65 6c 6c 2e 20 20 54 68 69 73   the cell.  This
03d0: 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73 20   macro verifies 
03e0: 74 68 61 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70  that shallow cop
03f0: 69 65 73 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 6d  ies are.** not m
0400: 69 73 75 73 65 64 2e 20 20 41 20 73 68 61 6c 6c  isused.  A shall
0410: 6f 77 20 63 6f 70 79 20 6f 66 20 61 20 73 74 72  ow copy of a str
0420: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6a 75 73 74  ing or blob just
0430: 20 63 6f 70 69 65 73 20 61 0a 2a 2a 20 70 6f 69   copies a.** poi
0440: 6e 74 65 72 20 74 6f 20 74 68 65 20 73 74 72 69  nter to the stri
0450: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 6e 6f 74 20  ng or blob, not 
0460: 74 68 65 20 63 6f 6e 74 65 6e 74 2e 20 20 49 66  the content.  If
0470: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a   the original.**
0480: 20 69 73 20 63 68 61 6e 67 65 64 20 77 68 69 6c   is changed whil
0490: 65 20 74 68 65 20 63 6f 70 79 20 69 73 20 73 74  e the copy is st
04a0: 69 6c 6c 20 69 6e 20 75 73 65 2c 20 74 68 65 20  ill in use, the 
04b0: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d  string or blob m
04c0: 69 67 68 74 0a 2a 2a 20 62 65 20 63 68 61 6e 67  ight.** be chang
04d0: 65 64 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65  ed out from unde
04e0: 72 20 74 68 65 20 63 6f 70 79 2e 20 20 54 68 69  r the copy.  Thi
04f0: 73 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73  s macro verifies
0500: 20 74 68 61 74 20 6e 6f 74 68 69 6e 67 0a 2a 2a   that nothing.**
0510: 20 6c 69 6b 65 20 74 68 61 74 20 65 76 65 72 20   like that ever 
0520: 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 23 69 66 64  happens..*/.#ifd
0530: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
0540: 23 20 64 65 66 69 6e 65 20 6d 65 6d 41 62 6f 75  # define memAbou
0550: 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 20 73  tToChange(P,M) s
0560: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 41 62 6f  qlite3VdbeMemAbo
0570: 75 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 0a  utToChange(P,M).
0580: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 6d  #else.# define m
0590: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
05a0: 50 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  P,M).#endif../*.
05b0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
05c0: 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
05d0: 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
05e0: 65 76 65 72 79 20 74 69 6d 65 20 61 20 63 75 72  every time a cur
05f0: 73 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65 69  sor.** moves, ei
0600: 74 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f 53  ther by the OP_S
0610: 65 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c 20  eekXX, OP_Next, 
0620: 6f 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f 64  or OP_Prev opcod
0630: 65 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a 2a  es.  The test.**
0640: 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65 20   procedures use 
0650: 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  this information
0660: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68   to make sure th
0670: 61 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a 2a  at indices are.*
0680: 2a 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63  * working correc
0690: 74 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69 61  tly.  This varia
06a0: 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74  ble has no funct
06b0: 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74  ion other than t
06c0: 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79  o.** help verify
06d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
06e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69  ration of the li
06f0: 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  brary..*/.#ifdef
0700: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74   SQLITE_TEST.int
0710: 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
0720: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0730: 66 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68  f../*.** When th
0740: 69 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  is global variab
0750: 6c 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c 20  le is positive, 
0760: 69 74 20 67 65 74 73 20 64 65 63 72 65 6d 65 6e  it gets decremen
0770: 74 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65 0a  ted once before.
0780: 2a 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63 74  ** each instruct
0790: 69 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45 2e  ion in the VDBE.
07a0: 20 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65    When it reache
07b0: 73 20 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e 69  s zero, the u1.i
07c0: 73 49 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a 20  sInterrupted.** 
07d0: 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c  field of the sql
07e0: 69 74 65 33 20 73 74 72 75 63 74 75 72 65 20 69  ite3 structure i
07f0: 73 20 73 65 74 20 69 6e 20 6f 72 64 65 72 20 74  s set in order t
0800: 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e  o simulate an in
0810: 74 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20 54  terrupt..**.** T
0820: 68 69 73 20 66 61 63 69 6c 69 74 79 20 69 73 20  his facility is 
0830: 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67  used for testing
0840: 20 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e 20   purposes only. 
0850: 20 49 74 20 64 6f 65 73 20 6e 6f 74 20 66 75 6e   It does not fun
0860: 63 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20 6f  ction.** in an o
0870: 72 64 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a 2a  rdinary build..*
0880: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
0890: 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33  TEST.int sqlite3
08a0: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
08b0: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a   = 0;.#endif../*
08c0: 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f  .** The next glo
08d0: 62 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20  bal variable is 
08e0: 69 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68  incremented each
08f0: 20 74 79 70 65 20 74 68 65 20 4f 50 5f 53 6f 72   type the OP_Sor
0900: 74 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  t opcode.** is e
0910: 78 65 63 75 74 65 64 2e 20 20 54 68 65 20 74 65  xecuted.  The te
0920: 73 74 20 70 72 6f 63 65 64 75 72 65 73 20 75 73  st procedures us
0930: 65 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69  e this informati
0940: 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  on to make sure 
0950: 74 68 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67 20  that.** sorting 
0960: 69 73 20 6f 63 63 75 72 72 69 6e 67 20 6f 72 20  is occurring or 
0970: 6e 6f 74 20 6f 63 63 75 72 72 69 6e 67 20 61 74  not occurring at
0980: 20 61 70 70 72 6f 70 72 69 61 74 65 20 74 69 6d   appropriate tim
0990: 65 73 2e 20 20 20 54 68 69 73 20 76 61 72 69 61  es.   This varia
09a0: 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75  ble.** has no fu
09b0: 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61  nction other tha
09c0: 6e 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79  n to help verify
09d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
09e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  ration of the.**
09f0: 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66   library..*/.#if
0a00: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
0a10: 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72 74  int sqlite3_sort
0a20: 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64  _count = 0;.#end
0a30: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65  if../*.** The ne
0a40: 78 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  xt global variab
0a50: 6c 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 73  le records the s
0a60: 69 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65  ize of the large
0a70: 73 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f  st MEM_Blob.** o
0a80: 72 20 4d 45 4d 5f 53 74 72 20 74 68 61 74 20 68  r MEM_Str that h
0a90: 61 73 20 62 65 65 6e 20 75 73 65 64 20 62 79 20  as been used by 
0aa0: 61 20 56 44 42 45 20 6f 70 63 6f 64 65 2e 20 20  a VDBE opcode.  
0ab0: 54 68 65 20 74 65 73 74 20 70 72 6f 63 65 64 75  The test procedu
0ac0: 72 65 73 0a 2a 2a 20 75 73 65 20 74 68 69 73 20  res.** use this 
0ad0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d  information to m
0ae0: 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68  ake sure that th
0af0: 65 20 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e 63  e zero-blob func
0b00: 74 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73 20  tionality.** is 
0b10: 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c  working correctl
0b20: 79 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62  y.   This variab
0b30: 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69  le has no functi
0b40: 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f  on other than to
0b50: 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20  .** help verify 
0b60: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0b70: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62  ation of the lib
0b80: 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  rary..*/.#ifdef 
0b90: 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20  SQLITE_TEST.int 
0ba0: 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62  sqlite3_max_blob
0bb0: 73 69 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69 63  size = 0;.static
0bc0: 20 76 6f 69 64 20 75 70 64 61 74 65 4d 61 78 42   void updateMaxB
0bd0: 6c 6f 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29 7b  lobsize(Mem *p){
0be0: 0a 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73  .  if( (p->flags
0bf0: 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
0c00: 42 6c 6f 62 29 29 21 3d 30 20 26 26 20 70 2d 3e  Blob))!=0 && p->
0c10: 6e 3e 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c  n>sqlite3_max_bl
0c20: 6f 62 73 69 7a 65 20 29 7b 0a 20 20 20 20 73 71  obsize ){.    sq
0c30: 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69  lite3_max_blobsi
0c40: 7a 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d  ze = p->n;.  }.}
0c50: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
0c60: 68 69 73 20 6d 61 63 72 6f 20 65 76 61 6c 75 61  his macro evalua
0c70: 74 65 73 20 74 6f 20 74 72 75 65 20 69 66 20 65  tes to true if e
0c80: 69 74 68 65 72 20 74 68 65 20 75 70 64 61 74 65  ither the update
0c90: 20 68 6f 6f 6b 20 6f 72 20 74 68 65 20 70 72 65   hook or the pre
0ca0: 75 70 64 61 74 65 0a 2a 2a 20 68 6f 6f 6b 20 61  update.** hook a
0cb0: 72 65 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 64  re enabled for d
0cc0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 20  atabase connect 
0cd0: 44 42 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  DB..*/.#ifdef SQ
0ce0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55  LITE_ENABLE_PREU
0cf0: 50 44 41 54 45 5f 48 4f 4f 4b 0a 23 20 64 65 66  PDATE_HOOK.# def
0d00: 69 6e 65 20 48 41 53 5f 55 50 44 41 54 45 5f 48  ine HAS_UPDATE_H
0d10: 4f 4f 4b 28 44 42 29 20 28 28 44 42 29 2d 3e 78  OOK(DB) ((DB)->x
0d20: 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63  PreUpdateCallbac
0d30: 6b 7c 7c 28 44 42 29 2d 3e 78 55 70 64 61 74 65  k||(DB)->xUpdate
0d40: 43 61 6c 6c 62 61 63 6b 29 0a 23 65 6c 73 65 0a  Callback).#else.
0d50: 23 20 64 65 66 69 6e 65 20 48 41 53 5f 55 50 44  # define HAS_UPD
0d60: 41 54 45 5f 48 4f 4f 4b 28 44 42 29 20 28 28 44  ATE_HOOK(DB) ((D
0d70: 42 29 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  B)->xUpdateCallb
0d80: 61 63 6b 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ack).#endif../*.
0d90: 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f 62  ** The next glob
0da0: 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20 69  al variable is i
0db0: 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68 20  ncremented each 
0dc0: 74 69 6d 65 20 74 68 65 20 4f 50 5f 46 6f 75 6e  time the OP_Foun
0dd0: 64 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  d opcode.** is e
0de0: 78 65 63 75 74 65 64 2e 20 54 68 69 73 20 69 73  xecuted. This is
0df0: 20 75 73 65 64 20 74 6f 20 74 65 73 74 20 77 68   used to test wh
0e00: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
0e10: 20 66 6f 72 65 69 67 6e 20 6b 65 79 0a 2a 2a 20   foreign key.** 
0e20: 6f 70 65 72 61 74 69 6f 6e 20 69 6d 70 6c 65 6d  operation implem
0e30: 65 6e 74 65 64 20 75 73 69 6e 67 20 4f 50 5f 46  ented using OP_F
0e40: 6b 49 73 5a 65 72 6f 20 69 73 20 77 6f 72 6b 69  kIsZero is worki
0e50: 6e 67 2e 20 54 68 69 73 20 76 61 72 69 61 62 6c  ng. This variabl
0e60: 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75 6e 63  e.** has no func
0e70: 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20  tion other than 
0e80: 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79 20 74  to help verify t
0e90: 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61  he correct opera
0ea0: 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 6c  tion of the.** l
0eb0: 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65  ibrary..*/.#ifde
0ec0: 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e  f SQLITE_TEST.in
0ed0: 74 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f  t sqlite3_found_
0ee0: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0ef0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 61 20  f../*.** Test a 
0f00: 72 65 67 69 73 74 65 72 20 74 6f 20 73 65 65 20  register to see 
0f10: 69 66 20 69 74 20 65 78 63 65 65 64 73 20 74 68  if it exceeds th
0f20: 65 20 63 75 72 72 65 6e 74 20 6d 61 78 69 6d 75  e current maximu
0f30: 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2a 20  m blob size..** 
0f40: 49 66 20 69 74 20 64 6f 65 73 2c 20 72 65 63 6f  If it does, reco
0f50: 72 64 20 74 68 65 20 6e 65 77 20 6d 61 78 69 6d  rd the new maxim
0f60: 75 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2f  um blob size..*/
0f70: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
0f80: 49 54 45 5f 54 45 53 54 29 20 26 26 20 21 64 65  ITE_TEST) && !de
0f90: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 55 4e 54  fined(SQLITE_UNT
0fa0: 45 53 54 41 42 4c 45 29 0a 23 20 64 65 66 69 6e  ESTABLE).# defin
0fb0: 65 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f  e UPDATE_MAX_BLO
0fc0: 42 53 49 5a 45 28 50 29 20 20 75 70 64 61 74 65  BSIZE(P)  update
0fd0: 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50 29 0a 23  MaxBlobsize(P).#
0fe0: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 55 50  else.# define UP
0ff0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
1000: 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E(P).#endif../*.
1010: 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 56 44  ** Invoke the VD
1020: 42 45 20 63 6f 76 65 72 61 67 65 20 63 61 6c 6c  BE coverage call
1030: 62 61 63 6b 2c 20 69 66 20 74 68 61 74 20 63 61  back, if that ca
1040: 6c 6c 62 61 63 6b 20 69 73 20 64 65 66 69 6e 65  llback is define
1050: 64 2e 20 20 54 68 69 73 0a 2a 2a 20 66 65 61 74  d.  This.** feat
1060: 75 72 65 20 69 73 20 75 73 65 64 20 66 6f 72 20  ure is used for 
1070: 74 65 73 74 20 73 75 69 74 65 20 76 61 6c 69 64  test suite valid
1080: 61 74 69 6f 6e 20 6f 6e 6c 79 20 61 6e 64 20 64  ation only and d
1090: 6f 65 73 20 6e 6f 74 20 61 70 70 65 61 72 20 61  oes not appear a
10a0: 6e 0a 2a 2a 20 70 72 6f 64 75 63 74 69 6f 6e 20  n.** production 
10b0: 62 75 69 6c 64 73 2e 0a 2a 2a 0a 2a 2a 20 4d 20  builds..**.** M 
10c0: 69 73 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 32  is an integer, 2
10d0: 20 6f 72 20 33 2c 20 74 68 61 74 20 69 6e 64 69   or 3, that indi
10e0: 63 65 73 20 68 6f 77 20 6d 61 6e 79 20 64 69 66  ces how many dif
10f0: 66 65 72 65 6e 74 20 77 61 79 73 20 74 68 65 0a  ferent ways the.
1100: 2a 2a 20 62 72 61 6e 63 68 20 63 61 6e 20 67 6f  ** branch can go
1110: 2e 20 20 49 74 20 69 73 20 75 73 75 61 6c 6c 79  .  It is usually
1120: 20 32 2e 20 20 22 49 22 20 69 73 20 74 68 65 20   2.  "I" is the 
1130: 64 69 72 65 63 74 69 6f 6e 20 74 68 65 20 62 72  direction the br
1140: 61 6e 63 68 0a 2a 2a 20 67 6f 65 73 2e 20 20 30  anch.** goes.  0
1150: 20 6d 65 61 6e 73 20 66 61 6c 6c 73 20 74 68 72   means falls thr
1160: 6f 75 67 68 2e 20 20 31 20 6d 65 61 6e 73 20 62  ough.  1 means b
1170: 72 61 6e 63 68 20 69 73 20 74 61 6b 65 6e 2e 20  ranch is taken. 
1180: 20 32 20 6d 65 61 6e 73 20 74 68 65 0a 2a 2a 20   2 means the.** 
1190: 73 65 63 6f 6e 64 20 61 6c 74 65 72 6e 61 74 69  second alternati
11a0: 76 65 20 62 72 61 6e 63 68 20 69 73 20 74 61 6b  ve branch is tak
11b0: 65 6e 2e 0a 2a 2a 0a 2a 2a 20 69 53 72 63 4c 69  en..**.** iSrcLi
11c0: 6e 65 20 69 73 20 74 68 65 20 73 6f 75 72 63 65  ne is the source
11d0: 20 63 6f 64 65 20 6c 69 6e 65 20 28 66 72 6f 6d   code line (from
11e0: 20 74 68 65 20 5f 5f 4c 49 4e 45 5f 5f 20 6d 61   the __LINE__ ma
11f0: 63 72 6f 29 20 74 68 61 74 0a 2a 2a 20 67 65 6e  cro) that.** gen
1200: 65 72 61 74 65 64 20 74 68 65 20 56 44 42 45 20  erated the VDBE 
1210: 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 54 68  instruction.  Th
1220: 69 73 20 69 6e 73 74 72 75 6d 65 6e 74 61 74 69  is instrumentati
1230: 6f 6e 20 61 73 73 75 6d 65 73 20 74 68 61 74 20  on assumes that 
1240: 61 6c 6c 0a 2a 2a 20 73 6f 75 72 63 65 20 63 6f  all.** source co
1250: 64 65 20 69 73 20 69 6e 20 61 20 73 69 6e 67 6c  de is in a singl
1260: 65 20 66 69 6c 65 20 28 74 68 65 20 61 6d 61 6c  e file (the amal
1270: 67 61 6d 61 74 69 6f 6e 29 2e 20 20 53 70 65 63  gamation).  Spec
1280: 69 61 6c 20 76 61 6c 75 65 73 20 31 0a 2a 2a 20  ial values 1.** 
1290: 61 6e 64 20 32 20 66 6f 72 20 74 68 65 20 69 53  and 2 for the iS
12a0: 72 63 4c 69 6e 65 20 70 61 72 61 6d 65 74 65 72  rcLine parameter
12b0: 20 6d 65 61 6e 20 74 68 61 74 20 74 68 69 73 20   mean that this 
12c0: 70 61 72 74 69 63 75 6c 61 72 20 62 72 61 6e 63  particular branc
12d0: 68 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 74  h is.** always t
12e0: 61 6b 65 6e 20 6f 72 20 6e 65 76 65 72 20 74 61  aken or never ta
12f0: 6b 65 6e 2c 20 72 65 73 70 65 63 74 69 76 65 6c  ken, respectivel
1300: 79 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  y..*/.#if !defin
1310: 65 64 28 53 51 4c 49 54 45 5f 56 44 42 45 5f 43  ed(SQLITE_VDBE_C
1320: 4f 56 45 52 41 47 45 29 0a 23 20 64 65 66 69 6e  OVERAGE).# defin
1330: 65 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65  e VdbeBranchTake
1340: 6e 28 49 2c 4d 29 0a 23 65 6c 73 65 0a 23 20 64  n(I,M).#else.# d
1350: 65 66 69 6e 65 20 56 64 62 65 42 72 61 6e 63 68  efine VdbeBranch
1360: 54 61 6b 65 6e 28 49 2c 4d 29 20 76 64 62 65 54  Taken(I,M) vdbeT
1370: 61 6b 65 42 72 61 6e 63 68 28 70 4f 70 2d 3e 69  akeBranch(pOp->i
1380: 53 72 63 4c 69 6e 65 2c 49 2c 4d 29 0a 20 20 73  SrcLine,I,M).  s
1390: 74 61 74 69 63 20 76 6f 69 64 20 76 64 62 65 54  tatic void vdbeT
13a0: 61 6b 65 42 72 61 6e 63 68 28 69 6e 74 20 69 53  akeBranch(int iS
13b0: 72 63 4c 69 6e 65 2c 20 75 38 20 49 2c 20 75 38  rcLine, u8 I, u8
13c0: 20 4d 29 7b 0a 20 20 20 20 69 66 28 20 69 53 72   M){.    if( iSr
13d0: 63 4c 69 6e 65 3c 3d 32 20 26 26 20 41 4c 57 41  cLine<=2 && ALWA
13e0: 59 53 28 69 53 72 63 4c 69 6e 65 3e 30 29 20 29  YS(iSrcLine>0) )
13f0: 7b 0a 20 20 20 20 20 20 4d 20 3d 20 69 53 72 63  {.      M = iSrc
1400: 4c 69 6e 65 3b 0a 20 20 20 20 20 20 2f 2a 20 41  Line;.      /* A
1410: 73 73 65 72 74 20 74 68 65 20 74 72 75 74 68 20  ssert the truth 
1420: 6f 66 20 56 64 62 65 43 6f 76 65 72 61 67 65 41  of VdbeCoverageA
1430: 6c 77 61 79 73 54 61 6b 65 6e 28 29 20 61 6e 64  lwaysTaken() and
1440: 20 0a 20 20 20 20 20 20 2a 2a 20 56 64 62 65 43   .      ** VdbeC
1450: 6f 76 65 72 61 67 65 4e 65 76 65 72 54 61 6b 65  overageNeverTake
1460: 6e 28 29 20 2a 2f 0a 20 20 20 20 20 20 61 73 73  n() */.      ass
1470: 65 72 74 28 20 28 4d 20 26 20 49 29 3d 3d 49 20  ert( (M & I)==I 
1480: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
1490: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 47      if( sqlite3G
14a0: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 56 64 62  lobalConfig.xVdb
14b0: 65 42 72 61 6e 63 68 3d 3d 30 20 29 20 72 65 74  eBranch==0 ) ret
14c0: 75 72 6e 3b 20 20 2f 2a 4e 4f 5f 54 45 53 54 2a  urn;  /*NO_TEST*
14d0: 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 47  /.      sqlite3G
14e0: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 56 64 62  lobalConfig.xVdb
14f0: 65 42 72 61 6e 63 68 28 73 71 6c 69 74 65 33 47  eBranch(sqlite3G
1500: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 70 56 64 62  lobalConfig.pVdb
1510: 65 42 72 61 6e 63 68 41 72 67 2c 0a 20 20 20 20  eBranchArg,.    
1520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1540: 20 20 69 53 72 63 4c 69 6e 65 2c 49 2c 4d 29 3b    iSrcLine,I,M);
1550: 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69  .    }.  }.#endi
1560: 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74  f../*.** Convert
1570: 20 74 68 65 20 67 69 76 65 6e 20 72 65 67 69 73   the given regis
1580: 74 65 72 20 69 6e 74 6f 20 61 20 73 74 72 69 6e  ter into a strin
1590: 67 20 69 66 20 69 74 20 69 73 6e 27 74 20 6f 6e  g if it isn't on
15a0: 65 0a 2a 2a 20 61 6c 72 65 61 64 79 2e 20 52 65  e.** already. Re
15b0: 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66  turn non-zero if
15c0: 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c   a malloc() fail
15d0: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 74  s..*/.#define St
15e0: 72 69 6e 67 69 66 79 28 50 2c 20 65 6e 63 29 20  ringify(P, enc) 
15f0: 5c 0a 20 20 20 69 66 28 28 28 50 29 2d 3e 66 6c  \.   if(((P)->fl
1600: 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  ags&(MEM_Str|MEM
1610: 5f 42 6c 6f 62 29 29 3d 3d 30 20 26 26 20 73 71  _Blob))==0 && sq
1620: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69  lite3VdbeMemStri
1630: 6e 67 69 66 79 28 50 2c 65 6e 63 2c 30 29 29 20  ngify(P,enc,0)) 
1640: 5c 0a 20 20 20 20 20 7b 20 67 6f 74 6f 20 6e 6f  \.     { goto no
1650: 5f 6d 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a 2a 20 41  _mem; }../*.** A
1660: 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69  n ephemeral stri
1670: 6e 67 20 76 61 6c 75 65 20 28 73 69 67 6e 69 66  ng value (signif
1680: 69 65 64 20 62 79 20 74 68 65 20 4d 45 4d 5f 45  ied by the MEM_E
1690: 70 68 65 6d 20 66 6c 61 67 29 20 63 6f 6e 74 61  phem flag) conta
16a0: 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e 74 65 72  ins.** a pointer
16b0: 20 74 6f 20 61 20 64 79 6e 61 6d 69 63 61 6c 6c   to a dynamicall
16c0: 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 74 72 69  y allocated stri
16d0: 6e 67 20 77 68 65 72 65 20 73 6f 6d 65 20 6f 74  ng where some ot
16e0: 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a 20 69 73  her entity.** is
16f0: 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72   responsible for
1700: 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68   deallocating th
1710: 61 74 20 73 74 72 69 6e 67 2e 20 20 42 65 63 61  at string.  Beca
1720: 75 73 65 20 74 68 65 20 72 65 67 69 73 74 65 72  use the register
1730: 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e  .** does not con
1740: 74 72 6f 6c 20 74 68 65 20 73 74 72 69 6e 67 2c  trol the string,
1750: 20 69 74 20 6d 69 67 68 74 20 62 65 20 64 65 6c   it might be del
1760: 65 74 65 64 20 77 69 74 68 6f 75 74 20 74 68 65  eted without the
1770: 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6b 6e 6f   register.** kno
1780: 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 54  wing it..**.** T
1790: 68 69 73 20 72 6f 75 74 69 6e 65 20 63 6f 6e 76  his routine conv
17a0: 65 72 74 73 20 61 6e 20 65 70 68 65 6d 65 72 61  erts an ephemera
17b0: 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20  l string into a 
17c0: 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
17d0: 63 61 74 65 64 0a 2a 2a 20 73 74 72 69 6e 67 20  cated.** string 
17e0: 74 68 61 74 20 74 68 65 20 72 65 67 69 73 74 65  that the registe
17f0: 72 20 69 74 73 65 6c 66 20 63 6f 6e 74 72 6f 6c  r itself control
1800: 73 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  s.  In other wor
1810: 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e 76 65 72  ds, it.** conver
1820: 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68 65 6d 20  ts an MEM_Ephem 
1830: 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20 73 74  string into a st
1840: 72 69 6e 67 20 77 69 74 68 20 50 2e 7a 3d 3d 50  ring with P.z==P
1850: 2e 7a 4d 61 6c 6c 6f 63 2e 0a 2a 2f 0a 23 64 65  .zMalloc..*/.#de
1860: 66 69 6e 65 20 44 65 65 70 68 65 6d 65 72 61 6c  fine Deephemeral
1870: 69 7a 65 28 50 29 20 5c 0a 20 20 20 69 66 28 20  ize(P) \.   if( 
1880: 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  ((P)->flags&MEM_
1890: 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20 20 20 20  Ephem)!=0 \.    
18a0: 20 20 20 26 26 20 73 71 6c 69 74 65 33 56 64 62     && sqlite3Vdb
18b0: 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c  eMemMakeWriteabl
18c0: 65 28 50 29 20 29 7b 20 67 6f 74 6f 20 6e 6f 5f  e(P) ){ goto no_
18d0: 6d 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74 75 72 6e  mem;}../* Return
18e0: 20 74 72 75 65 20 69 66 20 74 68 65 20 63 75 72   true if the cur
18f0: 73 6f 72 20 77 61 73 20 6f 70 65 6e 65 64 20 75  sor was opened u
1900: 73 69 6e 67 20 74 68 65 20 4f 50 5f 4f 70 65 6e  sing the OP_Open
1910: 53 6f 72 74 65 72 20 6f 70 63 6f 64 65 2e 20 2a  Sorter opcode. *
1920: 2f 0a 23 64 65 66 69 6e 65 20 69 73 53 6f 72 74  /.#define isSort
1930: 65 72 28 78 29 20 28 28 78 29 2d 3e 65 43 75 72  er(x) ((x)->eCur
1940: 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 53 4f  Type==CURTYPE_SO
1950: 52 54 45 52 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  RTER)../*.** All
1960: 6f 63 61 74 65 20 56 64 62 65 43 75 72 73 6f 72  ocate VdbeCursor
1970: 20 6e 75 6d 62 65 72 20 69 43 75 72 2e 20 20 52   number iCur.  R
1980: 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65 72 20  eturn a pointer 
1990: 74 6f 20 69 74 2e 20 20 52 65 74 75 72 6e 20 4e  to it.  Return N
19a0: 55 4c 4c 0a 2a 2a 20 69 66 20 77 65 20 72 75 6e  ULL.** if we run
19b0: 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 2e 0a   out of memory..
19c0: 2a 2f 0a 73 74 61 74 69 63 20 56 64 62 65 43 75  */.static VdbeCu
19d0: 72 73 6f 72 20 2a 61 6c 6c 6f 63 61 74 65 43 75  rsor *allocateCu
19e0: 72 73 6f 72 28 0a 20 20 56 64 62 65 20 2a 70 2c  rsor(.  Vdbe *p,
19f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1a00: 20 54 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63   The virtual mac
1a10: 68 69 6e 65 20 2a 2f 0a 20 20 69 6e 74 20 69 43  hine */.  int iC
1a20: 75 72 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  ur,             
1a30: 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65 20  /* Index of the 
1a40: 6e 65 77 20 56 64 62 65 43 75 72 73 6f 72 20 2a  new VdbeCursor *
1a50: 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 2c 20  /.  int nField, 
1a60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1a70: 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e  ber of fields in
1a80: 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
1a90: 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62  dex */.  int iDb
1aa0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
1ab0: 2a 20 44 61 74 61 62 61 73 65 20 74 68 65 20 63  * Database the c
1ac0: 75 72 73 6f 72 20 62 65 6c 6f 6e 67 73 20 74 6f  ursor belongs to
1ad0: 2c 20 6f 72 20 2d 31 20 2a 2f 0a 20 20 75 38 20  , or -1 */.  u8 
1ae0: 65 43 75 72 54 79 70 65 20 20 20 20 20 20 20 20  eCurType        
1af0: 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 74 68     /* Type of th
1b00: 65 20 6e 65 77 20 63 75 72 73 6f 72 20 2a 2f 0a  e new cursor */.
1b10: 29 7b 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65  ){.  /* Find the
1b20: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61   memory cell tha
1b30: 74 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 74  t will be used t
1b40: 6f 20 73 74 6f 72 65 20 74 68 65 20 62 6c 6f 62  o store the blob
1b50: 20 6f 66 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a 20   of memory.  ** 
1b60: 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69  required for thi
1b70: 73 20 56 64 62 65 43 75 72 73 6f 72 20 73 74 72  s VdbeCursor str
1b80: 75 63 74 75 72 65 2e 20 49 74 20 69 73 20 63 6f  ucture. It is co
1b90: 6e 76 65 6e 69 65 6e 74 20 74 6f 20 75 73 65 20  nvenient to use 
1ba0: 61 20 0a 20 20 2a 2a 20 76 64 62 65 20 6d 65 6d  a .  ** vdbe mem
1bb0: 6f 72 79 20 63 65 6c 6c 20 74 6f 20 6d 61 6e 61  ory cell to mana
1bc0: 67 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c  ge the memory al
1bd0: 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 69 72 65  location require
1be0: 64 20 66 6f 72 20 61 0a 20 20 2a 2a 20 56 64 62  d for a.  ** Vdb
1bf0: 65 43 75 72 73 6f 72 20 73 74 72 75 63 74 75 72  eCursor structur
1c00: 65 20 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77  e for the follow
1c10: 69 6e 67 20 72 65 61 73 6f 6e 73 3a 0a 20 20 2a  ing reasons:.  *
1c20: 2a 0a 20 20 2a 2a 20 20 20 2a 20 53 6f 6d 65 74  *.  **   * Somet
1c30: 69 6d 65 73 20 63 75 72 73 6f 72 20 6e 75 6d 62  imes cursor numb
1c40: 65 72 73 20 61 72 65 20 75 73 65 64 20 66 6f 72  ers are used for
1c50: 20 61 20 63 6f 75 70 6c 65 20 6f 66 20 64 69 66   a couple of dif
1c60: 66 65 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20 20  ferent.  **     
1c70: 70 75 72 70 6f 73 65 73 20 69 6e 20 61 20 76 64  purposes in a vd
1c80: 62 65 20 70 72 6f 67 72 61 6d 2e 20 54 68 65 20  be program. The 
1c90: 64 69 66 66 65 72 65 6e 74 20 75 73 65 73 20 6d  different uses m
1ca0: 69 67 68 74 20 72 65 71 75 69 72 65 0a 20 20 2a  ight require.  *
1cb0: 2a 20 20 20 20 20 64 69 66 66 65 72 65 6e 74 20  *     different 
1cc0: 73 69 7a 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e  sized allocation
1cd0: 73 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  s. Memory cells 
1ce0: 70 72 6f 76 69 64 65 20 67 72 6f 77 61 62 6c 65  provide growable
1cf0: 0a 20 20 2a 2a 20 20 20 20 20 61 6c 6c 6f 63 61  .  **     alloca
1d00: 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  tions..  **.  **
1d10: 20 20 20 2a 20 57 68 65 6e 20 75 73 69 6e 67 20     * When using 
1d20: 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41  ENABLE_MEMORY_MA
1d30: 4e 41 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72 79  NAGEMENT, memory
1d40: 20 63 65 6c 6c 20 62 75 66 66 65 72 73 20 63 61   cell buffers ca
1d50: 6e 0a 20 20 2a 2a 20 20 20 20 20 62 65 20 66 72  n.  **     be fr
1d60: 65 65 64 20 6c 61 7a 69 6c 79 20 76 69 61 20 74  eed lazily via t
1d70: 68 65 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61  he sqlite3_relea
1d80: 73 65 5f 6d 65 6d 6f 72 79 28 29 20 41 50 49 2e  se_memory() API.
1d90: 20 54 68 69 73 0a 20 20 2a 2a 20 20 20 20 20 6d   This.  **     m
1da0: 69 6e 69 6d 69 7a 65 73 20 74 68 65 20 6e 75 6d  inimizes the num
1db0: 62 65 72 20 6f 66 20 6d 61 6c 6c 6f 63 20 63 61  ber of malloc ca
1dc0: 6c 6c 73 20 6d 61 64 65 20 62 79 20 74 68 65 20  lls made by the 
1dd0: 73 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20 2a  system..  **.  *
1de0: 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c  * The memory cel
1df0: 6c 20 66 6f 72 20 63 75 72 73 6f 72 20 30 20 69  l for cursor 0 i
1e00: 73 20 61 4d 65 6d 5b 30 5d 2e 20 54 68 65 20 72  s aMem[0]. The r
1e10: 65 73 74 20 61 72 65 20 61 6c 6c 6f 63 61 74 65  est are allocate
1e20: 64 20 66 72 6f 6d 0a 20 20 2a 2a 20 74 68 65 20  d from.  ** the 
1e30: 74 6f 70 20 6f 66 20 74 68 65 20 72 65 67 69 73  top of the regis
1e40: 74 65 72 20 73 70 61 63 65 2e 20 20 43 75 72 73  ter space.  Curs
1e50: 6f 72 20 31 20 69 73 20 61 74 20 4d 65 6d 5b 70  or 1 is at Mem[p
1e60: 2d 3e 6e 4d 65 6d 2d 31 5d 2e 0a 20 20 2a 2a 20  ->nMem-1]..  ** 
1e70: 43 75 72 73 6f 72 20 32 20 69 73 20 61 74 20 4d  Cursor 2 is at M
1e80: 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d 32 5d 2e 20 41  em[p->nMem-2]. A
1e90: 6e 64 20 73 6f 20 66 6f 72 74 68 2e 0a 20 20 2a  nd so forth..  *
1ea0: 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20  /.  Mem *pMem = 
1eb0: 69 43 75 72 3e 30 20 3f 20 26 70 2d 3e 61 4d 65  iCur>0 ? &p->aMe
1ec0: 6d 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72 5d 20  m[p->nMem-iCur] 
1ed0: 3a 20 70 2d 3e 61 4d 65 6d 3b 0a 0a 20 20 69 6e  : p->aMem;..  in
1ee0: 74 20 6e 42 79 74 65 3b 0a 20 20 56 64 62 65 43  t nByte;.  VdbeC
1ef0: 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b 0a  ursor *pCx = 0;.
1f00: 20 20 6e 42 79 74 65 20 3d 20 0a 20 20 20 20 20    nByte = .     
1f10: 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 56   ROUND8(sizeof(V
1f20: 64 62 65 43 75 72 73 6f 72 29 29 20 2b 20 32 2a  dbeCursor)) + 2*
1f30: 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69 65  sizeof(u32)*nFie
1f40: 6c 64 20 2b 20 0a 20 20 20 20 20 20 28 65 43 75  ld + .      (eCu
1f50: 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
1f60: 54 52 45 45 3f 73 71 6c 69 74 65 33 42 74 72 65  TREE?sqlite3Btre
1f70: 65 43 75 72 73 6f 72 53 69 7a 65 28 29 3a 30 29  eCursorSize():0)
1f80: 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 43 75  ;..  assert( iCu
1f90: 72 3e 3d 30 20 26 26 20 69 43 75 72 3c 70 2d 3e  r>=0 && iCur<p->
1fa0: 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66 28  nCursor );.  if(
1fb0: 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20   p->apCsr[iCur] 
1fc0: 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f  ){ /*OPTIMIZATIO
1fd0: 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20  N-IF-FALSE*/.   
1fe0: 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65 65   sqlite3VdbeFree
1ff0: 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43  Cursor(p, p->apC
2000: 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20 20 70  sr[iCur]);.    p
2010: 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d 20  ->apCsr[iCur] = 
2020: 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53 51 4c  0;.  }.  if( SQL
2030: 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65 33 56  ITE_OK==sqlite3V
2040: 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65  dbeMemClearAndRe
2050: 73 69 7a 65 28 70 4d 65 6d 2c 20 6e 42 79 74 65  size(pMem, nByte
2060: 29 20 29 7b 0a 20 20 20 20 70 2d 3e 61 70 43 73  ) ){.    p->apCs
2070: 72 5b 69 43 75 72 5d 20 3d 20 70 43 78 20 3d 20  r[iCur] = pCx = 
2080: 28 56 64 62 65 43 75 72 73 6f 72 2a 29 70 4d 65  (VdbeCursor*)pMe
2090: 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65 6d 73 65 74  m->z;.    memset
20a0: 28 70 43 78 2c 20 30 2c 20 6f 66 66 73 65 74 6f  (pCx, 0, offseto
20b0: 66 28 56 64 62 65 43 75 72 73 6f 72 2c 70 41 6c  f(VdbeCursor,pAl
20c0: 74 43 75 72 73 6f 72 29 29 3b 0a 20 20 20 20 70  tCursor));.    p
20d0: 43 78 2d 3e 65 43 75 72 54 79 70 65 20 3d 20 65  Cx->eCurType = e
20e0: 43 75 72 54 79 70 65 3b 0a 20 20 20 20 70 43 78  CurType;.    pCx
20f0: 2d 3e 69 44 62 20 3d 20 69 44 62 3b 0a 20 20 20  ->iDb = iDb;.   
2100: 20 70 43 78 2d 3e 6e 46 69 65 6c 64 20 3d 20 6e   pCx->nField = n
2110: 46 69 65 6c 64 3b 0a 20 20 20 20 70 43 78 2d 3e  Field;.    pCx->
2120: 61 4f 66 66 73 65 74 20 3d 20 26 70 43 78 2d 3e  aOffset = &pCx->
2130: 61 54 79 70 65 5b 6e 46 69 65 6c 64 5d 3b 0a 20  aType[nField];. 
2140: 20 20 20 69 66 28 20 65 43 75 72 54 79 70 65 3d     if( eCurType=
2150: 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
2160: 7b 0a 20 20 20 20 20 20 70 43 78 2d 3e 75 63 2e  {.      pCx->uc.
2170: 70 43 75 72 73 6f 72 20 3d 20 28 42 74 43 75 72  pCursor = (BtCur
2180: 73 6f 72 2a 29 0a 20 20 20 20 20 20 20 20 20 20  sor*).          
2190: 26 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44 38 28  &pMem->z[ROUND8(
21a0: 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f  sizeof(VdbeCurso
21b0: 72 29 29 2b 32 2a 73 69 7a 65 6f 66 28 75 33 32  r))+2*sizeof(u32
21c0: 29 2a 6e 46 69 65 6c 64 5d 3b 0a 20 20 20 20 20  )*nField];.     
21d0: 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
21e0: 73 6f 72 5a 65 72 6f 28 70 43 78 2d 3e 75 63 2e  sorZero(pCx->uc.
21f0: 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a  pCursor);.    }.
2200: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 70 43 78    }.  return pCx
2210: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74  ;.}../*.** Try t
2220: 6f 20 63 6f 6e 76 65 72 74 20 61 20 76 61 6c 75  o convert a valu
2230: 65 20 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63  e into a numeric
2240: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
2250: 69 66 20 77 65 20 63 61 6e 0a 2a 2a 20 64 6f 20  if we can.** do 
2260: 73 6f 20 77 69 74 68 6f 75 74 20 6c 6f 73 73 20  so without loss 
2270: 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20  of information. 
2280: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
2290: 20 69 66 20 74 68 65 20 73 74 72 69 6e 67 0a 2a   if the string.*
22a0: 2a 20 6c 6f 6f 6b 73 20 6c 69 6b 65 20 61 20 6e  * looks like a n
22b0: 75 6d 62 65 72 2c 20 63 6f 6e 76 65 72 74 20 69  umber, convert i
22c0: 74 20 69 6e 74 6f 20 61 20 6e 75 6d 62 65 72 2e  t into a number.
22d0: 20 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74    If it does not
22e0: 0a 2a 2a 20 6c 6f 6f 6b 20 6c 69 6b 65 20 61 20  .** look like a 
22f0: 6e 75 6d 62 65 72 2c 20 6c 65 61 76 65 20 69 74  number, leave it
2300: 20 61 6c 6f 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66   alone..**.** If
2310: 20 74 68 65 20 62 54 72 79 46 6f 72 49 6e 74 20   the bTryForInt 
2320: 66 6c 61 67 20 69 73 20 74 72 75 65 2c 20 74 68  flag is true, th
2330: 65 6e 20 65 78 74 72 61 20 65 66 66 6f 72 74 20  en extra effort 
2340: 69 73 20 6d 61 64 65 20 74 6f 20 67 69 76 65 0a  is made to give.
2350: 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65  ** an integer re
2360: 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20 20 53  presentation.  S
2370: 74 72 69 6e 67 73 20 74 68 61 74 20 6c 6f 6f 6b  trings that look
2380: 20 6c 69 6b 65 20 66 6c 6f 61 74 69 6e 67 20 70   like floating p
2390: 6f 69 6e 74 0a 2a 2a 20 76 61 6c 75 65 73 20 62  oint.** values b
23a0: 75 74 20 77 68 69 63 68 20 68 61 76 65 20 6e 6f  ut which have no
23b0: 20 66 72 61 63 74 69 6f 6e 61 6c 20 63 6f 6d 70   fractional comp
23c0: 6f 6e 65 6e 74 20 28 65 78 61 6d 70 6c 65 3a 20  onent (example: 
23d0: 27 34 38 2e 30 30 27 29 0a 2a 2a 20 77 69 6c 6c  '48.00').** will
23e0: 20 68 61 76 65 20 61 20 4d 45 4d 5f 49 6e 74 20   have a MEM_Int 
23f0: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 77  representation w
2400: 68 65 6e 20 62 54 72 79 46 6f 72 49 6e 74 20 69  hen bTryForInt i
2410: 73 20 74 72 75 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  s true..**.** If
2420: 20 62 54 72 79 46 6f 72 49 6e 74 20 69 73 20 66   bTryForInt is f
2430: 61 6c 73 65 2c 20 74 68 65 6e 20 69 66 20 74 68  alse, then if th
2440: 65 20 69 6e 70 75 74 20 73 74 72 69 6e 67 20 63  e input string c
2450: 6f 6e 74 61 69 6e 73 20 61 20 64 65 63 69 6d 61  ontains a decima
2460: 6c 0a 2a 2a 20 70 6f 69 6e 74 20 6f 72 20 65 78  l.** point or ex
2470: 70 6f 6e 65 6e 74 69 61 6c 20 6e 6f 74 61 74 69  ponential notati
2480: 6f 6e 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  on, the result i
2490: 73 20 6f 6e 6c 79 20 4d 45 4d 5f 52 65 61 6c 2c  s only MEM_Real,
24a0: 20 65 76 65 6e 0a 2a 2a 20 69 66 20 74 68 65 72   even.** if ther
24b0: 65 20 69 73 20 61 6e 20 65 78 61 63 74 20 69 6e  e is an exact in
24c0: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
24d0: 74 69 6f 6e 20 6f 66 20 74 68 65 20 71 75 61 6e  tion of the quan
24e0: 74 69 74 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  tity..*/.static 
24f0: 76 6f 69 64 20 61 70 70 6c 79 4e 75 6d 65 72 69  void applyNumeri
2500: 63 41 66 66 69 6e 69 74 79 28 4d 65 6d 20 2a 70  cAffinity(Mem *p
2510: 52 65 63 2c 20 69 6e 74 20 62 54 72 79 46 6f 72  Rec, int bTryFor
2520: 49 6e 74 29 7b 0a 20 20 64 6f 75 62 6c 65 20 72  Int){.  double r
2530: 56 61 6c 75 65 3b 0a 20 20 69 36 34 20 69 56 61  Value;.  i64 iVa
2540: 6c 75 65 3b 0a 20 20 75 38 20 65 6e 63 20 3d 20  lue;.  u8 enc = 
2550: 70 52 65 63 2d 3e 65 6e 63 3b 0a 20 20 61 73 73  pRec->enc;.  ass
2560: 65 72 74 28 20 28 70 52 65 63 2d 3e 66 6c 61 67  ert( (pRec->flag
2570: 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  s & (MEM_Str|MEM
2580: 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 3d  _Int|MEM_Real))=
2590: 3d 4d 45 4d 5f 53 74 72 20 29 3b 0a 20 20 69 66  =MEM_Str );.  if
25a0: 28 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70 52  ( sqlite3AtoF(pR
25b0: 65 63 2d 3e 7a 2c 20 26 72 56 61 6c 75 65 2c 20  ec->z, &rValue, 
25c0: 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 3d 3d 30  pRec->n, enc)==0
25d0: 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 69 66 28   ) return;.  if(
25e0: 20 30 3d 3d 73 71 6c 69 74 65 33 41 74 6f 69 36   0==sqlite3Atoi6
25f0: 34 28 70 52 65 63 2d 3e 7a 2c 20 26 69 56 61 6c  4(pRec->z, &iVal
2600: 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20 65 6e 63  ue, pRec->n, enc
2610: 29 20 29 7b 0a 20 20 20 20 70 52 65 63 2d 3e 75  ) ){.    pRec->u
2620: 2e 69 20 3d 20 69 56 61 6c 75 65 3b 0a 20 20 20  .i = iValue;.   
2630: 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20   pRec->flags |= 
2640: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 65 6c 73 65  MEM_Int;.  }else
2650: 7b 0a 20 20 20 20 70 52 65 63 2d 3e 75 2e 72 20  {.    pRec->u.r 
2660: 3d 20 72 56 61 6c 75 65 3b 0a 20 20 20 20 70 52  = rValue;.    pR
2670: 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d  ec->flags |= MEM
2680: 5f 52 65 61 6c 3b 0a 20 20 20 20 69 66 28 20 62  _Real;.    if( b
2690: 54 72 79 46 6f 72 49 6e 74 20 29 20 73 71 6c 69  TryForInt ) sqli
26a0: 74 65 33 56 64 62 65 49 6e 74 65 67 65 72 41 66  te3VdbeIntegerAf
26b0: 66 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20  finity(pRec);.  
26c0: 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 63 65  }.}../*.** Proce
26d0: 73 73 69 6e 67 20 69 73 20 64 65 74 65 72 6d 69  ssing is determi
26e0: 6e 65 20 62 79 20 74 68 65 20 61 66 66 69 6e 69  ne by the affini
26f0: 74 79 20 70 61 72 61 6d 65 74 65 72 3a 0a 2a 2a  ty parameter:.**
2700: 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 49  .** SQLITE_AFF_I
2710: 4e 54 45 47 45 52 3a 0a 2a 2a 20 53 51 4c 49 54  NTEGER:.** SQLIT
2720: 45 5f 41 46 46 5f 52 45 41 4c 3a 0a 2a 2a 20 53  E_AFF_REAL:.** S
2730: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
2740: 43 3a 0a 2a 2a 20 20 20 20 54 72 79 20 74 6f 20  C:.**    Try to 
2750: 63 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f 20  convert pRec to 
2760: 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65  an integer repre
2770: 73 65 6e 74 61 74 69 6f 6e 20 6f 72 20 61 20 0a  sentation or a .
2780: 2a 2a 20 20 20 20 66 6c 6f 61 74 69 6e 67 2d 70  **    floating-p
2790: 6f 69 6e 74 20 72 65 70 72 65 73 65 6e 74 61 74  oint representat
27a0: 69 6f 6e 20 69 66 20 61 6e 20 69 6e 74 65 67 65  ion if an intege
27b0: 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  r representation
27c0: 0a 2a 2a 20 20 20 20 69 73 20 6e 6f 74 20 70 6f  .**    is not po
27d0: 73 73 69 62 6c 65 2e 20 20 4e 6f 74 65 20 74 68  ssible.  Note th
27e0: 61 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 72  at the integer r
27f0: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 73  epresentation is
2800: 0a 2a 2a 20 20 20 20 61 6c 77 61 79 73 20 70 72  .**    always pr
2810: 65 66 65 72 72 65 64 2c 20 65 76 65 6e 20 69 66  eferred, even if
2820: 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 69 73   the affinity is
2830: 20 52 45 41 4c 2c 20 62 65 63 61 75 73 65 0a 2a   REAL, because.*
2840: 2a 20 20 20 20 61 6e 20 69 6e 74 65 67 65 72 20  *    an integer 
2850: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69  representation i
2860: 73 20 6d 6f 72 65 20 73 70 61 63 65 20 65 66 66  s more space eff
2870: 69 63 69 65 6e 74 20 6f 6e 20 64 69 73 6b 2e 0a  icient on disk..
2880: 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46  **.** SQLITE_AFF
2890: 5f 54 45 58 54 3a 0a 2a 2a 20 20 20 20 43 6f 6e  _TEXT:.**    Con
28a0: 76 65 72 74 20 70 52 65 63 20 74 6f 20 61 20 74  vert pRec to a t
28b0: 65 78 74 20 72 65 70 72 65 73 65 6e 74 61 74 69  ext representati
28c0: 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45  on..**.** SQLITE
28d0: 5f 41 46 46 5f 42 4c 4f 42 3a 0a 2a 2a 20 20 20  _AFF_BLOB:.**   
28e0: 20 4e 6f 2d 6f 70 2e 20 20 70 52 65 63 20 69 73   No-op.  pRec is
28f0: 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2f 0a 73   unchanged..*/.s
2900: 74 61 74 69 63 20 76 6f 69 64 20 61 70 70 6c 79  tatic void apply
2910: 41 66 66 69 6e 69 74 79 28 0a 20 20 4d 65 6d 20  Affinity(.  Mem 
2920: 2a 70 52 65 63 2c 20 20 20 20 20 20 20 20 20 20  *pRec,          
2930: 2f 2a 20 54 68 65 20 76 61 6c 75 65 20 74 6f 20  /* The value to 
2940: 61 70 70 6c 79 20 61 66 66 69 6e 69 74 79 20 74  apply affinity t
2950: 6f 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69  o */.  char affi
2960: 6e 69 74 79 2c 20 20 20 20 20 20 2f 2a 20 54 68  nity,      /* Th
2970: 65 20 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65  e affinity to be
2980: 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20 20 75 38   applied */.  u8
2990: 20 65 6e 63 20 20 20 20 20 20 20 20 20 20 20 20   enc            
29a0: 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20 74 65    /* Use this te
29b0: 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 29  xt encoding */.)
29c0: 7b 0a 20 20 69 66 28 20 61 66 66 69 6e 69 74 79  {.  if( affinity
29d0: 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  >=SQLITE_AFF_NUM
29e0: 45 52 49 43 20 29 7b 0a 20 20 20 20 61 73 73 65  ERIC ){.    asse
29f0: 72 74 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51  rt( affinity==SQ
2a00: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
2a10: 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53 51   || affinity==SQ
2a20: 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 0a 20 20  LITE_AFF_REAL.  
2a30: 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 61 66             || af
2a40: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
2a50: 46 46 5f 4e 55 4d 45 52 49 43 20 29 3b 0a 20 20  FF_NUMERIC );.  
2a60: 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61    if( (pRec->fla
2a70: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30  gs & MEM_Int)==0
2a80: 20 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49   ){ /*OPTIMIZATI
2a90: 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20  ON-IF-FALSE*/.  
2aa0: 20 20 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66      if( (pRec->f
2ab0: 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29  lags & MEM_Real)
2ac0: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 69  ==0 ){.        i
2ad0: 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26  f( pRec->flags &
2ae0: 20 4d 45 4d 5f 53 74 72 20 29 20 61 70 70 6c 79   MEM_Str ) apply
2af0: 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
2b00: 70 52 65 63 2c 31 29 3b 0a 20 20 20 20 20 20 7d  pRec,1);.      }
2b10: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71  else{.        sq
2b20: 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67 65 72  lite3VdbeInteger
2b30: 41 66 66 69 6e 69 74 79 28 70 52 65 63 29 3b 0a  Affinity(pRec);.
2b40: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
2b50: 7d 65 6c 73 65 20 69 66 28 20 61 66 66 69 6e 69  }else if( affini
2b60: 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54  ty==SQLITE_AFF_T
2b70: 45 58 54 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e  EXT ){.    /* On
2b80: 6c 79 20 61 74 74 65 6d 70 74 20 74 68 65 20 63  ly attempt the c
2b90: 6f 6e 76 65 72 73 69 6f 6e 20 74 6f 20 54 45 58  onversion to TEX
2ba0: 54 20 69 66 20 74 68 65 72 65 20 69 73 20 61 6e  T if there is an
2bb0: 20 69 6e 74 65 67 65 72 20 6f 72 20 72 65 61 6c   integer or real
2bc0: 0a 20 20 20 20 2a 2a 20 72 65 70 72 65 73 65 6e  .    ** represen
2bd0: 74 61 74 69 6f 6e 20 28 62 6c 6f 62 20 61 6e 64  tation (blob and
2be0: 20 4e 55 4c 4c 20 64 6f 20 6e 6f 74 20 67 65 74   NULL do not get
2bf0: 20 63 6f 6e 76 65 72 74 65 64 29 20 62 75 74 20   converted) but 
2c00: 6e 6f 20 73 74 72 69 6e 67 0a 20 20 20 20 2a 2a  no string.    **
2c10: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e   representation.
2c20: 20 20 49 74 20 77 6f 75 6c 64 20 62 65 20 68 61    It would be ha
2c30: 72 6d 6c 65 73 73 20 74 6f 20 72 65 70 65 61 74  rmless to repeat
2c40: 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20   the conversion 
2c50: 69 66 20 0a 20 20 20 20 2a 2a 20 74 68 65 72 65  if .    ** there
2c60: 20 69 73 20 61 6c 72 65 61 64 79 20 61 20 73 74   is already a st
2c70: 72 69 6e 67 20 72 65 70 2c 20 62 75 74 20 69 74  ring rep, but it
2c80: 20 69 73 20 70 6f 69 6e 74 6c 65 73 73 20 74 6f   is pointless to
2c90: 20 77 61 73 74 65 20 74 68 6f 73 65 0a 20 20 20   waste those.   
2ca0: 20 2a 2a 20 43 50 55 20 63 79 63 6c 65 73 2e 20   ** CPU cycles. 
2cb0: 2a 2f 0a 20 20 20 20 69 66 28 20 30 3d 3d 28 70  */.    if( 0==(p
2cc0: 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 53  Rec->flags&MEM_S
2cd0: 74 72 29 20 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a  tr) ){ /*OPTIMIZ
2ce0: 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f  ATION-IF-FALSE*/
2cf0: 0a 20 20 20 20 20 20 69 66 28 20 28 70 52 65 63  .      if( (pRec
2d00: 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 52 65 61  ->flags&(MEM_Rea
2d10: 6c 7c 4d 45 4d 5f 49 6e 74 29 29 20 29 7b 0a 20  l|MEM_Int)) ){. 
2d20: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
2d30: 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 70  beMemStringify(p
2d40: 52 65 63 2c 20 65 6e 63 2c 20 31 29 3b 0a 20 20  Rec, enc, 1);.  
2d50: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
2d60: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 3d 20 7e  pRec->flags &= ~
2d70: 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e  (MEM_Real|MEM_In
2d80: 74 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a  t);.  }.}../*.**
2d90: 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20   Try to convert 
2da0: 74 68 65 20 74 79 70 65 20 6f 66 20 61 20 66 75  the type of a fu
2db0: 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20  nction argument 
2dc0: 6f 72 20 61 20 72 65 73 75 6c 74 20 63 6f 6c 75  or a result colu
2dd0: 6d 6e 0a 2a 2a 20 69 6e 74 6f 20 61 20 6e 75 6d  mn.** into a num
2de0: 65 72 69 63 20 72 65 70 72 65 73 65 6e 74 61 74  eric representat
2df0: 69 6f 6e 2e 20 20 55 73 65 20 65 69 74 68 65 72  ion.  Use either
2e00: 20 49 4e 54 45 47 45 52 20 6f 72 20 52 45 41 4c   INTEGER or REAL
2e10: 20 77 68 69 63 68 65 76 65 72 0a 2a 2a 20 69 73   whichever.** is
2e20: 20 61 70 70 72 6f 70 72 69 61 74 65 2e 20 20 42   appropriate.  B
2e30: 75 74 20 6f 6e 6c 79 20 64 6f 20 74 68 65 20 63  ut only do the c
2e40: 6f 6e 76 65 72 73 69 6f 6e 20 69 66 20 69 74 20  onversion if it 
2e50: 69 73 20 70 6f 73 73 69 62 6c 65 20 77 69 74 68  is possible with
2e60: 6f 75 74 0a 2a 2a 20 6c 6f 73 73 20 6f 66 20 69  out.** loss of i
2e70: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 6e 64 20 72  nformation and r
2e80: 65 74 75 72 6e 20 74 68 65 20 72 65 76 69 73 65  eturn the revise
2e90: 64 20 74 79 70 65 20 6f 66 20 74 68 65 20 61 72  d type of the ar
2ea0: 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73  gument..*/.int s
2eb0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 6e 75 6d  qlite3_value_num
2ec0: 65 72 69 63 5f 74 79 70 65 28 73 71 6c 69 74 65  eric_type(sqlite
2ed0: 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b 0a  3_value *pVal){.
2ee0: 20 20 69 6e 74 20 65 54 79 70 65 20 3d 20 73 71    int eType = sq
2ef0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65  lite3_value_type
2f00: 28 70 56 61 6c 29 3b 0a 20 20 69 66 28 20 65 54  (pVal);.  if( eT
2f10: 79 70 65 3d 3d 53 51 4c 49 54 45 5f 54 45 58 54  ype==SQLITE_TEXT
2f20: 20 29 7b 0a 20 20 20 20 4d 65 6d 20 2a 70 4d 65   ){.    Mem *pMe
2f30: 6d 20 3d 20 28 4d 65 6d 2a 29 70 56 61 6c 3b 0a  m = (Mem*)pVal;.
2f40: 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63      applyNumeric
2f50: 41 66 66 69 6e 69 74 79 28 70 4d 65 6d 2c 20 30  Affinity(pMem, 0
2f60: 29 3b 0a 20 20 20 20 65 54 79 70 65 20 3d 20 73  );.    eType = s
2f70: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70  qlite3_value_typ
2f80: 65 28 70 56 61 6c 29 3b 0a 20 20 7d 0a 20 20 72  e(pVal);.  }.  r
2f90: 65 74 75 72 6e 20 65 54 79 70 65 3b 0a 7d 0a 0a  eturn eType;.}..
2fa0: 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74 65 64 20 76  /*.** Exported v
2fb0: 65 72 73 69 6f 6e 20 6f 66 20 61 70 70 6c 79 41  ersion of applyA
2fc0: 66 66 69 6e 69 74 79 28 29 2e 20 54 68 69 73 20  ffinity(). This 
2fd0: 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e 20 73 71 6c  one works on sql
2fe0: 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 0a 2a 2a  ite3_value*, .**
2ff0: 20 6e 6f 74 20 74 68 65 20 69 6e 74 65 72 6e 61   not the interna
3000: 6c 20 4d 65 6d 2a 20 74 79 70 65 2e 0a 2a 2f 0a  l Mem* type..*/.
3010: 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
3020: 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a  eApplyAffinity(.
3030: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
3040: 2a 70 56 61 6c 2c 20 0a 20 20 75 38 20 61 66 66  *pVal, .  u8 aff
3050: 69 6e 69 74 79 2c 20 0a 20 20 75 38 20 65 6e 63  inity, .  u8 enc
3060: 0a 29 7b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e  .){.  applyAffin
3070: 69 74 79 28 28 4d 65 6d 20 2a 29 70 56 61 6c 2c  ity((Mem *)pVal,
3080: 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 29 3b   affinity, enc);
3090: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 70 4d 65 6d 20 63  .}../*.** pMem c
30a0: 75 72 72 65 6e 74 6c 79 20 6f 6e 6c 79 20 68 6f  urrently only ho
30b0: 6c 64 73 20 61 20 73 74 72 69 6e 67 20 74 79 70  lds a string typ
30c0: 65 20 28 6f 72 20 6d 61 79 62 65 20 61 20 42 4c  e (or maybe a BL
30d0: 4f 42 20 74 68 61 74 20 77 65 20 63 61 6e 0a 2a  OB that we can.*
30e0: 2a 20 69 6e 74 65 72 70 72 65 74 20 61 73 20 61  * interpret as a
30f0: 20 73 74 72 69 6e 67 20 69 66 20 77 65 20 77 61   string if we wa
3100: 6e 74 20 74 6f 29 2e 20 20 43 6f 6d 70 75 74 65  nt to).  Compute
3110: 20 69 74 73 20 63 6f 72 72 65 73 70 6f 6e 64 69   its correspondi
3120: 6e 67 0a 2a 2a 20 6e 75 6d 65 72 69 63 20 74 79  ng.** numeric ty
3130: 70 65 2c 20 69 66 20 68 61 73 20 6f 6e 65 2e 20  pe, if has one. 
3140: 20 53 65 74 20 74 68 65 20 70 4d 65 6d 2d 3e 75   Set the pMem->u
3150: 2e 72 20 61 6e 64 20 70 4d 65 6d 2d 3e 75 2e 69  .r and pMem->u.i
3160: 20 66 69 65 6c 64 73 0a 2a 2a 20 61 63 63 6f 72   fields.** accor
3170: 64 69 6e 67 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69  dingly..*/.stati
3180: 63 20 75 31 36 20 53 51 4c 49 54 45 5f 4e 4f 49  c u16 SQLITE_NOI
3190: 4e 4c 49 4e 45 20 63 6f 6d 70 75 74 65 4e 75 6d  NLINE computeNum
31a0: 65 72 69 63 54 79 70 65 28 4d 65 6d 20 2a 70 4d  ericType(Mem *pM
31b0: 65 6d 29 7b 0a 20 20 61 73 73 65 72 74 28 20 28  em){.  assert( (
31c0: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pMem->flags & (M
31d0: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29  EM_Int|MEM_Real)
31e0: 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  )==0 );.  assert
31f0: 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  ( (pMem->flags &
3200: 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c   (MEM_Str|MEM_Bl
3210: 6f 62 29 29 21 3d 30 20 29 3b 0a 20 20 69 66 28  ob))!=0 );.  if(
3220: 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70 4d 65   sqlite3AtoF(pMe
3230: 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d 3e 75 2e 72  m->z, &pMem->u.r
3240: 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d  , pMem->n, pMem-
3250: 3e 65 6e 63 29 3d 3d 30 20 29 7b 0a 20 20 20 20  >enc)==0 ){.    
3260: 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20  return 0;.  }.  
3270: 69 66 28 20 73 71 6c 69 74 65 33 41 74 6f 69 36  if( sqlite3Atoi6
3280: 34 28 70 4d 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d  4(pMem->z, &pMem
3290: 2d 3e 75 2e 69 2c 20 70 4d 65 6d 2d 3e 6e 2c 20  ->u.i, pMem->n, 
32a0: 70 4d 65 6d 2d 3e 65 6e 63 29 3d 3d 53 51 4c 49  pMem->enc)==SQLI
32b0: 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 74  TE_OK ){.    ret
32c0: 75 72 6e 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d  urn MEM_Int;.  }
32d0: 0a 20 20 72 65 74 75 72 6e 20 4d 45 4d 5f 52 65  .  return MEM_Re
32e0: 61 6c 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  al;.}../*.** Ret
32f0: 75 72 6e 20 74 68 65 20 6e 75 6d 65 72 69 63 20  urn the numeric 
3300: 74 79 70 65 20 66 6f 72 20 70 4d 65 6d 2c 20 65  type for pMem, e
3310: 69 74 68 65 72 20 4d 45 4d 5f 49 6e 74 20 6f 72  ither MEM_Int or
3320: 20 4d 45 4d 5f 52 65 61 6c 20 6f 72 20 62 6f 74   MEM_Real or bot
3330: 68 20 6f 72 0a 2a 2a 20 6e 6f 6e 65 2e 20 20 0a  h or.** none.  .
3340: 2a 2a 0a 2a 2a 20 55 6e 6c 69 6b 65 20 61 70 70  **.** Unlike app
3350: 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
3360: 79 28 29 2c 20 74 68 69 73 20 72 6f 75 74 69 6e  y(), this routin
3370: 65 20 64 6f 65 73 20 6e 6f 74 20 6d 6f 64 69 66  e does not modif
3380: 79 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 2e 0a 2a  y pMem->flags..*
3390: 2a 20 42 75 74 20 69 74 20 64 6f 65 73 20 73 65  * But it does se
33a0: 74 20 70 4d 65 6d 2d 3e 75 2e 72 20 61 6e 64 20  t pMem->u.r and 
33b0: 70 4d 65 6d 2d 3e 75 2e 69 20 61 70 70 72 6f 70  pMem->u.i approp
33c0: 72 69 61 74 65 6c 79 2e 0a 2a 2f 0a 73 74 61 74  riately..*/.stat
33d0: 69 63 20 75 31 36 20 6e 75 6d 65 72 69 63 54 79  ic u16 numericTy
33e0: 70 65 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20  pe(Mem *pMem){. 
33f0: 20 69 66 28 20 70 4d 65 6d 2d 3e 66 6c 61 67 73   if( pMem->flags
3400: 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f   & (MEM_Int|MEM_
3410: 52 65 61 6c 29 20 29 7b 0a 20 20 20 20 72 65 74  Real) ){.    ret
3420: 75 72 6e 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  urn pMem->flags 
3430: 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  & (MEM_Int|MEM_R
3440: 65 61 6c 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  eal);.  }.  if( 
3450: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pMem->flags & (M
3460: 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29  EM_Str|MEM_Blob)
3470: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 63   ){.    return c
3480: 6f 6d 70 75 74 65 4e 75 6d 65 72 69 63 54 79 70  omputeNumericTyp
3490: 65 28 70 4d 65 6d 29 3b 0a 20 20 7d 0a 20 20 72  e(pMem);.  }.  r
34a0: 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 23 69 66 64  eturn 0;.}..#ifd
34b0: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
34c0: 2f 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 6e 69  /*.** Write a ni
34d0: 63 65 20 73 74 72 69 6e 67 20 72 65 70 72 65 73  ce string repres
34e0: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  entation of the 
34f0: 63 6f 6e 74 65 6e 74 73 20 6f 66 20 63 65 6c 6c  contents of cell
3500: 20 70 4d 65 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75   pMem.** into bu
3510: 66 66 65 72 20 7a 42 75 66 2c 20 6c 65 6e 67 74  ffer zBuf, lengt
3520: 68 20 6e 42 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20  h nBuf..*/.void 
3530: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72  sqlite3VdbeMemPr
3540: 65 74 74 79 50 72 69 6e 74 28 4d 65 6d 20 2a 70  ettyPrint(Mem *p
3550: 4d 65 6d 2c 20 63 68 61 72 20 2a 7a 42 75 66 29  Mem, char *zBuf)
3560: 7b 0a 20 20 63 68 61 72 20 2a 7a 43 73 72 20 3d  {.  char *zCsr =
3570: 20 7a 42 75 66 3b 0a 20 20 69 6e 74 20 66 20 3d   zBuf;.  int f =
3580: 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20   pMem->flags;.. 
3590: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68   static const ch
35a0: 61 72 20 2a 63 6f 6e 73 74 20 65 6e 63 6e 61 6d  ar *const encnam
35b0: 65 73 5b 5d 20 3d 20 7b 22 28 58 29 22 2c 20 22  es[] = {"(X)", "
35c0: 28 38 29 22 2c 20 22 28 31 36 4c 45 29 22 2c 20  (8)", "(16LE)", 
35d0: 22 28 31 36 42 45 29 22 7d 3b 0a 0a 20 20 69 66  "(16BE)"};..  if
35e0: 28 20 66 26 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a  ( f&MEM_Blob ){.
35f0: 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 63      int i;.    c
3600: 68 61 72 20 63 3b 0a 20 20 20 20 69 66 28 20 66  har c;.    if( f
3610: 20 26 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20   & MEM_Dyn ){.  
3620: 20 20 20 20 63 20 3d 20 27 7a 27 3b 0a 20 20 20      c = 'z';.   
3630: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
3640: 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  (MEM_Static|MEM_
3650: 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20  Ephem))==0 );.  
3660: 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20    }else if( f & 
3670: 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20 20  MEM_Static ){.  
3680: 20 20 20 20 63 20 3d 20 27 74 27 3b 0a 20 20 20      c = 't';.   
3690: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
36a0: 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68  (MEM_Dyn|MEM_Eph
36b0: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
36c0: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
36d0: 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20 20 20 20  _Ephem ){.      
36e0: 63 20 3d 20 27 65 27 3b 0a 20 20 20 20 20 20 61  c = 'e';.      a
36f0: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
3700: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29  _Static|MEM_Dyn)
3710: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
3720: 65 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 73 27  e{.      c = 's'
3730: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c  ;.    }..    sql
3740: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30  ite3_snprintf(10
3750: 30 2c 20 7a 43 73 72 2c 20 22 25 63 22 2c 20 63  0, zCsr, "%c", c
3760: 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  );.    zCsr += s
3770: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
3780: 43 73 72 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  Csr);.    sqlite
3790: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
37a0: 7a 43 73 72 2c 20 22 25 64 5b 22 2c 20 70 4d 65  zCsr, "%d[", pMe
37b0: 6d 2d 3e 6e 29 3b 0a 20 20 20 20 7a 43 73 72 20  m->n);.    zCsr 
37c0: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
37d0: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 66 6f  30(zCsr);.    fo
37e0: 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26 20 69  r(i=0; i<16 && i
37f0: 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a  <pMem->n; i++){.
3800: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e        sqlite3_sn
3810: 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72  printf(100, zCsr
3820: 2c 20 22 25 30 32 58 22 2c 20 28 28 69 6e 74 29  , "%02X", ((int)
3830: 70 4d 65 6d 2d 3e 7a 5b 69 5d 20 26 20 30 78 46  pMem->z[i] & 0xF
3840: 46 29 29 3b 0a 20 20 20 20 20 20 7a 43 73 72 20  F));.      zCsr 
3850: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3860: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a  30(zCsr);.    }.
3870: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 31      for(i=0; i<1
3880: 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20  6 && i<pMem->n; 
3890: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 63 68 61 72  i++){.      char
38a0: 20 7a 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b   z = pMem->z[i];
38b0: 0a 20 20 20 20 20 20 69 66 28 20 7a 3c 33 32 20  .      if( z<32 
38c0: 7c 7c 20 7a 3e 31 32 36 20 29 20 2a 7a 43 73 72  || z>126 ) *zCsr
38d0: 2b 2b 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20  ++ = '.';.      
38e0: 65 6c 73 65 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a  else *zCsr++ = z
38f0: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c  ;.    }..    sql
3900: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30  ite3_snprintf(10
3910: 30 2c 20 7a 43 73 72 2c 20 22 5d 25 73 22 2c 20  0, zCsr, "]%s", 
3920: 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65  encnames[pMem->e
3930: 6e 63 5d 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b  nc]);.    zCsr +
3940: 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
3950: 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 69 66 28  0(zCsr);.    if(
3960: 20 66 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b   f & MEM_Zero ){
3970: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73  .      sqlite3_s
3980: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
3990: 72 2c 22 2b 25 64 7a 22 2c 70 4d 65 6d 2d 3e 75  r,"+%dz",pMem->u
39a0: 2e 6e 5a 65 72 6f 29 3b 0a 20 20 20 20 20 20 7a  .nZero);.      z
39b0: 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74  Csr += sqlite3St
39c0: 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20  rlen30(zCsr);.  
39d0: 20 20 7d 0a 20 20 20 20 2a 7a 43 73 72 20 3d 20    }.    *zCsr = 
39e0: 27 5c 30 27 3b 0a 20 20 7d 65 6c 73 65 20 69 66  '\0';.  }else if
39f0: 28 20 66 20 26 20 4d 45 4d 5f 53 74 72 20 29 7b  ( f & MEM_Str ){
3a00: 0a 20 20 20 20 69 6e 74 20 6a 2c 20 6b 3b 0a 20  .    int j, k;. 
3a10: 20 20 20 7a 42 75 66 5b 30 5d 20 3d 20 27 20 27     zBuf[0] = ' '
3a20: 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d 45  ;.    if( f & ME
3a30: 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20 7a  M_Dyn ){.      z
3a40: 42 75 66 5b 31 5d 20 3d 20 27 7a 27 3b 0a 20 20  Buf[1] = 'z';.  
3a50: 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26      assert( (f &
3a60: 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d   (MEM_Static|MEM
3a70: 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20  _Ephem))==0 );. 
3a80: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26     }else if( f &
3a90: 20 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20   MEM_Static ){. 
3aa0: 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27       zBuf[1] = '
3ab0: 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  t';.      assert
3ac0: 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c  ( (f & (MEM_Dyn|
3ad0: 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29  MEM_Ephem))==0 )
3ae0: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
3af0: 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b  f & MEM_Ephem ){
3b00: 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d  .      zBuf[1] =
3b10: 20 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65   'e';.      asse
3b20: 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74  rt( (f & (MEM_St
3b30: 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d  atic|MEM_Dyn))==
3b40: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  0 );.    }else{.
3b50: 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20        zBuf[1] = 
3b60: 27 73 27 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6b  's';.    }.    k
3b70: 20 3d 20 32 3b 0a 20 20 20 20 73 71 6c 69 74 65   = 2;.    sqlite
3b80: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
3b90: 26 7a 42 75 66 5b 6b 5d 2c 20 22 25 64 22 2c 20  &zBuf[k], "%d", 
3ba0: 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 6b 20  pMem->n);.    k 
3bb0: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3bc0: 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20  30(&zBuf[k]);.  
3bd0: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5b    zBuf[k++] = '[
3be0: 27 3b 0a 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20  ';.    for(j=0; 
3bf0: 6a 3c 31 35 20 26 26 20 6a 3c 70 4d 65 6d 2d 3e  j<15 && j<pMem->
3c00: 6e 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 75  n; j++){.      u
3c10: 38 20 63 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d  8 c = pMem->z[j]
3c20: 3b 0a 20 20 20 20 20 20 69 66 28 20 63 3e 3d 30  ;.      if( c>=0
3c30: 78 32 30 20 26 26 20 63 3c 30 78 37 66 20 29 7b  x20 && c<0x7f ){
3c40: 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b  .        zBuf[k+
3c50: 2b 5d 20 3d 20 63 3b 0a 20 20 20 20 20 20 7d 65  +] = c;.      }e
3c60: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 42 75  lse{.        zBu
3c70: 66 5b 6b 2b 2b 5d 20 3d 20 27 2e 27 3b 0a 20 20  f[k++] = '.';.  
3c80: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
3c90: 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5d 27 3b  zBuf[k++] = ']';
3ca0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
3cb0: 72 69 6e 74 66 28 31 30 30 2c 26 7a 42 75 66 5b  rintf(100,&zBuf[
3cc0: 6b 5d 2c 20 65 6e 63 6e 61 6d 65 73 5b 70 4d 65  k], encnames[pMe
3cd0: 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20 20 20 6b 20  m->enc]);.    k 
3ce0: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3cf0: 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20  30(&zBuf[k]);.  
3d00: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 30 3b    zBuf[k++] = 0;
3d10: 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23  .  }.}.#endif..#
3d20: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
3d30: 55 47 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 74  UG./*.** Print t
3d40: 68 65 20 76 61 6c 75 65 20 6f 66 20 61 20 72 65  he value of a re
3d50: 67 69 73 74 65 72 20 66 6f 72 20 74 72 61 63 69  gister for traci
3d60: 6e 67 20 70 75 72 70 6f 73 65 73 3a 0a 2a 2f 0a  ng purposes:.*/.
3d70: 73 74 61 74 69 63 20 76 6f 69 64 20 6d 65 6d 54  static void memT
3d80: 72 61 63 65 50 72 69 6e 74 28 4d 65 6d 20 2a 70  racePrint(Mem *p
3d90: 29 7b 0a 20 20 69 66 28 20 70 2d 3e 66 6c 61 67  ){.  if( p->flag
3da0: 73 20 26 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65  s & MEM_Undefine
3db0: 64 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28  d ){.    printf(
3dc0: 22 20 75 6e 64 65 66 69 6e 65 64 22 29 3b 0a 20  " undefined");. 
3dd0: 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c   }else if( p->fl
3de0: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
3df0: 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 4e  {.    printf(" N
3e00: 55 4c 4c 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69  ULL");.  }else i
3e10: 66 28 20 28 70 2d 3e 66 6c 61 67 73 20 26 20 28  f( (p->flags & (
3e20: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29  MEM_Int|MEM_Str)
3e30: 29 3d 3d 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f  )==(MEM_Int|MEM_
3e40: 53 74 72 29 20 29 7b 0a 20 20 20 20 70 72 69 6e  Str) ){.    prin
3e50: 74 66 28 22 20 73 69 3a 25 6c 6c 64 22 2c 20 70  tf(" si:%lld", p
3e60: 2d 3e 75 2e 69 29 3b 0a 20 20 7d 65 6c 73 65 20  ->u.i);.  }else 
3e70: 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d  if( p->flags & M
3e80: 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 70 72  EM_Int ){.    pr
3e90: 69 6e 74 66 28 22 20 69 3a 25 6c 6c 64 22 2c 20  intf(" i:%lld", 
3ea0: 70 2d 3e 75 2e 69 29 3b 0a 23 69 66 6e 64 65 66  p->u.i);.#ifndef
3eb0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
3ec0: 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 7d 65  ATING_POINT.  }e
3ed0: 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73  lse if( p->flags
3ee0: 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20   & MEM_Real ){. 
3ef0: 20 20 20 70 72 69 6e 74 66 28 22 20 72 3a 25 67     printf(" r:%g
3f00: 22 2c 20 70 2d 3e 75 2e 72 29 3b 0a 23 65 6e 64  ", p->u.r);.#end
3f10: 69 66 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  if.  }else if( p
3f20: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f  ->flags & MEM_Ro
3f30: 77 53 65 74 20 29 7b 0a 20 20 20 20 70 72 69 6e  wSet ){.    prin
3f40: 74 66 28 22 20 28 72 6f 77 73 65 74 29 22 29 3b  tf(" (rowset)");
3f50: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 63 68  .  }else{.    ch
3f60: 61 72 20 7a 42 75 66 5b 32 30 30 5d 3b 0a 20 20  ar zBuf[200];.  
3f70: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
3f80: 50 72 65 74 74 79 50 72 69 6e 74 28 70 2c 20 7a  PrettyPrint(p, z
3f90: 42 75 66 29 3b 0a 20 20 20 20 70 72 69 6e 74 66  Buf);.    printf
3fa0: 28 22 20 25 73 22 2c 20 7a 42 75 66 29 3b 0a 20  (" %s", zBuf);. 
3fb0: 20 7d 0a 20 20 69 66 28 20 70 2d 3e 66 6c 61 67   }.  if( p->flag
3fc0: 73 20 26 20 4d 45 4d 5f 53 75 62 74 79 70 65 20  s & MEM_Subtype 
3fd0: 29 20 70 72 69 6e 74 66 28 22 20 73 75 62 74 79  ) printf(" subty
3fe0: 70 65 3d 30 78 25 30 32 78 22 2c 20 70 2d 3e 65  pe=0x%02x", p->e
3ff0: 53 75 62 74 79 70 65 29 3b 0a 7d 0a 73 74 61 74  Subtype);.}.stat
4000: 69 63 20 76 6f 69 64 20 72 65 67 69 73 74 65 72  ic void register
4010: 54 72 61 63 65 28 69 6e 74 20 69 52 65 67 2c 20  Trace(int iReg, 
4020: 4d 65 6d 20 2a 70 29 7b 0a 20 20 70 72 69 6e 74  Mem *p){.  print
4030: 66 28 22 52 45 47 5b 25 64 5d 20 3d 20 22 2c 20  f("REG[%d] = ", 
4040: 69 52 65 67 29 3b 0a 20 20 6d 65 6d 54 72 61 63  iReg);.  memTrac
4050: 65 50 72 69 6e 74 28 70 29 3b 0a 20 20 70 72 69  ePrint(p);.  pri
4060: 6e 74 66 28 22 5c 6e 22 29 3b 0a 7d 0a 23 65 6e  ntf("\n");.}.#en
4070: 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
4080: 54 45 5f 44 45 42 55 47 0a 23 20 20 64 65 66 69  TE_DEBUG.#  defi
4090: 6e 65 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  ne REGISTER_TRAC
40a0: 45 28 52 2c 4d 29 20 69 66 28 64 62 2d 3e 66 6c  E(R,M) if(db->fl
40b0: 61 67 73 26 53 51 4c 49 54 45 5f 56 64 62 65 54  ags&SQLITE_VdbeT
40c0: 72 61 63 65 29 72 65 67 69 73 74 65 72 54 72 61  race)registerTra
40d0: 63 65 28 52 2c 4d 29 0a 23 65 6c 73 65 0a 23 20  ce(R,M).#else.# 
40e0: 20 64 65 66 69 6e 65 20 52 45 47 49 53 54 45 52   define REGISTER
40f0: 5f 54 52 41 43 45 28 52 2c 4d 29 0a 23 65 6e 64  _TRACE(R,M).#end
4100: 69 66 0a 0a 0a 23 69 66 64 65 66 20 56 44 42 45  if...#ifdef VDBE
4110: 5f 50 52 4f 46 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a  _PROFILE../* .**
4120: 20 68 77 74 69 6d 65 2e 68 20 63 6f 6e 74 61 69   hwtime.h contai
4130: 6e 73 20 69 6e 6c 69 6e 65 20 61 73 73 65 6d 62  ns inline assemb
4140: 6c 65 72 20 63 6f 64 65 20 66 6f 72 20 69 6d 70  ler code for imp
4150: 6c 65 6d 65 6e 74 69 6e 67 20 0a 2a 2a 20 68 69  lementing .** hi
4160: 67 68 2d 70 65 72 66 6f 72 6d 61 6e 63 65 20 74  gh-performance t
4170: 69 6d 69 6e 67 20 72 6f 75 74 69 6e 65 73 2e 0a  iming routines..
4180: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 68 77 74  */.#include "hwt
4190: 69 6d 65 2e 68 22 0a 0a 23 65 6e 64 69 66 0a 0a  ime.h"..#endif..
41a0: 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 2f  #ifndef NDEBUG./
41b0: 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69  *.** This functi
41c0: 6f 6e 20 69 73 20 6f 6e 6c 79 20 63 61 6c 6c 65  on is only calle
41d0: 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e  d from within an
41e0: 20 61 73 73 65 72 74 28 29 20 65 78 70 72 65 73   assert() expres
41f0: 73 69 6f 6e 2e 20 49 74 0a 2a 2a 20 63 68 65 63  sion. It.** chec
4200: 6b 73 20 74 68 61 74 20 74 68 65 20 73 71 6c 69  ks that the sqli
4210: 74 65 33 2e 6e 54 72 61 6e 73 61 63 74 69 6f 6e  te3.nTransaction
4220: 20 76 61 72 69 61 62 6c 65 20 69 73 20 63 6f 72   variable is cor
4230: 72 65 63 74 6c 79 20 73 65 74 20 74 6f 0a 2a 2a  rectly set to.**
4240: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6e   the number of n
4250: 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  on-transaction s
4260: 61 76 65 70 6f 69 6e 74 73 20 63 75 72 72 65 6e  avepoints curren
4270: 74 6c 79 20 69 6e 20 74 68 65 20 0a 2a 2a 20 6c  tly in the .** l
4280: 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74  inked list start
4290: 69 6e 67 20 61 74 20 73 71 6c 69 74 65 33 2e 70  ing at sqlite3.p
42a0: 53 61 76 65 70 6f 69 6e 74 2e 0a 2a 2a 20 0a 2a  Savepoint..** .*
42b0: 2a 20 55 73 61 67 65 3a 0a 2a 2a 0a 2a 2a 20 20  * Usage:.**.**  
42c0: 20 20 20 61 73 73 65 72 74 28 20 63 68 65 63 6b     assert( check
42d0: 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64  SavepointCount(d
42e0: 62 29 20 29 3b 0a 2a 2f 0a 73 74 61 74 69 63 20  b) );.*/.static 
42f0: 69 6e 74 20 63 68 65 63 6b 53 61 76 65 70 6f 69  int checkSavepoi
4300: 6e 74 43 6f 75 6e 74 28 73 71 6c 69 74 65 33 20  ntCount(sqlite3 
4310: 2a 64 62 29 7b 0a 20 20 69 6e 74 20 6e 20 3d 20  *db){.  int n = 
4320: 30 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  0;.  Savepoint *
4330: 70 3b 0a 20 20 66 6f 72 28 70 3d 64 62 2d 3e 70  p;.  for(p=db->p
4340: 53 61 76 65 70 6f 69 6e 74 3b 20 70 3b 20 70 3d  Savepoint; p; p=
4350: 70 2d 3e 70 4e 65 78 74 29 20 6e 2b 2b 3b 0a 20  p->pNext) n++;. 
4360: 20 61 73 73 65 72 74 28 20 6e 3d 3d 28 64 62 2d   assert( n==(db-
4370: 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62  >nSavepoint + db
4380: 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
4390: 61 76 65 70 6f 69 6e 74 29 20 29 3b 0a 20 20 72  avepoint) );.  r
43a0: 65 74 75 72 6e 20 31 3b 0a 7d 0a 23 65 6e 64 69  eturn 1;.}.#endi
43b0: 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  f../*.** Return 
43c0: 74 68 65 20 72 65 67 69 73 74 65 72 20 6f 66 20  the register of 
43d0: 70 4f 70 2d 3e 70 32 20 61 66 74 65 72 20 66 69  pOp->p2 after fi
43e0: 72 73 74 20 70 72 65 70 61 72 69 6e 67 20 69 74  rst preparing it
43f0: 20 74 6f 20 62 65 0a 2a 2a 20 6f 76 65 72 77 72   to be.** overwr
4400: 69 74 74 65 6e 20 77 69 74 68 20 61 6e 20 69 6e  itten with an in
4410: 74 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2f 0a  teger value..*/.
4420: 73 74 61 74 69 63 20 53 51 4c 49 54 45 5f 4e 4f  static SQLITE_NO
4430: 49 4e 4c 49 4e 45 20 4d 65 6d 20 2a 6f 75 74 32  INLINE Mem *out2
4440: 50 72 65 72 65 6c 65 61 73 65 57 69 74 68 43 6c  PrereleaseWithCl
4450: 65 61 72 28 4d 65 6d 20 2a 70 4f 75 74 29 7b 0a  ear(Mem *pOut){.
4460: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
4470: 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
4480: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
4490: 45 4d 5f 49 6e 74 3b 0a 20 20 72 65 74 75 72 6e  EM_Int;.  return
44a0: 20 70 4f 75 74 3b 0a 7d 0a 73 74 61 74 69 63 20   pOut;.}.static 
44b0: 4d 65 6d 20 2a 6f 75 74 32 50 72 65 72 65 6c 65  Mem *out2Prerele
44c0: 61 73 65 28 56 64 62 65 20 2a 70 2c 20 56 64 62  ase(Vdbe *p, Vdb
44d0: 65 4f 70 20 2a 70 4f 70 29 7b 0a 20 20 4d 65 6d  eOp *pOp){.  Mem
44e0: 20 2a 70 4f 75 74 3b 0a 20 20 61 73 73 65 72 74   *pOut;.  assert
44f0: 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20  ( pOp->p2>0 );. 
4500: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
4510: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
4520: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
4530: 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pOut = &p->aMem[
4540: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 6d 65 6d 41  pOp->p2];.  memA
4550: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
4560: 70 4f 75 74 29 3b 0a 20 20 69 66 28 20 56 64 62  pOut);.  if( Vdb
4570: 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74  eMemDynamic(pOut
4580: 29 20 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54  ) ){ /*OPTIMIZAT
4590: 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20  ION-IF-FALSE*/. 
45a0: 20 20 20 72 65 74 75 72 6e 20 6f 75 74 32 50 72     return out2Pr
45b0: 65 72 65 6c 65 61 73 65 57 69 74 68 43 6c 65 61  ereleaseWithClea
45c0: 72 28 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65  r(pOut);.  }else
45d0: 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  {.    pOut->flag
45e0: 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20  s = MEM_Int;.   
45f0: 20 72 65 74 75 72 6e 20 70 4f 75 74 3b 0a 20 20   return pOut;.  
4600: 7d 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63  }.}.../*.** Exec
4610: 75 74 65 20 61 73 20 6d 75 63 68 20 6f 66 20 61  ute as much of a
4620: 20 56 44 42 45 20 70 72 6f 67 72 61 6d 20 61 73   VDBE program as
4630: 20 77 65 20 63 61 6e 2e 0a 2a 2a 20 54 68 69 73   we can..** This
4640: 20 69 73 20 74 68 65 20 63 6f 72 65 20 6f 66 20   is the core of 
4650: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 2e 20  sqlite3_step(). 
4660: 20 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33   .*/.int sqlite3
4670: 56 64 62 65 45 78 65 63 28 0a 20 20 56 64 62 65  VdbeExec(.  Vdbe
4680: 20 2a 70 20 20 20 20 20 20 20 20 20 20 20 20 20   *p             
4690: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44         /* The VD
46a0: 42 45 20 2a 2f 0a 29 7b 0a 20 20 4f 70 20 2a 61  BE */.){.  Op *a
46b0: 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 20 20 20 20  Op = p->aOp;    
46c0: 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66        /* Copy of
46d0: 20 70 2d 3e 61 4f 70 20 2a 2f 0a 20 20 4f 70 20   p->aOp */.  Op 
46e0: 2a 70 4f 70 20 3d 20 61 4f 70 3b 20 20 20 20 20  *pOp = aOp;     
46f0: 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65          /* Curre
4700: 6e 74 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a  nt operation */.
4710: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
4720: 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66  TE_DEBUG) || def
4730: 69 6e 65 64 28 56 44 42 45 5f 50 52 4f 46 49 4c  ined(VDBE_PROFIL
4740: 45 29 0a 20 20 4f 70 20 2a 70 4f 72 69 67 4f 70  E).  Op *pOrigOp
4750: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
4760: 2f 2a 20 56 61 6c 75 65 20 6f 66 20 70 4f 70 20  /* Value of pOp 
4770: 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68  at the top of th
4780: 65 20 6c 6f 6f 70 20 2a 2f 0a 23 65 6e 64 69 66  e loop */.#endif
4790: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
47a0: 45 42 55 47 0a 20 20 69 6e 74 20 6e 45 78 74 72  EBUG.  int nExtr
47b0: 61 44 65 6c 65 74 65 20 3d 20 30 3b 20 20 20 20  aDelete = 0;    
47c0: 20 20 2f 2a 20 56 65 72 69 66 69 65 73 20 46 4f    /* Verifies FO
47d0: 52 44 45 4c 45 54 45 20 61 6e 64 20 41 55 58 44  RDELETE and AUXD
47e0: 45 4c 45 54 45 20 66 6c 61 67 73 20 2a 2f 0a 23  ELETE flags */.#
47f0: 65 6e 64 69 66 0a 20 20 69 6e 74 20 72 63 20 3d  endif.  int rc =
4800: 20 53 51 4c 49 54 45 5f 4f 4b 3b 20 20 20 20 20   SQLITE_OK;     
4810: 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72     /* Value to r
4820: 65 74 75 72 6e 20 2a 2f 0a 20 20 73 71 6c 69 74  eturn */.  sqlit
4830: 65 33 20 2a 64 62 20 3d 20 70 2d 3e 64 62 3b 20  e3 *db = p->db; 
4840: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74        /* The dat
4850: 61 62 61 73 65 20 2a 2f 0a 20 20 75 38 20 72 65  abase */.  u8 re
4860: 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74  setSchemaOnFault
4870: 20 3d 20 30 3b 20 2f 2a 20 52 65 73 65 74 20 73   = 0; /* Reset s
4880: 63 68 65 6d 61 20 61 66 74 65 72 20 61 6e 20 65  chema after an e
4890: 72 72 6f 72 20 69 66 20 70 6f 73 69 74 69 76 65  rror if positive
48a0: 20 2a 2f 0a 20 20 75 38 20 65 6e 63 6f 64 69 6e   */.  u8 encodin
48b0: 67 20 3d 20 45 4e 43 28 64 62 29 3b 20 20 20 20  g = ENC(db);    
48c0: 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65   /* The database
48d0: 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69   encoding */.  i
48e0: 6e 74 20 69 43 6f 6d 70 61 72 65 20 3d 20 30 3b  nt iCompare = 0;
48f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73            /* Res
4900: 75 6c 74 20 6f 66 20 6c 61 73 74 20 63 6f 6d 70  ult of last comp
4910: 61 72 69 73 6f 6e 20 2a 2f 0a 20 20 75 6e 73 69  arison */.  unsi
4920: 67 6e 65 64 20 6e 56 6d 53 74 65 70 20 3d 20 30  gned nVmStep = 0
4930: 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ;      /* Number
4940: 20 6f 66 20 76 69 72 74 75 61 6c 20 6d 61 63 68   of virtual mach
4950: 69 6e 65 20 73 74 65 70 73 20 2a 2f 0a 23 69 66  ine steps */.#if
4960: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
4970: 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41  _PROGRESS_CALLBA
4980: 43 4b 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 50  CK.  unsigned nP
4990: 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 30  rogressLimit = 0
49a0: 3b 2f 2a 20 49 6e 76 6f 6b 65 20 78 50 72 6f 67  ;/* Invoke xProg
49b0: 72 65 73 73 28 29 20 77 68 65 6e 20 6e 56 6d 53  ress() when nVmS
49c0: 74 65 70 20 72 65 61 63 68 65 73 20 74 68 69 73  tep reaches this
49d0: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 4d 65 6d   */.#endif.  Mem
49e0: 20 2a 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d   *aMem = p->aMem
49f0: 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20  ;       /* Copy 
4a00: 6f 66 20 70 2d 3e 61 4d 65 6d 20 2a 2f 0a 20 20  of p->aMem */.  
4a10: 4d 65 6d 20 2a 70 49 6e 31 20 3d 20 30 3b 20 20  Mem *pIn1 = 0;  
4a20: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73             /* 1s
4a30: 74 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20  t input operand 
4a40: 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 32 20 3d  */.  Mem *pIn2 =
4a50: 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   0;             
4a60: 2f 2a 20 32 6e 64 20 69 6e 70 75 74 20 6f 70 65  /* 2nd input ope
4a70: 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  rand */.  Mem *p
4a80: 49 6e 33 20 3d 20 30 3b 20 20 20 20 20 20 20 20  In3 = 0;        
4a90: 20 20 20 20 20 2f 2a 20 33 72 64 20 69 6e 70 75       /* 3rd inpu
4aa0: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d  t operand */.  M
4ab0: 65 6d 20 2a 70 4f 75 74 20 3d 20 30 3b 20 20 20  em *pOut = 0;   
4ac0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 75 74            /* Out
4ad0: 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  put operand */. 
4ae0: 20 69 6e 74 20 2a 61 50 65 72 6d 75 74 65 20 3d   int *aPermute =
4af0: 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50   0;         /* P
4b00: 65 72 6d 75 74 61 74 69 6f 6e 20 6f 66 20 63 6f  ermutation of co
4b10: 6c 75 6d 6e 73 20 66 6f 72 20 4f 50 5f 43 6f 6d  lumns for OP_Com
4b20: 70 61 72 65 20 2a 2f 0a 20 20 69 36 34 20 6c 61  pare */.  i64 la
4b30: 73 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61  stRowid = db->la
4b40: 73 74 52 6f 77 69 64 3b 20 20 2f 2a 20 53 61 76  stRowid;  /* Sav
4b50: 65 64 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  ed value of the 
4b60: 6c 61 73 74 20 69 6e 73 65 72 74 20 52 4f 57 49  last insert ROWI
4b70: 44 20 2a 2f 0a 23 69 66 64 65 66 20 56 44 42 45  D */.#ifdef VDBE
4b80: 5f 50 52 4f 46 49 4c 45 0a 20 20 75 36 34 20 73  _PROFILE.  u64 s
4b90: 74 61 72 74 3b 20 20 20 20 20 20 20 20 20 20 20  tart;           
4ba0: 20 20 20 20 20 20 2f 2a 20 43 50 55 20 63 6c 6f        /* CPU clo
4bb0: 63 6b 20 63 6f 75 6e 74 20 61 74 20 73 74 61 72  ck count at star
4bc0: 74 20 6f 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 23  t of opcode */.#
4bd0: 65 6e 64 69 66 0a 20 20 2f 2a 2a 2a 20 49 4e 53  endif.  /*** INS
4be0: 45 52 54 20 53 54 41 43 4b 20 55 4e 49 4f 4e 20  ERT STACK UNION 
4bf0: 48 45 52 45 20 2a 2a 2a 2f 0a 0a 20 20 61 73 73  HERE ***/..  ass
4c00: 65 72 74 28 20 70 2d 3e 6d 61 67 69 63 3d 3d 56  ert( p->magic==V
4c10: 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20 29 3b  DBE_MAGIC_RUN );
4c20: 20 20 2f 2a 20 73 71 6c 69 74 65 33 5f 73 74 65    /* sqlite3_ste
4c30: 70 28 29 20 76 65 72 69 66 69 65 73 20 74 68 69  p() verifies thi
4c40: 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64  s */.  sqlite3Vd
4c50: 62 65 45 6e 74 65 72 28 70 29 3b 0a 20 20 69 66  beEnter(p);.  if
4c60: 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f  ( p->rc==SQLITE_
4c70: 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 2f 2a 20  NOMEM ){.    /* 
4c80: 54 68 69 73 20 68 61 70 70 65 6e 73 20 69 66 20  This happens if 
4c90: 61 20 6d 61 6c 6c 6f 63 28 29 20 69 6e 73 69 64  a malloc() insid
4ca0: 65 20 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69  e a call to sqli
4cb0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28  te3_column_text(
4cc0: 29 20 6f 72 0a 20 20 20 20 2a 2a 20 73 71 6c 69  ) or.    ** sqli
4cd0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31  te3_column_text1
4ce0: 36 28 29 20 66 61 69 6c 65 64 2e 20 20 2a 2f 0a  6() failed.  */.
4cf0: 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
4d00: 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70  .  }.  assert( p
4d10: 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ->rc==SQLITE_OK 
4d20: 7c 7c 20 28 70 2d 3e 72 63 26 30 78 66 66 29 3d  || (p->rc&0xff)=
4d30: 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 3b 0a  =SQLITE_BUSY );.
4d40: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73    assert( p->bIs
4d50: 52 65 61 64 65 72 20 7c 7c 20 70 2d 3e 72 65 61  Reader || p->rea
4d60: 64 4f 6e 6c 79 21 3d 30 20 29 3b 0a 20 20 70 2d  dOnly!=0 );.  p-
4d70: 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b  >rc = SQLITE_OK;
4d80: 0a 20 20 70 2d 3e 69 43 75 72 72 65 6e 74 54 69  .  p->iCurrentTi
4d90: 6d 65 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74  me = 0;.  assert
4da0: 28 20 70 2d 3e 65 78 70 6c 61 69 6e 3d 3d 30 20  ( p->explain==0 
4db0: 29 3b 0a 20 20 70 2d 3e 70 52 65 73 75 6c 74 53  );.  p->pResultS
4dc0: 65 74 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 62 75  et = 0;.  db->bu
4dd0: 73 79 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79 20  syHandler.nBusy 
4de0: 3d 20 30 3b 0a 20 20 69 66 28 20 64 62 2d 3e 75  = 0;.  if( db->u
4df0: 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 20  1.isInterrupted 
4e00: 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
4e10: 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20  _to_interrupt;. 
4e20: 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72   sqlite3VdbeIOTr
4e30: 61 63 65 53 71 6c 28 70 29 3b 0a 23 69 66 6e 64  aceSql(p);.#ifnd
4e40: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
4e50: 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
4e60: 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67  .  if( db->xProg
4e70: 72 65 73 73 20 29 7b 0a 20 20 20 20 75 33 32 20  ress ){.    u32 
4e80: 69 50 72 69 6f 72 20 3d 20 70 2d 3e 61 43 6f 75  iPrior = p->aCou
4e90: 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54  nter[SQLITE_STMT
4ea0: 53 54 41 54 55 53 5f 56 4d 5f 53 54 45 50 5d 3b  STATUS_VM_STEP];
4eb0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 30 20 3c  .    assert( 0 <
4ec0: 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70   db->nProgressOp
4ed0: 73 20 29 3b 0a 20 20 20 20 6e 50 72 6f 67 72 65  s );.    nProgre
4ee0: 73 73 4c 69 6d 69 74 20 3d 20 64 62 2d 3e 6e 50  ssLimit = db->nP
4ef0: 72 6f 67 72 65 73 73 4f 70 73 20 2d 20 28 69 50  rogressOps - (iP
4f00: 72 69 6f 72 20 25 20 64 62 2d 3e 6e 50 72 6f 67  rior % db->nProg
4f10: 72 65 73 73 4f 70 73 29 3b 0a 20 20 7d 0a 23 65  ressOps);.  }.#e
4f20: 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
4f30: 54 45 5f 44 45 42 55 47 0a 20 20 73 71 6c 69 74  TE_DEBUG.  sqlit
4f40: 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c  e3BeginBenignMal
4f50: 6c 6f 63 28 29 3b 0a 20 20 69 66 28 20 70 2d 3e  loc();.  if( p->
4f60: 70 63 3d 3d 30 0a 20 20 20 26 26 20 28 70 2d 3e  pc==0.   && (p->
4f70: 64 62 2d 3e 66 6c 61 67 73 20 26 20 28 53 51 4c  db->flags & (SQL
4f80: 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 7c  ITE_VdbeListing|
4f90: 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50 7c 53  SQLITE_VdbeEQP|S
4fa0: 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 29  QLITE_VdbeTrace)
4fb0: 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 69 6e  )!=0.  ){.    in
4fc0: 74 20 69 3b 0a 20 20 20 20 69 6e 74 20 6f 6e 63  t i;.    int onc
4fd0: 65 20 3d 20 31 3b 0a 20 20 20 20 73 71 6c 69 74  e = 1;.    sqlit
4fe0: 65 33 56 64 62 65 50 72 69 6e 74 53 71 6c 28 70  e3VdbePrintSql(p
4ff0: 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62  );.    if( p->db
5000: 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
5010: 5f 56 64 62 65 4c 69 73 74 69 6e 67 20 29 7b 0a  _VdbeListing ){.
5020: 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 56 44        printf("VD
5030: 42 45 20 50 72 6f 67 72 61 6d 20 4c 69 73 74 69  BE Program Listi
5040: 6e 67 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20 66  ng:\n");.      f
5050: 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70  or(i=0; i<p->nOp
5060: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; i++){.        
5070: 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74  sqlite3VdbePrint
5080: 4f 70 28 73 74 64 6f 75 74 2c 20 69 2c 20 26 61  Op(stdout, i, &a
5090: 4f 70 5b 69 5d 29 3b 0a 20 20 20 20 20 20 7d 0a  Op[i]);.      }.
50a0: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 2d      }.    if( p-
50b0: 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c  >db->flags & SQL
50c0: 49 54 45 5f 56 64 62 65 45 51 50 20 29 7b 0a 20  ITE_VdbeEQP ){. 
50d0: 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c       for(i=0; i<
50e0: 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20  p->nOp; i++){.  
50f0: 20 20 20 20 20 20 69 66 28 20 61 4f 70 5b 69 5d        if( aOp[i]
5100: 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c  .opcode==OP_Expl
5110: 61 69 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ain ){.         
5120: 20 69 66 28 20 6f 6e 63 65 20 29 20 70 72 69 6e   if( once ) prin
5130: 74 66 28 22 56 44 42 45 20 51 75 65 72 79 20 50  tf("VDBE Query P
5140: 6c 61 6e 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20  lan:\n");.      
5150: 20 20 20 20 70 72 69 6e 74 66 28 22 25 73 5c 6e      printf("%s\n
5160: 22 2c 20 61 4f 70 5b 69 5d 2e 70 34 2e 7a 29 3b  ", aOp[i].p4.z);
5170: 0a 20 20 20 20 20 20 20 20 20 20 6f 6e 63 65 20  .          once 
5180: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  = 0;.        }. 
5190: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
51a0: 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67   if( p->db->flag
51b0: 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 54  s & SQLITE_VdbeT
51c0: 72 61 63 65 20 29 20 20 70 72 69 6e 74 66 28 22  race )  printf("
51d0: 56 44 42 45 20 54 72 61 63 65 3a 5c 6e 22 29 3b  VDBE Trace:\n");
51e0: 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 45 6e  .  }.  sqlite3En
51f0: 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b  dBenignMalloc();
5200: 0a 23 65 6e 64 69 66 0a 20 20 66 6f 72 28 70 4f  .#endif.  for(pO
5210: 70 3d 26 61 4f 70 5b 70 2d 3e 70 63 5d 3b 20 31  p=&aOp[p->pc]; 1
5220: 3b 20 70 4f 70 2b 2b 29 7b 0a 20 20 20 20 2f 2a  ; pOp++){.    /*
5230: 20 45 72 72 6f 72 73 20 61 72 65 20 64 65 74 65   Errors are dete
5240: 63 74 65 64 20 62 79 20 69 6e 64 69 76 69 64 75  cted by individu
5250: 61 6c 20 6f 70 63 6f 64 65 73 2c 20 77 69 74 68  al opcodes, with
5260: 20 61 6e 20 69 6d 6d 65 64 69 61 74 65 0a 20 20   an immediate.  
5270: 20 20 2a 2a 20 6a 75 6d 70 73 20 74 6f 20 61 62    ** jumps to ab
5280: 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
5290: 2e 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28  . */.    assert(
52a0: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
52b0: 3b 0a 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ;..    assert( p
52c0: 4f 70 3e 3d 61 4f 70 20 26 26 20 70 4f 70 3c 26  Op>=aOp && pOp<&
52d0: 61 4f 70 5b 70 2d 3e 6e 4f 70 5d 29 3b 0a 23 69  aOp[p->nOp]);.#i
52e0: 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c  fdef VDBE_PROFIL
52f0: 45 0a 20 20 20 20 73 74 61 72 74 20 3d 20 73 71  E.    start = sq
5300: 6c 69 74 65 33 48 77 74 69 6d 65 28 29 3b 0a 23  lite3Hwtime();.#
5310: 65 6e 64 69 66 0a 20 20 20 20 6e 56 6d 53 74 65  endif.    nVmSte
5320: 70 2b 2b 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  p++;.#ifdef SQLI
5330: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53  TE_ENABLE_STMT_S
5340: 43 41 4e 53 54 41 54 55 53 0a 20 20 20 20 69 66  CANSTATUS.    if
5350: 28 20 70 2d 3e 61 6e 45 78 65 63 20 29 20 70 2d  ( p->anExec ) p-
5360: 3e 61 6e 45 78 65 63 5b 28 69 6e 74 29 28 70 4f  >anExec[(int)(pO
5370: 70 2d 61 4f 70 29 5d 2b 2b 3b 0a 23 65 6e 64 69  p-aOp)]++;.#endi
5380: 66 0a 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61  f..    /* Only a
5390: 6c 6c 6f 77 20 74 72 61 63 69 6e 67 20 69 66 20  llow tracing if 
53a0: 53 51 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20  SQLITE_DEBUG is 
53b0: 64 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a  defined..    */.
53c0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
53d0: 42 55 47 0a 20 20 20 20 69 66 28 20 64 62 2d 3e  BUG.    if( db->
53e0: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56  flags & SQLITE_V
53f0: 64 62 65 54 72 61 63 65 20 29 7b 0a 20 20 20 20  dbeTrace ){.    
5400: 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 69    sqlite3VdbePri
5410: 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20 28 69 6e  ntOp(stdout, (in
5420: 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 2c 20 70  t)(pOp - aOp), p
5430: 4f 70 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69  Op);.    }.#endi
5440: 66 0a 20 20 20 20 20 20 0a 0a 20 20 20 20 2f 2a  f.      ..    /*
5450: 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66   Check to see if
5460: 20 77 65 20 6e 65 65 64 20 74 6f 20 73 69 6d 75   we need to simu
5470: 6c 61 74 65 20 61 6e 20 69 6e 74 65 72 72 75 70  late an interrup
5480: 74 2e 20 20 54 68 69 73 20 6f 6e 6c 79 20 68 61  t.  This only ha
5490: 70 70 65 6e 73 0a 20 20 20 20 2a 2a 20 69 66 20  ppens.    ** if 
54a0: 77 65 20 68 61 76 65 20 61 20 73 70 65 63 69 61  we have a specia
54b0: 6c 20 74 65 73 74 20 62 75 69 6c 64 2e 0a 20 20  l test build..  
54c0: 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49    */.#ifdef SQLI
54d0: 54 45 5f 54 45 53 54 0a 20 20 20 20 69 66 28 20  TE_TEST.    if( 
54e0: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
54f0: 74 5f 63 6f 75 6e 74 3e 30 20 29 7b 0a 20 20 20  t_count>0 ){.   
5500: 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72     sqlite3_inter
5510: 72 75 70 74 5f 63 6f 75 6e 74 2d 2d 3b 0a 20 20  rupt_count--;.  
5520: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f      if( sqlite3_
5530: 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 3d  interrupt_count=
5540: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  =0 ){.        sq
5550: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28  lite3_interrupt(
5560: 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  db);.      }.   
5570: 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f   }.#endif..    /
5580: 2a 20 53 61 6e 69 74 79 20 63 68 65 63 6b 69 6e  * Sanity checkin
5590: 67 20 6f 6e 20 6f 74 68 65 72 20 6f 70 65 72 61  g on other opera
55a0: 6e 64 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  nds */.#ifdef SQ
55b0: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 7b  LITE_DEBUG.    {
55c0: 0a 20 20 20 20 20 20 75 38 20 6f 70 50 72 6f 70  .      u8 opProp
55d0: 65 72 74 79 20 3d 20 73 71 6c 69 74 65 33 4f 70  erty = sqlite3Op
55e0: 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 70 4f 70  codeProperty[pOp
55f0: 2d 3e 6f 70 63 6f 64 65 5d 3b 0a 20 20 20 20 20  ->opcode];.     
5600: 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72 74 79   if( (opProperty
5610: 20 26 20 4f 50 46 4c 47 5f 49 4e 31 29 21 3d 30   & OPFLG_IN1)!=0
5620: 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
5630: 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b  rt( pOp->p1>0 );
5640: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
5650: 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d   pOp->p1<=(p->nM
5660: 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
5670: 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  r) );.        as
5680: 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
5690: 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29  (&aMem[pOp->p1])
56a0: 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
56b0: 72 74 28 20 73 71 6c 69 74 65 33 56 64 62 65 43  rt( sqlite3VdbeC
56c0: 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74  heckMemInvariant
56d0: 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  s(&aMem[pOp->p1]
56e0: 29 20 29 3b 0a 20 20 20 20 20 20 20 20 52 45 47  ) );.        REG
56f0: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
5700: 3e 70 31 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  >p1, &aMem[pOp->
5710: 70 31 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  p1]);.      }.  
5720: 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65      if( (opPrope
5730: 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 32 29  rty & OPFLG_IN2)
5740: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61  !=0 ){.        a
5750: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30  ssert( pOp->p2>0
5760: 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
5770: 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d  rt( pOp->p2<=(p-
5780: 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
5790: 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20  rsor) );.       
57a0: 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
57b0: 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  lid(&aMem[pOp->p
57c0: 32 5d 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61  2]) );.        a
57d0: 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 56 64  ssert( sqlite3Vd
57e0: 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69  beCheckMemInvari
57f0: 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ants(&aMem[pOp->
5800: 70 32 5d 29 20 29 3b 0a 20 20 20 20 20 20 20 20  p2]) );.        
5810: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
5820: 4f 70 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b 70 4f  Op->p2, &aMem[pO
5830: 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 20 20 7d  p->p2]);.      }
5840: 0a 20 20 20 20 20 20 69 66 28 20 28 6f 70 50 72  .      if( (opPr
5850: 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 49  operty & OPFLG_I
5860: 4e 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  N3)!=0 ){.      
5870: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
5880: 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61  3>0 );.        a
5890: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d  ssert( pOp->p3<=
58a0: 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
58b0: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20  nCursor) );.    
58c0: 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
58d0: 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70  sValid(&aMem[pOp
58e0: 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20  ->p3]) );.      
58f0: 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
5900: 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76  3VdbeCheckMemInv
5910: 61 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f  ariants(&aMem[pO
5920: 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20  p->p3]) );.     
5930: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
5940: 45 28 70 4f 70 2d 3e 70 33 2c 20 26 61 4d 65 6d  E(pOp->p3, &aMem
5950: 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20  [pOp->p3]);.    
5960: 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28 6f    }.      if( (o
5970: 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c  pProperty & OPFL
5980: 47 5f 4f 55 54 32 29 21 3d 30 20 29 7b 0a 20 20  G_OUT2)!=0 ){.  
5990: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
59a0: 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20  p->p2>0 );.     
59b0: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
59c0: 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  p2<=(p->nMem+1 -
59d0: 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a   p->nCursor) );.
59e0: 20 20 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74          memAbout
59f0: 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61 4d 65  ToChange(p, &aMe
5a00: 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20  m[pOp->p2]);.   
5a10: 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28     }.      if( (
5a20: 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46  opProperty & OPF
5a30: 4c 47 5f 4f 55 54 33 29 21 3d 30 20 29 7b 0a 20  LG_OUT3)!=0 ){. 
5a40: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
5a50: 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20  Op->p3>0 );.    
5a60: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
5a70: 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  >p3<=(p->nMem+1 
5a80: 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  - p->nCursor) );
5a90: 0a 20 20 20 20 20 20 20 20 6d 65 6d 41 62 6f 75  .        memAbou
5aa0: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61 4d  tToChange(p, &aM
5ab0: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20  em[pOp->p3]);.  
5ac0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64      }.    }.#end
5ad0: 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  if.#if defined(S
5ae0: 51 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20  QLITE_DEBUG) || 
5af0: 64 65 66 69 6e 65 64 28 56 44 42 45 5f 50 52 4f  defined(VDBE_PRO
5b00: 46 49 4c 45 29 0a 20 20 20 20 70 4f 72 69 67 4f  FILE).    pOrigO
5b10: 70 20 3d 20 70 4f 70 3b 0a 23 65 6e 64 69 66 0a  p = pOp;.#endif.
5b20: 20 20 0a 20 20 20 20 73 77 69 74 63 68 28 20 70    .    switch( p
5b30: 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 0a 2f  Op->opcode ){../
5b40: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5b50: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5b60: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5b70: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5b80: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a  *************.**
5b90: 20 57 68 61 74 20 66 6f 6c 6c 6f 77 73 20 69 73   What follows is
5ba0: 20 61 20 6d 61 73 73 69 76 65 20 73 77 69 74 63   a massive switc
5bb0: 68 20 73 74 61 74 65 6d 65 6e 74 20 77 68 65 72  h statement wher
5bc0: 65 20 65 61 63 68 20 63 61 73 65 20 69 6d 70 6c  e each case impl
5bd0: 65 6d 65 6e 74 73 20 61 0a 2a 2a 20 73 65 70 61  ements a.** sepa
5be0: 72 61 74 65 20 69 6e 73 74 72 75 63 74 69 6f 6e  rate instruction
5bf0: 20 69 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20   in the virtual 
5c00: 6d 61 63 68 69 6e 65 2e 20 20 49 66 20 77 65 20  machine.  If we 
5c10: 66 6f 6c 6c 6f 77 20 74 68 65 20 75 73 75 61 6c  follow the usual
5c20: 0a 2a 2a 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20  .** indentation 
5c30: 63 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20 65 61 63  conventions, eac
5c40: 68 20 63 61 73 65 20 73 68 6f 75 6c 64 20 62 65  h case should be
5c50: 20 69 6e 64 65 6e 74 65 64 20 62 79 20 36 20 73   indented by 6 s
5c60: 70 61 63 65 73 2e 20 20 42 75 74 0a 2a 2a 20 74  paces.  But.** t
5c70: 68 61 74 20 69 73 20 61 20 6c 6f 74 20 6f 66 20  hat is a lot of 
5c80: 77 61 73 74 65 64 20 73 70 61 63 65 20 6f 6e 20  wasted space on 
5c90: 74 68 65 20 6c 65 66 74 20 6d 61 72 67 69 6e 2e  the left margin.
5ca0: 20 20 53 6f 20 74 68 65 20 63 6f 64 65 20 77 69    So the code wi
5cb0: 74 68 69 6e 0a 2a 2a 20 74 68 65 20 73 77 69 74  thin.** the swit
5cc0: 63 68 20 73 74 61 74 65 6d 65 6e 74 20 77 69 6c  ch statement wil
5cd0: 6c 20 62 72 65 61 6b 20 77 69 74 68 20 63 6f 6e  l break with con
5ce0: 76 65 6e 74 69 6f 6e 20 61 6e 64 20 62 65 20 66  vention and be f
5cf0: 6c 75 73 68 2d 6c 65 66 74 2e 20 41 6e 6f 74 68  lush-left. Anoth
5d00: 65 72 0a 2a 2a 20 62 69 67 20 63 6f 6d 6d 65 6e  er.** big commen
5d10: 74 20 28 73 69 6d 69 6c 61 72 20 74 6f 20 74 68  t (similar to th
5d20: 69 73 20 6f 6e 65 29 20 77 69 6c 6c 20 6d 61 72  is one) will mar
5d30: 6b 20 74 68 65 20 70 6f 69 6e 74 20 69 6e 20 74  k the point in t
5d40: 68 65 20 63 6f 64 65 20 77 68 65 72 65 0a 2a 2a  he code where.**
5d50: 20 77 65 20 74 72 61 6e 73 69 74 69 6f 6e 20 62   we transition b
5d60: 61 63 6b 20 74 6f 20 6e 6f 72 6d 61 6c 20 69 6e  ack to normal in
5d70: 64 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  dentation..**.**
5d80: 20 54 68 65 20 66 6f 72 6d 61 74 74 69 6e 67 20   The formatting 
5d90: 6f 66 20 65 61 63 68 20 63 61 73 65 20 69 73 20  of each case is 
5da0: 69 6d 70 6f 72 74 61 6e 74 2e 20 20 54 68 65 20  important.  The 
5db0: 6d 61 6b 65 66 69 6c 65 20 66 6f 72 20 53 51 4c  makefile for SQL
5dc0: 69 74 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 73  ite.** generates
5dd0: 20 74 77 6f 20 43 20 66 69 6c 65 73 20 22 6f 70   two C files "op
5de0: 63 6f 64 65 73 2e 68 22 20 61 6e 64 20 22 6f 70  codes.h" and "op
5df0: 63 6f 64 65 73 2e 63 22 20 62 79 20 73 63 61 6e  codes.c" by scan
5e00: 6e 69 6e 67 20 74 68 69 73 0a 2a 2a 20 66 69 6c  ning this.** fil
5e10: 65 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 6c 69  e looking for li
5e20: 6e 65 73 20 74 68 61 74 20 62 65 67 69 6e 20 77  nes that begin w
5e30: 69 74 68 20 22 63 61 73 65 20 4f 50 5f 22 2e 20  ith "case OP_". 
5e40: 20 54 68 65 20 6f 70 63 6f 64 65 73 2e 68 20 66   The opcodes.h f
5e50: 69 6c 65 73 0a 2a 2a 20 77 69 6c 6c 20 62 65 20  iles.** will be 
5e60: 66 69 6c 6c 65 64 20 77 69 74 68 20 23 64 65 66  filled with #def
5e70: 69 6e 65 73 20 74 68 61 74 20 67 69 76 65 20 75  ines that give u
5e80: 6e 69 71 75 65 20 69 6e 74 65 67 65 72 20 76 61  nique integer va
5e90: 6c 75 65 73 20 74 6f 20 65 61 63 68 0a 2a 2a 20  lues to each.** 
5ea0: 6f 70 63 6f 64 65 20 61 6e 64 20 74 68 65 20 6f  opcode and the o
5eb0: 70 63 6f 64 65 73 2e 63 20 66 69 6c 65 20 69 73  pcodes.c file is
5ec0: 20 66 69 6c 6c 65 64 20 77 69 74 68 20 61 6e 20   filled with an 
5ed0: 61 72 72 61 79 20 6f 66 20 73 74 72 69 6e 67 73  array of strings
5ee0: 20 77 68 65 72 65 0a 2a 2a 20 65 61 63 68 20 73   where.** each s
5ef0: 74 72 69 6e 67 20 69 73 20 74 68 65 20 73 79 6d  tring is the sym
5f00: 62 6f 6c 69 63 20 6e 61 6d 65 20 66 6f 72 20 74  bolic name for t
5f10: 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
5f20: 20 6f 70 63 6f 64 65 2e 20 20 49 66 20 74 68 65   opcode.  If the
5f30: 0a 2a 2a 20 63 61 73 65 20 73 74 61 74 65 6d 65  .** case stateme
5f40: 6e 74 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62  nt is followed b
5f50: 79 20 61 20 63 6f 6d 6d 65 6e 74 20 6f 66 20 74  y a comment of t
5f60: 68 65 20 66 6f 72 6d 20 22 2f 23 20 73 61 6d 65  he form "/# same
5f70: 20 61 73 20 2e 2e 2e 20 23 2f 22 0a 2a 2a 20 74   as ... #/".** t
5f80: 68 61 74 20 63 6f 6d 6d 65 6e 74 20 69 73 20 75  hat comment is u
5f90: 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  sed to determine
5fa0: 20 74 68 65 20 70 61 72 74 69 63 75 6c 61 72 20   the particular 
5fb0: 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 70 63  value of the opc
5fc0: 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72  ode..**.** Other
5fd0: 20 6b 65 79 77 6f 72 64 73 20 69 6e 20 74 68 65   keywords in the
5fe0: 20 63 6f 6d 6d 65 6e 74 20 74 68 61 74 20 66 6f   comment that fo
5ff0: 6c 6c 6f 77 73 20 65 61 63 68 20 63 61 73 65 20  llows each case 
6000: 61 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 63  are used to.** c
6010: 6f 6e 73 74 72 75 63 74 20 74 68 65 20 4f 50 46  onstruct the OPF
6020: 4c 47 5f 49 4e 49 54 49 41 4c 49 5a 45 52 20 76  LG_INITIALIZER v
6030: 61 6c 75 65 20 74 68 61 74 20 69 6e 69 74 69 61  alue that initia
6040: 6c 69 7a 65 73 20 6f 70 63 6f 64 65 50 72 6f 70  lizes opcodeProp
6050: 65 72 74 79 5b 5d 2e 0a 2a 2a 20 4b 65 79 77 6f  erty[]..** Keywo
6060: 72 64 73 20 69 6e 63 6c 75 64 65 3a 20 69 6e 31  rds include: in1
6070: 2c 20 69 6e 32 2c 20 69 6e 33 2c 20 6f 75 74 32  , in2, in3, out2
6080: 2c 20 6f 75 74 33 2e 20 20 53 65 65 0a 2a 2a 20  , out3.  See.** 
6090: 74 68 65 20 6d 6b 6f 70 63 6f 64 65 68 2e 61 77  the mkopcodeh.aw
60a0: 6b 20 73 63 72 69 70 74 20 66 6f 72 20 61 64 64  k script for add
60b0: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
60c0: 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75 6d  ion..**.** Docum
60d0: 65 6e 74 61 74 69 6f 6e 20 61 62 6f 75 74 20 56  entation about V
60e0: 44 42 45 20 6f 70 63 6f 64 65 73 20 69 73 20 67  DBE opcodes is g
60f0: 65 6e 65 72 61 74 65 64 20 62 79 20 73 63 61 6e  enerated by scan
6100: 6e 69 6e 67 20 74 68 69 73 20 66 69 6c 65 0a 2a  ning this file.*
6110: 2a 20 66 6f 72 20 6c 69 6e 65 73 20 6f 66 20 74  * for lines of t
6120: 68 61 74 20 63 6f 6e 74 61 69 6e 20 22 4f 70 63  hat contain "Opc
6130: 6f 64 65 3a 22 2e 20 20 54 68 61 74 20 6c 69 6e  ode:".  That lin
6140: 65 20 61 6e 64 20 61 6c 6c 20 73 75 62 73 65 71  e and all subseq
6150: 75 65 6e 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 20  uent.** comment 
6160: 6c 69 6e 65 73 20 61 72 65 20 75 73 65 64 20 69  lines are used i
6170: 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e  n the generation
6180: 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 68   of the opcode.h
6190: 74 6d 6c 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  tml documentatio
61a0: 6e 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a  n.** file..**.**
61b0: 20 53 55 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a 20   SUMMARY:.**.** 
61c0: 20 20 20 20 46 6f 72 6d 61 74 74 69 6e 67 20 69      Formatting i
61d0: 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 73  s important to s
61e0: 63 72 69 70 74 73 20 74 68 61 74 20 73 63 61 6e  cripts that scan
61f0: 20 74 68 69 73 20 66 69 6c 65 2e 0a 2a 2a 20 20   this file..**  
6200: 20 20 20 44 6f 20 6e 6f 74 20 64 65 76 69 61 74     Do not deviat
6210: 65 20 66 72 6f 6d 20 74 68 65 20 66 6f 72 6d 61  e from the forma
6220: 74 74 69 6e 67 20 73 74 79 6c 65 20 63 75 72 72  tting style curr
6230: 65 6e 74 6c 79 20 69 6e 20 75 73 65 2e 0a 2a 2a  ently in use..**
6240: 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .***************
6250: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6260: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6270: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6280: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
6290: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 74  ./* Opcode:  Got
62a0: 6f 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a  o * P2 * * *.**.
62b0: 2a 2a 20 41 6e 20 75 6e 63 6f 6e 64 69 74 69 6f  ** An unconditio
62c0: 6e 61 6c 20 6a 75 6d 70 20 74 6f 20 61 64 64 72  nal jump to addr
62d0: 65 73 73 20 50 32 2e 0a 2a 2a 20 54 68 65 20 6e  ess P2..** The n
62e0: 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ext instruction 
62f0: 65 78 65 63 75 74 65 64 20 77 69 6c 6c 20 62 65  executed will be
6300: 20 0a 2a 2a 20 74 68 65 20 6f 6e 65 20 61 74 20   .** the one at 
6310: 69 6e 64 65 78 20 50 32 20 66 72 6f 6d 20 74 68  index P2 from th
6320: 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 2a  e beginning of.*
6330: 2a 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a  * the program..*
6340: 2a 0a 2a 2a 20 54 68 65 20 50 31 20 70 61 72 61  *.** The P1 para
6350: 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 61 63 74  meter is not act
6360: 75 61 6c 6c 79 20 75 73 65 64 20 62 79 20 74 68  ually used by th
6370: 69 73 20 6f 70 63 6f 64 65 2e 20 20 48 6f 77 65  is opcode.  Howe
6380: 76 65 72 2c 20 69 74 0a 2a 2a 20 69 73 20 73 6f  ver, it.** is so
6390: 6d 65 74 69 6d 65 73 20 73 65 74 20 74 6f 20 31  metimes set to 1
63a0: 20 69 6e 73 74 65 61 64 20 6f 66 20 30 20 61 73   instead of 0 as
63b0: 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 63   a hint to the c
63c0: 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 73 68 65 6c  ommand-line shel
63d0: 6c 0a 2a 2a 20 74 68 61 74 20 74 68 69 73 20 47  l.** that this G
63e0: 6f 74 6f 20 69 73 20 74 68 65 20 62 6f 74 74 6f  oto is the botto
63f0: 6d 20 6f 66 20 61 20 6c 6f 6f 70 20 61 6e 64 20  m of a loop and 
6400: 74 68 61 74 20 74 68 65 20 6c 69 6e 65 73 20 66  that the lines f
6410: 72 6f 6d 20 50 32 20 64 6f 77 6e 0a 2a 2a 20 74  rom P2 down.** t
6420: 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20 6c 69  o the current li
6430: 6e 65 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 64  ne should be ind
6440: 65 6e 74 65 64 20 66 6f 72 20 45 58 50 4c 41 49  ented for EXPLAI
6450: 4e 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73  N output..*/.cas
6460: 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b 20 20 20 20  e OP_Goto: {    
6470: 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
6480: 20 2a 2f 0a 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61   */.jump_to_p2_a
6490: 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74  nd_check_for_int
64a0: 65 72 72 75 70 74 3a 0a 20 20 70 4f 70 20 3d 20  errupt:.  pOp = 
64b0: 26 61 4f 70 5b 70 4f 70 2d 3e 70 32 20 2d 20 31  &aOp[pOp->p2 - 1
64c0: 5d 3b 0a 0a 20 20 2f 2a 20 4f 70 63 6f 64 65 73  ];..  /* Opcodes
64d0: 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61   that are used a
64e0: 73 20 74 68 65 20 62 6f 74 74 6f 6d 20 6f 66 20  s the bottom of 
64f0: 61 20 6c 6f 6f 70 20 28 4f 50 5f 4e 65 78 74 2c  a loop (OP_Next,
6500: 20 4f 50 5f 50 72 65 76 2c 0a 20 20 2a 2a 20 4f   OP_Prev,.  ** O
6510: 50 5f 56 4e 65 78 74 2c 20 4f 50 5f 52 6f 77 53  P_VNext, OP_RowS
6520: 65 74 4e 65 78 74 2c 20 6f 72 20 4f 50 5f 53 6f  etNext, or OP_So
6530: 72 74 65 72 4e 65 78 74 29 20 61 6c 6c 20 6a 75  rterNext) all ju
6540: 6d 70 20 68 65 72 65 20 75 70 6f 6e 0a 20 20 2a  mp here upon.  *
6550: 2a 20 63 6f 6d 70 6c 65 74 69 6f 6e 2e 20 20 43  * completion.  C
6560: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 73  heck to see if s
6570: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
6580: 28 29 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c  () has been call
6590: 65 64 0a 20 20 2a 2a 20 6f 72 20 69 66 20 74 68  ed.  ** or if th
65a0: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
65b0: 61 63 6b 20 6e 65 65 64 73 20 74 6f 20 62 65 20  ack needs to be 
65c0: 69 6e 76 6f 6b 65 64 2e 20 0a 20 20 2a 2a 0a 20  invoked. .  **. 
65d0: 20 2a 2a 20 54 68 69 73 20 63 6f 64 65 20 75 73   ** This code us
65e0: 65 73 20 75 6e 73 74 72 75 63 74 75 72 65 64 20  es unstructured 
65f0: 22 67 6f 74 6f 22 20 73 74 61 74 65 6d 65 6e 74  "goto" statement
6600: 73 20 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 6c  s and does not l
6610: 6f 6f 6b 20 63 6c 65 61 6e 2e 0a 20 20 2a 2a 20  ook clean..  ** 
6620: 42 75 74 20 74 68 61 74 20 69 73 20 6e 6f 74 20  But that is not 
6630: 64 75 65 20 74 6f 20 73 6c 6f 70 70 79 20 63 6f  due to sloppy co
6640: 64 69 6e 67 20 68 61 62 69 74 73 2e 20 54 68 65  ding habits. The
6650: 20 63 6f 64 65 20 69 73 20 77 72 69 74 74 65 6e   code is written
6660: 20 74 68 69 73 0a 20 20 2a 2a 20 77 61 79 20 66   this.  ** way f
6670: 6f 72 20 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20  or performance, 
6680: 74 6f 20 61 76 6f 69 64 20 68 61 76 69 6e 67 20  to avoid having 
6690: 74 6f 20 72 75 6e 20 74 68 65 20 69 6e 74 65 72  to run the inter
66a0: 72 75 70 74 20 61 6e 64 20 70 72 6f 67 72 65 73  rupt and progres
66b0: 73 0a 20 20 2a 2a 20 63 68 65 63 6b 73 20 6f 6e  s.  ** checks on
66c0: 20 65 76 65 72 79 20 6f 70 63 6f 64 65 2e 20 20   every opcode.  
66d0: 54 68 69 73 20 68 65 6c 70 73 20 73 71 6c 69 74  This helps sqlit
66e0: 65 33 5f 73 74 65 70 28 29 20 74 6f 20 72 75 6e  e3_step() to run
66f0: 20 61 62 6f 75 74 20 31 2e 35 25 0a 20 20 2a 2a   about 1.5%.  **
6700: 20 66 61 73 74 65 72 20 61 63 63 6f 72 64 69 6e   faster accordin
6710: 67 20 74 6f 20 22 76 61 6c 67 72 69 6e 64 20 2d  g to "valgrind -
6720: 2d 74 6f 6f 6c 3d 63 61 63 68 65 67 72 69 6e 64  -tool=cachegrind
6730: 22 20 2a 2f 0a 63 68 65 63 6b 5f 66 6f 72 5f 69  " */.check_for_i
6740: 6e 74 65 72 72 75 70 74 3a 0a 20 20 69 66 28 20  nterrupt:.  if( 
6750: 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75  db->u1.isInterru
6760: 70 74 65 64 20 29 20 67 6f 74 6f 20 61 62 6f 72  pted ) goto abor
6770: 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75  t_due_to_interru
6780: 70 74 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  pt;.#ifndef SQLI
6790: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
67a0: 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 2f 2a 20 43  _CALLBACK.  /* C
67b0: 61 6c 6c 20 74 68 65 20 70 72 6f 67 72 65 73 73  all the progress
67c0: 20 63 61 6c 6c 62 61 63 6b 20 69 66 20 69 74 20   callback if it 
67d0: 69 73 20 63 6f 6e 66 69 67 75 72 65 64 20 61 6e  is configured an
67e0: 64 20 74 68 65 20 72 65 71 75 69 72 65 64 20 6e  d the required n
67f0: 75 6d 62 65 72 0a 20 20 2a 2a 20 6f 66 20 56 44  umber.  ** of VD
6800: 42 45 20 6f 70 73 20 68 61 76 65 20 62 65 65 6e  BE ops have been
6810: 20 65 78 65 63 75 74 65 64 20 28 65 69 74 68 65   executed (eithe
6820: 72 20 73 69 6e 63 65 20 74 68 69 73 20 69 6e 76  r since this inv
6830: 6f 63 61 74 69 6f 6e 20 6f 66 0a 20 20 2a 2a 20  ocation of.  ** 
6840: 73 71 6c 69 74 65 33 56 64 62 65 45 78 65 63 28  sqlite3VdbeExec(
6850: 29 20 6f 72 20 73 69 6e 63 65 20 6c 61 73 74 20  ) or since last 
6860: 74 69 6d 65 20 74 68 65 20 70 72 6f 67 72 65 73  time the progres
6870: 73 20 63 61 6c 6c 62 61 63 6b 20 77 61 73 20 63  s callback was c
6880: 61 6c 6c 65 64 29 2e 0a 20 20 2a 2a 20 49 66 20  alled)..  ** If 
6890: 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  the progress cal
68a0: 6c 62 61 63 6b 20 72 65 74 75 72 6e 73 20 6e 6f  lback returns no
68b0: 6e 2d 7a 65 72 6f 2c 20 65 78 69 74 20 74 68 65  n-zero, exit the
68c0: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
68d0: 20 77 69 74 68 0a 20 20 2a 2a 20 61 20 72 65 74   with.  ** a ret
68e0: 75 72 6e 20 63 6f 64 65 20 53 51 4c 49 54 45 5f  urn code SQLITE_
68f0: 41 42 4f 52 54 2e 0a 20 20 2a 2f 0a 20 20 69 66  ABORT..  */.  if
6900: 28 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 21  ( db->xProgress!
6910: 3d 30 20 26 26 20 6e 56 6d 53 74 65 70 3e 3d 6e  =0 && nVmStep>=n
6920: 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 29 7b  ProgressLimit ){
6930: 0a 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d  .    assert( db-
6940: 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 21 3d 30  >nProgressOps!=0
6950: 20 29 3b 0a 20 20 20 20 6e 50 72 6f 67 72 65 73   );.    nProgres
6960: 73 4c 69 6d 69 74 20 3d 20 6e 56 6d 53 74 65 70  sLimit = nVmStep
6970: 20 2b 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73   + db->nProgress
6980: 4f 70 73 20 2d 20 28 6e 56 6d 53 74 65 70 25 64  Ops - (nVmStep%d
6990: 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 29  b->nProgressOps)
69a0: 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 78 50  ;.    if( db->xP
69b0: 72 6f 67 72 65 73 73 28 64 62 2d 3e 70 50 72 6f  rogress(db->pPro
69c0: 67 72 65 73 73 41 72 67 29 20 29 7b 0a 20 20 20  gressArg) ){.   
69d0: 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49     rc = SQLITE_I
69e0: 4e 54 45 52 52 55 50 54 3b 0a 20 20 20 20 20 20  NTERRUPT;.      
69f0: 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
6a00: 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20  o_error;.    }. 
6a10: 20 7d 0a 23 65 6e 64 69 66 0a 20 20 0a 20 20 62   }.#endif.  .  b
6a20: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
6a30: 64 65 3a 20 20 47 6f 73 75 62 20 50 31 20 50 32  de:  Gosub P1 P2
6a40: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69   * * *.**.** Wri
6a50: 74 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 61  te the current a
6a60: 64 64 72 65 73 73 20 6f 6e 74 6f 20 72 65 67 69  ddress onto regi
6a70: 73 74 65 72 20 50 31 0a 2a 2a 20 61 6e 64 20 74  ster P1.** and t
6a80: 68 65 6e 20 6a 75 6d 70 20 74 6f 20 61 64 64 72  hen jump to addr
6a90: 65 73 73 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ess P2..*/.case 
6aa0: 4f 50 5f 47 6f 73 75 62 3a 20 7b 20 20 20 20 20  OP_Gosub: {     
6ab0: 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
6ac0: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
6ad0: 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31  >p1>0 && pOp->p1
6ae0: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
6af0: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
6b00: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
6b10: 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
6b20: 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28   VdbeMemDynamic(
6b30: 70 49 6e 31 29 3d 3d 30 20 29 3b 0a 20 20 6d 65  pIn1)==0 );.  me
6b40: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
6b50: 2c 20 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d  , pIn1);.  pIn1-
6b60: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
6b70: 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20  ;.  pIn1->u.i = 
6b80: 28 69 6e 74 29 28 70 4f 70 2d 61 4f 70 29 3b 0a  (int)(pOp-aOp);.
6b90: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
6ba0: 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b  (pOp->p1, pIn1);
6bb0: 0a 0a 20 20 2f 2a 20 4d 6f 73 74 20 6a 75 6d 70  ..  /* Most jump
6bc0: 20 6f 70 65 72 61 74 69 6f 6e 73 20 64 6f 20 61   operations do a
6bd0: 20 67 6f 74 6f 20 74 6f 20 74 68 69 73 20 73 70   goto to this sp
6be0: 6f 74 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 75  ot in order to u
6bf0: 70 64 61 74 65 0a 20 20 2a 2a 20 74 68 65 20 70  pdate.  ** the p
6c00: 4f 70 20 70 6f 69 6e 74 65 72 2e 20 2a 2f 0a 6a  Op pointer. */.j
6c10: 75 6d 70 5f 74 6f 5f 70 32 3a 0a 20 20 70 4f 70  ump_to_p2:.  pOp
6c20: 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 32 20   = &aOp[pOp->p2 
6c30: 2d 20 31 5d 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  - 1];.  break;.}
6c40: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 52 65  ../* Opcode:  Re
6c50: 74 75 72 6e 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  turn P1 * * * *.
6c60: 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68  **.** Jump to th
6c70: 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
6c80: 6f 6e 20 61 66 74 65 72 20 74 68 65 20 61 64 64  on after the add
6c90: 72 65 73 73 20 69 6e 20 72 65 67 69 73 74 65 72  ress in register
6ca0: 20 50 31 2e 20 20 41 66 74 65 72 0a 2a 2a 20 74   P1.  After.** t
6cb0: 68 65 20 6a 75 6d 70 2c 20 72 65 67 69 73 74 65  he jump, registe
6cc0: 72 20 50 31 20 62 65 63 6f 6d 65 73 20 75 6e 64  r P1 becomes und
6cd0: 65 66 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65 20  efined..*/.case 
6ce0: 4f 50 5f 52 65 74 75 72 6e 3a 20 7b 20 20 20 20  OP_Return: {    
6cf0: 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f         /* in1 */
6d00: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
6d10: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
6d20: 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3d  rt( pIn1->flags=
6d30: 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 4f  =MEM_Int );.  pO
6d40: 70 20 3d 20 26 61 4f 70 5b 70 49 6e 31 2d 3e 75  p = &aOp[pIn1->u
6d50: 2e 69 5d 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61  .i];.  pIn1->fla
6d60: 67 73 20 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e  gs = MEM_Undefin
6d70: 65 64 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  ed;.  break;.}..
6d80: 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 69 74 43  /* Opcode: InitC
6d90: 6f 72 6f 75 74 69 6e 65 20 50 31 20 50 32 20 50  oroutine P1 P2 P
6da0: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20  3 * *.**.** Set 
6db0: 75 70 20 72 65 67 69 73 74 65 72 20 50 31 20 73  up register P1 s
6dc0: 6f 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20 59  o that it will Y
6dd0: 69 65 6c 64 20 74 6f 20 74 68 65 20 63 6f 72 6f  ield to the coro
6de0: 75 74 69 6e 65 0a 2a 2a 20 6c 6f 63 61 74 65 64  utine.** located
6df0: 20 61 74 20 61 64 64 72 65 73 73 20 50 33 2e 0a   at address P3..
6e00: 2a 2a 0a 2a 2a 20 49 66 20 50 32 21 3d 30 20 74  **.** If P2!=0 t
6e10: 68 65 6e 20 74 68 65 20 63 6f 72 6f 75 74 69 6e  hen the coroutin
6e20: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
6e30: 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c   immediately fol
6e40: 6c 6f 77 73 0a 2a 2a 20 74 68 69 73 20 6f 70 63  lows.** this opc
6e50: 6f 64 65 2e 20 20 53 6f 20 6a 75 6d 70 20 6f 76  ode.  So jump ov
6e60: 65 72 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65  er the coroutine
6e70: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
6e80: 74 6f 0a 2a 2a 20 61 64 64 72 65 73 73 20 50 32  to.** address P2
6e90: 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
6ea0: 3a 20 45 6e 64 43 6f 72 6f 75 74 69 6e 65 0a 2a  : EndCoroutine.*
6eb0: 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 69 74 43 6f  /.case OP_InitCo
6ec0: 72 6f 75 74 69 6e 65 3a 20 7b 20 20 20 20 20 2f  routine: {     /
6ed0: 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65  * jump */.  asse
6ee0: 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26  rt( pOp->p1>0 &&
6ef0: 20 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e    pOp->p1<=(p->n
6f00: 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
6f10: 6f 72 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  or) );.  assert(
6f20: 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 26 26 20 70   pOp->p2>=0 && p
6f30: 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b  Op->p2<p->nOp );
6f40: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
6f50: 70 33 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 33  p3>=0 && pOp->p3
6f60: 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 4f 75  <p->nOp );.  pOu
6f70: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
6f80: 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 21 56  1];.  assert( !V
6f90: 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f  dbeMemDynamic(pO
6fa0: 75 74 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75  ut) );.  pOut->u
6fb0: 2e 69 20 3d 20 70 4f 70 2d 3e 70 33 20 2d 20 31  .i = pOp->p3 - 1
6fc0: 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
6fd0: 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 69 66 28  = MEM_Int;.  if(
6fe0: 20 70 4f 70 2d 3e 70 32 20 29 20 67 6f 74 6f 20   pOp->p2 ) goto 
6ff0: 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72  jump_to_p2;.  br
7000: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
7010: 65 3a 20 20 45 6e 64 43 6f 72 6f 75 74 69 6e 65  e:  EndCoroutine
7020: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
7030: 2a 20 54 68 65 20 69 6e 73 74 72 75 63 74 69 6f  * The instructio
7040: 6e 20 61 74 20 74 68 65 20 61 64 64 72 65 73 73  n at the address
7050: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
7060: 69 73 20 61 20 59 69 65 6c 64 2e 0a 2a 2a 20 4a  is a Yield..** J
7070: 75 6d 70 20 74 6f 20 74 68 65 20 50 32 20 70 61  ump to the P2 pa
7080: 72 61 6d 65 74 65 72 20 6f 66 20 74 68 61 74 20  rameter of that 
7090: 59 69 65 6c 64 2e 0a 2a 2a 20 41 66 74 65 72 20  Yield..** After 
70a0: 74 68 65 20 6a 75 6d 70 2c 20 72 65 67 69 73 74  the jump, regist
70b0: 65 72 20 50 31 20 62 65 63 6f 6d 65 73 20 75 6e  er P1 becomes un
70c0: 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 53  defined..**.** S
70d0: 65 65 20 61 6c 73 6f 3a 20 49 6e 69 74 43 6f 72  ee also: InitCor
70e0: 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f  outine.*/.case O
70f0: 50 5f 45 6e 64 43 6f 72 6f 75 74 69 6e 65 3a 20  P_EndCoroutine: 
7100: 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69  {           /* i
7110: 6e 31 20 2a 2f 0a 20 20 56 64 62 65 4f 70 20 2a  n1 */.  VdbeOp *
7120: 70 43 61 6c 6c 65 72 3b 0a 20 20 70 49 6e 31 20  pCaller;.  pIn1 
7130: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
7140: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  ;.  assert( pIn1
7150: 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74  ->flags==MEM_Int
7160: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49   );.  assert( pI
7170: 6e 31 2d 3e 75 2e 69 3e 3d 30 20 26 26 20 70 49  n1->u.i>=0 && pI
7180: 6e 31 2d 3e 75 2e 69 3c 70 2d 3e 6e 4f 70 20 29  n1->u.i<p->nOp )
7190: 3b 0a 20 20 70 43 61 6c 6c 65 72 20 3d 20 26 61  ;.  pCaller = &a
71a0: 4f 70 5b 70 49 6e 31 2d 3e 75 2e 69 5d 3b 0a 20  Op[pIn1->u.i];. 
71b0: 20 61 73 73 65 72 74 28 20 70 43 61 6c 6c 65 72   assert( pCaller
71c0: 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 59 69 65  ->opcode==OP_Yie
71d0: 6c 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ld );.  assert( 
71e0: 70 43 61 6c 6c 65 72 2d 3e 70 32 3e 3d 30 20 26  pCaller->p2>=0 &
71f0: 26 20 70 43 61 6c 6c 65 72 2d 3e 70 32 3c 70 2d  & pCaller->p2<p-
7200: 3e 6e 4f 70 20 29 3b 0a 20 20 70 4f 70 20 3d 20  >nOp );.  pOp = 
7210: 26 61 4f 70 5b 70 43 61 6c 6c 65 72 2d 3e 70 32  &aOp[pCaller->p2
7220: 20 2d 20 31 5d 3b 0a 20 20 70 49 6e 31 2d 3e 66   - 1];.  pIn1->f
7230: 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e 64 65 66  lags = MEM_Undef
7240: 69 6e 65 64 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ined;.  break;.}
7250: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 59 69  ../* Opcode:  Yi
7260: 65 6c 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  eld P1 P2 * * *.
7270: 2a 2a 0a 2a 2a 20 53 77 61 70 20 74 68 65 20 70  **.** Swap the p
7280: 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 77  rogram counter w
7290: 69 74 68 20 74 68 65 20 76 61 6c 75 65 20 69 6e  ith the value in
72a0: 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 54   register P1.  T
72b0: 68 69 73 0a 2a 2a 20 68 61 73 20 74 68 65 20 65  his.** has the e
72c0: 66 66 65 63 74 20 6f 66 20 79 69 65 6c 64 69 6e  ffect of yieldin
72d0: 67 20 74 6f 20 61 20 63 6f 72 6f 75 74 69 6e 65  g to a coroutine
72e0: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63  ..**.** If the c
72f0: 6f 72 6f 75 74 69 6e 65 20 74 68 61 74 20 69 73  oroutine that is
7300: 20 6c 61 75 6e 63 68 65 64 20 62 79 20 74 68 69   launched by thi
7310: 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 6e  s instruction en
7320: 64 73 20 77 69 74 68 0a 2a 2a 20 59 69 65 6c 64  ds with.** Yield
7330: 20 6f 72 20 52 65 74 75 72 6e 20 74 68 65 6e 20   or Return then 
7340: 63 6f 6e 74 69 6e 75 65 20 74 6f 20 74 68 65 20  continue to the 
7350: 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
7360: 2e 20 20 42 75 74 20 69 66 0a 2a 2a 20 74 68 65  .  But if.** the
7370: 20 63 6f 72 6f 75 74 69 6e 65 20 6c 61 75 6e 63   coroutine launc
7380: 68 65 64 20 62 79 20 74 68 69 73 20 69 6e 73 74  hed by this inst
7390: 72 75 63 74 69 6f 6e 20 65 6e 64 73 20 77 69 74  ruction ends wit
73a0: 68 0a 2a 2a 20 45 6e 64 43 6f 72 6f 75 74 69 6e  h.** EndCoroutin
73b0: 65 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  e, then jump to 
73c0: 50 32 20 72 61 74 68 65 72 20 74 68 61 6e 20 63  P2 rather than c
73d0: 6f 6e 74 69 6e 75 69 6e 67 20 77 69 74 68 20 74  ontinuing with t
73e0: 68 65 0a 2a 2a 20 6e 65 78 74 20 69 6e 73 74 72  he.** next instr
73f0: 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65  uction..**.** Se
7400: 65 20 61 6c 73 6f 3a 20 49 6e 69 74 43 6f 72 6f  e also: InitCoro
7410: 75 74 69 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50  utine.*/.case OP
7420: 5f 59 69 65 6c 64 3a 20 7b 20 20 20 20 20 20 20  _Yield: {       
7430: 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20 6a 75 6d       /* in1, jum
7440: 70 20 2a 2f 0a 20 20 69 6e 74 20 70 63 44 65 73  p */.  int pcDes
7450: 74 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  t;.  pIn1 = &aMe
7460: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
7470: 73 65 72 74 28 20 56 64 62 65 4d 65 6d 44 79 6e  sert( VdbeMemDyn
7480: 61 6d 69 63 28 70 49 6e 31 29 3d 3d 30 20 29 3b  amic(pIn1)==0 );
7490: 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d  .  pIn1->flags =
74a0: 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 63 44 65   MEM_Int;.  pcDe
74b0: 73 74 20 3d 20 28 69 6e 74 29 70 49 6e 31 2d 3e  st = (int)pIn1->
74c0: 75 2e 69 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69  u.i;.  pIn1->u.i
74d0: 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61   = (int)(pOp - a
74e0: 4f 70 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  Op);.  REGISTER_
74f0: 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70  TRACE(pOp->p1, p
7500: 49 6e 31 29 3b 0a 20 20 70 4f 70 20 3d 20 26 61  In1);.  pOp = &a
7510: 4f 70 5b 70 63 44 65 73 74 5d 3b 0a 20 20 62 72  Op[pcDest];.  br
7520: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
7530: 65 3a 20 20 48 61 6c 74 49 66 4e 75 6c 6c 20 20  e:  HaltIfNull  
7540: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
7550: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72  * Synopsis: if r
7560: 5b 50 33 5d 3d 6e 75 6c 6c 20 68 61 6c 74 0a 2a  [P3]=null halt.*
7570: 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65 20 76  *.** Check the v
7580: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
7590: 20 50 33 2e 20 20 49 66 20 69 74 20 69 73 20 4e   P3.  If it is N
75a0: 55 4c 4c 20 74 68 65 6e 20 48 61 6c 74 20 75 73  ULL then Halt us
75b0: 69 6e 67 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72  ing.** parameter
75c0: 20 50 31 2c 20 50 32 2c 20 61 6e 64 20 50 34 20   P1, P2, and P4 
75d0: 61 73 20 69 66 20 74 68 69 73 20 77 65 72 65 20  as if this were 
75e0: 61 20 48 61 6c 74 20 69 6e 73 74 72 75 63 74 69  a Halt instructi
75f0: 6f 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 76  on.  If the.** v
7600: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
7610: 20 50 33 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c   P3 is not NULL,
7620: 20 74 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69   then this routi
7630: 6e 65 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a  ne is a no-op..*
7640: 2a 20 54 68 65 20 50 35 20 70 61 72 61 6d 65 74  * The P5 paramet
7650: 65 72 20 73 68 6f 75 6c 64 20 62 65 20 31 2e 0a  er should be 1..
7660: 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74 49  */.case OP_HaltI
7670: 66 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 2f 2a  fNull: {      /*
7680: 20 69 6e 33 20 2a 2f 0a 20 20 70 49 6e 33 20 3d   in3 */.  pIn3 =
7690: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
76a0: 0a 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c  .  if( (pIn3->fl
76b0: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d  ags & MEM_Null)=
76c0: 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f 2a  =0 ) break;.  /*
76d0: 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e   Fall through in
76e0: 74 6f 20 4f 50 5f 48 61 6c 74 20 2a 2f 0a 7d 0a  to OP_Halt */.}.
76f0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61 6c  ./* Opcode:  Hal
7700: 74 20 50 31 20 50 32 20 2a 20 50 34 20 50 35 0a  t P1 P2 * P4 P5.
7710: 2a 2a 0a 2a 2a 20 45 78 69 74 20 69 6d 6d 65 64  **.** Exit immed
7720: 69 61 74 65 6c 79 2e 20 20 41 6c 6c 20 6f 70 65  iately.  All ope
7730: 6e 20 63 75 72 73 6f 72 73 2c 20 65 74 63 20 61  n cursors, etc a
7740: 72 65 20 63 6c 6f 73 65 64 0a 2a 2a 20 61 75 74  re closed.** aut
7750: 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2a 0a 2a  omatically..**.*
7760: 2a 20 50 31 20 69 73 20 74 68 65 20 72 65 73 75  * P1 is the resu
7770: 6c 74 20 63 6f 64 65 20 72 65 74 75 72 6e 65 64  lt code returned
7780: 20 62 79 20 73 71 6c 69 74 65 33 5f 65 78 65 63   by sqlite3_exec
7790: 28 29 2c 20 73 71 6c 69 74 65 33 5f 72 65 73 65  (), sqlite3_rese
77a0: 74 28 29 2c 0a 2a 2a 20 6f 72 20 73 71 6c 69 74  t(),.** or sqlit
77b0: 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29 2e 20 20  e3_finalize().  
77c0: 46 6f 72 20 61 20 6e 6f 72 6d 61 6c 20 68 61 6c  For a normal hal
77d0: 74 2c 20 74 68 69 73 20 73 68 6f 75 6c 64 20 62  t, this should b
77e0: 65 20 53 51 4c 49 54 45 5f 4f 4b 20 28 30 29 2e  e SQLITE_OK (0).
77f0: 0a 2a 2a 20 46 6f 72 20 65 72 72 6f 72 73 2c 20  .** For errors, 
7800: 69 74 20 63 61 6e 20 62 65 20 73 6f 6d 65 20 6f  it can be some o
7810: 74 68 65 72 20 76 61 6c 75 65 2e 20 20 49 66 20  ther value.  If 
7820: 50 31 21 3d 30 20 74 68 65 6e 20 50 32 20 77 69  P1!=0 then P2 wi
7830: 6c 6c 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20  ll determine.** 
7840: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
7850: 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 63  o rollback the c
7860: 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69  urrent transacti
7870: 6f 6e 2e 20 20 44 6f 20 6e 6f 74 20 72 6f 6c 6c  on.  Do not roll
7880: 62 61 63 6b 0a 2a 2a 20 69 66 20 50 32 3d 3d 4f  back.** if P2==O
7890: 45 5f 46 61 69 6c 2e 20 44 6f 20 74 68 65 20 72  E_Fail. Do the r
78a0: 6f 6c 6c 62 61 63 6b 20 69 66 20 50 32 3d 3d 4f  ollback if P2==O
78b0: 45 5f 52 6f 6c 6c 62 61 63 6b 2e 20 20 49 66 20  E_Rollback.  If 
78c0: 50 32 3d 3d 4f 45 5f 41 62 6f 72 74 2c 0a 2a 2a  P2==OE_Abort,.**
78d0: 20 74 68 65 6e 20 62 61 63 6b 20 6f 75 74 20 61   then back out a
78e0: 6c 6c 20 63 68 61 6e 67 65 73 20 74 68 61 74 20  ll changes that 
78f0: 68 61 76 65 20 6f 63 63 75 72 72 65 64 20 64 75  have occurred du
7900: 72 69 6e 67 20 74 68 69 73 20 65 78 65 63 75 74  ring this execut
7910: 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 56 44  ion of the.** VD
7920: 42 45 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20 72  BE, but do not r
7930: 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e  ollback the tran
7940: 73 61 63 74 69 6f 6e 2e 20 0a 2a 2a 0a 2a 2a 20  saction. .**.** 
7950: 49 66 20 50 34 20 69 73 20 6e 6f 74 20 6e 75 6c  If P4 is not nul
7960: 6c 20 74 68 65 6e 20 69 74 20 69 73 20 61 6e 20  l then it is an 
7970: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74  error message st
7980: 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 50 35 20 69  ring..**.** P5 i
7990: 73 20 61 20 76 61 6c 75 65 20 62 65 74 77 65 65  s a value betwee
79a0: 6e 20 30 20 61 6e 64 20 34 2c 20 69 6e 63 6c 75  n 0 and 4, inclu
79b0: 73 69 76 65 2c 20 74 68 61 74 20 6d 6f 64 69 66  sive, that modif
79c0: 69 65 73 20 74 68 65 20 50 34 20 73 74 72 69 6e  ies the P4 strin
79d0: 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 30 3a 20 20  g..**.**    0:  
79e0: 28 6e 6f 20 63 68 61 6e 67 65 29 0a 2a 2a 20 20  (no change).**  
79f0: 20 20 31 3a 20 20 4e 4f 54 20 4e 55 4c 4c 20 63    1:  NOT NULL c
7a00: 6f 6e 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a  ontraint failed:
7a10: 20 50 34 0a 2a 2a 20 20 20 20 32 3a 20 20 55 4e   P4.**    2:  UN
7a20: 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20  IQUE constraint 
7a30: 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20  failed: P4.**   
7a40: 20 33 3a 20 20 43 48 45 43 4b 20 63 6f 6e 73 74   3:  CHECK const
7a50: 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34  raint failed: P4
7a60: 0a 2a 2a 20 20 20 20 34 3a 20 20 46 4f 52 45 49  .**    4:  FOREI
7a70: 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e  GN KEY constrain
7a80: 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 0a  t failed: P4.**.
7a90: 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 74 20  ** If P5 is not 
7aa0: 7a 65 72 6f 20 61 6e 64 20 50 34 20 69 73 20 4e  zero and P4 is N
7ab0: 55 4c 4c 2c 20 74 68 65 6e 20 65 76 65 72 79 74  ULL, then everyt
7ac0: 68 69 6e 67 20 61 66 74 65 72 20 74 68 65 20 22  hing after the "
7ad0: 3a 22 20 69 73 0a 2a 2a 20 6f 6d 69 74 74 65 64  :" is.** omitted
7ae0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 69 73  ..**.** There is
7af0: 20 61 6e 20 69 6d 70 6c 69 65 64 20 22 48 61 6c   an implied "Hal
7b00: 74 20 30 20 30 20 30 22 20 69 6e 73 74 72 75 63  t 0 0 0" instruc
7b10: 74 69 6f 6e 20 69 6e 73 65 72 74 65 64 20 61 74  tion inserted at
7b20: 20 74 68 65 20 76 65 72 79 20 65 6e 64 20 6f 66   the very end of
7b30: 0a 2a 2a 20 65 76 65 72 79 20 70 72 6f 67 72 61  .** every progra
7b40: 6d 2e 20 20 53 6f 20 61 20 6a 75 6d 70 20 70 61  m.  So a jump pa
7b50: 73 74 20 74 68 65 20 6c 61 73 74 20 69 6e 73 74  st the last inst
7b60: 72 75 63 74 69 6f 6e 20 6f 66 20 74 68 65 20 70  ruction of the p
7b70: 72 6f 67 72 61 6d 0a 2a 2a 20 69 73 20 74 68 65  rogram.** is the
7b80: 20 73 61 6d 65 20 61 73 20 65 78 65 63 75 74 69   same as executi
7b90: 6e 67 20 48 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65  ng Halt..*/.case
7ba0: 20 4f 50 5f 48 61 6c 74 3a 20 7b 0a 20 20 56 64   OP_Halt: {.  Vd
7bb0: 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b  beFrame *pFrame;
7bc0: 0a 20 20 69 6e 74 20 70 63 78 3b 0a 0a 20 20 70  .  int pcx;..  p
7bd0: 63 78 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d  cx = (int)(pOp -
7be0: 20 61 4f 70 29 3b 0a 20 20 69 66 28 20 70 4f 70   aOp);.  if( pOp
7bf0: 2d 3e 70 31 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ->p1==SQLITE_OK 
7c00: 26 26 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a  && p->pFrame ){.
7c10: 20 20 20 20 2f 2a 20 48 61 6c 74 20 74 68 65 20      /* Halt the 
7c20: 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20 52 65 74  sub-program. Ret
7c30: 75 72 6e 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74  urn control to t
7c40: 68 65 20 70 61 72 65 6e 74 20 66 72 61 6d 65 2e  he parent frame.
7c50: 20 2a 2f 0a 20 20 20 20 70 46 72 61 6d 65 20 3d   */.    pFrame =
7c60: 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 20 20   p->pFrame;.    
7c70: 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70 46 72 61  p->pFrame = pFra
7c80: 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 0a 20 20 20  me->pParent;.   
7c90: 20 70 2d 3e 6e 46 72 61 6d 65 2d 2d 3b 0a 20 20   p->nFrame--;.  
7ca0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
7cb0: 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e  Changes(db, p->n
7cc0: 43 68 61 6e 67 65 29 3b 0a 20 20 20 20 70 63 78  Change);.    pcx
7cd0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 46 72   = sqlite3VdbeFr
7ce0: 61 6d 65 52 65 73 74 6f 72 65 28 70 46 72 61 6d  ameRestore(pFram
7cf0: 65 29 3b 0a 20 20 20 20 6c 61 73 74 52 6f 77 69  e);.    lastRowi
7d00: 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69  d = db->lastRowi
7d10: 64 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  d;.    if( pOp->
7d20: 70 32 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 29 7b  p2==OE_Ignore ){
7d30: 0a 20 20 20 20 20 20 2f 2a 20 49 6e 73 74 72 75  .      /* Instru
7d40: 63 74 69 6f 6e 20 70 63 78 20 69 73 20 74 68 65  ction pcx is the
7d50: 20 4f 50 5f 50 72 6f 67 72 61 6d 20 74 68 61 74   OP_Program that
7d60: 20 69 6e 76 6f 6b 65 64 20 74 68 65 20 73 75 62   invoked the sub
7d70: 2d 70 72 6f 67 72 61 6d 20 0a 20 20 20 20 20 20  -program .      
7d80: 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69  ** currently bei
7d90: 6e 67 20 68 61 6c 74 65 64 2e 20 49 66 20 74 68  ng halted. If th
7da0: 65 20 70 32 20 69 6e 73 74 72 75 63 74 69 6f 6e  e p2 instruction
7db0: 20 6f 66 20 74 68 69 73 20 4f 50 5f 48 61 6c 74   of this OP_Halt
7dc0: 0a 20 20 20 20 20 20 2a 2a 20 69 6e 73 74 72 75  .      ** instru
7dd0: 63 74 69 6f 6e 20 69 73 20 73 65 74 20 74 6f 20  ction is set to 
7de0: 4f 45 5f 49 67 6e 6f 72 65 2c 20 74 68 65 6e 20  OE_Ignore, then 
7df0: 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  the sub-program 
7e00: 69 73 20 74 68 72 6f 77 69 6e 67 0a 20 20 20 20  is throwing.    
7e10: 20 20 2a 2a 20 61 6e 20 49 47 4e 4f 52 45 20 65    ** an IGNORE e
7e20: 78 63 65 70 74 69 6f 6e 2e 20 49 6e 20 74 68 69  xception. In thi
7e30: 73 20 63 61 73 65 20 6a 75 6d 70 20 74 6f 20 74  s case jump to t
7e40: 68 65 20 61 64 64 72 65 73 73 20 73 70 65 63 69  he address speci
7e50: 66 69 65 64 0a 20 20 20 20 20 20 2a 2a 20 61 73  fied.      ** as
7e60: 20 74 68 65 20 70 32 20 6f 66 20 74 68 65 20 63   the p2 of the c
7e70: 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61  alling OP_Progra
7e80: 6d 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70 63 78  m.  */.      pcx
7e90: 20 3d 20 70 2d 3e 61 4f 70 5b 70 63 78 5d 2e 70   = p->aOp[pcx].p
7ea0: 32 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61  2-1;.    }.    a
7eb0: 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20  Op = p->aOp;.   
7ec0: 20 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b   aMem = p->aMem;
7ed0: 0a 20 20 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b  .    pOp = &aOp[
7ee0: 70 63 78 5d 3b 0a 20 20 20 20 62 72 65 61 6b 3b  pcx];.    break;
7ef0: 0a 20 20 7d 0a 20 20 70 2d 3e 72 63 20 3d 20 70  .  }.  p->rc = p
7f00: 4f 70 2d 3e 70 31 3b 0a 20 20 70 2d 3e 65 72 72  Op->p1;.  p->err
7f10: 6f 72 41 63 74 69 6f 6e 20 3d 20 28 75 38 29 70  orAction = (u8)p
7f20: 4f 70 2d 3e 70 32 3b 0a 20 20 70 2d 3e 70 63 20  Op->p2;.  p->pc 
7f30: 3d 20 70 63 78 3b 0a 20 20 61 73 73 65 72 74 28  = pcx;.  assert(
7f40: 20 70 4f 70 2d 3e 70 35 3c 3d 34 20 29 3b 0a 20   pOp->p5<=4 );. 
7f50: 20 69 66 28 20 70 2d 3e 72 63 20 29 7b 0a 20 20   if( p->rc ){.  
7f60: 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b    if( pOp->p5 ){
7f70: 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f  .      static co
7f80: 6e 73 74 20 63 68 61 72 20 2a 20 63 6f 6e 73 74  nst char * const
7f90: 20 61 7a 54 79 70 65 5b 5d 20 3d 20 7b 20 22 4e   azType[] = { "N
7fa0: 4f 54 20 4e 55 4c 4c 22 2c 20 22 55 4e 49 51 55  OT NULL", "UNIQU
7fb0: 45 22 2c 20 22 43 48 45 43 4b 22 2c 0a 20 20 20  E", "CHECK",.   
7fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7fe0: 20 20 20 20 20 20 20 20 20 20 22 46 4f 52 45 49            "FOREI
7ff0: 47 4e 20 4b 45 59 22 20 7d 3b 0a 20 20 20 20 20  GN KEY" };.     
8000: 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e   testcase( pOp->
8010: 70 35 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20 74  p5==1 );.      t
8020: 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35  estcase( pOp->p5
8030: 3d 3d 32 20 29 3b 0a 20 20 20 20 20 20 74 65 73  ==2 );.      tes
8040: 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d  tcase( pOp->p5==
8050: 33 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63  3 );.      testc
8060: 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 34 20  ase( pOp->p5==4 
8070: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
8080: 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73  VdbeError(p, "%s
8090: 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c   constraint fail
80a0: 65 64 22 2c 20 61 7a 54 79 70 65 5b 70 4f 70 2d  ed", azType[pOp-
80b0: 3e 70 35 2d 31 5d 29 3b 0a 20 20 20 20 20 20 69  >p5-1]);.      i
80c0: 66 28 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a  f( pOp->p4.z ){.
80d0: 20 20 20 20 20 20 20 20 70 2d 3e 7a 45 72 72 4d          p->zErrM
80e0: 73 67 20 3d 20 73 71 6c 69 74 65 33 4d 50 72 69  sg = sqlite3MPri
80f0: 6e 74 66 28 64 62 2c 20 22 25 7a 3a 20 25 73 22  ntf(db, "%z: %s"
8100: 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 70 4f  , p->zErrMsg, pO
8110: 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 20 20  p->p4.z);.      
8120: 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  }.    }else{.   
8130: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
8140: 72 6f 72 28 70 2c 20 22 25 73 22 2c 20 70 4f 70  ror(p, "%s", pOp
8150: 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a 20  ->p4.z);.    }. 
8160: 20 20 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 70     sqlite3_log(p
8170: 4f 70 2d 3e 70 31 2c 20 22 61 62 6f 72 74 20 61  Op->p1, "abort a
8180: 74 20 25 64 20 69 6e 20 5b 25 73 5d 3a 20 25 73  t %d in [%s]: %s
8190: 22 2c 20 70 63 78 2c 20 70 2d 3e 7a 53 71 6c 2c  ", pcx, p->zSql,
81a0: 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20   p->zErrMsg);.  
81b0: 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  }.  rc = sqlite3
81c0: 56 64 62 65 48 61 6c 74 28 70 29 3b 0a 20 20 61  VdbeHalt(p);.  a
81d0: 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
81e0: 45 5f 42 55 53 59 20 7c 7c 20 72 63 3d 3d 53 51  E_BUSY || rc==SQ
81f0: 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53  LITE_OK || rc==S
8200: 51 4c 49 54 45 5f 45 52 52 4f 52 20 29 3b 0a 20  QLITE_ERROR );. 
8210: 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
8220: 42 55 53 59 20 29 7b 0a 20 20 20 20 70 2d 3e 72  BUSY ){.    p->r
8230: 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
8240: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
8250: 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
8260: 5f 4f 4b 20 7c 7c 20 28 70 2d 3e 72 63 26 30 78  _OK || (p->rc&0x
8270: 66 66 29 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e 53  ff)==SQLITE_CONS
8280: 54 52 41 49 4e 54 20 29 3b 0a 20 20 20 20 61 73  TRAINT );.    as
8290: 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
82a0: 5f 4f 4b 20 7c 7c 20 64 62 2d 3e 6e 44 65 66 65  _OK || db->nDefe
82b0: 72 72 65 64 43 6f 6e 73 3e 30 20 7c 7c 20 64 62  rredCons>0 || db
82c0: 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
82d0: 6e 73 3e 30 20 29 3b 0a 20 20 20 20 72 63 20 3d  ns>0 );.    rc =
82e0: 20 70 2d 3e 72 63 20 3f 20 53 51 4c 49 54 45 5f   p->rc ? SQLITE_
82f0: 45 52 52 4f 52 20 3a 20 53 51 4c 49 54 45 5f 44  ERROR : SQLITE_D
8300: 4f 4e 45 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20  ONE;.  }.  goto 
8310: 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a  vdbe_return;.}..
8320: 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67  /* Opcode: Integ
8330: 65 72 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  er P1 P2 * * *.*
8340: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
8350: 5d 3d 50 31 0a 2a 2a 0a 2a 2a 20 54 68 65 20 33  ]=P1.**.** The 3
8360: 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61  2-bit integer va
8370: 6c 75 65 20 50 31 20 69 73 20 77 72 69 74 74 65  lue P1 is writte
8380: 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  n into register 
8390: 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  P2..*/.case OP_I
83a0: 6e 74 65 67 65 72 3a 20 7b 20 20 20 20 20 20 20  nteger: {       
83b0: 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70    /* out2 */.  p
83c0: 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
83d0: 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
83e0: 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d  pOut->u.i = pOp-
83f0: 3e 70 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  >p1;.  break;.}.
8400: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 36  ./* Opcode: Int6
8410: 34 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a  4 * P2 * P4 *.**
8420: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
8430: 3d 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  =P4.**.** P4 is 
8440: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 36  a pointer to a 6
8450: 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61  4-bit integer va
8460: 6c 75 65 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68  lue..** Write th
8470: 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65  at value into re
8480: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61  gister P2..*/.ca
8490: 73 65 20 4f 50 5f 49 6e 74 36 34 3a 20 7b 20 20  se OP_Int64: {  
84a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
84b0: 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74   */.  pOut = out
84c0: 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
84d0: 4f 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Op);.  assert( p
84e0: 4f 70 2d 3e 70 34 2e 70 49 36 34 21 3d 30 20 29  Op->p4.pI64!=0 )
84f0: 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
8500: 2a 70 4f 70 2d 3e 70 34 2e 70 49 36 34 3b 0a 20  *pOp->p4.pI64;. 
8510: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64   break;.}..#ifnd
8520: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
8530: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a  LOATING_POINT./*
8540: 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c 20 2a 20   Opcode: Real * 
8550: 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  P2 * P4 *.** Syn
8560: 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34 0a  opsis: r[P2]=P4.
8570: 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
8580: 69 6e 74 65 72 20 74 6f 20 61 20 36 34 2d 62 69  inter to a 64-bi
8590: 74 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74  t floating point
85a0: 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74 65   value..** Write
85b0: 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f   that value into
85c0: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
85d0: 0a 63 61 73 65 20 4f 50 5f 52 65 61 6c 3a 20 7b  .case OP_Real: {
85e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
85f0: 61 6d 65 20 61 73 20 54 4b 5f 46 4c 4f 41 54 2c  ame as TK_FLOAT,
8600: 20 6f 75 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20   out2 */.  pOut 
8610: 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
8620: 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74  (p, pOp);.  pOut
8630: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 52 65  ->flags = MEM_Re
8640: 61 6c 3b 0a 20 20 61 73 73 65 72 74 28 20 21 73  al;.  assert( !s
8650: 71 6c 69 74 65 33 49 73 4e 61 4e 28 2a 70 4f 70  qlite3IsNaN(*pOp
8660: 2d 3e 70 34 2e 70 52 65 61 6c 29 20 29 3b 0a 20  ->p4.pReal) );. 
8670: 20 70 4f 75 74 2d 3e 75 2e 72 20 3d 20 2a 70 4f   pOut->u.r = *pO
8680: 70 2d 3e 70 34 2e 70 52 65 61 6c 3b 0a 20 20 62  p->p4.pReal;.  b
8690: 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
86a0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e  /* Opcode: Strin
86b0: 67 38 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a  g8 * P2 * P4 *.*
86c0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
86d0: 5d 3d 27 50 34 27 0a 2a 2a 0a 2a 2a 20 50 34 20  ]='P4'.**.** P4 
86e0: 70 6f 69 6e 74 73 20 74 6f 20 61 20 6e 75 6c 20  points to a nul 
86f0: 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38  terminated UTF-8
8700: 20 73 74 72 69 6e 67 2e 20 54 68 69 73 20 6f 70   string. This op
8710: 63 6f 64 65 20 69 73 20 74 72 61 6e 73 66 6f 72  code is transfor
8720: 6d 65 64 20 0a 2a 2a 20 69 6e 74 6f 20 61 20 53  med .** into a S
8730: 74 72 69 6e 67 20 6f 70 63 6f 64 65 20 62 65 66  tring opcode bef
8740: 6f 72 65 20 69 74 20 69 73 20 65 78 65 63 75 74  ore it is execut
8750: 65 64 20 66 6f 72 20 74 68 65 20 66 69 72 73 74  ed for the first
8760: 20 74 69 6d 65 2e 20 20 44 75 72 69 6e 67 0a 2a   time.  During.*
8770: 2a 20 74 68 69 73 20 74 72 61 6e 73 66 6f 72 6d  * this transform
8780: 61 74 69 6f 6e 2c 20 74 68 65 20 6c 65 6e 67 74  ation, the lengt
8790: 68 20 6f 66 20 73 74 72 69 6e 67 20 50 34 20 69  h of string P4 i
87a0: 73 20 63 6f 6d 70 75 74 65 64 20 61 6e 64 20 73  s computed and s
87b0: 74 6f 72 65 64 0a 2a 2a 20 61 73 20 74 68 65 20  tored.** as the 
87c0: 50 31 20 70 61 72 61 6d 65 74 65 72 2e 0a 2a 2f  P1 parameter..*/
87d0: 0a 63 61 73 65 20 4f 50 5f 53 74 72 69 6e 67 38  .case OP_String8
87e0: 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 73  : {         /* s
87f0: 61 6d 65 20 61 73 20 54 4b 5f 53 54 52 49 4e 47  ame as TK_STRING
8800: 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73 73 65  , out2 */.  asse
8810: 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30  rt( pOp->p4.z!=0
8820: 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74   );.  pOut = out
8830: 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
8840: 4f 70 29 3b 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f  Op);.  pOp->opco
8850: 64 65 20 3d 20 4f 50 5f 53 74 72 69 6e 67 3b 0a  de = OP_String;.
8860: 20 20 70 4f 70 2d 3e 70 31 20 3d 20 73 71 6c 69    pOp->p1 = sqli
8870: 74 65 33 53 74 72 6c 65 6e 33 30 28 70 4f 70 2d  te3Strlen30(pOp-
8880: 3e 70 34 2e 7a 29 3b 0a 0a 23 69 66 6e 64 65 66  >p4.z);..#ifndef
8890: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
88a0: 31 36 0a 20 20 69 66 28 20 65 6e 63 6f 64 69 6e  16.  if( encodin
88b0: 67 21 3d 53 51 4c 49 54 45 5f 55 54 46 38 20 29  g!=SQLITE_UTF8 )
88c0: 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
88d0: 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28  e3VdbeMemSetStr(
88e0: 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c  pOut, pOp->p4.z,
88f0: 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 38   -1, SQLITE_UTF8
8900: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
8910: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63  ;.    assert( rc
8920: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72  ==SQLITE_OK || r
8930: 63 3d 3d 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47  c==SQLITE_TOOBIG
8940: 20 29 3b 0a 20 20 20 20 69 66 28 20 53 51 4c 49   );.    if( SQLI
8950: 54 45 5f 4f 4b 21 3d 73 71 6c 69 74 65 33 56 64  TE_OK!=sqlite3Vd
8960: 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
8970: 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29  (pOut, encoding)
8980: 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
8990: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 75 74      assert( pOut
89a0: 2d 3e 73 7a 4d 61 6c 6c 6f 63 3e 30 20 26 26 20  ->szMalloc>0 && 
89b0: 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3d 3d 70  pOut->zMalloc==p
89c0: 4f 75 74 2d 3e 7a 20 29 3b 0a 20 20 20 20 61 73  Out->z );.    as
89d0: 73 65 72 74 28 20 56 64 62 65 4d 65 6d 44 79 6e  sert( VdbeMemDyn
89e0: 61 6d 69 63 28 70 4f 75 74 29 3d 3d 30 20 29 3b  amic(pOut)==0 );
89f0: 0a 20 20 20 20 70 4f 75 74 2d 3e 73 7a 4d 61 6c  .    pOut->szMal
8a00: 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20 70 4f 75  loc = 0;.    pOu
8a10: 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f  t->flags |= MEM_
8a20: 53 74 61 74 69 63 3b 0a 20 20 20 20 69 66 28 20  Static;.    if( 
8a30: 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
8a40: 44 59 4e 41 4d 49 43 20 29 7b 0a 20 20 20 20 20  DYNAMIC ){.     
8a50: 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
8a60: 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  b, pOp->p4.z);. 
8a70: 20 20 20 7d 0a 20 20 20 20 70 4f 70 2d 3e 70 34     }.    pOp->p4
8a80: 74 79 70 65 20 3d 20 50 34 5f 44 59 4e 41 4d 49  type = P4_DYNAMI
8a90: 43 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 34 2e 7a  C;.    pOp->p4.z
8aa0: 20 3d 20 70 4f 75 74 2d 3e 7a 3b 0a 20 20 20 20   = pOut->z;.    
8ab0: 70 4f 70 2d 3e 70 31 20 3d 20 70 4f 75 74 2d 3e  pOp->p1 = pOut->
8ac0: 6e 3b 0a 20 20 7d 0a 20 20 74 65 73 74 63 61 73  n;.  }.  testcas
8ad0: 65 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 54 4f  e( rc==SQLITE_TO
8ae0: 4f 42 49 47 20 29 3b 0a 23 65 6e 64 69 66 0a 20  OBIG );.#endif. 
8af0: 20 69 66 28 20 70 4f 70 2d 3e 70 31 3e 64 62 2d   if( pOp->p1>db-
8b00: 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
8b10: 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a  IMIT_LENGTH] ){.
8b20: 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
8b30: 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20  ;.  }.  assert( 
8b40: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
8b50: 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75  .  /* Fall throu
8b60: 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 63  gh to the next c
8b70: 61 73 65 2c 20 4f 50 5f 53 74 72 69 6e 67 20 2a  ase, OP_String *
8b80: 2f 0a 7d 0a 20 20 0a 2f 2a 20 4f 70 63 6f 64 65  /.}.  ./* Opcode
8b90: 3a 20 53 74 72 69 6e 67 20 50 31 20 50 32 20 50  : String P1 P2 P
8ba0: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
8bb0: 73 69 73 3a 20 72 5b 50 32 5d 3d 27 50 34 27 20  sis: r[P2]='P4' 
8bc0: 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20 54  (len=P1).**.** T
8bd0: 68 65 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20  he string value 
8be0: 50 34 20 6f 66 20 6c 65 6e 67 74 68 20 50 31 20  P4 of length P1 
8bf0: 28 62 79 74 65 73 29 20 69 73 20 73 74 6f 72 65  (bytes) is store
8c00: 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  d in register P2
8c10: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 20 69 73  ..**.** If P3 is
8c20: 20 6e 6f 74 20 7a 65 72 6f 20 61 6e 64 20 74 68   not zero and th
8c30: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67  e content of reg
8c40: 69 73 74 65 72 20 50 33 20 69 73 20 65 71 75 61  ister P3 is equa
8c50: 6c 20 74 6f 20 50 35 2c 20 74 68 65 6e 0a 2a 2a  l to P5, then.**
8c60: 20 74 68 65 20 64 61 74 61 74 79 70 65 20 6f 66   the datatype of
8c70: 20 74 68 65 20 72 65 67 69 73 74 65 72 20 50 32   the register P2
8c80: 20 69 73 20 63 6f 6e 76 65 72 74 65 64 20 74 6f   is converted to
8c90: 20 42 4c 4f 42 2e 20 20 54 68 65 20 63 6f 6e 74   BLOB.  The cont
8ca0: 65 6e 74 20 69 73 0a 2a 2a 20 74 68 65 20 73 61  ent is.** the sa
8cb0: 6d 65 20 73 65 71 75 65 6e 63 65 20 6f 66 20 62  me sequence of b
8cc0: 79 74 65 73 2c 20 69 74 20 69 73 20 6d 65 72 65  ytes, it is mere
8cd0: 6c 79 20 69 6e 74 65 72 70 72 65 74 65 64 20 61  ly interpreted a
8ce0: 73 20 61 20 42 4c 4f 42 20 69 6e 73 74 65 61 64  s a BLOB instead
8cf0: 0a 2a 2a 20 6f 66 20 61 20 73 74 72 69 6e 67 2c  .** of a string,
8d00: 20 61 73 20 69 66 20 69 74 20 68 61 64 20 62 65   as if it had be
8d10: 65 6e 20 43 41 53 54 2e 20 20 49 6e 20 6f 74 68  en CAST.  In oth
8d20: 65 72 20 77 6f 72 64 73 3a 0a 2a 2a 0a 2a 2a 20  er words:.**.** 
8d30: 69 66 28 20 50 33 21 3d 30 20 61 6e 64 20 72 65  if( P3!=0 and re
8d40: 67 5b 50 33 5d 3d 3d 50 35 20 29 20 72 65 67 5b  g[P3]==P5 ) reg[
8d50: 50 32 5d 20 3a 3d 20 43 41 53 54 28 72 65 67 5b  P2] := CAST(reg[
8d60: 50 32 5d 20 61 73 20 42 4c 4f 42 29 0a 2a 2f 0a  P2] as BLOB).*/.
8d70: 63 61 73 65 20 4f 50 5f 53 74 72 69 6e 67 3a 20  case OP_String: 
8d80: 7b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75  {          /* ou
8d90: 74 32 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  t2 */.  assert( 
8da0: 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a  pOp->p4.z!=0 );.
8db0: 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
8dc0: 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
8dd0: 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
8de0: 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74 61   MEM_Str|MEM_Sta
8df0: 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20  tic|MEM_Term;.  
8e00: 70 4f 75 74 2d 3e 7a 20 3d 20 70 4f 70 2d 3e 70  pOut->z = pOp->p
8e10: 34 2e 7a 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d  4.z;.  pOut->n =
8e20: 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 4f 75 74   pOp->p1;.  pOut
8e30: 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67  ->enc = encoding
8e40: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
8e50: 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 23  LOBSIZE(pOut);.#
8e60: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4c 49  ifndef SQLITE_LI
8e70: 4b 45 5f 44 4f 45 53 4e 54 5f 4d 41 54 43 48 5f  KE_DOESNT_MATCH_
8e80: 42 4c 4f 42 53 0a 20 20 69 66 28 20 70 4f 70 2d  BLOBS.  if( pOp-
8e90: 3e 70 33 3e 30 20 29 7b 0a 20 20 20 20 61 73 73  >p3>0 ){.    ass
8ea0: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  ert( pOp->p3<=(p
8eb0: 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
8ec0: 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 70 49  ursor) );.    pI
8ed0: 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
8ee0: 70 33 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28  p3];.    assert(
8ef0: 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn3->flags & M
8f00: 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 69 66  EM_Int );.    if
8f10: 28 20 70 49 6e 33 2d 3e 75 2e 69 3d 3d 70 4f 70  ( pIn3->u.i==pOp
8f20: 2d 3e 70 35 20 29 20 70 4f 75 74 2d 3e 66 6c 61  ->p5 ) pOut->fla
8f30: 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 7c 4d 45  gs = MEM_Blob|ME
8f40: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72  M_Static|MEM_Ter
8f50: 6d 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  m;.  }.#endif.  
8f60: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
8f70: 6f 64 65 3a 20 4e 75 6c 6c 20 50 31 20 50 32 20  ode: Null P1 P2 
8f80: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
8f90: 69 73 3a 20 72 5b 50 32 2e 2e 50 33 5d 3d 4e 55  is: r[P2..P3]=NU
8fa0: 4c 4c 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61  LL.**.** Write a
8fb0: 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73   NULL into regis
8fc0: 74 65 72 73 20 50 32 2e 20 20 49 66 20 50 33 20  ters P2.  If P3 
8fd0: 67 72 65 61 74 65 72 20 74 68 61 6e 20 50 32 2c  greater than P2,
8fe0: 20 74 68 65 6e 20 61 6c 73 6f 20 77 72 69 74 65   then also write
8ff0: 0a 2a 2a 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65  .** NULL into re
9000: 67 69 73 74 65 72 20 50 33 20 61 6e 64 20 65 76  gister P3 and ev
9010: 65 72 79 20 72 65 67 69 73 74 65 72 20 69 6e 20  ery register in 
9020: 62 65 74 77 65 65 6e 20 50 32 20 61 6e 64 20 50  between P2 and P
9030: 33 2e 20 20 49 66 20 50 33 0a 2a 2a 20 69 73 20  3.  If P3.** is 
9040: 6c 65 73 73 20 74 68 61 6e 20 50 32 20 28 74 79  less than P2 (ty
9050: 70 69 63 61 6c 6c 79 20 50 33 20 69 73 20 7a 65  pically P3 is ze
9060: 72 6f 29 20 74 68 65 6e 20 6f 6e 6c 79 20 72 65  ro) then only re
9070: 67 69 73 74 65 72 20 50 32 20 69 73 0a 2a 2a 20  gister P2 is.** 
9080: 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 0a 2a 2a 0a  set to NULL..**.
9090: 2a 2a 20 49 66 20 74 68 65 20 50 31 20 76 61 6c  ** If the P1 val
90a0: 75 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  ue is non-zero, 
90b0: 74 68 65 6e 20 61 6c 73 6f 20 73 65 74 20 74 68  then also set th
90c0: 65 20 4d 45 4d 5f 43 6c 65 61 72 65 64 20 66 6c  e MEM_Cleared fl
90d0: 61 67 20 73 6f 20 74 68 61 74 0a 2a 2a 20 4e 55  ag so that.** NU
90e0: 4c 4c 20 76 61 6c 75 65 73 20 77 69 6c 6c 20 6e  LL values will n
90f0: 6f 74 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c  ot compare equal
9100: 20 65 76 65 6e 20 69 66 20 53 51 4c 49 54 45 5f   even if SQLITE_
9110: 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20 6f 6e  NULLEQ is set on
9120: 0a 2a 2a 20 4f 50 5f 4e 65 20 6f 72 20 4f 50 5f  .** OP_Ne or OP_
9130: 45 71 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  Eq..*/.case OP_N
9140: 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ull: {          
9150: 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e   /* out2 */.  in
9160: 74 20 63 6e 74 3b 0a 20 20 75 31 36 20 6e 75 6c  t cnt;.  u16 nul
9170: 6c 46 6c 61 67 3b 0a 20 20 70 4f 75 74 20 3d 20  lFlag;.  pOut = 
9180: 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
9190: 2c 20 70 4f 70 29 3b 0a 20 20 63 6e 74 20 3d 20  , pOp);.  cnt = 
91a0: 70 4f 70 2d 3e 70 33 2d 70 4f 70 2d 3e 70 32 3b  pOp->p3-pOp->p2;
91b0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
91c0: 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  p3<=(p->nMem+1 -
91d0: 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a   p->nCursor) );.
91e0: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
91f0: 6e 75 6c 6c 46 6c 61 67 20 3d 20 70 4f 70 2d 3e  nullFlag = pOp->
9200: 70 31 20 3f 20 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d  p1 ? (MEM_Null|M
9210: 45 4d 5f 43 6c 65 61 72 65 64 29 20 3a 20 4d 45  EM_Cleared) : ME
9220: 4d 5f 4e 75 6c 6c 3b 0a 20 20 70 4f 75 74 2d 3e  M_Null;.  pOut->
9230: 6e 20 3d 20 30 3b 0a 20 20 77 68 69 6c 65 28 20  n = 0;.  while( 
9240: 63 6e 74 3e 30 20 29 7b 0a 20 20 20 20 70 4f 75  cnt>0 ){.    pOu
9250: 74 2b 2b 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75  t++;.    memAbou
9260: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75  tToChange(p, pOu
9270: 74 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  t);.    sqlite3V
9280: 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f  dbeMemSetNull(pO
9290: 75 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  ut);.    pOut->f
92a0: 6c 61 67 73 20 3d 20 6e 75 6c 6c 46 6c 61 67 3b  lags = nullFlag;
92b0: 0a 20 20 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 30  .    pOut->n = 0
92c0: 3b 0a 20 20 20 20 63 6e 74 2d 2d 3b 0a 20 20 7d  ;.    cnt--;.  }
92d0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
92e0: 4f 70 63 6f 64 65 3a 20 53 6f 66 74 4e 75 6c 6c  Opcode: SoftNull
92f0: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 20 53   P1 * * * *.** S
9300: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d 4e  ynopsis: r[P1]=N
9310: 55 4c 4c 0a 2a 2a 0a 2a 2a 20 53 65 74 20 72 65  ULL.**.** Set re
9320: 67 69 73 74 65 72 20 50 31 20 74 6f 20 68 61 76  gister P1 to hav
9330: 65 20 74 68 65 20 76 61 6c 75 65 20 4e 55 4c 4c  e the value NULL
9340: 20 61 73 20 73 65 65 6e 20 62 79 20 74 68 65 20   as seen by the 
9350: 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 0a 2a 2a  OP_MakeRecord.**
9360: 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c 20 62 75   instruction, bu
9370: 74 20 64 6f 20 6e 6f 74 20 66 72 65 65 20 61 6e  t do not free an
9380: 79 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62  y string or blob
9390: 20 6d 65 6d 6f 72 79 20 61 73 73 6f 63 69 61 74   memory associat
93a0: 65 64 20 77 69 74 68 0a 2a 2a 20 74 68 65 20 72  ed with.** the r
93b0: 65 67 69 73 74 65 72 2c 20 73 6f 20 74 68 61 74  egister, so that
93c0: 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 77 61   if the value wa
93d0: 73 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c  s a string or bl
93e0: 6f 62 20 74 68 61 74 20 77 61 73 0a 2a 2a 20 70  ob that was.** p
93f0: 72 65 76 69 6f 75 73 6c 79 20 63 6f 70 69 65 64  reviously copied
9400: 20 75 73 69 6e 67 20 4f 50 5f 53 43 6f 70 79 2c   using OP_SCopy,
9410: 20 74 68 65 20 63 6f 70 69 65 73 20 77 69 6c 6c   the copies will
9420: 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20 62 65 20   continue to be 
9430: 76 61 6c 69 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  valid..*/.case O
9440: 50 5f 53 6f 66 74 4e 75 6c 6c 3a 20 7b 0a 20 20  P_SoftNull: {.  
9450: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
9460: 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70  0 && pOp->p1<=(p
9470: 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
9480: 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74  ursor) );.  pOut
9490: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
94a0: 5d 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  ];.  pOut->flags
94b0: 20 3d 20 28 70 4f 75 74 2d 3e 66 6c 61 67 73 7c   = (pOut->flags|
94c0: 4d 45 4d 5f 4e 75 6c 6c 29 26 7e 4d 45 4d 5f 55  MEM_Null)&~MEM_U
94d0: 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61  ndefined;.  brea
94e0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
94f0: 20 42 6c 6f 62 20 50 31 20 50 32 20 2a 20 50 34   Blob P1 P2 * P4
9500: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
9510: 72 5b 50 32 5d 3d 50 34 20 28 6c 65 6e 3d 50 31  r[P2]=P4 (len=P1
9520: 29 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74  ).**.** P4 point
9530: 73 20 74 6f 20 61 20 62 6c 6f 62 20 6f 66 20 64  s to a blob of d
9540: 61 74 61 20 50 31 20 62 79 74 65 73 20 6c 6f 6e  ata P1 bytes lon
9550: 67 2e 20 20 53 74 6f 72 65 20 74 68 69 73 0a 2a  g.  Store this.*
9560: 2a 20 62 6c 6f 62 20 69 6e 20 72 65 67 69 73 74  * blob in regist
9570: 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
9580: 50 5f 42 6c 6f 62 3a 20 7b 20 20 20 20 20 20 20  P_Blob: {       
9590: 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
95a0: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
95b0: 70 2d 3e 70 31 20 3c 3d 20 53 51 4c 49 54 45 5f  p->p1 <= SQLITE_
95c0: 4d 41 58 5f 4c 45 4e 47 54 48 20 29 3b 0a 20 20  MAX_LENGTH );.  
95d0: 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
95e0: 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
95f0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
9600: 65 74 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d  etStr(pOut, pOp-
9610: 3e 70 34 2e 7a 2c 20 70 4f 70 2d 3e 70 31 2c 20  >p4.z, pOp->p1, 
9620: 30 2c 20 30 29 3b 0a 20 20 70 4f 75 74 2d 3e 65  0, 0);.  pOut->e
9630: 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20  nc = encoding;. 
9640: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
9650: 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72  SIZE(pOut);.  br
9660: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
9670: 65 3a 20 56 61 72 69 61 62 6c 65 20 50 31 20 50  e: Variable P1 P
9680: 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f  2 * P4 *.** Syno
9690: 70 73 69 73 3a 20 72 5b 50 32 5d 3d 70 61 72 61  psis: r[P2]=para
96a0: 6d 65 74 65 72 28 50 31 2c 50 34 29 0a 2a 2a 0a  meter(P1,P4).**.
96b0: 2a 2a 20 54 72 61 6e 73 66 65 72 20 74 68 65 20  ** Transfer the 
96c0: 76 61 6c 75 65 73 20 6f 66 20 62 6f 75 6e 64 20  values of bound 
96d0: 70 61 72 61 6d 65 74 65 72 20 50 31 20 69 6e 74  parameter P1 int
96e0: 6f 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a  o register P2.**
96f0: 0a 2a 2a 20 49 66 20 74 68 65 20 70 61 72 61 6d  .** If the param
9700: 65 74 65 72 20 69 73 20 6e 61 6d 65 64 2c 20 74  eter is named, t
9710: 68 65 6e 20 69 74 73 20 6e 61 6d 65 20 61 70 70  hen its name app
9720: 65 61 72 73 20 69 6e 20 50 34 2e 0a 2a 2a 20 54  ears in P4..** T
9730: 68 65 20 50 34 20 76 61 6c 75 65 20 69 73 20 75  he P4 value is u
9740: 73 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 62  sed by sqlite3_b
9750: 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61  ind_parameter_na
9760: 6d 65 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  me()..*/.case OP
9770: 5f 56 61 72 69 61 62 6c 65 3a 20 7b 20 20 20 20  _Variable: {    
9780: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
9790: 2a 2f 0a 20 20 4d 65 6d 20 2a 70 56 61 72 3b 20  */.  Mem *pVar; 
97a0: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 62        /* Value b
97b0: 65 69 6e 67 20 74 72 61 6e 73 66 65 72 72 65 64  eing transferred
97c0: 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70   */..  assert( p
97d0: 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d  Op->p1>0 && pOp-
97e0: 3e 70 31 3c 3d 70 2d 3e 6e 56 61 72 20 29 3b 0a  >p1<=p->nVar );.
97f0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
9800: 34 2e 7a 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70  4.z==0 || pOp->p
9810: 34 2e 7a 3d 3d 73 71 6c 69 74 65 33 56 4c 69 73  4.z==sqlite3VLis
9820: 74 4e 75 6d 54 6f 4e 61 6d 65 28 70 2d 3e 70 56  tNumToName(p->pV
9830: 4c 69 73 74 2c 70 4f 70 2d 3e 70 31 29 20 29 3b  List,pOp->p1) );
9840: 0a 20 20 70 56 61 72 20 3d 20 26 70 2d 3e 61 56  .  pVar = &p->aV
9850: 61 72 5b 70 4f 70 2d 3e 70 31 20 2d 20 31 5d 3b  ar[pOp->p1 - 1];
9860: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64  .  if( sqlite3Vd
9870: 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 56 61 72  beMemTooBig(pVar
9880: 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ) ){.    goto to
9890: 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 70 4f 75  o_big;.  }.  pOu
98a0: 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
98b0: 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 73 71  se(p, pOp);.  sq
98c0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c  lite3VdbeMemShal
98d0: 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 56  lowCopy(pOut, pV
98e0: 61 72 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b  ar, MEM_Static);
98f0: 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
9900: 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20  OBSIZE(pOut);.  
9910: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
9920: 6f 64 65 3a 20 4d 6f 76 65 20 50 31 20 50 32 20  ode: Move P1 P2 
9930: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
9940: 69 73 3a 20 72 5b 50 32 40 50 33 5d 3d 72 5b 50  is: r[P2@P3]=r[P
9950: 31 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65  1@P3].**.** Move
9960: 20 74 68 65 20 50 33 20 76 61 6c 75 65 73 20 69   the P3 values i
9970: 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 2e 50  n register P1..P
9980: 31 2b 50 33 2d 31 20 6f 76 65 72 20 69 6e 74 6f  1+P3-1 over into
9990: 0a 2a 2a 20 72 65 67 69 73 74 65 72 73 20 50 32  .** registers P2
99a0: 2e 2e 50 32 2b 50 33 2d 31 2e 20 20 52 65 67 69  ..P2+P3-1.  Regi
99b0: 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 33 2d  sters P1..P1+P3-
99c0: 31 20 61 72 65 0a 2a 2a 20 6c 65 66 74 20 68 6f  1 are.** left ho
99d0: 6c 64 69 6e 67 20 61 20 4e 55 4c 4c 2e 20 20 49  lding a NULL.  I
99e0: 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f  t is an error fo
99f0: 72 20 72 65 67 69 73 74 65 72 20 72 61 6e 67 65  r register range
9a00: 73 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50 33 2d 31  s.** P1..P1+P3-1
9a10: 20 61 6e 64 20 50 32 2e 2e 50 32 2b 50 33 2d 31   and P2..P2+P3-1
9a20: 20 74 6f 20 6f 76 65 72 6c 61 70 2e 20 20 49 74   to overlap.  It
9a30: 20 69 73 20 61 6e 20 65 72 72 6f 72 0a 2a 2a 20   is an error.** 
9a40: 66 6f 72 20 50 33 20 74 6f 20 62 65 20 6c 65 73  for P3 to be les
9a50: 73 20 74 68 61 6e 20 31 2e 0a 2a 2f 0a 63 61 73  s than 1..*/.cas
9a60: 65 20 4f 50 5f 4d 6f 76 65 3a 20 7b 0a 20 20 69  e OP_Move: {.  i
9a70: 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20  nt n;           
9a80: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 67  /* Number of reg
9a90: 69 73 74 65 72 73 20 6c 65 66 74 20 74 6f 20 63  isters left to c
9aa0: 6f 70 79 20 2a 2f 0a 20 20 69 6e 74 20 70 31 3b  opy */.  int p1;
9ab0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67            /* Reg
9ac0: 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20 66 72  ister to copy fr
9ad0: 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b 20  om */.  int p2; 
9ae0: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69           /* Regi
9af0: 73 74 65 72 20 74 6f 20 63 6f 70 79 20 74 6f 20  ster to copy to 
9b00: 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70  */..  n = pOp->p
9b10: 33 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70  3;.  p1 = pOp->p
9b20: 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70  1;.  p2 = pOp->p
9b30: 32 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 30  2;.  assert( n>0
9b40: 20 26 26 20 70 31 3e 30 20 26 26 20 70 32 3e 30   && p1>0 && p2>0
9b50: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31   );.  assert( p1
9b60: 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32 2b 6e 3c 3d  +n<=p2 || p2+n<=
9b70: 70 31 20 29 3b 0a 0a 20 20 70 49 6e 31 20 3d 20  p1 );..  pIn1 = 
9b80: 26 61 4d 65 6d 5b 70 31 5d 3b 0a 20 20 70 4f 75  &aMem[p1];.  pOu
9b90: 74 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20  t = &aMem[p2];. 
9ba0: 20 64 6f 7b 0a 20 20 20 20 61 73 73 65 72 74 28   do{.    assert(
9bb0: 20 70 4f 75 74 3c 3d 26 61 4d 65 6d 5b 28 70 2d   pOut<=&aMem[(p-
9bc0: 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
9bd0: 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73  rsor)] );.    as
9be0: 73 65 72 74 28 20 70 49 6e 31 3c 3d 26 61 4d 65  sert( pIn1<=&aMe
9bf0: 6d 5b 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  m[(p->nMem+1 - p
9c00: 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20  ->nCursor)] );. 
9c10: 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
9c20: 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20  Valid(pIn1) );. 
9c30: 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
9c40: 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20  nge(p, pOut);.  
9c50: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
9c60: 4d 6f 76 65 28 70 4f 75 74 2c 20 70 49 6e 31 29  Move(pOut, pIn1)
9c70: 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
9c80: 44 45 42 55 47 0a 20 20 20 20 69 66 28 20 70 4f  DEBUG.    if( pO
9c90: 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3e 3d  ut->pScopyFrom>=
9ca0: 26 61 4d 65 6d 5b 70 31 5d 20 26 26 20 70 4f 75  &aMem[p1] && pOu
9cb0: 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3c 70 4f  t->pScopyFrom<pO
9cc0: 75 74 20 29 7b 0a 20 20 20 20 20 20 70 4f 75 74  ut ){.      pOut
9cd0: 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 2b 3d 20  ->pScopyFrom += 
9ce0: 70 4f 70 2d 3e 70 32 20 2d 20 70 31 3b 0a 20 20  pOp->p2 - p1;.  
9cf0: 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 44    }.#endif.    D
9d00: 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 4f  eephemeralize(pO
9d10: 75 74 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45  ut);.    REGISTE
9d20: 52 5f 54 52 41 43 45 28 70 32 2b 2b 2c 20 70 4f  R_TRACE(p2++, pO
9d30: 75 74 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b  ut);.    pIn1++;
9d40: 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 7d  .    pOut++;.  }
9d50: 77 68 69 6c 65 28 20 2d 2d 6e 20 29 3b 0a 20 20  while( --n );.  
9d60: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
9d70: 6f 64 65 3a 20 43 6f 70 79 20 50 31 20 50 32 20  ode: Copy P1 P2 
9d80: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
9d90: 69 73 3a 20 72 5b 50 32 40 50 33 2b 31 5d 3d 72  is: r[P2@P3+1]=r
9da0: 5b 50 31 40 50 33 2b 31 5d 0a 2a 2a 0a 2a 2a 20  [P1@P3+1].**.** 
9db0: 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f 66 20 72  Make a copy of r
9dc0: 65 67 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b  egisters P1..P1+
9dd0: 50 33 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  P3 into register
9de0: 73 20 50 32 2e 2e 50 32 2b 50 33 2e 0a 2a 2a 0a  s P2..P2+P3..**.
9df0: 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
9e00: 69 6f 6e 20 6d 61 6b 65 73 20 61 20 64 65 65 70  ion makes a deep
9e10: 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61 6c   copy of the val
9e20: 75 65 2e 20 20 41 20 64 75 70 6c 69 63 61 74 65  ue.  A duplicate
9e30: 0a 2a 2a 20 69 73 20 6d 61 64 65 20 6f 66 20 61  .** is made of a
9e40: 6e 79 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f  ny string or blo
9e50: 62 20 63 6f 6e 73 74 61 6e 74 2e 20 20 53 65 65  b constant.  See
9e60: 20 61 6c 73 6f 20 4f 50 5f 53 43 6f 70 79 2e 0a   also OP_SCopy..
9e70: 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 70 79 3a  */.case OP_Copy:
9e80: 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20 20 6e   {.  int n;..  n
9e90: 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 49   = pOp->p3;.  pI
9ea0: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
9eb0: 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  p1];.  pOut = &a
9ec0: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
9ed0: 61 73 73 65 72 74 28 20 70 4f 75 74 21 3d 70 49  assert( pOut!=pI
9ee0: 6e 31 20 29 3b 0a 20 20 77 68 69 6c 65 28 20 31  n1 );.  while( 1
9ef0: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
9f00: 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70  dbeMemShallowCop
9f10: 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45  y(pOut, pIn1, ME
9f20: 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 20 20 44 65  M_Ephem);.    De
9f30: 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 4f 75  ephemeralize(pOu
9f40: 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  t);.#ifdef SQLIT
9f50: 45 5f 44 45 42 55 47 0a 20 20 20 20 70 4f 75 74  E_DEBUG.    pOut
9f60: 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 3d 20 30  ->pScopyFrom = 0
9f70: 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 52 45 47  ;.#endif.    REG
9f80: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
9f90: 3e 70 32 2b 70 4f 70 2d 3e 70 33 2d 6e 2c 20 70  >p2+pOp->p3-n, p
9fa0: 4f 75 74 29 3b 0a 20 20 20 20 69 66 28 20 28 6e  Out);.    if( (n
9fb0: 2d 2d 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a  --)==0 ) break;.
9fc0: 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 20 20      pOut++;.    
9fd0: 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72  pIn1++;.  }.  br
9fe0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
9ff0: 65 3a 20 53 43 6f 70 79 20 50 31 20 50 32 20 2a  e: SCopy P1 P2 *
a000: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
a010: 3a 20 72 5b 50 32 5d 3d 72 5b 50 31 5d 0a 2a 2a  : r[P2]=r[P1].**
a020: 0a 2a 2a 20 4d 61 6b 65 20 61 20 73 68 61 6c 6c  .** Make a shall
a030: 6f 77 20 63 6f 70 79 20 6f 66 20 72 65 67 69 73  ow copy of regis
a040: 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69  ter P1 into regi
a050: 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  ster P2..**.** T
a060: 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
a070: 6d 61 6b 65 73 20 61 20 73 68 61 6c 6c 6f 77 20  makes a shallow 
a080: 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61 6c 75  copy of the valu
a090: 65 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  e.  If the value
a0a0: 0a 2a 2a 20 69 73 20 61 20 73 74 72 69 6e 67 20  .** is a string 
a0b0: 6f 72 20 62 6c 6f 62 2c 20 74 68 65 6e 20 74 68  or blob, then th
a0c0: 65 20 63 6f 70 79 20 69 73 20 6f 6e 6c 79 20 61  e copy is only a
a0d0: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 0a   pointer to the.
a0e0: 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 61 6e 64 20  ** original and 
a0f0: 68 65 6e 63 65 20 69 66 20 74 68 65 20 6f 72 69  hence if the ori
a100: 67 69 6e 61 6c 20 63 68 61 6e 67 65 73 20 73 6f  ginal changes so
a110: 20 77 69 6c 6c 20 74 68 65 20 63 6f 70 79 2e 0a   will the copy..
a120: 2a 2a 20 57 6f 72 73 65 2c 20 69 66 20 74 68 65  ** Worse, if the
a130: 20 6f 72 69 67 69 6e 61 6c 20 69 73 20 64 65 61   original is dea
a140: 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 20 63 6f  llocated, the co
a150: 70 79 20 62 65 63 6f 6d 65 73 20 69 6e 76 61 6c  py becomes inval
a160: 69 64 2e 0a 2a 2a 20 54 68 75 73 20 74 68 65 20  id..** Thus the 
a170: 70 72 6f 67 72 61 6d 20 6d 75 73 74 20 67 75 61  program must gua
a180: 72 61 6e 74 65 65 20 74 68 61 74 20 74 68 65 20  rantee that the 
a190: 6f 72 69 67 69 6e 61 6c 20 77 69 6c 6c 20 6e 6f  original will no
a1a0: 74 20 63 68 61 6e 67 65 0a 2a 2a 20 64 75 72 69  t change.** duri
a1b0: 6e 67 20 74 68 65 20 6c 69 66 65 74 69 6d 65 20  ng the lifetime 
a1c0: 6f 66 20 74 68 65 20 63 6f 70 79 2e 20 20 55 73  of the copy.  Us
a1d0: 65 20 4f 50 5f 43 6f 70 79 20 74 6f 20 6d 61 6b  e OP_Copy to mak
a1e0: 65 20 61 20 63 6f 6d 70 6c 65 74 65 0a 2a 2a 20  e a complete.** 
a1f0: 63 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  copy..*/.case OP
a200: 5f 53 43 6f 70 79 3a 20 7b 20 20 20 20 20 20 20  _SCopy: {       
a210: 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
a220: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
a230: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20  Op->p1];.  pOut 
a240: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
a250: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 75 74  ;.  assert( pOut
a260: 21 3d 70 49 6e 31 20 29 3b 0a 20 20 73 71 6c 69  !=pIn1 );.  sqli
a270: 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f  te3VdbeMemShallo
a280: 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 31  wCopy(pOut, pIn1
a290: 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 23 69  , MEM_Ephem);.#i
a2a0: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
a2b0: 47 0a 20 20 69 66 28 20 70 4f 75 74 2d 3e 70 53  G.  if( pOut->pS
a2c0: 63 6f 70 79 46 72 6f 6d 3d 3d 30 20 29 20 70 4f  copyFrom==0 ) pO
a2d0: 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 3d  ut->pScopyFrom =
a2e0: 20 70 49 6e 31 3b 0a 23 65 6e 64 69 66 0a 20 20   pIn1;.#endif.  
a2f0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
a300: 6f 64 65 3a 20 49 6e 74 43 6f 70 79 20 50 31 20  ode: IntCopy P1 
a310: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
a320: 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 5b 50 31  psis: r[P2]=r[P1
a330: 5d 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72  ].**.** Transfer
a340: 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c   the integer val
a350: 75 65 20 68 65 6c 64 20 69 6e 20 72 65 67 69 73  ue held in regis
a360: 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69  ter P1 into regi
a370: 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  ster P2..**.** T
a380: 68 69 73 20 69 73 20 61 6e 20 6f 70 74 69 6d 69  his is an optimi
a390: 7a 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 53  zed version of S
a3a0: 43 6f 70 79 20 74 68 61 74 20 77 6f 72 6b 73 20  Copy that works 
a3b0: 6f 6e 6c 79 20 66 6f 72 20 69 6e 74 65 67 65 72  only for integer
a3c0: 0a 2a 2a 20 76 61 6c 75 65 73 2e 0a 2a 2f 0a 63  .** values..*/.c
a3d0: 61 73 65 20 4f 50 5f 49 6e 74 43 6f 70 79 3a 20  ase OP_IntCopy: 
a3e0: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
a3f0: 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d  out2 */.  pIn1 =
a400: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
a410: 0a 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 31  .  assert( (pIn1
a420: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
a430: 74 29 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 20  t)!=0 );.  pOut 
a440: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
a450: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
a460: 65 6d 53 65 74 49 6e 74 36 34 28 70 4f 75 74 2c  emSetInt64(pOut,
a470: 20 70 49 6e 31 2d 3e 75 2e 69 29 3b 0a 20 20 62   pIn1->u.i);.  b
a480: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
a490: 64 65 3a 20 52 65 73 75 6c 74 52 6f 77 20 50 31  de: ResultRow P1
a4a0: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
a4b0: 6f 70 73 69 73 3a 20 6f 75 74 70 75 74 3d 72 5b  opsis: output=r[
a4c0: 50 31 40 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 68 65  P1@P2].**.** The
a4d0: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 74 68   registers P1 th
a4e0: 72 6f 75 67 68 20 50 31 2b 50 32 2d 31 20 63 6f  rough P1+P2-1 co
a4f0: 6e 74 61 69 6e 20 61 20 73 69 6e 67 6c 65 20 72  ntain a single r
a500: 6f 77 20 6f 66 0a 2a 2a 20 72 65 73 75 6c 74 73  ow of.** results
a510: 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 63 61  . This opcode ca
a520: 75 73 65 73 20 74 68 65 20 73 71 6c 69 74 65 33  uses the sqlite3
a530: 5f 73 74 65 70 28 29 20 63 61 6c 6c 20 74 6f 20  _step() call to 
a540: 74 65 72 6d 69 6e 61 74 65 0a 2a 2a 20 77 69 74  terminate.** wit
a550: 68 20 61 6e 20 53 51 4c 49 54 45 5f 52 4f 57 20  h an SQLITE_ROW 
a560: 72 65 74 75 72 6e 20 63 6f 64 65 20 61 6e 64 20  return code and 
a570: 69 74 20 73 65 74 73 20 75 70 20 74 68 65 20 73  it sets up the s
a580: 71 6c 69 74 65 33 5f 73 74 6d 74 0a 2a 2a 20 73  qlite3_stmt.** s
a590: 74 72 75 63 74 75 72 65 20 74 6f 20 70 72 6f 76  tructure to prov
a5a0: 69 64 65 20 61 63 63 65 73 73 20 74 6f 20 74 68  ide access to th
a5b0: 65 20 72 28 50 31 29 2e 2e 72 28 50 31 2b 50 32  e r(P1)..r(P1+P2
a5c0: 2d 31 29 20 76 61 6c 75 65 73 20 61 73 0a 2a 2a  -1) values as.**
a5d0: 20 74 68 65 20 72 65 73 75 6c 74 20 72 6f 77 2e   the result row.
a5e0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 75  .*/.case OP_Resu
a5f0: 6c 74 52 6f 77 3a 20 7b 0a 20 20 4d 65 6d 20 2a  ltRow: {.  Mem *
a600: 70 4d 65 6d 3b 0a 20 20 69 6e 74 20 69 3b 0a 20  pMem;.  int i;. 
a610: 20 61 73 73 65 72 74 28 20 70 2d 3e 6e 52 65 73   assert( p->nRes
a620: 43 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e 70 32 20  Column==pOp->p2 
a630: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
a640: 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 61 73 73 65  ->p1>0 );.  asse
a650: 72 74 28 20 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d  rt( pOp->p1+pOp-
a660: 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  >p2<=(p->nMem+1 
a670: 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20  - p->nCursor)+1 
a680: 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  );..#ifndef SQLI
a690: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
a6a0: 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 2f 2a 20 52  _CALLBACK.  /* R
a6b0: 75 6e 20 74 68 65 20 70 72 6f 67 72 65 73 73 20  un the progress 
a6c0: 63 6f 75 6e 74 65 72 20 6a 75 73 74 20 62 65 66  counter just bef
a6d0: 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 2e 0a 20  ore returning.. 
a6e0: 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78 50   */.  if( db->xP
a6f0: 72 6f 67 72 65 73 73 21 3d 30 0a 20 20 20 26 26  rogress!=0.   &&
a700: 20 6e 56 6d 53 74 65 70 3e 3d 6e 50 72 6f 67 72   nVmStep>=nProgr
a710: 65 73 73 4c 69 6d 69 74 0a 20 20 20 26 26 20 64  essLimit.   && d
a720: 62 2d 3e 78 50 72 6f 67 72 65 73 73 28 64 62 2d  b->xProgress(db-
a730: 3e 70 50 72 6f 67 72 65 73 73 41 72 67 29 21 3d  >pProgressArg)!=
a740: 30 0a 20 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  0.  ){.    rc = 
a750: 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54  SQLITE_INTERRUPT
a760: 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74  ;.    goto abort
a770: 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
a780: 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20   }.#endif..  /* 
a790: 49 66 20 74 68 69 73 20 73 74 61 74 65 6d 65 6e  If this statemen
a7a0: 74 20 68 61 73 20 76 69 6f 6c 61 74 65 64 20 69  t has violated i
a7b0: 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e  mmediate foreign
a7c0: 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
a7d0: 2c 20 64 6f 0a 20 20 2a 2a 20 6e 6f 74 20 72 65  , do.  ** not re
a7e0: 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20  turn the number 
a7f0: 6f 66 20 72 6f 77 73 20 6d 6f 64 69 66 69 65 64  of rows modified
a800: 2e 20 41 6e 64 20 64 6f 20 6e 6f 74 20 52 45 4c  . And do not REL
a810: 45 41 53 45 20 74 68 65 20 73 74 61 74 65 6d 65  EASE the stateme
a820: 6e 74 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63 74  nt.  ** transact
a830: 69 6f 6e 2e 20 49 74 20 6e 65 65 64 73 20 74 6f  ion. It needs to
a840: 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e   be rolled back.
a850: 20 20 2a 2f 0a 20 20 69 66 28 20 53 51 4c 49 54    */.  if( SQLIT
a860: 45 5f 4f 4b 21 3d 28 72 63 20 3d 20 73 71 6c 69  E_OK!=(rc = sqli
a870: 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70  te3VdbeCheckFk(p
a880: 2c 20 30 29 29 20 29 7b 0a 20 20 20 20 61 73 73  , 0)) ){.    ass
a890: 65 72 74 28 20 64 62 2d 3e 66 6c 61 67 73 26 53  ert( db->flags&S
a8a0: 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20  QLITE_CountRows 
a8b0: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
a8c0: 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61  ->usesStmtJourna
a8d0: 6c 20 29 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62  l );.    goto ab
a8e0: 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
a8f0: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 74  ;.  }..  /* If t
a900: 68 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52  he SQLITE_CountR
a910: 6f 77 73 20 66 6c 61 67 20 69 73 20 73 65 74 20  ows flag is set 
a920: 69 6e 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73  in sqlite3.flags
a930: 20 6d 61 73 6b 2c 20 74 68 65 6e 20 0a 20 20 2a   mask, then .  *
a940: 2a 20 44 4d 4c 20 73 74 61 74 65 6d 65 6e 74 73  * DML statements
a950: 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70 63   invoke this opc
a960: 6f 64 65 20 74 6f 20 72 65 74 75 72 6e 20 74 68  ode to return th
a970: 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  e number of rows
a980: 20 0a 20 20 2a 2a 20 6d 6f 64 69 66 69 65 64 20   .  ** modified 
a990: 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54 68 69  to the user. Thi
a9a0: 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 77 61  s is the only wa
a9b0: 79 20 74 68 61 74 20 61 20 56 4d 20 74 68 61 74  y that a VM that
a9c0: 0a 20 20 2a 2a 20 6f 70 65 6e 73 20 61 20 73 74  .  ** opens a st
a9d0: 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
a9e0: 69 6f 6e 20 6d 61 79 20 69 6e 76 6f 6b 65 20 74  ion may invoke t
a9f0: 68 69 73 20 6f 70 63 6f 64 65 2e 0a 20 20 2a 2a  his opcode..  **
aa00: 0a 20 20 2a 2a 20 49 6e 20 63 61 73 65 20 74 68  .  ** In case th
aa10: 69 73 20 69 73 20 73 75 63 68 20 61 20 73 74 61  is is such a sta
aa20: 74 65 6d 65 6e 74 2c 20 63 6c 6f 73 65 20 61 6e  tement, close an
aa30: 79 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  y statement tran
aa40: 73 61 63 74 69 6f 6e 0a 20 20 2a 2a 20 6f 70 65  saction.  ** ope
aa50: 6e 65 64 20 62 79 20 74 68 69 73 20 56 4d 20 62  ned by this VM b
aa60: 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 20  efore returning 
aa70: 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20 75  control to the u
aa80: 73 65 72 2e 20 54 68 69 73 20 69 73 20 74 6f 0a  ser. This is to.
aa90: 20 20 2a 2a 20 65 6e 73 75 72 65 20 74 68 61 74    ** ensure that
aaa0: 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73   statement-trans
aab0: 61 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 77 61  actions are alwa
aac0: 79 73 20 6e 65 73 74 65 64 2c 20 6e 6f 74 20 6f  ys nested, not o
aad0: 76 65 72 6c 61 70 70 69 6e 67 2e 0a 20 20 2a 2a  verlapping..  **
aae0: 20 49 66 20 74 68 65 20 6f 70 65 6e 20 73 74 61   If the open sta
aaf0: 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69  tement-transacti
ab00: 6f 6e 20 69 73 20 6e 6f 74 20 63 6c 6f 73 65 64  on is not closed
ab10: 20 68 65 72 65 2c 20 74 68 65 6e 20 74 68 65 20   here, then the 
ab20: 75 73 65 72 0a 20 20 2a 2a 20 6d 61 79 20 73 74  user.  ** may st
ab30: 65 70 20 61 6e 6f 74 68 65 72 20 56 4d 20 74 68  ep another VM th
ab40: 61 74 20 6f 70 65 6e 73 20 69 74 73 20 6f 77 6e  at opens its own
ab50: 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
ab60: 61 63 74 69 6f 6e 2e 20 54 68 69 73 0a 20 20 2a  action. This.  *
ab70: 2a 20 6d 61 79 20 6c 65 61 64 20 74 6f 20 6f 76  * may lead to ov
ab80: 65 72 6c 61 70 70 69 6e 67 20 73 74 61 74 65 6d  erlapping statem
ab90: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  ent transactions
aba0: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20  ..  **.  ** The 
abb0: 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
abc0: 63 74 69 6f 6e 20 69 73 20 6e 65 76 65 72 20 61  ction is never a
abd0: 20 74 6f 70 2d 6c 65 76 65 6c 20 74 72 61 6e 73   top-level trans
abe0: 61 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65 0a 20  action.  Hence. 
abf0: 20 2a 2a 20 74 68 65 20 52 45 4c 45 41 53 45 20   ** the RELEASE 
ac00: 63 61 6c 6c 20 62 65 6c 6f 77 20 63 61 6e 20 6e  call below can n
ac10: 65 76 65 72 20 66 61 69 6c 2e 0a 20 20 2a 2f 0a  ever fail..  */.
ac20: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 69 53 74    assert( p->iSt
ac30: 61 74 65 6d 65 6e 74 3d 3d 30 20 7c 7c 20 64 62  atement==0 || db
ac40: 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 43  ->flags&SQLITE_C
ac50: 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 72 63  ountRows );.  rc
ac60: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 6c   = sqlite3VdbeCl
ac70: 6f 73 65 53 74 61 74 65 6d 65 6e 74 28 70 2c 20  oseStatement(p, 
ac80: 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53  SAVEPOINT_RELEAS
ac90: 45 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63  E);.  assert( rc
aca0: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 0a  ==SQLITE_OK );..
acb0: 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65 20    /* Invalidate 
acc0: 61 6c 6c 20 65 70 68 65 6d 65 72 61 6c 20 63 75  all ephemeral cu
acd0: 72 73 6f 72 20 72 6f 77 20 63 61 63 68 65 73 20  rsor row caches 
ace0: 2a 2f 0a 20 20 70 2d 3e 63 61 63 68 65 43 74 72  */.  p->cacheCtr
acf0: 20 3d 20 28 70 2d 3e 63 61 63 68 65 43 74 72 20   = (p->cacheCtr 
ad00: 2b 20 32 29 7c 31 3b 0a 0a 20 20 2f 2a 20 4d 61  + 2)|1;..  /* Ma
ad10: 6b 65 20 73 75 72 65 20 74 68 65 20 72 65 73 75  ke sure the resu
ad20: 6c 74 73 20 6f 66 20 74 68 65 20 63 75 72 72 65  lts of the curre
ad30: 6e 74 20 72 6f 77 20 61 72 65 20 5c 30 30 30 20  nt row are \000 
ad40: 74 65 72 6d 69 6e 61 74 65 64 0a 20 20 2a 2a 20  terminated.  ** 
ad50: 61 6e 64 20 68 61 76 65 20 61 6e 20 61 73 73 69  and have an assi
ad60: 67 6e 65 64 20 74 79 70 65 2e 20 20 54 68 65 20  gned type.  The 
ad70: 72 65 73 75 6c 74 73 20 61 72 65 20 64 65 2d 65  results are de-e
ad80: 70 68 65 6d 65 72 61 6c 69 7a 65 64 20 61 73 0a  phemeralized as.
ad90: 20 20 2a 2a 20 61 20 73 69 64 65 20 65 66 66 65    ** a side effe
ada0: 63 74 2e 0a 20 20 2a 2f 0a 20 20 70 4d 65 6d 20  ct..  */.  pMem 
adb0: 3d 20 70 2d 3e 70 52 65 73 75 6c 74 53 65 74 20  = p->pResultSet 
adc0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
add0: 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70  ;.  for(i=0; i<p
ade0: 4f 70 2d 3e 70 32 3b 20 69 2b 2b 29 7b 0a 20 20  Op->p2; i++){.  
adf0: 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
ae00: 61 6c 69 64 28 26 70 4d 65 6d 5b 69 5d 29 20 29  alid(&pMem[i]) )
ae10: 3b 0a 20 20 20 20 44 65 65 70 68 65 6d 65 72 61  ;.    Deephemera
ae20: 6c 69 7a 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a  lize(&pMem[i]);.
ae30: 20 20 20 20 61 73 73 65 72 74 28 20 28 70 4d 65      assert( (pMe
ae40: 6d 5b 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d  m[i].flags & MEM
ae50: 5f 45 70 68 65 6d 29 3d 3d 30 0a 20 20 20 20 20  _Ephem)==0.     
ae60: 20 20 20 20 20 20 20 7c 7c 20 28 70 4d 65 6d 5b         || (pMem[
ae70: 69 5d 2e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  i].flags & (MEM_
ae80: 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d  Str|MEM_Blob))==
ae90: 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 );.    sqlite3
aea0: 56 64 62 65 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e  VdbeMemNulTermin
aeb0: 61 74 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20  ate(&pMem[i]);. 
aec0: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
aed0: 45 28 70 4f 70 2d 3e 70 31 2b 69 2c 20 26 70 4d  E(pOp->p1+i, &pM
aee0: 65 6d 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 69 66  em[i]);.  }.  if
aef0: 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  ( db->mallocFail
af00: 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  ed ) goto no_mem
af10: 3b 0a 0a 20 20 69 66 28 20 64 62 2d 3e 6d 54 72  ;..  if( db->mTr
af20: 61 63 65 20 26 20 53 51 4c 49 54 45 5f 54 52 41  ace & SQLITE_TRA
af30: 43 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20 64 62  CE_ROW ){.    db
af40: 2d 3e 78 54 72 61 63 65 28 53 51 4c 49 54 45 5f  ->xTrace(SQLITE_
af50: 54 52 41 43 45 5f 52 4f 57 2c 20 64 62 2d 3e 70  TRACE_ROW, db->p
af60: 54 72 61 63 65 41 72 67 2c 20 70 2c 20 30 29 3b  TraceArg, p, 0);
af70: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52 65 74 75 72  .  }..  /* Retur
af80: 6e 20 53 51 4c 49 54 45 5f 52 4f 57 0a 20 20 2a  n SQLITE_ROW.  *
af90: 2f 0a 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e 74  /.  p->pc = (int
afa0: 29 28 70 4f 70 20 2d 20 61 4f 70 29 20 2b 20 31  )(pOp - aOp) + 1
afb0: 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  ;.  rc = SQLITE_
afc0: 52 4f 57 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65  ROW;.  goto vdbe
afd0: 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f  _return;.}../* O
afe0: 70 63 6f 64 65 3a 20 43 6f 6e 63 61 74 20 50 31  pcode: Concat P1
aff0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
b000: 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b  nopsis: r[P3]=r[
b010: 50 32 5d 2b 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  P2]+r[P1].**.** 
b020: 41 64 64 20 74 68 65 20 74 65 78 74 20 69 6e 20  Add the text in 
b030: 72 65 67 69 73 74 65 72 20 50 31 20 6f 6e 74 6f  register P1 onto
b040: 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
b050: 74 65 78 74 20 69 6e 0a 2a 2a 20 72 65 67 69 73  text in.** regis
b060: 74 65 72 20 50 32 20 61 6e 64 20 73 74 6f 72 65  ter P2 and store
b070: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
b080: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
b090: 66 20 65 69 74 68 65 72 20 74 68 65 20 50 31 20  f either the P1 
b0a0: 6f 72 20 50 32 20 74 65 78 74 20 61 72 65 20 4e  or P2 text are N
b0b0: 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 4e  ULL then store N
b0c0: 55 4c 4c 20 69 6e 20 50 33 2e 0a 2a 2a 0a 2a 2a  ULL in P3..**.**
b0d0: 20 20 20 50 33 20 3d 20 50 32 20 7c 7c 20 50 31     P3 = P2 || P1
b0e0: 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c  .**.** It is ill
b0f0: 65 67 61 6c 20 66 6f 72 20 50 31 20 61 6e 64 20  egal for P1 and 
b100: 50 33 20 74 6f 20 62 65 20 74 68 65 20 73 61 6d  P3 to be the sam
b110: 65 20 72 65 67 69 73 74 65 72 2e 20 53 6f 6d 65  e register. Some
b120: 74 69 6d 65 73 2c 0a 2a 2a 20 69 66 20 50 33 20  times,.** if P3 
b130: 69 73 20 74 68 65 20 73 61 6d 65 20 72 65 67 69  is the same regi
b140: 73 74 65 72 20 61 73 20 50 32 2c 20 74 68 65 20  ster as P2, the 
b150: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69  implementation i
b160: 73 20 61 62 6c 65 0a 2a 2a 20 74 6f 20 61 76 6f  s able.** to avo
b170: 69 64 20 61 20 6d 65 6d 63 70 79 28 29 2e 0a 2a  id a memcpy()..*
b180: 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6e 63 61 74  /.case OP_Concat
b190: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
b1a0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 43 4f 4e 43   same as TK_CONC
b1b0: 41 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  AT, in1, in2, ou
b1c0: 74 33 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74  t3 */.  i64 nByt
b1d0: 65 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  e;..  pIn1 = &aM
b1e0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
b1f0: 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
b200: 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26  >p2];.  pOut = &
b210: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
b220: 20 61 73 73 65 72 74 28 20 70 49 6e 31 21 3d 70   assert( pIn1!=p
b230: 4f 75 74 20 29 3b 0a 20 20 69 66 28 20 28 70 49  Out );.  if( (pI
b240: 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32  n1->flags | pIn2
b250: 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e  ->flags) & MEM_N
b260: 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ull ){.    sqlit
b270: 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
b280: 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61  (pOut);.    brea
b290: 6b 3b 0a 20 20 7d 0a 20 20 69 66 28 20 45 78 70  k;.  }.  if( Exp
b2a0: 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 20 7c 7c  andBlob(pIn1) ||
b2b0: 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32   ExpandBlob(pIn2
b2c0: 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  ) ) goto no_mem;
b2d0: 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e  .  Stringify(pIn
b2e0: 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  1, encoding);.  
b2f0: 53 74 72 69 6e 67 69 66 79 28 70 49 6e 32 2c 20  Stringify(pIn2, 
b300: 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 6e 42 79  encoding);.  nBy
b310: 74 65 20 3d 20 70 49 6e 31 2d 3e 6e 20 2b 20 70  te = pIn1->n + p
b320: 49 6e 32 2d 3e 6e 3b 0a 20 20 69 66 28 20 6e 42  In2->n;.  if( nB
b330: 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  yte>db->aLimit[S
b340: 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
b350: 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  TH] ){.    goto 
b360: 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 69  too_big;.  }.  i
b370: 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
b380: 6d 47 72 6f 77 28 70 4f 75 74 2c 20 28 69 6e 74  mGrow(pOut, (int
b390: 29 6e 42 79 74 65 2b 32 2c 20 70 4f 75 74 3d 3d  )nByte+2, pOut==
b3a0: 70 49 6e 32 29 20 29 7b 0a 20 20 20 20 67 6f 74  pIn2) ){.    got
b3b0: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20  o no_mem;.  }.  
b3c0: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
b3d0: 4f 75 74 2c 20 4d 45 4d 5f 53 74 72 29 3b 0a 20  Out, MEM_Str);. 
b3e0: 20 69 66 28 20 70 4f 75 74 21 3d 70 49 6e 32 20   if( pOut!=pIn2 
b3f0: 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28 70 4f  ){.    memcpy(pO
b400: 75 74 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 7a 2c 20  ut->z, pIn2->z, 
b410: 70 49 6e 32 2d 3e 6e 29 3b 0a 20 20 7d 0a 20 20  pIn2->n);.  }.  
b420: 6d 65 6d 63 70 79 28 26 70 4f 75 74 2d 3e 7a 5b  memcpy(&pOut->z[
b430: 70 49 6e 32 2d 3e 6e 5d 2c 20 70 49 6e 31 2d 3e  pIn2->n], pIn1->
b440: 7a 2c 20 70 49 6e 31 2d 3e 6e 29 3b 0a 20 20 70  z, pIn1->n);.  p
b450: 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 5d 3d 30 3b  Out->z[nByte]=0;
b460: 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65  .  pOut->z[nByte
b470: 2b 31 5d 20 3d 20 30 3b 0a 20 20 70 4f 75 74 2d  +1] = 0;.  pOut-
b480: 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54 65  >flags |= MEM_Te
b490: 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20  rm;.  pOut->n = 
b4a0: 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f  (int)nByte;.  pO
b4b0: 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69  ut->enc = encodi
b4c0: 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  ng;.  UPDATE_MAX
b4d0: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
b4e0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
b4f0: 4f 70 63 6f 64 65 3a 20 41 64 64 20 50 31 20 50  Opcode: Add P1 P
b500: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
b510: 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 31  psis: r[P3]=r[P1
b520: 5d 2b 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 41 64  ]+r[P2].**.** Ad
b530: 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  d the value in r
b540: 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 74 68  egister P1 to th
b550: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
b560: 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74  ter P2.** and st
b570: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
b580: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
b590: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
b5a0: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
b5b0: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
b5c0: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 6c  /./* Opcode: Mul
b5d0: 74 69 70 6c 79 20 50 31 20 50 32 20 50 33 20 2a  tiply P1 P2 P3 *
b5e0: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
b5f0: 72 5b 50 33 5d 3d 72 5b 50 31 5d 2a 72 5b 50 32  r[P3]=r[P1]*r[P2
b600: 5d 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d 75 6c 74 69  ].**.**.** Multi
b610: 70 6c 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e  ply the value in
b620: 20 72 65 67 69 73 74 65 72 20 50 31 20 62 79 20   register P1 by 
b630: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
b640: 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20  ister P2.** and 
b650: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
b660: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
b670: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
b680: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
b690: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
b6a0: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .*/./* Opcode: S
b6b0: 75 62 74 72 61 63 74 20 50 31 20 50 32 20 50 33  ubtract P1 P2 P3
b6c0: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
b6d0: 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2d 72 5b  : r[P3]=r[P2]-r[
b6e0: 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 75 62 74 72 61  P1].**.** Subtra
b6f0: 63 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ct the value in 
b700: 72 65 67 69 73 74 65 72 20 50 31 20 66 72 6f 6d  register P1 from
b710: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
b720: 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64  gister P2.** and
b730: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
b740: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
b750: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
b760: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
b770: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
b780: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
b790: 44 69 76 69 64 65 20 50 31 20 50 32 20 50 33 20  Divide P1 P2 P3 
b7a0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
b7b0: 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2f 72 5b 50   r[P3]=r[P2]/r[P
b7c0: 31 5d 0a 2a 2a 0a 2a 2a 20 44 69 76 69 64 65 20  1].**.** Divide 
b7d0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
b7e0: 69 73 74 65 72 20 50 31 20 62 79 20 74 68 65 20  ister P1 by the 
b7f0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
b800: 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72  r P2.** and stor
b810: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
b820: 72 65 67 69 73 74 65 72 20 50 33 20 28 50 33 3d  register P3 (P3=
b830: 50 32 2f 50 31 29 2e 20 49 66 20 74 68 65 20 76  P2/P1). If the v
b840: 61 6c 75 65 20 69 6e 20 0a 2a 2a 20 72 65 67 69  alue in .** regi
b850: 73 74 65 72 20 50 31 20 69 73 20 7a 65 72 6f 2c  ster P1 is zero,
b860: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
b870: 20 69 73 20 4e 55 4c 4c 2e 20 49 66 20 65 69 74   is NULL. If eit
b880: 68 65 72 20 69 6e 70 75 74 20 69 73 20 0a 2a 2a  her input is .**
b890: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
b8a0: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
b8b0: 20 4f 70 63 6f 64 65 3a 20 52 65 6d 61 69 6e 64   Opcode: Remaind
b8c0: 65 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  er P1 P2 P3 * *.
b8d0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
b8e0: 33 5d 3d 72 5b 50 32 5d 25 72 5b 50 31 5d 0a 2a  3]=r[P2]%r[P1].*
b8f0: 2a 0a 2a 2a 20 43 6f 6d 70 75 74 65 20 74 68 65  *.** Compute the
b900: 20 72 65 6d 61 69 6e 64 65 72 20 61 66 74 65 72   remainder after
b910: 20 69 6e 74 65 67 65 72 20 72 65 67 69 73 74 65   integer registe
b920: 72 20 50 32 20 69 73 20 64 69 76 69 64 65 64 20  r P2 is divided 
b930: 62 79 20 0a 2a 2a 20 72 65 67 69 73 74 65 72 20  by .** register 
b940: 50 31 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  P1 and store the
b950: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
b960: 74 65 72 20 50 33 2e 20 0a 2a 2a 20 49 66 20 74  ter P3. .** If t
b970: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
b980: 73 74 65 72 20 50 31 20 69 73 20 7a 65 72 6f 20  ster P1 is zero 
b990: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
b9a0: 4c 4c 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  LL..** If either
b9b0: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
b9c0: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
b9d0: 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
b9e0: 5f 41 64 64 3a 20 20 20 20 20 20 20 20 20 20 20  _Add:           
b9f0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
ba00: 61 73 20 54 4b 5f 50 4c 55 53 2c 20 69 6e 31 2c  as TK_PLUS, in1,
ba10: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
ba20: 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20  se OP_Subtract: 
ba30: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ba40: 73 61 6d 65 20 61 73 20 54 4b 5f 4d 49 4e 55 53  same as TK_MINUS
ba50: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
ba60: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 6c 74   */.case OP_Mult
ba70: 69 70 6c 79 3a 20 20 20 20 20 20 20 20 20 20 20  iply:           
ba80: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
ba90: 5f 53 54 41 52 2c 20 69 6e 31 2c 20 69 6e 32 2c  _STAR, in1, in2,
baa0: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
bab0: 5f 44 69 76 69 64 65 3a 20 20 20 20 20 20 20 20  _Divide:        
bac0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
bad0: 61 73 20 54 4b 5f 53 4c 41 53 48 2c 20 69 6e 31  as TK_SLASH, in1
bae0: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
baf0: 61 73 65 20 4f 50 5f 52 65 6d 61 69 6e 64 65 72  ase OP_Remainder
bb00: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
bb10: 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 45 4d 2c   same as TK_REM,
bb20: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
bb30: 2a 2f 0a 20 20 63 68 61 72 20 62 49 6e 74 69 6e  */.  char bIntin
bb40: 74 3b 20 20 20 2f 2a 20 53 74 61 72 74 65 64 20  t;   /* Started 
bb50: 6f 75 74 20 61 73 20 74 77 6f 20 69 6e 74 65 67  out as two integ
bb60: 65 72 20 6f 70 65 72 61 6e 64 73 20 2a 2f 0a 20  er operands */. 
bb70: 20 75 31 36 20 66 6c 61 67 73 3b 20 20 20 20 20   u16 flags;     
bb80: 20 2f 2a 20 43 6f 6d 62 69 6e 65 64 20 4d 45 4d   /* Combined MEM
bb90: 5f 2a 20 66 6c 61 67 73 20 66 72 6f 6d 20 62 6f  _* flags from bo
bba0: 74 68 20 69 6e 70 75 74 73 20 2a 2f 0a 20 20 75  th inputs */.  u
bbb0: 31 36 20 74 79 70 65 31 3b 20 20 20 20 20 20 2f  16 type1;      /
bbc0: 2a 20 4e 75 6d 65 72 69 63 20 74 79 70 65 20 6f  * Numeric type o
bbd0: 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a  f left operand *
bbe0: 2f 0a 20 20 75 31 36 20 74 79 70 65 32 3b 20 20  /.  u16 type2;  
bbf0: 20 20 20 20 2f 2a 20 4e 75 6d 65 72 69 63 20 74      /* Numeric t
bc00: 79 70 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65  ype of right ope
bc10: 72 61 6e 64 20 2a 2f 0a 20 20 69 36 34 20 69 41  rand */.  i64 iA
bc20: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74  ;         /* Int
bc30: 65 67 65 72 20 76 61 6c 75 65 20 6f 66 20 6c 65  eger value of le
bc40: 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  ft operand */.  
bc50: 69 36 34 20 69 42 3b 20 20 20 20 20 20 20 20 20  i64 iB;         
bc60: 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65  /* Integer value
bc70: 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e   of right operan
bc80: 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72 41  d */.  double rA
bc90: 3b 20 20 20 20 20 20 2f 2a 20 52 65 61 6c 20 76  ;      /* Real v
bca0: 61 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f 70 65  alue of left ope
bcb0: 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65  rand */.  double
bcc0: 20 72 42 3b 20 20 20 20 20 20 2f 2a 20 52 65 61   rB;      /* Rea
bcd0: 6c 20 76 61 6c 75 65 20 6f 66 20 72 69 67 68 74  l value of right
bce0: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 0a 20 20 70   operand */..  p
bcf0: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
bd00: 3e 70 31 5d 3b 0a 20 20 74 79 70 65 31 20 3d 20  >p1];.  type1 = 
bd10: 6e 75 6d 65 72 69 63 54 79 70 65 28 70 49 6e 31  numericType(pIn1
bd20: 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  );.  pIn2 = &aMe
bd30: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 74 79  m[pOp->p2];.  ty
bd40: 70 65 32 20 3d 20 6e 75 6d 65 72 69 63 54 79 70  pe2 = numericTyp
bd50: 65 28 70 49 6e 32 29 3b 0a 20 20 70 4f 75 74 20  e(pIn2);.  pOut 
bd60: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
bd70: 3b 0a 20 20 66 6c 61 67 73 20 3d 20 70 49 6e 31  ;.  flags = pIn1
bd80: 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e  ->flags | pIn2->
bd90: 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 66 6c  flags;.  if( (fl
bda0: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21  ags & MEM_Null)!
bdb0: 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d  =0 ) goto arithm
bdc0: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
bdd0: 75 6c 6c 3b 0a 20 20 69 66 28 20 28 74 79 70 65  ull;.  if( (type
bde0: 31 20 26 20 74 79 70 65 32 20 26 20 4d 45 4d 5f  1 & type2 & MEM_
bdf0: 49 6e 74 29 21 3d 30 20 29 7b 0a 20 20 20 20 69  Int)!=0 ){.    i
be00: 41 20 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20  A = pIn1->u.i;. 
be10: 20 20 20 69 42 20 3d 20 70 49 6e 32 2d 3e 75 2e     iB = pIn2->u.
be20: 69 3b 0a 20 20 20 20 62 49 6e 74 69 6e 74 20 3d  i;.    bIntint =
be30: 20 31 3b 0a 20 20 20 20 73 77 69 74 63 68 28 20   1;.    switch( 
be40: 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20  pOp->opcode ){. 
be50: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 41 64 64       case OP_Add
be60: 3a 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69  :       if( sqli
be70: 74 65 33 41 64 64 49 6e 74 36 34 28 26 69 42 2c  te3AddInt64(&iB,
be80: 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61  iA) ) goto fp_ma
be90: 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20  th;  break;.    
bea0: 20 20 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61    case OP_Subtra
beb0: 63 74 3a 20 20 69 66 28 20 73 71 6c 69 74 65 33  ct:  if( sqlite3
bec0: 53 75 62 49 6e 74 36 34 28 26 69 42 2c 69 41 29  SubInt64(&iB,iA)
bed0: 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b   ) goto fp_math;
bee0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
bef0: 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a  ase OP_Multiply:
bf00: 20 20 69 66 28 20 73 71 6c 69 74 65 33 4d 75 6c    if( sqlite3Mul
bf10: 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20 29 20  Int64(&iB,iA) ) 
bf20: 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62  goto fp_math;  b
bf30: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
bf40: 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20   OP_Divide: {.  
bf50: 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20        if( iA==0 
bf60: 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69  ) goto arithmeti
bf70: 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c  c_result_is_null
bf80: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41  ;.        if( iA
bf90: 3d 3d 2d 31 20 26 26 20 69 42 3d 3d 53 4d 41 4c  ==-1 && iB==SMAL
bfa0: 4c 45 53 54 5f 49 4e 54 36 34 20 29 20 67 6f 74  LEST_INT64 ) got
bfb0: 6f 20 66 70 5f 6d 61 74 68 3b 0a 20 20 20 20 20  o fp_math;.     
bfc0: 20 20 20 69 42 20 2f 3d 20 69 41 3b 0a 20 20 20     iB /= iA;.   
bfd0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
bfe0: 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c    }.      defaul
bff0: 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28  t: {.        if(
c000: 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72   iA==0 ) goto ar
c010: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
c020: 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20  is_null;.       
c030: 20 69 66 28 20 69 41 3d 3d 2d 31 20 29 20 69 41   if( iA==-1 ) iA
c040: 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 69 42   = 1;.        iB
c050: 20 25 3d 20 69 41 3b 0a 20 20 20 20 20 20 20 20   %= iA;.        
c060: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
c070: 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 75     }.    pOut->u
c080: 2e 69 20 3d 20 69 42 3b 0a 20 20 20 20 4d 65 6d  .i = iB;.    Mem
c090: 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
c0a0: 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65  , MEM_Int);.  }e
c0b0: 6c 73 65 7b 0a 20 20 20 20 62 49 6e 74 69 6e 74  lse{.    bIntint
c0c0: 20 3d 20 30 3b 0a 66 70 5f 6d 61 74 68 3a 0a 20   = 0;.fp_math:. 
c0d0: 20 20 20 72 41 20 3d 20 73 71 6c 69 74 65 33 56     rA = sqlite3V
c0e0: 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e  dbeRealValue(pIn
c0f0: 31 29 3b 0a 20 20 20 20 72 42 20 3d 20 73 71 6c  1);.    rB = sql
c100: 69 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75  ite3VdbeRealValu
c110: 65 28 70 49 6e 32 29 3b 0a 20 20 20 20 73 77 69  e(pIn2);.    swi
c120: 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  tch( pOp->opcode
c130: 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f   ){.      case O
c140: 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20 20 72  P_Add:         r
c150: 42 20 2b 3d 20 72 41 3b 20 20 20 20 20 20 20 62  B += rA;       b
c160: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
c170: 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20   OP_Subtract:   
c180: 20 72 42 20 2d 3d 20 72 41 3b 20 20 20 20 20 20   rB -= rA;      
c190: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
c1a0: 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20  se OP_Multiply: 
c1b0: 20 20 20 72 42 20 2a 3d 20 72 41 3b 20 20 20 20     rB *= rA;    
c1c0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
c1d0: 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20  case OP_Divide: 
c1e0: 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 28 64 6f  {.        /* (do
c1f0: 75 62 6c 65 29 30 20 49 6e 20 63 61 73 65 20 6f  uble)0 In case o
c200: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
c210: 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 2e 2e 2e 20  OATING_POINT... 
c220: 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 72  */.        if( r
c230: 41 3d 3d 28 64 6f 75 62 6c 65 29 30 20 29 20 67  A==(double)0 ) g
c240: 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72  oto arithmetic_r
c250: 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20  esult_is_null;. 
c260: 20 20 20 20 20 20 20 72 42 20 2f 3d 20 72 41 3b         rB /= rA;
c270: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
c280: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65        }.      de
c290: 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20  fault: {.       
c2a0: 20 69 41 20 3d 20 28 69 36 34 29 72 41 3b 0a 20   iA = (i64)rA;. 
c2b0: 20 20 20 20 20 20 20 69 42 20 3d 20 28 69 36 34         iB = (i64
c2c0: 29 72 42 3b 0a 20 20 20 20 20 20 20 20 69 66 28  )rB;.        if(
c2d0: 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72   iA==0 ) goto ar
c2e0: 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f  ithmetic_result_
c2f0: 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20  is_null;.       
c300: 20 69 66 28 20 69 41 3d 3d 2d 31 20 29 20 69 41   if( iA==-1 ) iA
c310: 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 72 42   = 1;.        rB
c320: 20 3d 20 28 64 6f 75 62 6c 65 29 28 69 42 20 25   = (double)(iB %
c330: 20 69 41 29 3b 0a 20 20 20 20 20 20 20 20 62 72   iA);.        br
c340: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
c350: 20 7d 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45   }.#ifdef SQLITE
c360: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
c370: 4f 49 4e 54 0a 20 20 20 20 70 4f 75 74 2d 3e 75  OINT.    pOut->u
c380: 2e 69 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65 6d  .i = rB;.    Mem
c390: 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
c3a0: 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 23 65 6c 73  , MEM_Int);.#els
c3b0: 65 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  e.    if( sqlite
c3c0: 33 49 73 4e 61 4e 28 72 42 29 20 29 7b 0a 20 20  3IsNaN(rB) ){.  
c3d0: 20 20 20 20 67 6f 74 6f 20 61 72 69 74 68 6d 65      goto arithme
c3e0: 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75  tic_result_is_nu
c3f0: 6c 6c 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f  ll;.    }.    pO
c400: 75 74 2d 3e 75 2e 72 20 3d 20 72 42 3b 0a 20 20  ut->u.r = rB;.  
c410: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
c420: 28 70 4f 75 74 2c 20 4d 45 4d 5f 52 65 61 6c 29  (pOut, MEM_Real)
c430: 3b 0a 20 20 20 20 69 66 28 20 28 28 74 79 70 65  ;.    if( ((type
c440: 31 7c 74 79 70 65 32 29 26 4d 45 4d 5f 52 65 61  1|type2)&MEM_Rea
c450: 6c 29 3d 3d 30 20 26 26 20 21 62 49 6e 74 69 6e  l)==0 && !bIntin
c460: 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  t ){.      sqlit
c470: 65 33 56 64 62 65 49 6e 74 65 67 65 72 41 66 66  e3VdbeIntegerAff
c480: 69 6e 69 74 79 28 70 4f 75 74 29 3b 0a 20 20 20  inity(pOut);.   
c490: 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20   }.#endif.  }.  
c4a0: 62 72 65 61 6b 3b 0a 0a 61 72 69 74 68 6d 65 74  break;..arithmet
c4b0: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
c4c0: 6c 3a 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  l:.  sqlite3Vdbe
c4d0: 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29  MemSetNull(pOut)
c4e0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
c4f0: 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 6c 53 65 71   Opcode: CollSeq
c500: 20 50 31 20 2a 20 2a 20 50 34 0a 2a 2a 0a 2a 2a   P1 * * P4.**.**
c510: 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
c520: 20 74 6f 20 61 20 43 6f 6c 6c 53 65 71 20 73 74   to a CollSeq st
c530: 72 75 63 74 2e 20 49 66 20 74 68 65 20 6e 65 78  ruct. If the nex
c540: 74 20 63 61 6c 6c 20 74 6f 20 61 20 75 73 65 72  t call to a user
c550: 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20 6f 72 20   function.** or 
c560: 61 67 67 72 65 67 61 74 65 20 63 61 6c 6c 73 20  aggregate calls 
c570: 73 71 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f  sqlite3GetFuncCo
c580: 6c 6c 53 65 71 28 29 2c 20 74 68 69 73 20 63 6f  llSeq(), this co
c590: 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
c5a0: 20 77 69 6c 6c 0a 2a 2a 20 62 65 20 72 65 74 75   will.** be retu
c5b0: 72 6e 65 64 2e 20 54 68 69 73 20 69 73 20 75 73  rned. This is us
c5c0: 65 64 20 62 79 20 74 68 65 20 62 75 69 6c 74 2d  ed by the built-
c5d0: 69 6e 20 6d 69 6e 28 29 2c 20 6d 61 78 28 29 20  in min(), max() 
c5e0: 61 6e 64 20 6e 75 6c 6c 69 66 28 29 0a 2a 2a 20  and nullif().** 
c5f0: 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  functions..**.**
c600: 20 49 66 20 50 31 20 69 73 20 6e 6f 74 20 7a 65   If P1 is not ze
c610: 72 6f 2c 20 74 68 65 6e 20 69 74 20 69 73 20 61  ro, then it is a
c620: 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20 61   register that a
c630: 20 73 75 62 73 65 71 75 65 6e 74 20 6d 69 6e 28   subsequent min(
c640: 29 20 6f 72 0a 2a 2a 20 6d 61 78 28 29 20 61 67  ) or.** max() ag
c650: 67 72 65 67 61 74 65 20 77 69 6c 6c 20 73 65 74  gregate will set
c660: 20 74 6f 20 31 20 69 66 20 74 68 65 20 63 75 72   to 1 if the cur
c670: 72 65 6e 74 20 72 6f 77 20 69 73 20 6e 6f 74 20  rent row is not 
c680: 74 68 65 20 6d 69 6e 69 6d 75 6d 20 6f 72 0a 2a  the minimum or.*
c690: 2a 20 6d 61 78 69 6d 75 6d 2e 20 20 54 68 65 20  * maximum.  The 
c6a0: 50 31 20 72 65 67 69 73 74 65 72 20 69 73 20 69  P1 register is i
c6b0: 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 30 20  nitialized to 0 
c6c0: 62 79 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  by this instruct
c6d0: 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69  ion..**.** The i
c6e0: 6e 74 65 72 66 61 63 65 20 75 73 65 64 20 62 79  nterface used by
c6f0: 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74   the implementat
c700: 69 6f 6e 20 6f 66 20 74 68 65 20 61 66 6f 72 65  ion of the afore
c710: 6d 65 6e 74 69 6f 6e 65 64 20 66 75 6e 63 74 69  mentioned functi
c720: 6f 6e 73 0a 2a 2a 20 74 6f 20 72 65 74 72 69 65  ons.** to retrie
c730: 76 65 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e  ve the collation
c740: 20 73 65 71 75 65 6e 63 65 20 73 65 74 20 62 79   sequence set by
c750: 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   this opcode is 
c760: 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a  not available.**
c770: 20 70 75 62 6c 69 63 6c 79 2e 20 20 4f 6e 6c 79   publicly.  Only
c780: 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 74 69   built-in functi
c790: 6f 6e 73 20 68 61 76 65 20 61 63 63 65 73 73 20  ons have access 
c7a0: 74 6f 20 74 68 69 73 20 66 65 61 74 75 72 65 2e  to this feature.
c7b0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 6c  .*/.case OP_Coll
c7c0: 53 65 71 3a 20 7b 0a 20 20 61 73 73 65 72 74 28  Seq: {.  assert(
c7d0: 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
c7e0: 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 69 66  _COLLSEQ );.  if
c7f0: 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20  ( pOp->p1 ){.   
c800: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
c810: 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f  etInt64(&aMem[pO
c820: 70 2d 3e 70 31 5d 2c 20 30 29 3b 0a 20 20 7d 0a  p->p1], 0);.  }.
c830: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
c840: 70 63 6f 64 65 3a 20 46 75 6e 63 74 69 6f 6e 30  pcode: Function0
c850: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
c860: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
c870: 33 5d 3d 66 75 6e 63 28 72 5b 50 32 40 50 35 5d  3]=func(r[P2@P5]
c880: 29 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 61  ).**.** Invoke a
c890: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 28   user function (
c8a0: 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
c8b0: 74 6f 20 61 20 46 75 6e 63 44 65 66 20 6f 62 6a  to a FuncDef obj
c8c0: 65 63 74 20 74 68 61 74 0a 2a 2a 20 64 65 66 69  ect that.** defi
c8d0: 6e 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  nes the function
c8e0: 29 20 77 69 74 68 20 50 35 20 61 72 67 75 6d 65  ) with P5 argume
c8f0: 6e 74 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72  nts taken from r
c900: 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 0a 2a  egister P2 and.*
c910: 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 20 20 54  * successors.  T
c920: 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65  he result of the
c930: 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 73 74 6f   function is sto
c940: 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
c950: 50 33 2e 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  P3..** Register 
c960: 50 33 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 6f  P3 must not be o
c970: 6e 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  ne of the functi
c980: 6f 6e 20 69 6e 70 75 74 73 2e 0a 2a 2a 0a 2a 2a  on inputs..**.**
c990: 20 50 31 20 69 73 20 61 20 33 32 2d 62 69 74 20   P1 is a 32-bit 
c9a0: 62 69 74 6d 61 73 6b 20 69 6e 64 69 63 61 74 69  bitmask indicati
c9b0: 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ng whether or no
c9c0: 74 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20  t each argument 
c9d0: 74 6f 20 74 68 65 20 0a 2a 2a 20 66 75 6e 63 74  to the .** funct
c9e0: 69 6f 6e 20 77 61 73 20 64 65 74 65 72 6d 69 6e  ion was determin
c9f0: 65 64 20 74 6f 20 62 65 20 63 6f 6e 73 74 61 6e  ed to be constan
ca00: 74 20 61 74 20 63 6f 6d 70 69 6c 65 20 74 69 6d  t at compile tim
ca10: 65 2e 20 49 66 20 74 68 65 20 66 69 72 73 74 0a  e. If the first.
ca20: 2a 2a 20 61 72 67 75 6d 65 6e 74 20 77 61 73 20  ** argument was 
ca30: 63 6f 6e 73 74 61 6e 74 20 74 68 65 6e 20 62 69  constant then bi
ca40: 74 20 30 20 6f 66 20 50 31 20 69 73 20 73 65 74  t 0 of P1 is set
ca50: 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20 74  . This is used t
ca60: 6f 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77  o determine.** w
ca70: 68 65 74 68 65 72 20 6d 65 74 61 20 64 61 74 61  hether meta data
ca80: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
ca90: 20 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e   a user function
caa0: 20 61 72 67 75 6d 65 6e 74 20 75 73 69 6e 67 20   argument using 
cab0: 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 73  the.** sqlite3_s
cac0: 65 74 5f 61 75 78 64 61 74 61 28 29 20 41 50 49  et_auxdata() API
cad0: 20 6d 61 79 20 62 65 20 73 61 66 65 6c 79 20 72   may be safely r
cae0: 65 74 61 69 6e 65 64 20 75 6e 74 69 6c 20 74 68  etained until th
caf0: 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 76 6f 63 61  e next.** invoca
cb00: 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 6f 70 63  tion of this opc
cb10: 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ode..**.** See a
cb20: 6c 73 6f 3a 20 46 75 6e 63 74 69 6f 6e 2c 20 41  lso: Function, A
cb30: 67 67 53 74 65 70 2c 20 41 67 67 46 69 6e 61 6c  ggStep, AggFinal
cb40: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46  .*/./* Opcode: F
cb50: 75 6e 63 74 69 6f 6e 20 50 31 20 50 32 20 50 33  unction P1 P2 P3
cb60: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
cb70: 69 73 3a 20 72 5b 50 33 5d 3d 66 75 6e 63 28 72  is: r[P3]=func(r
cb80: 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 49  [P2@P5]).**.** I
cb90: 6e 76 6f 6b 65 20 61 20 75 73 65 72 20 66 75 6e  nvoke a user fun
cba0: 63 74 69 6f 6e 20 28 50 34 20 69 73 20 61 20 70  ction (P4 is a p
cbb0: 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 73 71 6c  ointer to an sql
cbc0: 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f 62 6a  ite3_context obj
cbd0: 65 63 74 20 74 68 61 74 0a 2a 2a 20 63 6f 6e 74  ect that.** cont
cbe0: 61 69 6e 73 20 61 20 70 6f 69 6e 74 65 72 20 74  ains a pointer t
cbf0: 6f 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 74  o the function t
cc00: 6f 20 62 65 20 72 75 6e 29 20 77 69 74 68 20 50  o be run) with P
cc10: 35 20 61 72 67 75 6d 65 6e 74 73 20 74 61 6b 65  5 arguments take
cc20: 6e 0a 2a 2a 20 66 72 6f 6d 20 72 65 67 69 73 74  n.** from regist
cc30: 65 72 20 50 32 20 61 6e 64 20 73 75 63 63 65 73  er P2 and succes
cc40: 73 6f 72 73 2e 20 20 54 68 65 20 72 65 73 75 6c  sors.  The resul
cc50: 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  t of the functio
cc60: 6e 20 69 73 20 73 74 6f 72 65 64 0a 2a 2a 20 69  n is stored.** i
cc70: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 20  n register P3.  
cc80: 52 65 67 69 73 74 65 72 20 50 33 20 6d 75 73 74  Register P3 must
cc90: 20 6e 6f 74 20 62 65 20 6f 6e 65 20 6f 66 20 74   not be one of t
cca0: 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 6e 70 75  he function inpu
ccb0: 74 73 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  ts..**.** P1 is 
ccc0: 61 20 33 32 2d 62 69 74 20 62 69 74 6d 61 73 6b  a 32-bit bitmask
ccd0: 20 69 6e 64 69 63 61 74 69 6e 67 20 77 68 65 74   indicating whet
cce0: 68 65 72 20 6f 72 20 6e 6f 74 20 65 61 63 68 20  her or not each 
ccf0: 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
cd00: 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 77 61 73  .** function was
cd10: 20 64 65 74 65 72 6d 69 6e 65 64 20 74 6f 20 62   determined to b
cd20: 65 20 63 6f 6e 73 74 61 6e 74 20 61 74 20 63 6f  e constant at co
cd30: 6d 70 69 6c 65 20 74 69 6d 65 2e 20 49 66 20 74  mpile time. If t
cd40: 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75  he first.** argu
cd50: 6d 65 6e 74 20 77 61 73 20 63 6f 6e 73 74 61 6e  ment was constan
cd60: 74 20 74 68 65 6e 20 62 69 74 20 30 20 6f 66 20  t then bit 0 of 
cd70: 50 31 20 69 73 20 73 65 74 2e 20 54 68 69 73 20  P1 is set. This 
cd80: 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 72  is used to deter
cd90: 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72 20  mine.** whether 
cda0: 6d 65 74 61 20 64 61 74 61 20 61 73 73 6f 63 69  meta data associ
cdb0: 61 74 65 64 20 77 69 74 68 20 61 20 75 73 65 72  ated with a user
cdc0: 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65   function argume
cdd0: 6e 74 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20  nt using the.** 
cde0: 73 71 6c 69 74 65 33 5f 73 65 74 5f 61 75 78 64  sqlite3_set_auxd
cdf0: 61 74 61 28 29 20 41 50 49 20 6d 61 79 20 62 65  ata() API may be
ce00: 20 73 61 66 65 6c 79 20 72 65 74 61 69 6e 65 64   safely retained
ce10: 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 0a   until the next.
ce20: 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66  ** invocation of
ce30: 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a   this opcode..**
ce40: 0a 2a 2a 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e  .** SQL function
ce50: 73 20 61 72 65 20 69 6e 69 74 69 61 6c 6c 79 20  s are initially 
ce60: 63 6f 64 65 64 20 61 73 20 4f 50 5f 46 75 6e 63  coded as OP_Func
ce70: 74 69 6f 6e 30 20 77 69 74 68 20 50 34 20 70 6f  tion0 with P4 po
ce80: 69 6e 74 69 6e 67 0a 2a 2a 20 74 6f 20 61 20 46  inting.** to a F
ce90: 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 2e 20 20  uncDef object.  
cea0: 42 75 74 20 6f 6e 20 66 69 72 73 74 20 65 76 61  But on first eva
ceb0: 6c 75 61 74 69 6f 6e 2c 20 74 68 65 20 50 34 20  luation, the P4 
cec0: 6f 70 65 72 61 6e 64 20 69 73 0a 2a 2a 20 61 75  operand is.** au
ced0: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 6f 6e 76  tomatically conv
cee0: 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 73 71  erted into an sq
cef0: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f 62  lite3_context ob
cf00: 6a 65 63 74 20 61 6e 64 20 74 68 65 20 6f 70 65  ject and the ope
cf10: 72 61 74 69 6f 6e 0a 2a 2a 20 63 68 61 6e 67 65  ration.** change
cf20: 64 20 74 6f 20 74 68 69 73 20 4f 50 5f 46 75 6e  d to this OP_Fun
cf30: 63 74 69 6f 6e 20 6f 70 63 6f 64 65 2e 20 20 49  ction opcode.  I
cf40: 6e 20 74 68 69 73 20 77 61 79 2c 20 74 68 65 20  n this way, the 
cf50: 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 6f  initialization o
cf60: 66 0a 2a 2a 20 74 68 65 20 73 71 6c 69 74 65 33  f.** the sqlite3
cf70: 5f 63 6f 6e 74 65 78 74 20 6f 62 6a 65 63 74 20  _context object 
cf80: 6f 63 63 75 72 73 20 6f 6e 6c 79 20 6f 6e 63 65  occurs only once
cf90: 2c 20 72 61 74 68 65 72 20 74 68 61 6e 20 6f 6e  , rather than on
cfa0: 63 65 20 66 6f 72 20 65 61 63 68 0a 2a 2a 20 65  ce for each.** e
cfb0: 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20 74 68 65  valuation of the
cfc0: 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a   function..**.**
cfd0: 20 53 65 65 20 61 6c 73 6f 3a 20 46 75 6e 63 74   See also: Funct
cfe0: 69 6f 6e 30 2c 20 41 67 67 53 74 65 70 2c 20 41  ion0, AggStep, A
cff0: 67 67 46 69 6e 61 6c 0a 2a 2f 0a 63 61 73 65 20  ggFinal.*/.case 
d000: 4f 50 5f 46 75 6e 63 74 69 6f 6e 30 3a 20 7b 0a  OP_Function0: {.
d010: 20 20 69 6e 74 20 6e 3b 0a 20 20 73 71 6c 69 74    int n;.  sqlit
d020: 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78  e3_context *pCtx
d030: 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
d040: 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e  ->p4type==P4_FUN
d050: 43 44 45 46 20 29 3b 0a 20 20 6e 20 3d 20 70 4f  CDEF );.  n = pO
d060: 70 2d 3e 70 35 3b 0a 20 20 61 73 73 65 72 74 28  p->p5;.  assert(
d070: 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f   pOp->p3>0 && pO
d080: 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p->p3<=(p->nMem+
d090: 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20  1 - p->nCursor) 
d0a0: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3d 3d  );.  assert( n==
d0b0: 30 20 7c 7c 20 28 70 4f 70 2d 3e 70 32 3e 30 20  0 || (pOp->p2>0 
d0c0: 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c 3d 28 70  && pOp->p2+n<=(p
d0d0: 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
d0e0: 75 72 73 6f 72 29 2b 31 29 20 29 3b 0a 20 20 61  ursor)+1) );.  a
d0f0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70  ssert( pOp->p3<p
d100: 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f 70 2d 3e 70  Op->p2 || pOp->p
d110: 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a  3>=pOp->p2+n );.
d120: 20 20 70 43 74 78 20 3d 20 73 71 6c 69 74 65 33    pCtx = sqlite3
d130: 44 62 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28 64 62  DbMallocRawNN(db
d140: 2c 20 73 69 7a 65 6f 66 28 2a 70 43 74 78 29 20  , sizeof(*pCtx) 
d150: 2b 20 28 6e 2d 31 29 2a 73 69 7a 65 6f 66 28 73  + (n-1)*sizeof(s
d160: 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 29 3b  qlite3_value*));
d170: 0a 20 20 69 66 28 20 70 43 74 78 3d 3d 30 20 29  .  if( pCtx==0 )
d180: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
d190: 70 43 74 78 2d 3e 70 4f 75 74 20 3d 20 30 3b 0a  pCtx->pOut = 0;.
d1a0: 20 20 70 43 74 78 2d 3e 70 46 75 6e 63 20 3d 20    pCtx->pFunc = 
d1b0: 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20  pOp->p4.pFunc;. 
d1c0: 20 70 43 74 78 2d 3e 69 4f 70 20 3d 20 28 69 6e   pCtx->iOp = (in
d1d0: 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20  t)(pOp - aOp);. 
d1e0: 20 70 43 74 78 2d 3e 70 56 64 62 65 20 3d 20 70   pCtx->pVdbe = p
d1f0: 3b 0a 20 20 70 43 74 78 2d 3e 61 72 67 63 20 3d  ;.  pCtx->argc =
d200: 20 6e 3b 0a 20 20 70 4f 70 2d 3e 70 34 74 79 70   n;.  pOp->p4typ
d210: 65 20 3d 20 50 34 5f 46 55 4e 43 43 54 58 3b 0a  e = P4_FUNCCTX;.
d220: 20 20 70 4f 70 2d 3e 70 34 2e 70 43 74 78 20 3d    pOp->p4.pCtx =
d230: 20 70 43 74 78 3b 0a 20 20 70 4f 70 2d 3e 6f 70   pCtx;.  pOp->op
d240: 63 6f 64 65 20 3d 20 4f 50 5f 46 75 6e 63 74 69  code = OP_Functi
d250: 6f 6e 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68  on;.  /* Fall th
d260: 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 46 75  rough into OP_Fu
d270: 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 0a 63 61 73 65  nction */.}.case
d280: 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 3a 20 7b 0a   OP_Function: {.
d290: 20 20 69 6e 74 20 69 3b 0a 20 20 73 71 6c 69 74    int i;.  sqlit
d2a0: 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78  e3_context *pCtx
d2b0: 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
d2c0: 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e  ->p4type==P4_FUN
d2d0: 43 43 54 58 20 29 3b 0a 20 20 70 43 74 78 20 3d  CCTX );.  pCtx =
d2e0: 20 70 4f 70 2d 3e 70 34 2e 70 43 74 78 3b 0a 0a   pOp->p4.pCtx;..
d2f0: 20 20 2f 2a 20 49 66 20 74 68 69 73 20 66 75 6e    /* If this fun
d300: 63 74 69 6f 6e 20 69 73 20 69 6e 73 69 64 65 20  ction is inside 
d310: 6f 66 20 61 20 74 72 69 67 67 65 72 2c 20 74 68  of a trigger, th
d320: 65 20 72 65 67 69 73 74 65 72 20 61 72 72 61 79  e register array
d330: 20 69 6e 20 61 4d 65 6d 5b 5d 0a 20 20 2a 2a 20   in aMem[].  ** 
d340: 6d 69 67 68 74 20 63 68 61 6e 67 65 20 66 72 6f  might change fro
d350: 6d 20 6f 6e 65 20 65 76 61 6c 75 61 74 69 6f 6e  m one evaluation
d360: 20 74 6f 20 74 68 65 20 6e 65 78 74 2e 20 20 54   to the next.  T
d370: 68 65 20 6e 65 78 74 20 62 6c 6f 63 6b 20 6f 66  he next block of
d380: 20 63 6f 64 65 0a 20 20 2a 2a 20 63 68 65 63 6b   code.  ** check
d390: 73 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 20  s to see if the 
d3a0: 72 65 67 69 73 74 65 72 20 61 72 72 61 79 20 68  register array h
d3b0: 61 73 20 63 68 61 6e 67 65 64 2c 20 61 6e 64 20  as changed, and 
d3c0: 69 66 20 73 6f 20 69 74 0a 20 20 2a 2a 20 72 65  if so it.  ** re
d3d0: 69 6e 69 74 69 61 6c 69 7a 65 73 20 74 68 65 20  initializes the 
d3e0: 72 65 6c 61 76 61 6e 74 20 70 61 72 74 73 20 6f  relavant parts o
d3f0: 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 63 6f  f the sqlite3_co
d400: 6e 74 65 78 74 20 6f 62 6a 65 63 74 20 2a 2f 0a  ntext object */.
d410: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
d420: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 70  Op->p3];.  if( p
d430: 43 74 78 2d 3e 70 4f 75 74 20 21 3d 20 70 4f 75  Ctx->pOut != pOu
d440: 74 20 29 7b 0a 20 20 20 20 70 43 74 78 2d 3e 70  t ){.    pCtx->p
d450: 4f 75 74 20 3d 20 70 4f 75 74 3b 0a 20 20 20 20  Out = pOut;.    
d460: 66 6f 72 28 69 3d 70 43 74 78 2d 3e 61 72 67 63  for(i=pCtx->argc
d470: 2d 31 3b 20 69 3e 3d 30 3b 20 69 2d 2d 29 20 70  -1; i>=0; i--) p
d480: 43 74 78 2d 3e 61 72 67 76 5b 69 5d 20 3d 20 26  Ctx->argv[i] = &
d490: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 2b 69 5d 3b  aMem[pOp->p2+i];
d4a0: 0a 20 20 7d 0a 0a 20 20 6d 65 6d 41 62 6f 75 74  .  }..  memAbout
d4b0: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 43 74 78  ToChange(p, pCtx
d4c0: 2d 3e 70 4f 75 74 29 3b 0a 23 69 66 64 65 66 20  ->pOut);.#ifdef 
d4d0: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 66  SQLITE_DEBUG.  f
d4e0: 6f 72 28 69 3d 30 3b 20 69 3c 70 43 74 78 2d 3e  or(i=0; i<pCtx->
d4f0: 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  argc; i++){.    
d500: 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
d510: 69 64 28 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d  id(pCtx->argv[i]
d520: 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45  ) );.    REGISTE
d530: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b  R_TRACE(pOp->p2+
d540: 69 2c 20 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d  i, pCtx->argv[i]
d550: 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  );.  }.#endif.  
d560: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
d570: 43 74 78 2d 3e 70 4f 75 74 2c 20 4d 45 4d 5f 4e  Ctx->pOut, MEM_N
d580: 75 6c 6c 29 3b 0a 20 20 70 43 74 78 2d 3e 66 45  ull);.  pCtx->fE
d590: 72 72 6f 72 4f 72 41 75 78 20 3d 20 30 3b 0a 20  rrorOrAux = 0;. 
d5a0: 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d   db->lastRowid =
d5b0: 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 28 2a   lastRowid;.  (*
d5c0: 70 43 74 78 2d 3e 70 46 75 6e 63 2d 3e 78 53 46  pCtx->pFunc->xSF
d5d0: 75 6e 63 29 28 70 43 74 78 2c 20 70 43 74 78 2d  unc)(pCtx, pCtx-
d5e0: 3e 61 72 67 63 2c 20 70 43 74 78 2d 3e 61 72 67  >argc, pCtx->arg
d5f0: 76 29 3b 2f 2a 20 49 4d 50 3a 20 52 2d 32 34 35  v);/* IMP: R-245
d600: 30 35 2d 32 33 32 33 30 20 2a 2f 0a 20 20 6c 61  05-23230 */.  la
d610: 73 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61  stRowid = db->la
d620: 73 74 52 6f 77 69 64 3b 20 20 2f 2a 20 52 65 6d  stRowid;  /* Rem
d630: 65 6d 62 65 72 20 72 6f 77 69 64 20 63 68 61 6e  ember rowid chan
d640: 67 65 73 20 6d 61 64 65 20 62 79 20 78 53 46 75  ges made by xSFu
d650: 6e 63 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 74  nc */..  /* If t
d660: 68 65 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  he function retu
d670: 72 6e 65 64 20 61 6e 20 65 72 72 6f 72 2c 20 74  rned an error, t
d680: 68 72 6f 77 20 61 6e 20 65 78 63 65 70 74 69 6f  hrow an exceptio
d690: 6e 20 2a 2f 0a 20 20 69 66 28 20 70 43 74 78 2d  n */.  if( pCtx-
d6a0: 3e 66 45 72 72 6f 72 4f 72 41 75 78 20 29 7b 0a  >fErrorOrAux ){.
d6b0: 20 20 20 20 69 66 28 20 70 43 74 78 2d 3e 69 73      if( pCtx->is
d6c0: 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 20 20 73  Error ){.      s
d6d0: 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28  qlite3VdbeError(
d6e0: 70 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33  p, "%s", sqlite3
d6f0: 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 43 74 78  _value_text(pCtx
d700: 2d 3e 70 4f 75 74 29 29 3b 0a 20 20 20 20 20 20  ->pOut));.      
d710: 72 63 20 3d 20 70 43 74 78 2d 3e 69 73 45 72 72  rc = pCtx->isErr
d720: 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71  or;.    }.    sq
d730: 6c 69 74 65 33 56 64 62 65 44 65 6c 65 74 65 41  lite3VdbeDeleteA
d740: 75 78 44 61 74 61 28 64 62 2c 20 26 70 2d 3e 70  uxData(db, &p->p
d750: 41 75 78 44 61 74 61 2c 20 70 43 74 78 2d 3e 69  AuxData, pCtx->i
d760: 4f 70 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20  Op, pOp->p1);.  
d770: 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
d780: 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
d790: 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43 6f  or;.  }..  /* Co
d7a0: 70 79 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  py the result of
d7b0: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 6e   the function in
d7c0: 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 20 2a  to register P3 *
d7d0: 2f 0a 20 20 69 66 28 20 70 4f 75 74 2d 3e 66 6c  /.  if( pOut->fl
d7e0: 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d  ags & (MEM_Str|M
d7f0: 45 4d 5f 42 6c 6f 62 29 20 29 7b 0a 20 20 20 20  EM_Blob) ){.    
d800: 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
d810: 65 45 6e 63 6f 64 69 6e 67 28 70 43 74 78 2d 3e  eEncoding(pCtx->
d820: 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  pOut, encoding);
d830: 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
d840: 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 43  VdbeMemTooBig(pC
d850: 74 78 2d 3e 70 4f 75 74 29 20 29 20 67 6f 74 6f  tx->pOut) ) goto
d860: 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20   too_big;.  }.. 
d870: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
d880: 70 4f 70 2d 3e 70 33 2c 20 70 43 74 78 2d 3e 70  pOp->p3, pCtx->p
d890: 4f 75 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d  Out);.  UPDATE_M
d8a0: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 43 74 78  AX_BLOBSIZE(pCtx
d8b0: 2d 3e 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  ->pOut);.  break
d8c0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
d8d0: 42 69 74 41 6e 64 20 50 31 20 50 32 20 50 33 20  BitAnd P1 P2 P3 
d8e0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
d8f0: 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 26 72 5b 50   r[P3]=r[P1]&r[P
d900: 32 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68  2].**.** Take th
d910: 65 20 62 69 74 2d 77 69 73 65 20 41 4e 44 20 6f  e bit-wise AND o
d920: 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  f the values in 
d930: 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20  register P1 and 
d940: 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20  P2 and.** store 
d950: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
d960: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
d970: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
d980: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
d990: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
d9a0: 20 4f 70 63 6f 64 65 3a 20 42 69 74 4f 72 20 50   Opcode: BitOr P
d9b0: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
d9c0: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72  ynopsis: r[P3]=r
d9d0: 5b 50 31 5d 7c 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  [P1]|r[P2].**.**
d9e0: 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69   Take the bit-wi
d9f0: 73 65 20 4f 52 20 6f 66 20 74 68 65 20 76 61 6c  se OR of the val
da00: 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ues in register 
da10: 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a  P1 and P2 and.**
da20: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
da30: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
da40: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
da50: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
da60: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
da70: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
da80: 53 68 69 66 74 4c 65 66 74 20 50 31 20 50 32 20  ShiftLeft P1 P2 
da90: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
daa0: 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 3c  is: r[P3]=r[P2]<
dab0: 3c 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69  <r[P1].**.** Shi
dac0: 66 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 76  ft the integer v
dad0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
dae0: 20 50 32 20 74 6f 20 74 68 65 20 6c 65 66 74 20   P2 to the left 
daf0: 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72  by the.** number
db00: 20 6f 66 20 62 69 74 73 20 73 70 65 63 69 66 69   of bits specifi
db10: 65 64 20 62 79 20 74 68 65 20 69 6e 74 65 67 65  ed by the intege
db20: 72 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  r in register P1
db30: 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72  ..** Store the r
db40: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
db50: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
db60: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
db70: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
db80: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
db90: 64 65 3a 20 53 68 69 66 74 52 69 67 68 74 20 50  de: ShiftRight P
dba0: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
dbb0: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72  ynopsis: r[P3]=r
dbc0: 5b 50 32 5d 3e 3e 72 5b 50 31 5d 0a 2a 2a 0a 2a  [P2]>>r[P1].**.*
dbd0: 2a 20 53 68 69 66 74 20 74 68 65 20 69 6e 74 65  * Shift the inte
dbe0: 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72 65 67  ger value in reg
dbf0: 69 73 74 65 72 20 50 32 20 74 6f 20 74 68 65 20  ister P2 to the 
dc00: 72 69 67 68 74 20 62 79 20 74 68 65 0a 2a 2a 20  right by the.** 
dc10: 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20 73  number of bits s
dc20: 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65 20  pecified by the 
dc30: 69 6e 74 65 67 65 72 20 69 6e 20 72 65 67 69 73  integer in regis
dc40: 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65  ter P1..** Store
dc50: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
dc60: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
dc70: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
dc80: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
dc90: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63  lt is NULL..*/.c
dca0: 61 73 65 20 4f 50 5f 42 69 74 41 6e 64 3a 20 20  ase OP_BitAnd:  
dcb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
dcc0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54  * same as TK_BIT
dcd0: 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  AND, in1, in2, o
dce0: 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 42  ut3 */.case OP_B
dcf0: 69 74 4f 72 3a 20 20 20 20 20 20 20 20 20 20 20  itOr:           
dd00: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
dd10: 73 20 54 4b 5f 42 49 54 4f 52 2c 20 69 6e 31 2c  s TK_BITOR, in1,
dd20: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
dd30: 73 65 20 4f 50 5f 53 68 69 66 74 4c 65 66 74 3a  se OP_ShiftLeft:
dd40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
dd50: 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 53 48 49   same as TK_LSHI
dd60: 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  FT, in1, in2, ou
dd70: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68  t3 */.case OP_Sh
dd80: 69 66 74 52 69 67 68 74 3a 20 7b 20 20 20 20 20  iftRight: {     
dd90: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
dda0: 20 54 4b 5f 52 53 48 49 46 54 2c 20 69 6e 31 2c   TK_RSHIFT, in1,
ddb0: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20   in2, out3 */.  
ddc0: 69 36 34 20 69 41 3b 0a 20 20 75 36 34 20 75 41  i64 iA;.  u64 uA
ddd0: 3b 0a 20 20 69 36 34 20 69 42 3b 0a 20 20 75 38  ;.  i64 iB;.  u8
dde0: 20 6f 70 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26   op;..  pIn1 = &
ddf0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
de00: 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
de10: 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d  p->p2];.  pOut =
de20: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
de30: 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
de40: 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67  ags | pIn2->flag
de50: 73 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  s) & MEM_Null ){
de60: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
de70: 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29  MemSetNull(pOut)
de80: 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
de90: 0a 20 20 69 41 20 3d 20 73 71 6c 69 74 65 33 56  .  iA = sqlite3V
dea0: 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32  dbeIntValue(pIn2
deb0: 29 3b 0a 20 20 69 42 20 3d 20 73 71 6c 69 74 65  );.  iB = sqlite
dec0: 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
ded0: 6e 31 29 3b 0a 20 20 6f 70 20 3d 20 70 4f 70 2d  n1);.  op = pOp-
dee0: 3e 6f 70 63 6f 64 65 3b 0a 20 20 69 66 28 20 6f  >opcode;.  if( o
def0: 70 3d 3d 4f 50 5f 42 69 74 41 6e 64 20 29 7b 0a  p==OP_BitAnd ){.
df00: 20 20 20 20 69 41 20 26 3d 20 69 42 3b 0a 20 20      iA &= iB;.  
df10: 7d 65 6c 73 65 20 69 66 28 20 6f 70 3d 3d 4f 50  }else if( op==OP
df20: 5f 42 69 74 4f 72 20 29 7b 0a 20 20 20 20 69 41  _BitOr ){.    iA
df30: 20 7c 3d 20 69 42 3b 0a 20 20 7d 65 6c 73 65 20   |= iB;.  }else 
df40: 69 66 28 20 69 42 21 3d 30 20 29 7b 0a 20 20 20  if( iB!=0 ){.   
df50: 20 61 73 73 65 72 74 28 20 6f 70 3d 3d 4f 50 5f   assert( op==OP_
df60: 53 68 69 66 74 52 69 67 68 74 20 7c 7c 20 6f 70  ShiftRight || op
df70: 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 29  ==OP_ShiftLeft )
df80: 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 73 68 69  ;..    /* If shi
df90: 66 74 69 6e 67 20 62 79 20 61 20 6e 65 67 61 74  fting by a negat
dfa0: 69 76 65 20 61 6d 6f 75 6e 74 2c 20 73 68 69 66  ive amount, shif
dfb0: 74 20 69 6e 20 74 68 65 20 6f 74 68 65 72 20 64  t in the other d
dfc0: 69 72 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  irection */.    
dfd0: 69 66 28 20 69 42 3c 30 20 29 7b 0a 20 20 20 20  if( iB<0 ){.    
dfe0: 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 68 69    assert( OP_Shi
dff0: 66 74 52 69 67 68 74 3d 3d 4f 50 5f 53 68 69 66  ftRight==OP_Shif
e000: 74 4c 65 66 74 2b 31 20 29 3b 0a 20 20 20 20 20  tLeft+1 );.     
e010: 20 6f 70 20 3d 20 32 2a 4f 50 5f 53 68 69 66 74   op = 2*OP_Shift
e020: 4c 65 66 74 20 2b 20 31 20 2d 20 6f 70 3b 0a 20  Left + 1 - op;. 
e030: 20 20 20 20 20 69 42 20 3d 20 69 42 3e 28 2d 36       iB = iB>(-6
e040: 34 29 20 3f 20 2d 69 42 20 3a 20 36 34 3b 0a 20  4) ? -iB : 64;. 
e050: 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 69 42     }..    if( iB
e060: 3e 3d 36 34 20 29 7b 0a 20 20 20 20 20 20 69 41  >=64 ){.      iA
e070: 20 3d 20 28 69 41 3e 3d 30 20 7c 7c 20 6f 70 3d   = (iA>=0 || op=
e080: 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 29 20 3f  =OP_ShiftLeft) ?
e090: 20 30 20 3a 20 2d 31 3b 0a 20 20 20 20 7d 65 6c   0 : -1;.    }el
e0a0: 73 65 7b 0a 20 20 20 20 20 20 6d 65 6d 63 70 79  se{.      memcpy
e0b0: 28 26 75 41 2c 20 26 69 41 2c 20 73 69 7a 65 6f  (&uA, &iA, sizeo
e0c0: 66 28 75 41 29 29 3b 0a 20 20 20 20 20 20 69 66  f(uA));.      if
e0d0: 28 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65  ( op==OP_ShiftLe
e0e0: 66 74 20 29 7b 0a 20 20 20 20 20 20 20 20 75 41  ft ){.        uA
e0f0: 20 3c 3c 3d 20 69 42 3b 0a 20 20 20 20 20 20 7d   <<= iB;.      }
e100: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 75 41  else{.        uA
e110: 20 3e 3e 3d 20 69 42 3b 0a 20 20 20 20 20 20 20   >>= iB;.       
e120: 20 2f 2a 20 53 69 67 6e 2d 65 78 74 65 6e 64 20   /* Sign-extend 
e130: 6f 6e 20 61 20 72 69 67 68 74 20 73 68 69 66 74  on a right shift
e140: 20 6f 66 20 61 20 6e 65 67 61 74 69 76 65 20 6e   of a negative n
e150: 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 20 20 20  umber */.       
e160: 20 69 66 28 20 69 41 3c 30 20 29 20 75 41 20 7c   if( iA<0 ) uA |
e170: 3d 20 28 28 28 28 75 36 34 29 30 78 66 66 66 66  = ((((u64)0xffff
e180: 66 66 66 66 29 3c 3c 33 32 29 7c 30 78 66 66 66  ffff)<<32)|0xfff
e190: 66 66 66 66 66 29 20 3c 3c 20 28 36 34 2d 69 42  fffff) << (64-iB
e1a0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
e1b0: 20 6d 65 6d 63 70 79 28 26 69 41 2c 20 26 75 41   memcpy(&iA, &uA
e1c0: 2c 20 73 69 7a 65 6f 66 28 69 41 29 29 3b 0a 20  , sizeof(iA));. 
e1d0: 20 20 20 7d 0a 20 20 7d 0a 20 20 70 4f 75 74 2d     }.  }.  pOut-
e1e0: 3e 75 2e 69 20 3d 20 69 41 3b 0a 20 20 4d 65 6d  >u.i = iA;.  Mem
e1f0: 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
e200: 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72  , MEM_Int);.  br
e210: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
e220: 65 3a 20 41 64 64 49 6d 6d 20 20 50 31 20 50 32  e: AddImm  P1 P2
e230: 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
e240: 69 73 3a 20 72 5b 50 31 5d 3d 72 5b 50 31 5d 2b  is: r[P1]=r[P1]+
e250: 50 32 0a 2a 2a 20 0a 2a 2a 20 41 64 64 20 74 68  P2.** .** Add th
e260: 65 20 63 6f 6e 73 74 61 6e 74 20 50 32 20 74 6f  e constant P2 to
e270: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
e280: 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 54 68  gister P1..** Th
e290: 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c 77 61  e result is alwa
e2a0: 79 73 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a  ys an integer..*
e2b0: 2a 0a 2a 2a 20 54 6f 20 66 6f 72 63 65 20 61 6e  *.** To force an
e2c0: 79 20 72 65 67 69 73 74 65 72 20 74 6f 20 62 65  y register to be
e2d0: 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 6a 75 73   an integer, jus
e2e0: 74 20 61 64 64 20 30 2e 0a 2a 2f 0a 63 61 73 65  t add 0..*/.case
e2f0: 20 4f 50 5f 41 64 64 49 6d 6d 3a 20 7b 20 20 20   OP_AddImm: {   
e300: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20           /* in1 
e310: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
e320: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65  m[pOp->p1];.  me
e330: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
e340: 2c 20 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74  , pIn1);.  sqlit
e350: 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
e360: 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e  ify(pIn1);.  pIn
e370: 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70  1->u.i += pOp->p
e380: 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  2;.  break;.}../
e390: 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 73 74 42 65  * Opcode: MustBe
e3a0: 49 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Int P1 P2 * * *.
e3b0: 2a 2a 20 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65  ** .** Force the
e3c0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
e3d0: 65 72 20 50 31 20 74 6f 20 62 65 20 61 6e 20 69  er P1 to be an i
e3e0: 6e 74 65 67 65 72 2e 20 20 49 66 20 74 68 65 20  nteger.  If the 
e3f0: 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69  value.** in P1 i
e400: 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72  s not an integer
e410: 20 61 6e 64 20 63 61 6e 6e 6f 74 20 62 65 20 63   and cannot be c
e420: 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e  onverted into an
e430: 20 69 6e 74 65 67 65 72 0a 2a 2a 20 77 69 74 68   integer.** with
e440: 6f 75 74 20 64 61 74 61 20 6c 6f 73 73 2c 20 74  out data loss, t
e450: 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  hen jump immedia
e460: 74 65 6c 79 20 74 6f 20 50 32 2c 20 6f 72 20 69  tely to P2, or i
e470: 66 20 50 32 3d 3d 30 0a 2a 2a 20 72 61 69 73 65  f P2==0.** raise
e480: 20 61 6e 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41   an SQLITE_MISMA
e490: 54 43 48 20 65 78 63 65 70 74 69 6f 6e 2e 0a 2a  TCH exception..*
e4a0: 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 73 74 42 65  /.case OP_MustBe
e4b0: 49 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  Int: {          
e4c0: 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
e4d0: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
e4e0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
e4f0: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
e500: 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20  MEM_Int)==0 ){. 
e510: 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79     applyAffinity
e520: 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46  (pIn1, SQLITE_AF
e530: 46 5f 4e 55 4d 45 52 49 43 2c 20 65 6e 63 6f 64  F_NUMERIC, encod
e540: 69 6e 67 29 3b 0a 20 20 20 20 56 64 62 65 42 72  ing);.    VdbeBr
e550: 61 6e 63 68 54 61 6b 65 6e 28 28 70 49 6e 31 2d  anchTaken((pIn1-
e560: 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 29 3d  >flags&MEM_Int)=
e570: 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69 66 28 20  =0, 2);.    if( 
e580: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
e590: 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20  EM_Int)==0 ){.  
e5a0: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d      if( pOp->p2=
e5b0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  =0 ){.        rc
e5c0: 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54   = SQLITE_MISMAT
e5d0: 43 48 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f  CH;.        goto
e5e0: 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
e5f0: 72 6f 72 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  ror;.      }else
e600: 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6a  {.        goto j
e610: 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 20  ump_to_p2;.     
e620: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 4d   }.    }.  }.  M
e630: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 49  emSetTypeFlag(pI
e640: 6e 31 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  n1, MEM_Int);.  
e650: 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65  break;.}..#ifnde
e660: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
e670: 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20  OATING_POINT./* 
e680: 4f 70 63 6f 64 65 3a 20 52 65 61 6c 41 66 66 69  Opcode: RealAffi
e690: 6e 69 74 79 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  nity P1 * * * *.
e6a0: 2a 2a 0a 2a 2a 20 49 66 20 72 65 67 69 73 74 65  **.** If registe
e6b0: 72 20 50 31 20 68 6f 6c 64 73 20 61 6e 20 69 6e  r P1 holds an in
e6c0: 74 65 67 65 72 20 63 6f 6e 76 65 72 74 20 69 74  teger convert it
e6d0: 20 74 6f 20 61 20 72 65 61 6c 20 76 61 6c 75 65   to a real value
e6e0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
e6f0: 6f 64 65 20 69 73 20 75 73 65 64 20 77 68 65 6e  ode is used when
e700: 20 65 78 74 72 61 63 74 69 6e 67 20 69 6e 66 6f   extracting info
e710: 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 61 20 63  rmation from a c
e720: 6f 6c 75 6d 6e 20 74 68 61 74 0a 2a 2a 20 68 61  olumn that.** ha
e730: 73 20 52 45 41 4c 20 61 66 66 69 6e 69 74 79 2e  s REAL affinity.
e740: 20 20 53 75 63 68 20 63 6f 6c 75 6d 6e 20 76 61    Such column va
e750: 6c 75 65 73 20 6d 61 79 20 73 74 69 6c 6c 20 62  lues may still b
e760: 65 20 73 74 6f 72 65 64 20 61 73 0a 2a 2a 20 69  e stored as.** i
e770: 6e 74 65 67 65 72 73 2c 20 66 6f 72 20 73 70 61  ntegers, for spa
e780: 63 65 20 65 66 66 69 63 69 65 6e 63 79 2c 20 62  ce efficiency, b
e790: 75 74 20 61 66 74 65 72 20 65 78 74 72 61 63 74  ut after extract
e7a0: 69 6f 6e 20 77 65 20 77 61 6e 74 20 74 68 65 6d  ion we want them
e7b0: 0a 2a 2a 20 74 6f 20 68 61 76 65 20 6f 6e 6c 79  .** to have only
e7c0: 20 61 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a   a real value..*
e7d0: 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 6c 41 66  /.case OP_RealAf
e7e0: 66 69 6e 69 74 79 3a 20 7b 20 20 20 20 20 20 20  finity: {       
e7f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
e800: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
e810: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
e820: 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  if( pIn1->flags 
e830: 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20  & MEM_Int ){.   
e840: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
e850: 65 61 6c 69 66 79 28 70 49 6e 31 29 3b 0a 20 20  ealify(pIn1);.  
e860: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
e870: 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
e880: 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a  ITE_OMIT_CAST./*
e890: 20 4f 70 63 6f 64 65 3a 20 43 61 73 74 20 50 31   Opcode: Cast P1
e8a0: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
e8b0: 6f 70 73 69 73 3a 20 61 66 66 69 6e 69 74 79 28  opsis: affinity(
e8c0: 72 5b 50 31 5d 29 0a 2a 2a 0a 2a 2a 20 46 6f 72  r[P1]).**.** For
e8d0: 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ce the value in 
e8e0: 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62  register P1 to b
e8f0: 65 20 74 68 65 20 74 79 70 65 20 64 65 66 69 6e  e the type defin
e900: 65 64 20 62 79 20 50 32 2e 0a 2a 2a 20 0a 2a 2a  ed by P2..** .**
e910: 20 3c 75 6c 3e 0a 2a 2a 20 3c 6c 69 20 76 61 6c   <ul>.** <li val
e920: 75 65 3d 22 39 37 22 3e 20 54 45 58 54 0a 2a 2a  ue="97"> TEXT.**
e930: 20 3c 6c 69 20 76 61 6c 75 65 3d 22 39 38 22 3e   <li value="98">
e940: 20 42 4c 4f 42 0a 2a 2a 20 3c 6c 69 20 76 61 6c   BLOB.** <li val
e950: 75 65 3d 22 39 39 22 3e 20 4e 55 4d 45 52 49 43  ue="99"> NUMERIC
e960: 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22 31  .** <li value="1
e970: 30 30 22 3e 20 49 4e 54 45 47 45 52 0a 2a 2a 20  00"> INTEGER.** 
e980: 3c 6c 69 20 76 61 6c 75 65 3d 22 31 30 31 22 3e  <li value="101">
e990: 20 52 45 41 4c 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a   REAL.** </ul>.*
e9a0: 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75  *.** A NULL valu
e9b0: 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64  e is not changed
e9c0: 20 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65   by this routine
e9d0: 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55  .  It remains NU
e9e0: 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  LL..*/.case OP_C
e9f0: 61 73 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ast: {          
ea00: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a          /* in1 *
ea10: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
ea20: 3e 70 32 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f  >p2>=SQLITE_AFF_
ea30: 42 4c 4f 42 20 26 26 20 70 4f 70 2d 3e 70 32 3c  BLOB && pOp->p2<
ea40: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c  =SQLITE_AFF_REAL
ea50: 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
ea60: 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
ea70: 41 46 46 5f 54 45 58 54 20 29 3b 0a 20 20 74 65  AFF_TEXT );.  te
ea80: 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d  stcase( pOp->p2=
ea90: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42  =SQLITE_AFF_BLOB
eaa0: 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
eab0: 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
eac0: 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 3b 0a 20  AFF_NUMERIC );. 
ead0: 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e   testcase( pOp->
eae0: 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 49  p2==SQLITE_AFF_I
eaf0: 4e 54 45 47 45 52 20 29 3b 0a 20 20 74 65 73 74  NTEGER );.  test
eb00: 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53  case( pOp->p2==S
eb10: 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 29  QLITE_AFF_REAL )
eb20: 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
eb30: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d  [pOp->p1];.  mem
eb40: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
eb50: 20 70 49 6e 31 29 3b 0a 20 20 72 63 20 3d 20 45   pIn1);.  rc = E
eb60: 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b  xpandBlob(pIn1);
eb70: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
eb80: 6d 43 61 73 74 28 70 49 6e 31 2c 20 70 4f 70 2d  mCast(pIn1, pOp-
eb90: 3e 70 32 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  >p2, encoding);.
eba0: 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
ebb0: 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 69  BSIZE(pIn1);.  i
ebc0: 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
ebd0: 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
ebe0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
ebf0: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
ec00: 54 5f 43 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70  T_CAST */../* Op
ec10: 63 6f 64 65 3a 20 45 71 20 50 31 20 50 32 20 50  code: Eq P1 P2 P
ec20: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
ec30: 73 69 73 3a 20 49 46 20 72 5b 50 33 5d 3d 3d 72  sis: IF r[P3]==r
ec40: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61  [P1].**.** Compa
ec50: 72 65 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  re the values in
ec60: 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64   register P1 and
ec70: 20 50 33 2e 20 20 49 66 20 72 65 67 28 50 33 29   P3.  If reg(P3)
ec80: 3d 3d 72 65 67 28 50 31 29 20 74 68 65 6e 0a 2a  ==reg(P1) then.*
ec90: 2a 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73  * jump to addres
eca0: 73 20 50 32 2e 20 20 4f 72 20 69 66 20 74 68 65  s P2.  Or if the
ecb0: 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20   SQLITE_STOREP2 
ecc0: 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 50  flag is set in P
ecd0: 35 2c 20 74 68 65 6e 0a 2a 2a 20 73 74 6f 72 65  5, then.** store
ece0: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63   the result of c
ecf0: 6f 6d 70 61 72 69 73 6f 6e 20 69 6e 20 72 65 67  omparison in reg
ed00: 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
ed10: 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  The SQLITE_AFF_M
ed20: 41 53 4b 20 70 6f 72 74 69 6f 6e 20 6f 66 20 50  ASK portion of P
ed30: 35 20 6d 75 73 74 20 62 65 20 61 6e 20 61 66 66  5 must be an aff
ed40: 69 6e 69 74 79 20 63 68 61 72 61 63 74 65 72 20  inity character 
ed50: 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f  -.** SQLITE_AFF_
ed60: 54 45 58 54 2c 20 53 51 4c 49 54 45 5f 41 46 46  TEXT, SQLITE_AFF
ed70: 5f 49 4e 54 45 47 45 52 2c 20 61 6e 64 20 73 6f  _INTEGER, and so
ed80: 20 66 6f 72 74 68 2e 20 41 6e 20 61 74 74 65 6d   forth. An attem
ed90: 70 74 20 69 73 20 6d 61 64 65 20 0a 2a 2a 20 74  pt is made .** t
eda0: 6f 20 63 6f 65 72 63 65 20 62 6f 74 68 20 69 6e  o coerce both in
edb0: 70 75 74 73 20 61 63 63 6f 72 64 69 6e 67 20 74  puts according t
edc0: 6f 20 74 68 69 73 20 61 66 66 69 6e 69 74 79 20  o this affinity 
edd0: 62 65 66 6f 72 65 20 74 68 65 0a 2a 2a 20 63 6f  before the.** co
ede0: 6d 70 61 72 69 73 6f 6e 20 69 73 20 6d 61 64 65  mparison is made
edf0: 2e 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f  . If the SQLITE_
ee00: 41 46 46 5f 4d 41 53 4b 20 69 73 20 30 78 30 30  AFF_MASK is 0x00
ee10: 2c 20 74 68 65 6e 20 6e 75 6d 65 72 69 63 0a 2a  , then numeric.*
ee20: 2a 20 61 66 66 69 6e 69 74 79 20 69 73 20 75 73  * affinity is us
ee30: 65 64 2e 20 4e 6f 74 65 20 74 68 61 74 20 74 68  ed. Note that th
ee40: 65 20 61 66 66 69 6e 69 74 79 20 63 6f 6e 76 65  e affinity conve
ee50: 72 73 69 6f 6e 73 20 61 72 65 20 73 74 6f 72 65  rsions are store
ee60: 64 0a 2a 2a 20 62 61 63 6b 20 69 6e 74 6f 20 74  d.** back into t
ee70: 68 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65  he input registe
ee80: 72 73 20 50 31 20 61 6e 64 20 50 33 2e 20 20 53  rs P1 and P3.  S
ee90: 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20 63 61  o this opcode ca
eea0: 6e 20 63 61 75 73 65 0a 2a 2a 20 70 65 72 73 69  n cause.** persi
eeb0: 73 74 65 6e 74 20 63 68 61 6e 67 65 73 20 74 6f  stent changes to
eec0: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e   registers P1 an
eed0: 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65  d P3..**.** Once
eee0: 20 61 6e 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73   any conversions
eef0: 20 68 61 76 65 20 74 61 6b 65 6e 20 70 6c 61 63   have taken plac
ef00: 65 2c 20 61 6e 64 20 6e 65 69 74 68 65 72 20 76  e, and neither v
ef10: 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20 0a 2a  alue is NULL, .*
ef20: 2a 20 74 68 65 20 76 61 6c 75 65 73 20 61 72 65  * the values are
ef30: 20 63 6f 6d 70 61 72 65 64 2e 20 49 66 20 62 6f   compared. If bo
ef40: 74 68 20 76 61 6c 75 65 73 20 61 72 65 20 62 6c  th values are bl
ef50: 6f 62 73 20 74 68 65 6e 20 6d 65 6d 63 6d 70 28  obs then memcmp(
ef60: 29 20 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20  ) is.** used to 
ef70: 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 72 65  determine the re
ef80: 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63 6f 6d  sults of the com
ef90: 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 62 6f 74  parison.  If bot
efa0: 68 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20  h values.** are 
efb0: 74 65 78 74 2c 20 74 68 65 6e 20 74 68 65 20 61  text, then the a
efc0: 70 70 72 6f 70 72 69 61 74 65 20 63 6f 6c 6c 61  ppropriate colla
efd0: 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73 70  ting function sp
efe0: 65 63 69 66 69 65 64 20 69 6e 0a 2a 2a 20 50 34  ecified in.** P4
eff0: 20 69 73 20 75 73 65 64 20 74 6f 20 64 6f 20 74   is used to do t
f000: 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20  he comparison.  
f010: 49 66 20 50 34 20 69 73 20 6e 6f 74 20 73 70 65  If P4 is not spe
f020: 63 69 66 69 65 64 20 74 68 65 6e 0a 2a 2a 20 6d  cified then.** m
f030: 65 6d 63 6d 70 28 29 20 69 73 20 75 73 65 64 20  emcmp() is used 
f040: 74 6f 20 63 6f 6d 70 61 72 65 20 74 65 78 74 20  to compare text 
f050: 73 74 72 69 6e 67 2e 20 20 49 66 20 62 6f 74 68  string.  If both
f060: 20 76 61 6c 75 65 73 20 61 72 65 0a 2a 2a 20 6e   values are.** n
f070: 75 6d 65 72 69 63 2c 20 74 68 65 6e 20 61 20 6e  umeric, then a n
f080: 75 6d 65 72 69 63 20 63 6f 6d 70 61 72 69 73 6f  umeric compariso
f090: 6e 20 69 73 20 75 73 65 64 2e 20 49 66 20 74 68  n is used. If th
f0a0: 65 20 74 77 6f 20 76 61 6c 75 65 73 0a 2a 2a 20  e two values.** 
f0b0: 61 72 65 20 6f 66 20 64 69 66 66 65 72 65 6e 74  are of different
f0c0: 20 74 79 70 65 73 2c 20 74 68 65 6e 20 6e 75 6d   types, then num
f0d0: 62 65 72 73 20 61 72 65 20 63 6f 6e 73 69 64 65  bers are conside
f0e0: 72 65 64 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a  red less than.**
f0f0: 20 73 74 72 69 6e 67 73 20 61 6e 64 20 73 74 72   strings and str
f100: 69 6e 67 73 20 61 72 65 20 63 6f 6e 73 69 64 65  ings are conside
f110: 72 65 64 20 6c 65 73 73 20 74 68 61 6e 20 62 6c  red less than bl
f120: 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51  obs..**.** If SQ
f130: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73  LITE_NULLEQ is s
f140: 65 74 20 69 6e 20 50 35 20 74 68 65 6e 20 74 68  et in P5 then th
f150: 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70  e result of comp
f160: 61 72 69 73 6f 6e 20 69 73 20 61 6c 77 61 79 73  arison is always
f170: 20 65 69 74 68 65 72 0a 2a 2a 20 74 72 75 65 20   either.** true 
f180: 6f 72 20 66 61 6c 73 65 20 61 6e 64 20 69 73 20  or false and is 
f190: 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20 49 66 20  never NULL.  If 
f1a0: 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72  both operands ar
f1b0: 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20  e NULL then the 
f1c0: 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d  result.** of com
f1d0: 70 61 72 69 73 6f 6e 20 69 73 20 74 72 75 65 2e  parison is true.
f1e0: 20 20 49 66 20 65 69 74 68 65 72 20 6f 70 65 72    If either oper
f1f0: 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e  and is NULL then
f200: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 66   the result is f
f210: 61 6c 73 65 2e 0a 2a 2a 20 49 66 20 6e 65 69 74  alse..** If neit
f220: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
f230: 55 4c 4c 20 74 68 65 20 72 65 73 75 6c 74 20 69  ULL the result i
f240: 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 69 74  s the same as it
f250: 20 77 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20   would be if.** 
f260: 74 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45  the SQLITE_NULLE
f270: 51 20 66 6c 61 67 20 77 65 72 65 20 6f 6d 69 74  Q flag were omit
f280: 74 65 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2a 0a  ted from P5..**.
f290: 2a 2a 20 49 66 20 62 6f 74 68 20 53 51 4c 49 54  ** If both SQLIT
f2a0: 45 5f 53 54 4f 52 45 50 32 20 61 6e 64 20 53 51  E_STOREP2 and SQ
f2b0: 4c 49 54 45 5f 4b 45 45 50 4e 55 4c 4c 20 66 6c  LITE_KEEPNULL fl
f2c0: 61 67 73 20 61 72 65 20 73 65 74 20 74 68 65 6e  ags are set then
f2d0: 20 74 68 65 0a 2a 2a 20 63 6f 6e 74 65 6e 74 20   the.** content 
f2e0: 6f 66 20 72 5b 50 32 5d 20 69 73 20 6f 6e 6c 79  of r[P2] is only
f2f0: 20 63 68 61 6e 67 65 64 20 69 66 20 74 68 65 20   changed if the 
f300: 6e 65 77 20 76 61 6c 75 65 20 69 73 20 4e 55 4c  new value is NUL
f310: 4c 20 6f 72 20 30 20 28 66 61 6c 73 65 29 2e 0a  L or 0 (false)..
f320: 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  ** In other word
f330: 73 2c 20 61 20 70 72 69 6f 72 20 72 5b 50 32 5d  s, a prior r[P2]
f340: 20 76 61 6c 75 65 20 77 69 6c 6c 20 6e 6f 74 20   value will not 
f350: 62 65 20 6f 76 65 72 77 72 69 74 74 65 6e 20 62  be overwritten b
f360: 79 20 31 20 28 74 72 75 65 29 2e 0a 2a 2f 0a 2f  y 1 (true)..*/./
f370: 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 20 50 31 20  * Opcode: Ne P1 
f380: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
f390: 79 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b 50 33  ynopsis: IF r[P3
f3a0: 5d 21 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54  ]!=r[P1].**.** T
f3b0: 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  his works just l
f3c0: 69 6b 65 20 74 68 65 20 45 71 20 6f 70 63 6f 64  ike the Eq opcod
f3d0: 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  e except that th
f3e0: 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
f3f0: 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e  if.** the operan
f400: 64 73 20 69 6e 20 72 65 67 69 73 74 65 72 73 20  ds in registers 
f410: 50 31 20 61 6e 64 20 50 33 20 61 72 65 20 6e 6f  P1 and P3 are no
f420: 74 20 65 71 75 61 6c 2e 20 20 53 65 65 20 74 68  t equal.  See th
f430: 65 20 45 71 20 6f 70 63 6f 64 65 20 66 6f 72 0a  e Eq opcode for.
f440: 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  ** additional in
f450: 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  formation..**.**
f460: 20 49 66 20 62 6f 74 68 20 53 51 4c 49 54 45 5f   If both SQLITE_
f470: 53 54 4f 52 45 50 32 20 61 6e 64 20 53 51 4c 49  STOREP2 and SQLI
f480: 54 45 5f 4b 45 45 50 4e 55 4c 4c 20 66 6c 61 67  TE_KEEPNULL flag
f490: 73 20 61 72 65 20 73 65 74 20 74 68 65 6e 20 74  s are set then t
f4a0: 68 65 0a 2a 2a 20 63 6f 6e 74 65 6e 74 20 6f 66  he.** content of
f4b0: 20 72 5b 50 32 5d 20 69 73 20 6f 6e 6c 79 20 63   r[P2] is only c
f4c0: 68 61 6e 67 65 64 20 69 66 20 74 68 65 20 6e 65  hanged if the ne
f4d0: 77 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 20  w value is NULL 
f4e0: 6f 72 20 31 20 28 74 72 75 65 29 2e 0a 2a 2a 20  or 1 (true)..** 
f4f0: 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
f500: 61 20 70 72 69 6f 72 20 72 5b 50 32 5d 20 76 61  a prior r[P2] va
f510: 6c 75 65 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20  lue will not be 
f520: 6f 76 65 72 77 72 69 74 74 65 6e 20 62 79 20 30  overwritten by 0
f530: 20 28 66 61 6c 73 65 29 2e 0a 2a 2f 0a 2f 2a 20   (false)..*/./* 
f540: 4f 70 63 6f 64 65 3a 20 4c 74 20 50 31 20 50 32  Opcode: Lt P1 P2
f550: 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
f560: 6f 70 73 69 73 3a 20 49 46 20 72 5b 50 33 5d 3c  opsis: IF r[P3]<
f570: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70  r[P1].**.** Comp
f580: 61 72 65 20 74 68 65 20 76 61 6c 75 65 73 20 69  are the values i
f590: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e  n register P1 an
f5a0: 64 20 50 33 2e 20 20 49 66 20 72 65 67 28 50 33  d P3.  If reg(P3
f5b0: 29 3c 72 65 67 28 50 31 29 20 74 68 65 6e 0a 2a  )<reg(P1) then.*
f5c0: 2a 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73  * jump to addres
f5d0: 73 20 50 32 2e 20 20 4f 72 20 69 66 20 74 68 65  s P2.  Or if the
f5e0: 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20   SQLITE_STOREP2 
f5f0: 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 50  flag is set in P
f600: 35 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65 20 72  5 store.** the r
f610: 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69  esult of compari
f620: 73 6f 6e 20 28 30 20 6f 72 20 31 20 6f 72 20 4e  son (0 or 1 or N
f630: 55 4c 4c 29 20 69 6e 74 6f 20 72 65 67 69 73 74  ULL) into regist
f640: 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  er P2..**.** If 
f650: 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  the SQLITE_JUMPI
f660: 46 4e 55 4c 4c 20 62 69 74 20 6f 66 20 50 35 20  FNULL bit of P5 
f670: 69 73 20 73 65 74 20 61 6e 64 20 65 69 74 68 65  is set and eithe
f680: 72 20 72 65 67 28 50 31 29 20 6f 72 0a 2a 2a 20  r reg(P1) or.** 
f690: 72 65 67 28 50 33 29 20 69 73 20 4e 55 4c 4c 20  reg(P3) is NULL 
f6a0: 74 68 65 6e 20 74 68 65 20 74 61 6b 65 20 74 68  then the take th
f6b0: 65 20 6a 75 6d 70 2e 20 20 49 66 20 74 68 65 20  e jump.  If the 
f6c0: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
f6d0: 4c 20 0a 2a 2a 20 62 69 74 20 69 73 20 63 6c 65  L .** bit is cle
f6e0: 61 72 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  ar then fall thr
f6f0: 6f 75 67 68 20 69 66 20 65 69 74 68 65 72 20 6f  ough if either o
f700: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 0a  perand is NULL..
f710: 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45  **.** The SQLITE
f720: 5f 41 46 46 5f 4d 41 53 4b 20 70 6f 72 74 69 6f  _AFF_MASK portio
f730: 6e 20 6f 66 20 50 35 20 6d 75 73 74 20 62 65 20  n of P5 must be 
f740: 61 6e 20 61 66 66 69 6e 69 74 79 20 63 68 61 72  an affinity char
f750: 61 63 74 65 72 20 2d 0a 2a 2a 20 53 51 4c 49 54  acter -.** SQLIT
f760: 45 5f 41 46 46 5f 54 45 58 54 2c 20 53 51 4c 49  E_AFF_TEXT, SQLI
f770: 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 2c 20  TE_AFF_INTEGER, 
f780: 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 41 6e  and so forth. An
f790: 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64 65   attempt is made
f7a0: 20 0a 2a 2a 20 74 6f 20 63 6f 65 72 63 65 20 62   .** to coerce b
f7b0: 6f 74 68 20 69 6e 70 75 74 73 20 61 63 63 6f 72  oth inputs accor
f7c0: 64 69 6e 67 20 74 6f 20 74 68 69 73 20 61 66 66  ding to this aff
f7d0: 69 6e 69 74 79 20 62 65 66 6f 72 65 20 74 68 65  inity before the
f7e0: 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69  .** comparison i
f7f0: 73 20 6d 61 64 65 2e 20 49 66 20 74 68 65 20 53  s made. If the S
f800: 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 69  QLITE_AFF_MASK i
f810: 73 20 30 78 30 30 2c 20 74 68 65 6e 20 6e 75 6d  s 0x00, then num
f820: 65 72 69 63 0a 2a 2a 20 61 66 66 69 6e 69 74 79  eric.** affinity
f830: 20 69 73 20 75 73 65 64 2e 20 4e 6f 74 65 20 74   is used. Note t
f840: 68 61 74 20 74 68 65 20 61 66 66 69 6e 69 74 79  hat the affinity
f850: 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 61 72 65   conversions are
f860: 20 73 74 6f 72 65 64 0a 2a 2a 20 62 61 63 6b 20   stored.** back 
f870: 69 6e 74 6f 20 74 68 65 20 69 6e 70 75 74 20 72  into the input r
f880: 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20  egisters P1 and 
f890: 50 33 2e 20 20 53 6f 20 74 68 69 73 20 6f 70 63  P3.  So this opc
f8a0: 6f 64 65 20 63 61 6e 20 63 61 75 73 65 0a 2a 2a  ode can cause.**
f8b0: 20 70 65 72 73 69 73 74 65 6e 74 20 63 68 61 6e   persistent chan
f8c0: 67 65 73 20 74 6f 20 72 65 67 69 73 74 65 72 73  ges to registers
f8d0: 20 50 31 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a   P1 and P3..**.*
f8e0: 2a 20 4f 6e 63 65 20 61 6e 79 20 63 6f 6e 76 65  * Once any conve
f8f0: 72 73 69 6f 6e 73 20 68 61 76 65 20 74 61 6b 65  rsions have take
f900: 6e 20 70 6c 61 63 65 2c 20 61 6e 64 20 6e 65 69  n place, and nei
f910: 74 68 65 72 20 76 61 6c 75 65 20 69 73 20 4e 55  ther value is NU
f920: 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75  LL, .** the valu
f930: 65 73 20 61 72 65 20 63 6f 6d 70 61 72 65 64 2e  es are compared.
f940: 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20   If both values 
f950: 61 72 65 20 62 6c 6f 62 73 20 74 68 65 6e 20 6d  are blobs then m
f960: 65 6d 63 6d 70 28 29 20 69 73 0a 2a 2a 20 75 73  emcmp() is.** us
f970: 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  ed to determine 
f980: 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74  the results of t
f990: 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20  he comparison.  
f9a0: 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 0a 2a  If both values.*
f9b0: 2a 20 61 72 65 20 74 65 78 74 2c 20 74 68 65 6e  * are text, then
f9c0: 20 74 68 65 20 61 70 70 72 6f 70 72 69 61 74 65   the appropriate
f9d0: 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74   collating funct
f9e0: 69 6f 6e 20 73 70 65 63 69 66 69 65 64 20 69 6e  ion specified in
f9f0: 0a 2a 2a 20 50 34 20 69 73 20 20 75 73 65 64 20  .** P4 is  used 
fa00: 74 6f 20 64 6f 20 74 68 65 20 63 6f 6d 70 61 72  to do the compar
fa10: 69 73 6f 6e 2e 20 20 49 66 20 50 34 20 69 73 20  ison.  If P4 is 
fa20: 6e 6f 74 20 73 70 65 63 69 66 69 65 64 20 74 68  not specified th
fa30: 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29 20 69  en.** memcmp() i
fa40: 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 61 72  s used to compar
fa50: 65 20 74 65 78 74 20 73 74 72 69 6e 67 2e 20 20  e text string.  
fa60: 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61  If both values a
fa70: 72 65 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c 20 74  re.** numeric, t
fa80: 68 65 6e 20 61 20 6e 75 6d 65 72 69 63 20 63 6f  hen a numeric co
fa90: 6d 70 61 72 69 73 6f 6e 20 69 73 20 75 73 65 64  mparison is used
faa0: 2e 20 49 66 20 74 68 65 20 74 77 6f 20 76 61 6c  . If the two val
fab0: 75 65 73 0a 2a 2a 20 61 72 65 20 6f 66 20 64 69  ues.** are of di
fac0: 66 66 65 72 65 6e 74 20 74 79 70 65 73 2c 20 74  fferent types, t
fad0: 68 65 6e 20 6e 75 6d 62 65 72 73 20 61 72 65 20  hen numbers are 
fae0: 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20  considered less 
faf0: 74 68 61 6e 0a 2a 2a 20 73 74 72 69 6e 67 73 20  than.** strings 
fb00: 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65 20  and strings are 
fb10: 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73 20  considered less 
fb20: 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 2f  than blobs..*/./
fb30: 2a 20 4f 70 63 6f 64 65 3a 20 4c 65 20 50 31 20  * Opcode: Le P1 
fb40: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
fb50: 79 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b 50 33  ynopsis: IF r[P3
fb60: 5d 3c 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54  ]<=r[P1].**.** T
fb70: 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  his works just l
fb80: 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  ike the Lt opcod
fb90: 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  e except that th
fba0: 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
fbb0: 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e  if.** the conten
fbc0: 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33  t of register P3
fbd0: 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72   is less than or
fbe0: 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f   equal to the co
fbf0: 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69  ntent of.** regi
fc00: 73 74 65 72 20 50 31 2e 20 20 53 65 65 20 74 68  ster P1.  See th
fc10: 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20  e Lt opcode for 
fc20: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
fc30: 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70  mation..*/./* Op
fc40: 63 6f 64 65 3a 20 47 74 20 50 31 20 50 32 20 50  code: Gt P1 P2 P
fc50: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
fc60: 73 69 73 3a 20 49 46 20 72 5b 50 33 5d 3e 72 5b  sis: IF r[P3]>r[
fc70: 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77  P1].**.** This w
fc80: 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74  orks just like t
fc90: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63  he Lt opcode exc
fca0: 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d  ept that the jum
fcb0: 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a  p is taken if.**
fcc0: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
fcd0: 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 67  register P3 is g
fce0: 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20  reater than the 
fcf0: 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65  content of.** re
fd00: 67 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20  gister P1.  See 
fd10: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f  the Lt opcode fo
fd20: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
fd30: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20  ormation..*/./* 
fd40: 4f 70 63 6f 64 65 3a 20 47 65 20 50 31 20 50 32  Opcode: Ge P1 P2
fd50: 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
fd60: 6f 70 73 69 73 3a 20 49 46 20 72 5b 50 33 5d 3e  opsis: IF r[P3]>
fd70: 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 68 69  =r[P1].**.** Thi
fd80: 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  s works just lik
fd90: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
fda0: 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
fdb0: 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
fdc0: 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  .** the content 
fdd0: 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69  of register P3 i
fde0: 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f  s greater than o
fdf0: 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 63  r equal to the c
fe00: 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67  ontent of.** reg
fe10: 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20 74  ister P1.  See t
fe20: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72  he Lt opcode for
fe30: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
fe40: 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  rmation..*/.case
fe50: 20 4f 50 5f 45 71 3a 20 20 20 20 20 20 20 20 20   OP_Eq:         
fe60: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
fe70: 20 54 4b 5f 45 51 2c 20 6a 75 6d 70 2c 20 69 6e   TK_EQ, jump, in
fe80: 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  1, in3 */.case O
fe90: 50 5f 4e 65 3a 20 20 20 20 20 20 20 20 20 20 20  P_Ne:           
fea0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
feb0: 4b 5f 4e 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c  K_NE, jump, in1,
fec0: 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
fed0: 4c 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  Lt:             
fee0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
fef0: 4c 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69  LT, jump, in1, i
ff00: 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 65  n3 */.case OP_Le
ff10: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
ff20: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 45  /* same as TK_LE
ff30: 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  , jump, in1, in3
ff40: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 74 3a 20   */.case OP_Gt: 
ff50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ff60: 20 73 61 6d 65 20 61 73 20 54 4b 5f 47 54 2c 20   same as TK_GT, 
ff70: 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
ff80: 2f 0a 63 61 73 65 20 4f 50 5f 47 65 3a 20 7b 20  /.case OP_Ge: { 
ff90: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
ffa0: 61 6d 65 20 61 73 20 54 4b 5f 47 45 2c 20 6a 75  ame as TK_GE, ju
ffb0: 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
ffc0: 20 20 69 6e 74 20 72 65 73 2c 20 72 65 73 32 3b    int res, res2;
ffd0: 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20        /* Result 
ffe0: 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  of the compariso
fff0: 6e 20 6f 66 20 70 49 6e 31 20 61 67 61 69 6e 73  n of pIn1 agains
10000 74 20 70 49 6e 33 20 2a 2f 0a 20 20 63 68 61 72  t pIn3 */.  char
10010 20 61 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20   affinity;      
10020 2f 2a 20 41 66 66 69 6e 69 74 79 20 74 6f 20 75  /* Affinity to u
10030 73 65 20 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f  se for compariso
10040 6e 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73  n */.  u16 flags
10050 31 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f  1;         /* Co
10060 70 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61  py of initial va
10070 6c 75 65 20 6f 66 20 70 49 6e 31 2d 3e 66 6c 61  lue of pIn1->fla
10080 67 73 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67  gs */.  u16 flag
10090 73 33 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43  s3;         /* C
100a0 6f 70 79 20 6f 66 20 69 6e 69 74 69 61 6c 20 76  opy of initial v
100b0 61 6c 75 65 20 6f 66 20 70 49 6e 33 2d 3e 66 6c  alue of pIn3->fl
100c0 61 67 73 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d  ags */..  pIn1 =
100d0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
100e0 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
100f0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67  pOp->p3];.  flag
10100 73 31 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73  s1 = pIn1->flags
10110 3b 0a 20 20 66 6c 61 67 73 33 20 3d 20 70 49 6e  ;.  flags3 = pIn
10120 33 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20  3->flags;.  if( 
10130 28 66 6c 61 67 73 31 20 7c 20 66 6c 61 67 73 33  (flags1 | flags3
10140 29 26 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  )&MEM_Null ){.  
10150 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 62 6f 74 68    /* One or both
10160 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55   operands are NU
10170 4c 4c 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f  LL */.    if( pO
10180 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4e  p->p5 & SQLITE_N
10190 55 4c 4c 45 51 20 29 7b 0a 20 20 20 20 20 20 2f  ULLEQ ){.      /
101a0 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  * If SQLITE_NULL
101b0 45 51 20 69 73 20 73 65 74 20 28 77 68 69 63 68  EQ is set (which
101c0 20 77 69 6c 6c 20 6f 6e 6c 79 20 68 61 70 70 65   will only happe
101d0 6e 20 69 66 20 74 68 65 20 6f 70 65 72 61 74 6f  n if the operato
101e0 72 20 69 73 0a 20 20 20 20 20 20 2a 2a 20 4f 50  r is.      ** OP
101f0 5f 45 71 20 6f 72 20 4f 50 5f 4e 65 29 20 74 68  _Eq or OP_Ne) th
10200 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70  en take the jump
10210 20 6f 72 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e   or not dependin
10220 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 20 20 20  g on whether.   
10230 20 20 20 2a 2a 20 6f 72 20 6e 6f 74 20 62 6f 74     ** or not bot
10240 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 6e  h operands are n
10250 75 6c 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  ull..      */.  
10260 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
10270 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 7c  >opcode==OP_Eq |
10280 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
10290 50 5f 4e 65 20 29 3b 0a 20 20 20 20 20 20 61 73  P_Ne );.      as
102a0 73 65 72 74 28 20 28 66 6c 61 67 73 31 20 26 20  sert( (flags1 & 
102b0 4d 45 4d 5f 43 6c 65 61 72 65 64 29 3d 3d 30 20  MEM_Cleared)==0 
102c0 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
102d0 20 28 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49   (pOp->p5 & SQLI
102e0 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 29 3d 3d  TE_JUMPIFNULL)==
102f0 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 28  0 );.      if( (
10300 66 6c 61 67 73 31 26 66 6c 61 67 73 33 26 4d 45  flags1&flags3&ME
10310 4d 5f 4e 75 6c 6c 29 21 3d 30 0a 20 20 20 20 20  M_Null)!=0.     
10320 20 20 26 26 20 28 66 6c 61 67 73 33 26 4d 45 4d    && (flags3&MEM
10330 5f 43 6c 65 61 72 65 64 29 3d 3d 30 0a 20 20 20  _Cleared)==0.   
10340 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65     ){.        re
10350 73 20 3d 20 30 3b 20 20 2f 2a 20 4f 70 65 72 61  s = 0;  /* Opera
10360 6e 64 73 20 61 72 65 20 65 71 75 61 6c 20 2a 2f  nds are equal */
10370 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
10380 20 20 20 20 20 20 72 65 73 20 3d 20 31 3b 20 20        res = 1;  
10390 2f 2a 20 4f 70 65 72 61 6e 64 73 20 61 72 65 20  /* Operands are 
103a0 6e 6f 74 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20  not equal */.   
103b0 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a     }.    }else{.
103c0 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f        /* SQLITE_
103d0 4e 55 4c 4c 45 51 20 69 73 20 63 6c 65 61 72 20  NULLEQ is clear 
103e0 61 6e 64 20 61 74 20 6c 65 61 73 74 20 6f 6e 65  and at least one
103f0 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
10400 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20  ,.      ** then 
10410 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c  the result is al
10420 77 61 79 73 20 4e 55 4c 4c 2e 0a 20 20 20 20 20  ways NULL..     
10430 20 2a 2a 20 54 68 65 20 6a 75 6d 70 20 69 73 20   ** The jump is 
10440 74 61 6b 65 6e 20 69 66 20 74 68 65 20 53 51 4c  taken if the SQL
10450 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62  ITE_JUMPIFNULL b
10460 69 74 20 69 73 20 73 65 74 2e 0a 20 20 20 20 20  it is set..     
10470 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 4f   */.      if( pO
10480 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 53  p->p5 & SQLITE_S
10490 54 4f 52 45 50 32 20 29 7b 0a 20 20 20 20 20 20  TOREP2 ){.      
104a0 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
104b0 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20 20  Op->p2];.       
104c0 20 69 43 6f 6d 70 61 72 65 20 3d 20 31 3b 20 20   iCompare = 1;  
104d0 20 20 2f 2a 20 4f 70 65 72 61 6e 64 73 20 61 72    /* Operands ar
104e0 65 20 6e 6f 74 20 65 71 75 61 6c 20 2a 2f 0a 20  e not equal */. 
104f0 20 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54         memAboutT
10500 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29  oChange(p, pOut)
10510 3b 0a 20 20 20 20 20 20 20 20 4d 65 6d 53 65 74  ;.        MemSet
10520 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
10530 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20 20 20  EM_Null);.      
10540 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
10550 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b  (pOp->p2, pOut);
10560 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
10570 20 20 20 20 20 20 56 64 62 65 42 72 61 6e 63 68        VdbeBranch
10580 54 61 6b 65 6e 28 32 2c 33 29 3b 0a 20 20 20 20  Taken(2,3);.    
10590 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20      if( pOp->p5 
105a0 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e  & SQLITE_JUMPIFN
105b0 55 4c 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ULL ){.         
105c0 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
105d0 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
105e0 20 20 7d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b    }.      break;
105f0 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
10600 20 20 20 20 2f 2a 20 4e 65 69 74 68 65 72 20 6f      /* Neither o
10610 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 20  perand is NULL. 
10620 20 44 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e   Do a comparison
10630 2e 20 2a 2f 0a 20 20 20 20 61 66 66 69 6e 69 74  . */.    affinit
10640 79 20 3d 20 70 4f 70 2d 3e 70 35 20 26 20 53 51  y = pOp->p5 & SQ
10650 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 3b 0a 20  LITE_AFF_MASK;. 
10660 20 20 20 69 66 28 20 61 66 66 69 6e 69 74 79 3e     if( affinity>
10670 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45  =SQLITE_AFF_NUME
10680 52 49 43 20 29 7b 0a 20 20 20 20 20 20 69 66 28  RIC ){.      if(
10690 20 28 66 6c 61 67 73 31 20 7c 20 66 6c 61 67 73   (flags1 | flags
106a0 33 29 26 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20  3)&MEM_Str ){.  
106b0 20 20 20 20 20 20 69 66 28 20 28 66 6c 61 67 73        if( (flags
106c0 31 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d  1 & (MEM_Int|MEM
106d0 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d  _Real|MEM_Str))=
106e0 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20  =MEM_Str ){.    
106f0 20 20 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72        applyNumer
10700 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c  icAffinity(pIn1,
10710 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 74 65  0);.          te
10720 73 74 63 61 73 65 28 20 66 6c 61 67 73 33 21 3d  stcase( flags3!=
10730 70 49 6e 33 2d 3e 66 6c 61 67 73 20 29 3b 20 2f  pIn3->flags ); /
10740 2a 20 50 6f 73 73 69 62 6c 65 20 69 66 20 70 49  * Possible if pI
10750 6e 31 3d 3d 70 49 6e 33 20 2a 2f 0a 20 20 20 20  n1==pIn3 */.    
10760 20 20 20 20 20 20 66 6c 61 67 73 33 20 3d 20 70        flags3 = p
10770 49 6e 33 2d 3e 66 6c 61 67 73 3b 0a 20 20 20 20  In3->flags;.    
10780 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66      }.        if
10790 28 20 28 66 6c 61 67 73 33 20 26 20 28 4d 45 4d  ( (flags3 & (MEM
107a0 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45  _Int|MEM_Real|ME
107b0 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72  M_Str))==MEM_Str
107c0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 61 70   ){.          ap
107d0 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  plyNumericAffini
107e0 74 79 28 70 49 6e 33 2c 30 29 3b 0a 20 20 20 20  ty(pIn3,0);.    
107f0 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
10800 20 20 20 20 2f 2a 20 48 61 6e 64 6c 65 20 74 68      /* Handle th
10810 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 6f 66  e common case of
10820 20 69 6e 74 65 67 65 72 20 63 6f 6d 70 61 72 69   integer compari
10830 73 6f 6e 20 68 65 72 65 2c 20 61 73 20 61 6e 0a  son here, as an.
10840 20 20 20 20 20 20 2a 2a 20 6f 70 74 69 6d 69 7a        ** optimiz
10850 61 74 69 6f 6e 2c 20 74 6f 20 61 76 6f 69 64 20  ation, to avoid 
10860 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65  a call to sqlite
10870 33 4d 65 6d 43 6f 6d 70 61 72 65 28 29 20 2a 2f  3MemCompare() */
10880 0a 20 20 20 20 20 20 69 66 28 20 28 70 49 6e 31  .      if( (pIn1
10890 2d 3e 66 6c 61 67 73 20 26 20 70 49 6e 33 2d 3e  ->flags & pIn3->
108a0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
108b0 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 69  !=0 ){.        i
108c0 66 28 20 70 49 6e 33 2d 3e 75 2e 69 20 3e 20 70  f( pIn3->u.i > p
108d0 49 6e 31 2d 3e 75 2e 69 20 29 7b 20 72 65 73 20  In1->u.i ){ res 
108e0 3d 20 2b 31 3b 20 67 6f 74 6f 20 63 6f 6d 70 61  = +1; goto compa
108f0 72 65 5f 6f 70 3b 20 7d 0a 20 20 20 20 20 20 20  re_op; }.       
10900 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e 69 20 3c   if( pIn3->u.i <
10910 20 70 49 6e 31 2d 3e 75 2e 69 20 29 7b 20 72 65   pIn1->u.i ){ re
10920 73 20 3d 20 2d 31 3b 20 67 6f 74 6f 20 63 6f 6d  s = -1; goto com
10930 70 61 72 65 5f 6f 70 3b 20 7d 0a 20 20 20 20 20  pare_op; }.     
10940 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20     res = 0;.    
10950 20 20 20 20 67 6f 74 6f 20 63 6f 6d 70 61 72 65      goto compare
10960 5f 6f 70 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  _op;.      }.   
10970 20 7d 65 6c 73 65 20 69 66 28 20 61 66 66 69 6e   }else if( affin
10980 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
10990 54 45 58 54 20 29 7b 0a 20 20 20 20 20 20 69 66  TEXT ){.      if
109a0 28 20 28 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f  ( (flags1 & MEM_
109b0 53 74 72 29 3d 3d 30 20 26 26 20 28 66 6c 61 67  Str)==0 && (flag
109c0 73 31 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45  s1 & (MEM_Int|ME
109d0 4d 5f 52 65 61 6c 29 29 21 3d 30 20 29 7b 0a 20  M_Real))!=0 ){. 
109e0 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28         testcase(
109f0 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
10a00 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 20 20  EM_Int );.      
10a10 20 20 74 65 73 74 63 61 73 65 28 20 70 49 6e 31    testcase( pIn1
10a20 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65  ->flags & MEM_Re
10a30 61 6c 20 29 3b 0a 20 20 20 20 20 20 20 20 73 71  al );.        sq
10a40 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69  lite3VdbeMemStri
10a50 6e 67 69 66 79 28 70 49 6e 31 2c 20 65 6e 63 6f  ngify(pIn1, enco
10a60 64 69 6e 67 2c 20 31 29 3b 0a 20 20 20 20 20 20  ding, 1);.      
10a70 20 20 74 65 73 74 63 61 73 65 28 20 28 66 6c 61    testcase( (fla
10a80 67 73 31 26 4d 45 4d 5f 44 79 6e 29 20 21 3d 20  gs1&MEM_Dyn) != 
10a90 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d  (pIn1->flags&MEM
10aa0 5f 44 79 6e 29 20 29 3b 0a 20 20 20 20 20 20 20  _Dyn) );.       
10ab0 20 66 6c 61 67 73 31 20 3d 20 28 70 49 6e 31 2d   flags1 = (pIn1-
10ac0 3e 66 6c 61 67 73 20 26 20 7e 4d 45 4d 5f 54 79  >flags & ~MEM_Ty
10ad0 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67 73  peMask) | (flags
10ae0 31 20 26 20 4d 45 4d 5f 54 79 70 65 4d 61 73 6b  1 & MEM_TypeMask
10af0 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
10b00 74 28 20 70 49 6e 31 21 3d 70 49 6e 33 20 29 3b  t( pIn1!=pIn3 );
10b10 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
10b20 66 28 20 28 66 6c 61 67 73 33 20 26 20 4d 45 4d  f( (flags3 & MEM
10b30 5f 53 74 72 29 3d 3d 30 20 26 26 20 28 66 6c 61  _Str)==0 && (fla
10b40 67 73 33 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d  gs3 & (MEM_Int|M
10b50 45 4d 5f 52 65 61 6c 29 29 21 3d 30 20 29 7b 0a  EM_Real))!=0 ){.
10b60 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65          testcase
10b70 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20  ( pIn3->flags & 
10b80 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 20  MEM_Int );.     
10b90 20 20 20 74 65 73 74 63 61 73 65 28 20 70 49 6e     testcase( pIn
10ba0 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  3->flags & MEM_R
10bb0 65 61 6c 20 29 3b 0a 20 20 20 20 20 20 20 20 73  eal );.        s
10bc0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72  qlite3VdbeMemStr
10bd0 69 6e 67 69 66 79 28 70 49 6e 33 2c 20 65 6e 63  ingify(pIn3, enc
10be0 6f 64 69 6e 67 2c 20 31 29 3b 0a 20 20 20 20 20  oding, 1);.     
10bf0 20 20 20 74 65 73 74 63 61 73 65 28 20 28 66 6c     testcase( (fl
10c00 61 67 73 33 26 4d 45 4d 5f 44 79 6e 29 20 21 3d  ags3&MEM_Dyn) !=
10c10 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45   (pIn3->flags&ME
10c20 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 20 20 20 20  M_Dyn) );.      
10c30 20 20 66 6c 61 67 73 33 20 3d 20 28 70 49 6e 33    flags3 = (pIn3
10c40 2d 3e 66 6c 61 67 73 20 26 20 7e 4d 45 4d 5f 54  ->flags & ~MEM_T
10c50 79 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67  ypeMask) | (flag
10c60 73 33 20 26 20 4d 45 4d 5f 54 79 70 65 4d 61 73  s3 & MEM_TypeMas
10c70 6b 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  k);.      }.    
10c80 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  }.    assert( pO
10c90 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f  p->p4type==P4_CO
10ca0 4c 4c 53 45 51 20 7c 7c 20 70 4f 70 2d 3e 70 34  LLSEQ || pOp->p4
10cb0 2e 70 43 6f 6c 6c 3d 3d 30 20 29 3b 0a 20 20 20  .pColl==0 );.   
10cc0 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33 4d 65   res = sqlite3Me
10cd0 6d 43 6f 6d 70 61 72 65 28 70 49 6e 33 2c 20 70  mCompare(pIn3, p
10ce0 49 6e 31 2c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f  In1, pOp->p4.pCo
10cf0 6c 6c 29 3b 0a 20 20 7d 0a 63 6f 6d 70 61 72 65  ll);.  }.compare
10d00 5f 6f 70 3a 0a 20 20 73 77 69 74 63 68 28 20 70  _op:.  switch( p
10d10 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20  Op->opcode ){.  
10d20 20 20 63 61 73 65 20 4f 50 5f 45 71 3a 20 20 20    case OP_Eq:   
10d30 20 72 65 73 32 20 3d 20 72 65 73 3d 3d 30 3b 20   res2 = res==0; 
10d40 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
10d50 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20 72 65  ase OP_Ne:    re
10d60 73 32 20 3d 20 72 65 73 3b 20 20 20 20 20 20 20  s2 = res;       
10d70 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
10d80 20 4f 50 5f 4c 74 3a 20 20 20 20 72 65 73 32 20   OP_Lt:    res2 
10d90 3d 20 72 65 73 3c 30 3b 20 20 20 20 20 20 62 72  = res<0;      br
10da0 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50  eak;.    case OP
10db0 5f 4c 65 3a 20 20 20 20 72 65 73 32 20 3d 20 72  _Le:    res2 = r
10dc0 65 73 3c 3d 30 3b 20 20 20 20 20 62 72 65 61 6b  es<=0;     break
10dd0 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 47 74  ;.    case OP_Gt
10de0 3a 20 20 20 20 72 65 73 32 20 3d 20 72 65 73 3e  :    res2 = res>
10df0 30 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  0;      break;. 
10e00 20 20 20 64 65 66 61 75 6c 74 3a 20 20 20 20 20     default:     
10e10 20 20 72 65 73 32 20 3d 20 72 65 73 3e 3d 30 3b    res2 = res>=0;
10e20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a       break;.  }.
10e30 0a 20 20 2f 2a 20 55 6e 64 6f 20 61 6e 79 20 63  .  /* Undo any c
10e40 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20 61  hanges made by a
10e50 70 70 6c 79 41 66 66 69 6e 69 74 79 28 29 20 74  pplyAffinity() t
10e60 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69  o the input regi
10e70 73 74 65 72 73 2e 20 2a 2f 0a 20 20 61 73 73 65  sters. */.  asse
10e80 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  rt( (pIn1->flags
10e90 20 26 20 4d 45 4d 5f 44 79 6e 29 20 3d 3d 20 28   & MEM_Dyn) == (
10ea0 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f 44 79 6e  flags1 & MEM_Dyn
10eb0 29 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61  ) );.  pIn1->fla
10ec0 67 73 20 3d 20 66 6c 61 67 73 31 3b 0a 20 20 61  gs = flags1;.  a
10ed0 73 73 65 72 74 28 20 28 70 49 6e 33 2d 3e 66 6c  ssert( (pIn3->fl
10ee0 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 20 3d  ags & MEM_Dyn) =
10ef0 3d 20 28 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f  = (flags3 & MEM_
10f00 44 79 6e 29 20 29 3b 0a 20 20 70 49 6e 33 2d 3e  Dyn) );.  pIn3->
10f10 66 6c 61 67 73 20 3d 20 66 6c 61 67 73 33 3b 0a  flags = flags3;.
10f20 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26  .  if( pOp->p5 &
10f30 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20   SQLITE_STOREP2 
10f40 29 7b 0a 20 20 20 20 70 4f 75 74 20 3d 20 26 61  ){.    pOut = &a
10f50 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
10f60 20 20 69 43 6f 6d 70 61 72 65 20 3d 20 72 65 73    iCompare = res
10f70 3b 0a 20 20 20 20 72 65 73 32 20 3d 20 72 65 73  ;.    res2 = res
10f80 32 21 3d 30 3b 20 20 2f 2a 20 46 6f 72 20 74 68  2!=0;  /* For th
10f90 69 73 20 70 61 74 68 20 72 65 73 32 20 6d 75 73  is path res2 mus
10fa0 74 20 62 65 20 65 78 61 63 74 6c 79 20 30 20 6f  t be exactly 0 o
10fb0 72 20 31 20 2a 2f 0a 20 20 20 20 69 66 28 20 28  r 1 */.    if( (
10fc0 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45  pOp->p5 & SQLITE
10fd0 5f 4b 45 45 50 4e 55 4c 4c 29 21 3d 30 20 29 7b  _KEEPNULL)!=0 ){
10fe0 0a 20 20 20 20 20 20 2f 2a 20 54 68 65 20 4b 45  .      /* The KE
10ff0 45 50 4e 55 4c 4c 20 66 6c 61 67 20 70 72 65 76  EPNULL flag prev
11000 65 6e 74 73 20 4f 50 5f 45 71 20 66 72 6f 6d 20  ents OP_Eq from 
11010 6f 76 65 72 77 72 69 74 69 6e 67 20 61 20 4e 55  overwriting a NU
11020 4c 4c 20 77 69 74 68 20 31 0a 20 20 20 20 20 20  LL with 1.      
11030 2a 2a 20 61 6e 64 20 70 72 65 76 65 6e 74 73 20  ** and prevents 
11040 4f 50 5f 4e 65 20 66 72 6f 6d 20 6f 76 65 72 77  OP_Ne from overw
11050 72 69 74 69 6e 67 20 4e 55 4c 4c 20 77 69 74 68  riting NULL with
11060 20 30 2e 20 20 54 68 69 73 20 66 6c 61 67 0a 20   0.  This flag. 
11070 20 20 20 20 20 2a 2a 20 69 73 20 6f 6e 6c 79 20       ** is only 
11080 75 73 65 64 20 69 6e 20 63 6f 6e 74 65 78 74 73  used in contexts
11090 20 77 68 65 72 65 20 65 69 74 68 65 72 3a 0a 20   where either:. 
110a0 20 20 20 20 20 2a 2a 20 20 20 28 31 29 20 6f 70       **   (1) op
110b0 3d 3d 4f 50 5f 45 71 20 26 26 20 28 72 5b 50 32  ==OP_Eq && (r[P2
110c0 5d 3d 3d 4e 55 4c 4c 20 7c 7c 20 72 5b 50 32 5d  ]==NULL || r[P2]
110d0 3d 3d 30 29 0a 20 20 20 20 20 20 2a 2a 20 20 20  ==0).      **   
110e0 28 32 29 20 6f 70 3d 3d 4f 50 5f 4e 65 20 26 26  (2) op==OP_Ne &&
110f0 20 28 72 5b 50 32 5d 3d 3d 4e 55 4c 4c 20 7c 7c   (r[P2]==NULL ||
11100 20 72 5b 50 32 5d 3d 3d 31 29 0a 20 20 20 20 20   r[P2]==1).     
11110 20 2a 2a 20 54 68 65 72 65 66 6f 72 65 20 69 74   ** Therefore it
11120 20 69 73 20 6e 6f 74 20 6e 65 63 65 73 73 61 72   is not necessar
11130 79 20 74 6f 20 63 68 65 63 6b 20 74 68 65 20 63  y to check the c
11140 6f 6e 74 65 6e 74 20 6f 66 20 72 5b 50 32 5d 20  ontent of r[P2] 
11150 66 6f 72 0a 20 20 20 20 20 20 2a 2a 20 4e 55 4c  for.      ** NUL
11160 4c 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65  L. */.      asse
11170 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
11180 3d 4f 50 5f 4e 65 20 7c 7c 20 70 4f 70 2d 3e 6f  =OP_Ne || pOp->o
11190 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 29 3b 0a  pcode==OP_Eq );.
111a0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72 65        assert( re
111b0 73 32 3d 3d 30 20 7c 7c 20 72 65 73 32 3d 3d 31  s2==0 || res2==1
111c0 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61   );.      testca
111d0 73 65 28 20 72 65 73 32 3d 3d 30 20 26 26 20 70  se( res2==0 && p
111e0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45  Op->opcode==OP_E
111f0 71 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63  q );.      testc
11200 61 73 65 28 20 72 65 73 32 3d 3d 31 20 26 26 20  ase( res2==1 && 
11210 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
11220 45 71 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74  Eq );.      test
11230 63 61 73 65 28 20 72 65 73 32 3d 3d 30 20 26 26  case( res2==0 &&
11240 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
11250 5f 4e 65 20 29 3b 0a 20 20 20 20 20 20 74 65 73  _Ne );.      tes
11260 74 63 61 73 65 28 20 72 65 73 32 3d 3d 31 20 26  tcase( res2==1 &
11270 26 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  & pOp->opcode==O
11280 50 5f 4e 65 20 29 3b 0a 20 20 20 20 20 20 69 66  P_Ne );.      if
11290 28 20 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  ( (pOp->opcode==
112a0 4f 50 5f 45 71 29 3d 3d 72 65 73 32 20 29 20 62  OP_Eq)==res2 ) b
112b0 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  reak;.    }.    
112c0 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
112d0 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 4d  (p, pOut);.    M
112e0 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
112f0 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ut, MEM_Int);.  
11300 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 65    pOut->u.i = re
11310 73 32 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52  s2;.    REGISTER
11320 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20  _TRACE(pOp->p2, 
11330 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  pOut);.  }else{.
11340 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
11350 6b 65 6e 28 72 65 73 21 3d 30 2c 20 28 70 4f 70  ken(res!=0, (pOp
11360 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4e 55  ->p5 & SQLITE_NU
11370 4c 4c 45 51 29 3f 32 3a 33 29 3b 0a 20 20 20 20  LLEQ)?2:3);.    
11380 69 66 28 20 72 65 73 32 20 29 7b 0a 20 20 20 20  if( res2 ){.    
11390 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
113a0 32 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  2;.    }.  }.  b
113b0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
113c0 64 65 3a 20 45 6c 73 65 4e 6f 74 45 71 20 2a 20  de: ElseNotEq * 
113d0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  P2 * * *.**.** T
113e0 68 69 73 20 6f 70 63 6f 64 65 20 6d 75 73 74 20  his opcode must 
113f0 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c  immediately foll
11400 6f 77 20 61 6e 20 4f 50 5f 4c 74 20 6f 72 20 4f  ow an OP_Lt or O
11410 50 5f 47 74 20 63 6f 6d 70 61 72 69 73 6f 6e 20  P_Gt comparison 
11420 6f 70 65 72 61 74 6f 72 2e 0a 2a 2a 20 49 66 20  operator..** If 
11430 72 65 73 75 6c 74 20 6f 66 20 61 6e 20 4f 50 5f  result of an OP_
11440 45 71 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 6e  Eq comparison on
11450 20 74 68 65 20 73 61 6d 65 20 74 77 6f 20 6f 70   the same two op
11460 65 72 61 6e 64 73 0a 2a 2a 20 77 6f 75 6c 64 20  erands.** would 
11470 68 61 76 65 20 62 65 20 4e 55 4c 4c 20 6f 72 20  have be NULL or 
11480 66 61 6c 73 65 20 28 30 29 2c 20 74 68 65 6e 20  false (0), then 
11490 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
114a0 20 0a 2a 2a 20 49 66 20 74 68 65 20 72 65 73 75   .** If the resu
114b0 6c 74 20 6f 66 20 61 6e 20 4f 50 5f 45 71 20 63  lt of an OP_Eq c
114c0 6f 6d 70 61 72 69 73 6f 6e 20 6f 6e 20 74 68 65  omparison on the
114d0 20 74 77 6f 20 70 72 65 76 69 6f 75 73 20 6f 70   two previous op
114e0 65 72 61 6e 64 73 0a 2a 2a 20 77 6f 75 6c 64 20  erands.** would 
114f0 68 61 76 65 20 62 65 65 6e 20 74 72 75 65 20 28  have been true (
11500 31 29 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  1), then fall th
11510 72 6f 75 67 68 2e 0a 2a 2f 0a 63 61 73 65 20 4f  rough..*/.case O
11520 50 5f 45 6c 73 65 4e 6f 74 45 71 3a 20 7b 20 20  P_ElseNotEq: {  
11530 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
11540 54 4b 5f 45 53 43 41 50 45 2c 20 6a 75 6d 70 20  TK_ESCAPE, jump 
11550 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
11560 3e 61 4f 70 20 29 3b 0a 20 20 61 73 73 65 72 74  >aOp );.  assert
11570 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65  ( pOp[-1].opcode
11580 3d 3d 4f 50 5f 4c 74 20 7c 7c 20 70 4f 70 5b 2d  ==OP_Lt || pOp[-
11590 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 47 74  1].opcode==OP_Gt
115a0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
115b0 70 5b 2d 31 5d 2e 70 35 20 26 20 53 51 4c 49 54  p[-1].p5 & SQLIT
115c0 45 5f 53 54 4f 52 45 50 32 20 29 3b 0a 20 20 56  E_STOREP2 );.  V
115d0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 69  dbeBranchTaken(i
115e0 43 6f 6d 70 61 72 65 21 3d 30 2c 20 32 29 3b 0a  Compare!=0, 2);.
115f0 20 20 69 66 28 20 69 43 6f 6d 70 61 72 65 21 3d    if( iCompare!=
11600 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  0 ) goto jump_to
11610 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  _p2;.  break;.}.
11620 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 65 72  ../* Opcode: Per
11630 6d 75 74 61 74 69 6f 6e 20 2a 20 2a 20 2a 20 50  mutation * * * P
11640 34 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68  4 *.**.** Set th
11650 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 75 73  e permutation us
11660 65 64 20 62 79 20 74 68 65 20 4f 50 5f 43 6f 6d  ed by the OP_Com
11670 70 61 72 65 20 6f 70 65 72 61 74 6f 72 20 74 6f  pare operator to
11680 20 62 65 20 74 68 65 20 61 72 72 61 79 0a 2a 2a   be the array.**
11690 20 6f 66 20 69 6e 74 65 67 65 72 73 20 69 6e 20   of integers in 
116a0 50 34 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 65  P4..**.** The pe
116b0 72 6d 75 74 61 74 69 6f 6e 20 69 73 20 6f 6e 6c  rmutation is onl
116c0 79 20 76 61 6c 69 64 20 75 6e 74 69 6c 20 74 68  y valid until th
116d0 65 20 6e 65 78 74 20 4f 50 5f 43 6f 6d 70 61 72  e next OP_Compar
116e0 65 20 74 68 61 74 20 68 61 73 0a 2a 2a 20 74 68  e that has.** th
116f0 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45  e OPFLAG_PERMUTE
11700 20 62 69 74 20 73 65 74 20 69 6e 20 50 35 2e 20   bit set in P5. 
11710 54 79 70 69 63 61 6c 6c 79 20 74 68 65 20 4f 50  Typically the OP
11720 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20 73 68 6f  _Permutation sho
11730 75 6c 64 20 0a 2a 2a 20 6f 63 63 75 72 20 69 6d  uld .** occur im
11740 6d 65 64 69 61 74 65 6c 79 20 70 72 69 6f 72 20  mediately prior 
11750 74 6f 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72  to the OP_Compar
11760 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 69 72  e..**.** The fir
11770 73 74 20 69 6e 74 65 67 65 72 20 69 6e 20 74 68  st integer in th
11780 65 20 50 34 20 69 6e 74 65 67 65 72 20 61 72 72  e P4 integer arr
11790 61 79 20 69 73 20 74 68 65 20 6c 65 6e 67 74 68  ay is the length
117a0 20 6f 66 20 74 68 65 20 61 72 72 61 79 0a 2a 2a   of the array.**
117b0 20 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 62 65   and does not be
117c0 63 6f 6d 65 20 70 61 72 74 20 6f 66 20 74 68 65  come part of the
117d0 20 70 65 72 6d 75 74 61 74 69 6f 6e 2e 0a 2a 2f   permutation..*/
117e0 0a 63 61 73 65 20 4f 50 5f 50 65 72 6d 75 74 61  .case OP_Permuta
117f0 74 69 6f 6e 3a 20 7b 0a 20 20 61 73 73 65 72 74  tion: {.  assert
11800 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
11810 34 5f 49 4e 54 41 52 52 41 59 20 29 3b 0a 20 20  4_INTARRAY );.  
11820 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
11830 61 69 20 29 3b 0a 20 20 61 50 65 72 6d 75 74 65  ai );.  aPermute
11840 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 20 2b 20   = pOp->p4.ai + 
11850 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  1;.  break;.}../
11860 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6d 70 61 72  * Opcode: Compar
11870 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
11880 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
11890 50 31 40 50 33 5d 20 3c 2d 3e 20 72 5b 50 32 40  P1@P3] <-> r[P2@
118a0 50 33 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72  P3].**.** Compar
118b0 65 20 74 77 6f 20 76 65 63 74 6f 72 73 20 6f 66  e two vectors of
118c0 20 72 65 67 69 73 74 65 72 73 20 69 6e 20 72 65   registers in re
118d0 67 28 50 31 29 2e 2e 72 65 67 28 50 31 2b 50 33  g(P1)..reg(P1+P3
118e0 2d 31 29 20 28 63 61 6c 6c 20 74 68 69 73 0a 2a  -1) (call this.*
118f0 2a 20 76 65 63 74 6f 72 20 22 41 22 29 20 61 6e  * vector "A") an
11900 64 20 69 6e 20 72 65 67 28 50 32 29 2e 2e 72 65  d in reg(P2)..re
11910 67 28 50 32 2b 50 33 2d 31 29 20 28 22 42 22 29  g(P2+P3-1) ("B")
11920 2e 20 20 53 61 76 65 20 74 68 65 20 72 65 73 75  .  Save the resu
11930 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6d  lt of.** the com
11940 70 61 72 69 73 6f 6e 20 66 6f 72 20 75 73 65 20  parison for use 
11950 62 79 20 74 68 65 20 6e 65 78 74 20 4f 50 5f 4a  by the next OP_J
11960 75 6d 70 20 69 6e 73 74 72 75 63 74 2e 0a 2a 2a  ump instruct..**
11970 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74 68  .** If P5 has th
11980 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45  e OPFLAG_PERMUTE
11990 20 62 69 74 20 73 65 74 2c 20 74 68 65 6e 20 74   bit set, then t
119a0 68 65 20 6f 72 64 65 72 20 6f 66 20 63 6f 6d 70  he order of comp
119b0 61 72 69 73 6f 6e 20 69 73 0a 2a 2a 20 64 65 74  arison is.** det
119c0 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 6d  ermined by the m
119d0 6f 73 74 20 72 65 63 65 6e 74 20 4f 50 5f 50 65  ost recent OP_Pe
119e0 72 6d 75 74 61 74 69 6f 6e 20 6f 70 65 72 61 74  rmutation operat
119f0 6f 72 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 4f  or.  If the.** O
11a00 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69  PFLAG_PERMUTE bi
11a10 74 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e  t is clear, then
11a20 20 72 65 67 69 73 74 65 72 20 61 72 65 20 63 6f   register are co
11a30 6d 70 61 72 65 64 20 69 6e 20 73 65 71 75 65 6e  mpared in sequen
11a40 74 69 61 6c 0a 2a 2a 20 6f 72 64 65 72 2e 0a 2a  tial.** order..*
11a50 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 4b 65 79  *.** P4 is a Key
11a60 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 74  Info structure t
11a70 68 61 74 20 64 65 66 69 6e 65 73 20 63 6f 6c 6c  hat defines coll
11a80 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20  ating sequences 
11a90 61 6e 64 20 73 6f 72 74 0a 2a 2a 20 6f 72 64 65  and sort.** orde
11aa0 72 73 20 66 6f 72 20 74 68 65 20 63 6f 6d 70 61  rs for the compa
11ab0 72 69 73 6f 6e 2e 20 20 54 68 65 20 70 65 72 6d  rison.  The perm
11ac0 75 74 61 74 69 6f 6e 20 61 70 70 6c 69 65 73 20  utation applies 
11ad0 74 6f 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20  to registers.** 
11ae0 6f 6e 6c 79 2e 20 20 54 68 65 20 4b 65 79 49 6e  only.  The KeyIn
11af0 66 6f 20 65 6c 65 6d 65 6e 74 73 20 61 72 65 20  fo elements are 
11b00 75 73 65 64 20 73 65 71 75 65 6e 74 69 61 6c 6c  used sequentiall
11b10 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d  y..**.** The com
11b20 70 61 72 69 73 6f 6e 20 69 73 20 61 20 73 6f 72  parison is a sor
11b30 74 20 63 6f 6d 70 61 72 69 73 6f 6e 2c 20 73 6f  t comparison, so
11b40 20 4e 55 4c 4c 73 20 63 6f 6d 70 61 72 65 20 65   NULLs compare e
11b50 71 75 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73 20 61  qual,.** NULLs a
11b60 72 65 20 6c 65 73 73 20 74 68 61 6e 20 6e 75 6d  re less than num
11b70 62 65 72 73 2c 20 6e 75 6d 62 65 72 73 20 61 72  bers, numbers ar
11b80 65 20 6c 65 73 73 20 74 68 61 6e 20 73 74 72 69  e less than stri
11b90 6e 67 73 2c 0a 2a 2a 20 61 6e 64 20 73 74 72 69  ngs,.** and stri
11ba0 6e 67 73 20 61 72 65 20 6c 65 73 73 20 74 68 61  ngs are less tha
11bb0 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 63 61 73 65  n blobs..*/.case
11bc0 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 7b 0a 20   OP_Compare: {. 
11bd0 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b   int n;.  int i;
11be0 0a 20 20 69 6e 74 20 70 31 3b 0a 20 20 69 6e 74  .  int p1;.  int
11bf0 20 70 32 3b 0a 20 20 63 6f 6e 73 74 20 4b 65 79   p2;.  const Key
11c00 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a  Info *pKeyInfo;.
11c10 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 43 6f 6c    int idx;.  Col
11c20 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b 20 20 20 20  lSeq *pColl;    
11c30 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71  /* Collating seq
11c40 75 65 6e 63 65 20 74 6f 20 75 73 65 20 6f 6e 20  uence to use on 
11c50 74 68 69 73 20 74 65 72 6d 20 2a 2f 0a 20 20 69  this term */.  i
11c60 6e 74 20 62 52 65 76 3b 20 20 20 20 20 20 20 20  nt bRev;        
11c70 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 44 45    /* True for DE
11c80 53 43 45 4e 44 49 4e 47 20 73 6f 72 74 20 6f 72  SCENDING sort or
11c90 64 65 72 20 2a 2f 0a 0a 20 20 69 66 28 20 28 70  der */..  if( (p
11ca0 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
11cb0 50 45 52 4d 55 54 45 29 3d 3d 30 20 29 20 61 50  PERMUTE)==0 ) aP
11cc0 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20 6e 20  ermute = 0;.  n 
11cd0 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 4b 65  = pOp->p3;.  pKe
11ce0 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e  yInfo = pOp->p4.
11cf0 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65  pKeyInfo;.  asse
11d00 72 74 28 20 6e 3e 30 20 29 3b 0a 20 20 61 73 73  rt( n>0 );.  ass
11d10 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 21 3d 30  ert( pKeyInfo!=0
11d20 20 29 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e   );.  p1 = pOp->
11d30 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e  p1;.  p2 = pOp->
11d40 70 32 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 44  p2;.#if SQLITE_D
11d50 45 42 55 47 0a 20 20 69 66 28 20 61 50 65 72 6d  EBUG.  if( aPerm
11d60 75 74 65 20 29 7b 0a 20 20 20 20 69 6e 74 20 6b  ute ){.    int k
11d70 2c 20 6d 78 20 3d 20 30 3b 0a 20 20 20 20 66 6f  , mx = 0;.    fo
11d80 72 28 6b 3d 30 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29  r(k=0; k<n; k++)
11d90 20 69 66 28 20 61 50 65 72 6d 75 74 65 5b 6b 5d   if( aPermute[k]
11da0 3e 6d 78 20 29 20 6d 78 20 3d 20 61 50 65 72 6d  >mx ) mx = aPerm
11db0 75 74 65 5b 6b 5d 3b 0a 20 20 20 20 61 73 73 65  ute[k];.    asse
11dc0 72 74 28 20 70 31 3e 30 20 26 26 20 70 31 2b 6d  rt( p1>0 && p1+m
11dd0 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  x<=(p->nMem+1 - 
11de0 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b  p->nCursor)+1 );
11df0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3e  .    assert( p2>
11e00 30 20 26 26 20 70 32 2b 6d 78 3c 3d 28 70 2d 3e  0 && p2+mx<=(p->
11e10 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
11e20 73 6f 72 29 2b 31 20 29 3b 0a 20 20 7d 65 6c 73  sor)+1 );.  }els
11e30 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e{.    assert( p
11e40 31 3e 30 20 26 26 20 70 31 2b 6e 3c 3d 28 70 2d  1>0 && p1+n<=(p-
11e50 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
11e60 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 20 20 61  rsor)+1 );.    a
11e70 73 73 65 72 74 28 20 70 32 3e 30 20 26 26 20 70  ssert( p2>0 && p
11e80 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  2+n<=(p->nMem+1 
11e90 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20  - p->nCursor)+1 
11ea0 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a  );.  }.#endif /*
11eb0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f   SQLITE_DEBUG */
11ec0 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b  .  for(i=0; i<n;
11ed0 20 69 2b 2b 29 7b 0a 20 20 20 20 69 64 78 20 3d   i++){.    idx =
11ee0 20 61 50 65 72 6d 75 74 65 20 3f 20 61 50 65 72   aPermute ? aPer
11ef0 6d 75 74 65 5b 69 5d 20 3a 20 69 3b 0a 20 20 20  mute[i] : i;.   
11f00 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
11f10 6c 69 64 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78  lid(&aMem[p1+idx
11f20 5d 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  ]) );.    assert
11f30 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d  ( memIsValid(&aM
11f40 65 6d 5b 70 32 2b 69 64 78 5d 29 20 29 3b 0a 20  em[p2+idx]) );. 
11f50 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
11f60 45 28 70 31 2b 69 64 78 2c 20 26 61 4d 65 6d 5b  E(p1+idx, &aMem[
11f70 70 31 2b 69 64 78 5d 29 3b 0a 20 20 20 20 52 45  p1+idx]);.    RE
11f80 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b  GISTER_TRACE(p2+
11f90 69 64 78 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64  idx, &aMem[p2+id
11fa0 78 5d 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  x]);.    assert(
11fb0 20 69 3c 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69   i<pKeyInfo->nFi
11fc0 65 6c 64 20 29 3b 0a 20 20 20 20 70 43 6f 6c 6c  eld );.    pColl
11fd0 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 43 6f   = pKeyInfo->aCo
11fe0 6c 6c 5b 69 5d 3b 0a 20 20 20 20 62 52 65 76 20  ll[i];.    bRev 
11ff0 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 53 6f 72  = pKeyInfo->aSor
12000 74 4f 72 64 65 72 5b 69 5d 3b 0a 20 20 20 20 69  tOrder[i];.    i
12010 43 6f 6d 70 61 72 65 20 3d 20 73 71 6c 69 74 65  Compare = sqlite
12020 33 4d 65 6d 43 6f 6d 70 61 72 65 28 26 61 4d 65  3MemCompare(&aMe
12030 6d 5b 70 31 2b 69 64 78 5d 2c 20 26 61 4d 65 6d  m[p1+idx], &aMem
12040 5b 70 32 2b 69 64 78 5d 2c 20 70 43 6f 6c 6c 29  [p2+idx], pColl)
12050 3b 0a 20 20 20 20 69 66 28 20 69 43 6f 6d 70 61  ;.    if( iCompa
12060 72 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  re ){.      if( 
12070 62 52 65 76 20 29 20 69 43 6f 6d 70 61 72 65 20  bRev ) iCompare 
12080 3d 20 2d 69 43 6f 6d 70 61 72 65 3b 0a 20 20 20  = -iCompare;.   
12090 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
120a0 20 20 7d 0a 20 20 61 50 65 72 6d 75 74 65 20 3d    }.  aPermute =
120b0 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   0;.  break;.}..
120c0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 75 6d 70 20  /* Opcode: Jump 
120d0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
120e0 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 69  ** Jump to the i
120f0 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 20 61 64  nstruction at ad
12100 64 72 65 73 73 20 50 31 2c 20 50 32 2c 20 6f 72  dress P1, P2, or
12110 20 50 33 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e   P3 depending on
12120 20 77 68 65 74 68 65 72 0a 2a 2a 20 69 6e 20 74   whether.** in t
12130 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f  he most recent O
12140 50 5f 43 6f 6d 70 61 72 65 20 69 6e 73 74 72 75  P_Compare instru
12150 63 74 69 6f 6e 20 74 68 65 20 50 31 20 76 65 63  ction the P1 vec
12160 74 6f 72 20 77 61 73 20 6c 65 73 73 20 74 68 61  tor was less tha
12170 6e 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 2c 20 6f  n.** equal to, o
12180 72 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74  r greater than t
12190 68 65 20 50 32 20 76 65 63 74 6f 72 2c 20 72 65  he P2 vector, re
121a0 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 63  spectively..*/.c
121b0 61 73 65 20 4f 50 5f 4a 75 6d 70 3a 20 7b 20 20  ase OP_Jump: {  
121c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
121d0 6d 70 20 2a 2f 0a 20 20 69 66 28 20 69 43 6f 6d  mp */.  if( iCom
121e0 70 61 72 65 3c 30 20 29 7b 0a 20 20 20 20 56 64  pare<0 ){.    Vd
121f0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c  beBranchTaken(0,
12200 33 29 3b 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70  3); pOp = &aOp[p
12210 4f 70 2d 3e 70 31 20 2d 20 31 5d 3b 0a 20 20 7d  Op->p1 - 1];.  }
12220 65 6c 73 65 20 69 66 28 20 69 43 6f 6d 70 61 72  else if( iCompar
12230 65 3d 3d 30 20 29 7b 0a 20 20 20 20 56 64 62 65  e==0 ){.    Vdbe
12240 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 33 29  BranchTaken(1,3)
12250 3b 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70  ; pOp = &aOp[pOp
12260 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 7d 65 6c  ->p2 - 1];.  }el
12270 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e  se{.    VdbeBran
12280 63 68 54 61 6b 65 6e 28 32 2c 33 29 3b 20 70 4f  chTaken(2,3); pO
12290 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 33  p = &aOp[pOp->p3
122a0 20 2d 20 31 5d 3b 0a 20 20 7d 0a 20 20 62 72 65   - 1];.  }.  bre
122b0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
122c0 3a 20 41 6e 64 20 50 31 20 50 32 20 50 33 20 2a  : And P1 P2 P3 *
122d0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
122e0 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20 26 26 20  r[P3]=(r[P1] && 
122f0 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54 61 6b  r[P2]).**.** Tak
12300 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 41 4e  e the logical AN
12310 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20  D of the values 
12320 69 6e 20 72 65 67 69 73 74 65 72 73 20 50 31 20  in registers P1 
12330 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 77 72  and P2 and.** wr
12340 69 74 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ite the result i
12350 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e  nto register P3.
12360 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  .**.** If either
12370 20 50 31 20 6f 72 20 50 32 20 69 73 20 30 20 28   P1 or P2 is 0 (
12380 66 61 6c 73 65 29 20 74 68 65 6e 20 74 68 65 20  false) then the 
12390 72 65 73 75 6c 74 20 69 73 20 30 20 65 76 65 6e  result is 0 even
123a0 20 69 66 0a 2a 2a 20 74 68 65 20 6f 74 68 65 72   if.** the other
123b0 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20   input is NULL. 
123c0 20 41 20 4e 55 4c 4c 20 61 6e 64 20 74 72 75 65   A NULL and true
123d0 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 20 67 69   or two NULLs gi
123e0 76 65 0a 2a 2a 20 61 20 4e 55 4c 4c 20 6f 75 74  ve.** a NULL out
123f0 70 75 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  put..*/./* Opcod
12400 65 3a 20 4f 72 20 50 31 20 50 32 20 50 33 20 2a  e: Or P1 P2 P3 *
12410 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
12420 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20 7c 7c 20  r[P3]=(r[P1] || 
12430 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54 61 6b  r[P2]).**.** Tak
12440 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 4f 52  e the logical OR
12450 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69   of the values i
12460 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e  n register P1 an
12470 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72  d P2 and.** stor
12480 65 20 74 68 65 20 61 6e 73 77 65 72 20 69 6e 20  e the answer in 
12490 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a  register P3..**.
124a0 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50 31 20  ** If either P1 
124b0 6f 72 20 50 32 20 69 73 20 6e 6f 6e 7a 65 72 6f  or P2 is nonzero
124c0 20 28 74 72 75 65 29 20 74 68 65 6e 20 74 68 65   (true) then the
124d0 20 72 65 73 75 6c 74 20 69 73 20 31 20 28 74 72   result is 1 (tr
124e0 75 65 29 0a 2a 2a 20 65 76 65 6e 20 69 66 20 74  ue).** even if t
124f0 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20 69  he other input i
12500 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20  s NULL.  A NULL 
12510 61 6e 64 20 66 61 6c 73 65 20 6f 72 20 74 77 6f  and false or two
12520 20 4e 55 4c 4c 73 0a 2a 2a 20 67 69 76 65 20 61   NULLs.** give a
12530 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f   NULL output..*/
12540 0a 63 61 73 65 20 4f 50 5f 41 6e 64 3a 20 20 20  .case OP_And:   
12550 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
12560 6d 65 20 61 73 20 54 4b 5f 41 4e 44 2c 20 69 6e  me as TK_AND, in
12570 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
12580 63 61 73 65 20 4f 50 5f 4f 72 3a 20 7b 20 20 20  case OP_Or: {   
12590 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
125a0 65 20 61 73 20 54 4b 5f 4f 52 2c 20 69 6e 31 2c  e as TK_OR, in1,
125b0 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20   in2, out3 */.  
125c0 69 6e 74 20 76 31 3b 20 20 20 20 2f 2a 20 4c 65  int v1;    /* Le
125d0 66 74 20 6f 70 65 72 61 6e 64 3a 20 20 30 3d 3d  ft operand:  0==
125e0 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20  FALSE, 1==TRUE, 
125f0 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55  2==UNKNOWN or NU
12600 4c 4c 20 2a 2f 0a 20 20 69 6e 74 20 76 32 3b 20  LL */.  int v2; 
12610 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 70 65 72     /* Right oper
12620 61 6e 64 3a 20 30 3d 3d 46 41 4c 53 45 2c 20 31  and: 0==FALSE, 1
12630 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f  ==TRUE, 2==UNKNO
12640 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 20  WN or NULL */.. 
12650 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
12660 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49  p->p1];.  if( pI
12670 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
12680 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76 31 20 3d  Null ){.    v1 =
12690 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   2;.  }else{.   
126a0 20 76 31 20 3d 20 73 71 6c 69 74 65 33 56 64 62   v1 = sqlite3Vdb
126b0 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 21  eIntValue(pIn1)!
126c0 3d 30 3b 0a 20 20 7d 0a 20 20 70 49 6e 32 20 3d  =0;.  }.  pIn2 =
126d0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
126e0 0a 20 20 69 66 28 20 70 49 6e 32 2d 3e 66 6c 61  .  if( pIn2->fla
126f0 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs & MEM_Null ){
12700 0a 20 20 20 20 76 32 20 3d 20 32 3b 0a 20 20 7d  .    v2 = 2;.  }
12710 65 6c 73 65 7b 0a 20 20 20 20 76 32 20 3d 20 73  else{.    v2 = s
12720 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
12730 75 65 28 70 49 6e 32 29 21 3d 30 3b 0a 20 20 7d  ue(pIn2)!=0;.  }
12740 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
12750 64 65 3d 3d 4f 50 5f 41 6e 64 20 29 7b 0a 20 20  de==OP_And ){.  
12760 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75    static const u
12770 6e 73 69 67 6e 65 64 20 63 68 61 72 20 61 6e 64  nsigned char and
12780 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20  _logic[] = { 0, 
12790 30 2c 20 30 2c 20 30 2c 20 31 2c 20 32 2c 20 30  0, 0, 0, 1, 2, 0
127a0 2c 20 32 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31  , 2, 2 };.    v1
127b0 20 3d 20 61 6e 64 5f 6c 6f 67 69 63 5b 76 31 2a   = and_logic[v1*
127c0 33 2b 76 32 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a  3+v2];.  }else{.
127d0 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
127e0 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 6f   unsigned char o
127f0 72 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c  r_logic[] = { 0,
12800 20 31 2c 20 32 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 2, 1, 1, 1, 
12810 32 2c 20 31 2c 20 32 20 7d 3b 0a 20 20 20 20 76  2, 1, 2 };.    v
12820 31 20 3d 20 6f 72 5f 6c 6f 67 69 63 5b 76 31 2a  1 = or_logic[v1*
12830 33 2b 76 32 5d 3b 0a 20 20 7d 0a 20 20 70 4f 75  3+v2];.  }.  pOu
12840 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
12850 33 5d 3b 0a 20 20 69 66 28 20 76 31 3d 3d 32 20  3];.  if( v1==2 
12860 29 7b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70  ){.    MemSetTyp
12870 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
12880 4e 75 6c 6c 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  Null);.  }else{.
12890 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
128a0 76 31 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79  v1;.    MemSetTy
128b0 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
128c0 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65  _Int);.  }.  bre
128d0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
128e0 3a 20 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a 20  : Not P1 P2 * * 
128f0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
12900 5b 50 32 5d 3d 20 21 72 5b 50 31 5d 0a 2a 2a 0a  [P2]= !r[P1].**.
12910 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
12920 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
12930 65 72 20 50 31 20 61 73 20 61 20 62 6f 6f 6c 65  er P1 as a boole
12940 61 6e 20 76 61 6c 75 65 2e 20 20 53 74 6f 72 65  an value.  Store
12950 20 74 68 65 0a 2a 2a 20 62 6f 6f 6c 65 61 6e 20   the.** boolean 
12960 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 20 72 65  complement in re
12970 67 69 73 74 65 72 20 50 32 2e 20 20 49 66 20 74  gister P2.  If t
12980 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
12990 73 74 65 72 20 50 31 20 69 73 20 0a 2a 2a 20 4e  ster P1 is .** N
129a0 55 4c 4c 2c 20 74 68 65 6e 20 61 20 4e 55 4c 4c  ULL, then a NULL
129b0 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 50 32   is stored in P2
129c0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74  ..*/.case OP_Not
129d0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
129e0 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
129f0 5f 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20  _NOT, in1, out2 
12a00 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
12a10 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f  m[pOp->p1];.  pO
12a20 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
12a30 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  p2];.  sqlite3Vd
12a40 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
12a50 74 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  t);.  if( (pIn1-
12a60 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
12a70 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70 4f 75  l)==0 ){.    pOu
12a80 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  t->flags = MEM_I
12a90 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e  nt;.    pOut->u.
12aa0 69 20 3d 20 21 73 71 6c 69 74 65 33 56 64 62 65  i = !sqlite3Vdbe
12ab0 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a  IntValue(pIn1);.
12ac0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
12ad0 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 4e 6f  /* Opcode: BitNo
12ae0 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
12af0 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d   Synopsis: r[P1]
12b00 3d 20 7e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49  = ~r[P1].**.** I
12b10 6e 74 65 72 70 72 65 74 20 74 68 65 20 63 6f 6e  nterpret the con
12b20 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
12b30 20 50 31 20 61 73 20 61 6e 20 69 6e 74 65 67 65   P1 as an intege
12b40 72 2e 20 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a  r.  Store the.**
12b50 20 6f 6e 65 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74   ones-complement
12b60 20 6f 66 20 74 68 65 20 50 31 20 76 61 6c 75 65   of the P1 value
12b70 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
12b80 32 2e 20 20 49 66 20 50 31 20 68 6f 6c 64 73 0a  2.  If P1 holds.
12b90 2a 2a 20 61 20 4e 55 4c 4c 20 74 68 65 6e 20 73  ** a NULL then s
12ba0 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20 50  tore a NULL in P
12bb0 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69  2..*/.case OP_Bi
12bc0 74 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20  tNot: {         
12bd0 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
12be0 4b 5f 42 49 54 4e 4f 54 2c 20 69 6e 31 2c 20 6f  K_BITNOT, in1, o
12bf0 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  ut2 */.  pIn1 = 
12c00 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
12c10 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
12c20 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74  Op->p2];.  sqlit
12c30 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
12c40 28 70 4f 75 74 29 3b 0a 20 20 69 66 28 20 28 70  (pOut);.  if( (p
12c50 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
12c60 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20  _Null)==0 ){.   
12c70 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
12c80 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74  EM_Int;.    pOut
12c90 2d 3e 75 2e 69 20 3d 20 7e 73 71 6c 69 74 65 33  ->u.i = ~sqlite3
12ca0 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
12cb0 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  1);.  }.  break;
12cc0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .}../* Opcode: O
12cd0 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  nce P1 P2 * * *.
12ce0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
12cf0 76 61 6c 75 65 20 69 73 20 65 71 75 61 6c 20 74  value is equal t
12d00 6f 20 74 68 65 20 50 31 20 76 61 6c 75 65 20 6f  o the P1 value o
12d10 6e 20 74 68 65 20 4f 50 5f 49 6e 69 74 20 6f 70  n the OP_Init op
12d20 63 6f 64 65 20 61 74 0a 2a 2a 20 69 6e 73 74 72  code at.** instr
12d30 75 63 74 69 6f 6e 20 30 2c 20 74 68 65 6e 20 6a  uction 0, then j
12d40 75 6d 70 20 74 6f 20 50 32 2e 20 20 49 66 20 74  ump to P2.  If t
12d50 68 65 20 74 77 6f 20 50 31 20 76 61 6c 75 65 73  he two P1 values
12d60 20 64 69 66 66 65 72 2c 20 74 68 65 6e 0a 2a 2a   differ, then.**
12d70 20 73 65 74 20 74 68 65 20 50 31 20 76 61 6c 75   set the P1 valu
12d80 65 20 6f 6e 20 74 68 69 73 20 6f 70 63 6f 64 65  e on this opcode
12d90 20 74 6f 20 65 71 75 61 6c 20 74 68 65 20 50 31   to equal the P1
12da0 20 76 61 6c 75 65 20 6f 6e 20 74 68 65 20 4f 50   value on the OP
12db0 5f 49 6e 69 74 0a 2a 2a 20 61 6e 64 20 66 61 6c  _Init.** and fal
12dc0 6c 20 74 68 72 6f 75 67 68 2e 0a 2a 2f 0a 63 61  l through..*/.ca
12dd0 73 65 20 4f 50 5f 4f 6e 63 65 3a 20 7b 20 20 20  se OP_Once: {   
12de0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
12df0 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  p */.  assert( p
12e00 2d 3e 61 4f 70 5b 30 5d 2e 6f 70 63 6f 64 65 3d  ->aOp[0].opcode=
12e10 3d 4f 50 5f 49 6e 69 74 20 29 3b 0a 20 20 56 64  =OP_Init );.  Vd
12e20 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 2d  beBranchTaken(p-
12e30 3e 61 4f 70 5b 30 5d 2e 70 31 3d 3d 70 4f 70 2d  >aOp[0].p1==pOp-
12e40 3e 70 31 2c 20 32 29 3b 0a 20 20 69 66 28 20 70  >p1, 2);.  if( p
12e50 2d 3e 61 4f 70 5b 30 5d 2e 70 31 3d 3d 70 4f 70  ->aOp[0].p1==pOp
12e60 2d 3e 70 31 20 29 7b 0a 20 20 20 20 67 6f 74 6f  ->p1 ){.    goto
12e70 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d   jump_to_p2;.  }
12e80 65 6c 73 65 7b 0a 20 20 20 20 70 4f 70 2d 3e 70  else{.    pOp->p
12e90 31 20 3d 20 70 2d 3e 61 4f 70 5b 30 5d 2e 70 31  1 = p->aOp[0].p1
12ea0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
12eb0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 20  ../* Opcode: If 
12ec0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
12ed0 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66  ** Jump to P2 if
12ee0 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
12ef0 67 69 73 74 65 72 20 50 31 20 69 73 20 74 72 75  gister P1 is tru
12f00 65 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a  e.  The value.**
12f10 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74   is considered t
12f20 72 75 65 20 69 66 20 69 74 20 69 73 20 6e 75 6d  rue if it is num
12f30 65 72 69 63 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72  eric and non-zer
12f40 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  o.  If the value
12f50 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c  .** in P1 is NUL
12f60 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20  L then take the 
12f70 6a 75 6d 70 20 69 66 20 61 6e 64 20 6f 6e 6c 79  jump if and only
12f80 20 69 66 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65   if P3 is non-ze
12f90 72 6f 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  ro..*/./* Opcode
12fa0 3a 20 49 66 4e 6f 74 20 50 31 20 50 32 20 50 33  : IfNot P1 P2 P3
12fb0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20   * *.**.** Jump 
12fc0 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c  to P2 if the val
12fd0 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
12fe0 31 20 69 73 20 46 61 6c 73 65 2e 20 20 54 68 65  1 is False.  The
12ff0 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e   value.** is con
13000 73 69 64 65 72 65 64 20 66 61 6c 73 65 20 69 66  sidered false if
13010 20 69 74 20 68 61 73 20 61 20 6e 75 6d 65 72 69   it has a numeri
13020 63 20 76 61 6c 75 65 20 6f 66 20 7a 65 72 6f 2e  c value of zero.
13030 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a    If the value.*
13040 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20  * in P1 is NULL 
13050 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75  then take the ju
13060 6d 70 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69  mp if and only i
13070 66 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P3 is non-zero
13080 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 3a  ..*/.case OP_If:
13090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
130a0 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f   /* jump, in1 */
130b0 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74 3a 20  .case OP_IfNot: 
130c0 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
130d0 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69  jump, in1 */.  i
130e0 6e 74 20 63 3b 0a 20 20 70 49 6e 31 20 3d 20 26  nt c;.  pIn1 = &
130f0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
13100 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73   if( pIn1->flags
13110 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
13120 20 20 20 63 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a     c = pOp->p3;.
13130 20 20 7d 65 6c 73 65 7b 0a 23 69 66 64 65 66 20    }else{.#ifdef 
13140 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
13150 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 63  TING_POINT.    c
13160 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
13170 74 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b  tValue(pIn1)!=0;
13180 0a 23 65 6c 73 65 0a 20 20 20 20 63 20 3d 20 73  .#else.    c = s
13190 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61  qlite3VdbeRealVa
131a0 6c 75 65 28 70 49 6e 31 29 21 3d 30 2e 30 3b 0a  lue(pIn1)!=0.0;.
131b0 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20 70  #endif.    if( p
131c0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
131d0 66 4e 6f 74 20 29 20 63 20 3d 20 21 63 3b 0a 20  fNot ) c = !c;. 
131e0 20 7d 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54   }.  VdbeBranchT
131f0 61 6b 65 6e 28 63 21 3d 30 2c 20 32 29 3b 0a 20  aken(c!=0, 2);. 
13200 20 69 66 28 20 63 20 29 7b 0a 20 20 20 20 67 6f   if( c ){.    go
13210 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
13220 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
13230 2a 20 4f 70 63 6f 64 65 3a 20 49 73 4e 75 6c 6c  * Opcode: IsNull
13240 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
13250 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50  Synopsis: if r[P
13260 31 5d 3d 3d 4e 55 4c 4c 20 67 6f 74 6f 20 50 32  1]==NULL goto P2
13270 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50  .**.** Jump to P
13280 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69  2 if the value i
13290 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
132a0 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
132b0 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20 20 20 20 20  P_IsNull: {     
132c0 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
132d0 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20 6a 75 6d  s TK_ISNULL, jum
132e0 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  p, in1 */.  pIn1
132f0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
13300 5d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  ];.  VdbeBranchT
13310 61 6b 65 6e 28 20 28 70 49 6e 31 2d 3e 66 6c 61  aken( (pIn1->fla
13320 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d  gs & MEM_Null)!=
13330 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 28 70 49  0, 2);.  if( (pI
13340 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
13350 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a 20 20 20 20  Null)!=0 ){.    
13360 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
13370 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
13380 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 4e  ./* Opcode: NotN
13390 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ull P1 P2 * * *.
133a0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
133b0 72 5b 50 31 5d 21 3d 4e 55 4c 4c 20 67 6f 74 6f  r[P1]!=NULL goto
133c0 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74   P2.**.** Jump t
133d0 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75  o P2 if the valu
133e0 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
133f0 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20 20 0a   is not NULL.  .
13400 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 4e 75  */.case OP_NotNu
13410 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ll: {           
13420 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e   /* same as TK_N
13430 4f 54 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e  OTNULL, jump, in
13440 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
13450 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
13460 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
13470 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
13480 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 2c 20 32 29  MEM_Null)==0, 2)
13490 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
134a0 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
134b0 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  ==0 ){.    goto 
134c0 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a  jump_to_p2;.  }.
134d0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
134e0 70 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e 20 50 31  pcode: Column P1
134f0 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
13500 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d  Synopsis: r[P3]=
13510 50 58 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72  PX.**.** Interpr
13520 65 74 20 74 68 65 20 64 61 74 61 20 74 68 61 74  et the data that
13530 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74   cursor P1 point
13540 73 20 74 6f 20 61 73 20 61 20 73 74 72 75 63 74  s to as a struct
13550 75 72 65 20 62 75 69 6c 74 20 75 73 69 6e 67 0a  ure built using.
13560 2a 2a 20 74 68 65 20 4d 61 6b 65 52 65 63 6f 72  ** the MakeRecor
13570 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  d instruction.  
13580 28 53 65 65 20 74 68 65 20 4d 61 6b 65 52 65 63  (See the MakeRec
13590 6f 72 64 20 6f 70 63 6f 64 65 20 66 6f 72 20 61  ord opcode for a
135a0 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 69 6e 66  dditional.** inf
135b0 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74  ormation about t
135c0 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65  he format of the
135d0 20 64 61 74 61 2e 29 20 20 45 78 74 72 61 63 74   data.)  Extract
135e0 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d   the P2-th colum
135f0 6e 0a 2a 2a 20 66 72 6f 6d 20 74 68 69 73 20 72  n.** from this r
13600 65 63 6f 72 64 2e 20 20 49 66 20 74 68 65 72 65  ecord.  If there
13610 20 61 72 65 20 6c 65 73 73 20 74 68 61 74 20 28   are less that (
13620 50 32 2b 31 29 20 0a 2a 2a 20 76 61 6c 75 65 73  P2+1) .** values
13630 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2c 20   in the record, 
13640 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 0a  extract a NULL..
13650 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20  **.** The value 
13660 65 78 74 72 61 63 74 65 64 20 69 73 20 73 74 6f  extracted is sto
13670 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
13680 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  P3..**.** If the
13690 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e 73   column contains
136a0 20 66 65 77 65 72 20 74 68 61 6e 20 50 32 20 66   fewer than P2 f
136b0 69 65 6c 64 73 2c 20 74 68 65 6e 20 65 78 74 72  ields, then extr
136c0 61 63 74 20 61 20 4e 55 4c 4c 2e 20 20 4f 72 2c  act a NULL.  Or,
136d0 0a 2a 2a 20 69 66 20 74 68 65 20 50 34 20 61 72  .** if the P4 ar
136e0 67 75 6d 65 6e 74 20 69 73 20 61 20 50 34 5f 4d  gument is a P4_M
136f0 45 4d 20 75 73 65 20 74 68 65 20 76 61 6c 75 65  EM use the value
13700 20 6f 66 20 74 68 65 20 50 34 20 61 72 67 75 6d   of the P4 argum
13710 65 6e 74 20 61 73 0a 2a 2a 20 74 68 65 20 72 65  ent as.** the re
13720 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  sult..**.** If t
13730 68 65 20 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43  he OPFLAG_CLEARC
13740 41 43 48 45 20 62 69 74 20 69 73 20 73 65 74 20  ACHE bit is set 
13750 6f 6e 20 50 35 20 61 6e 64 20 50 31 20 69 73 20  on P5 and P1 is 
13760 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63  a pseudo-table c
13770 75 72 73 6f 72 2c 0a 2a 2a 20 74 68 65 6e 20 74  ursor,.** then t
13780 68 65 20 63 61 63 68 65 20 6f 66 20 74 68 65 20  he cache of the 
13790 63 75 72 73 6f 72 20 69 73 20 72 65 73 65 74 20  cursor is reset 
137a0 70 72 69 6f 72 20 74 6f 20 65 78 74 72 61 63 74  prior to extract
137b0 69 6e 67 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a  ing the column..
137c0 2a 2a 20 54 68 65 20 66 69 72 73 74 20 4f 50 5f  ** The first OP_
137d0 43 6f 6c 75 6d 6e 20 61 67 61 69 6e 73 74 20 61  Column against a
137e0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 61 66   pseudo-table af
137f0 74 65 72 20 74 68 65 20 76 61 6c 75 65 20 6f 66  ter the value of
13800 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20   the content.** 
13810 72 65 67 69 73 74 65 72 20 68 61 73 20 63 68 61  register has cha
13820 6e 67 65 64 20 73 68 6f 75 6c 64 20 68 61 76 65  nged should have
13830 20 74 68 69 73 20 62 69 74 20 73 65 74 2e 0a 2a   this bit set..*
13840 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c  *.** If the OPFL
13850 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e 64  AG_LENGTHARG and
13860 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52   OPFLAG_TYPEOFAR
13870 47 20 62 69 74 73 20 61 72 65 20 73 65 74 20 6f  G bits are set o
13880 6e 20 50 35 20 77 68 65 6e 0a 2a 2a 20 74 68 65  n P5 when.** the
13890 20 72 65 73 75 6c 74 20 69 73 20 67 75 61 72 61   result is guara
138a0 6e 74 65 65 64 20 74 6f 20 6f 6e 6c 79 20 62 65  nteed to only be
138b0 20 75 73 65 64 20 61 73 20 74 68 65 20 61 72 67   used as the arg
138c0 75 6d 65 6e 74 20 6f 66 20 61 20 6c 65 6e 67 74  ument of a lengt
138d0 68 28 29 0a 2a 2a 20 6f 72 20 74 79 70 65 6f 66  h().** or typeof
138e0 28 29 20 66 75 6e 63 74 69 6f 6e 2c 20 72 65 73  () function, res
138f0 70 65 63 74 69 76 65 6c 79 2e 20 20 54 68 65 20  pectively.  The 
13900 6c 6f 61 64 69 6e 67 20 6f 66 20 6c 61 72 67 65  loading of large
13910 20 62 6c 6f 62 73 20 63 61 6e 20 62 65 0a 2a 2a   blobs can be.**
13920 20 73 6b 69 70 70 65 64 20 66 6f 72 20 6c 65 6e   skipped for len
13930 67 74 68 28 29 20 61 6e 64 20 61 6c 6c 20 63 6f  gth() and all co
13940 6e 74 65 6e 74 20 6c 6f 61 64 69 6e 67 20 63 61  ntent loading ca
13950 6e 20 62 65 20 73 6b 69 70 70 65 64 20 66 6f 72  n be skipped for
13960 20 74 79 70 65 6f 66 28 29 2e 0a 2a 2f 0a 63 61   typeof()..*/.ca
13970 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a  se OP_Column: {.
13980 20 20 69 6e 74 20 70 32 3b 20 20 20 20 20 20 20    int p2;       
13990 20 20 20 20 20 2f 2a 20 63 6f 6c 75 6d 6e 20 6e       /* column n
139a0 75 6d 62 65 72 20 74 6f 20 72 65 74 72 69 65 76  umber to retriev
139b0 65 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  e */.  VdbeCurso
139c0 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20 54 68 65  r *pC;    /* The
139d0 20 56 44 42 45 20 63 75 72 73 6f 72 20 2a 2f 0a   VDBE cursor */.
139e0 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
139f0 72 3b 20 20 20 2f 2a 20 54 68 65 20 42 54 72 65  r;   /* The BTre
13a00 65 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 75 33  e cursor */.  u3
13a10 32 20 2a 61 4f 66 66 73 65 74 3b 20 20 20 20 20  2 *aOffset;     
13a20 20 2f 2a 20 61 4f 66 66 73 65 74 5b 69 5d 20 69   /* aOffset[i] i
13a30 73 20 6f 66 66 73 65 74 20 74 6f 20 73 74 61 72  s offset to star
13a40 74 20 6f 66 20 64 61 74 61 20 66 6f 72 20 69 2d  t of data for i-
13a50 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69  th column */.  i
13a60 6e 74 20 6c 65 6e 3b 20 20 20 20 20 20 20 20 20  nt len;         
13a70 20 20 2f 2a 20 54 68 65 20 6c 65 6e 67 74 68 20    /* The length 
13a80 6f 66 20 74 68 65 20 73 65 72 69 61 6c 69 7a 65  of the serialize
13a90 64 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 63  d data for the c
13aa0 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 69  olumn */.  int i
13ab0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
13ac0 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f   Loop counter */
13ad0 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 20 20  .  Mem *pDest;  
13ae0 20 20 20 20 20 20 2f 2a 20 57 68 65 72 65 20 74        /* Where t
13af0 6f 20 77 72 69 74 65 20 74 68 65 20 65 78 74 72  o write the extr
13b00 61 63 74 65 64 20 76 61 6c 75 65 20 2a 2f 0a 20  acted value */. 
13b10 20 4d 65 6d 20 73 4d 65 6d 3b 20 20 20 20 20 20   Mem sMem;      
13b20 20 20 20 20 2f 2a 20 46 6f 72 20 73 74 6f 72 69      /* For stori
13b30 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20 62 65  ng the record be
13b40 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20  ing decoded */. 
13b50 20 63 6f 6e 73 74 20 75 38 20 2a 7a 44 61 74 61   const u8 *zData
13b60 3b 20 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 74  ;   /* Part of t
13b70 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20  he record being 
13b80 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e  decoded */.  con
13b90 73 74 20 75 38 20 2a 7a 48 64 72 3b 20 20 20 20  st u8 *zHdr;    
13ba0 2f 2a 20 4e 65 78 74 20 75 6e 70 61 72 73 65 64  /* Next unparsed
13bb0 20 62 79 74 65 20 6f 66 20 74 68 65 20 68 65 61   byte of the hea
13bc0 64 65 72 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75  der */.  const u
13bd0 38 20 2a 7a 45 6e 64 48 64 72 3b 20 2f 2a 20 50  8 *zEndHdr; /* P
13be0 6f 69 6e 74 65 72 20 74 6f 20 66 69 72 73 74 20  ointer to first 
13bf0 62 79 74 65 20 61 66 74 65 72 20 74 68 65 20 68  byte after the h
13c00 65 61 64 65 72 20 2a 2f 0a 20 20 75 33 32 20 6f  eader */.  u32 o
13c10 66 66 73 65 74 3b 20 20 20 20 20 20 20 20 2f 2a  ffset;        /*
13c20 20 4f 66 66 73 65 74 20 69 6e 74 6f 20 74 68 65   Offset into the
13c30 20 64 61 74 61 20 2a 2f 0a 20 20 75 36 34 20 6f   data */.  u64 o
13c40 66 66 73 65 74 36 34 3b 20 20 20 20 20 20 2f 2a  ffset64;      /*
13c50 20 36 34 2d 62 69 74 20 6f 66 66 73 65 74 20 2a   64-bit offset *
13c60 2f 0a 20 20 75 33 32 20 61 76 61 69 6c 3b 20 20  /.  u32 avail;  
13c70 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
13c80 20 6f 66 20 62 79 74 65 73 20 6f 66 20 61 76 61   of bytes of ava
13c90 69 6c 61 62 6c 65 20 64 61 74 61 20 2a 2f 0a 20  ilable data */. 
13ca0 20 75 33 32 20 74 3b 20 20 20 20 20 20 20 20 20   u32 t;         
13cb0 20 20 20 20 2f 2a 20 41 20 74 79 70 65 20 63 6f      /* A type co
13cc0 64 65 20 66 72 6f 6d 20 74 68 65 20 72 65 63 6f  de from the reco
13cd0 72 64 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 4d  rd header */.  M
13ce0 65 6d 20 2a 70 52 65 67 3b 20 20 20 20 20 20 20  em *pReg;       
13cf0 20 20 2f 2a 20 50 73 65 75 64 6f 54 61 62 6c 65    /* PseudoTable
13d00 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 20   input register 
13d10 2a 2f 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70  */..  pC = p->ap
13d20 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
13d30 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 0a 20  p2 = pOp->p2;.. 
13d40 20 2f 2a 20 49 66 20 74 68 65 20 63 75 72 73 6f   /* If the curso
13d50 72 20 63 61 63 68 65 20 69 73 20 73 74 61 6c 65  r cache is stale
13d60 2c 20 62 72 69 6e 67 20 69 74 20 75 70 2d 74 6f  , bring it up-to
13d70 2d 64 61 74 65 20 2a 2f 0a 20 20 72 63 20 3d 20  -date */.  rc = 
13d80 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
13d90 72 4d 6f 76 65 74 6f 28 26 70 43 2c 20 26 70 32  rMoveto(&pC, &p2
13da0 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  );.  if( rc ) go
13db0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
13dc0 65 72 72 6f 72 3b 0a 0a 20 20 61 73 73 65 72 74  error;..  assert
13dd0 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
13de0 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
13df0 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
13e00 20 29 3b 0a 20 20 70 44 65 73 74 20 3d 20 26 61   );.  pDest = &a
13e10 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
13e20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
13e30 28 70 2c 20 70 44 65 73 74 29 3b 0a 20 20 61 73  (p, pDest);.  as
13e40 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
13e50 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
13e60 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65  Cursor );.  asse
13e70 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
13e80 73 73 65 72 74 28 20 70 32 3c 70 43 2d 3e 6e 46  ssert( p2<pC->nF
13e90 69 65 6c 64 20 29 3b 0a 20 20 61 4f 66 66 73 65  ield );.  aOffse
13ea0 74 20 3d 20 70 43 2d 3e 61 4f 66 66 73 65 74 3b  t = pC->aOffset;
13eb0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65  .  assert( pC->e
13ec0 43 75 72 54 79 70 65 21 3d 43 55 52 54 59 50 45  CurType!=CURTYPE
13ed0 5f 56 54 41 42 20 29 3b 0a 20 20 61 73 73 65 72  _VTAB );.  asser
13ee0 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 21  t( pC->eCurType!
13ef0 3d 43 55 52 54 59 50 45 5f 50 53 45 55 44 4f 20  =CURTYPE_PSEUDO 
13f00 7c 7c 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29  || pC->nullRow )
13f10 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
13f20 65 43 75 72 54 79 70 65 21 3d 43 55 52 54 59 50  eCurType!=CURTYP
13f30 45 5f 53 4f 52 54 45 52 20 29 3b 0a 0a 20 20 69  E_SORTER );..  i
13f40 66 28 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  f( pC->cacheStat
13f50 75 73 21 3d 70 2d 3e 63 61 63 68 65 43 74 72 20  us!=p->cacheCtr 
13f60 29 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ){              
13f70 20 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e    /*OPTIMIZATION
13f80 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20  -IF-FALSE*/.    
13f90 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  if( pC->nullRow 
13fa0 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d  ){.      if( pC-
13fb0 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
13fc0 50 45 5f 50 53 45 55 44 4f 20 29 7b 0a 20 20 20  PE_PSEUDO ){.   
13fd0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d       assert( pC-
13fe0 3e 75 63 2e 70 73 65 75 64 6f 54 61 62 6c 65 52  >uc.pseudoTableR
13ff0 65 67 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20  eg>0 );.        
14000 70 52 65 67 20 3d 20 26 61 4d 65 6d 5b 70 43 2d  pReg = &aMem[pC-
14010 3e 75 63 2e 70 73 65 75 64 6f 54 61 62 6c 65 52  >uc.pseudoTableR
14020 65 67 5d 3b 0a 20 20 20 20 20 20 20 20 61 73 73  eg];.        ass
14030 65 72 74 28 20 70 52 65 67 2d 3e 66 6c 61 67 73  ert( pReg->flags
14040 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20   & MEM_Blob );. 
14050 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d         assert( m
14060 65 6d 49 73 56 61 6c 69 64 28 70 52 65 67 29 20  emIsValid(pReg) 
14070 29 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 70  );.        pC->p
14080 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 43 2d  ayloadSize = pC-
14090 3e 73 7a 52 6f 77 20 3d 20 61 76 61 69 6c 20 3d  >szRow = avail =
140a0 20 70 52 65 67 2d 3e 6e 3b 0a 20 20 20 20 20 20   pReg->n;.      
140b0 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 28 75 38    pC->aRow = (u8
140c0 2a 29 70 52 65 67 2d 3e 7a 3b 0a 20 20 20 20 20  *)pReg->z;.     
140d0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
140e0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
140f0 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20  tNull(pDest);.  
14100 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f        goto op_co
14110 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 20 20  lumn_out;.      
14120 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  }.    }else{.   
14130 20 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75     pCrsr = pC->u
14140 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 20 20 20  c.pCursor;.     
14150 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
14160 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
14170 54 52 45 45 20 29 3b 0a 20 20 20 20 20 20 61 73  TREE );.      as
14180 73 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20  sert( pCrsr );. 
14190 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
141a0 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49  ite3BtreeCursorI
141b0 73 56 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b  sValid(pCrsr) );
141c0 0a 20 20 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f  .      pC->paylo
141d0 61 64 53 69 7a 65 20 3d 20 73 71 6c 69 74 65 33  adSize = sqlite3
141e0 42 74 72 65 65 50 61 79 6c 6f 61 64 53 69 7a 65  BtreePayloadSize
141f0 28 70 43 72 73 72 29 3b 0a 20 20 20 20 20 20 70  (pCrsr);.      p
14200 43 2d 3e 61 52 6f 77 20 3d 20 73 71 6c 69 74 65  C->aRow = sqlite
14210 33 42 74 72 65 65 50 61 79 6c 6f 61 64 46 65 74  3BtreePayloadFet
14220 63 68 28 70 43 72 73 72 2c 20 26 61 76 61 69 6c  ch(pCrsr, &avail
14230 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
14240 20 61 76 61 69 6c 3c 3d 36 35 35 33 36 20 29 3b   avail<=65536 );
14250 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 70 61 67    /* Maximum pag
14260 65 20 73 69 7a 65 20 69 73 20 36 34 4b 69 42 20  e size is 64KiB 
14270 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d  */.      if( pC-
14280 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3c 3d 20  >payloadSize <= 
14290 28 75 33 32 29 61 76 61 69 6c 20 29 7b 0a 20 20  (u32)avail ){.  
142a0 20 20 20 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20        pC->szRow 
142b0 3d 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a  = pC->payloadSiz
142c0 65 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69  e;.      }else i
142d0 66 28 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69  f( pC->payloadSi
142e0 7a 65 20 3e 20 28 75 33 32 29 64 62 2d 3e 61 4c  ze > (u32)db->aL
142f0 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
14300 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20  T_LENGTH] ){.   
14310 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69       goto too_bi
14320 67 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  g;.      }else{.
14330 20 20 20 20 20 20 20 20 70 43 2d 3e 73 7a 52 6f          pC->szRo
14340 77 20 3d 20 61 76 61 69 6c 3b 0a 20 20 20 20 20  w = avail;.     
14350 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d   }.    }.    pC-
14360 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 70  >cacheStatus = p
14370 2d 3e 63 61 63 68 65 43 74 72 3b 0a 20 20 20 20  ->cacheCtr;.    
14380 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 20 3d  pC->iHdrOffset =
14390 20 67 65 74 56 61 72 69 6e 74 33 32 28 70 43 2d   getVarint32(pC-
143a0 3e 61 52 6f 77 2c 20 6f 66 66 73 65 74 29 3b 0a  >aRow, offset);.
143b0 20 20 20 20 70 43 2d 3e 6e 48 64 72 50 61 72 73      pC->nHdrPars
143c0 65 64 20 3d 20 30 3b 0a 20 20 20 20 61 4f 66 66  ed = 0;.    aOff
143d0 73 65 74 5b 30 5d 20 3d 20 6f 66 66 73 65 74 3b  set[0] = offset;
143e0 0a 0a 0a 20 20 20 20 69 66 28 20 61 76 61 69 6c  ...    if( avail
143f0 3c 6f 66 66 73 65 74 20 29 7b 20 20 20 20 20 20  <offset ){      
14400 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49  /*OPTIMIZATION-I
14410 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20 20 20  F-FALSE*/.      
14420 2f 2a 20 70 43 2d 3e 61 52 6f 77 20 64 6f 65 73  /* pC->aRow does
14430 20 6e 6f 74 20 68 61 76 65 20 74 6f 20 68 6f 6c   not have to hol
14440 64 20 74 68 65 20 65 6e 74 69 72 65 20 72 6f 77  d the entire row
14450 2c 20 62 75 74 20 69 74 20 64 6f 65 73 20 61 74  , but it does at
14460 20 6c 65 61 73 74 0a 20 20 20 20 20 20 2a 2a 20   least.      ** 
14470 6e 65 65 64 20 74 6f 20 63 6f 76 65 72 20 74 68  need to cover th
14480 65 20 68 65 61 64 65 72 20 6f 66 20 74 68 65 20  e header of the 
14490 72 65 63 6f 72 64 2e 20 20 49 66 20 70 43 2d 3e  record.  If pC->
144a0 61 52 6f 77 20 64 6f 65 73 20 6e 6f 74 20 63 6f  aRow does not co
144b0 6e 74 61 69 6e 0a 20 20 20 20 20 20 2a 2a 20 74  ntain.      ** t
144c0 68 65 20 63 6f 6d 70 6c 65 74 65 20 68 65 61 64  he complete head
144d0 65 72 2c 20 74 68 65 6e 20 73 65 74 20 69 74 20  er, then set it 
144e0 74 6f 20 7a 65 72 6f 2c 20 66 6f 72 63 69 6e 67  to zero, forcing
144f0 20 74 68 65 20 68 65 61 64 65 72 20 74 6f 20 62   the header to b
14500 65 0a 20 20 20 20 20 20 2a 2a 20 64 79 6e 61 6d  e.      ** dynam
14510 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64  ically allocated
14520 2e 20 2a 2f 0a 20 20 20 20 20 20 70 43 2d 3e 61  . */.      pC->a
14530 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 20 20 70  Row = 0;.      p
14540 43 2d 3e 73 7a 52 6f 77 20 3d 20 30 3b 0a 0a 20  C->szRow = 0;.. 
14550 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72       /* Make sur
14560 65 20 61 20 63 6f 72 72 75 70 74 20 64 61 74 61  e a corrupt data
14570 62 61 73 65 20 68 61 73 20 6e 6f 74 20 67 69 76  base has not giv
14580 65 6e 20 75 73 20 61 6e 20 6f 76 65 72 73 69 7a  en us an oversiz
14590 65 20 68 65 61 64 65 72 2e 0a 20 20 20 20 20 20  e header..      
145a0 2a 2a 20 44 6f 20 74 68 69 73 20 6e 6f 77 20 74  ** Do this now t
145b0 6f 20 61 76 6f 69 64 20 61 6e 20 6f 76 65 72 73  o avoid an overs
145c0 69 7a 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ize memory alloc
145d0 61 74 69 6f 6e 2e 0a 20 20 20 20 20 20 2a 2a 0a  ation..      **.
145e0 20 20 20 20 20 20 2a 2a 20 54 79 70 65 20 65 6e        ** Type en
145f0 74 72 69 65 73 20 63 61 6e 20 62 65 20 62 65 74  tries can be bet
14600 77 65 65 6e 20 31 20 61 6e 64 20 35 20 62 79 74  ween 1 and 5 byt
14610 65 73 20 65 61 63 68 2e 20 20 42 75 74 20 34 20  es each.  But 4 
14620 61 6e 64 20 35 20 62 79 74 65 0a 20 20 20 20 20  and 5 byte.     
14630 20 2a 2a 20 74 79 70 65 73 20 75 73 65 20 73 6f   ** types use so
14640 20 6d 75 63 68 20 64 61 74 61 20 73 70 61 63 65   much data space
14650 20 74 68 61 74 20 74 68 65 72 65 20 63 61 6e 20   that there can 
14660 6f 6e 6c 79 20 62 65 20 34 30 39 36 20 61 6e 64  only be 4096 and
14670 20 33 32 20 6f 66 0a 20 20 20 20 20 20 2a 2a 20   32 of.      ** 
14680 74 68 65 6d 2c 20 72 65 73 70 65 63 74 69 76 65  them, respective
14690 6c 79 2e 20 20 53 6f 20 74 68 65 20 6d 61 78 69  ly.  So the maxi
146a0 6d 75 6d 20 68 65 61 64 65 72 20 6c 65 6e 67 74  mum header lengt
146b0 68 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 61  h results from a
146c0 0a 20 20 20 20 20 20 2a 2a 20 33 2d 62 79 74 65  .      ** 3-byte
146d0 20 74 79 70 65 20 66 6f 72 20 65 61 63 68 20 6f   type for each o
146e0 66 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66  f the maximum of
146f0 20 33 32 37 36 38 20 63 6f 6c 75 6d 6e 73 20 70   32768 columns p
14700 6c 75 73 20 74 68 72 65 65 0a 20 20 20 20 20 20  lus three.      
14710 2a 2a 20 65 78 74 72 61 20 62 79 74 65 73 20 66  ** extra bytes f
14720 6f 72 20 74 68 65 20 68 65 61 64 65 72 20 6c 65  or the header le
14730 6e 67 74 68 20 69 74 73 65 6c 66 2e 20 20 33 32  ngth itself.  32
14740 37 36 38 2a 33 20 2b 20 33 20 3d 20 39 38 33 30  768*3 + 3 = 9830
14750 37 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  7..      */.    
14760 20 20 69 66 28 20 6f 66 66 73 65 74 20 3e 20 39    if( offset > 9
14770 38 33 30 37 20 7c 7c 20 6f 66 66 73 65 74 20 3e  8307 || offset >
14780 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65   pC->payloadSize
14790 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
147a0 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f   SQLITE_CORRUPT_
147b0 42 4b 50 54 3b 0a 20 20 20 20 20 20 20 20 67 6f  BKPT;.        go
147c0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
147d0 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20  error;.      }. 
147e0 20 20 20 7d 65 6c 73 65 20 69 66 28 20 6f 66 66     }else if( off
147f0 73 65 74 3e 30 20 29 7b 20 2f 2a 4f 50 54 49 4d  set>0 ){ /*OPTIM
14800 49 5a 41 54 49 4f 4e 2d 49 46 2d 54 52 55 45 2a  IZATION-IF-TRUE*
14810 2f 0a 20 20 20 20 20 20 2f 2a 20 54 68 65 20 66  /.      /* The f
14820 6f 6c 6c 6f 77 69 6e 67 20 67 6f 74 6f 20 69 73  ollowing goto is
14830 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e   an optimization
14840 2e 20 20 49 74 20 63 61 6e 20 62 65 20 6f 6d 69  .  It can be omi
14850 74 74 65 64 20 61 6e 64 0a 20 20 20 20 20 20 2a  tted and.      *
14860 2a 20 65 76 65 72 79 74 68 69 6e 67 20 77 69 6c  * everything wil
14870 6c 20 73 74 69 6c 6c 20 77 6f 72 6b 2e 20 20 42  l still work.  B
14880 75 74 20 4f 50 5f 43 6f 6c 75 6d 6e 20 69 73 20  ut OP_Column is 
14890 6d 65 61 73 75 72 61 62 6c 79 20 66 61 73 74 65  measurably faste
148a0 72 0a 20 20 20 20 20 20 2a 2a 20 62 79 20 73 6b  r.      ** by sk
148b0 69 70 70 69 6e 67 20 74 68 65 20 73 75 62 73 65  ipping the subse
148c0 71 75 65 6e 74 20 63 6f 6e 64 69 74 69 6f 6e 61  quent conditiona
148d0 6c 2c 20 77 68 69 63 68 20 69 73 20 61 6c 77 61  l, which is alwa
148e0 79 73 20 74 72 75 65 2e 0a 20 20 20 20 20 20 2a  ys true..      *
148f0 2f 0a 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20  /.      zData = 
14900 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20 20 20 20  pC->aRow;.      
14910 61 73 73 65 72 74 28 20 70 43 2d 3e 6e 48 64 72  assert( pC->nHdr
14920 50 61 72 73 65 64 3c 3d 70 32 20 29 3b 20 20 20  Parsed<=p2 );   
14930 20 20 20 20 20 20 2f 2a 20 43 6f 6e 64 69 74 69        /* Conditi
14940 6f 6e 61 6c 20 73 6b 69 70 70 65 64 20 2a 2f 0a  onal skipped */.
14950 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f        goto op_co
14960 6c 75 6d 6e 5f 72 65 61 64 5f 68 65 61 64 65 72  lumn_read_header
14970 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f  ;.    }.  }..  /
14980 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 74 20 6c  * Make sure at l
14990 65 61 73 74 20 74 68 65 20 66 69 72 73 74 20 70  east the first p
149a0 32 2b 31 20 65 6e 74 72 69 65 73 20 6f 66 20 74  2+1 entries of t
149b0 68 65 20 68 65 61 64 65 72 20 68 61 76 65 20 62  he header have b
149c0 65 65 6e 0a 20 20 2a 2a 20 70 61 72 73 65 64 20  een.  ** parsed 
149d0 61 6e 64 20 76 61 6c 69 64 20 69 6e 66 6f 72 6d  and valid inform
149e0 61 74 69 6f 6e 20 69 73 20 69 6e 20 61 4f 66 66  ation is in aOff
149f0 73 65 74 5b 5d 20 61 6e 64 20 70 43 2d 3e 61 54  set[] and pC->aT
14a00 79 70 65 5b 5d 2e 0a 20 20 2a 2f 0a 20 20 69 66  ype[]..  */.  if
14a10 28 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64  ( pC->nHdrParsed
14a20 3c 3d 70 32 20 29 7b 0a 20 20 20 20 2f 2a 20 49  <=p2 ){.    /* I
14a30 66 20 74 68 65 72 65 20 69 73 20 6d 6f 72 65 20  f there is more 
14a40 68 65 61 64 65 72 20 61 76 61 69 6c 61 62 6c 65  header available
14a50 20 66 6f 72 20 70 61 72 73 69 6e 67 20 69 6e 20   for parsing in 
14a60 74 68 65 20 72 65 63 6f 72 64 2c 20 74 72 79 0a  the record, try.
14a70 20 20 20 20 2a 2a 20 74 6f 20 65 78 74 72 61 63      ** to extrac
14a80 74 20 61 64 64 69 74 69 6f 6e 61 6c 20 66 69 65  t additional fie
14a90 6c 64 73 20 75 70 20 74 68 72 6f 75 67 68 20 74  lds up through t
14aa0 68 65 20 70 32 2b 31 2d 74 68 20 66 69 65 6c 64  he p2+1-th field
14ab0 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28   .    */.    if(
14ac0 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 3c   pC->iHdrOffset<
14ad0 61 4f 66 66 73 65 74 5b 30 5d 20 29 7b 0a 20 20  aOffset[0] ){.  
14ae0 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65      /* Make sure
14af0 20 7a 44 61 74 61 20 70 6f 69 6e 74 73 20 74 6f   zData points to
14b00 20 65 6e 6f 75 67 68 20 6f 66 20 74 68 65 20 72   enough of the r
14b10 65 63 6f 72 64 20 74 6f 20 63 6f 76 65 72 20 74  ecord to cover t
14b20 68 65 20 68 65 61 64 65 72 2e 20 2a 2f 0a 20 20  he header. */.  
14b30 20 20 20 20 69 66 28 20 70 43 2d 3e 61 52 6f 77      if( pC->aRow
14b40 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 6d  ==0 ){.        m
14b50 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c 20  emset(&sMem, 0, 
14b60 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a 20  sizeof(sMem));. 
14b70 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
14b80 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74  te3VdbeMemFromBt
14b90 72 65 65 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  ree(pC->uc.pCurs
14ba0 6f 72 2c 20 30 2c 20 61 4f 66 66 73 65 74 5b 30  or, 0, aOffset[0
14bb0 5d 2c 20 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20  ], &sMem);.     
14bc0 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
14bd0 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72  E_OK ) goto abor
14be0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
14bf0 20 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20          zData = 
14c00 28 75 38 2a 29 73 4d 65 6d 2e 7a 3b 0a 20 20 20  (u8*)sMem.z;.   
14c10 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
14c20 20 20 7a 44 61 74 61 20 3d 20 70 43 2d 3e 61 52    zData = pC->aR
14c30 6f 77 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20  ow;.      }.  . 
14c40 20 20 20 20 20 2f 2a 20 46 69 6c 6c 20 69 6e 20       /* Fill in 
14c50 70 43 2d 3e 61 54 79 70 65 5b 69 5d 20 61 6e 64  pC->aType[i] and
14c60 20 61 4f 66 66 73 65 74 5b 69 5d 20 76 61 6c 75   aOffset[i] valu
14c70 65 73 20 74 68 72 6f 75 67 68 20 74 68 65 20 70  es through the p
14c80 32 2d 74 68 20 66 69 65 6c 64 2e 20 2a 2f 0a 20  2-th field. */. 
14c90 20 20 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 72 65 61     op_column_rea
14ca0 64 5f 68 65 61 64 65 72 3a 0a 20 20 20 20 20 20  d_header:.      
14cb0 69 20 3d 20 70 43 2d 3e 6e 48 64 72 50 61 72 73  i = pC->nHdrPars
14cc0 65 64 3b 0a 20 20 20 20 20 20 6f 66 66 73 65 74  ed;.      offset
14cd0 36 34 20 3d 20 61 4f 66 66 73 65 74 5b 69 5d 3b  64 = aOffset[i];
14ce0 0a 20 20 20 20 20 20 7a 48 64 72 20 3d 20 7a 44  .      zHdr = zD
14cf0 61 74 61 20 2b 20 70 43 2d 3e 69 48 64 72 4f 66  ata + pC->iHdrOf
14d00 66 73 65 74 3b 0a 20 20 20 20 20 20 7a 45 6e 64  fset;.      zEnd
14d10 48 64 72 20 3d 20 7a 44 61 74 61 20 2b 20 61 4f  Hdr = zData + aO
14d20 66 66 73 65 74 5b 30 5d 3b 0a 20 20 20 20 20 20  ffset[0];.      
14d30 64 6f 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20  do{.        if( 
14d40 28 74 20 3d 20 7a 48 64 72 5b 30 5d 29 3c 30 78  (t = zHdr[0])<0x
14d50 38 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  80 ){.          
14d60 7a 48 64 72 2b 2b 3b 0a 20 20 20 20 20 20 20 20  zHdr++;.        
14d70 20 20 6f 66 66 73 65 74 36 34 20 2b 3d 20 73 71    offset64 += sq
14d80 6c 69 74 65 33 56 64 62 65 4f 6e 65 42 79 74 65  lite3VdbeOneByte
14d90 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 74 29  SerialTypeLen(t)
14da0 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  ;.        }else{
14db0 0a 20 20 20 20 20 20 20 20 20 20 7a 48 64 72 20  .          zHdr 
14dc0 2b 3d 20 73 71 6c 69 74 65 33 47 65 74 56 61 72  += sqlite3GetVar
14dd0 69 6e 74 33 32 28 7a 48 64 72 2c 20 26 74 29 3b  int32(zHdr, &t);
14de0 0a 20 20 20 20 20 20 20 20 20 20 6f 66 66 73 65  .          offse
14df0 74 36 34 20 2b 3d 20 73 71 6c 69 74 65 33 56 64  t64 += sqlite3Vd
14e00 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28  beSerialTypeLen(
14e10 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  t);.        }.  
14e20 20 20 20 20 20 20 70 43 2d 3e 61 54 79 70 65 5b        pC->aType[
14e30 69 2b 2b 5d 20 3d 20 74 3b 0a 20 20 20 20 20 20  i++] = t;.      
14e40 20 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20 28    aOffset[i] = (
14e50 75 33 32 29 28 6f 66 66 73 65 74 36 34 20 26 20  u32)(offset64 & 
14e60 30 78 66 66 66 66 66 66 66 66 29 3b 0a 20 20 20  0xffffffff);.   
14e70 20 20 20 7d 77 68 69 6c 65 28 20 69 3c 3d 70 32     }while( i<=p2
14e80 20 26 26 20 7a 48 64 72 3c 7a 45 6e 64 48 64 72   && zHdr<zEndHdr
14e90 20 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 54 68   );..      /* Th
14ea0 65 20 72 65 63 6f 72 64 20 69 73 20 63 6f 72 72  e record is corr
14eb0 75 70 74 20 69 66 20 61 6e 79 20 6f 66 20 74 68  upt if any of th
14ec0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20  e following are 
14ed0 74 72 75 65 3a 0a 20 20 20 20 20 20 2a 2a 20 28  true:.      ** (
14ee0 31 29 20 74 68 65 20 62 79 74 65 73 20 6f 66 20  1) the bytes of 
14ef0 74 68 65 20 68 65 61 64 65 72 20 65 78 74 65 6e  the header exten
14f00 64 20 70 61 73 74 20 74 68 65 20 64 65 63 6c 61  d past the decla
14f10 72 65 64 20 68 65 61 64 65 72 20 73 69 7a 65 0a  red header size.
14f20 20 20 20 20 20 20 2a 2a 20 28 32 29 20 74 68 65        ** (2) the
14f30 20 65 6e 74 69 72 65 20 68 65 61 64 65 72 20 77   entire header w
14f40 61 73 20 75 73 65 64 20 62 75 74 20 6e 6f 74 20  as used but not 
14f50 61 6c 6c 20 64 61 74 61 20 77 61 73 20 75 73 65  all data was use
14f60 64 0a 20 20 20 20 20 20 2a 2a 20 28 33 29 20 74  d.      ** (3) t
14f70 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 64 61  he end of the da
14f80 74 61 20 65 78 74 65 6e 64 73 20 62 65 79 6f 6e  ta extends beyon
14f90 64 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  d the end of the
14fa0 20 72 65 63 6f 72 64 2e 0a 20 20 20 20 20 20 2a   record..      *
14fb0 2f 0a 20 20 20 20 20 20 69 66 28 20 28 7a 48 64  /.      if( (zHd
14fc0 72 3e 3d 7a 45 6e 64 48 64 72 20 26 26 20 28 7a  r>=zEndHdr && (z
14fd0 48 64 72 3e 7a 45 6e 64 48 64 72 20 7c 7c 20 6f  Hdr>zEndHdr || o
14fe0 66 66 73 65 74 36 34 21 3d 70 43 2d 3e 70 61 79  ffset64!=pC->pay
14ff0 6c 6f 61 64 53 69 7a 65 29 29 0a 20 20 20 20 20  loadSize)).     
15000 20 20 7c 7c 20 28 6f 66 66 73 65 74 36 34 20 3e    || (offset64 >
15010 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65   pC->payloadSize
15020 29 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20  ).      ){.     
15030 20 20 20 69 66 28 20 70 43 2d 3e 61 52 6f 77 3d     if( pC->aRow=
15040 3d 30 20 29 20 73 71 6c 69 74 65 33 56 64 62 65  =0 ) sqlite3Vdbe
15050 4d 65 6d 52 65 6c 65 61 73 65 28 26 73 4d 65 6d  MemRelease(&sMem
15060 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  );.        rc = 
15070 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42  SQLITE_CORRUPT_B
15080 4b 50 54 3b 0a 20 20 20 20 20 20 20 20 67 6f 74  KPT;.        got
15090 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
150a0 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 0a 20  rror;.      }.. 
150b0 20 20 20 20 20 70 43 2d 3e 6e 48 64 72 50 61 72       pC->nHdrPar
150c0 73 65 64 20 3d 20 69 3b 0a 20 20 20 20 20 20 70  sed = i;.      p
150d0 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 20 3d 20  C->iHdrOffset = 
150e0 28 75 33 32 29 28 7a 48 64 72 20 2d 20 7a 44 61  (u32)(zHdr - zDa
150f0 74 61 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  ta);.      if( p
15100 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 20 73 71 6c  C->aRow==0 ) sql
15110 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61  ite3VdbeMemRelea
15120 73 65 28 26 73 4d 65 6d 29 3b 0a 20 20 20 20 7d  se(&sMem);.    }
15130 65 6c 73 65 7b 0a 20 20 20 20 20 20 74 20 3d 20  else{.      t = 
15140 30 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a  0;.    }..    /*
15150 20 49 66 20 61 66 74 65 72 20 74 72 79 69 6e 67   If after trying
15160 20 74 6f 20 65 78 74 72 61 63 74 20 6e 65 77 20   to extract new 
15170 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74 68 65  entries from the
15180 20 68 65 61 64 65 72 2c 20 6e 48 64 72 50 61 72   header, nHdrPar
15190 73 65 64 20 69 73 0a 20 20 20 20 2a 2a 20 73 74  sed is.    ** st
151a0 69 6c 6c 20 6e 6f 74 20 75 70 20 74 6f 20 70 32  ill not up to p2
151b0 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61  , that means tha
151c0 74 20 74 68 65 20 72 65 63 6f 72 64 20 68 61 73  t the record has
151d0 20 66 65 77 65 72 20 74 68 61 6e 20 70 32 0a 20   fewer than p2. 
151e0 20 20 20 2a 2a 20 63 6f 6c 75 6d 6e 73 2e 20 20     ** columns.  
151f0 53 6f 20 74 68 65 20 72 65 73 75 6c 74 20 77 69  So the result wi
15200 6c 6c 20 62 65 20 65 69 74 68 65 72 20 74 68 65  ll be either the
15210 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f   default value o
15220 72 20 61 20 4e 55 4c 4c 2e 0a 20 20 20 20 2a 2f  r a NULL..    */
15230 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 48 64  .    if( pC->nHd
15240 72 50 61 72 73 65 64 3c 3d 70 32 20 29 7b 0a 20  rParsed<=p2 ){. 
15250 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34       if( pOp->p4
15260 74 79 70 65 3d 3d 50 34 5f 4d 45 4d 20 29 7b 0a  type==P4_MEM ){.
15270 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
15280 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70  dbeMemShallowCop
15290 79 28 70 44 65 73 74 2c 20 70 4f 70 2d 3e 70 34  y(pDest, pOp->p4
152a0 2e 70 4d 65 6d 2c 20 4d 45 4d 5f 53 74 61 74 69  .pMem, MEM_Stati
152b0 63 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  c);.      }else{
152c0 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
152d0 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
152e0 44 65 73 74 29 3b 0a 20 20 20 20 20 20 7d 0a 20  Dest);.      }. 
152f0 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c       goto op_col
15300 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 20  umn_out;.    }. 
15310 20 7d 65 6c 73 65 7b 0a 20 20 20 20 74 20 3d 20   }else{.    t = 
15320 70 43 2d 3e 61 54 79 70 65 5b 70 32 5d 3b 0a 20  pC->aType[p2];. 
15330 20 7d 0a 0a 20 20 2f 2a 20 45 78 74 72 61 63 74   }..  /* Extract
15340 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 66 6f 72   the content for
15350 20 74 68 65 20 70 32 2b 31 2d 74 68 20 63 6f 6c   the p2+1-th col
15360 75 6d 6e 2e 20 20 43 6f 6e 74 72 6f 6c 20 63 61  umn.  Control ca
15370 6e 20 6f 6e 6c 79 0a 20 20 2a 2a 20 72 65 61 63  n only.  ** reac
15380 68 20 74 68 69 73 20 70 6f 69 6e 74 20 69 66 20  h this point if 
15390 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 61 4f 66  aOffset[p2], aOf
153a0 66 73 65 74 5b 70 32 2b 31 5d 2c 20 61 6e 64 20  fset[p2+1], and 
153b0 70 43 2d 3e 61 54 79 70 65 5b 70 32 5d 20 61 72  pC->aType[p2] ar
153c0 65 0a 20 20 2a 2a 20 61 6c 6c 20 76 61 6c 69 64  e.  ** all valid
153d0 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ..  */.  assert(
153e0 20 70 32 3c 70 43 2d 3e 6e 48 64 72 50 61 72 73   p2<pC->nHdrPars
153f0 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ed );.  assert( 
15400 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
15410 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74  .  assert( sqlit
15420 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e  e3VdbeCheckMemIn
15430 76 61 72 69 61 6e 74 73 28 70 44 65 73 74 29 20  variants(pDest) 
15440 29 3b 0a 20 20 69 66 28 20 56 64 62 65 4d 65 6d  );.  if( VdbeMem
15450 44 79 6e 61 6d 69 63 28 70 44 65 73 74 29 20 29  Dynamic(pDest) )
15460 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
15470 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73  eMemSetNull(pDes
15480 74 29 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74  t);.  }.  assert
15490 28 20 74 3d 3d 70 43 2d 3e 61 54 79 70 65 5b 70  ( t==pC->aType[p
154a0 32 5d 20 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e  2] );.  if( pC->
154b0 73 7a 52 6f 77 3e 3d 61 4f 66 66 73 65 74 5b 70  szRow>=aOffset[p
154c0 32 2b 31 5d 20 29 7b 0a 20 20 20 20 2f 2a 20 54  2+1] ){.    /* T
154d0 68 69 73 20 69 73 20 74 68 65 20 63 6f 6d 6d 6f  his is the commo
154e0 6e 20 63 61 73 65 20 77 68 65 72 65 20 74 68 65  n case where the
154f0 20 64 65 73 69 72 65 64 20 63 6f 6e 74 65 6e 74   desired content
15500 20 66 69 74 73 20 6f 6e 20 74 68 65 20 6f 72 69   fits on the ori
15510 67 69 6e 61 6c 0a 20 20 20 20 2a 2a 20 70 61 67  ginal.    ** pag
15520 65 20 2d 20 77 68 65 72 65 20 74 68 65 20 63 6f  e - where the co
15530 6e 74 65 6e 74 20 69 73 20 6e 6f 74 20 6f 6e 20  ntent is not on 
15540 61 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65  an overflow page
15550 20 2a 2f 0a 20 20 20 20 7a 44 61 74 61 20 3d 20   */.    zData = 
15560 70 43 2d 3e 61 52 6f 77 20 2b 20 61 4f 66 66 73  pC->aRow + aOffs
15570 65 74 5b 70 32 5d 3b 0a 20 20 20 20 69 66 28 20  et[p2];.    if( 
15580 74 3c 31 32 20 29 7b 0a 20 20 20 20 20 20 73 71  t<12 ){.      sq
15590 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 47  lite3VdbeSerialG
155a0 65 74 28 7a 44 61 74 61 2c 20 74 2c 20 70 44 65  et(zData, t, pDe
155b0 73 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  st);.    }else{.
155c0 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20        /* If the 
155d0 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 69 73 20  column value is 
155e0 61 20 73 74 72 69 6e 67 2c 20 77 65 20 6e 65 65  a string, we nee
155f0 64 20 61 20 70 65 72 73 69 73 74 65 6e 74 20 76  d a persistent v
15600 61 6c 75 65 2c 20 6e 6f 74 0a 20 20 20 20 20 20  alue, not.      
15610 2a 2a 20 61 20 4d 45 4d 5f 45 70 68 65 6d 20 76  ** a MEM_Ephem v
15620 61 6c 75 65 2e 20 20 54 68 69 73 20 62 72 61 6e  alue.  This bran
15630 63 68 20 69 73 20 61 20 66 61 73 74 20 73 68 6f  ch is a fast sho
15640 72 74 2d 63 75 74 20 74 68 61 74 20 69 73 20 65  rt-cut that is e
15650 71 75 69 76 61 6c 65 6e 74 0a 20 20 20 20 20 20  quivalent.      
15660 2a 2a 20 74 6f 20 63 61 6c 6c 69 6e 67 20 73 71  ** to calling sq
15670 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 47  lite3VdbeSerialG
15680 65 74 28 29 20 61 6e 64 20 73 71 6c 69 74 65 33  et() and sqlite3
15690 56 64 62 65 44 65 65 70 68 65 6d 65 72 61 6c 69  VdbeDeephemerali
156a0 7a 65 28 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  ze()..      */. 
156b0 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73       static cons
156c0 74 20 75 31 36 20 61 46 6c 61 67 5b 5d 20 3d 20  t u16 aFlag[] = 
156d0 7b 20 4d 45 4d 5f 42 6c 6f 62 2c 20 4d 45 4d 5f  { MEM_Blob, MEM_
156e0 53 74 72 7c 4d 45 4d 5f 54 65 72 6d 20 7d 3b 0a  Str|MEM_Term };.
156f0 20 20 20 20 20 20 70 44 65 73 74 2d 3e 6e 20 3d        pDest->n =
15700 20 6c 65 6e 20 3d 20 28 74 2d 31 32 29 2f 32 3b   len = (t-12)/2;
15710 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e 65 6e  .      pDest->en
15720 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20  c = encoding;.  
15730 20 20 20 20 69 66 28 20 70 44 65 73 74 2d 3e 73      if( pDest->s
15740 7a 4d 61 6c 6c 6f 63 20 3c 20 6c 65 6e 2b 32 20  zMalloc < len+2 
15750 29 7b 0a 20 20 20 20 20 20 20 20 70 44 65 73 74  ){.        pDest
15760 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75  ->flags = MEM_Nu
15770 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  ll;.        if( 
15780 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72  sqlite3VdbeMemGr
15790 6f 77 28 70 44 65 73 74 2c 20 6c 65 6e 2b 32 2c  ow(pDest, len+2,
157a0 20 30 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65   0) ) goto no_me
157b0 6d 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  m;.      }else{.
157c0 20 20 20 20 20 20 20 20 70 44 65 73 74 2d 3e 7a          pDest->z
157d0 20 3d 20 70 44 65 73 74 2d 3e 7a 4d 61 6c 6c 6f   = pDest->zMallo
157e0 63 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  c;.      }.     
157f0 20 6d 65 6d 63 70 79 28 70 44 65 73 74 2d 3e 7a   memcpy(pDest->z
15800 2c 20 7a 44 61 74 61 2c 20 6c 65 6e 29 3b 0a 20  , zData, len);. 
15810 20 20 20 20 20 70 44 65 73 74 2d 3e 7a 5b 6c 65       pDest->z[le
15820 6e 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 44  n] = 0;.      pD
15830 65 73 74 2d 3e 7a 5b 6c 65 6e 2b 31 5d 20 3d 20  est->z[len+1] = 
15840 30 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e  0;.      pDest->
15850 66 6c 61 67 73 20 3d 20 61 46 6c 61 67 5b 74 26  flags = aFlag[t&
15860 31 5d 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  1];.    }.  }els
15870 65 7b 0a 20 20 20 20 70 44 65 73 74 2d 3e 65 6e  e{.    pDest->en
15880 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20  c = encoding;.  
15890 20 20 2f 2a 20 54 68 69 73 20 62 72 61 6e 63 68    /* This branch
158a0 20 68 61 70 70 65 6e 73 20 6f 6e 6c 79 20 77 68   happens only wh
158b0 65 6e 20 63 6f 6e 74 65 6e 74 20 69 73 20 6f 6e  en content is on
158c0 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 73 20   overflow pages 
158d0 2a 2f 0a 20 20 20 20 69 66 28 20 28 28 70 4f 70  */.    if( ((pOp
158e0 2d 3e 70 35 20 26 20 28 4f 50 46 4c 41 47 5f 4c  ->p5 & (OPFLAG_L
158f0 45 4e 47 54 48 41 52 47 7c 4f 50 46 4c 41 47 5f  ENGTHARG|OPFLAG_
15900 54 59 50 45 4f 46 41 52 47 29 29 21 3d 30 0a 20  TYPEOFARG))!=0. 
15910 20 20 20 20 20 20 20 20 20 26 26 20 28 28 74 3e           && ((t>
15920 3d 31 32 20 26 26 20 28 74 26 31 29 3d 3d 30 29  =12 && (t&1)==0)
15930 20 7c 7c 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f   || (pOp->p5 & O
15940 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 29  PFLAG_TYPEOFARG)
15950 21 3d 30 29 29 0a 20 20 20 20 20 7c 7c 20 28 6c  !=0)).     || (l
15960 65 6e 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  en = sqlite3Vdbe
15970 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 74 29  SerialTypeLen(t)
15980 29 3d 3d 30 0a 20 20 20 20 29 7b 0a 20 20 20 20  )==0.    ){.    
15990 20 20 2f 2a 20 43 6f 6e 74 65 6e 74 20 69 73 20    /* Content is 
159a0 69 72 72 65 6c 65 76 61 6e 74 20 66 6f 72 0a 20  irrelevant for. 
159b0 20 20 20 20 20 2a 2a 20 20 20 20 31 2e 20 74 68       **    1. th
159c0 65 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74  e typeof() funct
159d0 69 6f 6e 2c 0a 20 20 20 20 20 20 2a 2a 20 20 20  ion,.      **   
159e0 20 32 2e 20 74 68 65 20 6c 65 6e 67 74 68 28 58   2. the length(X
159f0 29 20 66 75 6e 63 74 69 6f 6e 20 69 66 20 58 20  ) function if X 
15a00 69 73 20 61 20 62 6c 6f 62 2c 20 61 6e 64 0a 20  is a blob, and. 
15a10 20 20 20 20 20 2a 2a 20 20 20 20 33 2e 20 69 66       **    3. if
15a20 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6c 65 6e   the content len
15a30 67 74 68 20 69 73 20 7a 65 72 6f 2e 0a 20 20 20  gth is zero..   
15a40 20 20 20 2a 2a 20 53 6f 20 77 65 20 6d 69 67 68     ** So we migh
15a50 74 20 61 73 20 77 65 6c 6c 20 75 73 65 20 62 6f  t as well use bo
15a60 67 75 73 20 63 6f 6e 74 65 6e 74 20 72 61 74 68  gus content rath
15a70 65 72 20 74 68 61 6e 20 72 65 61 64 69 6e 67 0a  er than reading.
15a80 20 20 20 20 20 20 2a 2a 20 63 6f 6e 74 65 6e 74        ** content
15a90 20 66 72 6f 6d 20 64 69 73 6b 2e 20 2a 2f 0a 20   from disk. */. 
15aa0 20 20 20 20 20 73 74 61 74 69 63 20 75 38 20 61       static u8 a
15ab0 5a 65 72 6f 5b 38 5d 3b 20 20 2f 2a 20 54 68 69  Zero[8];  /* Thi
15ac0 73 20 69 73 20 74 68 65 20 62 6f 67 75 73 20 63  s is the bogus c
15ad0 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20 20 20 20 20  ontent */.      
15ae0 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
15af0 6c 47 65 74 28 61 5a 65 72 6f 2c 20 74 2c 20 70  lGet(aZero, t, p
15b00 44 65 73 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65  Dest);.    }else
15b10 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  {.      rc = sql
15b20 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42  ite3VdbeMemFromB
15b30 74 72 65 65 28 70 43 2d 3e 75 63 2e 70 43 75 72  tree(pC->uc.pCur
15b40 73 6f 72 2c 20 61 4f 66 66 73 65 74 5b 70 32 5d  sor, aOffset[p2]
15b50 2c 20 6c 65 6e 2c 20 70 44 65 73 74 29 3b 0a 20  , len, pDest);. 
15b60 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
15b70 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62  ITE_OK ) goto ab
15b80 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
15b90 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
15ba0 64 62 65 53 65 72 69 61 6c 47 65 74 28 28 63 6f  dbeSerialGet((co
15bb0 6e 73 74 20 75 38 2a 29 70 44 65 73 74 2d 3e 7a  nst u8*)pDest->z
15bc0 2c 20 74 2c 20 70 44 65 73 74 29 3b 0a 20 20 20  , t, pDest);.   
15bd0 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20     pDest->flags 
15be0 26 3d 20 7e 4d 45 4d 5f 45 70 68 65 6d 3b 0a 20  &= ~MEM_Ephem;. 
15bf0 20 20 20 7d 0a 20 20 7d 0a 0a 6f 70 5f 63 6f 6c     }.  }..op_col
15c00 75 6d 6e 5f 6f 75 74 3a 0a 20 20 55 50 44 41 54  umn_out:.  UPDAT
15c10 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
15c20 44 65 73 74 29 3b 0a 20 20 52 45 47 49 53 54 45  Dest);.  REGISTE
15c30 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
15c40 20 70 44 65 73 74 29 3b 0a 20 20 62 72 65 61 6b   pDest);.  break
15c50 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
15c60 41 66 66 69 6e 69 74 79 20 50 31 20 50 32 20 2a  Affinity P1 P2 *
15c70 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
15c80 73 3a 20 61 66 66 69 6e 69 74 79 28 72 5b 50 31  s: affinity(r[P1
15c90 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 41 70 70 6c  @P2]).**.** Appl
15ca0 79 20 61 66 66 69 6e 69 74 69 65 73 20 74 6f 20  y affinities to 
15cb0 61 20 72 61 6e 67 65 20 6f 66 20 50 32 20 72 65  a range of P2 re
15cc0 67 69 73 74 65 72 73 20 73 74 61 72 74 69 6e 67  gisters starting
15cd0 20 77 69 74 68 20 50 31 2e 0a 2a 2a 0a 2a 2a 20   with P1..**.** 
15ce0 50 34 20 69 73 20 61 20 73 74 72 69 6e 67 20 74  P4 is a string t
15cf0 68 61 74 20 69 73 20 50 32 20 63 68 61 72 61 63  hat is P2 charac
15d00 74 65 72 73 20 6c 6f 6e 67 2e 20 54 68 65 20 6e  ters long. The n
15d10 74 68 20 63 68 61 72 61 63 74 65 72 20 6f 66 20  th character of 
15d20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e  the.** string in
15d30 64 69 63 61 74 65 73 20 74 68 65 20 63 6f 6c 75  dicates the colu
15d40 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68 61 74  mn affinity that
15d50 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20   should be used 
15d60 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20 6d  for the nth.** m
15d70 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74 68  emory cell in th
15d80 65 20 72 61 6e 67 65 2e 0a 2a 2f 0a 63 61 73 65  e range..*/.case
15d90 20 4f 50 5f 41 66 66 69 6e 69 74 79 3a 20 7b 0a   OP_Affinity: {.
15da0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41    const char *zA
15db0 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20 54 68  ffinity;   /* Th
15dc0 65 20 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65  e affinity to be
15dd0 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20 20 63 68   applied */.  ch
15de0 61 72 20 63 41 66 66 3b 20 20 20 20 20 20 20 20  ar cAff;        
15df0 20 20 20 20 20 20 20 2f 2a 20 41 20 73 69 6e 67         /* A sing
15e00 6c 65 20 63 68 61 72 61 63 74 65 72 20 6f 66 20  le character of 
15e10 61 66 66 69 6e 69 74 79 20 2a 2f 0a 0a 20 20 7a  affinity */..  z
15e20 41 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e  Affinity = pOp->
15e30 70 34 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28 20  p4.z;.  assert( 
15e40 7a 41 66 66 69 6e 69 74 79 21 3d 30 20 29 3b 0a  zAffinity!=0 );.
15e50 20 20 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e    assert( zAffin
15e60 69 74 79 5b 70 4f 70 2d 3e 70 32 5d 3d 3d 30 20  ity[pOp->p2]==0 
15e70 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  );.  pIn1 = &aMe
15e80 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 77 68  m[pOp->p1];.  wh
15e90 69 6c 65 28 20 28 63 41 66 66 20 3d 20 2a 28 7a  ile( (cAff = *(z
15ea0 41 66 66 69 6e 69 74 79 2b 2b 29 29 21 3d 30 20  Affinity++))!=0 
15eb0 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
15ec0 49 6e 31 20 3c 3d 20 26 70 2d 3e 61 4d 65 6d 5b  In1 <= &p->aMem[
15ed0 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
15ee0 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20  nCursor)] );.   
15ef0 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
15f00 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 20  lid(pIn1) );.   
15f10 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70   applyAffinity(p
15f20 49 6e 31 2c 20 63 41 66 66 2c 20 65 6e 63 6f 64  In1, cAff, encod
15f30 69 6e 67 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b  ing);.    pIn1++
15f40 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
15f50 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 6b  ../* Opcode: Mak
15f60 65 52 65 63 6f 72 64 20 50 31 20 50 32 20 50 33  eRecord P1 P2 P3
15f70 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
15f80 73 3a 20 72 5b 50 33 5d 3d 6d 6b 72 65 63 28 72  s: r[P3]=mkrec(r
15f90 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 43  [P1@P2]).**.** C
15fa0 6f 6e 76 65 72 74 20 50 32 20 72 65 67 69 73 74  onvert P2 regist
15fb0 65 72 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  ers beginning wi
15fc0 74 68 20 50 31 20 69 6e 74 6f 20 74 68 65 20 5b  th P1 into the [
15fd0 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 5d 0a 2a  record format].*
15fe0 2a 20 75 73 65 20 61 73 20 61 20 64 61 74 61 20  * use as a data 
15ff0 72 65 63 6f 72 64 20 69 6e 20 61 20 64 61 74 61  record in a data
16000 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 61 73  base table or as
16010 20 61 20 6b 65 79 0a 2a 2a 20 69 6e 20 61 6e 20   a key.** in an 
16020 69 6e 64 65 78 2e 20 20 54 68 65 20 4f 50 5f 43  index.  The OP_C
16030 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 20 63 61 6e  olumn opcode can
16040 20 64 65 63 6f 64 65 20 74 68 65 20 72 65 63 6f   decode the reco
16050 72 64 20 6c 61 74 65 72 2e 0a 2a 2a 0a 2a 2a 20  rd later..**.** 
16060 50 34 20 6d 61 79 20 62 65 20 61 20 73 74 72 69  P4 may be a stri
16070 6e 67 20 74 68 61 74 20 69 73 20 50 32 20 63 68  ng that is P2 ch
16080 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 20  aracters long.  
16090 54 68 65 20 6e 74 68 20 63 68 61 72 61 63 74 65  The nth characte
160a0 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72 69  r of the.** stri
160b0 6e 67 20 69 6e 64 69 63 61 74 65 73 20 74 68 65  ng indicates the
160c0 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79   column affinity
160d0 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20   that should be 
160e0 75 73 65 64 20 66 6f 72 20 74 68 65 20 6e 74 68  used for the nth
160f0 0a 2a 2a 20 66 69 65 6c 64 20 6f 66 20 74 68 65  .** field of the
16100 20 69 6e 64 65 78 20 6b 65 79 2e 0a 2a 2a 0a 2a   index key..**.*
16110 2a 20 54 68 65 20 6d 61 70 70 69 6e 67 20 66 72  * The mapping fr
16120 6f 6d 20 63 68 61 72 61 63 74 65 72 20 74 6f 20  om character to 
16130 61 66 66 69 6e 69 74 79 20 69 73 20 67 69 76 65  affinity is give
16140 6e 20 62 79 20 74 68 65 20 53 51 4c 49 54 45 5f  n by the SQLITE_
16150 41 46 46 5f 0a 2a 2a 20 6d 61 63 72 6f 73 20 64  AFF_.** macros d
16160 65 66 69 6e 65 64 20 69 6e 20 73 71 6c 69 74 65  efined in sqlite
16170 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  Int.h..**.** If 
16180 50 34 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  P4 is NULL then 
16190 61 6c 6c 20 69 6e 64 65 78 20 66 69 65 6c 64 73  all index fields
161a0 20 68 61 76 65 20 74 68 65 20 61 66 66 69 6e 69   have the affini
161b0 74 79 20 42 4c 4f 42 2e 0a 2a 2f 0a 63 61 73 65  ty BLOB..*/.case
161c0 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20   OP_MakeRecord: 
161d0 7b 0a 20 20 75 38 20 2a 7a 4e 65 77 52 65 63 6f  {.  u8 *zNewReco
161e0 72 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 20  rd;        /* A 
161f0 62 75 66 66 65 72 20 74 6f 20 68 6f 6c 64 20 74  buffer to hold t
16200 68 65 20 64 61 74 61 20 66 6f 72 20 74 68 65 20  he data for the 
16210 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  new record */.  
16220 4d 65 6d 20 2a 70 52 65 63 3b 20 20 20 20 20 20  Mem *pRec;      
16230 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65         /* The ne
16240 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 75 36  w record */.  u6
16250 34 20 6e 44 61 74 61 3b 20 20 20 20 20 20 20 20  4 nData;        
16260 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
16270 66 20 62 79 74 65 73 20 6f 66 20 64 61 74 61 20  f bytes of data 
16280 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  space */.  int n
16290 48 64 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Hdr;            
162a0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
162b0 79 74 65 73 20 6f 66 20 68 65 61 64 65 72 20 73  ytes of header s
162c0 70 61 63 65 20 2a 2f 0a 20 20 69 36 34 20 6e 42  pace */.  i64 nB
162d0 79 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  yte;            
162e0 20 2f 2a 20 44 61 74 61 20 73 70 61 63 65 20 72   /* Data space r
162f0 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69 73  equired for this
16300 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 36 34   record */.  i64
16310 20 6e 5a 65 72 6f 3b 20 20 20 20 20 20 20 20 20   nZero;         
16320 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
16330 20 7a 65 72 6f 20 62 79 74 65 73 20 61 74 20 74   zero bytes at t
16340 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65  he end of the re
16350 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 56  cord */.  int nV
16360 61 72 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20  arint;          
16370 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
16380 74 65 73 20 69 6e 20 61 20 76 61 72 69 6e 74 20  tes in a varint 
16390 2a 2f 0a 20 20 75 33 32 20 73 65 72 69 61 6c 5f  */.  u32 serial_
163a0 74 79 70 65 3b 20 20 20 20 20 20 20 2f 2a 20 54  type;       /* T
163b0 79 70 65 20 66 69 65 6c 64 20 2a 2f 0a 20 20 4d  ype field */.  M
163c0 65 6d 20 2a 70 44 61 74 61 30 3b 20 20 20 20 20  em *pData0;     
163d0 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 66        /* First f
163e0 69 65 6c 64 20 74 6f 20 62 65 20 63 6f 6d 62 69  ield to be combi
163f0 6e 65 64 20 69 6e 74 6f 20 74 68 65 20 72 65 63  ned into the rec
16400 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c  ord */.  Mem *pL
16410 61 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ast;            
16420 2f 2a 20 4c 61 73 74 20 66 69 65 6c 64 20 6f 66  /* Last field of
16430 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
16440 20 69 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20 20   int nField;    
16450 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
16460 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74  r of fields in t
16470 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 63  he record */.  c
16480 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20  har *zAffinity; 
16490 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66        /* The aff
164a0 69 6e 69 74 79 20 73 74 72 69 6e 67 20 66 6f 72  inity string for
164b0 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
164c0 20 69 6e 74 20 66 69 6c 65 5f 66 6f 72 6d 61 74   int file_format
164d0 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 6c 65 20  ;       /* File 
164e0 66 6f 72 6d 61 74 20 74 6f 20 75 73 65 20 66 6f  format to use fo
164f0 72 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20  r encoding */.  
16500 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20  int i;          
16510 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20         /* Space 
16520 75 73 65 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f  used in zNewReco
16530 72 64 5b 5d 20 68 65 61 64 65 72 20 2a 2f 0a 20  rd[] header */. 
16540 20 69 6e 74 20 6a 3b 20 20 20 20 20 20 20 20 20   int j;         
16550 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65          /* Space
16560 20 75 73 65 64 20 69 6e 20 7a 4e 65 77 52 65 63   used in zNewRec
16570 6f 72 64 5b 5d 20 63 6f 6e 74 65 6e 74 20 2a 2f  ord[] content */
16580 0a 20 20 75 33 32 20 6c 65 6e 3b 20 20 20 20 20  .  u32 len;     
16590 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e            /* Len
165a0 67 74 68 20 6f 66 20 61 20 66 69 65 6c 64 20 2a  gth of a field *
165b0 2f 0a 0a 20 20 2f 2a 20 41 73 73 75 6d 69 6e 67  /..  /* Assuming
165c0 20 74 68 65 20 72 65 63 6f 72 64 20 63 6f 6e 74   the record cont
165d0 61 69 6e 73 20 4e 20 66 69 65 6c 64 73 2c 20 74  ains N fields, t
165e0 68 65 20 72 65 63 6f 72 64 20 66 6f 72 6d 61 74  he record format
165f0 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20 6c 69 6b 65   looks.  ** like
16600 20 74 68 69 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a   this:.  **.  **
16610 20 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 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 20 7c  ---------.  ** |
16660 20 68 64 72 2d 73 69 7a 65 20 7c 20 74 79 70 65   hdr-size | type
16670 20 30 20 7c 20 74 79 70 65 20 31 20 7c 20 2e 2e   0 | type 1 | ..
16680 2e 20 7c 20 74 79 70 65 20 4e 2d 31 20 7c 20 64  . | type N-1 | d
16690 61 74 61 30 20 7c 20 2e 2e 2e 20 7c 20 64 61 74  ata0 | ... | dat
166a0 61 20 4e 2d 31 20 7c 20 0a 20 20 2a 2a 20 2d 2d  a N-1 | .  ** --
166b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
166c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
166d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
166e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
166f0 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a 20 20 2a 2a  ------.  **.  **
16700 20 44 61 74 61 28 30 29 20 69 73 20 74 61 6b 65   Data(0) is take
16710 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20  n from register 
16720 50 31 2e 20 20 44 61 74 61 28 31 29 20 63 6f 6d  P1.  Data(1) com
16730 65 73 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72  es from register
16740 20 50 31 2b 31 0a 20 20 2a 2a 20 61 6e 64 20 73   P1+1.  ** and s
16750 6f 20 66 6f 72 74 68 2e 0a 20 20 2a 2a 0a 20 20  o forth..  **.  
16760 2a 2a 20 45 61 63 68 20 74 79 70 65 20 66 69 65  ** Each type fie
16770 6c 64 20 69 73 20 61 20 76 61 72 69 6e 74 20 72  ld is a varint r
16780 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20  epresenting the 
16790 73 65 72 69 61 6c 20 74 79 70 65 20 6f 66 20 74  serial type of t
167a0 68 65 20 0a 20 20 2a 2a 20 63 6f 72 72 65 73 70  he .  ** corresp
167b0 6f 6e 64 69 6e 67 20 64 61 74 61 20 65 6c 65 6d  onding data elem
167c0 65 6e 74 20 28 73 65 65 20 73 71 6c 69 74 65 33  ent (see sqlite3
167d0 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 28 29  VdbeSerialType()
167e0 29 2e 20 54 68 65 0a 20 20 2a 2a 20 68 64 72 2d  ). The.  ** hdr-
167f0 73 69 7a 65 20 66 69 65 6c 64 20 69 73 20 61 6c  size field is al
16800 73 6f 20 61 20 76 61 72 69 6e 74 20 77 68 69 63  so a varint whic
16810 68 20 69 73 20 74 68 65 20 6f 66 66 73 65 74 20  h is the offset 
16820 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69  from the beginni
16830 6e 67 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 72  ng.  ** of the r
16840 65 63 6f 72 64 20 74 6f 20 64 61 74 61 30 2e 0a  ecord to data0..
16850 20 20 2a 2f 0a 20 20 6e 44 61 74 61 20 3d 20 30    */.  nData = 0
16860 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
16870 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20  ber of bytes of 
16880 64 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20  data space */.  
16890 6e 48 64 72 20 3d 20 30 3b 20 20 20 20 20 20 20  nHdr = 0;       
168a0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
168b0 62 79 74 65 73 20 6f 66 20 68 65 61 64 65 72 20  bytes of header 
168c0 73 70 61 63 65 20 2a 2f 0a 20 20 6e 5a 65 72 6f  space */.  nZero
168d0 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a   = 0;         /*
168e0 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20   Number of zero 
168f0 62 79 74 65 73 20 61 74 20 74 68 65 20 65 6e 64  bytes at the end
16900 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a   of the record *
16910 2f 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70  /.  nField = pOp
16920 2d 3e 70 31 3b 0a 20 20 7a 41 66 66 69 6e 69 74  ->p1;.  zAffinit
16930 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  y = pOp->p4.z;. 
16940 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e   assert( nField>
16950 30 20 26 26 20 70 4f 70 2d 3e 70 32 3e 30 20 26  0 && pOp->p2>0 &
16960 26 20 70 4f 70 2d 3e 70 32 2b 6e 46 69 65 6c 64  & pOp->p2+nField
16970 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
16980 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a  ->nCursor)+1 );.
16990 20 20 70 44 61 74 61 30 20 3d 20 26 61 4d 65 6d    pData0 = &aMem
169a0 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e 46 69 65  [nField];.  nFie
169b0 6c 64 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  ld = pOp->p2;.  
169c0 70 4c 61 73 74 20 3d 20 26 70 44 61 74 61 30 5b  pLast = &pData0[
169d0 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20 20 66 69 6c  nField-1];.  fil
169e0 65 5f 66 6f 72 6d 61 74 20 3d 20 70 2d 3e 6d 69  e_format = p->mi
169f0 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74  nWriteFileFormat
16a00 3b 0a 0a 20 20 2f 2a 20 49 64 65 6e 74 69 66 79  ;..  /* Identify
16a10 20 74 68 65 20 6f 75 74 70 75 74 20 72 65 67 69   the output regi
16a20 73 74 65 72 20 2a 2f 0a 20 20 61 73 73 65 72 74  ster */.  assert
16a30 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70  ( pOp->p3<pOp->p
16a40 31 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f  1 || pOp->p3>=pO
16a50 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 20 29 3b  p->p1+pOp->p2 );
16a60 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
16a70 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41  pOp->p3];.  memA
16a80 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
16a90 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 41 70 70  pOut);..  /* App
16aa0 6c 79 20 74 68 65 20 72 65 71 75 65 73 74 65 64  ly the requested
16ab0 20 61 66 66 69 6e 69 74 79 20 74 6f 20 61 6c 6c   affinity to all
16ac0 20 69 6e 70 75 74 73 0a 20 20 2a 2f 0a 20 20 61   inputs.  */.  a
16ad0 73 73 65 72 74 28 20 70 44 61 74 61 30 3c 3d 70  ssert( pData0<=p
16ae0 4c 61 73 74 20 29 3b 0a 20 20 69 66 28 20 7a 41  Last );.  if( zA
16af0 66 66 69 6e 69 74 79 20 29 7b 0a 20 20 20 20 70  ffinity ){.    p
16b00 52 65 63 20 3d 20 70 44 61 74 61 30 3b 0a 20 20  Rec = pData0;.  
16b10 20 20 64 6f 7b 0a 20 20 20 20 20 20 61 70 70 6c    do{.      appl
16b20 79 41 66 66 69 6e 69 74 79 28 70 52 65 63 2b 2b  yAffinity(pRec++
16b30 2c 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29  , *(zAffinity++)
16b40 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20  , encoding);.   
16b50 20 20 20 61 73 73 65 72 74 28 20 7a 41 66 66 69     assert( zAffi
16b60 6e 69 74 79 5b 30 5d 3d 3d 30 20 7c 7c 20 70 52  nity[0]==0 || pR
16b70 65 63 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 20  ec<=pLast );.   
16b80 20 7d 77 68 69 6c 65 28 20 7a 41 66 66 69 6e 69   }while( zAffini
16b90 74 79 5b 30 5d 20 29 3b 0a 20 20 7d 0a 0a 20 20  ty[0] );.  }..  
16ba0 2f 2a 20 4c 6f 6f 70 20 74 68 72 6f 75 67 68 20  /* Loop through 
16bb0 74 68 65 20 65 6c 65 6d 65 6e 74 73 20 74 68 61  the elements tha
16bc0 74 20 77 69 6c 6c 20 6d 61 6b 65 20 75 70 20 74  t will make up t
16bd0 68 65 20 72 65 63 6f 72 64 20 74 6f 20 66 69 67  he record to fig
16be0 75 72 65 0a 20 20 2a 2a 20 6f 75 74 20 68 6f 77  ure.  ** out how
16bf0 20 6d 75 63 68 20 73 70 61 63 65 20 69 73 20 72   much space is r
16c00 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 65 20  equired for the 
16c10 6e 65 77 20 72 65 63 6f 72 64 2e 0a 20 20 2a 2f  new record..  */
16c20 0a 20 20 70 52 65 63 20 3d 20 70 4c 61 73 74 3b  .  pRec = pLast;
16c30 0a 20 20 64 6f 7b 0a 20 20 20 20 61 73 73 65 72  .  do{.    asser
16c40 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52  t( memIsValid(pR
16c50 65 63 29 20 29 3b 0a 20 20 20 20 70 52 65 63 2d  ec) );.    pRec-
16c60 3e 75 54 65 6d 70 20 3d 20 73 65 72 69 61 6c 5f  >uTemp = serial_
16c70 74 79 70 65 20 3d 20 73 71 6c 69 74 65 33 56 64  type = sqlite3Vd
16c80 62 65 53 65 72 69 61 6c 54 79 70 65 28 70 52 65  beSerialType(pRe
16c90 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74 2c 20  c, file_format, 
16ca0 26 6c 65 6e 29 3b 0a 20 20 20 20 69 66 28 20 70  &len);.    if( p
16cb0 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Rec->flags & MEM
16cc0 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 69  _Zero ){.      i
16cd0 66 28 20 6e 44 61 74 61 20 29 7b 0a 20 20 20 20  f( nData ){.    
16ce0 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56      if( sqlite3V
16cf0 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62  dbeMemExpandBlob
16d00 28 70 52 65 63 29 20 29 20 67 6f 74 6f 20 6e 6f  (pRec) ) goto no
16d10 5f 6d 65 6d 3b 0a 20 20 20 20 20 20 7d 65 6c 73  _mem;.      }els
16d20 65 7b 0a 20 20 20 20 20 20 20 20 6e 5a 65 72 6f  e{.        nZero
16d30 20 2b 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72   += pRec->u.nZer
16d40 6f 3b 0a 20 20 20 20 20 20 20 20 6c 65 6e 20 2d  o;.        len -
16d50 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b  = pRec->u.nZero;
16d60 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
16d70 20 20 20 6e 44 61 74 61 20 2b 3d 20 6c 65 6e 3b     nData += len;
16d80 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20 73  .    testcase( s
16d90 65 72 69 61 6c 5f 74 79 70 65 3d 3d 31 32 37 20  erial_type==127 
16da0 29 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28  );.    testcase(
16db0 20 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d 31 32   serial_type==12
16dc0 38 20 29 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d  8 );.    nHdr +=
16dd0 20 73 65 72 69 61 6c 5f 74 79 70 65 3c 3d 31 32   serial_type<=12
16de0 37 20 3f 20 31 20 3a 20 73 71 6c 69 74 65 33 56  7 ? 1 : sqlite3V
16df0 61 72 69 6e 74 4c 65 6e 28 73 65 72 69 61 6c 5f  arintLen(serial_
16e00 74 79 70 65 29 3b 0a 20 20 20 20 69 66 28 20 70  type);.    if( p
16e10 52 65 63 3d 3d 70 44 61 74 61 30 20 29 20 62 72  Rec==pData0 ) br
16e20 65 61 6b 3b 0a 20 20 20 20 70 52 65 63 2d 2d 3b  eak;.    pRec--;
16e30 0a 20 20 7d 77 68 69 6c 65 28 31 29 3b 0a 0a 20  .  }while(1);.. 
16e40 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a   /* EVIDENCE-OF:
16e50 20 52 2d 32 32 35 36 34 2d 31 31 36 34 37 20 54   R-22564-11647 T
16e60 68 65 20 68 65 61 64 65 72 20 62 65 67 69 6e 73  he header begins
16e70 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20 76   with a single v
16e80 61 72 69 6e 74 0a 20 20 2a 2a 20 77 68 69 63 68  arint.  ** which
16e90 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20   determines the 
16ea0 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20  total number of 
16eb0 62 79 74 65 73 20 69 6e 20 74 68 65 20 68 65 61  bytes in the hea
16ec0 64 65 72 2e 20 54 68 65 20 76 61 72 69 6e 74 0a  der. The varint.
16ed0 20 20 2a 2a 20 76 61 6c 75 65 20 69 73 20 74 68    ** value is th
16ee0 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 68 65  e size of the he
16ef0 61 64 65 72 20 69 6e 20 62 79 74 65 73 20 69 6e  ader in bytes in
16f00 63 6c 75 64 69 6e 67 20 74 68 65 20 73 69 7a 65  cluding the size
16f10 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20 69 74 73   varint.  ** its
16f20 65 6c 66 2e 20 2a 2f 0a 20 20 74 65 73 74 63 61  elf. */.  testca
16f30 73 65 28 20 6e 48 64 72 3d 3d 31 32 36 20 29 3b  se( nHdr==126 );
16f40 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 48 64  .  testcase( nHd
16f50 72 3d 3d 31 32 37 20 29 3b 0a 20 20 69 66 28 20  r==127 );.  if( 
16f60 6e 48 64 72 3c 3d 31 32 36 20 29 7b 0a 20 20 20  nHdr<=126 ){.   
16f70 20 2f 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e 20 63   /* The common c
16f80 61 73 65 20 2a 2f 0a 20 20 20 20 6e 48 64 72 20  ase */.    nHdr 
16f90 2b 3d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  += 1;.  }else{. 
16fa0 20 20 20 2f 2a 20 52 61 72 65 20 63 61 73 65 20     /* Rare case 
16fb0 6f 66 20 61 20 72 65 61 6c 6c 79 20 6c 61 72 67  of a really larg
16fc0 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 20 20  e header */.    
16fd0 6e 56 61 72 69 6e 74 20 3d 20 73 71 6c 69 74 65  nVarint = sqlite
16fe0 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29  3VarintLen(nHdr)
16ff0 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 6e 56  ;.    nHdr += nV
17000 61 72 69 6e 74 3b 0a 20 20 20 20 69 66 28 20 6e  arint;.    if( n
17010 56 61 72 69 6e 74 3c 73 71 6c 69 74 65 33 56 61  Varint<sqlite3Va
17020 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29 20 29 20  rintLen(nHdr) ) 
17030 6e 48 64 72 2b 2b 3b 0a 20 20 7d 0a 20 20 6e 42  nHdr++;.  }.  nB
17040 79 74 65 20 3d 20 6e 48 64 72 2b 6e 44 61 74 61  yte = nHdr+nData
17050 3b 0a 20 20 69 66 28 20 6e 42 79 74 65 2b 6e 5a  ;.  if( nByte+nZ
17060 65 72 6f 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  ero>db->aLimit[S
17070 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
17080 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  TH] ){.    goto 
17090 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20  too_big;.  }..  
170a0 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65  /* Make sure the
170b0 20 6f 75 74 70 75 74 20 72 65 67 69 73 74 65 72   output register
170c0 20 68 61 73 20 61 20 62 75 66 66 65 72 20 6c 61   has a buffer la
170d0 72 67 65 20 65 6e 6f 75 67 68 20 74 6f 20 73 74  rge enough to st
170e0 6f 72 65 20 0a 20 20 2a 2a 20 74 68 65 20 6e 65  ore .  ** the ne
170f0 77 20 72 65 63 6f 72 64 2e 20 54 68 65 20 6f 75  w record. The ou
17100 74 70 75 74 20 72 65 67 69 73 74 65 72 20 28 70  tput register (p
17110 4f 70 2d 3e 70 33 29 20 69 73 20 6e 6f 74 20 61  Op->p3) is not a
17120 6c 6c 6f 77 65 64 20 74 6f 0a 20 20 2a 2a 20 62  llowed to.  ** b
17130 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e 70  e one of the inp
17140 75 74 20 72 65 67 69 73 74 65 72 73 20 28 62 65  ut registers (be
17150 63 61 75 73 65 20 74 68 65 20 66 6f 6c 6c 6f 77  cause the follow
17160 69 6e 67 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a  ing call to.  **
17170 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43   sqlite3VdbeMemC
17180 6c 65 61 72 41 6e 64 52 65 73 69 7a 65 28 29 20  learAndResize() 
17190 63 6f 75 6c 64 20 63 6c 6f 62 62 65 72 20 74 68  could clobber th
171a0 65 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20 69  e value before i
171b0 74 20 69 73 20 75 73 65 64 29 2e 0a 20 20 2a 2f  t is used)..  */
171c0 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64  .  if( sqlite3Vd
171d0 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65 73  beMemClearAndRes
171e0 69 7a 65 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e  ize(pOut, (int)n
171f0 42 79 74 65 29 20 29 7b 0a 20 20 20 20 67 6f 74  Byte) ){.    got
17200 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20  o no_mem;.  }.  
17210 7a 4e 65 77 52 65 63 6f 72 64 20 3d 20 28 75 38  zNewRecord = (u8
17220 20 2a 29 70 4f 75 74 2d 3e 7a 3b 0a 0a 20 20 2f   *)pOut->z;..  /
17230 2a 20 57 72 69 74 65 20 74 68 65 20 72 65 63 6f  * Write the reco
17240 72 64 20 2a 2f 0a 20 20 69 20 3d 20 70 75 74 56  rd */.  i = putV
17250 61 72 69 6e 74 33 32 28 7a 4e 65 77 52 65 63 6f  arint32(zNewReco
17260 72 64 2c 20 6e 48 64 72 29 3b 0a 20 20 6a 20 3d  rd, nHdr);.  j =
17270 20 6e 48 64 72 3b 0a 20 20 61 73 73 65 72 74 28   nHdr;.  assert(
17280 20 70 44 61 74 61 30 3c 3d 70 4c 61 73 74 20 29   pData0<=pLast )
17290 3b 0a 20 20 70 52 65 63 20 3d 20 70 44 61 74 61  ;.  pRec = pData
172a0 30 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 73 65 72  0;.  do{.    ser
172b0 69 61 6c 5f 74 79 70 65 20 3d 20 70 52 65 63 2d  ial_type = pRec-
172c0 3e 75 54 65 6d 70 3b 0a 20 20 20 20 2f 2a 20 45  >uTemp;.    /* E
172d0 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 30 36  VIDENCE-OF: R-06
172e0 35 32 39 2d 34 37 33 36 32 20 46 6f 6c 6c 6f 77  529-47362 Follow
172f0 69 6e 67 20 74 68 65 20 73 69 7a 65 20 76 61 72  ing the size var
17300 69 6e 74 20 61 72 65 20 6f 6e 65 20 6f 72 20 6d  int are one or m
17310 6f 72 65 0a 20 20 20 20 2a 2a 20 61 64 64 69 74  ore.    ** addit
17320 69 6f 6e 61 6c 20 76 61 72 69 6e 74 73 2c 20 6f  ional varints, o
17330 6e 65 20 70 65 72 20 63 6f 6c 75 6d 6e 2e 20 2a  ne per column. *
17340 2f 0a 20 20 20 20 69 20 2b 3d 20 70 75 74 56 61  /.    i += putVa
17350 72 69 6e 74 33 32 28 26 7a 4e 65 77 52 65 63 6f  rint32(&zNewReco
17360 72 64 5b 69 5d 2c 20 73 65 72 69 61 6c 5f 74 79  rd[i], serial_ty
17370 70 65 29 3b 20 20 20 20 20 20 20 20 20 20 20 20  pe);            
17380 2f 2a 20 73 65 72 69 61 6c 20 74 79 70 65 20 2a  /* serial type *
17390 2f 0a 20 20 20 20 2f 2a 20 45 56 49 44 45 4e 43  /.    /* EVIDENC
173a0 45 2d 4f 46 3a 20 52 2d 36 34 35 33 36 2d 35 31  E-OF: R-64536-51
173b0 37 32 38 20 54 68 65 20 76 61 6c 75 65 73 20 66  728 The values f
173c0 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69  or each column i
173d0 6e 20 74 68 65 20 72 65 63 6f 72 64 0a 20 20 20  n the record.   
173e0 20 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 20   ** immediately 
173f0 66 6f 6c 6c 6f 77 20 74 68 65 20 68 65 61 64 65  follow the heade
17400 72 2e 20 2a 2f 0a 20 20 20 20 6a 20 2b 3d 20 73  r. */.    j += s
17410 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
17420 50 75 74 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b  Put(&zNewRecord[
17430 6a 5d 2c 20 70 52 65 63 2c 20 73 65 72 69 61 6c  j], pRec, serial
17440 5f 74 79 70 65 29 3b 20 2f 2a 20 63 6f 6e 74 65  _type); /* conte
17450 6e 74 20 2a 2f 0a 20 20 7d 77 68 69 6c 65 28 20  nt */.  }while( 
17460 28 2b 2b 70 52 65 63 29 3c 3d 70 4c 61 73 74 20  (++pRec)<=pLast 
17470 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3d 3d  );.  assert( i==
17480 6e 48 64 72 20 29 3b 0a 20 20 61 73 73 65 72 74  nHdr );.  assert
17490 28 20 6a 3d 3d 6e 42 79 74 65 20 29 3b 0a 0a 20  ( j==nByte );.. 
174a0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
174b0 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28  >0 && pOp->p3<=(
174c0 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
174d0 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75  Cursor) );.  pOu
174e0 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74  t->n = (int)nByt
174f0 65 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  e;.  pOut->flags
17500 20 3d 20 4d 45 4d 5f 42 6c 6f 62 3b 0a 20 20 69   = MEM_Blob;.  i
17510 66 28 20 6e 5a 65 72 6f 20 29 7b 0a 20 20 20 20  f( nZero ){.    
17520 70 4f 75 74 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20  pOut->u.nZero = 
17530 6e 5a 65 72 6f 3b 0a 20 20 20 20 70 4f 75 74 2d  nZero;.    pOut-
17540 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65  >flags |= MEM_Ze
17550 72 6f 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  ro;.  }.  pOut->
17560 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46  enc = SQLITE_UTF
17570 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74  8;  /* In case t
17580 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20  he blob is ever 
17590 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 74 65 78  converted to tex
175a0 74 20 2a 2f 0a 20 20 52 45 47 49 53 54 45 52 5f  t */.  REGISTER_
175b0 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
175c0 4f 75 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d  Out);.  UPDATE_M
175d0 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
175e0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
175f0 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 75 6e 74 20  * Opcode: Count 
17600 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
17610 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 63  ynopsis: r[P2]=c
17620 6f 75 6e 74 28 29 0a 2a 2a 0a 2a 2a 20 53 74 6f  ount().**.** Sto
17630 72 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  re the number of
17640 20 65 6e 74 72 69 65 73 20 28 61 6e 20 69 6e 74   entries (an int
17650 65 67 65 72 20 76 61 6c 75 65 29 20 69 6e 20 74  eger value) in t
17660 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
17670 78 20 0a 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20  x .** opened by 
17680 63 75 72 73 6f 72 20 50 31 20 69 6e 20 72 65 67  cursor P1 in reg
17690 69 73 74 65 72 20 50 32 0a 2a 2f 0a 23 69 66 6e  ister P2.*/.#ifn
176a0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
176b0 42 54 52 45 45 43 4f 55 4e 54 0a 63 61 73 65 20  BTREECOUNT.case 
176c0 4f 50 5f 43 6f 75 6e 74 3a 20 7b 20 20 20 20 20  OP_Count: {     
176d0 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
176e0 20 69 36 34 20 6e 45 6e 74 72 79 3b 0a 20 20 42   i64 nEntry;.  B
176f0 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
17700 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70  .  assert( p->ap
17710 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 65 43  Csr[pOp->p1]->eC
17720 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
17730 42 54 52 45 45 20 29 3b 0a 20 20 70 43 72 73 72  BTREE );.  pCrsr
17740 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
17750 3e 70 31 5d 2d 3e 75 63 2e 70 43 75 72 73 6f 72  >p1]->uc.pCursor
17760 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73  ;.  assert( pCrs
17770 72 20 29 3b 0a 20 20 6e 45 6e 74 72 79 20 3d 20  r );.  nEntry = 
17780 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65  0;  /* Not neede
17790 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f  d.  Only used to
177a0 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69   silence a warni
177b0 6e 67 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71  ng. */.  rc = sq
177c0 6c 69 74 65 33 42 74 72 65 65 43 6f 75 6e 74 28  lite3BtreeCount(
177d0 70 43 72 73 72 2c 20 26 6e 45 6e 74 72 79 29 3b  pCrsr, &nEntry);
177e0 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
177f0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
17800 72 6f 72 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75  ror;.  pOut = ou
17810 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
17820 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  pOp);.  pOut->u.
17830 69 20 3d 20 6e 45 6e 74 72 79 3b 0a 20 20 62 72  i = nEntry;.  br
17840 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  eak;.}.#endif../
17850 2a 20 4f 70 63 6f 64 65 3a 20 53 61 76 65 70 6f  * Opcode: Savepo
17860 69 6e 74 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  int P1 * * P4 *.
17870 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c 20 72 65 6c 65  **.** Open, rele
17880 61 73 65 20 6f 72 20 72 6f 6c 6c 62 61 63 6b 20  ase or rollback 
17890 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 6e 61  the savepoint na
178a0 6d 65 64 20 62 79 20 70 61 72 61 6d 65 74 65 72  med by parameter
178b0 20 50 34 2c 20 64 65 70 65 6e 64 69 6e 67 0a 2a   P4, depending.*
178c0 2a 20 6f 6e 20 74 68 65 20 76 61 6c 75 65 20 6f  * on the value o
178d0 66 20 50 31 2e 20 54 6f 20 6f 70 65 6e 20 61 20  f P1. To open a 
178e0 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 2c 20 50  new savepoint, P
178f0 31 3d 3d 30 2e 20 54 6f 20 72 65 6c 65 61 73 65  1==0. To release
17900 20 28 63 6f 6d 6d 69 74 29 20 61 6e 0a 2a 2a 20   (commit) an.** 
17910 65 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69  existing savepoi
17920 6e 74 2c 20 50 31 3d 3d 31 2c 20 6f 72 20 74 6f  nt, P1==1, or to
17930 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 20 65 78 69   rollback an exi
17940 73 74 69 6e 67 20 73 61 76 65 70 6f 69 6e 74 20  sting savepoint 
17950 50 31 3d 3d 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  P1==2..*/.case O
17960 50 5f 53 61 76 65 70 6f 69 6e 74 3a 20 7b 0a 20  P_Savepoint: {. 
17970 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20 20   int p1;        
17980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17990 20 2f 2a 20 56 61 6c 75 65 20 6f 66 20 50 31 20   /* Value of P1 
179a0 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 63 68 61  operand */.  cha
179b0 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
179c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
179d0 4e 61 6d 65 20 6f 66 20 73 61 76 65 70 6f 69 6e  Name of savepoin
179e0 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 4e 61 6d 65  t */.  int nName
179f0 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70  ;.  Savepoint *p
17a00 4e 65 77 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74  New;.  Savepoint
17a10 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20   *pSavepoint;.  
17a20 53 61 76 65 70 6f 69 6e 74 20 2a 70 54 6d 70 3b  Savepoint *pTmp;
17a30 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e  .  int iSavepoin
17a40 74 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 0a 20 20  t;.  int ii;..  
17a50 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  p1 = pOp->p1;.  
17a60 7a 4e 61 6d 65 20 3d 20 70 4f 70 2d 3e 70 34 2e  zName = pOp->p4.
17a70 7a 3b 0a 0a 20 20 2f 2a 20 41 73 73 65 72 74 20  z;..  /* Assert 
17a80 74 68 61 74 20 74 68 65 20 70 31 20 70 61 72 61  that the p1 para
17a90 6d 65 74 65 72 20 69 73 20 76 61 6c 69 64 2e 20  meter is valid. 
17aa0 41 6c 73 6f 20 74 68 61 74 20 69 66 20 74 68 65  Also that if the
17ab0 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 0a 20 20  re is no open.  
17ac0 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20  ** transaction, 
17ad0 74 68 65 6e 20 74 68 65 72 65 20 63 61 6e 6e 6f  then there canno
17ae0 74 20 62 65 20 61 6e 79 20 73 61 76 65 70 6f 69  t be any savepoi
17af0 6e 74 73 2e 20 0a 20 20 2a 2f 0a 20 20 61 73 73  nts. .  */.  ass
17b00 65 72 74 28 20 64 62 2d 3e 70 53 61 76 65 70 6f  ert( db->pSavepo
17b10 69 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61 75  int==0 || db->au
17b20 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20  toCommit==0 );. 
17b30 20 61 73 73 65 72 74 28 20 70 31 3d 3d 53 41 56   assert( p1==SAV
17b40 45 50 4f 49 4e 54 5f 42 45 47 49 4e 7c 7c 70 31  EPOINT_BEGIN||p1
17b50 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45  ==SAVEPOINT_RELE
17b60 41 53 45 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49  ASE||p1==SAVEPOI
17b70 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 3b 0a 20  NT_ROLLBACK );. 
17b80 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61   assert( db->pSa
17b90 76 65 70 6f 69 6e 74 20 7c 7c 20 64 62 2d 3e 69  vepoint || db->i
17ba0 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65  sTransactionSave
17bb0 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a 20 20 61 73  point==0 );.  as
17bc0 73 65 72 74 28 20 63 68 65 63 6b 53 61 76 65 70  sert( checkSavep
17bd0 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29 20 29 3b  ointCount(db) );
17be0 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49  .  assert( p->bI
17bf0 73 52 65 61 64 65 72 20 29 3b 0a 0a 20 20 69 66  sReader );..  if
17c00 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ( p1==SAVEPOINT_
17c10 42 45 47 49 4e 20 29 7b 0a 20 20 20 20 69 66 28  BEGIN ){.    if(
17c20 20 64 62 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e   db->nVdbeWrite>
17c30 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41 20  0 ){.      /* A 
17c40 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20 63 61  new savepoint ca
17c50 6e 6e 6f 74 20 62 65 20 63 72 65 61 74 65 64 20  nnot be created 
17c60 69 66 20 74 68 65 72 65 20 61 72 65 20 61 63 74  if there are act
17c70 69 76 65 20 77 72 69 74 65 20 0a 20 20 20 20 20  ive write .     
17c80 20 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 20 28   ** statements (
17c90 69 2e 65 2e 20 6f 70 65 6e 20 72 65 61 64 2f 77  i.e. open read/w
17ca0 72 69 74 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c  rite incremental
17cb0 20 62 6c 6f 62 20 68 61 6e 64 6c 65 73 29 2e 0a   blob handles)..
17cc0 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73        */.      s
17cd0 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28  qlite3VdbeError(
17ce0 70 2c 20 22 63 61 6e 6e 6f 74 20 6f 70 65 6e 20  p, "cannot open 
17cf0 73 61 76 65 70 6f 69 6e 74 20 2d 20 53 51 4c 20  savepoint - SQL 
17d00 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72  statements in pr
17d10 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 20 20  ogress");.      
17d20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
17d30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
17d40 20 20 20 6e 4e 61 6d 65 20 3d 20 73 71 6c 69 74     nName = sqlit
17d50 65 33 53 74 72 6c 65 6e 33 30 28 7a 4e 61 6d 65  e3Strlen30(zName
17d60 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  );..#ifndef SQLI
17d70 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
17d80 41 42 4c 45 0a 20 20 20 20 20 20 2f 2a 20 54 68  ABLE.      /* Th
17d90 69 73 20 63 61 6c 6c 20 69 73 20 4f 6b 20 65 76  is call is Ok ev
17da0 65 6e 20 69 66 20 74 68 69 73 20 73 61 76 65 70  en if this savep
17db0 6f 69 6e 74 20 69 73 20 61 63 74 75 61 6c 6c 79  oint is actually
17dc0 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20   a transaction. 
17dd0 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e       ** savepoin
17de0 74 20 28 61 6e 64 20 74 68 65 72 65 66 6f 72 65  t (and therefore
17df0 20 73 68 6f 75 6c 64 20 6e 6f 74 20 70 72 6f 6d   should not prom
17e00 70 74 20 78 53 61 76 65 70 6f 69 6e 74 28 29 29  pt xSavepoint())
17e10 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 20 20 20 20   callbacks..    
17e20 20 20 2a 2a 20 49 66 20 74 68 69 73 20 69 73 20    ** If this is 
17e30 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61  a transaction sa
17e40 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70  vepoint being op
17e50 65 6e 65 64 2c 20 69 74 20 69 73 20 67 75 61 72  ened, it is guar
17e60 61 6e 74 65 65 64 0a 20 20 20 20 20 20 2a 2a 20  anteed.      ** 
17e70 74 68 61 74 20 74 68 65 20 64 62 2d 3e 61 56 54  that the db->aVT
17e80 72 61 6e 73 5b 5d 20 61 72 72 61 79 20 69 73 20  rans[] array is 
17e90 65 6d 70 74 79 2e 20 20 2a 2f 0a 20 20 20 20 20  empty.  */.     
17ea0 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61 75 74   assert( db->aut
17eb0 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62  oCommit==0 || db
17ec0 2d 3e 6e 56 54 72 61 6e 73 3d 3d 30 20 29 3b 0a  ->nVTrans==0 );.
17ed0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
17ee0 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28  e3VtabSavepoint(
17ef0 64 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f 42 45  db, SAVEPOINT_BE
17f00 47 49 4e 2c 0a 20 20 20 20 20 20 20 20 20 20 20  GIN,.           
17f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f20 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d       db->nStatem
17f30 65 6e 74 2b 64 62 2d 3e 6e 53 61 76 65 70 6f 69  ent+db->nSavepoi
17f40 6e 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  nt);.      if( r
17f50 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67  c!=SQLITE_OK ) g
17f60 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
17f70 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66 0a 0a  _error;.#endif..
17f80 20 20 20 20 20 20 2f 2a 20 43 72 65 61 74 65 20        /* Create 
17f90 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20  a new savepoint 
17fa0 73 74 72 75 63 74 75 72 65 2e 20 2a 2f 0a 20 20  structure. */.  
17fb0 20 20 20 20 70 4e 65 77 20 3d 20 73 71 6c 69 74      pNew = sqlit
17fc0 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28  e3DbMallocRawNN(
17fd0 64 62 2c 20 73 69 7a 65 6f 66 28 53 61 76 65 70  db, sizeof(Savep
17fe0 6f 69 6e 74 29 2b 6e 4e 61 6d 65 2b 31 29 3b 0a  oint)+nName+1);.
17ff0 20 20 20 20 20 20 69 66 28 20 70 4e 65 77 20 29        if( pNew )
18000 7b 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e  {.        pNew->
18010 7a 4e 61 6d 65 20 3d 20 28 63 68 61 72 20 2a 29  zName = (char *)
18020 26 70 4e 65 77 5b 31 5d 3b 0a 20 20 20 20 20 20  &pNew[1];.      
18030 20 20 6d 65 6d 63 70 79 28 70 4e 65 77 2d 3e 7a    memcpy(pNew->z
18040 4e 61 6d 65 2c 20 7a 4e 61 6d 65 2c 20 6e 4e 61  Name, zName, nNa
18050 6d 65 2b 31 29 3b 0a 20 20 20 20 0a 20 20 20 20  me+1);.    .    
18060 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20      /* If there 
18070 69 73 20 6e 6f 20 6f 70 65 6e 20 74 72 61 6e 73  is no open trans
18080 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20 6d 61 72  action, then mar
18090 6b 20 74 68 69 73 20 61 73 20 61 20 73 70 65 63  k this as a spec
180a0 69 61 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20 22  ial.        ** "
180b0 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65  transaction save
180c0 70 6f 69 6e 74 22 2e 20 2a 2f 0a 20 20 20 20 20  point". */.     
180d0 20 20 20 69 66 28 20 64 62 2d 3e 61 75 74 6f 43     if( db->autoC
180e0 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 20 20 20  ommit ){.       
180f0 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
18100 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20  t = 0;.         
18110 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69   db->isTransacti
18120 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20 31 3b  onSavepoint = 1;
18130 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
18140 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53            db->nS
18150 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20  avepoint++;.    
18160 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 2f      }..        /
18170 2a 20 4c 69 6e 6b 20 74 68 65 20 6e 65 77 20 73  * Link the new s
18180 61 76 65 70 6f 69 6e 74 20 69 6e 74 6f 20 74 68  avepoint into th
18190 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  e database handl
181a0 65 27 73 20 6c 69 73 74 2e 20 2a 2f 0a 20 20 20  e's list. */.   
181b0 20 20 20 20 20 70 4e 65 77 2d 3e 70 4e 65 78 74       pNew->pNext
181c0 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e   = db->pSavepoin
181d0 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70  t;.        db->p
181e0 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 4e 65 77  Savepoint = pNew
181f0 3b 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e  ;.        pNew->
18200 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20 3d 20  nDeferredCons = 
18210 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  db->nDeferredCon
18220 73 3b 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d  s;.        pNew-
18230 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
18240 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65  s = db->nDeferre
18250 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 20 20  dImmCons;.      
18260 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  }.    }.  }else{
18270 0a 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74 20  .    iSavepoint 
18280 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a 20 46 69 6e  = 0;..    /* Fin
18290 64 20 74 68 65 20 6e 61 6d 65 64 20 73 61 76 65  d the named save
182a0 70 6f 69 6e 74 2e 20 49 66 20 74 68 65 72 65 20  point. If there 
182b0 69 73 20 6e 6f 20 73 75 63 68 20 73 61 76 65 70  is no such savep
182c0 6f 69 6e 74 2c 20 74 68 65 6e 20 61 6e 0a 20 20  oint, then an.  
182d0 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20 69 73    ** an error is
182e0 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68 65   returned to the
182f0 20 75 73 65 72 2e 20 20 2a 2f 0a 20 20 20 20 66   user.  */.    f
18300 6f 72 28 0a 20 20 20 20 20 20 70 53 61 76 65 70  or(.      pSavep
18310 6f 69 6e 74 20 3d 20 64 62 2d 3e 70 53 61 76 65  oint = db->pSave
18320 70 6f 69 6e 74 3b 20 0a 20 20 20 20 20 20 70 53  point; .      pS
18330 61 76 65 70 6f 69 6e 74 20 26 26 20 73 71 6c 69  avepoint && sqli
18340 74 65 33 53 74 72 49 43 6d 70 28 70 53 61 76 65  te3StrICmp(pSave
18350 70 6f 69 6e 74 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e  point->zName, zN
18360 61 6d 65 29 3b 0a 20 20 20 20 20 20 70 53 61 76  ame);.      pSav
18370 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70 6f  epoint = pSavepo
18380 69 6e 74 2d 3e 70 4e 65 78 74 0a 20 20 20 20 29  int->pNext.    )
18390 7b 0a 20 20 20 20 20 20 69 53 61 76 65 70 6f 69  {.      iSavepoi
183a0 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  nt++;.    }.    
183b0 69 66 28 20 21 70 53 61 76 65 70 6f 69 6e 74 20  if( !pSavepoint 
183c0 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
183d0 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 6e 6f  VdbeError(p, "no
183e0 20 73 75 63 68 20 73 61 76 65 70 6f 69 6e 74 3a   such savepoint:
183f0 20 25 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20   %s", zName);.  
18400 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
18410 45 52 52 4f 52 3b 0a 20 20 20 20 7d 65 6c 73 65  ERROR;.    }else
18420 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 57 72   if( db->nVdbeWr
18430 69 74 65 3e 30 20 26 26 20 70 31 3d 3d 53 41 56  ite>0 && p1==SAV
18440 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29  EPOINT_RELEASE )
18450 7b 0a 20 20 20 20 20 20 2f 2a 20 49 74 20 69 73  {.      /* It is
18460 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20 74 6f   not possible to
18470 20 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74   release (commit
18480 29 20 61 20 73 61 76 65 70 6f 69 6e 74 20 69 66  ) a savepoint if
18490 20 74 68 65 72 65 20 61 72 65 20 0a 20 20 20 20   there are .    
184a0 20 20 2a 2a 20 61 63 74 69 76 65 20 77 72 69 74    ** active writ
184b0 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 20 20  e statements..  
184c0 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c      */.      sql
184d0 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
184e0 20 22 63 61 6e 6e 6f 74 20 72 65 6c 65 61 73 65   "cannot release
184f0 20 73 61 76 65 70 6f 69 6e 74 20 2d 20 22 0a 20   savepoint - ". 
18500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18510 20 20 20 20 20 20 20 20 20 22 53 51 4c 20 73 74           "SQL st
18520 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67  atements in prog
18530 72 65 73 73 22 29 3b 0a 20 20 20 20 20 20 72 63  ress");.      rc
18540 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
18550 20 20 20 20 7d 65 6c 73 65 7b 0a 0a 20 20 20 20      }else{..    
18560 20 20 2f 2a 20 44 65 74 65 72 6d 69 6e 65 20 77    /* Determine w
18570 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68  hether or not th
18580 69 73 20 69 73 20 61 20 74 72 61 6e 73 61 63 74  is is a transact
18590 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 2e 20 49  ion savepoint. I
185a0 66 20 73 6f 2c 0a 20 20 20 20 20 20 2a 2a 20 61  f so,.      ** a
185b0 6e 64 20 74 68 69 73 20 69 73 20 61 20 52 45 4c  nd this is a REL
185c0 45 41 53 45 20 63 6f 6d 6d 61 6e 64 2c 20 74 68  EASE command, th
185d0 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  en the current t
185e0 72 61 6e 73 61 63 74 69 6f 6e 20 0a 20 20 20 20  ransaction .    
185f0 20 20 2a 2a 20 69 73 20 63 6f 6d 6d 69 74 74 65    ** is committe
18600 64 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  d. .      */.   
18610 20 20 20 69 6e 74 20 69 73 54 72 61 6e 73 61 63     int isTransac
18620 74 69 6f 6e 20 3d 20 70 53 61 76 65 70 6f 69 6e  tion = pSavepoin
18630 74 2d 3e 70 4e 65 78 74 3d 3d 30 20 26 26 20 64  t->pNext==0 && d
18640 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  b->isTransaction
18650 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20  Savepoint;.     
18660 20 61 73 73 65 72 74 28 20 64 62 2d 3e 62 43 6f   assert( db->bCo
18670 6e 63 75 72 72 65 6e 74 3d 3d 30 20 7c 7c 20 64  ncurrent==0 || d
18680 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  b->isTransaction
18690 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a  Savepoint==0 );.
186a0 20 20 20 20 20 20 69 66 28 20 69 73 54 72 61 6e        if( isTran
186b0 73 61 63 74 69 6f 6e 20 26 26 20 70 31 3d 3d 53  saction && p1==S
186c0 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45  AVEPOINT_RELEASE
186d0 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20   ){.        if( 
186e0 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62  (rc = sqlite3Vdb
186f0 65 43 68 65 63 6b 46 6b 28 70 2c 20 31 29 29 21  eCheckFk(p, 1))!
18700 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
18710 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62          goto vdb
18720 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20  e_return;.      
18730 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e    }.        db->
18740 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a  autoCommit = 1;.
18750 20 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69          if( sqli
18760 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3d 3d  te3VdbeHalt(p)==
18770 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20  SQLITE_BUSY ){. 
18780 20 20 20 20 20 20 20 20 20 70 2d 3e 70 63 20 3d           p->pc =
18790 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70   (int)(pOp - aOp
187a0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d  );.          db-
187b0 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b  >autoCommit = 0;
187c0 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e 72 63  .          p->rc
187d0 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42   = rc = SQLITE_B
187e0 55 53 59 3b 0a 20 20 20 20 20 20 20 20 20 20 67  USY;.          g
187f0 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
18800 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
18810 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63     db->isTransac
18820 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20  tionSavepoint = 
18830 30 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  0;.        rc = 
18840 70 2d 3e 72 63 3b 0a 20 20 20 20 20 20 7d 65 6c  p->rc;.      }el
18850 73 65 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20  se{.        int 
18860 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65 3b 0a  isSchemaChange;.
18870 20 20 20 20 20 20 20 20 69 53 61 76 65 70 6f 69          iSavepoi
18880 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f  nt = db->nSavepo
18890 69 6e 74 20 2d 20 69 53 61 76 65 70 6f 69 6e 74  int - iSavepoint
188a0 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 69 66   - 1;.        if
188b0 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ( p1==SAVEPOINT_
188c0 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20 20 20 20  ROLLBACK ){.    
188d0 20 20 20 20 20 20 69 73 53 63 68 65 6d 61 43 68        isSchemaCh
188e0 61 6e 67 65 20 3d 20 28 64 62 2d 3e 66 6c 61 67  ange = (db->flag
188f0 73 20 26 20 53 51 4c 49 54 45 5f 49 6e 74 65 72  s & SQLITE_Inter
18900 6e 43 68 61 6e 67 65 73 29 21 3d 30 3b 0a 20 20  nChanges)!=0;.  
18910 20 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d 30          for(ii=0
18920 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69  ; ii<db->nDb; ii
18930 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ++){.           
18940 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
18950 65 65 54 72 69 70 41 6c 6c 43 75 72 73 6f 72 73  eeTripAllCursors
18960 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74  (db->aDb[ii].pBt
18970 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
18980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18990 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f           SQLITE_
189a0 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 2c 0a  ABORT_ROLLBACK,.
189b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189d0 20 20 20 20 20 20 20 69 73 53 63 68 65 6d 61 43         isSchemaC
189e0 68 61 6e 67 65 3d 3d 30 29 3b 0a 20 20 20 20 20  hange==0);.     
189f0 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53         if( rc!=S
18a00 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20  QLITE_OK ) goto 
18a10 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
18a20 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  or;.          }.
18a30 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
18a40 20 20 20 20 20 20 20 20 20 69 73 53 63 68 65 6d           isSchem
18a50 61 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 20  aChange = 0;.   
18a60 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 66       }.        f
18a70 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e  or(ii=0; ii<db->
18a80 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20  nDb; ii++){.    
18a90 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
18aa0 65 33 42 74 72 65 65 53 61 76 65 70 6f 69 6e 74  e3BtreeSavepoint
18ab0 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74  (db->aDb[ii].pBt
18ac0 2c 20 70 31 2c 20 69 53 61 76 65 70 6f 69 6e 74  , p1, iSavepoint
18ad0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  );.          if(
18ae0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
18af0 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 6f  {.            go
18b00 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
18b10 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20  error;.         
18b20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
18b30 20 20 20 20 20 69 66 28 20 69 73 53 63 68 65 6d       if( isSchem
18b40 61 43 68 61 6e 67 65 20 29 7b 0a 20 20 20 20 20  aChange ){.     
18b50 20 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69       sqlite3Expi
18b60 72 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d  rePreparedStatem
18b70 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 20 20  ents(db);.      
18b80 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74      sqlite3Reset
18b90 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e  AllSchemasOfConn
18ba0 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20 20 20  ection(db);.    
18bb0 20 20 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20        db->flags 
18bc0 3d 20 28 64 62 2d 3e 66 6c 61 67 73 20 7c 20 53  = (db->flags | S
18bd0 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e  QLITE_InternChan
18be0 67 65 73 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  ges);.        }.
18bf0 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20        }.  .     
18c00 20 2f 2a 20 52 65 67 61 72 64 6c 65 73 73 20 6f   /* Regardless o
18c10 66 20 77 68 65 74 68 65 72 20 74 68 69 73 20 69  f whether this i
18c20 73 20 61 20 52 45 4c 45 41 53 45 20 6f 72 20 52  s a RELEASE or R
18c30 4f 4c 4c 42 41 43 4b 2c 20 64 65 73 74 72 6f 79  OLLBACK, destroy
18c40 20 61 6c 6c 20 0a 20 20 20 20 20 20 2a 2a 20 73   all .      ** s
18c50 61 76 65 70 6f 69 6e 74 73 20 6e 65 73 74 65 64  avepoints nested
18c60 20 69 6e 73 69 64 65 20 6f 66 20 74 68 65 20 73   inside of the s
18c70 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f  avepoint being o
18c80 70 65 72 61 74 65 64 20 6f 6e 2e 20 2a 2f 0a 20  perated on. */. 
18c90 20 20 20 20 20 77 68 69 6c 65 28 20 64 62 2d 3e       while( db->
18ca0 70 53 61 76 65 70 6f 69 6e 74 21 3d 70 53 61 76  pSavepoint!=pSav
18cb0 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20 20  epoint ){.      
18cc0 20 20 70 54 6d 70 20 3d 20 64 62 2d 3e 70 53 61    pTmp = db->pSa
18cd0 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20  vepoint;.       
18ce0 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20   db->pSavepoint 
18cf0 3d 20 70 54 6d 70 2d 3e 70 4e 65 78 74 3b 0a 20  = pTmp->pNext;. 
18d00 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62         sqlite3Db
18d10 46 72 65 65 28 64 62 2c 20 70 54 6d 70 29 3b 0a  Free(db, pTmp);.
18d20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76          db->nSav
18d30 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20  epoint--;.      
18d40 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 69  }..      /* If i
18d50 74 20 69 73 20 61 20 52 45 4c 45 41 53 45 2c 20  t is a RELEASE, 
18d60 74 68 65 6e 20 64 65 73 74 72 6f 79 20 74 68 65  then destroy the
18d70 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67   savepoint being
18d80 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 0a 20 20   operated on .  
18d90 20 20 20 20 2a 2a 20 74 6f 6f 2e 20 49 66 20 69      ** too. If i
18da0 74 20 69 73 20 61 20 52 4f 4c 4c 42 41 43 4b 20  t is a ROLLBACK 
18db0 54 4f 2c 20 74 68 65 6e 20 73 65 74 20 74 68 65  TO, then set the
18dc0 20 6e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72   number of defer
18dd0 72 65 64 20 0a 20 20 20 20 20 20 2a 2a 20 63 6f  red .      ** co
18de0 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69  nstraint violati
18df0 6f 6e 73 20 70 72 65 73 65 6e 74 20 69 6e 20 74  ons present in t
18e00 68 65 20 64 61 74 61 62 61 73 65 20 74 6f 20 74  he database to t
18e10 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 0a  he value stored.
18e20 20 20 20 20 20 20 2a 2a 20 77 68 65 6e 20 74 68        ** when th
18e30 65 20 73 61 76 65 70 6f 69 6e 74 20 77 61 73 20  e savepoint was 
18e40 63 72 65 61 74 65 64 2e 20 20 2a 2f 0a 20 20 20  created.  */.   
18e50 20 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50     if( p1==SAVEP
18e60 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a  OINT_RELEASE ){.
18e70 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
18e80 70 53 61 76 65 70 6f 69 6e 74 3d 3d 64 62 2d 3e  pSavepoint==db->
18e90 70 53 61 76 65 70 6f 69 6e 74 20 29 3b 0a 20 20  pSavepoint );.  
18ea0 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70        db->pSavep
18eb0 6f 69 6e 74 20 3d 20 70 53 61 76 65 70 6f 69 6e  oint = pSavepoin
18ec0 74 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20  t->pNext;.      
18ed0 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
18ee0 64 62 2c 20 70 53 61 76 65 70 6f 69 6e 74 29 3b  db, pSavepoint);
18ef0 0a 20 20 20 20 20 20 20 20 69 66 28 20 21 69 73  .        if( !is
18f00 54 72 61 6e 73 61 63 74 69 6f 6e 20 29 7b 0a 20  Transaction ){. 
18f10 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61           db->nSa
18f20 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20  vepoint--;.     
18f30 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65     }.      }else
18f40 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 44  {.        db->nD
18f50 65 66 65 72 72 65 64 43 6f 6e 73 20 3d 20 70 53  eferredCons = pS
18f60 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66 65 72  avepoint->nDefer
18f70 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 20  redCons;.       
18f80 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
18f90 6d 43 6f 6e 73 20 3d 20 70 53 61 76 65 70 6f 69  mCons = pSavepoi
18fa0 6e 74 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  nt->nDeferredImm
18fb0 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d 0a 0a 20  Cons;.      }.. 
18fc0 20 20 20 20 20 69 66 28 20 21 69 73 54 72 61 6e       if( !isTran
18fd0 73 61 63 74 69 6f 6e 20 7c 7c 20 70 31 3d 3d 53  saction || p1==S
18fe0 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43  AVEPOINT_ROLLBAC
18ff0 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  K ){.        rc 
19000 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76  = sqlite3VtabSav
19010 65 70 6f 69 6e 74 28 64 62 2c 20 70 31 2c 20 69  epoint(db, p1, i
19020 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20  Savepoint);.    
19030 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
19040 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f  TE_OK ) goto abo
19050 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
19060 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
19070 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f   }.  if( rc ) go
19080 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
19090 65 72 72 6f 72 3b 0a 0a 20 20 62 72 65 61 6b 3b  error;..  break;
190a0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
190b0 75 74 6f 43 6f 6d 6d 69 74 20 50 31 20 50 32 20  utoCommit P1 P2 
190c0 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74  P3 * *.**.** Set
190d0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61 75   the database au
190e0 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 20 74  to-commit flag t
190f0 6f 20 50 31 20 28 31 20 6f 72 20 30 29 2e 20 49  o P1 (1 or 0). I
19100 66 20 50 32 20 69 73 20 74 72 75 65 2c 20 72 6f  f P2 is true, ro
19110 6c 6c 0a 2a 2a 20 62 61 63 6b 20 61 6e 79 20 63  ll.** back any c
19120 75 72 72 65 6e 74 6c 79 20 61 63 74 69 76 65 20  urrently active 
19130 62 74 72 65 65 20 74 72 61 6e 73 61 63 74 69 6f  btree transactio
19140 6e 73 2e 20 49 66 20 74 68 65 72 65 20 61 72 65  ns. If there are
19150 20 61 6e 79 20 61 63 74 69 76 65 0a 2a 2a 20 56   any active.** V
19160 4d 73 20 28 61 70 61 72 74 20 66 72 6f 6d 20 74  Ms (apart from t
19170 68 69 73 20 6f 6e 65 29 2c 20 74 68 65 6e 20 61  his one), then a
19180 20 52 4f 4c 4c 42 41 43 4b 20 66 61 69 6c 73 2e   ROLLBACK fails.
19190 20 20 41 20 43 4f 4d 4d 49 54 20 66 61 69 6c 73    A COMMIT fails
191a0 20 69 66 0a 2a 2a 20 74 68 65 72 65 20 61 72 65   if.** there are
191b0 20 61 63 74 69 76 65 20 77 72 69 74 69 6e 67 20   active writing 
191c0 56 4d 73 20 6f 72 20 61 63 74 69 76 65 20 56 4d  VMs or active VM
191d0 73 20 74 68 61 74 20 75 73 65 20 73 68 61 72 65  s that use share
191e0 64 20 63 61 63 68 65 2e 0a 2a 2a 0a 2a 2a 20 49  d cache..**.** I
191f0 66 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P3 is non-zero
19200 2c 20 74 68 65 6e 20 74 68 69 73 20 69 6e 73 74  , then this inst
19210 72 75 63 74 69 6f 6e 20 69 73 20 62 65 69 6e 67  ruction is being
19220 20 65 78 65 63 75 74 65 64 20 61 73 20 70 61 72   executed as par
19230 74 20 6f 66 0a 2a 2a 20 61 20 22 42 45 47 49 4e  t of.** a "BEGIN
19240 20 43 4f 4e 43 55 52 52 45 4e 54 22 20 63 6f 6d   CONCURRENT" com
19250 6d 61 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  mand..**.** This
19260 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 61 75   instruction cau
19270 73 65 73 20 74 68 65 20 56 4d 20 74 6f 20 68 61  ses the VM to ha
19280 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41  lt..*/.case OP_A
19290 75 74 6f 43 6f 6d 6d 69 74 3a 20 7b 0a 20 20 69  utoCommit: {.  i
192a0 6e 74 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  nt desiredAutoCo
192b0 6d 6d 69 74 3b 0a 20 20 69 6e 74 20 69 52 6f 6c  mmit;.  int iRol
192c0 6c 62 61 63 6b 3b 0a 20 20 69 6e 74 20 62 43 6f  lback;.  int bCo
192d0 6e 63 75 72 72 65 6e 74 3b 0a 20 20 69 6e 74 20  ncurrent;.  int 
192e0 68 72 63 3b 0a 0a 20 20 64 65 73 69 72 65 64 41  hrc;..  desiredA
192f0 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 70 4f 70 2d  utoCommit = pOp-
19300 3e 70 31 3b 0a 20 20 69 52 6f 6c 6c 62 61 63 6b  >p1;.  iRollback
19310 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 62 43   = pOp->p2;.  bC
19320 6f 6e 63 75 72 72 65 6e 74 20 3d 20 70 4f 70 2d  oncurrent = pOp-
19330 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 64  >p3;.  assert( d
19340 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
19350 3d 3d 31 20 7c 7c 20 64 65 73 69 72 65 64 41 75  ==1 || desiredAu
19360 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20  toCommit==0 );. 
19370 20 61 73 73 65 72 74 28 20 64 65 73 69 72 65 64   assert( desired
19380 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c  AutoCommit==1 ||
19390 20 69 52 6f 6c 6c 62 61 63 6b 3d 3d 30 20 29 3b   iRollback==0 );
193a0 0a 20 20 61 73 73 65 72 74 28 20 64 65 73 69 72  .  assert( desir
193b0 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20  edAutoCommit==0 
193c0 7c 7c 20 62 43 6f 6e 63 75 72 72 65 6e 74 3d 3d  || bConcurrent==
193d0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64  0 );.  assert( d
193e0 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30  b->autoCommit==0
193f0 20 7c 7c 20 64 62 2d 3e 62 43 6f 6e 63 75 72 72   || db->bConcurr
19400 65 6e 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  ent==0 );.  asse
19410 72 74 28 20 64 62 2d 3e 6e 56 64 62 65 41 63 74  rt( db->nVdbeAct
19420 69 76 65 3e 30 20 29 3b 20 20 2f 2a 20 41 74 20  ive>0 );  /* At 
19430 6c 65 61 73 74 20 74 68 69 73 20 6f 6e 65 20 56  least this one V
19440 4d 20 69 73 20 61 63 74 69 76 65 20 2a 2f 0a 20  M is active */. 
19450 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52   assert( p->bIsR
19460 65 61 64 65 72 20 29 3b 0a 0a 20 20 69 66 28 20  eader );..  if( 
19470 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
19480 74 21 3d 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  t!=db->autoCommi
19490 74 20 29 7b 0a 20 20 20 20 69 66 28 20 69 52 6f  t ){.    if( iRo
194a0 6c 6c 62 61 63 6b 20 29 7b 0a 20 20 20 20 20 20  llback ){.      
194b0 61 73 73 65 72 74 28 20 64 65 73 69 72 65 64 41  assert( desiredA
194c0 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 29 3b 0a  utoCommit==1 );.
194d0 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 6f 6c        sqlite3Rol
194e0 6c 62 61 63 6b 41 6c 6c 28 64 62 2c 20 53 51 4c  lbackAll(db, SQL
194f0 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41  ITE_ABORT_ROLLBA
19500 43 4b 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61  CK);.      db->a
19510 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20  utoCommit = 1;. 
19520 20 20 20 20 20 64 62 2d 3e 62 43 6f 6e 63 75 72       db->bConcur
19530 72 65 6e 74 20 3d 20 30 3b 0a 20 20 20 20 7d 65  rent = 0;.    }e
19540 6c 73 65 20 69 66 28 20 64 65 73 69 72 65 64 41  lse if( desiredA
19550 75 74 6f 43 6f 6d 6d 69 74 0a 20 20 20 20 20 20  utoCommit.      
19560 20 20 20 20 20 20 26 26 20 28 64 62 2d 3e 6e 56        && (db->nV
19570 64 62 65 57 72 69 74 65 3e 30 20 7c 7c 20 28 64  dbeWrite>0 || (d
19580 62 2d 3e 62 43 6f 6e 63 75 72 72 65 6e 74 20 26  b->bConcurrent &
19590 26 20 64 62 2d 3e 6e 56 64 62 65 41 63 74 69 76  & db->nVdbeActiv
195a0 65 3e 31 29 29 20 29 7b 0a 20 20 20 20 20 20 2f  e>1)) ){.      /
195b0 2a 20 41 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  * A transaction 
195c0 6d 61 79 20 6f 6e 6c 79 20 62 65 20 63 6f 6d 6d  may only be comm
195d0 69 74 74 65 64 20 69 66 20 74 68 65 72 65 20 61  itted if there a
195e0 72 65 20 6e 6f 20 6f 74 68 65 72 20 61 63 74 69  re no other acti
195f0 76 65 0a 20 20 20 20 20 20 2a 2a 20 77 72 69 74  ve.      ** writ
19600 65 72 20 56 4d 73 2e 20 49 66 20 74 68 65 20 74  er VMs. If the t
19610 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 43 4f  ransaction is CO
19620 4e 43 55 52 52 45 4e 54 2c 20 74 68 65 6e 20 69  NCURRENT, then i
19630 74 20 6d 61 79 20 6f 6e 6c 79 20 62 65 0a 20 20  t may only be.  
19640 20 20 20 20 2a 2a 20 63 6f 6d 6d 69 74 74 65 64      ** committed
19650 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   if there are no
19660 20 61 63 74 69 76 65 20 56 4d 73 20 61 74 20 61   active VMs at a
19670 6c 6c 20 28 72 65 61 64 65 72 73 20 6f 72 20 77  ll (readers or w
19680 72 69 74 65 72 73 29 2e 0a 20 20 20 20 20 20 2a  riters)..      *
19690 2a 0a 20 20 20 20 20 20 2a 2a 20 49 66 20 74 68  *.      ** If th
196a0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  is instruction i
196b0 73 20 61 20 43 4f 4d 4d 49 54 20 61 6e 64 20 74  s a COMMIT and t
196c0 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d  he transaction m
196d0 61 79 20 6e 6f 74 20 62 65 0a 20 20 20 20 20 20  ay not be.      
196e0 2a 2a 20 63 6f 6d 6d 69 74 74 65 64 20 64 75 65  ** committed due
196f0 20 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20 63   to one of the c
19700 6f 6e 64 69 74 69 6f 6e 73 20 61 62 6f 76 65 2c  onditions above,
19710 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72   return an error
19720 0a 20 20 20 20 20 20 2a 2a 20 69 6e 64 69 63 61  .      ** indica
19730 74 69 6e 67 20 74 68 61 74 20 6f 74 68 65 72 20  ting that other 
19740 56 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74  VMs must complet
19750 65 20 62 65 66 6f 72 65 20 74 68 65 20 43 4f 4d  e before the COM
19760 4d 49 54 20 63 61 6e 20 0a 20 20 20 20 20 20 2a  MIT can .      *
19770 2a 20 62 65 20 70 72 6f 63 65 73 73 65 64 2e 20  * be processed. 
19780 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65   */.      sqlite
19790 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 63  3VdbeError(p, "c
197a0 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 74 72 61  annot commit tra
197b0 6e 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20  nsaction - ".   
197c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197d0 20 20 20 20 20 20 20 22 53 51 4c 20 73 74 61 74         "SQL stat
197e0 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65  ements in progre
197f0 73 73 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  ss");.      rc =
19800 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
19810 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
19820 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
19830 20 7d 65 6c 73 65 20 69 66 28 20 28 72 63 20 3d   }else if( (rc =
19840 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63   sqlite3VdbeChec
19850 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49  kFk(p, 1))!=SQLI
19860 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67  TE_OK ){.      g
19870 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
19880 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
19890 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74    db->autoCommit
198a0 20 3d 20 28 75 38 29 64 65 73 69 72 65 64 41 75   = (u8)desiredAu
198b0 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 20 20 7d 0a  toCommit;.    }.
198c0 20 20 20 20 68 72 63 20 3d 20 73 71 6c 69 74 65      hrc = sqlite
198d0 33 56 64 62 65 48 61 6c 74 28 70 29 3b 0a 20 20  3VdbeHalt(p);.  
198e0 20 20 69 66 28 20 28 68 72 63 20 26 20 30 78 46    if( (hrc & 0xF
198f0 46 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20  F)==SQLITE_BUSY 
19900 29 7b 0a 20 20 20 20 20 20 70 2d 3e 70 63 20 3d  ){.      p->pc =
19910 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70   (int)(pOp - aOp
19920 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74  );.      db->aut
19930 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29 28 31  oCommit = (u8)(1
19940 2d 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d  -desiredAutoComm
19950 69 74 29 3b 0a 20 20 20 20 20 20 70 2d 3e 72 63  it);.      p->rc
19960 20 3d 20 68 72 63 3b 0a 20 20 20 20 20 20 72 63   = hrc;.      rc
19970 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
19980 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f        goto vdbe_
19990 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20  return;.    }.  
199a0 20 20 64 62 2d 3e 62 43 6f 6e 63 75 72 72 65 6e    db->bConcurren
199b0 74 20 3d 20 28 75 38 29 62 43 6f 6e 63 75 72 72  t = (u8)bConcurr
199c0 65 6e 74 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ent;.    assert(
199d0 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3d   db->nStatement=
199e0 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  =0 );.    sqlite
199f0 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73  3CloseSavepoints
19a00 28 64 62 29 3b 0a 20 20 20 20 69 66 28 20 70 2d  (db);.    if( p-
19a10 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29  >rc==SQLITE_OK )
19a20 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
19a30 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 20 20 7d 65  ITE_DONE;.    }e
19a40 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  lse{.      rc = 
19a50 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20  SQLITE_ERROR;.  
19a60 20 20 7d 0a 20 20 20 20 67 6f 74 6f 20 76 64 62    }.    goto vdb
19a70 65 5f 72 65 74 75 72 6e 3b 0a 20 20 7d 65 6c 73  e_return;.  }els
19a80 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  e{.    sqlite3Vd
19a90 62 65 45 72 72 6f 72 28 70 2c 0a 20 20 20 20 20  beError(p,.     
19aa0 20 20 20 28 21 64 65 73 69 72 65 64 41 75 74 6f     (!desiredAuto
19ab0 43 6f 6d 6d 69 74 29 3f 22 63 61 6e 6e 6f 74 20  Commit)?"cannot 
19ac0 73 74 61 72 74 20 61 20 74 72 61 6e 73 61 63 74  start a transact
19ad0 69 6f 6e 20 77 69 74 68 69 6e 20 61 20 74 72 61  ion within a tra
19ae0 6e 73 61 63 74 69 6f 6e 22 3a 28 0a 20 20 20 20  nsaction":(.    
19af0 20 20 20 20 28 69 52 6f 6c 6c 62 61 63 6b 29 3f      (iRollback)?
19b00 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b  "cannot rollback
19b10 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f   - no transactio
19b20 6e 20 69 73 20 61 63 74 69 76 65 22 3a 0a 20 20  n is active":.  
19b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b40 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20   "cannot commit 
19b50 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e  - no transaction
19b60 20 69 73 20 61 63 74 69 76 65 22 29 29 3b 0a 20   is active"));. 
19b70 20 20 20 20 20 20 20 20 0a 20 20 20 20 72 63 20          .    rc 
19b80 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
19b90 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
19ba0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d  ue_to_error;.  }
19bb0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
19bc0 4f 70 63 6f 64 65 3a 20 54 72 61 6e 73 61 63 74  Opcode: Transact
19bd0 69 6f 6e 20 50 31 20 50 32 20 50 33 20 50 34 20  ion P1 P2 P3 P4 
19be0 50 35 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20 61  P5.**.** Begin a
19bf0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20   transaction on 
19c00 64 61 74 61 62 61 73 65 20 50 31 20 69 66 20 61  database P1 if a
19c10 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
19c20 6e 6f 74 20 61 6c 72 65 61 64 79 0a 2a 2a 20 61  not already.** a
19c30 63 74 69 76 65 2e 0a 2a 2a 20 49 66 20 50 32 20  ctive..** If P2 
19c40 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
19c50 6e 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61  n a write-transa
19c60 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64  ction is started
19c70 2c 20 6f 72 20 69 66 20 61 20 0a 2a 2a 20 72 65  , or if a .** re
19c80 61 64 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  ad-transaction i
19c90 73 20 61 6c 72 65 61 64 79 20 61 63 74 69 76 65  s already active
19ca0 2c 20 69 74 20 69 73 20 75 70 67 72 61 64 65 64  , it is upgraded
19cb0 20 74 6f 20 61 20 77 72 69 74 65 2d 74 72 61 6e   to a write-tran
19cc0 73 61 63 74 69 6f 6e 2e 0a 2a 2a 20 49 66 20 50  saction..** If P
19cd0 32 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20  2 is zero, then 
19ce0 61 20 72 65 61 64 2d 74 72 61 6e 73 61 63 74 69  a read-transacti
19cf0 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2e 0a 2a  on is started..*
19d00 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69  *.** P1 is the i
19d10 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61  ndex of the data
19d20 62 61 73 65 20 66 69 6c 65 20 6f 6e 20 77 68 69  base file on whi
19d30 63 68 20 74 68 65 20 74 72 61 6e 73 61 63 74 69  ch the transacti
19d40 6f 6e 20 69 73 0a 2a 2a 20 73 74 61 72 74 65 64  on is.** started
19d50 2e 20 20 49 6e 64 65 78 20 30 20 69 73 20 74 68  .  Index 0 is th
19d60 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
19d70 66 69 6c 65 20 61 6e 64 20 69 6e 64 65 78 20 31  file and index 1
19d80 20 69 73 20 74 68 65 0a 2a 2a 20 66 69 6c 65 20   is the.** file 
19d90 75 73 65 64 20 66 6f 72 20 74 65 6d 70 6f 72 61  used for tempora
19da0 72 79 20 74 61 62 6c 65 73 2e 20 20 49 6e 64 69  ry tables.  Indi
19db0 63 65 73 20 6f 66 20 32 20 6f 72 20 6d 6f 72 65  ces of 2 or more
19dc0 20 61 72 65 20 75 73 65 64 20 66 6f 72 0a 2a 2a   are used for.**
19dd0 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
19de0 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 20  ses..**.** If a 
19df0 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f  write-transactio
19e00 6e 20 69 73 20 73 74 61 72 74 65 64 20 61 6e 64  n is started and
19e10 20 74 68 65 20 56 64 62 65 2e 75 73 65 73 53 74   the Vdbe.usesSt
19e20 6d 74 4a 6f 75 72 6e 61 6c 20 66 6c 61 67 20 69  mtJournal flag i
19e30 73 0a 2a 2a 20 74 72 75 65 20 28 74 68 69 73 20  s.** true (this 
19e40 66 6c 61 67 20 69 73 20 73 65 74 20 69 66 20 74  flag is set if t
19e50 68 65 20 56 64 62 65 20 6d 61 79 20 6d 6f 64 69  he Vdbe may modi
19e60 66 79 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65  fy more than one
19e70 20 72 6f 77 20 61 6e 64 20 6d 61 79 0a 2a 2a 20   row and may.** 
19e80 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65  throw an ABORT e
19e90 78 63 65 70 74 69 6f 6e 29 2c 20 61 20 73 74 61  xception), a sta
19ea0 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
19eb0 6f 6e 20 6d 61 79 20 61 6c 73 6f 20 62 65 20 6f  on may also be o
19ec0 70 65 6e 65 64 2e 0a 2a 2a 20 4d 6f 72 65 20 73  pened..** More s
19ed0 70 65 63 69 66 69 63 61 6c 6c 79 2c 20 61 20 73  pecifically, a s
19ee0 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
19ef0 74 69 6f 6e 20 69 73 20 6f 70 65 6e 65 64 20 69  tion is opened i
19f00 66 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  ff the database.
19f10 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73  ** connection is
19f20 20 63 75 72 72 65 6e 74 6c 79 20 6e 6f 74 20 69   currently not i
19f30 6e 20 61 75 74 6f 63 6f 6d 6d 69 74 20 6d 6f 64  n autocommit mod
19f40 65 2c 20 6f 72 20 69 66 20 74 68 65 72 65 20 61  e, or if there a
19f50 72 65 20 6f 74 68 65 72 0a 2a 2a 20 61 63 74 69  re other.** acti
19f60 76 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 41  ve statements. A
19f70 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
19f80 61 63 74 69 6f 6e 20 61 6c 6c 6f 77 73 20 74 68  action allows th
19f90 65 20 63 68 61 6e 67 65 73 20 6d 61 64 65 20 62  e changes made b
19fa0 79 20 74 68 69 73 0a 2a 2a 20 56 44 42 45 20 74  y this.** VDBE t
19fb0 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b  o be rolled back
19fc0 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20   after an error 
19fd0 77 69 74 68 6f 75 74 20 68 61 76 69 6e 67 20 74  without having t
19fe0 6f 20 72 6f 6c 6c 20 62 61 63 6b 20 74 68 65 0a  o roll back the.
19ff0 2a 2a 20 65 6e 74 69 72 65 20 74 72 61 6e 73 61  ** entire transa
1a000 63 74 69 6f 6e 2e 20 49 66 20 6e 6f 20 65 72 72  ction. If no err
1a010 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65  or is encountere
1a020 64 2c 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  d, the statement
1a030 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20   transaction.** 
1a040 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63 61 6c  will automatical
1a050 6c 79 20 63 6f 6d 6d 69 74 20 77 68 65 6e 20 74  ly commit when t
1a060 68 65 20 56 44 42 45 20 68 61 6c 74 73 2e 0a 2a  he VDBE halts..*
1a070 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20 74 68  *.** If P5!=0 th
1a080 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20 61  en this opcode a
1a090 6c 73 6f 20 63 68 65 63 6b 73 20 74 68 65 20 73  lso checks the s
1a0a0 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 61 67 61  chema cookie aga
1a0b0 69 6e 73 74 20 50 33 0a 2a 2a 20 61 6e 64 20 74  inst P3.** and t
1a0c0 68 65 20 73 63 68 65 6d 61 20 67 65 6e 65 72 61  he schema genera
1a0d0 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20 61 67 61  tion counter aga
1a0e0 69 6e 73 74 20 50 34 2e 0a 2a 2a 20 54 68 65 20  inst P4..** The 
1a0f0 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 20 69  cookie changes i
1a100 74 73 20 76 61 6c 75 65 20 77 68 65 6e 65 76 65  ts value wheneve
1a110 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  r the database s
1a120 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2e 0a 2a  chema changes..*
1a130 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e  * This operation
1a140 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65   is used to dete
1a150 63 74 20 77 68 65 6e 20 74 68 61 74 20 74 68 65  ct when that the
1a160 20 63 6f 6f 6b 69 65 20 68 61 73 20 63 68 61 6e   cookie has chan
1a170 67 65 64 0a 2a 2a 20 61 6e 64 20 74 68 61 74 20  ged.** and that 
1a180 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63  the current proc
1a190 65 73 73 20 6e 65 65 64 73 20 74 6f 20 72 65 72  ess needs to rer
1a1a0 65 61 64 20 74 68 65 20 73 63 68 65 6d 61 2e 20  ead the schema. 
1a1b0 20 49 66 20 74 68 65 20 73 63 68 65 6d 61 0a 2a   If the schema.*
1a1c0 2a 20 63 6f 6f 6b 69 65 20 69 6e 20 50 33 20 64  * cookie in P3 d
1a1d0 69 66 66 65 72 73 20 66 72 6f 6d 20 74 68 65 20  iffers from the 
1a1e0 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 69 6e  schema cookie in
1a1f0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 65   the database he
1a200 61 64 65 72 20 6f 72 0a 2a 2a 20 69 66 20 74 68  ader or.** if th
1a210 65 20 73 63 68 65 6d 61 20 67 65 6e 65 72 61 74  e schema generat
1a220 69 6f 6e 20 63 6f 75 6e 74 65 72 20 69 6e 20 50  ion counter in P
1a230 34 20 64 69 66 66 65 72 73 20 66 72 6f 6d 20 74  4 differs from t
1a240 68 65 20 63 75 72 72 65 6e 74 0a 2a 2a 20 67 65  he current.** ge
1a250 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72  neration counter
1a260 2c 20 74 68 65 6e 20 61 6e 20 53 51 4c 49 54 45  , then an SQLITE
1a270 5f 53 43 48 45 4d 41 20 65 72 72 6f 72 20 69 73  _SCHEMA error is
1a280 20 72 61 69 73 65 64 20 61 6e 64 20 65 78 65 63   raised and exec
1a290 75 74 69 6f 6e 0a 2a 2a 20 68 61 6c 74 73 2e 20  ution.** halts. 
1a2a0 20 54 68 65 20 73 71 6c 69 74 65 33 5f 73 74 65   The sqlite3_ste
1a2b0 70 28 29 20 77 72 61 70 70 65 72 20 66 75 6e 63  p() wrapper func
1a2c0 74 69 6f 6e 20 6d 69 67 68 74 20 74 68 65 6e 20  tion might then 
1a2d0 72 65 70 72 65 70 61 72 65 20 74 68 65 0a 2a 2a  reprepare the.**
1a2e0 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 72   statement and r
1a2f0 65 72 75 6e 20 69 74 20 66 72 6f 6d 20 74 68 65  erun it from the
1a300 20 62 65 67 69 6e 6e 69 6e 67 2e 0a 2a 2f 0a 63   beginning..*/.c
1a310 61 73 65 20 4f 50 5f 54 72 61 6e 73 61 63 74 69  ase OP_Transacti
1a320 6f 6e 3a 20 7b 0a 20 20 42 74 72 65 65 20 2a 70  on: {.  Btree *p
1a330 42 74 3b 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b  Bt;.  int iMeta;
1a340 0a 20 20 69 6e 74 20 69 47 65 6e 3b 0a 0a 20 20  .  int iGen;..  
1a350 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65  assert( p->bIsRe
1a360 61 64 65 72 20 29 3b 0a 20 20 61 73 73 65 72 74  ader );.  assert
1a370 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
1a380 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29   || pOp->p2==0 )
1a390 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1a3a0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1a3b0 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  1<db->nDb );.  a
1a3c0 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73  ssert( DbMaskTes
1a3d0 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20  t(p->btreeMask, 
1a3e0 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 69 66  pOp->p1) );.  if
1a3f0 28 20 70 4f 70 2d 3e 70 32 20 26 26 20 28 64 62  ( pOp->p2 && (db
1a400 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
1a410 5f 51 75 65 72 79 4f 6e 6c 79 29 21 3d 30 20 29  _QueryOnly)!=0 )
1a420 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
1a430 45 5f 52 45 41 44 4f 4e 4c 59 3b 0a 20 20 20 20  E_READONLY;.    
1a440 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1a450 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 70  o_error;.  }.  p
1a460 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70  Bt = db->aDb[pOp
1a470 2d 3e 70 31 5d 2e 70 42 74 3b 0a 0a 20 20 69 66  ->p1].pBt;..  if
1a480 28 20 70 42 74 20 29 7b 0a 20 20 20 20 72 63 20  ( pBt ){.    rc 
1a490 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 42 65  = sqlite3BtreeBe
1a4a0 67 69 6e 54 72 61 6e 73 28 70 42 74 2c 20 70 4f  ginTrans(pBt, pO
1a4b0 70 2d 3e 70 32 29 3b 0a 20 20 20 20 74 65 73 74  p->p2);.    test
1a4c0 63 61 73 65 28 20 72 63 3d 3d 53 51 4c 49 54 45  case( rc==SQLITE
1a4d0 5f 42 55 53 59 5f 53 4e 41 50 53 48 4f 54 20 29  _BUSY_SNAPSHOT )
1a4e0 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20  ;.    testcase( 
1a4f0 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 5f  rc==SQLITE_BUSY_
1a500 52 45 43 4f 56 45 52 59 20 29 3b 0a 20 20 20 20  RECOVERY );.    
1a510 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
1a520 4b 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28  K ){.      if( (
1a530 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45  rc&0xff)==SQLITE
1a540 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20  _BUSY ){.       
1a550 20 70 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28 70   p->pc = (int)(p
1a560 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 20 20 20  Op - aOp);.     
1a570 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20     p->rc = rc;. 
1a580 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65         goto vdbe
1a590 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 7d  _return;.      }
1a5a0 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  .      goto abor
1a5b0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1a5c0 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 70      }..    if( p
1a5d0 4f 70 2d 3e 70 32 20 26 26 20 70 2d 3e 75 73 65  Op->p2 && p->use
1a5e0 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 0a 20 20  sStmtJournal .  
1a5f0 20 20 20 26 26 20 28 64 62 2d 3e 61 75 74 6f 43     && (db->autoC
1a600 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e  ommit==0 || db->
1a610 6e 56 64 62 65 52 65 61 64 3e 31 29 20 0a 20 20  nVdbeRead>1) .  
1a620 20 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72    ){.      asser
1a630 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 49  t( sqlite3BtreeI
1a640 73 49 6e 54 72 61 6e 73 28 70 42 74 29 20 29 3b  sInTrans(pBt) );
1a650 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 69 53  .      if( p->iS
1a660 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29 7b 0a 20  tatement==0 ){. 
1a670 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64         assert( d
1a680 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3e 3d 30  b->nStatement>=0
1a690 20 26 26 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69   && db->nSavepoi
1a6a0 6e 74 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20 20  nt>=0 );.       
1a6b0 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b   db->nStatement+
1a6c0 2b 3b 20 0a 20 20 20 20 20 20 20 20 70 2d 3e 69  +; .        p->i
1a6d0 53 74 61 74 65 6d 65 6e 74 20 3d 20 64 62 2d 3e  Statement = db->
1a6e0 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d  nSavepoint + db-
1a6f0 3e 6e 53 74 61 74 65 6d 65 6e 74 3b 0a 20 20 20  >nStatement;.   
1a700 20 20 20 7d 0a 0a 20 20 20 20 20 20 72 63 20 3d     }..      rc =
1a710 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65   sqlite3VtabSave
1a720 70 6f 69 6e 74 28 64 62 2c 20 53 41 56 45 50 4f  point(db, SAVEPO
1a730 49 4e 54 5f 42 45 47 49 4e 2c 20 70 2d 3e 69 53  INT_BEGIN, p->iS
1a740 74 61 74 65 6d 65 6e 74 2d 31 29 3b 0a 20 20 20  tatement-1);.   
1a750 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
1a760 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
1a770 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1a780 65 42 65 67 69 6e 53 74 6d 74 28 70 42 74 2c 20  eBeginStmt(pBt, 
1a790 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 29 3b 0a  p->iStatement);.
1a7a0 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f        }..      /
1a7b0 2a 20 53 74 6f 72 65 20 74 68 65 20 63 75 72 72  * Store the curr
1a7c0 65 6e 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65  ent value of the
1a7d0 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
1a7e0 73 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74  s deferred const
1a7f0 72 61 69 6e 74 0a 20 20 20 20 20 20 2a 2a 20 63  raint.      ** c
1a800 6f 75 6e 74 65 72 2e 20 49 66 20 74 68 65 20 73  ounter. If the s
1a810 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
1a820 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20 62 65  tion needs to be
1a830 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2c 0a 20 20   rolled back,.  
1a840 20 20 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65      ** the value
1a850 20 6f 66 20 74 68 69 73 20 63 6f 75 6e 74 65 72   of this counter
1a860 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 65 73   needs to be res
1a870 74 6f 72 65 64 20 74 6f 6f 2e 20 20 2a 2f 0a 20  tored too.  */. 
1a880 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66       p->nStmtDef
1a890 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65  Cons = db->nDefe
1a8a0 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20  rredCons;.      
1a8b0 70 2d 3e 6e 53 74 6d 74 44 65 66 49 6d 6d 43 6f  p->nStmtDefImmCo
1a8c0 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72  ns = db->nDeferr
1a8d0 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 7d  edImmCons;.    }
1a8e0 0a 0a 20 20 20 20 2f 2a 20 47 61 74 68 65 72 20  ..    /* Gather 
1a8f0 74 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69  the schema versi
1a900 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 63 68  on number for ch
1a910 65 63 6b 69 6e 67 3a 0a 20 20 20 20 2a 2a 20 49  ecking:.    ** I
1a920 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46  MPLEMENTATION-OF
1a930 3a 20 52 2d 30 33 31 38 39 2d 35 31 31 33 35 20  : R-03189-51135 
1a940 41 73 20 65 61 63 68 20 53 51 4c 20 73 74 61 74  As each SQL stat
1a950 65 6d 65 6e 74 20 72 75 6e 73 2c 20 74 68 65 20  ement runs, the 
1a960 73 63 68 65 6d 61 0a 20 20 20 20 2a 2a 20 76 65  schema.    ** ve
1a970 72 73 69 6f 6e 20 69 73 20 63 68 65 63 6b 65 64  rsion is checked
1a980 20 74 6f 20 65 6e 73 75 72 65 20 74 68 61 74 20   to ensure that 
1a990 74 68 65 20 73 63 68 65 6d 61 20 68 61 73 20 6e  the schema has n
1a9a0 6f 74 20 63 68 61 6e 67 65 64 20 73 69 6e 63 65  ot changed since
1a9b0 20 74 68 65 0a 20 20 20 20 2a 2a 20 53 51 4c 20   the.    ** SQL 
1a9c0 73 74 61 74 65 6d 65 6e 74 20 77 61 73 20 70 72  statement was pr
1a9d0 65 70 61 72 65 64 2e 0a 20 20 20 20 2a 2f 0a 20  epared..    */. 
1a9e0 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 47     sqlite3BtreeG
1a9f0 65 74 4d 65 74 61 28 70 42 74 2c 20 42 54 52 45  etMeta(pBt, BTRE
1aa00 45 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e  E_SCHEMA_VERSION
1aa10 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29  , (u32 *)&iMeta)
1aa20 3b 0a 20 20 20 20 69 47 65 6e 20 3d 20 64 62 2d  ;.    iGen = db-
1aa30 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53  >aDb[pOp->p1].pS
1aa40 63 68 65 6d 61 2d 3e 69 47 65 6e 65 72 61 74 69  chema->iGenerati
1aa50 6f 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  on;.  }else{.   
1aa60 20 69 47 65 6e 20 3d 20 69 4d 65 74 61 20 3d 20   iGen = iMeta = 
1aa70 30 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28  0;.  }.  assert(
1aa80 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70   pOp->p5==0 || p
1aa90 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
1aaa0 4e 54 33 32 20 29 3b 0a 20 20 69 66 28 20 70 4f  NT32 );.  if( pO
1aab0 70 2d 3e 70 35 20 26 26 20 28 69 4d 65 74 61 21  p->p5 && (iMeta!
1aac0 3d 70 4f 70 2d 3e 70 33 20 7c 7c 20 69 47 65 6e  =pOp->p3 || iGen
1aad0 21 3d 70 4f 70 2d 3e 70 34 2e 69 29 20 29 7b 0a  !=pOp->p4.i) ){.
1aae0 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
1aaf0 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67  e(db, p->zErrMsg
1ab00 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73  );.    p->zErrMs
1ab10 67 20 3d 20 73 71 6c 69 74 65 33 44 62 53 74 72  g = sqlite3DbStr
1ab20 44 75 70 28 64 62 2c 20 22 64 61 74 61 62 61 73  Dup(db, "databas
1ab30 65 20 73 63 68 65 6d 61 20 68 61 73 20 63 68 61  e schema has cha
1ab40 6e 67 65 64 22 29 3b 0a 20 20 20 20 2f 2a 20 49  nged");.    /* I
1ab50 66 20 74 68 65 20 73 63 68 65 6d 61 2d 63 6f 6f  f the schema-coo
1ab60 6b 69 65 20 66 72 6f 6d 20 74 68 65 20 64 61 74  kie from the dat
1ab70 61 62 61 73 65 20 66 69 6c 65 20 6d 61 74 63 68  abase file match
1ab80 65 73 20 74 68 65 20 63 6f 6f 6b 69 65 20 0a 20  es the cookie . 
1ab90 20 20 20 2a 2a 20 73 74 6f 72 65 64 20 77 69 74     ** stored wit
1aba0 68 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20  h the in-memory 
1abb0 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
1abc0 66 20 74 68 65 20 73 63 68 65 6d 61 2c 20 64 6f  f the schema, do
1abd0 0a 20 20 20 20 2a 2a 20 6e 6f 74 20 72 65 6c 6f  .    ** not relo
1abe0 61 64 20 74 68 65 20 73 63 68 65 6d 61 20 66 72  ad the schema fr
1abf0 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
1ac00 66 69 6c 65 2e 0a 20 20 20 20 2a 2a 0a 20 20 20  file..    **.   
1ac10 20 2a 2a 20 49 66 20 76 69 72 74 75 61 6c 2d 74   ** If virtual-t
1ac20 61 62 6c 65 73 20 61 72 65 20 69 6e 20 75 73 65  ables are in use
1ac30 2c 20 74 68 69 73 20 69 73 20 6e 6f 74 20 6a 75  , this is not ju
1ac40 73 74 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69  st an optimizati
1ac50 6f 6e 2e 0a 20 20 20 20 2a 2a 20 4f 66 74 65 6e  on..    ** Often
1ac60 2c 20 76 2d 74 61 62 6c 65 73 20 73 74 6f 72 65  , v-tables store
1ac70 20 74 68 65 69 72 20 64 61 74 61 20 69 6e 20 6f   their data in o
1ac80 74 68 65 72 20 53 51 4c 69 74 65 20 74 61 62 6c  ther SQLite tabl
1ac90 65 73 2c 20 77 68 69 63 68 0a 20 20 20 20 2a 2a  es, which.    **
1aca0 20 61 72 65 20 71 75 65 72 69 65 64 20 66 72 6f   are queried fro
1acb0 6d 20 77 69 74 68 69 6e 20 78 4e 65 78 74 28 29  m within xNext()
1acc0 20 61 6e 64 20 6f 74 68 65 72 20 76 2d 74 61 62   and other v-tab
1acd0 6c 65 20 6d 65 74 68 6f 64 73 20 75 73 69 6e 67  le methods using
1ace0 0a 20 20 20 20 2a 2a 20 70 72 65 70 61 72 65 64  .    ** prepared
1acf0 20 71 75 65 72 69 65 73 2e 20 49 66 20 73 75 63   queries. If suc
1ad00 68 20 61 20 71 75 65 72 79 20 69 73 20 6f 75 74  h a query is out
1ad10 2d 6f 66 2d 64 61 74 65 2c 20 77 65 20 64 6f 20  -of-date, we do 
1ad20 6e 6f 74 20 77 61 6e 74 20 74 6f 0a 20 20 20 20  not want to.    
1ad30 2a 2a 20 64 69 73 63 61 72 64 20 74 68 65 20 64  ** discard the d
1ad40 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 2c 20  atabase schema, 
1ad50 61 73 20 74 68 65 20 75 73 65 72 20 63 6f 64 65  as the user code
1ad60 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 74 68   implementing th
1ad70 65 0a 20 20 20 20 2a 2a 20 76 2d 74 61 62 6c 65  e.    ** v-table
1ad80 20 77 6f 75 6c 64 20 68 61 76 65 20 74 6f 20 62   would have to b
1ad90 65 20 72 65 61 64 79 20 66 6f 72 20 74 68 65 20  e ready for the 
1ada0 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72  sqlite3_vtab str
1adb0 75 63 74 75 72 65 20 69 74 73 65 6c 66 0a 20 20  ucture itself.  
1adc0 20 20 2a 2a 20 74 6f 20 62 65 20 69 6e 76 61 6c    ** to be inval
1add0 69 64 61 74 65 64 20 77 68 65 6e 65 76 65 72 20  idated whenever 
1ade0 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 69  sqlite3_step() i
1adf0 73 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69  s called from wi
1ae00 74 68 69 6e 20 0a 20 20 20 20 2a 2a 20 61 20 76  thin .    ** a v
1ae10 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 2e 0a 20  -table method.. 
1ae20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 64 62     */.    if( db
1ae30 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70  ->aDb[pOp->p1].p
1ae40 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63  Schema->schema_c
1ae50 6f 6f 6b 69 65 21 3d 69 4d 65 74 61 20 29 7b 0a  ookie!=iMeta ){.
1ae60 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65 73        sqlite3Res
1ae70 65 74 4f 6e 65 53 63 68 65 6d 61 28 64 62 2c 20  etOneSchema(db, 
1ae80 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 7d 0a  pOp->p1);.    }.
1ae90 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d      p->expired =
1aea0 20 31 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   1;.    rc = SQL
1aeb0 49 54 45 5f 53 43 48 45 4d 41 3b 0a 20 20 7d 0a  ITE_SCHEMA;.  }.
1aec0 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
1aed0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1aee0 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  or;.  break;.}..
1aef0 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 64 43  /* Opcode: ReadC
1af00 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33 20 2a  ookie P1 P2 P3 *
1af10 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 63 6f   *.**.** Read co
1af20 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 33 20 66  okie number P3 f
1af30 72 6f 6d 20 64 61 74 61 62 61 73 65 20 50 31 20  rom database P1 
1af40 61 6e 64 20 77 72 69 74 65 20 69 74 20 69 6e 74  and write it int
1af50 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
1af60 2a 20 50 33 3d 3d 31 20 69 73 20 74 68 65 20 73  * P3==1 is the s
1af70 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20  chema version.  
1af80 50 33 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74  P3==2 is the dat
1af90 61 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a  abase format..**
1afa0 20 50 33 3d 3d 33 20 69 73 20 74 68 65 20 72 65   P3==3 is the re
1afb0 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20  commended pager 
1afc0 63 61 63 68 65 20 73 69 7a 65 2c 20 61 6e 64 20  cache size, and 
1afd0 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30  so forth.  P1==0
1afe0 20 69 73 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20   is.** the main 
1aff0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e  database file an
1b000 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65 20 64  d P1==1 is the d
1b010 61 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65  atabase file use
1b020 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 65  d to store.** te
1b030 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a  mporary tables..
1b040 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 6d 75 73 74  **.** There must
1b050 20 62 65 20 61 20 72 65 61 64 2d 6c 6f 63 6b 20   be a read-lock 
1b060 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  on the database 
1b070 28 65 69 74 68 65 72 20 61 20 74 72 61 6e 73 61  (either a transa
1b080 63 74 69 6f 6e 0a 2a 2a 20 6d 75 73 74 20 62 65  ction.** must be
1b090 20 73 74 61 72 74 65 64 20 6f 72 20 74 68 65 72   started or ther
1b0a0 65 20 6d 75 73 74 20 62 65 20 61 6e 20 6f 70 65  e must be an ope
1b0b0 6e 20 63 75 72 73 6f 72 29 20 62 65 66 6f 72 65  n cursor) before
1b0c0 0a 2a 2a 20 65 78 65 63 75 74 69 6e 67 20 74 68  .** executing th
1b0d0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  is instruction..
1b0e0 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 64 43  */.case OP_ReadC
1b0f0 6f 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20 20 20  ookie: {        
1b100 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
1b110 2f 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20  /.  int iMeta;. 
1b120 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20   int iDb;.  int 
1b130 69 43 6f 6f 6b 69 65 3b 0a 0a 20 20 61 73 73 65  iCookie;..  asse
1b140 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
1b150 20 29 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d   );.  iDb = pOp-
1b160 3e 70 31 3b 0a 20 20 69 43 6f 6f 6b 69 65 20 3d  >p1;.  iCookie =
1b170 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65   pOp->p3;.  asse
1b180 72 74 28 20 70 4f 70 2d 3e 70 33 3c 53 51 4c 49  rt( pOp->p3<SQLI
1b190 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20  TE_N_BTREE_META 
1b1a0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44 62  );.  assert( iDb
1b1b0 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e  >=0 && iDb<db->n
1b1c0 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
1b1d0 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74  db->aDb[iDb].pBt
1b1e0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
1b1f0 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
1b200 74 72 65 65 4d 61 73 6b 2c 20 69 44 62 29 20 29  treeMask, iDb) )
1b210 3b 0a 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65  ;..  sqlite3Btre
1b220 65 47 65 74 4d 65 74 61 28 64 62 2d 3e 61 44 62  eGetMeta(db->aDb
1b230 5b 69 44 62 5d 2e 70 42 74 2c 20 69 43 6f 6f 6b  [iDb].pBt, iCook
1b240 69 65 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74  ie, (u32 *)&iMet
1b250 61 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74  a);.  pOut = out
1b260 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
1b270 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  Op);.  pOut->u.i
1b280 20 3d 20 69 4d 65 74 61 3b 0a 20 20 62 72 65 61   = iMeta;.  brea
1b290 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1b2a0 20 53 65 74 43 6f 6f 6b 69 65 20 50 31 20 50 32   SetCookie P1 P2
1b2b0 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72   P3 * *.**.** Wr
1b2c0 69 74 65 20 74 68 65 20 69 6e 74 65 67 65 72 20  ite the integer 
1b2d0 76 61 6c 75 65 20 50 33 20 69 6e 74 6f 20 63 6f  value P3 into co
1b2e0 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 32 20 6f  okie number P2 o
1b2f0 66 20 64 61 74 61 62 61 73 65 20 50 31 2e 0a 2a  f database P1..*
1b300 2a 20 50 32 3d 3d 31 20 69 73 20 74 68 65 20 73  * P2==1 is the s
1b310 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20  chema version.  
1b320 50 32 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74  P2==2 is the dat
1b330 61 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a  abase format..**
1b340 20 50 32 3d 3d 33 20 69 73 20 74 68 65 20 72 65   P2==3 is the re
1b350 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20  commended pager 
1b360 63 61 63 68 65 20 0a 2a 2a 20 73 69 7a 65 2c 20  cache .** size, 
1b370 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50  and so forth.  P
1b380 31 3d 3d 30 20 69 73 20 74 68 65 20 6d 61 69 6e  1==0 is the main
1b390 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61   database file a
1b3a0 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65 20  nd P1==1 is the 
1b3b0 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c  .** database fil
1b3c0 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  e used to store 
1b3d0 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
1b3e0 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72 61 6e 73 61  ..**.** A transa
1b3f0 63 74 69 6f 6e 20 6d 75 73 74 20 62 65 20 73 74  ction must be st
1b400 61 72 74 65 64 20 62 65 66 6f 72 65 20 65 78 65  arted before exe
1b410 63 75 74 69 6e 67 20 74 68 69 73 20 6f 70 63 6f  cuting this opco
1b420 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  de..*/.case OP_S
1b430 65 74 43 6f 6f 6b 69 65 3a 20 7b 0a 20 20 44 62  etCookie: {.  Db
1b440 20 2a 70 44 62 3b 0a 20 20 61 73 73 65 72 74 28   *pDb;.  assert(
1b450 20 70 4f 70 2d 3e 70 32 3c 53 51 4c 49 54 45 5f   pOp->p2<SQLITE_
1b460 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a  N_BTREE_META );.
1b470 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1b480 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
1b490 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
1b4a0 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
1b4b0 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f  p->btreeMask, pO
1b4c0 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73 73 65  p->p1) );.  asse
1b4d0 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
1b4e0 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64  =0 );.  pDb = &d
1b4f0 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b  b->aDb[pOp->p1];
1b500 0a 20 20 61 73 73 65 72 74 28 20 70 44 62 2d 3e  .  assert( pDb->
1b510 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  pBt!=0 );.  asse
1b520 72 74 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d  rt( sqlite3Schem
1b530 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20 70  aMutexHeld(db, p
1b540 4f 70 2d 3e 70 31 2c 20 30 29 20 29 3b 0a 23 69  Op->p1, 0) );.#i
1b550 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
1b560 54 5f 43 4f 4e 43 55 52 52 45 4e 54 0a 20 20 69  T_CONCURRENT.  i
1b570 66 28 20 64 62 2d 3e 62 43 6f 6e 63 75 72 72 65  f( db->bConcurre
1b580 6e 74 20 0a 20 20 20 26 26 20 28 70 4f 70 2d 3e  nt .   && (pOp->
1b590 70 32 3d 3d 42 54 52 45 45 5f 55 53 45 52 5f 56  p2==BTREE_USER_V
1b5a0 45 52 53 49 4f 4e 20 7c 7c 20 70 4f 70 2d 3e 70  ERSION || pOp->p
1b5b0 32 3d 3d 42 54 52 45 45 5f 41 50 50 4c 49 43 41  2==BTREE_APPLICA
1b5c0 54 49 4f 4e 5f 49 44 29 0a 20 20 29 7b 0a 20 20  TION_ID).  ){.  
1b5d0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52    rc = SQLITE_ER
1b5e0 52 4f 52 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  ROR;.    sqlite3
1b5f0 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 63 61  VdbeError(p, "ca
1b600 6e 6e 6f 74 20 6d 6f 64 69 66 79 20 25 73 20 77  nnot modify %s w
1b610 69 74 68 69 6e 20 43 4f 4e 43 55 52 52 45 4e 54  ithin CONCURRENT
1b620 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 2c 0a 20   transaction",. 
1b630 20 20 20 20 20 20 20 70 4f 70 2d 3e 70 32 3d 3d         pOp->p2==
1b640 42 54 52 45 45 5f 55 53 45 52 5f 56 45 52 53 49  BTREE_USER_VERSI
1b650 4f 4e 20 3f 20 22 75 73 65 72 5f 76 65 72 73 69  ON ? "user_versi
1b660 6f 6e 22 20 3a 20 22 61 70 70 6c 69 63 61 74 69  on" : "applicati
1b670 6f 6e 5f 69 64 22 0a 20 20 20 20 29 3b 0a 20 20  on_id".    );.  
1b680 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
1b690 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 23  _to_error;.  }.#
1b6a0 65 6e 64 69 66 0a 20 20 2f 2a 20 53 65 65 20 6e  endif.  /* See n
1b6b0 6f 74 65 20 61 62 6f 75 74 20 69 6e 64 65 78 20  ote about index 
1b6c0 73 68 69 66 74 69 6e 67 20 6f 6e 20 4f 50 5f 52  shifting on OP_R
1b6d0 65 61 64 43 6f 6f 6b 69 65 20 2a 2f 0a 20 20 72  eadCookie */.  r
1b6e0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1b6f0 55 70 64 61 74 65 4d 65 74 61 28 70 44 62 2d 3e  UpdateMeta(pDb->
1b700 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 70 4f  pBt, pOp->p2, pO
1b710 70 2d 3e 70 33 29 3b 0a 20 20 69 66 28 20 70 4f  p->p3);.  if( pO
1b720 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 53 43 48  p->p2==BTREE_SCH
1b730 45 4d 41 5f 56 45 52 53 49 4f 4e 20 29 7b 0a 20  EMA_VERSION ){. 
1b740 20 20 20 2f 2a 20 57 68 65 6e 20 74 68 65 20 73     /* When the s
1b750 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68 61  chema cookie cha
1b760 6e 67 65 73 2c 20 72 65 63 6f 72 64 20 74 68 65  nges, record the
1b770 20 6e 65 77 20 63 6f 6f 6b 69 65 20 69 6e 74 65   new cookie inte
1b780 72 6e 61 6c 6c 79 20 2a 2f 0a 20 20 20 20 61 73  rnally */.    as
1b790 73 65 72 74 28 20 64 62 2d 3e 62 43 6f 6e 63 75  sert( db->bConcu
1b7a0 72 72 65 6e 74 3d 3d 30 20 29 3b 0a 20 20 20 20  rrent==0 );.    
1b7b0 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 73 63  pDb->pSchema->sc
1b7c0 68 65 6d 61 5f 63 6f 6f 6b 69 65 20 3d 20 70 4f  hema_cookie = pO
1b7d0 70 2d 3e 70 33 3b 0a 20 20 20 20 64 62 2d 3e 66  p->p3;.    db->f
1b7e0 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f 49  lags |= SQLITE_I
1b7f0 6e 74 65 72 6e 43 68 61 6e 67 65 73 3b 0a 20 20  nternChanges;.  
1b800 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70  }else if( pOp->p
1b810 32 3d 3d 42 54 52 45 45 5f 46 49 4c 45 5f 46 4f  2==BTREE_FILE_FO
1b820 52 4d 41 54 20 29 7b 0a 20 20 20 20 2f 2a 20 52  RMAT ){.    /* R
1b830 65 63 6f 72 64 20 63 68 61 6e 67 65 73 20 69 6e  ecord changes in
1b840 20 74 68 65 20 66 69 6c 65 20 66 6f 72 6d 61 74   the file format
1b850 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63   */.    pDb->pSc
1b860 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61  hema->file_forma
1b870 74 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d  t = pOp->p3;.  }
1b880 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d  .  if( pOp->p1==
1b890 31 20 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 76 61  1 ){.    /* Inva
1b8a0 6c 69 64 61 74 65 20 61 6c 6c 20 70 72 65 70 61  lidate all prepa
1b8b0 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 77  red statements w
1b8c0 68 65 6e 65 76 65 72 20 74 68 65 20 54 45 4d 50  henever the TEMP
1b8d0 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 2a 2a   database.    **
1b8e0 20 73 63 68 65 6d 61 20 69 73 20 63 68 61 6e 67   schema is chang
1b8f0 65 64 2e 20 20 54 69 63 6b 65 74 20 23 31 36 34  ed.  Ticket #164
1b900 34 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33  4 */.    sqlite3
1b910 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74  ExpirePreparedSt
1b920 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20  atements(db);.  
1b930 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 30    p->expired = 0
1b940 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29  ;.  }.  if( rc )
1b950 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1b960 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61  to_error;.  brea
1b970 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1b980 20 4f 70 65 6e 52 65 61 64 20 50 31 20 50 32 20   OpenRead P1 P2 
1b990 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
1b9a0 70 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44  psis: root=P2 iD
1b9b0 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20  b=P3.**.** Open 
1b9c0 61 20 72 65 61 64 2d 6f 6e 6c 79 20 63 75 72 73  a read-only curs
1b9d0 6f 72 20 66 6f 72 20 74 68 65 20 64 61 74 61 62  or for the datab
1b9e0 61 73 65 20 74 61 62 6c 65 20 77 68 6f 73 65 20  ase table whose 
1b9f0 72 6f 6f 74 20 70 61 67 65 20 69 73 0a 2a 2a 20  root page is.** 
1ba00 50 32 20 69 6e 20 61 20 64 61 74 61 62 61 73 65  P2 in a database
1ba10 20 66 69 6c 65 2e 20 20 54 68 65 20 64 61 74 61   file.  The data
1ba20 62 61 73 65 20 66 69 6c 65 20 69 73 20 64 65 74  base file is det
1ba30 65 72 6d 69 6e 65 64 20 62 79 20 50 33 2e 20 0a  ermined by P3. .
1ba40 2a 2a 20 50 33 3d 3d 30 20 6d 65 61 6e 73 20 74  ** P3==0 means t
1ba50 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
1ba60 2c 20 50 33 3d 3d 31 20 6d 65 61 6e 73 20 74 68  , P3==1 means th
1ba70 65 20 64 61 74 61 62 61 73 65 20 75 73 65 64 20  e database used 
1ba80 66 6f 72 20 0a 2a 2a 20 74 65 6d 70 6f 72 61 72  for .** temporar
1ba90 79 20 74 61 62 6c 65 73 2c 20 61 6e 64 20 50 33  y tables, and P3
1baa0 3e 31 20 6d 65 61 6e 73 20 75 73 65 64 20 74 68  >1 means used th
1bab0 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
1bac0 61 74 74 61 63 68 65 64 0a 2a 2a 20 64 61 74 61  attached.** data
1bad0 62 61 73 65 2e 20 20 47 69 76 65 20 74 68 65 20  base.  Give the 
1bae0 6e 65 77 20 63 75 72 73 6f 72 20 61 6e 20 69 64  new cursor an id
1baf0 65 6e 74 69 66 69 65 72 20 6f 66 20 50 31 2e 20  entifier of P1. 
1bb00 20 54 68 65 20 50 31 0a 2a 2a 20 76 61 6c 75 65   The P1.** value
1bb10 73 20 6e 65 65 64 20 6e 6f 74 20 62 65 20 63 6f  s need not be co
1bb20 6e 74 69 67 75 6f 75 73 20 62 75 74 20 61 6c 6c  ntiguous but all
1bb30 20 50 31 20 76 61 6c 75 65 73 20 73 68 6f 75 6c   P1 values shoul
1bb40 64 20 62 65 20 73 6d 61 6c 6c 20 69 6e 74 65 67  d be small integ
1bb50 65 72 73 2e 0a 2a 2a 20 49 74 20 69 73 20 61 6e  ers..** It is an
1bb60 20 65 72 72 6f 72 20 66 6f 72 20 50 31 20 74 6f   error for P1 to
1bb70 20 62 65 20 6e 65 67 61 74 69 76 65 2e 0a 2a 2a   be negative..**
1bb80 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20 74 68 65  .** If P5!=0 the
1bb90 6e 20 75 73 65 20 74 68 65 20 63 6f 6e 74 65 6e  n use the conten
1bba0 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 32  t of register P2
1bbb0 20 61 73 20 74 68 65 20 72 6f 6f 74 20 70 61 67   as the root pag
1bbc0 65 2c 20 6e 6f 74 0a 2a 2a 20 74 68 65 20 76 61  e, not.** the va
1bbd0 6c 75 65 20 6f 66 20 50 32 20 69 74 73 65 6c 66  lue of P2 itself
1bbe0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 77 69  ..**.** There wi
1bbf0 6c 6c 20 62 65 20 61 20 72 65 61 64 20 6c 6f 63  ll be a read loc
1bc00 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73  k on the databas
1bc10 65 20 77 68 65 6e 65 76 65 72 20 74 68 65 72 65  e whenever there
1bc20 20 69 73 20 61 6e 0a 2a 2a 20 6f 70 65 6e 20 63   is an.** open c
1bc30 75 72 73 6f 72 2e 20 20 49 66 20 74 68 65 20 64  ursor.  If the d
1bc40 61 74 61 62 61 73 65 20 77 61 73 20 75 6e 6c 6f  atabase was unlo
1bc50 63 6b 65 64 20 70 72 69 6f 72 20 74 6f 20 74 68  cked prior to th
1bc60 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a  is instruction.*
1bc70 2a 20 74 68 65 6e 20 61 20 72 65 61 64 20 6c 6f  * then a read lo
1bc80 63 6b 20 69 73 20 61 63 71 75 69 72 65 64 20 61  ck is acquired a
1bc90 73 20 70 61 72 74 20 6f 66 20 74 68 69 73 20 69  s part of this i
1bca0 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 41 20 72  nstruction.  A r
1bcb0 65 61 64 0a 2a 2a 20 6c 6f 63 6b 20 61 6c 6c 6f  ead.** lock allo
1bcc0 77 73 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73  ws other process
1bcd0 65 73 20 74 6f 20 72 65 61 64 20 74 68 65 20 64  es to read the d
1bce0 61 74 61 62 61 73 65 20 62 75 74 20 70 72 6f 68  atabase but proh
1bcf0 69 62 69 74 73 0a 2a 2a 20 61 6e 79 20 6f 74 68  ibits.** any oth
1bd00 65 72 20 70 72 6f 63 65 73 73 20 66 72 6f 6d 20  er process from 
1bd10 6d 6f 64 69 66 79 69 6e 67 20 74 68 65 20 64 61  modifying the da
1bd20 74 61 62 61 73 65 2e 20 20 54 68 65 20 72 65 61  tabase.  The rea
1bd30 64 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20 72 65 6c  d lock is.** rel
1bd40 65 61 73 65 64 20 77 68 65 6e 20 61 6c 6c 20 63  eased when all c
1bd50 75 72 73 6f 72 73 20 61 72 65 20 63 6c 6f 73 65  ursors are close
1bd60 64 2e 20 20 49 66 20 74 68 69 73 20 69 6e 73 74  d.  If this inst
1bd70 72 75 63 74 69 6f 6e 20 61 74 74 65 6d 70 74 73  ruction attempts
1bd80 0a 2a 2a 20 74 6f 20 67 65 74 20 61 20 72 65 61  .** to get a rea
1bd90 64 20 6c 6f 63 6b 20 62 75 74 20 66 61 69 6c 73  d lock but fails
1bda0 2c 20 74 68 65 20 73 63 72 69 70 74 20 74 65 72  , the script ter
1bdb0 6d 69 6e 61 74 65 73 20 77 69 74 68 20 61 6e 0a  minates with an.
1bdc0 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53 59 20 65  ** SQLITE_BUSY e
1bdd0 72 72 6f 72 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  rror code..**.**
1bde0 20 54 68 65 20 50 34 20 76 61 6c 75 65 20 6d 61   The P4 value ma
1bdf0 79 20 62 65 20 65 69 74 68 65 72 20 61 6e 20 69  y be either an i
1be00 6e 74 65 67 65 72 20 28 50 34 5f 49 4e 54 33 32  nteger (P4_INT32
1be10 29 20 6f 72 20 61 20 70 6f 69 6e 74 65 72 20 74  ) or a pointer t
1be20 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73  o.** a KeyInfo s
1be30 74 72 75 63 74 75 72 65 20 28 50 34 5f 4b 45 59  tructure (P4_KEY
1be40 49 4e 46 4f 29 2e 20 49 66 20 69 74 20 69 73 20  INFO). If it is 
1be50 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b  a pointer to a K
1be60 65 79 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63  eyInfo .** struc
1be70 74 75 72 65 2c 20 74 68 65 6e 20 73 61 69 64 20  ture, then said 
1be80 73 74 72 75 63 74 75 72 65 20 64 65 66 69 6e 65  structure define
1be90 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e  s the content an
1bea0 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20  d collating .** 
1beb0 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68 65 20  sequence of the 
1bec0 69 6e 64 65 78 20 62 65 69 6e 67 20 6f 70 65 6e  index being open
1bed0 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69  ed. Otherwise, i
1bee0 66 20 50 34 20 69 73 20 61 6e 20 69 6e 74 65 67  f P4 is an integ
1bef0 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74  er .** value, it
1bf00 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e   is set to the n
1bf10 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
1bf20 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a 2a   in the table..*
1bf30 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4f  *.** See also: O
1bf40 70 65 6e 57 72 69 74 65 2c 20 52 65 6f 70 65 6e  penWrite, Reopen
1bf50 49 64 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  Idx.*/./* Opcode
1bf60 3a 20 52 65 6f 70 65 6e 49 64 78 20 50 31 20 50  : ReopenIdx P1 P
1bf70 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
1bf80 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20  nopsis: root=P2 
1bf90 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 54 68 65  iDb=P3.**.** The
1bfa0 20 52 65 6f 70 65 6e 49 64 78 20 6f 70 63 6f 64   ReopenIdx opcod
1bfb0 65 20 77 6f 72 6b 73 20 65 78 61 63 74 6c 79 20  e works exactly 
1bfc0 6c 69 6b 65 20 52 65 61 64 4f 70 65 6e 20 65 78  like ReadOpen ex
1bfd0 63 65 70 74 20 74 68 61 74 20 69 74 20 66 69 72  cept that it fir
1bfe0 73 74 0a 2a 2a 20 63 68 65 63 6b 73 20 74 6f 20  st.** checks to 
1bff0 73 65 65 20 69 66 20 74 68 65 20 63 75 72 73 6f  see if the curso
1c000 72 20 6f 6e 20 50 31 20 69 73 20 61 6c 72 65 61  r on P1 is alrea
1c010 64 79 20 6f 70 65 6e 20 77 69 74 68 20 61 20 72  dy open with a r
1c020 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 6e 75 6d 62  oot page.** numb
1c030 65 72 20 6f 66 20 50 32 20 61 6e 64 20 69 66 20  er of P2 and if 
1c040 69 74 20 69 73 20 74 68 69 73 20 6f 70 63 6f 64  it is this opcod
1c050 65 20 62 65 63 6f 6d 65 73 20 61 20 6e 6f 2d 6f  e becomes a no-o
1c060 70 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  p.  In other wor
1c070 64 73 2c 0a 2a 2a 20 69 66 20 74 68 65 20 63 75  ds,.** if the cu
1c080 72 73 6f 72 20 69 73 20 61 6c 72 65 61 64 79 20  rsor is already 
1c090 6f 70 65 6e 2c 20 64 6f 20 6e 6f 74 20 72 65 6f  open, do not reo
1c0a0 70 65 6e 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 54 68  pen it..**.** Th
1c0b0 65 20 52 65 6f 70 65 6e 49 64 78 20 6f 70 63 6f  e ReopenIdx opco
1c0c0 64 65 20 6d 61 79 20 6f 6e 6c 79 20 62 65 20 75  de may only be u
1c0d0 73 65 64 20 77 69 74 68 20 50 35 3d 3d 30 20 61  sed with P5==0 a
1c0e0 6e 64 20 77 69 74 68 20 50 34 20 62 65 69 6e 67  nd with P4 being
1c0f0 0a 2a 2a 20 61 20 50 34 5f 4b 45 59 49 4e 46 4f  .** a P4_KEYINFO
1c100 20 6f 62 6a 65 63 74 2e 20 20 46 75 72 74 68 65   object.  Furthe
1c110 72 6d 6f 72 65 2c 20 74 68 65 20 50 33 20 76 61  rmore, the P3 va
1c120 6c 75 65 20 6d 75 73 74 20 62 65 20 74 68 65 20  lue must be the 
1c130 73 61 6d 65 20 61 73 0a 2a 2a 20 65 76 65 72 79  same as.** every
1c140 20 6f 74 68 65 72 20 52 65 6f 70 65 6e 49 64 78   other ReopenIdx
1c150 20 6f 72 20 4f 70 65 6e 52 65 61 64 20 66 6f 72   or OpenRead for
1c160 20 74 68 65 20 73 61 6d 65 20 63 75 72 73 6f 72   the same cursor
1c170 20 6e 75 6d 62 65 72 2e 0a 2a 2a 0a 2a 2a 20 53   number..**.** S
1c180 65 65 20 74 68 65 20 4f 70 65 6e 52 65 61 64 20  ee the OpenRead 
1c190 6f 70 63 6f 64 65 20 64 6f 63 75 6d 65 6e 74 61  opcode documenta
1c1a0 74 69 6f 6e 20 66 6f 72 20 61 64 64 69 74 69 6f  tion for additio
1c1b0 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
1c1c0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .*/./* Opcode: O
1c1d0 70 65 6e 57 72 69 74 65 20 50 31 20 50 32 20 50  penWrite P1 P2 P
1c1e0 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
1c1f0 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62  sis: root=P2 iDb
1c200 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61  =P3.**.** Open a
1c210 20 72 65 61 64 2f 77 72 69 74 65 20 63 75 72 73   read/write curs
1c220 6f 72 20 6e 61 6d 65 64 20 50 31 20 6f 6e 20 74  or named P1 on t
1c230 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
1c240 78 20 77 68 6f 73 65 20 72 6f 6f 74 0a 2a 2a 20  x whose root.** 
1c250 70 61 67 65 20 69 73 20 50 32 2e 20 20 4f 72 20  page is P2.  Or 
1c260 69 66 20 50 35 21 3d 30 20 75 73 65 20 74 68 65  if P5!=0 use the
1c270 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
1c280 73 74 65 72 20 50 32 20 74 6f 20 66 69 6e 64 20  ster P2 to find 
1c290 74 68 65 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65  the.** root page
1c2a0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76  ..**.** The P4 v
1c2b0 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69 74 68  alue may be eith
1c2c0 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50  er an integer (P
1c2d0 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f  4_INT32) or a po
1c2e0 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65  inter to.** a Ke
1c2f0 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20  yInfo structure 
1c300 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66  (P4_KEYINFO). If
1c310 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72   it is a pointer
1c320 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a   to a KeyInfo .*
1c330 2a 20 73 74 72 75 63 74 75 72 65 2c 20 74 68 65  * structure, the
1c340 6e 20 73 61 69 64 20 73 74 72 75 63 74 75 72 65  n said structure
1c350 20 64 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e   defines the con
1c360 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69  tent and collati
1c370 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20  ng .** sequence 
1c380 6f 66 20 74 68 65 20 69 6e 64 65 78 20 62 65 69  of the index bei
1c390 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72  ng opened. Other
1c3a0 77 69 73 65 2c 20 69 66 20 50 34 20 69 73 20 61  wise, if P4 is a
1c3b0 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61  n integer .** va
1c3c0 6c 75 65 2c 20 69 74 20 69 73 20 73 65 74 20 74  lue, it is set t
1c3d0 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  o the number of 
1c3e0 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74  columns in the t
1c3f0 61 62 6c 65 2c 20 6f 72 20 74 6f 20 74 68 65 0a  able, or to the.
1c400 2a 2a 20 6c 61 72 67 65 73 74 20 69 6e 64 65 78  ** largest index
1c410 20 6f 66 20 61 6e 79 20 63 6f 6c 75 6d 6e 20 6f   of any column o
1c420 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  f the table that
1c430 20 69 73 20 61 63 74 75 61 6c 6c 79 20 75 73 65   is actually use
1c440 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  d..**.** This in
1c450 73 74 72 75 63 74 69 6f 6e 20 77 6f 72 6b 73 20  struction works 
1c460 6a 75 73 74 20 6c 69 6b 65 20 4f 70 65 6e 52 65  just like OpenRe
1c470 61 64 20 65 78 63 65 70 74 20 74 68 61 74 20 69  ad except that i
1c480 74 20 6f 70 65 6e 73 20 74 68 65 20 63 75 72 73  t opens the curs
1c490 6f 72 0a 2a 2a 20 69 6e 20 72 65 61 64 2f 77 72  or.** in read/wr
1c4a0 69 74 65 20 6d 6f 64 65 2e 20 20 46 6f 72 20 61  ite mode.  For a
1c4b0 20 67 69 76 65 6e 20 74 61 62 6c 65 2c 20 74 68   given table, th
1c4c0 65 72 65 20 63 61 6e 20 62 65 20 6f 6e 65 20 6f  ere can be one o
1c4d0 72 20 6d 6f 72 65 20 72 65 61 64 2d 6f 6e 6c 79  r more read-only
1c4e0 0a 2a 2a 20 63 75 72 73 6f 72 73 20 6f 72 20 61  .** cursors or a
1c4f0 20 73 69 6e 67 6c 65 20 72 65 61 64 2f 77 72 69   single read/wri
1c500 74 65 20 63 75 72 73 6f 72 20 62 75 74 20 6e 6f  te cursor but no
1c510 74 20 62 6f 74 68 2e 0a 2a 2a 0a 2a 2a 20 53 65  t both..**.** Se
1c520 65 20 61 6c 73 6f 20 4f 70 65 6e 52 65 61 64 2e  e also OpenRead.
1c530 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 6f 70  .*/.case OP_Reop
1c540 65 6e 49 64 78 3a 20 7b 0a 20 20 69 6e 74 20 6e  enIdx: {.  int n
1c550 46 69 65 6c 64 3b 0a 20 20 4b 65 79 49 6e 66 6f  Field;.  KeyInfo
1c560 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e   *pKeyInfo;.  in
1c570 74 20 70 32 3b 0a 20 20 69 6e 74 20 69 44 62 3b  t p2;.  int iDb;
1c580 0a 20 20 69 6e 74 20 77 72 46 6c 61 67 3b 0a 20  .  int wrFlag;. 
1c590 20 42 74 72 65 65 20 2a 70 58 3b 0a 20 20 56 64   Btree *pX;.  Vd
1c5a0 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a  beCursor *pCur;.
1c5b0 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20 61 73    Db *pDb;..  as
1c5c0 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30  sert( pOp->p5==0
1c5d0 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 50 46   || pOp->p5==OPF
1c5e0 4c 41 47 5f 53 45 45 4b 45 51 20 29 3b 0a 20 20  LAG_SEEKEQ );.  
1c5f0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
1c600 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20  ype==P4_KEYINFO 
1c610 29 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61  );.  pCur = p->a
1c620 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
1c630 20 69 66 28 20 70 43 75 72 20 26 26 20 70 43 75   if( pCur && pCu
1c640 72 2d 3e 70 67 6e 6f 52 6f 6f 74 3d 3d 28 75 33  r->pgnoRoot==(u3
1c650 32 29 70 4f 70 2d 3e 70 32 20 29 7b 0a 20 20 20  2)pOp->p2 ){.   
1c660 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e 69   assert( pCur->i
1c670 44 62 3d 3d 70 4f 70 2d 3e 70 33 20 29 3b 20 20  Db==pOp->p3 );  
1c680 20 20 20 20 2f 2a 20 47 75 61 72 61 6e 74 65 65      /* Guarantee
1c690 64 20 62 79 20 74 68 65 20 63 6f 64 65 20 67 65  d by the code ge
1c6a0 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20 20 20 67  nerator */.    g
1c6b0 6f 74 6f 20 6f 70 65 6e 5f 63 75 72 73 6f 72 5f  oto open_cursor_
1c6c0 73 65 74 5f 68 69 6e 74 73 3b 0a 20 20 7d 0a 20  set_hints;.  }. 
1c6d0 20 2f 2a 20 49 66 20 74 68 65 20 63 75 72 73 6f   /* If the curso
1c6e0 72 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74  r is not current
1c6f0 6c 79 20 6f 70 65 6e 20 6f 72 20 69 73 20 6f 70  ly open or is op
1c700 65 6e 20 6f 6e 20 61 20 64 69 66 66 65 72 65 6e  en on a differen
1c710 74 0a 20 20 2a 2a 20 69 6e 64 65 78 2c 20 74 68  t.  ** index, th
1c720 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  en fall through 
1c730 69 6e 74 6f 20 4f 50 5f 4f 70 65 6e 52 65 61 64  into OP_OpenRead
1c740 20 74 6f 20 66 6f 72 63 65 20 61 20 72 65 6f 70   to force a reop
1c750 65 6e 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70  en */.case OP_Op
1c760 65 6e 52 65 61 64 3a 0a 63 61 73 65 20 4f 50 5f  enRead:.case OP_
1c770 4f 70 65 6e 57 72 69 74 65 3a 0a 0a 20 20 61 73  OpenWrite:..  as
1c780 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
1c790 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20  e==OP_OpenWrite 
1c7a0 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c  || pOp->p5==0 ||
1c7b0 20 70 4f 70 2d 3e 70 35 3d 3d 4f 50 46 4c 41 47   pOp->p5==OPFLAG
1c7c0 5f 53 45 45 4b 45 51 20 29 3b 0a 20 20 61 73 73  _SEEKEQ );.  ass
1c7d0 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65  ert( p->bIsReade
1c7e0 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
1c7f0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f  Op->opcode==OP_O
1c800 70 65 6e 52 65 61 64 20 7c 7c 20 70 4f 70 2d 3e  penRead || pOp->
1c810 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 65 6f 70 65  opcode==OP_Reope
1c820 6e 49 64 78 0a 20 20 20 20 20 20 20 20 20 20 7c  nIdx.          |
1c830 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  | p->readOnly==0
1c840 20 29 3b 0a 0a 20 20 69 66 28 20 70 2d 3e 65 78   );..  if( p->ex
1c850 70 69 72 65 64 20 29 7b 0a 20 20 20 20 72 63 20  pired ){.    rc 
1c860 3d 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52  = SQLITE_ABORT_R
1c870 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20 20 67 6f 74  OLLBACK;.    got
1c880 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1c890 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 6e 46 69  rror;.  }..  nFi
1c8a0 65 6c 64 20 3d 20 30 3b 0a 20 20 70 4b 65 79 49  eld = 0;.  pKeyI
1c8b0 6e 66 6f 20 3d 20 30 3b 0a 20 20 70 32 20 3d 20  nfo = 0;.  p2 = 
1c8c0 70 4f 70 2d 3e 70 32 3b 0a 20 20 69 44 62 20 3d  pOp->p2;.  iDb =
1c8d0 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65   pOp->p3;.  asse
1c8e0 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44  rt( iDb>=0 && iD
1c8f0 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  b<db->nDb );.  a
1c900 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73  ssert( DbMaskTes
1c910 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20  t(p->btreeMask, 
1c920 69 44 62 29 20 29 3b 0a 20 20 70 44 62 20 3d 20  iDb) );.  pDb = 
1c930 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a 20  &db->aDb[iDb];. 
1c940 20 70 58 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a   pX = pDb->pBt;.
1c950 20 20 61 73 73 65 72 74 28 20 70 58 21 3d 30 20    assert( pX!=0 
1c960 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  );.  if( pOp->op
1c970 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69  code==OP_OpenWri
1c980 74 65 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  te ){.    assert
1c990 28 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45  ( OPFLAG_FORDELE
1c9a0 54 45 3d 3d 42 54 52 45 45 5f 46 4f 52 44 45 4c  TE==BTREE_FORDEL
1c9b0 45 54 45 20 29 3b 0a 20 20 20 20 77 72 46 6c 61  ETE );.    wrFla
1c9c0 67 20 3d 20 42 54 52 45 45 5f 57 52 43 53 52 20  g = BTREE_WRCSR 
1c9d0 7c 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  | (pOp->p5 & OPF
1c9e0 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 29 3b 0a  LAG_FORDELETE);.
1c9f0 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
1ca00 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65  te3SchemaMutexHe
1ca10 6c 64 28 64 62 2c 20 69 44 62 2c 20 30 29 20 29  ld(db, iDb, 0) )
1ca20 3b 0a 20 20 20 20 69 66 28 20 70 44 62 2d 3e 70  ;.    if( pDb->p
1ca30 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72  Schema->file_for
1ca40 6d 61 74 20 3c 20 70 2d 3e 6d 69 6e 57 72 69 74  mat < p->minWrit
1ca50 65 46 69 6c 65 46 6f 72 6d 61 74 20 29 7b 0a 20  eFileFormat ){. 
1ca60 20 20 20 20 20 70 2d 3e 6d 69 6e 57 72 69 74 65       p->minWrite
1ca70 46 69 6c 65 46 6f 72 6d 61 74 20 3d 20 70 44 62  FileFormat = pDb
1ca80 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f  ->pSchema->file_
1ca90 66 6f 72 6d 61 74 3b 0a 20 20 20 20 7d 0a 20 20  format;.    }.  
1caa0 7d 65 6c 73 65 7b 0a 20 20 20 20 77 72 46 6c 61  }else{.    wrFla
1cab0 67 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28  g = 0;.  }.  if(
1cac0 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41   pOp->p5 & OPFLA
1cad0 47 5f 50 32 49 53 52 45 47 20 29 7b 0a 20 20 20  G_P2ISREG ){.   
1cae0 20 61 73 73 65 72 74 28 20 70 32 3e 30 20 29 3b   assert( p2>0 );
1caf0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3c  .    assert( p2<
1cb00 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
1cb10 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
1cb20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 32   pIn2 = &aMem[p2
1cb30 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  ];.    assert( m
1cb40 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 32 29 20  emIsValid(pIn2) 
1cb50 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28  );.    assert( (
1cb60 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn2->flags & ME
1cb70 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 20  M_Int)!=0 );.   
1cb80 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
1cb90 6e 74 65 67 65 72 69 66 79 28 70 49 6e 32 29 3b  ntegerify(pIn2);
1cba0 0a 20 20 20 20 70 32 20 3d 20 28 69 6e 74 29 70  .    p2 = (int)p
1cbb0 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 2f 2a  In2->u.i;.    /*
1cbc0 20 54 68 65 20 70 32 20 76 61 6c 75 65 20 61 6c   The p2 value al
1cbd0 77 61 79 73 20 63 6f 6d 65 73 20 66 72 6f 6d 20  ways comes from 
1cbe0 61 20 70 72 69 6f 72 20 4f 50 5f 43 72 65 61 74  a prior OP_Creat
1cbf0 65 54 61 62 6c 65 20 6f 70 63 6f 64 65 20 61 6e  eTable opcode an
1cc00 64 0a 20 20 20 20 2a 2a 20 74 68 61 74 20 6f 70  d.    ** that op
1cc10 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61 79 73  code will always
1cc20 20 73 65 74 20 74 68 65 20 70 32 20 76 61 6c 75   set the p2 valu
1cc30 65 20 74 6f 20 32 20 6f 72 20 6d 6f 72 65 20 6f  e to 2 or more o
1cc40 72 20 65 6c 73 65 20 66 61 69 6c 2e 0a 20 20 20  r else fail..   
1cc50 20 2a 2a 20 49 66 20 74 68 65 72 65 20 77 65 72   ** If there wer
1cc60 65 20 61 20 66 61 69 6c 75 72 65 2c 20 74 68 65  e a failure, the
1cc70 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
1cc80 65 6e 74 20 77 6f 75 6c 64 20 68 61 76 65 20 68  ent would have h
1cc90 61 6c 74 65 64 0a 20 20 20 20 2a 2a 20 62 65 66  alted.    ** bef
1cca0 6f 72 65 20 72 65 61 63 68 69 6e 67 20 74 68 69  ore reaching thi
1ccb0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 2a  s instruction. *
1ccc0 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32  /.    assert( p2
1ccd0 3e 3d 32 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28  >=2 );.  }.  if(
1cce0 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
1ccf0 5f 4b 45 59 49 4e 46 4f 20 29 7b 0a 20 20 20 20  _KEYINFO ){.    
1cd00 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e  pKeyInfo = pOp->
1cd10 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20  p4.pKeyInfo;.   
1cd20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66   assert( pKeyInf
1cd30 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20  o->enc==ENC(db) 
1cd40 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
1cd50 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20  KeyInfo->db==db 
1cd60 29 3b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20  );.    nField = 
1cd70 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64  pKeyInfo->nField
1cd80 2b 70 4b 65 79 49 6e 66 6f 2d 3e 6e 58 46 69 65  +pKeyInfo->nXFie
1cd90 6c 64 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  ld;.  }else if( 
1cda0 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
1cdb0 49 4e 54 33 32 20 29 7b 0a 20 20 20 20 6e 46 69  INT32 ){.    nFi
1cdc0 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b  eld = pOp->p4.i;
1cdd0 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70  .  }.  assert( p
1cde0 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61  Op->p1>=0 );.  a
1cdf0 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 3d 30  ssert( nField>=0
1ce00 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
1ce10 6e 46 69 65 6c 64 3d 3d 30 20 29 3b 20 20 2f 2a  nField==0 );  /*
1ce20 20 54 61 62 6c 65 20 77 69 74 68 20 49 4e 54 45   Table with INTE
1ce30 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20  GER PRIMARY KEY 
1ce40 61 6e 64 20 6e 6f 74 68 69 6e 67 20 65 6c 73 65  and nothing else
1ce50 20 2a 2f 0a 20 20 70 43 75 72 20 3d 20 61 6c 6c   */.  pCur = all
1ce60 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70  ocateCursor(p, p
1ce70 4f 70 2d 3e 70 31 2c 20 6e 46 69 65 6c 64 2c 20  Op->p1, nField, 
1ce80 69 44 62 2c 20 43 55 52 54 59 50 45 5f 42 54 52  iDb, CURTYPE_BTR
1ce90 45 45 29 3b 0a 20 20 69 66 28 20 70 43 75 72 3d  EE);.  if( pCur=
1cea0 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
1ceb0 3b 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f  ;.  pCur->nullRo
1cec0 77 20 3d 20 31 3b 0a 20 20 70 43 75 72 2d 3e 69  w = 1;.  pCur->i
1ced0 73 4f 72 64 65 72 65 64 20 3d 20 31 3b 0a 20 20  sOrdered = 1;.  
1cee0 70 43 75 72 2d 3e 70 67 6e 6f 52 6f 6f 74 20 3d  pCur->pgnoRoot =
1cef0 20 70 32 3b 0a 23 69 66 64 65 66 20 53 51 4c 49   p2;.#ifdef SQLI
1cf00 54 45 5f 44 45 42 55 47 0a 20 20 70 43 75 72 2d  TE_DEBUG.  pCur-
1cf10 3e 77 72 46 6c 61 67 20 3d 20 77 72 46 6c 61 67  >wrFlag = wrFlag
1cf20 3b 0a 23 65 6e 64 69 66 0a 20 20 72 63 20 3d 20  ;.#endif.  rc = 
1cf30 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
1cf40 6f 72 28 70 58 2c 20 70 32 2c 20 77 72 46 6c 61  or(pX, p2, wrFla
1cf50 67 2c 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43 75  g, pKeyInfo, pCu
1cf60 72 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a  r->uc.pCursor);.
1cf70 20 20 70 43 75 72 2d 3e 70 4b 65 79 49 6e 66 6f    pCur->pKeyInfo
1cf80 20 3d 20 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 2f   = pKeyInfo;.  /
1cf90 2a 20 53 65 74 20 74 68 65 20 56 64 62 65 43 75  * Set the VdbeCu
1cfa0 72 73 6f 72 2e 69 73 54 61 62 6c 65 20 76 61 72  rsor.isTable var
1cfb0 69 61 62 6c 65 2e 20 50 72 65 76 69 6f 75 73 20  iable. Previous 
1cfc0 76 65 72 73 69 6f 6e 73 20 6f 66 0a 20 20 2a 2a  versions of.  **
1cfd0 20 53 51 4c 69 74 65 20 75 73 65 64 20 74 6f 20   SQLite used to 
1cfe0 63 68 65 63 6b 20 69 66 20 74 68 65 20 72 6f 6f  check if the roo
1cff0 74 2d 70 61 67 65 20 66 6c 61 67 73 20 77 65 72  t-page flags wer
1d000 65 20 73 61 6e 65 20 61 74 20 74 68 69 73 20 70  e sane at this p
1d010 6f 69 6e 74 0a 20 20 2a 2a 20 61 6e 64 20 72 65  oint.  ** and re
1d020 70 6f 72 74 20 64 61 74 61 62 61 73 65 20 63 6f  port database co
1d030 72 72 75 70 74 69 6f 6e 20 69 66 20 74 68 65 79  rruption if they
1d040 20 77 65 72 65 20 6e 6f 74 2c 20 62 75 74 20 74   were not, but t
1d050 68 69 73 20 63 68 65 63 6b 20 68 61 73 0a 20 20  his check has.  
1d060 2a 2a 20 73 69 6e 63 65 20 6d 6f 76 65 64 20 69  ** since moved i
1d070 6e 74 6f 20 74 68 65 20 62 74 72 65 65 20 6c 61  nto the btree la
1d080 79 65 72 2e 20 20 2a 2f 20 20 0a 20 20 70 43 75  yer.  */  .  pCu
1d090 72 2d 3e 69 73 54 61 62 6c 65 20 3d 20 70 4f 70  r->isTable = pOp
1d0a0 2d 3e 70 34 74 79 70 65 21 3d 50 34 5f 4b 45 59  ->p4type!=P4_KEY
1d0b0 49 4e 46 4f 3b 0a 0a 6f 70 65 6e 5f 63 75 72 73  INFO;..open_curs
1d0c0 6f 72 5f 73 65 74 5f 68 69 6e 74 73 3a 0a 20 20  or_set_hints:.  
1d0d0 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 42  assert( OPFLAG_B
1d0e0 55 4c 4b 43 53 52 3d 3d 42 54 52 45 45 5f 42 55  ULKCSR==BTREE_BU
1d0f0 4c 4b 4c 4f 41 44 20 29 3b 0a 20 20 61 73 73 65  LKLOAD );.  asse
1d100 72 74 28 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45  rt( OPFLAG_SEEKE
1d110 51 3d 3d 42 54 52 45 45 5f 53 45 45 4b 5f 45 51  Q==BTREE_SEEK_EQ
1d120 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
1d130 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
1d140 5f 42 55 4c 4b 43 53 52 20 29 3b 0a 23 69 66 64  _BULKCSR );.#ifd
1d150 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
1d160 5f 43 55 52 53 4f 52 5f 48 49 4e 54 53 0a 20 20  _CURSOR_HINTS.  
1d170 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70  testcase( pOp->p
1d180 32 20 26 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45  2 & OPFLAG_SEEKE
1d190 51 20 29 3b 0a 23 65 6e 64 69 66 0a 20 20 73 71  Q );.#endif.  sq
1d1a0 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
1d1b0 48 69 6e 74 46 6c 61 67 73 28 70 43 75 72 2d 3e  HintFlags(pCur->
1d1c0 75 63 2e 70 43 75 72 73 6f 72 2c 0a 20 20 20 20  uc.pCursor,.    
1d1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d1e0 20 20 20 20 20 20 20 20 20 20 20 28 70 4f 70 2d             (pOp-
1d1f0 3e 70 35 20 26 20 28 4f 50 46 4c 41 47 5f 42 55  >p5 & (OPFLAG_BU
1d200 4c 4b 43 53 52 7c 4f 50 46 4c 41 47 5f 53 45 45  LKCSR|OPFLAG_SEE
1d210 4b 45 51 29 29 29 3b 0a 20 20 69 66 28 20 72 63  KEQ)));.  if( rc
1d220 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
1d230 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72  e_to_error;.  br
1d240 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1d250 65 3a 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  e: OpenEphemeral
1d260 20 50 31 20 50 32 20 2a 20 50 34 20 50 35 0a 2a   P1 P2 * P4 P5.*
1d270 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c  * Synopsis: nCol
1d280 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 4f 70 65  umn=P2.**.** Ope
1d290 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20 50  n a new cursor P
1d2a0 31 20 74 6f 20 61 20 74 72 61 6e 73 69 65 6e 74  1 to a transient
1d2b0 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63   table..** The c
1d2c0 75 72 73 6f 72 20 69 73 20 61 6c 77 61 79 73 20  ursor is always 
1d2d0 6f 70 65 6e 65 64 20 72 65 61 64 2f 77 72 69 74  opened read/writ
1d2e0 65 20 65 76 65 6e 20 69 66 20 0a 2a 2a 20 74 68  e even if .** th
1d2f0 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
1d300 69 73 20 72 65 61 64 2d 6f 6e 6c 79 2e 20 20 54  is read-only.  T
1d310 68 65 20 65 70 68 65 6d 65 72 61 6c 0a 2a 2a 20  he ephemeral.** 
1d320 74 61 62 6c 65 20 69 73 20 64 65 6c 65 74 65 64  table is deleted
1d330 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 77   automatically w
1d340 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69  hen the cursor i
1d350 73 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20  s closed..**.** 
1d360 50 32 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72  P2 is the number
1d370 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
1d380 68 65 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62  he ephemeral tab
1d390 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f  le..** The curso
1d3a0 72 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 42 54  r points to a BT
1d3b0 72 65 65 20 74 61 62 6c 65 20 69 66 20 50 34 3d  ree table if P4=
1d3c0 3d 30 20 61 6e 64 20 74 6f 20 61 20 42 54 72 65  =0 and to a BTre
1d3d0 65 20 69 6e 64 65 78 0a 2a 2a 20 69 66 20 50 34  e index.** if P4
1d3e0 20 69 73 20 6e 6f 74 20 30 2e 20 20 49 66 20 50   is not 0.  If P
1d3f0 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69  4 is not NULL, i
1d400 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 4b 65  t points to a Ke
1d410 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 0a  yInfo structure.
1d420 2a 2a 20 74 68 61 74 20 64 65 66 69 6e 65 73 20  ** that defines 
1d430 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 6b 65  the format of ke
1d440 79 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 2e  ys in the index.
1d450 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 70 61  .**.** The P5 pa
1d460 72 61 6d 65 74 65 72 20 63 61 6e 20 62 65 20 61  rameter can be a
1d470 20 6d 61 73 6b 20 6f 66 20 74 68 65 20 42 54 52   mask of the BTR
1d480 45 45 5f 2a 20 66 6c 61 67 73 20 64 65 66 69 6e  EE_* flags defin
1d490 65 64 0a 2a 2a 20 69 6e 20 62 74 72 65 65 2e 68  ed.** in btree.h
1d4a0 2e 20 20 54 68 65 73 65 20 66 6c 61 67 73 20 63  .  These flags c
1d4b0 6f 6e 74 72 6f 6c 20 61 73 70 65 63 74 73 20 6f  ontrol aspects o
1d4c0 66 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20  f the operation 
1d4d0 6f 66 0a 2a 2a 20 74 68 65 20 62 74 72 65 65 2e  of.** the btree.
1d4e0 20 20 54 68 65 20 42 54 52 45 45 5f 4f 4d 49 54    The BTREE_OMIT
1d4f0 5f 4a 4f 55 52 4e 41 4c 20 61 6e 64 20 42 54 52  _JOURNAL and BTR
1d500 45 45 5f 53 49 4e 47 4c 45 20 66 6c 61 67 73 20  EE_SINGLE flags 
1d510 61 72 65 0a 2a 2a 20 61 64 64 65 64 20 61 75 74  are.** added aut
1d520 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2f 0a 2f  omatically..*/./
1d530 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 41 75  * Opcode: OpenAu
1d540 74 6f 69 6e 64 65 78 20 50 31 20 50 32 20 2a 20  toindex P1 P2 * 
1d550 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
1d560 3a 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a  : nColumn=P2.**.
1d570 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77  ** This opcode w
1d580 6f 72 6b 73 20 74 68 65 20 73 61 6d 65 20 61 73  orks the same as
1d590 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
1d5a0 6c 2e 20 20 49 74 20 68 61 73 20 61 0a 2a 2a 20  l.  It has a.** 
1d5b0 64 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 20 74  different name t
1d5c0 6f 20 64 69 73 74 69 6e 67 75 69 73 68 20 69 74  o distinguish it
1d5d0 73 20 75 73 65 2e 20 20 54 61 62 6c 65 73 20 63  s use.  Tables c
1d5e0 72 65 61 74 65 64 20 75 73 69 6e 67 0a 2a 2a 20  reated using.** 
1d5f0 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77  by this opcode w
1d600 69 6c 6c 20 62 65 20 75 73 65 64 20 66 6f 72 20  ill be used for 
1d610 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72  automatically cr
1d620 65 61 74 65 64 20 74 72 61 6e 73 69 65 6e 74 0a  eated transient.
1d630 2a 2a 20 69 6e 64 69 63 65 73 20 69 6e 20 6a 6f  ** indices in jo
1d640 69 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ins..*/.case OP_
1d650 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78 3a 20 0a  OpenAutoindex: .
1d660 63 61 73 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65  case OP_OpenEphe
1d670 6d 65 72 61 6c 3a 20 7b 0a 20 20 56 64 62 65 43  meral: {.  VdbeC
1d680 75 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20 4b 65  ursor *pCx;.  Ke
1d690 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b  yInfo *pKeyInfo;
1d6a0 0a 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74  ..  static const
1d6b0 20 69 6e 74 20 76 66 73 46 6c 61 67 73 20 3d 20   int vfsFlags = 
1d6c0 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50  .      SQLITE_OP
1d6d0 45 4e 5f 52 45 41 44 57 52 49 54 45 20 7c 0a 20  EN_READWRITE |. 
1d6e0 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e       SQLITE_OPEN
1d6f0 5f 43 52 45 41 54 45 20 7c 0a 20 20 20 20 20 20  _CREATE |.      
1d700 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 45 58 43 4c  SQLITE_OPEN_EXCL
1d710 55 53 49 56 45 20 7c 0a 20 20 20 20 20 20 53 51  USIVE |.      SQ
1d720 4c 49 54 45 5f 4f 50 45 4e 5f 44 45 4c 45 54 45  LITE_OPEN_DELETE
1d730 4f 4e 43 4c 4f 53 45 20 7c 0a 20 20 20 20 20 20  ONCLOSE |.      
1d740 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 54 52 41 4e  SQLITE_OPEN_TRAN
1d750 53 49 45 4e 54 5f 44 42 3b 0a 20 20 61 73 73 65  SIENT_DB;.  asse
1d760 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29  rt( pOp->p1>=0 )
1d770 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1d780 3e 70 32 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20  >p2>=0 );.  pCx 
1d790 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72  = allocateCursor
1d7a0 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  (p, pOp->p1, pOp
1d7b0 2d 3e 70 32 2c 20 2d 31 2c 20 43 55 52 54 59 50  ->p2, -1, CURTYP
1d7c0 45 5f 42 54 52 45 45 29 3b 0a 20 20 69 66 28 20  E_BTREE);.  if( 
1d7d0 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  pCx==0 ) goto no
1d7e0 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c  _mem;.  pCx->nul
1d7f0 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d  lRow = 1;.  pCx-
1d800 3e 69 73 45 70 68 65 6d 65 72 61 6c 20 3d 20 31  >isEphemeral = 1
1d810 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
1d820 42 74 72 65 65 4f 70 65 6e 28 64 62 2d 3e 70 56  BtreeOpen(db->pV
1d830 66 73 2c 20 30 2c 20 64 62 2c 20 26 70 43 78 2d  fs, 0, db, &pCx-
1d840 3e 70 42 74 78 2c 20 0a 20 20 20 20 20 20 20 20  >pBtx, .        
1d850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d860 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e  BTREE_OMIT_JOURN
1d870 41 4c 20 7c 20 42 54 52 45 45 5f 53 49 4e 47 4c  AL | BTREE_SINGL
1d880 45 20 7c 20 70 4f 70 2d 3e 70 35 2c 20 76 66 73  E | pOp->p5, vfs
1d890 46 6c 61 67 73 29 3b 0a 20 20 69 66 28 20 72 63  Flags);.  if( rc
1d8a0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
1d8b0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1d8c0 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70  treeBeginTrans(p
1d8d0 43 78 2d 3e 70 42 74 78 2c 20 31 29 3b 0a 20 20  Cx->pBtx, 1);.  
1d8e0 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  }.  if( rc==SQLI
1d8f0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 2f 2a 20  TE_OK ){.    /* 
1d900 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20 69  If a transient i
1d910 6e 64 65 78 20 69 73 20 72 65 71 75 69 72 65 64  ndex is required
1d920 2c 20 63 72 65 61 74 65 20 69 74 20 62 79 20 63  , create it by c
1d930 61 6c 6c 69 6e 67 0a 20 20 20 20 2a 2a 20 73 71  alling.    ** sq
1d940 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65  lite3BtreeCreate
1d950 54 61 62 6c 65 28 29 20 77 69 74 68 20 74 68 65  Table() with the
1d960 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 66   BTREE_BLOBKEY f
1d970 6c 61 67 20 62 65 66 6f 72 65 0a 20 20 20 20 2a  lag before.    *
1d980 2a 20 6f 70 65 6e 69 6e 67 20 69 74 2e 20 49 66  * opening it. If
1d990 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62   a transient tab
1d9a0 6c 65 20 69 73 20 72 65 71 75 69 72 65 64 2c 20  le is required, 
1d9b0 6a 75 73 74 20 75 73 65 20 74 68 65 0a 20 20 20  just use the.   
1d9c0 20 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c   ** automaticall
1d9d0 79 20 63 72 65 61 74 65 64 20 74 61 62 6c 65 20  y created table 
1d9e0 77 69 74 68 20 72 6f 6f 74 2d 70 61 67 65 20 31  with root-page 1
1d9f0 20 28 61 6e 20 42 4c 4f 42 5f 49 4e 54 4b 45 59   (an BLOB_INTKEY
1da00 20 74 61 62 6c 65 29 2e 0a 20 20 20 20 2a 2f 0a   table)..    */.
1da10 20 20 20 20 69 66 28 20 28 70 43 78 2d 3e 70 4b      if( (pCx->pK
1da20 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66  eyInfo = pKeyInf
1da30 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79  o = pOp->p4.pKey
1da40 49 6e 66 6f 29 21 3d 30 20 29 7b 0a 20 20 20 20  Info)!=0 ){.    
1da50 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 20 20    int pgno;.    
1da60 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1da70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46  4type==P4_KEYINF
1da80 4f 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  O );.      rc = 
1da90 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65 61  sqlite3BtreeCrea
1daa0 74 65 54 61 62 6c 65 28 70 43 78 2d 3e 70 42 74  teTable(pCx->pBt
1dab0 78 2c 20 26 70 67 6e 6f 2c 20 42 54 52 45 45 5f  x, &pgno, BTREE_
1dac0 42 4c 4f 42 4b 45 59 20 7c 20 70 4f 70 2d 3e 70  BLOBKEY | pOp->p
1dad0 35 29 3b 20 0a 20 20 20 20 20 20 69 66 28 20 72  5); .      if( r
1dae0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
1daf0 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1db00 70 67 6e 6f 3d 3d 4d 41 53 54 45 52 5f 52 4f 4f  pgno==MASTER_ROO
1db10 54 2b 31 20 29 3b 0a 20 20 20 20 20 20 20 20 61  T+1 );.        a
1db20 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d  ssert( pKeyInfo-
1db30 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20 20 20 20  >db==db );.     
1db40 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49     assert( pKeyI
1db50 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62  nfo->enc==ENC(db
1db60 29 20 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20  ) );.        rc 
1db70 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  = sqlite3BtreeCu
1db80 72 73 6f 72 28 70 43 78 2d 3e 70 42 74 78 2c 20  rsor(pCx->pBtx, 
1db90 70 67 6e 6f 2c 20 42 54 52 45 45 5f 57 52 43 53  pgno, BTREE_WRCS
1dba0 52 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  R,.             
1dbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dbc0 20 20 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43 78     pKeyInfo, pCx
1dbd0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20  ->uc.pCursor);. 
1dbe0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 43 78       }.      pCx
1dbf0 2d 3e 69 73 54 61 62 6c 65 20 3d 20 30 3b 0a 20  ->isTable = 0;. 
1dc00 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1dc10 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1dc20 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74  eCursor(pCx->pBt
1dc30 78 2c 20 4d 41 53 54 45 52 5f 52 4f 4f 54 2c 20  x, MASTER_ROOT, 
1dc40 42 54 52 45 45 5f 57 52 43 53 52 2c 0a 20 20 20  BTREE_WRCSR,.   
1dc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc60 20 20 20 20 20 20 20 20 20 20 20 30 2c 20 70 43             0, pC
1dc70 78 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a  x->uc.pCursor);.
1dc80 20 20 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62        pCx->isTab
1dc90 6c 65 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20  le = 1;.    }.  
1dca0 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  }.  if( rc ) got
1dcb0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1dcc0 72 72 6f 72 3b 0a 20 20 70 43 78 2d 3e 69 73 4f  rror;.  pCx->isO
1dcd0 72 64 65 72 65 64 20 3d 20 28 70 4f 70 2d 3e 70  rdered = (pOp->p
1dce0 35 21 3d 42 54 52 45 45 5f 55 4e 4f 52 44 45 52  5!=BTREE_UNORDER
1dcf0 45 44 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ED);.  break;.}.
1dd00 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74  ./* Opcode: Sort
1dd10 65 72 4f 70 65 6e 20 50 31 20 50 32 20 50 33 20  erOpen P1 P2 P3 
1dd20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  P4 *.**.** This 
1dd30 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6c 69 6b  opcode works lik
1dd40 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72  e OP_OpenEphemer
1dd50 61 6c 20 65 78 63 65 70 74 20 74 68 61 74 20 69  al except that i
1dd60 74 20 6f 70 65 6e 73 0a 2a 2a 20 61 20 74 72 61  t opens.** a tra
1dd70 6e 73 69 65 6e 74 20 69 6e 64 65 78 20 74 68 61  nsient index tha
1dd80 74 20 69 73 20 73 70 65 63 69 66 69 63 61 6c 6c  t is specificall
1dd90 79 20 64 65 73 69 67 6e 65 64 20 74 6f 20 73 6f  y designed to so
1dda0 72 74 20 6c 61 72 67 65 0a 2a 2a 20 74 61 62 6c  rt large.** tabl
1ddb0 65 73 20 75 73 69 6e 67 20 61 6e 20 65 78 74 65  es using an exte
1ddc0 72 6e 61 6c 20 6d 65 72 67 65 2d 73 6f 72 74 20  rnal merge-sort 
1ddd0 61 6c 67 6f 72 69 74 68 6d 2e 0a 2a 2a 0a 2a 2a  algorithm..**.**
1dde0 20 49 66 20 61 72 67 75 6d 65 6e 74 20 50 33 20   If argument P3 
1ddf0 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
1de00 6e 20 69 74 20 69 6e 64 69 63 61 74 65 73 20 74  n it indicates t
1de10 68 61 74 20 74 68 65 20 73 6f 72 74 65 72 20 6d  hat the sorter m
1de20 61 79 0a 2a 2a 20 61 73 73 75 6d 65 20 74 68 61  ay.** assume tha
1de30 74 20 61 20 73 74 61 62 6c 65 20 73 6f 72 74 20  t a stable sort 
1de40 63 6f 6e 73 69 64 65 72 69 6e 67 20 74 68 65 20  considering the 
1de50 66 69 72 73 74 20 50 33 20 66 69 65 6c 64 73 20  first P3 fields 
1de60 6f 66 20 65 61 63 68 0a 2a 2a 20 6b 65 79 20 69  of each.** key i
1de70 73 20 73 75 66 66 69 63 69 65 6e 74 20 74 6f 20  s sufficient to 
1de80 70 72 6f 64 75 63 65 20 74 68 65 20 72 65 71 75  produce the requ
1de90 69 72 65 64 20 72 65 73 75 6c 74 73 2e 0a 2a 2f  ired results..*/
1dea0 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 4f  .case OP_SorterO
1deb0 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  pen: {.  VdbeCur
1dec0 73 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 61 73 73  sor *pCx;..  ass
1ded0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1dee0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
1def0 2d 3e 70 32 3e 3d 30 20 29 3b 0a 20 20 70 43 78  ->p2>=0 );.  pCx
1df00 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f   = allocateCurso
1df10 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  r(p, pOp->p1, pO
1df20 70 2d 3e 70 32 2c 20 2d 31 2c 20 43 55 52 54 59  p->p2, -1, CURTY
1df30 50 45 5f 53 4f 52 54 45 52 29 3b 0a 20 20 69 66  PE_SORTER);.  if
1df40 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20  ( pCx==0 ) goto 
1df50 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 70  no_mem;.  pCx->p
1df60 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70  KeyInfo = pOp->p
1df70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73  4.pKeyInfo;.  as
1df80 73 65 72 74 28 20 70 43 78 2d 3e 70 4b 65 79 49  sert( pCx->pKeyI
1df90 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20  nfo->db==db );. 
1dfa0 20 61 73 73 65 72 74 28 20 70 43 78 2d 3e 70 4b   assert( pCx->pK
1dfb0 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43  eyInfo->enc==ENC
1dfc0 28 64 62 29 20 29 3b 0a 20 20 72 63 20 3d 20 73  (db) );.  rc = s
1dfd0 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72  qlite3VdbeSorter
1dfe0 49 6e 69 74 28 64 62 2c 20 70 4f 70 2d 3e 70 33  Init(db, pOp->p3
1dff0 2c 20 70 43 78 29 3b 0a 20 20 69 66 28 20 72 63  , pCx);.  if( rc
1e000 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
1e010 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72  e_to_error;.  br
1e020 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1e030 65 3a 20 53 65 71 75 65 6e 63 65 54 65 73 74 20  e: SequenceTest 
1e040 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
1e050 79 6e 6f 70 73 69 73 3a 20 69 66 28 20 63 75 72  ynopsis: if( cur
1e060 73 6f 72 5b 50 31 5d 2e 63 74 72 2b 2b 20 29 20  sor[P1].ctr++ ) 
1e070 70 63 20 3d 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31  pc = P2.**.** P1
1e080 20 69 73 20 61 20 73 6f 72 74 65 72 20 63 75 72   is a sorter cur
1e090 73 6f 72 2e 20 49 66 20 74 68 65 20 73 65 71 75  sor. If the sequ
1e0a0 65 6e 63 65 20 63 6f 75 6e 74 65 72 20 69 73 20  ence counter is 
1e0b0 63 75 72 72 65 6e 74 6c 79 20 7a 65 72 6f 2c 20  currently zero, 
1e0c0 6a 75 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e 20 52  jump.** to P2. R
1e0d0 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65  egardless of whe
1e0e0 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20  ther or not the 
1e0f0 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 69  jump is taken, i
1e100 6e 63 72 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20  ncrement the.** 
1e110 74 68 65 20 73 65 71 75 65 6e 63 65 20 76 61 6c  the sequence val
1e120 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ue..*/.case OP_S
1e130 65 71 75 65 6e 63 65 54 65 73 74 3a 20 7b 0a 20  equenceTest: {. 
1e140 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
1e150 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1e160 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
1e170 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1e180 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
1e190 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
1e1a0 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20  t( isSorter(pC) 
1e1b0 29 3b 0a 20 20 69 66 28 20 28 70 43 2d 3e 73 65  );.  if( (pC->se
1e1c0 71 43 6f 75 6e 74 2b 2b 29 3d 3d 30 20 29 7b 0a  qCount++)==0 ){.
1e1d0 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f      goto jump_to
1e1e0 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  _p2;.  }.  break
1e1f0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1e200 4f 70 65 6e 50 73 65 75 64 6f 20 50 31 20 50 32  OpenPseudo P1 P2
1e210 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
1e220 73 69 73 3a 20 50 33 20 63 6f 6c 75 6d 6e 73 20  sis: P3 columns 
1e230 69 6e 20 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 4f  in r[P2].**.** O
1e240 70 65 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72  pen a new cursor
1e250 20 74 68 61 74 20 70 6f 69 6e 74 73 20 74 6f 20   that points to 
1e260 61 20 66 61 6b 65 20 74 61 62 6c 65 20 74 68 61  a fake table tha
1e270 74 20 63 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e  t contains a sin
1e280 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 66 20 64 61  gle.** row of da
1e290 74 61 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e 74  ta.  The content
1e2a0 20 6f 66 20 74 68 61 74 20 6f 6e 65 20 72 6f 77   of that one row
1e2b0 20 69 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   is the content 
1e2c0 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 72 65 67  of memory.** reg
1e2d0 69 73 74 65 72 20 50 32 2e 20 20 49 6e 20 6f 74  ister P2.  In ot
1e2e0 68 65 72 20 77 6f 72 64 73 2c 20 63 75 72 73 6f  her words, curso
1e2f0 72 20 50 31 20 62 65 63 6f 6d 65 73 20 61 6e 20  r P1 becomes an 
1e300 61 6c 69 61 73 20 66 6f 72 20 74 68 65 20 0a 2a  alias for the .*
1e310 2a 20 4d 45 4d 5f 42 6c 6f 62 20 63 6f 6e 74 65  * MEM_Blob conte
1e320 6e 74 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  nt contained in 
1e330 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
1e340 2a 2a 20 41 20 70 73 65 75 64 6f 2d 74 61 62 6c  ** A pseudo-tabl
1e350 65 20 63 72 65 61 74 65 64 20 62 79 20 74 68 69  e created by thi
1e360 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64  s opcode is used
1e370 20 74 6f 20 68 6f 6c 64 20 61 20 73 69 6e 67 6c   to hold a singl
1e380 65 0a 2a 2a 20 72 6f 77 20 6f 75 74 70 75 74 20  e.** row output 
1e390 66 72 6f 6d 20 74 68 65 20 73 6f 72 74 65 72 20  from the sorter 
1e3a0 73 6f 20 74 68 61 74 20 74 68 65 20 72 6f 77 20  so that the row 
1e3b0 63 61 6e 20 62 65 20 64 65 63 6f 6d 70 6f 73 65  can be decompose
1e3c0 64 20 69 6e 74 6f 0a 2a 2a 20 69 6e 64 69 76 69  d into.** indivi
1e3d0 64 75 61 6c 20 63 6f 6c 75 6d 6e 73 20 75 73 69  dual columns usi
1e3e0 6e 67 20 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e  ng the OP_Column
1e3f0 20 6f 70 63 6f 64 65 2e 20 20 54 68 65 20 4f 50   opcode.  The OP
1e400 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 0a 2a  _Column opcode.*
1e410 2a 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 63 75  * is the only cu
1e420 72 73 6f 72 20 6f 70 63 6f 64 65 20 74 68 61 74  rsor opcode that
1e430 20 77 6f 72 6b 73 20 77 69 74 68 20 61 20 70 73   works with a ps
1e440 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  eudo-table..**.*
1e450 2a 20 50 33 20 69 73 20 74 68 65 20 6e 75 6d 62  * P3 is the numb
1e460 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20  er of fields in 
1e470 74 68 65 20 72 65 63 6f 72 64 73 20 74 68 61 74  the records that
1e480 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20   will be stored 
1e490 62 79 0a 2a 2a 20 74 68 65 20 70 73 65 75 64 6f  by.** the pseudo
1e4a0 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20  -table..*/.case 
1e4b0 4f 50 5f 4f 70 65 6e 50 73 65 75 64 6f 3a 20 7b  OP_OpenPseudo: {
1e4c0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1e4d0 43 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  Cx;..  assert( p
1e4e0 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61  Op->p1>=0 );.  a
1e4f0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d  ssert( pOp->p3>=
1e500 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c  0 );.  pCx = all
1e510 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70  ocateCursor(p, p
1e520 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 33 2c  Op->p1, pOp->p3,
1e530 20 2d 31 2c 20 43 55 52 54 59 50 45 5f 50 53 45   -1, CURTYPE_PSE
1e540 55 44 4f 29 3b 0a 20 20 69 66 28 20 70 43 78 3d  UDO);.  if( pCx=
1e550 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
1e560 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77  ;.  pCx->nullRow
1e570 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 75 63 2e   = 1;.  pCx->uc.
1e580 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 20 3d  pseudoTableReg =
1e590 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 43 78 2d   pOp->p2;.  pCx-
1e5a0 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20  >isTable = 1;.  
1e5b0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d  assert( pOp->p5=
1e5c0 3d 30 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  =0 );.  break;.}
1e5d0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 6f  ../* Opcode: Clo
1e5e0 73 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  se P1 * * * *.**
1e5f0 0a 2a 2a 20 43 6c 6f 73 65 20 61 20 63 75 72 73  .** Close a curs
1e600 6f 72 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 70  or previously op
1e610 65 6e 65 64 20 61 73 20 50 31 2e 20 20 49 66 20  ened as P1.  If 
1e620 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 63 75 72  P1 is not.** cur
1e630 72 65 6e 74 6c 79 20 6f 70 65 6e 2c 20 74 68 69  rently open, thi
1e640 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73  s instruction is
1e650 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73   a no-op..*/.cas
1e660 65 20 4f 50 5f 43 6c 6f 73 65 3a 20 7b 0a 20 20  e OP_Close: {.  
1e670 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1e680 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
1e690 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 73 71  >nCursor );.  sq
1e6a0 6c 69 74 65 33 56 64 62 65 46 72 65 65 43 75 72  lite3VdbeFreeCur
1e6b0 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b  sor(p, p->apCsr[
1e6c0 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20 70 2d 3e  pOp->p1]);.  p->
1e6d0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 20 3d  apCsr[pOp->p1] =
1e6e0 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   0;.  break;.}..
1e6f0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
1e700 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 55 53 45 44  ABLE_COLUMN_USED
1e710 5f 4d 41 53 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a  _MASK./* Opcode:
1e720 20 43 6f 6c 75 6d 6e 73 55 73 65 64 20 50 31 20   ColumnsUsed P1 
1e730 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54  * * P4 *.**.** T
1e740 68 69 73 20 6f 70 63 6f 64 65 20 28 77 68 69 63  his opcode (whic
1e750 68 20 6f 6e 6c 79 20 65 78 69 73 74 73 20 69 66  h only exists if
1e760 20 53 51 4c 69 74 65 20 77 61 73 20 63 6f 6d 70   SQLite was comp
1e770 69 6c 65 64 20 77 69 74 68 0a 2a 2a 20 53 51 4c  iled with.** SQL
1e780 49 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d  ITE_ENABLE_COLUM
1e790 4e 5f 55 53 45 44 5f 4d 41 53 4b 29 20 69 64 65  N_USED_MASK) ide
1e7a0 6e 74 69 66 69 65 73 20 77 68 69 63 68 20 63 6f  ntifies which co
1e7b0 6c 75 6d 6e 73 20 6f 66 20 74 68 65 0a 2a 2a 20  lumns of the.** 
1e7c0 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 66  table or index f
1e7d0 6f 72 20 63 75 72 73 6f 72 20 50 31 20 61 72 65  or cursor P1 are
1e7e0 20 75 73 65 64 2e 20 20 50 34 20 69 73 20 61 20   used.  P4 is a 
1e7f0 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72 0a 2a  64-bit integer.*
1e800 2a 20 28 50 34 5f 49 4e 54 36 34 29 20 69 6e 20  * (P4_INT64) in 
1e810 77 68 69 63 68 20 74 68 65 20 66 69 72 73 74 20  which the first 
1e820 36 33 20 62 69 74 73 20 61 72 65 20 6f 6e 65 20  63 bits are one 
1e830 66 6f 72 20 65 61 63 68 20 6f 66 20 74 68 65 0a  for each of the.
1e840 2a 2a 20 66 69 72 73 74 20 36 33 20 63 6f 6c 75  ** first 63 colu
1e850 6d 6e 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65  mns of the table
1e860 20 6f 72 20 69 6e 64 65 78 20 74 68 61 74 20 61   or index that a
1e870 72 65 20 61 63 74 75 61 6c 6c 79 20 75 73 65 64  re actually used
1e880 0a 2a 2a 20 62 79 20 74 68 65 20 63 75 72 73 6f  .** by the curso
1e890 72 2e 20 20 54 68 65 20 68 69 67 68 2d 6f 72 64  r.  The high-ord
1e8a0 65 72 20 62 69 74 20 69 73 20 73 65 74 20 69 66  er bit is set if
1e8b0 20 61 6e 79 20 63 6f 6c 75 6d 6e 20 61 66 74 65   any column afte
1e8c0 72 0a 2a 2a 20 74 68 65 20 36 34 74 68 20 69 73  r.** the 64th is
1e8d0 20 75 73 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f   used..*/.case O
1e8e0 50 5f 43 6f 6c 75 6d 6e 73 55 73 65 64 3a 20 7b  P_ColumnsUsed: {
1e8f0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1e900 43 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  C;.  pC = p->apC
1e910 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
1e920 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
1e930 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
1e940 45 45 20 29 3b 0a 20 20 70 43 2d 3e 6d 61 73 6b  EE );.  pC->mask
1e950 55 73 65 64 20 3d 20 2a 28 75 36 34 2a 29 70 4f  Used = *(u64*)pO
1e960 70 2d 3e 70 34 2e 70 49 36 34 3b 0a 20 20 62 72  p->p4.pI64;.  br
1e970 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f  eak;.}.#endif../
1e980 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 45  * Opcode: SeekGE
1e990 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
1e9a0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
1e9b0 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49  r[P3@P4].**.** I
1e9c0 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1e9d0 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62  rs to an SQL tab
1e9e0 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20  le (B-Tree that 
1e9f0 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79  uses integer key
1ea00 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20  s), .** use the 
1ea10 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
1ea20 72 20 50 33 20 61 73 20 74 68 65 20 6b 65 79 2e  r P3 as the key.
1ea30 20 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72    If cursor P1 r
1ea40 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20  efers .** to an 
1ea50 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20  SQL index, then 
1ea60 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P3 is the first 
1ea70 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50  in an array of P
1ea80 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20  4 registers .** 
1ea90 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73  that are used as
1eaa0 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
1eab0 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52  ex key. .**.** R
1eac0 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72  eposition cursor
1ead0 20 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20   P1 so that  it 
1eae0 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d  points to the sm
1eaf0 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61  allest entry tha
1eb00 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72  t .** is greater
1eb10 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
1eb20 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e  o the key value.
1eb30 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   If there are no
1eb40 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 67 72 65   records .** gre
1eb50 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75  ater than or equ
1eb60 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e  al to the key an
1eb70 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f  d P2 is not zero
1eb80 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  , then jump to P
1eb90 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  2..**.** If the 
1eba0 63 75 72 73 6f 72 20 50 31 20 77 61 73 20 6f 70  cursor P1 was op
1ebb0 65 6e 65 64 20 75 73 69 6e 67 20 74 68 65 20 4f  ened using the O
1ebc0 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 66 6c 61  PFLAG_SEEKEQ fla
1ebd0 67 2c 20 74 68 65 6e 20 74 68 69 73 0a 2a 2a 20  g, then this.** 
1ebe0 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61  opcode will alwa
1ebf0 79 73 20 6c 61 6e 64 20 6f 6e 20 61 20 72 65 63  ys land on a rec
1ec00 6f 72 64 20 74 68 61 74 20 65 71 75 61 6c 6c 79  ord that equally
1ec10 20 65 71 75 61 6c 73 20 74 68 65 20 6b 65 79 2c   equals the key,
1ec20 20 6f 72 0a 2a 2a 20 65 6c 73 65 20 6a 75 6d 70   or.** else jump
1ec30 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
1ec40 50 32 2e 20 20 57 68 65 6e 20 74 68 65 20 63 75  P2.  When the cu
1ec50 72 73 6f 72 20 69 73 20 4f 50 46 4c 41 47 5f 53  rsor is OPFLAG_S
1ec60 45 45 4b 45 51 2c 20 74 68 69 73 0a 2a 2a 20 6f  EEKEQ, this.** o
1ec70 70 63 6f 64 65 20 6d 75 73 74 20 62 65 20 66 6f  pcode must be fo
1ec80 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20 49 64 78  llowed by an Idx
1ec90 4c 45 20 6f 70 63 6f 64 65 20 77 69 74 68 20 74  LE opcode with t
1eca0 68 65 20 73 61 6d 65 20 61 72 67 75 6d 65 6e 74  he same argument
1ecb0 73 2e 0a 2a 2a 20 54 68 65 20 49 64 78 4c 45 20  s..** The IdxLE 
1ecc0 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 73  opcode will be s
1ecd0 6b 69 70 70 65 64 20 69 66 20 74 68 69 73 20 6f  kipped if this o
1ece0 70 63 6f 64 65 20 73 75 63 63 65 65 64 73 2c 20  pcode succeeds, 
1ecf0 62 75 74 20 74 68 65 0a 2a 2a 20 49 64 78 4c 45  but the.** IdxLE
1ed00 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20   opcode will be 
1ed10 75 73 65 64 20 6f 6e 20 73 75 62 73 65 71 75 65  used on subseque
1ed20 6e 74 20 6c 6f 6f 70 20 69 74 65 72 61 74 69 6f  nt loop iteratio
1ed30 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  ns..**.** This o
1ed40 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65  pcode leaves the
1ed50 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72   cursor configur
1ed60 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66 6f  ed to move in fo
1ed70 72 77 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a 20  rward order,.** 
1ed80 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69  from the beginni
1ed90 6e 67 20 74 6f 77 61 72 64 20 74 68 65 20 65 6e  ng toward the en
1eda0 64 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  d.  In other wor
1edb0 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69  ds, the cursor i
1edc0 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20  s.** configured 
1edd0 74 6f 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f 74  to use Next, not
1ede0 20 50 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53 65 65   Prev..**.** See
1edf0 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
1ee00 74 46 6f 75 6e 64 2c 20 53 65 65 6b 4c 74 2c 20  tFound, SeekLt, 
1ee10 53 65 65 6b 47 74 2c 20 53 65 65 6b 4c 65 0a 2a  SeekGt, SeekLe.*
1ee20 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65  /./* Opcode: See
1ee30 6b 47 54 20 50 31 20 50 32 20 50 33 20 50 34 20  kGT P1 P2 P3 P4 
1ee40 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  *.** Synopsis: k
1ee50 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
1ee60 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72  * If cursor P1 r
1ee70 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20  efers to an SQL 
1ee80 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68  table (B-Tree th
1ee90 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20  at uses integer 
1eea0 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74  keys), .** use t
1eeb0 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
1eec0 73 74 65 72 20 50 33 20 61 73 20 61 20 6b 65 79  ster P3 as a key
1eed0 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72  . If cursor P1 r
1eee0 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20  efers .** to an 
1eef0 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20  SQL index, then 
1ef00 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P3 is the first 
1ef10 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50  in an array of P
1ef20 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20  4 registers .** 
1ef30 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73  that are used as
1ef40 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
1ef50 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52  ex key. .**.** R
1ef60 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72  eposition cursor
1ef70 20 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20   P1 so that  it 
1ef80 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d  points to the sm
1ef90 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61  allest entry tha
1efa0 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72  t .** is greater
1efb0 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61   than the key va
1efc0 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72  lue. If there ar
1efd0 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 67 72 65  e no records gre
1efe0 61 74 65 72 20 74 68 61 6e 20 0a 2a 2a 20 74 68  ater than .** th
1eff0 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20  e key and P2 is 
1f000 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a  not zero, then j
1f010 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ump to P2..**.**
1f020 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61   This opcode lea
1f030 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63  ves the cursor c
1f040 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76  onfigured to mov
1f050 65 20 69 6e 20 66 6f 72 77 61 72 64 20 6f 72 64  e in forward ord
1f060 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20  er,.** from the 
1f070 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64  beginning toward
1f080 20 74 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74   the end.  In ot
1f090 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63  her words, the c
1f0a0 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66  ursor is.** conf
1f0b0 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 4e 65  igured to use Ne
1f0c0 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2a  xt, not Prev..**
1f0d0 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
1f0e0 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53  und, NotFound, S
1f0f0 65 65 6b 4c 74 2c 20 53 65 65 6b 47 65 2c 20 53  eekLt, SeekGe, S
1f100 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  eekLe.*/./* Opco
1f110 64 65 3a 20 53 65 65 6b 4c 54 20 50 31 20 50 32  de: SeekLT P1 P2
1f120 20 50 33 20 50 34 20 2a 20 0a 2a 2a 20 53 79 6e   P3 P4 * .** Syn
1f130 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
1f140 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72  P4].**.** If cur
1f150 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f  sor P1 refers to
1f160 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42   an SQL table (B
1f170 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20  -Tree that uses 
1f180 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a  integer keys), .
1f190 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65  ** use the value
1f1a0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
1f1b0 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72  as a key. If cur
1f1c0 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a  sor P1 refers .*
1f1d0 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65  * to an SQL inde
1f1e0 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68  x, then P3 is th
1f1f0 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72  e first in an ar
1f200 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74  ray of P4 regist
1f210 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65  ers .** that are
1f220 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61   used as an unpa
1f230 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20  cked index key. 
1f240 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f  .**.** Repositio
1f250 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74  n cursor P1 so t
1f260 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74  hat  it points t
1f270 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e  o the largest en
1f280 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20  try that .** is 
1f290 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65  less than the ke
1f2a0 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72  y value. If ther
1f2b0 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73  e are no records
1f2c0 20 6c 65 73 73 20 74 68 61 6e 20 0a 2a 2a 20 74   less than .** t
1f2d0 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73  he key and P2 is
1f2e0 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20   not zero, then 
1f2f0 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a  jump to P2..**.*
1f300 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65  * This opcode le
1f310 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20  aves the cursor 
1f320 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f  configured to mo
1f330 76 65 20 69 6e 20 72 65 76 65 72 73 65 20 6f 72  ve in reverse or
1f340 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65  der,.** from the
1f350 20 65 6e 64 20 74 6f 77 61 72 64 20 74 68 65 20   end toward the 
1f360 62 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f  beginning.  In o
1f370 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
1f380 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e  cursor is.** con
1f390 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 50  figured to use P
1f3a0 72 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a  rev, not Next..*
1f3b0 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
1f3c0 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20  ound, NotFound, 
1f3d0 53 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20  SeekGt, SeekGe, 
1f3e0 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63  SeekLe.*/./* Opc
1f3f0 6f 64 65 3a 20 53 65 65 6b 4c 45 20 50 31 20 50  ode: SeekLE P1 P
1f400 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
1f410 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
1f420 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72  P4].**.** If cur
1f430 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f  sor P1 refers to
1f440 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42   an SQL table (B
1f450 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20  -Tree that uses 
1f460 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a  integer keys), .
1f470 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65  ** use the value
1f480 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
1f490 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72  as a key. If cur
1f4a0 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a  sor P1 refers .*
1f4b0 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65  * to an SQL inde
1f4c0 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68  x, then P3 is th
1f4d0 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72  e first in an ar
1f4e0 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74  ray of P4 regist
1f4f0 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65  ers .** that are
1f500 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61   used as an unpa
1f510 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20  cked index key. 
1f520 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f  .**.** Repositio
1f530 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74  n cursor P1 so t
1f540 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  hat it points to
1f550 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74   the largest ent
1f560 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c  ry that .** is l
1f570 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ess than or equa
1f580 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c  l to the key val
1f590 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65  ue. If there are
1f5a0 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20   no records .** 
1f5b0 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75  less than or equ
1f5c0 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e  al to the key an
1f5d0 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f  d P2 is not zero
1f5e0 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  , then jump to P
1f5f0 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  2..**.** This op
1f600 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20  code leaves the 
1f610 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65  cursor configure
1f620 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76  d to move in rev
1f630 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66  erse order,.** f
1f640 72 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f 77 61  rom the end towa
1f650 72 64 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  rd the beginning
1f660 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
1f670 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  s, the cursor is
1f680 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74  .** configured t
1f690 6f 20 75 73 65 20 50 72 65 76 2c 20 6e 6f 74 20  o use Prev, not 
1f6a0 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  Next..**.** If t
1f6b0 68 65 20 63 75 72 73 6f 72 20 50 31 20 77 61 73  he cursor P1 was
1f6c0 20 6f 70 65 6e 65 64 20 75 73 69 6e 67 20 74 68   opened using th
1f6d0 65 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20  e OPFLAG_SEEKEQ 
1f6e0 66 6c 61 67 2c 20 74 68 65 6e 20 74 68 69 73 0a  flag, then this.
1f6f0 2a 2a 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61  ** opcode will a
1f700 6c 77 61 79 73 20 6c 61 6e 64 20 6f 6e 20 61 20  lways land on a 
1f710 72 65 63 6f 72 64 20 74 68 61 74 20 65 71 75 61  record that equa
1f720 6c 6c 79 20 65 71 75 61 6c 73 20 74 68 65 20 6b  lly equals the k
1f730 65 79 2c 20 6f 72 0a 2a 2a 20 65 6c 73 65 20 6a  ey, or.** else j
1f740 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ump immediately 
1f750 74 6f 20 50 32 2e 20 20 57 68 65 6e 20 74 68 65  to P2.  When the
1f760 20 63 75 72 73 6f 72 20 69 73 20 4f 50 46 4c 41   cursor is OPFLA
1f770 47 5f 53 45 45 4b 45 51 2c 20 74 68 69 73 0a 2a  G_SEEKEQ, this.*
1f780 2a 20 6f 70 63 6f 64 65 20 6d 75 73 74 20 62 65  * opcode must be
1f790 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20   followed by an 
1f7a0 49 64 78 47 45 20 6f 70 63 6f 64 65 20 77 69 74  IdxGE opcode wit
1f7b0 68 20 74 68 65 20 73 61 6d 65 20 61 72 67 75 6d  h the same argum
1f7c0 65 6e 74 73 2e 0a 2a 2a 20 54 68 65 20 49 64 78  ents..** The Idx
1f7d0 47 45 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62  GE opcode will b
1f7e0 65 20 73 6b 69 70 70 65 64 20 69 66 20 74 68 69  e skipped if thi
1f7f0 73 20 6f 70 63 6f 64 65 20 73 75 63 63 65 65 64  s opcode succeed
1f800 73 2c 20 62 75 74 20 74 68 65 0a 2a 2a 20 49 64  s, but the.** Id
1f810 78 47 45 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20  xGE opcode will 
1f820 62 65 20 75 73 65 64 20 6f 6e 20 73 75 62 73 65  be used on subse
1f830 71 75 65 6e 74 20 6c 6f 6f 70 20 69 74 65 72 61  quent loop itera
1f840 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  tions..**.** See
1f850 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
1f860 74 46 6f 75 6e 64 2c 20 53 65 65 6b 47 74 2c 20  tFound, SeekGt, 
1f870 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 74 0a 2a  SeekGe, SeekLt.*
1f880 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c 54  /.case OP_SeekLT
1f890 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  :         /* jum
1f8a0 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  p, in3 */.case O
1f8b0 50 5f 53 65 65 6b 4c 45 3a 20 20 20 20 20 20 20  P_SeekLE:       
1f8c0 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
1f8d0 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 47 45  /.case OP_SeekGE
1f8e0 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  :         /* jum
1f8f0 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  p, in3 */.case O
1f900 50 5f 53 65 65 6b 47 54 3a 20 7b 20 20 20 20 20  P_SeekGT: {     
1f910 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
1f920 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20 20 20 20  /.  int res;    
1f930 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 61 72         /* Compar
1f940 69 73 6f 6e 20 72 65 73 75 6c 74 20 2a 2f 0a 20  ison result */. 
1f950 20 69 6e 74 20 6f 63 3b 20 20 20 20 20 20 20 20   int oc;        
1f960 20 20 20 20 2f 2a 20 4f 70 63 6f 64 65 20 2a 2f      /* Opcode */
1f970 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1f980 43 3b 20 20 20 20 2f 2a 20 54 68 65 20 63 75 72  C;    /* The cur
1f990 73 6f 72 20 74 6f 20 73 65 65 6b 20 2a 2f 0a 20  sor to seek */. 
1f9a0 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
1f9b0 72 3b 20 20 2f 2a 20 54 68 65 20 6b 65 79 20 74  r;  /* The key t
1f9c0 6f 20 73 65 65 6b 20 66 6f 72 20 2a 2f 0a 20 20  o seek for */.  
1f9d0 69 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20  int nField;     
1f9e0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1f9f0 63 6f 6c 75 6d 6e 73 20 6f 72 20 66 69 65 6c 64  columns or field
1fa00 73 20 69 6e 20 74 68 65 20 6b 65 79 20 2a 2f 0a  s in the key */.
1fa10 20 20 69 36 34 20 69 4b 65 79 3b 20 20 20 20 20    i64 iKey;     
1fa20 20 20 20 20 20 2f 2a 20 54 68 65 20 72 6f 77 69       /* The rowi
1fa30 64 20 77 65 20 61 72 65 20 74 6f 20 73 65 65 6b  d we are to seek
1fa40 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 65 71 4f   to */.  int eqO
1fa50 6e 6c 79 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f  nly;        /* O
1fa60 6e 6c 79 20 69 6e 74 65 72 65 73 74 65 64 20 69  nly interested i
1fa70 6e 20 3d 3d 20 72 65 73 75 6c 74 73 20 2a 2f 0a  n == results */.
1fa80 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1fa90 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
1faa0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1fab0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
1fac0 21 3d 30 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  !=0 );.  pC = p-
1fad0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
1fae0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
1faf0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
1fb00 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
1fb10 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61  YPE_BTREE );.  a
1fb20 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 45  ssert( OP_SeekLE
1fb30 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 31 20   == OP_SeekLT+1 
1fb40 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f  );.  assert( OP_
1fb50 53 65 65 6b 47 45 20 3d 3d 20 4f 50 5f 53 65 65  SeekGE == OP_See
1fb60 6b 4c 54 2b 32 20 29 3b 0a 20 20 61 73 73 65 72  kLT+2 );.  asser
1fb70 74 28 20 4f 50 5f 53 65 65 6b 47 54 20 3d 3d 20  t( OP_SeekGT == 
1fb80 4f 50 5f 53 65 65 6b 4c 54 2b 33 20 29 3b 0a 20  OP_SeekLT+3 );. 
1fb90 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 4f   assert( pC->isO
1fba0 72 64 65 72 65 64 20 29 3b 0a 20 20 61 73 73 65  rdered );.  asse
1fbb0 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  rt( pC->uc.pCurs
1fbc0 6f 72 21 3d 30 20 29 3b 0a 20 20 6f 63 20 3d 20  or!=0 );.  oc = 
1fbd0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 65  pOp->opcode;.  e
1fbe0 71 4f 6e 6c 79 20 3d 20 30 3b 0a 20 20 70 43 2d  qOnly = 0;.  pC-
1fbf0 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 23 69  >nullRow = 0;.#i
1fc00 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
1fc10 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d  G.  pC->seekOp =
1fc20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65   pOp->opcode;.#e
1fc30 6e 64 69 66 0a 0a 20 20 69 66 28 20 70 43 2d 3e  ndif..  if( pC->
1fc40 69 73 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f  isTable ){.    /
1fc50 2a 20 54 68 65 20 42 54 52 45 45 5f 53 45 45 4b  * The BTREE_SEEK
1fc60 5f 45 51 20 66 6c 61 67 20 69 73 20 6f 6e 6c 79  _EQ flag is only
1fc70 20 73 65 74 20 6f 6e 20 69 6e 64 65 78 20 63 75   set on index cu
1fc80 72 73 6f 72 73 20 2a 2f 0a 20 20 20 20 61 73 73  rsors */.    ass
1fc90 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
1fca0 65 43 75 72 73 6f 72 48 61 73 48 69 6e 74 28 70  eCursorHasHint(p
1fcb0 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 42  C->uc.pCursor, B
1fcc0 54 52 45 45 5f 53 45 45 4b 5f 45 51 29 3d 3d 30  TREE_SEEK_EQ)==0
1fcd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7c  .              |
1fce0 7c 20 43 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a  | CORRUPT_DB );.
1fcf0 0a 20 20 20 20 2f 2a 20 54 68 65 20 69 6e 70 75  .    /* The inpu
1fd00 74 20 76 61 6c 75 65 20 69 6e 20 50 33 20 6d 69  t value in P3 mi
1fd10 67 68 74 20 62 65 20 6f 66 20 61 6e 79 20 74 79  ght be of any ty
1fd20 70 65 3a 20 69 6e 74 65 67 65 72 2c 20 72 65 61  pe: integer, rea
1fd30 6c 2c 20 73 74 72 69 6e 67 2c 0a 20 20 20 20 2a  l, string,.    *
1fd40 2a 20 62 6c 6f 62 2c 20 6f 72 20 4e 55 4c 4c 2e  * blob, or NULL.
1fd50 20 20 42 75 74 20 69 74 20 6e 65 65 64 73 20 74    But it needs t
1fd60 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 20  o be an integer 
1fd70 62 65 66 6f 72 65 20 77 65 20 63 61 6e 20 64 6f  before we can do
1fd80 0a 20 20 20 20 2a 2a 20 74 68 65 20 73 65 65 6b  .    ** the seek
1fd90 2c 20 73 6f 20 63 6f 6e 76 65 72 74 20 69 74 2e  , so convert it.
1fda0 20 2a 2f 0a 20 20 20 20 70 49 6e 33 20 3d 20 26   */.    pIn3 = &
1fdb0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
1fdc0 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c     if( (pIn3->fl
1fdd0 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d  ags & (MEM_Int|M
1fde0 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74 72 29  EM_Real|MEM_Str)
1fdf0 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20  )==MEM_Str ){.  
1fe00 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63      applyNumeric
1fe10 41 66 66 69 6e 69 74 79 28 70 49 6e 33 2c 20 30  Affinity(pIn3, 0
1fe20 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 4b 65  );.    }.    iKe
1fe30 79 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  y = sqlite3VdbeI
1fe40 6e 74 56 61 6c 75 65 28 70 49 6e 33 29 3b 0a 0a  ntValue(pIn3);..
1fe50 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50 33      /* If the P3
1fe60 20 76 61 6c 75 65 20 63 6f 75 6c 64 20 6e 6f 74   value could not
1fe70 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e   be converted in
1fe80 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 77 69  to an integer wi
1fe90 74 68 6f 75 74 0a 20 20 20 20 2a 2a 20 6c 6f 73  thout.    ** los
1fea0 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  s of information
1feb0 2c 20 74 68 65 6e 20 73 70 65 63 69 61 6c 20 70  , then special p
1fec0 72 6f 63 65 73 73 69 6e 67 20 69 73 20 72 65 71  rocessing is req
1fed0 75 69 72 65 64 2e 2e 2e 20 2a 2f 0a 20 20 20 20  uired... */.    
1fee0 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73  if( (pIn3->flags
1fef0 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29   & MEM_Int)==0 )
1ff00 7b 0a 20 20 20 20 20 20 69 66 28 20 28 70 49 6e  {.      if( (pIn
1ff10 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  3->flags & MEM_R
1ff20 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  eal)==0 ){.     
1ff30 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20     /* If the P3 
1ff40 76 61 6c 75 65 20 63 61 6e 6e 6f 74 20 62 65 20  value cannot be 
1ff50 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61  converted into a
1ff60 6e 79 20 6b 69 6e 64 20 6f 66 20 61 20 6e 75 6d  ny kind of a num
1ff70 62 65 72 2c 0a 20 20 20 20 20 20 20 20 2a 2a 20  ber,.        ** 
1ff80 74 68 65 6e 20 74 68 65 20 73 65 65 6b 20 69 73  then the seek is
1ff90 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2c 20 73   not possible, s
1ffa0 6f 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a  o jump to P2 */.
1ffb0 20 20 20 20 20 20 20 20 56 64 62 65 42 72 61 6e          VdbeBran
1ffc0 63 68 54 61 6b 65 6e 28 31 2c 32 29 3b 20 67 6f  chTaken(1,2); go
1ffd0 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
1ffe0 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
1fff0 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20      }..      /* 
20000 49 66 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61  If the approxima
20010 74 69 6f 6e 20 69 4b 65 79 20 69 73 20 6c 61 72  tion iKey is lar
20020 67 65 72 20 74 68 61 6e 20 74 68 65 20 61 63 74  ger than the act
20030 75 61 6c 20 72 65 61 6c 20 73 65 61 72 63 68 0a  ual real search.
20040 20 20 20 20 20 20 2a 2a 20 74 65 72 6d 2c 20 73        ** term, s
20050 75 62 73 74 69 74 75 74 65 20 3e 3d 20 66 6f 72  ubstitute >= for
20060 20 3e 20 61 6e 64 20 3c 20 66 6f 72 20 3c 3d 2e   > and < for <=.
20070 20 65 2e 67 2e 20 69 66 20 74 68 65 20 73 65 61   e.g. if the sea
20080 72 63 68 20 74 65 72 6d 0a 20 20 20 20 20 20 2a  rch term.      *
20090 2a 20 69 73 20 34 2e 39 20 61 6e 64 20 74 68 65  * is 4.9 and the
200a0 20 69 6e 74 65 67 65 72 20 61 70 70 72 6f 78 69   integer approxi
200b0 6d 61 74 69 6f 6e 20 35 3a 0a 20 20 20 20 20 20  mation 5:.      
200c0 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20  **.      **     
200d0 20 20 20 28 78 20 3e 20 20 34 2e 39 29 20 20 20     (x >  4.9)   
200e0 20 2d 3e 20 20 20 20 20 28 78 20 3e 3d 20 35 29   ->     (x >= 5)
200f0 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20 20 20  .      **       
20100 20 28 78 20 3c 3d 20 34 2e 39 29 20 20 20 20 2d   (x <= 4.9)    -
20110 3e 20 20 20 20 20 28 78 20 3c 20 20 35 29 0a 20  >     (x <  5). 
20120 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66       */.      if
20130 28 20 70 49 6e 33 2d 3e 75 2e 72 3c 28 64 6f 75  ( pIn3->u.r<(dou
20140 62 6c 65 29 69 4b 65 79 20 29 7b 0a 20 20 20 20  ble)iKey ){.    
20150 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53      assert( OP_S
20160 65 65 6b 47 45 3d 3d 28 4f 50 5f 53 65 65 6b 47  eekGE==(OP_SeekG
20170 54 2d 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20  T-1) );.        
20180 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c  assert( OP_SeekL
20190 54 3d 3d 28 4f 50 5f 53 65 65 6b 4c 45 2d 31 29  T==(OP_SeekLE-1)
201a0 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
201b0 72 74 28 20 28 4f 50 5f 53 65 65 6b 4c 45 20 26  rt( (OP_SeekLE &
201c0 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65   0x0001)==(OP_Se
201d0 65 6b 47 54 20 26 20 30 78 30 30 30 31 29 20 29  ekGT & 0x0001) )
201e0 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 6f  ;.        if( (o
201f0 63 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50  c & 0x0001)==(OP
20200 5f 53 65 65 6b 47 54 20 26 20 30 78 30 30 30 31  _SeekGT & 0x0001
20210 29 20 29 20 6f 63 2d 2d 3b 0a 20 20 20 20 20 20  ) ) oc--;.      
20220 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74  }..      /* If t
20230 68 65 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e  he approximation
20240 20 69 4b 65 79 20 69 73 20 73 6d 61 6c 6c 65 72   iKey is smaller
20250 20 74 68 61 6e 20 74 68 65 20 61 63 74 75 61 6c   than the actual
20260 20 72 65 61 6c 20 73 65 61 72 63 68 0a 20 20 20   real search.   
20270 20 20 20 2a 2a 20 74 65 72 6d 2c 20 73 75 62 73     ** term, subs
20280 74 69 74 75 74 65 20 3c 3d 20 66 6f 72 20 3c 20  titute <= for < 
20290 61 6e 64 20 3e 20 66 6f 72 20 3e 3d 2e 20 20 2a  and > for >=.  *
202a0 2f 0a 20 20 20 20 20 20 65 6c 73 65 20 69 66 28  /.      else if(
202b0 20 70 49 6e 33 2d 3e 75 2e 72 3e 28 64 6f 75 62   pIn3->u.r>(doub
202c0 6c 65 29 69 4b 65 79 20 29 7b 0a 20 20 20 20 20  le)iKey ){.     
202d0 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65     assert( OP_Se
202e0 65 6b 4c 45 3d 3d 28 4f 50 5f 53 65 65 6b 4c 54  ekLE==(OP_SeekLT
202f0 2b 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61  +1) );.        a
20300 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 54  ssert( OP_SeekGT
20310 3d 3d 28 4f 50 5f 53 65 65 6b 47 45 2b 31 29 20  ==(OP_SeekGE+1) 
20320 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
20330 74 28 20 28 4f 50 5f 53 65 65 6b 4c 54 20 26 20  t( (OP_SeekLT & 
20340 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65  0x0001)==(OP_See
20350 6b 47 45 20 26 20 30 78 30 30 30 31 29 20 29 3b  kGE & 0x0001) );
20360 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 6f 63  .        if( (oc
20370 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f   & 0x0001)==(OP_
20380 53 65 65 6b 4c 54 20 26 20 30 78 30 30 30 31 29  SeekLT & 0x0001)
20390 20 29 20 6f 63 2b 2b 3b 0a 20 20 20 20 20 20 7d   ) oc++;.      }
203a0 0a 20 20 20 20 7d 20 0a 20 20 20 20 72 63 20 3d  .    } .    rc =
203b0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
203c0 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e  etoUnpacked(pC->
203d0 75 63 2e 70 43 75 72 73 6f 72 2c 20 30 2c 20 28  uc.pCursor, 0, (
203e0 75 36 34 29 69 4b 65 79 2c 20 30 2c 20 26 72 65  u64)iKey, 0, &re
203f0 73 29 3b 0a 20 20 20 20 70 43 2d 3e 6d 6f 76 65  s);.    pC->move
20400 74 6f 54 61 72 67 65 74 20 3d 20 69 4b 65 79 3b  toTarget = iKey;
20410 20 20 2f 2a 20 55 73 65 64 20 62 79 20 4f 50 5f    /* Used by OP_
20420 44 65 6c 65 74 65 20 2a 2f 0a 20 20 20 20 69 66  Delete */.    if
20430 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
20440 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62  ){.      goto ab
20450 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
20460 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
20470 0a 20 20 20 20 2f 2a 20 46 6f 72 20 61 20 63 75  .    /* For a cu
20480 72 73 6f 72 20 77 69 74 68 20 74 68 65 20 42 54  rsor with the BT
20490 52 45 45 5f 53 45 45 4b 5f 45 51 20 68 69 6e 74  REE_SEEK_EQ hint
204a0 2c 20 6f 6e 6c 79 20 74 68 65 20 4f 50 5f 53 65  , only the OP_Se
204b0 65 6b 47 45 20 61 6e 64 0a 20 20 20 20 2a 2a 20  ekGE and.    ** 
204c0 4f 50 5f 53 65 65 6b 4c 45 20 6f 70 63 6f 64 65  OP_SeekLE opcode
204d0 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 2c 20 61  s are allowed, a
204e0 6e 64 20 74 68 65 73 65 20 6d 75 73 74 20 62 65  nd these must be
204f0 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c   immediately fol
20500 6c 6f 77 65 64 0a 20 20 20 20 2a 2a 20 62 79 20  lowed.    ** by 
20510 61 6e 20 4f 50 5f 49 64 78 47 54 20 6f 72 20 4f  an OP_IdxGT or O
20520 50 5f 49 64 78 4c 54 20 6f 70 63 6f 64 65 2c 20  P_IdxLT opcode, 
20530 72 65 73 70 65 63 74 69 76 65 6c 79 2c 20 77 69  respectively, wi
20540 74 68 20 74 68 65 20 73 61 6d 65 20 6b 65 79 2e  th the same key.
20550 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
20560 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
20570 6f 72 48 61 73 48 69 6e 74 28 70 43 2d 3e 75 63  orHasHint(pC->uc
20580 2e 70 43 75 72 73 6f 72 2c 20 42 54 52 45 45 5f  .pCursor, BTREE_
20590 53 45 45 4b 5f 45 51 29 20 29 7b 0a 20 20 20 20  SEEK_EQ) ){.    
205a0 20 20 65 71 4f 6e 6c 79 20 3d 20 31 3b 0a 20 20    eqOnly = 1;.  
205b0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
205c0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b  >opcode==OP_Seek
205d0 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  GE || pOp->opcod
205e0 65 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 3b 0a  e==OP_SeekLE );.
205f0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
20600 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  p[1].opcode==OP_
20610 49 64 78 4c 54 20 7c 7c 20 70 4f 70 5b 31 5d 2e  IdxLT || pOp[1].
20620 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54  opcode==OP_IdxGT
20630 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
20640 28 20 70 4f 70 5b 31 5d 2e 70 31 3d 3d 70 4f 70  ( pOp[1].p1==pOp
20650 5b 30 5d 2e 70 31 20 29 3b 0a 20 20 20 20 20 20  [0].p1 );.      
20660 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70  assert( pOp[1].p
20670 32 3d 3d 70 4f 70 5b 30 5d 2e 70 32 20 29 3b 0a  2==pOp[0].p2 );.
20680 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
20690 70 5b 31 5d 2e 70 33 3d 3d 70 4f 70 5b 30 5d 2e  p[1].p3==pOp[0].
206a0 70 33 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  p3 );.      asse
206b0 72 74 28 20 70 4f 70 5b 31 5d 2e 70 34 2e 69 3d  rt( pOp[1].p4.i=
206c0 3d 70 4f 70 5b 30 5d 2e 70 34 2e 69 20 29 3b 0a  =pOp[0].p4.i );.
206d0 20 20 20 20 7d 0a 0a 20 20 20 20 6e 46 69 65 6c      }..    nFiel
206e0 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  d = pOp->p4.i;. 
206f0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
20700 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
20710 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
20720 6e 46 69 65 6c 64 3e 30 20 29 3b 0a 20 20 20 20  nField>0 );.    
20730 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d  r.pKeyInfo = pC-
20740 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72  >pKeyInfo;.    r
20750 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 6e  .nField = (u16)n
20760 46 69 65 6c 64 3b 0a 0a 20 20 20 20 2f 2a 20 54  Field;..    /* T
20770 68 65 20 6e 65 78 74 20 6c 69 6e 65 20 6f 66 20  he next line of 
20780 63 6f 64 65 20 63 6f 6d 70 75 74 65 73 20 61 73  code computes as
20790 20 66 6f 6c 6c 6f 77 73 2c 20 6f 6e 6c 79 20 66   follows, only f
207a0 61 73 74 65 72 3a 0a 20 20 20 20 2a 2a 20 20 20  aster:.    **   
207b0 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47  if( oc==OP_SeekG
207c0 54 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  T || oc==OP_Seek
207d0 4c 45 20 29 7b 0a 20 20 20 20 2a 2a 20 20 20 20  LE ){.    **    
207e0 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20   r.default_rc = 
207f0 2d 31 3b 0a 20 20 20 20 2a 2a 20 20 20 7d 65 6c  -1;.    **   }el
20800 73 65 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20 72  se{.    **     r
20810 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2b 31  .default_rc = +1
20820 3b 0a 20 20 20 20 2a 2a 20 20 20 7d 0a 20 20 20  ;.    **   }.   
20830 20 2a 2f 0a 20 20 20 20 72 2e 64 65 66 61 75 6c   */.    r.defaul
20840 74 5f 72 63 20 3d 20 28 28 31 20 26 20 28 6f 63  t_rc = ((1 & (oc
20850 20 2d 20 4f 50 5f 53 65 65 6b 4c 54 29 29 20 3f   - OP_SeekLT)) ?
20860 20 2d 31 20 3a 20 2b 31 29 3b 0a 20 20 20 20 61   -1 : +1);.    a
20870 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65  ssert( oc!=OP_Se
20880 65 6b 47 54 20 7c 7c 20 72 2e 64 65 66 61 75 6c  ekGT || r.defaul
20890 74 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20 20 20 20  t_rc==-1 );.    
208a0 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53  assert( oc!=OP_S
208b0 65 65 6b 4c 45 20 7c 7c 20 72 2e 64 65 66 61 75  eekLE || r.defau
208c0 6c 74 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20 20 20  lt_rc==-1 );.   
208d0 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f   assert( oc!=OP_
208e0 53 65 65 6b 47 45 20 7c 7c 20 72 2e 64 65 66 61  SeekGE || r.defa
208f0 75 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a 20 20  ult_rc==+1 );.  
20900 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50    assert( oc!=OP
20910 5f 53 65 65 6b 4c 54 20 7c 7c 20 72 2e 64 65 66  _SeekLT || r.def
20920 61 75 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a 0a  ault_rc==+1 );..
20930 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d      r.aMem = &aM
20940 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66  em[pOp->p3];.#if
20950 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
20960 0a 20 20 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f  .    { int i; fo
20970 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c  r(i=0; i<r.nFiel
20980 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20  d; i++) assert( 
20990 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d  memIsValid(&r.aM
209a0 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64  em[i]) ); }.#end
209b0 69 66 0a 20 20 20 20 72 2e 65 71 53 65 65 6e 20  if.    r.eqSeen 
209c0 3d 20 30 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  = 0;.    rc = sq
209d0 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
209e0 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 75 63 2e  Unpacked(pC->uc.
209f0 70 43 75 72 73 6f 72 2c 20 26 72 2c 20 30 2c 20  pCursor, &r, 0, 
20a00 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 69 66  0, &res);.    if
20a10 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
20a20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62  ){.      goto ab
20a30 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
20a40 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
20a50 65 71 4f 6e 6c 79 20 26 26 20 72 2e 65 71 53 65  eqOnly && r.eqSe
20a60 65 6e 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 61  en==0 ){.      a
20a70 73 73 65 72 74 28 20 72 65 73 21 3d 30 20 29 3b  ssert( res!=0 );
20a80 0a 20 20 20 20 20 20 67 6f 74 6f 20 73 65 65 6b  .      goto seek
20a90 5f 6e 6f 74 5f 66 6f 75 6e 64 3b 0a 20 20 20 20  _not_found;.    
20aa0 7d 0a 20 20 7d 0a 20 20 70 43 2d 3e 64 65 66 65  }.  }.  pC->defe
20ab0 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
20ac0 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
20ad0 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
20ae0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
20af0 45 53 54 0a 20 20 73 71 6c 69 74 65 33 5f 73 65  EST.  sqlite3_se
20b00 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65  arch_count++;.#e
20b10 6e 64 69 66 0a 20 20 69 66 28 20 6f 63 3e 3d 4f  ndif.  if( oc>=O
20b20 50 5f 53 65 65 6b 47 45 20 29 7b 20 20 61 73 73  P_SeekGE ){  ass
20b30 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  ert( oc==OP_Seek
20b40 47 45 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65  GE || oc==OP_See
20b50 6b 47 54 20 29 3b 0a 20 20 20 20 69 66 28 20 72  kGT );.    if( r
20b60 65 73 3c 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20  es<0 || (res==0 
20b70 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54  && oc==OP_SeekGT
20b80 29 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d  ) ){.      res =
20b90 20 30 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   0;.      rc = s
20ba0 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74 28  qlite3BtreeNext(
20bb0 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20  pC->uc.pCursor, 
20bc0 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28  &res);.      if(
20bd0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
20be0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
20bf0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65  to_error;.    }e
20c00 6c 73 65 7b 0a 20 20 20 20 20 20 72 65 73 20 3d  lse{.      res =
20c10 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73   0;.    }.  }els
20c20 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f  e{.    assert( o
20c30 63 3d 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c 20  c==OP_SeekLT || 
20c40 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 3b  oc==OP_SeekLE );
20c50 0a 20 20 20 20 69 66 28 20 72 65 73 3e 30 20 7c  .    if( res>0 |
20c60 7c 20 28 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d  | (res==0 && oc=
20c70 3d 4f 50 5f 53 65 65 6b 4c 54 29 20 29 7b 0a 20  =OP_SeekLT) ){. 
20c80 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20       res = 0;.  
20c90 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
20ca0 42 74 72 65 65 50 72 65 76 69 6f 75 73 28 70 43  BtreePrevious(pC
20cb0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 72  ->uc.pCursor, &r
20cc0 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  es);.      if( r
20cd0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67  c!=SQLITE_OK ) g
20ce0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
20cf0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c 73  _error;.    }els
20d00 65 7b 0a 20 20 20 20 20 20 2f 2a 20 72 65 73 20  e{.      /* res 
20d10 6d 69 67 68 74 20 62 65 20 6e 65 67 61 74 69 76  might be negativ
20d20 65 20 62 65 63 61 75 73 65 20 74 68 65 20 74 61  e because the ta
20d30 62 6c 65 20 69 73 20 65 6d 70 74 79 2e 20 20 43  ble is empty.  C
20d40 68 65 63 6b 20 74 6f 0a 20 20 20 20 20 20 2a 2a  heck to.      **
20d50 20 73 65 65 20 69 66 20 74 68 69 73 20 69 73 20   see if this is 
20d60 74 68 65 20 63 61 73 65 2e 0a 20 20 20 20 20 20  the case..      
20d70 2a 2f 0a 20 20 20 20 20 20 72 65 73 20 3d 20 73  */.      res = s
20d80 71 6c 69 74 65 33 42 74 72 65 65 45 6f 66 28 70  qlite3BtreeEof(p
20d90 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a  C->uc.pCursor);.
20da0 20 20 20 20 7d 0a 20 20 7d 0a 73 65 65 6b 5f 6e      }.  }.seek_n
20db0 6f 74 5f 66 6f 75 6e 64 3a 0a 20 20 61 73 73 65  ot_found:.  asse
20dc0 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b  rt( pOp->p2>0 );
20dd0 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
20de0 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20  en(res!=0,2);.  
20df0 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 67  if( res ){.    g
20e00 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
20e10 20 20 7d 65 6c 73 65 20 69 66 28 20 65 71 4f 6e    }else if( eqOn
20e20 6c 79 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  ly ){.    assert
20e30 28 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d  ( pOp[1].opcode=
20e40 3d 4f 50 5f 49 64 78 4c 54 20 7c 7c 20 70 4f 70  =OP_IdxLT || pOp
20e50 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  [1].opcode==OP_I
20e60 64 78 47 54 20 29 3b 0a 20 20 20 20 70 4f 70 2b  dxGT );.    pOp+
20e70 2b 3b 20 2f 2a 20 53 6b 69 70 20 74 68 65 20 4f  +; /* Skip the O
20e80 50 5f 49 64 78 4c 74 20 6f 72 20 4f 50 5f 49 64  P_IdxLt or OP_Id
20e90 78 47 54 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73  xGT that follows
20ea0 20 2a 2f 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   */.  }.  break;
20eb0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46  .}../* Opcode: F
20ec0 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20 50 34  ound P1 P2 P3 P4
20ed0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
20ee0 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
20ef0 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e  ** If P4==0 then
20f00 20 72 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c   register P3 hol
20f10 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72  ds a blob constr
20f20 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63  ucted by MakeRec
20f30 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30  ord.  If.** P4>0
20f40 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50   then register P
20f50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 6f  3 is the first o
20f60 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20 74  f P4 registers t
20f70 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61  hat form an unpa
20f80 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a  cked.** record..
20f90 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20  **.** Cursor P1 
20fa0 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62  is on an index b
20fb0 74 72 65 65 2e 20 20 49 66 20 74 68 65 20 72 65  tree.  If the re
20fc0 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64 20  cord identified 
20fd0 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20  by P3 and P4.** 
20fe0 69 73 20 61 20 70 72 65 66 69 78 20 6f 66 20 61  is a prefix of a
20ff0 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74  ny entry in P1 t
21000 68 65 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d 61  hen a jump is ma
21010 64 65 20 74 6f 20 50 32 20 61 6e 64 0a 2a 2a 20  de to P2 and.** 
21020 50 31 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74  P1 is left point
21030 69 6e 67 20 61 74 20 74 68 65 20 6d 61 74 63 68  ing at the match
21040 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a  ing entry..**.**
21050 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20   This operation 
21060 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f  leaves the curso
21070 72 20 69 6e 20 61 20 73 74 61 74 65 20 77 68 65  r in a state whe
21080 72 65 20 69 74 20 63 61 6e 20 62 65 0a 2a 2a 20  re it can be.** 
21090 61 64 76 61 6e 63 65 64 20 69 6e 20 74 68 65 20  advanced in the 
210a0 66 6f 72 77 61 72 64 20 64 69 72 65 63 74 69 6f  forward directio
210b0 6e 2e 20 20 54 68 65 20 4e 65 78 74 20 69 6e 73  n.  The Next ins
210c0 74 72 75 63 74 69 6f 6e 20 77 69 6c 6c 20 77 6f  truction will wo
210d0 72 6b 2c 0a 2a 2a 20 62 75 74 20 6e 6f 74 20 74  rk,.** but not t
210e0 68 65 20 50 72 65 76 20 69 6e 73 74 72 75 63 74  he Prev instruct
210f0 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ion..**.** See a
21100 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e  lso: NotFound, N
21110 6f 43 6f 6e 66 6c 69 63 74 2c 20 4e 6f 74 45 78  oConflict, NotEx
21120 69 73 74 73 2e 20 53 65 65 6b 47 65 0a 2a 2f 0a  ists. SeekGe.*/.
21130 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 46 6f  /* Opcode: NotFo
21140 75 6e 64 20 50 31 20 50 32 20 50 33 20 50 34 20  und P1 P2 P3 P4 
21150 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  *.** Synopsis: k
21160 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
21170 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20  * If P4==0 then 
21180 72 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64  register P3 hold
21190 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75  s a blob constru
211a0 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f  cted by MakeReco
211b0 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20  rd.  If.** P4>0 
211c0 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33  then register P3
211d0 20 69 73 20 74 68 65 20 66 69 72 73 74 20 6f 66   is the first of
211e0 20 50 34 20 72 65 67 69 73 74 65 72 73 20 74 68   P4 registers th
211f0 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63  at form an unpac
21200 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a  ked.** record..*
21210 2a 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20  * .** Cursor P1 
21220 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62  is on an index b
21230 74 72 65 65 2e 20 20 49 66 20 74 68 65 20 72 65  tree.  If the re
21240 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64 20  cord identified 
21250 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20  by P3 and P4.** 
21260 69 73 20 6e 6f 74 20 74 68 65 20 70 72 65 66 69  is not the prefi
21270 78 20 6f 66 20 61 6e 79 20 65 6e 74 72 79 20 69  x of any entry i
21280 6e 20 50 31 20 74 68 65 6e 20 61 20 6a 75 6d 70  n P1 then a jump
21290 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32 2e 20   is made to P2. 
212a0 20 49 66 20 50 31 20 0a 2a 2a 20 64 6f 65 73 20   If P1 .** does 
212b0 63 6f 6e 74 61 69 6e 20 61 6e 20 65 6e 74 72 79  contain an entry
212c0 20 77 68 6f 73 65 20 70 72 65 66 69 78 20 6d 61   whose prefix ma
212d0 74 63 68 65 73 20 74 68 65 20 50 33 2f 50 34 20  tches the P3/P4 
212e0 72 65 63 6f 72 64 20 74 68 65 6e 20 63 6f 6e 74  record then cont
212f0 72 6f 6c 0a 2a 2a 20 66 61 6c 6c 73 20 74 68 72  rol.** falls thr
21300 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
21310 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 6e 64   instruction and
21320 20 50 31 20 69 73 20 6c 65 66 74 20 70 6f 69 6e   P1 is left poin
21330 74 69 6e 67 20 61 74 20 74 68 65 0a 2a 2a 20 6d  ting at the.** m
21340 61 74 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a  atching entry..*
21350 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74  *.** This operat
21360 69 6f 6e 20 6c 65 61 76 65 73 20 74 68 65 20 63  ion leaves the c
21370 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65  ursor in a state
21380 20 77 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74   where it cannot
21390 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20   be.** advanced 
213a0 69 6e 20 65 69 74 68 65 72 20 64 69 72 65 63 74  in either direct
213b0 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  ion.  In other w
213c0 6f 72 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61  ords, the Next a
213d0 6e 64 20 50 72 65 76 0a 2a 2a 20 6f 70 63 6f 64  nd Prev.** opcod
213e0 65 73 20 64 6f 20 6e 6f 74 20 77 6f 72 6b 20 61  es do not work a
213f0 66 74 65 72 20 74 68 69 73 20 6f 70 65 72 61 74  fter this operat
21400 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ion..**.** See a
21410 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 45  lso: Found, NotE
21420 78 69 73 74 73 2c 20 4e 6f 43 6f 6e 66 6c 69 63  xists, NoConflic
21430 74 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  t.*/./* Opcode: 
21440 4e 6f 43 6f 6e 66 6c 69 63 74 20 50 31 20 50 32  NoConflict P1 P2
21450 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
21460 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
21470 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d  4].**.** If P4==
21480 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20  0 then register 
21490 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20  P3 holds a blob 
214a0 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d  constructed by M
214b0 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a  akeRecord.  If.*
214c0 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69  * P4>0 then regi
214d0 73 74 65 72 20 50 33 20 69 73 20 74 68 65 20 66  ster P3 is the f
214e0 69 72 73 74 20 6f 66 20 50 34 20 72 65 67 69 73  irst of P4 regis
214f0 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61  ters that form a
21500 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65  n unpacked.** re
21510 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72  cord..** .** Cur
21520 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20  sor P1 is on an 
21530 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49 66  index btree.  If
21540 20 74 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e   the record iden
21550 74 69 66 69 65 64 20 62 79 20 50 33 20 61 6e 64  tified by P3 and
21560 20 50 34 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20   P4.** contains 
21570 61 6e 79 20 4e 55 4c 4c 20 76 61 6c 75 65 2c 20  any NULL value, 
21580 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
21590 20 74 6f 20 50 32 2e 20 20 49 66 20 61 6c 6c 20   to P2.  If all 
215a0 74 65 72 6d 73 20 6f 66 20 74 68 65 0a 2a 2a 20  terms of the.** 
215b0 72 65 63 6f 72 64 20 61 72 65 20 6e 6f 74 2d 4e  record are not-N
215c0 55 4c 4c 20 74 68 65 6e 20 61 20 63 68 65 63 6b  ULL then a check
215d0 20 69 73 20 64 6f 6e 65 20 74 6f 20 64 65 74 65   is done to dete
215e0 72 6d 69 6e 65 20 69 66 20 61 6e 79 20 72 6f 77  rmine if any row
215f0 20 69 6e 20 74 68 65 0a 2a 2a 20 50 31 20 69 6e   in the.** P1 in
21600 64 65 78 20 62 74 72 65 65 20 68 61 73 20 61 20  dex btree has a 
21610 6d 61 74 63 68 69 6e 67 20 6b 65 79 20 70 72 65  matching key pre
21620 66 69 78 2e 20 20 49 66 20 74 68 65 72 65 20 61  fix.  If there a
21630 72 65 20 6e 6f 20 6d 61 74 63 68 65 73 2c 20 6a  re no matches, j
21640 75 6d 70 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65  ump.** immediate
21650 6c 79 20 74 6f 20 50 32 2e 20 20 49 66 20 74 68  ly to P2.  If th
21660 65 72 65 20 69 73 20 61 20 6d 61 74 63 68 2c 20  ere is a match, 
21670 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 61 6e 64  fall through and
21680 20 6c 65 61 76 65 20 74 68 65 20 50 31 0a 2a 2a   leave the P1.**
21690 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67   cursor pointing
216a0 20 74 6f 20 74 68 65 20 6d 61 74 63 68 69 6e 67   to the matching
216b0 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73   row..**.** This
216c0 20 6f 70 63 6f 64 65 20 69 73 20 73 69 6d 69 6c   opcode is simil
216d0 61 72 20 74 6f 20 4f 50 5f 4e 6f 74 46 6f 75 6e  ar to OP_NotFoun
216e0 64 20 77 69 74 68 20 74 68 65 20 65 78 63 65 70  d with the excep
216f0 74 69 6f 6e 73 20 74 68 61 74 20 74 68 65 0a 2a  tions that the.*
21700 2a 20 62 72 61 6e 63 68 20 69 73 20 61 6c 77 61  * branch is alwa
21710 79 73 20 74 61 6b 65 6e 20 69 66 20 61 6e 79 20  ys taken if any 
21720 70 61 72 74 20 6f 66 20 74 68 65 20 73 65 61 72  part of the sear
21730 63 68 20 6b 65 79 20 69 6e 70 75 74 20 69 73 20  ch key input is 
21740 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  NULL..**.** This
21750 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61 76 65   operation leave
21760 73 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20  s the cursor in 
21770 61 20 73 74 61 74 65 20 77 68 65 72 65 20 69 74  a state where it
21780 20 63 61 6e 6e 6f 74 20 62 65 0a 2a 2a 20 61 64   cannot be.** ad
21790 76 61 6e 63 65 64 20 69 6e 20 65 69 74 68 65 72  vanced in either
217a0 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20   direction.  In 
217b0 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
217c0 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76 0a 2a   Next and Prev.*
217d0 2a 20 6f 70 63 6f 64 65 73 20 64 6f 20 6e 6f 74  * opcodes do not
217e0 20 77 6f 72 6b 20 61 66 74 65 72 20 74 68 69 73   work after this
217f0 20 6f 70 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a   operation..**.*
21800 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46  * See also: NotF
21810 6f 75 6e 64 2c 20 46 6f 75 6e 64 2c 20 4e 6f 74  ound, Found, Not
21820 45 78 69 73 74 73 0a 2a 2f 0a 63 61 73 65 20 4f  Exists.*/.case O
21830 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 3a 20 20 20  P_NoConflict:   
21840 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
21850 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 46 6f 75  /.case OP_NotFou
21860 6e 64 3a 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  nd:       /* jum
21870 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  p, in3 */.case O
21880 50 5f 46 6f 75 6e 64 3a 20 7b 20 20 20 20 20 20  P_Found: {      
21890 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
218a0 2f 0a 20 20 69 6e 74 20 61 6c 72 65 61 64 79 45  /.  int alreadyE
218b0 78 69 73 74 73 3b 0a 20 20 69 6e 74 20 74 61 6b  xists;.  int tak
218c0 65 4a 75 6d 70 3b 0a 20 20 69 6e 74 20 69 69 3b  eJump;.  int ii;
218d0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
218e0 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  C;.  int res;.  
218f0 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 2a  UnpackedRecord *
21900 70 46 72 65 65 3b 0a 20 20 55 6e 70 61 63 6b 65  pFree;.  Unpacke
21910 64 52 65 63 6f 72 64 20 2a 70 49 64 78 4b 65 79  dRecord *pIdxKey
21920 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ;.  UnpackedReco
21930 72 64 20 72 3b 0a 0a 23 69 66 64 65 66 20 53 51  rd r;..#ifdef SQ
21940 4c 49 54 45 5f 54 45 53 54 0a 20 20 69 66 28 20  LITE_TEST.  if( 
21950 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f  pOp->opcode!=OP_
21960 4e 6f 43 6f 6e 66 6c 69 63 74 20 29 20 73 71 6c  NoConflict ) sql
21970 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74  ite3_found_count
21980 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 61 73  ++;.#endif..  as
21990 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
219a0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
219b0 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65  Cursor );.  asse
219c0 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
219d0 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 70  =P4_INT32 );.  p
219e0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
219f0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
21a00 20 70 43 21 3d 30 20 29 3b 0a 23 69 66 64 65 66   pC!=0 );.#ifdef
21a10 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
21a20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 70 4f 70  pC->seekOp = pOp
21a30 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e 64 69 66  ->opcode;.#endif
21a40 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
21a50 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65  pOp->p3];.  asse
21a60 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
21a70 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
21a80 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
21a90 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29  >uc.pCursor!=0 )
21aa0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
21ab0 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20  isTable==0 );.  
21ac0 69 66 28 20 70 4f 70 2d 3e 70 34 2e 69 3e 30 20  if( pOp->p4.i>0 
21ad0 29 7b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66  ){.    r.pKeyInf
21ae0 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f  o = pC->pKeyInfo
21af0 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d  ;.    r.nField =
21b00 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b   (u16)pOp->p4.i;
21b10 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 70 49  .    r.aMem = pI
21b20 6e 33 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  n3;.#ifdef SQLIT
21b30 45 5f 44 45 42 55 47 0a 20 20 20 20 66 6f 72 28  E_DEBUG.    for(
21b40 69 69 3d 30 3b 20 69 69 3c 72 2e 6e 46 69 65 6c  ii=0; ii<r.nFiel
21b50 64 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20  d; ii++){.      
21b60 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
21b70 69 64 28 26 72 2e 61 4d 65 6d 5b 69 69 5d 29 20  id(&r.aMem[ii]) 
21b80 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
21b90 20 28 72 2e 61 4d 65 6d 5b 69 69 5d 2e 66 6c 61   (r.aMem[ii].fla
21ba0 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 29 3d 3d  gs & MEM_Zero)==
21bb0 30 20 7c 7c 20 72 2e 61 4d 65 6d 5b 69 69 5d 2e  0 || r.aMem[ii].
21bc0 6e 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66  n==0 );.      if
21bd0 28 20 69 69 20 29 20 52 45 47 49 53 54 45 52 5f  ( ii ) REGISTER_
21be0 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2b 69 69  TRACE(pOp->p3+ii
21bf0 2c 20 26 72 2e 61 4d 65 6d 5b 69 69 5d 29 3b 0a  , &r.aMem[ii]);.
21c00 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20      }.#endif.   
21c10 20 70 49 64 78 4b 65 79 20 3d 20 26 72 3b 0a 20   pIdxKey = &r;. 
21c20 20 20 20 70 46 72 65 65 20 3d 20 30 3b 0a 20 20     pFree = 0;.  
21c30 7d 65 6c 73 65 7b 0a 20 20 20 20 70 46 72 65 65  }else{.    pFree
21c40 20 3d 20 70 49 64 78 4b 65 79 20 3d 20 73 71 6c   = pIdxKey = sql
21c50 69 74 65 33 56 64 62 65 41 6c 6c 6f 63 55 6e 70  ite3VdbeAllocUnp
21c60 61 63 6b 65 64 52 65 63 6f 72 64 28 70 43 2d 3e  ackedRecord(pC->
21c70 70 4b 65 79 49 6e 66 6f 29 3b 0a 20 20 20 20 69  pKeyInfo);.    i
21c80 66 28 20 70 49 64 78 4b 65 79 3d 3d 30 20 29 20  f( pIdxKey==0 ) 
21c90 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20  goto no_mem;.   
21ca0 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66   assert( pIn3->f
21cb0 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20  lags & MEM_Blob 
21cc0 29 3b 0a 20 20 20 20 28 76 6f 69 64 29 45 78 70  );.    (void)Exp
21cd0 61 6e 64 42 6c 6f 62 28 70 49 6e 33 29 3b 0a 20  andBlob(pIn3);. 
21ce0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 52 65     sqlite3VdbeRe
21cf0 63 6f 72 64 55 6e 70 61 63 6b 28 70 43 2d 3e 70  cordUnpack(pC->p
21d00 4b 65 79 49 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e  KeyInfo, pIn3->n
21d10 2c 20 70 49 6e 33 2d 3e 7a 2c 20 70 49 64 78 4b  , pIn3->z, pIdxK
21d20 65 79 29 3b 0a 20 20 7d 0a 20 20 70 49 64 78 4b  ey);.  }.  pIdxK
21d30 65 79 2d 3e 64 65 66 61 75 6c 74 5f 72 63 20 3d  ey->default_rc =
21d40 20 30 3b 0a 20 20 74 61 6b 65 4a 75 6d 70 20 3d   0;.  takeJump =
21d50 20 30 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f   0;.  if( pOp->o
21d60 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 43 6f 6e 66  pcode==OP_NoConf
21d70 6c 69 63 74 20 29 7b 0a 20 20 20 20 2f 2a 20 46  lict ){.    /* F
21d80 6f 72 20 74 68 65 20 4f 50 5f 4e 6f 43 6f 6e 66  or the OP_NoConf
21d90 6c 69 63 74 20 6f 70 63 6f 64 65 2c 20 74 61 6b  lict opcode, tak
21da0 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20 61 6e  e the jump if an
21db0 79 20 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20  y of the.    ** 
21dc0 69 6e 70 75 74 20 66 69 65 6c 64 73 20 61 72 65  input fields are
21dd0 20 4e 55 4c 4c 2c 20 73 69 6e 63 65 20 61 6e 79   NULL, since any
21de0 20 6b 65 79 20 77 69 74 68 20 61 20 4e 55 4c 4c   key with a NULL
21df0 20 77 69 6c 6c 20 6e 6f 74 0a 20 20 20 20 2a 2a   will not.    **
21e00 20 63 6f 6e 66 6c 69 63 74 20 2a 2f 0a 20 20 20   conflict */.   
21e10 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 70 49   for(ii=0; ii<pI
21e20 64 78 4b 65 79 2d 3e 6e 46 69 65 6c 64 3b 20 69  dxKey->nField; i
21e30 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20  i++){.      if( 
21e40 70 49 64 78 4b 65 79 2d 3e 61 4d 65 6d 5b 69 69  pIdxKey->aMem[ii
21e50 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ].flags & MEM_Nu
21e60 6c 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 74 61  ll ){.        ta
21e70 6b 65 4a 75 6d 70 20 3d 20 31 3b 0a 20 20 20 20  keJump = 1;.    
21e80 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
21e90 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72   }.    }.  }.  r
21ea0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
21eb0 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
21ec0 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 70  C->uc.pCursor, p
21ed0 49 64 78 4b 65 79 2c 20 30 2c 20 30 2c 20 26 72  IdxKey, 0, 0, &r
21ee0 65 73 29 3b 0a 20 20 69 66 28 20 70 46 72 65 65  es);.  if( pFree
21ef0 20 29 20 73 71 6c 69 74 65 33 44 62 46 72 65 65   ) sqlite3DbFree
21f00 28 64 62 2c 20 70 46 72 65 65 29 3b 0a 20 20 69  (db, pFree);.  i
21f10 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
21f20 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f   ){.    goto abo
21f30 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
21f40 0a 20 20 7d 0a 20 20 70 43 2d 3e 73 65 65 6b 52  .  }.  pC->seekR
21f50 65 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20 61  esult = res;.  a
21f60 6c 72 65 61 64 79 45 78 69 73 74 73 20 3d 20 28  lreadyExists = (
21f70 72 65 73 3d 3d 30 29 3b 0a 20 20 70 43 2d 3e 6e  res==0);.  pC->n
21f80 75 6c 6c 52 6f 77 20 3d 20 31 2d 61 6c 72 65 61  ullRow = 1-alrea
21f90 64 79 45 78 69 73 74 73 3b 0a 20 20 70 43 2d 3e  dyExists;.  pC->
21fa0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
21fb0 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   0;.  pC->cacheS
21fc0 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
21fd0 41 4c 45 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  ALE;.  if( pOp->
21fe0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64  opcode==OP_Found
21ff0 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e   ){.    VdbeBran
22000 63 68 54 61 6b 65 6e 28 61 6c 72 65 61 64 79 45  chTaken(alreadyE
22010 78 69 73 74 73 21 3d 30 2c 32 29 3b 0a 20 20 20  xists!=0,2);.   
22020 20 69 66 28 20 61 6c 72 65 61 64 79 45 78 69 73   if( alreadyExis
22030 74 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  ts ) goto jump_t
22040 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  o_p2;.  }else{. 
22050 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
22060 65 6e 28 74 61 6b 65 4a 75 6d 70 7c 7c 61 6c 72  en(takeJump||alr
22070 65 61 64 79 45 78 69 73 74 73 3d 3d 30 2c 32 29  eadyExists==0,2)
22080 3b 0a 20 20 20 20 69 66 28 20 74 61 6b 65 4a 75  ;.    if( takeJu
22090 6d 70 20 7c 7c 20 21 61 6c 72 65 61 64 79 45 78  mp || !alreadyEx
220a0 69 73 74 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70  ists ) goto jump
220b0 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72  _to_p2;.  }.  br
220c0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
220d0 65 3a 20 53 65 65 6b 52 6f 77 69 64 20 50 31 20  e: SeekRowid P1 
220e0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
220f0 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72 5b  opsis: intkey=r[
22100 50 33 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  P3].**.** P1 is 
22110 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20 63  the index of a c
22120 75 72 73 6f 72 20 6f 70 65 6e 20 6f 6e 20 61 6e  ursor open on an
22130 20 53 51 4c 20 74 61 62 6c 65 20 62 74 72 65 65   SQL table btree
22140 20 28 77 69 74 68 20 69 6e 74 65 67 65 72 0a 2a   (with integer.*
22150 2a 20 6b 65 79 73 29 2e 20 20 49 66 20 72 65 67  * keys).  If reg
22160 69 73 74 65 72 20 50 33 20 64 6f 65 73 20 6e 6f  ister P3 does no
22170 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74  t contain an int
22180 65 67 65 72 20 6f 72 20 69 66 20 50 31 20 64 6f  eger or if P1 do
22190 65 73 20 6e 6f 74 0a 2a 2a 20 63 6f 6e 74 61 69  es not.** contai
221a0 6e 20 61 20 72 65 63 6f 72 64 20 77 69 74 68 20  n a record with 
221b0 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20 6a 75  rowid P3 then ju
221c0 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
221d0 6f 20 50 32 2e 20 20 0a 2a 2a 20 4f 72 2c 20 69  o P2.  .** Or, i
221e0 66 20 50 32 20 69 73 20 30 2c 20 72 61 69 73 65  f P2 is 0, raise
221f0 20 61 6e 20 53 51 4c 49 54 45 5f 43 4f 52 52 55   an SQLITE_CORRU
22200 50 54 20 65 72 72 6f 72 2e 20 49 66 20 50 31 20  PT error. If P1 
22210 64 6f 65 73 20 63 6f 6e 74 61 69 6e 0a 2a 2a 20  does contain.** 
22220 61 20 72 65 63 6f 72 64 20 77 69 74 68 20 72 6f  a record with ro
22230 77 69 64 20 50 33 20 74 68 65 6e 20 0a 2a 2a 20  wid P3 then .** 
22240 6c 65 61 76 65 20 74 68 65 20 63 75 72 73 6f 72  leave the cursor
22250 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 61   pointing at tha
22260 74 20 72 65 63 6f 72 64 20 61 6e 64 20 66 61 6c  t record and fal
22270 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
22280 20 6e 65 78 74 0a 2a 2a 20 69 6e 73 74 72 75 63   next.** instruc
22290 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  tion..**.** The 
222a0 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 70 63  OP_NotExists opc
222b0 6f 64 65 20 70 65 72 66 6f 72 6d 73 20 74 68 65  ode performs the
222c0 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 2c   same operation,
222d0 20 62 75 74 20 77 69 74 68 20 4f 50 5f 4e 6f 74   but with OP_Not
222e0 45 78 69 73 74 73 0a 2a 2a 20 74 68 65 20 50 33  Exists.** the P3
222f0 20 72 65 67 69 73 74 65 72 20 6d 75 73 74 20 62   register must b
22300 65 20 67 75 61 72 61 6e 74 65 65 64 20 74 6f 20  e guaranteed to 
22310 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67  contain an integ
22320 65 72 20 76 61 6c 75 65 2e 20 20 57 69 74 68 20  er value.  With 
22330 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 2c 20  this.** opcode, 
22340 72 65 67 69 73 74 65 72 20 50 33 20 6d 69 67 68  register P3 migh
22350 74 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e  t not contain an
22360 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20   integer..**.** 
22370 54 68 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20  The OP_NotFound 
22380 6f 70 63 6f 64 65 20 70 65 72 66 6f 72 6d 73 20  opcode performs 
22390 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69  the same operati
223a0 6f 6e 20 6f 6e 20 69 6e 64 65 78 20 62 74 72 65  on on index btre
223b0 65 73 0a 2a 2a 20 28 77 69 74 68 20 61 72 62 69  es.** (with arbi
223c0 74 72 61 72 79 20 6d 75 6c 74 69 2d 76 61 6c 75  trary multi-valu
223d0 65 20 6b 65 79 73 29 2e 0a 2a 2a 0a 2a 2a 20 54  e keys)..**.** T
223e0 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65  his opcode leave
223f0 73 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20  s the cursor in 
22400 61 20 73 74 61 74 65 20 77 68 65 72 65 20 69 74  a state where it
22410 20 63 61 6e 6e 6f 74 20 62 65 20 61 64 76 61 6e   cannot be advan
22420 63 65 64 0a 2a 2a 20 69 6e 20 65 69 74 68 65 72  ced.** in either
22430 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20   direction.  In 
22440 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
22450 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76 20 6f   Next and Prev o
22460 70 63 6f 64 65 73 20 77 69 6c 6c 0a 2a 2a 20 6e  pcodes will.** n
22470 6f 74 20 77 6f 72 6b 20 66 6f 6c 6c 6f 77 69 6e  ot work followin
22480 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a  g this opcode..*
22490 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
224a0 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20  ound, NotFound, 
224b0 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20 53 65 65 6b  NoConflict, Seek
224c0 52 6f 77 69 64 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  Rowid.*/./* Opco
224d0 64 65 3a 20 4e 6f 74 45 78 69 73 74 73 20 50 31  de: NotExists P1
224e0 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
224f0 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72  nopsis: intkey=r
22500 5b 50 33 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  [P3].**.** P1 is
22510 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20   the index of a 
22520 63 75 72 73 6f 72 20 6f 70 65 6e 20 6f 6e 20 61  cursor open on a
22530 6e 20 53 51 4c 20 74 61 62 6c 65 20 62 74 72 65  n SQL table btre
22540 65 20 28 77 69 74 68 20 69 6e 74 65 67 65 72 0a  e (with integer.
22550 2a 2a 20 6b 65 79 73 29 2e 20 20 50 33 20 69 73  ** keys).  P3 is
22560 20 61 6e 20 69 6e 74 65 67 65 72 20 72 6f 77 69   an integer rowi
22570 64 2e 20 20 49 66 20 50 31 20 64 6f 65 73 20 6e  d.  If P1 does n
22580 6f 74 20 63 6f 6e 74 61 69 6e 20 61 20 72 65 63  ot contain a rec
22590 6f 72 64 20 77 69 74 68 0a 2a 2a 20 72 6f 77 69  ord with.** rowi
225a0 64 20 50 33 20 74 68 65 6e 20 6a 75 6d 70 20 69  d P3 then jump i
225b0 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
225c0 2e 20 20 4f 72 2c 20 69 66 20 50 32 20 69 73 20  .  Or, if P2 is 
225d0 30 2c 20 72 61 69 73 65 20 61 6e 0a 2a 2a 20 53  0, raise an.** S
225e0 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 20 65 72  QLITE_CORRUPT er
225f0 72 6f 72 2e 20 49 66 20 50 31 20 64 6f 65 73 20  ror. If P1 does 
22600 63 6f 6e 74 61 69 6e 20 61 20 72 65 63 6f 72 64  contain a record
22610 20 77 69 74 68 20 72 6f 77 69 64 20 50 33 20 74   with rowid P3 t
22620 68 65 6e 20 0a 2a 2a 20 6c 65 61 76 65 20 74 68  hen .** leave th
22630 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e  e cursor pointin
22640 67 20 61 74 20 74 68 61 74 20 72 65 63 6f 72 64  g at that record
22650 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67   and fall throug
22660 68 20 74 6f 20 74 68 65 20 6e 65 78 74 0a 2a 2a  h to the next.**
22670 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
22680 0a 2a 2a 20 54 68 65 20 4f 50 5f 53 65 65 6b 52  .** The OP_SeekR
22690 6f 77 69 64 20 6f 70 63 6f 64 65 20 70 65 72 66  owid opcode perf
226a0 6f 72 6d 73 20 74 68 65 20 73 61 6d 65 20 6f 70  orms the same op
226b0 65 72 61 74 69 6f 6e 20 62 75 74 20 61 6c 73 6f  eration but also
226c0 20 61 6c 6c 6f 77 73 20 74 68 65 0a 2a 2a 20 50   allows the.** P
226d0 33 20 72 65 67 69 73 74 65 72 20 74 6f 20 63 6f  3 register to co
226e0 6e 74 61 69 6e 20 61 20 6e 6f 6e 2d 69 6e 74 65  ntain a non-inte
226f0 67 65 72 20 76 61 6c 75 65 2c 20 69 6e 20 77 68  ger value, in wh
22700 69 63 68 20 63 61 73 65 20 74 68 65 20 6a 75 6d  ich case the jum
22710 70 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 74  p is.** always t
22720 61 6b 65 6e 2e 20 20 54 68 69 73 20 6f 70 63 6f  aken.  This opco
22730 64 65 20 72 65 71 75 69 72 65 73 20 74 68 61 74  de requires that
22740 20 50 33 20 61 6c 77 61 79 73 20 63 6f 6e 74 61   P3 always conta
22750 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a  in an integer..*
22760 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e 6f 74 46  *.** The OP_NotF
22770 6f 75 6e 64 20 6f 70 63 6f 64 65 20 70 65 72 66  ound opcode perf
22780 6f 72 6d 73 20 74 68 65 20 73 61 6d 65 20 6f 70  orms the same op
22790 65 72 61 74 69 6f 6e 20 6f 6e 20 69 6e 64 65 78  eration on index
227a0 20 62 74 72 65 65 73 0a 2a 2a 20 28 77 69 74 68   btrees.** (with
227b0 20 61 72 62 69 74 72 61 72 79 20 6d 75 6c 74 69   arbitrary multi
227c0 2d 76 61 6c 75 65 20 6b 65 79 73 29 2e 0a 2a 2a  -value keys)..**
227d0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
227e0 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f  leaves the curso
227f0 72 20 69 6e 20 61 20 73 74 61 74 65 20 77 68 65  r in a state whe
22800 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 20  re it cannot be 
22810 61 64 76 61 6e 63 65 64 0a 2a 2a 20 69 6e 20 65  advanced.** in e
22820 69 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e  ither direction.
22830 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
22840 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50  , the Next and P
22850 72 65 76 20 6f 70 63 6f 64 65 73 20 77 69 6c 6c  rev opcodes will
22860 0a 2a 2a 20 6e 6f 74 20 77 6f 72 6b 20 66 6f 6c  .** not work fol
22870 6c 6f 77 69 6e 67 20 74 68 69 73 20 6f 70 63 6f  lowing this opco
22880 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  de..**.** See al
22890 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f  so: Found, NotFo
228a0 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c  und, NoConflict,
228b0 20 53 65 65 6b 52 6f 77 69 64 0a 2a 2f 0a 63 61   SeekRowid.*/.ca
228c0 73 65 20 4f 50 5f 53 65 65 6b 52 6f 77 69 64 3a  se OP_SeekRowid:
228d0 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
228e0 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 56 64 62 65  p, in3 */.  Vdbe
228f0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74  Cursor *pC;.  Bt
22900 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
22910 20 69 6e 74 20 72 65 73 3b 0a 20 20 75 36 34 20   int res;.  u64 
22920 69 4b 65 79 3b 0a 0a 20 20 70 49 6e 33 20 3d 20  iKey;..  pIn3 = 
22930 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
22940 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61    if( (pIn3->fla
22950 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30  gs & MEM_Int)==0
22960 20 29 7b 0a 20 20 20 20 61 70 70 6c 79 41 66 66   ){.    applyAff
22970 69 6e 69 74 79 28 70 49 6e 33 2c 20 53 51 4c 49  inity(pIn3, SQLI
22980 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20  TE_AFF_NUMERIC, 
22990 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 69  encoding);.    i
229a0 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20  f( (pIn3->flags 
229b0 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 20  & MEM_Int)==0 ) 
229c0 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
229d0 0a 20 20 7d 0a 20 20 2f 2a 20 46 61 6c 6c 20 74  .  }.  /* Fall t
229e0 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 4e  hrough into OP_N
229f0 6f 74 45 78 69 73 74 73 20 2a 2f 0a 63 61 73 65  otExists */.case
22a00 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 3a 20 20   OP_NotExists:  
22a10 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
22a20 20 69 6e 33 20 2a 2f 0a 20 20 70 49 6e 33 20 3d   in3 */.  pIn3 =
22a30 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
22a40 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d  .  assert( pIn3-
22a50 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
22a60 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
22a70 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
22a80 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
22a90 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
22aa0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
22ab0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 23  sert( pC!=0 );.#
22ac0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
22ad0 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20  UG.  pC->seekOp 
22ae0 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20 61 73  = 0;.#endif.  as
22af0 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
22b00 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  e );.  assert( p
22b10 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
22b20 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
22b30 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70  pCrsr = pC->uc.p
22b40 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74  Cursor;.  assert
22b50 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20  ( pCrsr!=0 );.  
22b60 72 65 73 20 3d 20 30 3b 0a 20 20 69 4b 65 79 20  res = 0;.  iKey 
22b70 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 72  = pIn3->u.i;.  r
22b80 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
22b90 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
22ba0 43 72 73 72 2c 20 30 2c 20 69 4b 65 79 2c 20 30  Crsr, 0, iKey, 0
22bb0 2c 20 26 72 65 73 29 3b 0a 20 20 61 73 73 65 72  , &res);.  asser
22bc0 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
22bd0 20 7c 7c 20 72 65 73 3d 3d 30 20 29 3b 0a 20 20   || res==0 );.  
22be0 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74  pC->movetoTarget
22bf0 20 3d 20 69 4b 65 79 3b 20 20 2f 2a 20 55 73 65   = iKey;  /* Use
22c00 64 20 62 79 20 4f 50 5f 44 65 6c 65 74 65 20 2a  d by OP_Delete *
22c10 2f 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  /.  pC->nullRow 
22c20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  = 0;.  pC->cache
22c30 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
22c40 54 41 4c 45 3b 0a 20 20 70 43 2d 3e 64 65 66 65  TALE;.  pC->defe
22c50 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
22c60 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
22c70 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 70  n(res!=0,2);.  p
22c80 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20  C->seekResult = 
22c90 72 65 73 3b 0a 20 20 69 66 28 20 72 65 73 21 3d  res;.  if( res!=
22ca0 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  0 ){.    assert(
22cb0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
22cc0 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  ;.    if( pOp->p
22cd0 32 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63  2==0 ){.      rc
22ce0 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50   = SQLITE_CORRUP
22cf0 54 5f 42 4b 50 54 3b 0a 20 20 20 20 7d 65 6c 73  T_BKPT;.    }els
22d00 65 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6a 75  e{.      goto ju
22d10 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a  mp_to_p2;.    }.
22d20 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67    }.  if( rc ) g
22d30 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
22d40 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b  _error;.  break;
22d50 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
22d60 65 71 75 65 6e 63 65 20 50 31 20 50 32 20 2a 20  equence P1 P2 * 
22d70 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
22d80 20 72 5b 50 32 5d 3d 63 75 72 73 6f 72 5b 50 31   r[P2]=cursor[P1
22d90 5d 2e 63 74 72 2b 2b 0a 2a 2a 0a 2a 2a 20 46 69  ].ctr++.**.** Fi
22da0 6e 64 20 74 68 65 20 6e 65 78 74 20 61 76 61 69  nd the next avai
22db0 6c 61 62 6c 65 20 73 65 71 75 65 6e 63 65 20 6e  lable sequence n
22dc0 75 6d 62 65 72 20 66 6f 72 20 63 75 72 73 6f 72  umber for cursor
22dd0 20 50 31 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68   P1..** Write th
22de0 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65  e sequence numbe
22df0 72 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  r into register 
22e00 50 32 2e 0a 2a 2a 20 54 68 65 20 73 65 71 75 65  P2..** The seque
22e10 6e 63 65 20 6e 75 6d 62 65 72 20 6f 6e 20 74 68  nce number on th
22e20 65 20 63 75 72 73 6f 72 20 69 73 20 69 6e 63 72  e cursor is incr
22e30 65 6d 65 6e 74 65 64 20 61 66 74 65 72 20 74 68  emented after th
22e40 69 73 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f  is.** instructio
22e50 6e 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  n.  .*/.case OP_
22e60 53 65 71 75 65 6e 63 65 3a 20 7b 20 20 20 20 20  Sequence: {     
22e70 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
22e80 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
22e90 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
22ea0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
22eb0 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73   assert( p->apCs
22ec0 72 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b  r[pOp->p1]!=0 );
22ed0 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70  .  assert( p->ap
22ee0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 65 43  Csr[pOp->p1]->eC
22ef0 75 72 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f  urType!=CURTYPE_
22f00 56 54 41 42 20 29 3b 0a 20 20 70 4f 75 74 20 3d  VTAB );.  pOut =
22f10 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
22f20 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d  p, pOp);.  pOut-
22f30 3e 75 2e 69 20 3d 20 70 2d 3e 61 70 43 73 72 5b  >u.i = p->apCsr[
22f40 70 4f 70 2d 3e 70 31 5d 2d 3e 73 65 71 43 6f 75  pOp->p1]->seqCou
22f50 6e 74 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  nt++;.  break;.}
22f60 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65  .../* Opcode: Ne
22f70 77 52 6f 77 69 64 20 50 31 20 50 32 20 50 33 20  wRowid P1 P2 P3 
22f80 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
22f90 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a   r[P2]=rowid.**.
22fa0 2a 2a 20 47 65 74 20 61 20 6e 65 77 20 69 6e 74  ** Get a new int
22fb0 65 67 65 72 20 72 65 63 6f 72 64 20 6e 75 6d 62  eger record numb
22fc0 65 72 20 28 61 2e 6b 2e 61 20 22 72 6f 77 69 64  er (a.k.a "rowid
22fd0 22 29 20 75 73 65 64 20 61 73 20 74 68 65 20 6b  ") used as the k
22fe0 65 79 20 74 6f 20 61 20 74 61 62 6c 65 2e 0a 2a  ey to a table..*
22ff0 2a 20 54 68 65 20 72 65 63 6f 72 64 20 6e 75 6d  * The record num
23000 62 65 72 20 69 73 20 6e 6f 74 20 70 72 65 76 69  ber is not previ
23010 6f 75 73 6c 79 20 75 73 65 64 20 61 73 20 61 20  ously used as a 
23020 6b 65 79 20 69 6e 20 74 68 65 20 64 61 74 61 62  key in the datab
23030 61 73 65 0a 2a 2a 20 74 61 62 6c 65 20 74 68 61  ase.** table tha
23040 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e  t cursor P1 poin
23050 74 73 20 74 6f 2e 20 20 54 68 65 20 6e 65 77 20  ts to.  The new 
23060 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73  record number is
23070 20 77 72 69 74 74 65 6e 0a 2a 2a 20 77 72 69 74   written.** writ
23080 74 65 6e 20 74 6f 20 72 65 67 69 73 74 65 72 20  ten to register 
23090 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 3e  P2..**.** If P3>
230a0 30 20 74 68 65 6e 20 50 33 20 69 73 20 61 20 72  0 then P3 is a r
230b0 65 67 69 73 74 65 72 20 69 6e 20 74 68 65 20 72  egister in the r
230c0 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 74 68 69  oot frame of thi
230d0 73 20 56 44 42 45 20 74 68 61 74 20 68 6f 6c 64  s VDBE that hold
230e0 73 20 0a 2a 2a 20 74 68 65 20 6c 61 72 67 65 73  s .** the larges
230f0 74 20 70 72 65 76 69 6f 75 73 6c 79 20 67 65 6e  t previously gen
23100 65 72 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75  erated record nu
23110 6d 62 65 72 2e 20 4e 6f 20 6e 65 77 20 72 65 63  mber. No new rec
23120 6f 72 64 20 6e 75 6d 62 65 72 73 20 61 72 65 0a  ord numbers are.
23130 2a 2a 20 61 6c 6c 6f 77 65 64 20 74 6f 20 62 65  ** allowed to be
23140 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20   less than this 
23150 76 61 6c 75 65 2e 20 57 68 65 6e 20 74 68 69 73  value. When this
23160 20 76 61 6c 75 65 20 72 65 61 63 68 65 73 20 69   value reaches i
23170 74 73 20 6d 61 78 69 6d 75 6d 2c 20 0a 2a 2a 20  ts maximum, .** 
23180 61 6e 20 53 51 4c 49 54 45 5f 46 55 4c 4c 20 65  an SQLITE_FULL e
23190 72 72 6f 72 20 69 73 20 67 65 6e 65 72 61 74 65  rror is generate
231a0 64 2e 20 54 68 65 20 50 33 20 72 65 67 69 73 74  d. The P3 regist
231b0 65 72 20 69 73 20 75 70 64 61 74 65 64 20 77 69  er is updated wi
231c0 74 68 20 74 68 65 20 27 0a 2a 2a 20 67 65 6e 65  th the '.** gene
231d0 72 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75 6d  rated record num
231e0 62 65 72 2e 20 54 68 69 73 20 50 33 20 6d 65 63  ber. This P3 mec
231f0 68 61 6e 69 73 6d 20 69 73 20 75 73 65 64 20 74  hanism is used t
23200 6f 20 68 65 6c 70 20 69 6d 70 6c 65 6d 65 6e 74  o help implement
23210 20 74 68 65 0a 2a 2a 20 41 55 54 4f 49 4e 43 52   the.** AUTOINCR
23220 45 4d 45 4e 54 20 66 65 61 74 75 72 65 2e 0a 2a  EMENT feature..*
23230 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 77 52 6f 77  /.case OP_NewRow
23240 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  id: {           
23250 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 36 34  /* out2 */.  i64
23260 20 76 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   v;             
23270 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72      /* The new r
23280 6f 77 69 64 20 2a 2f 0a 20 20 56 64 62 65 43 75  owid */.  VdbeCu
23290 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 20 20 20  rsor *pC;       
232a0 20 2f 2a 20 43 75 72 73 6f 72 20 6f 66 20 74 61   /* Cursor of ta
232b0 62 6c 65 20 74 6f 20 67 65 74 20 74 68 65 20 6e  ble to get the n
232c0 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69 6e  ew rowid */.  in
232d0 74 20 72 65 73 3b 20 20 20 20 20 20 20 20 20 20  t res;          
232e0 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f       /* Result o
232f0 66 20 61 6e 20 73 71 6c 69 74 65 33 42 74 72 65  f an sqlite3Btre
23300 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20 69 6e 74  eLast() */.  int
23310 20 63 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20   cnt;           
23320 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20 74      /* Counter t
23330 6f 20 6c 69 6d 69 74 20 74 68 65 20 6e 75 6d 62  o limit the numb
23340 65 72 20 6f 66 20 73 65 61 72 63 68 65 73 20 2a  er of searches *
23350 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20  /.  Mem *pMem;  
23360 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
23370 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 6c  gister holding l
23380 61 72 67 65 73 74 20 72 6f 77 69 64 20 66 6f 72  argest rowid for
23390 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a   AUTOINCREMENT *
233a0 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70  /.  VdbeFrame *p
233b0 46 72 61 6d 65 3b 20 20 20 20 20 2f 2a 20 52 6f  Frame;     /* Ro
233c0 6f 74 20 66 72 61 6d 65 20 6f 66 20 56 44 42 45  ot frame of VDBE
233d0 20 2a 2f 0a 0a 20 20 76 20 3d 20 30 3b 0a 20 20   */..  v = 0;.  
233e0 72 65 73 20 3d 20 30 3b 0a 20 20 70 4f 75 74 20  res = 0;.  pOut 
233f0 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
23400 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65  (p, pOp);.  asse
23410 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
23420 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
23430 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
23440 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
23450 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
23460 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
23470 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
23480 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
23490 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70  assert( pC->uc.p
234a0 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 7b  Cursor!=0 );.  {
234b0 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74  .    /* The next
234c0 20 72 6f 77 69 64 20 6f 72 20 72 65 63 6f 72 64   rowid or record
234d0 20 6e 75 6d 62 65 72 20 28 64 69 66 66 65 72 65   number (differe
234e0 6e 74 20 74 65 72 6d 73 20 66 6f 72 20 74 68 65  nt terms for the
234f0 20 73 61 6d 65 0a 20 20 20 20 2a 2a 20 74 68 69   same.    ** thi
23500 6e 67 29 20 69 73 20 6f 62 74 61 69 6e 65 64 20  ng) is obtained 
23510 69 6e 20 61 20 74 77 6f 2d 73 74 65 70 20 61 6c  in a two-step al
23520 67 6f 72 69 74 68 6d 2e 0a 20 20 20 20 2a 2a 0a  gorithm..    **.
23530 20 20 20 20 2a 2a 20 46 69 72 73 74 20 77 65 20      ** First we 
23540 61 74 74 65 6d 70 74 20 74 6f 20 66 69 6e 64 20  attempt to find 
23550 74 68 65 20 6c 61 72 67 65 73 74 20 65 78 69 73  the largest exis
23560 74 69 6e 67 20 72 6f 77 69 64 20 61 6e 64 20 61  ting rowid and a
23570 64 64 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 74 6f  dd one.    ** to
23580 20 74 68 61 74 2e 20 20 42 75 74 20 69 66 20 74   that.  But if t
23590 68 65 20 6c 61 72 67 65 73 74 20 65 78 69 73 74  he largest exist
235a0 69 6e 67 20 72 6f 77 69 64 20 69 73 20 61 6c 72  ing rowid is alr
235b0 65 61 64 79 20 74 68 65 20 6d 61 78 69 6d 75 6d  eady the maximum
235c0 0a 20 20 20 20 2a 2a 20 70 6f 73 69 74 69 76 65  .    ** positive
235d0 20 69 6e 74 65 67 65 72 2c 20 77 65 20 68 61 76   integer, we hav
235e0 65 20 74 6f 20 66 61 6c 6c 20 74 68 72 6f 75 67  e to fall throug
235f0 68 20 74 6f 20 74 68 65 20 73 65 63 6f 6e 64 0a  h to the second.
23600 20 20 20 20 2a 2a 20 70 72 6f 62 61 62 69 6c 69      ** probabili
23610 73 74 69 63 20 61 6c 67 6f 72 69 74 68 6d 0a 20  stic algorithm. 
23620 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 68 65     **.    ** The
23630 20 73 65 63 6f 6e 64 20 61 6c 67 6f 72 69 74 68   second algorith
23640 6d 20 69 73 20 74 6f 20 73 65 6c 65 63 74 20 61  m is to select a
23650 20 72 6f 77 69 64 20 61 74 20 72 61 6e 64 6f 6d   rowid at random
23660 20 61 6e 64 20 73 65 65 20 69 66 0a 20 20 20 20   and see if.    
23670 2a 2a 20 69 74 20 61 6c 72 65 61 64 79 20 65 78  ** it already ex
23680 69 73 74 73 20 69 6e 20 74 68 65 20 74 61 62 6c  ists in the tabl
23690 65 2e 20 20 49 66 20 69 74 20 64 6f 65 73 20 6e  e.  If it does n
236a0 6f 74 20 65 78 69 73 74 2c 20 77 65 20 68 61 76  ot exist, we hav
236b0 65 0a 20 20 20 20 2a 2a 20 73 75 63 63 65 65 64  e.    ** succeed
236c0 65 64 2e 20 20 49 66 20 74 68 65 20 72 61 6e 64  ed.  If the rand
236d0 6f 6d 20 72 6f 77 69 64 20 64 6f 65 73 20 65 78  om rowid does ex
236e0 69 73 74 2c 20 77 65 20 73 65 6c 65 63 74 20 61  ist, we select a
236f0 20 6e 65 77 20 6f 6e 65 0a 20 20 20 20 2a 2a 20   new one.    ** 
23700 61 6e 64 20 74 72 79 20 61 67 61 69 6e 2c 20 75  and try again, u
23710 70 20 74 6f 20 31 30 30 20 74 69 6d 65 73 2e 0a  p to 100 times..
23720 20 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72      */.    asser
23730 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  t( pC->isTable )
23740 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
23750 5f 33 32 42 49 54 5f 52 4f 57 49 44 0a 23 20 20  _32BIT_ROWID.#  
23760 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49   define MAX_ROWI
23770 44 20 30 78 37 66 66 66 66 66 66 66 0a 23 65 6c  D 0x7fffffff.#el
23780 73 65 0a 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63  se.    /* Some c
23790 6f 6d 70 69 6c 65 72 73 20 63 6f 6d 70 6c 61 69  ompilers complai
237a0 6e 20 61 62 6f 75 74 20 63 6f 6e 73 74 61 6e 74  n about constant
237b0 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 30 78  s of the form 0x
237c0 37 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66  7fffffffffffffff
237d0 2e 0a 20 20 20 20 2a 2a 20 4f 74 68 65 72 73 20  ..    ** Others 
237e0 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 30  complain about 0
237f0 78 37 66 66 66 66 66 66 66 66 66 66 66 66 66 66  x7ffffffffffffff
23800 66 66 4c 4c 2e 20 20 54 68 65 20 66 6f 6c 6c 6f  ffLL.  The follo
23810 77 69 6e 67 20 6d 61 63 72 6f 20 73 65 65 6d 73  wing macro seems
23820 0a 20 20 20 20 2a 2a 20 74 6f 20 70 72 6f 76 69  .    ** to provi
23830 64 65 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20  de the constant 
23840 77 68 69 6c 65 20 6d 61 6b 69 6e 67 20 61 6c 6c  while making all
23850 20 63 6f 6d 70 69 6c 65 72 73 20 68 61 70 70 79   compilers happy
23860 2e 0a 20 20 20 20 2a 2f 0a 23 20 20 20 64 65 66  ..    */.#   def
23870 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 20 28  ine MAX_ROWID  (
23880 69 36 34 29 28 20 28 28 28 75 36 34 29 30 78 37  i64)( (((u64)0x7
23890 66 66 66 66 66 66 66 29 3c 3c 33 32 29 20 7c 20  fffffff)<<32) | 
238a0 28 75 36 34 29 30 78 66 66 66 66 66 66 66 66 20  (u64)0xffffffff 
238b0 29 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 69 66  ).#endif..    if
238c0 28 20 21 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d  ( !pC->useRandom
238d0 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 72  Rowid ){.      r
238e0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
238f0 4c 61 73 74 28 70 43 2d 3e 75 63 2e 70 43 75 72  Last(pC->uc.pCur
23900 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  sor, &res);.    
23910 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
23920 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67  _OK ){.        g
23930 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
23940 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
23950 20 20 20 20 20 20 69 66 28 20 72 65 73 20 29 7b        if( res ){
23960 0a 20 20 20 20 20 20 20 20 76 20 3d 20 31 3b 20  .        v = 1; 
23970 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 36 31 39 31    /* IMP: R-6191
23980 34 2d 34 38 30 37 34 20 2a 2f 0a 20 20 20 20 20  4-48074 */.     
23990 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
239a0 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42  assert( sqlite3B
239b0 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69  treeCursorIsVali
239c0 64 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  d(pC->uc.pCursor
239d0 29 20 29 3b 0a 20 20 20 20 20 20 20 20 76 20 3d  ) );.        v =
239e0 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 74   sqlite3BtreeInt
239f0 65 67 65 72 4b 65 79 28 70 43 2d 3e 75 63 2e 70  egerKey(pC->uc.p
23a00 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 20  Cursor);.       
23a10 20 69 66 28 20 76 3e 3d 4d 41 58 5f 52 4f 57 49   if( v>=MAX_ROWI
23a20 44 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70  D ){.          p
23a30 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69  C->useRandomRowi
23a40 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d  d = 1;.        }
23a50 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
23a60 76 2b 2b 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52  v++;   /* IMP: R
23a70 2d 32 39 35 33 38 2d 33 34 39 38 37 20 2a 2f 0a  -29538-34987 */.
23a80 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
23a90 7d 0a 20 20 20 20 7d 0a 0a 23 69 66 6e 64 65 66  }.    }..#ifndef
23aa0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
23ab0 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 20 20 69  OINCREMENT.    i
23ac0 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20  f( pOp->p3 ){.  
23ad0 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68      /* Assert th
23ae0 61 74 20 50 33 20 69 73 20 61 20 76 61 6c 69 64  at P3 is a valid
23af0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f   memory cell. */
23b00 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
23b10 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20  Op->p3>0 );.    
23b20 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20    if( p->pFrame 
23b30 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 70  ){.        for(p
23b40 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b  Frame=p->pFrame;
23b50 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74   pFrame->pParent
23b60 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d  ; pFrame=pFrame-
23b70 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 20  >pParent);.     
23b80 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61     /* Assert tha
23b90 74 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20  t P3 is a valid 
23ba0 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a  memory cell. */.
23bb0 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
23bc0 70 4f 70 2d 3e 70 33 3c 3d 70 46 72 61 6d 65 2d  pOp->p3<=pFrame-
23bd0 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 20  >nMem );.       
23be0 20 70 4d 65 6d 20 3d 20 26 70 46 72 61 6d 65 2d   pMem = &pFrame-
23bf0 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  >aMem[pOp->p3];.
23c00 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
23c10 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74       /* Assert t
23c20 68 61 74 20 50 33 20 69 73 20 61 20 76 61 6c 69  hat P3 is a vali
23c30 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a  d memory cell. *
23c40 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  /.        assert
23c50 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  ( pOp->p3<=(p->n
23c60 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
23c70 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 70  or) );.        p
23c80 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Mem = &aMem[pOp-
23c90 3e 70 33 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65  >p3];.        me
23ca0 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
23cb0 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 7d  , pMem);.      }
23cc0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d  .      assert( m
23cd0 65 6d 49 73 56 61 6c 69 64 28 70 4d 65 6d 29 20  emIsValid(pMem) 
23ce0 29 3b 0a 0a 20 20 20 20 20 20 52 45 47 49 53 54  );..      REGIST
23cf0 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
23d00 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 73  , pMem);.      s
23d10 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
23d20 65 67 65 72 69 66 79 28 70 4d 65 6d 29 3b 0a 20  egerify(pMem);. 
23d30 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70 4d       assert( (pM
23d40 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  em->flags & MEM_
23d50 49 6e 74 29 21 3d 30 20 29 3b 20 20 2f 2a 20 6d  Int)!=0 );  /* m
23d60 65 6d 28 50 33 29 20 68 6f 6c 64 73 20 61 6e 20  em(P3) holds an 
23d70 69 6e 74 65 67 65 72 20 2a 2f 0a 20 20 20 20 20  integer */.     
23d80 20 69 66 28 20 70 4d 65 6d 2d 3e 75 2e 69 3d 3d   if( pMem->u.i==
23d90 4d 41 58 5f 52 4f 57 49 44 20 7c 7c 20 70 43 2d  MAX_ROWID || pC-
23da0 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20  >useRandomRowid 
23db0 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
23dc0 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f  SQLITE_FULL;   /
23dd0 2a 20 49 4d 50 3a 20 52 2d 31 37 38 31 37 2d 30  * IMP: R-17817-0
23de0 30 36 33 30 20 2a 2f 0a 20 20 20 20 20 20 20 20  0630 */.        
23df0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
23e00 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  o_error;.      }
23e10 0a 20 20 20 20 20 20 69 66 28 20 76 3c 70 4d 65  .      if( v<pMe
23e20 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a 20 20 20 20  m->u.i+1 ){.    
23e30 20 20 20 20 76 20 3d 20 70 4d 65 6d 2d 3e 75 2e      v = pMem->u.
23e40 69 20 2b 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20  i + 1;.      }. 
23e50 20 20 20 20 20 70 4d 65 6d 2d 3e 75 2e 69 20 3d       pMem->u.i =
23e60 20 76 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66   v;.    }.#endif
23e70 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 75 73 65  .    if( pC->use
23e80 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20  RandomRowid ){. 
23e90 20 20 20 20 20 2f 2a 20 49 4d 50 4c 45 4d 45 4e       /* IMPLEMEN
23ea0 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 30 37 36  TATION-OF: R-076
23eb0 37 37 2d 34 31 38 38 31 20 49 66 20 74 68 65 20  77-41881 If the 
23ec0 6c 61 72 67 65 73 74 20 52 4f 57 49 44 20 69 73  largest ROWID is
23ed0 20 65 71 75 61 6c 20 74 6f 20 74 68 65 0a 20 20   equal to the.  
23ee0 20 20 20 20 2a 2a 20 6c 61 72 67 65 73 74 20 70      ** largest p
23ef0 6f 73 73 69 62 6c 65 20 69 6e 74 65 67 65 72 20  ossible integer 
23f00 28 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37  (922337203685477
23f10 35 38 30 37 29 20 74 68 65 6e 20 74 68 65 20 64  5807) then the d
23f20 61 74 61 62 61 73 65 0a 20 20 20 20 20 20 2a 2a  atabase.      **
23f30 20 65 6e 67 69 6e 65 20 73 74 61 72 74 73 20 70   engine starts p
23f40 69 63 6b 69 6e 67 20 70 6f 73 69 74 69 76 65 20  icking positive 
23f50 63 61 6e 64 69 64 61 74 65 20 52 4f 57 49 44 73  candidate ROWIDs
23f60 20 61 74 20 72 61 6e 64 6f 6d 20 75 6e 74 69 6c   at random until
23f70 0a 20 20 20 20 20 20 2a 2a 20 69 74 20 66 69 6e  .      ** it fin
23f80 64 73 20 6f 6e 65 20 74 68 61 74 20 69 73 20 6e  ds one that is n
23f90 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73  ot previously us
23fa0 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73 73  ed. */.      ass
23fb0 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d 3d 30 20  ert( pOp->p3==0 
23fc0 29 3b 20 20 2f 2a 20 57 65 20 63 61 6e 6e 6f 74  );  /* We cannot
23fd0 20 62 65 20 69 6e 20 72 61 6e 64 6f 6d 20 72 6f   be in random ro
23fe0 77 69 64 20 6d 6f 64 65 20 69 66 20 74 68 69 73  wid mode if this
23ff0 20 69 73 0a 20 20 20 20 20 20 20 20 20 20 20 20   is.            
24000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24010 20 2a 2a 20 61 6e 20 41 55 54 4f 49 4e 43 52 45   ** an AUTOINCRE
24020 4d 45 4e 54 20 74 61 62 6c 65 2e 20 2a 2f 0a 20  MENT table. */. 
24030 20 20 20 20 20 63 6e 74 20 3d 20 30 3b 0a 20 20       cnt = 0;.  
24040 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20 20      do{.        
24050 73 71 6c 69 74 65 33 5f 72 61 6e 64 6f 6d 6e 65  sqlite3_randomne
24060 73 73 28 73 69 7a 65 6f 66 28 76 29 2c 20 26 76  ss(sizeof(v), &v
24070 29 3b 0a 20 20 20 20 20 20 20 20 76 20 26 3d 20  );.        v &= 
24080 28 4d 41 58 5f 52 4f 57 49 44 3e 3e 31 29 3b 20  (MAX_ROWID>>1); 
24090 76 2b 2b 3b 20 20 2f 2a 20 45 6e 73 75 72 65 20  v++;  /* Ensure 
240a0 74 68 61 74 20 76 20 69 73 20 67 72 65 61 74 65  that v is greate
240b0 72 20 74 68 61 6e 20 7a 65 72 6f 20 2a 2f 0a 20  r than zero */. 
240c0 20 20 20 20 20 7d 77 68 69 6c 65 28 20 20 28 28       }while(  ((
240d0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
240e0 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28  eMovetoUnpacked(
240f0 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20  pC->uc.pCursor, 
24100 30 2c 20 28 75 36 34 29 76 2c 0a 20 20 20 20 20  0, (u64)v,.     
24110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24130 20 20 20 20 20 20 20 20 20 20 20 20 30 2c 20 26              0, &
24140 72 65 73 29 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b  res))==SQLITE_OK
24150 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 26 26  ).            &&
24160 20 28 72 65 73 3d 3d 30 29 0a 20 20 20 20 20 20   (res==0).      
24170 20 20 20 20 20 20 26 26 20 28 2b 2b 63 6e 74 3c        && (++cnt<
24180 31 30 30 29 29 3b 0a 20 20 20 20 20 20 69 66 28  100));.      if(
24190 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
241a0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
241b0 20 20 20 20 20 69 66 28 20 72 65 73 3d 3d 30 20       if( res==0 
241c0 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
241d0 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f  SQLITE_FULL;   /
241e0 2a 20 49 4d 50 3a 20 52 2d 33 38 32 31 39 2d 35  * IMP: R-38219-5
241f0 33 30 30 32 20 2a 2f 0a 20 20 20 20 20 20 20 20  3002 */.        
24200 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
24210 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  o_error;.      }
24220 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 76  .      assert( v
24230 3e 30 20 29 3b 20 20 2f 2a 20 45 56 3a 20 52 2d  >0 );  /* EV: R-
24240 34 30 38 31 32 2d 30 33 35 37 30 20 2a 2f 0a 20  40812-03570 */. 
24250 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 64 65 66     }.    pC->def
24260 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
24270 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
24280 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
24290 4c 45 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  LE;.  }.  pOut->
242a0 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b  u.i = v;.  break
242b0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
242c0 49 6e 73 65 72 74 20 50 31 20 50 32 20 50 33 20  Insert P1 P2 P3 
242d0 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
242e0 73 3a 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 20  s: intkey=r[P3] 
242f0 64 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  data=r[P2].**.**
24300 20 57 72 69 74 65 20 61 6e 20 65 6e 74 72 79 20   Write an entry 
24310 69 6e 74 6f 20 74 68 65 20 74 61 62 6c 65 20 6f  into the table o
24320 66 20 63 75 72 73 6f 72 20 50 31 2e 20 20 41 20  f cursor P1.  A 
24330 6e 65 77 20 65 6e 74 72 79 20 69 73 0a 2a 2a 20  new entry is.** 
24340 63 72 65 61 74 65 64 20 69 66 20 69 74 20 64 6f  created if it do
24350 65 73 6e 27 74 20 61 6c 72 65 61 64 79 20 65 78  esn't already ex
24360 69 73 74 20 6f 72 20 74 68 65 20 64 61 74 61 20  ist or the data 
24370 66 6f 72 20 61 6e 20 65 78 69 73 74 69 6e 67 0a  for an existing.
24380 2a 2a 20 65 6e 74 72 79 20 69 73 20 6f 76 65 72  ** entry is over
24390 77 72 69 74 74 65 6e 2e 20 20 54 68 65 20 64 61  written.  The da
243a0 74 61 20 69 73 20 74 68 65 20 76 61 6c 75 65 20  ta is the value 
243b0 4d 45 4d 5f 42 6c 6f 62 20 73 74 6f 72 65 64 20  MEM_Blob stored 
243c0 69 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6e  in register.** n
243d0 75 6d 62 65 72 20 50 32 2e 20 54 68 65 20 6b 65  umber P2. The ke
243e0 79 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  y is stored in r
243f0 65 67 69 73 74 65 72 20 50 33 2e 20 54 68 65 20  egister P3. The 
24400 6b 65 79 20 6d 75 73 74 0a 2a 2a 20 62 65 20 61  key must.** be a
24410 20 4d 45 4d 5f 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20   MEM_Int..**.** 
24420 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43  If the OPFLAG_NC
24430 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 35  HANGE flag of P5
24440 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68   is set, then th
24450 65 20 72 6f 77 20 63 68 61 6e 67 65 20 63 6f 75  e row change cou
24460 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65  nt is.** increme
24470 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73 65 20  nted (otherwise 
24480 6e 6f 74 29 2e 20 20 49 66 20 74 68 65 20 4f 50  not).  If the OP
24490 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 66  FLAG_LASTROWID f
244a0 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74  lag of P5 is set
244b0 2c 0a 2a 2a 20 74 68 65 6e 20 72 6f 77 69 64 20  ,.** then rowid 
244c0 69 73 20 73 74 6f 72 65 64 20 66 6f 72 20 73 75  is stored for su
244d0 62 73 65 71 75 65 6e 74 20 72 65 74 75 72 6e 20  bsequent return 
244e0 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65  by the.** sqlite
244f0 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f  3_last_insert_ro
24500 77 69 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 28  wid() function (
24510 6f 74 68 65 72 77 69 73 65 20 69 74 20 69 73 20  otherwise it is 
24520 75 6e 6d 6f 64 69 66 69 65 64 29 2e 0a 2a 2a 0a  unmodified)..**.
24530 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  ** If the OPFLAG
24540 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66  _USESEEKRESULT f
24550 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74  lag of P5 is set
24560 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  , the implementa
24570 74 69 6f 6e 20 6d 69 67 68 74 0a 2a 2a 20 72 75  tion might.** ru
24580 6e 20 66 61 73 74 65 72 20 62 79 20 61 76 6f 69  n faster by avoi
24590 64 69 6e 67 20 61 6e 20 75 6e 6e 65 63 65 73 73  ding an unnecess
245a0 61 72 79 20 73 65 65 6b 20 6f 6e 20 63 75 72 73  ary seek on curs
245b0 6f 72 20 50 31 2e 20 20 48 6f 77 65 76 65 72 2c  or P1.  However,
245c0 0a 2a 2a 20 74 68 65 20 4f 50 46 4c 41 47 5f 55  .** the OPFLAG_U
245d0 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61  SESEEKRESULT fla
245e0 67 20 6d 75 73 74 20 6f 6e 6c 79 20 62 65 20 73  g must only be s
245f0 65 74 20 69 66 20 74 68 65 72 65 20 68 61 76 65  et if there have
24600 20 62 65 65 6e 20 6e 6f 20 70 72 69 6f 72 0a 2a   been no prior.*
24610 2a 20 73 65 65 6b 73 20 6f 6e 20 74 68 65 20 63  * seeks on the c
24620 75 72 73 6f 72 20 6f 72 20 69 66 20 74 68 65 20  ursor or if the 
24630 6d 6f 73 74 20 72 65 63 65 6e 74 20 73 65 65 6b  most recent seek
24640 20 75 73 65 64 20 61 20 6b 65 79 20 65 71 75 61   used a key equa
24650 6c 20 74 6f 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49  l to P3..**.** I
24660 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 49 53 55  f the OPFLAG_ISU
24670 50 44 41 54 45 20 66 6c 61 67 20 69 73 20 73 65  PDATE flag is se
24680 74 2c 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63  t, then this opc
24690 6f 64 65 20 69 73 20 70 61 72 74 20 6f 66 20 61  ode is part of a
246a0 6e 0a 2a 2a 20 55 50 44 41 54 45 20 6f 70 65 72  n.** UPDATE oper
246b0 61 74 69 6f 6e 2e 20 20 4f 74 68 65 72 77 69 73  ation.  Otherwis
246c0 65 20 28 69 66 20 74 68 65 20 66 6c 61 67 20 69  e (if the flag i
246d0 73 20 63 6c 65 61 72 29 20 74 68 65 6e 20 74 68  s clear) then th
246e0 69 73 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20  is opcode.** is 
246f0 70 61 72 74 20 6f 66 20 61 6e 20 49 4e 53 45 52  part of an INSER
24700 54 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 54 68  T operation.  Th
24710 65 20 64 69 66 66 65 72 65 6e 63 65 20 69 73 20  e difference is 
24720 6f 6e 6c 79 20 69 6d 70 6f 72 74 61 6e 74 20 74  only important t
24730 6f 0a 2a 2a 20 74 68 65 20 75 70 64 61 74 65 20  o.** the update 
24740 68 6f 6f 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61  hook..**.** Para
24750 6d 65 74 65 72 20 50 34 20 6d 61 79 20 70 6f 69  meter P4 may poi
24760 6e 74 20 74 6f 20 61 20 54 61 62 6c 65 20 73 74  nt to a Table st
24770 72 75 63 74 75 72 65 2c 20 6f 72 20 6d 61 79 20  ructure, or may 
24780 62 65 20 4e 55 4c 4c 2e 20 49 66 20 69 74 20 69  be NULL. If it i
24790 73 20 0a 2a 2a 20 6e 6f 74 20 4e 55 4c 4c 2c 20  s .** not NULL, 
247a0 74 68 65 6e 20 74 68 65 20 75 70 64 61 74 65 2d  then the update-
247b0 68 6f 6f 6b 20 28 73 71 6c 69 74 65 33 2e 78 55  hook (sqlite3.xU
247c0 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 20 69  pdateCallback) i
247d0 73 20 69 6e 76 6f 6b 65 64 20 0a 2a 2a 20 66 6f  s invoked .** fo
247e0 6c 6c 6f 77 69 6e 67 20 61 20 73 75 63 63 65 73  llowing a succes
247f0 73 66 75 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a 0a  sful insert..**.
24800 2a 2a 20 28 57 41 52 4e 49 4e 47 2f 54 4f 44 4f  ** (WARNING/TODO
24810 3a 20 49 66 20 50 31 20 69 73 20 61 20 70 73 65  : If P1 is a pse
24820 75 64 6f 2d 63 75 72 73 6f 72 20 61 6e 64 20 50  udo-cursor and P
24830 32 20 69 73 20 64 79 6e 61 6d 69 63 61 6c 6c 79  2 is dynamically
24840 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 74  .** allocated, t
24850 68 65 6e 20 6f 77 6e 65 72 73 68 69 70 20 6f 66  hen ownership of
24860 20 50 32 20 69 73 20 74 72 61 6e 73 66 65 72 72   P2 is transferr
24870 65 64 20 74 6f 20 74 68 65 20 70 73 65 75 64 6f  ed to the pseudo
24880 2d 63 75 72 73 6f 72 0a 2a 2a 20 61 6e 64 20 72  -cursor.** and r
24890 65 67 69 73 74 65 72 20 50 32 20 62 65 63 6f 6d  egister P2 becom
248a0 65 73 20 65 70 68 65 6d 65 72 61 6c 2e 20 20 49  es ephemeral.  I
248b0 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  f the cursor is 
248c0 63 68 61 6e 67 65 64 2c 20 74 68 65 0a 2a 2a 20  changed, the.** 
248d0 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65  value of registe
248e0 72 20 50 32 20 77 69 6c 6c 20 74 68 65 6e 20 63  r P2 will then c
248f0 68 61 6e 67 65 2e 20 20 4d 61 6b 65 20 73 75 72  hange.  Make sur
24900 65 20 74 68 69 73 20 64 6f 65 73 20 6e 6f 74 0a  e this does not.
24910 2a 2a 20 63 61 75 73 65 20 61 6e 79 20 70 72 6f  ** cause any pro
24920 62 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54 68  blems.).**.** Th
24930 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f  is instruction o
24940 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 74 61 62  nly works on tab
24950 6c 65 73 2e 20 20 54 68 65 20 65 71 75 69 76 61  les.  The equiva
24960 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  lent instruction
24970 0a 2a 2a 20 66 6f 72 20 69 6e 64 69 63 65 73 20  .** for indices 
24980 69 73 20 4f 50 5f 49 64 78 49 6e 73 65 72 74 2e  is OP_IdxInsert.
24990 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .*/./* Opcode: I
249a0 6e 73 65 72 74 49 6e 74 20 50 31 20 50 32 20 50  nsertInt P1 P2 P
249b0 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
249c0 73 69 73 3a 20 69 6e 74 6b 65 79 3d 50 33 20 64  sis: intkey=P3 d
249d0 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20  ata=r[P2].**.** 
249e0 54 68 69 73 20 77 6f 72 6b 73 20 65 78 61 63 74  This works exact
249f0 6c 79 20 6c 69 6b 65 20 4f 50 5f 49 6e 73 65 72  ly like OP_Inser
24a00 74 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  t except that th
24a10 65 20 6b 65 79 20 69 73 20 74 68 65 0a 2a 2a 20  e key is the.** 
24a20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50 33  integer value P3
24a30 2c 20 6e 6f 74 20 74 68 65 20 76 61 6c 75 65 20  , not the value 
24a40 6f 66 20 74 68 65 20 69 6e 74 65 67 65 72 20 73  of the integer s
24a50 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
24a60 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P3..*/.case OP
24a70 5f 49 6e 73 65 72 74 3a 20 0a 63 61 73 65 20 4f  _Insert: .case O
24a80 50 5f 49 6e 73 65 72 74 49 6e 74 3a 20 7b 0a 20  P_InsertInt: {. 
24a90 20 4d 65 6d 20 2a 70 44 61 74 61 3b 20 20 20 20   Mem *pData;    
24aa0 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68     /* MEM cell h
24ab0 6f 6c 64 69 6e 67 20 64 61 74 61 20 66 6f 72 20  olding data for 
24ac0 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 62 65  the record to be
24ad0 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20 4d   inserted */.  M
24ae0 65 6d 20 2a 70 4b 65 79 3b 20 20 20 20 20 20 20  em *pKey;       
24af0 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c   /* MEM cell hol
24b00 64 69 6e 67 20 6b 65 79 20 20 66 6f 72 20 74 68  ding key  for th
24b10 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 56 64  e record */.  Vd
24b20 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20  beCursor *pC;   
24b30 2f 2a 20 43 75 72 73 6f 72 20 74 6f 20 74 61 62  /* Cursor to tab
24b40 6c 65 20 69 6e 74 6f 20 77 68 69 63 68 20 69 6e  le into which in
24b50 73 65 72 74 20 69 73 20 77 72 69 74 74 65 6e 20  sert is written 
24b60 2a 2f 0a 20 20 69 6e 74 20 73 65 65 6b 52 65 73  */.  int seekRes
24b70 75 6c 74 3b 20 20 20 2f 2a 20 52 65 73 75 6c 74  ult;   /* Result
24b80 20 6f 66 20 70 72 69 6f 72 20 73 65 65 6b 20 6f   of prior seek o
24b90 72 20 30 20 69 66 20 6e 6f 20 55 53 45 53 45 45  r 0 if no USESEE
24ba0 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 2a 2f 0a  KRESULT flag */.
24bb0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44    const char *zD
24bc0 62 3b 20 20 2f 2a 20 64 61 74 61 62 61 73 65 20  b;  /* database 
24bd0 6e 61 6d 65 20 2d 20 75 73 65 64 20 62 79 20 74  name - used by t
24be0 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 20 2a  he update hook *
24bf0 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b  /.  Table *pTab;
24c00 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 73        /* Table s
24c10 74 72 75 63 74 75 72 65 20 2d 20 75 73 65 64 20  tructure - used 
24c20 62 79 20 75 70 64 61 74 65 20 61 6e 64 20 70 72  by update and pr
24c30 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b 73 20 2a  e-update hooks *
24c40 2f 0a 20 20 69 6e 74 20 6f 70 3b 20 20 20 20 20  /.  int op;     
24c50 20 20 20 20 20 20 2f 2a 20 4f 70 63 6f 64 65 20        /* Opcode 
24c60 66 6f 72 20 75 70 64 61 74 65 20 68 6f 6f 6b 3a  for update hook:
24c70 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20 6f   SQLITE_UPDATE o
24c80 72 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 20  r SQLITE_INSERT 
24c90 2a 2f 0a 20 20 42 74 72 65 65 50 61 79 6c 6f 61  */.  BtreePayloa
24ca0 64 20 78 3b 20 20 20 2f 2a 20 50 61 79 6c 6f 61  d x;   /* Payloa
24cb0 64 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64  d to be inserted
24cc0 20 2a 2f 0a 0a 20 20 6f 70 20 3d 20 30 3b 0a 20   */..  op = 0;. 
24cd0 20 70 44 61 74 61 20 3d 20 26 61 4d 65 6d 5b 70   pData = &aMem[p
24ce0 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72  Op->p2];.  asser
24cf0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
24d00 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
24d10 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
24d20 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 44 61 74   memIsValid(pDat
24d30 61 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  a) );.  pC = p->
24d40 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
24d50 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
24d60 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
24d70 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
24d80 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73  PE_BTREE );.  as
24d90 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75  sert( pC->uc.pCu
24da0 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73  rsor!=0 );.  ass
24db0 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
24dc0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
24dd0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54 41  p->p4type==P4_TA
24de0 42 4c 45 20 7c 7c 20 70 4f 70 2d 3e 70 34 74 79  BLE || pOp->p4ty
24df0 70 65 3e 3d 50 34 5f 53 54 41 54 49 43 20 29 3b  pe>=P4_STATIC );
24e00 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
24e10 45 28 70 4f 70 2d 3e 70 32 2c 20 70 44 61 74 61  E(pOp->p2, pData
24e20 29 3b 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f  );..  if( pOp->o
24e30 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74  pcode==OP_Insert
24e40 20 29 7b 0a 20 20 20 20 70 4b 65 79 20 3d 20 26   ){.    pKey = &
24e50 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
24e60 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 2d     assert( pKey-
24e70 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
24e80 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
24e90 6d 65 6d 49 73 56 61 6c 69 64 28 70 4b 65 79 29  memIsValid(pKey)
24ea0 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52   );.    REGISTER
24eb0 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
24ec0 70 4b 65 79 29 3b 0a 20 20 20 20 78 2e 6e 4b 65  pKey);.    x.nKe
24ed0 79 20 3d 20 70 4b 65 79 2d 3e 75 2e 69 3b 0a 20  y = pKey->u.i;. 
24ee0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
24ef0 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
24f00 3d 4f 50 5f 49 6e 73 65 72 74 49 6e 74 20 29 3b  =OP_InsertInt );
24f10 0a 20 20 20 20 78 2e 6e 4b 65 79 20 3d 20 70 4f  .    x.nKey = pO
24f20 70 2d 3e 70 33 3b 0a 20 20 7d 0a 0a 20 20 69 66  p->p3;.  }..  if
24f30 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
24f40 34 5f 54 41 42 4c 45 20 26 26 20 48 41 53 5f 55  4_TABLE && HAS_U
24f50 50 44 41 54 45 5f 48 4f 4f 4b 28 64 62 29 20 29  PDATE_HOOK(db) )
24f60 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  {.    assert( pC
24f70 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20  ->isTable );.   
24f80 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62   assert( pC->iDb
24f90 3e 3d 30 20 29 3b 0a 20 20 20 20 7a 44 62 20 3d  >=0 );.    zDb =
24fa0 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62   db->aDb[pC->iDb
24fb0 5d 2e 7a 44 62 53 4e 61 6d 65 3b 0a 20 20 20 20  ].zDbSName;.    
24fc0 70 54 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  pTab = pOp->p4.p
24fd0 54 61 62 3b 0a 20 20 20 20 61 73 73 65 72 74 28  Tab;.    assert(
24fe0 20 48 61 73 52 6f 77 69 64 28 70 54 61 62 29 20   HasRowid(pTab) 
24ff0 29 3b 0a 20 20 20 20 6f 70 20 3d 20 28 28 70 4f  );.    op = ((pO
25000 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49  p->p5 & OPFLAG_I
25010 53 55 50 44 41 54 45 29 20 3f 20 53 51 4c 49 54  SUPDATE) ? SQLIT
25020 45 5f 55 50 44 41 54 45 20 3a 20 53 51 4c 49 54  E_UPDATE : SQLIT
25030 45 5f 49 4e 53 45 52 54 29 3b 0a 20 20 7d 65 6c  E_INSERT);.  }el
25040 73 65 7b 0a 20 20 20 20 70 54 61 62 20 3d 20 30  se{.    pTab = 0
25050 3b 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e  ; /* Not needed.
25060 20 20 53 69 6c 65 6e 63 65 20 61 20 63 6f 6d 69    Silence a comi
25070 6c 65 72 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a  ler warning. */.
25080 20 20 20 20 7a 44 62 20 3d 20 30 3b 20 20 2f 2a      zDb = 0;  /*
25090 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 53 69   Not needed.  Si
250a0 6c 65 6e 63 65 20 61 20 63 6f 6d 70 69 6c 65 72  lence a compiler
250b0 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 7d   warning. */.  }
250c0 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
250d0 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41 54 45  ENABLE_PREUPDATE
250e0 5f 48 4f 4f 4b 0a 20 20 2f 2a 20 49 6e 76 6f 6b  _HOOK.  /* Invok
250f0 65 20 74 68 65 20 70 72 65 2d 75 70 64 61 74 65  e the pre-update
25100 20 68 6f 6f 6b 2c 20 69 66 20 61 6e 79 20 2a 2f   hook, if any */
25110 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72 65 55  .  if( db->xPreU
25120 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 0a 20  pdateCallback . 
25130 20 20 26 26 20 70 4f 70 2d 3e 70 34 74 79 70 65    && pOp->p4type
25140 3d 3d 50 34 5f 54 41 42 4c 45 0a 20 20 20 26 26  ==P4_TABLE.   &&
25150 20 21 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46   !(pOp->p5 & OPF
25160 4c 41 47 5f 49 53 55 50 44 41 54 45 29 0a 20 20  LAG_ISUPDATE).  
25170 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
25180 62 65 50 72 65 55 70 64 61 74 65 48 6f 6f 6b 28  bePreUpdateHook(
25190 70 2c 20 70 43 2c 20 53 51 4c 49 54 45 5f 49 4e  p, pC, SQLITE_IN
251a0 53 45 52 54 2c 20 7a 44 62 2c 20 70 54 61 62 2c  SERT, zDb, pTab,
251b0 20 78 2e 6e 4b 65 79 2c 20 70 4f 70 2d 3e 70 32   x.nKey, pOp->p2
251c0 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20  );.  }.#endif.. 
251d0 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f   if( pOp->p5 & O
251e0 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20  PFLAG_NCHANGE ) 
251f0 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20  p->nChange++;.  
25200 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50  if( pOp->p5 & OP
25210 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 29  FLAG_LASTROWID )
25220 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d   db->lastRowid =
25230 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 78 2e 6e   lastRowid = x.n
25240 4b 65 79 3b 0a 20 20 69 66 28 20 70 44 61 74 61  Key;.  if( pData
25250 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
25260 6c 6c 20 29 7b 0a 20 20 20 20 78 2e 70 44 61 74  ll ){.    x.pDat
25270 61 20 3d 20 30 3b 0a 20 20 20 20 78 2e 6e 44 61  a = 0;.    x.nDa
25280 74 61 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b  ta = 0;.  }else{
25290 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 44 61  .    assert( pDa
252a0 74 61 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  ta->flags & (MEM
252b0 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 20 29  _Blob|MEM_Str) )
252c0 3b 0a 20 20 20 20 78 2e 70 44 61 74 61 20 3d 20  ;.    x.pData = 
252d0 70 44 61 74 61 2d 3e 7a 3b 0a 20 20 20 20 78 2e  pData->z;.    x.
252e0 6e 44 61 74 61 20 3d 20 70 44 61 74 61 2d 3e 6e  nData = pData->n
252f0 3b 0a 20 20 7d 0a 20 20 73 65 65 6b 52 65 73 75  ;.  }.  seekResu
25300 6c 74 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26  lt = ((pOp->p5 &
25310 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
25320 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65  ESULT) ? pC->see
25330 6b 52 65 73 75 6c 74 20 3a 20 30 29 3b 0a 20 20  kResult : 0);.  
25340 69 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73  if( pData->flags
25350 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20   & MEM_Zero ){. 
25360 20 20 20 78 2e 6e 5a 65 72 6f 20 3d 20 70 44 61     x.nZero = pDa
25370 74 61 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 7d  ta->u.nZero;.  }
25380 65 6c 73 65 7b 0a 20 20 20 20 78 2e 6e 5a 65 72  else{.    x.nZer
25390 6f 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 78 2e 70  o = 0;.  }.  x.p
253a0 4b 65 79 20 3d 20 30 3b 0a 20 20 72 63 20 3d 20  Key = 0;.  rc = 
253b0 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 73 65  sqlite3BtreeInse
253c0 72 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  rt(pC->uc.pCurso
253d0 72 2c 20 26 78 2c 0a 20 20 20 20 20 20 20 20 20  r, &x,.         
253e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
253f0 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c   (pOp->p5 & OPFL
25400 41 47 5f 41 50 50 45 4e 44 29 21 3d 30 2c 20 73  AG_APPEND)!=0, s
25410 65 65 6b 52 65 73 75 6c 74 0a 20 20 29 3b 0a 20  eekResult.  );. 
25420 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
25430 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63  eto = 0;.  pC->c
25440 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
25450 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20  HE_STALE;..  /* 
25460 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74  Invoke the updat
25470 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72  e-hook if requir
25480 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 20  ed. */.  if( rc 
25490 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
254a0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28  _to_error;.  if(
254b0 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c   db->xUpdateCall
254c0 62 61 63 6b 20 26 26 20 6f 70 20 29 7b 0a 20 20  back && op ){.  
254d0 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c    db->xUpdateCal
254e0 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64 61 74  lback(db->pUpdat
254f0 65 41 72 67 2c 20 6f 70 2c 20 7a 44 62 2c 20 70  eArg, op, zDb, p
25500 54 61 62 2d 3e 7a 4e 61 6d 65 2c 20 78 2e 6e 4b  Tab->zName, x.nK
25510 65 79 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  ey);.  }.  break
25520 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
25530 44 65 6c 65 74 65 20 50 31 20 50 32 20 50 33 20  Delete P1 P2 P3 
25540 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 44 65 6c 65  P4 P5.**.** Dele
25550 74 65 20 74 68 65 20 72 65 63 6f 72 64 20 61 74  te the record at
25560 20 77 68 69 63 68 20 74 68 65 20 50 31 20 63 75   which the P1 cu
25570 72 73 6f 72 20 69 73 20 63 75 72 72 65 6e 74 6c  rsor is currentl
25580 79 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a  y pointing..**.*
25590 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f  * If the OPFLAG_
255a0 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 62 69 74  SAVEPOSITION bit
255b0 20 6f 66 20 74 68 65 20 50 35 20 70 61 72 61 6d   of the P5 param
255c0 65 74 65 72 20 69 73 20 73 65 74 2c 20 74 68 65  eter is set, the
255d0 6e 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 20  n.** the cursor 
255e0 77 69 6c 6c 20 62 65 20 6c 65 66 74 20 70 6f 69  will be left poi
255f0 6e 74 69 6e 67 20 61 74 20 20 65 69 74 68 65 72  nting at  either
25600 20 74 68 65 20 6e 65 78 74 20 6f 72 20 74 68 65   the next or the
25610 20 70 72 65 76 69 6f 75 73 0a 2a 2a 20 72 65 63   previous.** rec
25620 6f 72 64 20 69 6e 20 74 68 65 20 74 61 62 6c 65  ord in the table
25630 2e 20 49 66 20 69 74 20 69 73 20 6c 65 66 74 20  . If it is left 
25640 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20  pointing at the 
25650 6e 65 78 74 20 72 65 63 6f 72 64 2c 20 74 68 65  next record, the
25660 6e 0a 2a 2a 20 74 68 65 20 6e 65 78 74 20 4e 65  n.** the next Ne
25670 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77  xt instruction w
25680 69 6c 6c 20 62 65 20 61 20 6e 6f 2d 6f 70 2e 20  ill be a no-op. 
25690 41 73 20 61 20 72 65 73 75 6c 74 2c 20 69 6e 20  As a result, in 
256a0 74 68 69 73 20 63 61 73 65 0a 2a 2a 20 69 74 20  this case.** it 
256b0 69 73 20 6f 6b 20 74 6f 20 64 65 6c 65 74 65 20  is ok to delete 
256c0 61 20 72 65 63 6f 72 64 20 66 72 6f 6d 20 77 69  a record from wi
256d0 74 68 69 6e 20 61 20 4e 65 78 74 20 6c 6f 6f 70  thin a Next loop
256e0 2e 20 49 66 20 0a 2a 2a 20 4f 50 46 4c 41 47 5f  . If .** OPFLAG_
256f0 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 62 69 74  SAVEPOSITION bit
25700 20 6f 66 20 50 35 20 69 73 20 63 6c 65 61 72 2c   of P5 is clear,
25710 20 74 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72   then the cursor
25720 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 6c 65 66 74   will be.** left
25730 20 69 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65 64   in an undefined
25740 20 73 74 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 49 66   state..**.** If
25750 20 74 68 65 20 4f 50 46 4c 41 47 5f 41 55 58 44   the OPFLAG_AUXD
25760 45 4c 45 54 45 20 62 69 74 20 69 73 20 73 65 74  ELETE bit is set
25770 20 6f 6e 20 50 35 2c 20 74 68 61 74 20 69 6e 64   on P5, that ind
25780 69 63 61 74 65 73 20 74 68 61 74 20 74 68 69 73  icates that this
25790 0a 2a 2a 20 64 65 6c 65 74 65 20 6f 6e 65 20 6f  .** delete one o
257a0 66 20 73 65 76 65 72 61 6c 20 61 73 73 6f 63 69  f several associ
257b0 61 74 65 64 20 77 69 74 68 20 64 65 6c 65 74 69  ated with deleti
257c0 6e 67 20 61 20 74 61 62 6c 65 20 72 6f 77 20 61  ng a table row a
257d0 6e 64 20 61 6c 6c 20 69 74 73 0a 2a 2a 20 61 73  nd all its.** as
257e0 73 6f 63 69 61 74 65 64 20 69 6e 64 65 78 20 65  sociated index e
257f0 6e 74 72 69 65 73 2e 20 20 45 78 61 63 74 6c 79  ntries.  Exactly
25800 20 6f 6e 65 20 6f 66 20 74 68 6f 73 65 20 64 65   one of those de
25810 6c 65 74 65 73 20 69 73 20 74 68 65 20 22 70 72  letes is the "pr
25820 69 6d 61 72 79 22 0a 2a 2a 20 64 65 6c 65 74 65  imary".** delete
25830 2e 20 20 54 68 65 20 6f 74 68 65 72 73 20 61 72  .  The others ar
25840 65 20 61 6c 6c 20 6f 6e 20 4f 50 46 4c 41 47 5f  e all on OPFLAG_
25850 46 4f 52 44 45 4c 45 54 45 20 63 75 72 73 6f 72  FORDELETE cursor
25860 73 20 6f 72 20 65 6c 73 65 20 61 72 65 0a 2a 2a  s or else are.**
25870 20 6d 61 72 6b 65 64 20 77 69 74 68 20 74 68 65   marked with the
25880 20 41 55 58 44 45 4c 45 54 45 20 66 6c 61 67 2e   AUXDELETE flag.
25890 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
258a0 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61  FLAG_NCHANGE fla
258b0 67 20 6f 66 20 50 32 20 28 4e 42 3a 20 50 32 20  g of P2 (NB: P2 
258c0 6e 6f 74 20 50 35 29 20 69 73 20 73 65 74 2c 20  not P5) is set, 
258d0 74 68 65 6e 20 74 68 65 20 72 6f 77 0a 2a 2a 20  then the row.** 
258e0 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 20  change count is 
258f0 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68  incremented (oth
25900 65 72 77 69 73 65 20 6e 6f 74 29 2e 0a 2a 2a 0a  erwise not)..**.
25910 2a 2a 20 50 31 20 6d 75 73 74 20 6e 6f 74 20 62  ** P1 must not b
25920 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20  e pseudo-table. 
25930 20 49 74 20 68 61 73 20 74 6f 20 62 65 20 61 20   It has to be a 
25940 72 65 61 6c 20 74 61 62 6c 65 20 77 69 74 68 0a  real table with.
25950 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73  ** multiple rows
25960 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73  ..**.** If P4 is
25970 20 6e 6f 74 20 4e 55 4c 4c 20 74 68 65 6e 20 69   not NULL then i
25980 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 54 61  t points to a Ta
25990 62 6c 65 20 6f 62 6a 65 63 74 2e 20 49 6e 20 74  ble object. In t
259a0 68 69 73 20 63 61 73 65 20 65 69 74 68 65 72 20  his case either 
259b0 0a 2a 2a 20 74 68 65 20 75 70 64 61 74 65 20 6f  .** the update o
259c0 72 20 70 72 65 2d 75 70 64 61 74 65 20 68 6f 6f  r pre-update hoo
259d0 6b 2c 20 6f 72 20 62 6f 74 68 2c 20 6d 61 79 20  k, or both, may 
259e0 62 65 20 69 6e 76 6f 6b 65 64 2e 20 54 68 65 20  be invoked. The 
259f0 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 0a 2a  P1 cursor must.*
25a00 2a 20 68 61 76 65 20 62 65 65 6e 20 70 6f 73 69  * have been posi
25a10 74 69 6f 6e 65 64 20 75 73 69 6e 67 20 4f 50 5f  tioned using OP_
25a20 4e 6f 74 46 6f 75 6e 64 20 70 72 69 6f 72 20 74  NotFound prior t
25a30 6f 20 69 6e 76 6f 6b 69 6e 67 20 74 68 69 73 20  o invoking this 
25a40 6f 70 63 6f 64 65 20 69 6e 20 0a 2a 2a 20 74 68  opcode in .** th
25a50 69 73 20 63 61 73 65 2e 20 53 70 65 63 69 66 69  is case. Specifi
25a60 63 61 6c 6c 79 2c 20 69 66 20 6f 6e 65 20 69 73  cally, if one is
25a70 20 63 6f 6e 66 69 67 75 72 65 64 2c 20 74 68 65   configured, the
25a80 20 70 72 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b   pre-update hook
25a90 20 69 73 20 0a 2a 2a 20 69 6e 76 6f 6b 65 64 20   is .** invoked 
25aa0 69 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c  if P4 is not NUL
25ab0 4c 2e 20 54 68 65 20 75 70 64 61 74 65 2d 68 6f  L. The update-ho
25ac0 6f 6b 20 69 73 20 69 6e 76 6f 6b 65 64 20 69 66  ok is invoked if
25ad0 20 6f 6e 65 20 69 73 20 63 6f 6e 66 69 67 75 72   one is configur
25ae0 65 64 2c 20 0a 2a 2a 20 50 34 20 69 73 20 6e 6f  ed, .** P4 is no
25af0 74 20 4e 55 4c 4c 2c 20 61 6e 64 20 74 68 65 20  t NULL, and the 
25b00 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66  OPFLAG_NCHANGE f
25b10 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 50 32  lag is set in P2
25b20 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
25b30 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20 66  PFLAG_ISUPDATE f
25b40 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 50 32  lag is set in P2
25b50 2c 20 74 68 65 6e 20 50 33 20 63 6f 6e 74 61 69  , then P3 contai
25b60 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 0a 2a  ns the address.*
25b70 2a 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79 20  * of the memory 
25b80 63 65 6c 6c 20 74 68 61 74 20 63 6f 6e 74 61 69  cell that contai
25b90 6e 73 20 74 68 65 20 76 61 6c 75 65 20 74 68 61  ns the value tha
25ba0 74 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74  t the rowid of t
25bb0 68 65 20 72 6f 77 20 77 69 6c 6c 0a 2a 2a 20 62  he row will.** b
25bc0 65 20 73 65 74 20 74 6f 20 62 79 20 74 68 65 20  e set to by the 
25bd0 75 70 64 61 74 65 2e 0a 2a 2f 0a 63 61 73 65 20  update..*/.case 
25be0 4f 50 5f 44 65 6c 65 74 65 3a 20 7b 0a 20 20 56  OP_Delete: {.  V
25bf0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
25c00 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62   const char *zDb
25c10 3b 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b  ;.  Table *pTab;
25c20 0a 20 20 69 6e 74 20 6f 70 66 6c 61 67 73 3b 0a  .  int opflags;.
25c30 0a 20 20 6f 70 66 6c 61 67 73 20 3d 20 70 4f 70  .  opflags = pOp
25c40 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p2;.  assert( 
25c50 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
25c60 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
25c70 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
25c80 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
25c90 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
25ca0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65  .  assert( pC->e
25cb0 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
25cc0 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65  _BTREE );.  asse
25cd0 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  rt( pC->uc.pCurs
25ce0 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  or!=0 );.  asser
25cf0 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
25d00 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 0a 23 69 66  oveto==0 );..#if
25d10 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
25d20 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79  .  if( pOp->p4ty
25d30 70 65 3d 3d 50 34 5f 54 41 42 4c 45 20 26 26 20  pe==P4_TABLE && 
25d40 48 61 73 52 6f 77 69 64 28 70 4f 70 2d 3e 70 34  HasRowid(pOp->p4
25d50 2e 70 54 61 62 29 20 26 26 20 70 4f 70 2d 3e 70  .pTab) && pOp->p
25d60 35 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 49  5==0 ){.    /* I
25d70 66 20 70 35 20 69 73 20 7a 65 72 6f 2c 20 74 68  f p5 is zero, th
25d80 65 20 73 65 65 6b 20 6f 70 65 72 61 74 69 6f 6e  e seek operation
25d90 20 74 68 61 74 20 70 6f 73 69 74 69 6f 6e 65 64   that positioned
25da0 20 74 68 65 20 63 75 72 73 6f 72 20 70 72 69 6f   the cursor prio
25db0 72 20 74 6f 0a 20 20 20 20 2a 2a 20 4f 50 5f 44  r to.    ** OP_D
25dc0 65 6c 65 74 65 20 77 69 6c 6c 20 68 61 76 65 20  elete will have 
25dd0 61 6c 73 6f 20 73 65 74 20 74 68 65 20 70 43 2d  also set the pC-
25de0 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 66 69  >movetoTarget fi
25df0 65 6c 64 20 74 6f 20 74 68 65 20 72 6f 77 69 64  eld to the rowid
25e00 20 6f 66 0a 20 20 20 20 2a 2a 20 74 68 65 20 72   of.    ** the r
25e10 6f 77 20 74 68 61 74 20 69 73 20 62 65 69 6e 67  ow that is being
25e20 20 64 65 6c 65 74 65 64 20 2a 2f 0a 20 20 20 20   deleted */.    
25e30 69 36 34 20 69 4b 65 79 20 3d 20 73 71 6c 69 74  i64 iKey = sqlit
25e40 65 33 42 74 72 65 65 49 6e 74 65 67 65 72 4b 65  e3BtreeIntegerKe
25e50 79 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  y(pC->uc.pCursor
25e60 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
25e70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 3d  C->movetoTarget=
25e80 3d 69 4b 65 79 20 29 3b 0a 20 20 7d 0a 23 65 6e  =iKey );.  }.#en
25e90 64 69 66 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65  dif..  /* If the
25ea0 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 6f 72 20   update-hook or 
25eb0 70 72 65 2d 75 70 64 61 74 65 2d 68 6f 6f 6b 20  pre-update-hook 
25ec0 77 69 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c  will be invoked,
25ed0 20 73 65 74 20 7a 44 62 20 74 6f 0a 20 20 2a 2a   set zDb to.  **
25ee0 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
25ef0 20 64 62 20 74 6f 20 70 61 73 73 20 61 73 20 74   db to pass as t
25f00 6f 20 69 74 2e 20 41 6c 73 6f 20 73 65 74 20 6c  o it. Also set l
25f10 6f 63 61 6c 20 70 54 61 62 20 74 6f 20 61 20 63  ocal pTab to a c
25f20 6f 70 79 0a 20 20 2a 2a 20 6f 66 20 70 34 2e 70  opy.  ** of p4.p
25f30 54 61 62 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66  Tab. Finally, if
25f40 20 70 35 20 69 73 20 74 72 75 65 2c 20 69 6e 64   p5 is true, ind
25f50 69 63 61 74 69 6e 67 20 74 68 61 74 20 74 68 69  icating that thi
25f60 73 20 63 75 72 73 6f 72 20 77 61 73 0a 20 20 2a  s cursor was.  *
25f70 2a 20 6c 61 73 74 20 6d 6f 76 65 64 20 77 69 74  * last moved wit
25f80 68 20 4f 50 5f 4e 65 78 74 20 6f 72 20 4f 50 5f  h OP_Next or OP_
25f90 50 72 65 76 2c 20 6e 6f 74 20 53 65 65 6b 20 6f  Prev, not Seek o
25fa0 72 20 4e 6f 74 46 6f 75 6e 64 2c 20 73 65 74 20  r NotFound, set 
25fb0 0a 20 20 2a 2a 20 56 64 62 65 43 75 72 73 6f 72  .  ** VdbeCursor
25fc0 2e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 74 6f  .movetoTarget to
25fd0 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77   the current row
25fe0 69 64 2e 20 20 2a 2f 0a 20 20 69 66 28 20 70 4f  id.  */.  if( pO
25ff0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54 41  p->p4type==P4_TA
26000 42 4c 45 20 26 26 20 48 41 53 5f 55 50 44 41 54  BLE && HAS_UPDAT
26010 45 5f 48 4f 4f 4b 28 64 62 29 20 29 7b 0a 20 20  E_HOOK(db) ){.  
26020 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44    assert( pC->iD
26030 62 3e 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65  b>=0 );.    asse
26040 72 74 28 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62  rt( pOp->p4.pTab
26050 21 3d 30 20 29 3b 0a 20 20 20 20 7a 44 62 20 3d  !=0 );.    zDb =
26060 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62   db->aDb[pC->iDb
26070 5d 2e 7a 44 62 53 4e 61 6d 65 3b 0a 20 20 20 20  ].zDbSName;.    
26080 70 54 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  pTab = pOp->p4.p
26090 54 61 62 3b 0a 20 20 20 20 69 66 28 20 28 70 4f  Tab;.    if( (pO
260a0 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 53  p->p5 & OPFLAG_S
260b0 41 56 45 50 4f 53 49 54 49 4f 4e 29 21 3d 30 20  AVEPOSITION)!=0 
260c0 26 26 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  && pC->isTable )
260d0 7b 0a 20 20 20 20 20 20 70 43 2d 3e 6d 6f 76 65  {.      pC->move
260e0 74 6f 54 61 72 67 65 74 20 3d 20 73 71 6c 69 74  toTarget = sqlit
260f0 65 33 42 74 72 65 65 49 6e 74 65 67 65 72 4b 65  e3BtreeIntegerKe
26100 79 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  y(pC->uc.pCursor
26110 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  );.    }.  }else
26120 7b 0a 20 20 20 20 7a 44 62 20 3d 20 30 3b 20 20  {.    zDb = 0;  
26130 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20   /* Not needed. 
26140 20 53 69 6c 65 6e 63 65 20 61 20 63 6f 6d 70 69   Silence a compi
26150 6c 65 72 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a  ler warning. */.
26160 20 20 20 20 70 54 61 62 20 3d 20 30 3b 20 20 2f      pTab = 0;  /
26170 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 53  * Not needed.  S
26180 69 6c 65 6e 63 65 20 61 20 63 6f 6d 70 69 6c 65  ilence a compile
26190 72 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20  r warning. */.  
261a0 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  }..#ifdef SQLITE
261b0 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41 54  _ENABLE_PREUPDAT
261c0 45 5f 48 4f 4f 4b 0a 20 20 2f 2a 20 49 6e 76 6f  E_HOOK.  /* Invo
261d0 6b 65 20 74 68 65 20 70 72 65 2d 75 70 64 61 74  ke the pre-updat
261e0 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72  e-hook if requir
261f0 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d  ed. */.  if( db-
26200 3e 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62  >xPreUpdateCallb
26210 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 70  ack && pOp->p4.p
26220 54 61 62 20 26 26 20 48 61 73 52 6f 77 69 64 28  Tab && HasRowid(
26230 70 54 61 62 29 20 29 7b 0a 20 20 20 20 61 73 73  pTab) ){.    ass
26240 65 72 74 28 20 21 28 6f 70 66 6c 61 67 73 20 26  ert( !(opflags &
26250 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45   OPFLAG_ISUPDATE
26260 29 20 7c 7c 20 28 61 4d 65 6d 5b 70 4f 70 2d 3e  ) || (aMem[pOp->
26270 70 33 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  p3].flags & MEM_
26280 49 6e 74 29 20 29 3b 0a 20 20 20 20 73 71 6c 69  Int) );.    sqli
26290 74 65 33 56 64 62 65 50 72 65 55 70 64 61 74 65  te3VdbePreUpdate
262a0 48 6f 6f 6b 28 70 2c 20 70 43 2c 0a 20 20 20 20  Hook(p, pC,.    
262b0 20 20 20 20 28 6f 70 66 6c 61 67 73 20 26 20 4f      (opflags & O
262c0 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20  PFLAG_ISUPDATE) 
262d0 3f 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20  ? SQLITE_UPDATE 
262e0 3a 20 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c  : SQLITE_DELETE,
262f0 20 0a 20 20 20 20 20 20 20 20 7a 44 62 2c 20 70   .        zDb, p
26300 54 61 62 2c 20 70 43 2d 3e 6d 6f 76 65 74 6f 54  Tab, pC->movetoT
26310 61 72 67 65 74 2c 0a 20 20 20 20 20 20 20 20 70  arget,.        p
26320 4f 70 2d 3e 70 33 0a 20 20 20 20 29 3b 0a 20 20  Op->p3.    );.  
26330 7d 0a 20 20 69 66 28 20 6f 70 66 6c 61 67 73 20  }.  if( opflags 
26340 26 20 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 20  & OPFLAG_ISNOOP 
26350 29 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a  ) break;.#endif.
26360 20 0a 20 20 2f 2a 20 4f 6e 6c 79 20 66 6c 61 67   .  /* Only flag
26370 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 73 65  s that can be se
26380 74 20 61 72 65 20 53 41 56 45 50 4f 49 53 54 49  t are SAVEPOISTI
26390 4f 4e 20 61 6e 64 20 41 55 58 44 45 4c 45 54 45  ON and AUXDELETE
263a0 20 2a 2f 20 0a 20 20 61 73 73 65 72 74 28 20 28   */ .  assert( (
263b0 70 4f 70 2d 3e 70 35 20 26 20 7e 28 4f 50 46 4c  pOp->p5 & ~(OPFL
263c0 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 7c  AG_SAVEPOSITION|
263d0 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45  OPFLAG_AUXDELETE
263e0 29 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  ))==0 );.  asser
263f0 74 28 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f  t( OPFLAG_SAVEPO
26400 53 49 54 49 4f 4e 3d 3d 42 54 52 45 45 5f 53 41  SITION==BTREE_SA
26410 56 45 50 4f 53 49 54 49 4f 4e 20 29 3b 0a 20 20  VEPOSITION );.  
26420 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 41  assert( OPFLAG_A
26430 55 58 44 45 4c 45 54 45 3d 3d 42 54 52 45 45 5f  UXDELETE==BTREE_
26440 41 55 58 44 45 4c 45 54 45 20 29 3b 0a 0a 23 69  AUXDELETE );..#i
26450 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
26460 47 0a 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d  G.  if( p->pFram
26470 65 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20  e==0 ){.    if( 
26480 70 43 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c 3d  pC->isEphemeral=
26490 3d 30 0a 20 20 20 20 20 20 20 20 26 26 20 28 70  =0.        && (p
264a0 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
264b0 41 55 58 44 45 4c 45 54 45 29 3d 3d 30 0a 20 20  AUXDELETE)==0.  
264c0 20 20 20 20 20 20 26 26 20 28 70 43 2d 3e 77 72        && (pC->wr
264d0 46 6c 61 67 20 26 20 4f 50 46 4c 41 47 5f 46 4f  Flag & OPFLAG_FO
264e0 52 44 45 4c 45 54 45 29 3d 3d 30 0a 20 20 20 20  RDELETE)==0.    
264f0 20 20 29 7b 0a 20 20 20 20 20 20 6e 45 78 74 72    ){.      nExtr
26500 61 44 65 6c 65 74 65 2b 2b 3b 0a 20 20 20 20 7d  aDelete++;.    }
26510 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  .    if( pOp->p2
26520 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47   & OPFLAG_NCHANG
26530 45 20 29 7b 0a 20 20 20 20 20 20 6e 45 78 74 72  E ){.      nExtr
26540 61 44 65 6c 65 74 65 2d 2d 3b 0a 20 20 20 20 7d  aDelete--;.    }
26550 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 72  .  }.#endif..  r
26560 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
26570 44 65 6c 65 74 65 28 70 43 2d 3e 75 63 2e 70 43  Delete(pC->uc.pC
26580 75 72 73 6f 72 2c 20 70 4f 70 2d 3e 70 35 29 3b  ursor, pOp->p5);
26590 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
265a0 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
265b0 3b 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75  ;.  pC->seekResu
265c0 6c 74 20 3d 20 30 3b 0a 20 20 69 66 28 20 72 63  lt = 0;.  if( rc
265d0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
265e0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 2f  e_to_error;..  /
265f0 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64  * Invoke the upd
26600 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75  ate-hook if requ
26610 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 6f  ired. */.  if( o
26620 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 41 47 5f  pflags & OPFLAG_
26630 4e 43 48 41 4e 47 45 20 29 7b 0a 20 20 20 20 70  NCHANGE ){.    p
26640 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 20  ->nChange++;.   
26650 20 69 66 28 20 64 62 2d 3e 78 55 70 64 61 74 65   if( db->xUpdate
26660 43 61 6c 6c 62 61 63 6b 20 26 26 20 48 61 73 52  Callback && HasR
26670 6f 77 69 64 28 70 54 61 62 29 20 29 7b 0a 20 20  owid(pTab) ){.  
26680 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43      db->xUpdateC
26690 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64  allback(db->pUpd
266a0 61 74 65 41 72 67 2c 20 53 51 4c 49 54 45 5f 44  ateArg, SQLITE_D
266b0 45 4c 45 54 45 2c 20 7a 44 62 2c 20 70 54 61 62  ELETE, zDb, pTab
266c0 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20  ->zName,.       
266d0 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72     pC->movetoTar
266e0 67 65 74 29 3b 0a 20 20 20 20 20 20 61 73 73 65  get);.      asse
266f0 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29  rt( pC->iDb>=0 )
26700 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 62  ;.    }.  }..  b
26710 72 65 61 6b 3b 0a 7d 0a 2f 2a 20 4f 70 63 6f 64  reak;.}./* Opcod
26720 65 3a 20 52 65 73 65 74 43 6f 75 6e 74 20 2a 20  e: ResetCount * 
26730 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  * * * *.**.** Th
26740 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63  e value of the c
26750 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73  hange counter is
26760 20 63 6f 70 69 65 64 20 74 6f 20 74 68 65 20 64   copied to the d
26770 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 0a 2a  atabase handle.*
26780 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72  * change counter
26790 20 28 72 65 74 75 72 6e 65 64 20 62 79 20 73 75   (returned by su
267a0 62 73 65 71 75 65 6e 74 20 63 61 6c 6c 73 20 74  bsequent calls t
267b0 6f 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65  o sqlite3_change
267c0 73 28 29 29 2e 0a 2a 2a 20 54 68 65 6e 20 74 68  s())..** Then th
267d0 65 20 56 4d 73 20 69 6e 74 65 72 6e 61 6c 20 63  e VMs internal c
267e0 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 72 65  hange counter re
267f0 73 65 74 73 20 74 6f 20 30 2e 0a 2a 2a 20 54 68  sets to 0..** Th
26800 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74 72  is is used by tr
26810 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e 0a  igger programs..
26820 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65 74  */.case OP_Reset
26830 43 6f 75 6e 74 3a 20 7b 0a 20 20 73 71 6c 69 74  Count: {.  sqlit
26840 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65 73  e3VdbeSetChanges
26850 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29  (db, p->nChange)
26860 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d  ;.  p->nChange =
26870 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   0;.  break;.}..
26880 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65  /* Opcode: Sorte
26890 72 43 6f 6d 70 61 72 65 20 50 31 20 50 32 20 50  rCompare P1 P2 P
268a0 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  3 P4.** Synopsis
268b0 3a 20 69 66 20 6b 65 79 28 50 31 29 21 3d 74 72  : if key(P1)!=tr
268c0 69 6d 28 72 5b 50 33 5d 2c 50 34 29 20 67 6f 74  im(r[P3],P4) got
268d0 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  o P2.**.** P1 is
268e0 20 61 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72   a sorter cursor
268f0 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  . This instructi
26900 6f 6e 20 63 6f 6d 70 61 72 65 73 20 61 20 70 72  on compares a pr
26910 65 66 69 78 20 6f 66 20 74 68 65 0a 2a 2a 20 72  efix of the.** r
26920 65 63 6f 72 64 20 62 6c 6f 62 20 69 6e 20 72 65  ecord blob in re
26930 67 69 73 74 65 72 20 50 33 20 61 67 61 69 6e 73  gister P3 agains
26940 74 20 61 20 70 72 65 66 69 78 20 6f 66 20 74 68  t a prefix of th
26950 65 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a  e entry that .**
26960 20 74 68 65 20 73 6f 72 74 65 72 20 63 75 72 73   the sorter curs
26970 6f 72 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  or currently poi
26980 6e 74 73 20 74 6f 2e 20 20 4f 6e 6c 79 20 74 68  nts to.  Only th
26990 65 20 66 69 72 73 74 20 50 34 20 66 69 65 6c 64  e first P4 field
269a0 73 0a 2a 2a 20 6f 66 20 72 5b 50 33 5d 20 61 6e  s.** of r[P3] an
269b0 64 20 74 68 65 20 73 6f 72 74 65 72 20 72 65 63  d the sorter rec
269c0 6f 72 64 20 61 72 65 20 63 6f 6d 70 61 72 65 64  ord are compared
269d0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65  ..**.** If eithe
269e0 72 20 50 33 20 6f 72 20 74 68 65 20 73 6f 72 74  r P3 or the sort
269f0 65 72 20 63 6f 6e 74 61 69 6e 73 20 61 20 4e 55  er contains a NU
26a00 4c 4c 20 69 6e 20 6f 6e 65 20 6f 66 20 74 68 65  LL in one of the
26a10 69 72 20 73 69 67 6e 69 66 69 63 61 6e 74 0a 2a  ir significant.*
26a20 2a 20 66 69 65 6c 64 73 20 28 6e 6f 74 20 63 6f  * fields (not co
26a30 75 6e 74 69 6e 67 20 74 68 65 20 50 34 20 66 69  unting the P4 fi
26a40 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64 20  elds at the end 
26a50 77 68 69 63 68 20 61 72 65 20 69 67 6e 6f 72 65  which are ignore
26a60 64 29 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63  d) then.** the c
26a70 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 73 73  omparison is ass
26a80 75 6d 65 64 20 74 6f 20 62 65 20 65 71 75 61 6c  umed to be equal
26a90 2e 0a 2a 2a 0a 2a 2a 20 46 61 6c 6c 20 74 68 72  ..**.** Fall thr
26aa0 6f 75 67 68 20 74 6f 20 6e 65 78 74 20 69 6e 73  ough to next ins
26ab0 74 72 75 63 74 69 6f 6e 20 69 66 20 74 68 65 20  truction if the 
26ac0 74 77 6f 20 72 65 63 6f 72 64 73 20 63 6f 6d 70  two records comp
26ad0 61 72 65 20 65 71 75 61 6c 20 74 6f 0a 2a 2a 20  are equal to.** 
26ae0 65 61 63 68 20 6f 74 68 65 72 2e 20 20 4a 75 6d  each other.  Jum
26af0 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 79 20  p to P2 if they 
26b00 61 72 65 20 64 69 66 66 65 72 65 6e 74 2e 0a 2a  are different..*
26b10 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72  /.case OP_Sorter
26b20 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 56 64 62  Compare: {.  Vdb
26b30 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69  eCursor *pC;.  i
26b40 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 6e 4b  nt res;.  int nK
26b50 65 79 43 6f 6c 3b 0a 0a 20 20 70 43 20 3d 20 70  eyCol;..  pC = p
26b60 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
26b70 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f  ;.  assert( isSo
26b80 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20 61 73  rter(pC) );.  as
26b90 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
26ba0 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20  e==P4_INT32 );. 
26bb0 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
26bc0 70 2d 3e 70 33 5d 3b 0a 20 20 6e 4b 65 79 43 6f  p->p3];.  nKeyCo
26bd0 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  l = pOp->p4.i;. 
26be0 20 72 65 73 20 3d 20 30 3b 0a 20 20 72 63 20 3d   res = 0;.  rc =
26bf0 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74   sqlite3VdbeSort
26c00 65 72 43 6f 6d 70 61 72 65 28 70 43 2c 20 70 49  erCompare(pC, pI
26c10 6e 33 2c 20 6e 4b 65 79 43 6f 6c 2c 20 26 72 65  n3, nKeyCol, &re
26c20 73 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68  s);.  VdbeBranch
26c30 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b  Taken(res!=0,2);
26c40 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
26c50 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
26c60 72 6f 72 3b 0a 20 20 69 66 28 20 72 65 73 20 29  ror;.  if( res )
26c70 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
26c80 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a 0a 2f  ;.  break;.};../
26c90 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72  * Opcode: Sorter
26ca0 44 61 74 61 20 50 31 20 50 32 20 50 33 20 2a 20  Data P1 P2 P3 * 
26cb0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
26cc0 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20  [P2]=data.**.** 
26cd0 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73  Write into regis
26ce0 74 65 72 20 50 32 20 74 68 65 20 63 75 72 72 65  ter P2 the curre
26cf0 6e 74 20 73 6f 72 74 65 72 20 64 61 74 61 20 66  nt sorter data f
26d00 6f 72 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72  or sorter cursor
26d10 20 50 31 2e 0a 2a 2a 20 54 68 65 6e 20 63 6c 65   P1..** Then cle
26d20 61 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 68 65  ar the column he
26d30 61 64 65 72 20 63 61 63 68 65 20 6f 6e 20 63 75  ader cache on cu
26d40 72 73 6f 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 54  rsor P3..**.** T
26d50 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6e 6f  his opcode is no
26d60 72 6d 61 6c 6c 79 20 75 73 65 20 74 6f 20 6d 6f  rmally use to mo
26d70 76 65 20 61 20 72 65 63 6f 72 64 20 6f 75 74 20  ve a record out 
26d80 6f 66 20 74 68 65 20 73 6f 72 74 65 72 20 61 6e  of the sorter an
26d90 64 20 69 6e 74 6f 0a 2a 2a 20 61 20 72 65 67 69  d into.** a regi
26da0 73 74 65 72 20 74 68 61 74 20 69 73 20 74 68 65  ster that is the
26db0 20 73 6f 75 72 63 65 20 66 6f 72 20 61 20 70 73   source for a ps
26dc0 65 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f  eudo-table curso
26dd0 72 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 0a  r created using.
26de0 2a 2a 20 4f 70 65 6e 50 73 65 75 64 6f 2e 20 20  ** OpenPseudo.  
26df0 54 68 61 74 20 70 73 65 75 64 6f 2d 74 61 62 6c  That pseudo-tabl
26e00 65 20 63 75 72 73 6f 72 20 69 73 20 74 68 65 20  e cursor is the 
26e10 6f 6e 65 20 74 68 61 74 20 69 73 20 69 64 65 6e  one that is iden
26e20 74 69 66 69 65 64 20 62 79 0a 2a 2a 20 70 61 72  tified by.** par
26e30 61 6d 65 74 65 72 20 50 33 2e 20 20 43 6c 65 61  ameter P3.  Clea
26e40 72 69 6e 67 20 74 68 65 20 50 33 20 63 6f 6c 75  ring the P3 colu
26e50 6d 6e 20 63 61 63 68 65 20 61 73 20 70 61 72 74  mn cache as part
26e60 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65 20   of this opcode 
26e70 73 61 76 65 73 0a 2a 2a 20 75 73 20 66 72 6f 6d  saves.** us from
26e80 20 68 61 76 69 6e 67 20 74 6f 20 69 73 73 75 65   having to issue
26e90 20 61 20 73 65 70 61 72 61 74 65 20 4e 75 6c 6c   a separate Null
26ea0 52 6f 77 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  Row instruction 
26eb0 74 6f 20 63 6c 65 61 72 20 74 68 61 74 20 63 61  to clear that ca
26ec0 63 68 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  che..*/.case OP_
26ed0 53 6f 72 74 65 72 44 61 74 61 3a 20 7b 0a 20 20  SorterData: {.  
26ee0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
26ef0 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
26f00 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 43 20 3d  pOp->p2];.  pC =
26f10 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
26f20 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73  1];.  assert( is
26f30 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20  Sorter(pC) );.  
26f40 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
26f50 53 6f 72 74 65 72 52 6f 77 6b 65 79 28 70 43 2c  SorterRowkey(pC,
26f60 20 70 4f 75 74 29 3b 0a 20 20 61 73 73 65 72 74   pOut);.  assert
26f70 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
26f80 7c 7c 20 28 70 4f 75 74 2d 3e 66 6c 61 67 73 20  || (pOut->flags 
26f90 26 20 4d 45 4d 5f 42 6c 6f 62 29 20 29 3b 0a 20  & MEM_Blob) );. 
26fa0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
26fb0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
26fc0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 69  ->nCursor );.  i
26fd0 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
26fe0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
26ff0 0a 20 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d  .  p->apCsr[pOp-
27000 3e 70 33 5d 2d 3e 63 61 63 68 65 53 74 61 74 75  >p3]->cacheStatu
27010 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
27020 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
27030 4f 70 63 6f 64 65 3a 20 52 6f 77 44 61 74 61 20  Opcode: RowData 
27040 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
27050 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 64  ynopsis: r[P2]=d
27060 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  ata.**.** Write 
27070 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
27080 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f   the complete ro
27090 77 20 63 6f 6e 74 65 6e 74 20 66 6f 72 20 74 68  w content for th
270a0 65 20 72 6f 77 20 61 74 20 0a 2a 2a 20 77 68 69  e row at .** whi
270b0 63 68 20 63 75 72 73 6f 72 20 50 31 20 69 73 20  ch cursor P1 is 
270c0 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
270d0 6e 67 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73 20  ng..** There is 
270e0 6e 6f 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f  no interpretatio
270f0 6e 20 6f 66 20 74 68 65 20 64 61 74 61 2e 20 20  n of the data.  
27100 0a 2a 2a 20 49 74 20 69 73 20 6a 75 73 74 20 63  .** It is just c
27110 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68 65 20 50  opied onto the P
27120 32 20 72 65 67 69 73 74 65 72 20 65 78 61 63 74  2 register exact
27130 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20 69 73 20  ly as .** it is 
27140 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 64 61 74  found in the dat
27150 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a  abase file..**.*
27160 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 69  * If cursor P1 i
27170 73 20 61 6e 20 69 6e 64 65 78 2c 20 74 68 65 6e  s an index, then
27180 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 69 73 20   the content is 
27190 74 68 65 20 6b 65 79 20 6f 66 20 74 68 65 20 72  the key of the r
271a0 6f 77 2e 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72  ow..** If cursor
271b0 20 50 32 20 69 73 20 61 20 74 61 62 6c 65 2c 20   P2 is a table, 
271c0 74 68 65 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74  then the content
271d0 20 65 78 74 72 61 63 74 65 64 20 69 73 20 74 68   extracted is th
271e0 65 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 49 66  e data..**.** If
271f0 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d   the P1 cursor m
27200 75 73 74 20 62 65 20 70 6f 69 6e 74 69 6e 67 20  ust be pointing 
27210 74 6f 20 61 20 76 61 6c 69 64 20 72 6f 77 20 28  to a valid row (
27220 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a  not a NULL row).
27230 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62  ** of a real tab
27240 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f  le, not a pseudo
27250 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20  -table..*/.case 
27260 4f 50 5f 52 6f 77 44 61 74 61 3a 20 7b 0a 20 20  OP_RowData: {.  
27270 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
27280 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
27290 72 3b 0a 20 20 75 33 32 20 6e 3b 0a 0a 20 20 70  r;.  u32 n;..  p
272a0 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
272b0 3e 70 32 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  >p2];.  memAbout
272c0 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74  ToChange(p, pOut
272d0 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  );..  assert( pO
272e0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
272f0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
27300 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
27310 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
27320 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
27330 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
27340 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
27350 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74  TREE );.  assert
27360 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 3d 3d  ( isSorter(pC)==
27370 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
27380 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d 30 20 29 3b  C->nullRow==0 );
27390 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75  .  assert( pC->u
273a0 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  c.pCursor!=0 );.
273b0 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63    pCrsr = pC->uc
273c0 2e 70 43 75 72 73 6f 72 3b 0a 0a 20 20 2f 2a 20  .pCursor;..  /* 
273d0 54 68 65 20 4f 50 5f 52 6f 77 44 61 74 61 20 6f  The OP_RowData o
273e0 70 63 6f 64 65 73 20 61 6c 77 61 79 73 20 66 6f  pcodes always fo
273f0 6c 6c 6f 77 20 4f 50 5f 4e 6f 74 45 78 69 73 74  llow OP_NotExist
27400 73 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f 53 65 65  s or.  ** OP_See
27410 6b 52 6f 77 69 64 20 6f 72 20 4f 50 5f 52 65 77  kRowid or OP_Rew
27420 69 6e 64 2f 4f 70 5f 4e 65 78 74 20 77 69 74 68  ind/Op_Next with
27430 20 6e 6f 20 69 6e 74 65 72 76 65 6e 69 6e 67 20   no intervening 
27440 69 6e 73 74 72 75 63 74 69 6f 6e 73 0a 20 20 2a  instructions.  *
27450 2a 20 74 68 61 74 20 6d 69 67 68 74 20 69 6e 76  * that might inv
27460 61 6c 69 64 61 74 65 20 74 68 65 20 63 75 72 73  alidate the curs
27470 6f 72 2e 0a 20 20 2a 2a 20 49 66 20 74 68 69 73  or..  ** If this
27480 20 77 68 65 72 65 20 6e 6f 74 20 74 68 65 20 63   where not the c
27490 61 73 65 2c 20 6f 6e 20 6f 66 20 74 68 65 20 66  ase, on of the f
274a0 6f 6c 6c 6f 77 69 6e 67 20 61 73 73 65 72 74 28  ollowing assert(
274b0 29 73 0a 20 20 2a 2a 20 77 6f 75 6c 64 20 66 61  )s.  ** would fa
274c0 69 6c 2e 20 20 53 68 6f 75 6c 64 20 74 68 69 73  il.  Should this
274d0 20 65 76 65 72 20 63 68 61 6e 67 65 20 28 62 65   ever change (be
274e0 63 61 75 73 65 20 6f 66 20 63 68 61 6e 67 65 73  cause of changes
274f0 20 69 6e 20 74 68 65 20 63 6f 64 65 0a 20 20 2a   in the code.  *
27500 2a 20 67 65 6e 65 72 61 74 6f 72 29 20 74 68 65  * generator) the
27510 6e 20 74 68 65 20 66 69 78 20 77 6f 75 6c 64 20  n the fix would 
27520 62 65 20 74 6f 20 69 6e 73 65 72 74 20 61 20 63  be to insert a c
27530 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69  all to.  ** sqli
27540 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76  te3VdbeCursorMov
27550 65 74 6f 28 29 2e 0a 20 20 2a 2f 0a 20 20 61 73  eto()..  */.  as
27560 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
27570 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
27580 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
27590 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c  BtreeCursorIsVal
275a0 69 64 28 70 43 72 73 72 29 20 29 3b 0a 23 69 66  id(pCrsr) );.#if
275b0 20 30 20 20 2f 2a 20 4e 6f 74 20 72 65 71 75 69   0  /* Not requi
275c0 72 65 64 20 64 75 65 20 74 6f 20 74 68 65 20 70  red due to the p
275d0 72 65 76 69 6f 75 73 20 74 6f 20 61 73 73 65 72  revious to asser
275e0 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 2a  t() statements *
275f0 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  /.  rc = sqlite3
27600 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f  VdbeCursorMoveto
27610 28 70 43 29 3b 0a 20 20 69 66 28 20 72 63 21 3d  (pC);.  if( rc!=
27620 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
27630 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
27640 72 6f 72 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 6e  ror;.#endif..  n
27650 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50   = sqlite3BtreeP
27660 61 79 6c 6f 61 64 53 69 7a 65 28 70 43 72 73 72  ayloadSize(pCrsr
27670 29 3b 0a 20 20 69 66 28 20 6e 3e 28 75 33 32 29  );.  if( n>(u32)
27680 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
27690 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
276a0 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
276b0 62 69 67 3b 0a 20 20 7d 0a 20 20 74 65 73 74 63  big;.  }.  testc
276c0 61 73 65 28 20 6e 3d 3d 30 20 29 3b 0a 20 20 69  ase( n==0 );.  i
276d0 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
276e0 6d 43 6c 65 61 72 41 6e 64 52 65 73 69 7a 65 28  mClearAndResize(
276f0 70 4f 75 74 2c 20 4d 41 58 28 6e 2c 33 32 29 29  pOut, MAX(n,32))
27700 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f   ){.    goto no_
27710 6d 65 6d 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d  mem;.  }.  pOut-
27720 3e 6e 20 3d 20 6e 3b 0a 20 20 4d 65 6d 53 65 74  >n = n;.  MemSet
27730 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
27740 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 72 63 20 3d  EM_Blob);.  rc =
27750 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 79   sqlite3BtreePay
27760 6c 6f 61 64 28 70 43 72 73 72 2c 20 30 2c 20 6e  load(pCrsr, 0, n
27770 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 69 66  , pOut->z);.  if
27780 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
27790 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
277a0 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51    pOut->enc = SQ
277b0 4c 49 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49  LITE_UTF8;  /* I
277c0 6e 20 63 61 73 65 20 74 68 65 20 62 6c 6f 62 20  n case the blob 
277d0 69 73 20 65 76 65 72 20 63 61 73 74 20 74 6f 20  is ever cast to 
277e0 74 65 78 74 20 2a 2f 0a 20 20 55 50 44 41 54 45  text */.  UPDATE
277f0 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
27800 75 74 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  ut);.  REGISTER_
27810 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70  TRACE(pOp->p2, p
27820 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
27830 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77  ../* Opcode: Row
27840 69 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  id P1 P2 * * *.*
27850 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
27860 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 53 74  ]=rowid.**.** St
27870 6f 72 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  ore in register 
27880 50 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68  P2 an integer wh
27890 69 63 68 20 69 73 20 74 68 65 20 6b 65 79 20 6f  ich is the key o
278a0 66 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72  f the table entr
278b0 79 20 74 68 61 74 0a 2a 2a 20 50 31 20 69 73 20  y that.** P1 is 
278c0 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20  currently point 
278d0 74 6f 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 63 61 6e  to..**.** P1 can
278e0 20 62 65 20 65 69 74 68 65 72 20 61 6e 20 6f 72   be either an or
278f0 64 69 6e 61 72 79 20 74 61 62 6c 65 20 6f 72 20  dinary table or 
27900 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  a virtual table.
27910 20 20 54 68 65 72 65 20 75 73 65 64 20 74 6f 0a    There used to.
27920 2a 2a 20 62 65 20 61 20 73 65 70 61 72 61 74 65  ** be a separate
27930 20 4f 50 5f 56 52 6f 77 69 64 20 6f 70 63 6f 64   OP_VRowid opcod
27940 65 20 66 6f 72 20 75 73 65 20 77 69 74 68 20 76  e for use with v
27950 69 72 74 75 61 6c 20 74 61 62 6c 65 73 2c 20 62  irtual tables, b
27960 75 74 20 74 68 69 73 0a 2a 2a 20 6f 6e 65 20 6f  ut this.** one o
27970 70 63 6f 64 65 20 6e 6f 77 20 77 6f 72 6b 73 20  pcode now works 
27980 66 6f 72 20 62 6f 74 68 20 74 61 62 6c 65 20 74  for both table t
27990 79 70 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ypes..*/.case OP
279a0 5f 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20  _Rowid: {       
279b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
279c0 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  2 */.  VdbeCurso
279d0 72 20 2a 70 43 3b 0a 20 20 69 36 34 20 76 3b 0a  r *pC;.  i64 v;.
279e0 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
279f0 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73  pVtab;.  const s
27a00 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
27a10 4d 6f 64 75 6c 65 3b 0a 0a 20 20 70 4f 75 74 20  Module;..  pOut 
27a20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
27a30 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65  (p, pOp);.  asse
27a40 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
27a50 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
27a60 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
27a70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
27a80 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
27a90 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
27aa0 43 2d 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52  C->eCurType!=CUR
27ab0 54 59 50 45 5f 50 53 45 55 44 4f 20 7c 7c 20 70  TYPE_PSEUDO || p
27ac0 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20 20  C->nullRow );.  
27ad0 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  if( pC->nullRow 
27ae0 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  ){.    pOut->fla
27af0 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  gs = MEM_Null;. 
27b00 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 65 6c 73     break;.  }els
27b10 65 20 69 66 28 20 70 43 2d 3e 64 65 66 65 72 72  e if( pC->deferr
27b20 65 64 4d 6f 76 65 74 6f 20 29 7b 0a 20 20 20 20  edMoveto ){.    
27b30 76 20 3d 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61  v = pC->movetoTa
27b40 72 67 65 74 3b 0a 23 69 66 6e 64 65 66 20 53 51  rget;.#ifndef SQ
27b50 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
27b60 4c 54 41 42 4c 45 0a 20 20 7d 65 6c 73 65 20 69  LTABLE.  }else i
27b70 66 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  f( pC->eCurType=
27b80 3d 43 55 52 54 59 50 45 5f 56 54 41 42 20 29 7b  =CURTYPE_VTAB ){
27b90 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
27ba0 3e 75 63 2e 70 56 43 75 72 21 3d 30 20 29 3b 0a  >uc.pVCur!=0 );.
27bb0 20 20 20 20 70 56 74 61 62 20 3d 20 70 43 2d 3e      pVtab = pC->
27bc0 75 63 2e 70 56 43 75 72 2d 3e 70 56 74 61 62 3b  uc.pVCur->pVtab;
27bd0 0a 20 20 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70  .    pModule = p
27be0 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20  Vtab->pModule;. 
27bf0 20 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75     assert( pModu
27c00 6c 65 2d 3e 78 52 6f 77 69 64 20 29 3b 0a 20 20  le->xRowid );.  
27c10 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e    rc = pModule->
27c20 78 52 6f 77 69 64 28 70 43 2d 3e 75 63 2e 70 56  xRowid(pC->uc.pV
27c30 43 75 72 2c 20 26 76 29 3b 0a 20 20 20 20 73 71  Cur, &v);.    sq
27c40 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45  lite3VtabImportE
27c50 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b  rrmsg(p, pVtab);
27c60 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f  .    if( rc ) go
27c70 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
27c80 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66 20 2f 2a  error;.#endif /*
27c90 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
27ca0 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 20 20 7d  TUALTABLE */.  }
27cb0 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
27cc0 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
27cd0 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
27ce0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
27cf0 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29  >uc.pCursor!=0 )
27d00 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
27d10 65 33 56 64 62 65 43 75 72 73 6f 72 52 65 73 74  e3VdbeCursorRest
27d20 6f 72 65 28 70 43 29 3b 0a 20 20 20 20 69 66 28  ore(pC);.    if(
27d30 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
27d40 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
27d50 20 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52     if( pC->nullR
27d60 6f 77 20 29 7b 0a 20 20 20 20 20 20 70 4f 75 74  ow ){.      pOut
27d70 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75  ->flags = MEM_Nu
27d80 6c 6c 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b  ll;.      break;
27d90 0a 20 20 20 20 7d 0a 20 20 20 20 76 20 3d 20 73  .    }.    v = s
27da0 71 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65 67  qlite3BtreeInteg
27db0 65 72 4b 65 79 28 70 43 2d 3e 75 63 2e 70 43 75  erKey(pC->uc.pCu
27dc0 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 70 4f 75  rsor);.  }.  pOu
27dd0 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72  t->u.i = v;.  br
27de0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
27df0 65 3a 20 4e 75 6c 6c 52 6f 77 20 50 31 20 2a 20  e: NullRow P1 * 
27e00 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65  * * *.**.** Move
27e10 20 74 68 65 20 63 75 72 73 6f 72 20 50 31 20 74   the cursor P1 t
27e20 6f 20 61 20 6e 75 6c 6c 20 72 6f 77 2e 20 20 41  o a null row.  A
27e30 6e 79 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 65  ny OP_Column ope
27e40 72 61 74 69 6f 6e 73 0a 2a 2a 20 74 68 61 74 20  rations.** that 
27e50 6f 63 63 75 72 20 77 68 69 6c 65 20 74 68 65 20  occur while the 
27e60 63 75 72 73 6f 72 20 69 73 20 6f 6e 20 74 68 65  cursor is on the
27e70 20 6e 75 6c 6c 20 72 6f 77 20 77 69 6c 6c 20 61   null row will a
27e80 6c 77 61 79 73 0a 2a 2a 20 77 72 69 74 65 20 61  lways.** write a
27e90 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
27ea0 50 5f 4e 75 6c 6c 52 6f 77 3a 20 7b 0a 20 20 56  P_NullRow: {.  V
27eb0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a  dbeCursor *pC;..
27ec0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
27ed0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
27ee0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
27ef0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
27f00 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
27f10 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 2d  ( pC!=0 );.  pC-
27f20 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20  >nullRow = 1;.  
27f30 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
27f40 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
27f50 20 69 66 28 20 70 43 2d 3e 65 43 75 72 54 79 70   if( pC->eCurTyp
27f60 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
27f70 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
27f80 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d  pC->uc.pCursor!=
27f90 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 );.    sqlite3
27fa0 42 74 72 65 65 43 6c 65 61 72 43 75 72 73 6f 72  BtreeClearCursor
27fb0 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29  (pC->uc.pCursor)
27fc0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
27fd0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 61 73  ../* Opcode: Las
27fe0 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
27ff0 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75 73  *.** The next us
28000 65 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20 6f  e of the Rowid o
28010 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 50 72 65 76  r Column or Prev
28020 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f 72   instruction for
28030 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66   P1 .** will ref
28040 65 72 20 74 6f 20 74 68 65 20 6c 61 73 74 20 65  er to the last e
28050 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61 74 61  ntry in the data
28060 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e  base table or in
28070 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74  dex..** If the t
28080 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73  able or index is
28090 20 65 6d 70 74 79 20 61 6e 64 20 50 32 3e 30 2c   empty and P2>0,
280a0 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64   then jump immed
280b0 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a  iately to P2..**
280c0 20 49 66 20 50 32 20 69 73 20 30 20 6f 72 20 69   If P2 is 0 or i
280d0 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  f the table or i
280e0 6e 64 65 78 20 69 73 20 6e 6f 74 20 65 6d 70 74  ndex is not empt
280f0 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a  y, fall through.
28100 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77  ** to the follow
28110 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ing instruction.
28120 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
28130 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75  de leaves the cu
28140 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20  rsor configured 
28150 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76 65 72  to move in rever
28160 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f  se order,.** fro
28170 6d 20 74 68 65 20 65 6e 64 20 74 6f 77 61 72 64  m the end toward
28180 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20   the beginning. 
28190 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
281a0 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a   the cursor is.*
281b0 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  * configured to 
281c0 75 73 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65  use Prev, not Ne
281d0 78 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 20  xt..**.** If P3 
281e0 69 73 20 2d 31 2c 20 74 68 65 6e 20 74 68 65 20  is -1, then the 
281f0 63 75 72 73 6f 72 20 69 73 20 70 6f 73 69 74 69  cursor is positi
28200 6f 6e 65 64 20 61 74 20 74 68 65 20 65 6e 64 20  oned at the end 
28210 6f 66 20 74 68 65 20 62 74 72 65 65 0a 2a 2a 20  of the btree.** 
28220 66 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 20  for the purpose 
28230 6f 66 20 61 70 70 65 6e 64 69 6e 67 20 61 20 6e  of appending a n
28240 65 77 20 65 6e 74 72 79 20 6f 6e 74 6f 20 74 68  ew entry onto th
28250 65 20 62 74 72 65 65 2e 20 20 49 6e 20 74 68 61  e btree.  In tha
28260 74 0a 2a 2a 20 63 61 73 65 20 50 32 20 6d 75 73  t.** case P2 mus
28270 74 20 62 65 20 30 2e 20 20 49 74 20 69 73 20 61  t be 0.  It is a
28280 73 73 75 6d 65 64 20 74 68 61 74 20 74 68 65 20  ssumed that the 
28290 63 75 72 73 6f 72 20 69 73 20 75 73 65 64 20 6f  cursor is used o
282a0 6e 6c 79 20 66 6f 72 0a 2a 2a 20 61 70 70 65 6e  nly for.** appen
282b0 64 69 6e 67 20 61 6e 64 20 73 6f 20 69 66 20 74  ding and so if t
282c0 68 65 20 63 75 72 73 6f 72 20 69 73 20 76 61 6c  he cursor is val
282d0 69 64 2c 20 74 68 65 6e 20 74 68 65 20 63 75 72  id, then the cur
282e0 73 6f 72 20 6d 75 73 74 20 61 6c 72 65 61 64 79  sor must already
282f0 0a 2a 2a 20 62 65 20 70 6f 69 6e 74 69 6e 67 20  .** be pointing 
28300 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
28310 65 20 62 74 72 65 65 20 61 6e 64 20 73 6f 20 6e  e btree and so n
28320 6f 20 63 68 61 6e 67 65 73 20 61 72 65 20 6d 61  o changes are ma
28330 64 65 20 74 6f 0a 2a 2a 20 74 68 65 20 63 75 72  de to.** the cur
28340 73 6f 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  sor..*/.case OP_
28350 4c 61 73 74 3a 20 7b 20 20 20 20 20 20 20 20 2f  Last: {        /
28360 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65  * jump */.  Vdbe
28370 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74  Cursor *pC;.  Bt
28380 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
28390 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73 73   int res;..  ass
283a0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
283b0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
283c0 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
283d0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
283e0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
283f0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
28400 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
28410 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
28420 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e   pCrsr = pC->uc.
28430 70 43 75 72 73 6f 72 3b 0a 20 20 72 65 73 20 3d  pCursor;.  res =
28440 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   0;.  assert( pC
28450 72 73 72 21 3d 30 20 29 3b 0a 20 20 70 43 2d 3e  rsr!=0 );.  pC->
28460 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 70 4f 70  seekResult = pOp
28470 2d 3e 70 33 3b 0a 23 69 66 64 65 66 20 53 51 4c  ->p3;.#ifdef SQL
28480 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e  ITE_DEBUG.  pC->
28490 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 4c 61 73 74  seekOp = OP_Last
284a0 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70  ;.#endif.  if( p
284b0 4f 70 2d 3e 70 33 3d 3d 30 20 7c 7c 20 21 73 71  Op->p3==0 || !sq
284c0 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
284d0 49 73 56 61 6c 69 64 4e 4e 28 70 43 72 73 72 29  IsValidNN(pCrsr)
284e0 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
284f0 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 70 43  ite3BtreeLast(pC
28500 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  rsr, &res);.    
28510 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75  pC->nullRow = (u
28520 38 29 72 65 73 3b 0a 20 20 20 20 70 43 2d 3e 64  8)res;.    pC->d
28530 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
28540 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65  0;.    pC->cache
28550 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
28560 54 41 4c 45 3b 0a 20 20 20 20 69 66 28 20 72 63  TALE;.    if( rc
28570 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
28580 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
28590 69 66 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 7b  if( pOp->p2>0 ){
285a0 0a 20 20 20 20 20 20 56 64 62 65 42 72 61 6e 63  .      VdbeBranc
285b0 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29  hTaken(res!=0,2)
285c0 3b 0a 20 20 20 20 20 20 69 66 28 20 72 65 73 20  ;.      if( res 
285d0 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
285e0 32 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  2;.    }.  }else
285f0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
28600 70 2d 3e 70 32 3d 3d 30 20 29 3b 0a 20 20 7d 0a  p->p2==0 );.  }.
28610 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20    break;.}.../* 
28620 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 53 6f  Opcode: SorterSo
28630 72 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  rt P1 P2 * * *.*
28640 2a 0a 2a 2a 20 41 66 74 65 72 20 61 6c 6c 20 72  *.** After all r
28650 65 63 6f 72 64 73 20 68 61 76 65 20 62 65 65 6e  ecords have been
28660 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 74   inserted into t
28670 68 65 20 53 6f 72 74 65 72 20 6f 62 6a 65 63 74  he Sorter object
28680 0a 2a 2a 20 69 64 65 6e 74 69 66 69 65 64 20 62  .** identified b
28690 79 20 50 31 2c 20 69 6e 76 6f 6b 65 20 74 68 69  y P1, invoke thi
286a0 73 20 6f 70 63 6f 64 65 20 74 6f 20 61 63 74 75  s opcode to actu
286b0 61 6c 6c 79 20 64 6f 20 74 68 65 20 73 6f 72 74  ally do the sort
286c0 69 6e 67 2e 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20  ing..** Jump to 
286d0 50 32 20 69 66 20 74 68 65 72 65 20 61 72 65 20  P2 if there are 
286e0 6e 6f 20 72 65 63 6f 72 64 73 20 74 6f 20 62 65  no records to be
286f0 20 73 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54   sorted..**.** T
28700 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 61 6e  his opcode is an
28710 20 61 6c 69 61 73 20 66 6f 72 20 4f 50 5f 53 6f   alias for OP_So
28720 72 74 20 61 6e 64 20 4f 50 5f 52 65 77 69 6e 64  rt and OP_Rewind
28730 20 74 68 61 74 20 69 73 20 75 73 65 64 0a 2a 2a   that is used.**
28740 20 66 6f 72 20 53 6f 72 74 65 72 20 6f 62 6a 65   for Sorter obje
28750 63 74 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  cts..*/./* Opcod
28760 65 3a 20 53 6f 72 74 20 50 31 20 50 32 20 2a 20  e: Sort P1 P2 * 
28770 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  * *.**.** This o
28780 70 63 6f 64 65 20 64 6f 65 73 20 65 78 61 63 74  pcode does exact
28790 6c 79 20 74 68 65 20 73 61 6d 65 20 74 68 69 6e  ly the same thin
287a0 67 20 61 73 20 4f 50 5f 52 65 77 69 6e 64 20 65  g as OP_Rewind e
287b0 78 63 65 70 74 20 74 68 61 74 0a 2a 2a 20 69 74  xcept that.** it
287c0 20 69 6e 63 72 65 6d 65 6e 74 73 20 61 6e 20 75   increments an u
287d0 6e 64 6f 63 75 6d 65 6e 74 65 64 20 67 6c 6f 62  ndocumented glob
287e0 61 6c 20 76 61 72 69 61 62 6c 65 20 75 73 65 64  al variable used
287f0 20 66 6f 72 20 74 65 73 74 69 6e 67 2e 0a 2a 2a   for testing..**
28800 0a 2a 2a 20 53 6f 72 74 69 6e 67 20 69 73 20 61  .** Sorting is a
28810 63 63 6f 6d 70 6c 69 73 68 65 64 20 62 79 20 77  ccomplished by w
28820 72 69 74 69 6e 67 20 72 65 63 6f 72 64 73 20 69  riting records i
28830 6e 74 6f 20 61 20 73 6f 72 74 69 6e 67 20 69 6e  nto a sorting in
28840 64 65 78 2c 0a 2a 2a 20 74 68 65 6e 20 72 65 77  dex,.** then rew
28850 69 6e 64 69 6e 67 20 74 68 61 74 20 69 6e 64 65  inding that inde
28860 78 20 61 6e 64 20 70 6c 61 79 69 6e 67 20 69 74  x and playing it
28870 20 62 61 63 6b 20 66 72 6f 6d 20 62 65 67 69 6e   back from begin
28880 6e 69 6e 67 20 74 6f 0a 2a 2a 20 65 6e 64 2e 20  ning to.** end. 
28890 20 57 65 20 75 73 65 20 74 68 65 20 4f 50 5f 53   We use the OP_S
288a0 6f 72 74 20 6f 70 63 6f 64 65 20 69 6e 73 74 65  ort opcode inste
288b0 61 64 20 6f 66 20 4f 50 5f 52 65 77 69 6e 64 20  ad of OP_Rewind 
288c0 74 6f 20 64 6f 20 74 68 65 0a 2a 2a 20 72 65 77  to do the.** rew
288d0 69 6e 64 69 6e 67 20 73 6f 20 74 68 61 74 20 74  inding so that t
288e0 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  he global variab
288f0 6c 65 20 77 69 6c 6c 20 62 65 20 69 6e 63 72 65  le will be incre
28900 6d 65 6e 74 65 64 20 61 6e 64 0a 2a 2a 20 72 65  mented and.** re
28910 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73 20 63  gression tests c
28920 61 6e 20 64 65 74 65 72 6d 69 6e 65 20 77 68 65  an determine whe
28930 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20  ther or not the 
28940 6f 70 74 69 6d 69 7a 65 72 20 69 73 0a 2a 2a 20  optimizer is.** 
28950 63 6f 72 72 65 63 74 6c 79 20 6f 70 74 69 6d 69  correctly optimi
28960 7a 69 6e 67 20 6f 75 74 20 73 6f 72 74 73 2e 0a  zing out sorts..
28970 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65  */.case OP_Sorte
28980 72 53 6f 72 74 3a 20 20 20 20 2f 2a 20 6a 75 6d  rSort:    /* jum
28990 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72  p */.case OP_Sor
289a0 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  t: {        /* j
289b0 75 6d 70 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  ump */.#ifdef SQ
289c0 4c 49 54 45 5f 54 45 53 54 0a 20 20 73 71 6c 69  LITE_TEST.  sqli
289d0 74 65 33 5f 73 6f 72 74 5f 63 6f 75 6e 74 2b 2b  te3_sort_count++
289e0 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72  ;.  sqlite3_sear
289f0 63 68 5f 63 6f 75 6e 74 2d 2d 3b 0a 23 65 6e 64  ch_count--;.#end
28a00 69 66 0a 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72  if.  p->aCounter
28a10 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54  [SQLITE_STMTSTAT
28a20 55 53 5f 53 4f 52 54 5d 2b 2b 3b 0a 20 20 2f 2a  US_SORT]++;.  /*
28a30 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e   Fall through in
28a40 74 6f 20 4f 50 5f 52 65 77 69 6e 64 20 2a 2f 0a  to OP_Rewind */.
28a50 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 77  }./* Opcode: Rew
28a60 69 6e 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ind P1 P2 * * *.
28a70 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75  **.** The next u
28a80 73 65 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20  se of the Rowid 
28a90 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78  or Column or Nex
28aa0 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f  t instruction fo
28ab0 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65  r P1 .** will re
28ac0 66 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74  fer to the first
28ad0 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61   entry in the da
28ae0 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
28af0 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65  index..** If the
28b00 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
28b10 69 73 20 65 6d 70 74 79 2c 20 6a 75 6d 70 20 69  is empty, jump i
28b20 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
28b30 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c  ..** If the tabl
28b40 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f  e or index is no
28b50 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68  t empty, fall th
28b60 72 6f 75 67 68 20 74 6f 20 74 68 65 20 66 6f 6c  rough to the fol
28b70 6c 6f 77 69 6e 67 20 0a 2a 2a 20 69 6e 73 74 72  lowing .** instr
28b80 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  uction..**.** Th
28b90 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73  is opcode leaves
28ba0 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66   the cursor conf
28bb0 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69  igured to move i
28bc0 6e 20 66 6f 72 77 61 72 64 20 6f 72 64 65 72 2c  n forward order,
28bd0 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62 65 67  .** from the beg
28be0 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20 74 68  inning toward th
28bf0 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72  e end.  In other
28c00 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73   words, the curs
28c10 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75  or is.** configu
28c20 72 65 64 20 74 6f 20 75 73 65 20 4e 65 78 74 2c  red to use Next,
28c30 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2f 0a 63 61   not Prev..*/.ca
28c40 73 65 20 4f 50 5f 52 65 77 69 6e 64 3a 20 7b 20  se OP_Rewind: { 
28c50 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
28c60 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
28c70 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
28c80 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73  pCrsr;.  int res
28c90 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
28ca0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
28cb0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
28cc0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
28cd0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
28ce0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
28cf0 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72  assert( isSorter
28d00 28 70 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f  (pC)==(pOp->opco
28d10 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 53 6f 72  de==OP_SorterSor
28d20 74 29 20 29 3b 0a 20 20 72 65 73 20 3d 20 31 3b  t) );.  res = 1;
28d30 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
28d40 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f  EBUG.  pC->seekO
28d50 70 20 3d 20 4f 50 5f 52 65 77 69 6e 64 3b 0a 23  p = OP_Rewind;.#
28d60 65 6e 64 69 66 0a 20 20 69 66 28 20 69 73 53 6f  endif.  if( isSo
28d70 72 74 65 72 28 70 43 29 20 29 7b 0a 20 20 20 20  rter(pC) ){.    
28d80 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
28d90 53 6f 72 74 65 72 52 65 77 69 6e 64 28 70 43 2c  SorterRewind(pC,
28da0 20 26 72 65 73 29 3b 0a 20 20 7d 65 6c 73 65 7b   &res);.  }else{
28db0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
28dc0 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
28dd0 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 20 20  PE_BTREE );.    
28de0 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70  pCrsr = pC->uc.p
28df0 43 75 72 73 6f 72 3b 0a 20 20 20 20 61 73 73 65  Cursor;.    asse
28e00 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20 20  rt( pCrsr );.   
28e10 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
28e20 65 65 46 69 72 73 74 28 70 43 72 73 72 2c 20 26  eeFirst(pCrsr, &
28e30 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 64 65  res);.    pC->de
28e40 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
28e50 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53  ;.    pC->cacheS
28e60 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
28e70 41 4c 45 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72  ALE;.  }.  if( r
28e80 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
28e90 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70  ue_to_error;.  p
28ea0 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38  C->nullRow = (u8
28eb0 29 72 65 73 3b 0a 20 20 61 73 73 65 72 74 28 20  )res;.  assert( 
28ec0 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70  pOp->p2>0 && pOp
28ed0 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20  ->p2<p->nOp );. 
28ee0 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
28ef0 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66  (res!=0,2);.  if
28f00 28 20 72 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d  ( res ) goto jum
28f10 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b  p_to_p2;.  break
28f20 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
28f30 4e 65 78 74 20 50 31 20 50 32 20 50 33 20 50 34  Next P1 P2 P3 P4
28f40 20 50 35 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63   P5.**.** Advanc
28f50 65 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74  e cursor P1 so t
28f60 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  hat it points to
28f70 20 74 68 65 20 6e 65 78 74 20 6b 65 79 2f 64 61   the next key/da
28f80 74 61 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a  ta pair in its.*
28f90 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  * table or index
28fa0 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65 20  .  If there are 
28fb0 6e 6f 20 6d 6f 72 65 20 6b 65 79 2f 76 61 6c 75  no more key/valu
28fc0 65 20 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c  e pairs then fal
28fd0 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20  l through.** to 
28fe0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e  the following in
28ff0 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20  struction.  But 
29000 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 61 64  if the cursor ad
29010 76 61 6e 63 65 20 77 61 73 20 73 75 63 63 65 73  vance was succes
29020 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d  sful,.** jump im
29030 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
29040 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4e 65 78 74 20  .**.** The Next 
29050 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 76  opcode is only v
29060 61 6c 69 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61  alid following a
29070 6e 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47 45  n SeekGT, SeekGE
29080 2c 20 6f 72 0a 2a 2a 20 4f 50 5f 52 65 77 69 6e  , or.** OP_Rewin
29090 64 20 6f 70 63 6f 64 65 20 75 73 65 64 20 74 6f  d opcode used to
290a0 20 70 6f 73 69 74 69 6f 6e 20 74 68 65 20 63 75   position the cu
290b0 72 73 6f 72 2e 20 20 4e 65 78 74 20 69 73 20 6e  rsor.  Next is n
290c0 6f 74 20 61 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f  ot allowed.** to
290d0 20 66 6f 6c 6c 6f 77 20 53 65 65 6b 4c 54 2c 20   follow SeekLT, 
290e0 53 65 65 6b 4c 45 2c 20 6f 72 20 4f 50 5f 4c 61  SeekLE, or OP_La
290f0 73 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31  st..**.** The P1
29100 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20   cursor must be 
29110 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65  for a real table
29120 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74  , not a pseudo-t
29130 61 62 6c 65 2e 20 20 50 31 20 6d 75 73 74 20 68  able.  P1 must h
29140 61 76 65 0a 2a 2a 20 62 65 65 6e 20 6f 70 65 6e  ave.** been open
29150 65 64 20 70 72 69 6f 72 20 74 6f 20 74 68 69 73  ed prior to this
29160 20 6f 70 63 6f 64 65 20 6f 72 20 74 68 65 20 70   opcode or the p
29170 72 6f 67 72 61 6d 20 77 69 6c 6c 20 73 65 67 66  rogram will segf
29180 61 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ault..**.** The 
29190 50 33 20 76 61 6c 75 65 20 69 73 20 61 20 68 69  P3 value is a hi
291a0 6e 74 20 74 6f 20 74 68 65 20 62 74 72 65 65 20  nt to the btree 
291b0 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20  implementation. 
291c0 49 66 20 50 33 3d 3d 31 2c 20 74 68 61 74 0a 2a  If P3==1, that.*
291d0 2a 20 6d 65 61 6e 73 20 50 31 20 69 73 20 61 6e  * means P1 is an
291e0 20 53 51 4c 20 69 6e 64 65 78 20 61 6e 64 20 74   SQL index and t
291f0 68 61 74 20 74 68 69 73 20 69 6e 73 74 72 75 63  hat this instruc
29200 74 69 6f 6e 20 63 6f 75 6c 64 20 68 61 76 65 20  tion could have 
29210 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65 64 20  been.** omitted 
29220 69 66 20 74 68 61 74 20 69 6e 64 65 78 20 68 61  if that index ha
29230 64 20 62 65 65 6e 20 75 6e 69 71 75 65 2e 20 20  d been unique.  
29240 50 33 20 69 73 20 75 73 75 61 6c 6c 79 20 30 2e  P3 is usually 0.
29250 20 20 50 33 20 69 73 0a 2a 2a 20 61 6c 77 61 79    P3 is.** alway
29260 73 20 65 69 74 68 65 72 20 30 20 6f 72 20 31 2e  s either 0 or 1.
29270 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 6c 77  .**.** P4 is alw
29280 61 79 73 20 6f 66 20 74 79 70 65 20 50 34 5f 41  ays of type P4_A
29290 44 56 41 4e 43 45 2e 20 54 68 65 20 66 75 6e 63  DVANCE. The func
292a0 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70 6f 69  tion pointer poi
292b0 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65  nts to.** sqlite
292c0 33 42 74 72 65 65 4e 65 78 74 28 29 2e 0a 2a 2a  3BtreeNext()..**
292d0 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 70 6f 73  .** If P5 is pos
292e0 69 74 69 76 65 20 61 6e 64 20 74 68 65 20 6a 75  itive and the ju
292f0 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 74 68 65  mp is taken, the
29300 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74 65 72 0a  n event counter.
29310 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31 20 69  ** number P5-1 i
29320 6e 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73  n the prepared s
29330 74 61 74 65 6d 65 6e 74 20 69 73 20 69 6e 63 72  tatement is incr
29340 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 53  emented..**.** S
29350 65 65 20 61 6c 73 6f 3a 20 50 72 65 76 2c 20 4e  ee also: Prev, N
29360 65 78 74 49 66 4f 70 65 6e 0a 2a 2f 0a 2f 2a 20  extIfOpen.*/./* 
29370 4f 70 63 6f 64 65 3a 20 4e 65 78 74 49 66 4f 70  Opcode: NextIfOp
29380 65 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 50  en P1 P2 P3 P4 P
29390 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  5.**.** This opc
293a0 6f 64 65 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  ode works just l
293b0 69 6b 65 20 4e 65 78 74 20 65 78 63 65 70 74 20  ike Next except 
293c0 74 68 61 74 20 69 66 20 63 75 72 73 6f 72 20 50  that if cursor P
293d0 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 70 65 6e  1 is not.** open
293e0 20 69 74 20 62 65 68 61 76 65 73 20 61 20 6e 6f   it behaves a no
293f0 2d 6f 70 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  -op..*/./* Opcod
29400 65 3a 20 50 72 65 76 20 50 31 20 50 32 20 50 33  e: Prev P1 P2 P3
29410 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42 61 63   P4 P5.**.** Bac
29420 6b 20 75 70 20 63 75 72 73 6f 72 20 50 31 20 73  k up cursor P1 s
29430 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73  o that it points
29440 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75 73   to the previous
29450 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20 69   key/data pair i
29460 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f  n its.** table o
29470 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68 65  r index.  If the
29480 72 65 20 69 73 20 6e 6f 20 70 72 65 76 69 6f 75  re is no previou
29490 73 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72  s key/value pair
294a0 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f  s then fall thro
294b0 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f  ugh.** to the fo
294c0 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74  llowing instruct
294d0 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65  ion.  But if the
294e0 20 63 75 72 73 6f 72 20 62 61 63 6b 75 70 20 77   cursor backup w
294f0 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a  as successful,.*
29500 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  * jump immediate
29510 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 0a  ly to P2..**.**.
29520 2a 2a 20 54 68 65 20 50 72 65 76 20 6f 70 63 6f  ** The Prev opco
29530 64 65 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64  de is only valid
29540 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20 53 65   following an Se
29550 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 6f 72  ekLT, SeekLE, or
29560 0a 2a 2a 20 4f 50 5f 4c 61 73 74 20 6f 70 63 6f  .** OP_Last opco
29570 64 65 20 75 73 65 64 20 74 6f 20 70 6f 73 69 74  de used to posit
29580 69 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 2e 20  ion the cursor. 
29590 20 50 72 65 76 20 69 73 20 6e 6f 74 20 61 6c 6c   Prev is not all
295a0 6f 77 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c 6c 6f  owed.** to follo
295b0 77 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47 45  w SeekGT, SeekGE
295c0 2c 20 6f 72 20 4f 50 5f 52 65 77 69 6e 64 2e 0a  , or OP_Rewind..
295d0 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72  **.** The P1 cur
295e0 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20  sor must be for 
295f0 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f  a real table, no
29600 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  t a pseudo-table
29610 2e 20 20 49 66 20 50 31 20 69 73 0a 2a 2a 20 6e  .  If P1 is.** n
29620 6f 74 20 6f 70 65 6e 20 74 68 65 6e 20 74 68 65  ot open then the
29630 20 62 65 68 61 76 69 6f 72 20 69 73 20 75 6e 64   behavior is und
29640 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  efined..**.** Th
29650 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 61 20  e P3 value is a 
29660 68 69 6e 74 20 74 6f 20 74 68 65 20 62 74 72 65  hint to the btre
29670 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
29680 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74 68 61 74  . If P3==1, that
29690 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69 73 20  .** means P1 is 
296a0 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 61 6e 64  an SQL index and
296b0 20 74 68 61 74 20 74 68 69 73 20 69 6e 73 74 72   that this instr
296c0 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68 61 76  uction could hav
296d0 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65  e been.** omitte
296e0 64 20 69 66 20 74 68 61 74 20 69 6e 64 65 78 20  d if that index 
296f0 68 61 64 20 62 65 65 6e 20 75 6e 69 71 75 65 2e  had been unique.
29700 20 20 50 33 20 69 73 20 75 73 75 61 6c 6c 79 20    P3 is usually 
29710 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61 6c 77  0.  P3 is.** alw
29720 61 79 73 20 65 69 74 68 65 72 20 30 20 6f 72 20  ays either 0 or 
29730 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  1..**.** P4 is a
29740 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20 50 34  lways of type P4
29750 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20 66 75  _ADVANCE. The fu
29760 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70  nction pointer p
29770 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69  oints to.** sqli
29780 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73  te3BtreePrevious
29790 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  ()..**.** If P5 
297a0 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e 64 20  is positive and 
297b0 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
297c0 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20 63 6f  n, then event co
297d0 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20  unter.** number 
297e0 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72 65 70  P5-1 in the prep
297f0 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69  ared statement i
29800 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a  s incremented..*
29810 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65  /./* Opcode: Pre
29820 76 49 66 4f 70 65 6e 20 50 31 20 50 32 20 50 33  vIfOpen P1 P2 P3
29830 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69   P4 P5.**.** Thi
29840 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a  s opcode works j
29850 75 73 74 20 6c 69 6b 65 20 50 72 65 76 20 65 78  ust like Prev ex
29860 63 65 70 74 20 74 68 61 74 20 69 66 20 63 75 72  cept that if cur
29870 73 6f 72 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a  sor P1 is not.**
29880 20 6f 70 65 6e 20 69 74 20 62 65 68 61 76 65 73   open it behaves
29890 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 2f 2a 20   a no-op..*/./* 
298a0 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 4e 65  Opcode: SorterNe
298b0 78 74 20 50 31 20 50 32 20 2a 20 2a 20 50 35 0a  xt P1 P2 * * P5.
298c0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
298d0 65 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  e works just lik
298e0 65 20 4f 50 5f 4e 65 78 74 20 65 78 63 65 70 74  e OP_Next except
298f0 20 74 68 61 74 20 50 31 20 6d 75 73 74 20 62 65   that P1 must be
29900 20 61 0a 2a 2a 20 73 6f 72 74 65 72 20 6f 62 6a   a.** sorter obj
29910 65 63 74 20 66 6f 72 20 77 68 69 63 68 20 74 68  ect for which th
29920 65 20 4f 50 5f 53 6f 72 74 65 72 53 6f 72 74 20  e OP_SorterSort 
29930 6f 70 63 6f 64 65 20 68 61 73 20 62 65 65 6e 0a  opcode has been.
29940 2a 2a 20 69 6e 76 6f 6b 65 64 2e 20 20 54 68 69  ** invoked.  Thi
29950 73 20 6f 70 63 6f 64 65 20 61 64 76 61 6e 63 65  s opcode advance
29960 73 20 74 68 65 20 63 75 72 73 6f 72 20 74 6f 20  s the cursor to 
29970 74 68 65 20 6e 65 78 74 20 73 6f 72 74 65 64 0a  the next sorted.
29980 2a 2a 20 72 65 63 6f 72 64 2c 20 6f 72 20 6a 75  ** record, or ju
29990 6d 70 73 20 74 6f 20 50 32 20 69 66 20 74 68 65  mps to P2 if the
299a0 72 65 20 61 72 65 20 6e 6f 20 6d 6f 72 65 20 73  re are no more s
299b0 6f 72 74 65 64 20 72 65 63 6f 72 64 73 2e 0a 2a  orted records..*
299c0 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72  /.case OP_Sorter
299d0 4e 65 78 74 3a 20 7b 20 20 2f 2a 20 6a 75 6d 70  Next: {  /* jump
299e0 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
299f0 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b   *pC;.  int res;
29a00 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ..  pC = p->apCs
29a10 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
29a20 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70  sert( isSorter(p
29a30 43 29 20 29 3b 0a 20 20 72 65 73 20 3d 20 30 3b  C) );.  res = 0;
29a40 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
29a50 64 62 65 53 6f 72 74 65 72 4e 65 78 74 28 64 62  dbeSorterNext(db
29a60 2c 20 70 43 2c 20 26 72 65 73 29 3b 0a 20 20 67  , pC, &res);.  g
29a70 6f 74 6f 20 6e 65 78 74 5f 74 61 69 6c 3b 0a 63  oto next_tail;.c
29a80 61 73 65 20 4f 50 5f 50 72 65 76 49 66 4f 70 65  ase OP_PrevIfOpe
29a90 6e 3a 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f  n:    /* jump */
29aa0 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74 49 66 4f  .case OP_NextIfO
29ab0 70 65 6e 3a 20 20 20 20 2f 2a 20 6a 75 6d 70 20  pen:    /* jump 
29ac0 2a 2f 0a 20 20 69 66 28 20 70 2d 3e 61 70 43 73  */.  if( p->apCs
29ad0 72 5b 70 4f 70 2d 3e 70 31 5d 3d 3d 30 20 29 20  r[pOp->p1]==0 ) 
29ae0 62 72 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c  break;.  /* Fall
29af0 20 74 68 72 6f 75 67 68 20 2a 2f 0a 63 61 73 65   through */.case
29b00 20 4f 50 5f 50 72 65 76 3a 20 20 20 20 20 20 20   OP_Prev:       
29b10 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61     /* jump */.ca
29b20 73 65 20 4f 50 5f 4e 65 78 74 3a 20 20 20 20 20  se OP_Next:     
29b30 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
29b40 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
29b50 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
29b60 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
29b70 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c  assert( pOp->p5<
29b80 41 72 72 61 79 53 69 7a 65 28 70 2d 3e 61 43 6f  ArraySize(p->aCo
29b90 75 6e 74 65 72 29 20 29 3b 0a 20 20 70 43 20 3d  unter) );.  pC =
29ba0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
29bb0 31 5d 3b 0a 20 20 72 65 73 20 3d 20 70 4f 70 2d  1];.  res = pOp-
29bc0 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 70  >p3;.  assert( p
29bd0 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
29be0 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
29bf0 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73  veto==0 );.  ass
29c00 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
29c10 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
29c20 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72 65   );.  assert( re
29c30 73 3d 3d 30 20 7c 7c 20 28 72 65 73 3d 3d 31 20  s==0 || (res==1 
29c40 26 26 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d  && pC->isTable==
29c50 30 29 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  0) );.  testcase
29c60 28 20 72 65 73 3d 3d 31 20 29 3b 0a 20 20 61 73  ( res==1 );.  as
29c70 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
29c80 65 21 3d 4f 50 5f 4e 65 78 74 20 7c 7c 20 70 4f  e!=OP_Next || pO
29c90 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d  p->p4.xAdvance==
29ca0 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74  sqlite3BtreeNext
29cb0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
29cc0 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72  p->opcode!=OP_Pr
29cd0 65 76 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41  ev || pOp->p4.xA
29ce0 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42  dvance==sqlite3B
29cf0 74 72 65 65 50 72 65 76 69 6f 75 73 20 29 3b 0a  treePrevious );.
29d00 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
29d10 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 49 66  pcode!=OP_NextIf
29d20 4f 70 65 6e 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e  Open || pOp->p4.
29d30 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65  xAdvance==sqlite
29d40 33 42 74 72 65 65 4e 65 78 74 20 29 3b 0a 20 20  3BtreeNext );.  
29d50 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
29d60 6f 64 65 21 3d 4f 50 5f 50 72 65 76 49 66 4f 70  ode!=OP_PrevIfOp
29d70 65 6e 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41  en || pOp->p4.xA
29d80 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42  dvance==sqlite3B
29d90 74 72 65 65 50 72 65 76 69 6f 75 73 29 3b 0a 0a  treePrevious);..
29da0 20 20 2f 2a 20 54 68 65 20 4e 65 78 74 20 6f 70    /* The Next op
29db0 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 75 73 65  code is only use
29dc0 64 20 61 66 74 65 72 20 53 65 65 6b 47 54 2c 20  d after SeekGT, 
29dd0 53 65 65 6b 47 45 2c 20 61 6e 64 20 52 65 77 69  SeekGE, and Rewi
29de0 6e 64 2e 0a 20 20 2a 2a 20 54 68 65 20 50 72 65  nd..  ** The Pre
29df0 76 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79  v opcode is only
29e00 20 75 73 65 64 20 61 66 74 65 72 20 53 65 65 6b   used after Seek
29e10 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 61 6e 64 20  LT, SeekLE, and 
29e20 4c 61 73 74 2e 20 2a 2f 0a 20 20 61 73 73 65 72  Last. */.  asser
29e30 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  t( pOp->opcode!=
29e40 4f 50 5f 4e 65 78 74 20 7c 7c 20 70 4f 70 2d 3e  OP_Next || pOp->
29e50 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 49  opcode!=OP_NextI
29e60 66 4f 70 65 6e 0a 20 20 20 20 20 20 20 7c 7c 20  fOpen.       || 
29e70 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53  pC->seekOp==OP_S
29e80 65 65 6b 47 54 20 7c 7c 20 70 43 2d 3e 73 65 65  eekGT || pC->see
29e90 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 47 45 0a 20  kOp==OP_SeekGE. 
29ea0 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65        || pC->see
29eb0 6b 4f 70 3d 3d 4f 50 5f 52 65 77 69 6e 64 20 7c  kOp==OP_Rewind |
29ec0 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50  | pC->seekOp==OP
29ed0 5f 46 6f 75 6e 64 29 3b 0a 20 20 61 73 73 65 72  _Found);.  asser
29ee0 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  t( pOp->opcode!=
29ef0 4f 50 5f 50 72 65 76 20 7c 7c 20 70 4f 70 2d 3e  OP_Prev || pOp->
29f00 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 49  opcode!=OP_PrevI
29f10 66 4f 70 65 6e 0a 20 20 20 20 20 20 20 7c 7c 20  fOpen.       || 
29f20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53  pC->seekOp==OP_S
29f30 65 65 6b 4c 54 20 7c 7c 20 70 43 2d 3e 73 65 65  eekLT || pC->see
29f40 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 4c 45 0a 20  kOp==OP_SeekLE. 
29f50 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65        || pC->see
29f60 6b 4f 70 3d 3d 4f 50 5f 4c 61 73 74 20 29 3b 0a  kOp==OP_Last );.
29f70 0a 20 20 72 63 20 3d 20 70 4f 70 2d 3e 70 34 2e  .  rc = pOp->p4.
29f80 78 41 64 76 61 6e 63 65 28 70 43 2d 3e 75 63 2e  xAdvance(pC->uc.
29f90 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a  pCursor, &res);.
29fa0 6e 65 78 74 5f 74 61 69 6c 3a 0a 20 20 70 43 2d  next_tail:.  pC-
29fb0 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
29fc0 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 56 64  ACHE_STALE;.  Vd
29fd0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65  beBranchTaken(re
29fe0 73 3d 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72  s==0,2);.  if( r
29ff0 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
2a000 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69  ue_to_error;.  i
2a010 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20  f( res==0 ){.   
2a020 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30   pC->nullRow = 0
2a030 3b 0a 20 20 20 20 70 2d 3e 61 43 6f 75 6e 74 65  ;.    p->aCounte
2a040 72 5b 70 4f 70 2d 3e 70 35 5d 2b 2b 3b 0a 23 69  r[pOp->p5]++;.#i
2a050 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
2a060 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 65 61  .    sqlite3_sea
2a070 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e  rch_count++;.#en
2a080 64 69 66 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d  dif.    goto jum
2a090 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68 65 63  p_to_p2_and_chec
2a0a0 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b  k_for_interrupt;
2a0b0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 43  .  }else{.    pC
2a0c0 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20  ->nullRow = 1;. 
2a0d0 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f   }.  goto check_
2a0e0 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d  for_interrupt;.}
2a0f0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  ../* Opcode: Idx
2a100 49 6e 73 65 72 74 20 50 31 20 50 32 20 50 33 20  Insert P1 P2 P3 
2a110 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
2a120 73 3a 20 6b 65 79 3d 72 5b 50 32 5d 0a 2a 2a 0a  s: key=r[P2].**.
2a130 2a 2a 20 52 65 67 69 73 74 65 72 20 50 32 20 68  ** Register P2 h
2a140 6f 6c 64 73 20 61 6e 20 53 51 4c 20 69 6e 64 65  olds an SQL inde
2a150 78 20 6b 65 79 20 6d 61 64 65 20 75 73 69 6e 67  x key made using
2a160 20 74 68 65 0a 2a 2a 20 4d 61 6b 65 52 65 63 6f   the.** MakeReco
2a170 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 2e  rd instructions.
2a180 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 72    This opcode wr
2a190 69 74 65 73 20 74 68 61 74 20 6b 65 79 0a 2a 2a  ites that key.**
2a1a0 20 69 6e 74 6f 20 74 68 65 20 69 6e 64 65 78 20   into the index 
2a1b0 50 31 2e 20 20 44 61 74 61 20 66 6f 72 20 74 68  P1.  Data for th
2a1c0 65 20 65 6e 74 72 79 20 69 73 20 6e 69 6c 2e 0a  e entry is nil..
2a1d0 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e  **.** If P4 is n
2a1e0 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74  ot zero, then it
2a1f0 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   is the number o
2a200 66 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20  f values in the 
2a210 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 6b 65 79 20  unpacked.** key 
2a220 6f 66 20 72 65 67 28 50 32 29 2e 20 20 49 6e 20  of reg(P2).  In 
2a230 74 68 61 74 20 63 61 73 65 2c 20 50 33 20 69 73  that case, P3 is
2a240 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68   the index of th
2a250 65 20 66 69 72 73 74 20 72 65 67 69 73 74 65 72  e first register
2a260 0a 2a 2a 20 66 6f 72 20 74 68 65 20 75 6e 70 61  .** for the unpa
2a270 63 6b 65 64 20 6b 65 79 2e 20 20 54 68 65 20 61  cked key.  The a
2a280 76 61 69 6c 61 62 69 6c 69 74 79 20 6f 66 20 74  vailability of t
2a290 68 65 20 75 6e 70 61 63 6b 65 64 20 6b 65 79 20  he unpacked key 
2a2a0 63 61 6e 20 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a  can sometimes.**
2a2b0 20 62 65 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74   be an optimizat
2a2c0 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  ion..**.** If P5
2a2d0 20 68 61 73 20 74 68 65 20 4f 50 46 4c 41 47 5f   has the OPFLAG_
2a2e0 41 50 50 45 4e 44 20 62 69 74 20 73 65 74 2c 20  APPEND bit set, 
2a2f0 74 68 61 74 20 69 73 20 61 20 68 69 6e 74 20 74  that is a hint t
2a300 6f 20 74 68 65 20 62 2d 74 72 65 65 20 6c 61 79  o the b-tree lay
2a310 65 72 0a 2a 2a 20 74 68 61 74 20 74 68 69 73 20  er.** that this 
2a320 69 6e 73 65 72 74 20 69 73 20 6c 69 6b 65 6c 79  insert is likely
2a330 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64   to be an append
2a340 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61  ..**.** If P5 ha
2a350 73 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48  s the OPFLAG_NCH
2a360 41 4e 47 45 20 62 69 74 20 73 65 74 2c 20 74 68  ANGE bit set, th
2a370 65 6e 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f  en the change co
2a380 75 6e 74 65 72 20 69 73 0a 2a 2a 20 69 6e 63 72  unter is.** incr
2a390 65 6d 65 6e 74 65 64 20 62 79 20 74 68 69 73 20  emented by this 
2a3a0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 49 66  instruction.  If
2a3b0 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41   the OPFLAG_NCHA
2a3c0 4e 47 45 20 62 69 74 20 69 73 20 63 6c 65 61 72  NGE bit is clear
2a3d0 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 63 68  ,.** then the ch
2a3e0 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73 20  ange counter is 
2a3f0 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2a 0a 2a 2a  unchanged..**.**
2a400 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 55   If the OPFLAG_U
2a410 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61  SESEEKRESULT fla
2a420 67 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20  g of P5 is set, 
2a430 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  the implementati
2a440 6f 6e 20 6d 69 67 68 74 0a 2a 2a 20 72 75 6e 20  on might.** run 
2a450 66 61 73 74 65 72 20 62 79 20 61 76 6f 69 64 69  faster by avoidi
2a460 6e 67 20 61 6e 20 75 6e 6e 65 63 65 73 73 61 72  ng an unnecessar
2a470 79 20 73 65 65 6b 20 6f 6e 20 63 75 72 73 6f 72  y seek on cursor
2a480 20 50 31 2e 20 20 48 6f 77 65 76 65 72 2c 0a 2a   P1.  However,.*
2a490 2a 20 74 68 65 20 4f 50 46 4c 41 47 5f 55 53 45  * the OPFLAG_USE
2a4a0 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20  SEEKRESULT flag 
2a4b0 6d 75 73 74 20 6f 6e 6c 79 20 62 65 20 73 65 74  must only be set
2a4c0 20 69 66 20 74 68 65 72 65 20 68 61 76 65 20 62   if there have b
2a4d0 65 65 6e 20 6e 6f 20 70 72 69 6f 72 0a 2a 2a 20  een no prior.** 
2a4e0 73 65 65 6b 73 20 6f 6e 20 74 68 65 20 63 75 72  seeks on the cur
2a4f0 73 6f 72 20 6f 72 20 69 66 20 74 68 65 20 6d 6f  sor or if the mo
2a500 73 74 20 72 65 63 65 6e 74 20 73 65 65 6b 20 75  st recent seek u
2a510 73 65 64 20 61 20 6b 65 79 20 65 71 75 69 76 61  sed a key equiva
2a520 6c 65 6e 74 0a 2a 2a 20 74 6f 20 50 32 2e 20 0a  lent.** to P2. .
2a530 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
2a540 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b  uction only work
2a550 73 20 66 6f 72 20 69 6e 64 69 63 65 73 2e 20 20  s for indices.  
2a560 54 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69  The equivalent i
2a570 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f  nstruction.** fo
2a580 72 20 74 61 62 6c 65 73 20 69 73 20 4f 50 5f 49  r tables is OP_I
2a590 6e 73 65 72 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  nsert..*/./* Opc
2a5a0 6f 64 65 3a 20 53 6f 72 74 65 72 49 6e 73 65 72  ode: SorterInser
2a5b0 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
2a5c0 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
2a5d0 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73  [P2].**.** Regis
2a5e0 74 65 72 20 50 32 20 68 6f 6c 64 73 20 61 6e 20  ter P2 holds an 
2a5f0 53 51 4c 20 69 6e 64 65 78 20 6b 65 79 20 6d 61  SQL index key ma
2a600 64 65 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20  de using the.** 
2a610 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74 72  MakeRecord instr
2a620 75 63 74 69 6f 6e 73 2e 20 20 54 68 69 73 20 6f  uctions.  This o
2a630 70 63 6f 64 65 20 77 72 69 74 65 73 20 74 68 61  pcode writes tha
2a640 74 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f 20 74 68  t key.** into th
2a650 65 20 73 6f 72 74 65 72 20 50 31 2e 20 20 44 61  e sorter P1.  Da
2a660 74 61 20 66 6f 72 20 74 68 65 20 65 6e 74 72 79  ta for the entry
2a670 20 69 73 20 6e 69 6c 2e 0a 2a 2f 0a 63 61 73 65   is nil..*/.case
2a680 20 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74   OP_SorterInsert
2a690 3a 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a  :       /* in2 *
2a6a0 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 49 6e 73  /.case OP_IdxIns
2a6b0 65 72 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ert: {        /*
2a6c0 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43 75   in2 */.  VdbeCu
2a6d0 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 72 65  rsor *pC;.  Btre
2a6e0 65 50 61 79 6c 6f 61 64 20 78 3b 0a 0a 20 20 61  ePayload x;..  a
2a6f0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
2a700 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
2a710 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
2a720 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
2a730 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2a740 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
2a750 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 3d 3d  ( isSorter(pC)==
2a760 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50  (pOp->opcode==OP
2a770 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 29 20 29  _SorterInsert) )
2a780 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
2a790 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73  [pOp->p2];.  ass
2a7a0 65 72 74 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73  ert( pIn2->flags
2a7b0 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20   & MEM_Blob );. 
2a7c0 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f   if( pOp->p5 & O
2a7d0 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20  PFLAG_NCHANGE ) 
2a7e0 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20  p->nChange++;.  
2a7f0 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
2a800 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
2a810 52 45 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  REE || pOp->opco
2a820 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73  de==OP_SorterIns
2a830 65 72 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ert );.  assert(
2a840 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20   pC->isTable==0 
2a850 29 3b 0a 20 20 72 63 20 3d 20 45 78 70 61 6e 64  );.  rc = Expand
2a860 42 6c 6f 62 28 70 49 6e 32 29 3b 0a 20 20 69 66  Blob(pIn2);.  if
2a870 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
2a880 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
2a890 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
2a8a0 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65  e==OP_SorterInse
2a8b0 72 74 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  rt ){.    rc = s
2a8c0 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72  qlite3VdbeSorter
2a8d0 57 72 69 74 65 28 70 43 2c 20 70 49 6e 32 29 3b  Write(pC, pIn2);
2a8e0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 78 2e  .  }else{.    x.
2a8f0 6e 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b 0a  nKey = pIn2->n;.
2a900 20 20 20 20 78 2e 70 4b 65 79 20 3d 20 70 49 6e      x.pKey = pIn
2a910 32 2d 3e 7a 3b 0a 20 20 20 20 78 2e 61 4d 65 6d  2->z;.    x.aMem
2a920 20 3d 20 61 4d 65 6d 20 2b 20 70 4f 70 2d 3e 70   = aMem + pOp->p
2a930 33 3b 0a 20 20 20 20 78 2e 6e 4d 65 6d 20 3d 20  3;.    x.nMem = 
2a940 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a  (u16)pOp->p4.i;.
2a950 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
2a960 42 74 72 65 65 49 6e 73 65 72 74 28 70 43 2d 3e  BtreeInsert(pC->
2a970 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 78 2c 0a  uc.pCursor, &x,.
2a980 20 20 20 20 20 20 20 20 20 28 70 4f 70 2d 3e 70           (pOp->p
2a990 35 20 26 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e  5 & OPFLAG_APPEN
2a9a0 44 29 21 3d 30 2c 20 0a 20 20 20 20 20 20 20 20  D)!=0, .        
2a9b0 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ((pOp->p5 & OPFL
2a9c0 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54  AG_USESEEKRESULT
2a9d0 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73 75  ) ? pC->seekResu
2a9e0 6c 74 20 3a 20 30 29 0a 20 20 20 20 20 20 20 20  lt : 0).        
2a9f0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
2aa00 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
2aa10 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 70 43 2d 3e  o==0 );.    pC->
2aa20 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
2aa30 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20  CHE_STALE;.  }. 
2aa40 20 69 66 28 20 72 63 29 20 67 6f 74 6f 20 61 62   if( rc) goto ab
2aa50 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
2aa60 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
2aa70 20 4f 70 63 6f 64 65 3a 20 49 64 78 44 65 6c 65   Opcode: IdxDele
2aa80 74 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  te P1 P2 P3 * *.
2aa90 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
2aaa0 3d 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20  =r[P2@P3].**.** 
2aab0 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 50  The content of P
2aac0 33 20 72 65 67 69 73 74 65 72 73 20 73 74 61 72  3 registers star
2aad0 74 69 6e 67 20 61 74 20 72 65 67 69 73 74 65 72  ting at register
2aae0 20 50 32 20 66 6f 72 6d 0a 2a 2a 20 61 6e 20 75   P2 form.** an u
2aaf0 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65  npacked index ke
2ab00 79 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 72  y. This opcode r
2ab10 65 6d 6f 76 65 73 20 74 68 61 74 20 65 6e 74 72  emoves that entr
2ab20 79 20 66 72 6f 6d 20 74 68 65 20 0a 2a 2a 20 69  y from the .** i
2ab30 6e 64 65 78 20 6f 70 65 6e 65 64 20 62 79 20 63  ndex opened by c
2ab40 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61 73  ursor P1..*/.cas
2ab50 65 20 4f 50 5f 49 64 78 44 65 6c 65 74 65 3a 20  e OP_IdxDelete: 
2ab60 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
2ab70 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
2ab80 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73  pCrsr;.  int res
2ab90 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ;.  UnpackedReco
2aba0 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28  rd r;..  assert(
2abb0 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20   pOp->p3>0 );.  
2abc0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
2abd0 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 70 4f 70  0 && pOp->p2+pOp
2abe0 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ->p3<=(p->nMem+1
2abf0 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31   - p->nCursor)+1
2ac00 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
2ac10 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
2ac20 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
2ac30 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
2ac40 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
2ac50 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
2ac60 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
2ac70 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
2ac80 54 52 45 45 20 29 3b 0a 20 20 70 43 72 73 72 20  TREE );.  pCrsr 
2ac90 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  = pC->uc.pCursor
2aca0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73  ;.  assert( pCrs
2acb0 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  r!=0 );.  assert
2acc0 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a  ( pOp->p5==0 );.
2acd0 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70    r.pKeyInfo = p
2ace0 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 72  C->pKeyInfo;.  r
2acf0 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70  .nField = (u16)p
2ad00 4f 70 2d 3e 70 33 3b 0a 20 20 72 2e 64 65 66 61  Op->p3;.  r.defa
2ad10 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20 72 2e  ult_rc = 0;.  r.
2ad20 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  aMem = &aMem[pOp
2ad30 2d 3e 70 32 5d 3b 0a 20 20 72 63 20 3d 20 73 71  ->p2];.  rc = sq
2ad40 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
2ad50 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20  Unpacked(pCrsr, 
2ad60 26 72 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b  &r, 0, 0, &res);
2ad70 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
2ad80 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2ad90 72 6f 72 3b 0a 20 20 69 66 28 20 72 65 73 3d 3d  ror;.  if( res==
2ada0 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  0 ){.    rc = sq
2adb0 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65 74 65  lite3BtreeDelete
2adc0 28 70 43 72 73 72 2c 20 42 54 52 45 45 5f 41 55  (pCrsr, BTREE_AU
2add0 58 44 45 4c 45 54 45 29 3b 0a 20 20 20 20 69 66  XDELETE);.    if
2ade0 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
2adf0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
2ae00 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 43    }.  assert( pC
2ae10 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
2ae20 3d 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 63 61 63  ==0 );.  pC->cac
2ae30 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
2ae40 5f 53 54 41 4c 45 3b 0a 20 20 70 43 2d 3e 73 65  _STALE;.  pC->se
2ae50 65 6b 52 65 73 75 6c 74 20 3d 20 30 3b 0a 20 20  ekResult = 0;.  
2ae60 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2ae70 6f 64 65 3a 20 53 65 65 6b 20 50 31 20 2a 20 50  ode: Seek P1 * P
2ae80 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
2ae90 69 73 3a 20 4d 6f 76 65 20 50 33 20 74 6f 20 50  is: Move P3 to P
2aea0 31 2e 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 50 31  1.rowid.**.** P1
2aeb0 20 69 73 20 61 6e 20 6f 70 65 6e 20 69 6e 64 65   is an open inde
2aec0 78 20 63 75 72 73 6f 72 20 61 6e 64 20 50 33 20  x cursor and P3 
2aed0 69 73 20 61 20 63 75 72 73 6f 72 20 6f 6e 20 74  is a cursor on t
2aee0 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
2aef0 0a 2a 2a 20 74 61 62 6c 65 2e 20 20 54 68 69 73  .** table.  This
2af00 20 6f 70 63 6f 64 65 20 64 6f 65 73 20 61 20 64   opcode does a d
2af10 65 66 65 72 72 65 64 20 73 65 65 6b 20 6f 66 20  eferred seek of 
2af20 74 68 65 20 50 33 20 74 61 62 6c 65 20 63 75 72  the P3 table cur
2af30 73 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20 72 6f  sor.** to the ro
2af40 77 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e  w that correspon
2af50 64 73 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e  ds to the curren
2af60 74 20 72 6f 77 20 6f 66 20 50 31 2e 0a 2a 2a 0a  t row of P1..**.
2af70 2a 2a 20 54 68 69 73 20 69 73 20 61 20 64 65 66  ** This is a def
2af80 65 72 72 65 64 20 73 65 65 6b 2e 20 20 4e 6f 74  erred seek.  Not
2af90 68 69 6e 67 20 61 63 74 75 61 6c 6c 79 20 68 61  hing actually ha
2afa0 70 70 65 6e 73 20 75 6e 74 69 6c 0a 2a 2a 20 74  ppens until.** t
2afb0 68 65 20 63 75 72 73 6f 72 20 69 73 20 75 73 65  he cursor is use
2afc0 64 20 74 6f 20 72 65 61 64 20 61 20 72 65 63 6f  d to read a reco
2afd0 72 64 2e 20 20 54 68 61 74 20 77 61 79 2c 20 69  rd.  That way, i
2afe0 66 20 6e 6f 20 72 65 61 64 73 0a 2a 2a 20 6f 63  f no reads.** oc
2aff0 63 75 72 2c 20 6e 6f 20 75 6e 6e 65 63 65 73 73  cur, no unnecess
2b000 61 72 79 20 49 2f 4f 20 68 61 70 70 65 6e 73 2e  ary I/O happens.
2b010 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65  .**.** P4 may be
2b020 20 61 6e 20 61 72 72 61 79 20 6f 66 20 69 6e 74   an array of int
2b030 65 67 65 72 73 20 28 74 79 70 65 20 50 34 5f 49  egers (type P4_I
2b040 4e 54 41 52 52 41 59 29 20 63 6f 6e 74 61 69 6e  NTARRAY) contain
2b050 69 6e 67 0a 2a 2a 20 6f 6e 65 20 65 6e 74 72 79  ing.** one entry
2b060 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
2b070 20 69 6e 20 74 68 65 20 50 33 20 74 61 62 6c 65   in the P3 table
2b080 2e 20 20 49 66 20 61 72 72 61 79 20 65 6e 74 72  .  If array entr
2b090 79 20 61 28 69 29 0a 2a 2a 20 69 73 20 6e 6f 6e  y a(i).** is non
2b0a0 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 72 65 61 64  -zero, then read
2b0b0 69 6e 67 20 63 6f 6c 75 6d 6e 20 61 28 69 29 2d  ing column a(i)-
2b0c0 31 20 66 72 6f 6d 20 63 75 72 73 6f 72 20 50 33  1 from cursor P3
2b0d0 20 69 73 20 0a 2a 2a 20 65 71 75 69 76 61 6c 65   is .** equivale
2b0e0 6e 74 20 74 6f 20 70 65 72 66 6f 72 6d 69 6e 67  nt to performing
2b0f0 20 74 68 65 20 64 65 66 65 72 72 65 64 20 73 65   the deferred se
2b100 65 6b 20 61 6e 64 20 74 68 65 6e 20 72 65 61 64  ek and then read
2b110 69 6e 67 20 63 6f 6c 75 6d 6e 20 69 20 0a 2a 2a  ing column i .**
2b120 20 66 72 6f 6d 20 50 31 2e 20 20 54 68 69 73 20   from P1.  This 
2b130 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 73  information is s
2b140 74 6f 72 65 64 20 69 6e 20 50 33 20 61 6e 64 20  tored in P3 and 
2b150 75 73 65 64 20 74 6f 20 72 65 64 69 72 65 63 74  used to redirect
2b160 0a 2a 2a 20 72 65 61 64 73 20 61 67 61 69 6e 73  .** reads agains
2b170 74 20 50 33 20 6f 76 65 72 20 74 6f 20 50 31 2c  t P3 over to P1,
2b180 20 74 68 75 73 20 70 6f 73 73 69 62 6c 79 20 61   thus possibly a
2b190 76 6f 69 64 69 6e 67 20 74 68 65 20 6e 65 65 64  voiding the need
2b1a0 20 74 6f 0a 2a 2a 20 73 65 65 6b 20 61 6e 64 20   to.** seek and 
2b1b0 72 65 61 64 20 63 75 72 73 6f 72 20 50 33 2e 0a  read cursor P3..
2b1c0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  */./* Opcode: Id
2b1d0 78 52 6f 77 69 64 20 50 31 20 50 32 20 2a 20 2a  xRowid P1 P2 * *
2b1e0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
2b1f0 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a  r[P2]=rowid.**.*
2b200 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67  * Write into reg
2b210 69 73 74 65 72 20 50 32 20 61 6e 20 69 6e 74 65  ister P2 an inte
2b220 67 65 72 20 77 68 69 63 68 20 69 73 20 74 68 65  ger which is the
2b230 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74   last entry in t
2b240 68 65 20 72 65 63 6f 72 64 20 61 74 0a 2a 2a 20  he record at.** 
2b250 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 69  the end of the i
2b260 6e 64 65 78 20 6b 65 79 20 70 6f 69 6e 74 65 64  ndex key pointed
2b270 20 74 6f 20 62 79 20 63 75 72 73 6f 72 20 50 31   to by cursor P1
2b280 2e 20 20 54 68 69 73 20 69 6e 74 65 67 65 72 20  .  This integer 
2b290 73 68 6f 75 6c 64 20 62 65 0a 2a 2a 20 74 68 65  should be.** the
2b2a0 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61   rowid of the ta
2b2b0 62 6c 65 20 65 6e 74 72 79 20 74 6f 20 77 68 69  ble entry to whi
2b2c0 63 68 20 74 68 69 73 20 69 6e 64 65 78 20 65 6e  ch this index en
2b2d0 74 72 79 20 70 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a  try points..**.*
2b2e0 2a 20 53 65 65 20 61 6c 73 6f 3a 20 52 6f 77 69  * See also: Rowi
2b2f0 64 2c 20 4d 61 6b 65 52 65 63 6f 72 64 2e 0a 2a  d, MakeRecord..*
2b300 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 3a 0a  /.case OP_Seek:.
2b310 63 61 73 65 20 4f 50 5f 49 64 78 52 6f 77 69 64  case OP_IdxRowid
2b320 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
2b330 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 56 64   /* out2 */.  Vd
2b340 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20  beCursor *pC;   
2b350 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2b360 54 68 65 20 50 31 20 69 6e 64 65 78 20 63 75 72  The P1 index cur
2b370 73 6f 72 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  sor */.  VdbeCur
2b380 73 6f 72 20 2a 70 54 61 62 43 75 72 3b 20 20 20  sor *pTabCur;   
2b390 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50          /* The P
2b3a0 32 20 74 61 62 6c 65 20 63 75 72 73 6f 72 20 28  2 table cursor (
2b3b0 4f 50 5f 53 65 65 6b 20 6f 6e 6c 79 29 20 2a 2f  OP_Seek only) */
2b3c0 0a 20 20 69 36 34 20 72 6f 77 69 64 3b 20 20 20  .  i64 rowid;   
2b3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b3e0 20 20 2f 2a 20 52 6f 77 69 64 20 74 68 61 74 20    /* Rowid that 
2b3f0 50 31 20 63 75 72 72 65 6e 74 20 70 6f 69 6e 74  P1 current point
2b400 73 20 74 6f 20 2a 2f 0a 0a 20 20 61 73 73 65 72  s to */..  asser
2b410 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
2b420 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
2b430 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
2b440 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
2b450 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
2b460 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
2b470 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
2b480 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61  YPE_BTREE );.  a
2b490 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43  ssert( pC->uc.pC
2b4a0 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73  ursor!=0 );.  as
2b4b0 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
2b4c0 65 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  e==0 );.  assert
2b4d0 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
2b4e0 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73  veto==0 );.  ass
2b4f0 65 72 74 28 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f  ert( !pC->nullRo
2b500 77 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  w || pOp->opcode
2b510 3d 3d 4f 50 5f 49 64 78 52 6f 77 69 64 20 29 3b  ==OP_IdxRowid );
2b520 0a 0a 20 20 2f 2a 20 54 68 65 20 49 64 78 52 6f  ..  /* The IdxRo
2b530 77 69 64 20 61 6e 64 20 53 65 65 6b 20 6f 70 63  wid and Seek opc
2b540 6f 64 65 73 20 61 72 65 20 63 6f 6d 62 69 6e 65  odes are combine
2b550 64 20 62 65 63 61 75 73 65 20 6f 66 20 74 68 65  d because of the
2b560 20 63 6f 6d 6d 6f 6e 61 6c 69 74 79 0a 20 20 2a   commonality.  *
2b570 2a 20 6f 66 20 73 71 6c 69 74 65 33 56 64 62 65  * of sqlite3Vdbe
2b580 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28 29 20  CursorRestore() 
2b590 61 6e 64 20 73 71 6c 69 74 65 33 56 64 62 65 49  and sqlite3VdbeI
2b5a0 64 78 52 6f 77 69 64 28 29 2e 20 2a 2f 0a 20 20  dxRowid(). */.  
2b5b0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
2b5c0 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28 70 43  CursorRestore(pC
2b5d0 29 3b 0a 0a 20 20 2f 2a 20 73 71 6c 69 74 65 33  );..  /* sqlite3
2b5e0 56 62 65 43 75 72 73 6f 72 52 65 73 74 6f 72 65  VbeCursorRestore
2b5f0 28 29 20 63 61 6e 20 6f 6e 6c 79 20 66 61 69 6c  () can only fail
2b600 20 69 66 20 74 68 65 20 72 65 63 6f 72 64 20 68   if the record h
2b610 61 73 20 62 65 65 6e 20 64 65 6c 65 74 65 64 0a  as been deleted.
2b620 20 20 2a 2a 20 6f 75 74 20 66 72 6f 6d 20 75 6e    ** out from un
2b630 64 65 72 20 74 68 65 20 63 75 72 73 6f 72 2e 20  der the cursor. 
2b640 20 54 68 61 74 20 77 69 6c 6c 20 6e 65 76 65 72   That will never
2b650 20 68 61 70 70 65 6e 73 20 66 6f 72 20 61 6e 20   happens for an 
2b660 49 64 78 52 6f 77 69 64 0a 20 20 2a 2a 20 6f 72  IdxRowid.  ** or
2b670 20 53 65 65 6b 20 6f 70 63 6f 64 65 20 2a 2f 0a   Seek opcode */.
2b680 20 20 69 66 28 20 4e 45 56 45 52 28 72 63 21 3d    if( NEVER(rc!=
2b690 53 51 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f 74  SQLITE_OK) ) got
2b6a0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
2b6b0 72 72 6f 72 3b 0a 0a 20 20 69 66 28 20 21 70 43  rror;..  if( !pC
2b6c0 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20  ->nullRow ){.   
2b6d0 20 72 6f 77 69 64 20 3d 20 30 3b 20 20 2f 2a 20   rowid = 0;  /* 
2b6e0 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c  Not needed.  Onl
2b6f0 79 20 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63  y used to silenc
2b700 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a  e a warning. */.
2b710 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
2b720 56 64 62 65 49 64 78 52 6f 77 69 64 28 64 62 2c  VdbeIdxRowid(db,
2b730 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c   pC->uc.pCursor,
2b740 20 26 72 6f 77 69 64 29 3b 0a 20 20 20 20 69 66   &rowid);.    if
2b750 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
2b760 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62  ){.      goto ab
2b770 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
2b780 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
2b790 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
2b7a0 53 65 65 6b 20 29 7b 0a 20 20 20 20 20 20 61 73  Seek ){.      as
2b7b0 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30  sert( pOp->p3>=0
2b7c0 20 26 26 20 70 4f 70 2d 3e 70 33 3c 70 2d 3e 6e   && pOp->p3<p->n
2b7d0 43 75 72 73 6f 72 20 29 3b 0a 20 20 20 20 20 20  Cursor );.      
2b7e0 70 54 61 62 43 75 72 20 3d 20 70 2d 3e 61 70 43  pTabCur = p->apC
2b7f0 73 72 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  sr[pOp->p3];.   
2b800 20 20 20 61 73 73 65 72 74 28 20 70 54 61 62 43     assert( pTabC
2b810 75 72 21 3d 30 20 29 3b 0a 20 20 20 20 20 20 61  ur!=0 );.      a
2b820 73 73 65 72 74 28 20 70 54 61 62 43 75 72 2d 3e  ssert( pTabCur->
2b830 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
2b840 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 20 20 20  E_BTREE );.     
2b850 20 61 73 73 65 72 74 28 20 70 54 61 62 43 75 72   assert( pTabCur
2b860 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20  ->uc.pCursor!=0 
2b870 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
2b880 20 70 54 61 62 43 75 72 2d 3e 69 73 54 61 62 6c   pTabCur->isTabl
2b890 65 20 29 3b 0a 20 20 20 20 20 20 70 54 61 62 43  e );.      pTabC
2b8a0 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b  ur->nullRow = 0;
2b8b0 0a 20 20 20 20 20 20 70 54 61 62 43 75 72 2d 3e  .      pTabCur->
2b8c0 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20 72  movetoTarget = r
2b8d0 6f 77 69 64 3b 0a 20 20 20 20 20 20 70 54 61 62  owid;.      pTab
2b8e0 43 75 72 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76  Cur->deferredMov
2b8f0 65 74 6f 20 3d 20 31 3b 0a 20 20 20 20 20 20 61  eto = 1;.      a
2b900 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
2b910 70 65 3d 3d 50 34 5f 49 4e 54 41 52 52 41 59 20  pe==P4_INTARRAY 
2b920 7c 7c 20 70 4f 70 2d 3e 70 34 2e 61 69 3d 3d 30  || pOp->p4.ai==0
2b930 20 29 3b 0a 20 20 20 20 20 20 70 54 61 62 43 75   );.      pTabCu
2b940 72 2d 3e 61 41 6c 74 4d 61 70 20 3d 20 70 4f 70  r->aAltMap = pOp
2b950 2d 3e 70 34 2e 61 69 3b 0a 20 20 20 20 20 20 70  ->p4.ai;.      p
2b960 54 61 62 43 75 72 2d 3e 70 41 6c 74 43 75 72 73  TabCur->pAltCurs
2b970 6f 72 20 3d 20 70 43 3b 0a 20 20 20 20 7d 65 6c  or = pC;.    }el
2b980 73 65 7b 0a 20 20 20 20 20 20 70 4f 75 74 20 3d  se{.      pOut =
2b990 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
2b9a0 70 2c 20 70 4f 70 29 3b 0a 20 20 20 20 20 20 70  p, pOp);.      p
2b9b0 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 6f 77 69 64  Out->u.i = rowid
2b9c0 3b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c  ;.      pOut->fl
2b9d0 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
2b9e0 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
2b9f0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
2ba00 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 52 6f 77  pcode==OP_IdxRow
2ba10 69 64 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  id );.    sqlite
2ba20 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
2ba30 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b  &aMem[pOp->p2]);
2ba40 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2ba50 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 47  ./* Opcode: IdxG
2ba60 45 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  E P1 P2 P3 P4 P5
2ba70 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
2ba80 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
2ba90 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72   The P4 register
2baa0 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e   values beginnin
2bab0 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61  g with P3 form a
2bac0 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
2bad0 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d   .** key that om
2bae0 69 74 73 20 74 68 65 20 50 52 49 4d 41 52 59 20  its the PRIMARY 
2baf0 4b 45 59 2e 20 20 43 6f 6d 70 61 72 65 20 74 68  KEY.  Compare th
2bb00 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61  is key value aga
2bb10 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78 20 0a  inst the index .
2bb20 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20 63 75  ** that P1 is cu
2bb30 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67  rrently pointing
2bb40 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68   to, ignoring th
2bb50 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72  e PRIMARY KEY or
2bb60 20 52 4f 57 49 44 20 0a 2a 2a 20 66 69 65 6c 64   ROWID .** field
2bb70 73 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2a  s at the end..**
2bb80 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e  .** If the P1 in
2bb90 64 65 78 20 65 6e 74 72 79 20 69 73 20 67 72 65  dex entry is gre
2bba0 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75  ater than or equ
2bbb0 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61  al to the key va
2bbc0 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70  lue.** then jump
2bbd0 20 74 6f 20 50 32 2e 20 20 4f 74 68 65 72 77 69   to P2.  Otherwi
2bbe0 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  se fall through 
2bbf0 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
2bc00 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f  ruction..*/./* O
2bc10 70 63 6f 64 65 3a 20 49 64 78 47 54 20 50 31 20  pcode: IdxGT P1 
2bc20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
2bc30 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
2bc40 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20  3@P4].**.** The 
2bc50 50 34 20 72 65 67 69 73 74 65 72 20 76 61 6c 75  P4 register valu
2bc60 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  es beginning wit
2bc70 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70  h P3 form an unp
2bc80 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20  acked index .** 
2bc90 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74  key that omits t
2bca0 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 2e 20  he PRIMARY KEY. 
2bcb0 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65   Compare this ke
2bcc0 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20  y value against 
2bcd0 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68  the index .** th
2bce0 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e 74  at P1 is current
2bcf0 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20  ly pointing to, 
2bd00 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49  ignoring the PRI
2bd10 4d 41 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49  MARY KEY or ROWI
2bd20 44 20 0a 2a 2a 20 66 69 65 6c 64 73 20 61 74 20  D .** fields at 
2bd30 74 68 65 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49  the end..**.** I
2bd40 66 20 74 68 65 20 50 31 20 69 6e 64 65 78 20 65  f the P1 index e
2bd50 6e 74 72 79 20 69 73 20 67 72 65 61 74 65 72 20  ntry is greater 
2bd60 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c  than the key val
2bd70 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20  ue.** then jump 
2bd80 74 6f 20 50 32 2e 20 20 4f 74 68 65 72 77 69 73  to P2.  Otherwis
2bd90 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  e fall through t
2bda0 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
2bdb0 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70  uction..*/./* Op
2bdc0 63 6f 64 65 3a 20 49 64 78 4c 54 20 50 31 20 50  code: IdxLT P1 P
2bdd0 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
2bde0 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
2bdf0 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  @P4].**.** The P
2be00 34 20 72 65 67 69 73 74 65 72 20 76 61 6c 75 65  4 register value
2be10 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  s beginning with
2be20 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61   P3 form an unpa
2be30 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b  cked index .** k
2be40 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68  ey that omits th
2be50 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72  e PRIMARY KEY or
2be60 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72 65   ROWID.  Compare
2be70 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20   this key value 
2be80 61 67 61 69 6e 73 74 0a 2a 2a 20 74 68 65 20 69  against.** the i
2be90 6e 64 65 78 20 74 68 61 74 20 50 31 20 69 73 20  ndex that P1 is 
2bea0 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
2beb0 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20  ng to, ignoring 
2bec0 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  the PRIMARY KEY 
2bed0 6f 72 0a 2a 2a 20 52 4f 57 49 44 20 6f 6e 20 74  or.** ROWID on t
2bee0 68 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a  he P1 index..**.
2bef0 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e 64  ** If the P1 ind
2bf00 65 78 20 65 6e 74 72 79 20 69 73 20 6c 65 73 73  ex entry is less
2bf10 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61   than the key va
2bf20 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  lue then jump to
2bf30 20 50 32 2e 0a 2a 2a 20 4f 74 68 65 72 77 69 73   P2..** Otherwis
2bf40 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  e fall through t
2bf50 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
2bf60 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70  uction..*/./* Op
2bf70 63 6f 64 65 3a 20 49 64 78 4c 45 20 50 31 20 50  code: IdxLE P1 P
2bf80 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
2bf90 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
2bfa0 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  @P4].**.** The P
2bfb0 34 20 72 65 67 69 73 74 65 72 20 76 61 6c 75 65  4 register value
2bfc0 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  s beginning with
2bfd0 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61   P3 form an unpa
2bfe0 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b  cked index .** k
2bff0 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68  ey that omits th
2c000 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72  e PRIMARY KEY or
2c010 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72 65   ROWID.  Compare
2c020 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20   this key value 
2c030 61 67 61 69 6e 73 74 0a 2a 2a 20 74 68 65 20 69  against.** the i
2c040 6e 64 65 78 20 74 68 61 74 20 50 31 20 69 73 20  ndex that P1 is 
2c050 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
2c060 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20  ng to, ignoring 
2c070 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  the PRIMARY KEY 
2c080 6f 72 0a 2a 2a 20 52 4f 57 49 44 20 6f 6e 20 74  or.** ROWID on t
2c090 68 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a  he P1 index..**.
2c0a0 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e 64  ** If the P1 ind
2c0b0 65 78 20 65 6e 74 72 79 20 69 73 20 6c 65 73 73  ex entry is less
2c0c0 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
2c0d0 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20  o the key value 
2c0e0 74 68 65 6e 20 6a 75 6d 70 0a 2a 2a 20 74 6f 20  then jump.** to 
2c0f0 50 32 2e 20 4f 74 68 65 72 77 69 73 65 20 66 61  P2. Otherwise fa
2c100 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
2c110 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
2c120 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  on..*/.case OP_I
2c130 64 78 4c 45 3a 20 20 20 20 20 20 20 20 20 20 2f  dxLE:          /
2c140 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f  * jump */.case O
2c150 50 5f 49 64 78 47 54 3a 20 20 20 20 20 20 20 20  P_IdxGT:        
2c160 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73    /* jump */.cas
2c170 65 20 4f 50 5f 49 64 78 4c 54 3a 20 20 20 20 20  e OP_IdxLT:     
2c180 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
2c190 63 61 73 65 20 4f 50 5f 49 64 78 47 45 3a 20 20  case OP_IdxGE:  
2c1a0 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20  {       /* jump 
2c1b0 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
2c1c0 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  *pC;.  int res;.
2c1d0 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64    UnpackedRecord
2c1e0 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70   r;..  assert( p
2c1f0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
2c200 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
2c210 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
2c220 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
2c230 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
2c240 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
2c250 4f 72 64 65 72 65 64 20 29 3b 0a 20 20 61 73 73  Ordered );.  ass
2c260 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
2c270 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
2c280 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
2c290 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 29  ->uc.pCursor!=0)
2c2a0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
2c2b0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
2c2c0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
2c2d0 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70  Op->p5==0 || pOp
2c2e0 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20 61 73 73  ->p5==1 );.  ass
2c2f0 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
2c300 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
2c310 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d  r.pKeyInfo = pC-
2c320 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 72 2e 6e  >pKeyInfo;.  r.n
2c330 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70  Field = (u16)pOp
2c340 2d 3e 70 34 2e 69 3b 0a 20 20 69 66 28 20 70 4f  ->p4.i;.  if( pO
2c350 70 2d 3e 6f 70 63 6f 64 65 3c 4f 50 5f 49 64 78  p->opcode<OP_Idx
2c360 4c 54 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  LT ){.    assert
2c370 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
2c380 50 5f 49 64 78 4c 45 20 7c 7c 20 70 4f 70 2d 3e  P_IdxLE || pOp->
2c390 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54  opcode==OP_IdxGT
2c3a0 20 29 3b 0a 20 20 20 20 72 2e 64 65 66 61 75 6c   );.    r.defaul
2c3b0 74 5f 72 63 20 3d 20 2d 31 3b 0a 20 20 7d 65 6c  t_rc = -1;.  }el
2c3c0 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
2c3d0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
2c3e0 49 64 78 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70  IdxGE || pOp->op
2c3f0 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29  code==OP_IdxLT )
2c400 3b 0a 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f  ;.    r.default_
2c410 72 63 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 72 2e  rc = 0;.  }.  r.
2c420 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  aMem = &aMem[pOp
2c430 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20 53 51  ->p3];.#ifdef SQ
2c440 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 7b 20 69  LITE_DEBUG.  { i
2c450 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69  nt i; for(i=0; i
2c460 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20  <r.nField; i++) 
2c470 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
2c480 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29  id(&r.aMem[i]) )
2c490 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 72 65 73  ; }.#endif.  res
2c4a0 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65   = 0;  /* Not ne
2c4b0 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64  eded.  Only used
2c4c0 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61   to silence a wa
2c4d0 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72 63 20 3d  rning. */.  rc =
2c4e0 20 73 71 6c 69 74 65 33 56 64 62 65 49 64 78 4b   sqlite3VdbeIdxK
2c4f0 65 79 43 6f 6d 70 61 72 65 28 64 62 2c 20 70 43  eyCompare(db, pC
2c500 2c 20 26 72 2c 20 26 72 65 73 29 3b 0a 20 20 61  , &r, &res);.  a
2c510 73 73 65 72 74 28 20 28 4f 50 5f 49 64 78 4c 45  ssert( (OP_IdxLE
2c520 26 31 29 3d 3d 28 4f 50 5f 49 64 78 4c 54 26 31  &1)==(OP_IdxLT&1
2c530 29 20 26 26 20 28 4f 50 5f 49 64 78 47 45 26 31  ) && (OP_IdxGE&1
2c540 29 3d 3d 28 4f 50 5f 49 64 78 47 54 26 31 29 20  )==(OP_IdxGT&1) 
2c550 29 3b 0a 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f  );.  if( (pOp->o
2c560 70 63 6f 64 65 26 31 29 3d 3d 28 4f 50 5f 49 64  pcode&1)==(OP_Id
2c570 78 4c 54 26 31 29 20 29 7b 0a 20 20 20 20 61 73  xLT&1) ){.    as
2c580 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
2c590 65 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c 7c 20 70  e==OP_IdxLE || p
2c5a0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
2c5b0 64 78 4c 54 20 29 3b 0a 20 20 20 20 72 65 73 20  dxLT );.    res 
2c5c0 3d 20 2d 72 65 73 3b 0a 20 20 7d 65 6c 73 65 7b  = -res;.  }else{
2c5d0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
2c5e0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
2c5f0 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  GE || pOp->opcod
2c600 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20  e==OP_IdxGT );. 
2c610 20 20 20 72 65 73 2b 2b 3b 0a 20 20 7d 0a 20 20     res++;.  }.  
2c620 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
2c630 72 65 73 3e 30 2c 32 29 3b 0a 20 20 69 66 28 20  res>0,2);.  if( 
2c640 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
2c650 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
2c660 69 66 28 20 72 65 73 3e 30 20 29 20 67 6f 74 6f  if( res>0 ) goto
2c670 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62   jump_to_p2;.  b
2c680 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2c690 64 65 3a 20 44 65 73 74 72 6f 79 20 50 31 20 50  de: Destroy P1 P
2c6a0 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44  2 P3 * *.**.** D
2c6b0 65 6c 65 74 65 20 61 6e 20 65 6e 74 69 72 65 20  elete an entire 
2c6c0 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f  database table o
2c6d0 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f  r index whose ro
2c6e0 6f 74 20 70 61 67 65 20 69 6e 20 74 68 65 20 64  ot page in the d
2c6f0 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65 20  atabase.** file 
2c700 69 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e 0a  is given by P1..
2c710 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65 20  **.** The table 
2c720 62 65 69 6e 67 20 64 65 73 74 72 6f 79 65 64 20  being destroyed 
2c730 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64  is in the main d
2c740 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20  atabase file if 
2c750 50 33 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 33  P3==0.  If.** P3
2c760 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61 62  ==1 then the tab
2c770 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69  le to be clear i
2c780 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61  s in the auxilia
2c790 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ry database file
2c7a0 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65 64  .** that is used
2c7b0 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73   to store tables
2c7c0 20 63 72 65 61 74 65 20 75 73 69 6e 67 20 43 52   create using CR
2c7d0 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54  EATE TEMPORARY T
2c7e0 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 41  ABLE..**.** If A
2c7f0 55 54 4f 56 41 43 55 55 4d 20 69 73 20 65 6e 61  UTOVACUUM is ena
2c800 62 6c 65 64 20 74 68 65 6e 20 69 74 20 69 73 20  bled then it is 
2c810 70 6f 73 73 69 62 6c 65 20 74 68 61 74 20 61 6e  possible that an
2c820 6f 74 68 65 72 20 72 6f 6f 74 20 70 61 67 65 0a  other root page.
2c830 2a 2a 20 6d 69 67 68 74 20 62 65 20 6d 6f 76 65  ** might be move
2c840 64 20 69 6e 74 6f 20 74 68 65 20 6e 65 77 6c 79  d into the newly
2c850 20 64 65 6c 65 74 65 64 20 72 6f 6f 74 20 70 61   deleted root pa
2c860 67 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b  ge in order to k
2c870 65 65 70 20 61 6c 6c 0a 2a 2a 20 72 6f 6f 74 20  eep all.** root 
2c880 70 61 67 65 73 20 63 6f 6e 74 69 67 75 6f 75 73  pages contiguous
2c890 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e   at the beginnin
2c8a0 67 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  g of the databas
2c8b0 65 2e 20 20 54 68 65 20 66 6f 72 6d 65 72 0a 2a  e.  The former.*
2c8c0 2a 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 72  * value of the r
2c8d0 6f 6f 74 20 70 61 67 65 20 74 68 61 74 20 6d 6f  oot page that mo
2c8e0 76 65 64 20 2d 20 69 74 73 20 76 61 6c 75 65 20  ved - its value 
2c8f0 62 65 66 6f 72 65 20 74 68 65 20 6d 6f 76 65 20  before the move 
2c900 6f 63 63 75 72 72 65 64 20 2d 0a 2a 2a 20 69 73  occurred -.** is
2c910 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
2c920 74 65 72 20 50 32 2e 20 20 49 66 20 6e 6f 20 70  ter P2.  If no p
2c930 61 67 65 20 0a 2a 2a 20 6d 6f 76 65 6d 65 6e 74  age .** movement
2c940 20 77 61 73 20 72 65 71 75 69 72 65 64 20 28 62   was required (b
2c950 65 63 61 75 73 65 20 74 68 65 20 74 61 62 6c 65  ecause the table
2c960 20 62 65 69 6e 67 20 64 72 6f 70 70 65 64 20 77   being dropped w
2c970 61 73 20 61 6c 72 65 61 64 79 20 0a 2a 2a 20 74  as already .** t
2c980 68 65 20 6c 61 73 74 20 6f 6e 65 20 69 6e 20 74  he last one in t
2c990 68 65 20 64 61 74 61 62 61 73 65 29 20 74 68 65  he database) the
2c9a0 6e 20 61 20 7a 65 72 6f 20 69 73 20 73 74 6f 72  n a zero is stor
2c9b0 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
2c9c0 32 2e 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41 43  2..** If AUTOVAC
2c9d0 55 55 4d 20 69 73 20 64 69 73 61 62 6c 65 64 20  UUM is disabled 
2c9e0 74 68 65 6e 20 61 20 7a 65 72 6f 20 69 73 20 73  then a zero is s
2c9f0 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
2ca00 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  r P2..**.** See 
2ca10 61 6c 73 6f 3a 20 43 6c 65 61 72 0a 2a 2f 0a 63  also: Clear.*/.c
2ca20 61 73 65 20 4f 50 5f 44 65 73 74 72 6f 79 3a 20  ase OP_Destroy: 
2ca30 7b 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f  {     /* out2 */
2ca40 0a 20 20 69 6e 74 20 69 4d 6f 76 65 64 3b 0a 20  .  int iMoved;. 
2ca50 20 69 6e 74 20 69 44 62 3b 0a 0a 20 20 61 73 73   int iDb;..  ass
2ca60 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
2ca70 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
2ca80 20 70 4f 70 2d 3e 70 31 3e 31 20 29 3b 0a 20 20   pOp->p1>1 );.  
2ca90 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
2caa0 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
2cab0 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
2cac0 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 69 66 28 20 64  EM_Null;.  if( d
2cad0 62 2d 3e 6e 56 64 62 65 52 65 61 64 20 3e 20 64  b->nVdbeRead > d
2cae0 62 2d 3e 6e 56 44 65 73 74 72 6f 79 2b 31 20 29  b->nVDestroy+1 )
2caf0 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
2cb00 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 70 2d  E_LOCKED;.    p-
2cb10 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 4f  >errorAction = O
2cb20 45 5f 41 62 6f 72 74 3b 0a 20 20 20 20 67 6f 74  E_Abort;.    got
2cb30 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
2cb40 72 72 6f 72 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  rror;.  }else{. 
2cb50 20 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33     iDb = pOp->p3
2cb60 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 44 62  ;.    assert( Db
2cb70 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65  MaskTest(p->btre
2cb80 65 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a 20  eMask, iDb) );. 
2cb90 20 20 20 69 4d 6f 76 65 64 20 3d 20 30 3b 20 20     iMoved = 0;  
2cba0 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20  /* Not needed.  
2cbb0 4f 6e 6c 79 20 74 6f 20 73 69 6c 65 6e 63 65 20  Only to silence 
2cbc0 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20  a warning. */.  
2cbd0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
2cbe0 72 65 65 44 72 6f 70 54 61 62 6c 65 28 64 62 2d  reeDropTable(db-
2cbf0 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20 70  >aDb[iDb].pBt, p
2cc00 4f 70 2d 3e 70 31 2c 20 26 69 4d 6f 76 65 64 29  Op->p1, &iMoved)
2cc10 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  ;.    pOut->flag
2cc20 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20  s = MEM_Int;.   
2cc30 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 4d 6f   pOut->u.i = iMo
2cc40 76 65 64 3b 0a 20 20 20 20 69 66 28 20 72 63 20  ved;.    if( rc 
2cc50 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
2cc60 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 69 66 6e 64  _to_error;.#ifnd
2cc70 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
2cc80 55 54 4f 56 41 43 55 55 4d 0a 20 20 20 20 69 66  UTOVACUUM.    if
2cc90 28 20 69 4d 6f 76 65 64 21 3d 30 20 29 7b 0a 20  ( iMoved!=0 ){. 
2cca0 20 20 20 20 20 73 71 6c 69 74 65 33 52 6f 6f 74       sqlite3Root
2ccb0 50 61 67 65 4d 6f 76 65 64 28 64 62 2c 20 69 44  PageMoved(db, iD
2ccc0 62 2c 20 69 4d 6f 76 65 64 2c 20 70 4f 70 2d 3e  b, iMoved, pOp->
2ccd0 70 31 29 3b 0a 20 20 20 20 20 20 2f 2a 20 41 6c  p1);.      /* Al
2cce0 6c 20 4f 50 5f 44 65 73 74 72 6f 79 20 6f 70 65  l OP_Destroy ope
2ccf0 72 61 74 69 6f 6e 73 20 6f 63 63 75 72 20 6f 6e  rations occur on
2cd00 20 74 68 65 20 73 61 6d 65 20 62 74 72 65 65 20   the same btree 
2cd10 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  */.      assert(
2cd20 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61   resetSchemaOnFa
2cd30 75 6c 74 3d 3d 30 20 7c 7c 20 72 65 73 65 74 53  ult==0 || resetS
2cd40 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 69 44  chemaOnFault==iD
2cd50 62 2b 31 20 29 3b 0a 20 20 20 20 20 20 72 65 73  b+1 );.      res
2cd60 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20  etSchemaOnFault 
2cd70 3d 20 69 44 62 2b 31 3b 0a 20 20 20 20 7d 0a 23  = iDb+1;.    }.#
2cd80 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61  endif.  }.  brea
2cd90 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2cda0 20 43 6c 65 61 72 20 50 31 20 50 32 20 50 33 0a   Clear P1 P2 P3.
2cdb0 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c  **.** Delete all
2cdc0 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65   contents of the
2cdd0 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
2cde0 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72  or index whose r
2cdf0 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 69 6e 20 74  oot page.** in t
2ce00 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
2ce10 20 69 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e   is given by P1.
2ce20 20 20 42 75 74 2c 20 75 6e 6c 69 6b 65 20 44 65    But, unlike De
2ce30 73 74 72 6f 79 2c 20 64 6f 20 6e 6f 74 0a 2a 2a  stroy, do not.**
2ce40 20 72 65 6d 6f 76 65 20 74 68 65 20 74 61 62 6c   remove the tabl
2ce50 65 20 6f 72 20 69 6e 64 65 78 20 66 72 6f 6d 20  e or index from 
2ce60 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
2ce70 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62  e..**.** The tab
2ce80 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 20 69  le being clear i
2ce90 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61  s in the main da
2cea0 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50  tabase file if P
2ceb0 32 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 32 3d  2==0.  If.** P2=
2cec0 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c  =1 then the tabl
2ced0 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69 73  e to be clear is
2cee0 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72   in the auxiliar
2cef0 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a  y database file.
2cf00 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65 64 20  ** that is used 
2cf10 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73 20  to store tables 
2cf20 63 72 65 61 74 65 20 75 73 69 6e 67 20 43 52 45  create using CRE
2cf30 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41  ATE TEMPORARY TA
2cf40 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  BLE..**.** If th
2cf50 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 6e 6f  e P3 value is no
2cf60 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65  n-zero, then the
2cf70 20 74 61 62 6c 65 20 72 65 66 65 72 72 65 64 20   table referred 
2cf80 74 6f 20 6d 75 73 74 20 62 65 20 61 6e 0a 2a 2a  to must be an.**
2cf90 20 69 6e 74 6b 65 79 20 74 61 62 6c 65 20 28 61   intkey table (a
2cfa0 6e 20 53 51 4c 20 74 61 62 6c 65 2c 20 6e 6f 74  n SQL table, not
2cfb0 20 61 6e 20 69 6e 64 65 78 29 2e 20 49 6e 20 74   an index). In t
2cfc0 68 69 73 20 63 61 73 65 20 74 68 65 20 72 6f 77  his case the row
2cfd0 20 63 68 61 6e 67 65 20 0a 2a 2a 20 63 6f 75 6e   change .** coun
2cfe0 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  t is incremented
2cff0 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   by the number o
2d000 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61  f rows in the ta
2d010 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65  ble being cleare
2d020 64 2e 20 0a 2a 2a 20 49 66 20 50 33 20 69 73 20  d. .** If P3 is 
2d030 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72  greater than zer
2d040 6f 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75  o, then the valu
2d050 65 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  e stored in regi
2d060 73 74 65 72 20 50 33 20 69 73 0a 2a 2a 20 61 6c  ster P3 is.** al
2d070 73 6f 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62  so incremented b
2d080 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  y the number of 
2d090 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c  rows in the tabl
2d0a0 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e  e being cleared.
2d0b0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
2d0c0 20 44 65 73 74 72 6f 79 0a 2a 2f 0a 63 61 73 65   Destroy.*/.case
2d0d0 20 4f 50 5f 43 6c 65 61 72 3a 20 7b 0a 20 20 69   OP_Clear: {.  i
2d0e0 6e 74 20 6e 43 68 61 6e 67 65 3b 0a 20 0a 20 20  nt nChange;. .  
2d0f0 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 61  nChange = 0;.  a
2d100 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
2d110 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  ly==0 );.  asser
2d120 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d  t( DbMaskTest(p-
2d130 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d  >btreeMask, pOp-
2d140 3e 70 32 29 20 29 3b 0a 20 20 72 63 20 3d 20 73  >p2) );.  rc = s
2d150 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61 72  qlite3BtreeClear
2d160 54 61 62 6c 65 28 0a 20 20 20 20 20 20 64 62 2d  Table(.      db-
2d170 3e 61 44 62 5b 70 4f 70 2d 3e 70 32 5d 2e 70 42  >aDb[pOp->p2].pB
2d180 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 28 70 4f 70  t, pOp->p1, (pOp
2d190 2d 3e 70 33 20 3f 20 26 6e 43 68 61 6e 67 65 20  ->p3 ? &nChange 
2d1a0 3a 20 30 29 0a 20 20 29 3b 0a 20 20 69 66 28 20  : 0).  );.  if( 
2d1b0 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 70  pOp->p3 ){.    p
2d1c0 2d 3e 6e 43 68 61 6e 67 65 20 2b 3d 20 6e 43 68  ->nChange += nCh
2d1d0 61 6e 67 65 3b 0a 20 20 20 20 69 66 28 20 70 4f  ange;.    if( pO
2d1e0 70 2d 3e 70 33 3e 30 20 29 7b 0a 20 20 20 20 20  p->p3>0 ){.     
2d1f0 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
2d200 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  lid(&aMem[pOp->p
2d210 33 5d 29 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d  3]) );.      mem
2d220 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
2d230 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29   &aMem[pOp->p3])
2d240 3b 0a 20 20 20 20 20 20 61 4d 65 6d 5b 70 4f 70  ;.      aMem[pOp
2d250 2d 3e 70 33 5d 2e 75 2e 69 20 2b 3d 20 6e 43 68  ->p3].u.i += nCh
2d260 61 6e 67 65 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  ange;.    }.  }.
2d270 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
2d280 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2d290 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  or;.  break;.}..
2d2a0 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 65 74  /* Opcode: Reset
2d2b0 53 6f 72 74 65 72 20 50 31 20 2a 20 2a 20 2a 20  Sorter P1 * * * 
2d2c0 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61  *.**.** Delete a
2d2d0 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 66 72 6f 6d  ll contents from
2d2e0 20 74 68 65 20 65 70 68 65 6d 65 72 61 6c 20 74   the ephemeral t
2d2f0 61 62 6c 65 20 6f 72 20 73 6f 72 74 65 72 0a 2a  able or sorter.*
2d300 2a 20 74 68 61 74 20 69 73 20 6f 70 65 6e 20 6f  * that is open o
2d310 6e 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 0a  n cursor P1..**.
2d320 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6f  ** This opcode o
2d330 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 63 75  nly works for cu
2d340 72 73 6f 72 73 20 75 73 65 64 20 66 6f 72 20 73  rsors used for s
2d350 6f 72 74 69 6e 67 20 61 6e 64 0a 2a 2a 20 6f 70  orting and.** op
2d360 65 6e 65 64 20 77 69 74 68 20 4f 50 5f 4f 70 65  ened with OP_Ope
2d370 6e 45 70 68 65 6d 65 72 61 6c 20 6f 72 20 4f 50  nEphemeral or OP
2d380 5f 53 6f 72 74 65 72 4f 70 65 6e 2e 0a 2a 2f 0a  _SorterOpen..*/.
2d390 63 61 73 65 20 4f 50 5f 52 65 73 65 74 53 6f 72  case OP_ResetSor
2d3a0 74 65 72 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  ter: {.  VdbeCur
2d3b0 73 6f 72 20 2a 70 43 3b 0a 20 0a 20 20 61 73 73  sor *pC;. .  ass
2d3c0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
2d3d0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
2d3e0 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
2d3f0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
2d400 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
2d410 3d 30 20 29 3b 0a 20 20 69 66 28 20 69 73 53 6f  =0 );.  if( isSo
2d420 72 74 65 72 28 70 43 29 20 29 7b 0a 20 20 20 20  rter(pC) ){.    
2d430 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65  sqlite3VdbeSorte
2d440 72 52 65 73 65 74 28 64 62 2c 20 70 43 2d 3e 75  rReset(db, pC->u
2d450 63 2e 70 53 6f 72 74 65 72 29 3b 0a 20 20 7d 65  c.pSorter);.  }e
2d460 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
2d470 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
2d480 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
2d490 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
2d4a0 69 73 45 70 68 65 6d 65 72 61 6c 20 29 3b 0a 20  isEphemeral );. 
2d4b0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
2d4c0 74 72 65 65 43 6c 65 61 72 54 61 62 6c 65 4f 66  treeClearTableOf
2d4d0 43 75 72 73 6f 72 28 70 43 2d 3e 75 63 2e 70 43  Cursor(pC->uc.pC
2d4e0 75 72 73 6f 72 29 3b 0a 20 20 20 20 69 66 28 20  ursor);.    if( 
2d4f0 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
2d500 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
2d510 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
2d520 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74 65 54   Opcode: CreateT
2d530 61 62 6c 65 20 50 31 20 50 32 20 2a 20 2a 20 2a  able P1 P2 * * *
2d540 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
2d550 50 32 5d 3d 72 6f 6f 74 20 69 44 62 3d 50 31 0a  P2]=root iDb=P1.
2d560 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61  **.** Allocate a
2d570 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 20 74 68   new table in th
2d580 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
2d590 66 69 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f 72  file if P1==0 or
2d5a0 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c   in the.** auxil
2d5b0 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69  iary database fi
2d5c0 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f 72 20 69  le if P1==1 or i
2d5d0 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61  n an attached da
2d5e0 74 61 62 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e  tabase if.** P1>
2d5f0 31 2e 20 20 57 72 69 74 65 20 74 68 65 20 72 6f  1.  Write the ro
2d600 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f  ot page number o
2d610 66 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20  f the new table 
2d620 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72  into.** register
2d630 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64 69   P2.**.** The di
2d640 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e  fference between
2d650 20 61 20 74 61 62 6c 65 20 61 6e 64 20 61 6e 20   a table and an 
2d660 69 6e 64 65 78 20 69 73 20 74 68 69 73 3a 20 20  index is this:  
2d670 41 20 74 61 62 6c 65 20 6d 75 73 74 0a 2a 2a 20  A table must.** 
2d680 68 61 76 65 20 61 20 34 2d 62 79 74 65 20 69 6e  have a 4-byte in
2d690 74 65 67 65 72 20 6b 65 79 20 61 6e 64 20 63 61  teger key and ca
2d6a0 6e 20 68 61 76 65 20 61 72 62 69 74 72 61 72 79  n have arbitrary
2d6b0 20 64 61 74 61 2e 20 20 41 6e 20 69 6e 64 65 78   data.  An index
2d6c0 0a 2a 2a 20 68 61 73 20 61 6e 20 61 72 62 69 74  .** has an arbit
2d6d0 72 61 72 79 20 6b 65 79 20 62 75 74 20 6e 6f 20  rary key but no 
2d6e0 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  data..**.** See 
2d6f0 61 6c 73 6f 3a 20 43 72 65 61 74 65 49 6e 64 65  also: CreateInde
2d700 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  x.*/./* Opcode: 
2d710 43 72 65 61 74 65 49 6e 64 65 78 20 50 31 20 50  CreateIndex P1 P
2d720 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
2d730 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 6f 74 20  sis: r[P2]=root 
2d740 69 44 62 3d 50 31 0a 2a 2a 0a 2a 2a 20 41 6c 6c  iDb=P1.**.** All
2d750 6f 63 61 74 65 20 61 20 6e 65 77 20 69 6e 64 65  ocate a new inde
2d760 78 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61  x in the main da
2d770 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50  tabase file if P
2d780 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a  1==0 or in the.*
2d790 2a 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61  * auxiliary data
2d7a0 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d  base file if P1=
2d7b0 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61 74 74 61  =1 or in an atta
2d7c0 63 68 65 64 20 64 61 74 61 62 61 73 65 20 69 66  ched database if
2d7d0 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69 74 65  .** P1>1.  Write
2d7e0 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e   the root page n
2d7f0 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e 65 77  umber of the new
2d800 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72   table into.** r
2d810 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
2d820 2a 20 53 65 65 20 64 6f 63 75 6d 65 6e 74 61 74  * See documentat
2d830 69 6f 6e 20 6f 6e 20 4f 50 5f 43 72 65 61 74 65  ion on OP_Create
2d840 54 61 62 6c 65 20 66 6f 72 20 61 64 64 69 74 69  Table for additi
2d850 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
2d860 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65  ..*/.case OP_Cre
2d870 61 74 65 49 6e 64 65 78 3a 20 20 20 20 20 20 20  ateIndex:       
2d880 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
2d890 63 61 73 65 20 4f 50 5f 43 72 65 61 74 65 54 61  case OP_CreateTa
2d8a0 62 6c 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ble: {          
2d8b0 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74  /* out2 */.  int
2d8c0 20 70 67 6e 6f 3b 0a 20 20 69 6e 74 20 66 6c 61   pgno;.  int fla
2d8d0 67 73 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a  gs;.  Db *pDb;..
2d8e0 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
2d8f0 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
2d900 0a 20 20 70 67 6e 6f 20 3d 20 30 3b 0a 20 20 61  .  pgno = 0;.  a
2d910 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
2d920 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d  0 && pOp->p1<db-
2d930 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
2d940 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e  ( DbMaskTest(p->
2d950 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e  btreeMask, pOp->
2d960 70 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  p1) );.  assert(
2d970 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
2d980 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e  );.  pDb = &db->
2d990 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  aDb[pOp->p1];.  
2d9a0 61 73 73 65 72 74 28 20 70 44 62 2d 3e 70 42 74  assert( pDb->pBt
2d9b0 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70  !=0 );.  if( pOp
2d9c0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 72 65  ->opcode==OP_Cre
2d9d0 61 74 65 54 61 62 6c 65 20 29 7b 0a 20 20 20 20  ateTable ){.    
2d9e0 2f 2a 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45  /* flags = BTREE
2d9f0 5f 49 4e 54 4b 45 59 3b 20 2a 2f 0a 20 20 20 20  _INTKEY; */.    
2da00 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 49 4e  flags = BTREE_IN
2da10 54 4b 45 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  TKEY;.  }else{. 
2da20 20 20 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45     flags = BTREE
2da30 5f 42 4c 4f 42 4b 45 59 3b 0a 20 20 7d 0a 20 20  _BLOBKEY;.  }.  
2da40 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
2da50 65 43 72 65 61 74 65 54 61 62 6c 65 28 70 44 62  eCreateTable(pDb
2da60 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20 66 6c  ->pBt, &pgno, fl
2da70 61 67 73 29 3b 0a 20 20 69 66 28 20 72 63 20 29  ags);.  if( rc )
2da80 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
2da90 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 4f 75 74  to_error;.  pOut
2daa0 2d 3e 75 2e 69 20 3d 20 70 67 6e 6f 3b 0a 20 20  ->u.i = pgno;.  
2dab0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2dac0 6f 64 65 3a 20 50 61 72 73 65 53 63 68 65 6d 61  ode: ParseSchema
2dad0 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
2dae0 2a 2a 20 52 65 61 64 20 61 6e 64 20 70 61 72 73  ** Read and pars
2daf0 65 20 61 6c 6c 20 65 6e 74 72 69 65 73 20 66 72  e all entries fr
2db00 6f 6d 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 41  om the SQLITE_MA
2db10 53 54 45 52 20 74 61 62 6c 65 20 6f 66 20 64 61  STER table of da
2db20 74 61 62 61 73 65 20 50 31 0a 2a 2a 20 74 68 61  tabase P1.** tha
2db30 74 20 6d 61 74 63 68 20 74 68 65 20 57 48 45 52  t match the WHER
2db40 45 20 63 6c 61 75 73 65 20 50 34 2e 20 0a 2a 2a  E clause P4. .**
2db50 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
2db60 69 6e 76 6f 6b 65 73 20 74 68 65 20 70 61 72 73  invokes the pars
2db70 65 72 20 74 6f 20 63 72 65 61 74 65 20 61 20 6e  er to create a n
2db80 65 77 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  ew virtual machi
2db90 6e 65 2c 0a 2a 2a 20 74 68 65 6e 20 72 75 6e 73  ne,.** then runs
2dba0 20 74 68 65 20 6e 65 77 20 76 69 72 74 75 61 6c   the new virtual
2dbb0 20 6d 61 63 68 69 6e 65 2e 20 20 49 74 20 69 73   machine.  It is
2dbc0 20 74 68 75 73 20 61 20 72 65 2d 65 6e 74 72 61   thus a re-entra
2dbd0 6e 74 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61  nt opcode..*/.ca
2dbe0 73 65 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d  se OP_ParseSchem
2dbf0 61 3a 20 7b 0a 20 20 69 6e 74 20 69 44 62 3b 0a  a: {.  int iDb;.
2dc00 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d    const char *zM
2dc10 61 73 74 65 72 3b 0a 20 20 63 68 61 72 20 2a 7a  aster;.  char *z
2dc20 53 71 6c 3b 0a 20 20 49 6e 69 74 44 61 74 61 20  Sql;.  InitData 
2dc30 69 6e 69 74 44 61 74 61 3b 0a 0a 20 20 2f 2a 20  initData;..  /* 
2dc40 41 6e 79 20 70 72 65 70 61 72 65 64 20 73 74 61  Any prepared sta
2dc50 74 65 6d 65 6e 74 20 74 68 61 74 20 69 6e 76 6f  tement that invo
2dc60 6b 65 73 20 74 68 69 73 20 6f 70 63 6f 64 65 20  kes this opcode 
2dc70 77 69 6c 6c 20 68 6f 6c 64 20 6d 75 74 65 78 65  will hold mutexe
2dc80 73 0a 20 20 2a 2a 20 6f 6e 20 65 76 65 72 79 20  s.  ** on every 
2dc90 62 74 72 65 65 2e 20 20 54 68 69 73 20 69 73 20  btree.  This is 
2dca0 61 20 70 72 65 72 65 71 75 69 73 69 74 65 20 66  a prerequisite f
2dcb0 6f 72 20 69 6e 76 6f 6b 69 6e 67 20 0a 20 20 2a  or invoking .  *
2dcc0 2a 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c  * sqlite3InitCal
2dcd0 6c 62 61 63 6b 28 29 2e 0a 20 20 2a 2f 0a 23 69  lback()..  */.#i
2dce0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
2dcf0 47 0a 20 20 66 6f 72 28 69 44 62 3d 30 3b 20 69  G.  for(iDb=0; i
2dd00 44 62 3c 64 62 2d 3e 6e 44 62 3b 20 69 44 62 2b  Db<db->nDb; iDb+
2dd10 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  +){.    assert( 
2dd20 69 44 62 3d 3d 31 20 7c 7c 20 73 71 6c 69 74 65  iDb==1 || sqlite
2dd30 33 42 74 72 65 65 48 6f 6c 64 73 4d 75 74 65 78  3BtreeHoldsMutex
2dd40 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42  (db->aDb[iDb].pB
2dd50 74 29 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  t) );.  }.#endif
2dd60 0a 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70  ..  iDb = pOp->p
2dd70 31 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44 62  1;.  assert( iDb
2dd80 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e  >=0 && iDb<db->n
2dd90 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
2dda0 44 62 48 61 73 50 72 6f 70 65 72 74 79 28 64 62  DbHasProperty(db
2ddb0 2c 20 69 44 62 2c 20 44 42 5f 53 63 68 65 6d 61  , iDb, DB_Schema
2ddc0 4c 6f 61 64 65 64 29 20 29 3b 0a 20 20 2f 2a 20  Loaded) );.  /* 
2ddd0 55 73 65 64 20 74 6f 20 62 65 20 61 20 63 6f 6e  Used to be a con
2dde0 64 69 74 69 6f 6e 61 6c 20 2a 2f 20 7b 0a 20 20  ditional */ {.  
2ddf0 20 20 7a 4d 61 73 74 65 72 20 3d 20 4d 41 53 54    zMaster = MAST
2de00 45 52 5f 4e 41 4d 45 3b 0a 20 20 20 20 69 6e 69  ER_NAME;.    ini
2de10 74 44 61 74 61 2e 64 62 20 3d 20 64 62 3b 0a 20  tData.db = db;. 
2de20 20 20 20 69 6e 69 74 44 61 74 61 2e 69 44 62 20     initData.iDb 
2de30 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 20 20 69  = pOp->p1;.    i
2de40 6e 69 74 44 61 74 61 2e 70 7a 45 72 72 4d 73 67  nitData.pzErrMsg
2de50 20 3d 20 26 70 2d 3e 7a 45 72 72 4d 73 67 3b 0a   = &p->zErrMsg;.
2de60 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c 69 74      zSql = sqlit
2de70 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 0a 20 20  e3MPrintf(db,.  
2de80 20 20 20 20 20 22 53 45 4c 45 43 54 20 6e 61 6d       "SELECT nam
2de90 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20 73 71 6c  e, rootpage, sql
2dea0 20 46 52 4f 4d 20 27 25 71 27 2e 25 73 20 57 48   FROM '%q'.%s WH
2deb0 45 52 45 20 25 73 20 4f 52 44 45 52 20 42 59 20  ERE %s ORDER BY 
2dec0 72 6f 77 69 64 22 2c 0a 20 20 20 20 20 20 20 64  rowid",.       d
2ded0 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 44 62 53  b->aDb[iDb].zDbS
2dee0 4e 61 6d 65 2c 20 7a 4d 61 73 74 65 72 2c 20 70  Name, zMaster, p
2def0 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 69  Op->p4.z);.    i
2df00 66 28 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20 20  f( zSql==0 ){.  
2df10 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
2df20 4e 4f 4d 45 4d 5f 42 4b 50 54 3b 0a 20 20 20 20  NOMEM_BKPT;.    
2df30 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73  }else{.      ass
2df40 65 72 74 28 20 64 62 2d 3e 69 6e 69 74 2e 62 75  ert( db->init.bu
2df50 73 79 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 64  sy==0 );.      d
2df60 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 31  b->init.busy = 1
2df70 3b 0a 20 20 20 20 20 20 69 6e 69 74 44 61 74 61  ;.      initData
2df80 2e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b  .rc = SQLITE_OK;
2df90 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 21  .      assert( !
2dfa0 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
2dfb0 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   );.      rc = s
2dfc0 71 6c 69 74 65 33 5f 65 78 65 63 28 64 62 2c 20  qlite3_exec(db, 
2dfd0 7a 53 71 6c 2c 20 73 71 6c 69 74 65 33 49 6e 69  zSql, sqlite3Ini
2dfe0 74 43 61 6c 6c 62 61 63 6b 2c 20 26 69 6e 69 74  tCallback, &init
2dff0 44 61 74 61 2c 20 30 29 3b 0a 20 20 20 20 20 20  Data, 0);.      
2e000 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
2e010 4b 20 29 20 72 63 20 3d 20 69 6e 69 74 44 61 74  K ) rc = initDat
2e020 61 2e 72 63 3b 0a 20 20 20 20 20 20 73 71 6c 69  a.rc;.      sqli
2e030 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a 53  te3DbFree(db, zS
2e040 71 6c 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69  ql);.      db->i
2e050 6e 69 74 2e 62 75 73 79 20 3d 20 30 3b 0a 20 20  nit.busy = 0;.  
2e060 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63    }.  }.  if( rc
2e070 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52   ){.    sqlite3R
2e080 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66  esetAllSchemasOf
2e090 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a  Connection(db);.
2e0a0 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
2e0b0 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20  TE_NOMEM ){.    
2e0c0 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
2e0d0 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f 20 61 62     }.    goto ab
2e0e0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
2e0f0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 20 20  ;.  }.  break;  
2e100 0a 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .}..#if !defined
2e110 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41  (SQLITE_OMIT_ANA
2e120 4c 59 5a 45 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a  LYZE)./* Opcode:
2e130 20 4c 6f 61 64 41 6e 61 6c 79 73 69 73 20 50 31   LoadAnalysis P1
2e140 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52   * * * *.**.** R
2e150 65 61 64 20 74 68 65 20 73 71 6c 69 74 65 5f 73  ead the sqlite_s
2e160 74 61 74 31 20 74 61 62 6c 65 20 66 6f 72 20 64  tat1 table for d
2e170 61 74 61 62 61 73 65 20 50 31 20 61 6e 64 20 6c  atabase P1 and l
2e180 6f 61 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a  oad the content.
2e190 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65  ** of that table
2e1a0 20 69 6e 74 6f 20 74 68 65 20 69 6e 74 65 72 6e   into the intern
2e1b0 61 6c 20 69 6e 64 65 78 20 68 61 73 68 20 74 61  al index hash ta
2e1c0 62 6c 65 2e 20 20 54 68 69 73 20 77 69 6c 6c 20  ble.  This will 
2e1d0 63 61 75 73 65 0a 2a 2a 20 74 68 65 20 61 6e 61  cause.** the ana
2e1e0 6c 79 73 69 73 20 74 6f 20 62 65 20 75 73 65 64  lysis to be used
2e1f0 20 77 68 65 6e 20 70 72 65 70 61 72 69 6e 67 20   when preparing 
2e200 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 20 71  all subsequent q
2e210 75 65 72 69 65 73 2e 0a 2a 2f 0a 63 61 73 65 20  ueries..*/.case 
2e220 4f 50 5f 4c 6f 61 64 41 6e 61 6c 79 73 69 73 3a  OP_LoadAnalysis:
2e230 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   {.  assert( pOp
2e240 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
2e250 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
2e260 72 63 20 3d 20 73 71 6c 69 74 65 33 41 6e 61 6c  rc = sqlite3Anal
2e270 79 73 69 73 4c 6f 61 64 28 64 62 2c 20 70 4f 70  ysisLoad(db, pOp
2e280 2d 3e 70 31 29 3b 0a 20 20 69 66 28 20 72 63 20  ->p1);.  if( rc 
2e290 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
2e2a0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65  _to_error;.  bre
2e2b0 61 6b 3b 20 20 0a 7d 0a 23 65 6e 64 69 66 20 2f  ak;  .}.#endif /
2e2c0 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  * !defined(SQLIT
2e2d0 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 20  E_OMIT_ANALYZE) 
2e2e0 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  */../* Opcode: D
2e2f0 72 6f 70 54 61 62 6c 65 20 50 31 20 2a 20 2a 20  ropTable P1 * * 
2e300 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76  P4 *.**.** Remov
2e310 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28  e the internal (
2e320 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20  in-memory) data 
2e330 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74 20  structures that 
2e340 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20  describe.** the 
2e350 74 61 62 6c 65 20 6e 61 6d 65 64 20 50 34 20 69  table named P4 i
2e360 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20  n database P1.  
2e370 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61  This is called a
2e380 66 74 65 72 20 61 20 74 61 62 6c 65 0a 2a 2a 20  fter a table.** 
2e390 69 73 20 64 72 6f 70 70 65 64 20 66 72 6f 6d 20  is dropped from 
2e3a0 64 69 73 6b 20 28 75 73 69 6e 67 20 74 68 65 20  disk (using the 
2e3b0 44 65 73 74 72 6f 79 20 6f 70 63 6f 64 65 29 20  Destroy opcode) 
2e3c0 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70  in order to keep
2e3d0 20 0a 2a 2a 20 74 68 65 20 69 6e 74 65 72 6e 61   .** the interna
2e3e0 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  l representation
2e3f0 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d   of the.** schem
2e400 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74  a consistent wit
2e410 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73  h what is on dis
2e420 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72  k..*/.case OP_Dr
2e430 6f 70 54 61 62 6c 65 3a 20 7b 0a 20 20 73 71 6c  opTable: {.  sql
2e440 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
2e450 65 74 65 54 61 62 6c 65 28 64 62 2c 20 70 4f 70  eteTable(db, pOp
2e460 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  ->p1, pOp->p4.z)
2e470 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
2e480 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 49 6e 64   Opcode: DropInd
2e490 65 78 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  ex P1 * * P4 *.*
2e4a0 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20  *.** Remove the 
2e4b0 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d  internal (in-mem
2e4c0 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63 74  ory) data struct
2e4d0 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72 69  ures that descri
2e4e0 62 65 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20  be.** the index 
2e4f0 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61  named P4 in data
2e500 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20 69  base P1.  This i
2e510 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61  s called after a
2e520 6e 20 69 6e 64 65 78 0a 2a 2a 20 69 73 20 64 72  n index.** is dr
2e530 6f 70 70 65 64 20 66 72 6f 6d 20 64 69 73 6b 20  opped from disk 
2e540 28 75 73 69 6e 67 20 74 68 65 20 44 65 73 74 72  (using the Destr
2e550 6f 79 20 6f 70 63 6f 64 65 29 0a 2a 2a 20 69 6e  oy opcode).** in
2e560 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 74   order to keep t
2e570 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72  he internal repr
2e580 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
2e590 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73  e.** schema cons
2e5a0 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61 74  istent with what
2e5b0 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a   is on disk..*/.
2e5c0 63 61 73 65 20 4f 50 5f 44 72 6f 70 49 6e 64 65  case OP_DropInde
2e5d0 78 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e  x: {.  sqlite3Un
2e5e0 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64  linkAndDeleteInd
2e5f0 65 78 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  ex(db, pOp->p1, 
2e600 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72  pOp->p4.z);.  br
2e610 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2e620 65 3a 20 44 72 6f 70 54 72 69 67 67 65 72 20 50  e: DropTrigger P
2e630 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
2e640 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65   Remove the inte
2e650 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29  rnal (in-memory)
2e660 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73   data structures
2e670 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a   that describe.*
2e680 2a 20 74 68 65 20 74 72 69 67 67 65 72 20 6e 61  * the trigger na
2e690 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61 62 61  med P4 in databa
2e6a0 73 65 20 50 31 2e 20 20 54 68 69 73 20 69 73 20  se P1.  This is 
2e6b0 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61 20 74  called after a t
2e6c0 72 69 67 67 65 72 0a 2a 2a 20 69 73 20 64 72 6f  rigger.** is dro
2e6d0 70 70 65 64 20 66 72 6f 6d 20 64 69 73 6b 20 28  pped from disk (
2e6e0 75 73 69 6e 67 20 74 68 65 20 44 65 73 74 72 6f  using the Destro
2e6f0 79 20 6f 70 63 6f 64 65 29 20 69 6e 20 6f 72 64  y opcode) in ord
2e700 65 72 20 74 6f 20 6b 65 65 70 20 0a 2a 2a 20 74  er to keep .** t
2e710 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72  he internal repr
2e720 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
2e730 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73  e.** schema cons
2e740 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61 74  istent with what
2e750 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a   is on disk..*/.
2e760 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 72 69 67  case OP_DropTrig
2e770 67 65 72 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  ger: {.  sqlite3
2e780 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54  UnlinkAndDeleteT
2e790 72 69 67 67 65 72 28 64 62 2c 20 70 4f 70 2d 3e  rigger(db, pOp->
2e7a0 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  p1, pOp->p4.z);.
2e7b0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66    break;.}...#if
2e7c0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2e7d0 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b  _INTEGRITY_CHECK
2e7e0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65  ./* Opcode: Inte
2e7f0 67 72 69 74 79 43 6b 20 50 31 20 50 32 20 50 33  grityCk P1 P2 P3
2e800 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 44 6f 20   P4 P5.**.** Do 
2e810 61 6e 20 61 6e 61 6c 79 73 69 73 20 6f 66 20 74  an analysis of t
2e820 68 65 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65  he currently ope
2e830 6e 20 64 61 74 61 62 61 73 65 2e 20 20 53 74 6f  n database.  Sto
2e840 72 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65  re in.** registe
2e850 72 20 50 31 20 74 68 65 20 74 65 78 74 20 6f 66  r P1 the text of
2e860 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   an error messag
2e870 65 20 64 65 73 63 72 69 62 69 6e 67 20 61 6e 79  e describing any
2e880 20 70 72 6f 62 6c 65 6d 73 2e 0a 2a 2a 20 49 66   problems..** If
2e890 20 6e 6f 20 70 72 6f 62 6c 65 6d 73 20 61 72 65   no problems are
2e8a0 20 66 6f 75 6e 64 2c 20 73 74 6f 72 65 20 61 20   found, store a 
2e8b0 4e 55 4c 4c 20 69 6e 20 72 65 67 69 73 74 65 72  NULL in register
2e8c0 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72   P1..**.** The r
2e8d0 65 67 69 73 74 65 72 20 50 33 20 63 6f 6e 74 61  egister P3 conta
2e8e0 69 6e 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  ins the maximum 
2e8f0 6e 75 6d 62 65 72 20 6f 66 20 61 6c 6c 6f 77 65  number of allowe
2e900 64 20 65 72 72 6f 72 73 2e 0a 2a 2a 20 41 74 20  d errors..** At 
2e910 6d 6f 73 74 20 72 65 67 28 50 33 29 20 65 72 72  most reg(P3) err
2e920 6f 72 73 20 77 69 6c 6c 20 62 65 20 72 65 70 6f  ors will be repo
2e930 72 74 65 64 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65  rted..** In othe
2e940 72 20 77 6f 72 64 73 2c 20 74 68 65 20 61 6e 61  r words, the ana
2e950 6c 79 73 69 73 20 73 74 6f 70 73 20 61 73 20 73  lysis stops as s
2e960 6f 6f 6e 20 61 73 20 72 65 67 28 50 31 29 20 65  oon as reg(P1) e
2e970 72 72 6f 72 73 20 61 72 65 20 0a 2a 2a 20 73 65  rrors are .** se
2e980 65 6e 2e 20 20 52 65 67 28 50 31 29 20 69 73 20  en.  Reg(P1) is 
2e990 75 70 64 61 74 65 64 20 77 69 74 68 20 74 68 65  updated with the
2e9a0 20 6e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72   number of error
2e9b0 73 20 72 65 6d 61 69 6e 69 6e 67 2e 0a 2a 2a 0a  s remaining..**.
2e9c0 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70 61 67 65  ** The root page
2e9d0 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 6c 6c 20   numbers of all 
2e9e0 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20 64 61  tables in the da
2e9f0 74 61 62 61 73 65 20 61 72 65 20 69 6e 74 65 67  tabase are integ
2ea00 65 72 73 0a 2a 2a 20 73 74 6f 72 65 64 20 69 6e  ers.** stored in
2ea10 20 50 34 5f 49 4e 54 41 52 52 41 59 20 61 72 67   P4_INTARRAY arg
2ea20 75 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ument..**.** If 
2ea30 50 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P5 is not zero, 
2ea40 74 68 65 20 63 68 65 63 6b 20 69 73 20 64 6f 6e  the check is don
2ea50 65 20 6f 6e 20 74 68 65 20 61 75 78 69 6c 69 61  e on the auxilia
2ea60 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 66  ry database.** f
2ea70 69 6c 65 2c 20 6e 6f 74 20 74 68 65 20 6d 61 69  ile, not the mai
2ea80 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  n database file.
2ea90 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
2eaa0 64 65 20 69 73 20 75 73 65 64 20 74 6f 20 69 6d  de is used to im
2eab0 70 6c 65 6d 65 6e 74 20 74 68 65 20 69 6e 74 65  plement the inte
2eac0 67 72 69 74 79 5f 63 68 65 63 6b 20 70 72 61 67  grity_check prag
2ead0 6d 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  ma..*/.case OP_I
2eae0 6e 74 65 67 72 69 74 79 43 6b 3a 20 7b 0a 20 20  ntegrityCk: {.  
2eaf0 69 6e 74 20 6e 52 6f 6f 74 3b 20 20 20 20 20 20  int nRoot;      
2eb00 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61 62  /* Number of tab
2eb10 6c 65 73 20 74 6f 20 63 68 65 63 6b 2e 20 20 28  les to check.  (
2eb20 4e 75 6d 62 65 72 20 6f 66 20 72 6f 6f 74 20 70  Number of root p
2eb30 61 67 65 73 2e 29 20 2a 2f 0a 20 20 69 6e 74 20  ages.) */.  int 
2eb40 2a 61 52 6f 6f 74 3b 20 20 20 20 20 2f 2a 20 41  *aRoot;     /* A
2eb50 72 72 61 79 20 6f 66 20 72 6f 6f 74 70 61 67 65  rray of rootpage
2eb60 20 6e 75 6d 62 65 72 73 20 66 6f 72 20 74 61 62   numbers for tab
2eb70 6c 65 73 20 74 6f 20 62 65 20 63 68 65 63 6b 65  les to be checke
2eb80 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b  d */.  int nErr;
2eb90 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
2eba0 20 6f 66 20 65 72 72 6f 72 73 20 72 65 70 6f 72   of errors repor
2ebb0 74 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ted */.  char *z
2ebc0 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74  ;        /* Text
2ebd0 20 6f 66 20 74 68 65 20 65 72 72 6f 72 20 72 65   of the error re
2ebe0 70 6f 72 74 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  port */.  Mem *p
2ebf0 6e 45 72 72 3b 20 20 20 20 20 2f 2a 20 52 65 67  nErr;     /* Reg
2ec00 69 73 74 65 72 20 6b 65 65 70 69 6e 67 20 74 72  ister keeping tr
2ec10 61 63 6b 20 6f 66 20 65 72 72 6f 72 73 20 72 65  ack of errors re
2ec20 6d 61 69 6e 69 6e 67 20 2a 2f 0a 0a 20 20 61 73  maining */..  as
2ec30 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64  sert( p->bIsRead
2ec40 65 72 20 29 3b 0a 20 20 6e 52 6f 6f 74 20 3d 20  er );.  nRoot = 
2ec50 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 52 6f 6f 74  pOp->p2;.  aRoot
2ec60 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20   = pOp->p4.ai;. 
2ec70 20 61 73 73 65 72 74 28 20 6e 52 6f 6f 74 3e 30   assert( nRoot>0
2ec80 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 61 52   );.  assert( aR
2ec90 6f 6f 74 5b 6e 52 6f 6f 74 5d 3d 3d 30 20 29 3b  oot[nRoot]==0 );
2eca0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2ecb0 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
2ecc0 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
2ecd0 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70  >nCursor) );.  p
2ece0 6e 45 72 72 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  nErr = &aMem[pOp
2ecf0 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p3];.  assert(
2ed00 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26   (pnErr->flags &
2ed10 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a   MEM_Int)!=0 );.
2ed20 20 20 61 73 73 65 72 74 28 20 28 70 6e 45 72 72    assert( (pnErr
2ed30 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53  ->flags & (MEM_S
2ed40 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30  tr|MEM_Blob))==0
2ed50 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   );.  pIn1 = &aM
2ed60 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
2ed70 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 64  ssert( pOp->p5<d
2ed80 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
2ed90 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70  rt( DbMaskTest(p
2eda0 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70  ->btreeMask, pOp
2edb0 2d 3e 70 35 29 20 29 3b 0a 20 20 7a 20 3d 20 73  ->p5) );.  z = s
2edc0 71 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65 67  qlite3BtreeInteg
2edd0 72 69 74 79 43 68 65 63 6b 28 64 62 2d 3e 61 44  rityCheck(db->aD
2ede0 62 5b 70 4f 70 2d 3e 70 35 5d 2e 70 42 74 2c 20  b[pOp->p5].pBt, 
2edf0 61 52 6f 6f 74 2c 20 6e 52 6f 6f 74 2c 0a 20 20  aRoot, nRoot,.  
2ee00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ee10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
2ee20 69 6e 74 29 70 6e 45 72 72 2d 3e 75 2e 69 2c 20  int)pnErr->u.i, 
2ee30 26 6e 45 72 72 29 3b 0a 20 20 70 6e 45 72 72 2d  &nErr);.  pnErr-
2ee40 3e 75 2e 69 20 2d 3d 20 6e 45 72 72 3b 0a 20 20  >u.i -= nErr;.  
2ee50 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
2ee60 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 69  tNull(pIn1);.  i
2ee70 66 28 20 6e 45 72 72 3d 3d 30 20 29 7b 0a 20 20  f( nErr==0 ){.  
2ee80 20 20 61 73 73 65 72 74 28 20 7a 3d 3d 30 20 29    assert( z==0 )
2ee90 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 7a 3d  ;.  }else if( z=
2eea0 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e  =0 ){.    goto n
2eeb0 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c 73 65 7b 0a  o_mem;.  }else{.
2eec0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
2eed0 65 6d 53 65 74 53 74 72 28 70 49 6e 31 2c 20 7a  emSetStr(pIn1, z
2eee0 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54 46  , -1, SQLITE_UTF
2eef0 38 2c 20 73 71 6c 69 74 65 33 5f 66 72 65 65 29  8, sqlite3_free)
2ef00 3b 0a 20 20 7d 0a 20 20 55 50 44 41 54 45 5f 4d  ;.  }.  UPDATE_M
2ef10 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31  AX_BLOBSIZE(pIn1
2ef20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
2ef30 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70  ChangeEncoding(p
2ef40 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  In1, encoding);.
2ef50 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
2ef60 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
2ef70 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b  _INTEGRITY_CHECK
2ef80 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20   */../* Opcode: 
2ef90 52 6f 77 53 65 74 41 64 64 20 50 31 20 50 32 20  RowSetAdd P1 P2 
2efa0 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
2efb0 73 3a 20 72 6f 77 73 65 74 28 50 31 29 3d 72 5b  s: rowset(P1)=r[
2efc0 50 32 5d 0a 2a 2a 0a 2a 2a 20 49 6e 73 65 72 74  P2].**.** Insert
2efd0 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c   the integer val
2efe0 75 65 20 68 65 6c 64 20 62 79 20 72 65 67 69 73  ue held by regis
2eff0 74 65 72 20 50 32 20 69 6e 74 6f 20 61 20 62 6f  ter P2 into a bo
2f000 6f 6c 65 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 68  olean index.** h
2f010 65 6c 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  eld in register 
2f020 50 31 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 61 73 73  P1..**.** An ass
2f030 65 72 74 69 6f 6e 20 66 61 69 6c 73 20 69 66 20  ertion fails if 
2f040 50 32 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74  P2 is not an int
2f050 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  eger..*/.case OP
2f060 5f 52 6f 77 53 65 74 41 64 64 3a 20 7b 20 20 20  _RowSetAdd: {   
2f070 20 20 20 20 2f 2a 20 69 6e 31 2c 20 69 6e 32 20      /* in1, in2 
2f080 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
2f090 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49  m[pOp->p1];.  pI
2f0a0 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n2 = &aMem[pOp->
2f0b0 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28  p2];.  assert( (
2f0c0 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn2->flags & ME
2f0d0 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 69  M_Int)!=0 );.  i
2f0e0 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
2f0f0 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30  & MEM_RowSet)==0
2f100 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
2f110 64 62 65 4d 65 6d 53 65 74 52 6f 77 53 65 74 28  dbeMemSetRowSet(
2f120 70 49 6e 31 29 3b 0a 20 20 20 20 69 66 28 20 28  pIn1);.    if( (
2f130 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
2f140 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 20 67  M_RowSet)==0 ) g
2f150 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
2f160 20 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49    sqlite3RowSetI
2f170 6e 73 65 72 74 28 70 49 6e 31 2d 3e 75 2e 70 52  nsert(pIn1->u.pR
2f180 6f 77 53 65 74 2c 20 70 49 6e 32 2d 3e 75 2e 69  owSet, pIn2->u.i
2f190 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
2f1a0 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74  * Opcode: RowSet
2f1b0 52 65 61 64 20 50 31 20 50 32 20 50 33 20 2a 20  Read P1 P2 P3 * 
2f1c0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
2f1d0 5b 50 33 5d 3d 72 6f 77 73 65 74 28 50 31 29 0a  [P3]=rowset(P1).
2f1e0 2a 2a 0a 2a 2a 20 45 78 74 72 61 63 74 20 74 68  **.** Extract th
2f1f0 65 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65  e smallest value
2f200 20 66 72 6f 6d 20 62 6f 6f 6c 65 61 6e 20 69 6e   from boolean in
2f210 64 65 78 20 50 31 20 61 6e 64 20 70 75 74 20 74  dex P1 and put t
2f220 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 0a 2a  hat value into.*
2f230 2a 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 20  * register P3.  
2f240 4f 72 2c 20 69 66 20 62 6f 6f 6c 65 61 6e 20 69  Or, if boolean i
2f250 6e 64 65 78 20 50 31 20 69 73 20 69 6e 69 74 69  ndex P1 is initi
2f260 61 6c 6c 79 20 65 6d 70 74 79 2c 20 6c 65 61 76  ally empty, leav
2f270 65 20 50 33 0a 2a 2a 20 75 6e 63 68 61 6e 67 65  e P3.** unchange
2f280 64 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20 69 6e  d and jump to in
2f290 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f  struction P2..*/
2f2a0 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 52  .case OP_RowSetR
2f2b0 65 61 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20  ead: {       /* 
2f2c0 6a 75 6d 70 2c 20 69 6e 31 2c 20 6f 75 74 33 20  jump, in1, out3 
2f2d0 2a 2f 0a 20 20 69 36 34 20 76 61 6c 3b 0a 0a 20  */.  i64 val;.. 
2f2e0 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
2f2f0 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70  p->p1];.  if( (p
2f300 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
2f310 5f 52 6f 77 53 65 74 29 3d 3d 30 20 0a 20 20 20  _RowSet)==0 .   
2f320 7c 7c 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74  || sqlite3RowSet
2f330 4e 65 78 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f  Next(pIn1->u.pRo
2f340 77 53 65 74 2c 20 26 76 61 6c 29 3d 3d 30 0a 20  wSet, &val)==0. 
2f350 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20 62   ){.    /* The b
2f360 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 69 73 20  oolean index is 
2f370 65 6d 70 74 79 20 2a 2f 0a 20 20 20 20 73 71 6c  empty */.    sql
2f380 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
2f390 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 20 20 56 64  ll(pIn1);.    Vd
2f3a0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c  beBranchTaken(1,
2f3b0 32 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d  2);.    goto jum
2f3c0 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68 65 63  p_to_p2_and_chec
2f3d0 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b  k_for_interrupt;
2f3e0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a  .  }else{.    /*
2f3f0 20 41 20 76 61 6c 75 65 20 77 61 73 20 70 75 6c   A value was pul
2f400 6c 65 64 20 66 72 6f 6d 20 74 68 65 20 69 6e 64  led from the ind
2f410 65 78 20 2a 2f 0a 20 20 20 20 56 64 62 65 42 72  ex */.    VdbeBr
2f420 61 6e 63 68 54 61 6b 65 6e 28 30 2c 32 29 3b 0a  anchTaken(0,2);.
2f430 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
2f440 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d  emSetInt64(&aMem
2f450 5b 70 4f 70 2d 3e 70 33 5d 2c 20 76 61 6c 29 3b  [pOp->p3], val);
2f460 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65 63  .  }.  goto chec
2f470 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b  k_for_interrupt;
2f480 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
2f490 6f 77 53 65 74 54 65 73 74 20 50 31 20 50 32 20  owSetTest P1 P2 
2f4a0 50 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69  P3 P4.** Synopsi
2f4b0 73 3a 20 69 66 20 72 5b 50 33 5d 20 69 6e 20 72  s: if r[P3] in r
2f4c0 6f 77 73 65 74 28 50 31 29 20 67 6f 74 6f 20 50  owset(P1) goto P
2f4d0 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72  2.**.** Register
2f4e0 20 50 33 20 69 73 20 61 73 73 75 6d 65 64 20 74   P3 is assumed t
2f4f0 6f 20 68 6f 6c 64 20 61 20 36 34 2d 62 69 74 20  o hold a 64-bit 
2f500 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20 49  integer value. I
2f510 66 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a  f register P1.**
2f520 20 63 6f 6e 74 61 69 6e 73 20 61 20 52 6f 77 53   contains a RowS
2f530 65 74 20 6f 62 6a 65 63 74 20 61 6e 64 20 74 68  et object and th
2f540 61 74 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74  at RowSet object
2f550 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20 74 68 65   contains.** the
2f560 20 76 61 6c 75 65 20 68 65 6c 64 20 69 6e 20 50   value held in P
2f570 33 2c 20 6a 75 6d 70 20 74 6f 20 72 65 67 69 73  3, jump to regis
2f580 74 65 72 20 50 32 2e 20 4f 74 68 65 72 77 69 73  ter P2. Otherwis
2f590 65 2c 20 69 6e 73 65 72 74 20 74 68 65 0a 2a 2a  e, insert the.**
2f5a0 20 69 6e 74 65 67 65 72 20 69 6e 20 50 33 20 69   integer in P3 i
2f5b0 6e 74 6f 20 74 68 65 20 52 6f 77 53 65 74 20 61  nto the RowSet a
2f5c0 6e 64 20 63 6f 6e 74 69 6e 75 65 20 6f 6e 20 74  nd continue on t
2f5d0 6f 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20 6f 70  o the.** next op
2f5e0 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  code..**.** The 
2f5f0 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 69 73  RowSet object is
2f600 20 6f 70 74 69 6d 69 7a 65 64 20 66 6f 72 20 74   optimized for t
2f610 68 65 20 63 61 73 65 20 77 68 65 72 65 20 73 75  he case where su
2f620 63 63 65 73 73 69 76 65 20 73 65 74 73 0a 2a 2a  ccessive sets.**
2f630 20 6f 66 20 69 6e 74 65 67 65 72 73 2c 20 77 68   of integers, wh
2f640 65 72 65 20 65 61 63 68 20 73 65 74 20 63 6f 6e  ere each set con
2f650 74 61 69 6e 73 20 6e 6f 20 64 75 70 6c 69 63 61  tains no duplica
2f660 74 65 73 2e 20 45 61 63 68 20 73 65 74 0a 2a 2a  tes. Each set.**
2f670 20 6f 66 20 76 61 6c 75 65 73 20 69 73 20 69 64   of values is id
2f680 65 6e 74 69 66 69 65 64 20 62 79 20 61 20 75 6e  entified by a un
2f690 69 71 75 65 20 50 34 20 76 61 6c 75 65 2e 20 54  ique P4 value. T
2f6a0 68 65 20 66 69 72 73 74 20 73 65 74 0a 2a 2a 20  he first set.** 
2f6b0 6d 75 73 74 20 68 61 76 65 20 50 34 3d 3d 30 2c  must have P4==0,
2f6c0 20 74 68 65 20 66 69 6e 61 6c 20 73 65 74 20 50   the final set P
2f6d0 34 3d 2d 31 2e 20 20 50 34 20 6d 75 73 74 20 62  4=-1.  P4 must b
2f6e0 65 20 65 69 74 68 65 72 20 2d 31 20 6f 72 0a 2a  e either -1 or.*
2f6f0 2a 20 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 2e 20  * non-negative. 
2f700 20 46 6f 72 20 6e 6f 6e 2d 6e 65 67 61 74 69 76   For non-negativ
2f710 65 20 76 61 6c 75 65 73 20 6f 66 20 50 34 20 6f  e values of P4 o
2f720 6e 6c 79 20 74 68 65 20 6c 6f 77 65 72 20 34 0a  nly the lower 4.
2f730 2a 2a 20 62 69 74 73 20 61 72 65 20 73 69 67 6e  ** bits are sign
2f740 69 66 69 63 61 6e 74 2e 0a 2a 2a 0a 2a 2a 20 54  ificant..**.** T
2f750 68 69 73 20 61 6c 6c 6f 77 73 20 6f 70 74 69 6d  his allows optim
2f760 69 7a 61 74 69 6f 6e 73 3a 20 28 61 29 20 77 68  izations: (a) wh
2f770 65 6e 20 50 34 3d 3d 30 20 74 68 65 72 65 20 69  en P4==0 there i
2f780 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 74 65 73  s no need to tes
2f790 74 0a 2a 2a 20 74 68 65 20 72 6f 77 73 65 74 20  t.** the rowset 
2f7a0 6f 62 6a 65 63 74 20 66 6f 72 20 50 33 2c 20 61  object for P3, a
2f7b0 73 20 69 74 20 69 73 20 67 75 61 72 61 6e 74 65  s it is guarante
2f7c0 65 64 20 6e 6f 74 20 74 6f 20 63 6f 6e 74 61 69  ed not to contai
2f7d0 6e 20 69 74 2c 0a 2a 2a 20 28 62 29 20 77 68 65  n it,.** (b) whe
2f7e0 6e 20 50 34 3d 3d 2d 31 20 74 68 65 72 65 20 69  n P4==-1 there i
2f7f0 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 69 6e 73  s no need to ins
2f800 65 72 74 20 74 68 65 20 76 61 6c 75 65 2c 20 61  ert the value, a
2f810 73 20 69 74 20 77 69 6c 6c 0a 2a 2a 20 6e 65 76  s it will.** nev
2f820 65 72 20 62 65 20 74 65 73 74 65 64 20 66 6f 72  er be tested for
2f830 2c 20 61 6e 64 20 28 63 29 20 77 68 65 6e 20 61  , and (c) when a
2f840 20 76 61 6c 75 65 20 74 68 61 74 20 69 73 20 70   value that is p
2f850 61 72 74 20 6f 66 20 73 65 74 20 58 20 69 73 0a  art of set X is.
2f860 2a 2a 20 69 6e 73 65 72 74 65 64 2c 20 74 68 65  ** inserted, the
2f870 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f  re is no need to
2f880 20 73 65 61 72 63 68 20 74 6f 20 73 65 65 20 69   search to see i
2f890 66 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65  f the same value
2f8a0 20 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73   was.** previous
2f8b0 6c 79 20 69 6e 73 65 72 74 65 64 20 61 73 20 70  ly inserted as p
2f8c0 61 72 74 20 6f 66 20 73 65 74 20 58 20 28 6f 6e  art of set X (on
2f8d0 6c 79 20 69 66 20 69 74 20 77 61 73 20 70 72 65  ly if it was pre
2f8e0 76 69 6f 75 73 6c 79 0a 2a 2a 20 69 6e 73 65 72  viously.** inser
2f8f0 74 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 73  ted as part of s
2f900 6f 6d 65 20 6f 74 68 65 72 20 73 65 74 29 2e 0a  ome other set)..
2f910 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65  */.case OP_RowSe
2f920 74 54 65 73 74 3a 20 7b 20 20 20 20 20 20 20 20  tTest: {        
2f930 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2f940 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
2f950 2f 0a 20 20 69 6e 74 20 69 53 65 74 3b 0a 20 20  /.  int iSet;.  
2f960 69 6e 74 20 65 78 69 73 74 73 3b 0a 0a 20 20 70  int exists;..  p
2f970 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
2f980 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26  >p1];.  pIn3 = &
2f990 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
2f9a0 20 69 53 65 74 20 3d 20 70 4f 70 2d 3e 70 34 2e   iSet = pOp->p4.
2f9b0 69 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  i;.  assert( pIn
2f9c0 33 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74  3->flags&MEM_Int
2f9d0 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65   );..  /* If the
2f9e0 72 65 20 69 73 20 61 6e 79 74 68 69 6e 67 20 6f  re is anything o
2f9f0 74 68 65 72 20 74 68 61 6e 20 61 20 72 6f 77 73  ther than a rows
2fa00 65 74 20 6f 62 6a 65 63 74 20 69 6e 20 6d 65 6d  et object in mem
2fa10 6f 72 79 20 63 65 6c 6c 20 50 31 2c 0a 20 20 2a  ory cell P1,.  *
2fa20 2a 20 64 65 6c 65 74 65 20 69 74 20 6e 6f 77 20  * delete it now 
2fa30 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65 20 50  and initialize P
2fa40 31 20 77 69 74 68 20 61 6e 20 65 6d 70 74 79 20  1 with an empty 
2fa50 72 6f 77 73 65 74 0a 20 20 2a 2f 0a 20 20 69 66  rowset.  */.  if
2fa60 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
2fa70 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20   MEM_RowSet)==0 
2fa80 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
2fa90 62 65 4d 65 6d 53 65 74 52 6f 77 53 65 74 28 70  beMemSetRowSet(p
2faa0 49 6e 31 29 3b 0a 20 20 20 20 69 66 28 20 28 70  In1);.    if( (p
2fab0 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
2fac0 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 20 67 6f  _RowSet)==0 ) go
2fad0 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a  to no_mem;.  }..
2fae0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2faf0 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
2fb00 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 53 65  );.  assert( iSe
2fb10 74 3d 3d 2d 31 20 7c 7c 20 69 53 65 74 3e 3d 30  t==-1 || iSet>=0
2fb20 20 29 3b 0a 20 20 69 66 28 20 69 53 65 74 20 29   );.  if( iSet )
2fb30 7b 0a 20 20 20 20 65 78 69 73 74 73 20 3d 20 73  {.    exists = s
2fb40 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73 74  qlite3RowSetTest
2fb50 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74  (pIn1->u.pRowSet
2fb60 2c 20 69 53 65 74 2c 20 70 49 6e 33 2d 3e 75 2e  , iSet, pIn3->u.
2fb70 69 29 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e  i);.    VdbeBran
2fb80 63 68 54 61 6b 65 6e 28 65 78 69 73 74 73 21 3d  chTaken(exists!=
2fb90 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 65 78  0,2);.    if( ex
2fba0 69 73 74 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70  ists ) goto jump
2fbb0 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 69 66  _to_p2;.  }.  if
2fbc0 28 20 69 53 65 74 3e 3d 30 20 29 7b 0a 20 20 20  ( iSet>=0 ){.   
2fbd0 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e   sqlite3RowSetIn
2fbe0 73 65 72 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f  sert(pIn1->u.pRo
2fbf0 77 53 65 74 2c 20 70 49 6e 33 2d 3e 75 2e 69 29  wSet, pIn3->u.i)
2fc00 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
2fc10 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ...#ifndef SQLIT
2fc20 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 0a  E_OMIT_TRIGGER..
2fc30 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 6f 67 72  /* Opcode: Progr
2fc40 61 6d 20 50 31 20 50 32 20 50 33 20 50 34 20 50  am P1 P2 P3 P4 P
2fc50 35 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20  5.**.** Execute 
2fc60 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67  the trigger prog
2fc70 72 61 6d 20 70 61 73 73 65 64 20 61 73 20 50 34  ram passed as P4
2fc80 20 28 74 79 70 65 20 50 34 5f 53 55 42 50 52 4f   (type P4_SUBPRO
2fc90 47 52 41 4d 29 2e 20 0a 2a 2a 0a 2a 2a 20 50 31  GRAM). .**.** P1
2fca0 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64   contains the ad
2fcb0 64 72 65 73 73 20 6f 66 20 74 68 65 20 6d 65 6d  dress of the mem
2fcc0 6f 72 79 20 63 65 6c 6c 20 74 68 61 74 20 63 6f  ory cell that co
2fcd0 6e 74 61 69 6e 73 20 74 68 65 20 66 69 72 73 74  ntains the first
2fce0 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c   memory .** cell
2fcf0 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20   in an array of 
2fd00 76 61 6c 75 65 73 20 75 73 65 64 20 61 73 20 61  values used as a
2fd10 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20  rguments to the 
2fd20 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20 50 32 20  sub-program. P2 
2fd30 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  .** contains the
2fd40 20 61 64 64 72 65 73 73 20 74 6f 20 6a 75 6d 70   address to jump
2fd50 20 74 6f 20 69 66 20 74 68 65 20 73 75 62 2d 70   to if the sub-p
2fd60 72 6f 67 72 61 6d 20 74 68 72 6f 77 73 20 61 6e  rogram throws an
2fd70 20 49 47 4e 4f 52 45 20 0a 2a 2a 20 65 78 63 65   IGNORE .** exce
2fd80 70 74 69 6f 6e 20 75 73 69 6e 67 20 74 68 65 20  ption using the 
2fd90 52 41 49 53 45 28 29 20 66 75 6e 63 74 69 6f 6e  RAISE() function
2fda0 2e 20 52 65 67 69 73 74 65 72 20 50 33 20 63 6f  . Register P3 co
2fdb0 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64 72 65  ntains the addre
2fdc0 73 73 20 0a 2a 2a 20 6f 66 20 61 20 6d 65 6d 6f  ss .** of a memo
2fdd0 72 79 20 63 65 6c 6c 20 69 6e 20 74 68 69 73 20  ry cell in this 
2fde0 28 74 68 65 20 70 61 72 65 6e 74 29 20 56 4d 20  (the parent) VM 
2fdf0 74 68 61 74 20 69 73 20 75 73 65 64 20 74 6f 20  that is used to 
2fe00 61 6c 6c 6f 63 61 74 65 20 74 68 65 20 0a 2a 2a  allocate the .**
2fe10 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64   memory required
2fe20 20 62 79 20 74 68 65 20 73 75 62 2d 76 64 62 65   by the sub-vdbe
2fe30 20 61 74 20 72 75 6e 74 69 6d 65 2e 0a 2a 2a 0a   at runtime..**.
2fe40 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
2fe50 65 72 20 74 6f 20 74 68 65 20 56 4d 20 63 6f 6e  er to the VM con
2fe60 74 61 69 6e 69 6e 67 20 74 68 65 20 74 72 69 67  taining the trig
2fe70 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a  ger program..**.
2fe80 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 6e 2d  ** If P5 is non-
2fe90 7a 65 72 6f 2c 20 74 68 65 6e 20 72 65 63 75 72  zero, then recur
2fea0 73 69 76 65 20 70 72 6f 67 72 61 6d 20 69 6e 76  sive program inv
2feb0 6f 63 61 74 69 6f 6e 20 69 73 20 65 6e 61 62 6c  ocation is enabl
2fec0 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50  ed..*/.case OP_P
2fed0 72 6f 67 72 61 6d 3a 20 7b 20 20 20 20 20 20 20  rogram: {       
2fee0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e   /* jump */.  in
2fef0 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20 20  t nMem;         
2ff00 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
2ff10 6f 66 20 6d 65 6d 6f 72 79 20 72 65 67 69 73 74  of memory regist
2ff20 65 72 73 20 66 6f 72 20 73 75 62 2d 70 72 6f 67  ers for sub-prog
2ff30 72 61 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 79  ram */.  int nBy
2ff40 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  te;             
2ff50 20 2f 2a 20 42 79 74 65 73 20 6f 66 20 72 75 6e   /* Bytes of run
2ff60 74 69 6d 65 20 73 70 61 63 65 20 72 65 71 75 69  time space requi
2ff70 72 65 64 20 66 6f 72 20 73 75 62 2d 70 72 6f 67  red for sub-prog
2ff80 72 61 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52  ram */.  Mem *pR
2ff90 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
2ffa0 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20   /* Register to 
2ffb0 61 6c 6c 6f 63 61 74 65 20 72 75 6e 74 69 6d 65  allocate runtime
2ffc0 20 73 70 61 63 65 20 2a 2f 0a 20 20 4d 65 6d 20   space */.  Mem 
2ffd0 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20  *pMem;          
2ffe0 20 20 20 20 2f 2a 20 55 73 65 64 20 74 6f 20 69      /* Used to i
2fff0 74 65 72 61 74 65 20 74 68 72 6f 75 67 68 20 6d  terate through m
30000 65 6d 6f 72 79 20 63 65 6c 6c 73 20 2a 2f 0a 20  emory cells */. 
30010 20 4d 65 6d 20 2a 70 45 6e 64 3b 20 20 20 20 20   Mem *pEnd;     
30020 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74           /* Last
30030 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20   memory cell in 
30040 6e 65 77 20 61 72 72 61 79 20 2a 2f 0a 20 20 56  new array */.  V
30050 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65  dbeFrame *pFrame
30060 3b 20 20 20 20 20 20 2f 2a 20 4e 65 77 20 76 64  ;      /* New vd
30070 62 65 20 66 72 61 6d 65 20 74 6f 20 65 78 65 63  be frame to exec
30080 75 74 65 20 69 6e 20 2a 2f 0a 20 20 53 75 62 50  ute in */.  SubP
30090 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d  rogram *pProgram
300a0 3b 20 20 20 2f 2a 20 53 75 62 2d 70 72 6f 67 72  ;   /* Sub-progr
300b0 61 6d 20 74 6f 20 65 78 65 63 75 74 65 20 2a 2f  am to execute */
300c0 0a 20 20 76 6f 69 64 20 2a 74 3b 20 20 20 20 20  .  void *t;     
300d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f             /* To
300e0 6b 65 6e 20 69 64 65 6e 74 69 66 79 69 6e 67 20  ken identifying 
300f0 74 72 69 67 67 65 72 20 2a 2f 0a 0a 20 20 70 50  trigger */..  pP
30100 72 6f 67 72 61 6d 20 3d 20 70 4f 70 2d 3e 70 34  rogram = pOp->p4
30110 2e 70 50 72 6f 67 72 61 6d 3b 0a 20 20 70 52 74  .pProgram;.  pRt
30120 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
30130 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 50 72  ];.  assert( pPr
30140 6f 67 72 61 6d 2d 3e 6e 4f 70 3e 30 20 29 3b 0a  ogram->nOp>0 );.
30150 20 20 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 70    .  /* If the p
30160 35 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 2c  5 flag is clear,
30170 20 74 68 65 6e 20 72 65 63 75 72 73 69 76 65 20   then recursive 
30180 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72  invocation of tr
30190 69 67 67 65 72 73 20 69 73 20 0a 20 20 2a 2a 20  iggers is .  ** 
301a0 64 69 73 61 62 6c 65 64 20 66 6f 72 20 62 61 63  disabled for bac
301b0 6b 77 61 72 64 73 20 63 6f 6d 70 61 74 69 62 69  kwards compatibi
301c0 6c 69 74 79 20 28 70 35 20 69 73 20 73 65 74 20  lity (p5 is set 
301d0 69 66 20 74 68 69 73 20 73 75 62 2d 70 72 6f 67  if this sub-prog
301e0 72 61 6d 0a 20 20 2a 2a 20 69 73 20 72 65 61 6c  ram.  ** is real
301f0 6c 79 20 61 20 74 72 69 67 67 65 72 2c 20 6e 6f  ly a trigger, no
30200 74 20 61 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  t a foreign key 
30210 61 63 74 69 6f 6e 2c 20 61 6e 64 20 74 68 65 20  action, and the 
30220 66 6c 61 67 20 73 65 74 0a 20 20 2a 2a 20 61 6e  flag set.  ** an
30230 64 20 63 6c 65 61 72 65 64 20 62 79 20 74 68 65  d cleared by the
30240 20 22 50 52 41 47 4d 41 20 72 65 63 75 72 73 69   "PRAGMA recursi
30250 76 65 5f 74 72 69 67 67 65 72 73 22 20 63 6f 6d  ve_triggers" com
30260 6d 61 6e 64 20 69 73 20 63 6c 65 61 72 29 2e 0a  mand is clear)..
30270 20 20 2a 2a 20 0a 20 20 2a 2a 20 49 74 20 69 73    ** .  ** It is
30280 20 72 65 63 75 72 73 69 76 65 20 69 6e 76 6f 63   recursive invoc
30290 61 74 69 6f 6e 20 6f 66 20 74 72 69 67 67 65 72  ation of trigger
302a0 73 2c 20 61 74 20 74 68 65 20 53 51 4c 20 6c 65  s, at the SQL le
302b0 76 65 6c 2c 20 74 68 61 74 20 69 73 20 0a 20 20  vel, that is .  
302c0 2a 2a 20 64 69 73 61 62 6c 65 64 2e 20 49 6e 20  ** disabled. In 
302d0 73 6f 6d 65 20 63 61 73 65 73 20 61 20 73 69 6e  some cases a sin
302e0 67 6c 65 20 74 72 69 67 67 65 72 20 6d 61 79 20  gle trigger may 
302f0 67 65 6e 65 72 61 74 65 20 6d 6f 72 65 20 74 68  generate more th
30300 61 6e 20 6f 6e 65 20 0a 20 20 2a 2a 20 53 75 62  an one .  ** Sub
30310 50 72 6f 67 72 61 6d 20 28 69 66 20 74 68 65 20  Program (if the 
30320 74 72 69 67 67 65 72 20 6d 61 79 20 62 65 20 65  trigger may be e
30330 78 65 63 75 74 65 64 20 77 69 74 68 20 6d 6f 72  xecuted with mor
30340 65 20 74 68 61 6e 20 6f 6e 65 20 64 69 66 66 65  e than one diffe
30350 72 65 6e 74 20 0a 20 20 2a 2a 20 4f 4e 20 43 4f  rent .  ** ON CO
30360 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d  NFLICT algorithm
30370 29 2e 20 53 75 62 50 72 6f 67 72 61 6d 20 73 74  ). SubProgram st
30380 72 75 63 74 75 72 65 73 20 61 73 73 6f 63 69 61  ructures associa
30390 74 65 64 20 77 69 74 68 20 61 0a 20 20 2a 2a 20  ted with a.  ** 
303a0 73 69 6e 67 6c 65 20 74 72 69 67 67 65 72 20 61  single trigger a
303b0 6c 6c 20 68 61 76 65 20 74 68 65 20 73 61 6d 65  ll have the same
303c0 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 53   value for the S
303d0 75 62 50 72 6f 67 72 61 6d 2e 74 6f 6b 65 6e 20  ubProgram.token 
303e0 0a 20 20 2a 2a 20 76 61 72 69 61 62 6c 65 2e 20  .  ** variable. 
303f0 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   */.  if( pOp->p
30400 35 20 29 7b 0a 20 20 20 20 74 20 3d 20 70 50 72  5 ){.    t = pPr
30410 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20  ogram->token;.  
30420 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e    for(pFrame=p->
30430 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 20 26  pFrame; pFrame &
30440 26 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 21  & pFrame->token!
30450 3d 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d  =t; pFrame=pFram
30460 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20  e->pParent);.   
30470 20 69 66 28 20 70 46 72 61 6d 65 20 29 20 62 72   if( pFrame ) br
30480 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  eak;.  }..  if( 
30490 70 2d 3e 6e 46 72 61 6d 65 3e 3d 64 62 2d 3e 61  p->nFrame>=db->a
304a0 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
304b0 49 54 5f 54 52 49 47 47 45 52 5f 44 45 50 54 48  IT_TRIGGER_DEPTH
304c0 5d 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51  ] ){.    rc = SQ
304d0 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20  LITE_ERROR;.    
304e0 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72  sqlite3VdbeError
304f0 28 70 2c 20 22 74 6f 6f 20 6d 61 6e 79 20 6c 65  (p, "too many le
30500 76 65 6c 73 20 6f 66 20 74 72 69 67 67 65 72 20  vels of trigger 
30510 72 65 63 75 72 73 69 6f 6e 22 29 3b 0a 20 20 20  recursion");.   
30520 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
30530 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20  to_error;.  }.. 
30540 20 2f 2a 20 52 65 67 69 73 74 65 72 20 70 52 74   /* Register pRt
30550 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72   is used to stor
30560 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 72 65 71  e the memory req
30570 75 69 72 65 64 20 74 6f 20 73 61 76 65 20 74 68  uired to save th
30580 65 20 73 74 61 74 65 0a 20 20 2a 2a 20 6f 66 20  e state.  ** of 
30590 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 67  the current prog
305a0 72 61 6d 2c 20 61 6e 64 20 74 68 65 20 6d 65 6d  ram, and the mem
305b0 6f 72 79 20 72 65 71 75 69 72 65 64 20 61 74 20  ory required at 
305c0 72 75 6e 74 69 6d 65 20 74 6f 20 65 78 65 63 75  runtime to execu
305d0 74 65 0a 20 20 2a 2a 20 74 68 65 20 74 72 69 67  te.  ** the trig
305e0 67 65 72 20 70 72 6f 67 72 61 6d 2e 20 49 66 20  ger program. If 
305f0 74 68 69 73 20 74 72 69 67 67 65 72 20 68 61 73  this trigger has
30600 20 62 65 65 6e 20 66 69 72 65 64 20 62 65 66 6f   been fired befo
30610 72 65 2c 20 74 68 65 6e 20 70 52 74 20 0a 20 20  re, then pRt .  
30620 2a 2a 20 69 73 20 61 6c 72 65 61 64 79 20 61 6c  ** is already al
30630 6c 6f 63 61 74 65 64 2e 20 4f 74 68 65 72 77 69  located. Otherwi
30640 73 65 2c 20 69 74 20 6d 75 73 74 20 62 65 20 69  se, it must be i
30650 6e 69 74 69 61 6c 69 7a 65 64 2e 20 20 2a 2f 0a  nitialized.  */.
30660 20 20 69 66 28 20 28 70 52 74 2d 3e 66 6c 61 67    if( (pRt->flag
30670 73 26 4d 45 4d 5f 46 72 61 6d 65 29 3d 3d 30 20  s&MEM_Frame)==0 
30680 29 7b 0a 20 20 20 20 2f 2a 20 53 75 62 50 72 6f  ){.    /* SubPro
30690 67 72 61 6d 2e 6e 4d 65 6d 20 69 73 20 73 65 74  gram.nMem is set
306a0 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   to the number o
306b0 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75  f memory cells u
306c0 73 65 64 20 62 79 20 74 68 65 20 0a 20 20 20 20  sed by the .    
306d0 2a 2a 20 70 72 6f 67 72 61 6d 20 73 74 6f 72 65  ** program store
306e0 64 20 69 6e 20 53 75 62 50 72 6f 67 72 61 6d 2e  d in SubProgram.
306f0 61 4f 70 2e 20 41 73 20 77 65 6c 6c 20 61 73 20  aOp. As well as 
30700 74 68 65 73 65 2c 20 6f 6e 65 20 6d 65 6d 6f 72  these, one memor
30710 79 0a 20 20 20 20 2a 2a 20 63 65 6c 6c 20 69 73  y.    ** cell is
30720 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 65 61   required for ea
30730 63 68 20 63 75 72 73 6f 72 20 75 73 65 64 20 62  ch cursor used b
30740 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 20 53  y the program. S
30750 65 74 20 6c 6f 63 61 6c 0a 20 20 20 20 2a 2a 20  et local.    ** 
30760 76 61 72 69 61 62 6c 65 20 6e 4d 65 6d 20 28 61  variable nMem (a
30770 6e 64 20 6c 61 74 65 72 2c 20 56 64 62 65 46 72  nd later, VdbeFr
30780 61 6d 65 2e 6e 43 68 69 6c 64 4d 65 6d 29 20 74  ame.nChildMem) t
30790 6f 20 74 68 69 73 20 76 61 6c 75 65 2e 0a 20 20  o this value..  
307a0 20 20 2a 2f 0a 20 20 20 20 6e 4d 65 6d 20 3d 20    */.    nMem = 
307b0 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 20 2b  pProgram->nMem +
307c0 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b   pProgram->nCsr;
307d0 0a 20 20 20 20 61 73 73 65 72 74 28 20 6e 4d 65  .    assert( nMe
307e0 6d 3e 30 20 29 3b 0a 20 20 20 20 69 66 28 20 70  m>0 );.    if( p
307f0 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 30  Program->nCsr==0
30800 20 29 20 6e 4d 65 6d 2b 2b 3b 0a 20 20 20 20 6e   ) nMem++;.    n
30810 42 79 74 65 20 3d 20 52 4f 55 4e 44 38 28 73 69  Byte = ROUND8(si
30820 7a 65 6f 66 28 56 64 62 65 46 72 61 6d 65 29 29  zeof(VdbeFrame))
30830 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b  .              +
30840 20 6e 4d 65 6d 20 2a 20 73 69 7a 65 6f 66 28 4d   nMem * sizeof(M
30850 65 6d 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  em).            
30860 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43    + pProgram->nC
30870 73 72 20 2a 20 73 69 7a 65 6f 66 28 56 64 62 65  sr * sizeof(Vdbe
30880 43 75 72 73 6f 72 20 2a 29 3b 0a 20 20 20 20 70  Cursor *);.    p
30890 46 72 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 44  Frame = sqlite3D
308a0 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 64 62 2c 20  bMallocZero(db, 
308b0 6e 42 79 74 65 29 3b 0a 20 20 20 20 69 66 28 20  nByte);.    if( 
308c0 21 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 20  !pFrame ){.     
308d0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
308e0 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56    }.    sqlite3V
308f0 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 70 52  dbeMemRelease(pR
30900 74 29 3b 0a 20 20 20 20 70 52 74 2d 3e 66 6c 61  t);.    pRt->fla
30910 67 73 20 3d 20 4d 45 4d 5f 46 72 61 6d 65 3b 0a  gs = MEM_Frame;.
30920 20 20 20 20 70 52 74 2d 3e 75 2e 70 46 72 61 6d      pRt->u.pFram
30930 65 20 3d 20 70 46 72 61 6d 65 3b 0a 0a 20 20 20  e = pFrame;..   
30940 20 70 46 72 61 6d 65 2d 3e 76 20 3d 20 70 3b 0a   pFrame->v = p;.
30950 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69      pFrame->nChi
30960 6c 64 4d 65 6d 20 3d 20 6e 4d 65 6d 3b 0a 20 20  ldMem = nMem;.  
30970 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64    pFrame->nChild
30980 43 73 72 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e  Csr = pProgram->
30990 6e 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d 65  nCsr;.    pFrame
309a0 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f 70  ->pc = (int)(pOp
309b0 20 2d 20 61 4f 70 29 3b 0a 20 20 20 20 70 46 72   - aOp);.    pFr
309c0 61 6d 65 2d 3e 61 4d 65 6d 20 3d 20 70 2d 3e 61  ame->aMem = p->a
309d0 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  Mem;.    pFrame-
309e0 3e 6e 4d 65 6d 20 3d 20 70 2d 3e 6e 4d 65 6d 3b  >nMem = p->nMem;
309f0 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 70 43  .    pFrame->apC
30a00 73 72 20 3d 20 70 2d 3e 61 70 43 73 72 3b 0a 20  sr = p->apCsr;. 
30a10 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 75 72 73     pFrame->nCurs
30a20 6f 72 20 3d 20 70 2d 3e 6e 43 75 72 73 6f 72 3b  or = p->nCursor;
30a30 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4f 70  .    pFrame->aOp
30a40 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20 20 70   = p->aOp;.    p
30a50 46 72 61 6d 65 2d 3e 6e 4f 70 20 3d 20 70 2d 3e  Frame->nOp = p->
30a60 6e 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  nOp;.    pFrame-
30a70 3e 74 6f 6b 65 6e 20 3d 20 70 50 72 6f 67 72 61  >token = pProgra
30a80 6d 2d 3e 74 6f 6b 65 6e 3b 0a 23 69 66 64 65 66  m->token;.#ifdef
30a90 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
30aa0 54 4d 54 5f 53 43 41 4e 53 54 41 54 55 53 0a 20  TMT_SCANSTATUS. 
30ab0 20 20 20 70 46 72 61 6d 65 2d 3e 61 6e 45 78 65     pFrame->anExe
30ac0 63 20 3d 20 70 2d 3e 61 6e 45 78 65 63 3b 0a 23  c = p->anExec;.#
30ad0 65 6e 64 69 66 0a 0a 20 20 20 20 70 45 6e 64 20  endif..    pEnd 
30ae0 3d 20 26 56 64 62 65 46 72 61 6d 65 4d 65 6d 28  = &VdbeFrameMem(
30af0 70 46 72 61 6d 65 29 5b 70 46 72 61 6d 65 2d 3e  pFrame)[pFrame->
30b00 6e 43 68 69 6c 64 4d 65 6d 5d 3b 0a 20 20 20 20  nChildMem];.    
30b10 66 6f 72 28 70 4d 65 6d 3d 56 64 62 65 46 72 61  for(pMem=VdbeFra
30b20 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 3b 20 70  meMem(pFrame); p
30b30 4d 65 6d 21 3d 70 45 6e 64 3b 20 70 4d 65 6d 2b  Mem!=pEnd; pMem+
30b40 2b 29 7b 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e  +){.      pMem->
30b50 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e 64 65  flags = MEM_Unde
30b60 66 69 6e 65 64 3b 0a 20 20 20 20 20 20 70 4d 65  fined;.      pMe
30b70 6d 2d 3e 64 62 20 3d 20 64 62 3b 0a 20 20 20 20  m->db = db;.    
30b80 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  }.  }else{.    p
30b90 46 72 61 6d 65 20 3d 20 70 52 74 2d 3e 75 2e 70  Frame = pRt->u.p
30ba0 46 72 61 6d 65 3b 0a 20 20 20 20 61 73 73 65 72  Frame;.    asser
30bb0 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65  t( pProgram->nMe
30bc0 6d 2b 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72  m+pProgram->nCsr
30bd0 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64  ==pFrame->nChild
30be0 4d 65 6d 20 0a 20 20 20 20 20 20 20 20 7c 7c 20  Mem .        || 
30bf0 28 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d  (pProgram->nCsr=
30c00 3d 30 20 26 26 20 70 50 72 6f 67 72 61 6d 2d 3e  =0 && pProgram->
30c10 6e 4d 65 6d 2b 31 3d 3d 70 46 72 61 6d 65 2d 3e  nMem+1==pFrame->
30c20 6e 43 68 69 6c 64 4d 65 6d 29 20 29 3b 0a 20 20  nChildMem) );.  
30c30 20 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72    assert( pProgr
30c40 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65  am->nCsr==pFrame
30c50 2d 3e 6e 43 68 69 6c 64 43 73 72 20 29 3b 0a 20  ->nChildCsr );. 
30c60 20 20 20 61 73 73 65 72 74 28 20 28 69 6e 74 29     assert( (int)
30c70 28 70 4f 70 20 2d 20 61 4f 70 29 3d 3d 70 46 72  (pOp - aOp)==pFr
30c80 61 6d 65 2d 3e 70 63 20 29 3b 0a 20 20 7d 0a 0a  ame->pc );.  }..
30c90 20 20 70 2d 3e 6e 46 72 61 6d 65 2b 2b 3b 0a 20    p->nFrame++;. 
30ca0 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74   pFrame->pParent
30cb0 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20   = p->pFrame;.  
30cc0 70 46 72 61 6d 65 2d 3e 6c 61 73 74 52 6f 77 69  pFrame->lastRowi
30cd0 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20  d = lastRowid;. 
30ce0 20 70 46 72 61 6d 65 2d 3e 6e 43 68 61 6e 67 65   pFrame->nChange
30cf0 20 3d 20 70 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20   = p->nChange;. 
30d00 20 70 46 72 61 6d 65 2d 3e 6e 44 62 43 68 61 6e   pFrame->nDbChan
30d10 67 65 20 3d 20 70 2d 3e 64 62 2d 3e 6e 43 68 61  ge = p->db->nCha
30d20 6e 67 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70  nge;.  assert( p
30d30 46 72 61 6d 65 2d 3e 70 41 75 78 44 61 74 61 3d  Frame->pAuxData=
30d40 3d 30 20 29 3b 0a 20 20 70 46 72 61 6d 65 2d 3e  =0 );.  pFrame->
30d50 70 41 75 78 44 61 74 61 20 3d 20 70 2d 3e 70 41  pAuxData = p->pA
30d60 75 78 44 61 74 61 3b 0a 20 20 70 2d 3e 70 41 75  uxData;.  p->pAu
30d70 78 44 61 74 61 20 3d 20 30 3b 0a 20 20 70 2d 3e  xData = 0;.  p->
30d80 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 70  nChange = 0;.  p
30d90 2d 3e 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d  ->pFrame = pFram
30da0 65 3b 0a 20 20 70 2d 3e 61 4d 65 6d 20 3d 20 61  e;.  p->aMem = a
30db0 4d 65 6d 20 3d 20 56 64 62 65 46 72 61 6d 65 4d  Mem = VdbeFrameM
30dc0 65 6d 28 70 46 72 61 6d 65 29 3b 0a 20 20 70 2d  em(pFrame);.  p-
30dd0 3e 6e 4d 65 6d 20 3d 20 70 46 72 61 6d 65 2d 3e  >nMem = pFrame->
30de0 6e 43 68 69 6c 64 4d 65 6d 3b 0a 20 20 70 2d 3e  nChildMem;.  p->
30df0 6e 43 75 72 73 6f 72 20 3d 20 28 75 31 36 29 70  nCursor = (u16)p
30e00 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72  Frame->nChildCsr
30e10 3b 0a 20 20 70 2d 3e 61 70 43 73 72 20 3d 20 28  ;.  p->apCsr = (
30e20 56 64 62 65 43 75 72 73 6f 72 20 2a 2a 29 26 61  VdbeCursor **)&a
30e30 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 5d 3b 0a 20 20  Mem[p->nMem];.  
30e40 70 2d 3e 61 4f 70 20 3d 20 61 4f 70 20 3d 20 70  p->aOp = aOp = p
30e50 50 72 6f 67 72 61 6d 2d 3e 61 4f 70 3b 0a 20 20  Program->aOp;.  
30e60 70 2d 3e 6e 4f 70 20 3d 20 70 50 72 6f 67 72 61  p->nOp = pProgra
30e70 6d 2d 3e 6e 4f 70 3b 0a 23 69 66 64 65 66 20 53  m->nOp;.#ifdef S
30e80 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d  QLITE_ENABLE_STM
30e90 54 5f 53 43 41 4e 53 54 41 54 55 53 0a 20 20 70  T_SCANSTATUS.  p
30ea0 2d 3e 61 6e 45 78 65 63 20 3d 20 30 3b 0a 23 65  ->anExec = 0;.#e
30eb0 6e 64 69 66 0a 20 20 70 4f 70 20 3d 20 26 61 4f  ndif.  pOp = &aO
30ec0 70 5b 2d 31 5d 3b 0a 0a 20 20 62 72 65 61 6b 3b  p[-1];..  break;
30ed0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  .}../* Opcode: P
30ee0 61 72 61 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a  aram P1 P2 * * *
30ef0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
30f00 64 65 20 69 73 20 6f 6e 6c 79 20 65 76 65 72 20  de is only ever 
30f10 70 72 65 73 65 6e 74 20 69 6e 20 73 75 62 2d 70  present in sub-p
30f20 72 6f 67 72 61 6d 73 20 63 61 6c 6c 65 64 20 76  rograms called v
30f30 69 61 20 74 68 65 20 0a 2a 2a 20 4f 50 5f 50 72  ia the .** OP_Pr
30f40 6f 67 72 61 6d 20 69 6e 73 74 72 75 63 74 69 6f  ogram instructio
30f50 6e 2e 20 43 6f 70 79 20 61 20 76 61 6c 75 65 20  n. Copy a value 
30f60 63 75 72 72 65 6e 74 6c 79 20 73 74 6f 72 65 64  currently stored
30f70 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 0a 2a 2a   in a memory .**
30f80 20 63 65 6c 6c 20 6f 66 20 74 68 65 20 63 61 6c   cell of the cal
30f90 6c 69 6e 67 20 28 70 61 72 65 6e 74 29 20 66 72  ling (parent) fr
30fa0 61 6d 65 20 74 6f 20 63 65 6c 6c 20 50 32 20 69  ame to cell P2 i
30fb0 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 66 72  n the current fr
30fc0 61 6d 65 73 20 0a 2a 2a 20 61 64 64 72 65 73 73  ames .** address
30fd0 20 73 70 61 63 65 2e 20 54 68 69 73 20 69 73 20   space. This is 
30fe0 75 73 65 64 20 62 79 20 74 72 69 67 67 65 72 20  used by trigger 
30ff0 70 72 6f 67 72 61 6d 73 20 74 6f 20 61 63 63 65  programs to acce
31000 73 73 20 74 68 65 20 6e 65 77 2e 2a 20 0a 2a 2a  ss the new.* .**
31010 20 61 6e 64 20 6f 6c 64 2e 2a 20 76 61 6c 75 65   and old.* value
31020 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 64 64  s..**.** The add
31030 72 65 73 73 20 6f 66 20 74 68 65 20 63 65 6c 6c  ress of the cell
31040 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20 66   in the parent f
31050 72 61 6d 65 20 69 73 20 64 65 74 65 72 6d 69 6e  rame is determin
31060 65 64 20 62 79 20 61 64 64 69 6e 67 0a 2a 2a 20  ed by adding.** 
31070 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
31080 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20   P1 argument to 
31090 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
310a0 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20   P1 argument to 
310b0 74 68 65 0a 2a 2a 20 63 61 6c 6c 69 6e 67 20 4f  the.** calling O
310c0 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74 72 75  P_Program instru
310d0 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
310e0 50 5f 50 61 72 61 6d 3a 20 7b 20 20 20 20 20 20  P_Param: {      
310f0 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
31100 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72    VdbeFrame *pFr
31110 61 6d 65 3b 0a 20 20 4d 65 6d 20 2a 70 49 6e 3b  ame;.  Mem *pIn;
31120 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
31130 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
31140 3b 0a 20 20 70 46 72 61 6d 65 20 3d 20 70 2d 3e  ;.  pFrame = p->
31150 70 46 72 61 6d 65 3b 0a 20 20 70 49 6e 20 3d 20  pFrame;.  pIn = 
31160 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f  &pFrame->aMem[pO
31170 70 2d 3e 70 31 20 2b 20 70 46 72 61 6d 65 2d 3e  p->p1 + pFrame->
31180 61 4f 70 5b 70 46 72 61 6d 65 2d 3e 70 63 5d 2e  aOp[pFrame->pc].
31190 70 31 5d 3b 20 20 20 0a 20 20 73 71 6c 69 74 65  p1];   .  sqlite
311a0 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43  3VdbeMemShallowC
311b0 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 2c 20 4d  opy(pOut, pIn, M
311c0 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 62 72 65  EM_Ephem);.  bre
311d0 61 6b 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a  ak;.}..#endif /*
311e0 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f   #ifndef SQLITE_
311f0 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 2a 2f 0a  OMIT_TRIGGER */.
31200 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
31210 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
31220 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 43 6f  ./* Opcode: FkCo
31230 75 6e 74 65 72 20 50 31 20 50 32 20 2a 20 2a 20  unter P1 P2 * * 
31240 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 66  *.** Synopsis: f
31250 6b 63 74 72 5b 50 31 5d 2b 3d 50 32 0a 2a 2a 0a  kctr[P1]+=P2.**.
31260 2a 2a 20 49 6e 63 72 65 6d 65 6e 74 20 61 20 22  ** Increment a "
31270 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e 74  constraint count
31280 65 72 22 20 62 79 20 50 32 20 28 50 32 20 6d 61  er" by P2 (P2 ma
31290 79 20 62 65 20 6e 65 67 61 74 69 76 65 20 6f 72  y be negative or
312a0 20 70 6f 73 69 74 69 76 65 29 2e 0a 2a 2a 20 49   positive)..** I
312b0 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P1 is non-zero
312c0 2c 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63  , the database c
312d0 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e 74 65  onstraint counte
312e0 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  r is incremented
312f0 20 0a 2a 2a 20 28 64 65 66 65 72 72 65 64 20 66   .** (deferred f
31300 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
31310 72 61 69 6e 74 73 29 2e 20 4f 74 68 65 72 77 69  raints). Otherwi
31320 73 65 2c 20 69 66 20 50 31 20 69 73 20 7a 65 72  se, if P1 is zer
31330 6f 2c 20 74 68 65 20 0a 2a 2a 20 73 74 61 74 65  o, the .** state
31340 6d 65 6e 74 20 63 6f 75 6e 74 65 72 20 69 73 20  ment counter is 
31350 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 69 6d 6d  incremented (imm
31360 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b  ediate foreign k
31370 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e  ey constraints).
31380 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 43 6f  .*/.case OP_FkCo
31390 75 6e 74 65 72 3a 20 7b 0a 20 20 69 66 28 20 64  unter: {.  if( d
313a0 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  b->flags & SQLIT
313b0 45 5f 44 65 66 65 72 46 4b 73 20 29 7b 0a 20 20  E_DeferFKs ){.  
313c0 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49    db->nDeferredI
313d0 6d 6d 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70  mmCons += pOp->p
313e0 32 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  2;.  }else if( p
313f0 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 64 62  Op->p1 ){.    db
31400 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20  ->nDeferredCons 
31410 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65  += pOp->p2;.  }e
31420 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 6e 46 6b 43  lse{.    p->nFkC
31430 6f 6e 73 74 72 61 69 6e 74 20 2b 3d 20 70 4f 70  onstraint += pOp
31440 2d 3e 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61  ->p2;.  }.  brea
31450 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
31460 20 46 6b 49 66 5a 65 72 6f 20 50 31 20 50 32 20   FkIfZero P1 P2 
31470 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
31480 73 3a 20 69 66 20 66 6b 63 74 72 5b 50 31 5d 3d  s: if fkctr[P1]=
31490 3d 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  =0 goto P2.**.**
314a0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 74 65 73   This opcode tes
314b0 74 73 20 69 66 20 61 20 66 6f 72 65 69 67 6e 20  ts if a foreign 
314c0 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63  key constraint-c
314d0 6f 75 6e 74 65 72 20 69 73 20 63 75 72 72 65 6e  ounter is curren
314e0 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2a 20 49 66 20  tly zero..** If 
314f0 73 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74  so, jump to inst
31500 72 75 63 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65  ruction P2. Othe
31510 72 77 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f  rwise, fall thro
31520 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
31530 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  .** instruction.
31540 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73 20  .**.** If P1 is 
31550 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74  non-zero, then t
31560 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
31570 20 69 66 20 74 68 65 20 64 61 74 61 62 61 73 65   if the database
31580 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e   constraint-coun
31590 74 65 72 0a 2a 2a 20 69 73 20 7a 65 72 6f 20 28  ter.** is zero (
315a0 74 68 65 20 6f 6e 65 20 74 68 61 74 20 63 6f 75  the one that cou
315b0 6e 74 73 20 64 65 66 65 72 72 65 64 20 63 6f 6e  nts deferred con
315c0 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
315d0 6e 73 29 2e 20 49 66 20 50 31 20 69 73 0a 2a 2a  ns). If P1 is.**
315e0 20 7a 65 72 6f 2c 20 74 68 65 20 6a 75 6d 70 20   zero, the jump 
315f0 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20  is taken if the 
31600 73 74 61 74 65 6d 65 6e 74 20 63 6f 6e 73 74 72  statement constr
31610 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73 20  aint-counter is 
31620 7a 65 72 6f 0a 2a 2a 20 28 69 6d 6d 65 64 69 61  zero.** (immedia
31630 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  te foreign key c
31640 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
31650 69 6f 6e 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ions)..*/.case O
31660 50 5f 46 6b 49 66 5a 65 72 6f 3a 20 7b 20 20 20  P_FkIfZero: {   
31670 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
31680 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29  .  if( pOp->p1 )
31690 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  {.    VdbeBranch
316a0 54 61 6b 65 6e 28 64 62 2d 3e 6e 44 65 66 65 72  Taken(db->nDefer
316b0 72 65 64 43 6f 6e 73 3d 3d 30 20 26 26 20 64 62  redCons==0 && db
316c0 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
316d0 6e 73 3d 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69  ns==0, 2);.    i
316e0 66 28 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64  f( db->nDeferred
316f0 43 6f 6e 73 3d 3d 30 20 26 26 20 64 62 2d 3e 6e  Cons==0 && db->n
31700 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d  DeferredImmCons=
31710 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  =0 ) goto jump_t
31720 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  o_p2;.  }else{. 
31730 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
31740 65 6e 28 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61  en(p->nFkConstra
31750 69 6e 74 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44  int==0 && db->nD
31760 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d  eferredImmCons==
31770 30 2c 20 32 29 3b 0a 20 20 20 20 69 66 28 20 70  0, 2);.    if( p
31780 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3d  ->nFkConstraint=
31790 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72  =0 && db->nDefer
317a0 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20  redImmCons==0 ) 
317b0 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
317c0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
317d0 23 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65  #endif /* #ifnde
317e0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  f SQLITE_OMIT_FO
317f0 52 45 49 47 4e 5f 4b 45 59 20 2a 2f 0a 0a 23 69  REIGN_KEY */..#i
31800 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
31810 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a  T_AUTOINCREMENT.
31820 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 65 6d 4d 61  /* Opcode: MemMa
31830 78 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  x P1 P2 * * *.**
31840 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d   Synopsis: r[P1]
31850 3d 6d 61 78 28 72 5b 50 31 5d 2c 72 5b 50 32 5d  =max(r[P1],r[P2]
31860 29 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20  ).**.** P1 is a 
31870 72 65 67 69 73 74 65 72 20 69 6e 20 74 68 65 20  register in the 
31880 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 74 68  root frame of th
31890 69 73 20 56 4d 20 28 74 68 65 20 72 6f 6f 74 20  is VM (the root 
318a0 66 72 61 6d 65 20 69 73 0a 2a 2a 20 64 69 66 66  frame is.** diff
318b0 65 72 65 6e 74 20 66 72 6f 6d 20 74 68 65 20 63  erent from the c
318c0 75 72 72 65 6e 74 20 66 72 61 6d 65 20 69 66 20  urrent frame if 
318d0 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
318e0 20 69 73 20 62 65 69 6e 67 20 65 78 65 63 75 74   is being execut
318f0 65 64 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 73  ed.** within a s
31900 75 62 2d 70 72 6f 67 72 61 6d 29 2e 20 53 65 74  ub-program). Set
31910 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65   the value of re
31920 67 69 73 74 65 72 20 50 31 20 74 6f 20 74 68 65  gister P1 to the
31930 20 6d 61 78 69 6d 75 6d 20 6f 66 20 0a 2a 2a 20   maximum of .** 
31940 69 74 73 20 63 75 72 72 65 6e 74 20 76 61 6c 75  its current valu
31950 65 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20  e and the value 
31960 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
31970 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
31980 75 63 74 69 6f 6e 20 74 68 72 6f 77 73 20 61 6e  uction throws an
31990 20 65 72 72 6f 72 20 69 66 20 74 68 65 20 6d 65   error if the me
319a0 6d 6f 72 79 20 63 65 6c 6c 20 69 73 20 6e 6f 74  mory cell is not
319b0 20 69 6e 69 74 69 61 6c 6c 79 0a 2a 2a 20 61 6e   initially.** an
319c0 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73   integer..*/.cas
319d0 65 20 4f 50 5f 4d 65 6d 4d 61 78 3a 20 7b 20 20  e OP_MemMax: {  
319e0 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a        /* in2 */.
319f0 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72    VdbeFrame *pFr
31a00 61 6d 65 3b 0a 20 20 69 66 28 20 70 2d 3e 70 46  ame;.  if( p->pF
31a10 72 61 6d 65 20 29 7b 0a 20 20 20 20 66 6f 72 28  rame ){.    for(
31a20 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65  pFrame=p->pFrame
31a30 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e  ; pFrame->pParen
31a40 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65  t; pFrame=pFrame
31a50 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20  ->pParent);.    
31a60 70 49 6e 31 20 3d 20 26 70 46 72 61 6d 65 2d 3e  pIn1 = &pFrame->
31a70 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
31a80 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49 6e 31   }else{.    pIn1
31a90 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
31aa0 5d 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28  ];.  }.  assert(
31ab0 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 31   memIsValid(pIn1
31ac0 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  ) );.  sqlite3Vd
31ad0 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
31ae0 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20  pIn1);.  pIn2 = 
31af0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
31b00 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
31b10 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 32 29  Integerify(pIn2)
31b20 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e  ;.  if( pIn1->u.
31b30 69 3c 70 49 6e 32 2d 3e 75 2e 69 29 7b 0a 20 20  i<pIn2->u.i){.  
31b40 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 49    pIn1->u.i = pI
31b50 6e 32 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 62  n2->u.i;.  }.  b
31b60 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
31b70 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  * SQLITE_OMIT_AU
31b80 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 0a  TOINCREMENT */..
31b90 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 50 6f 73  /* Opcode: IfPos
31ba0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
31bb0 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b   Synopsis: if r[
31bc0 50 31 5d 3e 30 20 74 68 65 6e 20 72 5b 50 31 5d  P1]>0 then r[P1]
31bd0 2d 3d 50 33 2c 20 67 6f 74 6f 20 50 32 0a 2a 2a  -=P3, goto P2.**
31be0 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 31 20  .** Register P1 
31bf0 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20  must contain an 
31c00 69 6e 74 65 67 65 72 2e 0a 2a 2a 20 49 66 20 74  integer..** If t
31c10 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69  he value of regi
31c20 73 74 65 72 20 50 31 20 69 73 20 31 20 6f 72 20  ster P1 is 1 or 
31c30 67 72 65 61 74 65 72 2c 20 73 75 62 74 72 61 63  greater, subtrac
31c40 74 20 50 33 20 66 72 6f 6d 20 74 68 65 0a 2a 2a  t P3 from the.**
31c50 20 76 61 6c 75 65 20 69 6e 20 50 31 20 61 6e 64   value in P1 and
31c60 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a   jump to P2..**.
31c70 2a 2a 20 49 66 20 74 68 65 20 69 6e 69 74 69 61  ** If the initia
31c80 6c 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73  l value of regis
31c90 74 65 72 20 50 31 20 69 73 20 6c 65 73 73 20 74  ter P1 is less t
31ca0 68 61 6e 20 31 2c 20 74 68 65 6e 20 74 68 65 0a  han 1, then the.
31cb0 2a 2a 20 76 61 6c 75 65 20 69 73 20 75 6e 63 68  ** value is unch
31cc0 61 6e 67 65 64 20 61 6e 64 20 63 6f 6e 74 72 6f  anged and contro
31cd0 6c 20 70 61 73 73 65 73 20 74 68 72 6f 75 67 68  l passes through
31ce0 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
31cf0 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  truction..*/.cas
31d00 65 20 4f 50 5f 49 66 50 6f 73 3a 20 7b 20 20 20  e OP_IfPos: {   
31d10 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
31d20 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
31d30 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
31d40 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
31d50 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  ags&MEM_Int );. 
31d60 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
31d70 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 2c 20 32  ( pIn1->u.i>0, 2
31d80 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75  );.  if( pIn1->u
31d90 2e 69 3e 30 20 29 7b 0a 20 20 20 20 70 49 6e 31  .i>0 ){.    pIn1
31da0 2d 3e 75 2e 69 20 2d 3d 20 70 4f 70 2d 3e 70 33  ->u.i -= pOp->p3
31db0 3b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f  ;.    goto jump_
31dc0 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65  to_p2;.  }.  bre
31dd0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
31de0 3a 20 4f 66 66 73 65 74 4c 69 6d 69 74 20 50 31  : OffsetLimit P1
31df0 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
31e00 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d  nopsis: if r[P1]
31e10 3e 30 20 74 68 65 6e 20 72 5b 50 32 5d 3d 72 5b  >0 then r[P2]=r[
31e20 50 31 5d 2b 6d 61 78 28 30 2c 72 5b 50 33 5d 29  P1]+max(0,r[P3])
31e30 20 65 6c 73 65 20 72 5b 50 32 5d 3d 28 2d 31 29   else r[P2]=(-1)
31e40 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
31e50 64 65 20 70 65 72 66 6f 72 6d 73 20 61 20 63 6f  de performs a co
31e60 6d 6d 6f 6e 6c 79 20 75 73 65 64 20 63 6f 6d 70  mmonly used comp
31e70 75 74 61 74 69 6f 6e 20 61 73 73 6f 63 69 61 74  utation associat
31e80 65 64 20 77 69 74 68 0a 2a 2a 20 4c 49 4d 49 54  ed with.** LIMIT
31e90 20 61 6e 64 20 4f 46 46 53 45 54 20 70 72 6f 63   and OFFSET proc
31ea0 65 73 73 2e 20 20 72 5b 50 31 5d 20 68 6f 6c 64  ess.  r[P1] hold
31eb0 73 20 74 68 65 20 6c 69 6d 69 74 20 63 6f 75 6e  s the limit coun
31ec0 74 65 72 2e 20 20 72 5b 50 33 5d 0a 2a 2a 20 68  ter.  r[P3].** h
31ed0 6f 6c 64 73 20 74 68 65 20 6f 66 66 73 65 74 20  olds the offset 
31ee0 63 6f 75 6e 74 65 72 2e 20 20 54 68 65 20 6f 70  counter.  The op
31ef0 63 6f 64 65 20 63 6f 6d 70 75 74 65 73 20 74 68  code computes th
31f00 65 20 63 6f 6d 62 69 6e 65 64 20 76 61 6c 75 65  e combined value
31f10 0a 2a 2a 20 6f 66 20 74 68 65 20 4c 49 4d 49 54  .** of the LIMIT
31f20 20 61 6e 64 20 4f 46 46 53 45 54 20 61 6e 64 20   and OFFSET and 
31f30 73 74 6f 72 65 73 20 74 68 61 74 20 76 61 6c 75  stores that valu
31f40 65 20 69 6e 20 72 5b 50 32 5d 2e 20 20 54 68 65  e in r[P2].  The
31f50 20 72 5b 50 32 5d 0a 2a 2a 20 76 61 6c 75 65 20   r[P2].** value 
31f60 63 6f 6d 70 75 74 65 64 20 69 73 20 74 68 65 20  computed is the 
31f70 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20  total number of 
31f80 72 6f 77 73 20 74 68 61 74 20 77 69 6c 6c 20 6e  rows that will n
31f90 65 65 64 20 74 6f 20 62 65 0a 2a 2a 20 76 69 73  eed to be.** vis
31fa0 69 74 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f  ited in order to
31fb0 20 63 6f 6d 70 6c 65 74 65 20 74 68 65 20 71 75   complete the qu
31fc0 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 72 5b  ery..**.** If r[
31fd0 50 33 5d 20 69 73 20 7a 65 72 6f 20 6f 72 20 6e  P3] is zero or n
31fe0 65 67 61 74 69 76 65 2c 20 74 68 61 74 20 6d 65  egative, that me
31ff0 61 6e 73 20 74 68 65 72 65 20 69 73 20 6e 6f 20  ans there is no 
32000 4f 46 46 53 45 54 0a 2a 2a 20 61 6e 64 20 72 5b  OFFSET.** and r[
32010 50 32 5d 20 69 73 20 73 65 74 20 74 6f 20 62 65  P2] is set to be
32020 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
32030 65 20 4c 49 4d 49 54 2c 20 72 5b 50 31 5d 2e 0a  e LIMIT, r[P1]..
32040 2a 2a 0a 2a 2a 20 69 66 20 72 5b 50 31 5d 20 69  **.** if r[P1] i
32050 73 20 7a 65 72 6f 20 6f 72 20 6e 65 67 61 74 69  s zero or negati
32060 76 65 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74  ve, that means t
32070 68 65 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54  here is no LIMIT
32080 0a 2a 2a 20 61 6e 64 20 72 5b 50 32 5d 20 69 73  .** and r[P2] is
32090 20 73 65 74 20 74 6f 20 2d 31 2e 20 0a 2a 2a 0a   set to -1. .**.
320a0 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c 20 72 5b  ** Otherwise, r[
320b0 50 32 5d 20 69 73 20 73 65 74 20 74 6f 20 74 68  P2] is set to th
320c0 65 20 73 75 6d 20 6f 66 20 72 5b 50 31 5d 20 61  e sum of r[P1] a
320d0 6e 64 20 72 5b 50 33 5d 2e 0a 2a 2f 0a 63 61 73  nd r[P3]..*/.cas
320e0 65 20 4f 50 5f 4f 66 66 73 65 74 4c 69 6d 69 74  e OP_OffsetLimit
320f0 3a 20 7b 20 20 20 20 2f 2a 20 69 6e 31 2c 20 6f  : {    /* in1, o
32100 75 74 32 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 36  ut2, in3 */.  i6
32110 34 20 78 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  4 x;.  pIn1 = &a
32120 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
32130 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
32140 2d 3e 70 33 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  ->p3];.  pOut = 
32150 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
32160 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65 72 74  , pOp);.  assert
32170 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
32180 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73  MEM_Int );.  ass
32190 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73  ert( pIn3->flags
321a0 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20   & MEM_Int );.  
321b0 78 20 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20  x = pIn1->u.i;. 
321c0 20 69 66 28 20 78 3c 3d 30 20 7c 7c 20 73 71 6c   if( x<=0 || sql
321d0 69 74 65 33 41 64 64 49 6e 74 36 34 28 26 78 2c  ite3AddInt64(&x,
321e0 20 70 49 6e 33 2d 3e 75 2e 69 3e 30 3f 70 49 6e   pIn3->u.i>0?pIn
321f0 33 2d 3e 75 2e 69 3a 30 29 20 29 7b 0a 20 20 20  3->u.i:0) ){.   
32200 20 2f 2a 20 49 66 20 74 68 65 20 4c 49 4d 49 54   /* If the LIMIT
32210 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72   is less than or
32220 20 65 71 75 61 6c 20 74 6f 20 7a 65 72 6f 2c 20   equal to zero, 
32230 6c 6f 6f 70 20 66 6f 72 65 76 65 72 2e 20 20 54  loop forever.  T
32240 68 69 73 0a 20 20 20 20 2a 2a 20 69 73 20 64 6f  his.    ** is do
32250 63 75 6d 65 6e 74 65 64 2e 20 20 42 75 74 20 61  cumented.  But a
32260 6c 73 6f 2c 20 69 66 20 74 68 65 20 4c 49 4d 49  lso, if the LIMI
32270 54 2b 4f 46 46 53 45 54 20 65 78 63 65 65 64 73  T+OFFSET exceeds
32280 20 32 5e 36 33 20 74 68 65 6e 0a 20 20 20 20 2a   2^63 then.    *
32290 2a 20 61 6c 73 6f 20 6c 6f 6f 70 20 66 6f 72 65  * also loop fore
322a0 76 65 72 2e 20 20 54 68 69 73 20 69 73 20 75 6e  ver.  This is un
322b0 64 6f 63 75 6d 65 6e 74 65 64 2e 20 20 49 6e 20  documented.  In 
322c0 66 61 63 74 2c 20 6f 6e 65 20 63 6f 75 6c 64 20  fact, one could 
322d0 61 72 67 75 65 0a 20 20 20 20 2a 2a 20 74 68 61  argue.    ** tha
322e0 74 20 74 68 65 20 6c 6f 6f 70 20 73 68 6f 75 6c  t the loop shoul
322f0 64 20 74 65 72 6d 69 6e 61 74 65 2e 20 20 42 75  d terminate.  Bu
32300 74 20 61 73 73 75 6d 69 6e 67 20 31 20 62 69 6c  t assuming 1 bil
32310 6c 69 6f 6e 20 69 74 65 72 61 74 69 6f 6e 73 0a  lion iterations.
32320 20 20 20 20 2a 2a 20 70 65 72 20 73 65 63 6f 6e      ** per secon
32330 64 20 28 66 61 72 20 65 78 63 65 65 64 69 6e 67  d (far exceeding
32340 20 74 68 65 20 63 61 70 61 62 69 6c 69 74 69 65   the capabilitie
32350 73 20 6f 66 20 61 6e 79 20 63 75 72 72 65 6e 74  s of any current
32360 20 68 61 72 64 77 61 72 65 29 0a 20 20 20 20 2a   hardware).    *
32370 2a 20 69 74 20 77 6f 75 6c 64 20 74 61 6b 65 20  * it would take 
32380 6e 65 61 72 6c 79 20 33 30 30 20 79 65 61 72 73  nearly 300 years
32390 20 74 6f 20 61 63 74 75 61 6c 6c 79 20 72 65 61   to actually rea
323a0 63 68 20 74 68 65 20 6c 69 6d 69 74 2e 20 20 53  ch the limit.  S
323b0 6f 0a 20 20 20 20 2a 2a 20 6c 6f 6f 70 69 6e 67  o.    ** looping
323c0 20 66 6f 72 65 76 65 72 20 69 73 20 61 20 72 65   forever is a re
323d0 61 73 6f 6e 61 62 6c 65 20 61 70 70 72 6f 78 69  asonable approxi
323e0 6d 61 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20 70  mation. */.    p
323f0 4f 75 74 2d 3e 75 2e 69 20 3d 20 2d 31 3b 0a 20  Out->u.i = -1;. 
32400 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4f 75 74   }else{.    pOut
32410 2d 3e 75 2e 69 20 3d 20 78 3b 0a 20 20 7d 0a 20  ->u.i = x;.  }. 
32420 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
32430 63 6f 64 65 3a 20 49 66 4e 6f 74 5a 65 72 6f 20  code: IfNotZero 
32440 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
32450 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31  ynopsis: if r[P1
32460 5d 21 3d 30 20 74 68 65 6e 20 72 5b 50 31 5d 2d  ]!=0 then r[P1]-
32470 2d 2c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  -, goto P2.**.**
32480 20 52 65 67 69 73 74 65 72 20 50 31 20 6d 75 73   Register P1 mus
32490 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74  t contain an int
324a0 65 67 65 72 2e 20 20 49 66 20 74 68 65 20 63 6f  eger.  If the co
324b0 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
324c0 72 20 50 31 20 69 73 0a 2a 2a 20 69 6e 69 74 69  r P1 is.** initi
324d0 61 6c 6c 79 20 67 72 65 61 74 65 72 20 74 68 61  ally greater tha
324e0 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 20 64 65 63  n zero, then dec
324f0 72 65 6d 65 6e 74 20 74 68 65 20 76 61 6c 75 65  rement the value
32500 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
32510 0a 2a 2a 20 49 66 20 69 74 20 69 73 20 6e 6f 6e  .** If it is non
32520 2d 7a 65 72 6f 20 28 6e 65 67 61 74 69 76 65 20  -zero (negative 
32530 6f 72 20 70 6f 73 69 74 69 76 65 29 20 61 6e 64  or positive) and
32540 20 74 68 65 6e 20 61 6c 73 6f 20 6a 75 6d 70 20   then also jump 
32550 74 6f 20 50 32 2e 20 20 0a 2a 2a 20 49 66 20 72  to P2.  .** If r
32560 65 67 69 73 74 65 72 20 50 31 20 69 73 20 69 6e  egister P1 is in
32570 69 74 69 61 6c 6c 79 20 7a 65 72 6f 2c 20 6c 65  itially zero, le
32580 61 76 65 20 69 74 20 75 6e 63 68 61 6e 67 65 64  ave it unchanged
32590 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67   and fall throug
325a0 68 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66  h..*/.case OP_If
325b0 4e 6f 74 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20  NotZero: {      
325c0 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
325d0 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
325e0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
325f0 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
32600 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 56 64  &MEM_Int );.  Vd
32610 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 49  beBranchTaken(pI
32620 6e 31 2d 3e 75 2e 69 3c 30 2c 20 32 29 3b 0a 20  n1->u.i<0, 2);. 
32630 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 20 29   if( pIn1->u.i )
32640 7b 0a 20 20 20 20 20 69 66 28 20 70 49 6e 31 2d  {.     if( pIn1-
32650 3e 75 2e 69 3e 30 20 29 20 70 49 6e 31 2d 3e 75  >u.i>0 ) pIn1->u
32660 2e 69 2d 2d 3b 0a 20 20 20 20 20 67 6f 74 6f 20  .i--;.     goto 
32670 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a  jump_to_p2;.  }.
32680 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
32690 70 63 6f 64 65 3a 20 44 65 63 72 4a 75 6d 70 5a  pcode: DecrJumpZ
326a0 65 72 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ero P1 P2 * * *.
326b0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
326c0 28 2d 2d 72 5b 50 31 5d 29 3d 3d 30 20 67 6f 74  (--r[P1])==0 got
326d0 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73  o P2.**.** Regis
326e0 74 65 72 20 50 31 20 6d 75 73 74 20 68 6f 6c 64  ter P1 must hold
326f0 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 44 65   an integer.  De
32700 63 72 65 6d 65 6e 74 20 74 68 65 20 76 61 6c 75  crement the valu
32710 65 20 69 6e 20 50 31 0a 2a 2a 20 61 6e 64 20 6a  e in P1.** and j
32720 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
32730 20 6e 65 77 20 76 61 6c 75 65 20 69 73 20 65 78   new value is ex
32740 61 63 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2f 0a 63  actly zero..*/.c
32750 61 73 65 20 4f 50 5f 44 65 63 72 4a 75 6d 70 5a  ase OP_DecrJumpZ
32760 65 72 6f 3a 20 7b 20 20 20 20 20 20 2f 2a 20 6a  ero: {      /* j
32770 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
32780 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
32790 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
327a0 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49  In1->flags&MEM_I
327b0 6e 74 20 29 3b 0a 20 20 69 66 28 20 70 49 6e 31  nt );.  if( pIn1
327c0 2d 3e 75 2e 69 3e 53 4d 41 4c 4c 45 53 54 5f 49  ->u.i>SMALLEST_I
327d0 4e 54 36 34 20 29 20 70 49 6e 31 2d 3e 75 2e 69  NT64 ) pIn1->u.i
327e0 2d 2d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68  --;.  VdbeBranch
327f0 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3d  Taken(pIn1->u.i=
32800 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 49  =0, 2);.  if( pI
32810 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29 20 67 6f 74  n1->u.i==0 ) got
32820 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
32830 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70  break;.}.../* Op
32840 63 6f 64 65 3a 20 41 67 67 53 74 65 70 30 20 2a  code: AggStep0 *
32850 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
32860 53 79 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d  Synopsis: accum=
32870 72 5b 50 33 5d 20 73 74 65 70 28 72 5b 50 32 40  r[P3] step(r[P2@
32880 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75  P5]).**.** Execu
32890 74 65 20 74 68 65 20 73 74 65 70 20 66 75 6e 63  te the step func
328a0 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67 72  tion for an aggr
328b0 65 67 61 74 65 2e 20 20 54 68 65 0a 2a 2a 20 66  egate.  The.** f
328c0 75 6e 63 74 69 6f 6e 20 68 61 73 20 50 35 20 61  unction has P5 a
328d0 72 67 75 6d 65 6e 74 73 2e 20 20 20 50 34 20 69  rguments.   P4 i
328e0 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
328f0 68 65 20 46 75 6e 63 44 65 66 0a 2a 2a 20 73 74  he FuncDef.** st
32900 72 75 63 74 75 72 65 20 74 68 61 74 20 73 70 65  ructure that spe
32910 63 69 66 69 65 73 20 74 68 65 20 66 75 6e 63 74  cifies the funct
32920 69 6f 6e 2e 20 20 52 65 67 69 73 74 65 72 20 50  ion.  Register P
32930 33 20 69 73 20 74 68 65 0a 2a 2a 20 61 63 63 75  3 is the.** accu
32940 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54  mulator..**.** T
32950 68 65 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20  he P5 arguments 
32960 61 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72  are taken from r
32970 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 69  egister P2 and i
32980 74 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73  ts.** successors
32990 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
329a0 41 67 67 53 74 65 70 20 2a 20 50 32 20 50 33 20  AggStep * P2 P3 
329b0 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
329c0 73 3a 20 61 63 63 75 6d 3d 72 5b 50 33 5d 20 73  s: accum=r[P3] s
329d0 74 65 70 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a  tep(r[P2@P5]).**
329e0 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20  .** Execute the 
329f0 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 66 6f  step function fo
32a00 72 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20  r an aggregate. 
32a10 20 54 68 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e   The.** function
32a20 20 68 61 73 20 50 35 20 61 72 67 75 6d 65 6e 74   has P5 argument
32a30 73 2e 20 20 20 50 34 20 69 73 20 61 20 70 6f 69  s.   P4 is a poi
32a40 6e 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74  nter to an sqlit
32a50 65 33 5f 63 6f 6e 74 65 78 74 0a 2a 2a 20 6f 62  e3_context.** ob
32a60 6a 65 63 74 20 74 68 61 74 20 69 73 20 75 73 65  ject that is use
32a70 64 20 74 6f 20 72 75 6e 20 74 68 65 20 66 75 6e  d to run the fun
32a80 63 74 69 6f 6e 2e 20 20 52 65 67 69 73 74 65 72  ction.  Register
32a90 20 50 33 20 69 73 0a 2a 2a 20 61 73 20 74 68 65   P3 is.** as the
32aa0 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a   accumulator..**
32ab0 0a 2a 2a 20 54 68 65 20 50 35 20 61 72 67 75 6d  .** The P5 argum
32ac0 65 6e 74 73 20 61 72 65 20 74 61 6b 65 6e 20 66  ents are taken f
32ad0 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32 20  rom register P2 
32ae0 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63 63 65  and its.** succe
32af0 73 73 6f 72 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  ssors..**.** Thi
32b00 73 20 6f 70 63 6f 64 65 20 69 73 20 69 6e 69 74  s opcode is init
32b10 69 61 6c 6c 79 20 63 6f 64 65 64 20 61 73 20 4f  ially coded as O
32b20 50 5f 41 67 67 53 74 65 70 30 2e 20 20 4f 6e 20  P_AggStep0.  On 
32b30 66 69 72 73 74 20 65 76 61 6c 75 61 74 69 6f 6e  first evaluation
32b40 2c 0a 2a 2a 20 74 68 65 20 46 75 6e 63 44 65 66  ,.** the FuncDef
32b50 20 73 74 6f 72 65 64 20 69 6e 20 50 34 20 69 73   stored in P4 is
32b60 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20   converted into 
32b70 61 6e 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  an sqlite3_conte
32b80 78 74 20 61 6e 64 0a 2a 2a 20 74 68 65 20 6f 70  xt and.** the op
32b90 63 6f 64 65 20 69 73 20 63 68 61 6e 67 65 64 2e  code is changed.
32ba0 20 20 49 6e 20 74 68 69 73 20 77 61 79 2c 20 74    In this way, t
32bb0 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  he initializatio
32bc0 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 71 6c 69  n of the.** sqli
32bd0 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f 6e 6c 79  te3_context only
32be0 20 68 61 70 70 65 6e 73 20 6f 6e 63 65 2c 20 69   happens once, i
32bf0 6e 73 74 65 61 64 20 6f 66 20 6f 6e 20 65 61 63  nstead of on eac
32c00 68 20 63 61 6c 6c 20 74 6f 20 74 68 65 0a 2a 2a  h call to the.**
32c10 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 2e 0a   step function..
32c20 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67 53 74  */.case OP_AggSt
32c30 65 70 30 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a  ep0: {.  int n;.
32c40 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78    sqlite3_contex
32c50 74 20 2a 70 43 74 78 3b 0a 0a 20 20 61 73 73 65  t *pCtx;..  asse
32c60 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
32c70 3d 50 34 5f 46 55 4e 43 44 45 46 20 29 3b 0a 20  =P4_FUNCDEF );. 
32c80 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20   n = pOp->p5;.  
32c90 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
32ca0 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  0 && pOp->p3<=(p
32cb0 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
32cc0 75 72 73 6f 72 29 20 29 3b 0a 20 20 61 73 73 65  ursor) );.  asse
32cd0 72 74 28 20 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70  rt( n==0 || (pOp
32ce0 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p2>0 && pOp->p
32cf0 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  2+n<=(p->nMem+1 
32d00 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 29  - p->nCursor)+1)
32d10 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
32d20 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c  p->p3<pOp->p2 ||
32d30 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70   pOp->p3>=pOp->p
32d40 32 2b 6e 20 29 3b 0a 20 20 70 43 74 78 20 3d 20  2+n );.  pCtx = 
32d50 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52  sqlite3DbMallocR
32d60 61 77 4e 4e 28 64 62 2c 20 73 69 7a 65 6f 66 28  awNN(db, sizeof(
32d70 2a 70 43 74 78 29 20 2b 20 28 6e 2d 31 29 2a 73  *pCtx) + (n-1)*s
32d80 69 7a 65 6f 66 28 73 71 6c 69 74 65 33 5f 76 61  izeof(sqlite3_va
32d90 6c 75 65 2a 29 29 3b 0a 20 20 69 66 28 20 70 43  lue*));.  if( pC
32da0 74 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  tx==0 ) goto no_
32db0 6d 65 6d 3b 0a 20 20 70 43 74 78 2d 3e 70 4d 65  mem;.  pCtx->pMe
32dc0 6d 20 3d 20 30 3b 0a 20 20 70 43 74 78 2d 3e 70  m = 0;.  pCtx->p
32dd0 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Func = pOp->p4.p
32de0 46 75 6e 63 3b 0a 20 20 70 43 74 78 2d 3e 69 4f  Func;.  pCtx->iO
32df0 70 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20  p = (int)(pOp - 
32e00 61 4f 70 29 3b 0a 20 20 70 43 74 78 2d 3e 70 56  aOp);.  pCtx->pV
32e10 64 62 65 20 3d 20 70 3b 0a 20 20 70 43 74 78 2d  dbe = p;.  pCtx-
32e20 3e 61 72 67 63 20 3d 20 6e 3b 0a 20 20 70 4f 70  >argc = n;.  pOp
32e30 2d 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 46 55  ->p4type = P4_FU
32e40 4e 43 43 54 58 3b 0a 20 20 70 4f 70 2d 3e 70 34  NCCTX;.  pOp->p4
32e50 2e 70 43 74 78 20 3d 20 70 43 74 78 3b 0a 20 20  .pCtx = pCtx;.  
32e60 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50  pOp->opcode = OP
32e70 5f 41 67 67 53 74 65 70 3b 0a 20 20 2f 2a 20 46  _AggStep;.  /* F
32e80 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f  all through into
32e90 20 4f 50 5f 41 67 67 53 74 65 70 20 2a 2f 0a 7d   OP_AggStep */.}
32ea0 0a 63 61 73 65 20 4f 50 5f 41 67 67 53 74 65 70  .case OP_AggStep
32eb0 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73  : {.  int i;.  s
32ec0 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
32ed0 70 43 74 78 3b 0a 20 20 4d 65 6d 20 2a 70 4d 65  pCtx;.  Mem *pMe
32ee0 6d 3b 0a 20 20 4d 65 6d 20 74 3b 0a 0a 20 20 61  m;.  Mem t;..  a
32ef0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
32f00 70 65 3d 3d 50 34 5f 46 55 4e 43 43 54 58 20 29  pe==P4_FUNCCTX )
32f10 3b 0a 20 20 70 43 74 78 20 3d 20 70 4f 70 2d 3e  ;.  pCtx = pOp->
32f20 70 34 2e 70 43 74 78 3b 0a 20 20 70 4d 65 6d 20  p4.pCtx;.  pMem 
32f30 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
32f40 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69 73 20  ;..  /* If this 
32f50 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6e 73 69  function is insi
32f60 64 65 20 6f 66 20 61 20 74 72 69 67 67 65 72 2c  de of a trigger,
32f70 20 74 68 65 20 72 65 67 69 73 74 65 72 20 61 72   the register ar
32f80 72 61 79 20 69 6e 20 61 4d 65 6d 5b 5d 0a 20 20  ray in aMem[].  
32f90 2a 2a 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20  ** might change 
32fa0 66 72 6f 6d 20 6f 6e 65 20 65 76 61 6c 75 61 74  from one evaluat
32fb0 69 6f 6e 20 74 6f 20 74 68 65 20 6e 65 78 74 2e  ion to the next.
32fc0 20 20 54 68 65 20 6e 65 78 74 20 62 6c 6f 63 6b    The next block
32fd0 20 6f 66 20 63 6f 64 65 0a 20 20 2a 2a 20 63 68   of code.  ** ch
32fe0 65 63 6b 73 20 74 6f 20 73 65 65 20 69 66 20 74  ecks to see if t
32ff0 68 65 20 72 65 67 69 73 74 65 72 20 61 72 72 61  he register arra
33000 79 20 68 61 73 20 63 68 61 6e 67 65 64 2c 20 61  y has changed, a
33010 6e 64 20 69 66 20 73 6f 20 69 74 0a 20 20 2a 2a  nd if so it.  **
33020 20 72 65 69 6e 69 74 69 61 6c 69 7a 65 73 20 74   reinitializes t
33030 68 65 20 72 65 6c 61 76 61 6e 74 20 70 61 72 74  he relavant part
33040 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33  s of the sqlite3
33050 5f 63 6f 6e 74 65 78 74 20 6f 62 6a 65 63 74 20  _context object 
33060 2a 2f 0a 20 20 69 66 28 20 70 43 74 78 2d 3e 70  */.  if( pCtx->p
33070 4d 65 6d 20 21 3d 20 70 4d 65 6d 20 29 7b 0a 20  Mem != pMem ){. 
33080 20 20 20 70 43 74 78 2d 3e 70 4d 65 6d 20 3d 20     pCtx->pMem = 
33090 70 4d 65 6d 3b 0a 20 20 20 20 66 6f 72 28 69 3d  pMem;.    for(i=
330a0 70 43 74 78 2d 3e 61 72 67 63 2d 31 3b 20 69 3e  pCtx->argc-1; i>
330b0 3d 30 3b 20 69 2d 2d 29 20 70 43 74 78 2d 3e 61  =0; i--) pCtx->a
330c0 72 67 76 5b 69 5d 20 3d 20 26 61 4d 65 6d 5b 70  rgv[i] = &aMem[p
330d0 4f 70 2d 3e 70 32 2b 69 5d 3b 0a 20 20 7d 0a 0a  Op->p2+i];.  }..
330e0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
330f0 42 55 47 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69  BUG.  for(i=0; i
33100 3c 70 43 74 78 2d 3e 61 72 67 63 3b 20 69 2b 2b  <pCtx->argc; i++
33110 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  ){.    assert( m
33120 65 6d 49 73 56 61 6c 69 64 28 70 43 74 78 2d 3e  emIsValid(pCtx->
33130 61 72 67 76 5b 69 5d 29 20 29 3b 0a 20 20 20 20  argv[i]) );.    
33140 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
33150 4f 70 2d 3e 70 32 2b 69 2c 20 70 43 74 78 2d 3e  Op->p2+i, pCtx->
33160 61 72 67 76 5b 69 5d 29 3b 0a 20 20 7d 0a 23 65  argv[i]);.  }.#e
33170 6e 64 69 66 0a 0a 20 20 70 4d 65 6d 2d 3e 6e 2b  ndif..  pMem->n+
33180 2b 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  +;.  sqlite3Vdbe
33190 4d 65 6d 49 6e 69 74 28 26 74 2c 20 64 62 2c 20  MemInit(&t, db, 
331a0 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 70 43 74  MEM_Null);.  pCt
331b0 78 2d 3e 70 4f 75 74 20 3d 20 26 74 3b 0a 20 20  x->pOut = &t;.  
331c0 70 43 74 78 2d 3e 66 45 72 72 6f 72 4f 72 41 75  pCtx->fErrorOrAu
331d0 78 20 3d 20 30 3b 0a 20 20 70 43 74 78 2d 3e 73  x = 0;.  pCtx->s
331e0 6b 69 70 46 6c 61 67 20 3d 20 30 3b 0a 20 20 28  kipFlag = 0;.  (
331f0 70 43 74 78 2d 3e 70 46 75 6e 63 2d 3e 78 53 46  pCtx->pFunc->xSF
33200 75 6e 63 29 28 70 43 74 78 2c 70 43 74 78 2d 3e  unc)(pCtx,pCtx->
33210 61 72 67 63 2c 70 43 74 78 2d 3e 61 72 67 76 29  argc,pCtx->argv)
33220 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 34 35 30  ; /* IMP: R-2450
33230 35 2d 32 33 32 33 30 20 2a 2f 0a 20 20 69 66 28  5-23230 */.  if(
33240 20 70 43 74 78 2d 3e 66 45 72 72 6f 72 4f 72 41   pCtx->fErrorOrA
33250 75 78 20 29 7b 0a 20 20 20 20 69 66 28 20 70 43  ux ){.    if( pC
33260 74 78 2d 3e 69 73 45 72 72 6f 72 20 29 7b 0a 20  tx->isError ){. 
33270 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
33280 45 72 72 6f 72 28 70 2c 20 22 25 73 22 2c 20 73  Error(p, "%s", s
33290 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
332a0 74 28 26 74 29 29 3b 0a 20 20 20 20 20 20 72 63  t(&t));.      rc
332b0 20 3d 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72   = pCtx->isError
332c0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
332d0 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73  te3VdbeMemReleas
332e0 65 28 26 74 29 3b 0a 20 20 20 20 69 66 28 20 72  e(&t);.    if( r
332f0 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
33300 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d  ue_to_error;.  }
33310 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
33320 28 20 74 2e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 4e  ( t.flags==MEM_N
33330 75 6c 6c 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28  ull );.  }.  if(
33340 20 70 43 74 78 2d 3e 73 6b 69 70 46 6c 61 67 20   pCtx->skipFlag 
33350 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
33360 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f  Op[-1].opcode==O
33370 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20  P_CollSeq );.   
33380 20 69 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 31 3b   i = pOp[-1].p1;
33390 0a 20 20 20 20 69 66 28 20 69 20 29 20 73 71 6c  .    if( i ) sql
333a0 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e  ite3VdbeMemSetIn
333b0 74 36 34 28 26 61 4d 65 6d 5b 69 5d 2c 20 31 29  t64(&aMem[i], 1)
333c0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
333d0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67  ../* Opcode: Agg
333e0 46 69 6e 61 6c 20 50 31 20 50 32 20 2a 20 50 34  Final P1 P2 * P4
333f0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
33400 61 63 63 75 6d 3d 72 5b 50 31 5d 20 4e 3d 50 32  accum=r[P1] N=P2
33410 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74  .**.** Execute t
33420 68 65 20 66 69 6e 61 6c 69 7a 65 72 20 66 75 6e  he finalizer fun
33430 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67  ction for an agg
33440 72 65 67 61 74 65 2e 20 20 50 31 20 69 73 0a 2a  regate.  P1 is.*
33450 2a 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63  * the memory loc
33460 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20 74 68  ation that is th
33470 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 66 6f  e accumulator fo
33480 72 20 74 68 65 20 61 67 67 72 65 67 61 74 65 2e  r the aggregate.
33490 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65  .**.** P2 is the
334a0 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   number of argum
334b0 65 6e 74 73 20 74 68 61 74 20 74 68 65 20 73 74  ents that the st
334c0 65 70 20 66 75 6e 63 74 69 6f 6e 20 74 61 6b 65  ep function take
334d0 73 20 61 6e 64 0a 2a 2a 20 50 34 20 69 73 20 61  s and.** P4 is a
334e0 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
334f0 46 75 6e 63 44 65 66 20 66 6f 72 20 74 68 69 73  FuncDef for this
33500 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68 65 20   function.  The 
33510 50 32 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 69  P2.** argument i
33520 73 20 6e 6f 74 20 75 73 65 64 20 62 79 20 74 68  s not used by th
33530 69 73 20 6f 70 63 6f 64 65 2e 20 20 49 74 20 69  is opcode.  It i
33540 73 20 6f 6e 6c 79 20 74 68 65 72 65 20 74 6f 20  s only there to 
33550 64 69 73 61 6d 62 69 67 75 61 74 65 0a 2a 2a 20  disambiguate.** 
33560 66 75 6e 63 74 69 6f 6e 73 20 74 68 61 74 20 63  functions that c
33570 61 6e 20 74 61 6b 65 20 76 61 72 79 69 6e 67 20  an take varying 
33580 6e 75 6d 62 65 72 73 20 6f 66 20 61 72 67 75 6d  numbers of argum
33590 65 6e 74 73 2e 20 20 54 68 65 0a 2a 2a 20 50 34  ents.  The.** P4
335a0 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6e 6c   argument is onl
335b0 79 20 6e 65 65 64 65 64 20 66 6f 72 20 74 68 65  y needed for the
335c0 20 64 65 67 65 6e 65 72 61 74 65 20 63 61 73 65   degenerate case
335d0 20 77 68 65 72 65 0a 2a 2a 20 74 68 65 20 73 74   where.** the st
335e0 65 70 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20  ep function was 
335f0 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 63  not previously c
33600 61 6c 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  alled..*/.case O
33610 50 5f 41 67 67 46 69 6e 61 6c 3a 20 7b 0a 20 20  P_AggFinal: {.  
33620 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 61 73 73  Mem *pMem;.  ass
33630 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26  ert( pOp->p1>0 &
33640 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e  & pOp->p1<=(p->n
33650 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
33660 6f 72 29 20 29 3b 0a 20 20 70 4d 65 6d 20 3d 20  or) );.  pMem = 
33670 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
33680 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d    assert( (pMem-
33690 3e 66 6c 61 67 73 20 26 20 7e 28 4d 45 4d 5f 4e  >flags & ~(MEM_N
336a0 75 6c 6c 7c 4d 45 4d 5f 41 67 67 29 29 3d 3d 30  ull|MEM_Agg))==0
336b0 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
336c0 65 33 56 64 62 65 4d 65 6d 46 69 6e 61 6c 69 7a  e3VdbeMemFinaliz
336d0 65 28 70 4d 65 6d 2c 20 70 4f 70 2d 3e 70 34 2e  e(pMem, pOp->p4.
336e0 70 46 75 6e 63 29 3b 0a 20 20 69 66 28 20 72 63  pFunc);.  if( rc
336f0 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
33700 64 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22  dbeError(p, "%s"
33710 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  , sqlite3_value_
33720 74 65 78 74 28 70 4d 65 6d 29 29 3b 0a 20 20 20  text(pMem));.   
33730 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
33740 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20  to_error;.  }.  
33750 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
33760 65 45 6e 63 6f 64 69 6e 67 28 70 4d 65 6d 2c 20  eEncoding(pMem, 
33770 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50 44  encoding);.  UPD
33780 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
33790 28 70 4d 65 6d 29 3b 0a 20 20 69 66 28 20 73 71  (pMem);.  if( sq
337a0 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42  lite3VdbeMemTooB
337b0 69 67 28 70 4d 65 6d 29 20 29 7b 0a 20 20 20 20  ig(pMem) ){.    
337c0 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
337d0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69  }.  break;.}..#i
337e0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
337f0 54 5f 57 41 4c 0a 2f 2a 20 4f 70 63 6f 64 65 3a  T_WAL./* Opcode:
33800 20 43 68 65 63 6b 70 6f 69 6e 74 20 50 31 20 50   Checkpoint P1 P
33810 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43  2 P3 * *.**.** C
33820 68 65 63 6b 70 6f 69 6e 74 20 64 61 74 61 62 61  heckpoint databa
33830 73 65 20 50 31 2e 20 54 68 69 73 20 69 73 20 61  se P1. This is a
33840 20 6e 6f 2d 6f 70 20 69 66 20 50 31 20 69 73 20   no-op if P1 is 
33850 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  not currently in
33860 0a 2a 2a 20 57 41 4c 20 6d 6f 64 65 2e 20 50 61  .** WAL mode. Pa
33870 72 61 6d 65 74 65 72 20 50 32 20 69 73 20 6f 6e  rameter P2 is on
33880 65 20 6f 66 20 53 51 4c 49 54 45 5f 43 48 45 43  e of SQLITE_CHEC
33890 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 2c 20  KPOINT_PASSIVE, 
338a0 46 55 4c 4c 2c 0a 2a 2a 20 52 45 53 54 41 52 54  FULL,.** RESTART
338b0 2c 20 6f 72 20 54 52 55 4e 43 41 54 45 2e 20 20  , or TRUNCATE.  
338c0 57 72 69 74 65 20 31 20 6f 72 20 30 20 69 6e 74  Write 1 or 0 int
338d0 6f 20 6d 65 6d 5b 50 33 5d 20 69 66 20 74 68 65  o mem[P3] if the
338e0 20 63 68 65 63 6b 70 6f 69 6e 74 20 72 65 74 75   checkpoint retu
338f0 72 6e 73 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55  rns.** SQLITE_BU
33900 53 59 20 6f 72 20 6e 6f 74 2c 20 72 65 73 70 65  SY or not, respe
33910 63 74 69 76 65 6c 79 2e 20 20 57 72 69 74 65 20  ctively.  Write 
33920 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  the number of pa
33930 67 65 73 20 69 6e 20 74 68 65 0a 2a 2a 20 57 41  ges in the.** WA
33940 4c 20 61 66 74 65 72 20 74 68 65 20 63 68 65 63  L after the chec
33950 6b 70 6f 69 6e 74 20 69 6e 74 6f 20 6d 65 6d 5b  kpoint into mem[
33960 50 33 2b 31 5d 20 61 6e 64 20 74 68 65 20 6e 75  P3+1] and the nu
33970 6d 62 65 72 20 6f 66 20 70 61 67 65 73 0a 2a 2a  mber of pages.**
33980 20 69 6e 20 74 68 65 20 57 41 4c 20 74 68 61 74   in the WAL that
33990 20 68 61 76 65 20 62 65 65 6e 20 63 68 65 63 6b   have been check
339a0 70 6f 69 6e 74 65 64 20 61 66 74 65 72 20 74 68  pointed after th
339b0 65 20 63 68 65 63 6b 70 6f 69 6e 74 0a 2a 2a 20  e checkpoint.** 
339c0 63 6f 6d 70 6c 65 74 65 73 20 69 6e 74 6f 20 6d  completes into m
339d0 65 6d 5b 50 33 2b 32 5d 2e 20 20 48 6f 77 65 76  em[P3+2].  Howev
339e0 65 72 20 6f 6e 20 61 6e 20 65 72 72 6f 72 2c 20  er on an error, 
339f0 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 0a 2a 2a  mem[P3+1] and.**
33a00 20 6d 65 6d 5b 50 33 2b 32 5d 20 61 72 65 20 69   mem[P3+2] are i
33a10 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 2d 31  nitialized to -1
33a20 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 68 65  ..*/.case OP_Che
33a30 63 6b 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74  ckpoint: {.  int
33a40 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   i;             
33a50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
33a60 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  Loop counter */.
33a70 20 20 69 6e 74 20 61 52 65 73 5b 33 5d 3b 20 20    int aRes[3];  
33a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33a90 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 2a 2f 0a    /* Results */.
33aa0 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20    Mem *pMem;    
33ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33ac0 20 20 2f 2a 20 57 72 69 74 65 20 72 65 73 75 6c    /* Write resul
33ad0 74 73 20 68 65 72 65 20 2a 2f 0a 0a 20 20 61 73  ts here */..  as
33ae0 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
33af0 79 3d 3d 30 20 29 3b 0a 20 20 61 52 65 73 5b 30  y==0 );.  aRes[0
33b00 5d 20 3d 20 30 3b 0a 20 20 61 52 65 73 5b 31 5d  ] = 0;.  aRes[1]
33b10 20 3d 20 61 52 65 73 5b 32 5d 20 3d 20 2d 31 3b   = aRes[2] = -1;
33b20 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
33b30 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b  p2==SQLITE_CHECK
33b40 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 0a 20 20  POINT_PASSIVE.  
33b50 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d       || pOp->p2=
33b60 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49  =SQLITE_CHECKPOI
33b70 4e 54 5f 46 55 4c 4c 0a 20 20 20 20 20 20 20 7c  NT_FULL.       |
33b80 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54  | pOp->p2==SQLIT
33b90 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 52 45 53  E_CHECKPOINT_RES
33ba0 54 41 52 54 0a 20 20 20 20 20 20 20 7c 7c 20 70  TART.       || p
33bb0 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43  Op->p2==SQLITE_C
33bc0 48 45 43 4b 50 4f 49 4e 54 5f 54 52 55 4e 43 41  HECKPOINT_TRUNCA
33bd0 54 45 0a 20 20 29 3b 0a 20 20 72 63 20 3d 20 73  TE.  );.  rc = s
33be0 71 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74  qlite3Checkpoint
33bf0 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  (db, pOp->p1, pO
33c00 70 2d 3e 70 32 2c 20 26 61 52 65 73 5b 31 5d 2c  p->p2, &aRes[1],
33c10 20 26 61 52 65 73 5b 32 5d 29 3b 0a 20 20 69 66   &aRes[2]);.  if
33c20 28 20 72 63 20 29 7b 0a 20 20 20 20 69 66 28 20  ( rc ){.    if( 
33c30 72 63 21 3d 53 51 4c 49 54 45 5f 42 55 53 59 20  rc!=SQLITE_BUSY 
33c40 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
33c50 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 72  _to_error;.    r
33c60 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20  c = SQLITE_OK;. 
33c70 20 20 20 61 52 65 73 5b 30 5d 20 3d 20 31 3b 0a     aRes[0] = 1;.
33c80 20 20 7d 0a 20 20 66 6f 72 28 69 3d 30 2c 20 70    }.  for(i=0, p
33c90 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Mem = &aMem[pOp-
33ca0 3e 70 33 5d 3b 20 69 3c 33 3b 20 69 2b 2b 2c 20  >p3]; i<3; i++, 
33cb0 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 73 71 6c  pMem++){.    sql
33cc0 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e  ite3VdbeMemSetIn
33cd0 74 36 34 28 70 4d 65 6d 2c 20 28 69 36 34 29 61  t64(pMem, (i64)a
33ce0 52 65 73 5b 69 5d 29 3b 0a 20 20 7d 20 20 20 20  Res[i]);.  }    
33cf0 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 20 20 0a 23  .  break;.};  .#
33d00 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
33d10 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d  QLITE_OMIT_PRAGM
33d20 41 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 6f 75  A./* Opcode: Jou
33d30 72 6e 61 6c 4d 6f 64 65 20 50 31 20 50 32 20 50  rnalMode P1 P2 P
33d40 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 61 6e  3 * *.**.** Chan
33d50 67 65 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 6d  ge the journal m
33d60 6f 64 65 20 6f 66 20 64 61 74 61 62 61 73 65 20  ode of database 
33d70 50 31 20 74 6f 20 50 33 2e 20 50 33 20 6d 75 73  P1 to P3. P3 mus
33d80 74 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 0a  t be one of the.
33d90 2a 2a 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  ** PAGER_JOURNAL
33da0 4d 4f 44 45 5f 58 58 58 20 76 61 6c 75 65 73 2e  MODE_XXX values.
33db0 20 49 66 20 63 68 61 6e 67 69 6e 67 20 62 65 74   If changing bet
33dc0 77 65 65 6e 20 74 68 65 20 76 61 72 69 6f 75 73  ween the various
33dd0 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6d 6f 64   rollback.** mod
33de0 65 73 20 28 64 65 6c 65 74 65 2c 20 74 72 75 6e  es (delete, trun
33df0 63 61 74 65 2c 20 70 65 72 73 69 73 74 2c 20 6f  cate, persist, o
33e00 66 66 20 61 6e 64 20 6d 65 6d 6f 72 79 29 2c 20  ff and memory), 
33e10 74 68 69 73 20 69 73 20 61 20 73 69 6d 70 6c 65  this is a simple
33e20 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20 4e  .** operation. N
33e30 6f 20 49 4f 20 69 73 20 72 65 71 75 69 72 65 64  o IO is required
33e40 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 63 68 61 6e 67  ..**.** If chang
33e50 69 6e 67 20 69 6e 74 6f 20 6f 72 20 6f 75 74 20  ing into or out 
33e60 6f 66 20 57 41 4c 20 6d 6f 64 65 20 74 68 65 20  of WAL mode the 
33e70 70 72 6f 63 65 64 75 72 65 20 69 73 20 6d 6f 72  procedure is mor
33e80 65 20 63 6f 6d 70 6c 69 63 61 74 65 64 2e 0a 2a  e complicated..*
33e90 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 73 74 72  *.** Write a str
33ea0 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ing containing t
33eb0 68 65 20 66 69 6e 61 6c 20 6a 6f 75 72 6e 61 6c  he final journal
33ec0 2d 6d 6f 64 65 20 74 6f 20 72 65 67 69 73 74 65  -mode to registe
33ed0 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
33ee0 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65 3a 20 7b 20  _JournalMode: { 
33ef0 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
33f00 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20 20  Btree *pBt;     
33f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33f20 2f 2a 20 42 74 72 65 65 20 74 6f 20 63 68 61 6e  /* Btree to chan
33f30 67 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20  ge journal mode 
33f40 6f 66 20 2a 2f 0a 20 20 50 61 67 65 72 20 2a 70  of */.  Pager *p
33f50 50 61 67 65 72 3b 20 20 20 20 20 20 20 20 20 20  Pager;          
33f60 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 72          /* Pager
33f70 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
33f80 20 70 42 74 20 2a 2f 0a 20 20 69 6e 74 20 65 4e   pBt */.  int eN
33f90 65 77 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ew;             
33fa0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 77            /* New
33fb0 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f   journal mode */
33fc0 0a 20 20 69 6e 74 20 65 4f 6c 64 3b 20 20 20 20  .  int eOld;    
33fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33fe0 20 20 20 2f 2a 20 54 68 65 20 6f 6c 64 20 6a 6f     /* The old jo
33ff0 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 23 69  urnal mode */.#i
34000 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
34010 54 5f 57 41 4c 0a 20 20 63 6f 6e 73 74 20 63 68  T_WAL.  const ch
34020 61 72 20 2a 7a 46 69 6c 65 6e 61 6d 65 3b 20 20  ar *zFilename;  
34030 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20          /* Name 
34040 6f 66 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  of database file
34050 20 66 6f 72 20 70 50 61 67 65 72 20 2a 2f 0a 23   for pPager */.#
34060 65 6e 64 69 66 0a 0a 20 20 70 4f 75 74 20 3d 20  endif..  pOut = 
34070 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
34080 2c 20 70 4f 70 29 3b 0a 20 20 65 4e 65 77 20 3d  , pOp);.  eNew =
34090 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65   pOp->p3;.  asse
340a0 72 74 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f  rt( eNew==PAGER_
340b0 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 44 45 4c 45  JOURNALMODE_DELE
340c0 54 45 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e  TE .       || eN
340d0 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
340e0 4c 4d 4f 44 45 5f 54 52 55 4e 43 41 54 45 20 0a  LMODE_TRUNCATE .
340f0 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d         || eNew==
34100 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
34110 45 5f 50 45 52 53 49 53 54 20 0a 20 20 20 20 20  E_PERSIST .     
34120 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52    || eNew==PAGER
34130 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46  _JOURNALMODE_OFF
34140 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d  .       || eNew=
34150 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
34160 44 45 5f 4d 45 4d 4f 52 59 0a 20 20 20 20 20 20  DE_MEMORY.      
34170 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f   || eNew==PAGER_
34180 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a  JOURNALMODE_WAL.
34190 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d         || eNew==
341a0 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
341b0 45 5f 51 55 45 52 59 0a 20 20 29 3b 0a 20 20 61  E_QUERY.  );.  a
341c0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
341d0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d  0 && pOp->p1<db-
341e0 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
341f0 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
34200 20 29 3b 0a 0a 20 20 70 42 74 20 3d 20 64 62 2d   );..  pBt = db-
34210 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42  >aDb[pOp->p1].pB
34220 74 3b 0a 20 20 70 50 61 67 65 72 20 3d 20 73 71  t;.  pPager = sq
34230 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72 28  lite3BtreePager(
34240 70 42 74 29 3b 0a 20 20 65 4f 6c 64 20 3d 20 73  pBt);.  eOld = s
34250 71 6c 69 74 65 33 50 61 67 65 72 47 65 74 4a 6f  qlite3PagerGetJo
34260 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72  urnalMode(pPager
34270 29 3b 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d 50  );.  if( eNew==P
34280 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
34290 5f 51 55 45 52 59 20 29 20 65 4e 65 77 20 3d 20  _QUERY ) eNew = 
342a0 65 4f 6c 64 3b 0a 20 20 69 66 28 20 21 73 71 6c  eOld;.  if( !sql
342b0 69 74 65 33 50 61 67 65 72 4f 6b 54 6f 43 68 61  ite3PagerOkToCha
342c0 6e 67 65 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70  ngeJournalMode(p
342d0 50 61 67 65 72 29 20 29 20 65 4e 65 77 20 3d 20  Pager) ) eNew = 
342e0 65 4f 6c 64 3b 0a 0a 23 69 66 6e 64 65 66 20 53  eOld;..#ifndef S
342f0 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20  QLITE_OMIT_WAL. 
34300 20 7a 46 69 6c 65 6e 61 6d 65 20 3d 20 73 71 6c   zFilename = sql
34310 69 74 65 33 50 61 67 65 72 46 69 6c 65 6e 61 6d  ite3PagerFilenam
34320 65 28 70 50 61 67 65 72 2c 20 31 29 3b 0a 0a 20  e(pPager, 1);.. 
34330 20 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77   /* Do not allow
34340 20 61 20 74 72 61 6e 73 69 74 69 6f 6e 20 74 6f   a transition to
34350 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d 57 41   journal_mode=WA
34360 4c 20 66 6f 72 20 61 20 64 61 74 61 62 61 73 65  L for a database
34370 0a 20 20 2a 2a 20 69 6e 20 74 65 6d 70 6f 72 61  .  ** in tempora
34380 72 79 20 73 74 6f 72 61 67 65 20 6f 72 20 69 66  ry storage or if
34390 20 74 68 65 20 56 46 53 20 64 6f 65 73 20 6e 6f   the VFS does no
343a0 74 20 73 75 70 70 6f 72 74 20 73 68 61 72 65 64  t support shared
343b0 20 6d 65 6d 6f 72 79 20 0a 20 20 2a 2f 0a 20 20   memory .  */.  
343c0 69 66 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f  if( eNew==PAGER_
343d0 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a  JOURNALMODE_WAL.
343e0 20 20 20 26 26 20 28 73 71 6c 69 74 65 33 53 74     && (sqlite3St
343f0 72 6c 65 6e 33 30 28 7a 46 69 6c 65 6e 61 6d 65  rlen30(zFilename
34400 29 3d 3d 30 20 20 20 20 20 20 20 20 20 20 20 2f  )==0           /
34410 2a 20 54 65 6d 70 20 66 69 6c 65 20 2a 2f 0a 20  * Temp file */. 
34420 20 20 20 20 20 20 7c 7c 20 21 73 71 6c 69 74 65        || !sqlite
34430 33 50 61 67 65 72 57 61 6c 53 75 70 70 6f 72 74  3PagerWalSupport
34440 65 64 28 70 50 61 67 65 72 29 29 20 20 20 2f 2a  ed(pPager))   /*
34450 20 4e 6f 20 73 68 61 72 65 64 2d 6d 65 6d 6f 72   No shared-memor
34460 79 20 73 75 70 70 6f 72 74 20 2a 2f 0a 20 20 29  y support */.  )
34470 7b 0a 20 20 20 20 65 4e 65 77 20 3d 20 65 4f 6c  {.    eNew = eOl
34480 64 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 28 65  d;.  }..  if( (e
34490 4e 65 77 21 3d 65 4f 6c 64 29 0a 20 20 20 26 26  New!=eOld).   &&
344a0 20 28 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f   (eOld==PAGER_JO
344b0 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 7c 7c  URNALMODE_WAL ||
344c0 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
344d0 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 29 0a 20 20  RNALMODE_WAL).  
344e0 29 7b 0a 20 20 20 20 69 66 28 20 21 64 62 2d 3e  ){.    if( !db->
344f0 61 75 74 6f 43 6f 6d 6d 69 74 20 7c 7c 20 64 62  autoCommit || db
34500 2d 3e 6e 56 64 62 65 52 65 61 64 3e 31 20 29 7b  ->nVdbeRead>1 ){
34510 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
34520 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20 20  TE_ERROR;.      
34530 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72  sqlite3VdbeError
34540 28 70 2c 0a 20 20 20 20 20 20 20 20 20 20 22 63  (p,.          "c
34550 61 6e 6e 6f 74 20 63 68 61 6e 67 65 20 25 73 20  annot change %s 
34560 77 61 6c 20 6d 6f 64 65 20 66 72 6f 6d 20 77 69  wal mode from wi
34570 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69  thin a transacti
34580 6f 6e 22 2c 0a 20 20 20 20 20 20 20 20 20 20 28  on",.          (
34590 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
345a0 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 22 69  NALMODE_WAL ? "i
345b0 6e 74 6f 22 20 3a 20 22 6f 75 74 20 6f 66 22 29  nto" : "out of")
345c0 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20  .      );.      
345d0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
345e0 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c  o_error;.    }el
345f0 73 65 7b 0a 20 0a 20 20 20 20 20 20 69 66 28 20  se{. .      if( 
34600 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eOld==PAGER_JOUR
34610 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 29 7b 0a 20  NALMODE_WAL ){. 
34620 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6c 65 61         /* If lea
34630 76 69 6e 67 20 57 41 4c 20 6d 6f 64 65 2c 20 63  ving WAL mode, c
34640 6c 6f 73 65 20 74 68 65 20 6c 6f 67 20 66 69 6c  lose the log fil
34650 65 2e 20 49 66 20 73 75 63 63 65 73 73 66 75 6c  e. If successful
34660 2c 20 74 68 65 20 63 61 6c 6c 0a 20 20 20 20 20  , the call.     
34670 20 20 20 2a 2a 20 74 6f 20 50 61 67 65 72 43 6c     ** to PagerCl
34680 6f 73 65 57 61 6c 28 29 20 63 68 65 63 6b 70 6f  oseWal() checkpo
34690 69 6e 74 73 20 61 6e 64 20 64 65 6c 65 74 65 73  ints and deletes
346a0 20 74 68 65 20 77 72 69 74 65 2d 61 68 65 61 64   the write-ahead
346b0 2d 6c 6f 67 20 0a 20 20 20 20 20 20 20 20 2a 2a  -log .        **
346c0 20 66 69 6c 65 2e 20 41 6e 20 45 58 43 4c 55 53   file. An EXCLUS
346d0 49 56 45 20 6c 6f 63 6b 20 6d 61 79 20 73 74 69  IVE lock may sti
346e0 6c 6c 20 62 65 20 68 65 6c 64 20 6f 6e 20 74 68  ll be held on th
346f0 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
34700 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 66 74 65  .        ** afte
34710 72 20 61 20 73 75 63 63 65 73 73 66 75 6c 20 72  r a successful r
34720 65 74 75 72 6e 2e 20 0a 20 20 20 20 20 20 20 20  eturn. .        
34730 2a 2f 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  */.        rc = 
34740 73 71 6c 69 74 65 33 50 61 67 65 72 43 6c 6f 73  sqlite3PagerClos
34750 65 57 61 6c 28 70 50 61 67 65 72 2c 20 64 62 29  eWal(pPager, db)
34760 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63  ;.        if( rc
34770 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
34780 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
34790 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d  PagerSetJournalM
347a0 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4e 65 77  ode(pPager, eNew
347b0 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
347c0 20 20 20 7d 65 6c 73 65 20 69 66 28 20 65 4f 6c     }else if( eOl
347d0 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  d==PAGER_JOURNAL
347e0 4d 4f 44 45 5f 4d 45 4d 4f 52 59 20 29 7b 0a 20  MODE_MEMORY ){. 
347f0 20 20 20 20 20 20 20 2f 2a 20 43 61 6e 6e 6f 74         /* Cannot
34800 20 74 72 61 6e 73 69 74 69 6f 6e 20 64 69 72 65   transition dire
34810 63 74 6c 79 20 66 72 6f 6d 20 4d 45 4d 4f 52 59  ctly from MEMORY
34820 20 74 6f 20 57 41 4c 2e 20 20 55 73 65 20 6d 6f   to WAL.  Use mo
34830 64 65 20 4f 46 46 0a 20 20 20 20 20 20 20 20 2a  de OFF.        *
34840 2a 20 61 73 20 61 6e 20 69 6e 74 65 72 6d 65 64  * as an intermed
34850 69 61 74 65 20 2a 2f 0a 20 20 20 20 20 20 20 20  iate */.        
34860 73 71 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a  sqlite3PagerSetJ
34870 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65  ournalMode(pPage
34880 72 2c 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  r, PAGER_JOURNAL
34890 4d 4f 44 45 5f 4f 46 46 29 3b 0a 20 20 20 20 20  MODE_OFF);.     
348a0 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 4f   }.  .      /* O
348b0 70 65 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f  pen a transactio
348c0 6e 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73  n on the databas
348d0 65 20 66 69 6c 65 2e 20 52 65 67 61 72 64 6c 65  e file. Regardle
348e0 73 73 20 6f 66 20 74 68 65 20 6a 6f 75 72 6e 61  ss of the journa
348f0 6c 0a 20 20 20 20 20 20 2a 2a 20 6d 6f 64 65 2c  l.      ** mode,
34900 20 74 68 69 73 20 74 72 61 6e 73 61 63 74 69 6f   this transactio
34910 6e 20 61 6c 77 61 79 73 20 75 73 65 73 20 61 20  n always uses a 
34920 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c  rollback journal
34930 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
34940 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
34950 42 74 72 65 65 49 73 49 6e 54 72 61 6e 73 28 70  BtreeIsInTrans(p
34960 42 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  Bt)==0 );.      
34970 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
34980 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  K ){.        rc 
34990 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65  = sqlite3BtreeSe
349a0 74 56 65 72 73 69 6f 6e 28 70 42 74 2c 20 28 65  tVersion(pBt, (e
349b0 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
349c0 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 32 20 3a  ALMODE_WAL ? 2 :
349d0 20 31 29 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20   1));.      }.  
349e0 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f    }.  }.#endif /
349f0 2a 20 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  * ifndef SQLITE_
34a00 4f 4d 49 54 5f 57 41 4c 20 2a 2f 0a 0a 20 20 69  OMIT_WAL */..  i
34a10 66 28 20 72 63 20 29 20 65 4e 65 77 20 3d 20 65  f( rc ) eNew = e
34a20 4f 6c 64 3b 0a 20 20 65 4e 65 77 20 3d 20 73 71  Old;.  eNew = sq
34a30 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75  lite3PagerSetJou
34a40 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c  rnalMode(pPager,
34a50 20 65 4e 65 77 29 3b 0a 0a 20 20 70 4f 75 74 2d   eNew);..  pOut-
34a60 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72  >flags = MEM_Str
34a70 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  |MEM_Static|MEM_
34a80 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20  Term;.  pOut->z 
34a90 3d 20 28 63 68 61 72 20 2a 29 73 71 6c 69 74 65  = (char *)sqlite
34aa0 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65  3JournalModename
34ab0 28 65 4e 65 77 29 3b 0a 20 20 70 4f 75 74 2d 3e  (eNew);.  pOut->
34ac0 6e 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65  n = sqlite3Strle
34ad0 6e 33 30 28 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20  n30(pOut->z);.  
34ae0 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49  pOut->enc = SQLI
34af0 54 45 5f 55 54 46 38 3b 0a 20 20 73 71 6c 69 74  TE_UTF8;.  sqlit
34b00 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f  e3VdbeChangeEnco
34b10 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64  ding(pOut, encod
34b20 69 6e 67 29 3b 0a 20 20 69 66 28 20 72 63 20 29  ing);.  if( rc )
34b30 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
34b40 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61  to_error;.  brea
34b50 6b 3b 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  k;.};.#endif /* 
34b60 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47  SQLITE_OMIT_PRAG
34b70 4d 41 20 2a 2f 0a 0a 23 69 66 20 21 64 65 66 69  MA */..#if !defi
34b80 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
34b90 56 41 43 55 55 4d 29 20 26 26 20 21 64 65 66 69  VACUUM) && !defi
34ba0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
34bb0 41 54 54 41 43 48 29 0a 2f 2a 20 4f 70 63 6f 64  ATTACH)./* Opcod
34bc0 65 3a 20 56 61 63 75 75 6d 20 50 31 20 2a 20 2a  e: Vacuum P1 * *
34bd0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56 61 63 75 75   * *.**.** Vacuu
34be0 6d 20 74 68 65 20 65 6e 74 69 72 65 20 64 61 74  m the entire dat
34bf0 61 62 61 73 65 20 50 31 2e 20 20 50 31 20 69 73  abase P1.  P1 is
34c00 20 30 20 66 6f 72 20 22 6d 61 69 6e 22 2c 20 61   0 for "main", a
34c10 6e 64 20 32 20 6f 72 20 6d 6f 72 65 0a 2a 2a 20  nd 2 or more.** 
34c20 66 6f 72 20 61 6e 20 61 74 74 61 63 68 65 64 20  for an attached 
34c30 64 61 74 61 62 61 73 65 2e 20 20 54 68 65 20 22  database.  The "
34c40 74 65 6d 70 22 20 64 61 74 61 62 61 73 65 20 6d  temp" database m
34c50 61 79 20 6e 6f 74 20 62 65 20 76 61 63 75 75 6d  ay not be vacuum
34c60 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  ed..*/.case OP_V
34c70 61 63 75 75 6d 3a 20 7b 0a 20 20 61 73 73 65 72  acuum: {.  asser
34c80 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
34c90 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  0 );.  rc = sqli
34ca0 74 65 33 52 75 6e 56 61 63 75 75 6d 28 26 70 2d  te3RunVacuum(&p-
34cb0 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 70 4f  >zErrMsg, db, pO
34cc0 70 2d 3e 70 31 29 3b 0a 20 20 69 66 28 20 72 63  p->p1);.  if( rc
34cd0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
34ce0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72  e_to_error;.  br
34cf0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23  eak;.}.#endif..#
34d00 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
34d10 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55  TE_OMIT_AUTOVACU
34d20 55 4d 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  UM)./* Opcode: I
34d30 6e 63 72 56 61 63 75 75 6d 20 50 31 20 50 32 20  ncrVacuum P1 P2 
34d40 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 65 72 66  * * *.**.** Perf
34d50 6f 72 6d 20 61 20 73 69 6e 67 6c 65 20 73 74 65  orm a single ste
34d60 70 20 6f 66 20 74 68 65 20 69 6e 63 72 65 6d 65  p of the increme
34d70 6e 74 61 6c 20 76 61 63 75 75 6d 20 70 72 6f 63  ntal vacuum proc
34d80 65 64 75 72 65 20 6f 6e 0a 2a 2a 20 74 68 65 20  edure on.** the 
34d90 50 31 20 64 61 74 61 62 61 73 65 2e 20 49 66 20  P1 database. If 
34da0 74 68 65 20 76 61 63 75 75 6d 20 68 61 73 20 66  the vacuum has f
34db0 69 6e 69 73 68 65 64 2c 20 6a 75 6d 70 20 74 6f  inished, jump to
34dc0 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20   instruction.** 
34dd0 50 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 66  P2. Otherwise, f
34de0 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
34df0 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
34e00 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
34e10 49 6e 63 72 56 61 63 75 75 6d 3a 20 7b 20 20 20  IncrVacuum: {   
34e20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
34e30 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20    Btree *pBt;.. 
34e40 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
34e50 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
34e60 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
34e70 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70  rt( DbMaskTest(p
34e80 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70  ->btreeMask, pOp
34e90 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73 73 65 72  ->p1) );.  asser
34ea0 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
34eb0 30 20 29 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d  0 );.  pBt = db-
34ec0 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42  >aDb[pOp->p1].pB
34ed0 74 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  t;.  rc = sqlite
34ee0 33 42 74 72 65 65 49 6e 63 72 56 61 63 75 75 6d  3BtreeIncrVacuum
34ef0 28 70 42 74 29 3b 0a 20 20 56 64 62 65 42 72 61  (pBt);.  VdbeBra
34f00 6e 63 68 54 61 6b 65 6e 28 72 63 3d 3d 53 51 4c  nchTaken(rc==SQL
34f10 49 54 45 5f 44 4f 4e 45 2c 32 29 3b 0a 20 20 69  ITE_DONE,2);.  i
34f20 66 28 20 72 63 20 29 7b 0a 20 20 20 20 69 66 28  f( rc ){.    if(
34f30 20 72 63 21 3d 53 51 4c 49 54 45 5f 44 4f 4e 45   rc!=SQLITE_DONE
34f40 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
34f50 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
34f60 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
34f70 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f      goto jump_to
34f80 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  _p2;.  }.  break
34f90 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f  ;.}.#endif../* O
34fa0 70 63 6f 64 65 3a 20 45 78 70 69 72 65 20 50 31  pcode: Expire P1
34fb0 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43   * * * *.**.** C
34fc0 61 75 73 65 20 70 72 65 63 6f 6d 70 69 6c 65 64  ause precompiled
34fd0 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 65   statements to e
34fe0 78 70 69 72 65 2e 20 20 57 68 65 6e 20 61 6e 20  xpire.  When an 
34ff0 65 78 70 69 72 65 64 20 73 74 61 74 65 6d 65 6e  expired statemen
35000 74 0a 2a 2a 20 69 73 20 65 78 65 63 75 74 65 64  t.** is executed
35010 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 73   using sqlite3_s
35020 74 65 70 28 29 20 69 74 20 77 69 6c 6c 20 65 69  tep() it will ei
35030 74 68 65 72 20 61 75 74 6f 6d 61 74 69 63 61 6c  ther automatical
35040 6c 79 0a 2a 2a 20 72 65 70 72 65 70 61 72 65 20  ly.** reprepare 
35050 69 74 73 65 6c 66 20 28 69 66 20 69 74 20 77 61  itself (if it wa
35060 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 63 72 65  s originally cre
35070 61 74 65 64 20 75 73 69 6e 67 20 73 71 6c 69 74  ated using sqlit
35080 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 29 29  e3_prepare_v2())
35090 0a 2a 2a 20 6f 72 20 69 74 20 77 69 6c 6c 20 66  .** or it will f
350a0 61 69 6c 20 77 69 74 68 20 53 51 4c 49 54 45 5f  ail with SQLITE_
350b0 53 43 48 45 4d 41 2e 0a 2a 2a 20 0a 2a 2a 20 49  SCHEMA..** .** I
350c0 66 20 50 31 20 69 73 20 30 2c 20 74 68 65 6e 20  f P1 is 0, then 
350d0 61 6c 6c 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  all SQL statemen
350e0 74 73 20 62 65 63 6f 6d 65 20 65 78 70 69 72 65  ts become expire
350f0 64 2e 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d  d. If P1 is non-
35100 7a 65 72 6f 2c 0a 2a 2a 20 74 68 65 6e 20 6f 6e  zero,.** then on
35110 6c 79 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79  ly the currently
35120 20 65 78 65 63 75 74 69 6e 67 20 73 74 61 74 65   executing state
35130 6d 65 6e 74 20 69 73 20 65 78 70 69 72 65 64 2e  ment is expired.
35140 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 78 70 69  .*/.case OP_Expi
35150 72 65 3a 20 7b 0a 20 20 69 66 28 20 21 70 4f 70  re: {.  if( !pOp
35160 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73 71 6c 69  ->p1 ){.    sqli
35170 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65  te3ExpirePrepare
35180 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b  dStatements(db);
35190 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d  .  }else{.    p-
351a0 3e 65 78 70 69 72 65 64 20 3d 20 31 3b 0a 20 20  >expired = 1;.  
351b0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69  }.  break;.}..#i
351c0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
351d0 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 2f  T_SHARED_CACHE./
351e0 2a 20 4f 70 63 6f 64 65 3a 20 54 61 62 6c 65 4c  * Opcode: TableL
351f0 6f 63 6b 20 50 31 20 50 32 20 50 33 20 50 34 20  ock P1 P2 P3 P4 
35200 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
35210 44 62 3d 50 31 20 72 6f 6f 74 3d 50 32 20 77 72  Db=P1 root=P2 wr
35220 69 74 65 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 62 74  ite=P3.**.** Obt
35230 61 69 6e 20 61 20 6c 6f 63 6b 20 6f 6e 20 61 20  ain a lock on a 
35240 70 61 72 74 69 63 75 6c 61 72 20 74 61 62 6c 65  particular table
35250 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  . This instructi
35260 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20  on is only used 
35270 77 68 65 6e 0a 2a 2a 20 74 68 65 20 73 68 61 72  when.** the shar
35280 65 64 2d 63 61 63 68 65 20 66 65 61 74 75 72 65  ed-cache feature
35290 20 69 73 20 65 6e 61 62 6c 65 64 2e 20 0a 2a 2a   is enabled. .**
352a0 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e  .** P1 is the in
352b0 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62  dex of the datab
352c0 61 73 65 20 69 6e 20 73 71 6c 69 74 65 33 2e 61  ase in sqlite3.a
352d0 44 62 5b 5d 20 6f 66 20 74 68 65 20 64 61 74 61  Db[] of the data
352e0 62 61 73 65 0a 2a 2a 20 6f 6e 20 77 68 69 63 68  base.** on which
352f0 20 74 68 65 20 6c 6f 63 6b 20 69 73 20 61 63 71   the lock is acq
35300 75 69 72 65 64 2e 20 20 41 20 72 65 61 64 6c 6f  uired.  A readlo
35310 63 6b 20 69 73 20 6f 62 74 61 69 6e 65 64 20 69  ck is obtained i
35320 66 20 50 33 3d 3d 30 20 6f 72 0a 2a 2a 20 61 20  f P3==0 or.** a 
35330 77 72 69 74 65 20 6c 6f 63 6b 20 69 66 20 50 33  write lock if P3
35340 3d 3d 31 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 63 6f  ==1..**.** P2 co
35350 6e 74 61 69 6e 73 20 74 68 65 20 72 6f 6f 74 2d  ntains the root-
35360 70 61 67 65 20 6f 66 20 74 68 65 20 74 61 62 6c  page of the tabl
35370 65 20 74 6f 20 6c 6f 63 6b 2e 0a 2a 2a 0a 2a 2a  e to lock..**.**
35380 20 50 34 20 63 6f 6e 74 61 69 6e 73 20 61 20 70   P4 contains a p
35390 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6e 61  ointer to the na
353a0 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
353b0 62 65 69 6e 67 20 6c 6f 63 6b 65 64 2e 20 54 68  being locked. Th
353c0 69 73 20 69 73 20 6f 6e 6c 79 0a 2a 2a 20 75 73  is is only.** us
353d0 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61  ed to generate a
353e0 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  n error message 
353f0 69 66 20 74 68 65 20 6c 6f 63 6b 20 63 61 6e 6e  if the lock cann
35400 6f 74 20 62 65 20 6f 62 74 61 69 6e 65 64 2e 0a  ot be obtained..
35410 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 61 62 6c 65  */.case OP_Table
35420 4c 6f 63 6b 3a 20 7b 0a 20 20 75 38 20 69 73 57  Lock: {.  u8 isW
35430 72 69 74 65 4c 6f 63 6b 20 3d 20 28 75 38 29 70  riteLock = (u8)p
35440 4f 70 2d 3e 70 33 3b 0a 23 69 66 6e 64 65 66 20  Op->p3;.#ifndef 
35450 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4e 43  SQLITE_OMIT_CONC
35460 55 52 52 45 4e 54 0a 20 20 69 66 28 20 69 73 57  URRENT.  if( isW
35470 72 69 74 65 4c 6f 63 6b 20 26 26 20 64 62 2d 3e  riteLock && db->
35480 62 43 6f 6e 63 75 72 72 65 6e 74 20 26 26 20 70  bConcurrent && p
35490 4f 70 2d 3e 70 32 3d 3d 31 20 29 7b 0a 20 20 20  Op->p2==1 ){.   
354a0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
354b0 4f 52 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  OR;.    sqlite3V
354c0 64 62 65 45 72 72 6f 72 28 70 2c 20 0a 20 20 20  dbeError(p, .   
354d0 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 6d 6f 64       "cannot mod
354e0 69 66 79 20 64 61 74 61 62 61 73 65 20 73 63 68  ify database sch
354f0 65 6d 61 20 77 69 74 68 69 6e 20 43 4f 4e 43 55  ema within CONCU
35500 52 52 45 4e 54 20 74 72 61 6e 73 61 63 74 69 6f  RRENT transactio
35510 6e 22 29 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62  n");.    goto ab
35520 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
35530 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 69  ;.  }.#endif.  i
35540 66 28 20 69 73 57 72 69 74 65 4c 6f 63 6b 20 7c  f( isWriteLock |
35550 7c 20 30 3d 3d 28 64 62 2d 3e 66 6c 61 67 73 26  | 0==(db->flags&
35560 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d  SQLITE_ReadUncom
35570 6d 69 74 74 65 64 29 20 29 7b 0a 20 20 20 20 69  mitted) ){.    i
35580 6e 74 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b  nt p1 = pOp->p1;
35590 20 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 31   .    assert( p1
355a0 3e 3d 30 20 26 26 20 70 31 3c 64 62 2d 3e 6e 44  >=0 && p1<db->nD
355b0 62 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  b );.    assert(
355c0 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
355d0 74 72 65 65 4d 61 73 6b 2c 20 70 31 29 20 29 3b  treeMask, p1) );
355e0 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 73 57  .    assert( isW
355f0 72 69 74 65 4c 6f 63 6b 3d 3d 30 20 7c 7c 20 69  riteLock==0 || i
35600 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 31 20 29 3b  sWriteLock==1 );
35610 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
35620 33 42 74 72 65 65 4c 6f 63 6b 54 61 62 6c 65 28  3BtreeLockTable(
35630 64 62 2d 3e 61 44 62 5b 70 31 5d 2e 70 42 74 2c  db->aDb[p1].pBt,
35640 20 70 4f 70 2d 3e 70 32 2c 20 69 73 57 72 69 74   pOp->p2, isWrit
35650 65 4c 6f 63 6b 29 3b 0a 20 20 20 20 69 66 28 20  eLock);.    if( 
35660 72 63 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  rc ){.      if( 
35670 28 72 63 26 30 78 46 46 29 3d 3d 53 51 4c 49 54  (rc&0xFF)==SQLIT
35680 45 5f 4c 4f 43 4b 45 44 20 29 7b 0a 20 20 20 20  E_LOCKED ){.    
35690 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
356a0 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  z = pOp->p4.z;. 
356b0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
356c0 62 65 45 72 72 6f 72 28 70 2c 20 22 64 61 74 61  beError(p, "data
356d0 62 61 73 65 20 74 61 62 6c 65 20 69 73 20 6c 6f  base table is lo
356e0 63 6b 65 64 3a 20 25 73 22 2c 20 7a 29 3b 0a 20  cked: %s", z);. 
356f0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 67 6f 74       }.      got
35700 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
35710 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  rror;.    }.  }.
35720 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
35730 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
35740 5f 53 48 41 52 45 44 5f 43 41 43 48 45 20 2a 2f  _SHARED_CACHE */
35750 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
35760 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
35770 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 42  LE./* Opcode: VB
35780 65 67 69 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a  egin * * * P4 *.
35790 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20  **.** P4 may be 
357a0 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20  a pointer to an 
357b0 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72  sqlite3_vtab str
357c0 75 63 74 75 72 65 2e 20 49 66 20 73 6f 2c 20 63  ucture. If so, c
357d0 61 6c 6c 20 74 68 65 20 0a 2a 2a 20 78 42 65 67  all the .** xBeg
357e0 69 6e 20 6d 65 74 68 6f 64 20 66 6f 72 20 74 68  in method for th
357f0 61 74 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  at table..**.** 
35800 41 6c 73 6f 2c 20 77 68 65 74 68 65 72 20 6f 72  Also, whether or
35810 20 6e 6f 74 20 50 34 20 69 73 20 73 65 74 2c 20   not P4 is set, 
35820 63 68 65 63 6b 20 74 68 61 74 20 74 68 69 73 20  check that this 
35830 69 73 20 6e 6f 74 20 62 65 69 6e 67 20 63 61 6c  is not being cal
35840 6c 65 64 20 66 72 6f 6d 0a 2a 2a 20 77 69 74 68  led from.** with
35850 69 6e 20 61 20 63 61 6c 6c 62 61 63 6b 20 74 6f  in a callback to
35860 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
35870 20 78 53 79 6e 63 28 29 20 6d 65 74 68 6f 64 2e   xSync() method.
35880 20 49 66 20 69 74 20 69 73 2c 20 74 68 65 20 65   If it is, the e
35890 72 72 6f 72 0a 2a 2a 20 63 6f 64 65 20 77 69 6c  rror.** code wil
358a0 6c 20 62 65 20 73 65 74 20 74 6f 20 53 51 4c 49  l be set to SQLI
358b0 54 45 5f 4c 4f 43 4b 45 44 2e 0a 2a 2f 0a 63 61  TE_LOCKED..*/.ca
358c0 73 65 20 4f 50 5f 56 42 65 67 69 6e 3a 20 7b 0a  se OP_VBegin: {.
358d0 20 20 56 54 61 62 6c 65 20 2a 70 56 54 61 62 3b    VTable *pVTab;
358e0 0a 20 20 70 56 54 61 62 20 3d 20 70 4f 70 2d 3e  .  pVTab = pOp->
358f0 70 34 2e 70 56 74 61 62 3b 0a 20 20 72 63 20 3d  p4.pVtab;.  rc =
35900 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69   sqlite3VtabBegi
35910 6e 28 64 62 2c 20 70 56 54 61 62 29 3b 0a 20 20  n(db, pVTab);.  
35920 69 66 28 20 70 56 54 61 62 20 29 20 73 71 6c 69  if( pVTab ) sqli
35930 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72  te3VtabImportErr
35940 6d 73 67 28 70 2c 20 70 56 54 61 62 2d 3e 70 56  msg(p, pVTab->pV
35950 74 61 62 29 3b 0a 20 20 69 66 28 20 72 63 20 29  tab);.  if( rc )
35960 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
35970 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61  to_error;.  brea
35980 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
35990 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
359a0 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
359b0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
359c0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
359d0 4f 70 63 6f 64 65 3a 20 56 43 72 65 61 74 65 20  Opcode: VCreate 
359e0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
359f0 2a 20 50 32 20 69 73 20 61 20 72 65 67 69 73 74  * P2 is a regist
35a00 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68  er that holds th
35a10 65 20 6e 61 6d 65 20 6f 66 20 61 20 76 69 72 74  e name of a virt
35a20 75 61 6c 20 74 61 62 6c 65 20 69 6e 20 64 61 74  ual table in dat
35a30 61 62 61 73 65 20 0a 2a 2a 20 50 31 2e 20 43 61  abase .** P1. Ca
35a40 6c 6c 20 74 68 65 20 78 43 72 65 61 74 65 20 6d  ll the xCreate m
35a50 65 74 68 6f 64 20 66 6f 72 20 74 68 61 74 20 74  ethod for that t
35a60 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  able..*/.case OP
35a70 5f 56 43 72 65 61 74 65 3a 20 7b 0a 20 20 4d 65  _VCreate: {.  Me
35a80 6d 20 73 4d 65 6d 3b 20 20 20 20 20 20 20 20 20  m sMem;         
35a90 20 2f 2a 20 46 6f 72 20 73 74 6f 72 69 6e 67 20   /* For storing 
35aa0 74 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67  the record being
35ab0 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f   decoded */.  co
35ac0 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 62 3b 20  nst char *zTab; 
35ad0 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
35ae0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f  virtual table */
35af0 0a 0a 20 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d  ..  memset(&sMem
35b00 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d  , 0, sizeof(sMem
35b10 29 29 3b 0a 20 20 73 4d 65 6d 2e 64 62 20 3d 20  ));.  sMem.db = 
35b20 64 62 3b 0a 20 20 2f 2a 20 42 65 63 61 75 73 65  db;.  /* Because
35b30 20 50 32 20 69 73 20 61 6c 77 61 79 73 20 61 20   P2 is always a 
35b40 73 74 61 74 69 63 20 73 74 72 69 6e 67 2c 20 69  static string, i
35b50 74 20 69 73 20 69 6d 70 6f 73 73 69 62 6c 65 20  t is impossible 
35b60 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 73 71 6c  for the.  ** sql
35b70 69 74 65 33 56 64 62 65 4d 65 6d 43 6f 70 79 28  ite3VdbeMemCopy(
35b80 29 20 74 6f 20 66 61 69 6c 20 2a 2f 0a 20 20 61  ) to fail */.  a
35b90 73 73 65 72 74 28 20 28 61 4d 65 6d 5b 70 4f 70  ssert( (aMem[pOp
35ba0 2d 3e 70 32 5d 2e 66 6c 61 67 73 20 26 20 4d 45  ->p2].flags & ME
35bb0 4d 5f 53 74 72 29 21 3d 30 20 29 3b 0a 20 20 61  M_Str)!=0 );.  a
35bc0 73 73 65 72 74 28 20 28 61 4d 65 6d 5b 70 4f 70  ssert( (aMem[pOp
35bd0 2d 3e 70 32 5d 2e 66 6c 61 67 73 20 26 20 4d 45  ->p2].flags & ME
35be0 4d 5f 53 74 61 74 69 63 29 21 3d 30 20 29 3b 0a  M_Static)!=0 );.
35bf0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
35c00 62 65 4d 65 6d 43 6f 70 79 28 26 73 4d 65 6d 2c  beMemCopy(&sMem,
35c10 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29   &aMem[pOp->p2])
35c20 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d  ;.  assert( rc==
35c30 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 7a  SQLITE_OK );.  z
35c40 54 61 62 20 3d 20 28 63 6f 6e 73 74 20 63 68 61  Tab = (const cha
35c50 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  r*)sqlite3_value
35c60 5f 74 65 78 74 28 26 73 4d 65 6d 29 3b 0a 20 20  _text(&sMem);.  
35c70 61 73 73 65 72 74 28 20 7a 54 61 62 20 7c 7c 20  assert( zTab || 
35c80 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
35c90 20 29 3b 0a 20 20 69 66 28 20 7a 54 61 62 20 29   );.  if( zTab )
35ca0 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
35cb0 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61 74 65  e3VtabCallCreate
35cc0 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 7a 54  (db, pOp->p1, zT
35cd0 61 62 2c 20 26 70 2d 3e 7a 45 72 72 4d 73 67 29  ab, &p->zErrMsg)
35ce0 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56  ;.  }.  sqlite3V
35cf0 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 73  dbeMemRelease(&s
35d00 4d 65 6d 29 3b 0a 20 20 69 66 28 20 72 63 20 29  Mem);.  if( rc )
35d10 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
35d20 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61  to_error;.  brea
35d30 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
35d40 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
35d50 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
35d60 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
35d70 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
35d80 4f 70 63 6f 64 65 3a 20 56 44 65 73 74 72 6f 79  Opcode: VDestroy
35d90 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
35da0 2a 2a 20 50 34 20 69 73 20 74 68 65 20 6e 61 6d  ** P4 is the nam
35db0 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74  e of a virtual t
35dc0 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73 65  able in database
35dd0 20 50 31 2e 20 20 43 61 6c 6c 20 74 68 65 20 78   P1.  Call the x
35de0 44 65 73 74 72 6f 79 20 6d 65 74 68 6f 64 0a 2a  Destroy method.*
35df0 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65 2e  * of that table.
35e00 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 44 65 73  .*/.case OP_VDes
35e10 74 72 6f 79 3a 20 7b 0a 20 20 64 62 2d 3e 6e 56  troy: {.  db->nV
35e20 44 65 73 74 72 6f 79 2b 2b 3b 0a 20 20 72 63 20  Destroy++;.  rc 
35e30 3d 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c  = sqlite3VtabCal
35e40 6c 44 65 73 74 72 6f 79 28 64 62 2c 20 70 4f 70  lDestroy(db, pOp
35e50 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  ->p1, pOp->p4.z)
35e60 3b 0a 20 20 64 62 2d 3e 6e 56 44 65 73 74 72 6f  ;.  db->nVDestro
35e70 79 2d 2d 3b 0a 20 20 69 66 28 20 72 63 20 29 20  y--;.  if( rc ) 
35e80 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
35e90 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b  o_error;.  break
35ea0 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
35eb0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
35ec0 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64  LTABLE */..#ifnd
35ed0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
35ee0 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
35ef0 70 63 6f 64 65 3a 20 56 4f 70 65 6e 20 50 31 20  pcode: VOpen P1 
35f00 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50  * * P4 *.**.** P
35f10 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
35f20 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  o a virtual tabl
35f30 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c  e object, an sql
35f40 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74  ite3_vtab struct
35f50 75 72 65 2e 0a 2a 2a 20 50 31 20 69 73 20 61 20  ure..** P1 is a 
35f60 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 2e 20 20  cursor number.  
35f70 54 68 69 73 20 6f 70 63 6f 64 65 20 6f 70 65 6e  This opcode open
35f80 73 20 61 20 63 75 72 73 6f 72 20 74 6f 20 74 68  s a cursor to th
35f90 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62  e virtual.** tab
35fa0 6c 65 20 61 6e 64 20 73 74 6f 72 65 73 20 74 68  le and stores th
35fb0 61 74 20 63 75 72 73 6f 72 20 69 6e 20 50 31 2e  at cursor in P1.
35fc0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 4f 70 65  .*/.case OP_VOpe
35fd0 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  n: {.  VdbeCurso
35fe0 72 20 2a 70 43 75 72 3b 0a 20 20 73 71 6c 69 74  r *pCur;.  sqlit
35ff0 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a  e3_vtab_cursor *
36000 70 56 43 75 72 3b 0a 20 20 73 71 6c 69 74 65 33  pVCur;.  sqlite3
36010 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20  _vtab *pVtab;.  
36020 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f  const sqlite3_mo
36030 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a  dule *pModule;..
36040 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73    assert( p->bIs
36050 52 65 61 64 65 72 20 29 3b 0a 20 20 70 43 75 72  Reader );.  pCur
36060 20 3d 20 30 3b 0a 20 20 70 56 43 75 72 20 3d 20   = 0;.  pVCur = 
36070 30 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70  0;.  pVtab = pOp
36080 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61  ->p4.pVtab->pVta
36090 62 3b 0a 20 20 69 66 28 20 70 56 74 61 62 3d 3d  b;.  if( pVtab==
360a0 30 20 7c 7c 20 4e 45 56 45 52 28 70 56 74 61 62  0 || NEVER(pVtab
360b0 2d 3e 70 4d 6f 64 75 6c 65 3d 3d 30 29 20 29 7b  ->pModule==0) ){
360c0 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
360d0 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 67 6f 74  _LOCKED;.    got
360e0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
360f0 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 70 4d 6f 64  rror;.  }.  pMod
36100 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f  ule = pVtab->pMo
36110 64 75 6c 65 3b 0a 20 20 72 63 20 3d 20 70 4d 6f  dule;.  rc = pMo
36120 64 75 6c 65 2d 3e 78 4f 70 65 6e 28 70 56 74 61  dule->xOpen(pVta
36130 62 2c 20 26 70 56 43 75 72 29 3b 0a 20 20 73 71  b, &pVCur);.  sq
36140 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45  lite3VtabImportE
36150 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b  rrmsg(p, pVtab);
36160 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
36170 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
36180 72 6f 72 3b 0a 0a 20 20 2f 2a 20 49 6e 69 74 69  ror;..  /* Initi
36190 61 6c 69 7a 65 20 73 71 6c 69 74 65 33 5f 76 74  alize sqlite3_vt
361a0 61 62 5f 63 75 72 73 6f 72 20 62 61 73 65 20 63  ab_cursor base c
361b0 6c 61 73 73 20 2a 2f 0a 20 20 70 56 43 75 72 2d  lass */.  pVCur-
361c0 3e 70 56 74 61 62 20 3d 20 70 56 74 61 62 3b 0a  >pVtab = pVtab;.
361d0 0a 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65  .  /* Initialize
361e0 20 76 64 62 65 20 63 75 72 73 6f 72 20 6f 62 6a   vdbe cursor obj
361f0 65 63 74 20 2a 2f 0a 20 20 70 43 75 72 20 3d 20  ect */.  pCur = 
36200 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70  allocateCursor(p
36210 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 2d 31  , pOp->p1, 0, -1
36220 2c 20 43 55 52 54 59 50 45 5f 56 54 41 42 29 3b  , CURTYPE_VTAB);
36230 0a 20 20 69 66 28 20 70 43 75 72 20 29 7b 0a 20  .  if( pCur ){. 
36240 20 20 20 70 43 75 72 2d 3e 75 63 2e 70 56 43 75     pCur->uc.pVCu
36250 72 20 3d 20 70 56 43 75 72 3b 0a 20 20 20 20 70  r = pVCur;.    p
36260 56 74 61 62 2d 3e 6e 52 65 66 2b 2b 3b 0a 20 20  Vtab->nRef++;.  
36270 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
36280 74 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  t( db->mallocFai
36290 6c 65 64 20 29 3b 0a 20 20 20 20 70 4d 6f 64 75  led );.    pModu
362a0 6c 65 2d 3e 78 43 6c 6f 73 65 28 70 56 43 75 72  le->xClose(pVCur
362b0 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  );.    goto no_m
362c0 65 6d 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  em;.  }.  break;
362d0 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
362e0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
362f0 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
36300 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
36310 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
36320 63 6f 64 65 3a 20 56 46 69 6c 74 65 72 20 50 31  code: VFilter P1
36330 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
36340 79 6e 6f 70 73 69 73 3a 20 69 70 6c 61 6e 3d 72  ynopsis: iplan=r
36350 5b 50 33 5d 20 7a 70 6c 61 6e 3d 27 50 34 27 0a  [P3] zplan='P4'.
36360 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 63 75  **.** P1 is a cu
36370 72 73 6f 72 20 6f 70 65 6e 65 64 20 75 73 69 6e  rsor opened usin
36380 67 20 56 4f 70 65 6e 2e 20 20 50 32 20 69 73 20  g VOpen.  P2 is 
36390 61 6e 20 61 64 64 72 65 73 73 20 74 6f 20 6a 75  an address to ju
363a0 6d 70 20 74 6f 20 69 66 0a 2a 2a 20 74 68 65 20  mp to if.** the 
363b0 66 69 6c 74 65 72 65 64 20 72 65 73 75 6c 74 20  filtered result 
363c0 73 65 74 20 69 73 20 65 6d 70 74 79 2e 0a 2a 2a  set is empty..**
363d0 0a 2a 2a 20 50 34 20 69 73 20 65 69 74 68 65 72  .** P4 is either
363e0 20 4e 55 4c 4c 20 6f 72 20 61 20 73 74 72 69 6e   NULL or a strin
363f0 67 20 74 68 61 74 20 77 61 73 20 67 65 6e 65 72  g that was gener
36400 61 74 65 64 20 62 79 20 74 68 65 20 78 42 65 73  ated by the xBes
36410 74 49 6e 64 65 78 0a 2a 2a 20 6d 65 74 68 6f 64  tIndex.** method
36420 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20   of the module. 
36430 20 54 68 65 20 69 6e 74 65 72 70 72 65 74 61 74   The interpretat
36440 69 6f 6e 20 6f 66 20 74 68 65 20 50 34 20 73 74  ion of the P4 st
36450 72 69 6e 67 20 69 73 20 6c 65 66 74 0a 2a 2a 20  ring is left.** 
36460 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 69 6d  to the module im
36470 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a  plementation..**
36480 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
36490 69 6e 76 6f 6b 65 73 20 74 68 65 20 78 46 69 6c  invokes the xFil
364a0 74 65 72 20 6d 65 74 68 6f 64 20 6f 6e 20 74 68  ter method on th
364b0 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
364c0 73 70 65 63 69 66 69 65 64 0a 2a 2a 20 62 79 20  specified.** by 
364d0 50 31 2e 20 20 54 68 65 20 69 6e 74 65 67 65 72  P1.  The integer
364e0 20 71 75 65 72 79 20 70 6c 61 6e 20 70 61 72 61   query plan para
364f0 6d 65 74 65 72 20 74 6f 20 78 46 69 6c 74 65 72  meter to xFilter
36500 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
36510 67 69 73 74 65 72 0a 2a 2a 20 50 33 2e 20 52 65  gister.** P3. Re
36520 67 69 73 74 65 72 20 50 33 2b 31 20 73 74 6f 72  gister P3+1 stor
36530 65 73 20 74 68 65 20 61 72 67 63 20 70 61 72 61  es the argc para
36540 6d 65 74 65 72 20 74 6f 20 62 65 20 70 61 73 73  meter to be pass
36550 65 64 20 74 6f 20 74 68 65 0a 2a 2a 20 78 46 69  ed to the.** xFi
36560 6c 74 65 72 20 6d 65 74 68 6f 64 2e 20 52 65 67  lter method. Reg
36570 69 73 74 65 72 73 20 50 33 2b 32 2e 2e 50 33 2b  isters P3+2..P3+
36580 31 2b 61 72 67 63 20 61 72 65 20 74 68 65 20 61  1+argc are the a
36590 72 67 63 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61  rgc.** additiona
365a0 6c 20 70 61 72 61 6d 65 74 65 72 73 20 77 68 69  l parameters whi
365b0 63 68 20 61 72 65 20 70 61 73 73 65 64 20 74 6f  ch are passed to
365c0 0a 2a 2a 20 78 46 69 6c 74 65 72 20 61 73 20 61  .** xFilter as a
365d0 72 67 76 2e 20 52 65 67 69 73 74 65 72 20 50 33  rgv. Register P3
365e0 2b 32 20 62 65 63 6f 6d 65 73 20 61 72 67 76 5b  +2 becomes argv[
365f0 30 5d 20 77 68 65 6e 20 70 61 73 73 65 64 20 74  0] when passed t
36600 6f 20 78 46 69 6c 74 65 72 2e 0a 2a 2a 0a 2a 2a  o xFilter..**.**
36610 20 41 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20   A jump is made 
36620 74 6f 20 50 32 20 69 66 20 74 68 65 20 72 65 73  to P2 if the res
36630 75 6c 74 20 73 65 74 20 61 66 74 65 72 20 66 69  ult set after fi
36640 6c 74 65 72 69 6e 67 20 77 6f 75 6c 64 20 62 65  ltering would be
36650 20 65 6d 70 74 79 2e 0a 2a 2f 0a 63 61 73 65 20   empty..*/.case 
36660 4f 50 5f 56 46 69 6c 74 65 72 3a 20 7b 20 20 20  OP_VFilter: {   
36670 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74  /* jump */.  int
36680 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69 51 75   nArg;.  int iQu
36690 65 72 79 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c  ery;.  const sql
366a0 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
366b0 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 51 75  dule;.  Mem *pQu
366c0 65 72 79 3b 0a 20 20 4d 65 6d 20 2a 70 41 72 67  ery;.  Mem *pArg
366d0 63 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  c;.  sqlite3_vta
366e0 62 5f 63 75 72 73 6f 72 20 2a 70 56 43 75 72 3b  b_cursor *pVCur;
366f0 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
36700 2a 70 56 74 61 62 3b 0a 20 20 56 64 62 65 43 75  *pVtab;.  VdbeCu
36710 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 69 6e  rsor *pCur;.  in
36720 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 69 3b 0a  t res;.  int i;.
36730 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a 0a    Mem **apArg;..
36740 20 20 70 51 75 65 72 79 20 3d 20 26 61 4d 65 6d    pQuery = &aMem
36750 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 41 72  [pOp->p3];.  pAr
36760 67 63 20 3d 20 26 70 51 75 65 72 79 5b 31 5d 3b  gc = &pQuery[1];
36770 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43  .  pCur = p->apC
36780 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
36790 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
367a0 64 28 70 51 75 65 72 79 29 20 29 3b 0a 20 20 52  d(pQuery) );.  R
367b0 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
367c0 70 2d 3e 70 33 2c 20 70 51 75 65 72 79 29 3b 0a  p->p3, pQuery);.
367d0 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e    assert( pCur->
367e0 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
367f0 45 5f 56 54 41 42 20 29 3b 0a 20 20 70 56 43 75  E_VTAB );.  pVCu
36800 72 20 3d 20 70 43 75 72 2d 3e 75 63 2e 70 56 43  r = pCur->uc.pVC
36810 75 72 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 56  ur;.  pVtab = pV
36820 43 75 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d  Cur->pVtab;.  pM
36830 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70  odule = pVtab->p
36840 4d 6f 64 75 6c 65 3b 0a 0a 20 20 2f 2a 20 47 72  Module;..  /* Gr
36850 61 62 20 74 68 65 20 69 6e 64 65 78 20 6e 75 6d  ab the index num
36860 62 65 72 20 61 6e 64 20 61 72 67 63 20 70 61 72  ber and argc par
36870 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20 61 73 73  ameters */.  ass
36880 65 72 74 28 20 28 70 51 75 65 72 79 2d 3e 66 6c  ert( (pQuery->fl
36890 61 67 73 26 4d 45 4d 5f 49 6e 74 29 21 3d 30 20  ags&MEM_Int)!=0 
368a0 26 26 20 70 41 72 67 63 2d 3e 66 6c 61 67 73 3d  && pArgc->flags=
368b0 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 6e 41  =MEM_Int );.  nA
368c0 72 67 20 3d 20 28 69 6e 74 29 70 41 72 67 63 2d  rg = (int)pArgc-
368d0 3e 75 2e 69 3b 0a 20 20 69 51 75 65 72 79 20 3d  >u.i;.  iQuery =
368e0 20 28 69 6e 74 29 70 51 75 65 72 79 2d 3e 75 2e   (int)pQuery->u.
368f0 69 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  i;..  /* Invoke 
36900 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65 74 68  the xFilter meth
36910 6f 64 20 2a 2f 0a 20 20 72 65 73 20 3d 20 30 3b  od */.  res = 0;
36920 0a 20 20 61 70 41 72 67 20 3d 20 70 2d 3e 61 70  .  apArg = p->ap
36930 41 72 67 3b 0a 20 20 66 6f 72 28 69 20 3d 20 30  Arg;.  for(i = 0
36940 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a  ; i<nArg; i++){.
36950 20 20 20 20 61 70 41 72 67 5b 69 5d 20 3d 20 26      apArg[i] = &
36960 70 41 72 67 63 5b 69 2b 31 5d 3b 0a 20 20 7d 0a  pArgc[i+1];.  }.
36970 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e    rc = pModule->
36980 78 46 69 6c 74 65 72 28 70 56 43 75 72 2c 20 69  xFilter(pVCur, i
36990 51 75 65 72 79 2c 20 70 4f 70 2d 3e 70 34 2e 7a  Query, pOp->p4.z
369a0 2c 20 6e 41 72 67 2c 20 61 70 41 72 67 29 3b 0a  , nArg, apArg);.
369b0 20 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70    sqlite3VtabImp
369c0 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74  ortErrmsg(p, pVt
369d0 61 62 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  ab);.  if( rc ) 
369e0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
369f0 6f 5f 65 72 72 6f 72 3b 0a 20 20 72 65 73 20 3d  o_error;.  res =
36a00 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70   pModule->xEof(p
36a10 56 43 75 72 29 3b 0a 20 20 70 43 75 72 2d 3e 6e  VCur);.  pCur->n
36a20 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 56 64  ullRow = 0;.  Vd
36a30 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65  beBranchTaken(re
36a40 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72  s!=0,2);.  if( r
36a50 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  es ) goto jump_t
36a60 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  o_p2;.  break;.}
36a70 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
36a80 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
36a90 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
36aa0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
36ab0 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
36ac0 64 65 3a 20 56 43 6f 6c 75 6d 6e 20 50 31 20 50  de: VColumn P1 P
36ad0 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
36ae0 70 73 69 73 3a 20 72 5b 50 33 5d 3d 76 63 6f 6c  psis: r[P3]=vcol
36af0 75 6d 6e 28 50 32 29 0a 2a 2a 0a 2a 2a 20 53 74  umn(P2).**.** St
36b00 6f 72 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66  ore the value of
36b10 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d   the P2-th colum
36b20 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 72 6f 77 20  n of.** the row 
36b30 6f 66 20 74 68 65 20 76 69 72 74 75 61 6c 2d 74  of the virtual-t
36b40 61 62 6c 65 20 74 68 61 74 20 74 68 65 20 0a 2a  able that the .*
36b50 2a 20 50 31 20 63 75 72 73 6f 72 20 69 73 20 70  * P1 cursor is p
36b60 6f 69 6e 74 69 6e 67 20 74 6f 20 69 6e 74 6f 20  ointing to into 
36b70 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2f 0a  register P3..*/.
36b80 63 61 73 65 20 4f 50 5f 56 43 6f 6c 75 6d 6e 3a  case OP_VColumn:
36b90 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61   {.  sqlite3_vta
36ba0 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73  b *pVtab;.  cons
36bb0 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
36bc0 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d   *pModule;.  Mem
36bd0 20 2a 70 44 65 73 74 3b 0a 20 20 73 71 6c 69 74   *pDest;.  sqlit
36be0 65 33 5f 63 6f 6e 74 65 78 74 20 73 43 6f 6e 74  e3_context sCont
36bf0 65 78 74 3b 0a 0a 20 20 56 64 62 65 43 75 72 73  ext;..  VdbeCurs
36c00 6f 72 20 2a 70 43 75 72 20 3d 20 70 2d 3e 61 70  or *pCur = p->ap
36c10 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
36c20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e 65 43  assert( pCur->eC
36c30 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
36c40 56 54 41 42 20 29 3b 0a 20 20 61 73 73 65 72 74  VTAB );.  assert
36c50 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
36c60 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
36c70 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
36c80 20 29 3b 0a 20 20 70 44 65 73 74 20 3d 20 26 61   );.  pDest = &a
36c90 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
36ca0 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
36cb0 28 70 2c 20 70 44 65 73 74 29 3b 0a 20 20 69 66  (p, pDest);.  if
36cc0 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20  ( pCur->nullRow 
36cd0 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
36ce0 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65  beMemSetNull(pDe
36cf0 73 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  st);.    break;.
36d00 20 20 7d 0a 20 20 70 56 74 61 62 20 3d 20 70 43    }.  pVtab = pC
36d10 75 72 2d 3e 75 63 2e 70 56 43 75 72 2d 3e 70 56  ur->uc.pVCur->pV
36d20 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d  tab;.  pModule =
36d30 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b   pVtab->pModule;
36d40 0a 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75  .  assert( pModu
36d50 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 20 29 3b 0a 20  le->xColumn );. 
36d60 20 6d 65 6d 73 65 74 28 26 73 43 6f 6e 74 65 78   memset(&sContex
36d70 74 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 43 6f  t, 0, sizeof(sCo
36d80 6e 74 65 78 74 29 29 3b 0a 20 20 73 43 6f 6e 74  ntext));.  sCont
36d90 65 78 74 2e 70 4f 75 74 20 3d 20 70 44 65 73 74  ext.pOut = pDest
36da0 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  ;.  MemSetTypeFl
36db0 61 67 28 70 44 65 73 74 2c 20 4d 45 4d 5f 4e 75  ag(pDest, MEM_Nu
36dc0 6c 6c 29 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64  ll);.  rc = pMod
36dd0 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 28 70 43 75  ule->xColumn(pCu
36de0 72 2d 3e 75 63 2e 70 56 43 75 72 2c 20 26 73 43  r->uc.pVCur, &sC
36df0 6f 6e 74 65 78 74 2c 20 70 4f 70 2d 3e 70 32 29  ontext, pOp->p2)
36e00 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62 49  ;.  sqlite3VtabI
36e10 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70  mportErrmsg(p, p
36e20 56 74 61 62 29 3b 0a 20 20 69 66 28 20 73 43 6f  Vtab);.  if( sCo
36e30 6e 74 65 78 74 2e 69 73 45 72 72 6f 72 20 29 7b  ntext.isError ){
36e40 0a 20 20 20 20 72 63 20 3d 20 73 43 6f 6e 74 65  .    rc = sConte
36e50 78 74 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a  xt.isError;.  }.
36e60 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
36e70 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 44 65 73  ngeEncoding(pDes
36e80 74 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  t, encoding);.  
36e90 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
36ea0 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a  Op->p3, pDest);.
36eb0 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
36ec0 42 53 49 5a 45 28 70 44 65 73 74 29 3b 0a 0a 20  BSIZE(pDest);.. 
36ed0 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
36ee0 4d 65 6d 54 6f 6f 42 69 67 28 70 44 65 73 74 29  MemTooBig(pDest)
36ef0 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
36f00 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 69 66 28 20  _big;.  }.  if( 
36f10 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
36f20 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
36f30 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
36f40 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
36f50 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
36f60 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
36f70 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
36f80 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4e 65 78  ./* Opcode: VNex
36f90 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
36fa0 0a 2a 2a 20 41 64 76 61 6e 63 65 20 76 69 72 74  .** Advance virt
36fb0 75 61 6c 20 74 61 62 6c 65 20 50 31 20 74 6f 20  ual table P1 to 
36fc0 74 68 65 20 6e 65 78 74 20 72 6f 77 20 69 6e 20  the next row in 
36fd0 69 74 73 20 72 65 73 75 6c 74 20 73 65 74 20 61  its result set a
36fe0 6e 64 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 69 6e  nd.** jump to in
36ff0 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 20 4f  struction P2.  O
37000 72 2c 20 69 66 20 74 68 65 20 76 69 72 74 75 61  r, if the virtua
37010 6c 20 74 61 62 6c 65 20 68 61 73 20 72 65 61 63  l table has reac
37020 68 65 64 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f  hed.** the end o
37030 66 20 69 74 73 20 72 65 73 75 6c 74 20 73 65 74  f its result set
37040 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f  , then fall thro
37050 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
37060 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
37070 63 61 73 65 20 4f 50 5f 56 4e 65 78 74 3a 20 7b  case OP_VNext: {
37080 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
37090 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
370a0 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c  tab;.  const sql
370b0 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
370c0 64 75 6c 65 3b 0a 20 20 69 6e 74 20 72 65 73 3b  dule;.  int res;
370d0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
370e0 43 75 72 3b 0a 0a 20 20 72 65 73 20 3d 20 30 3b  Cur;..  res = 0;
370f0 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43  .  pCur = p->apC
37100 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
37110 73 73 65 72 74 28 20 70 43 75 72 2d 3e 65 43 75  ssert( pCur->eCu
37120 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 56  rType==CURTYPE_V
37130 54 41 42 20 29 3b 0a 20 20 69 66 28 20 70 43 75  TAB );.  if( pCu
37140 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20  r->nullRow ){.  
37150 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70    break;.  }.  p
37160 56 74 61 62 20 3d 20 70 43 75 72 2d 3e 75 63 2e  Vtab = pCur->uc.
37170 70 56 43 75 72 2d 3e 70 56 74 61 62 3b 0a 20 20  pVCur->pVtab;.  
37180 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d  pModule = pVtab-
37190 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65  >pModule;.  asse
371a0 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65  rt( pModule->xNe
371b0 78 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f  xt );..  /* Invo
371c0 6b 65 20 74 68 65 20 78 4e 65 78 74 28 29 20 6d  ke the xNext() m
371d0 65 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64  ethod of the mod
371e0 75 6c 65 2e 20 54 68 65 72 65 20 69 73 20 6e 6f  ule. There is no
371f0 20 77 61 79 20 66 6f 72 20 74 68 65 0a 20 20 2a   way for the.  *
37200 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20 69 6d 70  * underlying imp
37210 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 72  lementation to r
37220 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69  eturn an error i
37230 66 20 6f 6e 65 20 6f 63 63 75 72 73 20 64 75 72  f one occurs dur
37240 69 6e 67 0a 20 20 2a 2a 20 78 4e 65 78 74 28 29  ing.  ** xNext()
37250 2e 20 49 6e 73 74 65 61 64 2c 20 69 66 20 61 6e  . Instead, if an
37260 20 65 72 72 6f 72 20 6f 63 63 75 72 73 2c 20 74   error occurs, t
37270 72 75 65 20 69 73 20 72 65 74 75 72 6e 65 64 20  rue is returned 
37280 28 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74  (indicating that
37290 20 0a 20 20 2a 2a 20 64 61 74 61 20 69 73 20 61   .  ** data is a
372a0 76 61 69 6c 61 62 6c 65 29 20 61 6e 64 20 74 68  vailable) and th
372b0 65 20 65 72 72 6f 72 20 63 6f 64 65 20 72 65 74  e error code ret
372c0 75 72 6e 65 64 20 77 68 65 6e 20 78 43 6f 6c 75  urned when xColu
372d0 6d 6e 20 6f 72 0a 20 20 2a 2a 20 73 6f 6d 65 20  mn or.  ** some 
372e0 6f 74 68 65 72 20 6d 65 74 68 6f 64 20 69 73 20  other method is 
372f0 6e 65 78 74 20 69 6e 76 6f 6b 65 64 20 6f 6e 20  next invoked on 
37300 74 68 65 20 73 61 76 65 20 76 69 72 74 75 61 6c  the save virtual
37310 20 74 61 62 6c 65 20 63 75 72 73 6f 72 2e 0a 20   table cursor.. 
37320 20 2a 2f 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75   */.  rc = pModu
37330 6c 65 2d 3e 78 4e 65 78 74 28 70 43 75 72 2d 3e  le->xNext(pCur->
37340 75 63 2e 70 56 43 75 72 29 3b 0a 20 20 73 71 6c  uc.pVCur);.  sql
37350 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72  ite3VtabImportEr
37360 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a  rmsg(p, pVtab);.
37370 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
37380 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
37390 6f 72 3b 0a 20 20 72 65 73 20 3d 20 70 4d 6f 64  or;.  res = pMod
373a0 75 6c 65 2d 3e 78 45 6f 66 28 70 43 75 72 2d 3e  ule->xEof(pCur->
373b0 75 63 2e 70 56 43 75 72 29 3b 0a 20 20 56 64 62  uc.pVCur);.  Vdb
373c0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 21 72 65  eBranchTaken(!re
373d0 73 2c 32 29 3b 0a 20 20 69 66 28 20 21 72 65 73  s,2);.  if( !res
373e0 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68   ){.    /* If th
373f0 65 72 65 20 69 73 20 64 61 74 61 2c 20 6a 75 6d  ere is data, jum
37400 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20 67  p to P2 */.    g
37410 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61  oto jump_to_p2_a
37420 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74  nd_check_for_int
37430 65 72 72 75 70 74 3b 0a 20 20 7d 0a 20 20 67 6f  errupt;.  }.  go
37440 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74  to check_for_int
37450 65 72 72 75 70 74 3b 0a 7d 0a 23 65 6e 64 69 66  errupt;.}.#endif
37460 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
37470 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
37480 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
37490 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
374a0 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 52 65  E./* Opcode: VRe
374b0 6e 61 6d 65 20 50 31 20 2a 20 2a 20 50 34 20 2a  name P1 * * P4 *
374c0 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
374d0 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74  ointer to a virt
374e0 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74  ual table object
374f0 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61  , an sqlite3_vta
37500 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20  b structure..** 
37510 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f  This opcode invo
37520 6b 65 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f  kes the correspo
37530 6e 64 69 6e 67 20 78 52 65 6e 61 6d 65 20 6d 65  nding xRename me
37540 74 68 6f 64 2e 20 54 68 65 20 76 61 6c 75 65 0a  thod. The value.
37550 2a 2a 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ** in register P
37560 31 20 69 73 20 70 61 73 73 65 64 20 61 73 20 74  1 is passed as t
37570 68 65 20 7a 4e 61 6d 65 20 61 72 67 75 6d 65 6e  he zName argumen
37580 74 20 74 6f 20 74 68 65 20 78 52 65 6e 61 6d 65  t to the xRename
37590 20 6d 65 74 68 6f 64 2e 0a 2a 2f 0a 63 61 73 65   method..*/.case
375a0 20 4f 50 5f 56 52 65 6e 61 6d 65 3a 20 7b 0a 20   OP_VRename: {. 
375b0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
375c0 56 74 61 62 3b 0a 20 20 4d 65 6d 20 2a 70 4e 61  Vtab;.  Mem *pNa
375d0 6d 65 3b 0a 0a 20 20 70 56 74 61 62 20 3d 20 70  me;..  pVtab = p
375e0 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56  Op->p4.pVtab->pV
375f0 74 61 62 3b 0a 20 20 70 4e 61 6d 65 20 3d 20 26  tab;.  pName = &
37600 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
37610 20 61 73 73 65 72 74 28 20 70 56 74 61 62 2d 3e   assert( pVtab->
37620 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65  pModule->xRename
37630 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65   );.  assert( me
37640 6d 49 73 56 61 6c 69 64 28 70 4e 61 6d 65 29 20  mIsValid(pName) 
37650 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
37660 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20  readOnly==0 );. 
37670 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
37680 70 4f 70 2d 3e 70 31 2c 20 70 4e 61 6d 65 29 3b  pOp->p1, pName);
37690 0a 20 20 61 73 73 65 72 74 28 20 70 4e 61 6d 65  .  assert( pName
376a0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74  ->flags & MEM_St
376b0 72 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  r );.  testcase(
376c0 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c   pName->enc==SQL
376d0 49 54 45 5f 55 54 46 38 20 29 3b 0a 20 20 74 65  ITE_UTF8 );.  te
376e0 73 74 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65  stcase( pName->e
376f0 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36  nc==SQLITE_UTF16
37700 42 45 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  BE );.  testcase
37710 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51  ( pName->enc==SQ
37720 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 29 3b 0a  LITE_UTF16LE );.
37730 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
37740 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
37750 28 70 4e 61 6d 65 2c 20 53 51 4c 49 54 45 5f 55  (pName, SQLITE_U
37760 54 46 38 29 3b 0a 20 20 69 66 28 20 72 63 20 29  TF8);.  if( rc )
37770 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
37780 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 72 63 20 3d  to_error;.  rc =
37790 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d   pVtab->pModule-
377a0 3e 78 52 65 6e 61 6d 65 28 70 56 74 61 62 2c 20  >xRename(pVtab, 
377b0 70 4e 61 6d 65 2d 3e 7a 29 3b 0a 20 20 73 71 6c  pName->z);.  sql
377c0 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72  ite3VtabImportEr
377d0 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a  rmsg(p, pVtab);.
377e0 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 30    p->expired = 0
377f0 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
37800 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
37810 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  rror;.  break;.}
37820 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
37830 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
37840 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
37850 6f 64 65 3a 20 56 55 70 64 61 74 65 20 50 31 20  ode: VUpdate P1 
37860 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
37870 79 6e 6f 70 73 69 73 3a 20 64 61 74 61 3d 72 5b  ynopsis: data=r[
37880 50 33 40 50 32 5d 0a 2a 2a 0a 2a 2a 20 50 34 20  P3@P2].**.** P4 
37890 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
378a0 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
378b0 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74  object, an sqlit
378c0 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72  e3_vtab structur
378d0 65 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  e..** This opcod
378e0 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f  e invokes the co
378f0 72 72 65 73 70 6f 6e 64 69 6e 67 20 78 55 70 64  rresponding xUpd
37900 61 74 65 20 6d 65 74 68 6f 64 2e 20 50 32 20 76  ate method. P2 v
37910 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e  alues.** are con
37920 74 69 67 75 6f 75 73 20 6d 65 6d 6f 72 79 20 63  tiguous memory c
37930 65 6c 6c 73 20 73 74 61 72 74 69 6e 67 20 61 74  ells starting at
37940 20 50 33 20 74 6f 20 70 61 73 73 20 74 6f 20 74   P3 to pass to t
37950 68 65 20 78 55 70 64 61 74 65 20 0a 2a 2a 20 69  he xUpdate .** i
37960 6e 76 6f 63 61 74 69 6f 6e 2e 20 54 68 65 20 76  nvocation. The v
37970 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
37980 20 28 50 33 2b 50 32 2d 31 29 20 63 6f 72 72 65   (P3+P2-1) corre
37990 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 0a 2a  sponds to the .*
379a0 2a 20 70 32 74 68 20 65 6c 65 6d 65 6e 74 20 6f  * p2th element o
379b0 66 20 74 68 65 20 61 72 67 76 20 61 72 72 61 79  f the argv array
379c0 20 70 61 73 73 65 64 20 74 6f 20 78 55 70 64 61   passed to xUpda
379d0 74 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 78 55  te..**.** The xU
379e0 70 64 61 74 65 20 6d 65 74 68 6f 64 20 77 69 6c  pdate method wil
379f0 6c 20 64 6f 20 61 20 44 45 4c 45 54 45 20 6f 72  l do a DELETE or
37a00 20 61 6e 20 49 4e 53 45 52 54 20 6f 72 20 62 6f   an INSERT or bo
37a10 74 68 2e 0a 2a 2a 20 54 68 65 20 61 72 67 76 5b  th..** The argv[
37a20 30 5d 20 65 6c 65 6d 65 6e 74 20 28 77 68 69 63  0] element (whic
37a30 68 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  h corresponds to
37a40 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 33 29   memory cell P3)
37a50 0a 2a 2a 20 69 73 20 74 68 65 20 72 6f 77 69 64  .** is the rowid
37a60 20 6f 66 20 61 20 72 6f 77 20 74 6f 20 64 65 6c   of a row to del
37a70 65 74 65 2e 20 20 49 66 20 61 72 67 76 5b 30 5d  ete.  If argv[0]
37a80 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 6e 6f   is NULL then no
37a90 20 0a 2a 2a 20 64 65 6c 65 74 69 6f 6e 20 6f 63   .** deletion oc
37aa0 63 75 72 73 2e 20 20 54 68 65 20 61 72 67 76 5b  curs.  The argv[
37ab0 31 5d 20 65 6c 65 6d 65 6e 74 20 69 73 20 74 68  1] element is th
37ac0 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 6e  e rowid of the n
37ad0 65 77 20 0a 2a 2a 20 72 6f 77 2e 20 20 54 68 69  ew .** row.  Thi
37ae0 73 20 63 61 6e 20 62 65 20 4e 55 4c 4c 20 74 6f  s can be NULL to
37af0 20 68 61 76 65 20 74 68 65 20 76 69 72 74 75 61   have the virtua
37b00 6c 20 74 61 62 6c 65 20 73 65 6c 65 63 74 20 74  l table select t
37b10 68 65 20 6e 65 77 20 0a 2a 2a 20 72 6f 77 69 64  he new .** rowid
37b20 20 66 6f 72 20 69 74 73 65 6c 66 2e 20 20 54 68   for itself.  Th
37b30 65 20 73 75 62 73 65 71 75 65 6e 74 20 65 6c 65  e subsequent ele
37b40 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 61 72 72  ments in the arr
37b50 61 79 20 61 72 65 20 0a 2a 2a 20 74 68 65 20 76  ay are .** the v
37b60 61 6c 75 65 73 20 6f 66 20 63 6f 6c 75 6d 6e 73  alues of columns
37b70 20 69 6e 20 74 68 65 20 6e 65 77 20 72 6f 77 2e   in the new row.
37b80 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 3d 3d 31 20  .**.** If P2==1 
37b90 74 68 65 6e 20 6e 6f 20 69 6e 73 65 72 74 20 69  then no insert i
37ba0 73 20 70 65 72 66 6f 72 6d 65 64 2e 20 20 61 72  s performed.  ar
37bb0 67 76 5b 30 5d 20 69 73 20 74 68 65 20 72 6f 77  gv[0] is the row
37bc0 69 64 20 6f 66 0a 2a 2a 20 61 20 72 6f 77 20 74  id of.** a row t
37bd0 6f 20 64 65 6c 65 74 65 2e 0a 2a 2a 0a 2a 2a 20  o delete..**.** 
37be0 50 31 20 69 73 20 61 20 62 6f 6f 6c 65 61 6e 20  P1 is a boolean 
37bf0 66 6c 61 67 2e 20 49 66 20 69 74 20 69 73 20 73  flag. If it is s
37c00 65 74 20 74 6f 20 74 72 75 65 20 61 6e 64 20 74  et to true and t
37c10 68 65 20 78 55 70 64 61 74 65 20 63 61 6c 6c 0a  he xUpdate call.
37c20 2a 2a 20 69 73 20 73 75 63 63 65 73 73 66 75 6c  ** is successful
37c30 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65  , then the value
37c40 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c   returned by sql
37c50 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74  ite3_last_insert
37c60 5f 72 6f 77 69 64 28 29 20 0a 2a 2a 20 69 73 20  _rowid() .** is 
37c70 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65  set to the value
37c80 20 6f 66 20 74 68 65 20 72 6f 77 69 64 20 66 6f   of the rowid fo
37c90 72 20 74 68 65 20 72 6f 77 20 6a 75 73 74 20 69  r the row just i
37ca0 6e 73 65 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 50  nserted..**.** P
37cb0 35 20 69 73 20 74 68 65 20 65 72 72 6f 72 20 61  5 is the error a
37cc0 63 74 69 6f 6e 73 20 28 4f 45 5f 52 65 70 6c 61  ctions (OE_Repla
37cd0 63 65 2c 20 4f 45 5f 46 61 69 6c 2c 20 4f 45 5f  ce, OE_Fail, OE_
37ce0 49 67 6e 6f 72 65 2c 20 65 74 63 29 20 74 6f 0a  Ignore, etc) to.
37cf0 2a 2a 20 61 70 70 6c 79 20 69 6e 20 74 68 65 20  ** apply in the 
37d00 63 61 73 65 20 6f 66 20 61 20 63 6f 6e 73 74 72  case of a constr
37d10 61 69 6e 74 20 66 61 69 6c 75 72 65 20 6f 6e 20  aint failure on 
37d20 61 6e 20 69 6e 73 65 72 74 20 6f 72 20 75 70 64  an insert or upd
37d30 61 74 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ate..*/.case OP_
37d40 56 55 70 64 61 74 65 3a 20 7b 0a 20 20 73 71 6c  VUpdate: {.  sql
37d50 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
37d60 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65  ;.  const sqlite
37d70 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c  3_module *pModul
37d80 65 3b 0a 20 20 69 6e 74 20 6e 41 72 67 3b 0a 20  e;.  int nArg;. 
37d90 20 69 6e 74 20 69 3b 0a 20 20 73 71 6c 69 74 65   int i;.  sqlite
37da0 5f 69 6e 74 36 34 20 72 6f 77 69 64 3b 0a 20 20  _int64 rowid;.  
37db0 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a 20 20 4d  Mem **apArg;.  M
37dc0 65 6d 20 2a 70 58 3b 0a 0a 20 20 61 73 73 65 72  em *pX;..  asser
37dd0 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 31 20 20 20  t( pOp->p2==1   
37de0 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d       || pOp->p5=
37df0 3d 4f 45 5f 46 61 69 6c 20 20 20 7c 7c 20 70 4f  =OE_Fail   || pO
37e00 70 2d 3e 70 35 3d 3d 4f 45 5f 52 6f 6c 6c 62 61  p->p5==OE_Rollba
37e10 63 6b 20 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f  ck .       || pO
37e20 70 2d 3e 70 35 3d 3d 4f 45 5f 41 62 6f 72 74 20  p->p5==OE_Abort 
37e30 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 49  || pOp->p5==OE_I
37e40 67 6e 6f 72 65 20 7c 7c 20 70 4f 70 2d 3e 70 35  gnore || pOp->p5
37e50 3d 3d 4f 45 5f 52 65 70 6c 61 63 65 0a 20 20 29  ==OE_Replace.  )
37e60 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  ;.  assert( p->r
37e70 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20  eadOnly==0 );.  
37e80 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e  pVtab = pOp->p4.
37e90 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20  pVtab->pVtab;.  
37ea0 69 66 28 20 70 56 74 61 62 3d 3d 30 20 7c 7c 20  if( pVtab==0 || 
37eb0 4e 45 56 45 52 28 70 56 74 61 62 2d 3e 70 4d 6f  NEVER(pVtab->pMo
37ec0 64 75 6c 65 3d 3d 30 29 20 29 7b 0a 20 20 20 20  dule==0) ){.    
37ed0 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b  rc = SQLITE_LOCK
37ee0 45 44 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f  ED;.    goto abo
37ef0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
37f00 0a 20 20 7d 0a 20 20 70 4d 6f 64 75 6c 65 20 3d  .  }.  pModule =
37f10 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b   pVtab->pModule;
37f20 0a 20 20 6e 41 72 67 20 3d 20 70 4f 70 2d 3e 70  .  nArg = pOp->p
37f30 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  2;.  assert( pOp
37f40 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 56 54 41  ->p4type==P4_VTA
37f50 42 20 29 3b 0a 20 20 69 66 28 20 41 4c 57 41 59  B );.  if( ALWAY
37f60 53 28 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64 61  S(pModule->xUpda
37f70 74 65 29 20 29 7b 0a 20 20 20 20 75 38 20 76 74  te) ){.    u8 vt
37f80 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 64  abOnConflict = d
37f90 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63  b->vtabOnConflic
37fa0 74 3b 0a 20 20 20 20 61 70 41 72 67 20 3d 20 70  t;.    apArg = p
37fb0 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20 70 58 20  ->apArg;.    pX 
37fc0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
37fd0 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  ;.    for(i=0; i
37fe0 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20  <nArg; i++){.   
37ff0 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
38000 56 61 6c 69 64 28 70 58 29 20 29 3b 0a 20 20 20  Valid(pX) );.   
38010 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
38020 6e 67 65 28 70 2c 20 70 58 29 3b 0a 20 20 20 20  nge(p, pX);.    
38030 20 20 61 70 41 72 67 5b 69 5d 20 3d 20 70 58 3b    apArg[i] = pX;
38040 0a 20 20 20 20 20 20 70 58 2b 2b 3b 0a 20 20 20  .      pX++;.   
38050 20 7d 0a 20 20 20 20 64 62 2d 3e 76 74 61 62 4f   }.    db->vtabO
38060 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 70 4f 70 2d  nConflict = pOp-
38070 3e 70 35 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d  >p5;.    rc = pM
38080 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74 65 28 70  odule->xUpdate(p
38090 56 74 61 62 2c 20 6e 41 72 67 2c 20 61 70 41 72  Vtab, nArg, apAr
380a0 67 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20 20 20  g, &rowid);.    
380b0 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69  db->vtabOnConfli
380c0 63 74 20 3d 20 76 74 61 62 4f 6e 43 6f 6e 66 6c  ct = vtabOnConfl
380d0 69 63 74 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  ict;.    sqlite3
380e0 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67  VtabImportErrmsg
380f0 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20  (p, pVtab);.    
38100 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
38110 4b 20 26 26 20 70 4f 70 2d 3e 70 31 20 29 7b 0a  K && pOp->p1 ){.
38120 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6e 41        assert( nA
38130 72 67 3e 31 20 26 26 20 61 70 41 72 67 5b 30 5d  rg>1 && apArg[0]
38140 20 26 26 20 28 61 70 41 72 67 5b 30 5d 2d 3e 66   && (apArg[0]->f
38150 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c 29 20 29  lags&MEM_Null) )
38160 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6c 61 73 74  ;.      db->last
38170 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69  Rowid = lastRowi
38180 64 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 7d  d = rowid;.    }
38190 0a 20 20 20 20 69 66 28 20 28 72 63 26 30 78 66  .    if( (rc&0xf
381a0 66 29 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e 53 54  f)==SQLITE_CONST
381b0 52 41 49 4e 54 20 26 26 20 70 4f 70 2d 3e 70 34  RAINT && pOp->p4
381c0 2e 70 56 74 61 62 2d 3e 62 43 6f 6e 73 74 72 61  .pVtab->bConstra
381d0 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 69 66 28  int ){.      if(
381e0 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 49 67 6e   pOp->p5==OE_Ign
381f0 6f 72 65 20 29 7b 0a 20 20 20 20 20 20 20 20 72  ore ){.        r
38200 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20  c = SQLITE_OK;. 
38210 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
38220 20 20 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69      p->errorActi
38230 6f 6e 20 3d 20 28 28 70 4f 70 2d 3e 70 35 3d 3d  on = ((pOp->p5==
38240 4f 45 5f 52 65 70 6c 61 63 65 29 20 3f 20 4f 45  OE_Replace) ? OE
38250 5f 41 62 6f 72 74 20 3a 20 70 4f 70 2d 3e 70 35  _Abort : pOp->p5
38260 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
38270 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 2d 3e 6e  else{.      p->n
38280 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 20 20 7d 0a  Change++;.    }.
38290 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74      if( rc ) got
382a0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
382b0 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 62 72 65 61  rror;.  }.  brea
382c0 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
382d0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
382e0 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
382f0 64 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54  def  SQLITE_OMIT
38300 5f 50 41 47 45 52 5f 50 52 41 47 4d 4