/ Hex Artifact Content
Login

Artifact 132f552033f72820c27a100861fa83254358cbcd:


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 23 69 66 64 65 66 20 53 51 4c 49 54  e);.#ifdef SQLIT
7d00: 45 5f 54 52 41 43 45 5f 54 52 49 47 47 45 52 0a  E_TRACE_TRIGGER.
7d10: 20 20 20 20 69 66 28 20 28 64 62 2d 3e 6d 54 72      if( (db->mTr
7d20: 61 63 65 20 26 20 53 51 4c 49 54 45 5f 54 52 41  ace & SQLITE_TRA
7d30: 43 45 5f 53 54 4d 54 29 20 26 26 20 61 4f 70 5b  CE_STMT) && aOp[
7d40: 30 5d 2e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 20  0].p4.z ){.     
7d50: 20 69 6e 74 20 6e 54 6f 74 61 6c 20 3d 20 6e 56   int nTotal = nV
7d60: 6d 53 74 65 70 20 2d 20 70 46 72 61 6d 65 2d 3e  mStep - pFrame->
7d70: 6e 56 6d 53 74 65 70 3b 0a 20 20 20 20 20 20 63  nVmStep;.      c
7d80: 68 61 72 20 2a 7a 54 72 61 63 65 3b 0a 20 20 20  har *zTrace;.   
7d90: 20 20 20 61 73 73 65 72 74 28 20 6e 54 6f 74 61     assert( nTota
7da0: 6c 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20 61 73  l>=0 );.      as
7db0: 73 65 72 74 28 20 64 62 2d 3e 78 54 72 61 63 65  sert( db->xTrace
7dc0: 20 29 3b 0a 20 20 20 20 20 20 7a 54 72 61 63 65   );.      zTrace
7dd0: 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
7de0: 74 66 28 22 25 2e 2a 73 25 73 20 63 6f 6d 70 6c  tf("%.*s%s compl
7df0: 65 74 65 64 20 28 56 4d 20 73 74 65 70 73 3a 20  eted (VM steps: 
7e00: 74 6f 74 61 6c 3d 25 64 20 73 65 6c 66 3d 25 64  total=%d self=%d
7e10: 29 22 2c 20 0a 20 20 20 20 20 20 20 20 20 20 70  )", .          p
7e20: 2d 3e 6e 46 72 61 6d 65 2c 20 22 20 20 20 20 20  ->nFrame, "     
7e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a                 :
7e60: 22 2c 0a 20 20 20 20 20 20 20 20 20 20 61 4f 70  ",.          aOp
7e70: 5b 30 5d 2e 70 34 2e 7a 2c 20 6e 54 6f 74 61 6c  [0].p4.z, nTotal
7e80: 2c 20 6e 56 6d 53 74 65 70 20 2d 20 70 46 72 61  , nVmStep - pFra
7e90: 6d 65 2d 3e 6e 56 6d 53 74 65 70 41 64 6a 0a 20  me->nVmStepAdj. 
7ea0: 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 69 66       );.      if
7eb0: 28 20 7a 54 72 61 63 65 20 29 7b 0a 20 20 20 20  ( zTrace ){.    
7ec0: 20 20 20 20 28 76 6f 69 64 29 64 62 2d 3e 78 54      (void)db->xT
7ed0: 72 61 63 65 28 53 51 4c 49 54 45 5f 54 52 41 43  race(SQLITE_TRAC
7ee0: 45 5f 53 54 4d 54 2c 20 64 62 2d 3e 70 54 72 61  E_STMT, db->pTra
7ef0: 63 65 41 72 67 2c 20 30 2c 20 7a 54 72 61 63 65  ceArg, 0, zTrace
7f00: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
7f10: 65 33 5f 66 72 65 65 28 7a 54 72 61 63 65 29 3b  e3_free(zTrace);
7f20: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
7f30: 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a  f( p->pFrame ){.
7f40: 20 20 20 20 20 20 20 20 70 2d 3e 70 46 72 61 6d          p->pFram
7f50: 65 2d 3e 6e 56 6d 53 74 65 70 41 64 6a 20 2b 3d  e->nVmStepAdj +=
7f60: 20 6e 54 6f 74 61 6c 3b 0a 20 20 20 20 20 20 7d   nTotal;.      }
7f70: 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  .    }.#endif.  
7f80: 20 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 64 62    lastRowid = db
7f90: 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 20  ->lastRowid;.   
7fa0: 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 4f 45   if( pOp->p2==OE
7fb0: 5f 49 67 6e 6f 72 65 20 29 7b 0a 20 20 20 20 20  _Ignore ){.     
7fc0: 20 2f 2a 20 49 6e 73 74 72 75 63 74 69 6f 6e 20   /* Instruction 
7fd0: 70 63 78 20 69 73 20 74 68 65 20 4f 50 5f 50 72  pcx is the OP_Pr
7fe0: 6f 67 72 61 6d 20 74 68 61 74 20 69 6e 76 6f 6b  ogram that invok
7ff0: 65 64 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72  ed the sub-progr
8000: 61 6d 20 0a 20 20 20 20 20 20 2a 2a 20 63 75 72  am .      ** cur
8010: 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 68 61 6c  rently being hal
8020: 74 65 64 2e 20 49 66 20 74 68 65 20 70 32 20 69  ted. If the p2 i
8030: 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20 74 68  nstruction of th
8040: 69 73 20 4f 50 5f 48 61 6c 74 0a 20 20 20 20 20  is OP_Halt.     
8050: 20 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   ** instruction 
8060: 69 73 20 73 65 74 20 74 6f 20 4f 45 5f 49 67 6e  is set to OE_Ign
8070: 6f 72 65 2c 20 74 68 65 6e 20 74 68 65 20 73 75  ore, then the su
8080: 62 2d 70 72 6f 67 72 61 6d 20 69 73 20 74 68 72  b-program is thr
8090: 6f 77 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20 61  owing.      ** a
80a0: 6e 20 49 47 4e 4f 52 45 20 65 78 63 65 70 74 69  n IGNORE excepti
80b0: 6f 6e 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65  on. In this case
80c0: 20 6a 75 6d 70 20 74 6f 20 74 68 65 20 61 64 64   jump to the add
80d0: 72 65 73 73 20 73 70 65 63 69 66 69 65 64 0a 20  ress specified. 
80e0: 20 20 20 20 20 2a 2a 20 61 73 20 74 68 65 20 70       ** as the p
80f0: 32 20 6f 66 20 74 68 65 20 63 61 6c 6c 69 6e 67  2 of the calling
8100: 20 4f 50 5f 50 72 6f 67 72 61 6d 2e 20 20 2a 2f   OP_Program.  */
8110: 0a 20 20 20 20 20 20 70 63 78 20 3d 20 70 2d 3e  .      pcx = p->
8120: 61 4f 70 5b 70 63 78 5d 2e 70 32 2d 31 3b 0a 20  aOp[pcx].p2-1;. 
8130: 20 20 20 7d 0a 20 20 20 20 61 4f 70 20 3d 20 70     }.    aOp = p
8140: 2d 3e 61 4f 70 3b 0a 20 20 20 20 61 4d 65 6d 20  ->aOp;.    aMem 
8150: 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 70  = p->aMem;.    p
8160: 4f 70 20 3d 20 26 61 4f 70 5b 70 63 78 5d 3b 0a  Op = &aOp[pcx];.
8170: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
8180: 20 70 2d 3e 72 63 20 3d 20 70 4f 70 2d 3e 70 31   p->rc = pOp->p1
8190: 3b 0a 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69  ;.  p->errorActi
81a0: 6f 6e 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70 32  on = (u8)pOp->p2
81b0: 3b 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63 78 3b  ;.  p->pc = pcx;
81c0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
81d0: 70 35 3c 3d 34 20 29 3b 0a 20 20 69 66 28 20 70  p5<=4 );.  if( p
81e0: 2d 3e 72 63 20 29 7b 0a 20 20 20 20 69 66 28 20  ->rc ){.    if( 
81f0: 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 20  pOp->p5 ){.     
8200: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68   static const ch
8210: 61 72 20 2a 20 63 6f 6e 73 74 20 61 7a 54 79 70  ar * const azTyp
8220: 65 5b 5d 20 3d 20 7b 20 22 4e 4f 54 20 4e 55 4c  e[] = { "NOT NUL
8230: 4c 22 2c 20 22 55 4e 49 51 55 45 22 2c 20 22 43  L", "UNIQUE", "C
8240: 48 45 43 4b 22 2c 0a 20 20 20 20 20 20 20 20 20  HECK",.         
8250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8270: 20 20 20 20 22 46 4f 52 45 49 47 4e 20 4b 45 59      "FOREIGN KEY
8280: 22 20 7d 3b 0a 20 20 20 20 20 20 74 65 73 74 63  " };.      testc
8290: 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 31 20  ase( pOp->p5==1 
82a0: 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73  );.      testcas
82b0: 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 32 20 29 3b  e( pOp->p5==2 );
82c0: 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28  .      testcase(
82d0: 20 70 4f 70 2d 3e 70 35 3d 3d 33 20 29 3b 0a 20   pOp->p5==3 );. 
82e0: 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70       testcase( p
82f0: 4f 70 2d 3e 70 35 3d 3d 34 20 29 3b 0a 20 20 20  Op->p5==4 );.   
8300: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
8310: 72 6f 72 28 70 2c 20 22 25 73 20 63 6f 6e 73 74  ror(p, "%s const
8320: 72 61 69 6e 74 20 66 61 69 6c 65 64 22 2c 20 61  raint failed", a
8330: 7a 54 79 70 65 5b 70 4f 70 2d 3e 70 35 2d 31 5d  zType[pOp->p5-1]
8340: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70  );.      if( pOp
8350: 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 20 20  ->p4.z ){.      
8360: 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73    p->zErrMsg = s
8370: 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62  qlite3MPrintf(db
8380: 2c 20 22 25 7a 3a 20 25 73 22 2c 20 70 2d 3e 7a  , "%z: %s", p->z
8390: 45 72 72 4d 73 67 2c 20 70 4f 70 2d 3e 70 34 2e  ErrMsg, pOp->p4.
83a0: 7a 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  z);.      }.    
83b0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c  }else{.      sql
83c0: 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
83d0: 20 22 25 73 22 2c 20 70 4f 70 2d 3e 70 34 2e 7a   "%s", pOp->p4.z
83e0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  );.    }.    sql
83f0: 69 74 65 33 5f 6c 6f 67 28 70 4f 70 2d 3e 70 31  ite3_log(pOp->p1
8400: 2c 20 22 61 62 6f 72 74 20 61 74 20 25 64 20 69  , "abort at %d i
8410: 6e 20 5b 25 73 5d 3a 20 25 73 22 2c 20 70 63 78  n [%s]: %s", pcx
8420: 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70 2d 3e 7a 45  , p->zSql, p->zE
8430: 72 72 4d 73 67 29 3b 0a 20 20 7d 0a 20 20 72 63  rrMsg);.  }.  rc
8440: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 48 61   = sqlite3VdbeHa
8450: 6c 74 28 70 29 3b 0a 20 20 61 73 73 65 72 74 28  lt(p);.  assert(
8460: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59   rc==SQLITE_BUSY
8470: 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f   || rc==SQLITE_O
8480: 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f  K || rc==SQLITE_
8490: 45 52 52 4f 52 20 29 3b 0a 20 20 69 66 28 20 72  ERROR );.  if( r
84a0: 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29  c==SQLITE_BUSY )
84b0: 7b 0a 20 20 20 20 70 2d 3e 72 63 20 3d 20 53 51  {.    p->rc = SQ
84c0: 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c  LITE_BUSY;.  }el
84d0: 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
84e0: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
84f0: 20 28 70 2d 3e 72 63 26 30 78 66 66 29 3d 3d 53   (p->rc&0xff)==S
8500: 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54  QLITE_CONSTRAINT
8510: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
8520: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
8530: 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f   db->nDeferredCo
8540: 6e 73 3e 30 20 7c 7c 20 64 62 2d 3e 6e 44 65 66  ns>0 || db->nDef
8550: 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3e 30 20 29  erredImmCons>0 )
8560: 3b 0a 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63  ;.    rc = p->rc
8570: 20 3f 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 20   ? SQLITE_ERROR 
8580: 3a 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20  : SQLITE_DONE;. 
8590: 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72   }.  goto vdbe_r
85a0: 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  eturn;.}../* Opc
85b0: 6f 64 65 3a 20 49 6e 74 65 67 65 72 20 50 31 20  ode: Integer P1 
85c0: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
85d0: 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 31 0a 2a  psis: r[P2]=P1.*
85e0: 2a 0a 2a 2a 20 54 68 65 20 33 32 2d 62 69 74 20  *.** The 32-bit 
85f0: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50 31  integer value P1
8600: 20 69 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f   is written into
8610: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
8620: 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 65 72  .case OP_Integer
8630: 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  : {         /* o
8640: 75 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20  ut2 */.  pOut = 
8650: 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
8660: 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e  , pOp);.  pOut->
8670: 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  u.i = pOp->p1;. 
8680: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
8690: 63 6f 64 65 3a 20 49 6e 74 36 34 20 2a 20 50 32  code: Int64 * P2
86a0: 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
86b0: 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34 0a 2a 2a  sis: r[P2]=P4.**
86c0: 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
86d0: 74 65 72 20 74 6f 20 61 20 36 34 2d 62 69 74 20  ter to a 64-bit 
86e0: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a  integer value..*
86f0: 2a 20 57 72 69 74 65 20 74 68 61 74 20 76 61 6c  * Write that val
8700: 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  ue into register
8710: 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
8720: 49 6e 74 36 34 3a 20 7b 20 20 20 20 20 20 20 20  Int64: {        
8730: 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
8740: 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
8750: 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
8760: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
8770: 2e 70 49 36 34 21 3d 30 20 29 3b 0a 20 20 70 4f  .pI64!=0 );.  pO
8780: 75 74 2d 3e 75 2e 69 20 3d 20 2a 70 4f 70 2d 3e  ut->u.i = *pOp->
8790: 70 34 2e 70 49 36 34 3b 0a 20 20 62 72 65 61 6b  p4.pI64;.  break
87a0: 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ;.}..#ifndef SQL
87b0: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
87c0: 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64  G_POINT./* Opcod
87d0: 65 3a 20 52 65 61 6c 20 2a 20 50 32 20 2a 20 50  e: Real * P2 * P
87e0: 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
87f0: 20 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20   r[P2]=P4.**.** 
8800: 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
8810: 74 6f 20 61 20 36 34 2d 62 69 74 20 66 6c 6f 61  to a 64-bit floa
8820: 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65  ting point value
8830: 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20  ..** Write that 
8840: 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73  value into regis
8850: 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
8860: 4f 50 5f 52 65 61 6c 3a 20 7b 20 20 20 20 20 20  OP_Real: {      
8870: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
8880: 20 54 4b 5f 46 4c 4f 41 54 2c 20 6f 75 74 32 20   TK_FLOAT, out2 
8890: 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  */.  pOut = out2
88a0: 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
88b0: 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67  p);.  pOut->flag
88c0: 73 20 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20  s = MEM_Real;.  
88d0: 61 73 73 65 72 74 28 20 21 73 71 6c 69 74 65 33  assert( !sqlite3
88e0: 49 73 4e 61 4e 28 2a 70 4f 70 2d 3e 70 34 2e 70  IsNaN(*pOp->p4.p
88f0: 52 65 61 6c 29 20 29 3b 0a 20 20 70 4f 75 74 2d  Real) );.  pOut-
8900: 3e 75 2e 72 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e  >u.r = *pOp->p4.
8910: 70 52 65 61 6c 3b 0a 20 20 62 72 65 61 6b 3b 0a  pReal;.  break;.
8920: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63  }.#endif../* Opc
8930: 6f 64 65 3a 20 53 74 72 69 6e 67 38 20 2a 20 50  ode: String8 * P
8940: 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f  2 * P4 *.** Syno
8950: 70 73 69 73 3a 20 72 5b 50 32 5d 3d 27 50 34 27  psis: r[P2]='P4'
8960: 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73  .**.** P4 points
8970: 20 74 6f 20 61 20 6e 75 6c 20 74 65 72 6d 69 6e   to a nul termin
8980: 61 74 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e  ated UTF-8 strin
8990: 67 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  g. This opcode i
89a0: 73 20 74 72 61 6e 73 66 6f 72 6d 65 64 20 0a 2a  s transformed .*
89b0: 2a 20 69 6e 74 6f 20 61 20 53 74 72 69 6e 67 20  * into a String 
89c0: 6f 70 63 6f 64 65 20 62 65 66 6f 72 65 20 69 74  opcode before it
89d0: 20 69 73 20 65 78 65 63 75 74 65 64 20 66 6f 72   is executed for
89e0: 20 74 68 65 20 66 69 72 73 74 20 74 69 6d 65 2e   the first time.
89f0: 20 20 44 75 72 69 6e 67 0a 2a 2a 20 74 68 69 73    During.** this
8a00: 20 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 2c   transformation,
8a10: 20 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 73   the length of s
8a20: 74 72 69 6e 67 20 50 34 20 69 73 20 63 6f 6d 70  tring P4 is comp
8a30: 75 74 65 64 20 61 6e 64 20 73 74 6f 72 65 64 0a  uted and stored.
8a40: 2a 2a 20 61 73 20 74 68 65 20 50 31 20 70 61 72  ** as the P1 par
8a50: 61 6d 65 74 65 72 2e 0a 2a 2f 0a 63 61 73 65 20  ameter..*/.case 
8a60: 4f 50 5f 53 74 72 69 6e 67 38 3a 20 7b 20 20 20  OP_String8: {   
8a70: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
8a80: 20 54 4b 5f 53 54 52 49 4e 47 2c 20 6f 75 74 32   TK_STRING, out2
8a90: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
8aa0: 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20  p->p4.z!=0 );.  
8ab0: 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
8ac0: 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
8ad0: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f   pOp->opcode = O
8ae0: 50 5f 53 74 72 69 6e 67 3b 0a 20 20 70 4f 70 2d  P_String;.  pOp-
8af0: 3e 70 31 20 3d 20 73 71 6c 69 74 65 33 53 74 72  >p1 = sqlite3Str
8b00: 6c 65 6e 33 30 28 70 4f 70 2d 3e 70 34 2e 7a 29  len30(pOp->p4.z)
8b10: 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ;..#ifndef SQLIT
8b20: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 69  E_OMIT_UTF16.  i
8b30: 66 28 20 65 6e 63 6f 64 69 6e 67 21 3d 53 51 4c  f( encoding!=SQL
8b40: 49 54 45 5f 55 54 46 38 20 29 7b 0a 20 20 20 20  ITE_UTF8 ){.    
8b50: 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
8b60: 4d 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20  MemSetStr(pOut, 
8b70: 70 4f 70 2d 3e 70 34 2e 7a 2c 20 2d 31 2c 20 53  pOp->p4.z, -1, S
8b80: 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49  QLITE_UTF8, SQLI
8b90: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
8ba0: 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
8bb0: 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c  TE_OK || rc==SQL
8bc0: 49 54 45 5f 54 4f 4f 42 49 47 20 29 3b 0a 20 20  ITE_TOOBIG );.  
8bd0: 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21    if( SQLITE_OK!
8be0: 3d 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e  =sqlite3VdbeChan
8bf0: 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c  geEncoding(pOut,
8c00: 20 65 6e 63 6f 64 69 6e 67 29 20 29 20 67 6f 74   encoding) ) got
8c10: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61 73  o no_mem;.    as
8c20: 73 65 72 74 28 20 70 4f 75 74 2d 3e 73 7a 4d 61  sert( pOut->szMa
8c30: 6c 6c 6f 63 3e 30 20 26 26 20 70 4f 75 74 2d 3e  lloc>0 && pOut->
8c40: 7a 4d 61 6c 6c 6f 63 3d 3d 70 4f 75 74 2d 3e 7a  zMalloc==pOut->z
8c50: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
8c60: 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70  VdbeMemDynamic(p
8c70: 4f 75 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20 70  Out)==0 );.    p
8c80: 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 3d 20  Out->szMalloc = 
8c90: 30 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  0;.    pOut->fla
8ca0: 67 73 20 7c 3d 20 4d 45 4d 5f 53 74 61 74 69 63  gs |= MEM_Static
8cb0: 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  ;.    if( pOp->p
8cc0: 34 74 79 70 65 3d 3d 50 34 5f 44 59 4e 41 4d 49  4type==P4_DYNAMI
8cd0: 43 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  C ){.      sqlit
8ce0: 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 4f 70  e3DbFree(db, pOp
8cf0: 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a 20  ->p4.z);.    }. 
8d00: 20 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d     pOp->p4type =
8d10: 20 50 34 5f 44 59 4e 41 4d 49 43 3b 0a 20 20 20   P4_DYNAMIC;.   
8d20: 20 70 4f 70 2d 3e 70 34 2e 7a 20 3d 20 70 4f 75   pOp->p4.z = pOu
8d30: 74 2d 3e 7a 3b 0a 20 20 20 20 70 4f 70 2d 3e 70  t->z;.    pOp->p
8d40: 31 20 3d 20 70 4f 75 74 2d 3e 6e 3b 0a 20 20 7d  1 = pOut->n;.  }
8d50: 0a 20 20 74 65 73 74 63 61 73 65 28 20 72 63 3d  .  testcase( rc=
8d60: 3d 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20 29  =SQLITE_TOOBIG )
8d70: 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70  ;.#endif.  if( p
8d80: 4f 70 2d 3e 70 31 3e 64 62 2d 3e 61 4c 69 6d 69  Op->p1>db->aLimi
8d90: 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
8da0: 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f  ENGTH] ){.    go
8db0: 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
8dc0: 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
8dd0: 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 2f 2a 20  LITE_OK );.  /* 
8de0: 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  Fall through to 
8df0: 74 68 65 20 6e 65 78 74 20 63 61 73 65 2c 20 4f  the next case, O
8e00: 50 5f 53 74 72 69 6e 67 20 2a 2f 0a 7d 0a 20 20  P_String */.}.  
8e10: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72 69  ./* Opcode: Stri
8e20: 6e 67 20 50 31 20 50 32 20 50 33 20 50 34 20 50  ng P1 P2 P3 P4 P
8e30: 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  5.** Synopsis: r
8e40: 5b 50 32 5d 3d 27 50 34 27 20 28 6c 65 6e 3d 50  [P2]='P4' (len=P
8e50: 31 29 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72  1).**.** The str
8e60: 69 6e 67 20 76 61 6c 75 65 20 50 34 20 6f 66 20  ing value P4 of 
8e70: 6c 65 6e 67 74 68 20 50 31 20 28 62 79 74 65 73  length P1 (bytes
8e80: 29 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  ) is stored in r
8e90: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
8ea0: 2a 20 49 66 20 50 33 20 69 73 20 6e 6f 74 20 7a  * If P3 is not z
8eb0: 65 72 6f 20 61 6e 64 20 74 68 65 20 63 6f 6e 74  ero and the cont
8ec0: 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
8ed0: 50 33 20 69 73 20 65 71 75 61 6c 20 74 6f 20 50  P3 is equal to P
8ee0: 35 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 64  5, then.** the d
8ef0: 61 74 61 74 79 70 65 20 6f 66 20 74 68 65 20 72  atatype of the r
8f00: 65 67 69 73 74 65 72 20 50 32 20 69 73 20 63 6f  egister P2 is co
8f10: 6e 76 65 72 74 65 64 20 74 6f 20 42 4c 4f 42 2e  nverted to BLOB.
8f20: 20 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 69 73    The content is
8f30: 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 73 65 71  .** the same seq
8f40: 75 65 6e 63 65 20 6f 66 20 62 79 74 65 73 2c 20  uence of bytes, 
8f50: 69 74 20 69 73 20 6d 65 72 65 6c 79 20 69 6e 74  it is merely int
8f60: 65 72 70 72 65 74 65 64 20 61 73 20 61 20 42 4c  erpreted as a BL
8f70: 4f 42 20 69 6e 73 74 65 61 64 0a 2a 2a 20 6f 66  OB instead.** of
8f80: 20 61 20 73 74 72 69 6e 67 2c 20 61 73 20 69 66   a string, as if
8f90: 20 69 74 20 68 61 64 20 62 65 65 6e 20 43 41 53   it had been CAS
8fa0: 54 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  T.  In other wor
8fb0: 64 73 3a 0a 2a 2a 0a 2a 2a 20 69 66 28 20 50 33  ds:.**.** if( P3
8fc0: 21 3d 30 20 61 6e 64 20 72 65 67 5b 50 33 5d 3d  !=0 and reg[P3]=
8fd0: 3d 50 35 20 29 20 72 65 67 5b 50 32 5d 20 3a 3d  =P5 ) reg[P2] :=
8fe0: 20 43 41 53 54 28 72 65 67 5b 50 32 5d 20 61 73   CAST(reg[P2] as
8ff0: 20 42 4c 4f 42 29 0a 2a 2f 0a 63 61 73 65 20 4f   BLOB).*/.case O
9000: 50 5f 53 74 72 69 6e 67 3a 20 7b 20 20 20 20 20  P_String: {     
9010: 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
9020: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
9030: 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74  4.z!=0 );.  pOut
9040: 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
9050: 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75  e(p, pOp);.  pOu
9060: 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53  t->flags = MEM_S
9070: 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45  tr|MEM_Static|ME
9080: 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e  M_Term;.  pOut->
9090: 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  z = pOp->p4.z;. 
90a0: 20 70 4f 75 74 2d 3e 6e 20 3d 20 70 4f 70 2d 3e   pOut->n = pOp->
90b0: 70 31 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20  p1;.  pOut->enc 
90c0: 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50  = encoding;.  UP
90d0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
90e0: 45 28 70 4f 75 74 29 3b 0a 23 69 66 6e 64 65 66  E(pOut);.#ifndef
90f0: 20 53 51 4c 49 54 45 5f 4c 49 4b 45 5f 44 4f 45   SQLITE_LIKE_DOE
9100: 53 4e 54 5f 4d 41 54 43 48 5f 42 4c 4f 42 53 0a  SNT_MATCH_BLOBS.
9110: 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 3e 30 20    if( pOp->p3>0 
9120: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
9130: 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
9140: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
9150: 20 29 3b 0a 20 20 20 20 70 49 6e 33 20 3d 20 26   );.    pIn3 = &
9160: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
9170: 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d     assert( pIn3-
9180: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
9190: 20 29 3b 0a 20 20 20 20 69 66 28 20 70 49 6e 33   );.    if( pIn3
91a0: 2d 3e 75 2e 69 3d 3d 70 4f 70 2d 3e 70 35 20 29  ->u.i==pOp->p5 )
91b0: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
91c0: 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 61 74  EM_Blob|MEM_Stat
91d0: 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 7d  ic|MEM_Term;.  }
91e0: 0a 23 65 6e 64 69 66 0a 20 20 62 72 65 61 6b 3b  .#endif.  break;
91f0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
9200: 75 6c 6c 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ull P1 P2 P3 * *
9210: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
9220: 50 32 2e 2e 50 33 5d 3d 4e 55 4c 4c 0a 2a 2a 0a  P2..P3]=NULL.**.
9230: 2a 2a 20 57 72 69 74 65 20 61 20 4e 55 4c 4c 20  ** Write a NULL 
9240: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 73 20 50  into registers P
9250: 32 2e 20 20 49 66 20 50 33 20 67 72 65 61 74 65  2.  If P3 greate
9260: 72 20 74 68 61 6e 20 50 32 2c 20 74 68 65 6e 20  r than P2, then 
9270: 61 6c 73 6f 20 77 72 69 74 65 0a 2a 2a 20 4e 55  also write.** NU
9280: 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  LL into register
9290: 20 50 33 20 61 6e 64 20 65 76 65 72 79 20 72 65   P3 and every re
92a0: 67 69 73 74 65 72 20 69 6e 20 62 65 74 77 65 65  gister in betwee
92b0: 6e 20 50 32 20 61 6e 64 20 50 33 2e 20 20 49 66  n P2 and P3.  If
92c0: 20 50 33 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74   P3.** is less t
92d0: 68 61 6e 20 50 32 20 28 74 79 70 69 63 61 6c 6c  han P2 (typicall
92e0: 79 20 50 33 20 69 73 20 7a 65 72 6f 29 20 74 68  y P3 is zero) th
92f0: 65 6e 20 6f 6e 6c 79 20 72 65 67 69 73 74 65 72  en only register
9300: 20 50 32 20 69 73 0a 2a 2a 20 73 65 74 20 74 6f   P2 is.** set to
9310: 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   NULL..**.** If 
9320: 74 68 65 20 50 31 20 76 61 6c 75 65 20 69 73 20  the P1 value is 
9330: 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61  non-zero, then a
9340: 6c 73 6f 20 73 65 74 20 74 68 65 20 4d 45 4d 5f  lso set the MEM_
9350: 43 6c 65 61 72 65 64 20 66 6c 61 67 20 73 6f 20  Cleared flag so 
9360: 74 68 61 74 0a 2a 2a 20 4e 55 4c 4c 20 76 61 6c  that.** NULL val
9370: 75 65 73 20 77 69 6c 6c 20 6e 6f 74 20 63 6f 6d  ues will not com
9380: 70 61 72 65 20 65 71 75 61 6c 20 65 76 65 6e 20  pare equal even 
9390: 69 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  if SQLITE_NULLEQ
93a0: 20 69 73 20 73 65 74 20 6f 6e 0a 2a 2a 20 4f 50   is set on.** OP
93b0: 5f 4e 65 20 6f 72 20 4f 50 5f 45 71 2e 0a 2a 2f  _Ne or OP_Eq..*/
93c0: 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 3a 20 7b  .case OP_Null: {
93d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
93e0: 74 32 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b  t2 */.  int cnt;
93f0: 0a 20 20 75 31 36 20 6e 75 6c 6c 46 6c 61 67 3b  .  u16 nullFlag;
9400: 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
9410: 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
9420: 3b 0a 20 20 63 6e 74 20 3d 20 70 4f 70 2d 3e 70  ;.  cnt = pOp->p
9430: 33 2d 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73  3-pOp->p2;.  ass
9440: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  ert( pOp->p3<=(p
9450: 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
9460: 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74  ursor) );.  pOut
9470: 2d 3e 66 6c 61 67 73 20 3d 20 6e 75 6c 6c 46 6c  ->flags = nullFl
9480: 61 67 20 3d 20 70 4f 70 2d 3e 70 31 20 3f 20 28  ag = pOp->p1 ? (
9490: 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 43 6c 65  MEM_Null|MEM_Cle
94a0: 61 72 65 64 29 20 3a 20 4d 45 4d 5f 4e 75 6c 6c  ared) : MEM_Null
94b0: 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 30 3b  ;.  pOut->n = 0;
94c0: 0a 20 20 77 68 69 6c 65 28 20 63 6e 74 3e 30 20  .  while( cnt>0 
94d0: 29 7b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20  ){.    pOut++;. 
94e0: 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
94f0: 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20  nge(p, pOut);.  
9500: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
9510: 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
9520: 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d     pOut->flags =
9530: 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20 20 20 70   nullFlag;.    p
9540: 4f 75 74 2d 3e 6e 20 3d 20 30 3b 0a 20 20 20 20  Out->n = 0;.    
9550: 63 6e 74 2d 2d 3b 0a 20 20 7d 0a 20 20 62 72 65  cnt--;.  }.  bre
9560: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
9570: 3a 20 53 6f 66 74 4e 75 6c 6c 20 50 31 20 2a 20  : SoftNull P1 * 
9580: 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
9590: 73 3a 20 72 5b 50 31 5d 3d 4e 55 4c 4c 0a 2a 2a  s: r[P1]=NULL.**
95a0: 0a 2a 2a 20 53 65 74 20 72 65 67 69 73 74 65 72  .** Set register
95b0: 20 50 31 20 74 6f 20 68 61 76 65 20 74 68 65 20   P1 to have the 
95c0: 76 61 6c 75 65 20 4e 55 4c 4c 20 61 73 20 73 65  value NULL as se
95d0: 65 6e 20 62 79 20 74 68 65 20 4f 50 5f 4d 61 6b  en by the OP_Mak
95e0: 65 52 65 63 6f 72 64 0a 2a 2a 20 69 6e 73 74 72  eRecord.** instr
95f0: 75 63 74 69 6f 6e 2c 20 62 75 74 20 64 6f 20 6e  uction, but do n
9600: 6f 74 20 66 72 65 65 20 61 6e 79 20 73 74 72 69  ot free any stri
9610: 6e 67 20 6f 72 20 62 6c 6f 62 20 6d 65 6d 6f 72  ng or blob memor
9620: 79 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  y associated wit
9630: 68 0a 2a 2a 20 74 68 65 20 72 65 67 69 73 74 65  h.** the registe
9640: 72 2c 20 73 6f 20 74 68 61 74 20 69 66 20 74 68  r, so that if th
9650: 65 20 76 61 6c 75 65 20 77 61 73 20 61 20 73 74  e value was a st
9660: 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74 68 61  ring or blob tha
9670: 74 20 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75  t was.** previou
9680: 73 6c 79 20 63 6f 70 69 65 64 20 75 73 69 6e 67  sly copied using
9690: 20 4f 50 5f 53 43 6f 70 79 2c 20 74 68 65 20 63   OP_SCopy, the c
96a0: 6f 70 69 65 73 20 77 69 6c 6c 20 63 6f 6e 74 69  opies will conti
96b0: 6e 75 65 20 74 6f 20 62 65 20 76 61 6c 69 64 2e  nue to be valid.
96c0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 66 74  .*/.case OP_Soft
96d0: 4e 75 6c 6c 3a 20 7b 0a 20 20 61 73 73 65 72 74  Null: {.  assert
96e0: 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70  ( pOp->p1>0 && p
96f0: 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p1<=(p->nMem
9700: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
9710: 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d   );.  pOut = &aM
9720: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
9730: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 28 70 4f  Out->flags = (pO
9740: 75 74 2d 3e 66 6c 61 67 73 7c 4d 45 4d 5f 4e 75  ut->flags|MEM_Nu
9750: 6c 6c 29 26 7e 4d 45 4d 5f 55 6e 64 65 66 69 6e  ll)&~MEM_Undefin
9760: 65 64 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  ed;.  break;.}..
9770: 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 6c 6f 62 20  /* Opcode: Blob 
9780: 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20  P1 P2 * P4 *.** 
9790: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
97a0: 50 34 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a  P4 (len=P1).**.*
97b0: 2a 20 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61  * P4 points to a
97c0: 20 62 6c 6f 62 20 6f 66 20 64 61 74 61 20 50 31   blob of data P1
97d0: 20 62 79 74 65 73 20 6c 6f 6e 67 2e 20 20 53 74   bytes long.  St
97e0: 6f 72 65 20 74 68 69 73 0a 2a 2a 20 62 6c 6f 62  ore this.** blob
97f0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
9800: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 6c 6f 62  .*/.case OP_Blob
9810: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
9820: 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
9830: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 20  assert( pOp->p1 
9840: 3c 3d 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45  <= SQLITE_MAX_LE
9850: 4e 47 54 48 20 29 3b 0a 20 20 70 4f 75 74 20 3d  NGTH );.  pOut =
9860: 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
9870: 70 2c 20 70 4f 70 29 3b 0a 20 20 73 71 6c 69 74  p, pOp);.  sqlit
9880: 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28  e3VdbeMemSetStr(
9890: 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c  pOut, pOp->p4.z,
98a0: 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 30 29 3b   pOp->p1, 0, 0);
98b0: 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65  .  pOut->enc = e
98c0: 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54  ncoding;.  UPDAT
98d0: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
98e0: 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
98f0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61 72  ../* Opcode: Var
9900: 69 61 62 6c 65 20 50 31 20 50 32 20 2a 20 50 34  iable P1 P2 * P4
9910: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
9920: 72 5b 50 32 5d 3d 70 61 72 61 6d 65 74 65 72 28  r[P2]=parameter(
9930: 50 31 2c 50 34 29 0a 2a 2a 0a 2a 2a 20 54 72 61  P1,P4).**.** Tra
9940: 6e 73 66 65 72 20 74 68 65 20 76 61 6c 75 65 73  nsfer the values
9950: 20 6f 66 20 62 6f 75 6e 64 20 70 61 72 61 6d 65   of bound parame
9960: 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69  ter P1 into regi
9970: 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 49 66  ster P2.**.** If
9980: 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 20 69   the parameter i
9990: 73 20 6e 61 6d 65 64 2c 20 74 68 65 6e 20 69 74  s named, then it
99a0: 73 20 6e 61 6d 65 20 61 70 70 65 61 72 73 20 69  s name appears i
99b0: 6e 20 50 34 2e 0a 2a 2a 20 54 68 65 20 50 34 20  n P4..** The P4 
99c0: 76 61 6c 75 65 20 69 73 20 75 73 65 64 20 62 79  value is used by
99d0: 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61   sqlite3_bind_pa
99e0: 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28 29 2e 0a  rameter_name()..
99f0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61 72 69 61  */.case OP_Varia
9a00: 62 6c 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ble: {          
9a10: 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 4d    /* out2 */.  M
9a20: 65 6d 20 2a 70 56 61 72 3b 20 20 20 20 20 20 20  em *pVar;       
9a30: 2f 2a 20 56 61 6c 75 65 20 62 65 69 6e 67 20 74  /* Value being t
9a40: 72 61 6e 73 66 65 72 72 65 64 20 2a 2f 0a 0a 20  ransferred */.. 
9a50: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
9a60: 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70  >0 && pOp->p1<=p
9a70: 2d 3e 6e 56 61 72 20 29 3b 0a 20 20 61 73 73 65  ->nVar );.  asse
9a80: 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 30  rt( pOp->p4.z==0
9a90: 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 73   || pOp->p4.z==s
9aa0: 71 6c 69 74 65 33 56 4c 69 73 74 4e 75 6d 54 6f  qlite3VListNumTo
9ab0: 4e 61 6d 65 28 70 2d 3e 70 56 4c 69 73 74 2c 70  Name(p->pVList,p
9ac0: 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 70 56 61  Op->p1) );.  pVa
9ad0: 72 20 3d 20 26 70 2d 3e 61 56 61 72 5b 70 4f 70  r = &p->aVar[pOp
9ae0: 2d 3e 70 31 20 2d 20 31 5d 3b 0a 20 20 69 66 28  ->p1 - 1];.  if(
9af0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54   sqlite3VdbeMemT
9b00: 6f 6f 42 69 67 28 70 56 61 72 29 20 29 7b 0a 20  ooBig(pVar) ){. 
9b10: 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
9b20: 0a 20 20 7d 0a 20 20 70 4f 75 74 20 3d 20 26 61  .  }.  pOut = &a
9b30: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
9b40: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68  sqlite3VdbeMemSh
9b50: 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20  allowCopy(pOut, 
9b60: 70 56 61 72 2c 20 4d 45 4d 5f 53 74 61 74 69 63  pVar, MEM_Static
9b70: 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
9b80: 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a  BLOBSIZE(pOut);.
9b90: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
9ba0: 70 63 6f 64 65 3a 20 4d 6f 76 65 20 50 31 20 50  pcode: Move P1 P
9bb0: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
9bc0: 70 73 69 73 3a 20 72 5b 50 32 40 50 33 5d 3d 72  psis: r[P2@P3]=r
9bd0: 5b 50 31 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 4d 6f  [P1@P3].**.** Mo
9be0: 76 65 20 74 68 65 20 50 33 20 76 61 6c 75 65 73  ve the P3 values
9bf0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
9c00: 2e 50 31 2b 50 33 2d 31 20 6f 76 65 72 20 69 6e  .P1+P3-1 over in
9c10: 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 73 20  to.** registers 
9c20: 50 32 2e 2e 50 32 2b 50 33 2d 31 2e 20 20 52 65  P2..P2+P3-1.  Re
9c30: 67 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50  gisters P1..P1+P
9c40: 33 2d 31 20 61 72 65 0a 2a 2a 20 6c 65 66 74 20  3-1 are.** left 
9c50: 68 6f 6c 64 69 6e 67 20 61 20 4e 55 4c 4c 2e 20  holding a NULL. 
9c60: 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20   It is an error 
9c70: 66 6f 72 20 72 65 67 69 73 74 65 72 20 72 61 6e  for register ran
9c80: 67 65 73 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50 33  ges.** P1..P1+P3
9c90: 2d 31 20 61 6e 64 20 50 32 2e 2e 50 32 2b 50 33  -1 and P2..P2+P3
9ca0: 2d 31 20 74 6f 20 6f 76 65 72 6c 61 70 2e 20 20  -1 to overlap.  
9cb0: 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 0a 2a  It is an error.*
9cc0: 2a 20 66 6f 72 20 50 33 20 74 6f 20 62 65 20 6c  * for P3 to be l
9cd0: 65 73 73 20 74 68 61 6e 20 31 2e 0a 2a 2f 0a 63  ess than 1..*/.c
9ce0: 61 73 65 20 4f 50 5f 4d 6f 76 65 3a 20 7b 0a 20  ase OP_Move: {. 
9cf0: 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20   int n;         
9d00: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72    /* Number of r
9d10: 65 67 69 73 74 65 72 73 20 6c 65 66 74 20 74 6f  egisters left to
9d20: 20 63 6f 70 79 20 2a 2f 0a 20 20 69 6e 74 20 70   copy */.  int p
9d30: 31 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52  1;          /* R
9d40: 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20  egister to copy 
9d50: 66 72 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20 70 32  from */.  int p2
9d60: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65  ;          /* Re
9d70: 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20 74  gister to copy t
9d80: 6f 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d  o */..  n = pOp-
9d90: 3e 70 33 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d  >p3;.  p1 = pOp-
9da0: 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d  >p1;.  p2 = pOp-
9db0: 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  >p2;.  assert( n
9dc0: 3e 30 20 26 26 20 70 31 3e 30 20 26 26 20 70 32  >0 && p1>0 && p2
9dd0: 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  >0 );.  assert( 
9de0: 70 31 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32 2b 6e  p1+n<=p2 || p2+n
9df0: 3c 3d 70 31 20 29 3b 0a 0a 20 20 70 49 6e 31 20  <=p1 );..  pIn1 
9e00: 3d 20 26 61 4d 65 6d 5b 70 31 5d 3b 0a 20 20 70  = &aMem[p1];.  p
9e10: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b  Out = &aMem[p2];
9e20: 0a 20 20 64 6f 7b 0a 20 20 20 20 61 73 73 65 72  .  do{.    asser
9e30: 74 28 20 70 4f 75 74 3c 3d 26 61 4d 65 6d 5b 28  t( pOut<=&aMem[(
9e40: 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
9e50: 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20  Cursor)] );.    
9e60: 61 73 73 65 72 74 28 20 70 49 6e 31 3c 3d 26 61  assert( pIn1<=&a
9e70: 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  Mem[(p->nMem+1 -
9e80: 20 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b   p->nCursor)] );
9e90: 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
9ea0: 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b  IsValid(pIn1) );
9eb0: 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  .    memAboutToC
9ec0: 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a  hange(p, pOut);.
9ed0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
9ee0: 65 6d 4d 6f 76 65 28 70 4f 75 74 2c 20 70 49 6e  emMove(pOut, pIn
9ef0: 31 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  1);.#ifdef SQLIT
9f00: 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20  E_DEBUG.    if( 
9f10: 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d  pOut->pScopyFrom
9f20: 3e 3d 26 61 4d 65 6d 5b 70 31 5d 20 26 26 20 70  >=&aMem[p1] && p
9f30: 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3c  Out->pScopyFrom<
9f40: 70 4f 75 74 20 29 7b 0a 20 20 20 20 20 20 70 4f  pOut ){.      pO
9f50: 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 2b  ut->pScopyFrom +
9f60: 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 70 31 3b 0a  = pOp->p2 - p1;.
9f70: 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20      }.#endif.   
9f80: 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28   Deephemeralize(
9f90: 70 4f 75 74 29 3b 0a 20 20 20 20 52 45 47 49 53  pOut);.    REGIS
9fa0: 54 45 52 5f 54 52 41 43 45 28 70 32 2b 2b 2c 20  TER_TRACE(p2++, 
9fb0: 70 4f 75 74 29 3b 0a 20 20 20 20 70 49 6e 31 2b  pOut);.    pIn1+
9fc0: 2b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20  +;.    pOut++;. 
9fd0: 20 7d 77 68 69 6c 65 28 20 2d 2d 6e 20 29 3b 0a   }while( --n );.
9fe0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
9ff0: 70 63 6f 64 65 3a 20 43 6f 70 79 20 50 31 20 50  pcode: Copy P1 P
a000: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
a010: 70 73 69 73 3a 20 72 5b 50 32 40 50 33 2b 31 5d  psis: r[P2@P3+1]
a020: 3d 72 5b 50 31 40 50 33 2b 31 5d 0a 2a 2a 0a 2a  =r[P1@P3+1].**.*
a030: 2a 20 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f 66  * Make a copy of
a040: 20 72 65 67 69 73 74 65 72 73 20 50 31 2e 2e 50   registers P1..P
a050: 31 2b 50 33 20 69 6e 74 6f 20 72 65 67 69 73 74  1+P3 into regist
a060: 65 72 73 20 50 32 2e 2e 50 32 2b 50 33 2e 0a 2a  ers P2..P2+P3..*
a070: 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
a080: 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 64 65  ction makes a de
a090: 65 70 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76  ep copy of the v
a0a0: 61 6c 75 65 2e 20 20 41 20 64 75 70 6c 69 63 61  alue.  A duplica
a0b0: 74 65 0a 2a 2a 20 69 73 20 6d 61 64 65 20 6f 66  te.** is made of
a0c0: 20 61 6e 79 20 73 74 72 69 6e 67 20 6f 72 20 62   any string or b
a0d0: 6c 6f 62 20 63 6f 6e 73 74 61 6e 74 2e 20 20 53  lob constant.  S
a0e0: 65 65 20 61 6c 73 6f 20 4f 50 5f 53 43 6f 70 79  ee also OP_SCopy
a0f0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 70  ..*/.case OP_Cop
a100: 79 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20  y: {.  int n;.. 
a110: 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20   n = pOp->p3;.  
a120: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
a130: 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  ->p1];.  pOut = 
a140: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
a150: 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 21 3d    assert( pOut!=
a160: 70 49 6e 31 20 29 3b 0a 20 20 77 68 69 6c 65 28  pIn1 );.  while(
a170: 20 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65   1 ){.    sqlite
a180: 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43  3VdbeMemShallowC
a190: 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20  opy(pOut, pIn1, 
a1a0: 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 20 20  MEM_Ephem);.    
a1b0: 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70  Deephemeralize(p
a1c0: 4f 75 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  Out);.#ifdef SQL
a1d0: 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 70 4f  ITE_DEBUG.    pO
a1e0: 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 3d  ut->pScopyFrom =
a1f0: 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 52   0;.#endif.    R
a200: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
a210: 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33 2d 6e 2c  p->p2+pOp->p3-n,
a220: 20 70 4f 75 74 29 3b 0a 20 20 20 20 69 66 28 20   pOut);.    if( 
a230: 28 6e 2d 2d 29 3d 3d 30 20 29 20 62 72 65 61 6b  (n--)==0 ) break
a240: 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20  ;.    pOut++;.  
a250: 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20    pIn1++;.  }.  
a260: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
a270: 6f 64 65 3a 20 53 43 6f 70 79 20 50 31 20 50 32  ode: SCopy P1 P2
a280: 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
a290: 69 73 3a 20 72 5b 50 32 5d 3d 72 5b 50 31 5d 0a  is: r[P2]=r[P1].
a2a0: 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 73 68 61  **.** Make a sha
a2b0: 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 72 65 67  llow copy of reg
a2c0: 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65  ister P1 into re
a2d0: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
a2e0: 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
a2f0: 6e 20 6d 61 6b 65 73 20 61 20 73 68 61 6c 6c 6f  n makes a shallo
a300: 77 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61  w copy of the va
a310: 6c 75 65 2e 20 20 49 66 20 74 68 65 20 76 61 6c  lue.  If the val
a320: 75 65 0a 2a 2a 20 69 73 20 61 20 73 74 72 69 6e  ue.** is a strin
a330: 67 20 6f 72 20 62 6c 6f 62 2c 20 74 68 65 6e 20  g or blob, then 
a340: 74 68 65 20 63 6f 70 79 20 69 73 20 6f 6e 6c 79  the copy is only
a350: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
a360: 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 61 6e  e.** original an
a370: 64 20 68 65 6e 63 65 20 69 66 20 74 68 65 20 6f  d hence if the o
a380: 72 69 67 69 6e 61 6c 20 63 68 61 6e 67 65 73 20  riginal changes 
a390: 73 6f 20 77 69 6c 6c 20 74 68 65 20 63 6f 70 79  so will the copy
a3a0: 2e 0a 2a 2a 20 57 6f 72 73 65 2c 20 69 66 20 74  ..** Worse, if t
a3b0: 68 65 20 6f 72 69 67 69 6e 61 6c 20 69 73 20 64  he original is d
a3c0: 65 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 20  eallocated, the 
a3d0: 63 6f 70 79 20 62 65 63 6f 6d 65 73 20 69 6e 76  copy becomes inv
a3e0: 61 6c 69 64 2e 0a 2a 2a 20 54 68 75 73 20 74 68  alid..** Thus th
a3f0: 65 20 70 72 6f 67 72 61 6d 20 6d 75 73 74 20 67  e program must g
a400: 75 61 72 61 6e 74 65 65 20 74 68 61 74 20 74 68  uarantee that th
a410: 65 20 6f 72 69 67 69 6e 61 6c 20 77 69 6c 6c 20  e original will 
a420: 6e 6f 74 20 63 68 61 6e 67 65 0a 2a 2a 20 64 75  not change.** du
a430: 72 69 6e 67 20 74 68 65 20 6c 69 66 65 74 69 6d  ring the lifetim
a440: 65 20 6f 66 20 74 68 65 20 63 6f 70 79 2e 20 20  e of the copy.  
a450: 55 73 65 20 4f 50 5f 43 6f 70 79 20 74 6f 20 6d  Use OP_Copy to m
a460: 61 6b 65 20 61 20 63 6f 6d 70 6c 65 74 65 0a 2a  ake a complete.*
a470: 2a 20 63 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20  * copy..*/.case 
a480: 4f 50 5f 53 43 6f 70 79 3a 20 7b 20 20 20 20 20  OP_SCopy: {     
a490: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
a4a0: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
a4b0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75  [pOp->p1];.  pOu
a4c0: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
a4d0: 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  2];.  assert( pO
a4e0: 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 73 71  ut!=pIn1 );.  sq
a4f0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c  lite3VdbeMemShal
a500: 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49  lowCopy(pOut, pI
a510: 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a  n1, MEM_Ephem);.
a520: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
a530: 42 55 47 0a 20 20 69 66 28 20 70 4f 75 74 2d 3e  BUG.  if( pOut->
a540: 70 53 63 6f 70 79 46 72 6f 6d 3d 3d 30 20 29 20  pScopyFrom==0 ) 
a550: 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d  pOut->pScopyFrom
a560: 20 3d 20 70 49 6e 31 3b 0a 23 65 6e 64 69 66 0a   = pIn1;.#endif.
a570: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
a580: 70 63 6f 64 65 3a 20 49 6e 74 43 6f 70 79 20 50  pcode: IntCopy P
a590: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
a5a0: 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 5b  nopsis: r[P2]=r[
a5b0: 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66  P1].**.** Transf
a5c0: 65 72 20 74 68 65 20 69 6e 74 65 67 65 72 20 76  er the integer v
a5d0: 61 6c 75 65 20 68 65 6c 64 20 69 6e 20 72 65 67  alue held in reg
a5e0: 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65  ister P1 into re
a5f0: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
a600: 20 54 68 69 73 20 69 73 20 61 6e 20 6f 70 74 69   This is an opti
a610: 6d 69 7a 65 64 20 76 65 72 73 69 6f 6e 20 6f 66  mized version of
a620: 20 53 43 6f 70 79 20 74 68 61 74 20 77 6f 72 6b   SCopy that work
a630: 73 20 6f 6e 6c 79 20 66 6f 72 20 69 6e 74 65 67  s only for integ
a640: 65 72 0a 2a 2a 20 76 61 6c 75 65 73 2e 0a 2a 2f  er.** values..*/
a650: 0a 63 61 73 65 20 4f 50 5f 49 6e 74 43 6f 70 79  .case OP_IntCopy
a660: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
a670: 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31  * out2 */.  pIn1
a680: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
a690: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 49  ];.  assert( (pI
a6a0: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
a6b0: 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 70 4f 75  Int)!=0 );.  pOu
a6c0: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
a6d0: 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  2];.  sqlite3Vdb
a6e0: 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4f 75  eMemSetInt64(pOu
a6f0: 74 2c 20 70 49 6e 31 2d 3e 75 2e 69 29 3b 0a 20  t, pIn1->u.i);. 
a700: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
a710: 63 6f 64 65 3a 20 52 65 73 75 6c 74 52 6f 77 20  code: ResultRow 
a720: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
a730: 79 6e 6f 70 73 69 73 3a 20 6f 75 74 70 75 74 3d  ynopsis: output=
a740: 72 5b 50 31 40 50 32 5d 0a 2a 2a 0a 2a 2a 20 54  r[P1@P2].**.** T
a750: 68 65 20 72 65 67 69 73 74 65 72 73 20 50 31 20  he registers P1 
a760: 74 68 72 6f 75 67 68 20 50 31 2b 50 32 2d 31 20  through P1+P2-1 
a770: 63 6f 6e 74 61 69 6e 20 61 20 73 69 6e 67 6c 65  contain a single
a780: 20 72 6f 77 20 6f 66 0a 2a 2a 20 72 65 73 75 6c   row of.** resul
a790: 74 73 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20  ts. This opcode 
a7a0: 63 61 75 73 65 73 20 74 68 65 20 73 71 6c 69 74  causes the sqlit
a7b0: 65 33 5f 73 74 65 70 28 29 20 63 61 6c 6c 20 74  e3_step() call t
a7c0: 6f 20 74 65 72 6d 69 6e 61 74 65 0a 2a 2a 20 77  o terminate.** w
a7d0: 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 52 4f  ith an SQLITE_RO
a7e0: 57 20 72 65 74 75 72 6e 20 63 6f 64 65 20 61 6e  W return code an
a7f0: 64 20 69 74 20 73 65 74 73 20 75 70 20 74 68 65  d it sets up the
a800: 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 0a 2a 2a   sqlite3_stmt.**
a810: 20 73 74 72 75 63 74 75 72 65 20 74 6f 20 70 72   structure to pr
a820: 6f 76 69 64 65 20 61 63 63 65 73 73 20 74 6f 20  ovide access to 
a830: 74 68 65 20 72 28 50 31 29 2e 2e 72 28 50 31 2b  the r(P1)..r(P1+
a840: 50 32 2d 31 29 20 76 61 6c 75 65 73 20 61 73 0a  P2-1) values as.
a850: 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 20 72 6f  ** the result ro
a860: 77 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  w..*/.case OP_Re
a870: 73 75 6c 74 52 6f 77 3a 20 7b 0a 20 20 4d 65 6d  sultRow: {.  Mem
a880: 20 2a 70 4d 65 6d 3b 0a 20 20 69 6e 74 20 69 3b   *pMem;.  int i;
a890: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6e 52  .  assert( p->nR
a8a0: 65 73 43 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e 70  esColumn==pOp->p
a8b0: 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  2 );.  assert( p
a8c0: 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 61 73  Op->p1>0 );.  as
a8d0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 2b 70 4f  sert( pOp->p1+pO
a8e0: 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p->p2<=(p->nMem+
a8f0: 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b  1 - p->nCursor)+
a900: 31 20 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  1 );..#ifndef SQ
a910: 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45  LITE_OMIT_PROGRE
a920: 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 2f 2a  SS_CALLBACK.  /*
a930: 20 52 75 6e 20 74 68 65 20 70 72 6f 67 72 65 73   Run the progres
a940: 73 20 63 6f 75 6e 74 65 72 20 6a 75 73 74 20 62  s counter just b
a950: 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 2e  efore returning.
a960: 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e  .  */.  if( db->
a970: 78 50 72 6f 67 72 65 73 73 21 3d 30 0a 20 20 20  xProgress!=0.   
a980: 26 26 20 6e 56 6d 53 74 65 70 3e 3d 6e 50 72 6f  && nVmStep>=nPro
a990: 67 72 65 73 73 4c 69 6d 69 74 0a 20 20 20 26 26  gressLimit.   &&
a9a0: 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 28 64   db->xProgress(d
a9b0: 62 2d 3e 70 50 72 6f 67 72 65 73 73 41 72 67 29  b->pProgressArg)
a9c0: 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 72 63 20  !=0.  ){.    rc 
a9d0: 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55  = SQLITE_INTERRU
a9e0: 50 54 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f  PT;.    goto abo
a9f0: 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
aa00: 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f  .  }.#endif..  /
aa10: 2a 20 49 66 20 74 68 69 73 20 73 74 61 74 65 6d  * If this statem
aa20: 65 6e 74 20 68 61 73 20 76 69 6f 6c 61 74 65 64  ent has violated
aa30: 20 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69   immediate forei
aa40: 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
aa50: 74 73 2c 20 64 6f 0a 20 20 2a 2a 20 6e 6f 74 20  ts, do.  ** not 
aa60: 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65  return the numbe
aa70: 72 20 6f 66 20 72 6f 77 73 20 6d 6f 64 69 66 69  r of rows modifi
aa80: 65 64 2e 20 41 6e 64 20 64 6f 20 6e 6f 74 20 52  ed. And do not R
aa90: 45 4c 45 41 53 45 20 74 68 65 20 73 74 61 74 65  ELEASE the state
aaa0: 6d 65 6e 74 0a 20 20 2a 2a 20 74 72 61 6e 73 61  ment.  ** transa
aab0: 63 74 69 6f 6e 2e 20 49 74 20 6e 65 65 64 73 20  ction. It needs 
aac0: 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63  to be rolled bac
aad0: 6b 2e 20 20 2a 2f 0a 20 20 69 66 28 20 53 51 4c  k.  */.  if( SQL
aae0: 49 54 45 5f 4f 4b 21 3d 28 72 63 20 3d 20 73 71  ITE_OK!=(rc = sq
aaf0: 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b  lite3VdbeCheckFk
ab00: 28 70 2c 20 30 29 29 20 29 7b 0a 20 20 20 20 61  (p, 0)) ){.    a
ab10: 73 73 65 72 74 28 20 64 62 2d 3e 66 6c 61 67 73  ssert( db->flags
ab20: 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77  &SQLITE_CountRow
ab30: 73 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  s );.    assert(
ab40: 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72   p->usesStmtJour
ab50: 6e 61 6c 20 29 3b 0a 20 20 20 20 67 6f 74 6f 20  nal );.    goto 
ab60: 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
ab70: 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66  or;.  }..  /* If
ab80: 20 74 68 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e   the SQLITE_Coun
ab90: 74 52 6f 77 73 20 66 6c 61 67 20 69 73 20 73 65  tRows flag is se
aba0: 74 20 69 6e 20 73 71 6c 69 74 65 33 2e 66 6c 61  t in sqlite3.fla
abb0: 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 0a 20  gs mask, then . 
abc0: 20 2a 2a 20 44 4d 4c 20 73 74 61 74 65 6d 65 6e   ** DML statemen
abd0: 74 73 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f  ts invoke this o
abe0: 70 63 6f 64 65 20 74 6f 20 72 65 74 75 72 6e 20  pcode to return 
abf0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  the number of ro
ac00: 77 73 20 0a 20 20 2a 2a 20 6d 6f 64 69 66 69 65  ws .  ** modifie
ac10: 64 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54  d to the user. T
ac20: 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20  his is the only 
ac30: 77 61 79 20 74 68 61 74 20 61 20 56 4d 20 74 68  way that a VM th
ac40: 61 74 0a 20 20 2a 2a 20 6f 70 65 6e 73 20 61 20  at.  ** opens a 
ac50: 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
ac60: 63 74 69 6f 6e 20 6d 61 79 20 69 6e 76 6f 6b 65  ction may invoke
ac70: 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 20 20   this opcode..  
ac80: 2a 2a 0a 20 20 2a 2a 20 49 6e 20 63 61 73 65 20  **.  ** In case 
ac90: 74 68 69 73 20 69 73 20 73 75 63 68 20 61 20 73  this is such a s
aca0: 74 61 74 65 6d 65 6e 74 2c 20 63 6c 6f 73 65 20  tatement, close 
acb0: 61 6e 79 20 73 74 61 74 65 6d 65 6e 74 20 74 72  any statement tr
acc0: 61 6e 73 61 63 74 69 6f 6e 0a 20 20 2a 2a 20 6f  ansaction.  ** o
acd0: 70 65 6e 65 64 20 62 79 20 74 68 69 73 20 56 4d  pened by this VM
ace0: 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e   before returnin
acf0: 67 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65  g control to the
ad00: 20 75 73 65 72 2e 20 54 68 69 73 20 69 73 20 74   user. This is t
ad10: 6f 0a 20 20 2a 2a 20 65 6e 73 75 72 65 20 74 68  o.  ** ensure th
ad20: 61 74 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61  at statement-tra
ad30: 6e 73 61 63 74 69 6f 6e 73 20 61 72 65 20 61 6c  nsactions are al
ad40: 77 61 79 73 20 6e 65 73 74 65 64 2c 20 6e 6f 74  ways nested, not
ad50: 20 6f 76 65 72 6c 61 70 70 69 6e 67 2e 0a 20 20   overlapping..  
ad60: 2a 2a 20 49 66 20 74 68 65 20 6f 70 65 6e 20 73  ** If the open s
ad70: 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63  tatement-transac
ad80: 74 69 6f 6e 20 69 73 20 6e 6f 74 20 63 6c 6f 73  tion is not clos
ad90: 65 64 20 68 65 72 65 2c 20 74 68 65 6e 20 74 68  ed here, then th
ada0: 65 20 75 73 65 72 0a 20 20 2a 2a 20 6d 61 79 20  e user.  ** may 
adb0: 73 74 65 70 20 61 6e 6f 74 68 65 72 20 56 4d 20  step another VM 
adc0: 74 68 61 74 20 6f 70 65 6e 73 20 69 74 73 20 6f  that opens its o
add0: 77 6e 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  wn statement tra
ade0: 6e 73 61 63 74 69 6f 6e 2e 20 54 68 69 73 0a 20  nsaction. This. 
adf0: 20 2a 2a 20 6d 61 79 20 6c 65 61 64 20 74 6f 20   ** may lead to 
ae00: 6f 76 65 72 6c 61 70 70 69 6e 67 20 73 74 61 74  overlapping stat
ae10: 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
ae20: 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  ns..  **.  ** Th
ae30: 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  e statement tran
ae40: 73 61 63 74 69 6f 6e 20 69 73 20 6e 65 76 65 72  saction is never
ae50: 20 61 20 74 6f 70 2d 6c 65 76 65 6c 20 74 72 61   a top-level tra
ae60: 6e 73 61 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65  nsaction.  Hence
ae70: 0a 20 20 2a 2a 20 74 68 65 20 52 45 4c 45 41 53  .  ** the RELEAS
ae80: 45 20 63 61 6c 6c 20 62 65 6c 6f 77 20 63 61 6e  E call below can
ae90: 20 6e 65 76 65 72 20 66 61 69 6c 2e 0a 20 20 2a   never fail..  *
aea0: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 69  /.  assert( p->i
aeb0: 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 7c 7c 20  Statement==0 || 
aec0: 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45  db->flags&SQLITE
aed0: 5f 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20  _CountRows );.  
aee0: 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
aef0: 43 6c 6f 73 65 53 74 61 74 65 6d 65 6e 74 28 70  CloseStatement(p
af00: 2c 20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45  , SAVEPOINT_RELE
af10: 41 53 45 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ASE);.  assert( 
af20: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
af30: 0a 0a 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74  ..  /* Invalidat
af40: 65 20 61 6c 6c 20 65 70 68 65 6d 65 72 61 6c 20  e all ephemeral 
af50: 63 75 72 73 6f 72 20 72 6f 77 20 63 61 63 68 65  cursor row cache
af60: 73 20 2a 2f 0a 20 20 70 2d 3e 63 61 63 68 65 43  s */.  p->cacheC
af70: 74 72 20 3d 20 28 70 2d 3e 63 61 63 68 65 43 74  tr = (p->cacheCt
af80: 72 20 2b 20 32 29 7c 31 3b 0a 0a 20 20 2f 2a 20  r + 2)|1;..  /* 
af90: 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 72 65  Make sure the re
afa0: 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63 75 72  sults of the cur
afb0: 72 65 6e 74 20 72 6f 77 20 61 72 65 20 5c 30 30  rent row are \00
afc0: 30 20 74 65 72 6d 69 6e 61 74 65 64 0a 20 20 2a  0 terminated.  *
afd0: 2a 20 61 6e 64 20 68 61 76 65 20 61 6e 20 61 73  * and have an as
afe0: 73 69 67 6e 65 64 20 74 79 70 65 2e 20 20 54 68  signed type.  Th
aff0: 65 20 72 65 73 75 6c 74 73 20 61 72 65 20 64 65  e results are de
b000: 2d 65 70 68 65 6d 65 72 61 6c 69 7a 65 64 20 61  -ephemeralized a
b010: 73 0a 20 20 2a 2a 20 61 20 73 69 64 65 20 65 66  s.  ** a side ef
b020: 66 65 63 74 2e 0a 20 20 2a 2f 0a 20 20 70 4d 65  fect..  */.  pMe
b030: 6d 20 3d 20 70 2d 3e 70 52 65 73 75 6c 74 53 65  m = p->pResultSe
b040: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
b050: 31 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69  1];.  for(i=0; i
b060: 3c 70 4f 70 2d 3e 70 32 3b 20 69 2b 2b 29 7b 0a  <pOp->p2; i++){.
b070: 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
b080: 73 56 61 6c 69 64 28 26 70 4d 65 6d 5b 69 5d 29  sValid(&pMem[i])
b090: 20 29 3b 0a 20 20 20 20 44 65 65 70 68 65 6d 65   );.    Deepheme
b0a0: 72 61 6c 69 7a 65 28 26 70 4d 65 6d 5b 69 5d 29  ralize(&pMem[i])
b0b0: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70  ;.    assert( (p
b0c0: 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73 20 26 20 4d  Mem[i].flags & M
b0d0: 45 4d 5f 45 70 68 65 6d 29 3d 3d 30 0a 20 20 20  EM_Ephem)==0.   
b0e0: 20 20 20 20 20 20 20 20 20 7c 7c 20 28 70 4d 65           || (pMe
b0f0: 6d 5b 69 5d 2e 66 6c 61 67 73 20 26 20 28 4d 45  m[i].flags & (ME
b100: 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29  M_Str|MEM_Blob))
b110: 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74  ==0 );.    sqlit
b120: 65 33 56 64 62 65 4d 65 6d 4e 75 6c 54 65 72 6d  e3VdbeMemNulTerm
b130: 69 6e 61 74 65 28 26 70 4d 65 6d 5b 69 5d 29 3b  inate(&pMem[i]);
b140: 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
b150: 41 43 45 28 70 4f 70 2d 3e 70 31 2b 69 2c 20 26  ACE(pOp->p1+i, &
b160: 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20  pMem[i]);.  }.  
b170: 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  if( db->mallocFa
b180: 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  iled ) goto no_m
b190: 65 6d 3b 0a 0a 20 20 69 66 28 20 64 62 2d 3e 6d  em;..  if( db->m
b1a0: 54 72 61 63 65 20 26 20 53 51 4c 49 54 45 5f 54  Trace & SQLITE_T
b1b0: 52 41 43 45 5f 52 4f 57 20 29 7b 0a 20 20 20 20  RACE_ROW ){.    
b1c0: 64 62 2d 3e 78 54 72 61 63 65 28 53 51 4c 49 54  db->xTrace(SQLIT
b1d0: 45 5f 54 52 41 43 45 5f 52 4f 57 2c 20 64 62 2d  E_TRACE_ROW, db-
b1e0: 3e 70 54 72 61 63 65 41 72 67 2c 20 70 2c 20 30  >pTraceArg, p, 0
b1f0: 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52 65 74  );.  }..  /* Ret
b200: 75 72 6e 20 53 51 4c 49 54 45 5f 52 4f 57 0a 20  urn SQLITE_ROW. 
b210: 20 2a 2f 0a 20 20 70 2d 3e 70 63 20 3d 20 28 69   */.  p->pc = (i
b220: 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 20 2b  nt)(pOp - aOp) +
b230: 20 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54   1;.  rc = SQLIT
b240: 45 5f 52 4f 57 3b 0a 20 20 67 6f 74 6f 20 76 64  E_ROW;.  goto vd
b250: 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a  be_return;.}../*
b260: 20 4f 70 63 6f 64 65 3a 20 43 6f 6e 63 61 74 20   Opcode: Concat 
b270: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
b280: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d  Synopsis: r[P3]=
b290: 72 5b 50 32 5d 2b 72 5b 50 31 5d 0a 2a 2a 0a 2a  r[P2]+r[P1].**.*
b2a0: 2a 20 41 64 64 20 74 68 65 20 74 65 78 74 20 69  * Add the text i
b2b0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 6f 6e  n register P1 on
b2c0: 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  to the end of th
b2d0: 65 20 74 65 78 74 20 69 6e 0a 2a 2a 20 72 65 67  e text in.** reg
b2e0: 69 73 74 65 72 20 50 32 20 61 6e 64 20 73 74 6f  ister P2 and sto
b2f0: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
b300: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
b310: 20 49 66 20 65 69 74 68 65 72 20 74 68 65 20 50   If either the P
b320: 31 20 6f 72 20 50 32 20 74 65 78 74 20 61 72 65  1 or P2 text are
b330: 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65   NULL then store
b340: 20 4e 55 4c 4c 20 69 6e 20 50 33 2e 0a 2a 2a 0a   NULL in P3..**.
b350: 2a 2a 20 20 20 50 33 20 3d 20 50 32 20 7c 7c 20  **   P3 = P2 || 
b360: 50 31 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69  P1.**.** It is i
b370: 6c 6c 65 67 61 6c 20 66 6f 72 20 50 31 20 61 6e  llegal for P1 an
b380: 64 20 50 33 20 74 6f 20 62 65 20 74 68 65 20 73  d P3 to be the s
b390: 61 6d 65 20 72 65 67 69 73 74 65 72 2e 20 53 6f  ame register. So
b3a0: 6d 65 74 69 6d 65 73 2c 0a 2a 2a 20 69 66 20 50  metimes,.** if P
b3b0: 33 20 69 73 20 74 68 65 20 73 61 6d 65 20 72 65  3 is the same re
b3c0: 67 69 73 74 65 72 20 61 73 20 50 32 2c 20 74 68  gister as P2, th
b3d0: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
b3e0: 20 69 73 20 61 62 6c 65 0a 2a 2a 20 74 6f 20 61   is able.** to a
b3f0: 76 6f 69 64 20 61 20 6d 65 6d 63 70 79 28 29 2e  void a memcpy().
b400: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6e 63  .*/.case OP_Conc
b410: 61 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  at: {           
b420: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 43 4f  /* same as TK_CO
b430: 4e 43 41 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  NCAT, in1, in2, 
b440: 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 6e 42  out3 */.  i64 nB
b450: 79 74 65 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26  yte;..  pIn1 = &
b460: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
b470: 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
b480: 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d  p->p2];.  pOut =
b490: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
b4a0: 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 21  .  assert( pIn1!
b4b0: 3d 70 4f 75 74 20 29 3b 0a 20 20 69 66 28 20 28  =pOut );.  if( (
b4c0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49  pIn1->flags | pI
b4d0: 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d  n2->flags) & MEM
b4e0: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c  _Null ){.    sql
b4f0: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
b500: 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72  ll(pOut);.    br
b510: 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 66 28 20 45  eak;.  }.  if( E
b520: 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 20  xpandBlob(pIn1) 
b530: 7c 7c 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49  || ExpandBlob(pI
b540: 6e 32 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  n2) ) goto no_me
b550: 6d 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70  m;.  Stringify(p
b560: 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  In1, encoding);.
b570: 20 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e 32    Stringify(pIn2
b580: 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 6e  , encoding);.  n
b590: 42 79 74 65 20 3d 20 70 49 6e 31 2d 3e 6e 20 2b  Byte = pIn1->n +
b5a0: 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 69 66 28 20   pIn2->n;.  if( 
b5b0: 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74  nByte>db->aLimit
b5c0: 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
b5d0: 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74  NGTH] ){.    got
b5e0: 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20  o too_big;.  }. 
b5f0: 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
b600: 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20 28 69  MemGrow(pOut, (i
b610: 6e 74 29 6e 42 79 74 65 2b 32 2c 20 70 4f 75 74  nt)nByte+2, pOut
b620: 3d 3d 70 49 6e 32 29 20 29 7b 0a 20 20 20 20 67  ==pIn2) ){.    g
b630: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
b640: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
b650: 28 70 4f 75 74 2c 20 4d 45 4d 5f 53 74 72 29 3b  (pOut, MEM_Str);
b660: 0a 20 20 69 66 28 20 70 4f 75 74 21 3d 70 49 6e  .  if( pOut!=pIn
b670: 32 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28  2 ){.    memcpy(
b680: 70 4f 75 74 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 7a  pOut->z, pIn2->z
b690: 2c 20 70 49 6e 32 2d 3e 6e 29 3b 0a 20 20 7d 0a  , pIn2->n);.  }.
b6a0: 20 20 6d 65 6d 63 70 79 28 26 70 4f 75 74 2d 3e    memcpy(&pOut->
b6b0: 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c 20 70 49 6e 31  z[pIn2->n], pIn1
b6c0: 2d 3e 7a 2c 20 70 49 6e 31 2d 3e 6e 29 3b 0a 20  ->z, pIn1->n);. 
b6d0: 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 5d 3d   pOut->z[nByte]=
b6e0: 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79  0;.  pOut->z[nBy
b6f0: 74 65 2b 31 5d 20 3d 20 30 3b 0a 20 20 70 4f 75  te+1] = 0;.  pOu
b700: 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f  t->flags |= MEM_
b710: 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20  Term;.  pOut->n 
b720: 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20  = (int)nByte;.  
b730: 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f  pOut->enc = enco
b740: 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d  ding;.  UPDATE_M
b750: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
b760: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
b770: 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 20 50 31  * Opcode: Add P1
b780: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
b790: 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b  nopsis: r[P3]=r[
b7a0: 50 31 5d 2b 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20  P1]+r[P2].**.** 
b7b0: 41 64 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e  Add the value in
b7c0: 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20   register P1 to 
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 32 0a 2a 2a 20 61 6e 64 20  ister P2.** and 
b7f0: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
b800: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
b810: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
b820: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
b830: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
b840: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d  .*/./* Opcode: M
b850: 75 6c 74 69 70 6c 79 20 50 31 20 50 32 20 50 33  ultiply P1 P2 P3
b860: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
b870: 3a 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 2a 72 5b  : r[P3]=r[P1]*r[
b880: 50 32 5d 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d 75 6c  P2].**.**.** Mul
b890: 74 69 70 6c 79 20 74 68 65 20 76 61 6c 75 65 20  tiply the value 
b8a0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 62  in register P1 b
b8b0: 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  y the value in r
b8c0: 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e  egister P2.** an
b8d0: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
b8e0: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
b8f0: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
b900: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
b910: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
b920: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
b930: 20 53 75 62 74 72 61 63 74 20 50 31 20 50 32 20   Subtract P1 P2 
b940: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
b950: 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2d  is: r[P3]=r[P2]-
b960: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 75 62 74  r[P1].**.** Subt
b970: 72 61 63 74 20 74 68 65 20 76 61 6c 75 65 20 69  ract the value i
b980: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 66 72  n register P1 fr
b990: 6f 6d 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  om the value in 
b9a0: 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61  register P2.** a
b9b0: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
b9c0: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
b9d0: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
b9e0: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
b9f0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
ba00: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
ba10: 3a 20 44 69 76 69 64 65 20 50 31 20 50 32 20 50  : Divide P1 P2 P
ba20: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
ba30: 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2f 72  s: r[P3]=r[P2]/r
ba40: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 44 69 76 69 64  [P1].**.** Divid
ba50: 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
ba60: 65 67 69 73 74 65 72 20 50 31 20 62 79 20 74 68  egister P1 by th
ba70: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
ba80: 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74  ter P2.** and st
ba90: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
baa0: 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 28 50  n register P3 (P
bab0: 33 3d 50 32 2f 50 31 29 2e 20 49 66 20 74 68 65  3=P2/P1). If the
bac0: 20 76 61 6c 75 65 20 69 6e 20 0a 2a 2a 20 72 65   value in .** re
bad0: 67 69 73 74 65 72 20 50 31 20 69 73 20 7a 65 72  gister P1 is zer
bae0: 6f 2c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  o, then the resu
baf0: 6c 74 20 69 73 20 4e 55 4c 4c 2e 20 49 66 20 65  lt is NULL. If e
bb00: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 0a  ither input is .
bb10: 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  ** NULL, the res
bb20: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
bb30: 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6d 61 69  /* Opcode: Remai
bb40: 6e 64 65 72 20 50 31 20 50 32 20 50 33 20 2a 20  nder P1 P2 P3 * 
bb50: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
bb60: 5b 50 33 5d 3d 72 5b 50 32 5d 25 72 5b 50 31 5d  [P3]=r[P2]%r[P1]
bb70: 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 75 74 65 20 74  .**.** Compute t
bb80: 68 65 20 72 65 6d 61 69 6e 64 65 72 20 61 66 74  he remainder aft
bb90: 65 72 20 69 6e 74 65 67 65 72 20 72 65 67 69 73  er integer regis
bba0: 74 65 72 20 50 32 20 69 73 20 64 69 76 69 64 65  ter P2 is divide
bbb0: 64 20 62 79 20 0a 2a 2a 20 72 65 67 69 73 74 65  d by .** registe
bbc0: 72 20 50 31 20 61 6e 64 20 73 74 6f 72 65 20 74  r P1 and store t
bbd0: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
bbe0: 69 73 74 65 72 20 50 33 2e 20 0a 2a 2a 20 49 66  ister P3. .** If
bbf0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
bc00: 67 69 73 74 65 72 20 50 31 20 69 73 20 7a 65 72  gister P1 is zer
bc10: 6f 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  o the result is 
bc20: 4e 55 4c 4c 2e 0a 2a 2a 20 49 66 20 65 69 74 68  NULL..** If eith
bc30: 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
bc40: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
bc50: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
bc60: 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20 20  OP_Add:         
bc70: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
bc80: 65 20 61 73 20 54 4b 5f 50 4c 55 53 2c 20 69 6e  e as TK_PLUS, in
bc90: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
bca0: 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74  case OP_Subtract
bcb0: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  :              /
bcc0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4d 49 4e  * same as TK_MIN
bcd0: 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  US, in1, in2, ou
bce0: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75  t3 */.case OP_Mu
bcf0: 6c 74 69 70 6c 79 3a 20 20 20 20 20 20 20 20 20  ltiply:         
bd00: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
bd10: 54 4b 5f 53 54 41 52 2c 20 69 6e 31 2c 20 69 6e  TK_STAR, in1, in
bd20: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
bd30: 4f 50 5f 44 69 76 69 64 65 3a 20 20 20 20 20 20  OP_Divide:      
bd40: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
bd50: 65 20 61 73 20 54 4b 5f 53 4c 41 53 48 2c 20 69  e as TK_SLASH, i
bd60: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
bd70: 0a 63 61 73 65 20 4f 50 5f 52 65 6d 61 69 6e 64  .case OP_Remaind
bd80: 65 72 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  er: {           
bd90: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 45  /* same as TK_RE
bda0: 4d 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  M, in1, in2, out
bdb0: 33 20 2a 2f 0a 20 20 63 68 61 72 20 62 49 6e 74  3 */.  char bInt
bdc0: 69 6e 74 3b 20 20 20 2f 2a 20 53 74 61 72 74 65  int;   /* Starte
bdd0: 64 20 6f 75 74 20 61 73 20 74 77 6f 20 69 6e 74  d out as two int
bde0: 65 67 65 72 20 6f 70 65 72 61 6e 64 73 20 2a 2f  eger operands */
bdf0: 0a 20 20 75 31 36 20 66 6c 61 67 73 3b 20 20 20  .  u16 flags;   
be00: 20 20 20 2f 2a 20 43 6f 6d 62 69 6e 65 64 20 4d     /* Combined M
be10: 45 4d 5f 2a 20 66 6c 61 67 73 20 66 72 6f 6d 20  EM_* flags from 
be20: 62 6f 74 68 20 69 6e 70 75 74 73 20 2a 2f 0a 20  both inputs */. 
be30: 20 75 31 36 20 74 79 70 65 31 3b 20 20 20 20 20   u16 type1;     
be40: 20 2f 2a 20 4e 75 6d 65 72 69 63 20 74 79 70 65   /* Numeric type
be50: 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64   of left operand
be60: 20 2a 2f 0a 20 20 75 31 36 20 74 79 70 65 32 3b   */.  u16 type2;
be70: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 65 72 69 63        /* Numeric
be80: 20 74 79 70 65 20 6f 66 20 72 69 67 68 74 20 6f   type of right o
be90: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36 34 20  perand */.  i64 
bea0: 69 41 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49  iA;         /* I
beb0: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f 66 20  nteger value of 
bec0: 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  left operand */.
bed0: 20 20 69 36 34 20 69 42 3b 20 20 20 20 20 20 20    i64 iB;       
bee0: 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c    /* Integer val
bef0: 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72  ue of right oper
bf00: 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20  and */.  double 
bf10: 72 41 3b 20 20 20 20 20 20 2f 2a 20 52 65 61 6c  rA;      /* Real
bf20: 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f   value of left o
bf30: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62  perand */.  doub
bf40: 6c 65 20 72 42 3b 20 20 20 20 20 20 2f 2a 20 52  le rB;      /* R
bf50: 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 72 69 67  eal value of rig
bf60: 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 0a 20  ht operand */.. 
bf70: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
bf80: 70 2d 3e 70 31 5d 3b 0a 20 20 74 79 70 65 31 20  p->p1];.  type1 
bf90: 3d 20 6e 75 6d 65 72 69 63 54 79 70 65 28 70 49  = numericType(pI
bfa0: 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61  n1);.  pIn2 = &a
bfb0: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
bfc0: 74 79 70 65 32 20 3d 20 6e 75 6d 65 72 69 63 54  type2 = numericT
bfd0: 79 70 65 28 70 49 6e 32 29 3b 0a 20 20 70 4f 75  ype(pIn2);.  pOu
bfe0: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
bff0: 33 5d 3b 0a 20 20 66 6c 61 67 73 20 3d 20 70 49  3];.  flags = pI
c000: 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32  n1->flags | pIn2
c010: 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28  ->flags;.  if( (
c020: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
c030: 29 21 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74  )!=0 ) goto arit
c040: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
c050: 5f 6e 75 6c 6c 3b 0a 20 20 69 66 28 20 28 74 79  _null;.  if( (ty
c060: 70 65 31 20 26 20 74 79 70 65 32 20 26 20 4d 45  pe1 & type2 & ME
c070: 4d 5f 49 6e 74 29 21 3d 30 20 29 7b 0a 20 20 20  M_Int)!=0 ){.   
c080: 20 69 41 20 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b   iA = pIn1->u.i;
c090: 0a 20 20 20 20 69 42 20 3d 20 70 49 6e 32 2d 3e  .    iB = pIn2->
c0a0: 75 2e 69 3b 0a 20 20 20 20 62 49 6e 74 69 6e 74  u.i;.    bIntint
c0b0: 20 3d 20 31 3b 0a 20 20 20 20 73 77 69 74 63 68   = 1;.    switch
c0c0: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b  ( pOp->opcode ){
c0d0: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 41  .      case OP_A
c0e0: 64 64 3a 20 20 20 20 20 20 20 69 66 28 20 73 71  dd:       if( sq
c0f0: 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28 26 69  lite3AddInt64(&i
c100: 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f  B,iA) ) goto fp_
c110: 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20  math;  break;.  
c120: 20 20 20 20 63 61 73 65 20 4f 50 5f 53 75 62 74      case OP_Subt
c130: 72 61 63 74 3a 20 20 69 66 28 20 73 71 6c 69 74  ract:  if( sqlit
c140: 65 33 53 75 62 49 6e 74 36 34 28 26 69 42 2c 69  e3SubInt64(&iB,i
c150: 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74  A) ) goto fp_mat
c160: 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20  h;  break;.     
c170: 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c   case OP_Multipl
c180: 79 3a 20 20 69 66 28 20 73 71 6c 69 74 65 33 4d  y:  if( sqlite3M
c190: 75 6c 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20  ulInt64(&iB,iA) 
c1a0: 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20  ) goto fp_math; 
c1b0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
c1c0: 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a  se OP_Divide: {.
c1d0: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
c1e0: 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65  0 ) goto arithme
c1f0: 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75  tic_result_is_nu
c200: 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  ll;.        if( 
c210: 69 41 3d 3d 2d 31 20 26 26 20 69 42 3d 3d 53 4d  iA==-1 && iB==SM
c220: 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29 20 67  ALLEST_INT64 ) g
c230: 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 0a 20 20 20  oto fp_math;.   
c240: 20 20 20 20 20 69 42 20 2f 3d 20 69 41 3b 0a 20       iB /= iA;. 
c250: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
c260: 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61      }.      defa
c270: 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69  ult: {.        i
c280: 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20  f( iA==0 ) goto 
c290: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
c2a0: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20  t_is_null;.     
c2b0: 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 29 20     if( iA==-1 ) 
c2c0: 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  iA = 1;.        
c2d0: 69 42 20 25 3d 20 69 41 3b 0a 20 20 20 20 20 20  iB %= iA;.      
c2e0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
c2f0: 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d  .    }.    pOut-
c300: 3e 75 2e 69 20 3d 20 69 42 3b 0a 20 20 20 20 4d  >u.i = iB;.    M
c310: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
c320: 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ut, MEM_Int);.  
c330: 7d 65 6c 73 65 7b 0a 20 20 20 20 62 49 6e 74 69  }else{.    bInti
c340: 6e 74 20 3d 20 30 3b 0a 66 70 5f 6d 61 74 68 3a  nt = 0;.fp_math:
c350: 0a 20 20 20 20 72 41 20 3d 20 73 71 6c 69 74 65  .    rA = sqlite
c360: 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70  3VdbeRealValue(p
c370: 49 6e 31 29 3b 0a 20 20 20 20 72 42 20 3d 20 73  In1);.    rB = s
c380: 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61  qlite3VdbeRealVa
c390: 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 20 20 73  lue(pIn2);.    s
c3a0: 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f  witch( pOp->opco
c3b0: 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65  de ){.      case
c3c0: 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20   OP_Add:        
c3d0: 20 72 42 20 2b 3d 20 72 41 3b 20 20 20 20 20 20   rB += rA;      
c3e0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
c3f0: 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20  se OP_Subtract: 
c400: 20 20 20 72 42 20 2d 3d 20 72 41 3b 20 20 20 20     rB -= rA;    
c410: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
c420: 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79  case OP_Multiply
c430: 3a 20 20 20 20 72 42 20 2a 3d 20 72 41 3b 20 20  :    rB *= rA;  
c440: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
c450: 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65    case OP_Divide
c460: 3a 20 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 28  : {.        /* (
c470: 64 6f 75 62 6c 65 29 30 20 49 6e 20 63 61 73 65  double)0 In case
c480: 20 6f 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   of SQLITE_OMIT_
c490: 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 2e 2e  FLOATING_POINT..
c4a0: 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28  . */.        if(
c4b0: 20 72 41 3d 3d 28 64 6f 75 62 6c 65 29 30 20 29   rA==(double)0 )
c4c0: 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63   goto arithmetic
c4d0: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b  _result_is_null;
c4e0: 0a 20 20 20 20 20 20 20 20 72 42 20 2f 3d 20 72  .        rB /= r
c4f0: 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  A;.        break
c500: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
c510: 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20  default: {.     
c520: 20 20 20 69 41 20 3d 20 28 69 36 34 29 72 41 3b     iA = (i64)rA;
c530: 0a 20 20 20 20 20 20 20 20 69 42 20 3d 20 28 69  .        iB = (i
c540: 36 34 29 72 42 3b 0a 20 20 20 20 20 20 20 20 69  64)rB;.        i
c550: 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20  f( iA==0 ) goto 
c560: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
c570: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20  t_is_null;.     
c580: 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 29 20     if( iA==-1 ) 
c590: 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  iA = 1;.        
c5a0: 72 42 20 3d 20 28 64 6f 75 62 6c 65 29 28 69 42  rB = (double)(iB
c5b0: 20 25 20 69 41 29 3b 0a 20 20 20 20 20 20 20 20   % iA);.        
c5c0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
c5d0: 20 20 20 7d 0a 23 69 66 64 65 66 20 53 51 4c 49     }.#ifdef SQLI
c5e0: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
c5f0: 5f 50 4f 49 4e 54 0a 20 20 20 20 70 4f 75 74 2d  _POINT.    pOut-
c600: 3e 75 2e 69 20 3d 20 72 42 3b 0a 20 20 20 20 4d  >u.i = rB;.    M
c610: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
c620: 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 23 65  ut, MEM_Int);.#e
c630: 6c 73 65 0a 20 20 20 20 69 66 28 20 73 71 6c 69  lse.    if( sqli
c640: 74 65 33 49 73 4e 61 4e 28 72 42 29 20 29 7b 0a  te3IsNaN(rB) ){.
c650: 20 20 20 20 20 20 67 6f 74 6f 20 61 72 69 74 68        goto arith
c660: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
c670: 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a 20 20 20 20  null;.    }.    
c680: 70 4f 75 74 2d 3e 75 2e 72 20 3d 20 72 42 3b 0a  pOut->u.r = rB;.
c690: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
c6a0: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 52 65 61  ag(pOut, MEM_Rea
c6b0: 6c 29 3b 0a 20 20 20 20 69 66 28 20 28 28 74 79  l);.    if( ((ty
c6c0: 70 65 31 7c 74 79 70 65 32 29 26 4d 45 4d 5f 52  pe1|type2)&MEM_R
c6d0: 65 61 6c 29 3d 3d 30 20 26 26 20 21 62 49 6e 74  eal)==0 && !bInt
c6e0: 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  int ){.      sql
c6f0: 69 74 65 33 56 64 62 65 49 6e 74 65 67 65 72 41  ite3VdbeIntegerA
c700: 66 66 69 6e 69 74 79 28 70 4f 75 74 29 3b 0a 20  ffinity(pOut);. 
c710: 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a     }.#endif.  }.
c720: 20 20 62 72 65 61 6b 3b 0a 0a 61 72 69 74 68 6d    break;..arithm
c730: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
c740: 75 6c 6c 3a 0a 20 20 73 71 6c 69 74 65 33 56 64  ull:.  sqlite3Vd
c750: 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
c760: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
c770: 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 6c 53  /* Opcode: CollS
c780: 65 71 20 50 31 20 2a 20 2a 20 50 34 0a 2a 2a 0a  eq P1 * * P4.**.
c790: 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
c7a0: 65 72 20 74 6f 20 61 20 43 6f 6c 6c 53 65 71 20  er to a CollSeq 
c7b0: 73 74 72 75 63 74 2e 20 49 66 20 74 68 65 20 6e  struct. If the n
c7c0: 65 78 74 20 63 61 6c 6c 20 74 6f 20 61 20 75 73  ext call to a us
c7d0: 65 72 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20 6f  er function.** o
c7e0: 72 20 61 67 67 72 65 67 61 74 65 20 63 61 6c 6c  r aggregate call
c7f0: 73 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e 63  s sqlite3GetFunc
c800: 43 6f 6c 6c 53 65 71 28 29 2c 20 74 68 69 73 20  CollSeq(), this 
c810: 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
c820: 63 65 20 77 69 6c 6c 0a 2a 2a 20 62 65 20 72 65  ce will.** be re
c830: 74 75 72 6e 65 64 2e 20 54 68 69 73 20 69 73 20  turned. This is 
c840: 75 73 65 64 20 62 79 20 74 68 65 20 62 75 69 6c  used by the buil
c850: 74 2d 69 6e 20 6d 69 6e 28 29 2c 20 6d 61 78 28  t-in min(), max(
c860: 29 20 61 6e 64 20 6e 75 6c 6c 69 66 28 29 0a 2a  ) and nullif().*
c870: 2a 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a  * functions..**.
c880: 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 74 20  ** If P1 is not 
c890: 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74 20 69 73  zero, then it is
c8a0: 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74   a register that
c8b0: 20 61 20 73 75 62 73 65 71 75 65 6e 74 20 6d 69   a subsequent mi
c8c0: 6e 28 29 20 6f 72 0a 2a 2a 20 6d 61 78 28 29 20  n() or.** max() 
c8d0: 61 67 67 72 65 67 61 74 65 20 77 69 6c 6c 20 73  aggregate will s
c8e0: 65 74 20 74 6f 20 31 20 69 66 20 74 68 65 20 63  et to 1 if the c
c8f0: 75 72 72 65 6e 74 20 72 6f 77 20 69 73 20 6e 6f  urrent row is no
c900: 74 20 74 68 65 20 6d 69 6e 69 6d 75 6d 20 6f 72  t the minimum or
c910: 0a 2a 2a 20 6d 61 78 69 6d 75 6d 2e 20 20 54 68  .** maximum.  Th
c920: 65 20 50 31 20 72 65 67 69 73 74 65 72 20 69 73  e P1 register is
c930: 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20   initialized to 
c940: 30 20 62 79 20 74 68 69 73 20 69 6e 73 74 72 75  0 by this instru
c950: 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ction..**.** The
c960: 20 69 6e 74 65 72 66 61 63 65 20 75 73 65 64 20   interface used 
c970: 62 79 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  by the implement
c980: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 61 66 6f  ation of the afo
c990: 72 65 6d 65 6e 74 69 6f 6e 65 64 20 66 75 6e 63  rementioned func
c9a0: 74 69 6f 6e 73 0a 2a 2a 20 74 6f 20 72 65 74 72  tions.** to retr
c9b0: 69 65 76 65 20 74 68 65 20 63 6f 6c 6c 61 74 69  ieve the collati
c9c0: 6f 6e 20 73 65 71 75 65 6e 63 65 20 73 65 74 20  on sequence set 
c9d0: 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69  by this opcode i
c9e0: 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 0a  s not available.
c9f0: 2a 2a 20 70 75 62 6c 69 63 6c 79 2e 20 20 4f 6e  ** publicly.  On
ca00: 6c 79 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63  ly built-in func
ca10: 74 69 6f 6e 73 20 68 61 76 65 20 61 63 63 65 73  tions have acces
ca20: 73 20 74 6f 20 74 68 69 73 20 66 65 61 74 75 72  s to this featur
ca30: 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f  e..*/.case OP_Co
ca40: 6c 6c 53 65 71 3a 20 7b 0a 20 20 61 73 73 65 72  llSeq: {.  asser
ca50: 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
ca60: 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20  P4_COLLSEQ );.  
ca70: 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20  if( pOp->p1 ){. 
ca80: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
ca90: 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b  mSetInt64(&aMem[
caa0: 70 4f 70 2d 3e 70 31 5d 2c 20 30 29 3b 0a 20 20  pOp->p1], 0);.  
cab0: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
cac0: 20 4f 70 63 6f 64 65 3a 20 46 75 6e 63 74 69 6f   Opcode: Functio
cad0: 6e 30 20 50 31 20 50 32 20 50 33 20 50 34 20 50  n0 P1 P2 P3 P4 P
cae0: 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  5.** Synopsis: r
caf0: 5b 50 33 5d 3d 66 75 6e 63 28 72 5b 50 32 40 50  [P3]=func(r[P2@P
cb00: 35 5d 29 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65  5]).**.** Invoke
cb10: 20 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e   a user function
cb20: 20 28 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65   (P4 is a pointe
cb30: 72 20 74 6f 20 61 20 46 75 6e 63 44 65 66 20 6f  r to a FuncDef o
cb40: 62 6a 65 63 74 20 74 68 61 74 0a 2a 2a 20 64 65  bject that.** de
cb50: 66 69 6e 65 73 20 74 68 65 20 66 75 6e 63 74 69  fines the functi
cb60: 6f 6e 29 20 77 69 74 68 20 50 35 20 61 72 67 75  on) with P5 argu
cb70: 6d 65 6e 74 73 20 74 61 6b 65 6e 20 66 72 6f 6d  ments taken from
cb80: 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64   register P2 and
cb90: 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 20  .** successors. 
cba0: 20 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   The result of t
cbb0: 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 73  he function is s
cbc0: 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
cbd0: 72 20 50 33 2e 0a 2a 2a 20 52 65 67 69 73 74 65  r P3..** Registe
cbe0: 72 20 50 33 20 6d 75 73 74 20 6e 6f 74 20 62 65  r P3 must not be
cbf0: 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 75 6e 63   one of the func
cc00: 74 69 6f 6e 20 69 6e 70 75 74 73 2e 0a 2a 2a 0a  tion inputs..**.
cc10: 2a 2a 20 50 31 20 69 73 20 61 20 33 32 2d 62 69  ** P1 is a 32-bi
cc20: 74 20 62 69 74 6d 61 73 6b 20 69 6e 64 69 63 61  t bitmask indica
cc30: 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20  ting whether or 
cc40: 6e 6f 74 20 65 61 63 68 20 61 72 67 75 6d 65 6e  not each argumen
cc50: 74 20 74 6f 20 74 68 65 20 0a 2a 2a 20 66 75 6e  t to the .** fun
cc60: 63 74 69 6f 6e 20 77 61 73 20 64 65 74 65 72 6d  ction was determ
cc70: 69 6e 65 64 20 74 6f 20 62 65 20 63 6f 6e 73 74  ined to be const
cc80: 61 6e 74 20 61 74 20 63 6f 6d 70 69 6c 65 20 74  ant at compile t
cc90: 69 6d 65 2e 20 49 66 20 74 68 65 20 66 69 72 73  ime. If the firs
cca0: 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 77 61  t.** argument wa
ccb0: 73 20 63 6f 6e 73 74 61 6e 74 20 74 68 65 6e 20  s constant then 
ccc0: 62 69 74 20 30 20 6f 66 20 50 31 20 69 73 20 73  bit 0 of P1 is s
ccd0: 65 74 2e 20 54 68 69 73 20 69 73 20 75 73 65 64  et. This is used
cce0: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a   to determine.**
ccf0: 20 77 68 65 74 68 65 72 20 6d 65 74 61 20 64 61   whether meta da
cd00: 74 61 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ta associated wi
cd10: 74 68 20 61 20 75 73 65 72 20 66 75 6e 63 74 69  th a user functi
cd20: 6f 6e 20 61 72 67 75 6d 65 6e 74 20 75 73 69 6e  on argument usin
cd30: 67 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33  g the.** sqlite3
cd40: 5f 73 65 74 5f 61 75 78 64 61 74 61 28 29 20 41  _set_auxdata() A
cd50: 50 49 20 6d 61 79 20 62 65 20 73 61 66 65 6c 79  PI may be safely
cd60: 20 72 65 74 61 69 6e 65 64 20 75 6e 74 69 6c 20   retained until 
cd70: 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 76 6f  the next.** invo
cd80: 63 61 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 6f  cation of this o
cd90: 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  pcode..**.** See
cda0: 20 61 6c 73 6f 3a 20 46 75 6e 63 74 69 6f 6e 2c   also: Function,
cdb0: 20 41 67 67 53 74 65 70 2c 20 41 67 67 46 69 6e   AggStep, AggFin
cdc0: 61 6c 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  al.*/./* Opcode:
cdd0: 20 46 75 6e 63 74 69 6f 6e 20 50 31 20 50 32 20   Function P1 P2 
cde0: 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
cdf0: 70 73 69 73 3a 20 72 5b 50 33 5d 3d 66 75 6e 63  psis: r[P3]=func
ce00: 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a  (r[P2@P5]).**.**
ce10: 20 49 6e 76 6f 6b 65 20 61 20 75 73 65 72 20 66   Invoke a user f
ce20: 75 6e 63 74 69 6f 6e 20 28 50 34 20 69 73 20 61  unction (P4 is a
ce30: 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 73   pointer to an s
ce40: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f  qlite3_context o
ce50: 62 6a 65 63 74 20 74 68 61 74 0a 2a 2a 20 63 6f  bject that.** co
ce60: 6e 74 61 69 6e 73 20 61 20 70 6f 69 6e 74 65 72  ntains a pointer
ce70: 20 74 6f 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   to the function
ce80: 20 74 6f 20 62 65 20 72 75 6e 29 20 77 69 74 68   to be run) with
ce90: 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20 74 61   P5 arguments ta
cea0: 6b 65 6e 0a 2a 2a 20 66 72 6f 6d 20 72 65 67 69  ken.** from regi
ceb0: 73 74 65 72 20 50 32 20 61 6e 64 20 73 75 63 63  ster P2 and succ
cec0: 65 73 73 6f 72 73 2e 20 20 54 68 65 20 72 65 73  essors.  The res
ced0: 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ult of the funct
cee0: 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 0a 2a 2a  ion is stored.**
cef0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
cf00: 20 20 52 65 67 69 73 74 65 72 20 50 33 20 6d 75    Register P3 mu
cf10: 73 74 20 6e 6f 74 20 62 65 20 6f 6e 65 20 6f 66  st not be one of
cf20: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 6e   the function in
cf30: 70 75 74 73 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69  puts..**.** P1 i
cf40: 73 20 61 20 33 32 2d 62 69 74 20 62 69 74 6d 61  s a 32-bit bitma
cf50: 73 6b 20 69 6e 64 69 63 61 74 69 6e 67 20 77 68  sk indicating wh
cf60: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 65 61 63  ether or not eac
cf70: 68 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  h argument to th
cf80: 65 20 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 77  e .** function w
cf90: 61 73 20 64 65 74 65 72 6d 69 6e 65 64 20 74 6f  as determined to
cfa0: 20 62 65 20 63 6f 6e 73 74 61 6e 74 20 61 74 20   be constant at 
cfb0: 63 6f 6d 70 69 6c 65 20 74 69 6d 65 2e 20 49 66  compile time. If
cfc0: 20 74 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72   the first.** ar
cfd0: 67 75 6d 65 6e 74 20 77 61 73 20 63 6f 6e 73 74  gument was const
cfe0: 61 6e 74 20 74 68 65 6e 20 62 69 74 20 30 20 6f  ant then bit 0 o
cff0: 66 20 50 31 20 69 73 20 73 65 74 2e 20 54 68 69  f P1 is set. Thi
d000: 73 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 74  s is used to det
d010: 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65  ermine.** whethe
d020: 72 20 6d 65 74 61 20 64 61 74 61 20 61 73 73 6f  r meta data asso
d030: 63 69 61 74 65 64 20 77 69 74 68 20 61 20 75 73  ciated with a us
d040: 65 72 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75  er function argu
d050: 6d 65 6e 74 20 75 73 69 6e 67 20 74 68 65 0a 2a  ment using the.*
d060: 2a 20 73 71 6c 69 74 65 33 5f 73 65 74 5f 61 75  * sqlite3_set_au
d070: 78 64 61 74 61 28 29 20 41 50 49 20 6d 61 79 20  xdata() API may 
d080: 62 65 20 73 61 66 65 6c 79 20 72 65 74 61 69 6e  be safely retain
d090: 65 64 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78  ed until the nex
d0a0: 74 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 20  t.** invocation 
d0b0: 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a  of this opcode..
d0c0: 2a 2a 0a 2a 2a 20 53 51 4c 20 66 75 6e 63 74 69  **.** SQL functi
d0d0: 6f 6e 73 20 61 72 65 20 69 6e 69 74 69 61 6c 6c  ons are initiall
d0e0: 79 20 63 6f 64 65 64 20 61 73 20 4f 50 5f 46 75  y coded as OP_Fu
d0f0: 6e 63 74 69 6f 6e 30 20 77 69 74 68 20 50 34 20  nction0 with P4 
d100: 70 6f 69 6e 74 69 6e 67 0a 2a 2a 20 74 6f 20 61  pointing.** to a
d110: 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 2e   FuncDef object.
d120: 20 20 42 75 74 20 6f 6e 20 66 69 72 73 74 20 65    But on first e
d130: 76 61 6c 75 61 74 69 6f 6e 2c 20 74 68 65 20 50  valuation, the P
d140: 34 20 6f 70 65 72 61 6e 64 20 69 73 0a 2a 2a 20  4 operand is.** 
d150: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 6f  automatically co
d160: 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20  nverted into an 
d170: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
d180: 6f 62 6a 65 63 74 20 61 6e 64 20 74 68 65 20 6f  object and the o
d190: 70 65 72 61 74 69 6f 6e 0a 2a 2a 20 63 68 61 6e  peration.** chan
d1a0: 67 65 64 20 74 6f 20 74 68 69 73 20 4f 50 5f 46  ged to this OP_F
d1b0: 75 6e 63 74 69 6f 6e 20 6f 70 63 6f 64 65 2e 20  unction opcode. 
d1c0: 20 49 6e 20 74 68 69 73 20 77 61 79 2c 20 74 68   In this way, th
d1d0: 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e  e initialization
d1e0: 20 6f 66 0a 2a 2a 20 74 68 65 20 73 71 6c 69 74   of.** the sqlit
d1f0: 65 33 5f 63 6f 6e 74 65 78 74 20 6f 62 6a 65 63  e3_context objec
d200: 74 20 6f 63 63 75 72 73 20 6f 6e 6c 79 20 6f 6e  t occurs only on
d210: 63 65 2c 20 72 61 74 68 65 72 20 74 68 61 6e 20  ce, rather than 
d220: 6f 6e 63 65 20 66 6f 72 20 65 61 63 68 0a 2a 2a  once for each.**
d230: 20 65 76 61 6c 75 61 74 69 6f 6e 20 6f 66 20 74   evaluation of t
d240: 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a  he function..**.
d250: 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 75 6e  ** See also: Fun
d260: 63 74 69 6f 6e 30 2c 20 41 67 67 53 74 65 70 2c  ction0, AggStep,
d270: 20 41 67 67 46 69 6e 61 6c 0a 2a 2f 0a 63 61 73   AggFinal.*/.cas
d280: 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 30 3a 20  e OP_Function0: 
d290: 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 73 71 6c  {.  int n;.  sql
d2a0: 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43  ite3_context *pC
d2b0: 74 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  tx;..  assert( p
d2c0: 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46  Op->p4type==P4_F
d2d0: 55 4e 43 44 45 46 20 29 3b 0a 20 20 6e 20 3d 20  UNCDEF );.  n = 
d2e0: 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 73 73 65 72  pOp->p5;.  asser
d2f0: 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20  t( pOp->p3>0 && 
d300: 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
d310: 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
d320: 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  ) );.  assert( n
d330: 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e 70 32 3e  ==0 || (pOp->p2>
d340: 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c 3d  0 && pOp->p2+n<=
d350: 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
d360: 6e 43 75 72 73 6f 72 29 2b 31 29 20 29 3b 0a 20  nCursor)+1) );. 
d370: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
d380: 3c 70 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f 70 2d  <pOp->p2 || pOp-
d390: 3e 70 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e 20 29  >p3>=pOp->p2+n )
d3a0: 3b 0a 20 20 70 43 74 78 20 3d 20 73 71 6c 69 74  ;.  pCtx = sqlit
d3b0: 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28  e3DbMallocRawNN(
d3c0: 64 62 2c 20 73 69 7a 65 6f 66 28 2a 70 43 74 78  db, sizeof(*pCtx
d3d0: 29 20 2b 20 28 6e 2d 31 29 2a 73 69 7a 65 6f 66  ) + (n-1)*sizeof
d3e0: 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29  (sqlite3_value*)
d3f0: 29 3b 0a 20 20 69 66 28 20 70 43 74 78 3d 3d 30  );.  if( pCtx==0
d400: 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
d410: 20 20 70 43 74 78 2d 3e 70 4f 75 74 20 3d 20 30    pCtx->pOut = 0
d420: 3b 0a 20 20 70 43 74 78 2d 3e 70 46 75 6e 63 20  ;.  pCtx->pFunc 
d430: 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b  = pOp->p4.pFunc;
d440: 0a 20 20 70 43 74 78 2d 3e 69 4f 70 20 3d 20 28  .  pCtx->iOp = (
d450: 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b  int)(pOp - aOp);
d460: 0a 20 20 70 43 74 78 2d 3e 70 56 64 62 65 20 3d  .  pCtx->pVdbe =
d470: 20 70 3b 0a 20 20 70 43 74 78 2d 3e 61 72 67 63   p;.  pCtx->argc
d480: 20 3d 20 6e 3b 0a 20 20 70 4f 70 2d 3e 70 34 74   = n;.  pOp->p4t
d490: 79 70 65 20 3d 20 50 34 5f 46 55 4e 43 43 54 58  ype = P4_FUNCCTX
d4a0: 3b 0a 20 20 70 4f 70 2d 3e 70 34 2e 70 43 74 78  ;.  pOp->p4.pCtx
d4b0: 20 3d 20 70 43 74 78 3b 0a 20 20 70 4f 70 2d 3e   = pCtx;.  pOp->
d4c0: 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 46 75 6e 63  opcode = OP_Func
d4d0: 74 69 6f 6e 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20  tion;.  /* Fall 
d4e0: 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f  through into OP_
d4f0: 46 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 0a 63 61  Function */.}.ca
d500: 73 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 3a 20  se OP_Function: 
d510: 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73 71 6c  {.  int i;.  sql
d520: 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43  ite3_context *pC
d530: 74 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  tx;..  assert( p
d540: 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46  Op->p4type==P4_F
d550: 55 4e 43 43 54 58 20 29 3b 0a 20 20 70 43 74 78  UNCCTX );.  pCtx
d560: 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 43 74 78 3b   = pOp->p4.pCtx;
d570: 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69 73 20 66  ..  /* If this f
d580: 75 6e 63 74 69 6f 6e 20 69 73 20 69 6e 73 69 64  unction is insid
d590: 65 20 6f 66 20 61 20 74 72 69 67 67 65 72 2c 20  e of a trigger, 
d5a0: 74 68 65 20 72 65 67 69 73 74 65 72 20 61 72 72  the register arr
d5b0: 61 79 20 69 6e 20 61 4d 65 6d 5b 5d 0a 20 20 2a  ay in aMem[].  *
d5c0: 2a 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 66  * might change f
d5d0: 72 6f 6d 20 6f 6e 65 20 65 76 61 6c 75 61 74 69  rom one evaluati
d5e0: 6f 6e 20 74 6f 20 74 68 65 20 6e 65 78 74 2e 20  on to the next. 
d5f0: 20 54 68 65 20 6e 65 78 74 20 62 6c 6f 63 6b 20   The next block 
d600: 6f 66 20 63 6f 64 65 0a 20 20 2a 2a 20 63 68 65  of code.  ** che
d610: 63 6b 73 20 74 6f 20 73 65 65 20 69 66 20 74 68  cks to see if th
d620: 65 20 72 65 67 69 73 74 65 72 20 61 72 72 61 79  e register array
d630: 20 68 61 73 20 63 68 61 6e 67 65 64 2c 20 61 6e   has changed, an
d640: 64 20 69 66 20 73 6f 20 69 74 0a 20 20 2a 2a 20  d if so it.  ** 
d650: 72 65 69 6e 69 74 69 61 6c 69 7a 65 73 20 74 68  reinitializes th
d660: 65 20 72 65 6c 61 76 61 6e 74 20 70 61 72 74 73  e relavant parts
d670: 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f   of the sqlite3_
d680: 63 6f 6e 74 65 78 74 20 6f 62 6a 65 63 74 20 2a  context object *
d690: 2f 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  /.  pOut = &aMem
d6a0: 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28  [pOp->p3];.  if(
d6b0: 20 70 43 74 78 2d 3e 70 4f 75 74 20 21 3d 20 70   pCtx->pOut != p
d6c0: 4f 75 74 20 29 7b 0a 20 20 20 20 70 43 74 78 2d  Out ){.    pCtx-
d6d0: 3e 70 4f 75 74 20 3d 20 70 4f 75 74 3b 0a 20 20  >pOut = pOut;.  
d6e0: 20 20 66 6f 72 28 69 3d 70 43 74 78 2d 3e 61 72    for(i=pCtx->ar
d6f0: 67 63 2d 31 3b 20 69 3e 3d 30 3b 20 69 2d 2d 29  gc-1; i>=0; i--)
d700: 20 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d 20 3d   pCtx->argv[i] =
d710: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 2b 69   &aMem[pOp->p2+i
d720: 5d 3b 0a 20 20 7d 0a 0a 20 20 6d 65 6d 41 62 6f  ];.  }..  memAbo
d730: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 43  utToChange(p, pC
d740: 74 78 2d 3e 70 4f 75 74 29 3b 0a 23 69 66 64 65  tx->pOut);.#ifde
d750: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
d760: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 43 74 78   for(i=0; i<pCtx
d770: 2d 3e 61 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20  ->argc; i++){.  
d780: 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
d790: 61 6c 69 64 28 70 43 74 78 2d 3e 61 72 67 76 5b  alid(pCtx->argv[
d7a0: 69 5d 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53  i]) );.    REGIS
d7b0: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
d7c0: 32 2b 69 2c 20 70 43 74 78 2d 3e 61 72 67 76 5b  2+i, pCtx->argv[
d7d0: 69 5d 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  i]);.  }.#endif.
d7e0: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
d7f0: 28 70 43 74 78 2d 3e 70 4f 75 74 2c 20 4d 45 4d  (pCtx->pOut, MEM
d800: 5f 4e 75 6c 6c 29 3b 0a 20 20 70 43 74 78 2d 3e  _Null);.  pCtx->
d810: 66 45 72 72 6f 72 4f 72 41 75 78 20 3d 20 30 3b  fErrorOrAux = 0;
d820: 0a 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64  .  db->lastRowid
d830: 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20   = lastRowid;.  
d840: 28 2a 70 43 74 78 2d 3e 70 46 75 6e 63 2d 3e 78  (*pCtx->pFunc->x
d850: 53 46 75 6e 63 29 28 70 43 74 78 2c 20 70 43 74  SFunc)(pCtx, pCt
d860: 78 2d 3e 61 72 67 63 2c 20 70 43 74 78 2d 3e 61  x->argc, pCtx->a
d870: 72 67 76 29 3b 2f 2a 20 49 4d 50 3a 20 52 2d 32  rgv);/* IMP: R-2
d880: 34 35 30 35 2d 32 33 32 33 30 20 2a 2f 0a 20 20  4505-23230 */.  
d890: 6c 61 73 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e  lastRowid = db->
d8a0: 6c 61 73 74 52 6f 77 69 64 3b 20 20 2f 2a 20 52  lastRowid;  /* R
d8b0: 65 6d 65 6d 62 65 72 20 72 6f 77 69 64 20 63 68  emember rowid ch
d8c0: 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20 78 53  anges made by xS
d8d0: 46 75 6e 63 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66  Func */..  /* If
d8e0: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 72 65   the function re
d8f0: 74 75 72 6e 65 64 20 61 6e 20 65 72 72 6f 72 2c  turned an error,
d900: 20 74 68 72 6f 77 20 61 6e 20 65 78 63 65 70 74   throw an except
d910: 69 6f 6e 20 2a 2f 0a 20 20 69 66 28 20 70 43 74  ion */.  if( pCt
d920: 78 2d 3e 66 45 72 72 6f 72 4f 72 41 75 78 20 29  x->fErrorOrAux )
d930: 7b 0a 20 20 20 20 69 66 28 20 70 43 74 78 2d 3e  {.    if( pCtx->
d940: 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 20  isError ){.     
d950: 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f   sqlite3VdbeErro
d960: 72 28 70 2c 20 22 25 73 22 2c 20 73 71 6c 69 74  r(p, "%s", sqlit
d970: 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 43  e3_value_text(pC
d980: 74 78 2d 3e 70 4f 75 74 29 29 3b 0a 20 20 20 20  tx->pOut));.    
d990: 20 20 72 63 20 3d 20 70 43 74 78 2d 3e 69 73 45    rc = pCtx->isE
d9a0: 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20  rror;.    }.    
d9b0: 73 71 6c 69 74 65 33 56 64 62 65 44 65 6c 65 74  sqlite3VdbeDelet
d9c0: 65 41 75 78 44 61 74 61 28 64 62 2c 20 26 70 2d  eAuxData(db, &p-
d9d0: 3e 70 41 75 78 44 61 74 61 2c 20 70 43 74 78 2d  >pAuxData, pCtx-
d9e0: 3e 69 4f 70 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a  >iOp, pOp->p1);.
d9f0: 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74      if( rc ) got
da00: 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
da10: 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  rror;.  }..  /* 
da20: 43 6f 70 79 20 74 68 65 20 72 65 73 75 6c 74 20  Copy the result 
da30: 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  of the function 
da40: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33  into register P3
da50: 20 2a 2f 0a 20 20 69 66 28 20 70 4f 75 74 2d 3e   */.  if( pOut->
da60: 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72  flags & (MEM_Str
da70: 7c 4d 45 4d 5f 42 6c 6f 62 29 20 29 7b 0a 20 20  |MEM_Blob) ){.  
da80: 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
da90: 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 43 74 78  ngeEncoding(pCtx
daa0: 2d 3e 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67  ->pOut, encoding
dab0: 29 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74  );.    if( sqlit
dac0: 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28  e3VdbeMemTooBig(
dad0: 70 43 74 78 2d 3e 70 4f 75 74 29 20 29 20 67 6f  pCtx->pOut) ) go
dae0: 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
daf0: 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
db00: 45 28 70 4f 70 2d 3e 70 33 2c 20 70 43 74 78 2d  E(pOp->p3, pCtx-
db10: 3e 70 4f 75 74 29 3b 0a 20 20 55 50 44 41 54 45  >pOut);.  UPDATE
db20: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 43  _MAX_BLOBSIZE(pC
db30: 74 78 2d 3e 70 4f 75 74 29 3b 0a 20 20 62 72 65  tx->pOut);.  bre
db40: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
db50: 3a 20 42 69 74 41 6e 64 20 50 31 20 50 32 20 50  : BitAnd P1 P2 P
db60: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
db70: 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 26 72  s: r[P3]=r[P1]&r
db80: 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20  [P2].**.** Take 
db90: 74 68 65 20 62 69 74 2d 77 69 73 65 20 41 4e 44  the bit-wise AND
dba0: 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69   of the values i
dbb0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e  n register P1 an
dbc0: 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72  d P2 and.** stor
dbd0: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
dbe0: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
dbf0: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
dc00: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
dc10: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
dc20: 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 4f 72  /* Opcode: BitOr
dc30: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
dc40: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
dc50: 3d 72 5b 50 31 5d 7c 72 5b 50 32 5d 0a 2a 2a 0a  =r[P1]|r[P2].**.
dc60: 2a 2a 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d  ** Take the bit-
dc70: 77 69 73 65 20 4f 52 20 6f 66 20 74 68 65 20 76  wise OR of the v
dc80: 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
dc90: 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a  r P1 and P2 and.
dca0: 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  ** store the res
dcb0: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
dcc0: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
dcd0: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
dce0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
dcf0: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
dd00: 3a 20 53 68 69 66 74 4c 65 66 74 20 50 31 20 50  : ShiftLeft P1 P
dd10: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
dd20: 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32  psis: r[P3]=r[P2
dd30: 5d 3c 3c 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53  ]<<r[P1].**.** S
dd40: 68 69 66 74 20 74 68 65 20 69 6e 74 65 67 65 72  hift the integer
dd50: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
dd60: 65 72 20 50 32 20 74 6f 20 74 68 65 20 6c 65 66  er P2 to the lef
dd70: 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62  t by the.** numb
dd80: 65 72 20 6f 66 20 62 69 74 73 20 73 70 65 63 69  er of bits speci
dd90: 66 69 65 64 20 62 79 20 74 68 65 20 69 6e 74 65  fied by the inte
dda0: 67 65 72 20 69 6e 20 72 65 67 69 73 74 65 72 20  ger in register 
ddb0: 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65  P1..** Store the
ddc0: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
ddd0: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
dde0: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
ddf0: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
de00: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s NULL..*/./* Op
de10: 63 6f 64 65 3a 20 53 68 69 66 74 52 69 67 68 74  code: ShiftRight
de20: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
de30: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
de40: 3d 72 5b 50 32 5d 3e 3e 72 5b 50 31 5d 0a 2a 2a  =r[P2]>>r[P1].**
de50: 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20 69 6e  .** Shift the in
de60: 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72  teger value in r
de70: 65 67 69 73 74 65 72 20 50 32 20 74 6f 20 74 68  egister P2 to th
de80: 65 20 72 69 67 68 74 20 62 79 20 74 68 65 0a 2a  e right by the.*
de90: 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73  * number of bits
dea0: 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68   specified by th
deb0: 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65 67  e integer in reg
dec0: 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f  ister P1..** Sto
ded0: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
dee0: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
def0: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
df00: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
df10: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
df20: 0a 63 61 73 65 20 4f 50 5f 42 69 74 41 6e 64 3a  .case OP_BitAnd:
df30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df40: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42   /* same as TK_B
df50: 49 54 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c  ITAND, in1, in2,
df60: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
df70: 5f 42 69 74 4f 72 3a 20 20 20 20 20 20 20 20 20  _BitOr:         
df80: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
df90: 20 61 73 20 54 4b 5f 42 49 54 4f 52 2c 20 69 6e   as TK_BITOR, in
dfa0: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
dfb0: 63 61 73 65 20 4f 50 5f 53 68 69 66 74 4c 65 66  case OP_ShiftLef
dfc0: 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t:              
dfd0: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 53  /* same as TK_LS
dfe0: 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  HIFT, in1, in2, 
dff0: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
e000: 53 68 69 66 74 52 69 67 68 74 3a 20 7b 20 20 20  ShiftRight: {   
e010: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
e020: 61 73 20 54 4b 5f 52 53 48 49 46 54 2c 20 69 6e  as TK_RSHIFT, in
e030: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
e040: 20 20 69 36 34 20 69 41 3b 0a 20 20 75 36 34 20    i64 iA;.  u64 
e050: 75 41 3b 0a 20 20 69 36 34 20 69 42 3b 0a 20 20  uA;.  i64 iB;.  
e060: 75 38 20 6f 70 3b 0a 0a 20 20 70 49 6e 31 20 3d  u8 op;..  pIn1 =
e070: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
e080: 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
e090: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74  pOp->p2];.  pOut
e0a0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
e0b0: 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  ];.  if( (pIn1->
e0c0: 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c  flags | pIn2->fl
e0d0: 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  ags) & MEM_Null 
e0e0: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
e0f0: 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
e100: 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  t);.    break;. 
e110: 20 7d 0a 20 20 69 41 20 3d 20 73 71 6c 69 74 65   }.  iA = sqlite
e120: 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
e130: 6e 32 29 3b 0a 20 20 69 42 20 3d 20 73 71 6c 69  n2);.  iB = sqli
e140: 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
e150: 70 49 6e 31 29 3b 0a 20 20 6f 70 20 3d 20 70 4f  pIn1);.  op = pO
e160: 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 69 66 28  p->opcode;.  if(
e170: 20 6f 70 3d 3d 4f 50 5f 42 69 74 41 6e 64 20 29   op==OP_BitAnd )
e180: 7b 0a 20 20 20 20 69 41 20 26 3d 20 69 42 3b 0a  {.    iA &= iB;.
e190: 20 20 7d 65 6c 73 65 20 69 66 28 20 6f 70 3d 3d    }else if( op==
e1a0: 4f 50 5f 42 69 74 4f 72 20 29 7b 0a 20 20 20 20  OP_BitOr ){.    
e1b0: 69 41 20 7c 3d 20 69 42 3b 0a 20 20 7d 65 6c 73  iA |= iB;.  }els
e1c0: 65 20 69 66 28 20 69 42 21 3d 30 20 29 7b 0a 20  e if( iB!=0 ){. 
e1d0: 20 20 20 61 73 73 65 72 74 28 20 6f 70 3d 3d 4f     assert( op==O
e1e0: 50 5f 53 68 69 66 74 52 69 67 68 74 20 7c 7c 20  P_ShiftRight || 
e1f0: 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74  op==OP_ShiftLeft
e200: 20 29 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 73   );..    /* If s
e210: 68 69 66 74 69 6e 67 20 62 79 20 61 20 6e 65 67  hifting by a neg
e220: 61 74 69 76 65 20 61 6d 6f 75 6e 74 2c 20 73 68  ative amount, sh
e230: 69 66 74 20 69 6e 20 74 68 65 20 6f 74 68 65 72  ift in the other
e240: 20 64 69 72 65 63 74 69 6f 6e 20 2a 2f 0a 20 20   direction */.  
e250: 20 20 69 66 28 20 69 42 3c 30 20 29 7b 0a 20 20    if( iB<0 ){.  
e260: 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53      assert( OP_S
e270: 68 69 66 74 52 69 67 68 74 3d 3d 4f 50 5f 53 68  hiftRight==OP_Sh
e280: 69 66 74 4c 65 66 74 2b 31 20 29 3b 0a 20 20 20  iftLeft+1 );.   
e290: 20 20 20 6f 70 20 3d 20 32 2a 4f 50 5f 53 68 69     op = 2*OP_Shi
e2a0: 66 74 4c 65 66 74 20 2b 20 31 20 2d 20 6f 70 3b  ftLeft + 1 - op;
e2b0: 0a 20 20 20 20 20 20 69 42 20 3d 20 69 42 3e 28  .      iB = iB>(
e2c0: 2d 36 34 29 20 3f 20 2d 69 42 20 3a 20 36 34 3b  -64) ? -iB : 64;
e2d0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20  .    }..    if( 
e2e0: 69 42 3e 3d 36 34 20 29 7b 0a 20 20 20 20 20 20  iB>=64 ){.      
e2f0: 69 41 20 3d 20 28 69 41 3e 3d 30 20 7c 7c 20 6f  iA = (iA>=0 || o
e300: 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 29  p==OP_ShiftLeft)
e310: 20 3f 20 30 20 3a 20 2d 31 3b 0a 20 20 20 20 7d   ? 0 : -1;.    }
e320: 65 6c 73 65 7b 0a 20 20 20 20 20 20 6d 65 6d 63  else{.      memc
e330: 70 79 28 26 75 41 2c 20 26 69 41 2c 20 73 69 7a  py(&uA, &iA, siz
e340: 65 6f 66 28 75 41 29 29 3b 0a 20 20 20 20 20 20  eof(uA));.      
e350: 69 66 28 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74  if( op==OP_Shift
e360: 4c 65 66 74 20 29 7b 0a 20 20 20 20 20 20 20 20  Left ){.        
e370: 75 41 20 3c 3c 3d 20 69 42 3b 0a 20 20 20 20 20  uA <<= iB;.     
e380: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
e390: 75 41 20 3e 3e 3d 20 69 42 3b 0a 20 20 20 20 20  uA >>= iB;.     
e3a0: 20 20 20 2f 2a 20 53 69 67 6e 2d 65 78 74 65 6e     /* Sign-exten
e3b0: 64 20 6f 6e 20 61 20 72 69 67 68 74 20 73 68 69  d on a right shi
e3c0: 66 74 20 6f 66 20 61 20 6e 65 67 61 74 69 76 65  ft of a negative
e3d0: 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 20   number */.     
e3e0: 20 20 20 69 66 28 20 69 41 3c 30 20 29 20 75 41     if( iA<0 ) uA
e3f0: 20 7c 3d 20 28 28 28 28 75 36 34 29 30 78 66 66   |= ((((u64)0xff
e400: 66 66 66 66 66 66 29 3c 3c 33 32 29 7c 30 78 66  ffffff)<<32)|0xf
e410: 66 66 66 66 66 66 66 29 20 3c 3c 20 28 36 34 2d  fffffff) << (64-
e420: 69 42 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  iB);.      }.   
e430: 20 20 20 6d 65 6d 63 70 79 28 26 69 41 2c 20 26     memcpy(&iA, &
e440: 75 41 2c 20 73 69 7a 65 6f 66 28 69 41 29 29 3b  uA, sizeof(iA));
e450: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 4f 75  .    }.  }.  pOu
e460: 74 2d 3e 75 2e 69 20 3d 20 69 41 3b 0a 20 20 4d  t->u.i = iA;.  M
e470: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
e480: 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ut, MEM_Int);.  
e490: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
e4a0: 6f 64 65 3a 20 41 64 64 49 6d 6d 20 20 50 31 20  ode: AddImm  P1 
e4b0: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
e4c0: 70 73 69 73 3a 20 72 5b 50 31 5d 3d 72 5b 50 31  psis: r[P1]=r[P1
e4d0: 5d 2b 50 32 0a 2a 2a 20 0a 2a 2a 20 41 64 64 20  ]+P2.** .** Add 
e4e0: 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 50 32 20  the constant P2 
e4f0: 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  to the value in 
e500: 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20  register P1..** 
e510: 54 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c  The result is al
e520: 77 61 79 73 20 61 6e 20 69 6e 74 65 67 65 72 2e  ways an integer.
e530: 0a 2a 2a 0a 2a 2a 20 54 6f 20 66 6f 72 63 65 20  .**.** To force 
e540: 61 6e 79 20 72 65 67 69 73 74 65 72 20 74 6f 20  any register to 
e550: 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 6a  be an integer, j
e560: 75 73 74 20 61 64 64 20 30 2e 0a 2a 2f 0a 63 61  ust add 0..*/.ca
e570: 73 65 20 4f 50 5f 41 64 64 49 6d 6d 3a 20 7b 20  se OP_AddImm: { 
e580: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
e590: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
e5a0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
e5b0: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
e5c0: 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 73 71 6c  (p, pIn1);.  sql
e5d0: 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
e5e0: 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 70  erify(pIn1);.  p
e5f0: 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d  In1->u.i += pOp-
e600: 3e 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  >p2;.  break;.}.
e610: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 73 74  ./* Opcode: Must
e620: 42 65 49 6e 74 20 50 31 20 50 32 20 2a 20 2a 20  BeInt P1 P2 * * 
e630: 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f 72 63 65 20 74  *.** .** Force t
e640: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
e650: 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 61 6e  ster P1 to be an
e660: 20 69 6e 74 65 67 65 72 2e 20 20 49 66 20 74 68   integer.  If th
e670: 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31  e value.** in P1
e680: 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67   is not an integ
e690: 65 72 20 61 6e 64 20 63 61 6e 6e 6f 74 20 62 65  er and cannot be
e6a0: 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20   converted into 
e6b0: 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 77 69  an integer.** wi
e6c0: 74 68 6f 75 74 20 64 61 74 61 20 6c 6f 73 73 2c  thout data loss,
e6d0: 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64   then jump immed
e6e0: 69 61 74 65 6c 79 20 74 6f 20 50 32 2c 20 6f 72  iately to P2, or
e6f0: 20 69 66 20 50 32 3d 3d 30 0a 2a 2a 20 72 61 69   if P2==0.** rai
e700: 73 65 20 61 6e 20 53 51 4c 49 54 45 5f 4d 49 53  se an SQLITE_MIS
e710: 4d 41 54 43 48 20 65 78 63 65 70 74 69 6f 6e 2e  MATCH exception.
e720: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 73 74  .*/.case OP_Must
e730: 42 65 49 6e 74 3a 20 7b 20 20 20 20 20 20 20 20  BeInt: {        
e740: 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
e750: 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
e760: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69  em[pOp->p1];.  i
e770: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
e780: 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b  & MEM_Int)==0 ){
e790: 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69  .    applyAffini
e7a0: 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f  ty(pIn1, SQLITE_
e7b0: 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20 65 6e 63  AFF_NUMERIC, enc
e7c0: 6f 64 69 6e 67 29 3b 0a 20 20 20 20 56 64 62 65  oding);.    Vdbe
e7d0: 42 72 61 6e 63 68 54 61 6b 65 6e 28 28 70 49 6e  BranchTaken((pIn
e7e0: 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74  1->flags&MEM_Int
e7f0: 29 3d 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69 66  )==0, 2);.    if
e800: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
e810: 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a   MEM_Int)==0 ){.
e820: 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70        if( pOp->p
e830: 32 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  2==0 ){.        
e840: 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53 4d  rc = SQLITE_MISM
e850: 41 54 43 48 3b 0a 20 20 20 20 20 20 20 20 67 6f  ATCH;.        go
e860: 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
e870: 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 65 6c  error;.      }el
e880: 73 65 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f  se{.        goto
e890: 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20   jump_to_p2;.   
e8a0: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20     }.    }.  }. 
e8b0: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
e8c0: 70 49 6e 31 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pIn1, MEM_Int);.
e8d0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e    break;.}..#ifn
e8e0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
e8f0: 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f  FLOATING_POINT./
e900: 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c 41 66  * Opcode: RealAf
e910: 66 69 6e 69 74 79 20 50 31 20 2a 20 2a 20 2a 20  finity P1 * * * 
e920: 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 72 65 67 69 73  *.**.** If regis
e930: 74 65 72 20 50 31 20 68 6f 6c 64 73 20 61 6e 20  ter P1 holds an 
e940: 69 6e 74 65 67 65 72 20 63 6f 6e 76 65 72 74 20  integer convert 
e950: 69 74 20 74 6f 20 61 20 72 65 61 6c 20 76 61 6c  it to a real val
e960: 75 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  ue..**.** This o
e970: 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 77 68  pcode is used wh
e980: 65 6e 20 65 78 74 72 61 63 74 69 6e 67 20 69 6e  en extracting in
e990: 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 61  formation from a
e9a0: 20 63 6f 6c 75 6d 6e 20 74 68 61 74 0a 2a 2a 20   column that.** 
e9b0: 68 61 73 20 52 45 41 4c 20 61 66 66 69 6e 69 74  has REAL affinit
e9c0: 79 2e 20 20 53 75 63 68 20 63 6f 6c 75 6d 6e 20  y.  Such column 
e9d0: 76 61 6c 75 65 73 20 6d 61 79 20 73 74 69 6c 6c  values may still
e9e0: 20 62 65 20 73 74 6f 72 65 64 20 61 73 0a 2a 2a   be stored as.**
e9f0: 20 69 6e 74 65 67 65 72 73 2c 20 66 6f 72 20 73   integers, for s
ea00: 70 61 63 65 20 65 66 66 69 63 69 65 6e 63 79 2c  pace efficiency,
ea10: 20 62 75 74 20 61 66 74 65 72 20 65 78 74 72 61   but after extra
ea20: 63 74 69 6f 6e 20 77 65 20 77 61 6e 74 20 74 68  ction we want th
ea30: 65 6d 0a 2a 2a 20 74 6f 20 68 61 76 65 20 6f 6e  em.** to have on
ea40: 6c 79 20 61 20 72 65 61 6c 20 76 61 6c 75 65 2e  ly a real value.
ea50: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 6c  .*/.case OP_Real
ea60: 41 66 66 69 6e 69 74 79 3a 20 7b 20 20 20 20 20  Affinity: {     
ea70: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ea80: 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
ea90: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
eaa0: 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67    if( pIn1->flag
eab0: 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20  s & MEM_Int ){. 
eac0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
ead0: 6d 52 65 61 6c 69 66 79 28 70 49 6e 31 29 3b 0a  mRealify(pIn1);.
eae0: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
eaf0: 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
eb00: 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 0a  QLITE_OMIT_CAST.
eb10: 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 61 73 74 20  /* Opcode: Cast 
eb20: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
eb30: 79 6e 6f 70 73 69 73 3a 20 61 66 66 69 6e 69 74  ynopsis: affinit
eb40: 79 28 72 5b 50 31 5d 29 0a 2a 2a 0a 2a 2a 20 46  y(r[P1]).**.** F
eb50: 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20 69  orce the value i
eb60: 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f  n register P1 to
eb70: 20 62 65 20 74 68 65 20 74 79 70 65 20 64 65 66   be the type def
eb80: 69 6e 65 64 20 62 79 20 50 32 2e 0a 2a 2a 20 0a  ined by P2..** .
eb90: 2a 2a 20 3c 75 6c 3e 0a 2a 2a 20 3c 6c 69 20 76  ** <ul>.** <li v
eba0: 61 6c 75 65 3d 22 39 37 22 3e 20 54 45 58 54 0a  alue="97"> TEXT.
ebb0: 2a 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22 39 38  ** <li value="98
ebc0: 22 3e 20 42 4c 4f 42 0a 2a 2a 20 3c 6c 69 20 76  "> BLOB.** <li v
ebd0: 61 6c 75 65 3d 22 39 39 22 3e 20 4e 55 4d 45 52  alue="99"> NUMER
ebe0: 49 43 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65 3d  IC.** <li value=
ebf0: 22 31 30 30 22 3e 20 49 4e 54 45 47 45 52 0a 2a  "100"> INTEGER.*
ec00: 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22 31 30 31  * <li value="101
ec10: 22 3e 20 52 45 41 4c 0a 2a 2a 20 3c 2f 75 6c 3e  "> REAL.** </ul>
ec20: 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61  .**.** A NULL va
ec30: 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e 67  lue is not chang
ec40: 65 64 20 62 79 20 74 68 69 73 20 72 6f 75 74 69  ed by this routi
ec50: 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73 20  ne.  It remains 
ec60: 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
ec70: 5f 43 61 73 74 3a 20 7b 20 20 20 20 20 20 20 20  _Cast: {        
ec80: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31            /* in1
ec90: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
eca0: 70 2d 3e 70 32 3e 3d 53 51 4c 49 54 45 5f 41 46  p->p2>=SQLITE_AF
ecb0: 46 5f 42 4c 4f 42 20 26 26 20 70 4f 70 2d 3e 70  F_BLOB && pOp->p
ecc0: 32 3c 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52 45  2<=SQLITE_AFF_RE
ecd0: 41 4c 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  AL );.  testcase
ece0: 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54  ( pOp->p2==SQLIT
ecf0: 45 5f 41 46 46 5f 54 45 58 54 20 29 3b 0a 20 20  E_AFF_TEXT );.  
ed00: 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70  testcase( pOp->p
ed10: 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c  2==SQLITE_AFF_BL
ed20: 4f 42 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  OB );.  testcase
ed30: 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54  ( pOp->p2==SQLIT
ed40: 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 3b  E_AFF_NUMERIC );
ed50: 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70  .  testcase( pOp
ed60: 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46  ->p2==SQLITE_AFF
ed70: 5f 49 4e 54 45 47 45 52 20 29 3b 0a 20 20 74 65  _INTEGER );.  te
ed80: 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d  stcase( pOp->p2=
ed90: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c  =SQLITE_AFF_REAL
eda0: 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   );.  pIn1 = &aM
edb0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d  em[pOp->p1];.  m
edc0: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
edd0: 70 2c 20 70 49 6e 31 29 3b 0a 20 20 72 63 20 3d  p, pIn1);.  rc =
ede0: 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31   ExpandBlob(pIn1
edf0: 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
ee00: 4d 65 6d 43 61 73 74 28 70 49 6e 31 2c 20 70 4f  MemCast(pIn1, pO
ee10: 70 2d 3e 70 32 2c 20 65 6e 63 6f 64 69 6e 67 29  p->p2, encoding)
ee20: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
ee30: 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20  LOBSIZE(pIn1);. 
ee40: 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
ee50: 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
ee60: 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  r;.  break;.}.#e
ee70: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
ee80: 4d 49 54 5f 43 41 53 54 20 2a 2f 0a 0a 2f 2a 20  MIT_CAST */../* 
ee90: 4f 70 63 6f 64 65 3a 20 45 71 20 50 31 20 50 32  Opcode: Eq P1 P2
eea0: 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
eeb0: 6f 70 73 69 73 3a 20 49 46 20 72 5b 50 33 5d 3d  opsis: IF r[P3]=
eec0: 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d  =r[P1].**.** Com
eed0: 70 61 72 65 20 74 68 65 20 76 61 6c 75 65 73 20  pare the values 
eee0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61  in register P1 a
eef0: 6e 64 20 50 33 2e 20 20 49 66 20 72 65 67 28 50  nd P3.  If reg(P
ef00: 33 29 3d 3d 72 65 67 28 50 31 29 20 74 68 65 6e  3)==reg(P1) then
ef10: 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 61 64 64 72  .** jump to addr
ef20: 65 73 73 20 50 32 2e 20 20 4f 72 20 69 66 20 74  ess P2.  Or if t
ef30: 68 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50  he SQLITE_STOREP
ef40: 32 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e  2 flag is set in
ef50: 20 50 35 2c 20 74 68 65 6e 0a 2a 2a 20 73 74 6f   P5, then.** sto
ef60: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  re the result of
ef70: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 6e 20 72   comparison in r
ef80: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
ef90: 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46  * The SQLITE_AFF
efa0: 5f 4d 41 53 4b 20 70 6f 72 74 69 6f 6e 20 6f 66  _MASK portion of
efb0: 20 50 35 20 6d 75 73 74 20 62 65 20 61 6e 20 61   P5 must be an a
efc0: 66 66 69 6e 69 74 79 20 63 68 61 72 61 63 74 65  ffinity characte
efd0: 72 20 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46  r -.** SQLITE_AF
efe0: 46 5f 54 45 58 54 2c 20 53 51 4c 49 54 45 5f 41  F_TEXT, SQLITE_A
eff0: 46 46 5f 49 4e 54 45 47 45 52 2c 20 61 6e 64 20  FF_INTEGER, and 
f000: 73 6f 20 66 6f 72 74 68 2e 20 41 6e 20 61 74 74  so forth. An att
f010: 65 6d 70 74 20 69 73 20 6d 61 64 65 20 0a 2a 2a  empt is made .**
f020: 20 74 6f 20 63 6f 65 72 63 65 20 62 6f 74 68 20   to coerce both 
f030: 69 6e 70 75 74 73 20 61 63 63 6f 72 64 69 6e 67  inputs according
f040: 20 74 6f 20 74 68 69 73 20 61 66 66 69 6e 69 74   to this affinit
f050: 79 20 62 65 66 6f 72 65 20 74 68 65 0a 2a 2a 20  y before the.** 
f060: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 6d 61  comparison is ma
f070: 64 65 2e 20 49 66 20 74 68 65 20 53 51 4c 49 54  de. If the SQLIT
f080: 45 5f 41 46 46 5f 4d 41 53 4b 20 69 73 20 30 78  E_AFF_MASK is 0x
f090: 30 30 2c 20 74 68 65 6e 20 6e 75 6d 65 72 69 63  00, then numeric
f0a0: 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 69 73 20  .** affinity is 
f0b0: 75 73 65 64 2e 20 4e 6f 74 65 20 74 68 61 74 20  used. Note that 
f0c0: 74 68 65 20 61 66 66 69 6e 69 74 79 20 63 6f 6e  the affinity con
f0d0: 76 65 72 73 69 6f 6e 73 20 61 72 65 20 73 74 6f  versions are sto
f0e0: 72 65 64 0a 2a 2a 20 62 61 63 6b 20 69 6e 74 6f  red.** back into
f0f0: 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73   the input regis
f100: 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e 20  ters P1 and P3. 
f110: 20 53 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20   So this opcode 
f120: 63 61 6e 20 63 61 75 73 65 0a 2a 2a 20 70 65 72  can cause.** per
f130: 73 69 73 74 65 6e 74 20 63 68 61 6e 67 65 73 20  sistent changes 
f140: 74 6f 20 72 65 67 69 73 74 65 72 73 20 50 31 20  to registers P1 
f150: 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e  and P3..**.** On
f160: 63 65 20 61 6e 79 20 63 6f 6e 76 65 72 73 69 6f  ce any conversio
f170: 6e 73 20 68 61 76 65 20 74 61 6b 65 6e 20 70 6c  ns have taken pl
f180: 61 63 65 2c 20 61 6e 64 20 6e 65 69 74 68 65 72  ace, and neither
f190: 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20   value is NULL, 
f1a0: 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20 61  .** the values a
f1b0: 72 65 20 63 6f 6d 70 61 72 65 64 2e 20 49 66 20  re compared. If 
f1c0: 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65 20  both values are 
f1d0: 62 6c 6f 62 73 20 74 68 65 6e 20 6d 65 6d 63 6d  blobs then memcm
f1e0: 70 28 29 20 69 73 0a 2a 2a 20 75 73 65 64 20 74  p() is.** used t
f1f0: 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20  o determine the 
f200: 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63  results of the c
f210: 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 62  omparison.  If b
f220: 6f 74 68 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72  oth values.** ar
f230: 65 20 74 65 78 74 2c 20 74 68 65 6e 20 74 68 65  e text, then the
f240: 20 61 70 70 72 6f 70 72 69 61 74 65 20 63 6f 6c   appropriate col
f250: 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20  lating function 
f260: 73 70 65 63 69 66 69 65 64 20 69 6e 0a 2a 2a 20  specified in.** 
f270: 50 34 20 69 73 20 75 73 65 64 20 74 6f 20 64 6f  P4 is used to do
f280: 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e   the comparison.
f290: 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 73    If P4 is not s
f2a0: 70 65 63 69 66 69 65 64 20 74 68 65 6e 0a 2a 2a  pecified then.**
f2b0: 20 6d 65 6d 63 6d 70 28 29 20 69 73 20 75 73 65   memcmp() is use
f2c0: 64 20 74 6f 20 63 6f 6d 70 61 72 65 20 74 65 78  d to compare tex
f2d0: 74 20 73 74 72 69 6e 67 2e 20 20 49 66 20 62 6f  t string.  If bo
f2e0: 74 68 20 76 61 6c 75 65 73 20 61 72 65 0a 2a 2a  th values are.**
f2f0: 20 6e 75 6d 65 72 69 63 2c 20 74 68 65 6e 20 61   numeric, then a
f300: 20 6e 75 6d 65 72 69 63 20 63 6f 6d 70 61 72 69   numeric compari
f310: 73 6f 6e 20 69 73 20 75 73 65 64 2e 20 49 66 20  son is used. If 
f320: 74 68 65 20 74 77 6f 20 76 61 6c 75 65 73 0a 2a  the two values.*
f330: 2a 20 61 72 65 20 6f 66 20 64 69 66 66 65 72 65  * are of differe
f340: 6e 74 20 74 79 70 65 73 2c 20 74 68 65 6e 20 6e  nt types, then n
f350: 75 6d 62 65 72 73 20 61 72 65 20 63 6f 6e 73 69  umbers are consi
f360: 64 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e 0a  dered less than.
f370: 2a 2a 20 73 74 72 69 6e 67 73 20 61 6e 64 20 73  ** strings and s
f380: 74 72 69 6e 67 73 20 61 72 65 20 63 6f 6e 73 69  trings are consi
f390: 64 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e 20  dered less than 
f3a0: 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  blobs..**.** If 
f3b0: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73  SQLITE_NULLEQ is
f3c0: 20 73 65 74 20 69 6e 20 50 35 20 74 68 65 6e 20   set in P5 then 
f3d0: 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f  the result of co
f3e0: 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 6c 77 61  mparison is alwa
f3f0: 79 73 20 65 69 74 68 65 72 0a 2a 2a 20 74 72 75  ys either.** tru
f400: 65 20 6f 72 20 66 61 6c 73 65 20 61 6e 64 20 69  e or false and i
f410: 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20 49  s never NULL.  I
f420: 66 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20  f both operands 
f430: 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68  are NULL then th
f440: 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20 63  e result.** of c
f450: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 74 72 75  omparison is tru
f460: 65 2e 20 20 49 66 20 65 69 74 68 65 72 20 6f 70  e.  If either op
f470: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68  erand is NULL th
f480: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
f490: 20 66 61 6c 73 65 2e 0a 2a 2a 20 49 66 20 6e 65   false..** If ne
f4a0: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
f4b0: 20 4e 55 4c 4c 20 74 68 65 20 72 65 73 75 6c 74   NULL the result
f4c0: 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20   is the same as 
f4d0: 69 74 20 77 6f 75 6c 64 20 62 65 20 69 66 0a 2a  it would be if.*
f4e0: 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c  * the SQLITE_NUL
f4f0: 4c 45 51 20 66 6c 61 67 20 77 65 72 65 20 6f 6d  LEQ flag were om
f500: 69 74 74 65 64 20 66 72 6f 6d 20 50 35 2e 0a 2a  itted from P5..*
f510: 2a 0a 2a 2a 20 49 66 20 62 6f 74 68 20 53 51 4c  *.** If both SQL
f520: 49 54 45 5f 53 54 4f 52 45 50 32 20 61 6e 64 20  ITE_STOREP2 and 
f530: 53 51 4c 49 54 45 5f 4b 45 45 50 4e 55 4c 4c 20  SQLITE_KEEPNULL 
f540: 66 6c 61 67 73 20 61 72 65 20 73 65 74 20 74 68  flags are set th
f550: 65 6e 20 74 68 65 0a 2a 2a 20 63 6f 6e 74 65 6e  en the.** conten
f560: 74 20 6f 66 20 72 5b 50 32 5d 20 69 73 20 6f 6e  t of r[P2] is on
f570: 6c 79 20 63 68 61 6e 67 65 64 20 69 66 20 74 68  ly changed if th
f580: 65 20 6e 65 77 20 76 61 6c 75 65 20 69 73 20 4e  e new value is N
f590: 55 4c 4c 20 6f 72 20 30 20 28 66 61 6c 73 65 29  ULL or 0 (false)
f5a0: 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f  ..** In other wo
f5b0: 72 64 73 2c 20 61 20 70 72 69 6f 72 20 72 5b 50  rds, a prior r[P
f5c0: 32 5d 20 76 61 6c 75 65 20 77 69 6c 6c 20 6e 6f  2] value will no
f5d0: 74 20 62 65 20 6f 76 65 72 77 72 69 74 74 65 6e  t be overwritten
f5e0: 20 62 79 20 31 20 28 74 72 75 65 29 2e 0a 2a 2f   by 1 (true)..*/
f5f0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 20 50  ./* Opcode: Ne P
f600: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
f610: 20 53 79 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b   Synopsis: IF r[
f620: 50 33 5d 21 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  P3]!=r[P1].**.**
f630: 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74   This works just
f640: 20 6c 69 6b 65 20 74 68 65 20 45 71 20 6f 70 63   like the Eq opc
f650: 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20  ode except that 
f660: 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
f670: 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65 72  n if.** the oper
f680: 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65 72  ands in register
f690: 73 20 50 31 20 61 6e 64 20 50 33 20 61 72 65 20  s P1 and P3 are 
f6a0: 6e 6f 74 20 65 71 75 61 6c 2e 20 20 53 65 65 20  not equal.  See 
f6b0: 74 68 65 20 45 71 20 6f 70 63 6f 64 65 20 66 6f  the Eq opcode fo
f6c0: 72 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20  r.** additional 
f6d0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a  information..**.
f6e0: 2a 2a 20 49 66 20 62 6f 74 68 20 53 51 4c 49 54  ** If both SQLIT
f6f0: 45 5f 53 54 4f 52 45 50 32 20 61 6e 64 20 53 51  E_STOREP2 and SQ
f700: 4c 49 54 45 5f 4b 45 45 50 4e 55 4c 4c 20 66 6c  LITE_KEEPNULL fl
f710: 61 67 73 20 61 72 65 20 73 65 74 20 74 68 65 6e  ags are set then
f720: 20 74 68 65 0a 2a 2a 20 63 6f 6e 74 65 6e 74 20   the.** content 
f730: 6f 66 20 72 5b 50 32 5d 20 69 73 20 6f 6e 6c 79  of r[P2] is only
f740: 20 63 68 61 6e 67 65 64 20 69 66 20 74 68 65 20   changed if the 
f750: 6e 65 77 20 76 61 6c 75 65 20 69 73 20 4e 55 4c  new value is NUL
f760: 4c 20 6f 72 20 31 20 28 74 72 75 65 29 2e 0a 2a  L or 1 (true)..*
f770: 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  * In other words
f780: 2c 20 61 20 70 72 69 6f 72 20 72 5b 50 32 5d 20  , a prior r[P2] 
f790: 76 61 6c 75 65 20 77 69 6c 6c 20 6e 6f 74 20 62  value will not b
f7a0: 65 20 6f 76 65 72 77 72 69 74 74 65 6e 20 62 79  e overwritten by
f7b0: 20 30 20 28 66 61 6c 73 65 29 2e 0a 2a 2f 0a 2f   0 (false)..*/./
f7c0: 2a 20 4f 70 63 6f 64 65 3a 20 4c 74 20 50 31 20  * Opcode: Lt P1 
f7d0: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
f7e0: 79 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b 50 33  ynopsis: IF r[P3
f7f0: 5d 3c 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f  ]<r[P1].**.** Co
f800: 6d 70 61 72 65 20 74 68 65 20 76 61 6c 75 65 73  mpare the values
f810: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
f820: 61 6e 64 20 50 33 2e 20 20 49 66 20 72 65 67 28  and P3.  If reg(
f830: 50 33 29 3c 72 65 67 28 50 31 29 20 74 68 65 6e  P3)<reg(P1) then
f840: 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 61 64 64 72  .** jump to addr
f850: 65 73 73 20 50 32 2e 20 20 4f 72 20 69 66 20 74  ess P2.  Or if t
f860: 68 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50  he SQLITE_STOREP
f870: 32 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e  2 flag is set in
f880: 20 50 35 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65   P5 store.** the
f890: 20 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61   result of compa
f8a0: 72 69 73 6f 6e 20 28 30 20 6f 72 20 31 20 6f 72  rison (0 or 1 or
f8b0: 20 4e 55 4c 4c 29 20 69 6e 74 6f 20 72 65 67 69   NULL) into regi
f8c0: 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49  ster P2..**.** I
f8d0: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d  f the SQLITE_JUM
f8e0: 50 49 46 4e 55 4c 4c 20 62 69 74 20 6f 66 20 50  PIFNULL bit of P
f8f0: 35 20 69 73 20 73 65 74 20 61 6e 64 20 65 69 74  5 is set and eit
f900: 68 65 72 20 72 65 67 28 50 31 29 20 6f 72 0a 2a  her reg(P1) or.*
f910: 2a 20 72 65 67 28 50 33 29 20 69 73 20 4e 55 4c  * reg(P3) is NUL
f920: 4c 20 74 68 65 6e 20 74 68 65 20 74 61 6b 65 20  L then the take 
f930: 74 68 65 20 6a 75 6d 70 2e 20 20 49 66 20 74 68  the jump.  If th
f940: 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e  e SQLITE_JUMPIFN
f950: 55 4c 4c 20 0a 2a 2a 20 62 69 74 20 69 73 20 63  ULL .** bit is c
f960: 6c 65 61 72 20 74 68 65 6e 20 66 61 6c 6c 20 74  lear then fall t
f970: 68 72 6f 75 67 68 20 69 66 20 65 69 74 68 65 72  hrough if either
f980: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
f990: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ..**.** The SQLI
f9a0: 54 45 5f 41 46 46 5f 4d 41 53 4b 20 70 6f 72 74  TE_AFF_MASK port
f9b0: 69 6f 6e 20 6f 66 20 50 35 20 6d 75 73 74 20 62  ion of P5 must b
f9c0: 65 20 61 6e 20 61 66 66 69 6e 69 74 79 20 63 68  e an affinity ch
f9d0: 61 72 61 63 74 65 72 20 2d 0a 2a 2a 20 53 51 4c  aracter -.** SQL
f9e0: 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 53 51  ITE_AFF_TEXT, SQ
f9f0: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
fa00: 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20  , and so forth. 
fa10: 41 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61  An attempt is ma
fa20: 64 65 20 0a 2a 2a 20 74 6f 20 63 6f 65 72 63 65  de .** to coerce
fa30: 20 62 6f 74 68 20 69 6e 70 75 74 73 20 61 63 63   both inputs acc
fa40: 6f 72 64 69 6e 67 20 74 6f 20 74 68 69 73 20 61  ording to this a
fa50: 66 66 69 6e 69 74 79 20 62 65 66 6f 72 65 20 74  ffinity before t
fa60: 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e  he.** comparison
fa70: 20 69 73 20 6d 61 64 65 2e 20 49 66 20 74 68 65   is made. If the
fa80: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b   SQLITE_AFF_MASK
fa90: 20 69 73 20 30 78 30 30 2c 20 74 68 65 6e 20 6e   is 0x00, then n
faa0: 75 6d 65 72 69 63 0a 2a 2a 20 61 66 66 69 6e 69  umeric.** affini
fab0: 74 79 20 69 73 20 75 73 65 64 2e 20 4e 6f 74 65  ty is used. Note
fac0: 20 74 68 61 74 20 74 68 65 20 61 66 66 69 6e 69   that the affini
fad0: 74 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 61  ty conversions a
fae0: 72 65 20 73 74 6f 72 65 64 0a 2a 2a 20 62 61 63  re stored.** bac
faf0: 6b 20 69 6e 74 6f 20 74 68 65 20 69 6e 70 75 74  k into the input
fb00: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e   registers P1 an
fb10: 64 20 50 33 2e 20 20 53 6f 20 74 68 69 73 20 6f  d P3.  So this o
fb20: 70 63 6f 64 65 20 63 61 6e 20 63 61 75 73 65 0a  pcode can cause.
fb30: 2a 2a 20 70 65 72 73 69 73 74 65 6e 74 20 63 68  ** persistent ch
fb40: 61 6e 67 65 73 20 74 6f 20 72 65 67 69 73 74 65  anges to registe
fb50: 72 73 20 50 31 20 61 6e 64 20 50 33 2e 0a 2a 2a  rs P1 and P3..**
fb60: 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79 20 63 6f 6e  .** Once any con
fb70: 76 65 72 73 69 6f 6e 73 20 68 61 76 65 20 74 61  versions have ta
fb80: 6b 65 6e 20 70 6c 61 63 65 2c 20 61 6e 64 20 6e  ken place, and n
fb90: 65 69 74 68 65 72 20 76 61 6c 75 65 20 69 73 20  either value is 
fba0: 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20 76 61  NULL, .** the va
fbb0: 6c 75 65 73 20 61 72 65 20 63 6f 6d 70 61 72 65  lues are compare
fbc0: 64 2e 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65  d. If both value
fbd0: 73 20 61 72 65 20 62 6c 6f 62 73 20 74 68 65 6e  s are blobs then
fbe0: 20 6d 65 6d 63 6d 70 28 29 20 69 73 0a 2a 2a 20   memcmp() is.** 
fbf0: 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e  used to determin
fc00: 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  e the results of
fc10: 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e   the comparison.
fc20: 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73    If both values
fc30: 0a 2a 2a 20 61 72 65 20 74 65 78 74 2c 20 74 68  .** are text, th
fc40: 65 6e 20 74 68 65 20 61 70 70 72 6f 70 72 69 61  en the appropria
fc50: 74 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e  te collating fun
fc60: 63 74 69 6f 6e 20 73 70 65 63 69 66 69 65 64 20  ction specified 
fc70: 69 6e 0a 2a 2a 20 50 34 20 69 73 20 20 75 73 65  in.** P4 is  use
fc80: 64 20 74 6f 20 64 6f 20 74 68 65 20 63 6f 6d 70  d to do the comp
fc90: 61 72 69 73 6f 6e 2e 20 20 49 66 20 50 34 20 69  arison.  If P4 i
fca0: 73 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 20  s not specified 
fcb0: 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29  then.** memcmp()
fcc0: 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 70   is used to comp
fcd0: 61 72 65 20 74 65 78 74 20 73 74 72 69 6e 67 2e  are text string.
fce0: 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73    If both values
fcf0: 20 61 72 65 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c   are.** numeric,
fd00: 20 74 68 65 6e 20 61 20 6e 75 6d 65 72 69 63 20   then a numeric 
fd10: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 75 73  comparison is us
fd20: 65 64 2e 20 49 66 20 74 68 65 20 74 77 6f 20 76  ed. If the two v
fd30: 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 6f 66 20  alues.** are of 
fd40: 64 69 66 66 65 72 65 6e 74 20 74 79 70 65 73 2c  different types,
fd50: 20 74 68 65 6e 20 6e 75 6d 62 65 72 73 20 61 72   then numbers ar
fd60: 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73  e considered les
fd70: 73 20 74 68 61 6e 0a 2a 2a 20 73 74 72 69 6e 67  s than.** string
fd80: 73 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72  s and strings ar
fd90: 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73  e considered les
fda0: 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f  s than blobs..*/
fdb0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 65 20 50  ./* Opcode: Le P
fdc0: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
fdd0: 20 53 79 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b   Synopsis: IF r[
fde0: 50 33 5d 3c 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  P3]<=r[P1].**.**
fdf0: 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74   This works just
fe00: 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63   like the Lt opc
fe10: 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20  ode except that 
fe20: 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
fe30: 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74  n if.** the cont
fe40: 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
fe50: 50 33 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  P3 is less than 
fe60: 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
fe70: 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65  content of.** re
fe80: 67 69 73 74 65 72 20 50 31 2e 20 20 53 65 65 20  gister P1.  See 
fe90: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f  the Lt opcode fo
fea0: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
feb0: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20  ormation..*/./* 
fec0: 4f 70 63 6f 64 65 3a 20 47 74 20 50 31 20 50 32  Opcode: Gt P1 P2
fed0: 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
fee0: 6f 70 73 69 73 3a 20 49 46 20 72 5b 50 33 5d 3e  opsis: IF r[P3]>
fef0: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73  r[P1].**.** This
ff00: 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
ff10: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65   the Lt opcode e
ff20: 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a  xcept that the j
ff30: 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a  ump is taken if.
ff40: 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ** the content o
ff50: 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  f register P3 is
ff60: 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68   greater than th
ff70: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20  e content of.** 
ff80: 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 53 65  register P1.  Se
ff90: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
ffa0: 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
ffb0: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f  nformation..*/./
ffc0: 2a 20 4f 70 63 6f 64 65 3a 20 47 65 20 50 31 20  * Opcode: Ge P1 
ffd0: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
ffe0: 79 6e 6f 70 73 69 73 3a 20 49 46 20 72 5b 50 33  ynopsis: IF r[P3
fff0: 5d 3e 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54  ]>=r[P1].**.** T
10000 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  his works just l
10010 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  ike the Lt opcod
10020 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  e except that th
10030 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
10040 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e  if.** the conten
10050 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33  t of register P3
10060 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
10070 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
10080 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72   content of.** r
10090 65 67 69 73 74 65 72 20 50 31 2e 20 20 53 65 65  egister P1.  See
100a0 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66   the Lt opcode f
100b0 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
100c0 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  formation..*/.ca
100d0 73 65 20 4f 50 5f 45 71 3a 20 20 20 20 20 20 20  se OP_Eq:       
100e0 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
100f0 61 73 20 54 4b 5f 45 51 2c 20 6a 75 6d 70 2c 20  as TK_EQ, jump, 
10100 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  in1, in3 */.case
10110 20 4f 50 5f 4e 65 3a 20 20 20 20 20 20 20 20 20   OP_Ne:         
10120 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
10130 20 54 4b 5f 4e 45 2c 20 6a 75 6d 70 2c 20 69 6e   TK_NE, jump, in
10140 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  1, in3 */.case O
10150 50 5f 4c 74 3a 20 20 20 20 20 20 20 20 20 20 20  P_Lt:           
10160 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
10170 4b 5f 4c 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c  K_LT, jump, in1,
10180 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
10190 4c 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  Le:             
101a0 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
101b0 4c 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69  LE, jump, in1, i
101c0 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 74  n3 */.case OP_Gt
101d0 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
101e0 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 47 54  /* same as TK_GT
101f0 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  , jump, in1, in3
10200 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 65 3a 20   */.case OP_Ge: 
10210 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  {             /*
10220 20 73 61 6d 65 20 61 73 20 54 4b 5f 47 45 2c 20   same as TK_GE, 
10230 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
10240 2f 0a 20 20 69 6e 74 20 72 65 73 2c 20 72 65 73  /.  int res, res
10250 32 3b 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c  2;      /* Resul
10260 74 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69  t of the compari
10270 73 6f 6e 20 6f 66 20 70 49 6e 31 20 61 67 61 69  son of pIn1 agai
10280 6e 73 74 20 70 49 6e 33 20 2a 2f 0a 20 20 63 68  nst pIn3 */.  ch
10290 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20 20  ar affinity;    
102a0 20 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 74 6f    /* Affinity to
102b0 20 75 73 65 20 66 6f 72 20 63 6f 6d 70 61 72 69   use for compari
102c0 73 6f 6e 20 2a 2f 0a 20 20 75 31 36 20 66 6c 61  son */.  u16 fla
102d0 67 73 31 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  gs1;         /* 
102e0 43 6f 70 79 20 6f 66 20 69 6e 69 74 69 61 6c 20  Copy of initial 
102f0 76 61 6c 75 65 20 6f 66 20 70 49 6e 31 2d 3e 66  value of pIn1->f
10300 6c 61 67 73 20 2a 2f 0a 20 20 75 31 36 20 66 6c  lags */.  u16 fl
10310 61 67 73 33 3b 20 20 20 20 20 20 20 20 20 2f 2a  ags3;         /*
10320 20 43 6f 70 79 20 6f 66 20 69 6e 69 74 69 61 6c   Copy of initial
10330 20 76 61 6c 75 65 20 6f 66 20 70 49 6e 33 2d 3e   value of pIn3->
10340 66 6c 61 67 73 20 2a 2f 0a 0a 20 20 70 49 6e 31  flags */..  pIn1
10350 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
10360 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65  ];.  pIn3 = &aMe
10370 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c  m[pOp->p3];.  fl
10380 61 67 73 31 20 3d 20 70 49 6e 31 2d 3e 66 6c 61  ags1 = pIn1->fla
10390 67 73 3b 0a 20 20 66 6c 61 67 73 33 20 3d 20 70  gs;.  flags3 = p
103a0 49 6e 33 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66  In3->flags;.  if
103b0 28 20 28 66 6c 61 67 73 31 20 7c 20 66 6c 61 67  ( (flags1 | flag
103c0 73 33 29 26 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s3)&MEM_Null ){.
103d0 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 62 6f      /* One or bo
103e0 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20  th operands are 
103f0 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 69 66 28 20  NULL */.    if( 
10400 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45  pOp->p5 & SQLITE
10410 5f 4e 55 4c 4c 45 51 20 29 7b 0a 20 20 20 20 20  _NULLEQ ){.     
10420 20 2f 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e 55   /* If SQLITE_NU
10430 4c 4c 45 51 20 69 73 20 73 65 74 20 28 77 68 69  LLEQ is set (whi
10440 63 68 20 77 69 6c 6c 20 6f 6e 6c 79 20 68 61 70  ch will only hap
10450 70 65 6e 20 69 66 20 74 68 65 20 6f 70 65 72 61  pen if the opera
10460 74 6f 72 20 69 73 0a 20 20 20 20 20 20 2a 2a 20  tor is.      ** 
10470 4f 50 5f 45 71 20 6f 72 20 4f 50 5f 4e 65 29 20  OP_Eq or OP_Ne) 
10480 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75  then take the ju
10490 6d 70 20 6f 72 20 6e 6f 74 20 64 65 70 65 6e 64  mp or not depend
104a0 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 20  ing on whether. 
104b0 20 20 20 20 20 2a 2a 20 6f 72 20 6e 6f 74 20 62       ** or not b
104c0 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65  oth operands are
104d0 20 6e 75 6c 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a   null..      */.
104e0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
104f0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71  p->opcode==OP_Eq
10500 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
10510 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20 20 20 20 20  =OP_Ne );.      
10520 61 73 73 65 72 74 28 20 28 66 6c 61 67 73 31 20  assert( (flags1 
10530 26 20 4d 45 4d 5f 43 6c 65 61 72 65 64 29 3d 3d  & MEM_Cleared)==
10540 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  0 );.      asser
10550 74 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 53 51  t( (pOp->p5 & SQ
10560 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 29  LITE_JUMPIFNULL)
10570 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28  ==0 );.      if(
10580 20 28 66 6c 61 67 73 31 26 66 6c 61 67 73 33 26   (flags1&flags3&
10590 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 0a 20 20 20  MEM_Null)!=0.   
105a0 20 20 20 20 26 26 20 28 66 6c 61 67 73 33 26 4d      && (flags3&M
105b0 45 4d 5f 43 6c 65 61 72 65 64 29 3d 3d 30 0a 20  EM_Cleared)==0. 
105c0 20 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20       ){.        
105d0 72 65 73 20 3d 20 30 3b 20 20 2f 2a 20 4f 70 65  res = 0;  /* Ope
105e0 72 61 6e 64 73 20 61 72 65 20 65 71 75 61 6c 20  rands are equal 
105f0 2a 2f 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  */.      }else{.
10600 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 31 3b          res = 1;
10610 20 20 2f 2a 20 4f 70 65 72 61 6e 64 73 20 61 72    /* Operands ar
10620 65 20 6e 6f 74 20 65 71 75 61 6c 20 2a 2f 0a 20  e not equal */. 
10630 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
10640 7b 0a 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54  {.      /* SQLIT
10650 45 5f 4e 55 4c 4c 45 51 20 69 73 20 63 6c 65 61  E_NULLEQ is clea
10660 72 20 61 6e 64 20 61 74 20 6c 65 61 73 74 20 6f  r and at least o
10670 6e 65 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  ne operand is NU
10680 4c 4c 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65  LL,.      ** the
10690 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  n the result is 
106a0 61 6c 77 61 79 73 20 4e 55 4c 4c 2e 0a 20 20 20  always NULL..   
106b0 20 20 20 2a 2a 20 54 68 65 20 6a 75 6d 70 20 69     ** The jump i
106c0 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20 53  s taken if the S
106d0 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c  QLITE_JUMPIFNULL
106e0 20 62 69 74 20 69 73 20 73 65 74 2e 0a 20 20 20   bit is set..   
106f0 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20     */.      if( 
10700 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45  pOp->p5 & SQLITE
10710 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20 20  _STOREP2 ){.    
10720 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d      pOut = &aMem
10730 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20  [pOp->p2];.     
10740 20 20 20 69 43 6f 6d 70 61 72 65 20 3d 20 31 3b     iCompare = 1;
10750 20 20 20 20 2f 2a 20 4f 70 65 72 61 6e 64 73 20      /* Operands 
10760 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 20 2a 2f  are not equal */
10770 0a 20 20 20 20 20 20 20 20 6d 65 6d 41 62 6f 75  .        memAbou
10780 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75  tToChange(p, pOu
10790 74 29 3b 0a 20 20 20 20 20 20 20 20 4d 65 6d 53  t);.        MemS
107a0 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
107b0 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20   MEM_Null);.    
107c0 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
107d0 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74  CE(pOp->p2, pOut
107e0 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
107f0 20 20 20 20 20 20 20 20 56 64 62 65 42 72 61 6e          VdbeBran
10800 63 68 54 61 6b 65 6e 28 32 2c 33 29 3b 0a 20 20  chTaken(2,3);.  
10810 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70        if( pOp->p
10820 35 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  5 & SQLITE_JUMPI
10830 46 4e 55 4c 4c 20 29 7b 0a 20 20 20 20 20 20 20  FNULL ){.       
10840 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
10850 70 32 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  p2;.        }.  
10860 20 20 20 20 7d 0a 20 20 20 20 20 20 62 72 65 61      }.      brea
10870 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  k;.    }.  }else
10880 7b 0a 20 20 20 20 2f 2a 20 4e 65 69 74 68 65 72  {.    /* Neither
10890 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
108a0 2e 20 20 44 6f 20 61 20 63 6f 6d 70 61 72 69 73  .  Do a comparis
108b0 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61 66 66 69 6e  on. */.    affin
108c0 69 74 79 20 3d 20 70 4f 70 2d 3e 70 35 20 26 20  ity = pOp->p5 & 
108d0 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 3b  SQLITE_AFF_MASK;
108e0 0a 20 20 20 20 69 66 28 20 61 66 66 69 6e 69 74  .    if( affinit
108f0 79 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  y>=SQLITE_AFF_NU
10900 4d 45 52 49 43 20 29 7b 0a 20 20 20 20 20 20 69  MERIC ){.      i
10910 66 28 20 28 66 6c 61 67 73 31 20 7c 20 66 6c 61  f( (flags1 | fla
10920 67 73 33 29 26 4d 45 4d 5f 53 74 72 20 29 7b 0a  gs3)&MEM_Str ){.
10930 20 20 20 20 20 20 20 20 69 66 28 20 28 66 6c 61          if( (fla
10940 67 73 31 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d  gs1 & (MEM_Int|M
10950 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74 72 29  EM_Real|MEM_Str)
10960 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20  )==MEM_Str ){.  
10970 20 20 20 20 20 20 20 20 61 70 70 6c 79 4e 75 6d          applyNum
10980 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e  ericAffinity(pIn
10990 31 2c 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20  1,0);.          
109a0 74 65 73 74 63 61 73 65 28 20 66 6c 61 67 73 33  testcase( flags3
109b0 21 3d 70 49 6e 33 2d 3e 66 6c 61 67 73 20 29 3b  !=pIn3->flags );
109c0 20 2f 2a 20 50 6f 73 73 69 62 6c 65 20 69 66 20   /* Possible if 
109d0 70 49 6e 31 3d 3d 70 49 6e 33 20 2a 2f 0a 20 20  pIn1==pIn3 */.  
109e0 20 20 20 20 20 20 20 20 66 6c 61 67 73 33 20 3d          flags3 =
109f0 20 70 49 6e 33 2d 3e 66 6c 61 67 73 3b 0a 20 20   pIn3->flags;.  
10a00 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
10a10 69 66 28 20 28 66 6c 61 67 73 33 20 26 20 28 4d  if( (flags3 & (M
10a20 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c  EM_Int|MEM_Real|
10a30 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f 53  MEM_Str))==MEM_S
10a40 74 72 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  tr ){.          
10a50 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69  applyNumericAffi
10a60 6e 69 74 79 28 70 49 6e 33 2c 30 29 3b 0a 20 20  nity(pIn3,0);.  
10a70 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
10a80 20 20 20 20 20 20 2f 2a 20 48 61 6e 64 6c 65 20        /* Handle 
10a90 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20  the common case 
10aa0 6f 66 20 69 6e 74 65 67 65 72 20 63 6f 6d 70 61  of integer compa
10ab0 72 69 73 6f 6e 20 68 65 72 65 2c 20 61 73 20 61  rison here, as a
10ac0 6e 0a 20 20 20 20 20 20 2a 2a 20 6f 70 74 69 6d  n.      ** optim
10ad0 69 7a 61 74 69 6f 6e 2c 20 74 6f 20 61 76 6f 69  ization, to avoi
10ae0 64 20 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69  d a call to sqli
10af0 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 29 20  te3MemCompare() 
10b00 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28 70 49  */.      if( (pI
10b10 6e 31 2d 3e 66 6c 61 67 73 20 26 20 70 49 6e 33  n1->flags & pIn3
10b20 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
10b30 74 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  t)!=0 ){.       
10b40 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e 69 20 3e   if( pIn3->u.i >
10b50 20 70 49 6e 31 2d 3e 75 2e 69 20 29 7b 20 72 65   pIn1->u.i ){ re
10b60 73 20 3d 20 2b 31 3b 20 67 6f 74 6f 20 63 6f 6d  s = +1; goto com
10b70 70 61 72 65 5f 6f 70 3b 20 7d 0a 20 20 20 20 20  pare_op; }.     
10b80 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e 69     if( pIn3->u.i
10b90 20 3c 20 70 49 6e 31 2d 3e 75 2e 69 20 29 7b 20   < pIn1->u.i ){ 
10ba0 72 65 73 20 3d 20 2d 31 3b 20 67 6f 74 6f 20 63  res = -1; goto c
10bb0 6f 6d 70 61 72 65 5f 6f 70 3b 20 7d 0a 20 20 20  ompare_op; }.   
10bc0 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20       res = 0;.  
10bd0 20 20 20 20 20 20 67 6f 74 6f 20 63 6f 6d 70 61        goto compa
10be0 72 65 5f 6f 70 3b 0a 20 20 20 20 20 20 7d 0a 20  re_op;.      }. 
10bf0 20 20 20 7d 65 6c 73 65 20 69 66 28 20 61 66 66     }else if( aff
10c00 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46  inity==SQLITE_AF
10c10 46 5f 54 45 58 54 20 29 7b 0a 20 20 20 20 20 20  F_TEXT ){.      
10c20 69 66 28 20 28 66 6c 61 67 73 31 20 26 20 4d 45  if( (flags1 & ME
10c30 4d 5f 53 74 72 29 3d 3d 30 20 26 26 20 28 66 6c  M_Str)==0 && (fl
10c40 61 67 73 31 20 26 20 28 4d 45 4d 5f 49 6e 74 7c  ags1 & (MEM_Int|
10c50 4d 45 4d 5f 52 65 61 6c 29 29 21 3d 30 20 29 7b  MEM_Real))!=0 ){
10c60 0a 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73  .        testcas
10c70 65 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  e( pIn1->flags &
10c80 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20   MEM_Int );.    
10c90 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70 49      testcase( pI
10ca0 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
10cb0 52 65 61 6c 20 29 3b 0a 20 20 20 20 20 20 20 20  Real );.        
10cc0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74  sqlite3VdbeMemSt
10cd0 72 69 6e 67 69 66 79 28 70 49 6e 31 2c 20 65 6e  ringify(pIn1, en
10ce0 63 6f 64 69 6e 67 2c 20 31 29 3b 0a 20 20 20 20  coding, 1);.    
10cf0 20 20 20 20 74 65 73 74 63 61 73 65 28 20 28 66      testcase( (f
10d00 6c 61 67 73 31 26 4d 45 4d 5f 44 79 6e 29 20 21  lags1&MEM_Dyn) !
10d10 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d  = (pIn1->flags&M
10d20 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 20 20 20  EM_Dyn) );.     
10d30 20 20 20 66 6c 61 67 73 31 20 3d 20 28 70 49 6e     flags1 = (pIn
10d40 31 2d 3e 66 6c 61 67 73 20 26 20 7e 4d 45 4d 5f  1->flags & ~MEM_
10d50 54 79 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61  TypeMask) | (fla
10d60 67 73 31 20 26 20 4d 45 4d 5f 54 79 70 65 4d 61  gs1 & MEM_TypeMa
10d70 73 6b 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  sk);.        ass
10d80 65 72 74 28 20 70 49 6e 31 21 3d 70 49 6e 33 20  ert( pIn1!=pIn3 
10d90 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
10da0 20 69 66 28 20 28 66 6c 61 67 73 33 20 26 20 4d   if( (flags3 & M
10db0 45 4d 5f 53 74 72 29 3d 3d 30 20 26 26 20 28 66  EM_Str)==0 && (f
10dc0 6c 61 67 73 33 20 26 20 28 4d 45 4d 5f 49 6e 74  lags3 & (MEM_Int
10dd0 7c 4d 45 4d 5f 52 65 61 6c 29 29 21 3d 30 20 29  |MEM_Real))!=0 )
10de0 7b 0a 20 20 20 20 20 20 20 20 74 65 73 74 63 61  {.        testca
10df0 73 65 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20  se( pIn3->flags 
10e00 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20  & MEM_Int );.   
10e10 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70       testcase( p
10e20 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
10e30 5f 52 65 61 6c 20 29 3b 0a 20 20 20 20 20 20 20  _Real );.       
10e40 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
10e50 74 72 69 6e 67 69 66 79 28 70 49 6e 33 2c 20 65  tringify(pIn3, e
10e60 6e 63 6f 64 69 6e 67 2c 20 31 29 3b 0a 20 20 20  ncoding, 1);.   
10e70 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 28       testcase( (
10e80 66 6c 61 67 73 33 26 4d 45 4d 5f 44 79 6e 29 20  flags3&MEM_Dyn) 
10e90 21 3d 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 26  != (pIn3->flags&
10ea0 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 20 20  MEM_Dyn) );.    
10eb0 20 20 20 20 66 6c 61 67 73 33 20 3d 20 28 70 49      flags3 = (pI
10ec0 6e 33 2d 3e 66 6c 61 67 73 20 26 20 7e 4d 45 4d  n3->flags & ~MEM
10ed0 5f 54 79 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c  _TypeMask) | (fl
10ee0 61 67 73 33 20 26 20 4d 45 4d 5f 54 79 70 65 4d  ags3 & MEM_TypeM
10ef0 61 73 6b 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  ask);.      }.  
10f00 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20    }.    assert( 
10f10 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
10f20 43 4f 4c 4c 53 45 51 20 7c 7c 20 70 4f 70 2d 3e  COLLSEQ || pOp->
10f30 70 34 2e 70 43 6f 6c 6c 3d 3d 30 20 29 3b 0a 20  p4.pColl==0 );. 
10f40 20 20 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33     res = sqlite3
10f50 4d 65 6d 43 6f 6d 70 61 72 65 28 70 49 6e 33 2c  MemCompare(pIn3,
10f60 20 70 49 6e 31 2c 20 70 4f 70 2d 3e 70 34 2e 70   pIn1, pOp->p4.p
10f70 43 6f 6c 6c 29 3b 0a 20 20 7d 0a 63 6f 6d 70 61  Coll);.  }.compa
10f80 72 65 5f 6f 70 3a 0a 20 20 73 77 69 74 63 68 28  re_op:.  switch(
10f90 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a   pOp->opcode ){.
10fa0 20 20 20 20 63 61 73 65 20 4f 50 5f 45 71 3a 20      case OP_Eq: 
10fb0 20 20 20 72 65 73 32 20 3d 20 72 65 73 3d 3d 30     res2 = res==0
10fc0 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20  ;     break;.   
10fd0 20 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20   case OP_Ne:    
10fe0 72 65 73 32 20 3d 20 72 65 73 3b 20 20 20 20 20  res2 = res;     
10ff0 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
11000 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20 72 65 73  se OP_Lt:    res
11010 32 20 3d 20 72 65 73 3c 30 3b 20 20 20 20 20 20  2 = res<0;      
11020 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
11030 4f 50 5f 4c 65 3a 20 20 20 20 72 65 73 32 20 3d  OP_Le:    res2 =
11040 20 72 65 73 3c 3d 30 3b 20 20 20 20 20 62 72 65   res<=0;     bre
11050 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f  ak;.    case OP_
11060 47 74 3a 20 20 20 20 72 65 73 32 20 3d 20 72 65  Gt:    res2 = re
11070 73 3e 30 3b 20 20 20 20 20 20 62 72 65 61 6b 3b  s>0;      break;
11080 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20 20 20  .    default:   
11090 20 20 20 20 72 65 73 32 20 3d 20 72 65 73 3e 3d      res2 = res>=
110a0 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  0;     break;.  
110b0 7d 0a 0a 20 20 2f 2a 20 55 6e 64 6f 20 61 6e 79  }..  /* Undo any
110c0 20 63 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79   changes made by
110d0 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 29   applyAffinity()
110e0 20 74 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65   to the input re
110f0 67 69 73 74 65 72 73 2e 20 2a 2f 0a 20 20 61 73  gisters. */.  as
11100 73 65 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61  sert( (pIn1->fla
11110 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 20 3d 3d  gs & MEM_Dyn) ==
11120 20 28 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f 44   (flags1 & MEM_D
11130 79 6e 29 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66  yn) );.  pIn1->f
11140 6c 61 67 73 20 3d 20 66 6c 61 67 73 31 3b 0a 20  lags = flags1;. 
11150 20 61 73 73 65 72 74 28 20 28 70 49 6e 33 2d 3e   assert( (pIn3->
11160 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29  flags & MEM_Dyn)
11170 20 3d 3d 20 28 66 6c 61 67 73 33 20 26 20 4d 45   == (flags3 & ME
11180 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 70 49 6e 33  M_Dyn) );.  pIn3
11190 2d 3e 66 6c 61 67 73 20 3d 20 66 6c 61 67 73 33  ->flags = flags3
111a0 3b 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  ;..  if( pOp->p5
111b0 20 26 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50   & SQLITE_STOREP
111c0 32 20 29 7b 0a 20 20 20 20 70 4f 75 74 20 3d 20  2 ){.    pOut = 
111d0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
111e0 20 20 20 20 69 43 6f 6d 70 61 72 65 20 3d 20 72      iCompare = r
111f0 65 73 3b 0a 20 20 20 20 72 65 73 32 20 3d 20 72  es;.    res2 = r
11200 65 73 32 21 3d 30 3b 20 20 2f 2a 20 46 6f 72 20  es2!=0;  /* For 
11210 74 68 69 73 20 70 61 74 68 20 72 65 73 32 20 6d  this path res2 m
11220 75 73 74 20 62 65 20 65 78 61 63 74 6c 79 20 30  ust be exactly 0
11230 20 6f 72 20 31 20 2a 2f 0a 20 20 20 20 69 66 28   or 1 */.    if(
11240 20 28 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49   (pOp->p5 & SQLI
11250 54 45 5f 4b 45 45 50 4e 55 4c 4c 29 21 3d 30 20  TE_KEEPNULL)!=0 
11260 29 7b 0a 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ){.      /* The 
11270 4b 45 45 50 4e 55 4c 4c 20 66 6c 61 67 20 70 72  KEEPNULL flag pr
11280 65 76 65 6e 74 73 20 4f 50 5f 45 71 20 66 72 6f  events OP_Eq fro
11290 6d 20 6f 76 65 72 77 72 69 74 69 6e 67 20 61 20  m overwriting a 
112a0 4e 55 4c 4c 20 77 69 74 68 20 31 0a 20 20 20 20  NULL with 1.    
112b0 20 20 2a 2a 20 61 6e 64 20 70 72 65 76 65 6e 74    ** and prevent
112c0 73 20 4f 50 5f 4e 65 20 66 72 6f 6d 20 6f 76 65  s OP_Ne from ove
112d0 72 77 72 69 74 69 6e 67 20 4e 55 4c 4c 20 77 69  rwriting NULL wi
112e0 74 68 20 30 2e 20 20 54 68 69 73 20 66 6c 61 67  th 0.  This flag
112f0 0a 20 20 20 20 20 20 2a 2a 20 69 73 20 6f 6e 6c  .      ** is onl
11300 79 20 75 73 65 64 20 69 6e 20 63 6f 6e 74 65 78  y used in contex
11310 74 73 20 77 68 65 72 65 20 65 69 74 68 65 72 3a  ts where either:
11320 0a 20 20 20 20 20 20 2a 2a 20 20 20 28 31 29 20  .      **   (1) 
11330 6f 70 3d 3d 4f 50 5f 45 71 20 26 26 20 28 72 5b  op==OP_Eq && (r[
11340 50 32 5d 3d 3d 4e 55 4c 4c 20 7c 7c 20 72 5b 50  P2]==NULL || r[P
11350 32 5d 3d 3d 30 29 0a 20 20 20 20 20 20 2a 2a 20  2]==0).      ** 
11360 20 20 28 32 29 20 6f 70 3d 3d 4f 50 5f 4e 65 20    (2) op==OP_Ne 
11370 26 26 20 28 72 5b 50 32 5d 3d 3d 4e 55 4c 4c 20  && (r[P2]==NULL 
11380 7c 7c 20 72 5b 50 32 5d 3d 3d 31 29 0a 20 20 20  || r[P2]==1).   
11390 20 20 20 2a 2a 20 54 68 65 72 65 66 6f 72 65 20     ** Therefore 
113a0 69 74 20 69 73 20 6e 6f 74 20 6e 65 63 65 73 73  it is not necess
113b0 61 72 79 20 74 6f 20 63 68 65 63 6b 20 74 68 65  ary to check the
113c0 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 5b 50 32   content of r[P2
113d0 5d 20 66 6f 72 0a 20 20 20 20 20 20 2a 2a 20 4e  ] for.      ** N
113e0 55 4c 4c 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73  ULL. */.      as
113f0 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
11400 65 3d 3d 4f 50 5f 4e 65 20 7c 7c 20 70 4f 70 2d  e==OP_Ne || pOp-
11410 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 29  >opcode==OP_Eq )
11420 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
11430 72 65 73 32 3d 3d 30 20 7c 7c 20 72 65 73 32 3d  res2==0 || res2=
11440 3d 31 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74  =1 );.      test
11450 63 61 73 65 28 20 72 65 73 32 3d 3d 30 20 26 26  case( res2==0 &&
11460 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
11470 5f 45 71 20 29 3b 0a 20 20 20 20 20 20 74 65 73  _Eq );.      tes
11480 74 63 61 73 65 28 20 72 65 73 32 3d 3d 31 20 26  tcase( res2==1 &
11490 26 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  & pOp->opcode==O
114a0 50 5f 45 71 20 29 3b 0a 20 20 20 20 20 20 74 65  P_Eq );.      te
114b0 73 74 63 61 73 65 28 20 72 65 73 32 3d 3d 30 20  stcase( res2==0 
114c0 26 26 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  && pOp->opcode==
114d0 4f 50 5f 4e 65 20 29 3b 0a 20 20 20 20 20 20 74  OP_Ne );.      t
114e0 65 73 74 63 61 73 65 28 20 72 65 73 32 3d 3d 31  estcase( res2==1
114f0 20 26 26 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   && pOp->opcode=
11500 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20 20 20 20 20  =OP_Ne );.      
11510 69 66 28 20 28 70 4f 70 2d 3e 6f 70 63 6f 64 65  if( (pOp->opcode
11520 3d 3d 4f 50 5f 45 71 29 3d 3d 72 65 73 32 20 29  ==OP_Eq)==res2 )
11530 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
11540 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
11550 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20  ge(p, pOut);.   
11560 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
11570 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
11580 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
11590 72 65 73 32 3b 0a 20 20 20 20 52 45 47 49 53 54  res2;.    REGIST
115a0 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
115b0 2c 20 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65  , pOut);.  }else
115c0 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  {.    VdbeBranch
115d0 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 20 28 70  Taken(res!=0, (p
115e0 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f  Op->p5 & SQLITE_
115f0 4e 55 4c 4c 45 51 29 3f 32 3a 33 29 3b 0a 20 20  NULLEQ)?2:3);.  
11600 20 20 69 66 28 20 72 65 73 32 20 29 7b 0a 20 20    if( res2 ){.  
11610 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f      goto jump_to
11620 5f 70 32 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  _p2;.    }.  }. 
11630 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
11640 63 6f 64 65 3a 20 45 6c 73 65 4e 6f 74 45 71 20  code: ElseNotEq 
11650 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  * P2 * * *.**.**
11660 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6d 75 73   This opcode mus
11670 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f  t immediately fo
11680 6c 6c 6f 77 20 61 6e 20 4f 50 5f 4c 74 20 6f 72  llow an OP_Lt or
11690 20 4f 50 5f 47 74 20 63 6f 6d 70 61 72 69 73 6f   OP_Gt compariso
116a0 6e 20 6f 70 65 72 61 74 6f 72 2e 0a 2a 2a 20 49  n operator..** I
116b0 66 20 72 65 73 75 6c 74 20 6f 66 20 61 6e 20 4f  f result of an O
116c0 50 5f 45 71 20 63 6f 6d 70 61 72 69 73 6f 6e 20  P_Eq comparison 
116d0 6f 6e 20 74 68 65 20 73 61 6d 65 20 74 77 6f 20  on the same two 
116e0 6f 70 65 72 61 6e 64 73 0a 2a 2a 20 77 6f 75 6c  operands.** woul
116f0 64 20 68 61 76 65 20 62 65 20 4e 55 4c 4c 20 6f  d have be NULL o
11700 72 20 66 61 6c 73 65 20 28 30 29 2c 20 74 68 65  r false (0), the
11710 6e 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50  n then jump to P
11720 32 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 72 65  2. .** If the re
11730 73 75 6c 74 20 6f 66 20 61 6e 20 4f 50 5f 45 71  sult of an OP_Eq
11740 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 6e 20 74   comparison on t
11750 68 65 20 74 77 6f 20 70 72 65 76 69 6f 75 73 20  he two previous 
11760 6f 70 65 72 61 6e 64 73 0a 2a 2a 20 77 6f 75 6c  operands.** woul
11770 64 20 68 61 76 65 20 62 65 65 6e 20 74 72 75 65  d have been true
11780 20 28 31 29 2c 20 74 68 65 6e 20 66 61 6c 6c 20   (1), then fall 
11790 74 68 72 6f 75 67 68 2e 0a 2a 2f 0a 63 61 73 65  through..*/.case
117a0 20 4f 50 5f 45 6c 73 65 4e 6f 74 45 71 3a 20 7b   OP_ElseNotEq: {
117b0 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
117c0 73 20 54 4b 5f 45 53 43 41 50 45 2c 20 6a 75 6d  s TK_ESCAPE, jum
117d0 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  p */.  assert( p
117e0 4f 70 3e 61 4f 70 20 29 3b 0a 20 20 61 73 73 65  Op>aOp );.  asse
117f0 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f  rt( pOp[-1].opco
11800 64 65 3d 3d 4f 50 5f 4c 74 20 7c 7c 20 70 4f 70  de==OP_Lt || pOp
11810 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  [-1].opcode==OP_
11820 47 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Gt );.  assert( 
11830 70 4f 70 5b 2d 31 5d 2e 70 35 20 26 20 53 51 4c  pOp[-1].p5 & SQL
11840 49 54 45 5f 53 54 4f 52 45 50 32 20 29 3b 0a 20  ITE_STOREP2 );. 
11850 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
11860 28 69 43 6f 6d 70 61 72 65 21 3d 30 2c 20 32 29  (iCompare!=0, 2)
11870 3b 0a 20 20 69 66 28 20 69 43 6f 6d 70 61 72 65  ;.  if( iCompare
11880 21 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  !=0 ) goto jump_
11890 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a  to_p2;.  break;.
118a0 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  }.../* Opcode: P
118b0 65 72 6d 75 74 61 74 69 6f 6e 20 2a 20 2a 20 2a  ermutation * * *
118c0 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20   P4 *.**.** Set 
118d0 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20  the permutation 
118e0 75 73 65 64 20 62 79 20 74 68 65 20 4f 50 5f 43  used by the OP_C
118f0 6f 6d 70 61 72 65 20 6f 70 65 72 61 74 6f 72 20  ompare operator 
11900 74 6f 20 62 65 20 74 68 65 20 61 72 72 61 79 0a  to be the array.
11910 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72 73 20 69  ** of integers i
11920 6e 20 50 34 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  n P4..**.** The 
11930 70 65 72 6d 75 74 61 74 69 6f 6e 20 69 73 20 6f  permutation is o
11940 6e 6c 79 20 76 61 6c 69 64 20 75 6e 74 69 6c 20  nly valid until 
11950 74 68 65 20 6e 65 78 74 20 4f 50 5f 43 6f 6d 70  the next OP_Comp
11960 61 72 65 20 74 68 61 74 20 68 61 73 0a 2a 2a 20  are that has.** 
11970 74 68 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55  the OPFLAG_PERMU
11980 54 45 20 62 69 74 20 73 65 74 20 69 6e 20 50 35  TE bit set in P5
11990 2e 20 54 79 70 69 63 61 6c 6c 79 20 74 68 65 20  . Typically the 
119a0 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20 73  OP_Permutation s
119b0 68 6f 75 6c 64 20 0a 2a 2a 20 6f 63 63 75 72 20  hould .** occur 
119c0 69 6d 6d 65 64 69 61 74 65 6c 79 20 70 72 69 6f  immediately prio
119d0 72 20 74 6f 20 74 68 65 20 4f 50 5f 43 6f 6d 70  r to the OP_Comp
119e0 61 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66  are..**.** The f
119f0 69 72 73 74 20 69 6e 74 65 67 65 72 20 69 6e 20  irst integer in 
11a00 74 68 65 20 50 34 20 69 6e 74 65 67 65 72 20 61  the P4 integer a
11a10 72 72 61 79 20 69 73 20 74 68 65 20 6c 65 6e 67  rray is the leng
11a20 74 68 20 6f 66 20 74 68 65 20 61 72 72 61 79 0a  th of the array.
11a30 2a 2a 20 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20  ** and does not 
11a40 62 65 63 6f 6d 65 20 70 61 72 74 20 6f 66 20 74  become part of t
11a50 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 2e 0a  he permutation..
11a60 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 65 72 6d 75  */.case OP_Permu
11a70 74 61 74 69 6f 6e 3a 20 7b 0a 20 20 61 73 73 65  tation: {.  asse
11a80 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
11a90 3d 50 34 5f 49 4e 54 41 52 52 41 59 20 29 3b 0a  =P4_INTARRAY );.
11aa0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
11ab0 34 2e 61 69 20 29 3b 0a 20 20 61 50 65 72 6d 75  4.ai );.  aPermu
11ac0 74 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 20  te = pOp->p4.ai 
11ad0 2b 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  + 1;.  break;.}.
11ae0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6d 70  ./* Opcode: Comp
11af0 61 72 65 20 50 31 20 50 32 20 50 33 20 50 34 20  are P1 P2 P3 P4 
11b00 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
11b10 72 5b 50 31 40 50 33 5d 20 3c 2d 3e 20 72 5b 50  r[P1@P3] <-> r[P
11b20 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70  2@P3].**.** Comp
11b30 61 72 65 20 74 77 6f 20 76 65 63 74 6f 72 73 20  are two vectors 
11b40 6f 66 20 72 65 67 69 73 74 65 72 73 20 69 6e 20  of registers in 
11b50 72 65 67 28 50 31 29 2e 2e 72 65 67 28 50 31 2b  reg(P1)..reg(P1+
11b60 50 33 2d 31 29 20 28 63 61 6c 6c 20 74 68 69 73  P3-1) (call this
11b70 0a 2a 2a 20 76 65 63 74 6f 72 20 22 41 22 29 20  .** vector "A") 
11b80 61 6e 64 20 69 6e 20 72 65 67 28 50 32 29 2e 2e  and in reg(P2)..
11b90 72 65 67 28 50 32 2b 50 33 2d 31 29 20 28 22 42  reg(P2+P3-1) ("B
11ba0 22 29 2e 20 20 53 61 76 65 20 74 68 65 20 72 65  ").  Save the re
11bb0 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20 63  sult of.** the c
11bc0 6f 6d 70 61 72 69 73 6f 6e 20 66 6f 72 20 75 73  omparison for us
11bd0 65 20 62 79 20 74 68 65 20 6e 65 78 74 20 4f 50  e by the next OP
11be0 5f 4a 75 6d 70 20 69 6e 73 74 72 75 63 74 2e 0a  _Jump instruct..
11bf0 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20  **.** If P5 has 
11c00 74 68 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55  the OPFLAG_PERMU
11c10 54 45 20 62 69 74 20 73 65 74 2c 20 74 68 65 6e  TE bit set, then
11c20 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20 63 6f   the order of co
11c30 6d 70 61 72 69 73 6f 6e 20 69 73 0a 2a 2a 20 64  mparison is.** d
11c40 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65  etermined by the
11c50 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f 50 5f   most recent OP_
11c60 50 65 72 6d 75 74 61 74 69 6f 6e 20 6f 70 65 72  Permutation oper
11c70 61 74 6f 72 2e 20 20 49 66 20 74 68 65 0a 2a 2a  ator.  If the.**
11c80 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20   OPFLAG_PERMUTE 
11c90 62 69 74 20 69 73 20 63 6c 65 61 72 2c 20 74 68  bit is clear, th
11ca0 65 6e 20 72 65 67 69 73 74 65 72 20 61 72 65 20  en register are 
11cb0 63 6f 6d 70 61 72 65 64 20 69 6e 20 73 65 71 75  compared in sequ
11cc0 65 6e 74 69 61 6c 0a 2a 2a 20 6f 72 64 65 72 2e  ential.** order.
11cd0 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 4b  .**.** P4 is a K
11ce0 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65  eyInfo structure
11cf0 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 63 6f   that defines co
11d00 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
11d10 73 20 61 6e 64 20 73 6f 72 74 0a 2a 2a 20 6f 72  s and sort.** or
11d20 64 65 72 73 20 66 6f 72 20 74 68 65 20 63 6f 6d  ders for the com
11d30 70 61 72 69 73 6f 6e 2e 20 20 54 68 65 20 70 65  parison.  The pe
11d40 72 6d 75 74 61 74 69 6f 6e 20 61 70 70 6c 69 65  rmutation applie
11d50 73 20 74 6f 20 72 65 67 69 73 74 65 72 73 0a 2a  s to registers.*
11d60 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 20 4b 65 79  * only.  The Key
11d70 49 6e 66 6f 20 65 6c 65 6d 65 6e 74 73 20 61 72  Info elements ar
11d80 65 20 75 73 65 64 20 73 65 71 75 65 6e 74 69 61  e used sequentia
11d90 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63  lly..**.** The c
11da0 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 20 73  omparison is a s
11db0 6f 72 74 20 63 6f 6d 70 61 72 69 73 6f 6e 2c 20  ort comparison, 
11dc0 73 6f 20 4e 55 4c 4c 73 20 63 6f 6d 70 61 72 65  so NULLs compare
11dd0 20 65 71 75 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73   equal,.** NULLs
11de0 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 6e   are less than n
11df0 75 6d 62 65 72 73 2c 20 6e 75 6d 62 65 72 73 20  umbers, numbers 
11e00 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 73 74  are less than st
11e10 72 69 6e 67 73 2c 0a 2a 2a 20 61 6e 64 20 73 74  rings,.** and st
11e20 72 69 6e 67 73 20 61 72 65 20 6c 65 73 73 20 74  rings are less t
11e30 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 63 61  han blobs..*/.ca
11e40 73 65 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 7b  se OP_Compare: {
11e50 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20  .  int n;.  int 
11e60 69 3b 0a 20 20 69 6e 74 20 70 31 3b 0a 20 20 69  i;.  int p1;.  i
11e70 6e 74 20 70 32 3b 0a 20 20 63 6f 6e 73 74 20 4b  nt p2;.  const K
11e80 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f  eyInfo *pKeyInfo
11e90 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 43  ;.  int idx;.  C
11ea0 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b 20 20  ollSeq *pColl;  
11eb0 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73    /* Collating s
11ec0 65 71 75 65 6e 63 65 20 74 6f 20 75 73 65 20 6f  equence to use o
11ed0 6e 20 74 68 69 73 20 74 65 72 6d 20 2a 2f 0a 20  n this term */. 
11ee0 20 69 6e 74 20 62 52 65 76 3b 20 20 20 20 20 20   int bRev;      
11ef0 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20      /* True for 
11f00 44 45 53 43 45 4e 44 49 4e 47 20 73 6f 72 74 20  DESCENDING sort 
11f10 6f 72 64 65 72 20 2a 2f 0a 0a 20 20 69 66 28 20  order */..  if( 
11f20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
11f30 47 5f 50 45 52 4d 55 54 45 29 3d 3d 30 20 29 20  G_PERMUTE)==0 ) 
11f40 61 50 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20  aPermute = 0;.  
11f50 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70  n = pOp->p3;.  p
11f60 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70  KeyInfo = pOp->p
11f70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73  4.pKeyInfo;.  as
11f80 73 65 72 74 28 20 6e 3e 30 20 29 3b 0a 20 20 61  sert( n>0 );.  a
11f90 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 21  ssert( pKeyInfo!
11fa0 3d 30 20 29 3b 0a 20 20 70 31 20 3d 20 70 4f 70  =0 );.  p1 = pOp
11fb0 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70  ->p1;.  p2 = pOp
11fc0 2d 3e 70 32 3b 0a 23 69 66 20 53 51 4c 49 54 45  ->p2;.#if SQLITE
11fd0 5f 44 45 42 55 47 0a 20 20 69 66 28 20 61 50 65  _DEBUG.  if( aPe
11fe0 72 6d 75 74 65 20 29 7b 0a 20 20 20 20 69 6e 74  rmute ){.    int
11ff0 20 6b 2c 20 6d 78 20 3d 20 30 3b 0a 20 20 20 20   k, mx = 0;.    
12000 66 6f 72 28 6b 3d 30 3b 20 6b 3c 6e 3b 20 6b 2b  for(k=0; k<n; k+
12010 2b 29 20 69 66 28 20 61 50 65 72 6d 75 74 65 5b  +) if( aPermute[
12020 6b 5d 3e 6d 78 20 29 20 6d 78 20 3d 20 61 50 65  k]>mx ) mx = aPe
12030 72 6d 75 74 65 5b 6b 5d 3b 0a 20 20 20 20 61 73  rmute[k];.    as
12040 73 65 72 74 28 20 70 31 3e 30 20 26 26 20 70 31  sert( p1>0 && p1
12050 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  +mx<=(p->nMem+1 
12060 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20  - p->nCursor)+1 
12070 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
12080 32 3e 30 20 26 26 20 70 32 2b 6d 78 3c 3d 28 70  2>0 && p2+mx<=(p
12090 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
120a0 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 7d 65  ursor)+1 );.  }e
120b0 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
120c0 20 70 31 3e 30 20 26 26 20 70 31 2b 6e 3c 3d 28   p1>0 && p1+n<=(
120d0 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
120e0 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 20  Cursor)+1 );.   
120f0 20 61 73 73 65 72 74 28 20 70 32 3e 30 20 26 26   assert( p2>0 &&
12100 20 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b   p2+n<=(p->nMem+
12110 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b  1 - p->nCursor)+
12120 31 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20  1 );.  }.#endif 
12130 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20  /* SQLITE_DEBUG 
12140 2a 2f 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  */.  for(i=0; i<
12150 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 64 78  n; i++){.    idx
12160 20 3d 20 61 50 65 72 6d 75 74 65 20 3f 20 61 50   = aPermute ? aP
12170 65 72 6d 75 74 65 5b 69 5d 20 3a 20 69 3b 0a 20  ermute[i] : i;. 
12180 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
12190 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 31 2b 69  Valid(&aMem[p1+i
121a0 64 78 5d 29 20 29 3b 0a 20 20 20 20 61 73 73 65  dx]) );.    asse
121b0 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
121c0 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 20 29 3b  aMem[p2+idx]) );
121d0 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
121e0 41 43 45 28 70 31 2b 69 64 78 2c 20 26 61 4d 65  ACE(p1+idx, &aMe
121f0 6d 5b 70 31 2b 69 64 78 5d 29 3b 0a 20 20 20 20  m[p1+idx]);.    
12200 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
12210 32 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70 32 2b  2+idx, &aMem[p2+
12220 69 64 78 5d 29 3b 0a 20 20 20 20 61 73 73 65 72  idx]);.    asser
12230 74 28 20 69 3c 70 4b 65 79 49 6e 66 6f 2d 3e 6e  t( i<pKeyInfo->n
12240 46 69 65 6c 64 20 29 3b 0a 20 20 20 20 70 43 6f  Field );.    pCo
12250 6c 6c 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61  ll = pKeyInfo->a
12260 43 6f 6c 6c 5b 69 5d 3b 0a 20 20 20 20 62 52 65  Coll[i];.    bRe
12270 76 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 53  v = pKeyInfo->aS
12280 6f 72 74 4f 72 64 65 72 5b 69 5d 3b 0a 20 20 20  ortOrder[i];.   
12290 20 69 43 6f 6d 70 61 72 65 20 3d 20 73 71 6c 69   iCompare = sqli
122a0 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 26 61  te3MemCompare(&a
122b0 4d 65 6d 5b 70 31 2b 69 64 78 5d 2c 20 26 61 4d  Mem[p1+idx], &aM
122c0 65 6d 5b 70 32 2b 69 64 78 5d 2c 20 70 43 6f 6c  em[p2+idx], pCol
122d0 6c 29 3b 0a 20 20 20 20 69 66 28 20 69 43 6f 6d  l);.    if( iCom
122e0 70 61 72 65 20 29 7b 0a 20 20 20 20 20 20 69 66  pare ){.      if
122f0 28 20 62 52 65 76 20 29 20 69 43 6f 6d 70 61 72  ( bRev ) iCompar
12300 65 20 3d 20 2d 69 43 6f 6d 70 61 72 65 3b 0a 20  e = -iCompare;. 
12310 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
12320 7d 0a 20 20 7d 0a 20 20 61 50 65 72 6d 75 74 65  }.  }.  aPermute
12330 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = 0;.  break;.}
12340 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 75 6d  ../* Opcode: Jum
12350 70 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  p P1 P2 P3 * *.*
12360 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65  *.** Jump to the
12370 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 20   instruction at 
12380 61 64 64 72 65 73 73 20 50 31 2c 20 50 32 2c 20  address P1, P2, 
12390 6f 72 20 50 33 20 64 65 70 65 6e 64 69 6e 67 20  or P3 depending 
123a0 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 69 6e  on whether.** in
123b0 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
123c0 20 4f 50 5f 43 6f 6d 70 61 72 65 20 69 6e 73 74   OP_Compare inst
123d0 72 75 63 74 69 6f 6e 20 74 68 65 20 50 31 20 76  ruction the P1 v
123e0 65 63 74 6f 72 20 77 61 73 20 6c 65 73 73 20 74  ector was less t
123f0 68 61 6e 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 2c  han.** equal to,
12400 20 6f 72 20 67 72 65 61 74 65 72 20 74 68 61 6e   or greater than
12410 20 74 68 65 20 50 32 20 76 65 63 74 6f 72 2c 20   the P2 vector, 
12420 72 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f  respectively..*/
12430 0a 63 61 73 65 20 4f 50 5f 4a 75 6d 70 3a 20 7b  .case OP_Jump: {
12440 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12450 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 69 43  jump */.  if( iC
12460 6f 6d 70 61 72 65 3c 30 20 29 7b 0a 20 20 20 20  ompare<0 ){.    
12470 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
12480 30 2c 33 29 3b 20 70 4f 70 20 3d 20 26 61 4f 70  0,3); pOp = &aOp
12490 5b 70 4f 70 2d 3e 70 31 20 2d 20 31 5d 3b 0a 20  [pOp->p1 - 1];. 
124a0 20 7d 65 6c 73 65 20 69 66 28 20 69 43 6f 6d 70   }else if( iComp
124b0 61 72 65 3d 3d 30 20 29 7b 0a 20 20 20 20 56 64  are==0 ){.    Vd
124c0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c  beBranchTaken(1,
124d0 33 29 3b 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70  3); pOp = &aOp[p
124e0 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 7d  Op->p2 - 1];.  }
124f0 65 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72  else{.    VdbeBr
12500 61 6e 63 68 54 61 6b 65 6e 28 32 2c 33 29 3b 20  anchTaken(2,3); 
12510 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e  pOp = &aOp[pOp->
12520 70 33 20 2d 20 31 5d 3b 0a 20 20 7d 0a 20 20 62  p3 - 1];.  }.  b
12530 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
12540 64 65 3a 20 41 6e 64 20 50 31 20 50 32 20 50 33  de: And P1 P2 P3
12550 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
12560 3a 20 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20 26  : r[P3]=(r[P1] &
12570 26 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54  & r[P2]).**.** T
12580 61 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20  ake the logical 
12590 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65  AND of the value
125a0 73 20 69 6e 20 72 65 67 69 73 74 65 72 73 20 50  s in registers P
125b0 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20  1 and P2 and.** 
125c0 77 72 69 74 65 20 74 68 65 20 72 65 73 75 6c 74  write the result
125d0 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
125e0 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68  3..**.** If eith
125f0 65 72 20 50 31 20 6f 72 20 50 32 20 69 73 20 30  er P1 or P2 is 0
12600 20 28 66 61 6c 73 65 29 20 74 68 65 6e 20 74 68   (false) then th
12610 65 20 72 65 73 75 6c 74 20 69 73 20 30 20 65 76  e result is 0 ev
12620 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 74 68  en if.** the oth
12630 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
12640 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 74 72  .  A NULL and tr
12650 75 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 20  ue or two NULLs 
12660 67 69 76 65 0a 2a 2a 20 61 20 4e 55 4c 4c 20 6f  give.** a NULL o
12670 75 74 70 75 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  utput..*/./* Opc
12680 6f 64 65 3a 20 4f 72 20 50 31 20 50 32 20 50 33  ode: Or P1 P2 P3
12690 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
126a0 3a 20 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20 7c  : r[P3]=(r[P1] |
126b0 7c 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54  | r[P2]).**.** T
126c0 61 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20  ake the logical 
126d0 4f 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73  OR of the values
126e0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
126f0 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74  and P2 and.** st
12700 6f 72 65 20 74 68 65 20 61 6e 73 77 65 72 20 69  ore the answer i
12710 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
12720 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50  *.** If either P
12730 31 20 6f 72 20 50 32 20 69 73 20 6e 6f 6e 7a 65  1 or P2 is nonze
12740 72 6f 20 28 74 72 75 65 29 20 74 68 65 6e 20 74  ro (true) then t
12750 68 65 20 72 65 73 75 6c 74 20 69 73 20 31 20 28  he result is 1 (
12760 74 72 75 65 29 0a 2a 2a 20 65 76 65 6e 20 69 66  true).** even if
12770 20 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74   the other input
12780 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c   is NULL.  A NUL
12790 4c 20 61 6e 64 20 66 61 6c 73 65 20 6f 72 20 74  L and false or t
127a0 77 6f 20 4e 55 4c 4c 73 0a 2a 2a 20 67 69 76 65  wo NULLs.** give
127b0 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a   a NULL output..
127c0 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 6e 64 3a 20  */.case OP_And: 
127d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
127e0 73 61 6d 65 20 61 73 20 54 4b 5f 41 4e 44 2c 20  same as TK_AND, 
127f0 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
12800 2f 0a 63 61 73 65 20 4f 50 5f 4f 72 3a 20 7b 20  /.case OP_Or: { 
12810 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
12820 61 6d 65 20 61 73 20 54 4b 5f 4f 52 2c 20 69 6e  ame as TK_OR, in
12830 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
12840 20 20 69 6e 74 20 76 31 3b 20 20 20 20 2f 2a 20    int v1;    /* 
12850 4c 65 66 74 20 6f 70 65 72 61 6e 64 3a 20 20 30  Left operand:  0
12860 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45  ==FALSE, 1==TRUE
12870 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20  , 2==UNKNOWN or 
12880 4e 55 4c 4c 20 2a 2f 0a 20 20 69 6e 74 20 76 32  NULL */.  int v2
12890 3b 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 70  ;    /* Right op
128a0 65 72 61 6e 64 3a 20 30 3d 3d 46 41 4c 53 45 2c  erand: 0==FALSE,
128b0 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b   1==TRUE, 2==UNK
128c0 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a  NOWN or NULL */.
128d0 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
128e0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20  pOp->p1];.  if( 
128f0 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
12900 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76 31  M_Null ){.    v1
12910 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   = 2;.  }else{. 
12920 20 20 20 76 31 20 3d 20 73 71 6c 69 74 65 33 56     v1 = sqlite3V
12930 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31  dbeIntValue(pIn1
12940 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 70 49 6e 32  )!=0;.  }.  pIn2
12950 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
12960 5d 3b 0a 20 20 69 66 28 20 70 49 6e 32 2d 3e 66  ];.  if( pIn2->f
12970 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
12980 29 7b 0a 20 20 20 20 76 32 20 3d 20 32 3b 0a 20  ){.    v2 = 2;. 
12990 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76 32 20 3d   }else{.    v2 =
129a0 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
129b0 61 6c 75 65 28 70 49 6e 32 29 21 3d 30 3b 0a 20  alue(pIn2)!=0;. 
129c0 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70   }.  if( pOp->op
129d0 63 6f 64 65 3d 3d 4f 50 5f 41 6e 64 20 29 7b 0a  code==OP_And ){.
129e0 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
129f0 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 61   unsigned char a
12a00 6e 64 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30  nd_logic[] = { 0
12a10 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c 20 32 2c  , 0, 0, 0, 1, 2,
12a20 20 30 2c 20 32 2c 20 32 20 7d 3b 0a 20 20 20 20   0, 2, 2 };.    
12a30 76 31 20 3d 20 61 6e 64 5f 6c 6f 67 69 63 5b 76  v1 = and_logic[v
12a40 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 65 6c 73 65  1*3+v2];.  }else
12a50 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e  {.    static con
12a60 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
12a70 20 6f 72 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20   or_logic[] = { 
12a80 30 2c 20 31 2c 20 32 2c 20 31 2c 20 31 2c 20 31  0, 1, 2, 1, 1, 1
12a90 2c 20 32 2c 20 31 2c 20 32 20 7d 3b 0a 20 20 20  , 2, 1, 2 };.   
12aa0 20 76 31 20 3d 20 6f 72 5f 6c 6f 67 69 63 5b 76   v1 = or_logic[v
12ab0 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 0a 20 20 70  1*3+v2];.  }.  p
12ac0 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
12ad0 3e 70 33 5d 3b 0a 20 20 69 66 28 20 76 31 3d 3d  >p3];.  if( v1==
12ae0 32 20 29 7b 0a 20 20 20 20 4d 65 6d 53 65 74 54  2 ){.    MemSetT
12af0 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
12b00 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 7d 65 6c 73 65  M_Null);.  }else
12b10 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20  {.    pOut->u.i 
12b20 3d 20 76 31 3b 0a 20 20 20 20 4d 65 6d 53 65 74  = v1;.    MemSet
12b30 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
12b40 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20 20 62  EM_Int);.  }.  b
12b50 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
12b60 64 65 3a 20 4e 6f 74 20 50 31 20 50 32 20 2a 20  de: Not P1 P2 * 
12b70 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
12b80 20 72 5b 50 32 5d 3d 20 21 72 5b 50 31 5d 0a 2a   r[P2]= !r[P1].*
12b90 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74  *.** Interpret t
12ba0 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
12bb0 73 74 65 72 20 50 31 20 61 73 20 61 20 62 6f 6f  ster P1 as a boo
12bc0 6c 65 61 6e 20 76 61 6c 75 65 2e 20 20 53 74 6f  lean value.  Sto
12bd0 72 65 20 74 68 65 0a 2a 2a 20 62 6f 6f 6c 65 61  re the.** boolea
12be0 6e 20 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 20  n complement in 
12bf0 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66  register P2.  If
12c00 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
12c10 67 69 73 74 65 72 20 50 31 20 69 73 20 0a 2a 2a  gister P1 is .**
12c20 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 61 20 4e 55   NULL, then a NU
12c30 4c 4c 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  LL is stored in 
12c40 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  P2..*/.case OP_N
12c50 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ot: {           
12c60 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
12c70 54 4b 5f 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74  TK_NOT, in1, out
12c80 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  2 */.  pIn1 = &a
12c90 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
12ca0 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
12cb0 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33  ->p2];.  sqlite3
12cc0 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
12cd0 4f 75 74 29 3b 0a 20 20 69 66 28 20 28 70 49 6e  Out);.  if( (pIn
12ce0 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
12cf0 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70  ull)==0 ){.    p
12d00 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
12d10 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  _Int;.    pOut->
12d20 75 2e 69 20 3d 20 21 73 71 6c 69 74 65 33 56 64  u.i = !sqlite3Vd
12d30 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29  beIntValue(pIn1)
12d40 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
12d50 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74  ../* Opcode: Bit
12d60 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Not P1 P2 * * *.
12d70 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
12d80 31 5d 3d 20 7e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  1]= ~r[P1].**.**
12d90 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 63   Interpret the c
12da0 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
12db0 65 72 20 50 31 20 61 73 20 61 6e 20 69 6e 74 65  er P1 as an inte
12dc0 67 65 72 2e 20 20 53 74 6f 72 65 20 74 68 65 0a  ger.  Store the.
12dd0 2a 2a 20 6f 6e 65 73 2d 63 6f 6d 70 6c 65 6d 65  ** ones-compleme
12de0 6e 74 20 6f 66 20 74 68 65 20 50 31 20 76 61 6c  nt of the P1 val
12df0 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  ue into register
12e00 20 50 32 2e 20 20 49 66 20 50 31 20 68 6f 6c 64   P2.  If P1 hold
12e10 73 0a 2a 2a 20 61 20 4e 55 4c 4c 20 74 68 65 6e  s.** a NULL then
12e20 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e   store a NULL in
12e30 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
12e40 42 69 74 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20  BitNot: {       
12e50 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
12e60 20 54 4b 5f 42 49 54 4e 4f 54 2c 20 69 6e 31 2c   TK_BITNOT, in1,
12e70 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20   out2 */.  pIn1 
12e80 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
12e90 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
12ea0 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c  [pOp->p2];.  sql
12eb0 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
12ec0 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 69 66 28 20  ll(pOut);.  if( 
12ed0 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
12ee0 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20  EM_Null)==0 ){. 
12ef0 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d     pOut->flags =
12f00 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f   MEM_Int;.    pO
12f10 75 74 2d 3e 75 2e 69 20 3d 20 7e 73 71 6c 69 74  ut->u.i = ~sqlit
12f20 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
12f30 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  In1);.  }.  brea
12f40 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
12f50 20 4f 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20   Once P1 P2 * * 
12f60 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  *.**.** If the P
12f70 31 20 76 61 6c 75 65 20 69 73 20 65 71 75 61 6c  1 value is equal
12f80 20 74 6f 20 74 68 65 20 50 31 20 76 61 6c 75 65   to the P1 value
12f90 20 6f 6e 20 74 68 65 20 4f 50 5f 49 6e 69 74 20   on the OP_Init 
12fa0 6f 70 63 6f 64 65 20 61 74 0a 2a 2a 20 69 6e 73  opcode at.** ins
12fb0 74 72 75 63 74 69 6f 6e 20 30 2c 20 74 68 65 6e  truction 0, then
12fc0 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 49 66   jump to P2.  If
12fd0 20 74 68 65 20 74 77 6f 20 50 31 20 76 61 6c 75   the two P1 valu
12fe0 65 73 20 64 69 66 66 65 72 2c 20 74 68 65 6e 0a  es differ, then.
12ff0 2a 2a 20 73 65 74 20 74 68 65 20 50 31 20 76 61  ** set the P1 va
13000 6c 75 65 20 6f 6e 20 74 68 69 73 20 6f 70 63 6f  lue on this opco
13010 64 65 20 74 6f 20 65 71 75 61 6c 20 74 68 65 20  de to equal the 
13020 50 31 20 76 61 6c 75 65 20 6f 6e 20 74 68 65 20  P1 value on the 
13030 4f 50 5f 49 6e 69 74 0a 2a 2a 20 61 6e 64 20 66  OP_Init.** and f
13040 61 6c 6c 20 74 68 72 6f 75 67 68 2e 0a 2a 2f 0a  all through..*/.
13050 63 61 73 65 20 4f 50 5f 4f 6e 63 65 3a 20 7b 20  case OP_Once: { 
13060 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
13070 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ump */.  assert(
13080 20 70 2d 3e 61 4f 70 5b 30 5d 2e 6f 70 63 6f 64   p->aOp[0].opcod
13090 65 3d 3d 4f 50 5f 49 6e 69 74 20 29 3b 0a 20 20  e==OP_Init );.  
130a0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
130b0 70 2d 3e 61 4f 70 5b 30 5d 2e 70 31 3d 3d 70 4f  p->aOp[0].p1==pO
130c0 70 2d 3e 70 31 2c 20 32 29 3b 0a 20 20 69 66 28  p->p1, 2);.  if(
130d0 20 70 2d 3e 61 4f 70 5b 30 5d 2e 70 31 3d 3d 70   p->aOp[0].p1==p
130e0 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 67 6f  Op->p1 ){.    go
130f0 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
13100 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4f 70 2d   }else{.    pOp-
13110 3e 70 31 20 3d 20 70 2d 3e 61 4f 70 5b 30 5d 2e  >p1 = p->aOp[0].
13120 70 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  p1;.  }.  break;
13130 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
13140 66 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  f P1 P2 P3 * *.*
13150 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20  *.** Jump to P2 
13160 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  if the value in 
13170 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 74  register P1 is t
13180 72 75 65 2e 20 20 54 68 65 20 76 61 6c 75 65 0a  rue.  The value.
13190 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64  ** is considered
131a0 20 74 72 75 65 20 69 66 20 69 74 20 69 73 20 6e   true if it is n
131b0 75 6d 65 72 69 63 20 61 6e 64 20 6e 6f 6e 2d 7a  umeric and non-z
131c0 65 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c  ero.  If the val
131d0 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e  ue.** in P1 is N
131e0 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68  ULL then take th
131f0 65 20 6a 75 6d 70 20 69 66 20 61 6e 64 20 6f 6e  e jump if and on
13200 6c 79 20 69 66 20 50 33 20 69 73 20 6e 6f 6e 2d  ly if P3 is non-
13210 7a 65 72 6f 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  zero..*/./* Opco
13220 64 65 3a 20 49 66 4e 6f 74 20 50 31 20 50 32 20  de: IfNot P1 P2 
13230 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d  P3 * *.**.** Jum
13240 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76  p to P2 if the v
13250 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
13260 20 50 31 20 69 73 20 46 61 6c 73 65 2e 20 20 54   P1 is False.  T
13270 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63  he value.** is c
13280 6f 6e 73 69 64 65 72 65 64 20 66 61 6c 73 65 20  onsidered false 
13290 69 66 20 69 74 20 68 61 73 20 61 20 6e 75 6d 65  if it has a nume
132a0 72 69 63 20 76 61 6c 75 65 20 6f 66 20 7a 65 72  ric value of zer
132b0 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  o.  If the value
132c0 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c  .** in P1 is NUL
132d0 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20  L then take the 
132e0 6a 75 6d 70 20 69 66 20 61 6e 64 20 6f 6e 6c 79  jump if and only
132f0 20 69 66 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65   if P3 is non-ze
13300 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  ro..*/.case OP_I
13310 66 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  f:              
13320 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
13330 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74  */.case OP_IfNot
13340 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
13350 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  * jump, in1 */. 
13360 20 69 6e 74 20 63 3b 0a 20 20 70 49 6e 31 20 3d   int c;.  pIn1 =
13370 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
13380 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61  .  if( pIn1->fla
13390 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs & MEM_Null ){
133a0 0a 20 20 20 20 63 20 3d 20 70 4f 70 2d 3e 70 33  .    c = pOp->p3
133b0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 23 69 66 64 65  ;.  }else{.#ifde
133c0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
133d0 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20  OATING_POINT.   
133e0 20 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65   c = sqlite3Vdbe
133f0 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 21 3d  IntValue(pIn1)!=
13400 30 3b 0a 23 65 6c 73 65 0a 20 20 20 20 63 20 3d  0;.#else.    c =
13410 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c   sqlite3VdbeReal
13420 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 2e 30  Value(pIn1)!=0.0
13430 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28  ;.#endif.    if(
13440 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
13450 5f 49 66 4e 6f 74 20 29 20 63 20 3d 20 21 63 3b  _IfNot ) c = !c;
13460 0a 20 20 7d 0a 20 20 56 64 62 65 42 72 61 6e 63  .  }.  VdbeBranc
13470 68 54 61 6b 65 6e 28 63 21 3d 30 2c 20 32 29 3b  hTaken(c!=0, 2);
13480 0a 20 20 69 66 28 20 63 20 29 7b 0a 20 20 20 20  .  if( c ){.    
13490 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
134a0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
134b0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73 4e 75  ./* Opcode: IsNu
134c0 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ll P1 P2 * * *.*
134d0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72  * Synopsis: if r
134e0 5b 50 31 5d 3d 3d 4e 55 4c 4c 20 67 6f 74 6f 20  [P1]==NULL goto 
134f0 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f  P2.**.** Jump to
13500 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65   P2 if the value
13510 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
13520 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  is NULL..*/.case
13530 20 4f 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20 20 20   OP_IsNull: {   
13540 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
13550 20 61 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20 6a   as TK_ISNULL, j
13560 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
13570 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
13580 70 31 5d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  p1];.  VdbeBranc
13590 68 54 61 6b 65 6e 28 20 28 70 49 6e 31 2d 3e 66  hTaken( (pIn1->f
135a0 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
135b0 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 28  !=0, 2);.  if( (
135c0 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
135d0 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a 20 20  M_Null)!=0 ){.  
135e0 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
135f0 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  2;.  }.  break;.
13600 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f  }../* Opcode: No
13610 74 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20  tNull P1 P2 * * 
13620 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
13630 66 20 72 5b 50 31 5d 21 3d 4e 55 4c 4c 20 67 6f  f r[P1]!=NULL go
13640 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  to P2.**.** Jump
13650 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61   to P2 if the va
13660 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
13670 50 31 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20  P1 is not NULL. 
13680 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74   .*/.case OP_Not
13690 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20  Null: {         
136a0 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
136b0 5f 4e 4f 54 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20  _NOTNULL, jump, 
136c0 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
136d0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
136e0 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
136f0 6e 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  n( (pIn1->flags 
13700 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 2c 20  & MEM_Null)==0, 
13710 32 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  2);.  if( (pIn1-
13720 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
13730 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74  l)==0 ){.    got
13740 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
13750 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
13760 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e 20   Opcode: Column 
13770 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
13780 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
13790 5d 3d 50 58 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72  ]=PX.**.** Inter
137a0 70 72 65 74 20 74 68 65 20 64 61 74 61 20 74 68  pret the data th
137b0 61 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69  at cursor P1 poi
137c0 6e 74 73 20 74 6f 20 61 73 20 61 20 73 74 72 75  nts to as a stru
137d0 63 74 75 72 65 20 62 75 69 6c 74 20 75 73 69 6e  cture built usin
137e0 67 0a 2a 2a 20 74 68 65 20 4d 61 6b 65 52 65 63  g.** the MakeRec
137f0 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ord instruction.
13800 20 20 28 53 65 65 20 74 68 65 20 4d 61 6b 65 52    (See the MakeR
13810 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 66 6f 72  ecord opcode for
13820 20 61 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 69   additional.** i
13830 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
13840 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 74   the format of t
13850 68 65 20 64 61 74 61 2e 29 20 20 45 78 74 72 61  he data.)  Extra
13860 63 74 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c  ct the P2-th col
13870 75 6d 6e 0a 2a 2a 20 66 72 6f 6d 20 74 68 69 73  umn.** from this
13880 20 72 65 63 6f 72 64 2e 20 20 49 66 20 74 68 65   record.  If the
13890 72 65 20 61 72 65 20 6c 65 73 73 20 74 68 61 74  re are less that
138a0 20 28 50 32 2b 31 29 20 0a 2a 2a 20 76 61 6c 75   (P2+1) .** valu
138b0 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  es in the record
138c0 2c 20 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c  , extract a NULL
138d0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75  ..**.** The valu
138e0 65 20 65 78 74 72 61 63 74 65 64 20 69 73 20 73  e extracted is s
138f0 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
13900 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  r P3..**.** If t
13910 68 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69  he column contai
13920 6e 73 20 66 65 77 65 72 20 74 68 61 6e 20 50 32  ns fewer than P2
13930 20 66 69 65 6c 64 73 2c 20 74 68 65 6e 20 65 78   fields, then ex
13940 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 20 20 4f  tract a NULL.  O
13950 72 2c 0a 2a 2a 20 69 66 20 74 68 65 20 50 34 20  r,.** if the P4 
13960 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50 34  argument is a P4
13970 5f 4d 45 4d 20 75 73 65 20 74 68 65 20 76 61 6c  _MEM use the val
13980 75 65 20 6f 66 20 74 68 65 20 50 34 20 61 72 67  ue of the P4 arg
13990 75 6d 65 6e 74 20 61 73 0a 2a 2a 20 74 68 65 20  ument as.** the 
139a0 72 65 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 49 66  result..**.** If
139b0 20 74 68 65 20 4f 50 46 4c 41 47 5f 43 4c 45 41   the OPFLAG_CLEA
139c0 52 43 41 43 48 45 20 62 69 74 20 69 73 20 73 65  RCACHE bit is se
139d0 74 20 6f 6e 20 50 35 20 61 6e 64 20 50 31 20 69  t on P5 and P1 i
139e0 73 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  s a pseudo-table
139f0 20 63 75 72 73 6f 72 2c 0a 2a 2a 20 74 68 65 6e   cursor,.** then
13a00 20 74 68 65 20 63 61 63 68 65 20 6f 66 20 74 68   the cache of th
13a10 65 20 63 75 72 73 6f 72 20 69 73 20 72 65 73 65  e cursor is rese
13a20 74 20 70 72 69 6f 72 20 74 6f 20 65 78 74 72 61  t prior to extra
13a30 63 74 69 6e 67 20 74 68 65 20 63 6f 6c 75 6d 6e  cting the column
13a40 2e 0a 2a 2a 20 54 68 65 20 66 69 72 73 74 20 4f  ..** The first O
13a50 50 5f 43 6f 6c 75 6d 6e 20 61 67 61 69 6e 73 74  P_Column against
13a60 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20   a pseudo-table 
13a70 61 66 74 65 72 20 74 68 65 20 76 61 6c 75 65 20  after the value 
13a80 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a  of the content.*
13a90 2a 20 72 65 67 69 73 74 65 72 20 68 61 73 20 63  * register has c
13aa0 68 61 6e 67 65 64 20 73 68 6f 75 6c 64 20 68 61  hanged should ha
13ab0 76 65 20 74 68 69 73 20 62 69 74 20 73 65 74 2e  ve this bit set.
13ac0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
13ad0 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 61  FLAG_LENGTHARG a
13ae0 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46  nd OPFLAG_TYPEOF
13af0 41 52 47 20 62 69 74 73 20 61 72 65 20 73 65 74  ARG bits are set
13b00 20 6f 6e 20 50 35 20 77 68 65 6e 0a 2a 2a 20 74   on P5 when.** t
13b10 68 65 20 72 65 73 75 6c 74 20 69 73 20 67 75 61  he result is gua
13b20 72 61 6e 74 65 65 64 20 74 6f 20 6f 6e 6c 79 20  ranteed to only 
13b30 62 65 20 75 73 65 64 20 61 73 20 74 68 65 20 61  be used as the a
13b40 72 67 75 6d 65 6e 74 20 6f 66 20 61 20 6c 65 6e  rgument of a len
13b50 67 74 68 28 29 0a 2a 2a 20 6f 72 20 74 79 70 65  gth().** or type
13b60 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 2c 20 72  of() function, r
13b70 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 54 68  espectively.  Th
13b80 65 20 6c 6f 61 64 69 6e 67 20 6f 66 20 6c 61 72  e loading of lar
13b90 67 65 20 62 6c 6f 62 73 20 63 61 6e 20 62 65 0a  ge blobs can be.
13ba0 2a 2a 20 73 6b 69 70 70 65 64 20 66 6f 72 20 6c  ** skipped for l
13bb0 65 6e 67 74 68 28 29 20 61 6e 64 20 61 6c 6c 20  ength() and all 
13bc0 63 6f 6e 74 65 6e 74 20 6c 6f 61 64 69 6e 67 20  content loading 
13bd0 63 61 6e 20 62 65 20 73 6b 69 70 70 65 64 20 66  can be skipped f
13be0 6f 72 20 74 79 70 65 6f 66 28 29 2e 0a 2a 2f 0a  or typeof()..*/.
13bf0 63 61 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20  case OP_Column: 
13c00 7b 0a 20 20 69 6e 74 20 70 32 3b 20 20 20 20 20  {.  int p2;     
13c10 20 20 20 20 20 20 20 2f 2a 20 63 6f 6c 75 6d 6e         /* column
13c20 20 6e 75 6d 62 65 72 20 74 6f 20 72 65 74 72 69   number to retri
13c30 65 76 65 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  eve */.  VdbeCur
13c40 73 6f 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20 54  sor *pC;    /* T
13c50 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 2a  he VDBE cursor *
13c60 2f 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  /.  BtCursor *pC
13c70 72 73 72 3b 20 20 20 2f 2a 20 54 68 65 20 42 54  rsr;   /* The BT
13c80 72 65 65 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20  ree cursor */.  
13c90 75 33 32 20 2a 61 4f 66 66 73 65 74 3b 20 20 20  u32 *aOffset;   
13ca0 20 20 20 2f 2a 20 61 4f 66 66 73 65 74 5b 69 5d     /* aOffset[i]
13cb0 20 69 73 20 6f 66 66 73 65 74 20 74 6f 20 73 74   is offset to st
13cc0 61 72 74 20 6f 66 20 64 61 74 61 20 66 6f 72 20  art of data for 
13cd0 69 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  i-th column */. 
13ce0 20 69 6e 74 20 6c 65 6e 3b 20 20 20 20 20 20 20   int len;       
13cf0 20 20 20 20 2f 2a 20 54 68 65 20 6c 65 6e 67 74      /* The lengt
13d00 68 20 6f 66 20 74 68 65 20 73 65 72 69 61 6c 69  h of the seriali
13d10 7a 65 64 20 64 61 74 61 20 66 6f 72 20 74 68 65  zed data for the
13d20 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74   column */.  int
13d30 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   i;             
13d40 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20  /* Loop counter 
13d50 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b  */.  Mem *pDest;
13d60 20 20 20 20 20 20 20 20 2f 2a 20 57 68 65 72 65          /* Where
13d70 20 74 6f 20 77 72 69 74 65 20 74 68 65 20 65 78   to write the ex
13d80 74 72 61 63 74 65 64 20 76 61 6c 75 65 20 2a 2f  tracted value */
13d90 0a 20 20 4d 65 6d 20 73 4d 65 6d 3b 20 20 20 20  .  Mem sMem;    
13da0 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 73 74 6f        /* For sto
13db0 72 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20  ring the record 
13dc0 62 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f  being decoded */
13dd0 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 44 61  .  const u8 *zDa
13de0 74 61 3b 20 20 20 2f 2a 20 50 61 72 74 20 6f 66  ta;   /* Part of
13df0 20 74 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e   the record bein
13e00 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63  g decoded */.  c
13e10 6f 6e 73 74 20 75 38 20 2a 7a 48 64 72 3b 20 20  onst u8 *zHdr;  
13e20 20 20 2f 2a 20 4e 65 78 74 20 75 6e 70 61 72 73    /* Next unpars
13e30 65 64 20 62 79 74 65 20 6f 66 20 74 68 65 20 68  ed byte of the h
13e40 65 61 64 65 72 20 2a 2f 0a 20 20 63 6f 6e 73 74  eader */.  const
13e50 20 75 38 20 2a 7a 45 6e 64 48 64 72 3b 20 2f 2a   u8 *zEndHdr; /*
13e60 20 50 6f 69 6e 74 65 72 20 74 6f 20 66 69 72 73   Pointer to firs
13e70 74 20 62 79 74 65 20 61 66 74 65 72 20 74 68 65  t byte after the
13e80 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 75 33 32   header */.  u32
13e90 20 6f 66 66 73 65 74 3b 20 20 20 20 20 20 20 20   offset;        
13ea0 2f 2a 20 4f 66 66 73 65 74 20 69 6e 74 6f 20 74  /* Offset into t
13eb0 68 65 20 64 61 74 61 20 2a 2f 0a 20 20 75 36 34  he data */.  u64
13ec0 20 6f 66 66 73 65 74 36 34 3b 20 20 20 20 20 20   offset64;      
13ed0 2f 2a 20 36 34 2d 62 69 74 20 6f 66 66 73 65 74  /* 64-bit offset
13ee0 20 2a 2f 0a 20 20 75 33 32 20 61 76 61 69 6c 3b   */.  u32 avail;
13ef0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
13f00 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 61  er of bytes of a
13f10 76 61 69 6c 61 62 6c 65 20 64 61 74 61 20 2a 2f  vailable data */
13f20 0a 20 20 75 33 32 20 74 3b 20 20 20 20 20 20 20  .  u32 t;       
13f30 20 20 20 20 20 20 2f 2a 20 41 20 74 79 70 65 20        /* A type 
13f40 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20 72 65  code from the re
13f50 63 6f 72 64 20 68 65 61 64 65 72 20 2a 2f 0a 20  cord header */. 
13f60 20 4d 65 6d 20 2a 70 52 65 67 3b 20 20 20 20 20   Mem *pReg;     
13f70 20 20 20 20 2f 2a 20 50 73 65 75 64 6f 54 61 62      /* PseudoTab
13f80 6c 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65  le input registe
13f90 72 20 2a 2f 0a 0a 20 20 70 43 20 3d 20 70 2d 3e  r */..  pC = p->
13fa0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
13fb0 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a    p2 = pOp->p2;.
13fc0 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 63 75 72  .  /* If the cur
13fd0 73 6f 72 20 63 61 63 68 65 20 69 73 20 73 74 61  sor cache is sta
13fe0 6c 65 2c 20 62 72 69 6e 67 20 69 74 20 75 70 2d  le, bring it up-
13ff0 74 6f 2d 64 61 74 65 20 2a 2f 0a 20 20 72 63 20  to-date */.  rc 
14000 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  = sqlite3VdbeCur
14010 73 6f 72 4d 6f 76 65 74 6f 28 26 70 43 2c 20 26  sorMoveto(&pC, &
14020 70 32 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  p2);.  if( rc ) 
14030 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
14040 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 61 73 73 65  o_error;..  asse
14050 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26  rt( pOp->p3>0 &&
14060 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d   pOp->p3<=(p->nM
14070 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
14080 72 29 20 29 3b 0a 20 20 70 44 65 73 74 20 3d 20  r) );.  pDest = 
14090 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
140a0 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
140b0 67 65 28 70 2c 20 70 44 65 73 74 29 3b 0a 20 20  ge(p, pDest);.  
140c0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
140d0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
140e0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
140f0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
14100 20 61 73 73 65 72 74 28 20 70 32 3c 70 43 2d 3e   assert( p2<pC->
14110 6e 46 69 65 6c 64 20 29 3b 0a 20 20 61 4f 66 66  nField );.  aOff
14120 73 65 74 20 3d 20 70 43 2d 3e 61 4f 66 66 73 65  set = pC->aOffse
14130 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  t;.  assert( pC-
14140 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52 54 59  >eCurType!=CURTY
14150 50 45 5f 56 54 41 42 20 29 3b 0a 20 20 61 73 73  PE_VTAB );.  ass
14160 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
14170 65 21 3d 43 55 52 54 59 50 45 5f 50 53 45 55 44  e!=CURTYPE_PSEUD
14180 4f 20 7c 7c 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  O || pC->nullRow
14190 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
141a0 2d 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52 54  ->eCurType!=CURT
141b0 59 50 45 5f 53 4f 52 54 45 52 20 29 3b 0a 0a 20  YPE_SORTER );.. 
141c0 20 69 66 28 20 70 43 2d 3e 63 61 63 68 65 53 74   if( pC->cacheSt
141d0 61 74 75 73 21 3d 70 2d 3e 63 61 63 68 65 43 74  atus!=p->cacheCt
141e0 72 20 29 7b 20 20 20 20 20 20 20 20 20 20 20 20  r ){            
141f0 20 20 20 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49      /*OPTIMIZATI
14200 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20  ON-IF-FALSE*/.  
14210 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f    if( pC->nullRo
14220 77 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70  w ){.      if( p
14230 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
14240 54 59 50 45 5f 50 53 45 55 44 4f 20 29 7b 0a 20  TYPE_PSEUDO ){. 
14250 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
14260 43 2d 3e 75 63 2e 70 73 65 75 64 6f 54 61 62 6c  C->uc.pseudoTabl
14270 65 52 65 67 3e 30 20 29 3b 0a 20 20 20 20 20 20  eReg>0 );.      
14280 20 20 70 52 65 67 20 3d 20 26 61 4d 65 6d 5b 70    pReg = &aMem[p
14290 43 2d 3e 75 63 2e 70 73 65 75 64 6f 54 61 62 6c  C->uc.pseudoTabl
142a0 65 52 65 67 5d 3b 0a 20 20 20 20 20 20 20 20 61  eReg];.        a
142b0 73 73 65 72 74 28 20 70 52 65 67 2d 3e 66 6c 61  ssert( pReg->fla
142c0 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b  gs & MEM_Blob );
142d0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
142e0 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52 65 67   memIsValid(pReg
142f0 29 20 29 3b 0a 20 20 20 20 20 20 20 20 70 43 2d  ) );.        pC-
14300 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70  >payloadSize = p
14310 43 2d 3e 73 7a 52 6f 77 20 3d 20 61 76 61 69 6c  C->szRow = avail
14320 20 3d 20 70 52 65 67 2d 3e 6e 3b 0a 20 20 20 20   = pReg->n;.    
14330 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 28      pC->aRow = (
14340 75 38 2a 29 70 52 65 67 2d 3e 7a 3b 0a 20 20 20  u8*)pReg->z;.   
14350 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
14360 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
14370 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a  SetNull(pDest);.
14380 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f          goto op_
14390 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20  column_out;.    
143a0 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20    }.    }else{. 
143b0 20 20 20 20 20 70 43 72 73 72 20 3d 20 70 43 2d       pCrsr = pC-
143c0 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 20  >uc.pCursor;.   
143d0 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65     assert( pC->e
143e0 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
143f0 5f 42 54 52 45 45 20 29 3b 0a 20 20 20 20 20 20  _BTREE );.      
14400 61 73 73 65 72 74 28 20 70 43 72 73 72 20 29 3b  assert( pCrsr );
14410 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73  .      assert( s
14420 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
14430 72 49 73 56 61 6c 69 64 28 70 43 72 73 72 29 20  rIsValid(pCrsr) 
14440 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e 70 61 79  );.      pC->pay
14450 6c 6f 61 64 53 69 7a 65 20 3d 20 73 71 6c 69 74  loadSize = sqlit
14460 65 33 42 74 72 65 65 50 61 79 6c 6f 61 64 53 69  e3BtreePayloadSi
14470 7a 65 28 70 43 72 73 72 29 3b 0a 20 20 20 20 20  ze(pCrsr);.     
14480 20 70 43 2d 3e 61 52 6f 77 20 3d 20 73 71 6c 69   pC->aRow = sqli
14490 74 65 33 42 74 72 65 65 50 61 79 6c 6f 61 64 46  te3BtreePayloadF
144a0 65 74 63 68 28 70 43 72 73 72 2c 20 26 61 76 61  etch(pCrsr, &ava
144b0 69 6c 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  il);.      asser
144c0 74 28 20 61 76 61 69 6c 3c 3d 36 35 35 33 36 20  t( avail<=65536 
144d0 29 3b 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 70  );  /* Maximum p
144e0 61 67 65 20 73 69 7a 65 20 69 73 20 36 34 4b 69  age size is 64Ki
144f0 42 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70  B */.      if( p
14500 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3c  C->payloadSize <
14510 3d 20 28 75 33 32 29 61 76 61 69 6c 20 29 7b 0a  = (u32)avail ){.
14520 20 20 20 20 20 20 20 20 70 43 2d 3e 73 7a 52 6f          pC->szRo
14530 77 20 3d 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53  w = pC->payloadS
14540 69 7a 65 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  ize;.      }else
14550 20 69 66 28 20 70 43 2d 3e 70 61 79 6c 6f 61 64   if( pC->payload
14560 53 69 7a 65 20 3e 20 28 75 33 32 29 64 62 2d 3e  Size > (u32)db->
14570 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
14580 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
14590 20 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f         goto too_
145a0 62 69 67 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  big;.      }else
145b0 7b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 73 7a  {.        pC->sz
145c0 52 6f 77 20 3d 20 61 76 61 69 6c 3b 0a 20 20 20  Row = avail;.   
145d0 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70     }.    }.    p
145e0 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
145f0 20 70 2d 3e 63 61 63 68 65 43 74 72 3b 0a 20 20   p->cacheCtr;.  
14600 20 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74    pC->iHdrOffset
14610 20 3d 20 67 65 74 56 61 72 69 6e 74 33 32 28 70   = getVarint32(p
14620 43 2d 3e 61 52 6f 77 2c 20 6f 66 66 73 65 74 29  C->aRow, offset)
14630 3b 0a 20 20 20 20 70 43 2d 3e 6e 48 64 72 50 61  ;.    pC->nHdrPa
14640 72 73 65 64 20 3d 20 30 3b 0a 20 20 20 20 61 4f  rsed = 0;.    aO
14650 66 66 73 65 74 5b 30 5d 20 3d 20 6f 66 66 73 65  ffset[0] = offse
14660 74 3b 0a 0a 0a 20 20 20 20 69 66 28 20 61 76 61  t;...    if( ava
14670 69 6c 3c 6f 66 66 73 65 74 20 29 7b 20 20 20 20  il<offset ){    
14680 20 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e    /*OPTIMIZATION
14690 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20  -IF-FALSE*/.    
146a0 20 20 2f 2a 20 70 43 2d 3e 61 52 6f 77 20 64 6f    /* pC->aRow do
146b0 65 73 20 6e 6f 74 20 68 61 76 65 20 74 6f 20 68  es not have to h
146c0 6f 6c 64 20 74 68 65 20 65 6e 74 69 72 65 20 72  old the entire r
146d0 6f 77 2c 20 62 75 74 20 69 74 20 64 6f 65 73 20  ow, but it does 
146e0 61 74 20 6c 65 61 73 74 0a 20 20 20 20 20 20 2a  at least.      *
146f0 2a 20 6e 65 65 64 20 74 6f 20 63 6f 76 65 72 20  * need to cover 
14700 74 68 65 20 68 65 61 64 65 72 20 6f 66 20 74 68  the header of th
14710 65 20 72 65 63 6f 72 64 2e 20 20 49 66 20 70 43  e record.  If pC
14720 2d 3e 61 52 6f 77 20 64 6f 65 73 20 6e 6f 74 20  ->aRow does not 
14730 63 6f 6e 74 61 69 6e 0a 20 20 20 20 20 20 2a 2a  contain.      **
14740 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 68 65   the complete he
14750 61 64 65 72 2c 20 74 68 65 6e 20 73 65 74 20 69  ader, then set i
14760 74 20 74 6f 20 7a 65 72 6f 2c 20 66 6f 72 63 69  t to zero, forci
14770 6e 67 20 74 68 65 20 68 65 61 64 65 72 20 74 6f  ng the header to
14780 20 62 65 0a 20 20 20 20 20 20 2a 2a 20 64 79 6e   be.      ** dyn
14790 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74  amically allocat
147a0 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20 70 43 2d  ed. */.      pC-
147b0 3e 61 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 20  >aRow = 0;.     
147c0 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 30 3b 0a   pC->szRow = 0;.
147d0 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73  .      /* Make s
147e0 75 72 65 20 61 20 63 6f 72 72 75 70 74 20 64 61  ure a corrupt da
147f0 74 61 62 61 73 65 20 68 61 73 20 6e 6f 74 20 67  tabase has not g
14800 69 76 65 6e 20 75 73 20 61 6e 20 6f 76 65 72 73  iven us an overs
14810 69 7a 65 20 68 65 61 64 65 72 2e 0a 20 20 20 20  ize header..    
14820 20 20 2a 2a 20 44 6f 20 74 68 69 73 20 6e 6f 77    ** Do this now
14830 20 74 6f 20 61 76 6f 69 64 20 61 6e 20 6f 76 65   to avoid an ove
14840 72 73 69 7a 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  rsize memory all
14850 6f 63 61 74 69 6f 6e 2e 0a 20 20 20 20 20 20 2a  ocation..      *
14860 2a 0a 20 20 20 20 20 20 2a 2a 20 54 79 70 65 20  *.      ** Type 
14870 65 6e 74 72 69 65 73 20 63 61 6e 20 62 65 20 62  entries can be b
14880 65 74 77 65 65 6e 20 31 20 61 6e 64 20 35 20 62  etween 1 and 5 b
14890 79 74 65 73 20 65 61 63 68 2e 20 20 42 75 74 20  ytes each.  But 
148a0 34 20 61 6e 64 20 35 20 62 79 74 65 0a 20 20 20  4 and 5 byte.   
148b0 20 20 20 2a 2a 20 74 79 70 65 73 20 75 73 65 20     ** types use 
148c0 73 6f 20 6d 75 63 68 20 64 61 74 61 20 73 70 61  so much data spa
148d0 63 65 20 74 68 61 74 20 74 68 65 72 65 20 63 61  ce that there ca
148e0 6e 20 6f 6e 6c 79 20 62 65 20 34 30 39 36 20 61  n only be 4096 a
148f0 6e 64 20 33 32 20 6f 66 0a 20 20 20 20 20 20 2a  nd 32 of.      *
14900 2a 20 74 68 65 6d 2c 20 72 65 73 70 65 63 74 69  * them, respecti
14910 76 65 6c 79 2e 20 20 53 6f 20 74 68 65 20 6d 61  vely.  So the ma
14920 78 69 6d 75 6d 20 68 65 61 64 65 72 20 6c 65 6e  ximum header len
14930 67 74 68 20 72 65 73 75 6c 74 73 20 66 72 6f 6d  gth results from
14940 20 61 0a 20 20 20 20 20 20 2a 2a 20 33 2d 62 79   a.      ** 3-by
14950 74 65 20 74 79 70 65 20 66 6f 72 20 65 61 63 68  te type for each
14960 20 6f 66 20 74 68 65 20 6d 61 78 69 6d 75 6d 20   of the maximum 
14970 6f 66 20 33 32 37 36 38 20 63 6f 6c 75 6d 6e 73  of 32768 columns
14980 20 70 6c 75 73 20 74 68 72 65 65 0a 20 20 20 20   plus three.    
14990 20 20 2a 2a 20 65 78 74 72 61 20 62 79 74 65 73    ** extra bytes
149a0 20 66 6f 72 20 74 68 65 20 68 65 61 64 65 72 20   for the header 
149b0 6c 65 6e 67 74 68 20 69 74 73 65 6c 66 2e 20 20  length itself.  
149c0 33 32 37 36 38 2a 33 20 2b 20 33 20 3d 20 39 38  32768*3 + 3 = 98
149d0 33 30 37 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  307..      */.  
149e0 20 20 20 20 69 66 28 20 6f 66 66 73 65 74 20 3e      if( offset >
149f0 20 39 38 33 30 37 20 7c 7c 20 6f 66 66 73 65 74   98307 || offset
14a00 20 3e 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69   > pC->payloadSi
14a10 7a 65 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  ze ){.        rc
14a20 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50   = SQLITE_CORRUP
14a30 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 20 20  T_BKPT;.        
14a40 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
14a50 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  o_error;.      }
14a60 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 6f  .    }else if( o
14a70 66 66 73 65 74 3e 30 20 29 7b 20 2f 2a 4f 50 54  ffset>0 ){ /*OPT
14a80 49 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d 54 52 55  IMIZATION-IF-TRU
14a90 45 2a 2f 0a 20 20 20 20 20 20 2f 2a 20 54 68 65  E*/.      /* The
14aa0 20 66 6f 6c 6c 6f 77 69 6e 67 20 67 6f 74 6f 20   following goto 
14ab0 69 73 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69  is an optimizati
14ac0 6f 6e 2e 20 20 49 74 20 63 61 6e 20 62 65 20 6f  on.  It can be o
14ad0 6d 69 74 74 65 64 20 61 6e 64 0a 20 20 20 20 20  mitted and.     
14ae0 20 2a 2a 20 65 76 65 72 79 74 68 69 6e 67 20 77   ** everything w
14af0 69 6c 6c 20 73 74 69 6c 6c 20 77 6f 72 6b 2e 20  ill still work. 
14b00 20 42 75 74 20 4f 50 5f 43 6f 6c 75 6d 6e 20 69   But OP_Column i
14b10 73 20 6d 65 61 73 75 72 61 62 6c 79 20 66 61 73  s measurably fas
14b20 74 65 72 0a 20 20 20 20 20 20 2a 2a 20 62 79 20  ter.      ** by 
14b30 73 6b 69 70 70 69 6e 67 20 74 68 65 20 73 75 62  skipping the sub
14b40 73 65 71 75 65 6e 74 20 63 6f 6e 64 69 74 69 6f  sequent conditio
14b50 6e 61 6c 2c 20 77 68 69 63 68 20 69 73 20 61 6c  nal, which is al
14b60 77 61 79 73 20 74 72 75 65 2e 0a 20 20 20 20 20  ways true..     
14b70 20 2a 2f 0a 20 20 20 20 20 20 7a 44 61 74 61 20   */.      zData 
14b80 3d 20 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20 20  = pC->aRow;.    
14b90 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 6e 48    assert( pC->nH
14ba0 64 72 50 61 72 73 65 64 3c 3d 70 32 20 29 3b 20  drParsed<=p2 ); 
14bb0 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 64 69          /* Condi
14bc0 74 69 6f 6e 61 6c 20 73 6b 69 70 70 65 64 20 2a  tional skipped *
14bd0 2f 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f  /.      goto op_
14be0 63 6f 6c 75 6d 6e 5f 72 65 61 64 5f 68 65 61 64  column_read_head
14bf0 65 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20  er;.    }.  }.. 
14c00 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 74   /* Make sure at
14c10 20 6c 65 61 73 74 20 74 68 65 20 66 69 72 73 74   least the first
14c20 20 70 32 2b 31 20 65 6e 74 72 69 65 73 20 6f 66   p2+1 entries of
14c30 20 74 68 65 20 68 65 61 64 65 72 20 68 61 76 65   the header have
14c40 20 62 65 65 6e 0a 20 20 2a 2a 20 70 61 72 73 65   been.  ** parse
14c50 64 20 61 6e 64 20 76 61 6c 69 64 20 69 6e 66 6f  d and valid info
14c60 72 6d 61 74 69 6f 6e 20 69 73 20 69 6e 20 61 4f  rmation is in aO
14c70 66 66 73 65 74 5b 5d 20 61 6e 64 20 70 43 2d 3e  ffset[] and pC->
14c80 61 54 79 70 65 5b 5d 2e 0a 20 20 2a 2f 0a 20 20  aType[]..  */.  
14c90 69 66 28 20 70 43 2d 3e 6e 48 64 72 50 61 72 73  if( pC->nHdrPars
14ca0 65 64 3c 3d 70 32 20 29 7b 0a 20 20 20 20 2f 2a  ed<=p2 ){.    /*
14cb0 20 49 66 20 74 68 65 72 65 20 69 73 20 6d 6f 72   If there is mor
14cc0 65 20 68 65 61 64 65 72 20 61 76 61 69 6c 61 62  e header availab
14cd0 6c 65 20 66 6f 72 20 70 61 72 73 69 6e 67 20 69  le for parsing i
14ce0 6e 20 74 68 65 20 72 65 63 6f 72 64 2c 20 74 72  n the record, tr
14cf0 79 0a 20 20 20 20 2a 2a 20 74 6f 20 65 78 74 72  y.    ** to extr
14d00 61 63 74 20 61 64 64 69 74 69 6f 6e 61 6c 20 66  act additional f
14d10 69 65 6c 64 73 20 75 70 20 74 68 72 6f 75 67 68  ields up through
14d20 20 74 68 65 20 70 32 2b 31 2d 74 68 20 66 69 65   the p2+1-th fie
14d30 6c 64 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  ld .    */.    i
14d40 66 28 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65  f( pC->iHdrOffse
14d50 74 3c 61 4f 66 66 73 65 74 5b 30 5d 20 29 7b 0a  t<aOffset[0] ){.
14d60 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75        /* Make su
14d70 72 65 20 7a 44 61 74 61 20 70 6f 69 6e 74 73 20  re zData points 
14d80 74 6f 20 65 6e 6f 75 67 68 20 6f 66 20 74 68 65  to enough of the
14d90 20 72 65 63 6f 72 64 20 74 6f 20 63 6f 76 65 72   record to cover
14da0 20 74 68 65 20 68 65 61 64 65 72 2e 20 2a 2f 0a   the header. */.
14db0 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61 52        if( pC->aR
14dc0 6f 77 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ow==0 ){.       
14dd0 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30   memset(&sMem, 0
14de0 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b  , sizeof(sMem));
14df0 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
14e00 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d  lite3VdbeMemFrom
14e10 42 74 72 65 65 28 70 43 2d 3e 75 63 2e 70 43 75  Btree(pC->uc.pCu
14e20 72 73 6f 72 2c 20 30 2c 20 61 4f 66 66 73 65 74  rsor, 0, aOffset
14e30 5b 30 5d 2c 20 26 73 4d 65 6d 29 3b 0a 20 20 20  [0], &sMem);.   
14e40 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
14e50 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62  ITE_OK ) goto ab
14e60 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
14e70 3b 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61 20  ;.        zData 
14e80 3d 20 28 75 38 2a 29 73 4d 65 6d 2e 7a 3b 0a 20  = (u8*)sMem.z;. 
14e90 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
14ea0 20 20 20 20 7a 44 61 74 61 20 3d 20 70 43 2d 3e      zData = pC->
14eb0 61 52 6f 77 3b 0a 20 20 20 20 20 20 7d 0a 20 20  aRow;.      }.  
14ec0 0a 20 20 20 20 20 20 2f 2a 20 46 69 6c 6c 20 69  .      /* Fill i
14ed0 6e 20 70 43 2d 3e 61 54 79 70 65 5b 69 5d 20 61  n pC->aType[i] a
14ee0 6e 64 20 61 4f 66 66 73 65 74 5b 69 5d 20 76 61  nd aOffset[i] va
14ef0 6c 75 65 73 20 74 68 72 6f 75 67 68 20 74 68 65  lues through the
14f00 20 70 32 2d 74 68 20 66 69 65 6c 64 2e 20 2a 2f   p2-th field. */
14f10 0a 20 20 20 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 72  .    op_column_r
14f20 65 61 64 5f 68 65 61 64 65 72 3a 0a 20 20 20 20  ead_header:.    
14f30 20 20 69 20 3d 20 70 43 2d 3e 6e 48 64 72 50 61    i = pC->nHdrPa
14f40 72 73 65 64 3b 0a 20 20 20 20 20 20 6f 66 66 73  rsed;.      offs
14f50 65 74 36 34 20 3d 20 61 4f 66 66 73 65 74 5b 69  et64 = aOffset[i
14f60 5d 3b 0a 20 20 20 20 20 20 7a 48 64 72 20 3d 20  ];.      zHdr = 
14f70 7a 44 61 74 61 20 2b 20 70 43 2d 3e 69 48 64 72  zData + pC->iHdr
14f80 4f 66 66 73 65 74 3b 0a 20 20 20 20 20 20 7a 45  Offset;.      zE
14f90 6e 64 48 64 72 20 3d 20 7a 44 61 74 61 20 2b 20  ndHdr = zData + 
14fa0 61 4f 66 66 73 65 74 5b 30 5d 3b 0a 20 20 20 20  aOffset[0];.    
14fb0 20 20 64 6f 7b 0a 20 20 20 20 20 20 20 20 69 66    do{.        if
14fc0 28 20 28 74 20 3d 20 7a 48 64 72 5b 30 5d 29 3c  ( (t = zHdr[0])<
14fd0 30 78 38 30 20 29 7b 0a 20 20 20 20 20 20 20 20  0x80 ){.        
14fe0 20 20 7a 48 64 72 2b 2b 3b 0a 20 20 20 20 20 20    zHdr++;.      
14ff0 20 20 20 20 6f 66 66 73 65 74 36 34 20 2b 3d 20      offset64 += 
15000 73 71 6c 69 74 65 33 56 64 62 65 4f 6e 65 42 79  sqlite3VdbeOneBy
15010 74 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28  teSerialTypeLen(
15020 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  t);.        }els
15030 65 7b 0a 20 20 20 20 20 20 20 20 20 20 7a 48 64  e{.          zHd
15040 72 20 2b 3d 20 73 71 6c 69 74 65 33 47 65 74 56  r += sqlite3GetV
15050 61 72 69 6e 74 33 32 28 7a 48 64 72 2c 20 26 74  arint32(zHdr, &t
15060 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6f 66 66  );.          off
15070 73 65 74 36 34 20 2b 3d 20 73 71 6c 69 74 65 33  set64 += sqlite3
15080 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65  VdbeSerialTypeLe
15090 6e 28 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  n(t);.        }.
150a0 20 20 20 20 20 20 20 20 70 43 2d 3e 61 54 79 70          pC->aTyp
150b0 65 5b 69 2b 2b 5d 20 3d 20 74 3b 0a 20 20 20 20  e[i++] = t;.    
150c0 20 20 20 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d      aOffset[i] =
150d0 20 28 75 33 32 29 28 6f 66 66 73 65 74 36 34 20   (u32)(offset64 
150e0 26 20 30 78 66 66 66 66 66 66 66 66 29 3b 0a 20  & 0xffffffff);. 
150f0 20 20 20 20 20 7d 77 68 69 6c 65 28 20 69 3c 3d       }while( i<=
15100 70 32 20 26 26 20 7a 48 64 72 3c 7a 45 6e 64 48  p2 && zHdr<zEndH
15110 64 72 20 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20  dr );..      /* 
15120 54 68 65 20 72 65 63 6f 72 64 20 69 73 20 63 6f  The record is co
15130 72 72 75 70 74 20 69 66 20 61 6e 79 20 6f 66 20  rrupt if any of 
15140 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72  the following ar
15150 65 20 74 72 75 65 3a 0a 20 20 20 20 20 20 2a 2a  e true:.      **
15160 20 28 31 29 20 74 68 65 20 62 79 74 65 73 20 6f   (1) the bytes o
15170 66 20 74 68 65 20 68 65 61 64 65 72 20 65 78 74  f the header ext
15180 65 6e 64 20 70 61 73 74 20 74 68 65 20 64 65 63  end past the dec
15190 6c 61 72 65 64 20 68 65 61 64 65 72 20 73 69 7a  lared header siz
151a0 65 0a 20 20 20 20 20 20 2a 2a 20 28 32 29 20 74  e.      ** (2) t
151b0 68 65 20 65 6e 74 69 72 65 20 68 65 61 64 65 72  he entire header
151c0 20 77 61 73 20 75 73 65 64 20 62 75 74 20 6e 6f   was used but no
151d0 74 20 61 6c 6c 20 64 61 74 61 20 77 61 73 20 75  t all data was u
151e0 73 65 64 0a 20 20 20 20 20 20 2a 2a 20 28 33 29  sed.      ** (3)
151f0 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
15200 64 61 74 61 20 65 78 74 65 6e 64 73 20 62 65 79  data extends bey
15210 6f 6e 64 20 74 68 65 20 65 6e 64 20 6f 66 20 74  ond the end of t
15220 68 65 20 72 65 63 6f 72 64 2e 0a 20 20 20 20 20  he record..     
15230 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28 7a   */.      if( (z
15240 48 64 72 3e 3d 7a 45 6e 64 48 64 72 20 26 26 20  Hdr>=zEndHdr && 
15250 28 7a 48 64 72 3e 7a 45 6e 64 48 64 72 20 7c 7c  (zHdr>zEndHdr ||
15260 20 6f 66 66 73 65 74 36 34 21 3d 70 43 2d 3e 70   offset64!=pC->p
15270 61 79 6c 6f 61 64 53 69 7a 65 29 29 0a 20 20 20  ayloadSize)).   
15280 20 20 20 20 7c 7c 20 28 6f 66 66 73 65 74 36 34      || (offset64
15290 20 3e 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69   > pC->payloadSi
152a0 7a 65 29 0a 20 20 20 20 20 20 29 7b 0a 20 20 20  ze).      ){.   
152b0 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61 52 6f       if( pC->aRo
152c0 77 3d 3d 30 20 29 20 73 71 6c 69 74 65 33 56 64  w==0 ) sqlite3Vd
152d0 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 73 4d  beMemRelease(&sM
152e0 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20  em);.        rc 
152f0 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  = SQLITE_CORRUPT
15300 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 20 20 67  _BKPT;.        g
15310 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
15320 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
15330 0a 20 20 20 20 20 20 70 43 2d 3e 6e 48 64 72 50  .      pC->nHdrP
15340 61 72 73 65 64 20 3d 20 69 3b 0a 20 20 20 20 20  arsed = i;.     
15350 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 20   pC->iHdrOffset 
15360 3d 20 28 75 33 32 29 28 7a 48 64 72 20 2d 20 7a  = (u32)(zHdr - z
15370 44 61 74 61 29 3b 0a 20 20 20 20 20 20 69 66 28  Data);.      if(
15380 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 20 73   pC->aRow==0 ) s
15390 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c  qlite3VdbeMemRel
153a0 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20 20 20  ease(&sMem);.   
153b0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 74 20   }else{.      t 
153c0 3d 20 30 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  = 0;.    }..    
153d0 2f 2a 20 49 66 20 61 66 74 65 72 20 74 72 79 69  /* If after tryi
153e0 6e 67 20 74 6f 20 65 78 74 72 61 63 74 20 6e 65  ng to extract ne
153f0 77 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74  w entries from t
15400 68 65 20 68 65 61 64 65 72 2c 20 6e 48 64 72 50  he header, nHdrP
15410 61 72 73 65 64 20 69 73 0a 20 20 20 20 2a 2a 20  arsed is.    ** 
15420 73 74 69 6c 6c 20 6e 6f 74 20 75 70 20 74 6f 20  still not up to 
15430 70 32 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74  p2, that means t
15440 68 61 74 20 74 68 65 20 72 65 63 6f 72 64 20 68  hat the record h
15450 61 73 20 66 65 77 65 72 20 74 68 61 6e 20 70 32  as fewer than p2
15460 0a 20 20 20 20 2a 2a 20 63 6f 6c 75 6d 6e 73 2e  .    ** columns.
15470 20 20 53 6f 20 74 68 65 20 72 65 73 75 6c 74 20    So the result 
15480 77 69 6c 6c 20 62 65 20 65 69 74 68 65 72 20 74  will be either t
15490 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  he default value
154a0 20 6f 72 20 61 20 4e 55 4c 4c 2e 0a 20 20 20 20   or a NULL..    
154b0 2a 2f 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e  */.    if( pC->n
154c0 48 64 72 50 61 72 73 65 64 3c 3d 70 32 20 29 7b  HdrParsed<=p2 ){
154d0 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  .      if( pOp->
154e0 70 34 74 79 70 65 3d 3d 50 34 5f 4d 45 4d 20 29  p4type==P4_MEM )
154f0 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
15500 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43  3VdbeMemShallowC
15510 6f 70 79 28 70 44 65 73 74 2c 20 70 4f 70 2d 3e  opy(pDest, pOp->
15520 70 34 2e 70 4d 65 6d 2c 20 4d 45 4d 5f 53 74 61  p4.pMem, MEM_Sta
15530 74 69 63 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  tic);.      }els
15540 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  e{.        sqlit
15550 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
15560 28 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 7d  (pDest);.      }
15570 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63  .      goto op_c
15580 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d  olumn_out;.    }
15590 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 74 20  .  }else{.    t 
155a0 3d 20 70 43 2d 3e 61 54 79 70 65 5b 70 32 5d 3b  = pC->aType[p2];
155b0 0a 20 20 7d 0a 0a 20 20 2f 2a 20 45 78 74 72 61  .  }..  /* Extra
155c0 63 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 66  ct the content f
155d0 6f 72 20 74 68 65 20 70 32 2b 31 2d 74 68 20 63  or the p2+1-th c
155e0 6f 6c 75 6d 6e 2e 20 20 43 6f 6e 74 72 6f 6c 20  olumn.  Control 
155f0 63 61 6e 20 6f 6e 6c 79 0a 20 20 2a 2a 20 72 65  can only.  ** re
15600 61 63 68 20 74 68 69 73 20 70 6f 69 6e 74 20 69  ach this point i
15610 66 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 61  f aOffset[p2], a
15620 4f 66 66 73 65 74 5b 70 32 2b 31 5d 2c 20 61 6e  Offset[p2+1], an
15630 64 20 70 43 2d 3e 61 54 79 70 65 5b 70 32 5d 20  d pC->aType[p2] 
15640 61 72 65 0a 20 20 2a 2a 20 61 6c 6c 20 76 61 6c  are.  ** all val
15650 69 64 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72  id..  */.  asser
15660 74 28 20 70 32 3c 70 43 2d 3e 6e 48 64 72 50 61  t( p2<pC->nHdrPa
15670 72 73 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74  rsed );.  assert
15680 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
15690 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c  );.  assert( sql
156a0 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d  ite3VdbeCheckMem
156b0 49 6e 76 61 72 69 61 6e 74 73 28 70 44 65 73 74  Invariants(pDest
156c0 29 20 29 3b 0a 20 20 69 66 28 20 56 64 62 65 4d  ) );.  if( VdbeM
156d0 65 6d 44 79 6e 61 6d 69 63 28 70 44 65 73 74 29  emDynamic(pDest)
156e0 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
156f0 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44  dbeMemSetNull(pD
15700 65 73 74 29 3b 0a 20 20 7d 0a 20 20 61 73 73 65  est);.  }.  asse
15710 72 74 28 20 74 3d 3d 70 43 2d 3e 61 54 79 70 65  rt( t==pC->aType
15720 5b 70 32 5d 20 29 3b 0a 20 20 69 66 28 20 70 43  [p2] );.  if( pC
15730 2d 3e 73 7a 52 6f 77 3e 3d 61 4f 66 66 73 65 74  ->szRow>=aOffset
15740 5b 70 32 2b 31 5d 20 29 7b 0a 20 20 20 20 2f 2a  [p2+1] ){.    /*
15750 20 54 68 69 73 20 69 73 20 74 68 65 20 63 6f 6d   This is the com
15760 6d 6f 6e 20 63 61 73 65 20 77 68 65 72 65 20 74  mon case where t
15770 68 65 20 64 65 73 69 72 65 64 20 63 6f 6e 74 65  he desired conte
15780 6e 74 20 66 69 74 73 20 6f 6e 20 74 68 65 20 6f  nt fits on the o
15790 72 69 67 69 6e 61 6c 0a 20 20 20 20 2a 2a 20 70  riginal.    ** p
157a0 61 67 65 20 2d 20 77 68 65 72 65 20 74 68 65 20  age - where the 
157b0 63 6f 6e 74 65 6e 74 20 69 73 20 6e 6f 74 20 6f  content is not o
157c0 6e 20 61 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61  n an overflow pa
157d0 67 65 20 2a 2f 0a 20 20 20 20 7a 44 61 74 61 20  ge */.    zData 
157e0 3d 20 70 43 2d 3e 61 52 6f 77 20 2b 20 61 4f 66  = pC->aRow + aOf
157f0 66 73 65 74 5b 70 32 5d 3b 0a 20 20 20 20 69 66  fset[p2];.    if
15800 28 20 74 3c 31 32 20 29 7b 0a 20 20 20 20 20 20  ( t<12 ){.      
15810 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
15820 6c 47 65 74 28 7a 44 61 74 61 2c 20 74 2c 20 70  lGet(zData, t, p
15830 44 65 73 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65  Dest);.    }else
15840 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68  {.      /* If th
15850 65 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 69  e column value i
15860 73 20 61 20 73 74 72 69 6e 67 2c 20 77 65 20 6e  s a string, we n
15870 65 65 64 20 61 20 70 65 72 73 69 73 74 65 6e 74  eed a persistent
15880 20 76 61 6c 75 65 2c 20 6e 6f 74 0a 20 20 20 20   value, not.    
15890 20 20 2a 2a 20 61 20 4d 45 4d 5f 45 70 68 65 6d    ** a MEM_Ephem
158a0 20 76 61 6c 75 65 2e 20 20 54 68 69 73 20 62 72   value.  This br
158b0 61 6e 63 68 20 69 73 20 61 20 66 61 73 74 20 73  anch is a fast s
158c0 68 6f 72 74 2d 63 75 74 20 74 68 61 74 20 69 73  hort-cut that is
158d0 20 65 71 75 69 76 61 6c 65 6e 74 0a 20 20 20 20   equivalent.    
158e0 20 20 2a 2a 20 74 6f 20 63 61 6c 6c 69 6e 67 20    ** to calling 
158f0 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
15900 6c 47 65 74 28 29 20 61 6e 64 20 73 71 6c 69 74  lGet() and sqlit
15910 65 33 56 64 62 65 44 65 65 70 68 65 6d 65 72 61  e3VdbeDeephemera
15920 6c 69 7a 65 28 29 2e 0a 20 20 20 20 20 20 2a 2f  lize()..      */
15930 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f  .      static co
15940 6e 73 74 20 75 31 36 20 61 46 6c 61 67 5b 5d 20  nst u16 aFlag[] 
15950 3d 20 7b 20 4d 45 4d 5f 42 6c 6f 62 2c 20 4d 45  = { MEM_Blob, ME
15960 4d 5f 53 74 72 7c 4d 45 4d 5f 54 65 72 6d 20 7d  M_Str|MEM_Term }
15970 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e 6e  ;.      pDest->n
15980 20 3d 20 6c 65 6e 20 3d 20 28 74 2d 31 32 29 2f   = len = (t-12)/
15990 32 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e  2;.      pDest->
159a0 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a  enc = encoding;.
159b0 20 20 20 20 20 20 69 66 28 20 70 44 65 73 74 2d        if( pDest-
159c0 3e 73 7a 4d 61 6c 6c 6f 63 20 3c 20 6c 65 6e 2b  >szMalloc < len+
159d0 32 20 29 7b 0a 20 20 20 20 20 20 20 20 70 44 65  2 ){.        pDe
159e0 73 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  st->flags = MEM_
159f0 4e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66  Null;.        if
15a00 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
15a10 47 72 6f 77 28 70 44 65 73 74 2c 20 6c 65 6e 2b  Grow(pDest, len+
15a20 32 2c 20 30 29 20 29 20 67 6f 74 6f 20 6e 6f 5f  2, 0) ) goto no_
15a30 6d 65 6d 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  mem;.      }else
15a40 7b 0a 20 20 20 20 20 20 20 20 70 44 65 73 74 2d  {.        pDest-
15a50 3e 7a 20 3d 20 70 44 65 73 74 2d 3e 7a 4d 61 6c  >z = pDest->zMal
15a60 6c 6f 63 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  loc;.      }.   
15a70 20 20 20 6d 65 6d 63 70 79 28 70 44 65 73 74 2d     memcpy(pDest-
15a80 3e 7a 2c 20 7a 44 61 74 61 2c 20 6c 65 6e 29 3b  >z, zData, len);
15a90 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e 7a 5b  .      pDest->z[
15aa0 6c 65 6e 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20  len] = 0;.      
15ab0 70 44 65 73 74 2d 3e 7a 5b 6c 65 6e 2b 31 5d 20  pDest->z[len+1] 
15ac0 3d 20 30 3b 0a 20 20 20 20 20 20 70 44 65 73 74  = 0;.      pDest
15ad0 2d 3e 66 6c 61 67 73 20 3d 20 61 46 6c 61 67 5b  ->flags = aFlag[
15ae0 74 26 31 5d 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  t&1];.    }.  }e
15af0 6c 73 65 7b 0a 20 20 20 20 70 44 65 73 74 2d 3e  lse{.    pDest->
15b00 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a  enc = encoding;.
15b10 20 20 20 20 2f 2a 20 54 68 69 73 20 62 72 61 6e      /* This bran
15b20 63 68 20 68 61 70 70 65 6e 73 20 6f 6e 6c 79 20  ch happens only 
15b30 77 68 65 6e 20 63 6f 6e 74 65 6e 74 20 69 73 20  when content is 
15b40 6f 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65  on overflow page
15b50 73 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 28 70  s */.    if( ((p
15b60 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46 4c 41 47  Op->p5 & (OPFLAG
15b70 5f 4c 45 4e 47 54 48 41 52 47 7c 4f 50 46 4c 41  _LENGTHARG|OPFLA
15b80 47 5f 54 59 50 45 4f 46 41 52 47 29 29 21 3d 30  G_TYPEOFARG))!=0
15b90 0a 20 20 20 20 20 20 20 20 20 20 26 26 20 28 28  .          && ((
15ba0 74 3e 3d 31 32 20 26 26 20 28 74 26 31 29 3d 3d  t>=12 && (t&1)==
15bb0 30 29 20 7c 7c 20 28 70 4f 70 2d 3e 70 35 20 26  0) || (pOp->p5 &
15bc0 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52   OPFLAG_TYPEOFAR
15bd0 47 29 21 3d 30 29 29 0a 20 20 20 20 20 7c 7c 20  G)!=0)).     || 
15be0 28 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33 56 64  (len = sqlite3Vd
15bf0 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28  beSerialTypeLen(
15c00 74 29 29 3d 3d 30 0a 20 20 20 20 29 7b 0a 20 20  t))==0.    ){.  
15c10 20 20 20 20 2f 2a 20 43 6f 6e 74 65 6e 74 20 69      /* Content i
15c20 73 20 69 72 72 65 6c 65 76 61 6e 74 20 66 6f 72  s irrelevant for
15c30 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 31 2e 20  .      **    1. 
15c40 74 68 65 20 74 79 70 65 6f 66 28 29 20 66 75 6e  the typeof() fun
15c50 63 74 69 6f 6e 2c 0a 20 20 20 20 20 20 2a 2a 20  ction,.      ** 
15c60 20 20 20 32 2e 20 74 68 65 20 6c 65 6e 67 74 68     2. the length
15c70 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 66 20  (X) function if 
15c80 58 20 69 73 20 61 20 62 6c 6f 62 2c 20 61 6e 64  X is a blob, and
15c90 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 33 2e 20  .      **    3. 
15ca0 69 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6c  if the content l
15cb0 65 6e 67 74 68 20 69 73 20 7a 65 72 6f 2e 0a 20  ength is zero.. 
15cc0 20 20 20 20 20 2a 2a 20 53 6f 20 77 65 20 6d 69       ** So we mi
15cd0 67 68 74 20 61 73 20 77 65 6c 6c 20 75 73 65 20  ght as well use 
15ce0 62 6f 67 75 73 20 63 6f 6e 74 65 6e 74 20 72 61  bogus content ra
15cf0 74 68 65 72 20 74 68 61 6e 20 72 65 61 64 69 6e  ther than readin
15d00 67 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6e 74 65  g.      ** conte
15d10 6e 74 20 66 72 6f 6d 20 64 69 73 6b 2e 20 2a 2f  nt from disk. */
15d20 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 75 38  .      static u8
15d30 20 61 5a 65 72 6f 5b 38 5d 3b 20 20 2f 2a 20 54   aZero[8];  /* T
15d40 68 69 73 20 69 73 20 74 68 65 20 62 6f 67 75 73  his is the bogus
15d50 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20 20 20   content */.    
15d60 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72    sqlite3VdbeSer
15d70 69 61 6c 47 65 74 28 61 5a 65 72 6f 2c 20 74 2c  ialGet(aZero, t,
15d80 20 70 44 65 73 74 29 3b 0a 20 20 20 20 7d 65 6c   pDest);.    }el
15d90 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73  se{.      rc = s
15da0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f  qlite3VdbeMemFro
15db0 6d 42 74 72 65 65 28 70 43 2d 3e 75 63 2e 70 43  mBtree(pC->uc.pC
15dc0 75 72 73 6f 72 2c 20 61 4f 66 66 73 65 74 5b 70  ursor, aOffset[p
15dd0 32 5d 2c 20 6c 65 6e 2c 20 70 44 65 73 74 29 3b  2], len, pDest);
15de0 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53  .      if( rc!=S
15df0 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20  QLITE_OK ) goto 
15e00 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
15e10 6f 72 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  or;.      sqlite
15e20 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 28  3VdbeSerialGet((
15e30 63 6f 6e 73 74 20 75 38 2a 29 70 44 65 73 74 2d  const u8*)pDest-
15e40 3e 7a 2c 20 74 2c 20 70 44 65 73 74 29 3b 0a 20  >z, t, pDest);. 
15e50 20 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67       pDest->flag
15e60 73 20 26 3d 20 7e 4d 45 4d 5f 45 70 68 65 6d 3b  s &= ~MEM_Ephem;
15e70 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 6f 70 5f 63  .    }.  }..op_c
15e80 6f 6c 75 6d 6e 5f 6f 75 74 3a 0a 20 20 55 50 44  olumn_out:.  UPD
15e90 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
15ea0 28 70 44 65 73 74 29 3b 0a 20 20 52 45 47 49 53  (pDest);.  REGIS
15eb0 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
15ec0 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 62 72 65  3, pDest);.  bre
15ed0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
15ee0 3a 20 41 66 66 69 6e 69 74 79 20 50 31 20 50 32  : Affinity P1 P2
15ef0 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
15f00 73 69 73 3a 20 61 66 66 69 6e 69 74 79 28 72 5b  sis: affinity(r[
15f10 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 41 70  P1@P2]).**.** Ap
15f20 70 6c 79 20 61 66 66 69 6e 69 74 69 65 73 20 74  ply affinities t
15f30 6f 20 61 20 72 61 6e 67 65 20 6f 66 20 50 32 20  o a range of P2 
15f40 72 65 67 69 73 74 65 72 73 20 73 74 61 72 74 69  registers starti
15f50 6e 67 20 77 69 74 68 20 50 31 2e 0a 2a 2a 0a 2a  ng with P1..**.*
15f60 2a 20 50 34 20 69 73 20 61 20 73 74 72 69 6e 67  * P4 is a string
15f70 20 74 68 61 74 20 69 73 20 50 32 20 63 68 61 72   that is P2 char
15f80 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 54 68 65  acters long. The
15f90 20 6e 74 68 20 63 68 61 72 61 63 74 65 72 20 6f   nth character o
15fa0 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20  f the.** string 
15fb0 69 6e 64 69 63 61 74 65 73 20 74 68 65 20 63 6f  indicates the co
15fc0 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68  lumn affinity th
15fd0 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65  at should be use
15fe0 64 20 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a  d for the nth.**
15ff0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20   memory cell in 
16000 74 68 65 20 72 61 6e 67 65 2e 0a 2a 2f 0a 63 61  the range..*/.ca
16010 73 65 20 4f 50 5f 41 66 66 69 6e 69 74 79 3a 20  se OP_Affinity: 
16020 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
16030 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20  zAffinity;   /* 
16040 54 68 65 20 61 66 66 69 6e 69 74 79 20 74 6f 20  The affinity to 
16050 62 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20 20  be applied */.  
16060 63 68 61 72 20 63 41 66 66 3b 20 20 20 20 20 20  char cAff;      
16070 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 73 69           /* A si
16080 6e 67 6c 65 20 63 68 61 72 61 63 74 65 72 20 6f  ngle character o
16090 66 20 61 66 66 69 6e 69 74 79 20 2a 2f 0a 0a 20  f affinity */.. 
160a0 20 7a 41 66 66 69 6e 69 74 79 20 3d 20 70 4f 70   zAffinity = pOp
160b0 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73 65 72 74  ->p4.z;.  assert
160c0 28 20 7a 41 66 66 69 6e 69 74 79 21 3d 30 20 29  ( zAffinity!=0 )
160d0 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 41 66 66  ;.  assert( zAff
160e0 69 6e 69 74 79 5b 70 4f 70 2d 3e 70 32 5d 3d 3d  inity[pOp->p2]==
160f0 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  0 );.  pIn1 = &a
16100 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
16110 77 68 69 6c 65 28 20 28 63 41 66 66 20 3d 20 2a  while( (cAff = *
16120 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29 29 21 3d  (zAffinity++))!=
16130 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  0 ){.    assert(
16140 20 70 49 6e 31 20 3c 3d 20 26 70 2d 3e 61 4d 65   pIn1 <= &p->aMe
16150 6d 5b 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  m[(p->nMem+1 - p
16160 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20  ->nCursor)] );. 
16170 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
16180 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20  Valid(pIn1) );. 
16190 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79     applyAffinity
161a0 28 70 49 6e 31 2c 20 63 41 66 66 2c 20 65 6e 63  (pIn1, cAff, enc
161b0 6f 64 69 6e 67 29 3b 0a 20 20 20 20 70 49 6e 31  oding);.    pIn1
161c0 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  ++;.  }.  break;
161d0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d  .}../* Opcode: M
161e0 61 6b 65 52 65 63 6f 72 64 20 50 31 20 50 32 20  akeRecord P1 P2 
161f0 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
16200 73 69 73 3a 20 72 5b 50 33 5d 3d 6d 6b 72 65 63  sis: r[P3]=mkrec
16210 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a  (r[P1@P2]).**.**
16220 20 43 6f 6e 76 65 72 74 20 50 32 20 72 65 67 69   Convert P2 regi
16230 73 74 65 72 73 20 62 65 67 69 6e 6e 69 6e 67 20  sters beginning 
16240 77 69 74 68 20 50 31 20 69 6e 74 6f 20 74 68 65  with P1 into the
16250 20 5b 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 5d   [record format]
16260 0a 2a 2a 20 75 73 65 20 61 73 20 61 20 64 61 74  .** use as a dat
16270 61 20 72 65 63 6f 72 64 20 69 6e 20 61 20 64 61  a record in a da
16280 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
16290 61 73 20 61 20 6b 65 79 0a 2a 2a 20 69 6e 20 61  as a key.** in a
162a0 6e 20 69 6e 64 65 78 2e 20 20 54 68 65 20 4f 50  n index.  The OP
162b0 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 20 63  _Column opcode c
162c0 61 6e 20 64 65 63 6f 64 65 20 74 68 65 20 72 65  an decode the re
162d0 63 6f 72 64 20 6c 61 74 65 72 2e 0a 2a 2a 0a 2a  cord later..**.*
162e0 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20 73 74  * P4 may be a st
162f0 72 69 6e 67 20 74 68 61 74 20 69 73 20 50 32 20  ring that is P2 
16300 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e  characters long.
16310 20 20 54 68 65 20 6e 74 68 20 63 68 61 72 61 63    The nth charac
16320 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74  ter of the.** st
16330 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20 74  ring indicates t
16340 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69  he column affini
16350 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62  ty that should b
16360 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 6e  e used for the n
16370 74 68 0a 2a 2a 20 66 69 65 6c 64 20 6f 66 20 74  th.** field of t
16380 68 65 20 69 6e 64 65 78 20 6b 65 79 2e 0a 2a 2a  he index key..**
16390 0a 2a 2a 20 54 68 65 20 6d 61 70 70 69 6e 67 20  .** The mapping 
163a0 66 72 6f 6d 20 63 68 61 72 61 63 74 65 72 20 74  from character t
163b0 6f 20 61 66 66 69 6e 69 74 79 20 69 73 20 67 69  o affinity is gi
163c0 76 65 6e 20 62 79 20 74 68 65 20 53 51 4c 49 54  ven by the SQLIT
163d0 45 5f 41 46 46 5f 0a 2a 2a 20 6d 61 63 72 6f 73  E_AFF_.** macros
163e0 20 64 65 66 69 6e 65 64 20 69 6e 20 73 71 6c 69   defined in sqli
163f0 74 65 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49  teInt.h..**.** I
16400 66 20 50 34 20 69 73 20 4e 55 4c 4c 20 74 68 65  f P4 is NULL the
16410 6e 20 61 6c 6c 20 69 6e 64 65 78 20 66 69 65 6c  n all index fiel
16420 64 73 20 68 61 76 65 20 74 68 65 20 61 66 66 69  ds have the affi
16430 6e 69 74 79 20 42 4c 4f 42 2e 0a 2a 2f 0a 63 61  nity BLOB..*/.ca
16440 73 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64  se OP_MakeRecord
16450 3a 20 7b 0a 20 20 75 38 20 2a 7a 4e 65 77 52 65  : {.  u8 *zNewRe
16460 63 6f 72 64 3b 20 20 20 20 20 20 20 20 2f 2a 20  cord;        /* 
16470 41 20 62 75 66 66 65 72 20 74 6f 20 68 6f 6c 64  A buffer to hold
16480 20 74 68 65 20 64 61 74 61 20 66 6f 72 20 74 68   the data for th
16490 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a  e new record */.
164a0 20 20 4d 65 6d 20 2a 70 52 65 63 3b 20 20 20 20    Mem *pRec;    
164b0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
164c0 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  new record */.  
164d0 75 36 34 20 6e 44 61 74 61 3b 20 20 20 20 20 20  u64 nData;      
164e0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
164f0 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61 74   of bytes of dat
16500 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74  a space */.  int
16510 20 6e 48 64 72 3b 20 20 20 20 20 20 20 20 20 20   nHdr;          
16520 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
16530 20 62 79 74 65 73 20 6f 66 20 68 65 61 64 65 72   bytes of header
16540 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 36 34 20   space */.  i64 
16550 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20 20 20  nByte;          
16560 20 20 20 2f 2a 20 44 61 74 61 20 73 70 61 63 65     /* Data space
16570 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68   required for th
16580 69 73 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  is record */.  i
16590 36 34 20 6e 5a 65 72 6f 3b 20 20 20 20 20 20 20  64 nZero;       
165a0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
165b0 6f 66 20 7a 65 72 6f 20 62 79 74 65 73 20 61 74  of zero bytes at
165c0 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
165d0 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
165e0 6e 56 61 72 69 6e 74 3b 20 20 20 20 20 20 20 20  nVarint;        
165f0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
16600 62 79 74 65 73 20 69 6e 20 61 20 76 61 72 69 6e  bytes in a varin
16610 74 20 2a 2f 0a 20 20 75 33 32 20 73 65 72 69 61  t */.  u32 seria
16620 6c 5f 74 79 70 65 3b 20 20 20 20 20 20 20 2f 2a  l_type;       /*
16630 20 54 79 70 65 20 66 69 65 6c 64 20 2a 2f 0a 20   Type field */. 
16640 20 4d 65 6d 20 2a 70 44 61 74 61 30 3b 20 20 20   Mem *pData0;   
16650 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74          /* First
16660 20 66 69 65 6c 64 20 74 6f 20 62 65 20 63 6f 6d   field to be com
16670 62 69 6e 65 64 20 69 6e 74 6f 20 74 68 65 20 72  bined into the r
16680 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a  ecord */.  Mem *
16690 70 4c 61 73 74 3b 20 20 20 20 20 20 20 20 20 20  pLast;          
166a0 20 20 2f 2a 20 4c 61 73 74 20 66 69 65 6c 64 20    /* Last field 
166b0 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  of the record */
166c0 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 20 20  .  int nField;  
166d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
166e0 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e  ber of fields in
166f0 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
16700 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79   char *zAffinity
16710 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61  ;       /* The a
16720 66 66 69 6e 69 74 79 20 73 74 72 69 6e 67 20 66  ffinity string f
16730 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  or the record */
16740 0a 20 20 69 6e 74 20 66 69 6c 65 5f 66 6f 72 6d  .  int file_form
16750 61 74 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 6c  at;       /* Fil
16760 65 20 66 6f 72 6d 61 74 20 74 6f 20 75 73 65 20  e format to use 
16770 66 6f 72 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a  for encoding */.
16780 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20    int i;        
16790 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63           /* Spac
167a0 65 20 75 73 65 64 20 69 6e 20 7a 4e 65 77 52 65  e used in zNewRe
167b0 63 6f 72 64 5b 5d 20 68 65 61 64 65 72 20 2a 2f  cord[] header */
167c0 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20 20 20 20  .  int j;       
167d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61            /* Spa
167e0 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65 77 52  ce used in zNewR
167f0 65 63 6f 72 64 5b 5d 20 63 6f 6e 74 65 6e 74 20  ecord[] content 
16800 2a 2f 0a 20 20 75 33 32 20 6c 65 6e 3b 20 20 20  */.  u32 len;   
16810 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
16820 65 6e 67 74 68 20 6f 66 20 61 20 66 69 65 6c 64  ength of a field
16830 20 2a 2f 0a 0a 20 20 2f 2a 20 41 73 73 75 6d 69   */..  /* Assumi
16840 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20 63 6f  ng the record co
16850 6e 74 61 69 6e 73 20 4e 20 66 69 65 6c 64 73 2c  ntains N fields,
16860 20 74 68 65 20 72 65 63 6f 72 64 20 66 6f 72 6d   the record form
16870 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20 6c 69  at looks.  ** li
16880 6b 65 20 74 68 69 73 3a 0a 20 20 2a 2a 0a 20 20  ke this:.  **.  
16890 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ** -------------
168a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
168b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
168c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
168d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a  -----------.  **
168e0 20 7c 20 68 64 72 2d 73 69 7a 65 20 7c 20 74 79   | hdr-size | ty
168f0 70 65 20 30 20 7c 20 74 79 70 65 20 31 20 7c 20  pe 0 | type 1 | 
16900 2e 2e 2e 20 7c 20 74 79 70 65 20 4e 2d 31 20 7c  ... | type N-1 |
16910 20 64 61 74 61 30 20 7c 20 2e 2e 2e 20 7c 20 64   data0 | ... | d
16920 61 74 61 20 4e 2d 31 20 7c 20 0a 20 20 2a 2a 20  ata N-1 | .  ** 
16930 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16940 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16950 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16960 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16970 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a 20 20  --------.  **.  
16980 2a 2a 20 44 61 74 61 28 30 29 20 69 73 20 74 61  ** Data(0) is ta
16990 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65  ken from registe
169a0 72 20 50 31 2e 20 20 44 61 74 61 28 31 29 20 63  r P1.  Data(1) c
169b0 6f 6d 65 73 20 66 72 6f 6d 20 72 65 67 69 73 74  omes from regist
169c0 65 72 20 50 31 2b 31 0a 20 20 2a 2a 20 61 6e 64  er P1+1.  ** and
169d0 20 73 6f 20 66 6f 72 74 68 2e 0a 20 20 2a 2a 0a   so forth..  **.
169e0 20 20 2a 2a 20 45 61 63 68 20 74 79 70 65 20 66    ** Each type f
169f0 69 65 6c 64 20 69 73 20 61 20 76 61 72 69 6e 74  ield is a varint
16a00 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68   representing th
16a10 65 20 73 65 72 69 61 6c 20 74 79 70 65 20 6f 66  e serial type of
16a20 20 74 68 65 20 0a 20 20 2a 2a 20 63 6f 72 72 65   the .  ** corre
16a30 73 70 6f 6e 64 69 6e 67 20 64 61 74 61 20 65 6c  sponding data el
16a40 65 6d 65 6e 74 20 28 73 65 65 20 73 71 6c 69 74  ement (see sqlit
16a50 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65  e3VdbeSerialType
16a60 28 29 29 2e 20 54 68 65 0a 20 20 2a 2a 20 68 64  ()). The.  ** hd
16a70 72 2d 73 69 7a 65 20 66 69 65 6c 64 20 69 73 20  r-size field is 
16a80 61 6c 73 6f 20 61 20 76 61 72 69 6e 74 20 77 68  also a varint wh
16a90 69 63 68 20 69 73 20 74 68 65 20 6f 66 66 73 65  ich is the offse
16aa0 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e  t from the begin
16ab0 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66 20 74 68 65  ning.  ** of the
16ac0 20 72 65 63 6f 72 64 20 74 6f 20 64 61 74 61 30   record to data0
16ad0 2e 0a 20 20 2a 2f 0a 20 20 6e 44 61 74 61 20 3d  ..  */.  nData =
16ae0 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e   0;         /* N
16af0 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f  umber of bytes o
16b00 66 20 64 61 74 61 20 73 70 61 63 65 20 2a 2f 0a  f data space */.
16b10 20 20 6e 48 64 72 20 3d 20 30 3b 20 20 20 20 20    nHdr = 0;     
16b20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
16b30 66 20 62 79 74 65 73 20 6f 66 20 68 65 61 64 65  f bytes of heade
16b40 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e 5a 65  r space */.  nZe
16b50 72 6f 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  ro = 0;         
16b60 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72  /* Number of zer
16b70 6f 20 62 79 74 65 73 20 61 74 20 74 68 65 20 65  o bytes at the e
16b80 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  nd of the record
16b90 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70   */.  nField = p
16ba0 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41 66 66 69 6e  Op->p1;.  zAffin
16bb0 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b  ity = pOp->p4.z;
16bc0 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c  .  assert( nFiel
16bd0 64 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 3e 30  d>0 && pOp->p2>0
16be0 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 46 69 65   && pOp->p2+nFie
16bf0 6c 64 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  ld<=(p->nMem+1 -
16c00 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29   p->nCursor)+1 )
16c10 3b 0a 20 20 70 44 61 74 61 30 20 3d 20 26 61 4d  ;.  pData0 = &aM
16c20 65 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e 46  em[nField];.  nF
16c30 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a  ield = pOp->p2;.
16c40 20 20 70 4c 61 73 74 20 3d 20 26 70 44 61 74 61    pLast = &pData
16c50 30 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20 20 66  0[nField-1];.  f
16c60 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70 2d 3e  ile_format = p->
16c70 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d  minWriteFileForm
16c80 61 74 3b 0a 0a 20 20 2f 2a 20 49 64 65 6e 74 69  at;..  /* Identi
16c90 66 79 20 74 68 65 20 6f 75 74 70 75 74 20 72 65  fy the output re
16ca0 67 69 73 74 65 72 20 2a 2f 0a 20 20 61 73 73 65  gister */.  asse
16cb0 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d  rt( pOp->p3<pOp-
16cc0 3e 70 31 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d  >p1 || pOp->p3>=
16cd0 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 20  pOp->p1+pOp->p2 
16ce0 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  );.  pOut = &aMe
16cf0 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65  m[pOp->p3];.  me
16d00 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
16d10 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 41  , pOut);..  /* A
16d20 70 70 6c 79 20 74 68 65 20 72 65 71 75 65 73 74  pply the request
16d30 65 64 20 61 66 66 69 6e 69 74 79 20 74 6f 20 61  ed affinity to a
16d40 6c 6c 20 69 6e 70 75 74 73 0a 20 20 2a 2f 0a 20  ll inputs.  */. 
16d50 20 61 73 73 65 72 74 28 20 70 44 61 74 61 30 3c   assert( pData0<
16d60 3d 70 4c 61 73 74 20 29 3b 0a 20 20 69 66 28 20  =pLast );.  if( 
16d70 7a 41 66 66 69 6e 69 74 79 20 29 7b 0a 20 20 20  zAffinity ){.   
16d80 20 70 52 65 63 20 3d 20 70 44 61 74 61 30 3b 0a   pRec = pData0;.
16d90 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 61 70      do{.      ap
16da0 70 6c 79 41 66 66 69 6e 69 74 79 28 70 52 65 63  plyAffinity(pRec
16db0 2b 2b 2c 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b  ++, *(zAffinity+
16dc0 2b 29 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  +), encoding);. 
16dd0 20 20 20 20 20 61 73 73 65 72 74 28 20 7a 41 66       assert( zAf
16de0 66 69 6e 69 74 79 5b 30 5d 3d 3d 30 20 7c 7c 20  finity[0]==0 || 
16df0 70 52 65 63 3c 3d 70 4c 61 73 74 20 29 3b 0a 20  pRec<=pLast );. 
16e00 20 20 20 7d 77 68 69 6c 65 28 20 7a 41 66 66 69     }while( zAffi
16e10 6e 69 74 79 5b 30 5d 20 29 3b 0a 20 20 7d 0a 0a  nity[0] );.  }..
16e20 20 20 2f 2a 20 4c 6f 6f 70 20 74 68 72 6f 75 67    /* Loop throug
16e30 68 20 74 68 65 20 65 6c 65 6d 65 6e 74 73 20 74  h the elements t
16e40 68 61 74 20 77 69 6c 6c 20 6d 61 6b 65 20 75 70  hat will make up
16e50 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 66   the record to f
16e60 69 67 75 72 65 0a 20 20 2a 2a 20 6f 75 74 20 68  igure.  ** out h
16e70 6f 77 20 6d 75 63 68 20 73 70 61 63 65 20 69 73  ow much space is
16e80 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68   required for th
16e90 65 20 6e 65 77 20 72 65 63 6f 72 64 2e 0a 20 20  e new record..  
16ea0 2a 2f 0a 20 20 70 52 65 63 20 3d 20 70 4c 61 73  */.  pRec = pLas
16eb0 74 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 61 73 73  t;.  do{.    ass
16ec0 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
16ed0 70 52 65 63 29 20 29 3b 0a 20 20 20 20 70 52 65  pRec) );.    pRe
16ee0 63 2d 3e 75 54 65 6d 70 20 3d 20 73 65 72 69 61  c->uTemp = seria
16ef0 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69 74 65 33  l_type = sqlite3
16f00 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 28 70  VdbeSerialType(p
16f10 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74  Rec, file_format
16f20 2c 20 26 6c 65 6e 29 3b 0a 20 20 20 20 69 66 28  , &len);.    if(
16f30 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d   pRec->flags & M
16f40 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20  EM_Zero ){.     
16f50 20 69 66 28 20 6e 44 61 74 61 20 29 7b 0a 20 20   if( nData ){.  
16f60 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
16f70 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c  3VdbeMemExpandBl
16f80 6f 62 28 70 52 65 63 29 20 29 20 67 6f 74 6f 20  ob(pRec) ) goto 
16f90 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20 20 7d 65  no_mem;.      }e
16fa0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 6e 5a 65  lse{.        nZe
16fb0 72 6f 20 2b 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a  ro += pRec->u.nZ
16fc0 65 72 6f 3b 0a 20 20 20 20 20 20 20 20 6c 65 6e  ero;.        len
16fd0 20 2d 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72   -= pRec->u.nZer
16fe0 6f 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  o;.      }.    }
16ff0 0a 20 20 20 20 6e 44 61 74 61 20 2b 3d 20 6c 65  .    nData += le
17000 6e 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28  n;.    testcase(
17010 20 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d 31 32   serial_type==12
17020 37 20 29 3b 0a 20 20 20 20 74 65 73 74 63 61 73  7 );.    testcas
17030 65 28 20 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d  e( serial_type==
17040 31 32 38 20 29 3b 0a 20 20 20 20 6e 48 64 72 20  128 );.    nHdr 
17050 2b 3d 20 73 65 72 69 61 6c 5f 74 79 70 65 3c 3d  += serial_type<=
17060 31 32 37 20 3f 20 31 20 3a 20 73 71 6c 69 74 65  127 ? 1 : sqlite
17070 33 56 61 72 69 6e 74 4c 65 6e 28 73 65 72 69 61  3VarintLen(seria
17080 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20 69 66 28  l_type);.    if(
17090 20 70 52 65 63 3d 3d 70 44 61 74 61 30 20 29 20   pRec==pData0 ) 
170a0 62 72 65 61 6b 3b 0a 20 20 20 20 70 52 65 63 2d  break;.    pRec-
170b0 2d 3b 0a 20 20 7d 77 68 69 6c 65 28 31 29 3b 0a  -;.  }while(1);.
170c0 0a 20 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f  .  /* EVIDENCE-O
170d0 46 3a 20 52 2d 32 32 35 36 34 2d 31 31 36 34 37  F: R-22564-11647
170e0 20 54 68 65 20 68 65 61 64 65 72 20 62 65 67 69   The header begi
170f0 6e 73 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65  ns with a single
17100 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20 77 68 69   varint.  ** whi
17110 63 68 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68  ch determines th
17120 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  e total number o
17130 66 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 68  f bytes in the h
17140 65 61 64 65 72 2e 20 54 68 65 20 76 61 72 69 6e  eader. The varin
17150 74 0a 20 20 2a 2a 20 76 61 6c 75 65 20 69 73 20  t.  ** value is 
17160 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20  the size of the 
17170 68 65 61 64 65 72 20 69 6e 20 62 79 74 65 73 20  header in bytes 
17180 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 73 69  including the si
17190 7a 65 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20 69  ze varint.  ** i
171a0 74 73 65 6c 66 2e 20 2a 2f 0a 20 20 74 65 73 74  tself. */.  test
171b0 63 61 73 65 28 20 6e 48 64 72 3d 3d 31 32 36 20  case( nHdr==126 
171c0 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e  );.  testcase( n
171d0 48 64 72 3d 3d 31 32 37 20 29 3b 0a 20 20 69 66  Hdr==127 );.  if
171e0 28 20 6e 48 64 72 3c 3d 31 32 36 20 29 7b 0a 20  ( nHdr<=126 ){. 
171f0 20 20 20 2f 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e     /* The common
17200 20 63 61 73 65 20 2a 2f 0a 20 20 20 20 6e 48 64   case */.    nHd
17210 72 20 2b 3d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b  r += 1;.  }else{
17220 0a 20 20 20 20 2f 2a 20 52 61 72 65 20 63 61 73  .    /* Rare cas
17230 65 20 6f 66 20 61 20 72 65 61 6c 6c 79 20 6c 61  e of a really la
17240 72 67 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20  rge header */.  
17250 20 20 6e 56 61 72 69 6e 74 20 3d 20 73 71 6c 69    nVarint = sqli
17260 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64  te3VarintLen(nHd
17270 72 29 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20  r);.    nHdr += 
17280 6e 56 61 72 69 6e 74 3b 0a 20 20 20 20 69 66 28  nVarint;.    if(
17290 20 6e 56 61 72 69 6e 74 3c 73 71 6c 69 74 65 33   nVarint<sqlite3
172a0 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29 20  VarintLen(nHdr) 
172b0 29 20 6e 48 64 72 2b 2b 3b 0a 20 20 7d 0a 20 20  ) nHdr++;.  }.  
172c0 6e 42 79 74 65 20 3d 20 6e 48 64 72 2b 6e 44 61  nByte = nHdr+nDa
172d0 74 61 3b 0a 20 20 69 66 28 20 6e 42 79 74 65 2b  ta;.  if( nByte+
172e0 6e 5a 65 72 6f 3e 64 62 2d 3e 61 4c 69 6d 69 74  nZero>db->aLimit
172f0 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
17300 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74  NGTH] ){.    got
17310 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a  o too_big;.  }..
17320 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74    /* Make sure t
17330 68 65 20 6f 75 74 70 75 74 20 72 65 67 69 73 74  he output regist
17340 65 72 20 68 61 73 20 61 20 62 75 66 66 65 72 20  er has a buffer 
17350 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74 6f 20  large enough to 
17360 73 74 6f 72 65 20 0a 20 20 2a 2a 20 74 68 65 20  store .  ** the 
17370 6e 65 77 20 72 65 63 6f 72 64 2e 20 54 68 65 20  new record. The 
17380 6f 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20  output register 
17390 28 70 4f 70 2d 3e 70 33 29 20 69 73 20 6e 6f 74  (pOp->p3) is not
173a0 20 61 6c 6c 6f 77 65 64 20 74 6f 0a 20 20 2a 2a   allowed to.  **
173b0 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 69   be one of the i
173c0 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 20 28  nput registers (
173d0 62 65 63 61 75 73 65 20 74 68 65 20 66 6f 6c 6c  because the foll
173e0 6f 77 69 6e 67 20 63 61 6c 6c 20 74 6f 0a 20 20  owing call to.  
173f0 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  ** sqlite3VdbeMe
17400 6d 43 6c 65 61 72 41 6e 64 52 65 73 69 7a 65 28  mClearAndResize(
17410 29 20 63 6f 75 6c 64 20 63 6c 6f 62 62 65 72 20  ) could clobber 
17420 74 68 65 20 76 61 6c 75 65 20 62 65 66 6f 72 65  the value before
17430 20 69 74 20 69 73 20 75 73 65 64 29 2e 0a 20 20   it is used)..  
17440 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  */.  if( sqlite3
17450 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52  VdbeMemClearAndR
17460 65 73 69 7a 65 28 70 4f 75 74 2c 20 28 69 6e 74  esize(pOut, (int
17470 29 6e 42 79 74 65 29 20 29 7b 0a 20 20 20 20 67  )nByte) ){.    g
17480 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
17490 20 20 7a 4e 65 77 52 65 63 6f 72 64 20 3d 20 28    zNewRecord = (
174a0 75 38 20 2a 29 70 4f 75 74 2d 3e 7a 3b 0a 0a 20  u8 *)pOut->z;.. 
174b0 20 2f 2a 20 57 72 69 74 65 20 74 68 65 20 72 65   /* Write the re
174c0 63 6f 72 64 20 2a 2f 0a 20 20 69 20 3d 20 70 75  cord */.  i = pu
174d0 74 56 61 72 69 6e 74 33 32 28 7a 4e 65 77 52 65  tVarint32(zNewRe
174e0 63 6f 72 64 2c 20 6e 48 64 72 29 3b 0a 20 20 6a  cord, nHdr);.  j
174f0 20 3d 20 6e 48 64 72 3b 0a 20 20 61 73 73 65 72   = nHdr;.  asser
17500 74 28 20 70 44 61 74 61 30 3c 3d 70 4c 61 73 74  t( pData0<=pLast
17510 20 29 3b 0a 20 20 70 52 65 63 20 3d 20 70 44 61   );.  pRec = pDa
17520 74 61 30 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 73  ta0;.  do{.    s
17530 65 72 69 61 6c 5f 74 79 70 65 20 3d 20 70 52 65  erial_type = pRe
17540 63 2d 3e 75 54 65 6d 70 3b 0a 20 20 20 20 2f 2a  c->uTemp;.    /*
17550 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
17560 30 36 35 32 39 2d 34 37 33 36 32 20 46 6f 6c 6c  06529-47362 Foll
17570 6f 77 69 6e 67 20 74 68 65 20 73 69 7a 65 20 76  owing the size v
17580 61 72 69 6e 74 20 61 72 65 20 6f 6e 65 20 6f 72  arint are one or
17590 20 6d 6f 72 65 0a 20 20 20 20 2a 2a 20 61 64 64   more.    ** add
175a0 69 74 69 6f 6e 61 6c 20 76 61 72 69 6e 74 73 2c  itional varints,
175b0 20 6f 6e 65 20 70 65 72 20 63 6f 6c 75 6d 6e 2e   one per column.
175c0 20 2a 2f 0a 20 20 20 20 69 20 2b 3d 20 70 75 74   */.    i += put
175d0 56 61 72 69 6e 74 33 32 28 26 7a 4e 65 77 52 65  Varint32(&zNewRe
175e0 63 6f 72 64 5b 69 5d 2c 20 73 65 72 69 61 6c 5f  cord[i], serial_
175f0 74 79 70 65 29 3b 20 20 20 20 20 20 20 20 20 20  type);          
17600 20 20 2f 2a 20 73 65 72 69 61 6c 20 74 79 70 65    /* serial type
17610 20 2a 2f 0a 20 20 20 20 2f 2a 20 45 56 49 44 45   */.    /* EVIDE
17620 4e 43 45 2d 4f 46 3a 20 52 2d 36 34 35 33 36 2d  NCE-OF: R-64536-
17630 35 31 37 32 38 20 54 68 65 20 76 61 6c 75 65 73  51728 The values
17640 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
17650 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 0a 20   in the record. 
17660 20 20 20 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c     ** immediatel
17670 79 20 66 6f 6c 6c 6f 77 20 74 68 65 20 68 65 61  y follow the hea
17680 64 65 72 2e 20 2a 2f 0a 20 20 20 20 6a 20 2b 3d  der. */.    j +=
17690 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
176a0 61 6c 50 75 74 28 26 7a 4e 65 77 52 65 63 6f 72  alPut(&zNewRecor
176b0 64 5b 6a 5d 2c 20 70 52 65 63 2c 20 73 65 72 69  d[j], pRec, seri
176c0 61 6c 5f 74 79 70 65 29 3b 20 2f 2a 20 63 6f 6e  al_type); /* con
176d0 74 65 6e 74 20 2a 2f 0a 20 20 7d 77 68 69 6c 65  tent */.  }while
176e0 28 20 28 2b 2b 70 52 65 63 29 3c 3d 70 4c 61 73  ( (++pRec)<=pLas
176f0 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69  t );.  assert( i
17700 3d 3d 6e 48 64 72 20 29 3b 0a 20 20 61 73 73 65  ==nHdr );.  asse
17710 72 74 28 20 6a 3d 3d 6e 42 79 74 65 20 29 3b 0a  rt( j==nByte );.
17720 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
17730 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
17740 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
17750 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70  >nCursor) );.  p
17760 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42  Out->n = (int)nB
17770 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  yte;.  pOut->fla
17780 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 3b 0a 20  gs = MEM_Blob;. 
17790 20 69 66 28 20 6e 5a 65 72 6f 20 29 7b 0a 20 20   if( nZero ){.  
177a0 20 20 70 4f 75 74 2d 3e 75 2e 6e 5a 65 72 6f 20    pOut->u.nZero 
177b0 3d 20 6e 5a 65 72 6f 3b 0a 20 20 20 20 70 4f 75  = nZero;.    pOu
177c0 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f  t->flags |= MEM_
177d0 5a 65 72 6f 3b 0a 20 20 7d 0a 20 20 70 4f 75 74  Zero;.  }.  pOut
177e0 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55  ->enc = SQLITE_U
177f0 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73 65  TF8;  /* In case
17800 20 74 68 65 20 62 6c 6f 62 20 69 73 20 65 76 65   the blob is eve
17810 72 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 74  r converted to t
17820 65 78 74 20 2a 2f 0a 20 20 52 45 47 49 53 54 45  ext */.  REGISTE
17830 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
17840 20 70 4f 75 74 29 3b 0a 20 20 55 50 44 41 54 45   pOut);.  UPDATE
17850 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
17860 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
17870 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 75 6e  ./* Opcode: Coun
17880 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
17890 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
178a0 3d 63 6f 75 6e 74 28 29 0a 2a 2a 0a 2a 2a 20 53  =count().**.** S
178b0 74 6f 72 65 20 74 68 65 20 6e 75 6d 62 65 72 20  tore the number 
178c0 6f 66 20 65 6e 74 72 69 65 73 20 28 61 6e 20 69  of entries (an i
178d0 6e 74 65 67 65 72 20 76 61 6c 75 65 29 20 69 6e  nteger value) in
178e0 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
178f0 64 65 78 20 0a 2a 2a 20 6f 70 65 6e 65 64 20 62  dex .** opened b
17900 79 20 63 75 72 73 6f 72 20 50 31 20 69 6e 20 72  y cursor P1 in r
17910 65 67 69 73 74 65 72 20 50 32 0a 2a 2f 0a 23 69  egister P2.*/.#i
17920 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
17930 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a 63 61 73  T_BTREECOUNT.cas
17940 65 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b 20 20 20  e OP_Count: {   
17950 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
17960 0a 20 20 69 36 34 20 6e 45 6e 74 72 79 3b 0a 20  .  i64 nEntry;. 
17970 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
17980 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  ;..  assert( p->
17990 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e  apCsr[pOp->p1]->
179a0 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
179b0 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 70 43 72  E_BTREE );.  pCr
179c0 73 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  sr = p->apCsr[pO
179d0 70 2d 3e 70 31 5d 2d 3e 75 63 2e 70 43 75 72 73  p->p1]->uc.pCurs
179e0 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  or;.  assert( pC
179f0 72 73 72 20 29 3b 0a 20 20 6e 45 6e 74 72 79 20  rsr );.  nEntry 
17a00 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65  = 0;  /* Not nee
17a10 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20  ded.  Only used 
17a20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72  to silence a war
17a30 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72 63 20 3d 20  ning. */.  rc = 
17a40 73 71 6c 69 74 65 33 42 74 72 65 65 43 6f 75 6e  sqlite3BtreeCoun
17a50 74 28 70 43 72 73 72 2c 20 26 6e 45 6e 74 72 79  t(pCrsr, &nEntry
17a60 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  );.  if( rc ) go
17a70 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
17a80 65 72 72 6f 72 3b 0a 20 20 70 4f 75 74 20 3d 20  error;.  pOut = 
17a90 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
17aa0 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e  , pOp);.  pOut->
17ab0 75 2e 69 20 3d 20 6e 45 6e 74 72 79 3b 0a 20 20  u.i = nEntry;.  
17ac0 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
17ad0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 61 76 65  ./* Opcode: Save
17ae0 70 6f 69 6e 74 20 50 31 20 2a 20 2a 20 50 34 20  point P1 * * P4 
17af0 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c 20 72 65  *.**.** Open, re
17b00 6c 65 61 73 65 20 6f 72 20 72 6f 6c 6c 62 61 63  lease or rollbac
17b10 6b 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20  k the savepoint 
17b20 6e 61 6d 65 64 20 62 79 20 70 61 72 61 6d 65 74  named by paramet
17b30 65 72 20 50 34 2c 20 64 65 70 65 6e 64 69 6e 67  er P4, depending
17b40 0a 2a 2a 20 6f 6e 20 74 68 65 20 76 61 6c 75 65  .** on the value
17b50 20 6f 66 20 50 31 2e 20 54 6f 20 6f 70 65 6e 20   of P1. To open 
17b60 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 2c  a new savepoint,
17b70 20 50 31 3d 3d 30 2e 20 54 6f 20 72 65 6c 65 61   P1==0. To relea
17b80 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 6e 0a 2a  se (commit) an.*
17b90 2a 20 65 78 69 73 74 69 6e 67 20 73 61 76 65 70  * existing savep
17ba0 6f 69 6e 74 2c 20 50 31 3d 3d 31 2c 20 6f 72 20  oint, P1==1, or 
17bb0 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 20 65  to rollback an e
17bc0 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69 6e  xisting savepoin
17bd0 74 20 50 31 3d 3d 32 2e 0a 2a 2f 0a 63 61 73 65  t P1==2..*/.case
17be0 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 3a 20 7b   OP_Savepoint: {
17bf0 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20  .  int p1;      
17c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c10 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f 66 20 50     /* Value of P
17c20 31 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 63  1 operand */.  c
17c30 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
17c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
17c50 2a 20 4e 61 6d 65 20 6f 66 20 73 61 76 65 70 6f  * Name of savepo
17c60 69 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 4e 61  int */.  int nNa
17c70 6d 65 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20  me;.  Savepoint 
17c80 2a 70 4e 65 77 3b 0a 20 20 53 61 76 65 70 6f 69  *pNew;.  Savepoi
17c90 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 0a  nt *pSavepoint;.
17ca0 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 54 6d    Savepoint *pTm
17cb0 70 3b 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f  p;.  int iSavepo
17cc0 69 6e 74 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 0a  int;.  int ii;..
17cd0 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a    p1 = pOp->p1;.
17ce0 20 20 7a 4e 61 6d 65 20 3d 20 70 4f 70 2d 3e 70    zName = pOp->p
17cf0 34 2e 7a 3b 0a 0a 20 20 2f 2a 20 41 73 73 65 72  4.z;..  /* Asser
17d00 74 20 74 68 61 74 20 74 68 65 20 70 31 20 70 61  t that the p1 pa
17d10 72 61 6d 65 74 65 72 20 69 73 20 76 61 6c 69 64  rameter is valid
17d20 2e 20 41 6c 73 6f 20 74 68 61 74 20 69 66 20 74  . Also that if t
17d30 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 0a  here is no open.
17d40 20 20 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e    ** transaction
17d50 2c 20 74 68 65 6e 20 74 68 65 72 65 20 63 61 6e  , then there can
17d60 6e 6f 74 20 62 65 20 61 6e 79 20 73 61 76 65 70  not be any savep
17d70 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f 0a 20 20 61  oints. .  */.  a
17d80 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61 76 65  ssert( db->pSave
17d90 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e  point==0 || db->
17da0 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b  autoCommit==0 );
17db0 0a 20 20 61 73 73 65 72 74 28 20 70 31 3d 3d 53  .  assert( p1==S
17dc0 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 7c 7c  AVEPOINT_BEGIN||
17dd0 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45  p1==SAVEPOINT_RE
17de0 4c 45 41 53 45 7c 7c 70 31 3d 3d 53 41 56 45 50  LEASE||p1==SAVEP
17df0 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 3b  OINT_ROLLBACK );
17e00 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70  .  assert( db->p
17e10 53 61 76 65 70 6f 69 6e 74 20 7c 7c 20 64 62 2d  Savepoint || db-
17e20 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61  >isTransactionSa
17e30 76 65 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a 20 20  vepoint==0 );.  
17e40 61 73 73 65 72 74 28 20 63 68 65 63 6b 53 61 76  assert( checkSav
17e50 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29 20  epointCount(db) 
17e60 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
17e70 62 49 73 52 65 61 64 65 72 20 29 3b 0a 0a 20 20  bIsReader );..  
17e80 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e  if( p1==SAVEPOIN
17e90 54 5f 42 45 47 49 4e 20 29 7b 0a 20 20 20 20 69  T_BEGIN ){.    i
17ea0 66 28 20 64 62 2d 3e 6e 56 64 62 65 57 72 69 74  f( db->nVdbeWrit
17eb0 65 3e 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  e>0 ){.      /* 
17ec0 41 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20  A new savepoint 
17ed0 63 61 6e 6e 6f 74 20 62 65 20 63 72 65 61 74 65  cannot be create
17ee0 64 20 69 66 20 74 68 65 72 65 20 61 72 65 20 61  d if there are a
17ef0 63 74 69 76 65 20 77 72 69 74 65 20 0a 20 20 20  ctive write .   
17f00 20 20 20 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73     ** statements
17f10 20 28 69 2e 65 2e 20 6f 70 65 6e 20 72 65 61 64   (i.e. open read
17f20 2f 77 72 69 74 65 20 69 6e 63 72 65 6d 65 6e 74  /write increment
17f30 61 6c 20 62 6c 6f 62 20 68 61 6e 64 6c 65 73 29  al blob handles)
17f40 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
17f50 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f   sqlite3VdbeErro
17f60 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20 6f 70 65  r(p, "cannot ope
17f70 6e 20 73 61 76 65 70 6f 69 6e 74 20 2d 20 53 51  n savepoint - SQ
17f80 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  L statements in 
17f90 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20  progress");.    
17fa0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55    rc = SQLITE_BU
17fb0 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  SY;.    }else{. 
17fc0 20 20 20 20 20 6e 4e 61 6d 65 20 3d 20 73 71 6c       nName = sql
17fd0 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 4e 61  ite3Strlen30(zNa
17fe0 6d 65 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  me);..#ifndef SQ
17ff0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
18000 4c 54 41 42 4c 45 0a 20 20 20 20 20 20 2f 2a 20  LTABLE.      /* 
18010 54 68 69 73 20 63 61 6c 6c 20 69 73 20 4f 6b 20  This call is Ok 
18020 65 76 65 6e 20 69 66 20 74 68 69 73 20 73 61 76  even if this sav
18030 65 70 6f 69 6e 74 20 69 73 20 61 63 74 75 61 6c  epoint is actual
18040 6c 79 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  ly a transaction
18050 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f  .      ** savepo
18060 69 6e 74 20 28 61 6e 64 20 74 68 65 72 65 66 6f  int (and therefo
18070 72 65 20 73 68 6f 75 6c 64 20 6e 6f 74 20 70 72  re should not pr
18080 6f 6d 70 74 20 78 53 61 76 65 70 6f 69 6e 74 28  ompt xSavepoint(
18090 29 29 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 20 20  )) callbacks..  
180a0 20 20 20 20 2a 2a 20 49 66 20 74 68 69 73 20 69      ** If this i
180b0 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  s a transaction 
180c0 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20  savepoint being 
180d0 6f 70 65 6e 65 64 2c 20 69 74 20 69 73 20 67 75  opened, it is gu
180e0 61 72 61 6e 74 65 65 64 0a 20 20 20 20 20 20 2a  aranteed.      *
180f0 2a 20 74 68 61 74 20 74 68 65 20 64 62 2d 3e 61  * that the db->a
18100 56 54 72 61 6e 73 5b 5d 20 61 72 72 61 79 20 69  VTrans[] array i
18110 73 20 65 6d 70 74 79 2e 20 20 2a 2f 0a 20 20 20  s empty.  */.   
18120 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61     assert( db->a
18130 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20  utoCommit==0 || 
18140 64 62 2d 3e 6e 56 54 72 61 6e 73 3d 3d 30 20 29  db->nVTrans==0 )
18150 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
18160 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e  ite3VtabSavepoin
18170 74 28 64 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f  t(db, SAVEPOINT_
18180 42 45 47 49 4e 2c 0a 20 20 20 20 20 20 20 20 20  BEGIN,.         
18190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
181a0 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74         db->nStat
181b0 65 6d 65 6e 74 2b 64 62 2d 3e 6e 53 61 76 65 70  ement+db->nSavep
181c0 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 69 66 28  oint);.      if(
181d0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
181e0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
181f0 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66  to_error;.#endif
18200 0a 0a 20 20 20 20 20 20 2f 2a 20 43 72 65 61 74  ..      /* Creat
18210 65 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e  e a new savepoin
18220 74 20 73 74 72 75 63 74 75 72 65 2e 20 2a 2f 0a  t structure. */.
18230 20 20 20 20 20 20 70 4e 65 77 20 3d 20 73 71 6c        pNew = sql
18240 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 4e  ite3DbMallocRawN
18250 4e 28 64 62 2c 20 73 69 7a 65 6f 66 28 53 61 76  N(db, sizeof(Sav
18260 65 70 6f 69 6e 74 29 2b 6e 4e 61 6d 65 2b 31 29  epoint)+nName+1)
18270 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4e 65 77  ;.      if( pNew
18280 20 29 7b 0a 20 20 20 20 20 20 20 20 70 4e 65 77   ){.        pNew
18290 2d 3e 7a 4e 61 6d 65 20 3d 20 28 63 68 61 72 20  ->zName = (char 
182a0 2a 29 26 70 4e 65 77 5b 31 5d 3b 0a 20 20 20 20  *)&pNew[1];.    
182b0 20 20 20 20 6d 65 6d 63 70 79 28 70 4e 65 77 2d      memcpy(pNew-
182c0 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 2c 20 6e  >zName, zName, n
182d0 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 0a 20 20  Name+1);.    .  
182e0 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72        /* If ther
182f0 65 20 69 73 20 6e 6f 20 6f 70 65 6e 20 74 72 61  e is no open tra
18300 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20 6d  nsaction, then m
18310 61 72 6b 20 74 68 69 73 20 61 73 20 61 20 73 70  ark this as a sp
18320 65 63 69 61 6c 0a 20 20 20 20 20 20 20 20 2a 2a  ecial.        **
18330 20 22 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61   "transaction sa
18340 76 65 70 6f 69 6e 74 22 2e 20 2a 2f 0a 20 20 20  vepoint". */.   
18350 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61 75 74       if( db->aut
18360 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 20  oCommit ){.     
18370 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d       db->autoCom
18380 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  mit = 0;.       
18390 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63     db->isTransac
183a0 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20  tionSavepoint = 
183b0 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  1;.        }else
183c0 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  {.          db->
183d0 6e 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20  nSavepoint++;.  
183e0 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20        }..       
183f0 20 2f 2a 20 4c 69 6e 6b 20 74 68 65 20 6e 65 77   /* Link the new
18400 20 73 61 76 65 70 6f 69 6e 74 20 69 6e 74 6f 20   savepoint into 
18410 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e  the database han
18420 64 6c 65 27 73 20 6c 69 73 74 2e 20 2a 2f 0a 20  dle's list. */. 
18430 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 70 4e 65         pNew->pNe
18440 78 74 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f  xt = db->pSavepo
18450 69 6e 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d  int;.        db-
18460 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 4e  >pSavepoint = pN
18470 65 77 3b 0a 20 20 20 20 20 20 20 20 70 4e 65 77  ew;.        pNew
18480 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20  ->nDeferredCons 
18490 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43  = db->nDeferredC
184a0 6f 6e 73 3b 0a 20 20 20 20 20 20 20 20 70 4e 65  ons;.        pNe
184b0 77 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  w->nDeferredImmC
184c0 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72  ons = db->nDefer
184d0 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20  redImmCons;.    
184e0 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73    }.    }.  }els
184f0 65 7b 0a 20 20 20 20 69 53 61 76 65 70 6f 69 6e  e{.    iSavepoin
18500 74 20 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a 20 46  t = 0;..    /* F
18510 69 6e 64 20 74 68 65 20 6e 61 6d 65 64 20 73 61  ind the named sa
18520 76 65 70 6f 69 6e 74 2e 20 49 66 20 74 68 65 72  vepoint. If ther
18530 65 20 69 73 20 6e 6f 20 73 75 63 68 20 73 61 76  e is no such sav
18540 65 70 6f 69 6e 74 2c 20 74 68 65 6e 20 61 6e 0a  epoint, then an.
18550 20 20 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20      ** an error 
18560 69 73 20 72 65 74 75 72 6e 65 64 20 74 6f 20 74  is returned to t
18570 68 65 20 75 73 65 72 2e 20 20 2a 2f 0a 20 20 20  he user.  */.   
18580 20 66 6f 72 28 0a 20 20 20 20 20 20 70 53 61 76   for(.      pSav
18590 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 70 53 61  epoint = db->pSa
185a0 76 65 70 6f 69 6e 74 3b 20 0a 20 20 20 20 20 20  vepoint; .      
185b0 70 53 61 76 65 70 6f 69 6e 74 20 26 26 20 73 71  pSavepoint && sq
185c0 6c 69 74 65 33 53 74 72 49 43 6d 70 28 70 53 61  lite3StrICmp(pSa
185d0 76 65 70 6f 69 6e 74 2d 3e 7a 4e 61 6d 65 2c 20  vepoint->zName, 
185e0 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 70 53  zName);.      pS
185f0 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65  avepoint = pSave
18600 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 0a 20 20 20  point->pNext.   
18610 20 29 7b 0a 20 20 20 20 20 20 69 53 61 76 65 70   ){.      iSavep
18620 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20  oint++;.    }.  
18630 20 20 69 66 28 20 21 70 53 61 76 65 70 6f 69 6e    if( !pSavepoin
18640 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  t ){.      sqlit
18650 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22  e3VdbeError(p, "
18660 6e 6f 20 73 75 63 68 20 73 61 76 65 70 6f 69 6e  no such savepoin
18670 74 3a 20 25 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a  t: %s", zName);.
18680 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
18690 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 65 6c  E_ERROR;.    }el
186a0 73 65 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65  se if( db->nVdbe
186b0 57 72 69 74 65 3e 30 20 26 26 20 70 31 3d 3d 53  Write>0 && 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 2f 2a 20 49 74 20   ){.      /* It 
186e0 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20  is not possible 
186f0 74 6f 20 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d  to release (comm
18700 69 74 29 20 61 20 73 61 76 65 70 6f 69 6e 74 20  it) a savepoint 
18710 69 66 20 74 68 65 72 65 20 61 72 65 20 0a 20 20  if there are .  
18720 20 20 20 20 2a 2a 20 61 63 74 69 76 65 20 77 72      ** active wr
18730 69 74 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  ite statements..
18740 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73        */.      s
18750 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28  qlite3VdbeError(
18760 70 2c 20 22 63 61 6e 6e 6f 74 20 72 65 6c 65 61  p, "cannot relea
18770 73 65 20 73 61 76 65 70 6f 69 6e 74 20 2d 20 22  se savepoint - "
18780 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18790 20 20 20 20 20 20 20 20 20 20 20 22 53 51 4c 20             "SQL 
187a0 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72  statements in pr
187b0 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 20 20  ogress");.      
187c0 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
187d0 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 0a 20 20  ;.    }else{..  
187e0 20 20 20 20 2f 2a 20 44 65 74 65 72 6d 69 6e 65      /* Determine
187f0 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
18800 74 68 69 73 20 69 73 20 61 20 74 72 61 6e 73 61  this is a transa
18810 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 2e  ction savepoint.
18820 20 49 66 20 73 6f 2c 0a 20 20 20 20 20 20 2a 2a   If so,.      **
18830 20 61 6e 64 20 74 68 69 73 20 69 73 20 61 20 52   and this is a R
18840 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 2c 20  ELEASE command, 
18850 74 68 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74  then the current
18860 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 0a 20 20   transaction .  
18870 20 20 20 20 2a 2a 20 69 73 20 63 6f 6d 6d 69 74      ** is commit
18880 74 65 64 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20  ted. .      */. 
18890 20 20 20 20 20 69 6e 74 20 69 73 54 72 61 6e 73       int isTrans
188a0 61 63 74 69 6f 6e 20 3d 20 70 53 61 76 65 70 6f  action = pSavepo
188b0 69 6e 74 2d 3e 70 4e 65 78 74 3d 3d 30 20 26 26  int->pNext==0 &&
188c0 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69   db->isTransacti
188d0 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20  onSavepoint;.   
188e0 20 20 20 69 66 28 20 69 73 54 72 61 6e 73 61 63     if( isTransac
188f0 74 69 6f 6e 20 26 26 20 70 31 3d 3d 53 41 56 45  tion && p1==SAVE
18900 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b  POINT_RELEASE ){
18910 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 72 63  .        if( (rc
18920 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68   = sqlite3VdbeCh
18930 65 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53 51  eckFk(p, 1))!=SQ
18940 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
18950 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72       goto vdbe_r
18960 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d  eturn;.        }
18970 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74  .        db->aut
18980 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20  oCommit = 1;.   
18990 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
189a0 56 64 62 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c  VdbeHalt(p)==SQL
189b0 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20  ITE_BUSY ){.    
189c0 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 28 69        p->pc = (i
189d0 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a  nt)(pOp - aOp);.
189e0 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75            db->au
189f0 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20  toCommit = 0;.  
18a00 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20          p->rc = 
18a10 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
18a20 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  ;.          goto
18a30 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
18a40 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
18a50 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f  db->isTransactio
18a60 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a  nSavepoint = 0;.
18a70 20 20 20 20 20 20 20 20 72 63 20 3d 20 70 2d 3e          rc = p->
18a80 72 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  rc;.      }else{
18a90 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69 73 53  .        int isS
18aa0 63 68 65 6d 61 43 68 61 6e 67 65 3b 0a 20 20 20  chemaChange;.   
18ab0 20 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74 20       iSavepoint 
18ac0 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74  = db->nSavepoint
18ad0 20 2d 20 69 53 61 76 65 70 6f 69 6e 74 20 2d 20   - iSavepoint - 
18ae0 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  1;.        if( p
18af0 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c  1==SAVEPOINT_ROL
18b00 4c 42 41 43 4b 20 29 7b 0a 20 20 20 20 20 20 20  LBACK ){.       
18b10 20 20 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67     isSchemaChang
18b20 65 20 3d 20 28 64 62 2d 3e 66 6c 61 67 73 20 26  e = (db->flags &
18b30 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68   SQLITE_InternCh
18b40 61 6e 67 65 73 29 21 3d 30 3b 0a 20 20 20 20 20  anges)!=0;.     
18b50 20 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69       for(ii=0; i
18b60 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29  i<db->nDb; ii++)
18b70 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 63  {.            rc
18b80 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 54   = sqlite3BtreeT
18b90 72 69 70 41 6c 6c 43 75 72 73 6f 72 73 28 64 62  ripAllCursors(db
18ba0 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 0a 20  ->aDb[ii].pBt,. 
18bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18bd0 20 20 20 20 20 20 53 51 4c 49 54 45 5f 41 42 4f        SQLITE_ABO
18be0 52 54 5f 52 4f 4c 4c 42 41 43 4b 2c 0a 20 20 20  RT_ROLLBACK,.   
18bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c10 20 20 20 20 69 73 53 63 68 65 6d 61 43 68 61 6e      isSchemaChan
18c20 67 65 3d 3d 30 29 3b 0a 20 20 20 20 20 20 20 20  ge==0);.        
18c30 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
18c40 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f  TE_OK ) goto abo
18c50 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
18c60 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
18c70 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
18c80 20 20 20 20 20 20 69 73 53 63 68 65 6d 61 43 68        isSchemaCh
18c90 61 6e 67 65 20 3d 20 30 3b 0a 20 20 20 20 20 20  ange = 0;.      
18ca0 20 20 7d 0a 20 20 20 20 20 20 20 20 66 6f 72 28    }.        for(
18cb0 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62  ii=0; ii<db->nDb
18cc0 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  ; ii++){.       
18cd0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
18ce0 74 72 65 65 53 61 76 65 70 6f 69 6e 74 28 64 62  treeSavepoint(db
18cf0 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20 70  ->aDb[ii].pBt, p
18d00 31 2c 20 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a  1, iSavepoint);.
18d10 20 20 20 20 20 20 20 20 20 20 69 66 28 20 72 63            if( rc
18d20 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
18d30 20 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20             goto 
18d40 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
18d50 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  or;.          }.
18d60 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
18d70 20 20 69 66 28 20 69 73 53 63 68 65 6d 61 43 68    if( isSchemaCh
18d80 61 6e 67 65 20 29 7b 0a 20 20 20 20 20 20 20 20  ange ){.        
18d90 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50    sqlite3ExpireP
18da0 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74  reparedStatement
18db0 73 28 64 62 29 3b 0a 20 20 20 20 20 20 20 20 20  s(db);.         
18dc0 20 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c   sqlite3ResetAll
18dd0 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74  SchemasOfConnect
18de0 69 6f 6e 28 64 62 29 3b 0a 20 20 20 20 20 20 20  ion(db);.       
18df0 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 3d 20 28     db->flags = (
18e00 64 62 2d 3e 66 6c 61 67 73 20 7c 20 53 51 4c 49  db->flags | SQLI
18e10 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73  TE_InternChanges
18e20 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
18e30 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a     }.  .      /*
18e40 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77   Regardless of w
18e50 68 65 74 68 65 72 20 74 68 69 73 20 69 73 20 61  hether this is a
18e60 20 52 45 4c 45 41 53 45 20 6f 72 20 52 4f 4c 4c   RELEASE or ROLL
18e70 42 41 43 4b 2c 20 64 65 73 74 72 6f 79 20 61 6c  BACK, destroy al
18e80 6c 20 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65  l .      ** save
18e90 70 6f 69 6e 74 73 20 6e 65 73 74 65 64 20 69 6e  points nested in
18ea0 73 69 64 65 20 6f 66 20 74 68 65 20 73 61 76 65  side of the save
18eb0 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72  point being oper
18ec0 61 74 65 64 20 6f 6e 2e 20 2a 2f 0a 20 20 20 20  ated on. */.    
18ed0 20 20 77 68 69 6c 65 28 20 64 62 2d 3e 70 53 61    while( db->pSa
18ee0 76 65 70 6f 69 6e 74 21 3d 70 53 61 76 65 70 6f  vepoint!=pSavepo
18ef0 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 20 20 70  int ){.        p
18f00 54 6d 70 20 3d 20 64 62 2d 3e 70 53 61 76 65 70  Tmp = db->pSavep
18f10 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20 20 64 62  oint;.        db
18f20 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70  ->pSavepoint = p
18f30 54 6d 70 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20  Tmp->pNext;.    
18f40 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
18f50 65 28 64 62 2c 20 70 54 6d 70 29 3b 0a 20 20 20  e(db, pTmp);.   
18f60 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f       db->nSavepo
18f70 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a  int--;.      }..
18f80 20 20 20 20 20 20 2f 2a 20 49 66 20 69 74 20 69        /* If it i
18f90 73 20 61 20 52 45 4c 45 41 53 45 2c 20 74 68 65  s a RELEASE, the
18fa0 6e 20 64 65 73 74 72 6f 79 20 74 68 65 20 73 61  n destroy the sa
18fb0 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70  vepoint being op
18fc0 65 72 61 74 65 64 20 6f 6e 20 0a 20 20 20 20 20  erated on .     
18fd0 20 2a 2a 20 74 6f 6f 2e 20 49 66 20 69 74 20 69   ** too. If it i
18fe0 73 20 61 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 2c  s a ROLLBACK TO,
18ff0 20 74 68 65 6e 20 73 65 74 20 74 68 65 20 6e 75   then set the nu
19000 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72 65 64  mber of deferred
19010 20 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6e 73 74   .      ** const
19020 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73  raint violations
19030 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20   present in the 
19040 64 61 74 61 62 61 73 65 20 74 6f 20 74 68 65 20  database to the 
19050 76 61 6c 75 65 20 73 74 6f 72 65 64 0a 20 20 20  value stored.   
19060 20 20 20 2a 2a 20 77 68 65 6e 20 74 68 65 20 73     ** when the s
19070 61 76 65 70 6f 69 6e 74 20 77 61 73 20 63 72 65  avepoint was cre
19080 61 74 65 64 2e 20 20 2a 2f 0a 20 20 20 20 20 20  ated.  */.      
19090 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e  if( p1==SAVEPOIN
190a0 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20  T_RELEASE ){.   
190b0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 53 61       assert( pSa
190c0 76 65 70 6f 69 6e 74 3d 3d 64 62 2d 3e 70 53 61  vepoint==db->pSa
190d0 76 65 70 6f 69 6e 74 20 29 3b 0a 20 20 20 20 20  vepoint );.     
190e0 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e     db->pSavepoin
190f0 74 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e  t = pSavepoint->
19100 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 20 20 73  pNext;.        s
19110 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
19120 20 70 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20   pSavepoint);.  
19130 20 20 20 20 20 20 69 66 28 20 21 69 73 54 72 61        if( !isTra
19140 6e 73 61 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20  nsaction ){.    
19150 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70        db->nSavep
19160 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 20 20  oint--;.        
19170 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  }.      }else{. 
19180 20 20 20 20 20 20 20 64 62 2d 3e 6e 44 65 66 65         db->nDefe
19190 72 72 65 64 43 6f 6e 73 20 3d 20 70 53 61 76 65  rredCons = pSave
191a0 70 6f 69 6e 74 2d 3e 6e 44 65 66 65 72 72 65 64  point->nDeferred
191b0 43 6f 6e 73 3b 0a 20 20 20 20 20 20 20 20 64 62  Cons;.        db
191c0 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
191d0 6e 73 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d  ns = pSavepoint-
191e0 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
191f0 73 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  s;.      }..    
19200 20 20 69 66 28 20 21 69 73 54 72 61 6e 73 61 63    if( !isTransac
19210 74 69 6f 6e 20 7c 7c 20 70 31 3d 3d 53 41 56 45  tion || p1==SAVE
19220 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29  POINT_ROLLBACK )
19230 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  {.        rc = s
19240 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f  qlite3VtabSavepo
19250 69 6e 74 28 64 62 2c 20 70 31 2c 20 69 53 61 76  int(db, p1, iSav
19260 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20  epoint);.       
19270 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
19280 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  OK ) goto abort_
19290 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
192a0 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
192b0 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
192c0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
192d0 6f 72 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  or;..  break;.}.
192e0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 75 74 6f  ./* Opcode: Auto
192f0 43 6f 6d 6d 69 74 20 50 31 20 50 32 20 2a 20 2a  Commit P1 P2 * *
19300 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65   *.**.** Set the
19310 20 64 61 74 61 62 61 73 65 20 61 75 74 6f 2d 63   database auto-c
19320 6f 6d 6d 69 74 20 66 6c 61 67 20 74 6f 20 50 31  ommit flag to P1
19330 20 28 31 20 6f 72 20 30 29 2e 20 49 66 20 50 32   (1 or 0). If P2
19340 20 69 73 20 74 72 75 65 2c 20 72 6f 6c 6c 0a 2a   is true, roll.*
19350 2a 20 62 61 63 6b 20 61 6e 79 20 63 75 72 72 65  * back any curre
19360 6e 74 6c 79 20 61 63 74 69 76 65 20 62 74 72 65  ntly active btre
19370 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20  e transactions. 
19380 49 66 20 74 68 65 72 65 20 61 72 65 20 61 6e 79  If there are any
19390 20 61 63 74 69 76 65 0a 2a 2a 20 56 4d 73 20 28   active.** VMs (
193a0 61 70 61 72 74 20 66 72 6f 6d 20 74 68 69 73 20  apart from this 
193b0 6f 6e 65 29 2c 20 74 68 65 6e 20 61 20 52 4f 4c  one), then a ROL
193c0 4c 42 41 43 4b 20 66 61 69 6c 73 2e 20 20 41 20  LBACK fails.  A 
193d0 43 4f 4d 4d 49 54 20 66 61 69 6c 73 20 69 66 0a  COMMIT fails if.
193e0 2a 2a 20 74 68 65 72 65 20 61 72 65 20 61 63 74  ** there are act
193f0 69 76 65 20 77 72 69 74 69 6e 67 20 56 4d 73 20  ive writing VMs 
19400 6f 72 20 61 63 74 69 76 65 20 56 4d 73 20 74 68  or active VMs th
19410 61 74 20 75 73 65 20 73 68 61 72 65 64 20 63 61  at use shared ca
19420 63 68 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  che..**.** This 
19430 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 61 75 73  instruction caus
19440 65 73 20 74 68 65 20 56 4d 20 74 6f 20 68 61 6c  es the VM to hal
19450 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 75  t..*/.case OP_Au
19460 74 6f 43 6f 6d 6d 69 74 3a 20 7b 0a 20 20 69 6e  toCommit: {.  in
19470 74 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  t desiredAutoCom
19480 6d 69 74 3b 0a 20 20 69 6e 74 20 69 52 6f 6c 6c  mit;.  int iRoll
19490 62 61 63 6b 3b 0a 0a 20 20 64 65 73 69 72 65 64  back;..  desired
194a0 41 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 70 4f 70  AutoCommit = pOp
194b0 2d 3e 70 31 3b 0a 20 20 69 52 6f 6c 6c 62 61 63  ->p1;.  iRollbac
194c0 6b 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61  k = pOp->p2;.  a
194d0 73 73 65 72 74 28 20 64 65 73 69 72 65 64 41 75  ssert( desiredAu
194e0 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 64  toCommit==1 || d
194f0 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
19500 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
19510 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
19520 69 74 3d 3d 31 20 7c 7c 20 69 52 6f 6c 6c 62 61  it==1 || iRollba
19530 63 6b 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  ck==0 );.  asser
19540 74 28 20 64 62 2d 3e 6e 56 64 62 65 41 63 74 69  t( db->nVdbeActi
19550 76 65 3e 30 20 29 3b 20 20 2f 2a 20 41 74 20 6c  ve>0 );  /* At l
19560 65 61 73 74 20 74 68 69 73 20 6f 6e 65 20 56 4d  east this one VM
19570 20 69 73 20 61 63 74 69 76 65 20 2a 2f 0a 20 20   is active */.  
19580 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65  assert( p->bIsRe
19590 61 64 65 72 20 29 3b 0a 0a 20 20 69 66 28 20 64  ader );..  if( d
195a0 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
195b0 21 3d 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74  !=db->autoCommit
195c0 20 29 7b 0a 20 20 20 20 69 66 28 20 69 52 6f 6c   ){.    if( iRol
195d0 6c 62 61 63 6b 20 29 7b 0a 20 20 20 20 20 20 61  lback ){.      a
195e0 73 73 65 72 74 28 20 64 65 73 69 72 65 64 41 75  ssert( desiredAu
195f0 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 29 3b 0a 20  toCommit==1 );. 
19600 20 20 20 20 20 73 71 6c 69 74 65 33 52 6f 6c 6c       sqlite3Roll
19610 62 61 63 6b 41 6c 6c 28 64 62 2c 20 53 51 4c 49  backAll(db, SQLI
19620 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43  TE_ABORT_ROLLBAC
19630 4b 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75  K);.      db->au
19640 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20  toCommit = 1;.  
19650 20 20 7d 65 6c 73 65 20 69 66 28 20 64 65 73 69    }else if( desi
19660 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20 26 26  redAutoCommit &&
19670 20 64 62 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e   db->nVdbeWrite>
19680 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66  0 ){.      /* If
19690 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
196a0 6e 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 43  n implements a C
196b0 4f 4d 4d 49 54 20 61 6e 64 20 6f 74 68 65 72 20  OMMIT and other 
196c0 56 4d 73 20 61 72 65 20 77 72 69 74 69 6e 67 0a  VMs are writing.
196d0 20 20 20 20 20 20 2a 2a 20 72 65 74 75 72 6e 20        ** return 
196e0 61 6e 20 65 72 72 6f 72 20 69 6e 64 69 63 61 74  an error indicat
196f0 69 6e 67 20 74 68 61 74 20 74 68 65 20 6f 74 68  ing that the oth
19700 65 72 20 56 4d 73 20 6d 75 73 74 20 63 6f 6d 70  er VMs must comp
19710 6c 65 74 65 20 66 69 72 73 74 2e 20 0a 20 20 20  lete first. .   
19720 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69     */.      sqli
19730 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20  te3VdbeError(p, 
19740 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 74  "cannot commit t
19750 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20  ransaction - ". 
19760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19770 20 20 20 20 20 20 20 20 20 22 53 51 4c 20 73 74           "SQL st
19780 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67  atements in prog
19790 72 65 73 73 22 29 3b 0a 20 20 20 20 20 20 72 63  ress");.      rc
197a0 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
197b0 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
197c0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
197d0 20 20 20 7d 65 6c 73 65 20 69 66 28 20 28 72 63     }else if( (rc
197e0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68   = sqlite3VdbeCh
197f0 65 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53 51  eckFk(p, 1))!=SQ
19800 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
19810 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
19820 6e 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  n;.    }else{.  
19830 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d      db->autoComm
19840 69 74 20 3d 20 28 75 38 29 64 65 73 69 72 65 64  it = (u8)desired
19850 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 20 20  AutoCommit;.    
19860 7d 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  }.    if( sqlite
19870 33 56 64 62 65 48 61 6c 74 28 70 29 3d 3d 53 51  3VdbeHalt(p)==SQ
19880 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20  LITE_BUSY ){.   
19890 20 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e 74 29     p->pc = (int)
198a0 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 20  (pOp - aOp);.   
198b0 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
198c0 74 20 3d 20 28 75 38 29 28 31 2d 64 65 73 69 72  t = (u8)(1-desir
198d0 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3b 0a 20  edAutoCommit);. 
198e0 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20       p->rc = rc 
198f0 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
19900 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72       goto vdbe_r
19910 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20  eturn;.    }.   
19920 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 53 74   assert( db->nSt
19930 61 74 65 6d 65 6e 74 3d 3d 30 20 29 3b 0a 20 20  atement==0 );.  
19940 20 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 53 61    sqlite3CloseSa
19950 76 65 70 6f 69 6e 74 73 28 64 62 29 3b 0a 20 20  vepoints(db);.  
19960 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c    if( p->rc==SQL
19970 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
19980 72 63 20 3d 20 53 51 4c 49 54 45 5f 44 4f 4e 45  rc = SQLITE_DONE
19990 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
199a0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45     rc = SQLITE_E
199b0 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20 20 20  RROR;.    }.    
199c0 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
199d0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
199e0 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28  qlite3VdbeError(
199f0 70 2c 0a 20 20 20 20 20 20 20 20 28 21 64 65 73  p,.        (!des
19a00 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3f  iredAutoCommit)?
19a10 22 63 61 6e 6e 6f 74 20 73 74 61 72 74 20 61 20  "cannot start a 
19a20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 69 74 68  transaction with
19a30 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  in a transaction
19a40 22 3a 28 0a 20 20 20 20 20 20 20 20 28 69 52 6f  ":(.        (iRo
19a50 6c 6c 62 61 63 6b 29 3f 22 63 61 6e 6e 6f 74 20  llback)?"cannot 
19a60 72 6f 6c 6c 62 61 63 6b 20 2d 20 6e 6f 20 74 72  rollback - no tr
19a70 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74  ansaction is act
19a80 69 76 65 22 3a 0a 20 20 20 20 20 20 20 20 20 20  ive":.          
19a90 20 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74           "cannot
19aa0 20 63 6f 6d 6d 69 74 20 2d 20 6e 6f 20 74 72 61   commit - no tra
19ab0 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69  nsaction is acti
19ac0 76 65 22 29 29 3b 0a 20 20 20 20 20 20 20 20 20  ve"));.         
19ad0 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
19ae0 5f 45 52 52 4f 52 3b 0a 20 20 20 20 67 6f 74 6f  _ERROR;.    goto
19af0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
19b00 72 6f 72 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  ror;.  }.  break
19b10 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
19b20 54 72 61 6e 73 61 63 74 69 6f 6e 20 50 31 20 50  Transaction P1 P
19b30 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
19b40 20 42 65 67 69 6e 20 61 20 74 72 61 6e 73 61 63   Begin a transac
19b50 74 69 6f 6e 20 6f 6e 20 64 61 74 61 62 61 73 65  tion on database
19b60 20 50 31 20 69 66 20 61 20 74 72 61 6e 73 61 63   P1 if a transac
19b70 74 69 6f 6e 20 69 73 20 6e 6f 74 20 61 6c 72 65  tion is not alre
19b80 61 64 79 0a 2a 2a 20 61 63 74 69 76 65 2e 0a 2a  ady.** active..*
19b90 2a 20 49 66 20 50 32 20 69 73 20 6e 6f 6e 2d 7a  * If P2 is non-z
19ba0 65 72 6f 2c 20 74 68 65 6e 20 61 20 77 72 69 74  ero, then a writ
19bb0 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  e-transaction is
19bc0 20 73 74 61 72 74 65 64 2c 20 6f 72 20 69 66 20   started, or if 
19bd0 61 20 0a 2a 2a 20 72 65 61 64 2d 74 72 61 6e 73  a .** read-trans
19be0 61 63 74 69 6f 6e 20 69 73 20 61 6c 72 65 61 64  action is alread
19bf0 79 20 61 63 74 69 76 65 2c 20 69 74 20 69 73 20  y active, it is 
19c00 75 70 67 72 61 64 65 64 20 74 6f 20 61 20 77 72  upgraded to a wr
19c10 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 2e  ite-transaction.
19c20 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 7a 65 72  .** If P2 is zer
19c30 6f 2c 20 74 68 65 6e 20 61 20 72 65 61 64 2d 74  o, then a read-t
19c40 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74  ransaction is st
19c50 61 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 31 20  arted..**.** P1 
19c60 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20  is the index of 
19c70 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
19c80 65 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20 74  e on which the t
19c90 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a 2a 2a  ransaction is.**
19ca0 20 73 74 61 72 74 65 64 2e 20 20 49 6e 64 65 78   started.  Index
19cb0 20 30 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64   0 is the main d
19cc0 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64  atabase file and
19cd0 20 69 6e 64 65 78 20 31 20 69 73 20 74 68 65 0a   index 1 is the.
19ce0 2a 2a 20 66 69 6c 65 20 75 73 65 64 20 66 6f 72  ** file used for
19cf0 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
19d00 73 2e 20 20 49 6e 64 69 63 65 73 20 6f 66 20 32  s.  Indices of 2
19d10 20 6f 72 20 6d 6f 72 65 20 61 72 65 20 75 73 65   or more are use
19d20 64 20 66 6f 72 0a 2a 2a 20 61 74 74 61 63 68 65  d for.** attache
19d30 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2a 0a  d databases..**.
19d40 2a 2a 20 49 66 20 61 20 77 72 69 74 65 2d 74 72  ** If a write-tr
19d50 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61  ansaction is sta
19d60 72 74 65 64 20 61 6e 64 20 74 68 65 20 56 64 62  rted and the Vdb
19d70 65 2e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61  e.usesStmtJourna
19d80 6c 20 66 6c 61 67 20 69 73 0a 2a 2a 20 74 72 75  l flag is.** tru
19d90 65 20 28 74 68 69 73 20 66 6c 61 67 20 69 73 20  e (this flag is 
19da0 73 65 74 20 69 66 20 74 68 65 20 56 64 62 65 20  set if the Vdbe 
19db0 6d 61 79 20 6d 6f 64 69 66 79 20 6d 6f 72 65 20  may modify more 
19dc0 74 68 61 6e 20 6f 6e 65 20 72 6f 77 20 61 6e 64  than one row and
19dd0 20 6d 61 79 0a 2a 2a 20 74 68 72 6f 77 20 61 6e   may.** throw an
19de0 20 41 42 4f 52 54 20 65 78 63 65 70 74 69 6f 6e   ABORT exception
19df0 29 2c 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74  ), a statement t
19e00 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 61  ransaction may a
19e10 6c 73 6f 20 62 65 20 6f 70 65 6e 65 64 2e 0a 2a  lso be opened..*
19e20 2a 20 4d 6f 72 65 20 73 70 65 63 69 66 69 63 61  * More specifica
19e30 6c 6c 79 2c 20 61 20 73 74 61 74 65 6d 65 6e 74  lly, a statement
19e40 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
19e50 6f 70 65 6e 65 64 20 69 66 66 20 74 68 65 20 64  opened iff the d
19e60 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65  atabase.** conne
19e70 63 74 69 6f 6e 20 69 73 20 63 75 72 72 65 6e 74  ction is current
19e80 6c 79 20 6e 6f 74 20 69 6e 20 61 75 74 6f 63 6f  ly not in autoco
19e90 6d 6d 69 74 20 6d 6f 64 65 2c 20 6f 72 20 69 66  mmit mode, or if
19ea0 20 74 68 65 72 65 20 61 72 65 20 6f 74 68 65 72   there are other
19eb0 0a 2a 2a 20 61 63 74 69 76 65 20 73 74 61 74 65  .** active state
19ec0 6d 65 6e 74 73 2e 20 41 20 73 74 61 74 65 6d 65  ments. A stateme
19ed0 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61  nt transaction a
19ee0 6c 6c 6f 77 73 20 74 68 65 20 63 68 61 6e 67 65  llows the change
19ef0 73 20 6d 61 64 65 20 62 79 20 74 68 69 73 0a 2a  s made by this.*
19f00 2a 20 56 44 42 45 20 74 6f 20 62 65 20 72 6f 6c  * VDBE to be rol
19f10 6c 65 64 20 62 61 63 6b 20 61 66 74 65 72 20 61  led back after a
19f20 6e 20 65 72 72 6f 72 20 77 69 74 68 6f 75 74 20  n error without 
19f30 68 61 76 69 6e 67 20 74 6f 20 72 6f 6c 6c 20 62  having to roll b
19f40 61 63 6b 20 74 68 65 0a 2a 2a 20 65 6e 74 69 72  ack the.** entir
19f50 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49  e transaction. I
19f60 66 20 6e 6f 20 65 72 72 6f 72 20 69 73 20 65 6e  f no error is en
19f70 63 6f 75 6e 74 65 72 65 64 2c 20 74 68 65 20 73  countered, the s
19f80 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
19f90 74 69 6f 6e 0a 2a 2a 20 77 69 6c 6c 20 61 75 74  tion.** will aut
19fa0 6f 6d 61 74 69 63 61 6c 6c 79 20 63 6f 6d 6d 69  omatically commi
19fb0 74 20 77 68 65 6e 20 74 68 65 20 56 44 42 45 20  t when the VDBE 
19fc0 68 61 6c 74 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  halts..**.** If 
19fd0 50 35 21 3d 30 20 74 68 65 6e 20 74 68 69 73 20  P5!=0 then this 
19fe0 6f 70 63 6f 64 65 20 61 6c 73 6f 20 63 68 65 63  opcode also chec
19ff0 6b 73 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f  ks the schema co
1a000 6f 6b 69 65 20 61 67 61 69 6e 73 74 20 50 33 0a  okie against P3.
1a010 2a 2a 20 61 6e 64 20 74 68 65 20 73 63 68 65 6d  ** and the schem
1a020 61 20 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75  a generation cou
1a030 6e 74 65 72 20 61 67 61 69 6e 73 74 20 50 34 2e  nter against P4.
1a040 0a 2a 2a 20 54 68 65 20 63 6f 6f 6b 69 65 20 63  .** The cookie c
1a050 68 61 6e 67 65 73 20 69 74 73 20 76 61 6c 75 65  hanges its value
1a060 20 77 68 65 6e 65 76 65 72 20 74 68 65 20 64 61   whenever the da
1a070 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 63 68  tabase schema ch
1a080 61 6e 67 65 73 2e 0a 2a 2a 20 54 68 69 73 20 6f  anges..** This o
1a090 70 65 72 61 74 69 6f 6e 20 69 73 20 75 73 65 64  peration is used
1a0a0 20 74 6f 20 64 65 74 65 63 74 20 77 68 65 6e 20   to detect when 
1a0b0 74 68 61 74 20 74 68 65 20 63 6f 6f 6b 69 65 20  that the cookie 
1a0c0 68 61 73 20 63 68 61 6e 67 65 64 0a 2a 2a 20 61  has changed.** a
1a0d0 6e 64 20 74 68 61 74 20 74 68 65 20 63 75 72 72  nd that the curr
1a0e0 65 6e 74 20 70 72 6f 63 65 73 73 20 6e 65 65 64  ent process need
1a0f0 73 20 74 6f 20 72 65 72 65 61 64 20 74 68 65 20  s to reread the 
1a100 73 63 68 65 6d 61 2e 20 20 49 66 20 74 68 65 20  schema.  If the 
1a110 73 63 68 65 6d 61 0a 2a 2a 20 63 6f 6f 6b 69 65  schema.** cookie
1a120 20 69 6e 20 50 33 20 64 69 66 66 65 72 73 20 66   in P3 differs f
1a130 72 6f 6d 20 74 68 65 20 73 63 68 65 6d 61 20 63  rom the schema c
1a140 6f 6f 6b 69 65 20 69 6e 20 74 68 65 20 64 61 74  ookie in the dat
1a150 61 62 61 73 65 20 68 65 61 64 65 72 20 6f 72 0a  abase header or.
1a160 2a 2a 20 69 66 20 74 68 65 20 73 63 68 65 6d 61  ** if the schema
1a170 20 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e   generation coun
1a180 74 65 72 20 69 6e 20 50 34 20 64 69 66 66 65 72  ter in P4 differ
1a190 73 20 66 72 6f 6d 20 74 68 65 20 63 75 72 72 65  s from the curre
1a1a0 6e 74 0a 2a 2a 20 67 65 6e 65 72 61 74 69 6f 6e  nt.** generation
1a1b0 20 63 6f 75 6e 74 65 72 2c 20 74 68 65 6e 20 61   counter, then a
1a1c0 6e 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 20  n SQLITE_SCHEMA 
1a1d0 65 72 72 6f 72 20 69 73 20 72 61 69 73 65 64 20  error is raised 
1a1e0 61 6e 64 20 65 78 65 63 75 74 69 6f 6e 0a 2a 2a  and execution.**
1a1f0 20 68 61 6c 74 73 2e 20 20 54 68 65 20 73 71 6c   halts.  The sql
1a200 69 74 65 33 5f 73 74 65 70 28 29 20 77 72 61 70  ite3_step() wrap
1a210 70 65 72 20 66 75 6e 63 74 69 6f 6e 20 6d 69 67  per function mig
1a220 68 74 20 74 68 65 6e 20 72 65 70 72 65 70 61 72  ht then reprepar
1a230 65 20 74 68 65 0a 2a 2a 20 73 74 61 74 65 6d 65  e the.** stateme
1a240 6e 74 20 61 6e 64 20 72 65 72 75 6e 20 69 74 20  nt and rerun it 
1a250 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69  from the beginni
1a260 6e 67 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54  ng..*/.case OP_T
1a270 72 61 6e 73 61 63 74 69 6f 6e 3a 20 7b 0a 20 20  ransaction: {.  
1a280 42 74 72 65 65 20 2a 70 42 74 3b 0a 20 20 69 6e  Btree *pBt;.  in
1a290 74 20 69 4d 65 74 61 3b 0a 20 20 69 6e 74 20 69  t iMeta;.  int i
1a2a0 47 65 6e 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  Gen;..  assert( 
1a2b0 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a  p->bIsReader );.
1a2c0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
1a2d0 64 4f 6e 6c 79 3d 3d 30 20 7c 7c 20 70 4f 70 2d  dOnly==0 || pOp-
1a2e0 3e 70 32 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  >p2==0 );.  asse
1a2f0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1a300 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
1a310 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44  b );.  assert( D
1a320 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72  bMaskTest(p->btr
1a330 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29  eeMask, pOp->p1)
1a340 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   );.  if( pOp->p
1a350 32 20 26 26 20 28 64 62 2d 3e 66 6c 61 67 73 20  2 && (db->flags 
1a360 26 20 53 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e  & SQLITE_QueryOn
1a370 6c 79 29 21 3d 30 20 29 7b 0a 20 20 20 20 72 63  ly)!=0 ){.    rc
1a380 20 3d 20 53 51 4c 49 54 45 5f 52 45 41 44 4f 4e   = SQLITE_READON
1a390 4c 59 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f  LY;.    goto abo
1a3a0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1a3b0 0a 20 20 7d 0a 20 20 70 42 74 20 3d 20 64 62 2d  .  }.  pBt = db-
1a3c0 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42  >aDb[pOp->p1].pB
1a3d0 74 3b 0a 0a 20 20 69 66 28 20 70 42 74 20 29 7b  t;..  if( pBt ){
1a3e0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
1a3f0 33 42 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73  3BtreeBeginTrans
1a400 28 70 42 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a  (pBt, pOp->p2);.
1a410 20 20 20 20 74 65 73 74 63 61 73 65 28 20 72 63      testcase( rc
1a420 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 5f 53 4e  ==SQLITE_BUSY_SN
1a430 41 50 53 48 4f 54 20 29 3b 0a 20 20 20 20 74 65  APSHOT );.    te
1a440 73 74 63 61 73 65 28 20 72 63 3d 3d 53 51 4c 49  stcase( rc==SQLI
1a450 54 45 5f 42 55 53 59 5f 52 45 43 4f 56 45 52 59  TE_BUSY_RECOVERY
1a460 20 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d   );.    if( rc!=
1a470 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1a480 20 20 20 69 66 28 20 28 72 63 26 30 78 66 66 29     if( (rc&0xff)
1a490 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b  ==SQLITE_BUSY ){
1a4a0 0a 20 20 20 20 20 20 20 20 70 2d 3e 70 63 20 3d  .        p->pc =
1a4b0 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70   (int)(pOp - aOp
1a4c0 29 3b 0a 20 20 20 20 20 20 20 20 70 2d 3e 72 63  );.        p->rc
1a4d0 20 3d 20 72 63 3b 0a 20 20 20 20 20 20 20 20 67   = rc;.        g
1a4e0 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
1a4f0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 67  .      }.      g
1a500 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1a510 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 0a 20  _error;.    }.. 
1a520 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26     if( pOp->p2 &
1a530 26 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75  & p->usesStmtJou
1a540 72 6e 61 6c 20 0a 20 20 20 20 20 26 26 20 28 64  rnal .     && (d
1a550 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30  b->autoCommit==0
1a560 20 7c 7c 20 64 62 2d 3e 6e 56 64 62 65 52 65 61   || db->nVdbeRea
1a570 64 3e 31 29 20 0a 20 20 20 20 29 7b 0a 20 20 20  d>1) .    ){.   
1a580 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
1a590 65 33 42 74 72 65 65 49 73 49 6e 54 72 61 6e 73  e3BtreeIsInTrans
1a5a0 28 70 42 74 29 20 29 3b 0a 20 20 20 20 20 20 69  (pBt) );.      i
1a5b0 66 28 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74  f( p->iStatement
1a5c0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61  ==0 ){.        a
1a5d0 73 73 65 72 74 28 20 64 62 2d 3e 6e 53 74 61 74  ssert( db->nStat
1a5e0 65 6d 65 6e 74 3e 3d 30 20 26 26 20 64 62 2d 3e  ement>=0 && db->
1a5f0 6e 53 61 76 65 70 6f 69 6e 74 3e 3d 30 20 29 3b  nSavepoint>=0 );
1a600 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 74  .        db->nSt
1a610 61 74 65 6d 65 6e 74 2b 2b 3b 20 0a 20 20 20 20  atement++; .    
1a620 20 20 20 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e      p->iStatemen
1a630 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69  t = db->nSavepoi
1a640 6e 74 20 2b 20 64 62 2d 3e 6e 53 74 61 74 65 6d  nt + db->nStatem
1a650 65 6e 74 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  ent;.      }..  
1a660 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1a670 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 64 62  VtabSavepoint(db
1a680 2c 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49  , SAVEPOINT_BEGI
1a690 4e 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74  N, p->iStatement
1a6a0 2d 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  -1);.      if( r
1a6b0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
1a6c0 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
1a6d0 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 53 74  ite3BtreeBeginSt
1a6e0 6d 74 28 70 42 74 2c 20 70 2d 3e 69 53 74 61 74  mt(pBt, p->iStat
1a6f0 65 6d 65 6e 74 29 3b 0a 20 20 20 20 20 20 7d 0a  ement);.      }.
1a700 0a 20 20 20 20 20 20 2f 2a 20 53 74 6f 72 65 20  .      /* Store 
1a710 74 68 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75  the current valu
1a720 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  e of the databas
1a730 65 20 68 61 6e 64 6c 65 73 20 64 65 66 65 72 72  e handles deferr
1a740 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 0a 20 20  ed constraint.  
1a750 20 20 20 20 2a 2a 20 63 6f 75 6e 74 65 72 2e 20      ** counter. 
1a760 49 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  If the statement
1a770 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6e 65 65   transaction nee
1a780 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20  ds to be rolled 
1a790 62 61 63 6b 2c 0a 20 20 20 20 20 20 2a 2a 20 74  back,.      ** t
1a7a0 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73  he value of this
1a7b0 20 63 6f 75 6e 74 65 72 20 6e 65 65 64 73 20 74   counter needs t
1a7c0 6f 20 62 65 20 72 65 73 74 6f 72 65 64 20 74 6f  o be restored to
1a7d0 6f 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70 2d 3e  o.  */.      p->
1a7e0 6e 53 74 6d 74 44 65 66 43 6f 6e 73 20 3d 20 64  nStmtDefCons = d
1a7f0 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  b->nDeferredCons
1a800 3b 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74  ;.      p->nStmt
1a810 44 65 66 49 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d  DefImmCons = db-
1a820 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
1a830 73 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a  s;.    }..    /*
1a840 20 47 61 74 68 65 72 20 74 68 65 20 73 63 68 65   Gather the sche
1a850 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65  ma version numbe
1a860 72 20 66 6f 72 20 63 68 65 63 6b 69 6e 67 3a 0a  r for checking:.
1a870 20 20 20 20 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54      ** IMPLEMENT
1a880 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 30 33 31 38  ATION-OF: R-0318
1a890 39 2d 35 31 31 33 35 20 41 73 20 65 61 63 68 20  9-51135 As each 
1a8a0 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 72 75  SQL statement ru
1a8b0 6e 73 2c 20 74 68 65 20 73 63 68 65 6d 61 0a 20  ns, the schema. 
1a8c0 20 20 20 2a 2a 20 76 65 72 73 69 6f 6e 20 69 73     ** version is
1a8d0 20 63 68 65 63 6b 65 64 20 74 6f 20 65 6e 73 75   checked to ensu
1a8e0 72 65 20 74 68 61 74 20 74 68 65 20 73 63 68 65  re that the sche
1a8f0 6d 61 20 68 61 73 20 6e 6f 74 20 63 68 61 6e 67  ma has not chang
1a900 65 64 20 73 69 6e 63 65 20 74 68 65 0a 20 20 20  ed since the.   
1a910 20 2a 2a 20 53 51 4c 20 73 74 61 74 65 6d 65 6e   ** SQL statemen
1a920 74 20 77 61 73 20 70 72 65 70 61 72 65 64 2e 0a  t was prepared..
1a930 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74      */.    sqlit
1a940 65 33 42 74 72 65 65 47 65 74 4d 65 74 61 28 70  e3BtreeGetMeta(p
1a950 42 74 2c 20 42 54 52 45 45 5f 53 43 48 45 4d 41  Bt, BTREE_SCHEMA
1a960 5f 56 45 52 53 49 4f 4e 2c 20 28 75 33 32 20 2a  _VERSION, (u32 *
1a970 29 26 69 4d 65 74 61 29 3b 0a 20 20 20 20 69 47  )&iMeta);.    iG
1a980 65 6e 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70  en = db->aDb[pOp
1a990 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 69  ->p1].pSchema->i
1a9a0 47 65 6e 65 72 61 74 69 6f 6e 3b 0a 20 20 7d 65  Generation;.  }e
1a9b0 6c 73 65 7b 0a 20 20 20 20 69 47 65 6e 20 3d 20  lse{.    iGen = 
1a9c0 69 4d 65 74 61 20 3d 20 30 3b 0a 20 20 7d 0a 20  iMeta = 0;.  }. 
1a9d0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35   assert( pOp->p5
1a9e0 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 74 79  ==0 || pOp->p4ty
1a9f0 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a  pe==P4_INT32 );.
1aa00 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 26    if( pOp->p5 &&
1aa10 20 28 69 4d 65 74 61 21 3d 70 4f 70 2d 3e 70 33   (iMeta!=pOp->p3
1aa20 20 7c 7c 20 69 47 65 6e 21 3d 70 4f 70 2d 3e 70   || iGen!=pOp->p
1aa30 34 2e 69 29 20 29 7b 0a 20 20 20 20 73 71 6c 69  4.i) ){.    sqli
1aa40 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d  te3DbFree(db, p-
1aa50 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 70  >zErrMsg);.    p
1aa60 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69  ->zErrMsg = sqli
1aa70 74 65 33 44 62 53 74 72 44 75 70 28 64 62 2c 20  te3DbStrDup(db, 
1aa80 22 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61  "database schema
1aa90 20 68 61 73 20 63 68 61 6e 67 65 64 22 29 3b 0a   has changed");.
1aaa0 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 73 63      /* If the sc
1aab0 68 65 6d 61 2d 63 6f 6f 6b 69 65 20 66 72 6f 6d  hema-cookie from
1aac0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
1aad0 6c 65 20 6d 61 74 63 68 65 73 20 74 68 65 20 63  le matches the c
1aae0 6f 6f 6b 69 65 20 0a 20 20 20 20 2a 2a 20 73 74  ookie .    ** st
1aaf0 6f 72 65 64 20 77 69 74 68 20 74 68 65 20 69 6e  ored with the in
1ab00 2d 6d 65 6d 6f 72 79 20 72 65 70 72 65 73 65 6e  -memory represen
1ab10 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 63  tation of the sc
1ab20 68 65 6d 61 2c 20 64 6f 0a 20 20 20 20 2a 2a 20  hema, do.    ** 
1ab30 6e 6f 74 20 72 65 6c 6f 61 64 20 74 68 65 20 73  not reload the s
1ab40 63 68 65 6d 61 20 66 72 6f 6d 20 74 68 65 20 64  chema from the d
1ab50 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20  atabase file..  
1ab60 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 49 66 20 76    **.    ** If v
1ab70 69 72 74 75 61 6c 2d 74 61 62 6c 65 73 20 61 72  irtual-tables ar
1ab80 65 20 69 6e 20 75 73 65 2c 20 74 68 69 73 20 69  e in use, this i
1ab90 73 20 6e 6f 74 20 6a 75 73 74 20 61 6e 20 6f 70  s not just an op
1aba0 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a 20 20 20 20  timization..    
1abb0 2a 2a 20 4f 66 74 65 6e 2c 20 76 2d 74 61 62 6c  ** Often, v-tabl
1abc0 65 73 20 73 74 6f 72 65 20 74 68 65 69 72 20 64  es store their d
1abd0 61 74 61 20 69 6e 20 6f 74 68 65 72 20 53 51 4c  ata in other SQL
1abe0 69 74 65 20 74 61 62 6c 65 73 2c 20 77 68 69 63  ite tables, whic
1abf0 68 0a 20 20 20 20 2a 2a 20 61 72 65 20 71 75 65  h.    ** are que
1ac00 72 69 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  ried from within
1ac10 20 78 4e 65 78 74 28 29 20 61 6e 64 20 6f 74 68   xNext() and oth
1ac20 65 72 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f  er v-table metho
1ac30 64 73 20 75 73 69 6e 67 0a 20 20 20 20 2a 2a 20  ds using.    ** 
1ac40 70 72 65 70 61 72 65 64 20 71 75 65 72 69 65 73  prepared queries
1ac50 2e 20 49 66 20 73 75 63 68 20 61 20 71 75 65 72  . If such a quer
1ac60 79 20 69 73 20 6f 75 74 2d 6f 66 2d 64 61 74 65  y is out-of-date
1ac70 2c 20 77 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74  , we do not want
1ac80 20 74 6f 0a 20 20 20 20 2a 2a 20 64 69 73 63 61   to.    ** disca
1ac90 72 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20  rd the database 
1aca0 73 63 68 65 6d 61 2c 20 61 73 20 74 68 65 20 75  schema, as the u
1acb0 73 65 72 20 63 6f 64 65 20 69 6d 70 6c 65 6d 65  ser code impleme
1acc0 6e 74 69 6e 67 20 74 68 65 0a 20 20 20 20 2a 2a  nting the.    **
1acd0 20 76 2d 74 61 62 6c 65 20 77 6f 75 6c 64 20 68   v-table would h
1ace0 61 76 65 20 74 6f 20 62 65 20 72 65 61 64 79 20  ave to be ready 
1acf0 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33 5f  for the sqlite3_
1ad00 76 74 61 62 20 73 74 72 75 63 74 75 72 65 20 69  vtab structure i
1ad10 74 73 65 6c 66 0a 20 20 20 20 2a 2a 20 74 6f 20  tself.    ** to 
1ad20 62 65 20 69 6e 76 61 6c 69 64 61 74 65 64 20 77  be invalidated w
1ad30 68 65 6e 65 76 65 72 20 73 71 6c 69 74 65 33 5f  henever sqlite3_
1ad40 73 74 65 70 28 29 20 69 73 20 63 61 6c 6c 65 64  step() is called
1ad50 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 0a 20 20   from within .  
1ad60 20 20 2a 2a 20 61 20 76 2d 74 61 62 6c 65 20 6d    ** a v-table m
1ad70 65 74 68 6f 64 2e 0a 20 20 20 20 2a 2f 0a 20 20  ethod..    */.  
1ad80 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 70 4f    if( db->aDb[pO
1ad90 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e  p->p1].pSchema->
1ada0 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 21 3d 69  schema_cookie!=i
1adb0 4d 65 74 61 20 29 7b 0a 20 20 20 20 20 20 73 71  Meta ){.      sq
1adc0 6c 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68  lite3ResetOneSch
1add0 65 6d 61 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29  ema(db, pOp->p1)
1ade0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 2d 3e 65  ;.    }.    p->e
1adf0 78 70 69 72 65 64 20 3d 20 31 3b 0a 20 20 20 20  xpired = 1;.    
1ae00 72 63 20 3d 20 53 51 4c 49 54 45 5f 53 43 48 45  rc = SQLITE_SCHE
1ae10 4d 41 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63  MA;.  }.  if( rc
1ae20 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
1ae30 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72  e_to_error;.  br
1ae40 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1ae50 65 3a 20 52 65 61 64 43 6f 6f 6b 69 65 20 50 31  e: ReadCookie P1
1ae60 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
1ae70 20 52 65 61 64 20 63 6f 6f 6b 69 65 20 6e 75 6d   Read cookie num
1ae80 62 65 72 20 50 33 20 66 72 6f 6d 20 64 61 74 61  ber P3 from data
1ae90 62 61 73 65 20 50 31 20 61 6e 64 20 77 72 69 74  base P1 and writ
1aea0 65 20 69 74 20 69 6e 74 6f 20 72 65 67 69 73 74  e it into regist
1aeb0 65 72 20 50 32 2e 0a 2a 2a 20 50 33 3d 3d 31 20  er P2..** P3==1 
1aec0 69 73 20 74 68 65 20 73 63 68 65 6d 61 20 76 65  is the schema ve
1aed0 72 73 69 6f 6e 2e 20 20 50 33 3d 3d 32 20 69 73  rsion.  P3==2 is
1aee0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 6f   the database fo
1aef0 72 6d 61 74 2e 0a 2a 2a 20 50 33 3d 3d 33 20 69  rmat..** P3==3 i
1af00 73 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65  s the recommende
1af10 64 20 70 61 67 65 72 20 63 61 63 68 65 20 73 69  d pager cache si
1af20 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68  ze, and so forth
1af30 2e 20 20 50 31 3d 3d 30 20 69 73 0a 2a 2a 20 74  .  P1==0 is.** t
1af40 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
1af50 20 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20   file and P1==1 
1af60 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  is the database 
1af70 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f  file used to sto
1af80 72 65 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20  re.** temporary 
1af90 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  tables..**.** Th
1afa0 65 72 65 20 6d 75 73 74 20 62 65 20 61 20 72 65  ere must be a re
1afb0 61 64 2d 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64  ad-lock on the d
1afc0 61 74 61 62 61 73 65 20 28 65 69 74 68 65 72 20  atabase (either 
1afd0 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a  a transaction.**
1afe0 20 6d 75 73 74 20 62 65 20 73 74 61 72 74 65 64   must be started
1aff0 20 6f 72 20 74 68 65 72 65 20 6d 75 73 74 20 62   or there must b
1b000 65 20 61 6e 20 6f 70 65 6e 20 63 75 72 73 6f 72  e an open cursor
1b010 29 20 62 65 66 6f 72 65 0a 2a 2a 20 65 78 65 63  ) before.** exec
1b020 75 74 69 6e 67 20 74 68 69 73 20 69 6e 73 74 72  uting this instr
1b030 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
1b040 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 3a 20 7b  OP_ReadCookie: {
1b050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1b060 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20  * out2 */.  int 
1b070 69 4d 65 74 61 3b 0a 20 20 69 6e 74 20 69 44 62  iMeta;.  int iDb
1b080 3b 0a 20 20 69 6e 74 20 69 43 6f 6f 6b 69 65 3b  ;.  int iCookie;
1b090 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62  ..  assert( p->b
1b0a0 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 69 44  IsReader );.  iD
1b0b0 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69  b = pOp->p1;.  i
1b0c0 43 6f 6f 6b 69 65 20 3d 20 70 4f 70 2d 3e 70 33  Cookie = pOp->p3
1b0d0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1b0e0 3e 70 33 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52  >p3<SQLITE_N_BTR
1b0f0 45 45 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73 73  EE_META );.  ass
1b100 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69  ert( iDb>=0 && i
1b110 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  Db<db->nDb );.  
1b120 61 73 73 65 72 74 28 20 64 62 2d 3e 61 44 62 5b  assert( db->aDb[
1b130 69 44 62 5d 2e 70 42 74 21 3d 30 20 29 3b 0a 20  iDb].pBt!=0 );. 
1b140 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
1b150 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
1b160 2c 20 69 44 62 29 20 29 3b 0a 0a 20 20 73 71 6c  , iDb) );..  sql
1b170 69 74 65 33 42 74 72 65 65 47 65 74 4d 65 74 61  ite3BtreeGetMeta
1b180 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42  (db->aDb[iDb].pB
1b190 74 2c 20 69 43 6f 6f 6b 69 65 2c 20 28 75 33 32  t, iCookie, (u32
1b1a0 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20 70 4f   *)&iMeta);.  pO
1b1b0 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
1b1c0 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70  ase(p, pOp);.  p
1b1d0 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 4d 65 74 61  Out->u.i = iMeta
1b1e0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1b1f0 20 4f 70 63 6f 64 65 3a 20 53 65 74 43 6f 6f 6b   Opcode: SetCook
1b200 69 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ie P1 P2 P3 * *.
1b210 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20  **.** Write the 
1b220 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50 33  integer value P3
1b230 20 69 6e 74 6f 20 63 6f 6f 6b 69 65 20 6e 75 6d   into cookie num
1b240 62 65 72 20 50 32 20 6f 66 20 64 61 74 61 62 61  ber P2 of databa
1b250 73 65 20 50 31 2e 0a 2a 2a 20 50 32 3d 3d 31 20  se P1..** P2==1 
1b260 69 73 20 74 68 65 20 73 63 68 65 6d 61 20 76 65  is the schema ve
1b270 72 73 69 6f 6e 2e 20 20 50 32 3d 3d 32 20 69 73  rsion.  P2==2 is
1b280 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 6f   the database fo
1b290 72 6d 61 74 2e 0a 2a 2a 20 50 32 3d 3d 33 20 69  rmat..** P2==3 i
1b2a0 73 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65  s the recommende
1b2b0 64 20 70 61 67 65 72 20 63 61 63 68 65 20 0a 2a  d pager cache .*
1b2c0 2a 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66  * size, and so f
1b2d0 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69 73 20  orth.  P1==0 is 
1b2e0 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
1b2f0 65 20 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31  e file and P1==1
1b300 20 69 73 20 74 68 65 20 0a 2a 2a 20 64 61 74 61   is the .** data
1b310 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20 74  base file used t
1b320 6f 20 73 74 6f 72 65 20 74 65 6d 70 6f 72 61 72  o store temporar
1b330 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20  y tables..**.** 
1b340 41 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 75  A transaction mu
1b350 73 74 20 62 65 20 73 74 61 72 74 65 64 20 62 65  st be started be
1b360 66 6f 72 65 20 65 78 65 63 75 74 69 6e 67 20 74  fore executing t
1b370 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63  his opcode..*/.c
1b380 61 73 65 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65  ase OP_SetCookie
1b390 3a 20 7b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 20  : {.  Db *pDb;. 
1b3a0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
1b3b0 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f  <SQLITE_N_BTREE_
1b3c0 4d 45 54 41 20 29 3b 0a 20 20 61 73 73 65 72 74  META );.  assert
1b3d0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
1b3e0 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20  pOp->p1<db->nDb 
1b3f0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d  );.  assert( DbM
1b400 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65  askTest(p->btree
1b410 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29  Mask, pOp->p1) )
1b420 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  ;.  assert( p->r
1b430 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20  eadOnly==0 );.  
1b440 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70  pDb = &db->aDb[p
1b450 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
1b460 74 28 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29  t( pDb->pBt!=0 )
1b470 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69  ;.  assert( sqli
1b480 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65  te3SchemaMutexHe
1b490 6c 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  ld(db, pOp->p1, 
1b4a0 30 29 20 29 3b 0a 20 20 2f 2a 20 53 65 65 20 6e  0) );.  /* See n
1b4b0 6f 74 65 20 61 62 6f 75 74 20 69 6e 64 65 78 20  ote about index 
1b4c0 73 68 69 66 74 69 6e 67 20 6f 6e 20 4f 50 5f 52  shifting on OP_R
1b4d0 65 61 64 43 6f 6f 6b 69 65 20 2a 2f 0a 20 20 72  eadCookie */.  r
1b4e0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1b4f0 55 70 64 61 74 65 4d 65 74 61 28 70 44 62 2d 3e  UpdateMeta(pDb->
1b500 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 70 4f  pBt, pOp->p2, pO
1b510 70 2d 3e 70 33 29 3b 0a 20 20 69 66 28 20 70 4f  p->p3);.  if( pO
1b520 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 53 43 48  p->p2==BTREE_SCH
1b530 45 4d 41 5f 56 45 52 53 49 4f 4e 20 29 7b 0a 20  EMA_VERSION ){. 
1b540 20 20 20 2f 2a 20 57 68 65 6e 20 74 68 65 20 73     /* When the s
1b550 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68 61  chema cookie cha
1b560 6e 67 65 73 2c 20 72 65 63 6f 72 64 20 74 68 65  nges, record the
1b570 20 6e 65 77 20 63 6f 6f 6b 69 65 20 69 6e 74 65   new cookie inte
1b580 72 6e 61 6c 6c 79 20 2a 2f 0a 20 20 20 20 70 44  rnally */.    pD
1b590 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65  b->pSchema->sche
1b5a0 6d 61 5f 63 6f 6f 6b 69 65 20 3d 20 70 4f 70 2d  ma_cookie = pOp-
1b5b0 3e 70 33 3b 0a 20 20 20 20 64 62 2d 3e 66 6c 61  >p3;.    db->fla
1b5c0 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f 49 6e 74  gs |= SQLITE_Int
1b5d0 65 72 6e 43 68 61 6e 67 65 73 3b 0a 20 20 7d 65  ernChanges;.  }e
1b5e0 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d  lse if( pOp->p2=
1b5f0 3d 42 54 52 45 45 5f 46 49 4c 45 5f 46 4f 52 4d  =BTREE_FILE_FORM
1b600 41 54 20 29 7b 0a 20 20 20 20 2f 2a 20 52 65 63  AT ){.    /* Rec
1b610 6f 72 64 20 63 68 61 6e 67 65 73 20 69 6e 20 74  ord changes in t
1b620 68 65 20 66 69 6c 65 20 66 6f 72 6d 61 74 20 2a  he file format *
1b630 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65  /.    pDb->pSche
1b640 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20  ma->file_format 
1b650 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 20  = pOp->p3;.  }. 
1b660 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 31 20   if( pOp->p1==1 
1b670 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 76 61 6c 69  ){.    /* Invali
1b680 64 61 74 65 20 61 6c 6c 20 70 72 65 70 61 72 65  date all prepare
1b690 64 20 73 74 61 74 65 6d 65 6e 74 73 20 77 68 65  d statements whe
1b6a0 6e 65 76 65 72 20 74 68 65 20 54 45 4d 50 20 64  never the TEMP d
1b6b0 61 74 61 62 61 73 65 0a 20 20 20 20 2a 2a 20 73  atabase.    ** s
1b6c0 63 68 65 6d 61 20 69 73 20 63 68 61 6e 67 65 64  chema is changed
1b6d0 2e 20 20 54 69 63 6b 65 74 20 23 31 36 34 34 20  .  Ticket #1644 
1b6e0 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 45 78  */.    sqlite3Ex
1b6f0 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74  pirePreparedStat
1b700 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20  ements(db);.    
1b710 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 30 3b 0a  p->expired = 0;.
1b720 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67    }.  if( rc ) g
1b730 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1b740 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b  _error;.  break;
1b750 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .}../* Opcode: O
1b760 70 65 6e 52 65 61 64 20 50 31 20 50 32 20 50 33  penRead P1 P2 P3
1b770 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
1b780 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d  is: root=P2 iDb=
1b790 50 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20  P3.**.** Open a 
1b7a0 72 65 61 64 2d 6f 6e 6c 79 20 63 75 72 73 6f 72  read-only cursor
1b7b0 20 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73   for the databas
1b7c0 65 20 74 61 62 6c 65 20 77 68 6f 73 65 20 72 6f  e table whose ro
1b7d0 6f 74 20 70 61 67 65 20 69 73 0a 2a 2a 20 50 32  ot page is.** P2
1b7e0 20 69 6e 20 61 20 64 61 74 61 62 61 73 65 20 66   in a database f
1b7f0 69 6c 65 2e 20 20 54 68 65 20 64 61 74 61 62 61  ile.  The databa
1b800 73 65 20 66 69 6c 65 20 69 73 20 64 65 74 65 72  se file is deter
1b810 6d 69 6e 65 64 20 62 79 20 50 33 2e 20 0a 2a 2a  mined by P3. .**
1b820 20 50 33 3d 3d 30 20 6d 65 61 6e 73 20 74 68 65   P3==0 means the
1b830 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20   main database, 
1b840 50 33 3d 3d 31 20 6d 65 61 6e 73 20 74 68 65 20  P3==1 means the 
1b850 64 61 74 61 62 61 73 65 20 75 73 65 64 20 66 6f  database used fo
1b860 72 20 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20  r .** temporary 
1b870 74 61 62 6c 65 73 2c 20 61 6e 64 20 50 33 3e 31  tables, and P3>1
1b880 20 6d 65 61 6e 73 20 75 73 65 64 20 74 68 65 20   means used the 
1b890 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 61 74  corresponding at
1b8a0 74 61 63 68 65 64 0a 2a 2a 20 64 61 74 61 62 61  tached.** databa
1b8b0 73 65 2e 20 20 47 69 76 65 20 74 68 65 20 6e 65  se.  Give the ne
1b8c0 77 20 63 75 72 73 6f 72 20 61 6e 20 69 64 65 6e  w cursor an iden
1b8d0 74 69 66 69 65 72 20 6f 66 20 50 31 2e 20 20 54  tifier of P1.  T
1b8e0 68 65 20 50 31 0a 2a 2a 20 76 61 6c 75 65 73 20  he P1.** values 
1b8f0 6e 65 65 64 20 6e 6f 74 20 62 65 20 63 6f 6e 74  need not be cont
1b900 69 67 75 6f 75 73 20 62 75 74 20 61 6c 6c 20 50  iguous but all P
1b910 31 20 76 61 6c 75 65 73 20 73 68 6f 75 6c 64 20  1 values should 
1b920 62 65 20 73 6d 61 6c 6c 20 69 6e 74 65 67 65 72  be small integer
1b930 73 2e 0a 2a 2a 20 49 74 20 69 73 20 61 6e 20 65  s..** It is an e
1b940 72 72 6f 72 20 66 6f 72 20 50 31 20 74 6f 20 62  rror for P1 to b
1b950 65 20 6e 65 67 61 74 69 76 65 2e 0a 2a 2a 0a 2a  e negative..**.*
1b960 2a 20 49 66 20 50 35 21 3d 30 20 74 68 65 6e 20  * If P5!=0 then 
1b970 75 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  use the content 
1b980 6f 66 20 72 65 67 69 73 74 65 72 20 50 32 20 61  of register P2 a
1b990 73 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 2c  s the root page,
1b9a0 20 6e 6f 74 0a 2a 2a 20 74 68 65 20 76 61 6c 75   not.** the valu
1b9b0 65 20 6f 66 20 50 32 20 69 74 73 65 6c 66 2e 0a  e of P2 itself..
1b9c0 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 77 69 6c 6c  **.** There will
1b9d0 20 62 65 20 61 20 72 65 61 64 20 6c 6f 63 6b 20   be a read lock 
1b9e0 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  on the database 
1b9f0 77 68 65 6e 65 76 65 72 20 74 68 65 72 65 20 69  whenever there i
1ba00 73 20 61 6e 0a 2a 2a 20 6f 70 65 6e 20 63 75 72  s an.** open cur
1ba10 73 6f 72 2e 20 20 49 66 20 74 68 65 20 64 61 74  sor.  If the dat
1ba20 61 62 61 73 65 20 77 61 73 20 75 6e 6c 6f 63 6b  abase was unlock
1ba30 65 64 20 70 72 69 6f 72 20 74 6f 20 74 68 69 73  ed prior to this
1ba40 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20   instruction.** 
1ba50 74 68 65 6e 20 61 20 72 65 61 64 20 6c 6f 63 6b  then a read lock
1ba60 20 69 73 20 61 63 71 75 69 72 65 64 20 61 73 20   is acquired as 
1ba70 70 61 72 74 20 6f 66 20 74 68 69 73 20 69 6e 73  part of this ins
1ba80 74 72 75 63 74 69 6f 6e 2e 20 20 41 20 72 65 61  truction.  A rea
1ba90 64 0a 2a 2a 20 6c 6f 63 6b 20 61 6c 6c 6f 77 73  d.** lock allows
1baa0 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73 65 73   other processes
1bab0 20 74 6f 20 72 65 61 64 20 74 68 65 20 64 61 74   to read the dat
1bac0 61 62 61 73 65 20 62 75 74 20 70 72 6f 68 69 62  abase but prohib
1bad0 69 74 73 0a 2a 2a 20 61 6e 79 20 6f 74 68 65 72  its.** any other
1bae0 20 70 72 6f 63 65 73 73 20 66 72 6f 6d 20 6d 6f   process from mo
1baf0 64 69 66 79 69 6e 67 20 74 68 65 20 64 61 74 61  difying the data
1bb00 62 61 73 65 2e 20 20 54 68 65 20 72 65 61 64 20  base.  The read 
1bb10 6c 6f 63 6b 20 69 73 0a 2a 2a 20 72 65 6c 65 61  lock is.** relea
1bb20 73 65 64 20 77 68 65 6e 20 61 6c 6c 20 63 75 72  sed when all cur
1bb30 73 6f 72 73 20 61 72 65 20 63 6c 6f 73 65 64 2e  sors are closed.
1bb40 20 20 49 66 20 74 68 69 73 20 69 6e 73 74 72 75    If this instru
1bb50 63 74 69 6f 6e 20 61 74 74 65 6d 70 74 73 0a 2a  ction attempts.*
1bb60 2a 20 74 6f 20 67 65 74 20 61 20 72 65 61 64 20  * to get a read 
1bb70 6c 6f 63 6b 20 62 75 74 20 66 61 69 6c 73 2c 20  lock but fails, 
1bb80 74 68 65 20 73 63 72 69 70 74 20 74 65 72 6d 69  the script termi
1bb90 6e 61 74 65 73 20 77 69 74 68 20 61 6e 0a 2a 2a  nates with an.**
1bba0 20 53 51 4c 49 54 45 5f 42 55 53 59 20 65 72 72   SQLITE_BUSY err
1bbb0 6f 72 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54  or code..**.** T
1bbc0 68 65 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20  he P4 value may 
1bbd0 62 65 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74  be either an int
1bbe0 65 67 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20  eger (P4_INT32) 
1bbf0 6f 72 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a  or a pointer to.
1bc00 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72  ** a KeyInfo str
1bc10 75 63 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e  ucture (P4_KEYIN
1bc20 46 4f 29 2e 20 49 66 20 69 74 20 69 73 20 61 20  FO). If it is a 
1bc30 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79  pointer to a Key
1bc40 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75  Info .** structu
1bc50 72 65 2c 20 74 68 65 6e 20 73 61 69 64 20 73 74  re, then said st
1bc60 72 75 63 74 75 72 65 20 64 65 66 69 6e 65 73 20  ructure defines 
1bc70 74 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20  the content and 
1bc80 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65  collating .** se
1bc90 71 75 65 6e 63 65 20 6f 66 20 74 68 65 20 69 6e  quence of the in
1bca0 64 65 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64  dex being opened
1bcb0 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20  . Otherwise, if 
1bcc0 50 34 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72  P4 is an integer
1bcd0 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20 69   .** value, it i
1bce0 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d  s set to the num
1bcf0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
1bd00 6e 20 74 68 65 20 74 61 62 6c 65 2e 0a 2a 2a 0a  n the table..**.
1bd10 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4f 70 65  ** See also: Ope
1bd20 6e 57 72 69 74 65 2c 20 52 65 6f 70 65 6e 49 64  nWrite, ReopenId
1bd30 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  x.*/./* Opcode: 
1bd40 52 65 6f 70 65 6e 49 64 78 20 50 31 20 50 32 20  ReopenIdx P1 P2 
1bd50 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
1bd60 70 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44  psis: root=P2 iD
1bd70 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52  b=P3.**.** The R
1bd80 65 6f 70 65 6e 49 64 78 20 6f 70 63 6f 64 65 20  eopenIdx opcode 
1bd90 77 6f 72 6b 73 20 65 78 61 63 74 6c 79 20 6c 69  works exactly li
1bda0 6b 65 20 52 65 61 64 4f 70 65 6e 20 65 78 63 65  ke ReadOpen exce
1bdb0 70 74 20 74 68 61 74 20 69 74 20 66 69 72 73 74  pt that it first
1bdc0 0a 2a 2a 20 63 68 65 63 6b 73 20 74 6f 20 73 65  .** checks to se
1bdd0 65 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20  e if the cursor 
1bde0 6f 6e 20 50 31 20 69 73 20 61 6c 72 65 61 64 79  on P1 is already
1bdf0 20 6f 70 65 6e 20 77 69 74 68 20 61 20 72 6f 6f   open with a roo
1be00 74 20 70 61 67 65 0a 2a 2a 20 6e 75 6d 62 65 72  t page.** number
1be10 20 6f 66 20 50 32 20 61 6e 64 20 69 66 20 69 74   of P2 and if it
1be20 20 69 73 20 74 68 69 73 20 6f 70 63 6f 64 65 20   is this opcode 
1be30 62 65 63 6f 6d 65 73 20 61 20 6e 6f 2d 6f 70 2e  becomes a no-op.
1be40 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
1be50 2c 0a 2a 2a 20 69 66 20 74 68 65 20 63 75 72 73  ,.** if the curs
1be60 6f 72 20 69 73 20 61 6c 72 65 61 64 79 20 6f 70  or is already op
1be70 65 6e 2c 20 64 6f 20 6e 6f 74 20 72 65 6f 70 65  en, do not reope
1be80 6e 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  n it..**.** The 
1be90 52 65 6f 70 65 6e 49 64 78 20 6f 70 63 6f 64 65  ReopenIdx opcode
1bea0 20 6d 61 79 20 6f 6e 6c 79 20 62 65 20 75 73 65   may only be use
1beb0 64 20 77 69 74 68 20 50 35 3d 3d 30 20 61 6e 64  d with P5==0 and
1bec0 20 77 69 74 68 20 50 34 20 62 65 69 6e 67 0a 2a   with P4 being.*
1bed0 2a 20 61 20 50 34 5f 4b 45 59 49 4e 46 4f 20 6f  * a P4_KEYINFO o
1bee0 62 6a 65 63 74 2e 20 20 46 75 72 74 68 65 72 6d  bject.  Furtherm
1bef0 6f 72 65 2c 20 74 68 65 20 50 33 20 76 61 6c 75  ore, the P3 valu
1bf00 65 20 6d 75 73 74 20 62 65 20 74 68 65 20 73 61  e must be the sa
1bf10 6d 65 20 61 73 0a 2a 2a 20 65 76 65 72 79 20 6f  me as.** every o
1bf20 74 68 65 72 20 52 65 6f 70 65 6e 49 64 78 20 6f  ther ReopenIdx o
1bf30 72 20 4f 70 65 6e 52 65 61 64 20 66 6f 72 20 74  r OpenRead for t
1bf40 68 65 20 73 61 6d 65 20 63 75 72 73 6f 72 20 6e  he same cursor n
1bf50 75 6d 62 65 72 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  umber..**.** See
1bf60 20 74 68 65 20 4f 70 65 6e 52 65 61 64 20 6f 70   the OpenRead op
1bf70 63 6f 64 65 20 64 6f 63 75 6d 65 6e 74 61 74 69  code documentati
1bf80 6f 6e 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  on for additiona
1bf90 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
1bfa0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65  /./* Opcode: Ope
1bfb0 6e 57 72 69 74 65 20 50 31 20 50 32 20 50 33 20  nWrite P1 P2 P3 
1bfc0 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
1bfd0 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50  s: root=P2 iDb=P
1bfe0 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72  3.**.** Open a r
1bff0 65 61 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72  ead/write cursor
1c000 20 6e 61 6d 65 64 20 50 31 20 6f 6e 20 74 68 65   named P1 on the
1c010 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
1c020 77 68 6f 73 65 20 72 6f 6f 74 0a 2a 2a 20 70 61  whose root.** pa
1c030 67 65 20 69 73 20 50 32 2e 20 20 4f 72 20 69 66  ge is P2.  Or if
1c040 20 50 35 21 3d 30 20 75 73 65 20 74 68 65 20 63   P5!=0 use the c
1c050 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
1c060 65 72 20 50 32 20 74 6f 20 66 69 6e 64 20 74 68  er P2 to find th
1c070 65 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65 2e 0a  e.** root page..
1c080 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c  **.** The P4 val
1c090 75 65 20 6d 61 79 20 62 65 20 65 69 74 68 65 72  ue may be either
1c0a0 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50 34 5f   an integer (P4_
1c0b0 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f 69 6e  INT32) or a poin
1c0c0 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49  ter to.** a KeyI
1c0d0 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 28 50  nfo structure (P
1c0e0 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20 69  4_KEYINFO). If i
1c0f0 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  t is a pointer t
1c100 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20  o a KeyInfo .** 
1c110 73 74 72 75 63 74 75 72 65 2c 20 74 68 65 6e 20  structure, then 
1c120 73 61 69 64 20 73 74 72 75 63 74 75 72 65 20 64  said structure d
1c130 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e 74 65  efines the conte
1c140 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67  nt and collating
1c150 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f 66   .** sequence of
1c160 20 74 68 65 20 69 6e 64 65 78 20 62 65 69 6e 67   the index being
1c170 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72 77 69   opened. Otherwi
1c180 73 65 2c 20 69 66 20 50 34 20 69 73 20 61 6e 20  se, if P4 is an 
1c190 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75  integer .** valu
1c1a0 65 2c 20 69 74 20 69 73 20 73 65 74 20 74 6f 20  e, it is set to 
1c1b0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
1c1c0 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62  lumns in the tab
1c1d0 6c 65 2c 20 6f 72 20 74 6f 20 74 68 65 0a 2a 2a  le, or to the.**
1c1e0 20 6c 61 72 67 65 73 74 20 69 6e 64 65 78 20 6f   largest index o
1c1f0 66 20 61 6e 79 20 63 6f 6c 75 6d 6e 20 6f 66 20  f any column of 
1c200 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 69  the table that i
1c210 73 20 61 63 74 75 61 6c 6c 79 20 75 73 65 64 2e  s actually used.
1c220 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74  .**.** This inst
1c230 72 75 63 74 69 6f 6e 20 77 6f 72 6b 73 20 6a 75  ruction works ju
1c240 73 74 20 6c 69 6b 65 20 4f 70 65 6e 52 65 61 64  st like OpenRead
1c250 20 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20   except that it 
1c260 6f 70 65 6e 73 20 74 68 65 20 63 75 72 73 6f 72  opens the cursor
1c270 0a 2a 2a 20 69 6e 20 72 65 61 64 2f 77 72 69 74  .** in read/writ
1c280 65 20 6d 6f 64 65 2e 20 20 46 6f 72 20 61 20 67  e mode.  For a g
1c290 69 76 65 6e 20 74 61 62 6c 65 2c 20 74 68 65 72  iven table, ther
1c2a0 65 20 63 61 6e 20 62 65 20 6f 6e 65 20 6f 72 20  e can be one or 
1c2b0 6d 6f 72 65 20 72 65 61 64 2d 6f 6e 6c 79 0a 2a  more read-only.*
1c2c0 2a 20 63 75 72 73 6f 72 73 20 6f 72 20 61 20 73  * cursors or a s
1c2d0 69 6e 67 6c 65 20 72 65 61 64 2f 77 72 69 74 65  ingle read/write
1c2e0 20 63 75 72 73 6f 72 20 62 75 74 20 6e 6f 74 20   cursor but not 
1c2f0 62 6f 74 68 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  both..**.** See 
1c300 61 6c 73 6f 20 4f 70 65 6e 52 65 61 64 2e 0a 2a  also OpenRead..*
1c310 2f 0a 63 61 73 65 20 4f 50 5f 52 65 6f 70 65 6e  /.case OP_Reopen
1c320 49 64 78 3a 20 7b 0a 20 20 69 6e 74 20 6e 46 69  Idx: {.  int nFi
1c330 65 6c 64 3b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a  eld;.  KeyInfo *
1c340 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74 20  pKeyInfo;.  int 
1c350 70 32 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20  p2;.  int iDb;. 
1c360 20 69 6e 74 20 77 72 46 6c 61 67 3b 0a 20 20 42   int wrFlag;.  B
1c370 74 72 65 65 20 2a 70 58 3b 0a 20 20 56 64 62 65  tree *pX;.  Vdbe
1c380 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20  Cursor *pCur;.  
1c390 44 62 20 2a 70 44 62 3b 0a 0a 20 20 61 73 73 65  Db *pDb;..  asse
1c3a0 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c  rt( pOp->p5==0 |
1c3b0 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 50 46 4c 41  | pOp->p5==OPFLA
1c3c0 47 5f 53 45 45 4b 45 51 20 29 3b 0a 20 20 61 73  G_SEEKEQ );.  as
1c3d0 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
1c3e0 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 3b  e==P4_KEYINFO );
1c3f0 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43  .  pCur = p->apC
1c400 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69  sr[pOp->p1];.  i
1c410 66 28 20 70 43 75 72 20 26 26 20 70 43 75 72 2d  f( pCur && pCur-
1c420 3e 70 67 6e 6f 52 6f 6f 74 3d 3d 28 75 33 32 29  >pgnoRoot==(u32)
1c430 70 4f 70 2d 3e 70 32 20 29 7b 0a 20 20 20 20 61  pOp->p2 ){.    a
1c440 73 73 65 72 74 28 20 70 43 75 72 2d 3e 69 44 62  ssert( pCur->iDb
1c450 3d 3d 70 4f 70 2d 3e 70 33 20 29 3b 20 20 20 20  ==pOp->p3 );    
1c460 20 20 2f 2a 20 47 75 61 72 61 6e 74 65 65 64 20    /* Guaranteed 
1c470 62 79 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65  by the code gene
1c480 72 61 74 6f 72 20 2a 2f 0a 20 20 20 20 67 6f 74  rator */.    got
1c490 6f 20 6f 70 65 6e 5f 63 75 72 73 6f 72 5f 73 65  o open_cursor_se
1c4a0 74 5f 68 69 6e 74 73 3b 0a 20 20 7d 0a 20 20 2f  t_hints;.  }.  /
1c4b0 2a 20 49 66 20 74 68 65 20 63 75 72 73 6f 72 20  * If the cursor 
1c4c0 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79  is not currently
1c4d0 20 6f 70 65 6e 20 6f 72 20 69 73 20 6f 70 65 6e   open or is open
1c4e0 20 6f 6e 20 61 20 64 69 66 66 65 72 65 6e 74 0a   on a different.
1c4f0 20 20 2a 2a 20 69 6e 64 65 78 2c 20 74 68 65 6e    ** index, then
1c500 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e   fall through in
1c510 74 6f 20 4f 50 5f 4f 70 65 6e 52 65 61 64 20 74  to OP_OpenRead t
1c520 6f 20 66 6f 72 63 65 20 61 20 72 65 6f 70 65 6e  o force a reopen
1c530 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e   */.case OP_Open
1c540 52 65 61 64 3a 0a 63 61 73 65 20 4f 50 5f 4f 70  Read:.case OP_Op
1c550 65 6e 57 72 69 74 65 3a 0a 0a 20 20 61 73 73 65  enWrite:..  asse
1c560 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
1c570 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20 7c 7c  =OP_OpenWrite ||
1c580 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70   pOp->p5==0 || p
1c590 4f 70 2d 3e 70 35 3d 3d 4f 50 46 4c 41 47 5f 53  Op->p5==OPFLAG_S
1c5a0 45 45 4b 45 51 20 29 3b 0a 20 20 61 73 73 65 72  EEKEQ );.  asser
1c5b0 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
1c5c0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
1c5d0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65  ->opcode==OP_Ope
1c5e0 6e 52 65 61 64 20 7c 7c 20 70 4f 70 2d 3e 6f 70  nRead || pOp->op
1c5f0 63 6f 64 65 3d 3d 4f 50 5f 52 65 6f 70 65 6e 49  code==OP_ReopenI
1c600 64 78 0a 20 20 20 20 20 20 20 20 20 20 7c 7c 20  dx.          || 
1c610 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
1c620 3b 0a 0a 20 20 69 66 28 20 70 2d 3e 65 78 70 69  ;..  if( p->expi
1c630 72 65 64 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  red ){.    rc = 
1c640 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c  SQLITE_ABORT_ROL
1c650 4c 42 41 43 4b 3b 0a 20 20 20 20 67 6f 74 6f 20  LBACK;.    goto 
1c660 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1c670 6f 72 3b 0a 20 20 7d 0a 0a 20 20 6e 46 69 65 6c  or;.  }..  nFiel
1c680 64 20 3d 20 30 3b 0a 20 20 70 4b 65 79 49 6e 66  d = 0;.  pKeyInf
1c690 6f 20 3d 20 30 3b 0a 20 20 70 32 20 3d 20 70 4f  o = 0;.  p2 = pO
1c6a0 70 2d 3e 70 32 3b 0a 20 20 69 44 62 20 3d 20 70  p->p2;.  iDb = p
1c6b0 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74  Op->p3;.  assert
1c6c0 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c  ( iDb>=0 && iDb<
1c6d0 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
1c6e0 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
1c6f0 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 44  p->btreeMask, iD
1c700 62 29 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64  b) );.  pDb = &d
1c710 62 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a 20 20 70  b->aDb[iDb];.  p
1c720 58 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20  X = pDb->pBt;.  
1c730 61 73 73 65 72 74 28 20 70 58 21 3d 30 20 29 3b  assert( pX!=0 );
1c740 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
1c750 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65  de==OP_OpenWrite
1c760 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
1c770 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45  OPFLAG_FORDELETE
1c780 3d 3d 42 54 52 45 45 5f 46 4f 52 44 45 4c 45 54  ==BTREE_FORDELET
1c790 45 20 29 3b 0a 20 20 20 20 77 72 46 6c 61 67 20  E );.    wrFlag 
1c7a0 3d 20 42 54 52 45 45 5f 57 52 43 53 52 20 7c 20  = BTREE_WRCSR | 
1c7b0 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
1c7c0 47 5f 46 4f 52 44 45 4c 45 54 45 29 3b 0a 20 20  G_FORDELETE);.  
1c7d0 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
1c7e0 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64  3SchemaMutexHeld
1c7f0 28 64 62 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a  (db, iDb, 0) );.
1c800 20 20 20 20 69 66 28 20 70 44 62 2d 3e 70 53 63      if( pDb->pSc
1c810 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61  hema->file_forma
1c820 74 20 3c 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46  t < p->minWriteF
1c830 69 6c 65 46 6f 72 6d 61 74 20 29 7b 0a 20 20 20  ileFormat ){.   
1c840 20 20 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69     p->minWriteFi
1c850 6c 65 46 6f 72 6d 61 74 20 3d 20 70 44 62 2d 3e  leFormat = pDb->
1c860 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f  pSchema->file_fo
1c870 72 6d 61 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  rmat;.    }.  }e
1c880 6c 73 65 7b 0a 20 20 20 20 77 72 46 6c 61 67 20  lse{.    wrFlag 
1c890 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70  = 0;.  }.  if( p
1c8a0 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
1c8b0 50 32 49 53 52 45 47 20 29 7b 0a 20 20 20 20 61  P2ISREG ){.    a
1c8c0 73 73 65 72 74 28 20 70 32 3e 30 20 29 3b 0a 20  ssert( p2>0 );. 
1c8d0 20 20 20 61 73 73 65 72 74 28 20 70 32 3c 3d 28     assert( p2<=(
1c8e0 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
1c8f0 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 70  Cursor) );.    p
1c900 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b  In2 = &aMem[p2];
1c910 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
1c920 49 73 56 61 6c 69 64 28 70 49 6e 32 29 20 29 3b  IsValid(pIn2) );
1c930 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70 49  .    assert( (pI
1c940 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n2->flags & MEM_
1c950 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 20 20 73  Int)!=0 );.    s
1c960 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
1c970 65 67 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20  egerify(pIn2);. 
1c980 20 20 20 70 32 20 3d 20 28 69 6e 74 29 70 49 6e     p2 = (int)pIn
1c990 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 2f 2a 20 54  2->u.i;.    /* T
1c9a0 68 65 20 70 32 20 76 61 6c 75 65 20 61 6c 77 61  he p2 value alwa
1c9b0 79 73 20 63 6f 6d 65 73 20 66 72 6f 6d 20 61 20  ys comes from a 
1c9c0 70 72 69 6f 72 20 4f 50 5f 43 72 65 61 74 65 54  prior OP_CreateT
1c9d0 61 62 6c 65 20 6f 70 63 6f 64 65 20 61 6e 64 0a  able opcode and.
1c9e0 20 20 20 20 2a 2a 20 74 68 61 74 20 6f 70 63 6f      ** that opco
1c9f0 64 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 73  de will always s
1ca00 65 74 20 74 68 65 20 70 32 20 76 61 6c 75 65 20  et the p2 value 
1ca10 74 6f 20 32 20 6f 72 20 6d 6f 72 65 20 6f 72 20  to 2 or more or 
1ca20 65 6c 73 65 20 66 61 69 6c 2e 0a 20 20 20 20 2a  else fail..    *
1ca30 2a 20 49 66 20 74 68 65 72 65 20 77 65 72 65 20  * If there were 
1ca40 61 20 66 61 69 6c 75 72 65 2c 20 74 68 65 20 70  a failure, the p
1ca50 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
1ca60 74 20 77 6f 75 6c 64 20 68 61 76 65 20 68 61 6c  t would have hal
1ca70 74 65 64 0a 20 20 20 20 2a 2a 20 62 65 66 6f 72  ted.    ** befor
1ca80 65 20 72 65 61 63 68 69 6e 67 20 74 68 69 73 20  e reaching this 
1ca90 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 2a 2f 0a  instruction. */.
1caa0 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3e 3d      assert( p2>=
1cab0 32 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70  2 );.  }.  if( p
1cac0 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b  Op->p4type==P4_K
1cad0 45 59 49 4e 46 4f 20 29 7b 0a 20 20 20 20 70 4b  EYINFO ){.    pK
1cae0 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34  eyInfo = pOp->p4
1caf0 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 61  .pKeyInfo;.    a
1cb00 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d  ssert( pKeyInfo-
1cb10 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b  >enc==ENC(db) );
1cb20 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65  .    assert( pKe
1cb30 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b  yInfo->db==db );
1cb40 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4b  .    nField = pK
1cb50 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2b 70  eyInfo->nField+p
1cb60 4b 65 79 49 6e 66 6f 2d 3e 6e 58 46 69 65 6c 64  KeyInfo->nXField
1cb70 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f  ;.  }else if( pO
1cb80 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
1cb90 54 33 32 20 29 7b 0a 20 20 20 20 6e 46 69 65 6c  T32 ){.    nFiel
1cba0 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  d = pOp->p4.i;. 
1cbb0 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   }.  assert( pOp
1cbc0 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73  ->p1>=0 );.  ass
1cbd0 65 72 74 28 20 6e 46 69 65 6c 64 3e 3d 30 20 29  ert( nField>=0 )
1cbe0 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 46  ;.  testcase( nF
1cbf0 69 65 6c 64 3d 3d 30 20 29 3b 20 20 2f 2a 20 54  ield==0 );  /* T
1cc00 61 62 6c 65 20 77 69 74 68 20 49 4e 54 45 47 45  able with INTEGE
1cc10 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61 6e  R PRIMARY KEY an
1cc20 64 20 6e 6f 74 68 69 6e 67 20 65 6c 73 65 20 2a  d nothing else *
1cc30 2f 0a 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63  /.  pCur = alloc
1cc40 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70  ateCursor(p, pOp
1cc50 2d 3e 70 31 2c 20 6e 46 69 65 6c 64 2c 20 69 44  ->p1, nField, iD
1cc60 62 2c 20 43 55 52 54 59 50 45 5f 42 54 52 45 45  b, CURTYPE_BTREE
1cc70 29 3b 0a 20 20 69 66 28 20 70 43 75 72 3d 3d 30  );.  if( pCur==0
1cc80 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
1cc90 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20    pCur->nullRow 
1cca0 3d 20 31 3b 0a 20 20 70 43 75 72 2d 3e 69 73 4f  = 1;.  pCur->isO
1ccb0 72 64 65 72 65 64 20 3d 20 31 3b 0a 20 20 70 43  rdered = 1;.  pC
1ccc0 75 72 2d 3e 70 67 6e 6f 52 6f 6f 74 20 3d 20 70  ur->pgnoRoot = p
1ccd0 32 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  2;.#ifdef SQLITE
1cce0 5f 44 45 42 55 47 0a 20 20 70 43 75 72 2d 3e 77  _DEBUG.  pCur->w
1ccf0 72 46 6c 61 67 20 3d 20 77 72 46 6c 61 67 3b 0a  rFlag = wrFlag;.
1cd00 23 65 6e 64 69 66 0a 20 20 72 63 20 3d 20 73 71  #endif.  rc = sq
1cd10 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
1cd20 28 70 58 2c 20 70 32 2c 20 77 72 46 6c 61 67 2c  (pX, p2, wrFlag,
1cd30 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43 75 72 2d   pKeyInfo, pCur-
1cd40 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20  >uc.pCursor);.  
1cd50 70 43 75 72 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d  pCur->pKeyInfo =
1cd60 20 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 2f 2a 20   pKeyInfo;.  /* 
1cd70 53 65 74 20 74 68 65 20 56 64 62 65 43 75 72 73  Set the VdbeCurs
1cd80 6f 72 2e 69 73 54 61 62 6c 65 20 76 61 72 69 61  or.isTable varia
1cd90 62 6c 65 2e 20 50 72 65 76 69 6f 75 73 20 76 65  ble. Previous ve
1cda0 72 73 69 6f 6e 73 20 6f 66 0a 20 20 2a 2a 20 53  rsions of.  ** S
1cdb0 51 4c 69 74 65 20 75 73 65 64 20 74 6f 20 63 68  QLite used to ch
1cdc0 65 63 6b 20 69 66 20 74 68 65 20 72 6f 6f 74 2d  eck if the root-
1cdd0 70 61 67 65 20 66 6c 61 67 73 20 77 65 72 65 20  page flags were 
1cde0 73 61 6e 65 20 61 74 20 74 68 69 73 20 70 6f 69  sane at this poi
1cdf0 6e 74 0a 20 20 2a 2a 20 61 6e 64 20 72 65 70 6f  nt.  ** and repo
1ce00 72 74 20 64 61 74 61 62 61 73 65 20 63 6f 72 72  rt database corr
1ce10 75 70 74 69 6f 6e 20 69 66 20 74 68 65 79 20 77  uption if they w
1ce20 65 72 65 20 6e 6f 74 2c 20 62 75 74 20 74 68 69  ere not, but thi
1ce30 73 20 63 68 65 63 6b 20 68 61 73 0a 20 20 2a 2a  s check has.  **
1ce40 20 73 69 6e 63 65 20 6d 6f 76 65 64 20 69 6e 74   since moved int
1ce50 6f 20 74 68 65 20 62 74 72 65 65 20 6c 61 79 65  o the btree laye
1ce60 72 2e 20 20 2a 2f 20 20 0a 20 20 70 43 75 72 2d  r.  */  .  pCur-
1ce70 3e 69 73 54 61 62 6c 65 20 3d 20 70 4f 70 2d 3e  >isTable = pOp->
1ce80 70 34 74 79 70 65 21 3d 50 34 5f 4b 45 59 49 4e  p4type!=P4_KEYIN
1ce90 46 4f 3b 0a 0a 6f 70 65 6e 5f 63 75 72 73 6f 72  FO;..open_cursor
1cea0 5f 73 65 74 5f 68 69 6e 74 73 3a 0a 20 20 61 73  _set_hints:.  as
1ceb0 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 42 55 4c  sert( OPFLAG_BUL
1cec0 4b 43 53 52 3d 3d 42 54 52 45 45 5f 42 55 4c 4b  KCSR==BTREE_BULK
1ced0 4c 4f 41 44 20 29 3b 0a 20 20 61 73 73 65 72 74  LOAD );.  assert
1cee0 28 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 3d  ( OPFLAG_SEEKEQ=
1cef0 3d 42 54 52 45 45 5f 53 45 45 4b 5f 45 51 20 29  =BTREE_SEEK_EQ )
1cf00 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f  ;.  testcase( pO
1cf10 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 42  p->p5 & OPFLAG_B
1cf20 55 4c 4b 43 53 52 20 29 3b 0a 23 69 66 64 65 66  ULKCSR );.#ifdef
1cf30 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43   SQLITE_ENABLE_C
1cf40 55 52 53 4f 52 5f 48 49 4e 54 53 0a 20 20 74 65  URSOR_HINTS.  te
1cf50 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 20  stcase( pOp->p2 
1cf60 26 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20  & OPFLAG_SEEKEQ 
1cf70 29 3b 0a 23 65 6e 64 69 66 0a 20 20 73 71 6c 69  );.#endif.  sqli
1cf80 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 48 69  te3BtreeCursorHi
1cf90 6e 74 46 6c 61 67 73 28 70 43 75 72 2d 3e 75 63  ntFlags(pCur->uc
1cfa0 2e 70 43 75 72 73 6f 72 2c 0a 20 20 20 20 20 20  .pCursor,.      
1cfb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cfc0 20 20 20 20 20 20 20 20 20 28 70 4f 70 2d 3e 70           (pOp->p
1cfd0 35 20 26 20 28 4f 50 46 4c 41 47 5f 42 55 4c 4b  5 & (OPFLAG_BULK
1cfe0 43 53 52 7c 4f 50 46 4c 41 47 5f 53 45 45 4b 45  CSR|OPFLAG_SEEKE
1cff0 51 29 29 29 3b 0a 20 20 69 66 28 20 72 63 20 29  Q)));.  if( rc )
1d000 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1d010 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61  to_error;.  brea
1d020 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1d030 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 50   OpenEphemeral P
1d040 31 20 50 32 20 2a 20 50 34 20 50 35 0a 2a 2a 20  1 P2 * P4 P5.** 
1d050 53 79 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c 75 6d  Synopsis: nColum
1d060 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20  n=P2.**.** Open 
1d070 61 20 6e 65 77 20 63 75 72 73 6f 72 20 50 31 20  a new cursor P1 
1d080 74 6f 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74  to a transient t
1d090 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72  able..** The cur
1d0a0 73 6f 72 20 69 73 20 61 6c 77 61 79 73 20 6f 70  sor is always op
1d0b0 65 6e 65 64 20 72 65 61 64 2f 77 72 69 74 65 20  ened read/write 
1d0c0 65 76 65 6e 20 69 66 20 0a 2a 2a 20 74 68 65 20  even if .** the 
1d0d0 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 69 73  main database is
1d0e0 20 72 65 61 64 2d 6f 6e 6c 79 2e 20 20 54 68 65   read-only.  The
1d0f0 20 65 70 68 65 6d 65 72 61 6c 0a 2a 2a 20 74 61   ephemeral.** ta
1d100 62 6c 65 20 69 73 20 64 65 6c 65 74 65 64 20 61  ble is deleted a
1d110 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 77 68 65  utomatically whe
1d120 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  n the cursor is 
1d130 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 32  closed..**.** P2
1d140 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   is the number o
1d150 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
1d160 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65   ephemeral table
1d170 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20  ..** The cursor 
1d180 70 6f 69 6e 74 73 20 74 6f 20 61 20 42 54 72 65  points to a BTre
1d190 65 20 74 61 62 6c 65 20 69 66 20 50 34 3d 3d 30  e table if P4==0
1d1a0 20 61 6e 64 20 74 6f 20 61 20 42 54 72 65 65 20   and to a BTree 
1d1b0 69 6e 64 65 78 0a 2a 2a 20 69 66 20 50 34 20 69  index.** if P4 i
1d1c0 73 20 6e 6f 74 20 30 2e 20 20 49 66 20 50 34 20  s not 0.  If P4 
1d1d0 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 74 20  is not NULL, it 
1d1e0 70 6f 69 6e 74 73 20 74 6f 20 61 20 4b 65 79 49  points to a KeyI
1d1f0 6e 66 6f 20 73 74 72 75 63 74 75 72 65 0a 2a 2a  nfo structure.**
1d200 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 74 68   that defines th
1d210 65 20 66 6f 72 6d 61 74 20 6f 66 20 6b 65 79 73  e format of keys
1d220 20 69 6e 20 74 68 65 20 69 6e 64 65 78 2e 0a 2a   in the index..*
1d230 2a 0a 2a 2a 20 54 68 65 20 50 35 20 70 61 72 61  *.** The P5 para
1d240 6d 65 74 65 72 20 63 61 6e 20 62 65 20 61 20 6d  meter can be a m
1d250 61 73 6b 20 6f 66 20 74 68 65 20 42 54 52 45 45  ask of the BTREE
1d260 5f 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64  _* flags defined
1d270 0a 2a 2a 20 69 6e 20 62 74 72 65 65 2e 68 2e 20  .** in btree.h. 
1d280 20 54 68 65 73 65 20 66 6c 61 67 73 20 63 6f 6e   These flags con
1d290 74 72 6f 6c 20 61 73 70 65 63 74 73 20 6f 66 20  trol aspects of 
1d2a0 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66  the operation of
1d2b0 0a 2a 2a 20 74 68 65 20 62 74 72 65 65 2e 20 20  .** the btree.  
1d2c0 54 68 65 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a  The BTREE_OMIT_J
1d2d0 4f 55 52 4e 41 4c 20 61 6e 64 20 42 54 52 45 45  OURNAL and BTREE
1d2e0 5f 53 49 4e 47 4c 45 20 66 6c 61 67 73 20 61 72  _SINGLE flags ar
1d2f0 65 0a 2a 2a 20 61 64 64 65 64 20 61 75 74 6f 6d  e.** added autom
1d300 61 74 69 63 61 6c 6c 79 2e 0a 2a 2f 0a 2f 2a 20  atically..*/./* 
1d310 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 41 75 74 6f  Opcode: OpenAuto
1d320 69 6e 64 65 78 20 50 31 20 50 32 20 2a 20 50 34  index P1 P2 * P4
1d330 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
1d340 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a  nColumn=P2.**.**
1d350 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72   This opcode wor
1d360 6b 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 4f  ks the same as O
1d370 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 2e  P_OpenEphemeral.
1d380 20 20 49 74 20 68 61 73 20 61 0a 2a 2a 20 64 69    It has a.** di
1d390 66 66 65 72 65 6e 74 20 6e 61 6d 65 20 74 6f 20  fferent name to 
1d3a0 64 69 73 74 69 6e 67 75 69 73 68 20 69 74 73 20  distinguish its 
1d3b0 75 73 65 2e 20 20 54 61 62 6c 65 73 20 63 72 65  use.  Tables cre
1d3c0 61 74 65 64 20 75 73 69 6e 67 0a 2a 2a 20 62 79  ated using.** by
1d3d0 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c   this opcode wil
1d3e0 6c 20 62 65 20 75 73 65 64 20 66 6f 72 20 61 75  l be used for au
1d3f0 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61  tomatically crea
1d400 74 65 64 20 74 72 61 6e 73 69 65 6e 74 0a 2a 2a  ted transient.**
1d410 20 69 6e 64 69 63 65 73 20 69 6e 20 6a 6f 69 6e   indices in join
1d420 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70  s..*/.case OP_Op
1d430 65 6e 41 75 74 6f 69 6e 64 65 78 3a 20 0a 63 61  enAutoindex: .ca
1d440 73 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65  se OP_OpenEpheme
1d450 72 61 6c 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  ral: {.  VdbeCur
1d460 73 6f 72 20 2a 70 43 78 3b 0a 20 20 4b 65 79 49  sor *pCx;.  KeyI
1d470 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 0a  nfo *pKeyInfo;..
1d480 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 69    static const i
1d490 6e 74 20 76 66 73 46 6c 61 67 73 20 3d 20 0a 20  nt vfsFlags = . 
1d4a0 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e       SQLITE_OPEN
1d4b0 5f 52 45 41 44 57 52 49 54 45 20 7c 0a 20 20 20  _READWRITE |.   
1d4c0 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 43     SQLITE_OPEN_C
1d4d0 52 45 41 54 45 20 7c 0a 20 20 20 20 20 20 53 51  REATE |.      SQ
1d4e0 4c 49 54 45 5f 4f 50 45 4e 5f 45 58 43 4c 55 53  LITE_OPEN_EXCLUS
1d4f0 49 56 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49  IVE |.      SQLI
1d500 54 45 5f 4f 50 45 4e 5f 44 45 4c 45 54 45 4f 4e  TE_OPEN_DELETEON
1d510 43 4c 4f 53 45 20 7c 0a 20 20 20 20 20 20 53 51  CLOSE |.      SQ
1d520 4c 49 54 45 5f 4f 50 45 4e 5f 54 52 41 4e 53 49  LITE_OPEN_TRANSI
1d530 45 4e 54 5f 44 42 3b 0a 20 20 61 73 73 65 72 74  ENT_DB;.  assert
1d540 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a  ( pOp->p1>=0 );.
1d550 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1d560 32 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20  2>=0 );.  pCx = 
1d570 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70  allocateCursor(p
1d580 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
1d590 70 32 2c 20 2d 31 2c 20 43 55 52 54 59 50 45 5f  p2, -1, CURTYPE_
1d5a0 42 54 52 45 45 29 3b 0a 20 20 69 66 28 20 70 43  BTREE);.  if( pC
1d5b0 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  x==0 ) goto no_m
1d5c0 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52  em;.  pCx->nullR
1d5d0 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 69  ow = 1;.  pCx->i
1d5e0 73 45 70 68 65 6d 65 72 61 6c 20 3d 20 31 3b 0a  sEphemeral = 1;.
1d5f0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1d600 72 65 65 4f 70 65 6e 28 64 62 2d 3e 70 56 66 73  reeOpen(db->pVfs
1d610 2c 20 30 2c 20 64 62 2c 20 26 70 43 78 2d 3e 70  , 0, db, &pCx->p
1d620 42 74 78 2c 20 0a 20 20 20 20 20 20 20 20 20 20  Btx, .          
1d630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42 54                BT
1d640 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c  REE_OMIT_JOURNAL
1d650 20 7c 20 42 54 52 45 45 5f 53 49 4e 47 4c 45 20   | BTREE_SINGLE 
1d660 7c 20 70 4f 70 2d 3e 70 35 2c 20 76 66 73 46 6c  | pOp->p5, vfsFl
1d670 61 67 73 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  ags);.  if( rc==
1d680 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1d690 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1d6a0 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70 43 78  eeBeginTrans(pCx
1d6b0 2d 3e 70 42 74 78 2c 20 31 29 3b 0a 20 20 7d 0a  ->pBtx, 1);.  }.
1d6c0 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
1d6d0 5f 4f 4b 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66  _OK ){.    /* If
1d6e0 20 61 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 64   a transient ind
1d6f0 65 78 20 69 73 20 72 65 71 75 69 72 65 64 2c 20  ex is required, 
1d700 63 72 65 61 74 65 20 69 74 20 62 79 20 63 61 6c  create it by cal
1d710 6c 69 6e 67 0a 20 20 20 20 2a 2a 20 73 71 6c 69  ling.    ** sqli
1d720 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61  te3BtreeCreateTa
1d730 62 6c 65 28 29 20 77 69 74 68 20 74 68 65 20 42  ble() with the B
1d740 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 66 6c 61  TREE_BLOBKEY fla
1d750 67 20 62 65 66 6f 72 65 0a 20 20 20 20 2a 2a 20  g before.    ** 
1d760 6f 70 65 6e 69 6e 67 20 69 74 2e 20 49 66 20 61  opening it. If a
1d770 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65   transient table
1d780 20 69 73 20 72 65 71 75 69 72 65 64 2c 20 6a 75   is required, ju
1d790 73 74 20 75 73 65 20 74 68 65 0a 20 20 20 20 2a  st use the.    *
1d7a0 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  * automatically 
1d7b0 63 72 65 61 74 65 64 20 74 61 62 6c 65 20 77 69  created table wi
1d7c0 74 68 20 72 6f 6f 74 2d 70 61 67 65 20 31 20 28  th root-page 1 (
1d7d0 61 6e 20 42 4c 4f 42 5f 49 4e 54 4b 45 59 20 74  an BLOB_INTKEY t
1d7e0 61 62 6c 65 29 2e 0a 20 20 20 20 2a 2f 0a 20 20  able)..    */.  
1d7f0 20 20 69 66 28 20 28 70 43 78 2d 3e 70 4b 65 79    if( (pCx->pKey
1d800 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f 20  Info = pKeyInfo 
1d810 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e  = pOp->p4.pKeyIn
1d820 66 6f 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  fo)!=0 ){.      
1d830 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 20 20 20 20  int pgno;.      
1d840 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
1d850 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20  ype==P4_KEYINFO 
1d860 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  );.      rc = sq
1d870 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65  lite3BtreeCreate
1d880 54 61 62 6c 65 28 70 43 78 2d 3e 70 42 74 78 2c  Table(pCx->pBtx,
1d890 20 26 70 67 6e 6f 2c 20 42 54 52 45 45 5f 42 4c   &pgno, BTREE_BL
1d8a0 4f 42 4b 45 59 20 7c 20 70 4f 70 2d 3e 70 35 29  OBKEY | pOp->p5)
1d8b0 3b 20 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d  ; .      if( rc=
1d8c0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1d8d0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 67        assert( pg
1d8e0 6e 6f 3d 3d 4d 41 53 54 45 52 5f 52 4f 4f 54 2b  no==MASTER_ROOT+
1d8f0 31 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  1 );.        ass
1d900 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 64  ert( pKeyInfo->d
1d910 62 3d 3d 64 62 20 29 3b 0a 20 20 20 20 20 20 20  b==db );.       
1d920 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66   assert( pKeyInf
1d930 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20  o->enc==ENC(db) 
1d940 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  );.        rc = 
1d950 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
1d960 6f 72 28 70 43 78 2d 3e 70 42 74 78 2c 20 70 67  or(pCx->pBtx, pg
1d970 6e 6f 2c 20 42 54 52 45 45 5f 57 52 43 53 52 2c  no, BTREE_WRCSR,
1d980 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d9a0 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43 78 2d 3e   pKeyInfo, pCx->
1d9b0 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20  uc.pCursor);.   
1d9c0 20 20 20 7d 0a 20 20 20 20 20 20 70 43 78 2d 3e     }.      pCx->
1d9d0 69 73 54 61 62 6c 65 20 3d 20 30 3b 0a 20 20 20  isTable = 0;.   
1d9e0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63   }else{.      rc
1d9f0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
1da00 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74 78 2c  ursor(pCx->pBtx,
1da10 20 4d 41 53 54 45 52 5f 52 4f 4f 54 2c 20 42 54   MASTER_ROOT, BT
1da20 52 45 45 5f 57 52 43 53 52 2c 0a 20 20 20 20 20  REE_WRCSR,.     
1da30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da40 20 20 20 20 20 20 20 20 20 30 2c 20 70 43 78 2d           0, pCx-
1da50 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20  >uc.pCursor);.  
1da60 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65      pCx->isTable
1da70 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a   = 1;.    }.  }.
1da80 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
1da90 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1daa0 6f 72 3b 0a 20 20 70 43 78 2d 3e 69 73 4f 72 64  or;.  pCx->isOrd
1dab0 65 72 65 64 20 3d 20 28 70 4f 70 2d 3e 70 35 21  ered = (pOp->p5!
1dac0 3d 42 54 52 45 45 5f 55 4e 4f 52 44 45 52 45 44  =BTREE_UNORDERED
1dad0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
1dae0 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72  * Opcode: Sorter
1daf0 4f 70 65 6e 20 50 31 20 50 32 20 50 33 20 50 34  Open P1 P2 P3 P4
1db00 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70   *.**.** This op
1db10 63 6f 64 65 20 77 6f 72 6b 73 20 6c 69 6b 65 20  code works like 
1db20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  OP_OpenEphemeral
1db30 20 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20   except that it 
1db40 6f 70 65 6e 73 0a 2a 2a 20 61 20 74 72 61 6e 73  opens.** a trans
1db50 69 65 6e 74 20 69 6e 64 65 78 20 74 68 61 74 20  ient index that 
1db60 69 73 20 73 70 65 63 69 66 69 63 61 6c 6c 79 20  is specifically 
1db70 64 65 73 69 67 6e 65 64 20 74 6f 20 73 6f 72 74  designed to sort
1db80 20 6c 61 72 67 65 0a 2a 2a 20 74 61 62 6c 65 73   large.** tables
1db90 20 75 73 69 6e 67 20 61 6e 20 65 78 74 65 72 6e   using an extern
1dba0 61 6c 20 6d 65 72 67 65 2d 73 6f 72 74 20 61 6c  al merge-sort al
1dbb0 67 6f 72 69 74 68 6d 2e 0a 2a 2a 0a 2a 2a 20 49  gorithm..**.** I
1dbc0 66 20 61 72 67 75 6d 65 6e 74 20 50 33 20 69 73  f argument P3 is
1dbd0 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20   non-zero, then 
1dbe0 69 74 20 69 6e 64 69 63 61 74 65 73 20 74 68 61  it indicates tha
1dbf0 74 20 74 68 65 20 73 6f 72 74 65 72 20 6d 61 79  t the sorter may
1dc00 0a 2a 2a 20 61 73 73 75 6d 65 20 74 68 61 74 20  .** assume that 
1dc10 61 20 73 74 61 62 6c 65 20 73 6f 72 74 20 63 6f  a stable sort co
1dc20 6e 73 69 64 65 72 69 6e 67 20 74 68 65 20 66 69  nsidering the fi
1dc30 72 73 74 20 50 33 20 66 69 65 6c 64 73 20 6f 66  rst P3 fields of
1dc40 20 65 61 63 68 0a 2a 2a 20 6b 65 79 20 69 73 20   each.** key is 
1dc50 73 75 66 66 69 63 69 65 6e 74 20 74 6f 20 70 72  sufficient to pr
1dc60 6f 64 75 63 65 20 74 68 65 20 72 65 71 75 69 72  oduce the requir
1dc70 65 64 20 72 65 73 75 6c 74 73 2e 0a 2a 2f 0a 63  ed results..*/.c
1dc80 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 4f 70 65  ase OP_SorterOpe
1dc90 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  n: {.  VdbeCurso
1dca0 72 20 2a 70 43 78 3b 0a 0a 20 20 61 73 73 65 72  r *pCx;..  asser
1dcb0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b  t( pOp->p1>=0 );
1dcc0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1dcd0 70 32 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d  p2>=0 );.  pCx =
1dce0 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28   allocateCursor(
1dcf0 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  p, pOp->p1, pOp-
1dd00 3e 70 32 2c 20 2d 31 2c 20 43 55 52 54 59 50 45  >p2, -1, CURTYPE
1dd10 5f 53 4f 52 54 45 52 29 3b 0a 20 20 69 66 28 20  _SORTER);.  if( 
1dd20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  pCx==0 ) goto no
1dd30 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 70 4b 65  _mem;.  pCx->pKe
1dd40 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e  yInfo = pOp->p4.
1dd50 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65  pKeyInfo;.  asse
1dd60 72 74 28 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66  rt( pCx->pKeyInf
1dd70 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20 61  o->db==db );.  a
1dd80 73 73 65 72 74 28 20 70 43 78 2d 3e 70 4b 65 79  ssert( pCx->pKey
1dd90 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64  Info->enc==ENC(d
1dda0 62 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  b) );.  rc = sql
1ddb0 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 49 6e  ite3VdbeSorterIn
1ddc0 69 74 28 64 62 2c 20 70 4f 70 2d 3e 70 33 2c 20  it(db, pOp->p3, 
1ddd0 70 43 78 29 3b 0a 20 20 69 66 28 20 72 63 20 29  pCx);.  if( rc )
1dde0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1ddf0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61  to_error;.  brea
1de00 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1de10 20 53 65 71 75 65 6e 63 65 54 65 73 74 20 50 31   SequenceTest P1
1de20 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
1de30 6f 70 73 69 73 3a 20 69 66 28 20 63 75 72 73 6f  opsis: if( curso
1de40 72 5b 50 31 5d 2e 63 74 72 2b 2b 20 29 20 70 63  r[P1].ctr++ ) pc
1de50 20 3d 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69   = P2.**.** P1 i
1de60 73 20 61 20 73 6f 72 74 65 72 20 63 75 72 73 6f  s a sorter curso
1de70 72 2e 20 49 66 20 74 68 65 20 73 65 71 75 65 6e  r. If the sequen
1de80 63 65 20 63 6f 75 6e 74 65 72 20 69 73 20 63 75  ce counter is cu
1de90 72 72 65 6e 74 6c 79 20 7a 65 72 6f 2c 20 6a 75  rrently zero, ju
1dea0 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e 20 52 65 67  mp.** to P2. Reg
1deb0 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68  ardless of wheth
1dec0 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 6a 75  er or not the ju
1ded0 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 69 6e 63  mp is taken, inc
1dee0 72 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 74 68  rement the.** th
1def0 65 20 73 65 71 75 65 6e 63 65 20 76 61 6c 75 65  e sequence value
1df00 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 71  ..*/.case OP_Seq
1df10 75 65 6e 63 65 54 65 73 74 3a 20 7b 0a 20 20 56  uenceTest: {.  V
1df20 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
1df30 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1df40 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1df50 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
1df60 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
1df70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
1df80 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b   isSorter(pC) );
1df90 0a 20 20 69 66 28 20 28 70 43 2d 3e 73 65 71 43  .  if( (pC->seqC
1dfa0 6f 75 6e 74 2b 2b 29 3d 3d 30 20 29 7b 0a 20 20  ount++)==0 ){.  
1dfb0 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
1dfc0 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  2;.  }.  break;.
1dfd0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70  }../* Opcode: Op
1dfe0 65 6e 50 73 65 75 64 6f 20 50 31 20 50 32 20 50  enPseudo P1 P2 P
1dff0 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
1e000 73 3a 20 50 33 20 63 6f 6c 75 6d 6e 73 20 69 6e  s: P3 columns in
1e010 20 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 4f 70 65   r[P2].**.** Ope
1e020 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20 74  n a new cursor t
1e030 68 61 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20  hat points to a 
1e040 66 61 6b 65 20 74 61 62 6c 65 20 74 68 61 74 20  fake table that 
1e050 63 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e 67 6c  contains a singl
1e060 65 0a 2a 2a 20 72 6f 77 20 6f 66 20 64 61 74 61  e.** row of data
1e070 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f  .  The content o
1e080 66 20 74 68 61 74 20 6f 6e 65 20 72 6f 77 20 69  f that one row i
1e090 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  s the content of
1e0a0 20 6d 65 6d 6f 72 79 0a 2a 2a 20 72 65 67 69 73   memory.** regis
1e0b0 74 65 72 20 50 32 2e 20 20 49 6e 20 6f 74 68 65  ter P2.  In othe
1e0c0 72 20 77 6f 72 64 73 2c 20 63 75 72 73 6f 72 20  r words, cursor 
1e0d0 50 31 20 62 65 63 6f 6d 65 73 20 61 6e 20 61 6c  P1 becomes an al
1e0e0 69 61 73 20 66 6f 72 20 74 68 65 20 0a 2a 2a 20  ias for the .** 
1e0f0 4d 45 4d 5f 42 6c 6f 62 20 63 6f 6e 74 65 6e 74  MEM_Blob content
1e100 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 72 65   contained in re
1e110 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
1e120 20 41 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20   A pseudo-table 
1e130 63 72 65 61 74 65 64 20 62 79 20 74 68 69 73 20  created by this 
1e140 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 74  opcode is used t
1e150 6f 20 68 6f 6c 64 20 61 20 73 69 6e 67 6c 65 0a  o hold a single.
1e160 2a 2a 20 72 6f 77 20 6f 75 74 70 75 74 20 66 72  ** row output fr
1e170 6f 6d 20 74 68 65 20 73 6f 72 74 65 72 20 73 6f  om the sorter so
1e180 20 74 68 61 74 20 74 68 65 20 72 6f 77 20 63 61   that the row ca
1e190 6e 20 62 65 20 64 65 63 6f 6d 70 6f 73 65 64 20  n be decomposed 
1e1a0 69 6e 74 6f 0a 2a 2a 20 69 6e 64 69 76 69 64 75  into.** individu
1e1b0 61 6c 20 63 6f 6c 75 6d 6e 73 20 75 73 69 6e 67  al columns using
1e1c0 20 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f   the OP_Column o
1e1d0 70 63 6f 64 65 2e 20 20 54 68 65 20 4f 50 5f 43  pcode.  The OP_C
1e1e0 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 0a 2a 2a 20  olumn opcode.** 
1e1f0 69 73 20 74 68 65 20 6f 6e 6c 79 20 63 75 72 73  is the only curs
1e200 6f 72 20 6f 70 63 6f 64 65 20 74 68 61 74 20 77  or opcode that w
1e210 6f 72 6b 73 20 77 69 74 68 20 61 20 70 73 65 75  orks with a pseu
1e220 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  do-table..**.** 
1e230 50 33 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72  P3 is the number
1e240 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68   of fields in th
1e250 65 20 72 65 63 6f 72 64 73 20 74 68 61 74 20 77  e records that w
1e260 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 62 79  ill be stored by
1e270 0a 2a 2a 20 74 68 65 20 70 73 65 75 64 6f 2d 74  .** the pseudo-t
1e280 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  able..*/.case OP
1e290 5f 4f 70 65 6e 50 73 65 75 64 6f 3a 20 7b 0a 20  _OpenPseudo: {. 
1e2a0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78   VdbeCursor *pCx
1e2b0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
1e2c0 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73  ->p1>=0 );.  ass
1e2d0 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30 20  ert( pOp->p3>=0 
1e2e0 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63  );.  pCx = alloc
1e2f0 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70  ateCursor(p, pOp
1e300 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 33 2c 20 2d  ->p1, pOp->p3, -
1e310 31 2c 20 43 55 52 54 59 50 45 5f 50 53 45 55 44  1, CURTYPE_PSEUD
1e320 4f 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30  O);.  if( pCx==0
1e330 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
1e340 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d    pCx->nullRow =
1e350 20 31 3b 0a 20 20 70 43 78 2d 3e 75 63 2e 70 73   1;.  pCx->uc.ps
1e360 65 75 64 6f 54 61 62 6c 65 52 65 67 20 3d 20 70  eudoTableReg = p
1e370 4f 70 2d 3e 70 32 3b 0a 20 20 70 43 78 2d 3e 69  Op->p2;.  pCx->i
1e380 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 61 73  sTable = 1;.  as
1e390 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30  sert( pOp->p5==0
1e3a0 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   );.  break;.}..
1e3b0 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 6f 73 65  /* Opcode: Close
1e3c0 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
1e3d0 2a 20 43 6c 6f 73 65 20 61 20 63 75 72 73 6f 72  * Close a cursor
1e3e0 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e   previously open
1e3f0 65 64 20 61 73 20 50 31 2e 20 20 49 66 20 50 31  ed as P1.  If P1
1e400 20 69 73 20 6e 6f 74 0a 2a 2a 20 63 75 72 72 65   is not.** curre
1e410 6e 74 6c 79 20 6f 70 65 6e 2c 20 74 68 69 73 20  ntly open, this 
1e420 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 61  instruction is a
1e430 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20   no-op..*/.case 
1e440 4f 50 5f 43 6c 6f 73 65 3a 20 7b 0a 20 20 61 73  OP_Close: {.  as
1e450 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1e460 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
1e470 43 75 72 73 6f 72 20 29 3b 0a 20 20 73 71 6c 69  Cursor );.  sqli
1e480 74 65 33 56 64 62 65 46 72 65 65 43 75 72 73 6f  te3VdbeFreeCurso
1e490 72 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b 70 4f  r(p, p->apCsr[pO
1e4a0 70 2d 3e 70 31 5d 29 3b 0a 20 20 70 2d 3e 61 70  p->p1]);.  p->ap
1e4b0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 30  Csr[pOp->p1] = 0
1e4c0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69  ;.  break;.}..#i
1e4d0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
1e4e0 4c 45 5f 43 4f 4c 55 4d 4e 5f 55 53 45 44 5f 4d  LE_COLUMN_USED_M
1e4f0 41 53 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  ASK./* Opcode: C
1e500 6f 6c 75 6d 6e 73 55 73 65 64 20 50 31 20 2a 20  olumnsUsed P1 * 
1e510 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69  * P4 *.**.** Thi
1e520 73 20 6f 70 63 6f 64 65 20 28 77 68 69 63 68 20  s opcode (which 
1e530 6f 6e 6c 79 20 65 78 69 73 74 73 20 69 66 20 53  only exists if S
1e540 51 4c 69 74 65 20 77 61 73 20 63 6f 6d 70 69 6c  QLite was compil
1e550 65 64 20 77 69 74 68 0a 2a 2a 20 53 51 4c 49 54  ed with.** SQLIT
1e560 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f  E_ENABLE_COLUMN_
1e570 55 53 45 44 5f 4d 41 53 4b 29 20 69 64 65 6e 74  USED_MASK) ident
1e580 69 66 69 65 73 20 77 68 69 63 68 20 63 6f 6c 75  ifies which colu
1e590 6d 6e 73 20 6f 66 20 74 68 65 0a 2a 2a 20 74 61  mns of the.** ta
1e5a0 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 66 6f 72  ble or index for
1e5b0 20 63 75 72 73 6f 72 20 50 31 20 61 72 65 20 75   cursor P1 are u
1e5c0 73 65 64 2e 20 20 50 34 20 69 73 20 61 20 36 34  sed.  P4 is a 64
1e5d0 2d 62 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a 20  -bit integer.** 
1e5e0 28 50 34 5f 49 4e 54 36 34 29 20 69 6e 20 77 68  (P4_INT64) in wh
1e5f0 69 63 68 20 74 68 65 20 66 69 72 73 74 20 36 33  ich the first 63
1e600 20 62 69 74 73 20 61 72 65 20 6f 6e 65 20 66 6f   bits are one fo
1e610 72 20 65 61 63 68 20 6f 66 20 74 68 65 0a 2a 2a  r each of the.**
1e620 20 66 69 72 73 74 20 36 33 20 63 6f 6c 75 6d 6e   first 63 column
1e630 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6f  s of the table o
1e640 72 20 69 6e 64 65 78 20 74 68 61 74 20 61 72 65  r index that are
1e650 20 61 63 74 75 61 6c 6c 79 20 75 73 65 64 0a 2a   actually used.*
1e660 2a 20 62 79 20 74 68 65 20 63 75 72 73 6f 72 2e  * by the cursor.
1e670 20 20 54 68 65 20 68 69 67 68 2d 6f 72 64 65 72    The high-order
1e680 20 62 69 74 20 69 73 20 73 65 74 20 69 66 20 61   bit is set if a
1e690 6e 79 20 63 6f 6c 75 6d 6e 20 61 66 74 65 72 0a  ny column after.
1e6a0 2a 2a 20 74 68 65 20 36 34 74 68 20 69 73 20 75  ** the 64th is u
1e6b0 73 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  sed..*/.case OP_
1e6c0 43 6f 6c 75 6d 6e 73 55 73 65 64 3a 20 7b 0a 20  ColumnsUsed: {. 
1e6d0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
1e6e0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
1e6f0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
1e700 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
1e710 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
1e720 20 29 3b 0a 20 20 70 43 2d 3e 6d 61 73 6b 55 73   );.  pC->maskUs
1e730 65 64 20 3d 20 2a 28 75 36 34 2a 29 70 4f 70 2d  ed = *(u64*)pOp-
1e740 3e 70 34 2e 70 49 36 34 3b 0a 20 20 62 72 65 61  >p4.pI64;.  brea
1e750 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20  k;.}.#endif../* 
1e760 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 45 20 50  Opcode: SeekGE P
1e770 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20  1 P2 P3 P4 *.** 
1e780 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
1e790 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20  P3@P4].**.** If 
1e7a0 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
1e7b0 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65   to an SQL table
1e7c0 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73   (B-Tree that us
1e7d0 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29  es integer keys)
1e7e0 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61  , .** use the va
1e7f0 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
1e800 50 33 20 61 73 20 74 68 65 20 6b 65 79 2e 20 20  P3 as the key.  
1e810 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1e820 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51  ers .** to an SQ
1e830 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33  L index, then P3
1e840 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e   is the first in
1e850 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20   an array of P4 
1e860 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68  registers .** th
1e870 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61  at are used as a
1e880 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
1e890 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70   key. .**.** Rep
1e8a0 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50  osition cursor P
1e8b0 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f  1 so that  it po
1e8c0 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c  ints to the smal
1e8d0 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20  lest entry that 
1e8e0 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20 74  .** is greater t
1e8f0 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
1e900 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49  the key value. I
1e910 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72  f there are no r
1e920 65 63 6f 72 64 73 20 0a 2a 2a 20 67 72 65 61 74  ecords .** great
1e930 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  er than or equal
1e940 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20   to the key and 
1e950 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P2 is not zero, 
1e960 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
1e970 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 75  .**.** If the cu
1e980 72 73 6f 72 20 50 31 20 77 61 73 20 6f 70 65 6e  rsor P1 was open
1e990 65 64 20 75 73 69 6e 67 20 74 68 65 20 4f 50 46  ed using the OPF
1e9a0 4c 41 47 5f 53 45 45 4b 45 51 20 66 6c 61 67 2c  LAG_SEEKEQ flag,
1e9b0 20 74 68 65 6e 20 74 68 69 73 0a 2a 2a 20 6f 70   then this.** op
1e9c0 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61 79 73  code will always
1e9d0 20 6c 61 6e 64 20 6f 6e 20 61 20 72 65 63 6f 72   land on a recor
1e9e0 64 20 74 68 61 74 20 65 71 75 61 6c 6c 79 20 65  d that equally e
1e9f0 71 75 61 6c 73 20 74 68 65 20 6b 65 79 2c 20 6f  quals the key, o
1ea00 72 0a 2a 2a 20 65 6c 73 65 20 6a 75 6d 70 20 69  r.** else jump i
1ea10 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
1ea20 2e 20 20 57 68 65 6e 20 74 68 65 20 63 75 72 73  .  When the curs
1ea30 6f 72 20 69 73 20 4f 50 46 4c 41 47 5f 53 45 45  or is OPFLAG_SEE
1ea40 4b 45 51 2c 20 74 68 69 73 0a 2a 2a 20 6f 70 63  KEQ, this.** opc
1ea50 6f 64 65 20 6d 75 73 74 20 62 65 20 66 6f 6c 6c  ode must be foll
1ea60 6f 77 65 64 20 62 79 20 61 6e 20 49 64 78 4c 45  owed by an IdxLE
1ea70 20 6f 70 63 6f 64 65 20 77 69 74 68 20 74 68 65   opcode with the
1ea80 20 73 61 6d 65 20 61 72 67 75 6d 65 6e 74 73 2e   same arguments.
1ea90 0a 2a 2a 20 54 68 65 20 49 64 78 4c 45 20 6f 70  .** The IdxLE op
1eaa0 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 73 6b 69  code will be ski
1eab0 70 70 65 64 20 69 66 20 74 68 69 73 20 6f 70 63  pped if this opc
1eac0 6f 64 65 20 73 75 63 63 65 65 64 73 2c 20 62 75  ode succeeds, bu
1ead0 74 20 74 68 65 0a 2a 2a 20 49 64 78 4c 45 20 6f  t the.** IdxLE o
1eae0 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 75 73  pcode will be us
1eaf0 65 64 20 6f 6e 20 73 75 62 73 65 71 75 65 6e 74  ed on subsequent
1eb00 20 6c 6f 6f 70 20 69 74 65 72 61 74 69 6f 6e 73   loop iterations
1eb10 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
1eb20 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63  ode leaves the c
1eb30 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64  ursor configured
1eb40 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77   to move in forw
1eb50 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72  ard order,.** fr
1eb60 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  om the beginning
1eb70 20 74 6f 77 61 72 64 20 74 68 65 20 65 6e 64 2e   toward the end.
1eb80 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
1eb90 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a  , the cursor is.
1eba0 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  ** configured to
1ebb0 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50   use Next, not P
1ebc0 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  rev..**.** See a
1ebd0 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
1ebe0 6f 75 6e 64 2c 20 53 65 65 6b 4c 74 2c 20 53 65  ound, SeekLt, Se
1ebf0 65 6b 47 74 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a  ekGt, SeekLe.*/.
1ec00 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47  /* Opcode: SeekG
1ec10 54 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  T P1 P2 P3 P4 *.
1ec20 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
1ec30 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
1ec40 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1ec50 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61  ers to an SQL ta
1ec60 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74  ble (B-Tree that
1ec70 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65   uses integer ke
1ec80 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65  ys), .** use the
1ec90 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
1eca0 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20  er P3 as a key. 
1ecb0 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66  If cursor P1 ref
1ecc0 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51  ers .** to an SQ
1ecd0 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33  L index, then P3
1ece0 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e   is the first in
1ecf0 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20   an array of P4 
1ed00 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68  registers .** th
1ed10 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61  at are used as a
1ed20 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
1ed30 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70   key. .**.** Rep
1ed40 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50  osition cursor P
1ed50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f  1 so that  it po
1ed60 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c  ints to the smal
1ed70 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20  lest entry that 
1ed80 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20 74  .** is greater t
1ed90 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75  han the key valu
1eda0 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  e. If there are 
1edb0 6e 6f 20 72 65 63 6f 72 64 73 20 67 72 65 61 74  no records great
1edc0 65 72 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20  er than .** the 
1edd0 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f  key and P2 is no
1ede0 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d  t zero, then jum
1edf0 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  p to P2..**.** T
1ee00 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65  his opcode leave
1ee10 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e  s the cursor con
1ee20 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20  figured to move 
1ee30 69 6e 20 66 6f 72 77 61 72 64 20 6f 72 64 65 72  in forward order
1ee40 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62 65  ,.** from the be
1ee50 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20 74  ginning toward t
1ee60 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65  he end.  In othe
1ee70 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72  r words, the cur
1ee80 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67  sor is.** config
1ee90 75 72 65 64 20 74 6f 20 75 73 65 20 4e 65 78 74  ured to use Next
1eea0 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2a 0a 2a  , not Prev..**.*
1eeb0 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e  * See also: Foun
1eec0 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65  d, NotFound, See
1eed0 6b 4c 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65  kLt, SeekGe, See
1eee0 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  kLe.*/./* Opcode
1eef0 3a 20 53 65 65 6b 4c 54 20 50 31 20 50 32 20 50  : SeekLT P1 P2 P
1ef00 33 20 50 34 20 2a 20 0a 2a 2a 20 53 79 6e 6f 70  3 P4 * .** Synop
1ef10 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
1ef20 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f  ].**.** If curso
1ef30 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61  r P1 refers to a
1ef40 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54  n SQL table (B-T
1ef50 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e  ree that uses in
1ef60 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a  teger keys), .**
1ef70 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69   use the value i
1ef80 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73  n register P3 as
1ef90 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f   a key. If curso
1efa0 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20  r P1 refers .** 
1efb0 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c  to an SQL index,
1efc0 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20   then P3 is the 
1efd0 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61  first in an arra
1efe0 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  y of P4 register
1eff0 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75  s .** that are u
1f000 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b  sed as an unpack
1f010 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a  ed index key. .*
1f020 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20  *.** Reposition 
1f030 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61  cursor P1 so tha
1f040 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  t  it points to 
1f050 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72  the largest entr
1f060 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65  y that .** is le
1f070 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20  ss than the key 
1f080 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20  value. If there 
1f090 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 6c  are no records l
1f0a0 65 73 73 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65  ess than .** the
1f0b0 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e   key and P2 is n
1f0c0 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75  ot zero, then ju
1f0d0 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  mp to P2..**.** 
1f0e0 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76  This opcode leav
1f0f0 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f  es the cursor co
1f100 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65  nfigured to move
1f110 20 69 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65   in reverse orde
1f120 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65  r,.** from the e
1f130 6e 64 20 74 6f 77 61 72 64 20 74 68 65 20 62 65  nd toward the be
1f140 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68  ginning.  In oth
1f150 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75  er words, the cu
1f160 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69  rsor is.** confi
1f170 67 75 72 65 64 20 74 6f 20 75 73 65 20 50 72 65  gured to use Pre
1f180 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2a 0a  v, not Next..**.
1f190 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
1f1a0 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65  nd, NotFound, Se
1f1b0 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53 65  ekGt, SeekGe, Se
1f1c0 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ekLe.*/./* Opcod
1f1d0 65 3a 20 53 65 65 6b 4c 45 20 50 31 20 50 32 20  e: SeekLE P1 P2 
1f1e0 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
1f1f0 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
1f200 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f  ].**.** If curso
1f210 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61  r P1 refers to a
1f220 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54  n SQL table (B-T
1f230 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e  ree that uses in
1f240 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a  teger keys), .**
1f250 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69   use the value i
1f260 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73  n register P3 as
1f270 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f   a key. If curso
1f280 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20  r P1 refers .** 
1f290 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c  to an SQL index,
1f2a0 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20   then P3 is the 
1f2b0 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61  first in an arra
1f2c0 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  y of P4 register
1f2d0 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75  s .** that are u
1f2e0 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b  sed as an unpack
1f2f0 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a  ed index key. .*
1f300 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20  *.** Reposition 
1f310 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61  cursor P1 so tha
1f320 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74  t it points to t
1f330 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79  he largest entry
1f340 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73   that .** is les
1f350 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  s than or equal 
1f360 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  to the key value
1f370 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e  . If there are n
1f380 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 6c 65  o records .** le
1f390 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  ss than or equal
1f3a0 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20   to the key and 
1f3b0 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P2 is not zero, 
1f3c0 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
1f3d0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
1f3e0 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75  de leaves the cu
1f3f0 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20  rsor configured 
1f400 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76 65 72  to move in rever
1f410 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f  se order,.** fro
1f420 6d 20 74 68 65 20 65 6e 64 20 74 6f 77 61 72 64  m the end toward
1f430 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20   the beginning. 
1f440 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
1f450 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a   the cursor is.*
1f460 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  * configured to 
1f470 75 73 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65  use Prev, not Ne
1f480 78 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  xt..**.** If the
1f490 20 63 75 72 73 6f 72 20 50 31 20 77 61 73 20 6f   cursor P1 was o
1f4a0 70 65 6e 65 64 20 75 73 69 6e 67 20 74 68 65 20  pened using the 
1f4b0 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 66 6c  OPFLAG_SEEKEQ fl
1f4c0 61 67 2c 20 74 68 65 6e 20 74 68 69 73 0a 2a 2a  ag, then this.**
1f4d0 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77   opcode will alw
1f4e0 61 79 73 20 6c 61 6e 64 20 6f 6e 20 61 20 72 65  ays land on a re
1f4f0 63 6f 72 64 20 74 68 61 74 20 65 71 75 61 6c 6c  cord that equall
1f500 79 20 65 71 75 61 6c 73 20 74 68 65 20 6b 65 79  y equals the key
1f510 2c 20 6f 72 0a 2a 2a 20 65 6c 73 65 20 6a 75 6d  , or.** else jum
1f520 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
1f530 20 50 32 2e 20 20 57 68 65 6e 20 74 68 65 20 63   P2.  When the c
1f540 75 72 73 6f 72 20 69 73 20 4f 50 46 4c 41 47 5f  ursor is OPFLAG_
1f550 53 45 45 4b 45 51 2c 20 74 68 69 73 0a 2a 2a 20  SEEKEQ, this.** 
1f560 6f 70 63 6f 64 65 20 6d 75 73 74 20 62 65 20 66  opcode must be f
1f570 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20 49 64  ollowed by an Id
1f580 78 47 45 20 6f 70 63 6f 64 65 20 77 69 74 68 20  xGE opcode with 
1f590 74 68 65 20 73 61 6d 65 20 61 72 67 75 6d 65 6e  the same argumen
1f5a0 74 73 2e 0a 2a 2a 20 54 68 65 20 49 64 78 47 45  ts..** The IdxGE
1f5b0 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20   opcode will be 
1f5c0 73 6b 69 70 70 65 64 20 69 66 20 74 68 69 73 20  skipped if this 
1f5d0 6f 70 63 6f 64 65 20 73 75 63 63 65 65 64 73 2c  opcode succeeds,
1f5e0 20 62 75 74 20 74 68 65 0a 2a 2a 20 49 64 78 47   but the.** IdxG
1f5f0 45 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65  E opcode will be
1f600 20 75 73 65 64 20 6f 6e 20 73 75 62 73 65 71 75   used on subsequ
1f610 65 6e 74 20 6c 6f 6f 70 20 69 74 65 72 61 74 69  ent loop iterati
1f620 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ons..**.** See a
1f630 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
1f640 6f 75 6e 64 2c 20 53 65 65 6b 47 74 2c 20 53 65  ound, SeekGt, Se
1f650 65 6b 47 65 2c 20 53 65 65 6b 4c 74 0a 2a 2f 0a  ekGe, SeekLt.*/.
1f660 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c 54 3a 20  case OP_SeekLT: 
1f670 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
1f680 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
1f690 53 65 65 6b 4c 45 3a 20 20 20 20 20 20 20 20 20  SeekLE:         
1f6a0 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
1f6b0 63 61 73 65 20 4f 50 5f 53 65 65 6b 47 45 3a 20  case OP_SeekGE: 
1f6c0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
1f6d0 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
1f6e0 53 65 65 6b 47 54 3a 20 7b 20 20 20 20 20 20 20  SeekGT: {       
1f6f0 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
1f700 20 20 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20    int res;      
1f710 20 20 20 20 20 2f 2a 20 43 6f 6d 70 61 72 69 73       /* Comparis
1f720 6f 6e 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 69  on result */.  i
1f730 6e 74 20 6f 63 3b 20 20 20 20 20 20 20 20 20 20  nt oc;          
1f740 20 20 2f 2a 20 4f 70 63 6f 64 65 20 2a 2f 0a 20    /* Opcode */. 
1f750 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
1f760 20 20 20 20 2f 2a 20 54 68 65 20 63 75 72 73 6f      /* The curso
1f770 72 20 74 6f 20 73 65 65 6b 20 2a 2f 0a 20 20 55  r to seek */.  U
1f780 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b  npackedRecord r;
1f790 20 20 2f 2a 20 54 68 65 20 6b 65 79 20 74 6f 20    /* The key to 
1f7a0 73 65 65 6b 20 66 6f 72 20 2a 2f 0a 20 20 69 6e  seek for */.  in
1f7b0 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20  t nField;       
1f7c0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f   /* Number of co
1f7d0 6c 75 6d 6e 73 20 6f 72 20 66 69 65 6c 64 73 20  lumns or fields 
1f7e0 69 6e 20 74 68 65 20 6b 65 79 20 2a 2f 0a 20 20  in the key */.  
1f7f0 69 36 34 20 69 4b 65 79 3b 20 20 20 20 20 20 20  i64 iKey;       
1f800 20 20 20 2f 2a 20 54 68 65 20 72 6f 77 69 64 20     /* The rowid 
1f810 77 65 20 61 72 65 20 74 6f 20 73 65 65 6b 20 74  we are to seek t
1f820 6f 20 2a 2f 0a 20 20 69 6e 74 20 65 71 4f 6e 6c  o */.  int eqOnl
1f830 79 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 6c  y;        /* Onl
1f840 79 20 69 6e 74 65 72 65 73 74 65 64 20 69 6e 20  y interested in 
1f850 3d 3d 20 72 65 73 75 6c 74 73 20 2a 2f 0a 0a 20  == results */.. 
1f860 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1f870 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1f880 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
1f890 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 21 3d  ssert( pOp->p2!=
1f8a0 30 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  0 );.  pC = p->a
1f8b0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
1f8c0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
1f8d0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1f8e0 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
1f8f0 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73  E_BTREE );.  ass
1f900 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 45 20 3d  ert( OP_SeekLE =
1f910 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 31 20 29 3b  = OP_SeekLT+1 );
1f920 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65  .  assert( OP_Se
1f930 65 6b 47 45 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c  ekGE == OP_SeekL
1f940 54 2b 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28  T+2 );.  assert(
1f950 20 4f 50 5f 53 65 65 6b 47 54 20 3d 3d 20 4f 50   OP_SeekGT == OP
1f960 5f 53 65 65 6b 4c 54 2b 33 20 29 3b 0a 20 20 61  _SeekLT+3 );.  a
1f970 73 73 65 72 74 28 20 70 43 2d 3e 69 73 4f 72 64  ssert( pC->isOrd
1f980 65 72 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74  ered );.  assert
1f990 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  ( pC->uc.pCursor
1f9a0 21 3d 30 20 29 3b 0a 20 20 6f 63 20 3d 20 70 4f  !=0 );.  oc = pO
1f9b0 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 65 71 4f  p->opcode;.  eqO
1f9c0 6e 6c 79 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 6e  nly = 0;.  pC->n
1f9d0 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 23 69 66 64  ullRow = 0;.#ifd
1f9e0 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
1f9f0 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 70    pC->seekOp = p
1fa00 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e 64  Op->opcode;.#end
1fa10 69 66 0a 0a 20 20 69 66 28 20 70 43 2d 3e 69 73  if..  if( pC->is
1fa20 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20  Table ){.    /* 
1fa30 54 68 65 20 42 54 52 45 45 5f 53 45 45 4b 5f 45  The BTREE_SEEK_E
1fa40 51 20 66 6c 61 67 20 69 73 20 6f 6e 6c 79 20 73  Q flag is only s
1fa50 65 74 20 6f 6e 20 69 6e 64 65 78 20 63 75 72 73  et on index curs
1fa60 6f 72 73 20 2a 2f 0a 20 20 20 20 61 73 73 65 72  ors */.    asser
1fa70 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  t( sqlite3BtreeC
1fa80 75 72 73 6f 72 48 61 73 48 69 6e 74 28 70 43 2d  ursorHasHint(pC-
1fa90 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 42 54 52  >uc.pCursor, BTR
1faa0 45 45 5f 53 45 45 4b 5f 45 51 29 3d 3d 30 0a 20  EE_SEEK_EQ)==0. 
1fab0 20 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20               || 
1fac0 43 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a 0a 20  CORRUPT_DB );.. 
1fad0 20 20 20 2f 2a 20 54 68 65 20 69 6e 70 75 74 20     /* The input 
1fae0 76 61 6c 75 65 20 69 6e 20 50 33 20 6d 69 67 68  value in P3 migh
1faf0 74 20 62 65 20 6f 66 20 61 6e 79 20 74 79 70 65  t be of any type
1fb00 3a 20 69 6e 74 65 67 65 72 2c 20 72 65 61 6c 2c  : integer, real,
1fb10 20 73 74 72 69 6e 67 2c 0a 20 20 20 20 2a 2a 20   string,.    ** 
1fb20 62 6c 6f 62 2c 20 6f 72 20 4e 55 4c 4c 2e 20 20  blob, or NULL.  
1fb30 42 75 74 20 69 74 20 6e 65 65 64 73 20 74 6f 20  But it needs to 
1fb40 62 65 20 61 6e 20 69 6e 74 65 67 65 72 20 62 65  be an integer be
1fb50 66 6f 72 65 20 77 65 20 63 61 6e 20 64 6f 0a 20  fore we can do. 
1fb60 20 20 20 2a 2a 20 74 68 65 20 73 65 65 6b 2c 20     ** the seek, 
1fb70 73 6f 20 63 6f 6e 76 65 72 74 20 69 74 2e 20 2a  so convert it. *
1fb80 2f 0a 20 20 20 20 70 49 6e 33 20 3d 20 26 61 4d  /.    pIn3 = &aM
1fb90 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  em[pOp->p3];.   
1fba0 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67   if( (pIn3->flag
1fbb0 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d  s & (MEM_Int|MEM
1fbc0 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d  _Real|MEM_Str))=
1fbd0 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20  =MEM_Str ){.    
1fbe0 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66    applyNumericAf
1fbf0 66 69 6e 69 74 79 28 70 49 6e 33 2c 20 30 29 3b  finity(pIn3, 0);
1fc00 0a 20 20 20 20 7d 0a 20 20 20 20 69 4b 65 79 20  .    }.    iKey 
1fc10 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
1fc20 56 61 6c 75 65 28 70 49 6e 33 29 3b 0a 0a 20 20  Value(pIn3);..  
1fc30 20 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20 76    /* If the P3 v
1fc40 61 6c 75 65 20 63 6f 75 6c 64 20 6e 6f 74 20 62  alue could not b
1fc50 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f  e converted into
1fc60 20 61 6e 20 69 6e 74 65 67 65 72 20 77 69 74 68   an integer with
1fc70 6f 75 74 0a 20 20 20 20 2a 2a 20 6c 6f 73 73 20  out.    ** loss 
1fc80 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20  of information, 
1fc90 74 68 65 6e 20 73 70 65 63 69 61 6c 20 70 72 6f  then special pro
1fca0 63 65 73 73 69 6e 67 20 69 73 20 72 65 71 75 69  cessing is requi
1fcb0 72 65 64 2e 2e 2e 20 2a 2f 0a 20 20 20 20 69 66  red... */.    if
1fcc0 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  ( (pIn3->flags &
1fcd0 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a   MEM_Int)==0 ){.
1fce0 20 20 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d        if( (pIn3-
1fcf0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61  >flags & MEM_Rea
1fd00 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  l)==0 ){.       
1fd10 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20 76 61   /* If the P3 va
1fd20 6c 75 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f  lue cannot be co
1fd30 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 79  nverted into any
1fd40 20 6b 69 6e 64 20 6f 66 20 61 20 6e 75 6d 62 65   kind of a numbe
1fd50 72 2c 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68  r,.        ** th
1fd60 65 6e 20 74 68 65 20 73 65 65 6b 20 69 73 20 6e  en the seek is n
1fd70 6f 74 20 70 6f 73 73 69 62 6c 65 2c 20 73 6f 20  ot possible, so 
1fd80 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20  jump to P2 */.  
1fd90 20 20 20 20 20 20 56 64 62 65 42 72 61 6e 63 68        VdbeBranch
1fda0 54 61 6b 65 6e 28 31 2c 32 29 3b 20 67 6f 74 6f  Taken(1,2); goto
1fdb0 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20   jump_to_p2;.   
1fdc0 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1fdd0 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66    }..      /* If
1fde0 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74 69   the approximati
1fdf0 6f 6e 20 69 4b 65 79 20 69 73 20 6c 61 72 67 65  on iKey is large
1fe00 72 20 74 68 61 6e 20 74 68 65 20 61 63 74 75 61  r than the actua
1fe10 6c 20 72 65 61 6c 20 73 65 61 72 63 68 0a 20 20  l real search.  
1fe20 20 20 20 20 2a 2a 20 74 65 72 6d 2c 20 73 75 62      ** term, sub
1fe30 73 74 69 74 75 74 65 20 3e 3d 20 66 6f 72 20 3e  stitute >= for >
1fe40 20 61 6e 64 20 3c 20 66 6f 72 20 3c 3d 2e 20 65   and < for <=. e
1fe50 2e 67 2e 20 69 66 20 74 68 65 20 73 65 61 72 63  .g. if the searc
1fe60 68 20 74 65 72 6d 0a 20 20 20 20 20 20 2a 2a 20  h term.      ** 
1fe70 69 73 20 34 2e 39 20 61 6e 64 20 74 68 65 20 69  is 4.9 and the i
1fe80 6e 74 65 67 65 72 20 61 70 70 72 6f 78 69 6d 61  nteger approxima
1fe90 74 69 6f 6e 20 35 3a 0a 20 20 20 20 20 20 2a 2a  tion 5:.      **
1fea0 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20 20 20  .      **       
1feb0 20 28 78 20 3e 20 20 34 2e 39 29 20 20 20 20 2d   (x >  4.9)    -
1fec0 3e 20 20 20 20 20 28 78 20 3e 3d 20 35 29 0a 20  >     (x >= 5). 
1fed0 20 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 28       **        (
1fee0 78 20 3c 3d 20 34 2e 39 29 20 20 20 20 2d 3e 20  x <= 4.9)    -> 
1fef0 20 20 20 20 28 78 20 3c 20 20 35 29 0a 20 20 20      (x <  5).   
1ff00 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20     */.      if( 
1ff10 70 49 6e 33 2d 3e 75 2e 72 3c 28 64 6f 75 62 6c  pIn3->u.r<(doubl
1ff20 65 29 69 4b 65 79 20 29 7b 0a 20 20 20 20 20 20  e)iKey ){.      
1ff30 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65    assert( OP_See
1ff40 6b 47 45 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 2d  kGE==(OP_SeekGT-
1ff50 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  1) );.        as
1ff60 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 54 3d  sert( OP_SeekLT=
1ff70 3d 28 4f 50 5f 53 65 65 6b 4c 45 2d 31 29 20 29  =(OP_SeekLE-1) )
1ff80 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
1ff90 28 20 28 4f 50 5f 53 65 65 6b 4c 45 20 26 20 30  ( (OP_SeekLE & 0
1ffa0 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b  x0001)==(OP_Seek
1ffb0 47 54 20 26 20 30 78 30 30 30 31 29 20 29 3b 0a  GT & 0x0001) );.
1ffc0 20 20 20 20 20 20 20 20 69 66 28 20 28 6f 63 20          if( (oc 
1ffd0 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53  & 0x0001)==(OP_S
1ffe0 65 65 6b 47 54 20 26 20 30 78 30 30 30 31 29 20  eekGT & 0x0001) 
1fff0 29 20 6f 63 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a  ) oc--;.      }.
20000 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65  .      /* If the
20010 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 69   approximation i
20020 4b 65 79 20 69 73 20 73 6d 61 6c 6c 65 72 20 74  Key is smaller t
20030 68 61 6e 20 74 68 65 20 61 63 74 75 61 6c 20 72  han the actual r
20040 65 61 6c 20 73 65 61 72 63 68 0a 20 20 20 20 20  eal search.     
20050 20 2a 2a 20 74 65 72 6d 2c 20 73 75 62 73 74 69   ** term, substi
20060 74 75 74 65 20 3c 3d 20 66 6f 72 20 3c 20 61 6e  tute <= for < an
20070 64 20 3e 20 66 6f 72 20 3e 3d 2e 20 20 2a 2f 0a  d > for >=.  */.
20080 20 20 20 20 20 20 65 6c 73 65 20 69 66 28 20 70        else if( p
20090 49 6e 33 2d 3e 75 2e 72 3e 28 64 6f 75 62 6c 65  In3->u.r>(double
200a0 29 69 4b 65 79 20 29 7b 0a 20 20 20 20 20 20 20  )iKey ){.       
200b0 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b   assert( OP_Seek
200c0 4c 45 3d 3d 28 4f 50 5f 53 65 65 6b 4c 54 2b 31  LE==(OP_SeekLT+1
200d0 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  ) );.        ass
200e0 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 54 3d 3d  ert( OP_SeekGT==
200f0 28 4f 50 5f 53 65 65 6b 47 45 2b 31 29 20 29 3b  (OP_SeekGE+1) );
20100 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
20110 20 28 4f 50 5f 53 65 65 6b 4c 54 20 26 20 30 78   (OP_SeekLT & 0x
20120 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47  0001)==(OP_SeekG
20130 45 20 26 20 30 78 30 30 30 31 29 20 29 3b 0a 20  E & 0x0001) );. 
20140 20 20 20 20 20 20 20 69 66 28 20 28 6f 63 20 26         if( (oc &
20150 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65   0x0001)==(OP_Se
20160 65 6b 4c 54 20 26 20 30 78 30 30 30 31 29 20 29  ekLT & 0x0001) )
20170 20 6f 63 2b 2b 3b 0a 20 20 20 20 20 20 7d 0a 20   oc++;.      }. 
20180 20 20 20 7d 20 0a 20 20 20 20 72 63 20 3d 20 73     } .    rc = s
20190 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
201a0 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 75 63  oUnpacked(pC->uc
201b0 2e 70 43 75 72 73 6f 72 2c 20 30 2c 20 28 75 36  .pCursor, 0, (u6
201c0 34 29 69 4b 65 79 2c 20 30 2c 20 26 72 65 73 29  4)iKey, 0, &res)
201d0 3b 0a 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f  ;.    pC->moveto
201e0 54 61 72 67 65 74 20 3d 20 69 4b 65 79 3b 20 20  Target = iKey;  
201f0 2f 2a 20 55 73 65 64 20 62 79 20 4f 50 5f 44 65  /* Used by OP_De
20200 6c 65 74 65 20 2a 2f 0a 20 20 20 20 69 66 28 20  lete */.    if( 
20210 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
20220 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  .      goto abor
20230 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
20240 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
20250 20 20 20 2f 2a 20 46 6f 72 20 61 20 63 75 72 73     /* For a curs
20260 6f 72 20 77 69 74 68 20 74 68 65 20 42 54 52 45  or with the BTRE
20270 45 5f 53 45 45 4b 5f 45 51 20 68 69 6e 74 2c 20  E_SEEK_EQ hint, 
20280 6f 6e 6c 79 20 74 68 65 20 4f 50 5f 53 65 65 6b  only the OP_Seek
20290 47 45 20 61 6e 64 0a 20 20 20 20 2a 2a 20 4f 50  GE and.    ** OP
202a0 5f 53 65 65 6b 4c 45 20 6f 70 63 6f 64 65 73 20  _SeekLE opcodes 
202b0 61 72 65 20 61 6c 6c 6f 77 65 64 2c 20 61 6e 64  are allowed, and
202c0 20 74 68 65 73 65 20 6d 75 73 74 20 62 65 20 69   these must be i
202d0 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f  mmediately follo
202e0 77 65 64 0a 20 20 20 20 2a 2a 20 62 79 20 61 6e  wed.    ** by an
202f0 20 4f 50 5f 49 64 78 47 54 20 6f 72 20 4f 50 5f   OP_IdxGT or OP_
20300 49 64 78 4c 54 20 6f 70 63 6f 64 65 2c 20 72 65  IdxLT opcode, re
20310 73 70 65 63 74 69 76 65 6c 79 2c 20 77 69 74 68  spectively, with
20320 20 74 68 65 20 73 61 6d 65 20 6b 65 79 2e 0a 20   the same key.. 
20330 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 73 71     */.    if( sq
20340 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
20350 48 61 73 48 69 6e 74 28 70 43 2d 3e 75 63 2e 70  HasHint(pC->uc.p
20360 43 75 72 73 6f 72 2c 20 42 54 52 45 45 5f 53 45  Cursor, BTREE_SE
20370 45 4b 5f 45 51 29 20 29 7b 0a 20 20 20 20 20 20  EK_EQ) ){.      
20380 65 71 4f 6e 6c 79 20 3d 20 31 3b 0a 20 20 20 20  eqOnly = 1;.    
20390 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
203a0 70 63 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b 47 45  pcode==OP_SeekGE
203b0 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
203c0 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 3b 0a 20 20  =OP_SeekLE );.  
203d0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b      assert( pOp[
203e0 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  1].opcode==OP_Id
203f0 78 4c 54 20 7c 7c 20 70 4f 70 5b 31 5d 2e 6f 70  xLT || pOp[1].op
20400 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29  code==OP_IdxGT )
20410 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
20420 70 4f 70 5b 31 5d 2e 70 31 3d 3d 70 4f 70 5b 30  pOp[1].p1==pOp[0
20430 5d 2e 70 31 20 29 3b 0a 20 20 20 20 20 20 61 73  ].p1 );.      as
20440 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70 32 3d  sert( pOp[1].p2=
20450 3d 70 4f 70 5b 30 5d 2e 70 32 20 29 3b 0a 20 20  =pOp[0].p2 );.  
20460 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b      assert( pOp[
20470 31 5d 2e 70 33 3d 3d 70 4f 70 5b 30 5d 2e 70 33  1].p3==pOp[0].p3
20480 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
20490 28 20 70 4f 70 5b 31 5d 2e 70 34 2e 69 3d 3d 70  ( pOp[1].p4.i==p
204a0 4f 70 5b 30 5d 2e 70 34 2e 69 20 29 3b 0a 20 20  Op[0].p4.i );.  
204b0 20 20 7d 0a 0a 20 20 20 20 6e 46 69 65 6c 64 20    }..    nField 
204c0 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20  = pOp->p4.i;.   
204d0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
204e0 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
204f0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6e 46  ;.    assert( nF
20500 69 65 6c 64 3e 30 20 29 3b 0a 20 20 20 20 72 2e  ield>0 );.    r.
20510 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70  pKeyInfo = pC->p
20520 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e  KeyInfo;.    r.n
20530 46 69 65 6c 64 20 3d 20 28 75 31 36 29 6e 46 69  Field = (u16)nFi
20540 65 6c 64 3b 0a 0a 20 20 20 20 2f 2a 20 54 68 65  eld;..    /* The
20550 20 6e 65 78 74 20 6c 69 6e 65 20 6f 66 20 63 6f   next line of co
20560 64 65 20 63 6f 6d 70 75 74 65 73 20 61 73 20 66  de computes as f
20570 6f 6c 6c 6f 77 73 2c 20 6f 6e 6c 79 20 66 61 73  ollows, only fas
20580 74 65 72 3a 0a 20 20 20 20 2a 2a 20 20 20 69 66  ter:.    **   if
20590 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 20  ( oc==OP_SeekGT 
205a0 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45  || oc==OP_SeekLE
205b0 20 29 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20 72   ){.    **     r
205c0 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2d 31  .default_rc = -1
205d0 3b 0a 20 20 20 20 2a 2a 20 20 20 7d 65 6c 73 65  ;.    **   }else
205e0 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 64  {.    **     r.d
205f0 65 66 61 75 6c 74 5f 72 63 20 3d 20 2b 31 3b 0a  efault_rc = +1;.
20600 20 20 20 20 2a 2a 20 20 20 7d 0a 20 20 20 20 2a      **   }.    *
20610 2f 0a 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f  /.    r.default_
20620 72 63 20 3d 20 28 28 31 20 26 20 28 6f 63 20 2d  rc = ((1 & (oc -
20630 20 4f 50 5f 53 65 65 6b 4c 54 29 29 20 3f 20 2d   OP_SeekLT)) ? -
20640 31 20 3a 20 2b 31 29 3b 0a 20 20 20 20 61 73 73  1 : +1);.    ass
20650 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b  ert( oc!=OP_Seek
20660 47 54 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f  GT || r.default_
20670 72 63 3d 3d 2d 31 20 29 3b 0a 20 20 20 20 61 73  rc==-1 );.    as
20680 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65  sert( oc!=OP_See
20690 6b 4c 45 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74  kLE || r.default
206a0 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20 20 20 20 61  _rc==-1 );.    a
206b0 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65  ssert( oc!=OP_Se
206c0 65 6b 47 45 20 7c 7c 20 72 2e 64 65 66 61 75 6c  ekGE || r.defaul
206d0 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a 20 20 20 20  t_rc==+1 );.    
206e0 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53  assert( oc!=OP_S
206f0 65 65 6b 4c 54 20 7c 7c 20 72 2e 64 65 66 61 75  eekLT || r.defau
20700 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a 0a 20 20  lt_rc==+1 );..  
20710 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d    r.aMem = &aMem
20720 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65  [pOp->p3];.#ifde
20730 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
20740 20 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28     { int i; for(
20750 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b  i=0; i<r.nField;
20760 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65   i++) assert( me
20770 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d  mIsValid(&r.aMem
20780 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66  [i]) ); }.#endif
20790 0a 20 20 20 20 72 2e 65 71 53 65 65 6e 20 3d 20  .    r.eqSeen = 
207a0 30 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  0;.    rc = sqli
207b0 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e  te3BtreeMovetoUn
207c0 70 61 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43  packed(pC->uc.pC
207d0 75 72 73 6f 72 2c 20 26 72 2c 20 30 2c 20 30 2c  ursor, &r, 0, 0,
207e0 20 26 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20   &res);.    if( 
207f0 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
20800 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  .      goto abor
20810 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
20820 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 65 71      }.    if( eq
20830 4f 6e 6c 79 20 26 26 20 72 2e 65 71 53 65 65 6e  Only && r.eqSeen
20840 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73  ==0 ){.      ass
20850 65 72 74 28 20 72 65 73 21 3d 30 20 29 3b 0a 20  ert( res!=0 );. 
20860 20 20 20 20 20 67 6f 74 6f 20 73 65 65 6b 5f 6e       goto seek_n
20870 6f 74 5f 66 6f 75 6e 64 3b 0a 20 20 20 20 7d 0a  ot_found;.    }.
20880 20 20 7d 0a 20 20 70 43 2d 3e 64 65 66 65 72 72    }.  pC->deferr
20890 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
208a0 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
208b0 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 23  = CACHE_STALE;.#
208c0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
208d0 54 0a 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72  T.  sqlite3_sear
208e0 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64  ch_count++;.#end
208f0 69 66 0a 20 20 69 66 28 20 6f 63 3e 3d 4f 50 5f  if.  if( oc>=OP_
20900 53 65 65 6b 47 45 20 29 7b 20 20 61 73 73 65 72  SeekGE ){  asser
20910 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 45  t( oc==OP_SeekGE
20920 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47   || oc==OP_SeekG
20930 54 20 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73  T );.    if( res
20940 3c 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26  <0 || (res==0 &&
20950 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 29 20   oc==OP_SeekGT) 
20960 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 30  ){.      res = 0
20970 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
20980 69 74 65 33 42 74 72 65 65 4e 65 78 74 28 70 43  ite3BtreeNext(pC
20990 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 72  ->uc.pCursor, &r
209a0 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  es);.      if( r
209b0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67  c!=SQLITE_OK ) g
209c0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
209d0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c 73  _error;.    }els
209e0 65 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 30  e{.      res = 0
209f0 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
20a00 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 3d  .    assert( oc=
20a10 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 6f 63  =OP_SeekLT || oc
20a20 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 3b 0a 20  ==OP_SeekLE );. 
20a30 20 20 20 69 66 28 20 72 65 73 3e 30 20 7c 7c 20     if( res>0 || 
20a40 28 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f  (res==0 && oc==O
20a50 50 5f 53 65 65 6b 4c 54 29 20 29 7b 0a 20 20 20  P_SeekLT) ){.   
20a60 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20     res = 0;.    
20a70 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
20a80 72 65 65 50 72 65 76 69 6f 75 73 28 70 43 2d 3e  reePrevious(pC->
20a90 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 72 65 73  uc.pCursor, &res
20aa0 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21  );.      if( rc!
20ab0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74  =SQLITE_OK ) got
20ac0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
20ad0 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  rror;.    }else{
20ae0 0a 20 20 20 20 20 20 2f 2a 20 72 65 73 20 6d 69  .      /* res mi
20af0 67 68 74 20 62 65 20 6e 65 67 61 74 69 76 65 20  ght be negative 
20b00 62 65 63 61 75 73 65 20 74 68 65 20 74 61 62 6c  because the tabl
20b10 65 20 69 73 20 65 6d 70 74 79 2e 20 20 43 68 65  e is empty.  Che
20b20 63 6b 20 74 6f 0a 20 20 20 20 20 20 2a 2a 20 73  ck to.      ** s
20b30 65 65 20 69 66 20 74 68 69 73 20 69 73 20 74 68  ee if this is th
20b40 65 20 63 61 73 65 2e 0a 20 20 20 20 20 20 2a 2f  e case..      */
20b50 0a 20 20 20 20 20 20 72 65 73 20 3d 20 73 71 6c  .      res = sql
20b60 69 74 65 33 42 74 72 65 65 45 6f 66 28 70 43 2d  ite3BtreeEof(pC-
20b70 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20  >uc.pCursor);.  
20b80 20 20 7d 0a 20 20 7d 0a 73 65 65 6b 5f 6e 6f 74    }.  }.seek_not
20b90 5f 66 6f 75 6e 64 3a 0a 20 20 61 73 73 65 72 74  _found:.  assert
20ba0 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20  ( pOp->p2>0 );. 
20bb0 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
20bc0 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66  (res!=0,2);.  if
20bd0 28 20 72 65 73 20 29 7b 0a 20 20 20 20 67 6f 74  ( res ){.    got
20be0 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
20bf0 7d 65 6c 73 65 20 69 66 28 20 65 71 4f 6e 6c 79  }else if( eqOnly
20c00 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
20c10 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f  pOp[1].opcode==O
20c20 50 5f 49 64 78 4c 54 20 7c 7c 20 70 4f 70 5b 31  P_IdxLT || pOp[1
20c30 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ].opcode==OP_Idx
20c40 47 54 20 29 3b 0a 20 20 20 20 70 4f 70 2b 2b 3b  GT );.    pOp++;
20c50 20 2f 2a 20 53 6b 69 70 20 74 68 65 20 4f 50 5f   /* Skip the OP_
20c60 49 64 78 4c 74 20 6f 72 20 4f 50 5f 49 64 78 47  IdxLt or OP_IdxG
20c70 54 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73 20 2a  T that follows *
20c80 2f 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  /.  }.  break;.}
20c90 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6f 75  ../* Opcode: Fou
20ca0 6e 64 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  nd P1 P2 P3 P4 *
20cb0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
20cc0 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
20cd0 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20 72   If P4==0 then r
20ce0 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73  egister P3 holds
20cf0 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63   a blob construc
20d00 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72  ted by MakeRecor
20d10 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74  d.  If.** P4>0 t
20d20 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20  hen register P3 
20d30 69 73 20 74 68 65 20 66 69 72 73 74 20 6f 66 20  is the first of 
20d40 50 34 20 72 65 67 69 73 74 65 72 73 20 74 68 61  P4 registers tha
20d50 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  t form an unpack
20d60 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a  ed.** record..**
20d70 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73  .** Cursor P1 is
20d80 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72   on an index btr
20d90 65 65 2e 20 20 49 66 20 74 68 65 20 72 65 63 6f  ee.  If the reco
20da0 72 64 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  rd identified by
20db0 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 69 73   P3 and P4.** is
20dc0 20 61 20 70 72 65 66 69 78 20 6f 66 20 61 6e 79   a prefix of any
20dd0 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74 68 65   entry in P1 the
20de0 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d 61 64 65  n a jump is made
20df0 20 74 6f 20 50 32 20 61 6e 64 0a 2a 2a 20 50 31   to P2 and.** P1
20e00 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e   is left pointin
20e10 67 20 61 74 20 74 68 65 20 6d 61 74 63 68 69 6e  g at the matchin
20e20 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 54  g entry..**.** T
20e30 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65  his operation le
20e40 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20  aves the cursor 
20e50 69 6e 20 61 20 73 74 61 74 65 20 77 68 65 72 65  in a state where
20e60 20 69 74 20 63 61 6e 20 62 65 0a 2a 2a 20 61 64   it can be.** ad
20e70 76 61 6e 63 65 64 20 69 6e 20 74 68 65 20 66 6f  vanced in the fo
20e80 72 77 61 72 64 20 64 69 72 65 63 74 69 6f 6e 2e  rward direction.
20e90 20 20 54 68 65 20 4e 65 78 74 20 69 6e 73 74 72    The Next instr
20ea0 75 63 74 69 6f 6e 20 77 69 6c 6c 20 77 6f 72 6b  uction will work
20eb0 2c 0a 2a 2a 20 62 75 74 20 6e 6f 74 20 74 68 65  ,.** but not the
20ec0 20 50 72 65 76 20 69 6e 73 74 72 75 63 74 69 6f   Prev instructio
20ed0 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  n..**.** See als
20ee0 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43  o: NotFound, NoC
20ef0 6f 6e 66 6c 69 63 74 2c 20 4e 6f 74 45 78 69 73  onflict, NotExis
20f00 74 73 2e 20 53 65 65 6b 47 65 0a 2a 2f 0a 2f 2a  ts. SeekGe.*/./*
20f10 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 46 6f 75 6e   Opcode: NotFoun
20f20 64 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  d P1 P2 P3 P4 *.
20f30 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
20f40 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
20f50 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20 72 65  If P4==0 then re
20f60 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20  gister P3 holds 
20f70 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74  a blob construct
20f80 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64  ed by MakeRecord
20f90 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68  .  If.** P4>0 th
20fa0 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69  en register P3 i
20fb0 73 20 74 68 65 20 66 69 72 73 74 20 6f 66 20 50  s the first of P
20fc0 34 20 72 65 67 69 73 74 65 72 73 20 74 68 61 74  4 registers that
20fd0 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65   form an unpacke
20fe0 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 20  d.** record..** 
20ff0 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69 73  .** Cursor P1 is
21000 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74 72   on an index btr
21010 65 65 2e 20 20 49 66 20 74 68 65 20 72 65 63 6f  ee.  If the reco
21020 72 64 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  rd identified by
21030 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 69 73   P3 and P4.** is
21040 20 6e 6f 74 20 74 68 65 20 70 72 65 66 69 78 20   not the prefix 
21050 6f 66 20 61 6e 79 20 65 6e 74 72 79 20 69 6e 20  of any entry in 
21060 50 31 20 74 68 65 6e 20 61 20 6a 75 6d 70 20 69  P1 then a jump i
21070 73 20 6d 61 64 65 20 74 6f 20 50 32 2e 20 20 49  s made to P2.  I
21080 66 20 50 31 20 0a 2a 2a 20 64 6f 65 73 20 63 6f  f P1 .** does co
21090 6e 74 61 69 6e 20 61 6e 20 65 6e 74 72 79 20 77  ntain an entry w
210a0 68 6f 73 65 20 70 72 65 66 69 78 20 6d 61 74 63  hose prefix matc
210b0 68 65 73 20 74 68 65 20 50 33 2f 50 34 20 72 65  hes the P3/P4 re
210c0 63 6f 72 64 20 74 68 65 6e 20 63 6f 6e 74 72 6f  cord then contro
210d0 6c 0a 2a 2a 20 66 61 6c 6c 73 20 74 68 72 6f 75  l.** falls throu
210e0 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
210f0 6e 73 74 72 75 63 74 69 6f 6e 20 61 6e 64 20 50  nstruction and P
21100 31 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69  1 is left pointi
21110 6e 67 20 61 74 20 74 68 65 0a 2a 2a 20 6d 61 74  ng at the.** mat
21120 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a  ching entry..**.
21130 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f  ** This operatio
21140 6e 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72  n leaves the cur
21150 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20 77  sor in a state w
21160 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62  here it cannot b
21170 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20 69 6e  e.** advanced in
21180 20 65 69 74 68 65 72 20 64 69 72 65 63 74 69 6f   either directio
21190 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  n.  In other wor
211a0 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64  ds, the Next and
211b0 20 50 72 65 76 0a 2a 2a 20 6f 70 63 6f 64 65 73   Prev.** opcodes
211c0 20 64 6f 20 6e 6f 74 20 77 6f 72 6b 20 61 66 74   do not work aft
211d0 65 72 20 74 68 69 73 20 6f 70 65 72 61 74 69 6f  er this operatio
211e0 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  n..**.** See als
211f0 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69  o: Found, NotExi
21200 73 74 73 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 0a  sts, NoConflict.
21210 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f  */./* Opcode: No
21220 43 6f 6e 66 6c 69 63 74 20 50 31 20 50 32 20 50  Conflict P1 P2 P
21230 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
21240 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
21250 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20  .**.** If P4==0 
21260 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33  then register P3
21270 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f   holds a blob co
21280 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b  nstructed by Mak
21290 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20  eRecord.  If.** 
212a0 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74  P4>0 then regist
212b0 65 72 20 50 33 20 69 73 20 74 68 65 20 66 69 72  er P3 is the fir
212c0 73 74 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  st of P4 registe
212d0 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20  rs that form an 
212e0 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f  unpacked.** reco
212f0 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f  rd..** .** Curso
21300 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e  r P1 is on an in
21310 64 65 78 20 62 74 72 65 65 2e 20 20 49 66 20 74  dex btree.  If t
21320 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69  he record identi
21330 66 69 65 64 20 62 79 20 50 33 20 61 6e 64 20 50  fied by P3 and P
21340 34 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61 6e  4.** contains an
21350 79 20 4e 55 4c 4c 20 76 61 6c 75 65 2c 20 6a 75  y NULL value, ju
21360 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
21370 6f 20 50 32 2e 20 20 49 66 20 61 6c 6c 20 74 65  o P2.  If all te
21380 72 6d 73 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65  rms of the.** re
21390 63 6f 72 64 20 61 72 65 20 6e 6f 74 2d 4e 55 4c  cord are not-NUL
213a0 4c 20 74 68 65 6e 20 61 20 63 68 65 63 6b 20 69  L then a check i
213b0 73 20 64 6f 6e 65 20 74 6f 20 64 65 74 65 72 6d  s done to determ
213c0 69 6e 65 20 69 66 20 61 6e 79 20 72 6f 77 20 69  ine if any row i
213d0 6e 20 74 68 65 0a 2a 2a 20 50 31 20 69 6e 64 65  n the.** P1 inde
213e0 78 20 62 74 72 65 65 20 68 61 73 20 61 20 6d 61  x btree has a ma
213f0 74 63 68 69 6e 67 20 6b 65 79 20 70 72 65 66 69  tching key prefi
21400 78 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65  x.  If there are
21410 20 6e 6f 20 6d 61 74 63 68 65 73 2c 20 6a 75 6d   no matches, jum
21420 70 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79  p.** immediately
21430 20 74 6f 20 50 32 2e 20 20 49 66 20 74 68 65 72   to P2.  If ther
21440 65 20 69 73 20 61 20 6d 61 74 63 68 2c 20 66 61  e is a match, fa
21450 6c 6c 20 74 68 72 6f 75 67 68 20 61 6e 64 20 6c  ll through and l
21460 65 61 76 65 20 74 68 65 20 50 31 0a 2a 2a 20 63  eave the P1.** c
21470 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74  ursor pointing t
21480 6f 20 74 68 65 20 6d 61 74 63 68 69 6e 67 20 72  o the matching r
21490 6f 77 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  ow..**.** This o
214a0 70 63 6f 64 65 20 69 73 20 73 69 6d 69 6c 61 72  pcode is similar
214b0 20 74 6f 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20   to OP_NotFound 
214c0 77 69 74 68 20 74 68 65 20 65 78 63 65 70 74 69  with the excepti
214d0 6f 6e 73 20 74 68 61 74 20 74 68 65 0a 2a 2a 20  ons that the.** 
214e0 62 72 61 6e 63 68 20 69 73 20 61 6c 77 61 79 73  branch is always
214f0 20 74 61 6b 65 6e 20 69 66 20 61 6e 79 20 70 61   taken if any pa
21500 72 74 20 6f 66 20 74 68 65 20 73 65 61 72 63 68  rt of the search
21510 20 6b 65 79 20 69 6e 70 75 74 20 69 73 20 4e 55   key input is NU
21520 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  LL..**.** This o
21530 70 65 72 61 74 69 6f 6e 20 6c 65 61 76 65 73 20  peration leaves 
21540 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20  the cursor in a 
21550 73 74 61 74 65 20 77 68 65 72 65 20 69 74 20 63  state where it c
21560 61 6e 6e 6f 74 20 62 65 0a 2a 2a 20 61 64 76 61  annot be.** adva
21570 6e 63 65 64 20 69 6e 20 65 69 74 68 65 72 20 64  nced in either d
21580 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74  irection.  In ot
21590 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 4e  her words, the N
215a0 65 78 74 20 61 6e 64 20 50 72 65 76 0a 2a 2a 20  ext and Prev.** 
215b0 6f 70 63 6f 64 65 73 20 64 6f 20 6e 6f 74 20 77  opcodes do not w
215c0 6f 72 6b 20 61 66 74 65 72 20 74 68 69 73 20 6f  ork after this o
215d0 70 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  peration..**.** 
215e0 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75  See also: NotFou
215f0 6e 64 2c 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78  nd, Found, NotEx
21600 69 73 74 73 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ists.*/.case OP_
21610 4e 6f 43 6f 6e 66 6c 69 63 74 3a 20 20 20 20 20  NoConflict:     
21620 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
21630 63 61 73 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64  case OP_NotFound
21640 3a 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c  :       /* jump,
21650 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
21660 46 6f 75 6e 64 3a 20 7b 20 20 20 20 20 20 20 20  Found: {        
21670 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
21680 20 20 69 6e 74 20 61 6c 72 65 61 64 79 45 78 69    int alreadyExi
21690 73 74 73 3b 0a 20 20 69 6e 74 20 74 61 6b 65 4a  sts;.  int takeJ
216a0 75 6d 70 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 20  ump;.  int ii;. 
216b0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
216c0 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e  .  int res;.  Un
216d0 70 61 63 6b 65 64 52 65 63 6f 72 64 20 2a 70 46  packedRecord *pF
216e0 72 65 65 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52  ree;.  UnpackedR
216f0 65 63 6f 72 64 20 2a 70 49 64 78 4b 65 79 3b 0a  ecord *pIdxKey;.
21700 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64    UnpackedRecord
21710 20 72 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49   r;..#ifdef SQLI
21720 54 45 5f 54 45 53 54 0a 20 20 69 66 28 20 70 4f  TE_TEST.  if( pO
21730 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 6f  p->opcode!=OP_No
21740 43 6f 6e 66 6c 69 63 74 20 29 20 73 71 6c 69 74  Conflict ) sqlit
21750 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74 2b 2b  e3_found_count++
21760 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 61 73 73 65  ;.#endif..  asse
21770 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
21780 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
21790 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
217a0 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
217b0 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 70 43 20  4_INT32 );.  pC 
217c0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
217d0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
217e0 43 21 3d 30 20 29 3b 0a 23 69 66 64 65 66 20 53  C!=0 );.#ifdef S
217f0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43  QLITE_DEBUG.  pC
21800 2d 3e 73 65 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e  ->seekOp = pOp->
21810 6f 70 63 6f 64 65 3b 0a 23 65 6e 64 69 66 0a 20  opcode;.#endif. 
21820 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
21830 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74  p->p3];.  assert
21840 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
21850 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
21860 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75  .  assert( pC->u
21870 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  c.pCursor!=0 );.
21880 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
21890 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 69 66  Table==0 );.  if
218a0 28 20 70 4f 70 2d 3e 70 34 2e 69 3e 30 20 29 7b  ( pOp->p4.i>0 ){
218b0 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20  .    r.pKeyInfo 
218c0 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a  = pC->pKeyInfo;.
218d0 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28      r.nField = (
218e0 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  u16)pOp->p4.i;. 
218f0 20 20 20 72 2e 61 4d 65 6d 20 3d 20 70 49 6e 33     r.aMem = pIn3
21900 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
21910 44 45 42 55 47 0a 20 20 20 20 66 6f 72 28 69 69  DEBUG.    for(ii
21920 3d 30 3b 20 69 69 3c 72 2e 6e 46 69 65 6c 64 3b  =0; ii<r.nField;
21930 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 73   ii++){.      as
21940 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
21950 28 26 72 2e 61 4d 65 6d 5b 69 69 5d 29 20 29 3b  (&r.aMem[ii]) );
21960 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
21970 72 2e 61 4d 65 6d 5b 69 69 5d 2e 66 6c 61 67 73  r.aMem[ii].flags
21980 20 26 20 4d 45 4d 5f 5a 65 72 6f 29 3d 3d 30 20   & MEM_Zero)==0 
21990 7c 7c 20 72 2e 61 4d 65 6d 5b 69 69 5d 2e 6e 3d  || r.aMem[ii].n=
219a0 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20  =0 );.      if( 
219b0 69 69 20 29 20 52 45 47 49 53 54 45 52 5f 54 52  ii ) REGISTER_TR
219c0 41 43 45 28 70 4f 70 2d 3e 70 33 2b 69 69 2c 20  ACE(pOp->p3+ii, 
219d0 26 72 2e 61 4d 65 6d 5b 69 69 5d 29 3b 0a 20 20  &r.aMem[ii]);.  
219e0 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 70    }.#endif.    p
219f0 49 64 78 4b 65 79 20 3d 20 26 72 3b 0a 20 20 20  IdxKey = &r;.   
21a00 20 70 46 72 65 65 20 3d 20 30 3b 0a 20 20 7d 65   pFree = 0;.  }e
21a10 6c 73 65 7b 0a 20 20 20 20 70 46 72 65 65 20 3d  lse{.    pFree =
21a20 20 70 49 64 78 4b 65 79 20 3d 20 73 71 6c 69 74   pIdxKey = sqlit
21a30 65 33 56 64 62 65 41 6c 6c 6f 63 55 6e 70 61 63  e3VdbeAllocUnpac
21a40 6b 65 64 52 65 63 6f 72 64 28 70 43 2d 3e 70 4b  kedRecord(pC->pK
21a50 65 79 49 6e 66 6f 29 3b 0a 20 20 20 20 69 66 28  eyInfo);.    if(
21a60 20 70 49 64 78 4b 65 79 3d 3d 30 20 29 20 67 6f   pIdxKey==0 ) go
21a70 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61  to no_mem;.    a
21a80 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61  ssert( pIn3->fla
21a90 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b  gs & MEM_Blob );
21aa0 0a 20 20 20 20 28 76 6f 69 64 29 45 78 70 61 6e  .    (void)Expan
21ab0 64 42 6c 6f 62 28 70 49 6e 33 29 3b 0a 20 20 20  dBlob(pIn3);.   
21ac0 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 63 6f   sqlite3VdbeReco
21ad0 72 64 55 6e 70 61 63 6b 28 70 43 2d 3e 70 4b 65  rdUnpack(pC->pKe
21ae0 79 49 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e 2c 20  yInfo, pIn3->n, 
21af0 70 49 6e 33 2d 3e 7a 2c 20 70 49 64 78 4b 65 79  pIn3->z, pIdxKey
21b00 29 3b 0a 20 20 7d 0a 20 20 70 49 64 78 4b 65 79  );.  }.  pIdxKey
21b10 2d 3e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30  ->default_rc = 0
21b20 3b 0a 20 20 74 61 6b 65 4a 75 6d 70 20 3d 20 30  ;.  takeJump = 0
21b30 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  ;.  if( pOp->opc
21b40 6f 64 65 3d 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69  ode==OP_NoConfli
21b50 63 74 20 29 7b 0a 20 20 20 20 2f 2a 20 46 6f 72  ct ){.    /* For
21b60 20 74 68 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69   the OP_NoConfli
21b70 63 74 20 6f 70 63 6f 64 65 2c 20 74 61 6b 65 20  ct opcode, take 
21b80 74 68 65 20 6a 75 6d 70 20 69 66 20 61 6e 79 20  the jump if any 
21b90 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 69 6e  of the.    ** in
21ba0 70 75 74 20 66 69 65 6c 64 73 20 61 72 65 20 4e  put fields are N
21bb0 55 4c 4c 2c 20 73 69 6e 63 65 20 61 6e 79 20 6b  ULL, since any k
21bc0 65 79 20 77 69 74 68 20 61 20 4e 55 4c 4c 20 77  ey with a NULL w
21bd0 69 6c 6c 20 6e 6f 74 0a 20 20 20 20 2a 2a 20 63  ill not.    ** c
21be0 6f 6e 66 6c 69 63 74 20 2a 2f 0a 20 20 20 20 66  onflict */.    f
21bf0 6f 72 28 69 69 3d 30 3b 20 69 69 3c 70 49 64 78  or(ii=0; ii<pIdx
21c00 4b 65 79 2d 3e 6e 46 69 65 6c 64 3b 20 69 69 2b  Key->nField; ii+
21c10 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 49  +){.      if( pI
21c20 64 78 4b 65 79 2d 3e 61 4d 65 6d 5b 69 69 5d 2e  dxKey->aMem[ii].
21c30 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
21c40 20 29 7b 0a 20 20 20 20 20 20 20 20 74 61 6b 65   ){.        take
21c50 4a 75 6d 70 20 3d 20 31 3b 0a 20 20 20 20 20 20  Jump = 1;.      
21c60 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
21c70 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 63 20  .    }.  }.  rc 
21c80 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
21c90 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d  vetoUnpacked(pC-
21ca0 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 70 49 64  >uc.pCursor, pId
21cb0 78 4b 65 79 2c 20 30 2c 20 30 2c 20 26 72 65 73  xKey, 0, 0, &res
21cc0 29 3b 0a 20 20 69 66 28 20 70 46 72 65 65 20 29  );.  if( pFree )
21cd0 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
21ce0 62 2c 20 70 46 72 65 65 29 3b 0a 20 20 69 66 28  b, pFree);.  if(
21cf0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
21d00 7b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74  {.    goto abort
21d10 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
21d20 20 7d 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73   }.  pC->seekRes
21d30 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20 61 6c 72  ult = res;.  alr
21d40 65 61 64 79 45 78 69 73 74 73 20 3d 20 28 72 65  eadyExists = (re
21d50 73 3d 3d 30 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c  s==0);.  pC->nul
21d60 6c 52 6f 77 20 3d 20 31 2d 61 6c 72 65 61 64 79  lRow = 1-already
21d70 45 78 69 73 74 73 3b 0a 20 20 70 43 2d 3e 64 65  Exists;.  pC->de
21d80 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
21d90 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
21da0 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
21db0 45 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  E;.  if( pOp->op
21dc0 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20 29  code==OP_Found )
21dd0 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  {.    VdbeBranch
21de0 54 61 6b 65 6e 28 61 6c 72 65 61 64 79 45 78 69  Taken(alreadyExi
21df0 73 74 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69  sts!=0,2);.    i
21e00 66 28 20 61 6c 72 65 61 64 79 45 78 69 73 74 73  f( alreadyExists
21e10 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f   ) goto jump_to_
21e20 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  p2;.  }else{.   
21e30 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
21e40 28 74 61 6b 65 4a 75 6d 70 7c 7c 61 6c 72 65 61  (takeJump||alrea
21e50 64 79 45 78 69 73 74 73 3d 3d 30 2c 32 29 3b 0a  dyExists==0,2);.
21e60 20 20 20 20 69 66 28 20 74 61 6b 65 4a 75 6d 70      if( takeJump
21e70 20 7c 7c 20 21 61 6c 72 65 61 64 79 45 78 69 73   || !alreadyExis
21e80 74 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  ts ) goto jump_t
21e90 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61  o_p2;.  }.  brea
21ea0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
21eb0 20 53 65 65 6b 52 6f 77 69 64 20 50 31 20 50 32   SeekRowid P1 P2
21ec0 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
21ed0 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72 5b 50 33  sis: intkey=r[P3
21ee0 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68  ].**.** P1 is th
21ef0 65 20 69 6e 64 65 78 20 6f 66 20 61 20 63 75 72  e index of a cur
21f00 73 6f 72 20 6f 70 65 6e 20 6f 6e 20 61 6e 20 53  sor open on an S
21f10 51 4c 20 74 61 62 6c 65 20 62 74 72 65 65 20 28  QL table btree (
21f20 77 69 74 68 20 69 6e 74 65 67 65 72 0a 2a 2a 20  with integer.** 
21f30 6b 65 79 73 29 2e 20 20 49 66 20 72 65 67 69 73  keys).  If regis
21f40 74 65 72 20 50 33 20 64 6f 65 73 20 6e 6f 74 20  ter P3 does not 
21f50 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67  contain an integ
21f60 65 72 20 6f 72 20 69 66 20 50 31 20 64 6f 65 73  er or if P1 does
21f70 20 6e 6f 74 0a 2a 2a 20 63 6f 6e 74 61 69 6e 20   not.** contain 
21f80 61 20 72 65 63 6f 72 64 20 77 69 74 68 20 72 6f  a record with ro
21f90 77 69 64 20 50 33 20 74 68 65 6e 20 6a 75 6d 70  wid P3 then jump
21fa0 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
21fb0 50 32 2e 20 20 0a 2a 2a 20 4f 72 2c 20 69 66 20  P2.  .** Or, if 
21fc0 50 32 20 69 73 20 30 2c 20 72 61 69 73 65 20 61  P2 is 0, raise a
21fd0 6e 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  n SQLITE_CORRUPT
21fe0 20 65 72 72 6f 72 2e 20 49 66 20 50 31 20 64 6f   error. If P1 do
21ff0 65 73 20 63 6f 6e 74 61 69 6e 0a 2a 2a 20 61 20  es contain.** a 
22000 72 65 63 6f 72 64 20 77 69 74 68 20 72 6f 77 69  record with rowi
22010 64 20 50 33 20 74 68 65 6e 20 0a 2a 2a 20 6c 65  d P3 then .** le
22020 61 76 65 20 74 68 65 20 63 75 72 73 6f 72 20 70  ave the cursor p
22030 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 61 74 20  ointing at that 
22040 72 65 63 6f 72 64 20 61 6e 64 20 66 61 6c 6c 20  record and fall 
22050 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
22060 65 78 74 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69  ext.** instructi
22070 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50  on..**.** The OP
22080 5f 4e 6f 74 45 78 69 73 74 73 20 6f 70 63 6f 64  _NotExists opcod
22090 65 20 70 65 72 66 6f 72 6d 73 20 74 68 65 20 73  e performs the s
220a0 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 2c 20 62  ame operation, b
220b0 75 74 20 77 69 74 68 20 4f 50 5f 4e 6f 74 45 78  ut with OP_NotEx
220c0 69 73 74 73 0a 2a 2a 20 74 68 65 20 50 33 20 72  ists.** the P3 r
220d0 65 67 69 73 74 65 72 20 6d 75 73 74 20 62 65 20  egister must be 
220e0 67 75 61 72 61 6e 74 65 65 64 20 74 6f 20 63 6f  guaranteed to co
220f0 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72  ntain an integer
22100 20 76 61 6c 75 65 2e 20 20 57 69 74 68 20 74 68   value.  With th
22110 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 2c 20 72 65  is.** opcode, re
22120 67 69 73 74 65 72 20 50 33 20 6d 69 67 68 74 20  gister P3 might 
22130 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69  not contain an i
22140 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68  nteger..**.** Th
22150 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 6f 70  e OP_NotFound op
22160 63 6f 64 65 20 70 65 72 66 6f 72 6d 73 20 74 68  code performs th
22170 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e  e same operation
22180 20 6f 6e 20 69 6e 64 65 78 20 62 74 72 65 65 73   on index btrees
22190 0a 2a 2a 20 28 77 69 74 68 20 61 72 62 69 74 72  .** (with arbitr
221a0 61 72 79 20 6d 75 6c 74 69 2d 76 61 6c 75 65 20  ary multi-value 
221b0 6b 65 79 73 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  keys)..**.** Thi
221c0 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20  s opcode leaves 
221d0 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20  the cursor in a 
221e0 73 74 61 74 65 20 77 68 65 72 65 20 69 74 20 63  state where it c
221f0 61 6e 6e 6f 74 20 62 65 20 61 64 76 61 6e 63 65  annot be advance
22200 64 0a 2a 2a 20 69 6e 20 65 69 74 68 65 72 20 64  d.** in either d
22210 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74  irection.  In ot
22220 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 4e  her words, the N
22230 65 78 74 20 61 6e 64 20 50 72 65 76 20 6f 70 63  ext and Prev opc
22240 6f 64 65 73 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74  odes will.** not
22250 20 77 6f 72 6b 20 66 6f 6c 6c 6f 77 69 6e 67 20   work following 
22260 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a  this opcode..**.
22270 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
22280 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f  nd, NotFound, No
22290 43 6f 6e 66 6c 69 63 74 2c 20 53 65 65 6b 52 6f  Conflict, SeekRo
222a0 77 69 64 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  wid.*/./* Opcode
222b0 3a 20 4e 6f 74 45 78 69 73 74 73 20 50 31 20 50  : NotExists P1 P
222c0 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
222d0 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72 5b 50  psis: intkey=r[P
222e0 33 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74  3].**.** P1 is t
222f0 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20 63 75  he index of a cu
22300 72 73 6f 72 20 6f 70 65 6e 20 6f 6e 20 61 6e 20  rsor open on an 
22310 53 51 4c 20 74 61 62 6c 65 20 62 74 72 65 65 20  SQL table btree 
22320 28 77 69 74 68 20 69 6e 74 65 67 65 72 0a 2a 2a  (with integer.**
22330 20 6b 65 79 73 29 2e 20 20 50 33 20 69 73 20 61   keys).  P3 is a
22340 6e 20 69 6e 74 65 67 65 72 20 72 6f 77 69 64 2e  n integer rowid.
22350 20 20 49 66 20 50 31 20 64 6f 65 73 20 6e 6f 74    If P1 does not
22360 20 63 6f 6e 74 61 69 6e 20 61 20 72 65 63 6f 72   contain a recor
22370 64 20 77 69 74 68 0a 2a 2a 20 72 6f 77 69 64 20  d with.** rowid 
22380 50 33 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d  P3 then jump imm
22390 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20  ediately to P2. 
223a0 20 4f 72 2c 20 69 66 20 50 32 20 69 73 20 30 2c   Or, if P2 is 0,
223b0 20 72 61 69 73 65 20 61 6e 0a 2a 2a 20 53 51 4c   raise an.** SQL
223c0 49 54 45 5f 43 4f 52 52 55 50 54 20 65 72 72 6f  ITE_CORRUPT erro
223d0 72 2e 20 49 66 20 50 31 20 64 6f 65 73 20 63 6f  r. If P1 does co
223e0 6e 74 61 69 6e 20 61 20 72 65 63 6f 72 64 20 77  ntain a record w
223f0 69 74 68 20 72 6f 77 69 64 20 50 33 20 74 68 65  ith rowid P3 the
22400 6e 20 0a 2a 2a 20 6c 65 61 76 65 20 74 68 65 20  n .** leave the 
22410 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20  cursor pointing 
22420 61 74 20 74 68 61 74 20 72 65 63 6f 72 64 20 61  at that record a
22430 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  nd fall through 
22440 74 6f 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69  to the next.** i
22450 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
22460 2a 20 54 68 65 20 4f 50 5f 53 65 65 6b 52 6f 77  * The OP_SeekRow
22470 69 64 20 6f 70 63 6f 64 65 20 70 65 72 66 6f 72  id opcode perfor
22480 6d 73 20 74 68 65 20 73 61 6d 65 20 6f 70 65 72  ms the same oper
22490 61 74 69 6f 6e 20 62 75 74 20 61 6c 73 6f 20 61  ation but also a
224a0 6c 6c 6f 77 73 20 74 68 65 0a 2a 2a 20 50 33 20  llows the.** P3 
224b0 72 65 67 69 73 74 65 72 20 74 6f 20 63 6f 6e 74  register to cont
224c0 61 69 6e 20 61 20 6e 6f 6e 2d 69 6e 74 65 67 65  ain a non-intege
224d0 72 20 76 61 6c 75 65 2c 20 69 6e 20 77 68 69 63  r value, in whic
224e0 68 20 63 61 73 65 20 74 68 65 20 6a 75 6d 70 20  h case the jump 
224f0 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 74 61 6b  is.** always tak
22500 65 6e 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65  en.  This opcode
22510 20 72 65 71 75 69 72 65 73 20 74 68 61 74 20 50   requires that P
22520 33 20 61 6c 77 61 79 73 20 63 6f 6e 74 61 69 6e  3 always contain
22530 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a   an integer..**.
22540 2a 2a 20 54 68 65 20 4f 50 5f 4e 6f 74 46 6f 75  ** The OP_NotFou
22550 6e 64 20 6f 70 63 6f 64 65 20 70 65 72 66 6f 72  nd opcode perfor
22560 6d 73 20 74 68 65 20 73 61 6d 65 20 6f 70 65 72  ms the same oper
22570 61 74 69 6f 6e 20 6f 6e 20 69 6e 64 65 78 20 62  ation on index b
22580 74 72 65 65 73 0a 2a 2a 20 28 77 69 74 68 20 61  trees.** (with a
22590 72 62 69 74 72 61 72 79 20 6d 75 6c 74 69 2d 76  rbitrary multi-v
225a0 61 6c 75 65 20 6b 65 79 73 29 2e 0a 2a 2a 0a 2a  alue keys)..**.*
225b0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65  * This opcode le
225c0 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20  aves the cursor 
225d0 69 6e 20 61 20 73 74 61 74 65 20 77 68 65 72 65  in a state where
225e0 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 20 61 64   it cannot be ad
225f0 76 61 6e 63 65 64 0a 2a 2a 20 69 6e 20 65 69 74  vanced.** in eit
22600 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e 20 20  her direction.  
22610 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
22620 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50 72 65  the Next and Pre
22630 76 20 6f 70 63 6f 64 65 73 20 77 69 6c 6c 0a 2a  v opcodes will.*
22640 2a 20 6e 6f 74 20 77 6f 72 6b 20 66 6f 6c 6c 6f  * not work follo
22650 77 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65  wing this opcode
22660 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
22670 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e  : Found, NotFoun
22680 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20 53  d, NoConflict, S
22690 65 65 6b 52 6f 77 69 64 0a 2a 2f 0a 63 61 73 65  eekRowid.*/.case
226a0 20 4f 50 5f 53 65 65 6b 52 6f 77 69 64 3a 20 7b   OP_SeekRowid: {
226b0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
226c0 20 69 6e 33 20 2a 2f 0a 20 20 56 64 62 65 43 75   in3 */.  VdbeCu
226d0 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75  rsor *pC;.  BtCu
226e0 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69  rsor *pCrsr;.  i
226f0 6e 74 20 72 65 73 3b 0a 20 20 75 36 34 20 69 4b  nt res;.  u64 iK
22700 65 79 3b 0a 0a 20 20 70 49 6e 33 20 3d 20 26 61  ey;..  pIn3 = &a
22710 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
22720 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73  if( (pIn3->flags
22730 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29   & MEM_Int)==0 )
22740 7b 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e  {.    applyAffin
22750 69 74 79 28 70 49 6e 33 2c 20 53 51 4c 49 54 45  ity(pIn3, SQLITE
22760 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20 65 6e  _AFF_NUMERIC, en
22770 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 69 66 28  coding);.    if(
22780 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20   (pIn3->flags & 
22790 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 20 67 6f  MEM_Int)==0 ) go
227a0 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
227b0 20 7d 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72   }.  /* Fall thr
227c0 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 4e 6f 74  ough into OP_Not
227d0 45 78 69 73 74 73 20 2a 2f 0a 63 61 73 65 20 4f  Exists */.case O
227e0 50 5f 4e 6f 74 45 78 69 73 74 73 3a 20 20 20 20  P_NotExists:    
227f0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
22800 6e 33 20 2a 2f 0a 20 20 70 49 6e 33 20 3d 20 26  n3 */.  pIn3 = &
22810 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
22820 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66   assert( pIn3->f
22830 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
22840 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
22850 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
22860 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
22870 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
22880 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
22890 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 23 69 66  rt( pC!=0 );.#if
228a0 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
228b0 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20  .  pC->seekOp = 
228c0 30 3b 0a 23 65 6e 64 69 66 0a 20 20 61 73 73 65  0;.#endif.  asse
228d0 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20  rt( pC->isTable 
228e0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
228f0 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
22900 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 70 43  PE_BTREE );.  pC
22910 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75  rsr = pC->uc.pCu
22920 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20  rsor;.  assert( 
22930 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 72 65  pCrsr!=0 );.  re
22940 73 20 3d 20 30 3b 0a 20 20 69 4b 65 79 20 3d 20  s = 0;.  iKey = 
22950 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 72 63 20  pIn3->u.i;.  rc 
22960 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
22970 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72  vetoUnpacked(pCr
22980 73 72 2c 20 30 2c 20 69 4b 65 79 2c 20 30 2c 20  sr, 0, iKey, 0, 
22990 26 72 65 73 29 3b 0a 20 20 61 73 73 65 72 74 28  &res);.  assert(
229a0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c   rc==SQLITE_OK |
229b0 7c 20 72 65 73 3d 3d 30 20 29 3b 0a 20 20 70 43  | res==0 );.  pC
229c0 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d  ->movetoTarget =
229d0 20 69 4b 65 79 3b 20 20 2f 2a 20 55 73 65 64 20   iKey;  /* Used 
229e0 62 79 20 4f 50 5f 44 65 6c 65 74 65 20 2a 2f 0a  by OP_Delete */.
229f0 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
22a00 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74  0;.  pC->cacheSt
22a10 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
22a20 4c 45 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72  LE;.  pC->deferr
22a30 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
22a40 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
22a50 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 70 43 2d  res!=0,2);.  pC-
22a60 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 72 65  >seekResult = re
22a70 73 3b 0a 20 20 69 66 28 20 72 65 73 21 3d 30 20  s;.  if( res!=0 
22a80 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72  ){.    assert( r
22a90 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a  c==SQLITE_OK );.
22aa0 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d      if( pOp->p2=
22ab0 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  =0 ){.      rc =
22ac0 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f   SQLITE_CORRUPT_
22ad0 42 4b 50 54 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  BKPT;.    }else{
22ae0 0a 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  .      goto jump
22af0 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a 20 20  _to_p2;.    }.  
22b00 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  }.  if( rc ) got
22b10 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
22b20 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  rror;.  break;.}
22b30 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71  ../* Opcode: Seq
22b40 75 65 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20  uence P1 P2 * * 
22b50 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
22b60 5b 50 32 5d 3d 63 75 72 73 6f 72 5b 50 31 5d 2e  [P2]=cursor[P1].
22b70 63 74 72 2b 2b 0a 2a 2a 0a 2a 2a 20 46 69 6e 64  ctr++.**.** Find
22b80 20 74 68 65 20 6e 65 78 74 20 61 76 61 69 6c 61   the next availa
22b90 62 6c 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d  ble sequence num
22ba0 62 65 72 20 66 6f 72 20 63 75 72 73 6f 72 20 50  ber for cursor P
22bb0 31 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20  1..** Write the 
22bc0 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20  sequence number 
22bd0 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
22be0 2e 0a 2a 2a 20 54 68 65 20 73 65 71 75 65 6e 63  ..** The sequenc
22bf0 65 20 6e 75 6d 62 65 72 20 6f 6e 20 74 68 65 20  e number on the 
22c00 63 75 72 73 6f 72 20 69 73 20 69 6e 63 72 65 6d  cursor is increm
22c10 65 6e 74 65 64 20 61 66 74 65 72 20 74 68 69 73  ented after this
22c20 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  .** instruction.
22c30 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65    .*/.case OP_Se
22c40 71 75 65 6e 63 65 3a 20 7b 20 20 20 20 20 20 20  quence: {       
22c50 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
22c60 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
22c70 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
22c80 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
22c90 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b  ssert( p->apCsr[
22ca0 70 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b 0a 20  pOp->p1]!=0 );. 
22cb0 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73   assert( p->apCs
22cc0 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 65 43 75 72  r[pOp->p1]->eCur
22cd0 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f 56 54  Type!=CURTYPE_VT
22ce0 41 42 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f  AB );.  pOut = o
22cf0 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
22d00 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75   pOp);.  pOut->u
22d10 2e 69 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  .i = p->apCsr[pO
22d20 70 2d 3e 70 31 5d 2d 3e 73 65 71 43 6f 75 6e 74  p->p1]->seqCount
22d30 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  ++;.  break;.}..
22d40 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 77 52  ./* Opcode: NewR
22d50 6f 77 69 64 20 50 31 20 50 32 20 50 33 20 2a 20  owid P1 P2 P3 * 
22d60 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
22d70 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a  [P2]=rowid.**.**
22d80 20 47 65 74 20 61 20 6e 65 77 20 69 6e 74 65 67   Get a new integ
22d90 65 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  er record number
22da0 20 28 61 2e 6b 2e 61 20 22 72 6f 77 69 64 22 29   (a.k.a "rowid")
22db0 20 75 73 65 64 20 61 73 20 74 68 65 20 6b 65 79   used as the key
22dc0 20 74 6f 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20   to a table..** 
22dd0 54 68 65 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  The record numbe
22de0 72 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75  r is not previou
22df0 73 6c 79 20 75 73 65 64 20 61 73 20 61 20 6b 65  sly used as a ke
22e00 79 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  y in the databas
22e10 65 0a 2a 2a 20 74 61 62 6c 65 20 74 68 61 74 20  e.** table that 
22e20 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74 73  cursor P1 points
22e30 20 74 6f 2e 20 20 54 68 65 20 6e 65 77 20 72 65   to.  The new re
22e40 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20 77  cord number is w
22e50 72 69 74 74 65 6e 0a 2a 2a 20 77 72 69 74 74 65  ritten.** writte
22e60 6e 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  n to register P2
22e70 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 3e 30 20  ..**.** If P3>0 
22e80 74 68 65 6e 20 50 33 20 69 73 20 61 20 72 65 67  then P3 is a reg
22e90 69 73 74 65 72 20 69 6e 20 74 68 65 20 72 6f 6f  ister in the roo
22ea0 74 20 66 72 61 6d 65 20 6f 66 20 74 68 69 73 20  t frame of this 
22eb0 56 44 42 45 20 74 68 61 74 20 68 6f 6c 64 73 20  VDBE that holds 
22ec0 0a 2a 2a 20 74 68 65 20 6c 61 72 67 65 73 74 20  .** the largest 
22ed0 70 72 65 76 69 6f 75 73 6c 79 20 67 65 6e 65 72  previously gener
22ee0 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75 6d 62  ated record numb
22ef0 65 72 2e 20 4e 6f 20 6e 65 77 20 72 65 63 6f 72  er. No new recor
22f00 64 20 6e 75 6d 62 65 72 73 20 61 72 65 0a 2a 2a  d numbers are.**
22f10 20 61 6c 6c 6f 77 65 64 20 74 6f 20 62 65 20 6c   allowed to be l
22f20 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 76 61  ess than this va
22f30 6c 75 65 2e 20 57 68 65 6e 20 74 68 69 73 20 76  lue. When this v
22f40 61 6c 75 65 20 72 65 61 63 68 65 73 20 69 74 73  alue reaches its
22f50 20 6d 61 78 69 6d 75 6d 2c 20 0a 2a 2a 20 61 6e   maximum, .** an
22f60 20 53 51 4c 49 54 45 5f 46 55 4c 4c 20 65 72 72   SQLITE_FULL err
22f70 6f 72 20 69 73 20 67 65 6e 65 72 61 74 65 64 2e  or is generated.
22f80 20 54 68 65 20 50 33 20 72 65 67 69 73 74 65 72   The P3 register
22f90 20 69 73 20 75 70 64 61 74 65 64 20 77 69 74 68   is updated with
22fa0 20 74 68 65 20 27 0a 2a 2a 20 67 65 6e 65 72 61   the '.** genera
22fb0 74 65 64 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  ted record numbe
22fc0 72 2e 20 54 68 69 73 20 50 33 20 6d 65 63 68 61  r. This P3 mecha
22fd0 6e 69 73 6d 20 69 73 20 75 73 65 64 20 74 6f 20  nism is used to 
22fe0 68 65 6c 70 20 69 6d 70 6c 65 6d 65 6e 74 20 74  help implement t
22ff0 68 65 0a 2a 2a 20 41 55 54 4f 49 4e 43 52 45 4d  he.** AUTOINCREM
23000 45 4e 54 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a  ENT feature..*/.
23010 63 61 73 65 20 4f 50 5f 4e 65 77 52 6f 77 69 64  case OP_NewRowid
23020 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
23030 20 6f 75 74 32 20 2a 2f 0a 20 20 69 36 34 20 76   out2 */.  i64 v
23040 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
23050 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72 6f 77    /* The new row
23060 69 64 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  id */.  VdbeCurs
23070 6f 72 20 2a 70 43 3b 20 20 20 20 20 20 20 20 2f  or *pC;        /
23080 2a 20 43 75 72 73 6f 72 20 6f 66 20 74 61 62 6c  * Cursor of tabl
23090 65 20 74 6f 20 67 65 74 20 74 68 65 20 6e 65 77  e to get the new
230a0 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69 6e 74 20   rowid */.  int 
230b0 72 65 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  res;            
230c0 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20     /* Result of 
230d0 61 6e 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c  an sqlite3BtreeL
230e0 61 73 74 28 29 20 2a 2f 0a 20 20 69 6e 74 20 63  ast() */.  int c
230f0 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nt;             
23100 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20 74 6f 20    /* Counter to 
23110 6c 69 6d 69 74 20 74 68 65 20 6e 75 6d 62 65 72  limit the number
23120 20 6f 66 20 73 65 61 72 63 68 65 73 20 2a 2f 0a   of searches */.
23130 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20    Mem *pMem;    
23140 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69           /* Regi
23150 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 6c 61 72  ster holding lar
23160 67 65 73 74 20 72 6f 77 69 64 20 66 6f 72 20 41  gest rowid for A
23170 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a  UTOINCREMENT */.
23180 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72    VdbeFrame *pFr
23190 61 6d 65 3b 20 20 20 20 20 2f 2a 20 52 6f 6f 74  ame;     /* Root
231a0 20 66 72 61 6d 65 20 6f 66 20 56 44 42 45 20 2a   frame of VDBE *
231b0 2f 0a 0a 20 20 76 20 3d 20 30 3b 0a 20 20 72 65  /..  v = 0;.  re
231c0 73 20 3d 20 30 3b 0a 20 20 70 4f 75 74 20 3d 20  s = 0;.  pOut = 
231d0 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
231e0 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65 72 74  , pOp);.  assert
231f0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
23200 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
23210 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
23220 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
23230 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
23240 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
23250 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
23260 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73  PE_BTREE );.  as
23270 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75  sert( pC->uc.pCu
23280 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 7b 0a 20  rsor!=0 );.  {. 
23290 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 72     /* The next r
232a0 6f 77 69 64 20 6f 72 20 72 65 63 6f 72 64 20 6e  owid or record n
232b0 75 6d 62 65 72 20 28 64 69 66 66 65 72 65 6e 74  umber (different
232c0 20 74 65 72 6d 73 20 66 6f 72 20 74 68 65 20 73   terms for the s
232d0 61 6d 65 0a 20 20 20 20 2a 2a 20 74 68 69 6e 67  ame.    ** thing
232e0 29 20 69 73 20 6f 62 74 61 69 6e 65 64 20 69 6e  ) is obtained in
232f0 20 61 20 74 77 6f 2d 73 74 65 70 20 61 6c 67 6f   a two-step algo
23300 72 69 74 68 6d 2e 0a 20 20 20 20 2a 2a 0a 20 20  rithm..    **.  
23310 20 20 2a 2a 20 46 69 72 73 74 20 77 65 20 61 74    ** First we at
23320 74 65 6d 70 74 20 74 6f 20 66 69 6e 64 20 74 68  tempt to find th
23330 65 20 6c 61 72 67 65 73 74 20 65 78 69 73 74 69  e largest existi
23340 6e 67 20 72 6f 77 69 64 20 61 6e 64 20 61 64 64  ng rowid and add
23350 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 74 6f 20 74   one.    ** to t
23360 68 61 74 2e 20 20 42 75 74 20 69 66 20 74 68 65  hat.  But if the
23370 20 6c 61 72 67 65 73 74 20 65 78 69 73 74 69 6e   largest existin
23380 67 20 72 6f 77 69 64 20 69 73 20 61 6c 72 65 61  g rowid is alrea
23390 64 79 20 74 68 65 20 6d 61 78 69 6d 75 6d 0a 20  dy the maximum. 
233a0 20 20 20 2a 2a 20 70 6f 73 69 74 69 76 65 20 69     ** positive i
233b0 6e 74 65 67 65 72 2c 20 77 65 20 68 61 76 65 20  nteger, we have 
233c0 74 6f 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  to fall through 
233d0 74 6f 20 74 68 65 20 73 65 63 6f 6e 64 0a 20 20  to the second.  
233e0 20 20 2a 2a 20 70 72 6f 62 61 62 69 6c 69 73 74    ** probabilist
233f0 69 63 20 61 6c 67 6f 72 69 74 68 6d 0a 20 20 20  ic algorithm.   
23400 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 68 65 20 73   **.    ** The s
23410 65 63 6f 6e 64 20 61 6c 67 6f 72 69 74 68 6d 20  econd algorithm 
23420 69 73 20 74 6f 20 73 65 6c 65 63 74 20 61 20 72  is to select a r
23430 6f 77 69 64 20 61 74 20 72 61 6e 64 6f 6d 20 61  owid at random a
23440 6e 64 20 73 65 65 20 69 66 0a 20 20 20 20 2a 2a  nd see if.    **
23450 20 69 74 20 61 6c 72 65 61 64 79 20 65 78 69 73   it already exis
23460 74 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  ts in the table.
23470 20 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74    If it does not
23480 20 65 78 69 73 74 2c 20 77 65 20 68 61 76 65 0a   exist, we have.
23490 20 20 20 20 2a 2a 20 73 75 63 63 65 65 64 65 64      ** succeeded
234a0 2e 20 20 49 66 20 74 68 65 20 72 61 6e 64 6f 6d  .  If the random
234b0 20 72 6f 77 69 64 20 64 6f 65 73 20 65 78 69 73   rowid does exis
234c0 74 2c 20 77 65 20 73 65 6c 65 63 74 20 61 20 6e  t, we select a n
234d0 65 77 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 61 6e  ew one.    ** an
234e0 64 20 74 72 79 20 61 67 61 69 6e 2c 20 75 70 20  d try again, up 
234f0 74 6f 20 31 30 30 20 74 69 6d 65 73 2e 0a 20 20  to 100 times..  
23500 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28    */.    assert(
23510 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a   pC->isTable );.
23520 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 33  .#ifdef SQLITE_3
23530 32 42 49 54 5f 52 4f 57 49 44 0a 23 20 20 20 64  2BIT_ROWID.#   d
23540 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20  efine MAX_ROWID 
23550 30 78 37 66 66 66 66 66 66 66 0a 23 65 6c 73 65  0x7fffffff.#else
23560 0a 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d  .    /* Some com
23570 70 69 6c 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20  pilers complain 
23580 61 62 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20  about constants 
23590 6f 66 20 74 68 65 20 66 6f 72 6d 20 30 78 37 66  of the form 0x7f
235a0 66 66 66 66 66 66 66 66 66 66 66 66 66 66 2e 0a  ffffffffffffff..
235b0 20 20 20 20 2a 2a 20 4f 74 68 65 72 73 20 63 6f      ** Others co
235c0 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 30 78 37  mplain about 0x7
235d0 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66  ffffffffffffffff
235e0 4c 4c 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69  LL.  The followi
235f0 6e 67 20 6d 61 63 72 6f 20 73 65 65 6d 73 0a 20  ng macro seems. 
23600 20 20 20 2a 2a 20 74 6f 20 70 72 6f 76 69 64 65     ** to provide
23610 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 77 68   the constant wh
23620 69 6c 65 20 6d 61 6b 69 6e 67 20 61 6c 6c 20 63  ile making all c
23630 6f 6d 70 69 6c 65 72 73 20 68 61 70 70 79 2e 0a  ompilers happy..
23640 20 20 20 20 2a 2f 0a 23 20 20 20 64 65 66 69 6e      */.#   defin
23650 65 20 4d 41 58 5f 52 4f 57 49 44 20 20 28 69 36  e MAX_ROWID  (i6
23660 34 29 28 20 28 28 28 75 36 34 29 30 78 37 66 66  4)( (((u64)0x7ff
23670 66 66 66 66 66 29 3c 3c 33 32 29 20 7c 20 28 75  fffff)<<32) | (u
23680 36 34 29 30 78 66 66 66 66 66 66 66 66 20 29 0a  64)0xffffffff ).
23690 23 65 6e 64 69 66 0a 0a 20 20 20 20 69 66 28 20  #endif..    if( 
236a0 21 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f  !pC->useRandomRo
236b0 77 69 64 20 29 7b 0a 20 20 20 20 20 20 72 63 20  wid ){.      rc 
236c0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61  = sqlite3BtreeLa
236d0 73 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  st(pC->uc.pCurso
236e0 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20  r, &res);.      
236f0 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
23700 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74  K ){.        got
23710 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
23720 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rror;.      }.  
23730 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20      if( res ){. 
23740 20 20 20 20 20 20 20 76 20 3d 20 31 3b 20 20 20         v = 1;   
23750 2f 2a 20 49 4d 50 3a 20 52 2d 36 31 39 31 34 2d  /* IMP: R-61914-
23760 34 38 30 37 34 20 2a 2f 0a 20 20 20 20 20 20 7d  48074 */.      }
23770 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 61 73  else{.        as
23780 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72  sert( sqlite3Btr
23790 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28  eeCursorIsValid(
237a0 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 20  pC->uc.pCursor) 
237b0 29 3b 0a 20 20 20 20 20 20 20 20 76 20 3d 20 73  );.        v = s
237c0 71 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65 67  qlite3BtreeInteg
237d0 65 72 4b 65 79 28 70 43 2d 3e 75 63 2e 70 43 75  erKey(pC->uc.pCu
237e0 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 20 20 69  rsor);.        i
237f0 66 28 20 76 3e 3d 4d 41 58 5f 52 4f 57 49 44 20  f( v>=MAX_ROWID 
23800 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70 43 2d  ){.          pC-
23810 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20  >useRandomRowid 
23820 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  = 1;.        }el
23830 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 76 2b  se{.          v+
23840 2b 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 32  +;   /* IMP: R-2
23850 39 35 33 38 2d 33 34 39 38 37 20 2a 2f 0a 20 20  9538-34987 */.  
23860 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
23870 20 20 20 20 7d 0a 0a 23 69 66 6e 64 65 66 20 53      }..#ifndef S
23880 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49  QLITE_OMIT_AUTOI
23890 4e 43 52 45 4d 45 4e 54 0a 20 20 20 20 69 66 28  NCREMENT.    if(
238a0 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20   pOp->p3 ){.    
238b0 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74    /* Assert that
238c0 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d   P3 is a valid m
238d0 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20  emory cell. */. 
238e0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
238f0 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p3>0 );.      
23900 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b  if( p->pFrame ){
23910 0a 20 20 20 20 20 20 20 20 66 6f 72 28 70 46 72  .        for(pFr
23920 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70  ame=p->pFrame; p
23930 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20  Frame->pParent; 
23940 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70  pFrame=pFrame->p
23950 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 20 20 20  Parent);.       
23960 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20   /* Assert that 
23970 50 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65  P3 is a valid me
23980 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20  mory cell. */.  
23990 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
239a0 70 2d 3e 70 33 3c 3d 70 46 72 61 6d 65 2d 3e 6e  p->p3<=pFrame->n
239b0 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 20 20 70  Mem );.        p
239c0 4d 65 6d 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61  Mem = &pFrame->a
239d0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
239e0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
239f0 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61     /* Assert tha
23a00 74 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20  t P3 is a valid 
23a10 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a  memory cell. */.
23a20 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
23a30 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
23a40 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
23a50 29 20 29 3b 0a 20 20 20 20 20 20 20 20 70 4d 65  ) );.        pMe
23a60 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  m = &aMem[pOp->p
23a70 33 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 41  3];.        memA
23a80 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
23a90 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 7d 0a 20  pMem);.      }. 
23aa0 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d       assert( mem
23ab0 49 73 56 61 6c 69 64 28 70 4d 65 6d 29 20 29 3b  IsValid(pMem) );
23ac0 0a 0a 20 20 20 20 20 20 52 45 47 49 53 54 45 52  ..      REGISTER
23ad0 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
23ae0 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 73 71 6c  pMem);.      sql
23af0 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
23b00 65 72 69 66 79 28 70 4d 65 6d 29 3b 0a 20 20 20  erify(pMem);.   
23b10 20 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d     assert( (pMem
23b20 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
23b30 74 29 21 3d 30 20 29 3b 20 20 2f 2a 20 6d 65 6d  t)!=0 );  /* mem
23b40 28 50 33 29 20 68 6f 6c 64 73 20 61 6e 20 69 6e  (P3) holds an in
23b50 74 65 67 65 72 20 2a 2f 0a 20 20 20 20 20 20 69  teger */.      i
23b60 66 28 20 70 4d 65 6d 2d 3e 75 2e 69 3d 3d 4d 41  f( pMem->u.i==MA
23b70 58 5f 52 4f 57 49 44 20 7c 7c 20 70 43 2d 3e 75  X_ROWID || pC->u
23b80 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b  seRandomRowid ){
23b90 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51  .        rc = SQ
23ba0 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20  LITE_FULL;   /* 
23bb0 49 4d 50 3a 20 52 2d 31 37 38 31 37 2d 30 30 36  IMP: R-17817-006
23bc0 33 30 20 2a 2f 0a 20 20 20 20 20 20 20 20 67 6f  30 */.        go
23bd0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
23be0 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20  error;.      }. 
23bf0 20 20 20 20 20 69 66 28 20 76 3c 70 4d 65 6d 2d       if( v<pMem-
23c00 3e 75 2e 69 2b 31 20 29 7b 0a 20 20 20 20 20 20  >u.i+1 ){.      
23c10 20 20 76 20 3d 20 70 4d 65 6d 2d 3e 75 2e 69 20    v = pMem->u.i 
23c20 2b 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  + 1;.      }.   
23c30 20 20 20 70 4d 65 6d 2d 3e 75 2e 69 20 3d 20 76     pMem->u.i = v
23c40 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20  ;.    }.#endif. 
23c50 20 20 20 69 66 28 20 70 43 2d 3e 75 73 65 52 61     if( pC->useRa
23c60 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20  ndomRowid ){.   
23c70 20 20 20 2f 2a 20 49 4d 50 4c 45 4d 45 4e 54 41     /* IMPLEMENTA
23c80 54 49 4f 4e 2d 4f 46 3a 20 52 2d 30 37 36 37 37  TION-OF: R-07677
23c90 2d 34 31 38 38 31 20 49 66 20 74 68 65 20 6c 61  -41881 If the la
23ca0 72 67 65 73 74 20 52 4f 57 49 44 20 69 73 20 65  rgest ROWID is e
23cb0 71 75 61 6c 20 74 6f 20 74 68 65 0a 20 20 20 20  qual to the.    
23cc0 20 20 2a 2a 20 6c 61 72 67 65 73 74 20 70 6f 73    ** largest pos
23cd0 73 69 62 6c 65 20 69 6e 74 65 67 65 72 20 28 39  sible integer (9
23ce0 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38  2233720368547758
23cf0 30 37 29 20 74 68 65 6e 20 74 68 65 20 64 61 74  07) then the dat
23d00 61 62 61 73 65 0a 20 20 20 20 20 20 2a 2a 20 65  abase.      ** e
23d10 6e 67 69 6e 65 20 73 74 61 72 74 73 20 70 69 63  ngine starts pic
23d20 6b 69 6e 67 20 70 6f 73 69 74 69 76 65 20 63 61  king positive ca
23d30 6e 64 69 64 61 74 65 20 52 4f 57 49 44 73 20 61  ndidate ROWIDs a
23d40 74 20 72 61 6e 64 6f 6d 20 75 6e 74 69 6c 0a 20  t random until. 
23d50 20 20 20 20 20 2a 2a 20 69 74 20 66 69 6e 64 73       ** it finds
23d60 20 6f 6e 65 20 74 68 61 74 20 69 73 20 6e 6f 74   one that is not
23d70 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73 65 64   previously used
23d80 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72  . */.      asser
23d90 74 28 20 70 4f 70 2d 3e 70 33 3d 3d 30 20 29 3b  t( pOp->p3==0 );
23da0 20 20 2f 2a 20 57 65 20 63 61 6e 6e 6f 74 20 62    /* We cannot b
23db0 65 20 69 6e 20 72 61 6e 64 6f 6d 20 72 6f 77 69  e in random rowi
23dc0 64 20 6d 6f 64 65 20 69 66 20 74 68 69 73 20 69  d mode if this i
23dd0 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s.              
23de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
23df0 2a 20 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45  * an AUTOINCREME
23e00 4e 54 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 20  NT table. */.   
23e10 20 20 20 63 6e 74 20 3d 20 30 3b 0a 20 20 20 20     cnt = 0;.    
23e20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20 20 73 71    do{.        sq
23e30 6c 69 74 65 33 5f 72 61 6e 64 6f 6d 6e 65 73 73  lite3_randomness
23e40 28 73 69 7a 65 6f 66 28 76 29 2c 20 26 76 29 3b  (sizeof(v), &v);
23e50 0a 20 20 20 20 20 20 20 20 76 20 26 3d 20 28 4d  .        v &= (M
23e60 41 58 5f 52 4f 57 49 44 3e 3e 31 29 3b 20 76 2b  AX_ROWID>>1); v+
23e70 2b 3b 20 20 2f 2a 20 45 6e 73 75 72 65 20 74 68  +;  /* Ensure th
23e80 61 74 20 76 20 69 73 20 67 72 65 61 74 65 72 20  at v is greater 
23e90 74 68 61 6e 20 7a 65 72 6f 20 2a 2f 0a 20 20 20  than zero */.   
23ea0 20 20 20 7d 77 68 69 6c 65 28 20 20 28 28 72 63     }while(  ((rc
23eb0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d   = sqlite3BtreeM
23ec0 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43  ovetoUnpacked(pC
23ed0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 30 2c  ->uc.pCursor, 0,
23ee0 20 28 75 36 34 29 76 2c 0a 20 20 20 20 20 20 20   (u64)v,.       
23ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f10 20 20 20 20 20 20 20 20 20 20 30 2c 20 26 72 65            0, &re
23f20 73 29 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 29 0a  s))==SQLITE_OK).
23f30 20 20 20 20 20 20 20 20 20 20 20 20 26 26 20 28              && (
23f40 72 65 73 3d 3d 30 29 0a 20 20 20 20 20 20 20 20  res==0).        
23f50 20 20 20 20 26 26 20 28 2b 2b 63 6e 74 3c 31 30      && (++cnt<10
23f60 30 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  0));.      if( r
23f70 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
23f80 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
23f90 20 20 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b     if( res==0 ){
23fa0 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51  .        rc = SQ
23fb0 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20  LITE_FULL;   /* 
23fc0 49 4d 50 3a 20 52 2d 33 38 32 31 39 2d 35 33 30  IMP: R-38219-530
23fd0 30 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 67 6f  02 */.        go
23fe0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
23ff0 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20  error;.      }. 
24000 20 20 20 20 20 61 73 73 65 72 74 28 20 76 3e 30       assert( v>0
24010 20 29 3b 20 20 2f 2a 20 45 56 3a 20 52 2d 34 30   );  /* EV: R-40
24020 38 31 32 2d 30 33 35 37 30 20 2a 2f 0a 20 20 20  812-03570 */.   
24030 20 7d 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72   }.    pC->defer
24040 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20  redMoveto = 0;. 
24050 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74     pC->cacheStat
24060 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
24070 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e  ;.  }.  pOut->u.
24080 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a  i = v;.  break;.
24090 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  }../* Opcode: In
240a0 73 65 72 74 20 50 31 20 50 32 20 50 33 20 50 34  sert P1 P2 P3 P4
240b0 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
240c0 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 20 64 61   intkey=r[P3] da
240d0 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 57  ta=r[P2].**.** W
240e0 72 69 74 65 20 61 6e 20 65 6e 74 72 79 20 69 6e  rite an entry in
240f0 74 6f 20 74 68 65 20 74 61 62 6c 65 20 6f 66 20  to the table of 
24100 63 75 72 73 6f 72 20 50 31 2e 20 20 41 20 6e 65  cursor P1.  A ne
24110 77 20 65 6e 74 72 79 20 69 73 0a 2a 2a 20 63 72  w entry is.** cr
24120 65 61 74 65 64 20 69 66 20 69 74 20 64 6f 65 73  eated if it does
24130 6e 27 74 20 61 6c 72 65 61 64 79 20 65 78 69 73  n't already exis
24140 74 20 6f 72 20 74 68 65 20 64 61 74 61 20 66 6f  t or the data fo
24150 72 20 61 6e 20 65 78 69 73 74 69 6e 67 0a 2a 2a  r an existing.**
24160 20 65 6e 74 72 79 20 69 73 20 6f 76 65 72 77 72   entry is overwr
24170 69 74 74 65 6e 2e 20 20 54 68 65 20 64 61 74 61  itten.  The data
24180 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 4d 45   is the value ME
24190 4d 5f 42 6c 6f 62 20 73 74 6f 72 65 64 20 69 6e  M_Blob stored in
241a0 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6e 75 6d   register.** num
241b0 62 65 72 20 50 32 2e 20 54 68 65 20 6b 65 79 20  ber P2. The key 
241c0 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
241d0 69 73 74 65 72 20 50 33 2e 20 54 68 65 20 6b 65  ister P3. The ke
241e0 79 20 6d 75 73 74 0a 2a 2a 20 62 65 20 61 20 4d  y must.** be a M
241f0 45 4d 5f 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66  EM_Int..**.** If
24200 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41   the OPFLAG_NCHA
24210 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 35 20 69  NGE flag of P5 i
24220 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20  s set, then the 
24230 72 6f 77 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  row change count
24240 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74   is.** increment
24250 65 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f  ed (otherwise no
24260 74 29 2e 20 20 49 66 20 74 68 65 20 4f 50 46 4c  t).  If the OPFL
24270 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 66 6c 61  AG_LASTROWID fla
24280 67 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 0a  g of P5 is set,.
24290 2a 2a 20 74 68 65 6e 20 72 6f 77 69 64 20 69 73  ** then rowid is
242a0 20 73 74 6f 72 65 64 20 66 6f 72 20 73 75 62 73   stored for subs
242b0 65 71 75 65 6e 74 20 72 65 74 75 72 6e 20 62 79  equent return by
242c0 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f   the.** sqlite3_
242d0 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69  last_insert_rowi
242e0 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 28 6f 74  d() function (ot
242f0 68 65 72 77 69 73 65 20 69 74 20 69 73 20 75 6e  herwise it is un
24300 6d 6f 64 69 66 69 65 64 29 2e 0a 2a 2a 0a 2a 2a  modified)..**.**
24310 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 55   If the OPFLAG_U
24320 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61  SESEEKRESULT fla
24330 67 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20  g of P5 is set, 
24340 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  the implementati
24350 6f 6e 20 6d 69 67 68 74 0a 2a 2a 20 72 75 6e 20  on might.** run 
24360 66 61 73 74 65 72 20 62 79 20 61 76 6f 69 64 69  faster by avoidi
24370 6e 67 20 61 6e 20 75 6e 6e 65 63 65 73 73 61 72  ng an unnecessar
24380 79 20 73 65 65 6b 20 6f 6e 20 63 75 72 73 6f 72  y seek on cursor
24390 20 50 31 2e 20 20 48 6f 77 65 76 65 72 2c 0a 2a   P1.  However,.*
243a0 2a 20 74 68 65 20 4f 50 46 4c 41 47 5f 55 53 45  * the OPFLAG_USE
243b0 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20  SEEKRESULT flag 
243c0 6d 75 73 74 20 6f 6e 6c 79 20 62 65 20 73 65 74  must only be set
243d0 20 69 66 20 74 68 65 72 65 20 68 61 76 65 20 62   if there have b
243e0 65 65 6e 20 6e 6f 20 70 72 69 6f 72 0a 2a 2a 20  een no prior.** 
243f0 73 65 65 6b 73 20 6f 6e 20 74 68 65 20 63 75 72  seeks on the cur
24400 73 6f 72 20 6f 72 20 69 66 20 74 68 65 20 6d 6f  sor or if the mo
24410 73 74 20 72 65 63 65 6e 74 20 73 65 65 6b 20 75  st recent seek u
24420 73 65 64 20 61 20 6b 65 79 20 65 71 75 61 6c 20  sed a key equal 
24430 74 6f 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  to P3..**.** If 
24440 74 68 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44  the OPFLAG_ISUPD
24450 41 54 45 20 66 6c 61 67 20 69 73 20 73 65 74 2c  ATE flag is set,
24460 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64   then this opcod
24470 65 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e 0a  e is part of an.
24480 2a 2a 20 55 50 44 41 54 45 20 6f 70 65 72 61 74  ** UPDATE operat
24490 69 6f 6e 2e 20 20 4f 74 68 65 72 77 69 73 65 20  ion.  Otherwise 
244a0 28 69 66 20 74 68 65 20 66 6c 61 67 20 69 73 20  (if the flag is 
244b0 63 6c 65 61 72 29 20 74 68 65 6e 20 74 68 69 73  clear) then this
244c0 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 70 61   opcode.** is pa
244d0 72 74 20 6f 66 20 61 6e 20 49 4e 53 45 52 54 20  rt of an INSERT 
244e0 6f 70 65 72 61 74 69 6f 6e 2e 20 20 54 68 65 20  operation.  The 
244f0 64 69 66 66 65 72 65 6e 63 65 20 69 73 20 6f 6e  difference is on
24500 6c 79 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 0a  ly important to.
24510 2a 2a 20 74 68 65 20 75 70 64 61 74 65 20 68 6f  ** the update ho
24520 6f 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61 6d 65  ok..**.** Parame
24530 74 65 72 20 50 34 20 6d 61 79 20 70 6f 69 6e 74  ter P4 may point
24540 20 74 6f 20 61 20 54 61 62 6c 65 20 73 74 72 75   to a Table stru
24550 63 74 75 72 65 2c 20 6f 72 20 6d 61 79 20 62 65  cture, or may be
24560 20 4e 55 4c 4c 2e 20 49 66 20 69 74 20 69 73 20   NULL. If it is 
24570 0a 2a 2a 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68  .** not NULL, th
24580 65 6e 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f  en the update-ho
24590 6f 6b 20 28 73 71 6c 69 74 65 33 2e 78 55 70 64  ok (sqlite3.xUpd
245a0 61 74 65 43 61 6c 6c 62 61 63 6b 29 20 69 73 20  ateCallback) is 
245b0 69 6e 76 6f 6b 65 64 20 0a 2a 2a 20 66 6f 6c 6c  invoked .** foll
245c0 6f 77 69 6e 67 20 61 20 73 75 63 63 65 73 73 66  owing a successf
245d0 75 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a 0a 2a 2a  ul insert..**.**
245e0 20 28 57 41 52 4e 49 4e 47 2f 54 4f 44 4f 3a 20   (WARNING/TODO: 
245f0 49 66 20 50 31 20 69 73 20 61 20 70 73 65 75 64  If P1 is a pseud
24600 6f 2d 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20  o-cursor and P2 
24610 69 73 20 64 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a  is dynamically.*
24620 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65  * allocated, the
24630 6e 20 6f 77 6e 65 72 73 68 69 70 20 6f 66 20 50  n ownership of P
24640 32 20 69 73 20 74 72 61 6e 73 66 65 72 72 65 64  2 is transferred
24650 20 74 6f 20 74 68 65 20 70 73 65 75 64 6f 2d 63   to the pseudo-c
24660 75 72 73 6f 72 0a 2a 2a 20 61 6e 64 20 72 65 67  ursor.** and reg
24670 69 73 74 65 72 20 50 32 20 62 65 63 6f 6d 65 73  ister P2 becomes
24680 20 65 70 68 65 6d 65 72 61 6c 2e 20 20 49 66 20   ephemeral.  If 
24690 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 63 68  the cursor is ch
246a0 61 6e 67 65 64 2c 20 74 68 65 0a 2a 2a 20 76 61  anged, the.** va
246b0 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20  lue of register 
246c0 50 32 20 77 69 6c 6c 20 74 68 65 6e 20 63 68 61  P2 will then cha
246d0 6e 67 65 2e 20 20 4d 61 6b 65 20 73 75 72 65 20  nge.  Make sure 
246e0 74 68 69 73 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a  this does not.**
246f0 20 63 61 75 73 65 20 61 6e 79 20 70 72 6f 62 6c   cause any probl
24700 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73  ems.).**.** This
24710 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c   instruction onl
24720 79 20 77 6f 72 6b 73 20 6f 6e 20 74 61 62 6c 65  y works on table
24730 73 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c 65  s.  The equivale
24740 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a  nt instruction.*
24750 2a 20 66 6f 72 20 69 6e 64 69 63 65 73 20 69 73  * for indices is
24760 20 4f 50 5f 49 64 78 49 6e 73 65 72 74 2e 0a 2a   OP_IdxInsert..*
24770 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73  /./* Opcode: Ins
24780 65 72 74 49 6e 74 20 50 31 20 50 32 20 50 33 20  ertInt P1 P2 P3 
24790 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
247a0 73 3a 20 69 6e 74 6b 65 79 3d 50 33 20 64 61 74  s: intkey=P3 dat
247b0 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 68  a=r[P2].**.** Th
247c0 69 73 20 77 6f 72 6b 73 20 65 78 61 63 74 6c 79  is works exactly
247d0 20 6c 69 6b 65 20 4f 50 5f 49 6e 73 65 72 74 20   like OP_Insert 
247e0 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
247f0 6b 65 79 20 69 73 20 74 68 65 0a 2a 2a 20 69 6e  key is the.** in
24800 74 65 67 65 72 20 76 61 6c 75 65 20 50 33 2c 20  teger value P3, 
24810 6e 6f 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66  not the value of
24820 20 74 68 65 20 69 6e 74 65 67 65 72 20 73 74 6f   the integer sto
24830 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
24840 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  P3..*/.case OP_I
24850 6e 73 65 72 74 3a 20 0a 63 61 73 65 20 4f 50 5f  nsert: .case OP_
24860 49 6e 73 65 72 74 49 6e 74 3a 20 7b 0a 20 20 4d  InsertInt: {.  M
24870 65 6d 20 2a 70 44 61 74 61 3b 20 20 20 20 20 20  em *pData;      
24880 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c   /* MEM cell hol
24890 64 69 6e 67 20 64 61 74 61 20 66 6f 72 20 74 68  ding data for th
248a0 65 20 72 65 63 6f 72 64 20 74 6f 20 62 65 20 69  e record to be i
248b0 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20 4d 65 6d  nserted */.  Mem
248c0 20 2a 70 4b 65 79 3b 20 20 20 20 20 20 20 20 2f   *pKey;        /
248d0 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69  * MEM cell holdi
248e0 6e 67 20 6b 65 79 20 20 66 6f 72 20 74 68 65 20  ng key  for the 
248f0 72 65 63 6f 72 64 20 2a 2f 0a 20 20 56 64 62 65  record */.  Vdbe
24900 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 2f 2a  Cursor *pC;   /*
24910 20 43 75 72 73 6f 72 20 74 6f 20 74 61 62 6c 65   Cursor to table
24920 20 69 6e 74 6f 20 77 68 69 63 68 20 69 6e 73 65   into which inse
24930 72 74 20 69 73 20 77 72 69 74 74 65 6e 20 2a 2f  rt is written */
24940 0a 20 20 69 6e 74 20 73 65 65 6b 52 65 73 75 6c  .  int seekResul
24950 74 3b 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f  t;   /* Result o
24960 66 20 70 72 69 6f 72 20 73 65 65 6b 20 6f 72 20  f prior seek or 
24970 30 20 69 66 20 6e 6f 20 55 53 45 53 45 45 4b 52  0 if no USESEEKR
24980 45 53 55 4c 54 20 66 6c 61 67 20 2a 2f 0a 20 20  ESULT flag */.  
24990 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b  const char *zDb;
249a0 20 20 2f 2a 20 64 61 74 61 62 61 73 65 20 6e 61    /* database na
249b0 6d 65 20 2d 20 75 73 65 64 20 62 79 20 74 68 65  me - used by the
249c0 20 75 70 64 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a   update hook */.
249d0 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20    Table *pTab;  
249e0 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 73 74 72      /* Table str
249f0 75 63 74 75 72 65 20 2d 20 75 73 65 64 20 62 79  ucture - used by
24a00 20 75 70 64 61 74 65 20 61 6e 64 20 70 72 65 2d   update and pre-
24a10 75 70 64 61 74 65 20 68 6f 6f 6b 73 20 2a 2f 0a  update hooks */.
24a20 20 20 69 6e 74 20 6f 70 3b 20 20 20 20 20 20 20    int op;       
24a30 20 20 20 20 2f 2a 20 4f 70 63 6f 64 65 20 66 6f      /* Opcode fo
24a40 72 20 75 70 64 61 74 65 20 68 6f 6f 6b 3a 20 53  r update hook: S
24a50 51 4c 49 54 45 5f 55 50 44 41 54 45 20 6f 72 20  QLITE_UPDATE or 
24a60 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 20 2a 2f  SQLITE_INSERT */
24a70 0a 20 20 42 74 72 65 65 50 61 79 6c 6f 61 64 20  .  BtreePayload 
24a80 78 3b 20 20 20 2f 2a 20 50 61 79 6c 6f 61 64 20  x;   /* Payload 
24a90 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 20 2a  to be inserted *
24aa0 2f 0a 0a 20 20 6f 70 20 3d 20 30 3b 0a 20 20 70  /..  op = 0;.  p
24ab0 44 61 74 61 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  Data = &aMem[pOp
24ac0 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p2];.  assert(
24ad0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
24ae0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
24af0 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6d  r );.  assert( m
24b00 65 6d 49 73 56 61 6c 69 64 28 70 44 61 74 61 29  emIsValid(pData)
24b10 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
24b20 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
24b30 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
24b40 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65  .  assert( pC->e
24b50 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
24b60 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65  _BTREE );.  asse
24b70 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  rt( pC->uc.pCurs
24b80 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  or!=0 );.  asser
24b90 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  t( pC->isTable )
24ba0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
24bb0 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c  >p4type==P4_TABL
24bc0 45 20 7c 7c 20 70 4f 70 2d 3e 70 34 74 79 70 65  E || pOp->p4type
24bd0 3e 3d 50 34 5f 53 54 41 54 49 43 20 29 3b 0a 20  >=P4_STATIC );. 
24be0 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
24bf0 70 4f 70 2d 3e 70 32 2c 20 70 44 61 74 61 29 3b  pOp->p2, pData);
24c00 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  ..  if( pOp->opc
24c10 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 20 29  ode==OP_Insert )
24c20 7b 0a 20 20 20 20 70 4b 65 79 20 3d 20 26 61 4d  {.    pKey = &aM
24c30 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  em[pOp->p3];.   
24c40 20 61 73 73 65 72 74 28 20 70 4b 65 79 2d 3e 66   assert( pKey->f
24c50 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
24c60 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  ;.    assert( me
24c70 6d 49 73 56 61 6c 69 64 28 70 4b 65 79 29 20 29  mIsValid(pKey) )
24c80 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
24c90 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4b  RACE(pOp->p3, pK
24ca0 65 79 29 3b 0a 20 20 20 20 78 2e 6e 4b 65 79 20  ey);.    x.nKey 
24cb0 3d 20 70 4b 65 79 2d 3e 75 2e 69 3b 0a 20 20 7d  = pKey->u.i;.  }
24cc0 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
24cd0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
24ce0 50 5f 49 6e 73 65 72 74 49 6e 74 20 29 3b 0a 20  P_InsertInt );. 
24cf0 20 20 20 78 2e 6e 4b 65 79 20 3d 20 70 4f 70 2d     x.nKey = pOp-
24d00 3e 70 33 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  >p3;.  }..  if( 
24d10 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
24d20 54 41 42 4c 45 20 26 26 20 48 41 53 5f 55 50 44  TABLE && HAS_UPD
24d30 41 54 45 5f 48 4f 4f 4b 28 64 62 29 20 29 7b 0a  ATE_HOOK(db) ){.
24d40 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
24d50 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 61  isTable );.    a
24d60 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d  ssert( pC->iDb>=
24d70 30 20 29 3b 0a 20 20 20 20 7a 44 62 20 3d 20 64  0 );.    zDb = d
24d80 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e  b->aDb[pC->iDb].
24d90 7a 44 62 53 4e 61 6d 65 3b 0a 20 20 20 20 70 54  zDbSName;.    pT
24da0 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 54 61  ab = pOp->p4.pTa
24db0 62 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 48  b;.    assert( H
24dc0 61 73 52 6f 77 69 64 28 70 54 61 62 29 20 29 3b  asRowid(pTab) );
24dd0 0a 20 20 20 20 6f 70 20 3d 20 28 28 70 4f 70 2d  .    op = ((pOp-
24de0 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 55  >p5 & OPFLAG_ISU
24df0 50 44 41 54 45 29 20 3f 20 53 51 4c 49 54 45 5f  PDATE) ? SQLITE_
24e00 55 50 44 41 54 45 20 3a 20 53 51 4c 49 54 45 5f  UPDATE : SQLITE_
24e10 49 4e 53 45 52 54 29 3b 0a 20 20 7d 65 6c 73 65  INSERT);.  }else
24e20 7b 0a 20 20 20 20 70 54 61 62 20 3d 20 30 3b 20  {.    pTab = 0; 
24e30 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20  /* Not needed.  
24e40 53 69 6c 65 6e 63 65 20 61 20 63 6f 6d 69 6c 65  Silence a comile
24e50 72 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20  r warning. */.  
24e60 20 20 7a 44 62 20 3d 20 30 3b 20 20 2f 2a 20 4e    zDb = 0;  /* N
24e70 6f 74 20 6e 65 65 64 65 64 2e 20 20 53 69 6c 65  ot needed.  Sile
24e80 6e 63 65 20 61 20 63 6f 6d 70 69 6c 65 72 20 77  nce a compiler w
24e90 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 7d 0a 0a  arning. */.  }..
24ea0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
24eb0 41 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48  ABLE_PREUPDATE_H
24ec0 4f 4f 4b 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  OOK.  /* Invoke 
24ed0 74 68 65 20 70 72 65 2d 75 70 64 61 74 65 20 68  the pre-update h
24ee0 6f 6f 6b 2c 20 69 66 20 61 6e 79 20 2a 2f 0a 20  ook, if any */. 
24ef0 20 69 66 28 20 64 62 2d 3e 78 50 72 65 55 70 64   if( db->xPreUpd
24f00 61 74 65 43 61 6c 6c 62 61 63 6b 20 0a 20 20 20  ateCallback .   
24f10 26 26 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  && pOp->p4type==
24f20 50 34 5f 54 41 42 4c 45 0a 20 20 20 26 26 20 21  P4_TABLE.   && !
24f30 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
24f40 47 5f 49 53 55 50 44 41 54 45 29 0a 20 20 29 7b  G_ISUPDATE).  ){
24f50 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
24f60 50 72 65 55 70 64 61 74 65 48 6f 6f 6b 28 70 2c  PreUpdateHook(p,
24f70 20 70 43 2c 20 53 51 4c 49 54 45 5f 49 4e 53 45   pC, SQLITE_INSE
24f80 52 54 2c 20 7a 44 62 2c 20 70 54 61 62 2c 20 78  RT, zDb, pTab, x
24f90 2e 6e 4b 65 79 2c 20 70 4f 70 2d 3e 70 32 29 3b  .nKey, pOp->p2);
24fa0 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 69  .  }.#endif..  i
24fb0 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  f( pOp->p5 & OPF
24fc0 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d  LAG_NCHANGE ) p-
24fd0 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 69 66  >nChange++;.  if
24fe0 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ( pOp->p5 & OPFL
24ff0 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 29 20 64  AG_LASTROWID ) d
25000 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c  b->lastRowid = l
25010 61 73 74 52 6f 77 69 64 20 3d 20 78 2e 6e 4b 65  astRowid = x.nKe
25020 79 3b 0a 20 20 69 66 28 20 70 44 61 74 61 2d 3e  y;.  if( pData->
25030 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
25040 20 29 7b 0a 20 20 20 20 78 2e 70 44 61 74 61 20   ){.    x.pData 
25050 3d 20 30 3b 0a 20 20 20 20 78 2e 6e 44 61 74 61  = 0;.    x.nData
25060 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   = 0;.  }else{. 
25070 20 20 20 61 73 73 65 72 74 28 20 70 44 61 74 61     assert( pData
25080 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42  ->flags & (MEM_B
25090 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 20 29 3b 0a  lob|MEM_Str) );.
250a0 20 20 20 20 78 2e 70 44 61 74 61 20 3d 20 70 44      x.pData = pD
250b0 61 74 61 2d 3e 7a 3b 0a 20 20 20 20 78 2e 6e 44  ata->z;.    x.nD
250c0 61 74 61 20 3d 20 70 44 61 74 61 2d 3e 6e 3b 0a  ata = pData->n;.
250d0 20 20 7d 0a 20 20 73 65 65 6b 52 65 73 75 6c 74    }.  seekResult
250e0 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f   = ((pOp->p5 & O
250f0 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53  PFLAG_USESEEKRES
25100 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52  ULT) ? pC->seekR
25110 65 73 75 6c 74 20 3a 20 30 29 3b 0a 20 20 69 66  esult : 0);.  if
25120 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26  ( pData->flags &
25130 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20   MEM_Zero ){.   
25140 20 78 2e 6e 5a 65 72 6f 20 3d 20 70 44 61 74 61   x.nZero = pData
25150 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 7d 65 6c  ->u.nZero;.  }el
25160 73 65 7b 0a 20 20 20 20 78 2e 6e 5a 65 72 6f 20  se{.    x.nZero 
25170 3d 20 30 3b 0a 20 20 7d 0a 20 20 78 2e 70 4b 65  = 0;.  }.  x.pKe
25180 79 20 3d 20 30 3b 0a 20 20 72 63 20 3d 20 73 71  y = 0;.  rc = sq
25190 6c 69 74 65 33 42 74 72 65 65 49 6e 73 65 72 74  lite3BtreeInsert
251a0 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
251b0 20 26 78 2c 0a 20 20 20 20 20 20 28 70 4f 70 2d   &x,.      (pOp-
251c0 3e 70 35 20 26 20 28 4f 50 46 4c 41 47 5f 41 50  >p5 & (OPFLAG_AP
251d0 50 45 4e 44 7c 4f 50 46 4c 41 47 5f 53 41 56 45  PEND|OPFLAG_SAVE
251e0 50 4f 53 49 54 49 4f 4e 29 29 2c 20 73 65 65 6b  POSITION)), seek
251f0 52 65 73 75 6c 74 0a 20 20 29 3b 0a 20 20 70 43  Result.  );.  pC
25200 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
25210 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68   = 0;.  pC->cach
25220 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
25230 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76  STALE;..  /* Inv
25240 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d 68  oke the update-h
25250 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e  ook if required.
25260 20 2a 2f 0a 20 20 69 66 28 20 72 63 20 29 20 67   */.  if( rc ) g
25270 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
25280 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 64 62  _error;.  if( db
25290 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  ->xUpdateCallbac
252a0 6b 20 26 26 20 6f 70 20 29 7b 0a 20 20 20 20 64  k && op ){.    d
252b0 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  b->xUpdateCallba
252c0 63 6b 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72  ck(db->pUpdateAr
252d0 67 2c 20 6f 70 2c 20 7a 44 62 2c 20 70 54 61 62  g, op, zDb, pTab
252e0 2d 3e 7a 4e 61 6d 65 2c 20 78 2e 6e 4b 65 79 29  ->zName, x.nKey)
252f0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
25300 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 6c  ../* Opcode: Del
25310 65 74 65 20 50 31 20 50 32 20 50 33 20 50 34 20  ete P1 P2 P3 P4 
25320 50 35 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20  P5.**.** Delete 
25330 74 68 65 20 72 65 63 6f 72 64 20 61 74 20 77 68  the record at wh
25340 69 63 68 20 74 68 65 20 50 31 20 63 75 72 73 6f  ich the P1 curso
25350 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70  r is currently p
25360 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 49  ointing..**.** I
25370 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 53 41 56  f the OPFLAG_SAV
25380 45 50 4f 53 49 54 49 4f 4e 20 62 69 74 20 6f 66  EPOSITION bit of
25390 20 74 68 65 20 50 35 20 70 61 72 61 6d 65 74 65   the P5 paramete
253a0 72 20 69 73 20 73 65 74 2c 20 74 68 65 6e 0a 2a  r is set, then.*
253b0 2a 20 74 68 65 20 63 75 72 73 6f 72 20 77 69 6c  * the cursor wil
253c0 6c 20 62 65 20 6c 65 66 74 20 70 6f 69 6e 74 69  l be left pointi
253d0 6e 67 20 61 74 20 20 65 69 74 68 65 72 20 74 68  ng at  either th
253e0 65 20 6e 65 78 74 20 6f 72 20 74 68 65 20 70 72  e next or the pr
253f0 65 76 69 6f 75 73 0a 2a 2a 20 72 65 63 6f 72 64  evious.** record
25400 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 49   in the table. I
25410 66 20 69 74 20 69 73 20 6c 65 66 74 20 70 6f 69  f it is left poi
25420 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6e 65 78  nting at the nex
25430 74 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 0a 2a  t record, then.*
25440 2a 20 74 68 65 20 6e 65 78 74 20 4e 65 78 74 20  * the next Next 
25450 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 69 6c 6c  instruction will
25460 20 62 65 20 61 20 6e 6f 2d 6f 70 2e 20 41 73 20   be a no-op. As 
25470 61 20 72 65 73 75 6c 74 2c 20 69 6e 20 74 68 69  a result, in thi
25480 73 20 63 61 73 65 0a 2a 2a 20 69 74 20 69 73 20  s case.** it is 
25490 6f 6b 20 74 6f 20 64 65 6c 65 74 65 20 61 20 72  ok to delete a r
254a0 65 63 6f 72 64 20 66 72 6f 6d 20 77 69 74 68 69  ecord from withi
254b0 6e 20 61 20 4e 65 78 74 20 6c 6f 6f 70 2e 20 49  n a Next loop. I
254c0 66 20 0a 2a 2a 20 4f 50 46 4c 41 47 5f 53 41 56  f .** OPFLAG_SAV
254d0 45 50 4f 53 49 54 49 4f 4e 20 62 69 74 20 6f 66  EPOSITION bit of
254e0 20 50 35 20 69 73 20 63 6c 65 61 72 2c 20 74 68   P5 is clear, th
254f0 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 77 69  en the cursor wi
25500 6c 6c 20 62 65 0a 2a 2a 20 6c 65 66 74 20 69 6e  ll be.** left in
25510 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 20 73 74   an undefined st
25520 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ate..**.** If th
25530 65 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45  e OPFLAG_AUXDELE
25540 54 45 20 62 69 74 20 69 73 20 73 65 74 20 6f 6e  TE bit is set on
25550 20 50 35 2c 20 74 68 61 74 20 69 6e 64 69 63 61   P5, that indica
25560 74 65 73 20 74 68 61 74 20 74 68 69 73 0a 2a 2a  tes that this.**
25570 20 64 65 6c 65 74 65 20 6f 6e 65 20 6f 66 20 73   delete one of s
25580 65 76 65 72 61 6c 20 61 73 73 6f 63 69 61 74 65  everal associate
25590 64 20 77 69 74 68 20 64 65 6c 65 74 69 6e 67 20  d with deleting 
255a0 61 20 74 61 62 6c 65 20 72 6f 77 20 61 6e 64 20  a table row and 
255b0 61 6c 6c 20 69 74 73 0a 2a 2a 20 61 73 73 6f 63  all its.** assoc
255c0 69 61 74 65 64 20 69 6e 64 65 78 20 65 6e 74 72  iated index entr
255d0 69 65 73 2e 20 20 45 78 61 63 74 6c 79 20 6f 6e  ies.  Exactly on
255e0 65 20 6f 66 20 74 68 6f 73 65 20 64 65 6c 65 74  e of those delet
255f0 65 73 20 69 73 20 74 68 65 20 22 70 72 69 6d 61  es is the "prima
25600 72 79 22 0a 2a 2a 20 64 65 6c 65 74 65 2e 20 20  ry".** delete.  
25610 54 68 65 20 6f 74 68 65 72 73 20 61 72 65 20 61  The others are a
25620 6c 6c 20 6f 6e 20 4f 50 46 4c 41 47 5f 46 4f 52  ll on OPFLAG_FOR
25630 44 45 4c 45 54 45 20 63 75 72 73 6f 72 73 20 6f  DELETE cursors o
25640 72 20 65 6c 73 65 20 61 72 65 0a 2a 2a 20 6d 61  r else are.** ma
25650 72 6b 65 64 20 77 69 74 68 20 74 68 65 20 41 55  rked with the AU
25660 58 44 45 4c 45 54 45 20 66 6c 61 67 2e 0a 2a 2a  XDELETE flag..**
25670 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41  .** If the OPFLA
25680 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20 6f  G_NCHANGE flag o
25690 66 20 50 32 20 28 4e 42 3a 20 50 32 20 6e 6f 74  f P2 (NB: P2 not
256a0 20 50 35 29 20 69 73 20 73 65 74 2c 20 74 68 65   P5) is set, the
256b0 6e 20 74 68 65 20 72 6f 77 0a 2a 2a 20 63 68 61  n the row.** cha
256c0 6e 67 65 20 63 6f 75 6e 74 20 69 73 20 69 6e 63  nge count is inc
256d0 72 65 6d 65 6e 74 65 64 20 28 6f 74 68 65 72 77  remented (otherw
256e0 69 73 65 20 6e 6f 74 29 2e 0a 2a 2a 0a 2a 2a 20  ise not)..**.** 
256f0 50 31 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 70  P1 must not be p
25700 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20 49 74  seudo-table.  It
25710 20 68 61 73 20 74 6f 20 62 65 20 61 20 72 65 61   has to be a rea
25720 6c 20 74 61 62 6c 65 20 77 69 74 68 0a 2a 2a 20  l table with.** 
25730 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 2e 0a 2a  multiple rows..*
25740 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f  *.** If P4 is no
25750 74 20 4e 55 4c 4c 20 74 68 65 6e 20 69 74 20 70  t NULL then it p
25760 6f 69 6e 74 73 20 74 6f 20 61 20 54 61 62 6c 65  oints to a Table
25770 20 6f 62 6a 65 63 74 2e 20 49 6e 20 74 68 69 73   object. In this
25780 20 63 61 73 65 20 65 69 74 68 65 72 20 0a 2a 2a   case either .**
25790 20 74 68 65 20 75 70 64 61 74 65 20 6f 72 20 70   the update or p
257a0 72 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b 2c 20  re-update hook, 
257b0 6f 72 20 62 6f 74 68 2c 20 6d 61 79 20 62 65 20  or both, may be 
257c0 69 6e 76 6f 6b 65 64 2e 20 54 68 65 20 50 31 20  invoked. The P1 
257d0 63 75 72 73 6f 72 20 6d 75 73 74 0a 2a 2a 20 68  cursor must.** h
257e0 61 76 65 20 62 65 65 6e 20 70 6f 73 69 74 69 6f  ave been positio
257f0 6e 65 64 20 75 73 69 6e 67 20 4f 50 5f 4e 6f 74  ned using OP_Not
25800 46 6f 75 6e 64 20 70 72 69 6f 72 20 74 6f 20 69  Found prior to i
25810 6e 76 6f 6b 69 6e 67 20 74 68 69 73 20 6f 70 63  nvoking this opc
25820 6f 64 65 20 69 6e 20 0a 2a 2a 20 74 68 69 73 20  ode in .** this 
25830 63 61 73 65 2e 20 53 70 65 63 69 66 69 63 61 6c  case. Specifical
25840 6c 79 2c 20 69 66 20 6f 6e 65 20 69 73 20 63 6f  ly, if one is co
25850 6e 66 69 67 75 72 65 64 2c 20 74 68 65 20 70 72  nfigured, the pr
25860 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b 20 69 73  e-update hook is
25870 20 0a 2a 2a 20 69 6e 76 6f 6b 65 64 20 69 66 20   .** invoked if 
25880 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20  P4 is not NULL. 
25890 54 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20  The update-hook 
258a0 69 73 20 69 6e 76 6f 6b 65 64 20 69 66 20 6f 6e  is invoked if on
258b0 65 20 69 73 20 63 6f 6e 66 69 67 75 72 65 64 2c  e is configured,
258c0 20 0a 2a 2a 20 50 34 20 69 73 20 6e 6f 74 20 4e   .** P4 is not N
258d0 55 4c 4c 2c 20 61 6e 64 20 74 68 65 20 4f 50 46  ULL, and the OPF
258e0 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67  LAG_NCHANGE flag
258f0 20 69 73 20 73 65 74 20 69 6e 20 50 32 2e 0a 2a   is set in P2..*
25900 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c  *.** If the OPFL
25910 41 47 5f 49 53 55 50 44 41 54 45 20 66 6c 61 67  AG_ISUPDATE flag
25920 20 69 73 20 73 65 74 20 69 6e 20 50 32 2c 20 74   is set in P2, t
25930 68 65 6e 20 50 33 20 63 6f 6e 74 61 69 6e 73 20  hen P3 contains 
25940 74 68 65 20 61 64 64 72 65 73 73 0a 2a 2a 20 6f  the address.** o
25950 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c  f the memory cel
25960 6c 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  l that contains 
25970 74 68 65 20 76 61 6c 75 65 20 74 68 61 74 20 74  the value that t
25980 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20  he rowid of the 
25990 72 6f 77 20 77 69 6c 6c 0a 2a 2a 20 62 65 20 73  row will.** be s
259a0 65 74 20 74 6f 20 62 79 20 74 68 65 20 75 70 64  et to by the upd
259b0 61 74 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ate..*/.case OP_
259c0 44 65 6c 65 74 65 3a 20 7b 0a 20 20 56 64 62 65  Delete: {.  Vdbe
259d0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 63 6f  Cursor *pC;.  co
259e0 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 0a 20  nst char *zDb;. 
259f0 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20   Table *pTab;.  
25a00 69 6e 74 20 6f 70 66 6c 61 67 73 3b 0a 0a 20 20  int opflags;..  
25a10 6f 70 66 6c 61 67 73 20 3d 20 70 4f 70 2d 3e 70  opflags = pOp->p
25a20 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  2;.  assert( pOp
25a30 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
25a40 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
25a50 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
25a60 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
25a70 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
25a80 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
25a90 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
25aa0 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28  REE );.  assert(
25ab0 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21   pC->uc.pCursor!
25ac0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
25ad0 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
25ae0 74 6f 3d 3d 30 20 29 3b 0a 0a 23 69 66 64 65 66  to==0 );..#ifdef
25af0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
25b00 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  if( pOp->p4type=
25b10 3d 50 34 5f 54 41 42 4c 45 20 26 26 20 48 61 73  =P4_TABLE && Has
25b20 52 6f 77 69 64 28 70 4f 70 2d 3e 70 34 2e 70 54  Rowid(pOp->p4.pT
25b30 61 62 29 20 26 26 20 70 4f 70 2d 3e 70 35 3d 3d  ab) && pOp->p5==
25b40 30 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 70  0 ){.    /* If p
25b50 35 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 20 73  5 is zero, the s
25b60 65 65 6b 20 6f 70 65 72 61 74 69 6f 6e 20 74 68  eek operation th
25b70 61 74 20 70 6f 73 69 74 69 6f 6e 65 64 20 74 68  at positioned th
25b80 65 20 63 75 72 73 6f 72 20 70 72 69 6f 72 20 74  e cursor prior t
25b90 6f 0a 20 20 20 20 2a 2a 20 4f 50 5f 44 65 6c 65  o.    ** OP_Dele
25ba0 74 65 20 77 69 6c 6c 20 68 61 76 65 20 61 6c 73  te will have als
25bb0 6f 20 73 65 74 20 74 68 65 20 70 43 2d 3e 6d 6f  o set the pC->mo
25bc0 76 65 74 6f 54 61 72 67 65 74 20 66 69 65 6c 64  vetoTarget field
25bd0 20 74 6f 20 74 68 65 20 72 6f 77 69 64 20 6f 66   to the rowid of
25be0 0a 20 20 20 20 2a 2a 20 74 68 65 20 72 6f 77 20  .    ** the row 
25bf0 74 68 61 74 20 69 73 20 62 65 69 6e 67 20 64 65  that is being de
25c00 6c 65 74 65 64 20 2a 2f 0a 20 20 20 20 69 36 34  leted */.    i64
25c10 20 69 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 42   iKey = sqlite3B
25c20 74 72 65 65 49 6e 74 65 67 65 72 4b 65 79 28 70  treeIntegerKey(p
25c30 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a  C->uc.pCursor);.
25c40 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
25c50 6d 6f 76 65 74 6f 54 61 72 67 65 74 3d 3d 69 4b  movetoTarget==iK
25c60 65 79 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  ey );.  }.#endif
25c70 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 75 70  ..  /* If the up
25c80 64 61 74 65 2d 68 6f 6f 6b 20 6f 72 20 70 72 65  date-hook or pre
25c90 2d 75 70 64 61 74 65 2d 68 6f 6f 6b 20 77 69 6c  -update-hook wil
25ca0 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20 73 65  l be invoked, se
25cb0 74 20 7a 44 62 20 74 6f 0a 20 20 2a 2a 20 74 68  t zDb to.  ** th
25cc0 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 62  e name of the db
25cd0 20 74 6f 20 70 61 73 73 20 61 73 20 74 6f 20 69   to pass as to i
25ce0 74 2e 20 41 6c 73 6f 20 73 65 74 20 6c 6f 63 61  t. Also set loca
25cf0 6c 20 70 54 61 62 20 74 6f 20 61 20 63 6f 70 79  l pTab to a copy
25d00 0a 20 20 2a 2a 20 6f 66 20 70 34 2e 70 54 61 62  .  ** of p4.pTab
25d10 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20 70 35  . Finally, if p5
25d20 20 69 73 20 74 72 75 65 2c 20 69 6e 64 69 63 61   is true, indica
25d30 74 69 6e 67 20 74 68 61 74 20 74 68 69 73 20 63  ting that this c
25d40 75 72 73 6f 72 20 77 61 73 0a 20 20 2a 2a 20 6c  ursor was.  ** l
25d50 61 73 74 20 6d 6f 76 65 64 20 77 69 74 68 20 4f  ast moved with O
25d60 50 5f 4e 65 78 74 20 6f 72 20 4f 50 5f 50 72 65  P_Next or OP_Pre
25d70 76 2c 20 6e 6f 74 20 53 65 65 6b 20 6f 72 20 4e  v, not Seek or N
25d80 6f 74 46 6f 75 6e 64 2c 20 73 65 74 20 0a 20 20  otFound, set .  
25d90 2a 2a 20 56 64 62 65 43 75 72 73 6f 72 2e 6d 6f  ** VdbeCursor.mo
25da0 76 65 74 6f 54 61 72 67 65 74 20 74 6f 20 74 68  vetoTarget to th
25db0 65 20 63 75 72 72 65 6e 74 20 72 6f 77 69 64 2e  e current rowid.
25dc0 20 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e    */.  if( pOp->
25dd0 70 34 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45  p4type==P4_TABLE
25de0 20 26 26 20 48 41 53 5f 55 50 44 41 54 45 5f 48   && HAS_UPDATE_H
25df0 4f 4f 4b 28 64 62 29 20 29 7b 0a 20 20 20 20 61  OOK(db) ){.    a
25e00 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d  ssert( pC->iDb>=
25e10 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  0 );.    assert(
25e20 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62 21 3d 30   pOp->p4.pTab!=0
25e30 20 29 3b 0a 20 20 20 20 7a 44 62 20 3d 20 64 62   );.    zDb = db
25e40 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a  ->aDb[pC->iDb].z
25e50 44 62 53 4e 61 6d 65 3b 0a 20 20 20 20 70 54 61  DbSName;.    pTa
25e60 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62  b = pOp->p4.pTab
25e70 3b 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e  ;.    if( (pOp->
25e80 70 35 20 26 20 4f 50 46 4c 41 47 5f 53 41 56 45  p5 & OPFLAG_SAVE
25e90 50 4f 53 49 54 49 4f 4e 29 21 3d 30 20 26 26 20  POSITION)!=0 && 
25ea0 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b 0a 20  pC->isTable ){. 
25eb0 20 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54       pC->movetoT
25ec0 61 72 67 65 74 20 3d 20 73 71 6c 69 74 65 33 42  arget = sqlite3B
25ed0 74 72 65 65 49 6e 74 65 67 65 72 4b 65 79 28 70  treeIntegerKey(p
25ee0 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a  C->uc.pCursor);.
25ef0 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
25f00 20 20 20 7a 44 62 20 3d 20 30 3b 20 20 20 2f 2a     zDb = 0;   /*
25f10 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 53 69   Not needed.  Si
25f20 6c 65 6e 63 65 20 61 20 63 6f 6d 70 69 6c 65 72  lence a compiler
25f30 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20   warning. */.   
25f40 20 70 54 61 62 20 3d 20 30 3b 20 20 2f 2a 20 4e   pTab = 0;  /* N
25f50 6f 74 20 6e 65 65 64 65 64 2e 20 20 53 69 6c 65  ot needed.  Sile
25f60 6e 63 65 20 61 20 63 6f 6d 70 69 6c 65 72 20 77  nce a compiler w
25f70 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 7d 0a 0a  arning. */.  }..
25f80 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
25f90 41 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48  ABLE_PREUPDATE_H
25fa0 4f 4f 4b 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20  OOK.  /* Invoke 
25fb0 74 68 65 20 70 72 65 2d 75 70 64 61 74 65 2d 68  the pre-update-h
25fc0 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e  ook if required.
25fd0 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78 50   */.  if( db->xP
25fe0 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  reUpdateCallback
25ff0 20 26 26 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62   && pOp->p4.pTab
26000 20 26 26 20 48 61 73 52 6f 77 69 64 28 70 54 61   && HasRowid(pTa
26010 62 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  b) ){.    assert
26020 28 20 21 28 6f 70 66 6c 61 67 73 20 26 20 4f 50  ( !(opflags & OP
26030 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20 7c  FLAG_ISUPDATE) |
26040 7c 20 28 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  | (aMem[pOp->p3]
26050 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  .flags & MEM_Int
26060 29 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  ) );.    sqlite3
26070 56 64 62 65 50 72 65 55 70 64 61 74 65 48 6f 6f  VdbePreUpdateHoo
26080 6b 28 70 2c 20 70 43 2c 0a 20 20 20 20 20 20 20  k(p, pC,.       
26090 20 28 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c   (opflags & OPFL
260a0 41 47 5f 49 53 55 50 44 41 54 45 29 20 3f 20 53  AG_ISUPDATE) ? S
260b0 51 4c 49 54 45 5f 55 50 44 41 54 45 20 3a 20 53  QLITE_UPDATE : S
260c0 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c 20 0a 20  QLITE_DELETE, . 
260d0 20 20 20 20 20 20 20 7a 44 62 2c 20 70 54 61 62         zDb, pTab
260e0 2c 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67  , pC->movetoTarg
260f0 65 74 2c 0a 20 20 20 20 20 20 20 20 70 4f 70 2d  et,.        pOp-
26100 3e 70 33 0a 20 20 20 20 29 3b 0a 20 20 7d 0a 20  >p3.    );.  }. 
26110 20 69 66 28 20 6f 70 66 6c 61 67 73 20 26 20 4f   if( opflags & O
26120 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 20 29 20 62  PFLAG_ISNOOP ) b
26130 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 20 0a 20  reak;.#endif. . 
26140 20 2f 2a 20 4f 6e 6c 79 20 66 6c 61 67 73 20 74   /* Only flags t
26150 68 61 74 20 63 61 6e 20 62 65 20 73 65 74 20 61  hat can be set a
26160 72 65 20 53 41 56 45 50 4f 49 53 54 49 4f 4e 20  re SAVEPOISTION 
26170 61 6e 64 20 41 55 58 44 45 4c 45 54 45 20 2a 2f  and AUXDELETE */
26180 20 0a 20 20 61 73 73 65 72 74 28 20 28 70 4f 70   .  assert( (pOp
26190 2d 3e 70 35 20 26 20 7e 28 4f 50 46 4c 41 47 5f  ->p5 & ~(OPFLAG_
261a0 53 41 56 45 50 4f 53 49 54 49 4f 4e 7c 4f 50 46  SAVEPOSITION|OPF
261b0 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 29 29 3d  LAG_AUXDELETE))=
261c0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
261d0 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54  OPFLAG_SAVEPOSIT
261e0 49 4f 4e 3d 3d 42 54 52 45 45 5f 53 41 56 45 50  ION==BTREE_SAVEP
261f0 4f 53 49 54 49 4f 4e 20 29 3b 0a 20 20 61 73 73  OSITION );.  ass
26200 65 72 74 28 20 4f 50 46 4c 41 47 5f 41 55 58 44  ert( OPFLAG_AUXD
26210 45 4c 45 54 45 3d 3d 42 54 52 45 45 5f 41 55 58  ELETE==BTREE_AUX
26220 44 45 4c 45 54 45 20 29 3b 0a 0a 23 69 66 64 65  DELETE );..#ifde
26230 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
26240 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 3d 3d   if( p->pFrame==
26250 30 20 29 7b 0a 20 20 20 20 69 66 28 20 70 43 2d  0 ){.    if( pC-
26260 3e 69 73 45 70 68 65 6d 65 72 61 6c 3d 3d 30 0a  >isEphemeral==0.
26270 20 20 20 20 20 20 20 20 26 26 20 28 70 4f 70 2d          && (pOp-
26280 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 41 55 58  >p5 & OPFLAG_AUX
26290 44 45 4c 45 54 45 29 3d 3d 30 0a 20 20 20 20 20  DELETE)==0.     
262a0 20 20 20 26 26 20 28 70 43 2d 3e 77 72 46 6c 61     && (pC->wrFla
262b0 67 20 26 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45  g & OPFLAG_FORDE
262c0 4c 45 54 45 29 3d 3d 30 0a 20 20 20 20 20 20 29  LETE)==0.      )
262d0 7b 0a 20 20 20 20 20 20 6e 45 78 74 72 61 44 65  {.      nExtraDe
262e0 6c 65 74 65 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20  lete++;.    }.  
262f0 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 20    if( pOp->p2 & 
26300 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29  OPFLAG_NCHANGE )
26310 7b 0a 20 20 20 20 20 20 6e 45 78 74 72 61 44 65  {.      nExtraDe
26320 6c 65 74 65 2d 2d 3b 0a 20 20 20 20 7d 0a 20 20  lete--;.    }.  
26330 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 72 63 20 3d  }.#endif..  rc =
26340 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 65 6c   sqlite3BtreeDel
26350 65 74 65 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  ete(pC->uc.pCurs
26360 6f 72 2c 20 70 4f 70 2d 3e 70 35 29 3b 0a 20 20  or, pOp->p5);.  
26370 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
26380 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
26390 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20   pC->seekResult 
263a0 3d 20 30 3b 0a 20 20 69 66 28 20 72 63 20 29 20  = 0;.  if( rc ) 
263b0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
263c0 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 2f 2a 20 49  o_error;..  /* I
263d0 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65  nvoke the update
263e0 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65  -hook if require
263f0 64 2e 20 2a 2f 0a 20 20 69 66 28 20 6f 70 66 6c  d. */.  if( opfl
26400 61 67 73 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48  ags & OPFLAG_NCH
26410 41 4e 47 45 20 29 7b 0a 20 20 20 20 70 2d 3e 6e  ANGE ){.    p->n
26420 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 20 20 69 66  Change++;.    if
26430 28 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c  ( db->xUpdateCal
26440 6c 62 61 63 6b 20 26 26 20 48 61 73 52 6f 77 69  lback && HasRowi
26450 64 28 70 54 61 62 29 20 29 7b 0a 20 20 20 20 20  d(pTab) ){.     
26460 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c   db->xUpdateCall
26470 62 61 63 6b 28 64 62 2d 3e 70 55 70 64 61 74 65  back(db->pUpdate
26480 41 72 67 2c 20 53 51 4c 49 54 45 5f 44 45 4c 45  Arg, SQLITE_DELE
26490 54 45 2c 20 7a 44 62 2c 20 70 54 61 62 2d 3e 7a  TE, zDb, pTab->z
264a0 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 20  Name,.          
264b0 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74  pC->movetoTarget
264c0 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
264d0 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20   pC->iDb>=0 );. 
264e0 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 62 72 65 61     }.  }..  brea
264f0 6b 3b 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  k;.}./* Opcode: 
26500 52 65 73 65 74 43 6f 75 6e 74 20 2a 20 2a 20 2a  ResetCount * * *
26510 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76   * *.**.** The v
26520 61 6c 75 65 20 6f 66 20 74 68 65 20 63 68 61 6e  alue of the chan
26530 67 65 20 63 6f 75 6e 74 65 72 20 69 73 20 63 6f  ge counter is co
26540 70 69 65 64 20 74 6f 20 74 68 65 20 64 61 74 61  pied to the data
26550 62 61 73 65 20 68 61 6e 64 6c 65 0a 2a 2a 20 63  base handle.** c
26560 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 28 72  hange counter (r
26570 65 74 75 72 6e 65 64 20 62 79 20 73 75 62 73 65  eturned by subse
26580 71 75 65 6e 74 20 63 61 6c 6c 73 20 74 6f 20 73  quent calls to s
26590 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29  qlite3_changes()
265a0 29 2e 0a 2a 2a 20 54 68 65 6e 20 74 68 65 20 56  )..** Then the V
265b0 4d 73 20 69 6e 74 65 72 6e 61 6c 20 63 68 61 6e  Ms internal chan
265c0 67 65 20 63 6f 75 6e 74 65 72 20 72 65 73 65 74  ge counter reset
265d0 73 20 74 6f 20 30 2e 0a 2a 2a 20 54 68 69 73 20  s to 0..** This 
265e0 69 73 20 75 73 65 64 20 62 79 20 74 72 69 67 67  is used by trigg
265f0 65 72 20 70 72 6f 67 72 61 6d 73 2e 0a 2a 2f 0a  er programs..*/.
26600 63 61 73 65 20 4f 50 5f 52 65 73 65 74 43 6f 75  case OP_ResetCou
26610 6e 74 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 56  nt: {.  sqlite3V
26620 64 62 65 53 65 74 43 68 61 6e 67 65 73 28 64 62  dbeSetChanges(db
26630 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20  , p->nChange);. 
26640 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b   p->nChange = 0;
26650 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
26660 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 43 6f  Opcode: SorterCo
26670 6d 70 61 72 65 20 50 31 20 50 32 20 50 33 20 50  mpare P1 P2 P3 P
26680 34 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  4.** Synopsis: i
26690 66 20 6b 65 79 28 50 31 29 21 3d 74 72 69 6d 28  f key(P1)!=trim(
266a0 72 5b 50 33 5d 2c 50 34 29 20 67 6f 74 6f 20 50  r[P3],P4) goto P
266b0 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20  2.**.** P1 is a 
266c0 73 6f 72 74 65 72 20 63 75 72 73 6f 72 2e 20 54  sorter cursor. T
266d0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
266e0 63 6f 6d 70 61 72 65 73 20 61 20 70 72 65 66 69  compares a prefi
266f0 78 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 63 6f  x of the.** reco
26700 72 64 20 62 6c 6f 62 20 69 6e 20 72 65 67 69 73  rd blob in regis
26710 74 65 72 20 50 33 20 61 67 61 69 6e 73 74 20 61  ter P3 against a
26720 20 70 72 65 66 69 78 20 6f 66 20 74 68 65 20 65   prefix of the e
26730 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 74 68  ntry that .** th
26740 65 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72 20  e sorter cursor 
26750 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 73  currently points
26760 20 74 6f 2e 20 20 4f 6e 6c 79 20 74 68 65 20 66   to.  Only the f
26770 69 72 73 74 20 50 34 20 66 69 65 6c 64 73 0a 2a  irst P4 fields.*
26780 2a 20 6f 66 20 72 5b 50 33 5d 20 61 6e 64 20 74  * of r[P3] and t
26790 68 65 20 73 6f 72 74 65 72 20 72 65 63 6f 72 64  he sorter record
267a0 20 61 72 65 20 63 6f 6d 70 61 72 65 64 2e 0a 2a   are compared..*
267b0 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50  *.** If either P
267c0 33 20 6f 72 20 74 68 65 20 73 6f 72 74 65 72 20  3 or the sorter 
267d0 63 6f 6e 74 61 69 6e 73 20 61 20 4e 55 4c 4c 20  contains a NULL 
267e0 69 6e 20 6f 6e 65 20 6f 66 20 74 68 65 69 72 20  in one of their 
267f0 73 69 67 6e 69 66 69 63 61 6e 74 0a 2a 2a 20 66  significant.** f
26800 69 65 6c 64 73 20 28 6e 6f 74 20 63 6f 75 6e 74  ields (not count
26810 69 6e 67 20 74 68 65 20 50 34 20 66 69 65 6c 64  ing the P4 field
26820 73 20 61 74 20 74 68 65 20 65 6e 64 20 77 68 69  s at the end whi
26830 63 68 20 61 72 65 20 69 67 6e 6f 72 65 64 29 20  ch are ignored) 
26840 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63 6f 6d 70  then.** the comp
26850 61 72 69 73 6f 6e 20 69 73 20 61 73 73 75 6d 65  arison is assume
26860 64 20 74 6f 20 62 65 20 65 71 75 61 6c 2e 0a 2a  d to be equal..*
26870 2a 0a 2a 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67  *.** Fall throug
26880 68 20 74 6f 20 6e 65 78 74 20 69 6e 73 74 72 75  h to next instru
26890 63 74 69 6f 6e 20 69 66 20 74 68 65 20 74 77 6f  ction if the two
268a0 20 72 65 63 6f 72 64 73 20 63 6f 6d 70 61 72 65   records compare
268b0 20 65 71 75 61 6c 20 74 6f 0a 2a 2a 20 65 61 63   equal to.** eac
268c0 68 20 6f 74 68 65 72 2e 20 20 4a 75 6d 70 20 74  h other.  Jump t
268d0 6f 20 50 32 20 69 66 20 74 68 65 79 20 61 72 65  o P2 if they are
268e0 20 64 69 66 66 65 72 65 6e 74 2e 0a 2a 2f 0a 63   different..*/.c
268f0 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 43 6f 6d  ase OP_SorterCom
26900 70 61 72 65 3a 20 7b 0a 20 20 56 64 62 65 43 75  pare: {.  VdbeCu
26910 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20  rsor *pC;.  int 
26920 72 65 73 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 43  res;.  int nKeyC
26930 6f 6c 3b 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61  ol;..  pC = p->a
26940 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
26950 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65   assert( isSorte
26960 72 28 70 43 29 20 29 3b 0a 20 20 61 73 73 65 72  r(pC) );.  asser
26970 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
26980 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 70 49  P4_INT32 );.  pI
26990 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
269a0 70 33 5d 3b 0a 20 20 6e 4b 65 79 43 6f 6c 20 3d  p3];.  nKeyCol =
269b0 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 72 65   pOp->p4.i;.  re
269c0 73 20 3d 20 30 3b 0a 20 20 72 63 20 3d 20 73 71  s = 0;.  rc = sq
269d0 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 43  lite3VdbeSorterC
269e0 6f 6d 70 61 72 65 28 70 43 2c 20 70 49 6e 33 2c  ompare(pC, pIn3,
269f0 20 6e 4b 65 79 43 6f 6c 2c 20 26 72 65 73 29 3b   nKeyCol, &res);
26a00 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
26a10 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20  en(res!=0,2);.  
26a20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
26a30 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
26a40 3b 0a 20 20 69 66 28 20 72 65 73 20 29 20 67 6f  ;.  if( res ) go
26a50 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
26a60 20 62 72 65 61 6b 3b 0a 7d 3b 0a 0a 2f 2a 20 4f   break;.};../* O
26a70 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 44 61 74  pcode: SorterDat
26a80 61 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  a P1 P2 P3 * *.*
26a90 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
26aa0 5d 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69  ]=data.**.** Wri
26ab0 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  te into register
26ac0 20 50 32 20 74 68 65 20 63 75 72 72 65 6e 74 20   P2 the current 
26ad0 73 6f 72 74 65 72 20 64 61 74 61 20 66 6f 72 20  sorter data for 
26ae0 73 6f 72 74 65 72 20 63 75 72 73 6f 72 20 50 31  sorter cursor P1
26af0 2e 0a 2a 2a 20 54 68 65 6e 20 63 6c 65 61 72 20  ..** Then clear 
26b00 74 68 65 20 63 6f 6c 75 6d 6e 20 68 65 61 64 65  the column heade
26b10 72 20 63 61 63 68 65 20 6f 6e 20 63 75 72 73 6f  r cache on curso
26b20 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  r P3..**.** This
26b30 20 6f 70 63 6f 64 65 20 69 73 20 6e 6f 72 6d 61   opcode is norma
26b40 6c 6c 79 20 75 73 65 20 74 6f 20 6d 6f 76 65 20  lly use to move 
26b50 61 20 72 65 63 6f 72 64 20 6f 75 74 20 6f 66 20  a record out of 
26b60 74 68 65 20 73 6f 72 74 65 72 20 61 6e 64 20 69  the sorter and i
26b70 6e 74 6f 0a 2a 2a 20 61 20 72 65 67 69 73 74 65  nto.** a registe
26b80 72 20 74 68 61 74 20 69 73 20 74 68 65 20 73 6f  r that is the so
26b90 75 72 63 65 20 66 6f 72 20 61 20 70 73 65 75 64  urce for a pseud
26ba0 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f 72 20 63  o-table cursor c
26bb0 72 65 61 74 65 64 20 75 73 69 6e 67 0a 2a 2a 20  reated using.** 
26bc0 4f 70 65 6e 50 73 65 75 64 6f 2e 20 20 54 68 61  OpenPseudo.  Tha
26bd0 74 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63  t pseudo-table c
26be0 75 72 73 6f 72 20 69 73 20 74 68 65 20 6f 6e 65  ursor is the one
26bf0 20 74 68 61 74 20 69 73 20 69 64 65 6e 74 69 66   that is identif
26c00 69 65 64 20 62 79 0a 2a 2a 20 70 61 72 61 6d 65  ied by.** parame
26c10 74 65 72 20 50 33 2e 20 20 43 6c 65 61 72 69 6e  ter P3.  Clearin
26c20 67 20 74 68 65 20 50 33 20 63 6f 6c 75 6d 6e 20  g the P3 column 
26c30 63 61 63 68 65 20 61 73 20 70 61 72 74 20 6f 66  cache as part of
26c40 20 74 68 69 73 20 6f 70 63 6f 64 65 20 73 61 76   this opcode sav
26c50 65 73 0a 2a 2a 20 75 73 20 66 72 6f 6d 20 68 61  es.** us from ha
26c60 76 69 6e 67 20 74 6f 20 69 73 73 75 65 20 61 20  ving to issue a 
26c70 73 65 70 61 72 61 74 65 20 4e 75 6c 6c 52 6f 77  separate NullRow
26c80 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 6f 20   instruction to 
26c90 63 6c 65 61 72 20 74 68 61 74 20 63 61 63 68 65  clear that cache
26ca0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72  ..*/.case OP_Sor
26cb0 74 65 72 44 61 74 61 3a 20 7b 0a 20 20 56 64 62  terData: {.  Vdb
26cc0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20  eCursor *pC;..  
26cd0 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
26ce0 2d 3e 70 32 5d 3b 0a 20 20 70 43 20 3d 20 70 2d  ->p2];.  pC = p-
26cf0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
26d00 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72  .  assert( isSor
26d10 74 65 72 28 70 43 29 20 29 3b 0a 20 20 72 63 20  ter(pC) );.  rc 
26d20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72  = sqlite3VdbeSor
26d30 74 65 72 52 6f 77 6b 65 79 28 70 43 2c 20 70 4f  terRowkey(pC, pO
26d40 75 74 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72  ut);.  assert( r
26d50 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c!=SQLITE_OK || 
26d60 28 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26 20 4d  (pOut->flags & M
26d70 45 4d 5f 42 6c 6f 62 29 20 29 3b 0a 20 20 61 73  EM_Blob) );.  as
26d80 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
26d90 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
26da0 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66 28 20  Cursor );.  if( 
26db0 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
26dc0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
26dd0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 33  p->apCsr[pOp->p3
26de0 5d 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  ]->cacheStatus =
26df0 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
26e00 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
26e10 6f 64 65 3a 20 52 6f 77 44 61 74 61 20 50 31 20  ode: RowData P1 
26e20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
26e30 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 64 61 74  opsis: r[P2]=dat
26e40 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e  a.**.** Write in
26e50 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 74  to register P2 t
26e60 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20  he complete row 
26e70 63 6f 6e 74 65 6e 74 20 66 6f 72 20 74 68 65 20  content for the 
26e80 72 6f 77 20 61 74 20 0a 2a 2a 20 77 68 69 63 68  row at .** which
26e90 20 63 75 72 73 6f 72 20 50 31 20 69 73 20 63 75   cursor P1 is cu
26ea0 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67  rrently pointing
26eb0 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 6e 6f  ..** There is no
26ec0 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20   interpretation 
26ed0 6f 66 20 74 68 65 20 64 61 74 61 2e 20 20 0a 2a  of the data.  .*
26ee0 2a 20 49 74 20 69 73 20 6a 75 73 74 20 63 6f 70  * It is just cop
26ef0 69 65 64 20 6f 6e 74 6f 20 74 68 65 20 50 32 20  ied onto the P2 
26f00 72 65 67 69 73 74 65 72 20 65 78 61 63 74 6c 79  register exactly
26f10 20 61 73 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f   as .** it is fo
26f20 75 6e 64 20 69 6e 20 74 68 65 20 64 61 74 61 62  und in the datab
26f30 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20  ase file..**.** 
26f40 49 66 20 63 75 72 73 6f 72 20 50 31 20 69 73 20  If cursor P1 is 
26f50 61 6e 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 74  an index, then t
26f60 68 65 20 63 6f 6e 74 65 6e 74 20 69 73 20 74 68  he content is th
26f70 65 20 6b 65 79 20 6f 66 20 74 68 65 20 72 6f 77  e key of the row
26f80 2e 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50  ..** If cursor P
26f90 32 20 69 73 20 61 20 74 61 62 6c 65 2c 20 74 68  2 is a table, th
26fa0 65 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 65  en the content e
26fb0 78 74 72 61 63 74 65 64 20 69 73 20 74 68 65 20  xtracted is the 
26fc0 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  data..**.** If t
26fd0 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73  he P1 cursor mus
26fe0 74 20 62 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f  t be pointing to
26ff0 20 61 20 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f   a valid row (no
27000 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a  t a NULL row).**
27010 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62 6c 65   of a real table
27020 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74  , not a pseudo-t
27030 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  able..**.** If P
27040 33 21 3d 30 20 74 68 65 6e 20 74 68 69 73 20 6f  3!=0 then this o
27050 70 63 6f 64 65 20 69 73 20 61 6c 6c 6f 77 65 64  pcode is allowed
27060 20 74 6f 20 6d 61 6b 65 20 61 6e 20 65 70 68 65   to make an ephe
27070 72 6d 65 72 61 6c 20 70 6f 69 6e 74 65 72 0a 2a  rmeral pointer.*
27080 2a 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62  * into the datab
27090 61 73 65 20 70 61 67 65 2e 20 20 54 68 61 74 20  ase page.  That 
270a0 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 63  means that the c
270b0 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65 20 6f 75  ontent of the ou
270c0 74 70 75 74 0a 2a 2a 20 72 65 67 69 73 74 65 72  tput.** register
270d0 20 77 69 6c 6c 20 62 65 20 69 6e 76 61 6c 69 64   will be invalid
270e0 61 74 65 64 20 61 73 20 73 6f 6f 6e 20 61 73 20  ated as soon as 
270f0 74 68 65 20 63 75 72 73 6f 72 20 6d 6f 76 65 73  the cursor moves
27100 20 2d 20 69 6e 63 6c 75 64 69 6e 67 0a 2a 2a 20   - including.** 
27110 6d 6f 76 65 73 20 63 61 75 73 65 64 20 62 79 20  moves caused by 
27120 6f 74 68 65 72 20 63 75 72 73 6f 72 73 20 74 68  other cursors th
27130 61 74 20 22 73 61 76 65 22 20 74 68 65 20 74 68  at "save" the th
27140 65 20 63 75 72 72 65 6e 74 20 63 75 72 73 6f 72  e current cursor
27150 73 0a 2a 2a 20 70 6f 73 69 74 69 6f 6e 20 69 6e  s.** position in
27160 20 6f 72 64 65 72 20 74 68 61 74 20 74 68 65 79   order that they
27170 20 63 61 6e 20 77 72 69 74 65 20 74 6f 20 74 68   can write to th
27180 65 20 73 61 6d 65 20 74 61 62 6c 65 2e 20 20 49  e same table.  I
27190 66 20 50 33 3d 3d 30 0a 2a 2a 20 74 68 65 6e 20  f P3==0.** then 
271a0 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20 64 61  a copy of the da
271b0 74 61 20 69 73 20 6d 61 64 65 20 69 6e 74 6f 20  ta is made into 
271c0 6d 65 6d 6f 72 79 2e 20 20 50 33 21 3d 30 20 69  memory.  P3!=0 i
271d0 73 20 66 61 73 74 65 72 2c 20 62 75 74 0a 2a 2a  s faster, but.**
271e0 20 50 33 3d 3d 30 20 69 73 20 73 61 66 65 72 2e   P3==0 is safer.
271f0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 21 3d 30 20  .**.** If P3!=0 
27200 74 68 65 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74  then the content
27210 20 6f 66 20 74 68 65 20 50 32 20 72 65 67 69 73   of the P2 regis
27220 74 65 72 20 69 73 20 75 6e 73 75 69 74 61 62 6c  ter is unsuitabl
27230 65 20 66 6f 72 20 75 73 65 0a 2a 2a 20 69 6e 20  e for use.** in 
27240 4f 50 5f 52 65 73 75 6c 74 20 61 6e 64 20 61 6e  OP_Result and an
27250 79 20 4f 50 5f 52 65 73 75 6c 74 20 77 69 6c 6c  y OP_Result will
27260 20 69 6e 76 61 6c 69 64 61 74 65 20 74 68 65 20   invalidate the 
27270 50 32 20 72 65 67 69 73 74 65 72 20 63 6f 6e 74  P2 register cont
27280 65 6e 74 2e 0a 2a 2a 20 54 68 65 20 50 32 20 72  ent..** The P2 r
27290 65 67 69 73 74 65 72 20 63 6f 6e 74 65 6e 74 20  egister content 
272a0 69 73 20 69 6e 76 61 6c 69 64 61 74 65 64 20 62  is invalidated b
272b0 79 20 6f 70 63 6f 64 65 73 20 6c 69 6b 65 20 4f  y opcodes like O
272c0 50 5f 46 75 6e 63 74 69 6f 6e 20 6f 72 0a 2a 2a  P_Function or.**
272d0 20 62 79 20 61 6e 79 20 75 73 65 20 6f 66 20 61   by any use of a
272e0 6e 6f 74 68 65 72 20 63 75 72 73 6f 72 20 70 6f  nother cursor po
272f0 69 6e 74 69 6e 67 20 74 6f 20 74 68 65 20 73 61  inting to the sa
27300 6d 65 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73  me table..*/.cas
27310 65 20 4f 50 5f 52 6f 77 44 61 74 61 3a 20 7b 0a  e OP_RowData: {.
27320 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
27330 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
27340 72 73 72 3b 0a 20 20 75 33 32 20 6e 3b 0a 0a 20  rsr;.  u32 n;.. 
27350 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
27360 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
27370 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
27380 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
27390 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
273a0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
273b0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
273c0 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
273d0 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
273e0 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
273f0 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69  E );.  assert( i
27400 73 53 6f 72 74 65 72 28 70 43 29 3d 3d 30 20 29  sSorter(pC)==0 )
27410 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
27420 6e 75 6c 6c 52 6f 77 3d 3d 30 20 29 3b 0a 20 20  nullRow==0 );.  
27430 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70  assert( pC->uc.p
27440 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 70  Cursor!=0 );.  p
27450 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43  Crsr = pC->uc.pC
27460 75 72 73 6f 72 3b 0a 0a 20 20 2f 2a 20 54 68 65  ursor;..  /* The
27470 20 4f 50 5f 52 6f 77 44 61 74 61 20 6f 70 63 6f   OP_RowData opco
27480 64 65 73 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f  des always follo
27490 77 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f  w OP_NotExists o
274a0 72 0a 20 20 2a 2a 20 4f 50 5f 53 65 65 6b 52 6f  r.  ** OP_SeekRo
274b0 77 69 64 20 6f 72 20 4f 50 5f 52 65 77 69 6e 64  wid or OP_Rewind
274c0 2f 4f 70 5f 4e 65 78 74 20 77 69 74 68 20 6e 6f  /Op_Next with no
274d0 20 69 6e 74 65 72 76 65 6e 69 6e 67 20 69 6e 73   intervening ins
274e0 74 72 75 63 74 69 6f 6e 73 0a 20 20 2a 2a 20 74  tructions.  ** t
274f0 68 61 74 20 6d 69 67 68 74 20 69 6e 76 61 6c 69  hat might invali
27500 64 61 74 65 20 74 68 65 20 63 75 72 73 6f 72 2e  date the cursor.
27510 0a 20 20 2a 2a 20 49 66 20 74 68 69 73 20 77 68  .  ** If this wh
27520 65 72 65 20 6e 6f 74 20 74 68 65 20 63 61 73 65  ere not the case
27530 2c 20 6f 6e 20 6f 66 20 74 68 65 20 66 6f 6c 6c  , on of the foll
27540 6f 77 69 6e 67 20 61 73 73 65 72 74 28 29 73 0a  owing assert()s.
27550 20 20 2a 2a 20 77 6f 75 6c 64 20 66 61 69 6c 2e    ** would fail.
27560 20 20 53 68 6f 75 6c 64 20 74 68 69 73 20 65 76    Should this ev
27570 65 72 20 63 68 61 6e 67 65 20 28 62 65 63 61 75  er change (becau
27580 73 65 20 6f 66 20 63 68 61 6e 67 65 73 20 69 6e  se of changes in
27590 20 74 68 65 20 63 6f 64 65 0a 20 20 2a 2a 20 67   the code.  ** g
275a0 65 6e 65 72 61 74 6f 72 29 20 74 68 65 6e 20 74  enerator) then t
275b0 68 65 20 66 69 78 20 77 6f 75 6c 64 20 62 65 20  he fix would be 
275c0 74 6f 20 69 6e 73 65 72 74 20 61 20 63 61 6c 6c  to insert a call
275d0 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33   to.  ** sqlite3
275e0 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f  VdbeCursorMoveto
275f0 28 29 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72  ()..  */.  asser
27600 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
27610 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73  oveto==0 );.  as
27620 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72  sert( sqlite3Btr
27630 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28  eeCursorIsValid(
27640 70 43 72 73 72 29 20 29 3b 0a 23 69 66 20 30 20  pCrsr) );.#if 0 
27650 20 2f 2a 20 4e 6f 74 20 72 65 71 75 69 72 65 64   /* Not required
27660 20 64 75 65 20 74 6f 20 74 68 65 20 70 72 65 76   due to the prev
27670 69 6f 75 73 20 74 6f 20 61 73 73 65 72 74 28 29  ious to assert()
27680 20 73 74 61 74 65 6d 65 6e 74 73 20 2a 2f 0a 20   statements */. 
27690 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
276a0 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43  eCursorMoveto(pC
276b0 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c  );.  if( rc!=SQL
276c0 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62  ITE_OK ) goto ab
276d0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
276e0 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 6e 20 3d 20  ;.#endif..  n = 
276f0 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 79 6c  sqlite3BtreePayl
27700 6f 61 64 53 69 7a 65 28 70 43 72 73 72 29 3b 0a  oadSize(pCrsr);.
27710 20 20 69 66 28 20 6e 3e 28 75 33 32 29 64 62 2d    if( n>(u32)db-
27720 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
27730 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a  IMIT_LENGTH] ){.
27740 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
27750 3b 0a 20 20 7d 0a 20 20 74 65 73 74 63 61 73 65  ;.  }.  testcase
27760 28 20 6e 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d  ( n==0 );.  rc =
27770 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46   sqlite3VdbeMemF
27780 72 6f 6d 42 74 72 65 65 28 70 43 72 73 72 2c 20  romBtree(pCrsr, 
27790 30 2c 20 6e 2c 20 70 4f 75 74 29 3b 0a 20 20 69  0, n, pOut);.  i
277a0 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
277b0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
277c0 0a 20 20 69 66 28 20 21 70 4f 70 2d 3e 70 33 20  .  if( !pOp->p3 
277d0 29 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65  ) Deephemeralize
277e0 28 70 4f 75 74 29 3b 0a 20 20 55 50 44 41 54 45  (pOut);.  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 28 4f 50 46 4c 41 47 5f 41 50 50 45  5 & (OPFLAG_APPE
2a9a0 4e 44 7c 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f  ND|OPFLAG_SAVEPO
2a9b0 53 49 54 49 4f 4e 29 29 2c 20 0a 20 20 20 20 20  SITION)), .     
2a9c0 20 20 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f     ((pOp->p5 & O
2a9d0 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53  PFLAG_USESEEKRES
2a9e0 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52  ULT) ? pC->seekR
2a9f0 65 73 75 6c 74 20 3a 20 30 29 0a 20 20 20 20 20  esult : 0).     
2aa00 20 20 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74     );.    assert
2aa10 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
2aa20 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 70  veto==0 );.    p
2aa30 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
2aa40 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
2aa50 7d 0a 20 20 69 66 28 20 72 63 29 20 67 6f 74 6f  }.  if( rc) goto
2aa60 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2aa70 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ror;.  break;.}.
2aa80 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 44  ./* Opcode: IdxD
2aa90 65 6c 65 74 65 20 50 31 20 50 32 20 50 33 20 2a  elete P1 P2 P3 *
2aaa0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
2aab0 6b 65 79 3d 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a  key=r[P2@P3].**.
2aac0 2a 2a 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ** The content o
2aad0 66 20 50 33 20 72 65 67 69 73 74 65 72 73 20 73  f P3 registers s
2aae0 74 61 72 74 69 6e 67 20 61 74 20 72 65 67 69 73  tarting at regis
2aaf0 74 65 72 20 50 32 20 66 6f 72 6d 0a 2a 2a 20 61  ter P2 form.** a
2ab00 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
2ab10 20 6b 65 79 2e 20 54 68 69 73 20 6f 70 63 6f 64   key. This opcod
2ab20 65 20 72 65 6d 6f 76 65 73 20 74 68 61 74 20 65  e removes that e
2ab30 6e 74 72 79 20 66 72 6f 6d 20 74 68 65 20 0a 2a  ntry from the .*
2ab40 2a 20 69 6e 64 65 78 20 6f 70 65 6e 65 64 20 62  * index opened b
2ab50 79 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a  y cursor P1..*/.
2ab60 63 61 73 65 20 4f 50 5f 49 64 78 44 65 6c 65 74  case OP_IdxDelet
2ab70 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  e: {.  VdbeCurso
2ab80 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f  r *pC;.  BtCurso
2ab90 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20  r *pCrsr;.  int 
2aba0 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52  res;.  UnpackedR
2abb0 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73 65  ecord r;..  asse
2abc0 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b  rt( pOp->p3>0 );
2abd0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2abe0 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b  p2>0 && pOp->p2+
2abf0 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
2ac00 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
2ac10 29 2b 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28  )+1 );.  assert(
2ac20 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
2ac30 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
2ac40 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
2ac50 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
2ac60 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
2ac70 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
2ac80 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
2ac90 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 70 43 72  E_BTREE );.  pCr
2aca0 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72  sr = pC->uc.pCur
2acb0 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70  sor;.  assert( p
2acc0 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 61 73 73  Crsr!=0 );.  ass
2acd0 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20  ert( pOp->p5==0 
2ace0 29 3b 0a 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20  );.  r.pKeyInfo 
2acf0 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a  = pC->pKeyInfo;.
2ad00 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31    r.nField = (u1
2ad10 36 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 72 2e 64  6)pOp->p3;.  r.d
2ad20 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20  efault_rc = 0;. 
2ad30 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b   r.aMem = &aMem[
2ad40 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 72 63 20 3d  pOp->p2];.  rc =
2ad50 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
2ad60 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73  etoUnpacked(pCrs
2ad70 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65  r, &r, 0, 0, &re
2ad80 73 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  s);.  if( rc ) g
2ad90 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
2ada0 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 72 65  _error;.  if( re
2adb0 73 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d  s==0 ){.    rc =
2adc0 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 65 6c   sqlite3BtreeDel
2add0 65 74 65 28 70 43 72 73 72 2c 20 42 54 52 45 45  ete(pCrsr, BTREE
2ade0 5f 41 55 58 44 45 4c 45 54 45 29 3b 0a 20 20 20  _AUXDELETE);.   
2adf0 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
2ae00 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
2ae10 72 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28  r;.  }.  assert(
2ae20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
2ae30 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 70 43 2d 3e  eto==0 );.  pC->
2ae40 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
2ae50 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 2d  CHE_STALE;.  pC-
2ae60 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 30 3b  >seekResult = 0;
2ae70 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2ae80 4f 70 63 6f 64 65 3a 20 53 65 65 6b 20 50 31 20  Opcode: Seek P1 
2ae90 2a 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  * P3 P4 *.** Syn
2aea0 6f 70 73 69 73 3a 20 4d 6f 76 65 20 50 33 20 74  opsis: Move P3 t
2aeb0 6f 20 50 31 2e 72 6f 77 69 64 0a 2a 2a 0a 2a 2a  o P1.rowid.**.**
2aec0 20 50 31 20 69 73 20 61 6e 20 6f 70 65 6e 20 69   P1 is an open i
2aed0 6e 64 65 78 20 63 75 72 73 6f 72 20 61 6e 64 20  ndex cursor and 
2aee0 50 33 20 69 73 20 61 20 63 75 72 73 6f 72 20 6f  P3 is a cursor o
2aef0 6e 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  n the correspond
2af00 69 6e 67 0a 2a 2a 20 74 61 62 6c 65 2e 20 20 54  ing.** table.  T
2af10 68 69 73 20 6f 70 63 6f 64 65 20 64 6f 65 73 20  his opcode does 
2af20 61 20 64 65 66 65 72 72 65 64 20 73 65 65 6b 20  a deferred seek 
2af30 6f 66 20 74 68 65 20 50 33 20 74 61 62 6c 65 20  of the P3 table 
2af40 63 75 72 73 6f 72 0a 2a 2a 20 74 6f 20 74 68 65  cursor.** to the
2af50 20 72 6f 77 20 74 68 61 74 20 63 6f 72 72 65 73   row that corres
2af60 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 63 75 72  ponds to the cur
2af70 72 65 6e 74 20 72 6f 77 20 6f 66 20 50 31 2e 0a  rent row of P1..
2af80 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61 20  **.** This is a 
2af90 64 65 66 65 72 72 65 64 20 73 65 65 6b 2e 20 20  deferred seek.  
2afa0 4e 6f 74 68 69 6e 67 20 61 63 74 75 61 6c 6c 79  Nothing actually
2afb0 20 68 61 70 70 65 6e 73 20 75 6e 74 69 6c 0a 2a   happens until.*
2afc0 2a 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  * the cursor is 
2afd0 75 73 65 64 20 74 6f 20 72 65 61 64 20 61 20 72  used to read a r
2afe0 65 63 6f 72 64 2e 20 20 54 68 61 74 20 77 61 79  ecord.  That way
2aff0 2c 20 69 66 20 6e 6f 20 72 65 61 64 73 0a 2a 2a  , if no reads.**
2b000 20 6f 63 63 75 72 2c 20 6e 6f 20 75 6e 6e 65 63   occur, no unnec
2b010 65 73 73 61 72 79 20 49 2f 4f 20 68 61 70 70 65  essary I/O happe
2b020 6e 73 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79  ns..**.** P4 may
2b030 20 62 65 20 61 6e 20 61 72 72 61 79 20 6f 66 20   be an array of 
2b040 69 6e 74 65 67 65 72 73 20 28 74 79 70 65 20 50  integers (type P
2b050 34 5f 49 4e 54 41 52 52 41 59 29 20 63 6f 6e 74  4_INTARRAY) cont
2b060 61 69 6e 69 6e 67 0a 2a 2a 20 6f 6e 65 20 65 6e  aining.** one en
2b070 74 72 79 20 66 6f 72 20 65 61 63 68 20 63 6f 6c  try for each col
2b080 75 6d 6e 20 69 6e 20 74 68 65 20 50 33 20 74 61  umn in the P3 ta
2b090 62 6c 65 2e 20 20 49 66 20 61 72 72 61 79 20 65  ble.  If array e
2b0a0 6e 74 72 79 20 61 28 69 29 0a 2a 2a 20 69 73 20  ntry a(i).** is 
2b0b0 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 72  non-zero, then r
2b0c0 65 61 64 69 6e 67 20 63 6f 6c 75 6d 6e 20 61 28  eading column a(
2b0d0 69 29 2d 31 20 66 72 6f 6d 20 63 75 72 73 6f 72  i)-1 from cursor
2b0e0 20 50 33 20 69 73 20 0a 2a 2a 20 65 71 75 69 76   P3 is .** equiv
2b0f0 61 6c 65 6e 74 20 74 6f 20 70 65 72 66 6f 72 6d  alent to perform
2b100 69 6e 67 20 74 68 65 20 64 65 66 65 72 72 65 64  ing the deferred
2b110 20 73 65 65 6b 20 61 6e 64 20 74 68 65 6e 20 72   seek and then r
2b120 65 61 64 69 6e 67 20 63 6f 6c 75 6d 6e 20 69 20  eading column i 
2b130 0a 2a 2a 20 66 72 6f 6d 20 50 31 2e 20 20 54 68  .** from P1.  Th
2b140 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69  is information i
2b150 73 20 73 74 6f 72 65 64 20 69 6e 20 50 33 20 61  s stored in P3 a
2b160 6e 64 20 75 73 65 64 20 74 6f 20 72 65 64 69 72  nd used to redir
2b170 65 63 74 0a 2a 2a 20 72 65 61 64 73 20 61 67 61  ect.** reads aga
2b180 69 6e 73 74 20 50 33 20 6f 76 65 72 20 74 6f 20  inst P3 over to 
2b190 50 31 2c 20 74 68 75 73 20 70 6f 73 73 69 62 6c  P1, thus possibl
2b1a0 79 20 61 76 6f 69 64 69 6e 67 20 74 68 65 20 6e  y avoiding the n
2b1b0 65 65 64 20 74 6f 0a 2a 2a 20 73 65 65 6b 20 61  eed to.** seek a
2b1c0 6e 64 20 72 65 61 64 20 63 75 72 73 6f 72 20 50  nd read cursor P
2b1d0 33 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  3..*/./* Opcode:
2b1e0 20 49 64 78 52 6f 77 69 64 20 50 31 20 50 32 20   IdxRowid P1 P2 
2b1f0 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
2b200 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a  s: r[P2]=rowid.*
2b210 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20  *.** Write into 
2b220 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 20 69  register P2 an i
2b230 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73 20  nteger which is 
2b240 74 68 65 20 6c 61 73 74 20 65 6e 74 72 79 20 69  the last entry i
2b250 6e 20 74 68 65 20 72 65 63 6f 72 64 20 61 74 0a  n the record at.
2b260 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  ** the end of th
2b270 65 20 69 6e 64 65 78 20 6b 65 79 20 70 6f 69 6e  e index key poin
2b280 74 65 64 20 74 6f 20 62 79 20 63 75 72 73 6f 72  ted to by cursor
2b290 20 50 31 2e 20 20 54 68 69 73 20 69 6e 74 65 67   P1.  This integ
2b2a0 65 72 20 73 68 6f 75 6c 64 20 62 65 0a 2a 2a 20  er should be.** 
2b2b0 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65  the rowid of the
2b2c0 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74 6f 20   table entry to 
2b2d0 77 68 69 63 68 20 74 68 69 73 20 69 6e 64 65 78  which this index
2b2e0 20 65 6e 74 72 79 20 70 6f 69 6e 74 73 2e 0a 2a   entry points..*
2b2f0 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 52  *.** See also: R
2b300 6f 77 69 64 2c 20 4d 61 6b 65 52 65 63 6f 72 64  owid, MakeRecord
2b310 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65  ..*/.case OP_See
2b320 6b 3a 0a 63 61 73 65 20 4f 50 5f 49 64 78 52 6f  k:.case OP_IdxRo
2b330 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20  wid: {          
2b340 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
2b350 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
2b360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b370 2f 2a 20 54 68 65 20 50 31 20 69 6e 64 65 78 20  /* The P1 index 
2b380 63 75 72 73 6f 72 20 2a 2f 0a 20 20 56 64 62 65  cursor */.  Vdbe
2b390 43 75 72 73 6f 72 20 2a 70 54 61 62 43 75 72 3b  Cursor *pTabCur;
2b3a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
2b3b0 65 20 50 32 20 74 61 62 6c 65 20 63 75 72 73 6f  e P2 table curso
2b3c0 72 20 28 4f 50 5f 53 65 65 6b 20 6f 6e 6c 79 29  r (OP_Seek only)
2b3d0 20 2a 2f 0a 20 20 69 36 34 20 72 6f 77 69 64 3b   */.  i64 rowid;
2b3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b3f0 20 20 20 20 20 2f 2a 20 52 6f 77 69 64 20 74 68       /* Rowid th
2b400 61 74 20 50 31 20 63 75 72 72 65 6e 74 20 70 6f  at P1 current po
2b410 69 6e 74 73 20 74 6f 20 2a 2f 0a 0a 20 20 61 73  ints to */..  as
2b420 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
2b430 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
2b440 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
2b450 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
2b460 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
2b470 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
2b480 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
2b490 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
2b4a0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63    assert( pC->uc
2b4b0 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  .pCursor!=0 );. 
2b4c0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
2b4d0 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 61 73 73  able==0 );.  ass
2b4e0 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
2b4f0 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
2b500 61 73 73 65 72 74 28 20 21 70 43 2d 3e 6e 75 6c  assert( !pC->nul
2b510 6c 52 6f 77 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  lRow || pOp->opc
2b520 6f 64 65 3d 3d 4f 50 5f 49 64 78 52 6f 77 69 64  ode==OP_IdxRowid
2b530 20 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 49 64   );..  /* The Id
2b540 78 52 6f 77 69 64 20 61 6e 64 20 53 65 65 6b 20  xRowid and Seek 
2b550 6f 70 63 6f 64 65 73 20 61 72 65 20 63 6f 6d 62  opcodes are comb
2b560 69 6e 65 64 20 62 65 63 61 75 73 65 20 6f 66 20  ined because of 
2b570 74 68 65 20 63 6f 6d 6d 6f 6e 61 6c 69 74 79 0a  the commonality.
2b580 20 20 2a 2a 20 6f 66 20 73 71 6c 69 74 65 33 56    ** of sqlite3V
2b590 64 62 65 43 75 72 73 6f 72 52 65 73 74 6f 72 65  dbeCursorRestore
2b5a0 28 29 20 61 6e 64 20 73 71 6c 69 74 65 33 56 64  () and sqlite3Vd
2b5b0 62 65 49 64 78 52 6f 77 69 64 28 29 2e 20 2a 2f  beIdxRowid(). */
2b5c0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
2b5d0 64 62 65 43 75 72 73 6f 72 52 65 73 74 6f 72 65  dbeCursorRestore
2b5e0 28 70 43 29 3b 0a 0a 20 20 2f 2a 20 73 71 6c 69  (pC);..  /* sqli
2b5f0 74 65 33 56 62 65 43 75 72 73 6f 72 52 65 73 74  te3VbeCursorRest
2b600 6f 72 65 28 29 20 63 61 6e 20 6f 6e 6c 79 20 66  ore() can only f
2b610 61 69 6c 20 69 66 20 74 68 65 20 72 65 63 6f 72  ail if the recor
2b620 64 20 68 61 73 20 62 65 65 6e 20 64 65 6c 65 74  d has been delet
2b630 65 64 0a 20 20 2a 2a 20 6f 75 74 20 66 72 6f 6d  ed.  ** out from
2b640 20 75 6e 64 65 72 20 74 68 65 20 63 75 72 73 6f   under the curso
2b650 72 2e 20 20 54 68 61 74 20 77 69 6c 6c 20 6e 65  r.  That will ne
2b660 76 65 72 20 68 61 70 70 65 6e 73 20 66 6f 72 20  ver happens for 
2b670 61 6e 20 49 64 78 52 6f 77 69 64 0a 20 20 2a 2a  an IdxRowid.  **
2b680 20 6f 72 20 53 65 65 6b 20 6f 70 63 6f 64 65 20   or Seek opcode 
2b690 2a 2f 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72  */.  if( NEVER(r
2b6a0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 20  c!=SQLITE_OK) ) 
2b6b0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
2b6c0 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 69 66 28 20  o_error;..  if( 
2b6d0 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a  !pC->nullRow ){.
2b6e0 20 20 20 20 72 6f 77 69 64 20 3d 20 30 3b 20 20      rowid = 0;  
2b6f0 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20  /* Not needed.  
2b700 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 69 6c  Only used to sil
2b710 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20  ence a warning. 
2b720 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  */.    rc = sqli
2b730 74 65 33 56 64 62 65 49 64 78 52 6f 77 69 64 28  te3VdbeIdxRowid(
2b740 64 62 2c 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  db, pC->uc.pCurs
2b750 6f 72 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20 20  or, &rowid);.   
2b760 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
2b770 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  OK ){.      goto
2b780 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2b790 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  ror;.    }.    i
2b7a0 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
2b7b0 4f 50 5f 53 65 65 6b 20 29 7b 0a 20 20 20 20 20  OP_Seek ){.     
2b7c0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
2b7d0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 70  >=0 && pOp->p3<p
2b7e0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 20  ->nCursor );.   
2b7f0 20 20 20 70 54 61 62 43 75 72 20 3d 20 70 2d 3e     pTabCur = p->
2b800 61 70 43 73 72 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  apCsr[pOp->p3];.
2b810 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 54        assert( pT
2b820 61 62 43 75 72 21 3d 30 20 29 3b 0a 20 20 20 20  abCur!=0 );.    
2b830 20 20 61 73 73 65 72 74 28 20 70 54 61 62 43 75    assert( pTabCu
2b840 72 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  r->eCurType==CUR
2b850 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
2b860 20 20 20 20 61 73 73 65 72 74 28 20 70 54 61 62      assert( pTab
2b870 43 75 72 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21  Cur->uc.pCursor!
2b880 3d 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  =0 );.      asse
2b890 72 74 28 20 70 54 61 62 43 75 72 2d 3e 69 73 54  rt( pTabCur->isT
2b8a0 61 62 6c 65 20 29 3b 0a 20 20 20 20 20 20 70 54  able );.      pT
2b8b0 61 62 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  abCur->nullRow =
2b8c0 20 30 3b 0a 20 20 20 20 20 20 70 54 61 62 43 75   0;.      pTabCu
2b8d0 72 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20  r->movetoTarget 
2b8e0 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 20 20 70  = rowid;.      p
2b8f0 54 61 62 43 75 72 2d 3e 64 65 66 65 72 72 65 64  TabCur->deferred
2b900 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a 20 20 20 20  Moveto = 1;.    
2b910 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2b920 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52 52  4type==P4_INTARR
2b930 41 59 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 61 69  AY || pOp->p4.ai
2b940 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 70 54 61  ==0 );.      pTa
2b950 62 43 75 72 2d 3e 61 41 6c 74 4d 61 70 20 3d 20  bCur->aAltMap = 
2b960 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20 20 20 20  pOp->p4.ai;.    
2b970 20 20 70 54 61 62 43 75 72 2d 3e 70 41 6c 74 43    pTabCur->pAltC
2b980 75 72 73 6f 72 20 3d 20 70 43 3b 0a 20 20 20 20  ursor = pC;.    
2b990 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 4f 75  }else{.      pOu
2b9a0 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
2b9b0 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 20 20  se(p, pOp);.    
2b9c0 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 6f    pOut->u.i = ro
2b9d0 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  wid;.    }.  }el
2b9e0 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
2b9f0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
2ba00 49 64 78 52 6f 77 69 64 20 29 3b 0a 20 20 20 20  IdxRowid );.    
2ba10 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
2ba20 74 4e 75 6c 6c 28 26 61 4d 65 6d 5b 70 4f 70 2d  tNull(&aMem[pOp-
2ba30 3e 70 32 5d 29 3b 0a 20 20 7d 0a 20 20 62 72 65  >p2]);.  }.  bre
2ba40 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2ba50 3a 20 49 64 78 47 45 20 50 31 20 50 32 20 50 33  : IdxGE P1 P2 P3
2ba60 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
2ba70 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
2ba80 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65  .**.** The P4 re
2ba90 67 69 73 74 65 72 20 76 61 6c 75 65 73 20 62 65  gister values be
2baa0 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20  ginning with P3 
2bab0 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64  form an unpacked
2bac0 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74   index .** key t
2bad0 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52  hat omits the PR
2bae0 49 4d 41 52 59 20 4b 45 59 2e 20 20 43 6f 6d 70  IMARY KEY.  Comp
2baf0 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c  are this key val
2bb00 75 65 20 61 67 61 69 6e 73 74 20 74 68 65 20 69  ue against the i
2bb10 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31  ndex .** that P1
2bb20 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f   is currently po
2bb30 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72  inting to, ignor
2bb40 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59 20  ing the PRIMARY 
2bb50 4b 45 59 20 6f 72 20 52 4f 57 49 44 20 0a 2a 2a  KEY or ROWID .**
2bb60 20 66 69 65 6c 64 73 20 61 74 20 74 68 65 20 65   fields at the e
2bb70 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  nd..**.** If the
2bb80 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20   P1 index entry 
2bb90 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
2bba0 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
2bbb0 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65  key value.** the
2bbc0 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f  n jump to P2.  O
2bbd0 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68  therwise fall th
2bbe0 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
2bbf0 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
2bc00 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  /./* Opcode: Idx
2bc10 47 54 20 50 31 20 50 32 20 50 33 20 50 34 20 50  GT P1 P2 P3 P4 P
2bc20 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  5.** Synopsis: k
2bc30 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
2bc40 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65  * The P4 registe
2bc50 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69  r values beginni
2bc60 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20  ng with P3 form 
2bc70 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
2bc80 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f  x .** key that o
2bc90 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41 52 59  mits the PRIMARY
2bca0 20 4b 45 59 2e 20 20 43 6f 6d 70 61 72 65 20 74   KEY.  Compare t
2bcb0 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67  his key value ag
2bcc0 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78 20  ainst the index 
2bcd0 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20 63  .** that P1 is c
2bce0 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e  urrently pointin
2bcf0 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74  g to, ignoring t
2bd00 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f  he PRIMARY KEY o
2bd10 72 20 52 4f 57 49 44 20 0a 2a 2a 20 66 69 65 6c  r ROWID .** fiel
2bd20 64 73 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a  ds at the end..*
2bd30 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69  *.** If the P1 i
2bd40 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 67 72  ndex entry is gr
2bd50 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 6b  eater than the k
2bd60 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e  ey value.** then
2bd70 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74   jump to P2.  Ot
2bd80 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72  herwise fall thr
2bd90 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
2bda0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
2bdb0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c  ./* Opcode: IdxL
2bdc0 54 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  T P1 P2 P3 P4 P5
2bdd0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
2bde0 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
2bdf0 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72   The P4 register
2be00 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e   values beginnin
2be10 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61  g with P3 form a
2be20 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
2be30 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d   .** key that om
2be40 69 74 73 20 74 68 65 20 50 52 49 4d 41 52 59 20  its the PRIMARY 
2be50 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e 20 20 43  KEY or ROWID.  C
2be60 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20  ompare this key 
2be70 76 61 6c 75 65 20 61 67 61 69 6e 73 74 0a 2a 2a  value against.**
2be80 20 74 68 65 20 69 6e 64 65 78 20 74 68 61 74 20   the index that 
2be90 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  P1 is currently 
2bea0 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e  pointing to, ign
2beb0 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52  oring the PRIMAR
2bec0 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f 57 49  Y KEY or.** ROWI
2bed0 44 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65  D on the P1 inde
2bee0 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  x..**.** If the 
2bef0 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69  P1 index entry i
2bf00 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20  s less than the 
2bf10 6b 65 79 20 76 61 6c 75 65 20 74 68 65 6e 20 6a  key value then j
2bf20 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 20 4f 74  ump to P2..** Ot
2bf30 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72  herwise fall thr
2bf40 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
2bf50 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
2bf60 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c  ./* Opcode: IdxL
2bf70 45 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  E P1 P2 P3 P4 P5
2bf80 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
2bf90 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
2bfa0 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72   The P4 register
2bfb0 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e   values beginnin
2bfc0 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61  g with P3 form a
2bfd0 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
2bfe0 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d   .** key that om
2bff0 69 74 73 20 74 68 65 20 50 52 49 4d 41 52 59 20  its the PRIMARY 
2c000 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e 20 20 43  KEY or ROWID.  C
2c010 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20  ompare this key 
2c020 76 61 6c 75 65 20 61 67 61 69 6e 73 74 0a 2a 2a  value against.**
2c030 20 74 68 65 20 69 6e 64 65 78 20 74 68 61 74 20   the index that 
2c040 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  P1 is currently 
2c050 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e  pointing to, ign
2c060 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52  oring the PRIMAR
2c070 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f 57 49  Y KEY or.** ROWI
2c080 44 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65  D on the P1 inde
2c090 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  x..**.** If the 
2c0a0 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69  P1 index entry i
2c0b0 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65  s less than or e
2c0c0 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20  qual to the key 
2c0d0 76 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70 0a  value then jump.
2c0e0 2a 2a 20 74 6f 20 50 32 2e 20 4f 74 68 65 72 77  ** to P2. Otherw
2c0f0 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ise fall through
2c100 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
2c110 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  truction..*/.cas
2c120 65 20 4f 50 5f 49 64 78 4c 45 3a 20 20 20 20 20  e OP_IdxLE:     
2c130 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
2c140 63 61 73 65 20 4f 50 5f 49 64 78 47 54 3a 20 20  case OP_IdxGT:  
2c150 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
2c160 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c 54  */.case OP_IdxLT
2c170 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  :          /* ju
2c180 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64  mp */.case OP_Id
2c190 78 47 45 3a 20 20 7b 20 20 20 20 20 20 20 2f 2a  xGE:  {       /*
2c1a0 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43   jump */.  VdbeC
2c1b0 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74  ursor *pC;.  int
2c1c0 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64   res;.  Unpacked
2c1d0 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73  Record r;..  ass
2c1e0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
2c1f0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
2c200 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
2c210 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
2c220 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
2c230 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
2c240 70 43 2d 3e 69 73 4f 72 64 65 72 65 64 20 29 3b  pC->isOrdered );
2c250 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65  .  assert( pC->e
2c260 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
2c270 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65  _BTREE );.  asse
2c280 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  rt( pC->uc.pCurs
2c290 6f 72 21 3d 30 29 3b 0a 20 20 61 73 73 65 72 74  or!=0);.  assert
2c2a0 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
2c2b0 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73  veto==0 );.  ass
2c2c0 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20  ert( pOp->p5==0 
2c2d0 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b  || pOp->p5==1 );
2c2e0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2c2f0 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
2c300 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49 6e 66 6f   );.  r.pKeyInfo
2c310 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b   = pC->pKeyInfo;
2c320 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75  .  r.nField = (u
2c330 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20  16)pOp->p4.i;.  
2c340 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3c  if( pOp->opcode<
2c350 4f 50 5f 49 64 78 4c 54 20 29 7b 0a 20 20 20 20  OP_IdxLT ){.    
2c360 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
2c370 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c 7c  ode==OP_IdxLE ||
2c380 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
2c390 5f 49 64 78 47 54 20 29 3b 0a 20 20 20 20 72 2e  _IdxGT );.    r.
2c3a0 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2d 31 3b  default_rc = -1;
2c3b0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
2c3c0 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
2c3d0 65 3d 3d 4f 50 5f 49 64 78 47 45 20 7c 7c 20 70  e==OP_IdxGE || p
2c3e0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
2c3f0 64 78 4c 54 20 29 3b 0a 20 20 20 20 72 2e 64 65  dxLT );.    r.de
2c400 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20  fault_rc = 0;.  
2c410 7d 0a 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d  }.  r.aMem = &aM
2c420 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66  em[pOp->p3];.#if
2c430 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
2c440 0a 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28  .  { int i; for(
2c450 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b  i=0; i<r.nField;
2c460 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65   i++) assert( me
2c470 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d  mIsValid(&r.aMem
2c480 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66  [i]) ); }.#endif
2c490 0a 20 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a 20  .  res = 0;  /* 
2c4a0 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c  Not needed.  Onl
2c4b0 79 20 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63  y used to silenc
2c4c0 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a  e a warning. */.
2c4d0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
2c4e0 62 65 49 64 78 4b 65 79 43 6f 6d 70 61 72 65 28  beIdxKeyCompare(
2c4f0 64 62 2c 20 70 43 2c 20 26 72 2c 20 26 72 65 73  db, pC, &r, &res
2c500 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 4f 50  );.  assert( (OP
2c510 5f 49 64 78 4c 45 26 31 29 3d 3d 28 4f 50 5f 49  _IdxLE&1)==(OP_I
2c520 64 78 4c 54 26 31 29 20 26 26 20 28 4f 50 5f 49  dxLT&1) && (OP_I
2c530 64 78 47 45 26 31 29 3d 3d 28 4f 50 5f 49 64 78  dxGE&1)==(OP_Idx
2c540 47 54 26 31 29 20 29 3b 0a 20 20 69 66 28 20 28  GT&1) );.  if( (
2c550 70 4f 70 2d 3e 6f 70 63 6f 64 65 26 31 29 3d 3d  pOp->opcode&1)==
2c560 28 4f 50 5f 49 64 78 4c 54 26 31 29 20 29 7b 0a  (OP_IdxLT&1) ){.
2c570 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
2c580 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c  >opcode==OP_IdxL
2c590 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  E || pOp->opcode
2c5a0 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 3b 0a 20 20  ==OP_IdxLT );.  
2c5b0 20 20 72 65 73 20 3d 20 2d 72 65 73 3b 0a 20 20    res = -res;.  
2c5c0 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
2c5d0 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
2c5e0 4f 50 5f 49 64 78 47 45 20 7c 7c 20 70 4f 70 2d  OP_IdxGE || pOp-
2c5f0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47  >opcode==OP_IdxG
2c600 54 20 29 3b 0a 20 20 20 20 72 65 73 2b 2b 3b 0a  T );.    res++;.
2c610 20 20 7d 0a 20 20 56 64 62 65 42 72 61 6e 63 68    }.  VdbeBranch
2c620 54 61 6b 65 6e 28 72 65 73 3e 30 2c 32 29 3b 0a  Taken(res>0,2);.
2c630 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
2c640 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2c650 6f 72 3b 0a 20 20 69 66 28 20 72 65 73 3e 30 20  or;.  if( res>0 
2c660 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
2c670 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  2;.  break;.}../
2c680 2a 20 4f 70 63 6f 64 65 3a 20 44 65 73 74 72 6f  * Opcode: Destro
2c690 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  y P1 P2 P3 * *.*
2c6a0 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6e 20 65  *.** Delete an e
2c6b0 6e 74 69 72 65 20 64 61 74 61 62 61 73 65 20 74  ntire database t
2c6c0 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68  able or index wh
2c6d0 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69 6e  ose root page in
2c6e0 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a   the database.**
2c6f0 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62   file is given b
2c700 79 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  y P1..**.** The 
2c710 74 61 62 6c 65 20 62 65 69 6e 67 20 64 65 73 74  table being dest
2c720 72 6f 79 65 64 20 69 73 20 69 6e 20 74 68 65 20  royed is in the 
2c730 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
2c740 6c 65 20 69 66 20 50 33 3d 3d 30 2e 20 20 49 66  le if P3==0.  If
2c750 0a 2a 2a 20 50 33 3d 3d 31 20 74 68 65 6e 20 74  .** P3==1 then t
2c760 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63  he table to be c
2c770 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 61  lear is in the a
2c780 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
2c790 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69  e file.** that i
2c7a0 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  s used to store 
2c7b0 74 61 62 6c 65 73 20 63 72 65 61 74 65 20 75 73  tables create us
2c7c0 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f  ing CREATE TEMPO
2c7d0 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a  RARY TABLE..**.*
2c7e0 2a 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20  * If AUTOVACUUM 
2c7f0 69 73 20 65 6e 61 62 6c 65 64 20 74 68 65 6e 20  is enabled then 
2c800 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74  it is possible t
2c810 68 61 74 20 61 6e 6f 74 68 65 72 20 72 6f 6f 74  hat another root
2c820 20 70 61 67 65 0a 2a 2a 20 6d 69 67 68 74 20 62   page.** might b
2c830 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65  e moved into the
2c840 20 6e 65 77 6c 79 20 64 65 6c 65 74 65 64 20 72   newly deleted r
2c850 6f 6f 74 20 70 61 67 65 20 69 6e 20 6f 72 64 65  oot page in orde
2c860 72 20 74 6f 20 6b 65 65 70 20 61 6c 6c 0a 2a 2a  r to keep all.**
2c870 20 72 6f 6f 74 20 70 61 67 65 73 20 63 6f 6e 74   root pages cont
2c880 69 67 75 6f 75 73 20 61 74 20 74 68 65 20 62 65  iguous at the be
2c890 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 64  ginning of the d
2c8a0 61 74 61 62 61 73 65 2e 20 20 54 68 65 20 66 6f  atabase.  The fo
2c8b0 72 6d 65 72 0a 2a 2a 20 76 61 6c 75 65 20 6f 66  rmer.** value of
2c8c0 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 74   the root page t
2c8d0 68 61 74 20 6d 6f 76 65 64 20 2d 20 69 74 73 20  hat moved - its 
2c8e0 76 61 6c 75 65 20 62 65 66 6f 72 65 20 74 68 65  value before the
2c8f0 20 6d 6f 76 65 20 6f 63 63 75 72 72 65 64 20 2d   move occurred -
2c900 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64 20 69 6e  .** is stored in
2c910 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49   register P2.  I
2c920 66 20 6e 6f 20 70 61 67 65 20 0a 2a 2a 20 6d 6f  f no page .** mo
2c930 76 65 6d 65 6e 74 20 77 61 73 20 72 65 71 75 69  vement was requi
2c940 72 65 64 20 28 62 65 63 61 75 73 65 20 74 68 65  red (because the
2c950 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64 72 6f   table being dro
2c960 70 70 65 64 20 77 61 73 20 61 6c 72 65 61 64 79  pped was already
2c970 20 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 6f 6e   .** the last on
2c980 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  e in the databas
2c990 65 29 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 69  e) then a zero i
2c9a0 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
2c9b0 73 74 65 72 20 50 32 2e 0a 2a 2a 20 49 66 20 41  ster P2..** If A
2c9c0 55 54 4f 56 41 43 55 55 4d 20 69 73 20 64 69 73  UTOVACUUM is dis
2c9d0 61 62 6c 65 64 20 74 68 65 6e 20 61 20 7a 65 72  abled then a zer
2c9e0 6f 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  o is stored in r
2c9f0 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
2ca00 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43 6c 65 61  * See also: Clea
2ca10 72 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 73  r.*/.case OP_Des
2ca20 74 72 6f 79 3a 20 7b 20 20 20 20 20 2f 2a 20 6f  troy: {     /* o
2ca30 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 6f  ut2 */.  int iMo
2ca40 76 65 64 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a  ved;.  int iDb;.
2ca50 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65  .  assert( p->re
2ca60 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61  adOnly==0 );.  a
2ca70 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 31  ssert( pOp->p1>1
2ca80 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74   );.  pOut = out
2ca90 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
2caa0 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  Op);.  pOut->fla
2cab0 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  gs = MEM_Null;. 
2cac0 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 52 65   if( db->nVdbeRe
2cad0 61 64 20 3e 20 64 62 2d 3e 6e 56 44 65 73 74 72  ad > db->nVDestr
2cae0 6f 79 2b 31 20 29 7b 0a 20 20 20 20 72 63 20 3d  oy+1 ){.    rc =
2caf0 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a   SQLITE_LOCKED;.
2cb00 20 20 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69      p->errorActi
2cb10 6f 6e 20 3d 20 4f 45 5f 41 62 6f 72 74 3b 0a 20  on = OE_Abort;. 
2cb20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
2cb30 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 65  e_to_error;.  }e
2cb40 6c 73 65 7b 0a 20 20 20 20 69 44 62 20 3d 20 70  lse{.    iDb = p
2cb50 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 61 73 73 65  Op->p3;.    asse
2cb60 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70  rt( DbMaskTest(p
2cb70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 44 62  ->btreeMask, iDb
2cb80 29 20 29 3b 0a 20 20 20 20 69 4d 6f 76 65 64 20  ) );.    iMoved 
2cb90 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65  = 0;  /* Not nee
2cba0 64 65 64 2e 20 20 4f 6e 6c 79 20 74 6f 20 73 69  ded.  Only to si
2cbb0 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e  lence a warning.
2cbc0 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   */.    rc = sql
2cbd0 69 74 65 33 42 74 72 65 65 44 72 6f 70 54 61 62  ite3BtreeDropTab
2cbe0 6c 65 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e  le(db->aDb[iDb].
2cbf0 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 26 69  pBt, pOp->p1, &i
2cc00 4d 6f 76 65 64 29 3b 0a 20 20 20 20 70 4f 75 74  Moved);.    pOut
2cc10 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
2cc20 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  t;.    pOut->u.i
2cc30 20 3d 20 69 4d 6f 76 65 64 3b 0a 20 20 20 20 69   = iMoved;.    i
2cc40 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
2cc50 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
2cc60 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2cc70 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a  OMIT_AUTOVACUUM.
2cc80 20 20 20 20 69 66 28 20 69 4d 6f 76 65 64 21 3d      if( iMoved!=
2cc90 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 ){.      sqlit
2cca0 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28  e3RootPageMoved(
2ccb0 64 62 2c 20 69 44 62 2c 20 69 4d 6f 76 65 64 2c  db, iDb, iMoved,
2ccc0 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 20   pOp->p1);.     
2ccd0 20 2f 2a 20 41 6c 6c 20 4f 50 5f 44 65 73 74 72   /* All OP_Destr
2cce0 6f 79 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f 63  oy operations oc
2ccf0 63 75 72 20 6f 6e 20 74 68 65 20 73 61 6d 65 20  cur on the same 
2cd00 62 74 72 65 65 20 2a 2f 0a 20 20 20 20 20 20 61  btree */.      a
2cd10 73 73 65 72 74 28 20 72 65 73 65 74 53 63 68 65  ssert( resetSche
2cd20 6d 61 4f 6e 46 61 75 6c 74 3d 3d 30 20 7c 7c 20  maOnFault==0 || 
2cd30 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75  resetSchemaOnFau
2cd40 6c 74 3d 3d 69 44 62 2b 31 20 29 3b 0a 20 20 20  lt==iDb+1 );.   
2cd50 20 20 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e     resetSchemaOn
2cd60 46 61 75 6c 74 20 3d 20 69 44 62 2b 31 3b 0a 20  Fault = iDb+1;. 
2cd70 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a     }.#endif.  }.
2cd80 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2cd90 70 63 6f 64 65 3a 20 43 6c 65 61 72 20 50 31 20  pcode: Clear P1 
2cda0 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20 44 65 6c 65  P2 P3.**.** Dele
2cdb0 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20  te all contents 
2cdc0 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
2cdd0 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77  table or index w
2cde0 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 0a 2a  hose root page.*
2cdf0 2a 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  * in the databas
2ce00 65 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20  e file is given 
2ce10 62 79 20 50 31 2e 20 20 42 75 74 2c 20 75 6e 6c  by P1.  But, unl
2ce20 69 6b 65 20 44 65 73 74 72 6f 79 2c 20 64 6f 20  ike Destroy, do 
2ce30 6e 6f 74 0a 2a 2a 20 72 65 6d 6f 76 65 20 74 68  not.** remove th
2ce40 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
2ce50 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61   from the databa
2ce60 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54  se file..**.** T
2ce70 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63  he table being c
2ce80 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 6d  lear is in the m
2ce90 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
2cea0 65 20 69 66 20 50 32 3d 3d 30 2e 20 20 49 66 0a  e if P2==0.  If.
2ceb0 2a 2a 20 50 32 3d 3d 31 20 74 68 65 6e 20 74 68  ** P2==1 then th
2cec0 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c  e table to be cl
2ced0 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 61 75  ear is in the au
2cee0 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
2cef0 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73   file.** that is
2cf00 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
2cf10 61 62 6c 65 73 20 63 72 65 61 74 65 20 75 73 69  ables create usi
2cf20 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52  ng CREATE TEMPOR
2cf30 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a  ARY TABLE..**.**
2cf40 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65   If the P3 value
2cf50 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
2cf60 65 6e 20 74 68 65 20 74 61 62 6c 65 20 72 65 66  en the table ref
2cf70 65 72 72 65 64 20 74 6f 20 6d 75 73 74 20 62 65  erred to must be
2cf80 20 61 6e 0a 2a 2a 20 69 6e 74 6b 65 79 20 74 61   an.** intkey ta
2cf90 62 6c 65 20 28 61 6e 20 53 51 4c 20 74 61 62 6c  ble (an SQL tabl
2cfa0 65 2c 20 6e 6f 74 20 61 6e 20 69 6e 64 65 78 29  e, not an index)
2cfb0 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 74  . In this case t
2cfc0 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20 0a 2a  he row change .*
2cfd0 2a 20 63 6f 75 6e 74 20 69 73 20 69 6e 63 72 65  * count is incre
2cfe0 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75  mented by the nu
2cff0 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20  mber of rows in 
2d000 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  the table being 
2d010 63 6c 65 61 72 65 64 2e 20 0a 2a 2a 20 49 66 20  cleared. .** If 
2d020 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68  P3 is greater th
2d030 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68  an zero, then th
2d040 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20 69  e value stored i
2d050 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  n register P3 is
2d060 0a 2a 2a 20 61 6c 73 6f 20 69 6e 63 72 65 6d 65  .** also increme
2d070 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62  nted by the numb
2d080 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68  er of rows in th
2d090 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c  e table being cl
2d0a0 65 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  eared..**.** See
2d0b0 20 61 6c 73 6f 3a 20 44 65 73 74 72 6f 79 0a 2a   also: Destroy.*
2d0c0 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 65 61 72 3a  /.case OP_Clear:
2d0d0 20 7b 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65   {.  int nChange
2d0e0 3b 0a 20 0a 20 20 6e 43 68 61 6e 67 65 20 3d 20  ;. .  nChange = 
2d0f0 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  0;.  assert( p->
2d100 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20  readOnly==0 );. 
2d110 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
2d120 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
2d130 2c 20 70 4f 70 2d 3e 70 32 29 20 29 3b 0a 20 20  , pOp->p2) );.  
2d140 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
2d150 65 43 6c 65 61 72 54 61 62 6c 65 28 0a 20 20 20  eClearTable(.   
2d160 20 20 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e     db->aDb[pOp->
2d170 70 32 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31  p2].pBt, pOp->p1
2d180 2c 20 28 70 4f 70 2d 3e 70 33 20 3f 20 26 6e 43  , (pOp->p3 ? &nC
2d190 68 61 6e 67 65 20 3a 20 30 29 0a 20 20 29 3b 0a  hange : 0).  );.
2d1a0 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b    if( pOp->p3 ){
2d1b0 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20  .    p->nChange 
2d1c0 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20  += nChange;.    
2d1d0 69 66 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 7b  if( pOp->p3>0 ){
2d1e0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d  .      assert( m
2d1f0 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b  emIsValid(&aMem[
2d200 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20  pOp->p3]) );.   
2d210 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
2d220 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70  nge(p, &aMem[pOp
2d230 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 61 4d  ->p3]);.      aM
2d240 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20  em[pOp->p3].u.i 
2d250 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20  += nChange;.    
2d260 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29  }.  }.  if( rc )
2d270 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
2d280 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61  to_error;.  brea
2d290 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2d2a0 20 52 65 73 65 74 53 6f 72 74 65 72 20 50 31 20   ResetSorter P1 
2d2b0 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65  * * * *.**.** De
2d2c0 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74  lete all content
2d2d0 73 20 66 72 6f 6d 20 74 68 65 20 65 70 68 65 6d  s from the ephem
2d2e0 65 72 61 6c 20 74 61 62 6c 65 20 6f 72 20 73 6f  eral table or so
2d2f0 72 74 65 72 0a 2a 2a 20 74 68 61 74 20 69 73 20  rter.** that is 
2d300 6f 70 65 6e 20 6f 6e 20 63 75 72 73 6f 72 20 50  open on cursor P
2d310 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  1..**.** This op
2d320 63 6f 64 65 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  code only works 
2d330 66 6f 72 20 63 75 72 73 6f 72 73 20 75 73 65 64  for cursors used
2d340 20 66 6f 72 20 73 6f 72 74 69 6e 67 20 61 6e 64   for sorting and
2d350 0a 2a 2a 20 6f 70 65 6e 65 64 20 77 69 74 68 20  .** opened with 
2d360 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  OP_OpenEphemeral
2d370 20 6f 72 20 4f 50 5f 53 6f 72 74 65 72 4f 70 65   or OP_SorterOpe
2d380 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  n..*/.case OP_Re
2d390 73 65 74 53 6f 72 74 65 72 3a 20 7b 0a 20 20 56  setSorter: {.  V
2d3a0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
2d3b0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2d3c0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
2d3d0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
2d3e0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
2d3f0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
2d400 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66  t( pC!=0 );.  if
2d410 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29  ( isSorter(pC) )
2d420 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
2d430 65 53 6f 72 74 65 72 52 65 73 65 74 28 64 62 2c  eSorterReset(db,
2d440 20 70 43 2d 3e 75 63 2e 70 53 6f 72 74 65 72 29   pC->uc.pSorter)
2d450 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
2d460 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
2d470 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
2d480 45 45 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  EE );.    assert
2d490 28 20 70 43 2d 3e 69 73 45 70 68 65 6d 65 72 61  ( pC->isEphemera
2d4a0 6c 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  l );.    rc = sq
2d4b0 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61 72 54  lite3BtreeClearT
2d4c0 61 62 6c 65 4f 66 43 75 72 73 6f 72 28 70 43 2d  ableOfCursor(pC-
2d4d0 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20  >uc.pCursor);.  
2d4e0 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
2d4f0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2d500 6f 72 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  or;.  }.  break;
2d510 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
2d520 72 65 61 74 65 54 61 62 6c 65 20 50 31 20 50 32  reateTable P1 P2
2d530 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
2d540 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 6f 74 20 69  is: r[P2]=root i
2d550 44 62 3d 50 31 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f  Db=P1.**.** Allo
2d560 63 61 74 65 20 61 20 6e 65 77 20 74 61 62 6c 65  cate a new table
2d570 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74   in the main dat
2d580 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31  abase file if P1
2d590 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a  ==0 or in the.**
2d5a0 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62   auxiliary datab
2d5b0 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d  ase file if P1==
2d5c0 31 20 6f 72 20 69 6e 20 61 6e 20 61 74 74 61 63  1 or in an attac
2d5d0 68 65 64 20 64 61 74 61 62 61 73 65 20 69 66 0a  hed database if.
2d5e0 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69 74 65 20  ** P1>1.  Write 
2d5f0 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75  the root page nu
2d600 6d 62 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20  mber of the new 
2d610 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65  table into.** re
2d620 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20  gister P2.**.** 
2d630 54 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 62  The difference b
2d640 65 74 77 65 65 6e 20 61 20 74 61 62 6c 65 20 61  etween a table a
2d650 6e 64 20 61 6e 20 69 6e 64 65 78 20 69 73 20 74  nd an index is t
2d660 68 69 73 3a 20 20 41 20 74 61 62 6c 65 20 6d 75  his:  A table mu
2d670 73 74 0a 2a 2a 20 68 61 76 65 20 61 20 34 2d 62  st.** have a 4-b
2d680 79 74 65 20 69 6e 74 65 67 65 72 20 6b 65 79 20  yte integer key 
2d690 61 6e 64 20 63 61 6e 20 68 61 76 65 20 61 72 62  and can have arb
2d6a0 69 74 72 61 72 79 20 64 61 74 61 2e 20 20 41 6e  itrary data.  An
2d6b0 20 69 6e 64 65 78 0a 2a 2a 20 68 61 73 20 61 6e   index.** has an
2d6c0 20 61 72 62 69 74 72 61 72 79 20 6b 65 79 20 62   arbitrary key b
2d6d0 75 74 20 6e 6f 20 64 61 74 61 2e 0a 2a 2a 0a 2a  ut no data..**.*
2d6e0 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43 72 65 61  * See also: Crea
2d6f0 74 65 49 6e 64 65 78 0a 2a 2f 0a 2f 2a 20 4f 70  teIndex.*/./* Op
2d700 63 6f 64 65 3a 20 43 72 65 61 74 65 49 6e 64 65  code: CreateInde
2d710 78 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  x P1 P2 * * *.**
2d720 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
2d730 3d 72 6f 6f 74 20 69 44 62 3d 50 31 0a 2a 2a 0a  =root iDb=P1.**.
2d740 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65  ** Allocate a ne
2d750 77 20 69 6e 64 65 78 20 69 6e 20 74 68 65 20 6d  w index in the m
2d760 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
2d770 65 20 69 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e  e if P1==0 or in
2d780 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72   the.** auxiliar
2d790 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  y database file 
2d7a0 69 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61  if P1==1 or in a
2d7b0 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  n attached datab
2d7c0 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20  ase if.** P1>1. 
2d7d0 20 57 72 69 74 65 20 74 68 65 20 72 6f 6f 74 20   Write the root 
2d7e0 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74  page number of t
2d7f0 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 74  he new table int
2d800 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32  o.** register P2
2d810 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 64 6f 63 75  ..**.** See docu
2d820 6d 65 6e 74 61 74 69 6f 6e 20 6f 6e 20 4f 50 5f  mentation on OP_
2d830 43 72 65 61 74 65 54 61 62 6c 65 20 66 6f 72 20  CreateTable for 
2d840 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
2d850 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  mation..*/.case 
2d860 4f 50 5f 43 72 65 61 74 65 49 6e 64 65 78 3a 20  OP_CreateIndex: 
2d870 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
2d880 74 32 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72  t2 */.case OP_Cr
2d890 65 61 74 65 54 61 62 6c 65 3a 20 7b 20 20 20 20  eateTable: {    
2d8a0 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
2d8b0 0a 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 69  .  int pgno;.  i
2d8c0 6e 74 20 66 6c 61 67 73 3b 0a 20 20 44 62 20 2a  nt flags;.  Db *
2d8d0 70 44 62 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 6f  pDb;..  pOut = o
2d8e0 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
2d8f0 20 70 4f 70 29 3b 0a 20 20 70 67 6e 6f 20 3d 20   pOp);.  pgno = 
2d900 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  0;.  assert( pOp
2d910 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
2d920 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
2d930 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65  assert( DbMaskTe
2d940 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c  st(p->btreeMask,
2d950 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61   pOp->p1) );.  a
2d960 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
2d970 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d  ly==0 );.  pDb =
2d980 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70   &db->aDb[pOp->p
2d990 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44  1];.  assert( pD
2d9a0 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20 69  b->pBt!=0 );.  i
2d9b0 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
2d9c0 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20 29  OP_CreateTable )
2d9d0 7b 0a 20 20 20 20 2f 2a 20 66 6c 61 67 73 20 3d  {.    /* flags =
2d9e0 20 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b 20 2a   BTREE_INTKEY; *
2d9f0 2f 0a 20 20 20 20 66 6c 61 67 73 20 3d 20 42 54  /.    flags = BT
2da00 52 45 45 5f 49 4e 54 4b 45 59 3b 0a 20 20 7d 65  REE_INTKEY;.  }e
2da10 6c 73 65 7b 0a 20 20 20 20 66 6c 61 67 73 20 3d  lse{.    flags =
2da20 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 3b 0a   BTREE_BLOBKEY;.
2da30 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74    }.  rc = sqlit
2da40 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61 62  e3BtreeCreateTab
2da50 6c 65 28 70 44 62 2d 3e 70 42 74 2c 20 26 70 67  le(pDb->pBt, &pg
2da60 6e 6f 2c 20 66 6c 61 67 73 29 3b 0a 20 20 69 66  no, flags);.  if
2da70 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
2da80 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
2da90 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 67    pOut->u.i = pg
2daa0 6e 6f 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  no;.  break;.}..
2dab0 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 73 65  /* Opcode: Parse
2dac0 53 63 68 65 6d 61 20 50 31 20 2a 20 2a 20 50 34  Schema P1 * * P4
2dad0 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 61 6e   *.**.** Read an
2dae0 64 20 70 61 72 73 65 20 61 6c 6c 20 65 6e 74 72  d parse all entr
2daf0 69 65 73 20 66 72 6f 6d 20 74 68 65 20 53 51 4c  ies from the SQL
2db00 49 54 45 5f 4d 41 53 54 45 52 20 74 61 62 6c 65  ITE_MASTER table
2db10 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 0a   of database P1.
2db20 2a 2a 20 74 68 61 74 20 6d 61 74 63 68 20 74 68  ** that match th
2db30 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 50  e WHERE clause P
2db40 34 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  4. .**.** This o
2db50 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68  pcode invokes th
2db60 65 20 70 61 72 73 65 72 20 74 6f 20 63 72 65 61  e parser to crea
2db70 74 65 20 61 20 6e 65 77 20 76 69 72 74 75 61 6c  te a new virtual
2db80 20 6d 61 63 68 69 6e 65 2c 0a 2a 2a 20 74 68 65   machine,.** the
2db90 6e 20 72 75 6e 73 20 74 68 65 20 6e 65 77 20 76  n runs the new v
2dba0 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20  irtual machine. 
2dbb0 20 49 74 20 69 73 20 74 68 75 73 20 61 20 72 65   It is thus a re
2dbc0 2d 65 6e 74 72 61 6e 74 20 6f 70 63 6f 64 65 2e  -entrant opcode.
2dbd0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 73  .*/.case OP_Pars
2dbe0 65 53 63 68 65 6d 61 3a 20 7b 0a 20 20 69 6e 74  eSchema: {.  int
2dbf0 20 69 44 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68   iDb;.  const ch
2dc00 61 72 20 2a 7a 4d 61 73 74 65 72 3b 0a 20 20 63  ar *zMaster;.  c
2dc10 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 49 6e 69  har *zSql;.  Ini
2dc20 74 44 61 74 61 20 69 6e 69 74 44 61 74 61 3b 0a  tData initData;.
2dc30 0a 20 20 2f 2a 20 41 6e 79 20 70 72 65 70 61 72  .  /* Any prepar
2dc40 65 64 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61  ed statement tha
2dc50 74 20 69 6e 76 6f 6b 65 73 20 74 68 69 73 20 6f  t invokes this o
2dc60 70 63 6f 64 65 20 77 69 6c 6c 20 68 6f 6c 64 20  pcode will hold 
2dc70 6d 75 74 65 78 65 73 0a 20 20 2a 2a 20 6f 6e 20  mutexes.  ** on 
2dc80 65 76 65 72 79 20 62 74 72 65 65 2e 20 20 54 68  every btree.  Th
2dc90 69 73 20 69 73 20 61 20 70 72 65 72 65 71 75 69  is is a prerequi
2dca0 73 69 74 65 20 66 6f 72 20 69 6e 76 6f 6b 69 6e  site for invokin
2dcb0 67 20 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 49  g .  ** sqlite3I
2dcc0 6e 69 74 43 61 6c 6c 62 61 63 6b 28 29 2e 0a 20  nitCallback().. 
2dcd0 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
2dce0 45 5f 44 45 42 55 47 0a 20 20 66 6f 72 28 69 44  E_DEBUG.  for(iD
2dcf0 62 3d 30 3b 20 69 44 62 3c 64 62 2d 3e 6e 44 62  b=0; iDb<db->nDb
2dd00 3b 20 69 44 62 2b 2b 29 7b 0a 20 20 20 20 61 73  ; iDb++){.    as
2dd10 73 65 72 74 28 20 69 44 62 3d 3d 31 20 7c 7c 20  sert( iDb==1 || 
2dd20 73 71 6c 69 74 65 33 42 74 72 65 65 48 6f 6c 64  sqlite3BtreeHold
2dd30 73 4d 75 74 65 78 28 64 62 2d 3e 61 44 62 5b 69  sMutex(db->aDb[i
2dd40 44 62 5d 2e 70 42 74 29 20 29 3b 0a 20 20 7d 0a  Db].pBt) );.  }.
2dd50 23 65 6e 64 69 66 0a 0a 20 20 69 44 62 20 3d 20  #endif..  iDb = 
2dd60 70 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72  pOp->p1;.  asser
2dd70 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62  t( iDb>=0 && iDb
2dd80 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
2dd90 73 65 72 74 28 20 44 62 48 61 73 50 72 6f 70 65  sert( DbHasPrope
2dda0 72 74 79 28 64 62 2c 20 69 44 62 2c 20 44 42 5f  rty(db, iDb, DB_
2ddb0 53 63 68 65 6d 61 4c 6f 61 64 65 64 29 20 29 3b  SchemaLoaded) );
2ddc0 0a 20 20 2f 2a 20 55 73 65 64 20 74 6f 20 62 65  .  /* Used to be
2ddd0 20 61 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 2a   a conditional *
2dde0 2f 20 7b 0a 20 20 20 20 7a 4d 61 73 74 65 72 20  / {.    zMaster 
2ddf0 3d 20 4d 41 53 54 45 52 5f 4e 41 4d 45 3b 0a 20  = MASTER_NAME;. 
2de00 20 20 20 69 6e 69 74 44 61 74 61 2e 64 62 20 3d     initData.db =
2de10 20 64 62 3b 0a 20 20 20 20 69 6e 69 74 44 61 74   db;.    initDat
2de20 61 2e 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b  a.iDb = pOp->p1;
2de30 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e 70 7a  .    initData.pz
2de40 45 72 72 4d 73 67 20 3d 20 26 70 2d 3e 7a 45 72  ErrMsg = &p->zEr
2de50 72 4d 73 67 3b 0a 20 20 20 20 7a 53 71 6c 20 3d  rMsg;.    zSql =
2de60 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28   sqlite3MPrintf(
2de70 64 62 2c 0a 20 20 20 20 20 20 20 22 53 45 4c 45  db,.       "SELE
2de80 43 54 20 6e 61 6d 65 2c 20 72 6f 6f 74 70 61 67  CT name, rootpag
2de90 65 2c 20 73 71 6c 20 46 52 4f 4d 20 27 25 71 27  e, sql FROM '%q'
2dea0 2e 25 73 20 57 48 45 52 45 20 25 73 20 4f 52 44  .%s WHERE %s ORD
2deb0 45 52 20 42 59 20 72 6f 77 69 64 22 2c 0a 20 20  ER BY rowid",.  
2dec0 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 69 44 62       db->aDb[iDb
2ded0 5d 2e 7a 44 62 53 4e 61 6d 65 2c 20 7a 4d 61 73  ].zDbSName, zMas
2dee0 74 65 72 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  ter, pOp->p4.z);
2def0 0a 20 20 20 20 69 66 28 20 7a 53 71 6c 3d 3d 30  .    if( zSql==0
2df00 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53   ){.      rc = S
2df10 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54  QLITE_NOMEM_BKPT
2df20 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
2df30 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 69     assert( db->i
2df40 6e 69 74 2e 62 75 73 79 3d 3d 30 20 29 3b 0a 20  nit.busy==0 );. 
2df50 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75       db->init.bu
2df60 73 79 20 3d 20 31 3b 0a 20 20 20 20 20 20 69 6e  sy = 1;.      in
2df70 69 74 44 61 74 61 2e 72 63 20 3d 20 53 51 4c 49  itData.rc = SQLI
2df80 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 61 73 73  TE_OK;.      ass
2df90 65 72 74 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63  ert( !db->malloc
2dfa0 46 61 69 6c 65 64 20 29 3b 0a 20 20 20 20 20 20  Failed );.      
2dfb0 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65  rc = sqlite3_exe
2dfc0 63 28 64 62 2c 20 7a 53 71 6c 2c 20 73 71 6c 69  c(db, zSql, sqli
2dfd0 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2c  te3InitCallback,
2dfe0 20 26 69 6e 69 74 44 61 74 61 2c 20 30 29 3b 0a   &initData, 0);.
2dff0 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
2e000 4c 49 54 45 5f 4f 4b 20 29 20 72 63 20 3d 20 69  LITE_OK ) rc = i
2e010 6e 69 74 44 61 74 61 2e 72 63 3b 0a 20 20 20 20  nitData.rc;.    
2e020 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
2e030 64 62 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20  db, zSql);.     
2e040 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d   db->init.busy =
2e050 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20   0;.    }.  }.  
2e060 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 73 71  if( rc ){.    sq
2e070 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68  lite3ResetAllSch
2e080 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e  emasOfConnection
2e090 28 64 62 29 3b 0a 20 20 20 20 69 66 28 20 72 63  (db);.    if( rc
2e0a0 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29  ==SQLITE_NOMEM )
2e0b0 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f  {.      goto no_
2e0c0 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67  mem;.    }.    g
2e0d0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
2e0e0 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 62 72  _error;.  }.  br
2e0f0 65 61 6b 3b 20 20 0a 7d 0a 0a 23 69 66 20 21 64  eak;  .}..#if !d
2e100 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
2e110 49 54 5f 41 4e 41 4c 59 5a 45 29 0a 2f 2a 20 4f  IT_ANALYZE)./* O
2e120 70 63 6f 64 65 3a 20 4c 6f 61 64 41 6e 61 6c 79  pcode: LoadAnaly
2e130 73 69 73 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  sis P1 * * * *.*
2e140 2a 0a 2a 2a 20 52 65 61 64 20 74 68 65 20 73 71  *.** Read the sq
2e150 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65  lite_stat1 table
2e160 20 66 6f 72 20 64 61 74 61 62 61 73 65 20 50 31   for database P1
2e170 20 61 6e 64 20 6c 6f 61 64 20 74 68 65 20 63 6f   and load the co
2e180 6e 74 65 6e 74 0a 2a 2a 20 6f 66 20 74 68 61 74  ntent.** of that
2e190 20 74 61 62 6c 65 20 69 6e 74 6f 20 74 68 65 20   table into the 
2e1a0 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78 20 68  internal index h
2e1b0 61 73 68 20 74 61 62 6c 65 2e 20 20 54 68 69 73  ash table.  This
2e1c0 20 77 69 6c 6c 20 63 61 75 73 65 0a 2a 2a 20 74   will cause.** t
2e1d0 68 65 20 61 6e 61 6c 79 73 69 73 20 74 6f 20 62  he analysis to b
2e1e0 65 20 75 73 65 64 20 77 68 65 6e 20 70 72 65 70  e used when prep
2e1f0 61 72 69 6e 67 20 61 6c 6c 20 73 75 62 73 65 71  aring all subseq
2e200 75 65 6e 74 20 71 75 65 72 69 65 73 2e 0a 2a 2f  uent queries..*/
2e210 0a 63 61 73 65 20 4f 50 5f 4c 6f 61 64 41 6e 61  .case OP_LoadAna
2e220 6c 79 73 69 73 3a 20 7b 0a 20 20 61 73 73 65 72  lysis: {.  asser
2e230 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
2e240 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62   pOp->p1<db->nDb
2e250 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
2e260 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 64  e3AnalysisLoad(d
2e270 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 69  b, pOp->p1);.  i
2e280 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
2e290 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
2e2a0 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 23 65  .  break;  .}.#e
2e2b0 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64  ndif /* !defined
2e2c0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41  (SQLITE_OMIT_ANA
2e2d0 4c 59 5a 45 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63  LYZE) */../* Opc
2e2e0 6f 64 65 3a 20 44 72 6f 70 54 61 62 6c 65 20 50  ode: DropTable P
2e2f0 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
2e300 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65   Remove the inte
2e310 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29  rnal (in-memory)
2e320 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73   data structures
2e330 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a   that describe.*
2e340 2a 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65  * the table name
2e350 64 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65  d P4 in database
2e360 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61   P1.  This is ca
2e370 6c 6c 65 64 20 61 66 74 65 72 20 61 20 74 61 62  lled after a tab
2e380 6c 65 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64  le.** is dropped
2e390 20 66 72 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e   from disk (usin
2e3a0 67 20 74 68 65 20 44 65 73 74 72 6f 79 20 6f 70  g the Destroy op
2e3b0 63 6f 64 65 29 20 69 6e 20 6f 72 64 65 72 20 74  code) in order t
2e3c0 6f 20 6b 65 65 70 20 0a 2a 2a 20 74 68 65 20 69  o keep .** the i
2e3d0 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e  nternal represen
2e3e0 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  tation of the.**
2e3f0 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65   schema consiste
2e400 6e 74 20 77 69 74 68 20 77 68 61 74 20 69 73 20  nt with what is 
2e410 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65  on disk..*/.case
2e420 20 4f 50 5f 44 72 6f 70 54 61 62 6c 65 3a 20 7b   OP_DropTable: {
2e430 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  .  sqlite3Unlink
2e440 41 6e 64 44 65 6c 65 74 65 54 61 62 6c 65 28 64  AndDeleteTable(d
2e450 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  b, pOp->p1, pOp-
2e460 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b  >p4.z);.  break;
2e470 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  .}../* Opcode: D
2e480 72 6f 70 49 6e 64 65 78 20 50 31 20 2a 20 2a 20  ropIndex P1 * * 
2e490 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76  P4 *.**.** Remov
2e4a0 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28  e the internal (
2e4b0 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20  in-memory) data 
2e4c0 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74 20  structures that 
2e4d0 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20  describe.** the 
2e4e0 69 6e 64 65 78 20 6e 61 6d 65 64 20 50 34 20 69  index named P4 i
2e4f0 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20  n database P1.  
2e500 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61  This is called a
2e510 66 74 65 72 20 61 6e 20 69 6e 64 65 78 0a 2a 2a  fter an index.**
2e520 20 69 73 20 64 72 6f 70 70 65 64 20 66 72 6f 6d   is dropped from
2e530 20 64 69 73 6b 20 28 75 73 69 6e 67 20 74 68 65   disk (using the
2e540 20 44 65 73 74 72 6f 79 20 6f 70 63 6f 64 65 29   Destroy opcode)
2e550 0a 2a 2a 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  .** in order to 
2e560 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72 6e 61  keep the interna
2e570 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  l representation
2e580 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d   of the.** schem
2e590 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74  a consistent wit
2e5a0 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73  h what is on dis
2e5b0 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72  k..*/.case OP_Dr
2e5c0 6f 70 49 6e 64 65 78 3a 20 7b 0a 20 20 73 71 6c  opIndex: {.  sql
2e5d0 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
2e5e0 65 74 65 49 6e 64 65 78 28 64 62 2c 20 70 4f 70  eteIndex(db, pOp
2e5f0 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  ->p1, pOp->p4.z)
2e600 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
2e610 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 72 69   Opcode: DropTri
2e620 67 67 65 72 20 50 31 20 2a 20 2a 20 50 34 20 2a  gger P1 * * P4 *
2e630 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68  .**.** Remove th
2e640 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d  e internal (in-m
2e650 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75  emory) data stru
2e660 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63  ctures that desc
2e670 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 72 69 67  ribe.** the trig
2e680 67 65 72 20 6e 61 6d 65 64 20 50 34 20 69 6e 20  ger named P4 in 
2e690 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68  database P1.  Th
2e6a0 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74  is is called aft
2e6b0 65 72 20 61 20 74 72 69 67 67 65 72 0a 2a 2a 20  er a trigger.** 
2e6c0 69 73 20 64 72 6f 70 70 65 64 20 66 72 6f 6d 20  is dropped from 
2e6d0 64 69 73 6b 20 28 75 73 69 6e 67 20 74 68 65 20  disk (using the 
2e6e0 44 65 73 74 72 6f 79 20 6f 70 63 6f 64 65 29 20  Destroy opcode) 
2e6f0 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70  in order to keep
2e700 20 0a 2a 2a 20 74 68 65 20 69 6e 74 65 72 6e 61   .** the interna
2e710 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  l representation
2e720 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d   of the.** schem
2e730 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74  a consistent wit
2e740 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73  h what is on dis
2e750 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72  k..*/.case OP_Dr
2e760 6f 70 54 72 69 67 67 65 72 3a 20 7b 0a 20 20 73  opTrigger: {.  s
2e770 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
2e780 65 6c 65 74 65 54 72 69 67 67 65 72 28 64 62 2c  eleteTrigger(db,
2e790 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
2e7a0 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  4.z);.  break;.}
2e7b0 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ...#ifndef SQLIT
2e7c0 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59  E_OMIT_INTEGRITY
2e7d0 5f 43 48 45 43 4b 0a 2f 2a 20 4f 70 63 6f 64 65  _CHECK./* Opcode
2e7e0 3a 20 49 6e 74 65 67 72 69 74 79 43 6b 20 50 31  : IntegrityCk P1
2e7f0 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
2e800 2a 2a 20 44 6f 20 61 6e 20 61 6e 61 6c 79 73 69  ** Do an analysi
2e810 73 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  s of the current
2e820 6c 79 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65  ly open database
2e830 2e 20 20 53 74 6f 72 65 20 69 6e 0a 2a 2a 20 72  .  Store in.** r
2e840 65 67 69 73 74 65 72 20 50 31 20 74 68 65 20 74  egister P1 the t
2e850 65 78 74 20 6f 66 20 61 6e 20 65 72 72 6f 72 20  ext of an error 
2e860 6d 65 73 73 61 67 65 20 64 65 73 63 72 69 62 69  message describi
2e870 6e 67 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e  ng any problems.
2e880 0a 2a 2a 20 49 66 20 6e 6f 20 70 72 6f 62 6c 65  .** If no proble
2e890 6d 73 20 61 72 65 20 66 6f 75 6e 64 2c 20 73 74  ms are found, st
2e8a0 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20 72 65  ore a NULL in re
2e8b0 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a  gister P1..**.**
2e8c0 20 54 68 65 20 72 65 67 69 73 74 65 72 20 50 33   The register P3
2e8d0 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6d 61   contains the ma
2e8e0 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20  ximum number of 
2e8f0 61 6c 6c 6f 77 65 64 20 65 72 72 6f 72 73 2e 0a  allowed errors..
2e900 2a 2a 20 41 74 20 6d 6f 73 74 20 72 65 67 28 50  ** At most reg(P
2e910 33 29 20 65 72 72 6f 72 73 20 77 69 6c 6c 20 62  3) errors will b
2e920 65 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 20 49  e reported..** I
2e930 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
2e940 68 65 20 61 6e 61 6c 79 73 69 73 20 73 74 6f 70  he analysis stop
2e950 73 20 61 73 20 73 6f 6f 6e 20 61 73 20 72 65 67  s as soon as reg
2e960 28 50 31 29 20 65 72 72 6f 72 73 20 61 72 65 20  (P1) errors are 
2e970 0a 2a 2a 20 73 65 65 6e 2e 20 20 52 65 67 28 50  .** seen.  Reg(P
2e980 31 29 20 69 73 20 75 70 64 61 74 65 64 20 77 69  1) is updated wi
2e990 74 68 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  th the number of
2e9a0 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e   errors remainin
2e9b0 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f  g..**.** The roo
2e9c0 74 20 70 61 67 65 20 6e 75 6d 62 65 72 73 20 6f  t page numbers o
2e9d0 66 20 61 6c 6c 20 74 61 62 6c 65 73 20 69 6e 20  f all tables in 
2e9e0 74 68 65 20 64 61 74 61 62 61 73 65 20 61 72 65  the database are
2e9f0 20 69 6e 74 65 67 65 72 73 0a 2a 2a 20 73 74 6f   integers.** sto
2ea00 72 65 64 20 69 6e 20 50 34 5f 49 4e 54 41 52 52  red in P4_INTARR
2ea10 41 59 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2a 0a  AY argument..**.
2ea20 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 74 20  ** If P5 is not 
2ea30 7a 65 72 6f 2c 20 74 68 65 20 63 68 65 63 6b 20  zero, the check 
2ea40 69 73 20 64 6f 6e 65 20 6f 6e 20 74 68 65 20 61  is done on the a
2ea50 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
2ea60 65 0a 2a 2a 20 66 69 6c 65 2c 20 6e 6f 74 20 74  e.** file, not t
2ea70 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
2ea80 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69   file..**.** Thi
2ea90 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64  s opcode is used
2eaa0 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68   to implement th
2eab0 65 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  e integrity_chec
2eac0 6b 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 63 61 73  k pragma..*/.cas
2ead0 65 20 4f 50 5f 49 6e 74 65 67 72 69 74 79 43 6b  e OP_IntegrityCk
2eae0 3a 20 7b 0a 20 20 69 6e 74 20 6e 52 6f 6f 74 3b  : {.  int nRoot;
2eaf0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
2eb00 6f 66 20 74 61 62 6c 65 73 20 74 6f 20 63 68 65  of tables to che
2eb10 63 6b 2e 20 20 28 4e 75 6d 62 65 72 20 6f 66 20  ck.  (Number of 
2eb20 72 6f 6f 74 20 70 61 67 65 73 2e 29 20 2a 2f 0a  root pages.) */.
2eb30 20 20 69 6e 74 20 2a 61 52 6f 6f 74 3b 20 20 20    int *aRoot;   
2eb40 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 72 6f    /* Array of ro
2eb50 6f 74 70 61 67 65 20 6e 75 6d 62 65 72 73 20 66  otpage numbers f
2eb60 6f 72 20 74 61 62 6c 65 73 20 74 6f 20 62 65 20  or tables to be 
2eb70 63 68 65 63 6b 65 64 20 2a 2f 0a 20 20 69 6e 74  checked */.  int
2eb80 20 6e 45 72 72 3b 20 20 20 20 20 20 20 2f 2a 20   nErr;       /* 
2eb90 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73  Number of errors
2eba0 20 72 65 70 6f 72 74 65 64 20 2a 2f 0a 20 20 63   reported */.  c
2ebb0 68 61 72 20 2a 7a 3b 20 20 20 20 20 20 20 20 2f  har *z;        /
2ebc0 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20 65 72  * Text of the er
2ebd0 72 6f 72 20 72 65 70 6f 72 74 20 2a 2f 0a 20 20  ror report */.  
2ebe0 4d 65 6d 20 2a 70 6e 45 72 72 3b 20 20 20 20 20  Mem *pnErr;     
2ebf0 2f 2a 20 52 65 67 69 73 74 65 72 20 6b 65 65 70  /* Register keep
2ec00 69 6e 67 20 74 72 61 63 6b 20 6f 66 20 65 72 72  ing track of err
2ec10 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67 20 2a 2f  ors remaining */
2ec20 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62  ..  assert( p->b
2ec30 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 6e 52  IsReader );.  nR
2ec40 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  oot = pOp->p2;. 
2ec50 20 61 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70 34   aRoot = pOp->p4
2ec60 2e 61 69 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  .ai;.  assert( n
2ec70 52 6f 6f 74 3e 30 20 29 3b 0a 20 20 61 73 73 65  Root>0 );.  asse
2ec80 72 74 28 20 61 52 6f 6f 74 5b 6e 52 6f 6f 74 5d  rt( aRoot[nRoot]
2ec90 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
2eca0 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f   pOp->p3>0 && pO
2ecb0 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p->p3<=(p->nMem+
2ecc0 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20  1 - p->nCursor) 
2ecd0 29 3b 0a 20 20 70 6e 45 72 72 20 3d 20 26 61 4d  );.  pnErr = &aM
2ece0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61  em[pOp->p3];.  a
2ecf0 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66  ssert( (pnErr->f
2ed00 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21  lags & MEM_Int)!
2ed10 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
2ed20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26 20  (pnErr->flags & 
2ed30 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f  (MEM_Str|MEM_Blo
2ed40 62 29 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31  b))==0 );.  pIn1
2ed50 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
2ed60 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ];.  assert( pOp
2ed70 2d 3e 70 35 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p5<db->nDb );.
2ed80 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b    assert( DbMask
2ed90 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73  Test(p->btreeMas
2eda0 6b 2c 20 70 4f 70 2d 3e 70 35 29 20 29 3b 0a 20  k, pOp->p5) );. 
2edb0 20 7a 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65   z = sqlite3Btre
2edc0 65 49 6e 74 65 67 72 69 74 79 43 68 65 63 6b 28  eIntegrityCheck(
2edd0 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 35 5d  db->aDb[pOp->p5]
2ede0 2e 70 42 74 2c 20 61 52 6f 6f 74 2c 20 6e 52 6f  .pBt, aRoot, nRo
2edf0 6f 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ot,.            
2ee00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ee10 20 20 20 20 20 28 69 6e 74 29 70 6e 45 72 72 2d       (int)pnErr-
2ee20 3e 75 2e 69 2c 20 26 6e 45 72 72 29 3b 0a 20 20  >u.i, &nErr);.  
2ee30 70 6e 45 72 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45  pnErr->u.i -= nE
2ee40 72 72 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  rr;.  sqlite3Vdb
2ee50 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31  eMemSetNull(pIn1
2ee60 29 3b 0a 20 20 69 66 28 20 6e 45 72 72 3d 3d 30  );.  if( nErr==0
2ee70 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
2ee80 7a 3d 3d 30 20 29 3b 0a 20 20 7d 65 6c 73 65 20  z==0 );.  }else 
2ee90 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20  if( z==0 ){.    
2eea0 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
2eeb0 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65  else{.    sqlite
2eec0 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70  3VdbeMemSetStr(p
2eed0 49 6e 31 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c 49  In1, z, -1, SQLI
2eee0 54 45 5f 55 54 46 38 2c 20 73 71 6c 69 74 65 33  TE_UTF8, sqlite3
2eef0 5f 66 72 65 65 29 3b 0a 20 20 7d 0a 20 20 55 50  _free);.  }.  UP
2ef00 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
2ef10 45 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74  E(pIn1);.  sqlit
2ef20 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f  e3VdbeChangeEnco
2ef30 64 69 6e 67 28 70 49 6e 31 2c 20 65 6e 63 6f 64  ding(pIn1, encod
2ef40 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ing);.  break;.}
2ef50 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
2ef60 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59  E_OMIT_INTEGRITY
2ef70 5f 43 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70  _CHECK */../* Op
2ef80 63 6f 64 65 3a 20 52 6f 77 53 65 74 41 64 64 20  code: RowSetAdd 
2ef90 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
2efa0 79 6e 6f 70 73 69 73 3a 20 72 6f 77 73 65 74 28  ynopsis: rowset(
2efb0 50 31 29 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20  P1)=r[P2].**.** 
2efc0 49 6e 73 65 72 74 20 74 68 65 20 69 6e 74 65 67  Insert the integ
2efd0 65 72 20 76 61 6c 75 65 20 68 65 6c 64 20 62 79  er value held by
2efe0 20 72 65 67 69 73 74 65 72 20 50 32 20 69 6e 74   register P2 int
2eff0 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65  o a boolean inde
2f000 78 0a 2a 2a 20 68 65 6c 64 20 69 6e 20 72 65 67  x.** held in reg
2f010 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20  ister P1..**.** 
2f020 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 69  An assertion fai
2f030 6c 73 20 69 66 20 50 32 20 69 73 20 6e 6f 74 20  ls if P2 is not 
2f040 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63  an integer..*/.c
2f050 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 41 64 64  ase OP_RowSetAdd
2f060 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 31  : {       /* in1
2f070 2c 20 69 6e 32 20 2a 2f 0a 20 20 70 49 6e 31 20  , in2 */.  pIn1 
2f080 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
2f090 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
2f0a0 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73  [pOp->p2];.  ass
2f0b0 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67  ert( (pIn2->flag
2f0c0 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20  s & MEM_Int)!=0 
2f0d0 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
2f0e0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53  flags & MEM_RowS
2f0f0 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71  et)==0 ){.    sq
2f100 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52  lite3VdbeMemSetR
2f110 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a 20 20 20  owSet(pIn1);.   
2f120 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
2f130 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  s & MEM_RowSet)=
2f140 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
2f150 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 52  ;.  }.  sqlite3R
2f160 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31  owSetInsert(pIn1
2f170 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e  ->u.pRowSet, pIn
2f180 32 2d 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61 6b  2->u.i);.  break
2f190 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2f1a0 52 6f 77 53 65 74 52 65 61 64 20 50 31 20 50 32  RowSetRead P1 P2
2f1b0 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
2f1c0 73 69 73 3a 20 72 5b 50 33 5d 3d 72 6f 77 73 65  sis: r[P3]=rowse
2f1d0 74 28 50 31 29 0a 2a 2a 0a 2a 2a 20 45 78 74 72  t(P1).**.** Extr
2f1e0 61 63 74 20 74 68 65 20 73 6d 61 6c 6c 65 73 74  act the smallest
2f1f0 20 76 61 6c 75 65 20 66 72 6f 6d 20 62 6f 6f 6c   value from bool
2f200 65 61 6e 20 69 6e 64 65 78 20 50 31 20 61 6e 64  ean index P1 and
2f210 20 70 75 74 20 74 68 61 74 20 76 61 6c 75 65 20   put that value 
2f220 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72  into.** register
2f230 20 50 33 2e 20 20 4f 72 2c 20 69 66 20 62 6f 6f   P3.  Or, if boo
2f240 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20 69 73  lean index P1 is
2f250 20 69 6e 69 74 69 61 6c 6c 79 20 65 6d 70 74 79   initially empty
2f260 2c 20 6c 65 61 76 65 20 50 33 0a 2a 2a 20 75 6e  , leave P3.** un
2f270 63 68 61 6e 67 65 64 20 61 6e 64 20 6a 75 6d 70  changed and jump
2f280 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   to instruction 
2f290 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  P2..*/.case OP_R
2f2a0 6f 77 53 65 74 52 65 61 64 3a 20 7b 20 20 20 20  owSetRead: {    
2f2b0 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c     /* jump, in1,
2f2c0 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 76   out3 */.  i64 v
2f2d0 61 6c 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61  al;..  pIn1 = &a
2f2e0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
2f2f0 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
2f300 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d   & MEM_RowSet)==
2f310 30 20 0a 20 20 20 7c 7c 20 73 71 6c 69 74 65 33  0 .   || sqlite3
2f320 52 6f 77 53 65 74 4e 65 78 74 28 70 49 6e 31 2d  RowSetNext(pIn1-
2f330 3e 75 2e 70 52 6f 77 53 65 74 2c 20 26 76 61 6c  >u.pRowSet, &val
2f340 29 3d 3d 30 0a 20 20 29 7b 0a 20 20 20 20 2f 2a  )==0.  ){.    /*
2f350 20 54 68 65 20 62 6f 6f 6c 65 61 6e 20 69 6e 64   The boolean ind
2f360 65 78 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 20  ex is empty */. 
2f370 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2f380 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a  mSetNull(pIn1);.
2f390 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
2f3a0 6b 65 6e 28 31 2c 32 29 3b 0a 20 20 20 20 67 6f  ken(1,2);.    go
2f3b0 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e  to jump_to_p2_an
2f3c0 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65  d_check_for_inte
2f3d0 72 72 75 70 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a  rrupt;.  }else{.
2f3e0 20 20 20 20 2f 2a 20 41 20 76 61 6c 75 65 20 77      /* A value w
2f3f0 61 73 20 70 75 6c 6c 65 64 20 66 72 6f 6d 20 74  as pulled from t
2f400 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20  he index */.    
2f410 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
2f420 30 2c 32 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  0,2);.    sqlite
2f430 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34  3VdbeMemSetInt64
2f440 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2c  (&aMem[pOp->p3],
2f450 20 76 61 6c 29 3b 0a 20 20 7d 0a 20 20 67 6f 74   val);.  }.  got
2f460 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65  o check_for_inte
2f470 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  rrupt;.}../* Opc
2f480 6f 64 65 3a 20 52 6f 77 53 65 74 54 65 73 74 20  ode: RowSetTest 
2f490 50 31 20 50 32 20 50 33 20 50 34 0a 2a 2a 20 53  P1 P2 P3 P4.** S
2f4a0 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 33  ynopsis: if r[P3
2f4b0 5d 20 69 6e 20 72 6f 77 73 65 74 28 50 31 29 20  ] in rowset(P1) 
2f4c0 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65  goto P2.**.** Re
2f4d0 67 69 73 74 65 72 20 50 33 20 69 73 20 61 73 73  gister P3 is ass
2f4e0 75 6d 65 64 20 74 6f 20 68 6f 6c 64 20 61 20 36  umed to hold a 6
2f4f0 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61  4-bit integer va
2f500 6c 75 65 2e 20 49 66 20 72 65 67 69 73 74 65 72  lue. If register
2f510 20 50 31 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20   P1.** contains 
2f520 61 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20  a RowSet object 
2f530 61 6e 64 20 74 68 61 74 20 52 6f 77 53 65 74 20  and that RowSet 
2f540 6f 62 6a 65 63 74 20 63 6f 6e 74 61 69 6e 73 0a  object contains.
2f550 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 68 65 6c  ** the value hel
2f560 64 20 69 6e 20 50 33 2c 20 6a 75 6d 70 20 74 6f  d in P3, jump to
2f570 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 4f 74   register P2. Ot
2f580 68 65 72 77 69 73 65 2c 20 69 6e 73 65 72 74 20  herwise, insert 
2f590 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 69  the.** integer i
2f5a0 6e 20 50 33 20 69 6e 74 6f 20 74 68 65 20 52 6f  n P3 into the Ro
2f5b0 77 53 65 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75  wSet and continu
2f5c0 65 20 6f 6e 20 74 6f 20 74 68 65 0a 2a 2a 20 6e  e on to the.** n
2f5d0 65 78 74 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a  ext opcode..**.*
2f5e0 2a 20 54 68 65 20 52 6f 77 53 65 74 20 6f 62 6a  * The RowSet obj
2f5f0 65 63 74 20 69 73 20 6f 70 74 69 6d 69 7a 65 64  ect is optimized
2f600 20 66 6f 72 20 74 68 65 20 63 61 73 65 20 77 68   for the case wh
2f610 65 72 65 20 73 75 63 63 65 73 73 69 76 65 20 73  ere successive s
2f620 65 74 73 0a 2a 2a 20 6f 66 20 69 6e 74 65 67 65  ets.** of intege
2f630 72 73 2c 20 77 68 65 72 65 20 65 61 63 68 20 73  rs, where each s
2f640 65 74 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 64  et contains no d
2f650 75 70 6c 69 63 61 74 65 73 2e 20 45 61 63 68 20  uplicates. Each 
2f660 73 65 74 0a 2a 2a 20 6f 66 20 76 61 6c 75 65 73  set.** of values
2f670 20 69 73 20 69 64 65 6e 74 69 66 69 65 64 20 62   is identified b
2f680 79 20 61 20 75 6e 69 71 75 65 20 50 34 20 76 61  y a unique P4 va
2f690 6c 75 65 2e 20 54 68 65 20 66 69 72 73 74 20 73  lue. The first s
2f6a0 65 74 0a 2a 2a 20 6d 75 73 74 20 68 61 76 65 20  et.** must have 
2f6b0 50 34 3d 3d 30 2c 20 74 68 65 20 66 69 6e 61 6c  P4==0, the final
2f6c0 20 73 65 74 20 50 34 3d 2d 31 2e 20 20 50 34 20   set P4=-1.  P4 
2f6d0 6d 75 73 74 20 62 65 20 65 69 74 68 65 72 20 2d  must be either -
2f6e0 31 20 6f 72 0a 2a 2a 20 6e 6f 6e 2d 6e 65 67 61  1 or.** non-nega
2f6f0 74 69 76 65 2e 20 20 46 6f 72 20 6e 6f 6e 2d 6e  tive.  For non-n
2f700 65 67 61 74 69 76 65 20 76 61 6c 75 65 73 20 6f  egative values o
2f710 66 20 50 34 20 6f 6e 6c 79 20 74 68 65 20 6c 6f  f P4 only the lo
2f720 77 65 72 20 34 0a 2a 2a 20 62 69 74 73 20 61 72  wer 4.** bits ar
2f730 65 20 73 69 67 6e 69 66 69 63 61 6e 74 2e 0a 2a  e significant..*
2f740 2a 0a 2a 2a 20 54 68 69 73 20 61 6c 6c 6f 77 73  *.** This allows
2f750 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 3a 20   optimizations: 
2f760 28 61 29 20 77 68 65 6e 20 50 34 3d 3d 30 20 74  (a) when P4==0 t
2f770 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20  here is no need 
2f780 74 6f 20 74 65 73 74 0a 2a 2a 20 74 68 65 20 72  to test.** the r
2f790 6f 77 73 65 74 20 6f 62 6a 65 63 74 20 66 6f 72  owset object for
2f7a0 20 50 33 2c 20 61 73 20 69 74 20 69 73 20 67 75   P3, as it is gu
2f7b0 61 72 61 6e 74 65 65 64 20 6e 6f 74 20 74 6f 20  aranteed not to 
2f7c0 63 6f 6e 74 61 69 6e 20 69 74 2c 0a 2a 2a 20 28  contain it,.** (
2f7d0 62 29 20 77 68 65 6e 20 50 34 3d 3d 2d 31 20 74  b) when P4==-1 t
2f7e0 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20  here is no need 
2f7f0 74 6f 20 69 6e 73 65 72 74 20 74 68 65 20 76 61  to insert the va
2f800 6c 75 65 2c 20 61 73 20 69 74 20 77 69 6c 6c 0a  lue, as it will.
2f810 2a 2a 20 6e 65 76 65 72 20 62 65 20 74 65 73 74  ** never be test
2f820 65 64 20 66 6f 72 2c 20 61 6e 64 20 28 63 29 20  ed for, and (c) 
2f830 77 68 65 6e 20 61 20 76 61 6c 75 65 20 74 68 61  when a value tha
2f840 74 20 69 73 20 70 61 72 74 20 6f 66 20 73 65 74  t is part of set
2f850 20 58 20 69 73 0a 2a 2a 20 69 6e 73 65 72 74 65   X is.** inserte
2f860 64 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e  d, there is no n
2f870 65 65 64 20 74 6f 20 73 65 61 72 63 68 20 74 6f  eed to search to
2f880 20 73 65 65 20 69 66 20 74 68 65 20 73 61 6d 65   see if the same
2f890 20 76 61 6c 75 65 20 77 61 73 0a 2a 2a 20 70 72   value was.** pr
2f8a0 65 76 69 6f 75 73 6c 79 20 69 6e 73 65 72 74 65  eviously inserte
2f8b0 64 20 61 73 20 70 61 72 74 20 6f 66 20 73 65 74  d as part of set
2f8c0 20 58 20 28 6f 6e 6c 79 20 69 66 20 69 74 20 77   X (only if it w
2f8d0 61 73 20 70 72 65 76 69 6f 75 73 6c 79 0a 2a 2a  as previously.**
2f8e0 20 69 6e 73 65 72 74 65 64 20 61 73 20 70 61 72   inserted as par
2f8f0 74 20 6f 66 20 73 6f 6d 65 20 6f 74 68 65 72 20  t of some other 
2f900 73 65 74 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  set)..*/.case OP
2f910 5f 52 6f 77 53 65 74 54 65 73 74 3a 20 7b 20 20  _RowSetTest: {  
2f920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f930 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c     /* jump, in1,
2f940 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69 53   in3 */.  int iS
2f950 65 74 3b 0a 20 20 69 6e 74 20 65 78 69 73 74 73  et;.  int exists
2f960 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  ;..  pIn1 = &aMe
2f970 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49  m[pOp->p1];.  pI
2f980 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
2f990 70 33 5d 3b 0a 20 20 69 53 65 74 20 3d 20 70 4f  p3];.  iSet = pO
2f9a0 70 2d 3e 70 34 2e 69 3b 0a 20 20 61 73 73 65 72  p->p4.i;.  asser
2f9b0 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d  t( pIn3->flags&M
2f9c0 45 4d 5f 49 6e 74 20 29 3b 0a 0a 20 20 2f 2a 20  EM_Int );..  /* 
2f9d0 49 66 20 74 68 65 72 65 20 69 73 20 61 6e 79 74  If there is anyt
2f9e0 68 69 6e 67 20 6f 74 68 65 72 20 74 68 61 6e 20  hing other than 
2f9f0 61 20 72 6f 77 73 65 74 20 6f 62 6a 65 63 74 20  a rowset object 
2fa00 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50  in memory cell P
2fa10 31 2c 0a 20 20 2a 2a 20 64 65 6c 65 74 65 20 69  1,.  ** delete i
2fa20 74 20 6e 6f 77 20 61 6e 64 20 69 6e 69 74 69 61  t now and initia
2fa30 6c 69 7a 65 20 50 31 20 77 69 74 68 20 61 6e 20  lize P1 with an 
2fa40 65 6d 70 74 79 20 72 6f 77 73 65 74 0a 20 20 2a  empty rowset.  *
2fa50 2f 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  /.  if( (pIn1->f
2fa60 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65  lags & MEM_RowSe
2fa70 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  t)==0 ){.    sql
2fa80 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f  ite3VdbeMemSetRo
2fa90 77 53 65 74 28 70 49 6e 31 29 3b 0a 20 20 20 20  wSet(pIn1);.    
2faa0 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
2fab0 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d   & MEM_RowSet)==
2fac0 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
2fad0 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20  .  }..  assert( 
2fae0 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
2faf0 49 4e 54 33 32 20 29 3b 0a 20 20 61 73 73 65 72  INT32 );.  asser
2fb00 74 28 20 69 53 65 74 3d 3d 2d 31 20 7c 7c 20 69  t( iSet==-1 || i
2fb10 53 65 74 3e 3d 30 20 29 3b 0a 20 20 69 66 28 20  Set>=0 );.  if( 
2fb20 69 53 65 74 20 29 7b 0a 20 20 20 20 65 78 69 73  iSet ){.    exis
2fb30 74 73 20 3d 20 73 71 6c 69 74 65 33 52 6f 77 53  ts = sqlite3RowS
2fb40 65 74 54 65 73 74 28 70 49 6e 31 2d 3e 75 2e 70  etTest(pIn1->u.p
2fb50 52 6f 77 53 65 74 2c 20 69 53 65 74 2c 20 70 49  RowSet, iSet, pI
2fb60 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 20 20 56 64  n3->u.i);.    Vd
2fb70 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 65 78  beBranchTaken(ex
2fb80 69 73 74 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20  ists!=0,2);.    
2fb90 69 66 28 20 65 78 69 73 74 73 20 29 20 67 6f 74  if( exists ) got
2fba0 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
2fbb0 7d 0a 20 20 69 66 28 20 69 53 65 74 3e 3d 30 20  }.  if( iSet>=0 
2fbc0 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52 6f  ){.    sqlite3Ro
2fbd0 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31 2d  wSetInsert(pIn1-
2fbe0 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e 33  >u.pRowSet, pIn3
2fbf0 2d 3e 75 2e 69 29 3b 0a 20 20 7d 0a 20 20 62 72  ->u.i);.  }.  br
2fc00 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66  eak;.}...#ifndef
2fc10 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49   SQLITE_OMIT_TRI
2fc20 47 47 45 52 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  GGER../* Opcode:
2fc30 20 50 72 6f 67 72 61 6d 20 50 31 20 50 32 20 50   Program P1 P2 P
2fc40 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78  3 P4 P5.**.** Ex
2fc50 65 63 75 74 65 20 74 68 65 20 74 72 69 67 67 65  ecute the trigge
2fc60 72 20 70 72 6f 67 72 61 6d 20 70 61 73 73 65 64  r program passed
2fc70 20 61 73 20 50 34 20 28 74 79 70 65 20 50 34 5f   as P4 (type P4_
2fc80 53 55 42 50 52 4f 47 52 41 4d 29 2e 20 0a 2a 2a  SUBPROGRAM). .**
2fc90 0a 2a 2a 20 50 31 20 63 6f 6e 74 61 69 6e 73 20  .** P1 contains 
2fca0 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 74  the address of t
2fcb0 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74  he memory cell t
2fcc0 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  hat contains the
2fcd0 20 66 69 72 73 74 20 6d 65 6d 6f 72 79 20 0a 2a   first memory .*
2fce0 2a 20 63 65 6c 6c 20 69 6e 20 61 6e 20 61 72 72  * cell in an arr
2fcf0 61 79 20 6f 66 20 76 61 6c 75 65 73 20 75 73 65  ay of values use
2fd00 64 20 61 73 20 61 72 67 75 6d 65 6e 74 73 20 74  d as arguments t
2fd10 6f 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61  o the sub-progra
2fd20 6d 2e 20 50 32 20 0a 2a 2a 20 63 6f 6e 74 61 69  m. P2 .** contai
2fd30 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20 74  ns the address t
2fd40 6f 20 6a 75 6d 70 20 74 6f 20 69 66 20 74 68 65  o jump to if the
2fd50 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 72   sub-program thr
2fd60 6f 77 73 20 61 6e 20 49 47 4e 4f 52 45 20 0a 2a  ows an IGNORE .*
2fd70 2a 20 65 78 63 65 70 74 69 6f 6e 20 75 73 69 6e  * exception usin
2fd80 67 20 74 68 65 20 52 41 49 53 45 28 29 20 66 75  g the RAISE() fu
2fd90 6e 63 74 69 6f 6e 2e 20 52 65 67 69 73 74 65 72  nction. Register
2fda0 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65   P3 contains the
2fdb0 20 61 64 64 72 65 73 73 20 0a 2a 2a 20 6f 66 20   address .** of 
2fdc0 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e  a memory cell in
2fdd0 20 74 68 69 73 20 28 74 68 65 20 70 61 72 65 6e   this (the paren
2fde0 74 29 20 56 4d 20 74 68 61 74 20 69 73 20 75 73  t) VM that is us
2fdf0 65 64 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 74  ed to allocate t
2fe00 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20 72 65  he .** memory re
2fe10 71 75 69 72 65 64 20 62 79 20 74 68 65 20 73 75  quired by the su
2fe20 62 2d 76 64 62 65 20 61 74 20 72 75 6e 74 69 6d  b-vdbe at runtim
2fe30 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  e..**.** P4 is a
2fe40 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
2fe50 56 4d 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  VM containing th
2fe60 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  e trigger progra
2fe70 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69  m..**.** If P5 i
2fe80 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
2fe90 20 72 65 63 75 72 73 69 76 65 20 70 72 6f 67 72   recursive progr
2fea0 61 6d 20 69 6e 76 6f 63 61 74 69 6f 6e 20 69 73  am invocation is
2feb0 20 65 6e 61 62 6c 65 64 2e 0a 2a 2f 0a 63 61 73   enabled..*/.cas
2fec0 65 20 4f 50 5f 50 72 6f 67 72 61 6d 3a 20 7b 20  e OP_Program: { 
2fed0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
2fee0 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20  /.  int nMem;   
2fef0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
2ff00 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20  umber of memory 
2ff10 72 65 67 69 73 74 65 72 73 20 66 6f 72 20 73 75  registers for su
2ff20 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 69  b-program */.  i
2ff30 6e 74 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20  nt nByte;       
2ff40 20 20 20 20 20 20 20 2f 2a 20 42 79 74 65 73 20         /* Bytes 
2ff50 6f 66 20 72 75 6e 74 69 6d 65 20 73 70 61 63 65  of runtime space
2ff60 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 73 75   required for su
2ff70 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 4d  b-program */.  M
2ff80 65 6d 20 2a 70 52 74 3b 20 20 20 20 20 20 20 20  em *pRt;        
2ff90 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
2ffa0 65 72 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 72  er to allocate r
2ffb0 75 6e 74 69 6d 65 20 73 70 61 63 65 20 2a 2f 0a  untime space */.
2ffc0 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20    Mem *pMem;    
2ffd0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65            /* Use
2ffe0 64 20 74 6f 20 69 74 65 72 61 74 65 20 74 68 72  d to iterate thr
2fff0 6f 75 67 68 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  ough memory cell
30000 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 45 6e 64  s */.  Mem *pEnd
30010 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
30020 2a 20 4c 61 73 74 20 6d 65 6d 6f 72 79 20 63 65  * Last memory ce
30030 6c 6c 20 69 6e 20 6e 65 77 20 61 72 72 61 79 20  ll in new array 
30040 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a  */.  VdbeFrame *
30050 70 46 72 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20  pFrame;      /* 
30060 4e 65 77 20 76 64 62 65 20 66 72 61 6d 65 20 74  New vdbe frame t
30070 6f 20 65 78 65 63 75 74 65 20 69 6e 20 2a 2f 0a  o execute in */.
30080 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50    SubProgram *pP
30090 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 53 75 62  rogram;   /* Sub
300a0 2d 70 72 6f 67 72 61 6d 20 74 6f 20 65 78 65 63  -program to exec
300b0 75 74 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 74  ute */.  void *t
300c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
300d0 20 2f 2a 20 54 6f 6b 65 6e 20 69 64 65 6e 74 69   /* Token identi
300e0 66 79 69 6e 67 20 74 72 69 67 67 65 72 20 2a 2f  fying trigger */
300f0 0a 0a 20 20 70 50 72 6f 67 72 61 6d 20 3d 20 70  ..  pProgram = p
30100 4f 70 2d 3e 70 34 2e 70 50 72 6f 67 72 61 6d 3b  Op->p4.pProgram;
30110 0a 20 20 70 52 74 20 3d 20 26 61 4d 65 6d 5b 70  .  pRt = &aMem[p
30120 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72  Op->p3];.  asser
30130 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70  t( pProgram->nOp
30140 3e 30 20 29 3b 0a 20 20 0a 20 20 2f 2a 20 49 66  >0 );.  .  /* If
30150 20 74 68 65 20 70 35 20 66 6c 61 67 20 69 73 20   the p5 flag is 
30160 63 6c 65 61 72 2c 20 74 68 65 6e 20 72 65 63 75  clear, then recu
30170 72 73 69 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e  rsive invocation
30180 20 6f 66 20 74 72 69 67 67 65 72 73 20 69 73 20   of triggers is 
30190 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65 64 20 66  .  ** disabled f
301a0 6f 72 20 62 61 63 6b 77 61 72 64 73 20 63 6f 6d  or backwards com
301b0 70 61 74 69 62 69 6c 69 74 79 20 28 70 35 20 69  patibility (p5 i
301c0 73 20 73 65 74 20 69 66 20 74 68 69 73 20 73 75  s set if this su
301d0 62 2d 70 72 6f 67 72 61 6d 0a 20 20 2a 2a 20 69  b-program.  ** i
301e0 73 20 72 65 61 6c 6c 79 20 61 20 74 72 69 67 67  s really a trigg
301f0 65 72 2c 20 6e 6f 74 20 61 20 66 6f 72 65 69 67  er, not a foreig
30200 6e 20 6b 65 79 20 61 63 74 69 6f 6e 2c 20 61 6e  n key action, an
30210 64 20 74 68 65 20 66 6c 61 67 20 73 65 74 0a 20  d the flag set. 
30220 20 2a 2a 20 61 6e 64 20 63 6c 65 61 72 65 64 20   ** and cleared 
30230 62 79 20 74 68 65 20 22 50 52 41 47 4d 41 20 72  by the "PRAGMA r
30240 65 63 75 72 73 69 76 65 5f 74 72 69 67 67 65 72  ecursive_trigger
30250 73 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20 63 6c  s" command is cl
30260 65 61 72 29 2e 0a 20 20 2a 2a 20 0a 20 20 2a 2a  ear)..  ** .  **
30270 20 49 74 20 69 73 20 72 65 63 75 72 73 69 76 65   It is recursive
30280 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74   invocation of t
30290 72 69 67 67 65 72 73 2c 20 61 74 20 74 68 65 20  riggers, at the 
302a0 53 51 4c 20 6c 65 76 65 6c 2c 20 74 68 61 74 20  SQL level, that 
302b0 69 73 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65  is .  ** disable
302c0 64 2e 20 49 6e 20 73 6f 6d 65 20 63 61 73 65 73  d. In some cases
302d0 20 61 20 73 69 6e 67 6c 65 20 74 72 69 67 67 65   a single trigge
302e0 72 20 6d 61 79 20 67 65 6e 65 72 61 74 65 20 6d  r may generate m
302f0 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 0a 20 20  ore than one .  
30300 2a 2a 20 53 75 62 50 72 6f 67 72 61 6d 20 28 69  ** SubProgram (i
30310 66 20 74 68 65 20 74 72 69 67 67 65 72 20 6d 61  f the trigger ma
30320 79 20 62 65 20 65 78 65 63 75 74 65 64 20 77 69  y be executed wi
30330 74 68 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65  th more than one
30340 20 64 69 66 66 65 72 65 6e 74 20 0a 20 20 2a 2a   different .  **
30350 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67   ON CONFLICT alg
30360 6f 72 69 74 68 6d 29 2e 20 53 75 62 50 72 6f 67  orithm). SubProg
30370 72 61 6d 20 73 74 72 75 63 74 75 72 65 73 20 61  ram structures a
30380 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
30390 0a 20 20 2a 2a 20 73 69 6e 67 6c 65 20 74 72 69  .  ** single tri
303a0 67 67 65 72 20 61 6c 6c 20 68 61 76 65 20 74 68  gger all have th
303b0 65 20 73 61 6d 65 20 76 61 6c 75 65 20 66 6f 72  e same value for
303c0 20 74 68 65 20 53 75 62 50 72 6f 67 72 61 6d 2e   the SubProgram.
303d0 74 6f 6b 65 6e 20 0a 20 20 2a 2a 20 76 61 72 69  token .  ** vari
303e0 61 62 6c 65 2e 20 20 2a 2f 0a 20 20 69 66 28 20  able.  */.  if( 
303f0 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 74  pOp->p5 ){.    t
30400 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b   = pProgram->tok
30410 65 6e 3b 0a 20 20 20 20 66 6f 72 28 70 46 72 61  en;.    for(pFra
30420 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46  me=p->pFrame; pF
30430 72 61 6d 65 20 26 26 20 70 46 72 61 6d 65 2d 3e  rame && pFrame->
30440 74 6f 6b 65 6e 21 3d 74 3b 20 70 46 72 61 6d 65  token!=t; pFrame
30450 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74  =pFrame->pParent
30460 29 3b 0a 20 20 20 20 69 66 28 20 70 46 72 61 6d  );.    if( pFram
30470 65 20 29 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a  e ) break;.  }..
30480 20 20 69 66 28 20 70 2d 3e 6e 46 72 61 6d 65 3e    if( p->nFrame>
30490 3d 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  =db->aLimit[SQLI
304a0 54 45 5f 4c 49 4d 49 54 5f 54 52 49 47 47 45 52  TE_LIMIT_TRIGGER
304b0 5f 44 45 50 54 48 5d 20 29 7b 0a 20 20 20 20 72  _DEPTH] ){.    r
304c0 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
304d0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
304e0 65 45 72 72 6f 72 28 70 2c 20 22 74 6f 6f 20 6d  eError(p, "too m
304f0 61 6e 79 20 6c 65 76 65 6c 73 20 6f 66 20 74 72  any levels of tr
30500 69 67 67 65 72 20 72 65 63 75 72 73 69 6f 6e 22  igger recursion"
30510 29 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  );.    goto abor
30520 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
30530 20 20 7d 0a 0a 20 20 2f 2a 20 52 65 67 69 73 74    }..  /* Regist
30540 65 72 20 70 52 74 20 69 73 20 75 73 65 64 20 74  er pRt is used t
30550 6f 20 73 74 6f 72 65 20 74 68 65 20 6d 65 6d 6f  o store the memo
30560 72 79 20 72 65 71 75 69 72 65 64 20 74 6f 20 73  ry required to s
30570 61 76 65 20 74 68 65 20 73 74 61 74 65 0a 20 20  ave the state.  
30580 2a 2a 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  ** of the curren
30590 74 20 70 72 6f 67 72 61 6d 2c 20 61 6e 64 20 74  t program, and t
305a0 68 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72  he memory requir
305b0 65 64 20 61 74 20 72 75 6e 74 69 6d 65 20 74 6f  ed at runtime to
305c0 20 65 78 65 63 75 74 65 0a 20 20 2a 2a 20 74 68   execute.  ** th
305d0 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  e trigger progra
305e0 6d 2e 20 49 66 20 74 68 69 73 20 74 72 69 67 67  m. If this trigg
305f0 65 72 20 68 61 73 20 62 65 65 6e 20 66 69 72 65  er has been fire
30600 64 20 62 65 66 6f 72 65 2c 20 74 68 65 6e 20 70  d before, then p
30610 52 74 20 0a 20 20 2a 2a 20 69 73 20 61 6c 72 65  Rt .  ** is alre
30620 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4f  ady allocated. O
30630 74 68 65 72 77 69 73 65 2c 20 69 74 20 6d 75 73  therwise, it mus
30640 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64  t be initialized
30650 2e 20 20 2a 2f 0a 20 20 69 66 28 20 28 70 52 74  .  */.  if( (pRt
30660 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 46 72 61 6d  ->flags&MEM_Fram
30670 65 29 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20  e)==0 ){.    /* 
30680 53 75 62 50 72 6f 67 72 61 6d 2e 6e 4d 65 6d 20  SubProgram.nMem 
30690 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75  is set to the nu
306a0 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63  mber of memory c
306b0 65 6c 6c 73 20 75 73 65 64 20 62 79 20 74 68 65  ells used by the
306c0 20 0a 20 20 20 20 2a 2a 20 70 72 6f 67 72 61 6d   .    ** program
306d0 20 73 74 6f 72 65 64 20 69 6e 20 53 75 62 50 72   stored in SubPr
306e0 6f 67 72 61 6d 2e 61 4f 70 2e 20 41 73 20 77 65  ogram.aOp. As we
306f0 6c 6c 20 61 73 20 74 68 65 73 65 2c 20 6f 6e 65  ll as these, one
30700 20 6d 65 6d 6f 72 79 0a 20 20 20 20 2a 2a 20 63   memory.    ** c
30710 65 6c 6c 20 69 73 20 72 65 71 75 69 72 65 64 20  ell is required 
30720 66 6f 72 20 65 61 63 68 20 63 75 72 73 6f 72 20  for each cursor 
30730 75 73 65 64 20 62 79 20 74 68 65 20 70 72 6f 67  used by the prog
30740 72 61 6d 2e 20 53 65 74 20 6c 6f 63 61 6c 0a 20  ram. Set local. 
30750 20 20 20 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e     ** variable n
30760 4d 65 6d 20 28 61 6e 64 20 6c 61 74 65 72 2c 20  Mem (and later, 
30770 56 64 62 65 46 72 61 6d 65 2e 6e 43 68 69 6c 64  VdbeFrame.nChild
30780 4d 65 6d 29 20 74 6f 20 74 68 69 73 20 76 61 6c  Mem) to this val
30790 75 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6e  ue..    */.    n
307a0 4d 65 6d 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e  Mem = pProgram->
307b0 6e 4d 65 6d 20 2b 20 70 50 72 6f 67 72 61 6d 2d  nMem + pProgram-
307c0 3e 6e 43 73 72 3b 0a 20 20 20 20 61 73 73 65 72  >nCsr;.    asser
307d0 74 28 20 6e 4d 65 6d 3e 30 20 29 3b 0a 20 20 20  t( nMem>0 );.   
307e0 20 69 66 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e   if( pProgram->n
307f0 43 73 72 3d 3d 30 20 29 20 6e 4d 65 6d 2b 2b 3b  Csr==0 ) nMem++;
30800 0a 20 20 20 20 6e 42 79 74 65 20 3d 20 52 4f 55  .    nByte = ROU
30810 4e 44 38 28 73 69 7a 65 6f 66 28 56 64 62 65 46  ND8(sizeof(VdbeF
30820 72 61 6d 65 29 29 0a 20 20 20 20 20 20 20 20 20  rame)).         
30830 20 20 20 20 20 2b 20 6e 4d 65 6d 20 2a 20 73 69       + nMem * si
30840 7a 65 6f 66 28 4d 65 6d 29 0a 20 20 20 20 20 20  zeof(Mem).      
30850 20 20 20 20 20 20 20 20 2b 20 70 50 72 6f 67 72          + pProgr
30860 61 6d 2d 3e 6e 43 73 72 20 2a 20 73 69 7a 65 6f  am->nCsr * sizeo
30870 66 28 56 64 62 65 43 75 72 73 6f 72 20 2a 29 3b  f(VdbeCursor *);
30880 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20 73 71  .    pFrame = sq
30890 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72  lite3DbMallocZer
308a0 6f 28 64 62 2c 20 6e 42 79 74 65 29 3b 0a 20 20  o(db, nByte);.  
308b0 20 20 69 66 28 20 21 70 46 72 61 6d 65 20 29 7b    if( !pFrame ){
308c0 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  .      goto no_m
308d0 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71  em;.    }.    sq
308e0 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
308f0 61 73 65 28 70 52 74 29 3b 0a 20 20 20 20 70 52  ase(pRt);.    pR
30900 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 46  t->flags = MEM_F
30910 72 61 6d 65 3b 0a 20 20 20 20 70 52 74 2d 3e 75  rame;.    pRt->u
30920 2e 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65  .pFrame = pFrame
30930 3b 0a 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 76  ;..    pFrame->v
30940 20 3d 20 70 3b 0a 20 20 20 20 70 46 72 61 6d 65   = p;.    pFrame
30950 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 3d 20 6e 4d  ->nChildMem = nM
30960 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  em;.    pFrame->
30970 6e 43 68 69 6c 64 43 73 72 20 3d 20 70 50 72 6f  nChildCsr = pPro
30980 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20  gram->nCsr;.    
30990 70 46 72 61 6d 65 2d 3e 70 63 20 3d 20 28 69 6e  pFrame->pc = (in
309a0 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20  t)(pOp - aOp);. 
309b0 20 20 20 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 20     pFrame->aMem 
309c0 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 70  = p->aMem;.    p
309d0 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 3d 20 70 2d  Frame->nMem = p-
309e0 3e 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d  >nMem;.    pFram
309f0 65 2d 3e 61 70 43 73 72 20 3d 20 70 2d 3e 61 70  e->apCsr = p->ap
30a00 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  Csr;.    pFrame-
30a10 3e 6e 43 75 72 73 6f 72 20 3d 20 70 2d 3e 6e 43  >nCursor = p->nC
30a20 75 72 73 6f 72 3b 0a 20 20 20 20 70 46 72 61 6d  ursor;.    pFram
30a30 65 2d 3e 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b  e->aOp = p->aOp;
30a40 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4f 70  .    pFrame->nOp
30a50 20 3d 20 70 2d 3e 6e 4f 70 3b 0a 20 20 20 20 70   = p->nOp;.    p
30a60 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 20 3d 20 70  Frame->token = p
30a70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a  Program->token;.
30a80 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
30a90 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54  ABLE_STMT_SCANST
30aa0 41 54 55 53 0a 20 20 20 20 70 46 72 61 6d 65 2d  ATUS.    pFrame-
30ab0 3e 61 6e 45 78 65 63 20 3d 20 70 2d 3e 61 6e 45  >anExec = p->anE
30ac0 78 65 63 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20  xec;.#endif..   
30ad0 20 70 45 6e 64 20 3d 20 26 56 64 62 65 46 72 61   pEnd = &VdbeFra
30ae0 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b 70 46  meMem(pFrame)[pF
30af0 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 5d  rame->nChildMem]
30b00 3b 0a 20 20 20 20 66 6f 72 28 70 4d 65 6d 3d 56  ;.    for(pMem=V
30b10 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61  dbeFrameMem(pFra
30b20 6d 65 29 3b 20 70 4d 65 6d 21 3d 70 45 6e 64 3b  me); pMem!=pEnd;
30b30 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 20 20   pMem++){.      
30b40 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pMem->flags = ME
30b50 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 20  M_Undefined;.   
30b60 20 20 20 70 4d 65 6d 2d 3e 64 62 20 3d 20 64 62     pMem->db = db
30b70 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
30b80 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20 70 52  .    pFrame = pR
30b90 74 2d 3e 75 2e 70 46 72 61 6d 65 3b 0a 20 20 20  t->u.pFrame;.   
30ba0 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61   assert( pProgra
30bb0 6d 2d 3e 6e 4d 65 6d 2b 70 50 72 6f 67 72 61 6d  m->nMem+pProgram
30bc0 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e  ->nCsr==pFrame->
30bd0 6e 43 68 69 6c 64 4d 65 6d 20 0a 20 20 20 20 20  nChildMem .     
30be0 20 20 20 7c 7c 20 28 70 50 72 6f 67 72 61 6d 2d     || (pProgram-
30bf0 3e 6e 43 73 72 3d 3d 30 20 26 26 20 70 50 72 6f  >nCsr==0 && pPro
30c00 67 72 61 6d 2d 3e 6e 4d 65 6d 2b 31 3d 3d 70 46  gram->nMem+1==pF
30c10 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 29  rame->nChildMem)
30c20 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
30c30 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d  pProgram->nCsr==
30c40 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73  pFrame->nChildCs
30c50 72 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  r );.    assert(
30c60 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70   (int)(pOp - aOp
30c70 29 3d 3d 70 46 72 61 6d 65 2d 3e 70 63 20 29 3b  )==pFrame->pc );
30c80 0a 20 20 7d 0a 0a 20 20 70 2d 3e 6e 46 72 61 6d  .  }..  p->nFram
30c90 65 2b 2b 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 70  e++;.  pFrame->p
30ca0 50 61 72 65 6e 74 20 3d 20 70 2d 3e 70 46 72 61  Parent = p->pFra
30cb0 6d 65 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6c 61  me;.  pFrame->la
30cc0 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f  stRowid = lastRo
30cd0 77 69 64 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6e  wid;.  pFrame->n
30ce0 43 68 61 6e 67 65 20 3d 20 70 2d 3e 6e 43 68 61  Change = p->nCha
30cf0 6e 67 65 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6e  nge;.  pFrame->n
30d00 44 62 43 68 61 6e 67 65 20 3d 20 70 2d 3e 64 62  DbChange = p->db
30d10 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 61 73 73  ->nChange;.  ass
30d20 65 72 74 28 20 70 46 72 61 6d 65 2d 3e 70 41 75  ert( pFrame->pAu
30d30 78 44 61 74 61 3d 3d 30 20 29 3b 0a 20 20 70 46  xData==0 );.  pF
30d40 72 61 6d 65 2d 3e 70 41 75 78 44 61 74 61 20 3d  rame->pAuxData =
30d50 20 70 2d 3e 70 41 75 78 44 61 74 61 3b 0a 23 69   p->pAuxData;.#i
30d60 66 64 65 66 20 53 51 4c 49 54 45 5f 54 52 41 43  fdef SQLITE_TRAC
30d70 45 5f 54 52 49 47 47 45 52 0a 20 20 70 46 72 61  E_TRIGGER.  pFra
30d80 6d 65 2d 3e 6e 56 6d 53 74 65 70 20 3d 20 6e 56  me->nVmStep = nV
30d90 6d 53 74 65 70 3b 0a 20 20 70 46 72 61 6d 65 2d  mStep;.  pFrame-
30da0 3e 6e 56 6d 53 74 65 70 41 64 6a 20 3d 20 6e 56  >nVmStepAdj = nV
30db0 6d 53 74 65 70 3b 0a 23 65 6e 64 69 66 0a 20 20  mStep;.#endif.  
30dc0 70 2d 3e 70 41 75 78 44 61 74 61 20 3d 20 30 3b  p->pAuxData = 0;
30dd0 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20  .  p->nChange = 
30de0 30 3b 0a 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d  0;.  p->pFrame =
30df0 20 70 46 72 61 6d 65 3b 0a 20 20 70 2d 3e 61 4d   pFrame;.  p->aM
30e00 65 6d 20 3d 20 61 4d 65 6d 20 3d 20 56 64 62 65  em = aMem = Vdbe
30e10 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29  FrameMem(pFrame)
30e20 3b 0a 20 20 70 2d 3e 6e 4d 65 6d 20 3d 20 70 46  ;.  p->nMem = pF
30e30 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 3b  rame->nChildMem;
30e40 0a 20 20 70 2d 3e 6e 43 75 72 73 6f 72 20 3d 20  .  p->nCursor = 
30e50 28 75 31 36 29 70 46 72 61 6d 65 2d 3e 6e 43 68  (u16)pFrame->nCh
30e60 69 6c 64 43 73 72 3b 0a 20 20 70 2d 3e 61 70 43  ildCsr;.  p->apC
30e70 73 72 20 3d 20 28 56 64 62 65 43 75 72 73 6f 72  sr = (VdbeCursor
30e80 20 2a 2a 29 26 61 4d 65 6d 5b 70 2d 3e 6e 4d 65   **)&aMem[p->nMe
30e90 6d 5d 3b 0a 20 20 70 2d 3e 61 4f 70 20 3d 20 61  m];.  p->aOp = a
30ea0 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 61  Op = pProgram->a
30eb0 4f 70 3b 0a 20 20 70 2d 3e 6e 4f 70 20 3d 20 70  Op;.  p->nOp = p
30ec0 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3b 0a 23 69  Program->nOp;.#i
30ed0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
30ee0 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54  LE_STMT_SCANSTAT
30ef0 55 53 0a 20 20 70 2d 3e 61 6e 45 78 65 63 20 3d  US.  p->anExec =
30f00 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20 70 4f 70   0;.#endif.  pOp
30f10 20 3d 20 26 61 4f 70 5b 2d 31 5d 3b 0a 0a 20 20   = &aOp[-1];..  
30f20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
30f30 6f 64 65 3a 20 50 61 72 61 6d 20 50 31 20 50 32  ode: Param P1 P2
30f40 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69   * * *.**.** Thi
30f50 73 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79  s opcode is only
30f60 20 65 76 65 72 20 70 72 65 73 65 6e 74 20 69 6e   ever present in
30f70 20 73 75 62 2d 70 72 6f 67 72 61 6d 73 20 63 61   sub-programs ca
30f80 6c 6c 65 64 20 76 69 61 20 74 68 65 20 0a 2a 2a  lled via the .**
30f90 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74   OP_Program inst
30fa0 72 75 63 74 69 6f 6e 2e 20 43 6f 70 79 20 61 20  ruction. Copy a 
30fb0 76 61 6c 75 65 20 63 75 72 72 65 6e 74 6c 79 20  value currently 
30fc0 73 74 6f 72 65 64 20 69 6e 20 61 20 6d 65 6d 6f  stored in a memo
30fd0 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 6f 66 20 74  ry .** cell of t
30fe0 68 65 20 63 61 6c 6c 69 6e 67 20 28 70 61 72 65  he calling (pare
30ff0 6e 74 29 20 66 72 61 6d 65 20 74 6f 20 63 65 6c  nt) frame to cel
31000 6c 20 50 32 20 69 6e 20 74 68 65 20 63 75 72 72  l P2 in the curr
31010 65 6e 74 20 66 72 61 6d 65 73 20 0a 2a 2a 20 61  ent frames .** a
31020 64 64 72 65 73 73 20 73 70 61 63 65 2e 20 54 68  ddress space. Th
31030 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74 72  is is used by tr
31040 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 20 74  igger programs t
31050 6f 20 61 63 63 65 73 73 20 74 68 65 20 6e 65 77  o access the new
31060 2e 2a 20 0a 2a 2a 20 61 6e 64 20 6f 6c 64 2e 2a  .* .** and old.*
31070 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 54   values..**.** T
31080 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 74 68  he address of th
31090 65 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 70 61  e cell in the pa
310a0 72 65 6e 74 20 66 72 61 6d 65 20 69 73 20 64 65  rent frame is de
310b0 74 65 72 6d 69 6e 65 64 20 62 79 20 61 64 64 69  termined by addi
310c0 6e 67 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20  ng.** the value 
310d0 6f 66 20 74 68 65 20 50 31 20 61 72 67 75 6d 65  of the P1 argume
310e0 6e 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  nt to the value 
310f0 6f 66 20 74 68 65 20 50 31 20 61 72 67 75 6d 65  of the P1 argume
31100 6e 74 20 74 6f 20 74 68 65 0a 2a 2a 20 63 61 6c  nt to the.** cal
31110 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d 20  ling OP_Program 
31120 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
31130 63 61 73 65 20 4f 50 5f 50 61 72 61 6d 3a 20 7b  case OP_Param: {
31140 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
31150 74 32 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d  t2 */.  VdbeFram
31160 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 4d 65 6d  e *pFrame;.  Mem
31170 20 2a 70 49 6e 3b 0a 20 20 70 4f 75 74 20 3d 20   *pIn;.  pOut = 
31180 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
31190 2c 20 70 4f 70 29 3b 0a 20 20 70 46 72 61 6d 65  , pOp);.  pFrame
311a0 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20   = p->pFrame;.  
311b0 70 49 6e 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61  pIn = &pFrame->a
311c0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 20 2b 20 70 46  Mem[pOp->p1 + pF
311d0 72 61 6d 65 2d 3e 61 4f 70 5b 70 46 72 61 6d 65  rame->aOp[pFrame
311e0 2d 3e 70 63 5d 2e 70 31 5d 3b 20 20 20 0a 20 20  ->pc].p1];   .  
311f0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68  sqlite3VdbeMemSh
31200 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20  allowCopy(pOut, 
31210 70 49 6e 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b  pIn, MEM_Ephem);
31220 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 65 6e  .  break;.}..#en
31230 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53  dif /* #ifndef S
31240 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
31250 45 52 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  ER */..#ifndef S
31260 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
31270 47 4e 5f 4b 45 59 0a 2f 2a 20 4f 70 63 6f 64 65  GN_KEY./* Opcode
31280 3a 20 46 6b 43 6f 75 6e 74 65 72 20 50 31 20 50  : FkCounter P1 P
31290 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
312a0 73 69 73 3a 20 66 6b 63 74 72 5b 50 31 5d 2b 3d  sis: fkctr[P1]+=
312b0 50 32 0a 2a 2a 0a 2a 2a 20 49 6e 63 72 65 6d 65  P2.**.** Increme
312c0 6e 74 20 61 20 22 63 6f 6e 73 74 72 61 69 6e 74  nt a "constraint
312d0 20 63 6f 75 6e 74 65 72 22 20 62 79 20 50 32 20   counter" by P2 
312e0 28 50 32 20 6d 61 79 20 62 65 20 6e 65 67 61 74  (P2 may be negat
312f0 69 76 65 20 6f 72 20 70 6f 73 69 74 69 76 65 29  ive or positive)
31300 2e 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f  ..** If P1 is no
31310 6e 2d 7a 65 72 6f 2c 20 74 68 65 20 64 61 74 61  n-zero, the data
31320 62 61 73 65 20 63 6f 6e 73 74 72 61 69 6e 74 20  base constraint 
31330 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63 72 65  counter is incre
31340 6d 65 6e 74 65 64 20 0a 2a 2a 20 28 64 65 66 65  mented .** (defe
31350 72 72 65 64 20 66 6f 72 65 69 67 6e 20 6b 65 79  rred foreign key
31360 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 20 4f   constraints). O
31370 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 31 20  therwise, if P1 
31380 69 73 20 7a 65 72 6f 2c 20 74 68 65 20 0a 2a 2a  is zero, the .**
31390 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 75 6e 74   statement count
313a0 65 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  er is incremente
313b0 64 20 28 69 6d 6d 65 64 69 61 74 65 20 66 6f 72  d (immediate for
313c0 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
313d0 69 6e 74 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ints)..*/.case O
313e0 50 5f 46 6b 43 6f 75 6e 74 65 72 3a 20 7b 0a 20  P_FkCounter: {. 
313f0 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20 26   if( db->flags &
31400 20 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73   SQLITE_DeferFKs
31410 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 44 65 66   ){.    db->nDef
31420 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 2b 3d 20  erredImmCons += 
31430 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65  pOp->p2;.  }else
31440 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a   if( pOp->p1 ){.
31450 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65      db->nDeferre
31460 64 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70 32  dCons += pOp->p2
31470 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
31480 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 20  ->nFkConstraint 
31490 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 0a  += pOp->p2;.  }.
314a0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
314b0 70 63 6f 64 65 3a 20 46 6b 49 66 5a 65 72 6f 20  pcode: FkIfZero 
314c0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
314d0 79 6e 6f 70 73 69 73 3a 20 69 66 20 66 6b 63 74  ynopsis: if fkct
314e0 72 5b 50 31 5d 3d 3d 30 20 67 6f 74 6f 20 50 32  r[P1]==0 goto P2
314f0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
31500 64 65 20 74 65 73 74 73 20 69 66 20 61 20 66 6f  de tests if a fo
31510 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
31520 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73 20  aint-counter is 
31530 63 75 72 72 65 6e 74 6c 79 20 7a 65 72 6f 2e 0a  currently zero..
31540 2a 2a 20 49 66 20 73 6f 2c 20 6a 75 6d 70 20 74  ** If so, jump t
31550 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32  o instruction P2
31560 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 66 61 6c  . Otherwise, fal
31570 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
31580 20 6e 65 78 74 20 0a 2a 2a 20 69 6e 73 74 72 75   next .** instru
31590 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ction..**.** If 
315a0 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  P1 is non-zero, 
315b0 74 68 65 6e 20 74 68 65 20 6a 75 6d 70 20 69 73  then the jump is
315c0 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20 64 61   taken if the da
315d0 74 61 62 61 73 65 20 63 6f 6e 73 74 72 61 69 6e  tabase constrain
315e0 74 2d 63 6f 75 6e 74 65 72 0a 2a 2a 20 69 73 20  t-counter.** is 
315f0 7a 65 72 6f 20 28 74 68 65 20 6f 6e 65 20 74 68  zero (the one th
31600 61 74 20 63 6f 75 6e 74 73 20 64 65 66 65 72 72  at counts deferr
31610 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  ed constraint vi
31620 6f 6c 61 74 69 6f 6e 73 29 2e 20 49 66 20 50 31  olations). If P1
31630 20 69 73 0a 2a 2a 20 7a 65 72 6f 2c 20 74 68 65   is.** zero, the
31640 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
31650 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  f the statement 
31660 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74  constraint-count
31670 65 72 20 69 73 20 7a 65 72 6f 0a 2a 2a 20 28 69  er is zero.** (i
31680 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e  mmediate foreign
31690 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20   key constraint 
316a0 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 0a 2a 2f 0a  violations)..*/.
316b0 63 61 73 65 20 4f 50 5f 46 6b 49 66 5a 65 72 6f  case OP_FkIfZero
316c0 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  : {         /* j
316d0 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70  ump */.  if( pOp
316e0 2d 3e 70 31 20 29 7b 0a 20 20 20 20 56 64 62 65  ->p1 ){.    Vdbe
316f0 42 72 61 6e 63 68 54 61 6b 65 6e 28 64 62 2d 3e  BranchTaken(db->
31700 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30  nDeferredCons==0
31710 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65   && db->nDeferre
31720 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32 29 3b  dImmCons==0, 2);
31730 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6e 44 65  .    if( db->nDe
31740 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30 20 26 26  ferredCons==0 &&
31750 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
31760 6d 43 6f 6e 73 3d 3d 30 20 29 20 67 6f 74 6f 20  mCons==0 ) goto 
31770 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65  jump_to_p2;.  }e
31780 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61  lse{.    VdbeBra
31790 6e 63 68 54 61 6b 65 6e 28 70 2d 3e 6e 46 6b 43  nchTaken(p->nFkC
317a0 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20 26 26 20  onstraint==0 && 
317b0 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  db->nDeferredImm
317c0 43 6f 6e 73 3d 3d 30 2c 20 32 29 3b 0a 20 20 20  Cons==0, 2);.   
317d0 20 69 66 28 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74   if( p->nFkConst
317e0 72 61 69 6e 74 3d 3d 30 20 26 26 20 64 62 2d 3e  raint==0 && db->
317f0 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
31800 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  ==0 ) goto jump_
31810 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65  to_p2;.  }.  bre
31820 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
31830 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
31840 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20  MIT_FOREIGN_KEY 
31850 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
31860 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52  TE_OMIT_AUTOINCR
31870 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a  EMENT./* Opcode:
31880 20 4d 65 6d 4d 61 78 20 50 31 20 50 32 20 2a 20   MemMax P1 P2 * 
31890 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
318a0 20 72 5b 50 31 5d 3d 6d 61 78 28 72 5b 50 31 5d   r[P1]=max(r[P1]
318b0 2c 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 50 31  ,r[P2]).**.** P1
318c0 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20 69   is a register i
318d0 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65  n the root frame
318e0 20 6f 66 20 74 68 69 73 20 56 4d 20 28 74 68 65   of this VM (the
318f0 20 72 6f 6f 74 20 66 72 61 6d 65 20 69 73 0a 2a   root frame is.*
31900 2a 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d  * different from
31910 20 74 68 65 20 63 75 72 72 65 6e 74 20 66 72 61   the current fra
31920 6d 65 20 69 66 20 74 68 69 73 20 69 6e 73 74 72  me if this instr
31930 75 63 74 69 6f 6e 20 69 73 20 62 65 69 6e 67 20  uction is being 
31940 65 78 65 63 75 74 65 64 0a 2a 2a 20 77 69 74 68  executed.** with
31950 69 6e 20 61 20 73 75 62 2d 70 72 6f 67 72 61 6d  in a sub-program
31960 29 2e 20 53 65 74 20 74 68 65 20 76 61 6c 75 65  ). Set the value
31970 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20   of register P1 
31980 74 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f  to the maximum o
31990 66 20 0a 2a 2a 20 69 74 73 20 63 75 72 72 65 6e  f .** its curren
319a0 74 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20  t value and the 
319b0 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
319c0 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  r P2..**.** This
319d0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 72   instruction thr
319e0 6f 77 73 20 61 6e 20 65 72 72 6f 72 20 69 66 20  ows an error if 
319f0 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  the memory cell 
31a00 69 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c 6c 79  is not initially
31a10 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a  .** an integer..
31a20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 65 6d 4d 61  */.case OP_MemMa
31a30 78 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69  x: {        /* i
31a40 6e 32 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d  n2 */.  VdbeFram
31a50 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69 66 28  e *pFrame;.  if(
31a60 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20   p->pFrame ){.  
31a70 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e    for(pFrame=p->
31a80 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e  pFrame; pFrame->
31a90 70 50 61 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d  pParent; pFrame=
31aa0 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29  pFrame->pParent)
31ab0 3b 0a 20 20 20 20 70 49 6e 31 20 3d 20 26 70 46  ;.    pIn1 = &pF
31ac0 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  rame->aMem[pOp->
31ad0 70 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  p1];.  }else{.  
31ae0 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
31af0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 0a 20 20 61  Op->p1];.  }.  a
31b00 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
31b10 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 73 71 6c  d(pIn1) );.  sql
31b20 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
31b30 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 70  erify(pIn1);.  p
31b40 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
31b50 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56  >p2];.  sqlite3V
31b60 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
31b70 28 70 49 6e 32 29 3b 0a 20 20 69 66 28 20 70 49  (pIn2);.  if( pI
31b80 6e 31 2d 3e 75 2e 69 3c 70 49 6e 32 2d 3e 75 2e  n1->u.i<pIn2->u.
31b90 69 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e  i){.    pIn1->u.
31ba0 69 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20  i = pIn2->u.i;. 
31bb0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
31bc0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
31bd0 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e  MIT_AUTOINCREMEN
31be0 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  T */../* Opcode:
31bf0 20 49 66 50 6f 73 20 50 31 20 50 32 20 50 33 20   IfPos P1 P2 P3 
31c00 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
31c10 20 69 66 20 72 5b 50 31 5d 3e 30 20 74 68 65 6e   if r[P1]>0 then
31c20 20 72 5b 50 31 5d 2d 3d 50 33 2c 20 67 6f 74 6f   r[P1]-=P3, goto
31c30 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74   P2.**.** Regist
31c40 65 72 20 50 31 20 6d 75 73 74 20 63 6f 6e 74 61  er P1 must conta
31c50 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a  in an integer..*
31c60 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 6f  * If the value o
31c70 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  f register P1 is
31c80 20 31 20 6f 72 20 67 72 65 61 74 65 72 2c 20 73   1 or greater, s
31c90 75 62 74 72 61 63 74 20 50 33 20 66 72 6f 6d 20  ubtract P3 from 
31ca0 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20  the.** value in 
31cb0 50 31 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20 50  P1 and jump to P
31cc0 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  2..**.** If the 
31cd0 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f 66  initial value of
31ce0 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
31cf0 6c 65 73 73 20 74 68 61 6e 20 31 2c 20 74 68 65  less than 1, the
31d00 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69  n the.** value i
31d10 73 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 20  s unchanged and 
31d20 63 6f 6e 74 72 6f 6c 20 70 61 73 73 65 73 20 74  control passes t
31d30 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
31d40 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  xt instruction..
31d50 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 50 6f 73  */.case OP_IfPos
31d60 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
31d70 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
31d80 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
31d90 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  1];.  assert( pI
31da0 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e  n1->flags&MEM_In
31db0 74 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  t );.  VdbeBranc
31dc0 68 54 61 6b 65 6e 28 20 70 49 6e 31 2d 3e 75 2e  hTaken( pIn1->u.
31dd0 69 3e 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70  i>0, 2);.  if( p
31de0 49 6e 31 2d 3e 75 2e 69 3e 30 20 29 7b 0a 20 20  In1->u.i>0 ){.  
31df0 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2d 3d 20 70    pIn1->u.i -= p
31e00 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 67 6f 74 6f  Op->p3;.    goto
31e10 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d   jump_to_p2;.  }
31e20 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
31e30 4f 70 63 6f 64 65 3a 20 4f 66 66 73 65 74 4c 69  Opcode: OffsetLi
31e40 6d 69 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  mit P1 P2 P3 * *
31e50 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
31e60 20 72 5b 50 31 5d 3e 30 20 74 68 65 6e 20 72 5b   r[P1]>0 then r[
31e70 50 32 5d 3d 72 5b 50 31 5d 2b 6d 61 78 28 30 2c  P2]=r[P1]+max(0,
31e80 72 5b 50 33 5d 29 20 65 6c 73 65 20 72 5b 50 32  r[P3]) else r[P2
31e90 5d 3d 28 2d 31 29 0a 2a 2a 0a 2a 2a 20 54 68 69  ]=(-1).**.** Thi
31ea0 73 20 6f 70 63 6f 64 65 20 70 65 72 66 6f 72 6d  s opcode perform
31eb0 73 20 61 20 63 6f 6d 6d 6f 6e 6c 79 20 75 73 65  s a commonly use
31ec0 64 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 61 73  d computation as
31ed0 73 6f 63 69 61 74 65 64 20 77 69 74 68 0a 2a 2a  sociated with.**
31ee0 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46 46 53 45   LIMIT and OFFSE
31ef0 54 20 70 72 6f 63 65 73 73 2e 20 20 72 5b 50 31  T process.  r[P1
31f00 5d 20 68 6f 6c 64 73 20 74 68 65 20 6c 69 6d 69  ] holds the limi
31f10 74 20 63 6f 75 6e 74 65 72 2e 20 20 72 5b 50 33  t counter.  r[P3
31f20 5d 0a 2a 2a 20 68 6f 6c 64 73 20 74 68 65 20 6f  ].** holds the o
31f30 66 66 73 65 74 20 63 6f 75 6e 74 65 72 2e 20 20  ffset counter.  
31f40 54 68 65 20 6f 70 63 6f 64 65 20 63 6f 6d 70 75  The opcode compu
31f50 74 65 73 20 74 68 65 20 63 6f 6d 62 69 6e 65 64  tes the combined
31f60 20 76 61 6c 75 65 0a 2a 2a 20 6f 66 20 74 68 65   value.** of the
31f70 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46 46 53 45   LIMIT and OFFSE
31f80 54 20 61 6e 64 20 73 74 6f 72 65 73 20 74 68 61  T and stores tha
31f90 74 20 76 61 6c 75 65 20 69 6e 20 72 5b 50 32 5d  t value in r[P2]
31fa0 2e 20 20 54 68 65 20 72 5b 50 32 5d 0a 2a 2a 20  .  The r[P2].** 
31fb0 76 61 6c 75 65 20 63 6f 6d 70 75 74 65 64 20 69  value computed i
31fc0 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62  s the total numb
31fd0 65 72 20 6f 66 20 72 6f 77 73 20 74 68 61 74 20  er of rows that 
31fe0 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62 65 0a  will need to be.
31ff0 2a 2a 20 76 69 73 69 74 65 64 20 69 6e 20 6f 72  ** visited in or
32000 64 65 72 20 74 6f 20 63 6f 6d 70 6c 65 74 65 20  der to complete 
32010 74 68 65 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a  the query..**.**
32020 20 49 66 20 72 5b 50 33 5d 20 69 73 20 7a 65 72   If r[P3] is zer
32030 6f 20 6f 72 20 6e 65 67 61 74 69 76 65 2c 20 74  o or negative, t
32040 68 61 74 20 6d 65 61 6e 73 20 74 68 65 72 65 20  hat means there 
32050 69 73 20 6e 6f 20 4f 46 46 53 45 54 0a 2a 2a 20  is no OFFSET.** 
32060 61 6e 64 20 72 5b 50 32 5d 20 69 73 20 73 65 74  and r[P2] is set
32070 20 74 6f 20 62 65 20 74 68 65 20 76 61 6c 75 65   to be the value
32080 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 2c 20 72   of the LIMIT, r
32090 5b 50 31 5d 2e 0a 2a 2a 0a 2a 2a 20 69 66 20 72  [P1]..**.** if r
320a0 5b 50 31 5d 20 69 73 20 7a 65 72 6f 20 6f 72 20  [P1] is zero or 
320b0 6e 65 67 61 74 69 76 65 2c 20 74 68 61 74 20 6d  negative, that m
320c0 65 61 6e 73 20 74 68 65 72 65 20 69 73 20 6e 6f  eans there is no
320d0 20 4c 49 4d 49 54 0a 2a 2a 20 61 6e 64 20 72 5b   LIMIT.** and r[
320e0 50 32 5d 20 69 73 20 73 65 74 20 74 6f 20 2d 31  P2] is set to -1
320f0 2e 20 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 77 69  . .**.** Otherwi
32100 73 65 2c 20 72 5b 50 32 5d 20 69 73 20 73 65 74  se, r[P2] is set
32110 20 74 6f 20 74 68 65 20 73 75 6d 20 6f 66 20 72   to the sum of r
32120 5b 50 31 5d 20 61 6e 64 20 72 5b 50 33 5d 2e 0a  [P1] and r[P3]..
32130 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 66 66 73 65  */.case OP_Offse
32140 74 4c 69 6d 69 74 3a 20 7b 20 20 20 20 2f 2a 20  tLimit: {    /* 
32150 69 6e 31 2c 20 6f 75 74 32 2c 20 69 6e 33 20 2a  in1, out2, in3 *
32160 2f 0a 20 20 69 36 34 20 78 3b 0a 20 20 70 49 6e  /.  i64 x;.  pIn
32170 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
32180 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d  1];.  pIn3 = &aM
32190 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70  em[pOp->p3];.  p
321a0 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
321b0 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
321c0 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
321d0 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b  ags & MEM_Int );
321e0 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d  .  assert( pIn3-
321f0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
32200 20 29 3b 0a 20 20 78 20 3d 20 70 49 6e 31 2d 3e   );.  x = pIn1->
32210 75 2e 69 3b 0a 20 20 69 66 28 20 78 3c 3d 30 20  u.i;.  if( x<=0 
32220 7c 7c 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74  || sqlite3AddInt
32230 36 34 28 26 78 2c 20 70 49 6e 33 2d 3e 75 2e 69  64(&x, pIn3->u.i
32240 3e 30 3f 70 49 6e 33 2d 3e 75 2e 69 3a 30 29 20  >0?pIn3->u.i:0) 
32250 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65  ){.    /* If the
32260 20 4c 49 4d 49 54 20 69 73 20 6c 65 73 73 20 74   LIMIT is less t
32270 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
32280 7a 65 72 6f 2c 20 6c 6f 6f 70 20 66 6f 72 65 76  zero, loop forev
32290 65 72 2e 20 20 54 68 69 73 0a 20 20 20 20 2a 2a  er.  This.    **
322a0 20 69 73 20 64 6f 63 75 6d 65 6e 74 65 64 2e 20   is documented. 
322b0 20 42 75 74 20 61 6c 73 6f 2c 20 69 66 20 74 68   But also, if th
322c0 65 20 4c 49 4d 49 54 2b 4f 46 46 53 45 54 20 65  e LIMIT+OFFSET e
322d0 78 63 65 65 64 73 20 32 5e 36 33 20 74 68 65 6e  xceeds 2^63 then
322e0 0a 20 20 20 20 2a 2a 20 61 6c 73 6f 20 6c 6f 6f  .    ** also loo
322f0 70 20 66 6f 72 65 76 65 72 2e 20 20 54 68 69 73  p forever.  This
32300 20 69 73 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64   is undocumented
32310 2e 20 20 49 6e 20 66 61 63 74 2c 20 6f 6e 65 20  .  In fact, one 
32320 63 6f 75 6c 64 20 61 72 67 75 65 0a 20 20 20 20  could argue.    
32330 2a 2a 20 74 68 61 74 20 74 68 65 20 6c 6f 6f 70  ** that the loop
32340 20 73 68 6f 75 6c 64 20 74 65 72 6d 69 6e 61 74   should terminat
32350 65 2e 20 20 42 75 74 20 61 73 73 75 6d 69 6e 67  e.  But assuming
32360 20 31 20 62 69 6c 6c 69 6f 6e 20 69 74 65 72 61   1 billion itera
32370 74 69 6f 6e 73 0a 20 20 20 20 2a 2a 20 70 65 72  tions.    ** per
32380 20 73 65 63 6f 6e 64 20 28 66 61 72 20 65 78 63   second (far exc
32390 65 65 64 69 6e 67 20 74 68 65 20 63 61 70 61 62  eeding the capab
323a0 69 6c 69 74 69 65 73 20 6f 66 20 61 6e 79 20 63  ilities of any c
323b0 75 72 72 65 6e 74 20 68 61 72 64 77 61 72 65 29  urrent hardware)
323c0 0a 20 20 20 20 2a 2a 20 69 74 20 77 6f 75 6c 64  .    ** it would
323d0 20 74 61 6b 65 20 6e 65 61 72 6c 79 20 33 30 30   take nearly 300
323e0 20 79 65 61 72 73 20 74 6f 20 61 63 74 75 61 6c   years to actual
323f0 6c 79 20 72 65 61 63 68 20 74 68 65 20 6c 69 6d  ly reach the lim
32400 69 74 2e 20 20 53 6f 0a 20 20 20 20 2a 2a 20 6c  it.  So.    ** l
32410 6f 6f 70 69 6e 67 20 66 6f 72 65 76 65 72 20 69  ooping forever i
32420 73 20 61 20 72 65 61 73 6f 6e 61 62 6c 65 20 61  s a reasonable a
32430 70 70 72 6f 78 69 6d 61 74 69 6f 6e 2e 20 2a 2f  pproximation. */
32440 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
32450 20 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20   -1;.  }else{.  
32460 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 78 3b    pOut->u.i = x;
32470 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
32480 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f  ./* Opcode: IfNo
32490 74 5a 65 72 6f 20 50 31 20 50 32 20 2a 20 2a 20  tZero P1 P2 * * 
324a0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
324b0 66 20 72 5b 50 31 5d 21 3d 30 20 74 68 65 6e 20  f r[P1]!=0 then 
324c0 72 5b 50 31 5d 2d 2d 2c 20 67 6f 74 6f 20 50 32  r[P1]--, goto P2
324d0 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  .**.** Register 
324e0 50 31 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20  P1 must contain 
324f0 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66 20  an integer.  If 
32500 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
32510 65 67 69 73 74 65 72 20 50 31 20 69 73 0a 2a 2a  egister P1 is.**
32520 20 69 6e 69 74 69 61 6c 6c 79 20 67 72 65 61 74   initially great
32530 65 72 20 74 68 61 6e 20 7a 65 72 6f 2c 20 74 68  er than zero, th
32540 65 6e 20 64 65 63 72 65 6d 65 6e 74 20 74 68 65  en decrement the
32550 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
32560 65 72 20 50 31 2e 0a 2a 2a 20 49 66 20 69 74 20  er P1..** If it 
32570 69 73 20 6e 6f 6e 2d 7a 65 72 6f 20 28 6e 65 67  is non-zero (neg
32580 61 74 69 76 65 20 6f 72 20 70 6f 73 69 74 69 76  ative or positiv
32590 65 29 20 61 6e 64 20 74 68 65 6e 20 61 6c 73 6f  e) and then also
325a0 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 0a 2a   jump to P2.  .*
325b0 2a 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31  * If register P1
325c0 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 20 7a 65   is initially ze
325d0 72 6f 2c 20 6c 65 61 76 65 20 69 74 20 75 6e 63  ro, leave it unc
325e0 68 61 6e 67 65 64 20 61 6e 64 20 66 61 6c 6c 20  hanged and fall 
325f0 74 68 72 6f 75 67 68 2e 0a 2a 2f 0a 63 61 73 65  through..*/.case
32600 20 4f 50 5f 49 66 4e 6f 74 5a 65 72 6f 3a 20 7b   OP_IfNotZero: {
32610 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
32620 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
32630 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
32640 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d  .  assert( pIn1-
32650 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29  >flags&MEM_Int )
32660 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
32670 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3c 30 2c  ken(pIn1->u.i<0,
32680 20 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d   2);.  if( pIn1-
32690 3e 75 2e 69 20 29 7b 0a 20 20 20 20 20 69 66 28  >u.i ){.     if(
326a0 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 20 29 20 70   pIn1->u.i>0 ) p
326b0 49 6e 31 2d 3e 75 2e 69 2d 2d 3b 0a 20 20 20 20  In1->u.i--;.    
326c0 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
326d0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
326e0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 63  ../* Opcode: Dec
326f0 72 4a 75 6d 70 5a 65 72 6f 20 50 31 20 50 32 20  rJumpZero P1 P2 
32700 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
32710 73 3a 20 69 66 20 28 2d 2d 72 5b 50 31 5d 29 3d  s: if (--r[P1])=
32720 3d 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  =0 goto P2.**.**
32730 20 52 65 67 69 73 74 65 72 20 50 31 20 6d 75 73   Register P1 mus
32740 74 20 68 6f 6c 64 20 61 6e 20 69 6e 74 65 67 65  t hold an intege
32750 72 2e 20 20 44 65 63 72 65 6d 65 6e 74 20 74 68  r.  Decrement th
32760 65 20 76 61 6c 75 65 20 69 6e 20 50 31 0a 2a 2a  e value in P1.**
32770 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20 50 32 20   and jump to P2 
32780 69 66 20 74 68 65 20 6e 65 77 20 76 61 6c 75 65  if the new value
32790 20 69 73 20 65 78 61 63 74 6c 79 20 7a 65 72 6f   is exactly zero
327a0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 63  ..*/.case OP_Dec
327b0 72 4a 75 6d 70 5a 65 72 6f 3a 20 7b 20 20 20 20  rJumpZero: {    
327c0 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
327d0 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
327e0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
327f0 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
32800 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 69 66  &MEM_Int );.  if
32810 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 53 4d 41 4c  ( pIn1->u.i>SMAL
32820 4c 45 53 54 5f 49 4e 54 36 34 20 29 20 70 49 6e  LEST_INT64 ) pIn
32830 31 2d 3e 75 2e 69 2d 2d 3b 0a 20 20 56 64 62 65  1->u.i--;.  Vdbe
32840 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 49 6e 31  BranchTaken(pIn1
32850 2d 3e 75 2e 69 3d 3d 30 2c 20 32 29 3b 0a 20 20  ->u.i==0, 2);.  
32860 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30  if( pIn1->u.i==0
32870 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f   ) goto jump_to_
32880 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  p2;.  break;.}..
32890 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 53  ./* Opcode: AggS
328a0 74 65 70 30 20 2a 20 50 32 20 50 33 20 50 34 20  tep0 * P2 P3 P4 
328b0 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
328c0 61 63 63 75 6d 3d 72 5b 50 33 5d 20 73 74 65 70  accum=r[P3] step
328d0 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a  (r[P2@P5]).**.**
328e0 20 45 78 65 63 75 74 65 20 74 68 65 20 73 74 65   Execute the ste
328f0 70 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61  p function for a
32900 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20 54 68  n aggregate.  Th
32910 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 68 61  e.** function ha
32920 73 20 50 35 20 61 72 67 75 6d 65 6e 74 73 2e 20  s P5 arguments. 
32930 20 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65    P4 is a pointe
32940 72 20 74 6f 20 74 68 65 20 46 75 6e 63 44 65 66  r to the FuncDef
32950 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 74 68  .** structure th
32960 61 74 20 73 70 65 63 69 66 69 65 73 20 74 68 65  at specifies the
32970 20 66 75 6e 63 74 69 6f 6e 2e 20 20 52 65 67 69   function.  Regi
32980 73 74 65 72 20 50 33 20 69 73 20 74 68 65 0a 2a  ster P3 is the.*
32990 2a 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a  * accumulator..*
329a0 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61 72 67 75  *.** The P5 argu
329b0 6d 65 6e 74 73 20 61 72 65 20 74 61 6b 65 6e 20  ments are taken 
329c0 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32  from register P2
329d0 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63 63   and its.** succ
329e0 65 73 73 6f 72 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70  essors..*/./* Op
329f0 63 6f 64 65 3a 20 41 67 67 53 74 65 70 20 2a 20  code: AggStep * 
32a00 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
32a10 79 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d 72  ynopsis: accum=r
32a20 5b 50 33 5d 20 73 74 65 70 28 72 5b 50 32 40 50  [P3] step(r[P2@P
32a30 35 5d 29 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74  5]).**.** Execut
32a40 65 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74  e the step funct
32a50 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67 72 65  ion for an aggre
32a60 67 61 74 65 2e 20 20 54 68 65 0a 2a 2a 20 66 75  gate.  The.** fu
32a70 6e 63 74 69 6f 6e 20 68 61 73 20 50 35 20 61 72  nction has P5 ar
32a80 67 75 6d 65 6e 74 73 2e 20 20 20 50 34 20 69 73  guments.   P4 is
32a90 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e   a pointer to an
32aa0 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
32ab0 0a 2a 2a 20 6f 62 6a 65 63 74 20 74 68 61 74 20  .** object that 
32ac0 69 73 20 75 73 65 64 20 74 6f 20 72 75 6e 20 74  is used to run t
32ad0 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20 52 65  he function.  Re
32ae0 67 69 73 74 65 72 20 50 33 20 69 73 0a 2a 2a 20  gister P3 is.** 
32af0 61 73 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74  as the accumulat
32b00 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35  or..**.** The P5
32b10 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74   arguments are t
32b20 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74  aken from regist
32b30 65 72 20 50 32 20 61 6e 64 20 69 74 73 0a 2a 2a  er P2 and its.**
32b40 20 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a 2a 0a   successors..**.
32b50 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
32b60 73 20 69 6e 69 74 69 61 6c 6c 79 20 63 6f 64 65  s initially code
32b70 64 20 61 73 20 4f 50 5f 41 67 67 53 74 65 70 30  d as OP_AggStep0
32b80 2e 20 20 4f 6e 20 66 69 72 73 74 20 65 76 61 6c  .  On first eval
32b90 75 61 74 69 6f 6e 2c 0a 2a 2a 20 74 68 65 20 46  uation,.** the F
32ba0 75 6e 63 44 65 66 20 73 74 6f 72 65 64 20 69 6e  uncDef stored in
32bb0 20 50 34 20 69 73 20 63 6f 6e 76 65 72 74 65 64   P4 is converted
32bc0 20 69 6e 74 6f 20 61 6e 20 73 71 6c 69 74 65 33   into an sqlite3
32bd0 5f 63 6f 6e 74 65 78 74 20 61 6e 64 0a 2a 2a 20  _context and.** 
32be0 74 68 65 20 6f 70 63 6f 64 65 20 69 73 20 63 68  the opcode is ch
32bf0 61 6e 67 65 64 2e 20 20 49 6e 20 74 68 69 73 20  anged.  In this 
32c00 77 61 79 2c 20 74 68 65 20 69 6e 69 74 69 61 6c  way, the initial
32c10 69 7a 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a  ization of the.*
32c20 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  * sqlite3_contex
32c30 74 20 6f 6e 6c 79 20 68 61 70 70 65 6e 73 20 6f  t only happens o
32c40 6e 63 65 2c 20 69 6e 73 74 65 61 64 20 6f 66 20  nce, instead of 
32c50 6f 6e 20 65 61 63 68 20 63 61 6c 6c 20 74 6f 20  on each call to 
32c60 74 68 65 0a 2a 2a 20 73 74 65 70 20 66 75 6e 63  the.** step func
32c70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
32c80 5f 41 67 67 53 74 65 70 30 3a 20 7b 0a 20 20 69  _AggStep0: {.  i
32c90 6e 74 20 6e 3b 0a 20 20 73 71 6c 69 74 65 33 5f  nt n;.  sqlite3_
32ca0 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 3b 0a 0a  context *pCtx;..
32cb0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
32cc0 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45  4type==P4_FUNCDE
32cd0 46 20 29 3b 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e  F );.  n = pOp->
32ce0 70 35 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  p5;.  assert( pO
32cf0 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
32d00 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  p3<=(p->nMem+1 -
32d10 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a   p->nCursor) );.
32d20 20 20 61 73 73 65 72 74 28 20 6e 3d 3d 30 20 7c    assert( n==0 |
32d30 7c 20 28 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20  | (pOp->p2>0 && 
32d40 70 4f 70 2d 3e 70 32 2b 6e 3c 3d 28 70 2d 3e 6e  pOp->p2+n<=(p->n
32d50 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
32d60 6f 72 29 2b 31 29 20 29 3b 0a 20 20 61 73 73 65  or)+1) );.  asse
32d70 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d  rt( pOp->p3<pOp-
32d80 3e 70 32 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d  >p2 || pOp->p3>=
32d90 70 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a 20 20 70  pOp->p2+n );.  p
32da0 43 74 78 20 3d 20 73 71 6c 69 74 65 33 44 62 4d  Ctx = sqlite3DbM
32db0 61 6c 6c 6f 63 52 61 77 4e 4e 28 64 62 2c 20 73  allocRawNN(db, s
32dc0 69 7a 65 6f 66 28 2a 70 43 74 78 29 20 2b 20 28  izeof(*pCtx) + (
32dd0 6e 2d 31 29 2a 73 69 7a 65 6f 66 28 73 71 6c 69  n-1)*sizeof(sqli
32de0 74 65 33 5f 76 61 6c 75 65 2a 29 29 3b 0a 20 20  te3_value*));.  
32df0 69 66 28 20 70 43 74 78 3d 3d 30 20 29 20 67 6f  if( pCtx==0 ) go
32e00 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 74  to no_mem;.  pCt
32e10 78 2d 3e 70 4d 65 6d 20 3d 20 30 3b 0a 20 20 70  x->pMem = 0;.  p
32e20 43 74 78 2d 3e 70 46 75 6e 63 20 3d 20 70 4f 70  Ctx->pFunc = pOp
32e30 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20 70 43  ->p4.pFunc;.  pC
32e40 74 78 2d 3e 69 4f 70 20 3d 20 28 69 6e 74 29 28  tx->iOp = (int)(
32e50 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 70 43  pOp - aOp);.  pC
32e60 74 78 2d 3e 70 56 64 62 65 20 3d 20 70 3b 0a 20  tx->pVdbe = p;. 
32e70 20 70 43 74 78 2d 3e 61 72 67 63 20 3d 20 6e 3b   pCtx->argc = n;
32e80 0a 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d  .  pOp->p4type =
32e90 20 50 34 5f 46 55 4e 43 43 54 58 3b 0a 20 20 70   P4_FUNCCTX;.  p
32ea0 4f 70 2d 3e 70 34 2e 70 43 74 78 20 3d 20 70 43  Op->p4.pCtx = pC
32eb0 74 78 3b 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64  tx;.  pOp->opcod
32ec0 65 20 3d 20 4f 50 5f 41 67 67 53 74 65 70 3b 0a  e = OP_AggStep;.
32ed0 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67    /* Fall throug
32ee0 68 20 69 6e 74 6f 20 4f 50 5f 41 67 67 53 74 65  h into OP_AggSte
32ef0 70 20 2a 2f 0a 7d 0a 63 61 73 65 20 4f 50 5f 41  p */.}.case OP_A
32f00 67 67 53 74 65 70 3a 20 7b 0a 20 20 69 6e 74 20  ggStep: {.  int 
32f10 69 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  i;.  sqlite3_con
32f20 74 65 78 74 20 2a 70 43 74 78 3b 0a 20 20 4d 65  text *pCtx;.  Me
32f30 6d 20 2a 70 4d 65 6d 3b 0a 20 20 4d 65 6d 20 74  m *pMem;.  Mem t
32f40 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
32f50 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e  ->p4type==P4_FUN
32f60 43 43 54 58 20 29 3b 0a 20 20 70 43 74 78 20 3d  CCTX );.  pCtx =
32f70 20 70 4f 70 2d 3e 70 34 2e 70 43 74 78 3b 0a 20   pOp->p4.pCtx;. 
32f80 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f   pMem = &aMem[pO
32f90 70 2d 3e 70 33 5d 3b 0a 0a 20 20 2f 2a 20 49 66  p->p3];..  /* If
32fa0 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69   this function i
32fb0 73 20 69 6e 73 69 64 65 20 6f 66 20 61 20 74 72  s inside of a tr
32fc0 69 67 67 65 72 2c 20 74 68 65 20 72 65 67 69 73  igger, the regis
32fd0 74 65 72 20 61 72 72 61 79 20 69 6e 20 61 4d 65  ter array in aMe
32fe0 6d 5b 5d 0a 20 20 2a 2a 20 6d 69 67 68 74 20 63  m[].  ** might c
32ff0 68 61 6e 67 65 20 66 72 6f 6d 20 6f 6e 65 20 65  hange from one e
33000 76 61 6c 75 61 74 69 6f 6e 20 74 6f 20 74 68 65  valuation to the
33010 20 6e 65 78 74 2e 20 20 54 68 65 20 6e 65 78 74   next.  The next
33020 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 0a 20   block of code. 
33030 20 2a 2a 20 63 68 65 63 6b 73 20 74 6f 20 73 65   ** checks to se
33040 65 20 69 66 20 74 68 65 20 72 65 67 69 73 74 65  e if the registe
33050 72 20 61 72 72 61 79 20 68 61 73 20 63 68 61 6e  r array has chan
33060 67 65 64 2c 20 61 6e 64 20 69 66 20 73 6f 20 69  ged, and if so i
33070 74 0a 20 20 2a 2a 20 72 65 69 6e 69 74 69 61 6c  t.  ** reinitial
33080 69 7a 65 73 20 74 68 65 20 72 65 6c 61 76 61 6e  izes the relavan
33090 74 20 70 61 72 74 73 20 6f 66 20 74 68 65 20 73  t parts of the s
330a0 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f  qlite3_context o
330b0 62 6a 65 63 74 20 2a 2f 0a 20 20 69 66 28 20 70  bject */.  if( p
330c0 43 74 78 2d 3e 70 4d 65 6d 20 21 3d 20 70 4d 65  Ctx->pMem != pMe
330d0 6d 20 29 7b 0a 20 20 20 20 70 43 74 78 2d 3e 70  m ){.    pCtx->p
330e0 4d 65 6d 20 3d 20 70 4d 65 6d 3b 0a 20 20 20 20  Mem = pMem;.    
330f0 66 6f 72 28 69 3d 70 43 74 78 2d 3e 61 72 67 63  for(i=pCtx->argc
33100 2d 31 3b 20 69 3e 3d 30 3b 20 69 2d 2d 29 20 70  -1; i>=0; i--) p
33110 43 74 78 2d 3e 61 72 67 76 5b 69 5d 20 3d 20 26  Ctx->argv[i] = &
33120 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 2b 69 5d 3b  aMem[pOp->p2+i];
33130 0a 20 20 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c  .  }..#ifdef SQL
33140 49 54 45 5f 44 45 42 55 47 0a 20 20 66 6f 72 28  ITE_DEBUG.  for(
33150 69 3d 30 3b 20 69 3c 70 43 74 78 2d 3e 61 72 67  i=0; i<pCtx->arg
33160 63 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 73 73  c; i++){.    ass
33170 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
33180 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d 29 20 29  pCtx->argv[i]) )
33190 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
331a0 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b 69 2c 20  RACE(pOp->p2+i, 
331b0 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d 29 3b 0a  pCtx->argv[i]);.
331c0 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 70 4d    }.#endif..  pM
331d0 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20 73 71 6c 69 74  em->n++;.  sqlit
331e0 65 33 56 64 62 65 4d 65 6d 49 6e 69 74 28 26 74  e3VdbeMemInit(&t
331f0 2c 20 64 62 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b  , db, MEM_Null);
33200 0a 20 20 70 43 74 78 2d 3e 70 4f 75 74 20 3d 20  .  pCtx->pOut = 
33210 26 74 3b 0a 20 20 70 43 74 78 2d 3e 66 45 72 72  &t;.  pCtx->fErr
33220 6f 72 4f 72 41 75 78 20 3d 20 30 3b 0a 20 20 70  orOrAux = 0;.  p
33230 43 74 78 2d 3e 73 6b 69 70 46 6c 61 67 20 3d 20  Ctx->skipFlag = 
33240 30 3b 0a 20 20 28 70 43 74 78 2d 3e 70 46 75 6e  0;.  (pCtx->pFun
33250 63 2d 3e 78 53 46 75 6e 63 29 28 70 43 74 78 2c  c->xSFunc)(pCtx,
33260 70 43 74 78 2d 3e 61 72 67 63 2c 70 43 74 78 2d  pCtx->argc,pCtx-
33270 3e 61 72 67 76 29 3b 20 2f 2a 20 49 4d 50 3a 20  >argv); /* IMP: 
33280 52 2d 32 34 35 30 35 2d 32 33 32 33 30 20 2a 2f  R-24505-23230 */
33290 0a 20 20 69 66 28 20 70 43 74 78 2d 3e 66 45 72  .  if( pCtx->fEr
332a0 72 6f 72 4f 72 41 75 78 20 29 7b 0a 20 20 20 20  rorOrAux ){.    
332b0 69 66 28 20 70 43 74 78 2d 3e 69 73 45 72 72 6f  if( pCtx->isErro
332c0 72 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  r ){.      sqlit
332d0 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22  e3VdbeError(p, "
332e0 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  %s", sqlite3_val
332f0 75 65 5f 74 65 78 74 28 26 74 29 29 3b 0a 20 20  ue_text(&t));.  
33300 20 20 20 20 72 63 20 3d 20 70 43 74 78 2d 3e 69      rc = pCtx->i
33310 73 45 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20  sError;.    }.  
33320 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
33330 52 65 6c 65 61 73 65 28 26 74 29 3b 0a 20 20 20  Release(&t);.   
33340 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
33350 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
33360 72 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  r;.  }else{.    
33370 61 73 73 65 72 74 28 20 74 2e 66 6c 61 67 73 3d  assert( t.flags=
33380 3d 4d 45 4d 5f 4e 75 6c 6c 20 29 3b 0a 20 20 7d  =MEM_Null );.  }
33390 0a 20 20 69 66 28 20 70 43 74 78 2d 3e 73 6b 69  .  if( pCtx->ski
333a0 70 46 6c 61 67 20 29 7b 0a 20 20 20 20 61 73 73  pFlag ){.    ass
333b0 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63  ert( pOp[-1].opc
333c0 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20  ode==OP_CollSeq 
333d0 29 3b 0a 20 20 20 20 69 20 3d 20 70 4f 70 5b 2d  );.    i = pOp[-
333e0 31 5d 2e 70 31 3b 0a 20 20 20 20 69 66 28 20 69  1].p1;.    if( i
333f0 20 29 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   ) sqlite3VdbeMe
33400 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b  mSetInt64(&aMem[
33410 69 5d 2c 20 31 29 3b 0a 20 20 7d 0a 20 20 62 72  i], 1);.  }.  br
33420 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
33430 65 3a 20 41 67 67 46 69 6e 61 6c 20 50 31 20 50  e: AggFinal P1 P
33440 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f  2 * P4 *.** Syno
33450 70 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50 31  psis: accum=r[P1
33460 5d 20 4e 3d 50 32 0a 2a 2a 0a 2a 2a 20 45 78 65  ] N=P2.**.** Exe
33470 63 75 74 65 20 74 68 65 20 66 69 6e 61 6c 69 7a  cute the finaliz
33480 65 72 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20  er function for 
33490 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20 50  an aggregate.  P
334a0 31 20 69 73 0a 2a 2a 20 74 68 65 20 6d 65 6d 6f  1 is.** the memo
334b0 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74  ry location that
334c0 20 69 73 20 74 68 65 20 61 63 63 75 6d 75 6c 61   is the accumula
334d0 74 6f 72 20 66 6f 72 20 74 68 65 20 61 67 67 72  tor for the aggr
334e0 65 67 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 32 20  egate..**.** P2 
334f0 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  is the number of
33500 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20   arguments that 
33510 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f  the step functio
33520 6e 20 74 61 6b 65 73 20 61 6e 64 0a 2a 2a 20 50  n takes and.** P
33530 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
33540 6f 20 74 68 65 20 46 75 6e 63 44 65 66 20 66 6f  o the FuncDef fo
33550 72 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 2e  r this function.
33560 20 20 54 68 65 20 50 32 0a 2a 2a 20 61 72 67 75    The P2.** argu
33570 6d 65 6e 74 20 69 73 20 6e 6f 74 20 75 73 65 64  ment is not used
33580 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 2e   by this opcode.
33590 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 74 68 65    It is only the
335a0 72 65 20 74 6f 20 64 69 73 61 6d 62 69 67 75 61  re to disambigua
335b0 74 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20  te.** functions 
335c0 74 68 61 74 20 63 61 6e 20 74 61 6b 65 20 76 61  that can take va
335d0 72 79 69 6e 67 20 6e 75 6d 62 65 72 73 20 6f 66  rying numbers of
335e0 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 54 68 65   arguments.  The
335f0 0a 2a 2a 20 50 34 20 61 72 67 75 6d 65 6e 74 20  .** P4 argument 
33600 69 73 20 6f 6e 6c 79 20 6e 65 65 64 65 64 20 66  is only needed f
33610 6f 72 20 74 68 65 20 64 65 67 65 6e 65 72 61 74  or the degenerat
33620 65 20 63 61 73 65 20 77 68 65 72 65 0a 2a 2a 20  e case where.** 
33630 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f  the step functio
33640 6e 20 77 61 73 20 6e 6f 74 20 70 72 65 76 69 6f  n was not previo
33650 75 73 6c 79 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a  usly called..*/.
33660 63 61 73 65 20 4f 50 5f 41 67 67 46 69 6e 61 6c  case OP_AggFinal
33670 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b  : {.  Mem *pMem;
33680 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
33690 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  p1>0 && pOp->p1<
336a0 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
336b0 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70  >nCursor) );.  p
336c0 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Mem = &aMem[pOp-
336d0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
336e0 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 7e  (pMem->flags & ~
336f0 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 41 67  (MEM_Null|MEM_Ag
33700 67 29 29 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d  g))==0 );.  rc =
33710 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46   sqlite3VdbeMemF
33720 69 6e 61 6c 69 7a 65 28 70 4d 65 6d 2c 20 70 4f  inalize(pMem, pO
33730 70 2d 3e 70 34 2e 70 46 75 6e 63 29 3b 0a 20 20  p->p4.pFunc);.  
33740 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 73 71  if( rc ){.    sq
33750 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70  lite3VdbeError(p
33760 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f  , "%s", sqlite3_
33770 76 61 6c 75 65 5f 74 65 78 74 28 70 4d 65 6d 29  value_text(pMem)
33780 29 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  );.    goto abor
33790 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
337a0 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62    }.  sqlite3Vdb
337b0 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
337c0 70 4d 65 6d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  pMem, encoding);
337d0 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
337e0 4f 42 53 49 5a 45 28 70 4d 65 6d 29 3b 0a 20 20  OBSIZE(pMem);.  
337f0 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d  if( sqlite3VdbeM
33800 65 6d 54 6f 6f 42 69 67 28 70 4d 65 6d 29 20 29  emTooBig(pMem) )
33810 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62  {.    goto too_b
33820 69 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  ig;.  }.  break;
33830 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .}..#ifndef SQLI
33840 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 2f 2a 20 4f  TE_OMIT_WAL./* O
33850 70 63 6f 64 65 3a 20 43 68 65 63 6b 70 6f 69 6e  pcode: Checkpoin
33860 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
33870 2a 0a 2a 2a 20 43 68 65 63 6b 70 6f 69 6e 74 20  *.** Checkpoint 
33880 64 61 74 61 62 61 73 65 20 50 31 2e 20 54 68 69  database P1. Thi
33890 73 20 69 73 20 61 20 6e 6f 2d 6f 70 20 69 66 20  s is a no-op if 
338a0 50 31 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e  P1 is not curren
338b0 74 6c 79 20 69 6e 0a 2a 2a 20 57 41 4c 20 6d 6f  tly in.** WAL mo
338c0 64 65 2e 20 50 61 72 61 6d 65 74 65 72 20 50 32  de. Parameter P2
338d0 20 69 73 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54   is one of SQLIT
338e0 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53  E_CHECKPOINT_PAS
338f0 53 49 56 45 2c 20 46 55 4c 4c 2c 0a 2a 2a 20 52  SIVE, FULL,.** R
33900 45 53 54 41 52 54 2c 20 6f 72 20 54 52 55 4e 43  ESTART, or TRUNC
33910 41 54 45 2e 20 20 57 72 69 74 65 20 31 20 6f 72  ATE.  Write 1 or
33920 20 30 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 5d 20   0 into mem[P3] 
33930 69 66 20 74 68 65 20 63 68 65 63 6b 70 6f 69 6e  if the checkpoin
33940 74 20 72 65 74 75 72 6e 73 0a 2a 2a 20 53 51 4c  t returns.** SQL
33950 49 54 45 5f 42 55 53 59 20 6f 72 20 6e 6f 74 2c  ITE_BUSY or not,
33960 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20   respectively.  
33970 57 72 69 74 65 20 74 68 65 20 6e 75 6d 62 65 72  Write the number
33980 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68 65   of pages in the
33990 0a 2a 2a 20 57 41 4c 20 61 66 74 65 72 20 74 68  .** WAL after th
339a0 65 20 63 68 65 63 6b 70 6f 69 6e 74 20 69 6e 74  e checkpoint int
339b0 6f 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 20  o mem[P3+1] and 
339c0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  the number of pa
339d0 67 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 57 41  ges.** in the WA
339e0 4c 20 74 68 61 74 20 68 61 76 65 20 62 65 65 6e  L that have been
339f0 20 63 68 65 63 6b 70 6f 69 6e 74 65 64 20 61 66   checkpointed af
33a00 74 65 72 20 74 68 65 20 63 68 65 63 6b 70 6f 69  ter the checkpoi
33a10 6e 74 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 73 20  nt.** completes 
33a20 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b 32 5d 2e 20  into mem[P3+2]. 
33a30 20 48 6f 77 65 76 65 72 20 6f 6e 20 61 6e 20 65   However on an e
33a40 72 72 6f 72 2c 20 6d 65 6d 5b 50 33 2b 31 5d 20  rror, mem[P3+1] 
33a50 61 6e 64 0a 2a 2a 20 6d 65 6d 5b 50 33 2b 32 5d  and.** mem[P3+2]
33a60 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65 64   are initialized
33a70 20 74 6f 20 2d 31 2e 0a 2a 2f 0a 63 61 73 65 20   to -1..*/.case 
33a80 4f 50 5f 43 68 65 63 6b 70 6f 69 6e 74 3a 20 7b  OP_Checkpoint: {
33a90 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20  .  int i;       
33aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33ab0 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74     /* Loop count
33ac0 65 72 20 2a 2f 0a 20 20 69 6e 74 20 61 52 65 73  er */.  int aRes
33ad0 5b 33 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20  [3];            
33ae0 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c          /* Resul
33af0 74 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65  ts */.  Mem *pMe
33b00 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
33b10 20 20 20 20 20 20 20 20 2f 2a 20 57 72 69 74 65          /* Write
33b20 20 72 65 73 75 6c 74 73 20 68 65 72 65 20 2a 2f   results here */
33b30 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  ..  assert( p->r
33b40 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20  eadOnly==0 );.  
33b50 61 52 65 73 5b 30 5d 20 3d 20 30 3b 0a 20 20 61  aRes[0] = 0;.  a
33b60 52 65 73 5b 31 5d 20 3d 20 61 52 65 73 5b 32 5d  Res[1] = aRes[2]
33b70 20 3d 20 2d 31 3b 0a 20 20 61 73 73 65 72 74 28   = -1;.  assert(
33b80 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45   pOp->p2==SQLITE
33b90 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53  _CHECKPOINT_PASS
33ba0 49 56 45 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f  IVE.       || pO
33bb0 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48  p->p2==SQLITE_CH
33bc0 45 43 4b 50 4f 49 4e 54 5f 46 55 4c 4c 0a 20 20  ECKPOINT_FULL.  
33bd0 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d       || pOp->p2=
33be0 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49  =SQLITE_CHECKPOI
33bf0 4e 54 5f 52 45 53 54 41 52 54 0a 20 20 20 20 20  NT_RESTART.     
33c00 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51    || pOp->p2==SQ
33c10 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f  LITE_CHECKPOINT_
33c20 54 52 55 4e 43 41 54 45 0a 20 20 29 3b 0a 20 20  TRUNCATE.  );.  
33c30 72 63 20 3d 20 73 71 6c 69 74 65 33 43 68 65 63  rc = sqlite3Chec
33c40 6b 70 6f 69 6e 74 28 64 62 2c 20 70 4f 70 2d 3e  kpoint(db, pOp->
33c50 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 26 61 52  p1, pOp->p2, &aR
33c60 65 73 5b 31 5d 2c 20 26 61 52 65 73 5b 32 5d 29  es[1], &aRes[2])
33c70 3b 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20  ;.  if( rc ){.  
33c80 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
33c90 5f 42 55 53 59 20 29 20 67 6f 74 6f 20 61 62 6f  _BUSY ) goto abo
33ca0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
33cb0 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
33cc0 5f 4f 4b 3b 0a 20 20 20 20 61 52 65 73 5b 30 5d  _OK;.    aRes[0]
33cd0 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 66 6f 72 28   = 1;.  }.  for(
33ce0 69 3d 30 2c 20 70 4d 65 6d 20 3d 20 26 61 4d 65  i=0, pMem = &aMe
33cf0 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 20 69 3c 33 3b  m[pOp->p3]; i<3;
33d00 20 69 2b 2b 2c 20 70 4d 65 6d 2b 2b 29 7b 0a 20   i++, pMem++){. 
33d10 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
33d20 6d 53 65 74 49 6e 74 36 34 28 70 4d 65 6d 2c 20  mSetInt64(pMem, 
33d30 28 69 36 34 29 61 52 65 73 5b 69 5d 29 3b 0a 20  (i64)aRes[i]);. 
33d40 20 7d 20 20 20 20 0a 20 20 62 72 65 61 6b 3b 0a   }    .  break;.
33d50 7d 3b 20 20 0a 23 65 6e 64 69 66 0a 0a 23 69 66  };  .#endif..#if
33d60 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
33d70 5f 50 52 41 47 4d 41 0a 2f 2a 20 4f 70 63 6f 64  _PRAGMA./* Opcod
33d80 65 3a 20 4a 6f 75 72 6e 61 6c 4d 6f 64 65 20 50  e: JournalMode P
33d90 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
33da0 2a 20 43 68 61 6e 67 65 20 74 68 65 20 6a 6f 75  * Change the jou
33db0 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20 64 61 74  rnal mode of dat
33dc0 61 62 61 73 65 20 50 31 20 74 6f 20 50 33 2e 20  abase P1 to P3. 
33dd0 50 33 20 6d 75 73 74 20 62 65 20 6f 6e 65 20 6f  P3 must be one o
33de0 66 20 74 68 65 0a 2a 2a 20 50 41 47 45 52 5f 4a  f the.** PAGER_J
33df0 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58 58 58 20 76  OURNALMODE_XXX v
33e00 61 6c 75 65 73 2e 20 49 66 20 63 68 61 6e 67 69  alues. If changi
33e10 6e 67 20 62 65 74 77 65 65 6e 20 74 68 65 20 76  ng between the v
33e20 61 72 69 6f 75 73 20 72 6f 6c 6c 62 61 63 6b 0a  arious rollback.
33e30 2a 2a 20 6d 6f 64 65 73 20 28 64 65 6c 65 74 65  ** modes (delete
33e40 2c 20 74 72 75 6e 63 61 74 65 2c 20 70 65 72 73  , truncate, pers
33e50 69 73 74 2c 20 6f 66 66 20 61 6e 64 20 6d 65 6d  ist, off and mem
33e60 6f 72 79 29 2c 20 74 68 69 73 20 69 73 20 61 20  ory), this is a 
33e70 73 69 6d 70 6c 65 0a 2a 2a 20 6f 70 65 72 61 74  simple.** operat
33e80 69 6f 6e 2e 20 4e 6f 20 49 4f 20 69 73 20 72 65  ion. No IO is re
33e90 71 75 69 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66  quired..**.** If
33ea0 20 63 68 61 6e 67 69 6e 67 20 69 6e 74 6f 20 6f   changing into o
33eb0 72 20 6f 75 74 20 6f 66 20 57 41 4c 20 6d 6f 64  r out of WAL mod
33ec0 65 20 74 68 65 20 70 72 6f 63 65 64 75 72 65 20  e the procedure 
33ed0 69 73 20 6d 6f 72 65 20 63 6f 6d 70 6c 69 63 61  is more complica
33ee0 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65  ted..**.** Write
33ef0 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69   a string contai
33f00 6e 69 6e 67 20 74 68 65 20 66 69 6e 61 6c 20 6a  ning the final j
33f10 6f 75 72 6e 61 6c 2d 6d 6f 64 65 20 74 6f 20 72  ournal-mode to r
33f20 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63  egister P2..*/.c
33f30 61 73 65 20 4f 50 5f 4a 6f 75 72 6e 61 6c 4d 6f  ase OP_JournalMo
33f40 64 65 3a 20 7b 20 20 20 20 2f 2a 20 6f 75 74 32  de: {    /* out2
33f50 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74   */.  Btree *pBt
33f60 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
33f70 20 20 20 20 20 20 2f 2a 20 42 74 72 65 65 20 74        /* Btree t
33f80 6f 20 63 68 61 6e 67 65 20 6a 6f 75 72 6e 61 6c  o change journal
33f90 20 6d 6f 64 65 20 6f 66 20 2a 2f 0a 20 20 50 61   mode of */.  Pa
33fa0 67 65 72 20 2a 70 50 61 67 65 72 3b 20 20 20 20  ger *pPager;    
33fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
33fc0 20 50 61 67 65 72 20 61 73 73 6f 63 69 61 74 65   Pager associate
33fd0 64 20 77 69 74 68 20 70 42 74 20 2a 2f 0a 20 20  d with pBt */.  
33fe0 69 6e 74 20 65 4e 65 77 3b 20 20 20 20 20 20 20  int eNew;       
33ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34000 2f 2a 20 4e 65 77 20 6a 6f 75 72 6e 61 6c 20 6d  /* New journal m
34010 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 65 4f 6c  ode */.  int eOl
34020 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
34030 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
34040 6f 6c 64 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65  old journal mode
34050 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
34060 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 63 6f  TE_OMIT_WAL.  co
34070 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e  nst char *zFilen
34080 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ame;          /*
34090 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62 61 73   Name of databas
340a0 65 20 66 69 6c 65 20 66 6f 72 20 70 50 61 67 65  e file for pPage
340b0 72 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 20 20 70  r */.#endif..  p
340c0 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
340d0 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
340e0 65 4e 65 77 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  eNew = pOp->p3;.
340f0 20 20 61 73 73 65 72 74 28 20 65 4e 65 77 3d 3d    assert( eNew==
34100 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
34110 45 5f 44 45 4c 45 54 45 20 0a 20 20 20 20 20 20  E_DELETE .      
34120 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f   || eNew==PAGER_
34130 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 54 52 55 4e  JOURNALMODE_TRUN
34140 43 41 54 45 20 0a 20 20 20 20 20 20 20 7c 7c 20  CATE .       || 
34150 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
34160 4e 41 4c 4d 4f 44 45 5f 50 45 52 53 49 53 54 20  NALMODE_PERSIST 
34170 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d  .       || eNew=
34180 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
34190 44 45 5f 4f 46 46 0a 20 20 20 20 20 20 20 7c 7c  DE_OFF.       ||
341a0 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
341b0 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 0a  RNALMODE_MEMORY.
341c0 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d         || eNew==
341d0 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
341e0 45 5f 57 41 4c 0a 20 20 20 20 20 20 20 7c 7c 20  E_WAL.       || 
341f0 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
34200 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 0a 20 20  NALMODE_QUERY.  
34210 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
34220 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
34230 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
34240 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
34250 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 70 42 74  nly==0 );..  pBt
34260 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e   = db->aDb[pOp->
34270 70 31 5d 2e 70 42 74 3b 0a 20 20 70 50 61 67 65  p1].pBt;.  pPage
34280 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  r = sqlite3Btree
34290 50 61 67 65 72 28 70 42 74 29 3b 0a 20 20 65 4f  Pager(pBt);.  eO
342a0 6c 64 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65  ld = sqlite3Page
342b0 72 47 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28  rGetJournalMode(
342c0 70 50 61 67 65 72 29 3b 0a 20 20 69 66 28 20 65  pPager);.  if( e
342d0 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
342e0 41 4c 4d 4f 44 45 5f 51 55 45 52 59 20 29 20 65  ALMODE_QUERY ) e
342f0 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 69 66  New = eOld;.  if
34300 28 20 21 73 71 6c 69 74 65 33 50 61 67 65 72 4f  ( !sqlite3PagerO
34310 6b 54 6f 43 68 61 6e 67 65 4a 6f 75 72 6e 61 6c  kToChangeJournal
34320 4d 6f 64 65 28 70 50 61 67 65 72 29 20 29 20 65  Mode(pPager) ) e
34330 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 0a 23 69 66  New = eOld;..#if
34340 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
34350 5f 57 41 4c 0a 20 20 7a 46 69 6c 65 6e 61 6d 65  _WAL.  zFilename
34360 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 46   = sqlite3PagerF
34370 69 6c 65 6e 61 6d 65 28 70 50 61 67 65 72 2c 20  ilename(pPager, 
34380 31 29 3b 0a 0a 20 20 2f 2a 20 44 6f 20 6e 6f 74  1);..  /* Do not
34390 20 61 6c 6c 6f 77 20 61 20 74 72 61 6e 73 69 74   allow a transit
343a0 69 6f 6e 20 74 6f 20 6a 6f 75 72 6e 61 6c 5f 6d  ion to journal_m
343b0 6f 64 65 3d 57 41 4c 20 66 6f 72 20 61 20 64 61  ode=WAL for a da
343c0 74 61 62 61 73 65 0a 20 20 2a 2a 20 69 6e 20 74  tabase.  ** in t
343d0 65 6d 70 6f 72 61 72 79 20 73 74 6f 72 61 67 65  emporary storage
343e0 20 6f 72 20 69 66 20 74 68 65 20 56 46 53 20 64   or if the VFS d
343f0 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 20  oes not support 
34400 73 68 61 72 65 64 20 6d 65 6d 6f 72 79 20 0a 20  shared memory . 
34410 20 2a 2f 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d   */.  if( eNew==
34420 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
34430 45 5f 57 41 4c 0a 20 20 20 26 26 20 28 73 71 6c  E_WAL.   && (sql
34440 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 46 69  ite3Strlen30(zFi
34450 6c 65 6e 61 6d 65 29 3d 3d 30 20 20 20 20 20 20  lename)==0      
34460 20 20 20 20 20 2f 2a 20 54 65 6d 70 20 66 69 6c       /* Temp fil
34470 65 20 2a 2f 0a 20 20 20 20 20 20 20 7c 7c 20 21  e */.       || !
34480 73 71 6c 69 74 65 33 50 61 67 65 72 57 61 6c 53  sqlite3PagerWalS
34490 75 70 70 6f 72 74 65 64 28 70 50 61 67 65 72 29  upported(pPager)
344a0 29 20 20 20 2f 2a 20 4e 6f 20 73 68 61 72 65 64  )   /* No shared
344b0 2d 6d 65 6d 6f 72 79 20 73 75 70 70 6f 72 74 20  -memory support 
344c0 2a 2f 0a 20 20 29 7b 0a 20 20 20 20 65 4e 65 77  */.  ){.    eNew
344d0 20 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a 0a 20 20   = eOld;.  }..  
344e0 69 66 28 20 28 65 4e 65 77 21 3d 65 4f 6c 64 29  if( (eNew!=eOld)
344f0 0a 20 20 20 26 26 20 28 65 4f 6c 64 3d 3d 50 41  .   && (eOld==PA
34500 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
34510 57 41 4c 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47  WAL || eNew==PAG
34520 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57  ER_JOURNALMODE_W
34530 41 4c 29 0a 20 20 29 7b 0a 20 20 20 20 69 66 28  AL).  ){.    if(
34540 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74   !db->autoCommit
34550 20 7c 7c 20 64 62 2d 3e 6e 56 64 62 65 52 65 61   || db->nVdbeRea
34560 64 3e 31 20 29 7b 0a 20 20 20 20 20 20 72 63 20  d>1 ){.      rc 
34570 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
34580 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
34590 65 45 72 72 6f 72 28 70 2c 0a 20 20 20 20 20 20  eError(p,.      
345a0 20 20 20 20 22 63 61 6e 6e 6f 74 20 63 68 61 6e      "cannot chan
345b0 67 65 20 25 73 20 77 61 6c 20 6d 6f 64 65 20 66  ge %s wal mode f
345c0 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 74 72 61  rom within a tra
345d0 6e 73 61 63 74 69 6f 6e 22 2c 0a 20 20 20 20 20  nsaction",.     
345e0 20 20 20 20 20 28 65 4e 65 77 3d 3d 50 41 47 45       (eNew==PAGE
345f0 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41  R_JOURNALMODE_WA
34600 4c 20 3f 20 22 69 6e 74 6f 22 20 3a 20 22 6f 75  L ? "into" : "ou
34610 74 20 6f 66 22 29 0a 20 20 20 20 20 20 29 3b 0a  t of").      );.
34620 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
34630 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
34640 20 20 20 7d 65 6c 73 65 7b 0a 20 0a 20 20 20 20     }else{. .    
34650 20 20 69 66 28 20 65 4f 6c 64 3d 3d 50 41 47 45    if( eOld==PAGE
34660 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41  R_JOURNALMODE_WA
34670 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  L ){.        /* 
34680 49 66 20 6c 65 61 76 69 6e 67 20 57 41 4c 20 6d  If leaving WAL m
34690 6f 64 65 2c 20 63 6c 6f 73 65 20 74 68 65 20 6c  ode, close the l
346a0 6f 67 20 66 69 6c 65 2e 20 49 66 20 73 75 63 63  og file. If succ
346b0 65 73 73 66 75 6c 2c 20 74 68 65 20 63 61 6c 6c  essful, the call
346c0 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 6f 20 50  .        ** to P
346d0 61 67 65 72 43 6c 6f 73 65 57 61 6c 28 29 20 63  agerCloseWal() c
346e0 68 65 63 6b 70 6f 69 6e 74 73 20 61 6e 64 20 64  heckpoints and d
346f0 65 6c 65 74 65 73 20 74 68 65 20 77 72 69 74 65  eletes the write
34700 2d 61 68 65 61 64 2d 6c 6f 67 20 0a 20 20 20 20  -ahead-log .    
34710 20 20 20 20 2a 2a 20 66 69 6c 65 2e 20 41 6e 20      ** file. An 
34720 45 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b 20 6d  EXCLUSIVE lock m
34730 61 79 20 73 74 69 6c 6c 20 62 65 20 68 65 6c 64  ay still be held
34740 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   on the database
34750 20 66 69 6c 65 20 0a 20 20 20 20 20 20 20 20 2a   file .        *
34760 2a 20 61 66 74 65 72 20 61 20 73 75 63 63 65 73  * after a succes
34770 73 66 75 6c 20 72 65 74 75 72 6e 2e 20 0a 20 20  sful return. .  
34780 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20        */.       
34790 20 72 63 20 3d 20 73 71 6c 69 74 65 33 50 61 67   rc = sqlite3Pag
347a0 65 72 43 6c 6f 73 65 57 61 6c 28 70 50 61 67 65  erCloseWal(pPage
347b0 72 2c 20 64 62 29 3b 0a 20 20 20 20 20 20 20 20  r, db);.        
347c0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
347d0 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73  K ){.          s
347e0 71 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f  qlite3PagerSetJo
347f0 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72  urnalMode(pPager
34800 2c 20 65 4e 65 77 29 3b 0a 20 20 20 20 20 20 20  , eNew);.       
34810 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69   }.      }else i
34820 66 28 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a  f( eOld==PAGER_J
34830 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52  OURNALMODE_MEMOR
34840 59 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  Y ){.        /* 
34850 43 61 6e 6e 6f 74 20 74 72 61 6e 73 69 74 69 6f  Cannot transitio
34860 6e 20 64 69 72 65 63 74 6c 79 20 66 72 6f 6d 20  n directly from 
34870 4d 45 4d 4f 52 59 20 74 6f 20 57 41 4c 2e 20 20  MEMORY to WAL.  
34880 55 73 65 20 6d 6f 64 65 20 4f 46 46 0a 20 20 20  Use mode OFF.   
34890 20 20 20 20 20 2a 2a 20 61 73 20 61 6e 20 69 6e       ** as an in
348a0 74 65 72 6d 65 64 69 61 74 65 20 2a 2f 0a 20 20  termediate */.  
348b0 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61 67        sqlite3Pag
348c0 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65  erSetJournalMode
348d0 28 70 50 61 67 65 72 2c 20 50 41 47 45 52 5f 4a  (pPager, PAGER_J
348e0 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 29 3b  OURNALMODE_OFF);
348f0 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20  .      }.  .    
34900 20 20 2f 2a 20 4f 70 65 6e 20 61 20 74 72 61 6e    /* Open a tran
34910 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 20 64  saction on the d
34920 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 52 65  atabase file. Re
34930 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20  gardless of the 
34940 6a 6f 75 72 6e 61 6c 0a 20 20 20 20 20 20 2a 2a  journal.      **
34950 20 6d 6f 64 65 2c 20 74 68 69 73 20 74 72 61 6e   mode, this tran
34960 73 61 63 74 69 6f 6e 20 61 6c 77 61 79 73 20 75  saction always u
34970 73 65 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a  ses a rollback j
34980 6f 75 72 6e 61 6c 2e 0a 20 20 20 20 20 20 2a 2f  ournal..      */
34990 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73  .      assert( s
349a0 71 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e 54  qlite3BtreeIsInT
349b0 72 61 6e 73 28 70 42 74 29 3d 3d 30 20 29 3b 0a  rans(pBt)==0 );.
349c0 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
349d0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
349e0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
349f0 74 72 65 65 53 65 74 56 65 72 73 69 6f 6e 28 70  treeSetVersion(p
34a00 42 74 2c 20 28 65 4e 65 77 3d 3d 50 41 47 45 52  Bt, (eNew==PAGER
34a10 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c  _JOURNALMODE_WAL
34a20 20 3f 20 32 20 3a 20 31 29 29 3b 0a 20 20 20 20   ? 2 : 1));.    
34a30 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65    }.    }.  }.#e
34a40 6e 64 69 66 20 2f 2a 20 69 66 6e 64 65 66 20 53  ndif /* ifndef S
34a50 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 20 2a  QLITE_OMIT_WAL *
34a60 2f 0a 0a 20 20 69 66 28 20 72 63 20 29 20 65 4e  /..  if( rc ) eN
34a70 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 65 4e 65  ew = eOld;.  eNe
34a80 77 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72  w = sqlite3Pager
34a90 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70  SetJournalMode(p
34aa0 50 61 67 65 72 2c 20 65 4e 65 77 29 3b 0a 0a 20  Pager, eNew);.. 
34ab0 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
34ac0 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69  EM_Str|MEM_Stati
34ad0 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f  c|MEM_Term;.  pO
34ae0 75 74 2d 3e 7a 20 3d 20 28 63 68 61 72 20 2a 29  ut->z = (char *)
34af0 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f  sqlite3JournalMo
34b00 64 65 6e 61 6d 65 28 65 4e 65 77 29 3b 0a 20 20  dename(eNew);.  
34b10 70 4f 75 74 2d 3e 6e 20 3d 20 73 71 6c 69 74 65  pOut->n = sqlite
34b20 33 53 74 72 6c 65 6e 33 30 28 70 4f 75 74 2d 3e  3Strlen30(pOut->
34b30 7a 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20  z);.  pOut->enc 
34b40 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 0a 20  = SQLITE_UTF8;. 
34b50 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
34b60 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c  geEncoding(pOut,
34b70 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 69 66   encoding);.  if
34b80 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
34b90 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
34ba0 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a 23 65 6e 64    break;.};.#end
34bb0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
34bc0 54 5f 50 52 41 47 4d 41 20 2a 2f 0a 0a 23 69 66  T_PRAGMA */..#if
34bd0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
34be0 5f 4f 4d 49 54 5f 56 41 43 55 55 4d 29 20 26 26  _OMIT_VACUUM) &&
34bf0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
34c00 5f 4f 4d 49 54 5f 41 54 54 41 43 48 29 0a 2f 2a  _OMIT_ATTACH)./*
34c10 20 4f 70 63 6f 64 65 3a 20 56 61 63 75 75 6d 20   Opcode: Vacuum 
34c20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
34c30 20 56 61 63 75 75 6d 20 74 68 65 20 65 6e 74 69   Vacuum the enti
34c40 72 65 20 64 61 74 61 62 61 73 65 20 50 31 2e 20  re database P1. 
34c50 20 50 31 20 69 73 20 30 20 66 6f 72 20 22 6d 61   P1 is 0 for "ma
34c60 69 6e 22 2c 20 61 6e 64 20 32 20 6f 72 20 6d 6f  in", and 2 or mo
34c70 72 65 0a 2a 2a 20 66 6f 72 20 61 6e 20 61 74 74  re.** for an att
34c80 61 63 68 65 64 20 64 61 74 61 62 61 73 65 2e 20  ached database. 
34c90 20 54 68 65 20 22 74 65 6d 70 22 20 64 61 74 61   The "temp" data
34ca0 62 61 73 65 20 6d 61 79 20 6e 6f 74 20 62 65 20  base may not be 
34cb0 76 61 63 75 75 6d 65 64 2e 0a 2a 2f 0a 63 61 73  vacuumed..*/.cas
34cc0 65 20 4f 50 5f 56 61 63 75 75 6d 3a 20 7b 0a 20  e OP_Vacuum: {. 
34cd0 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
34ce0 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 72 63 20  Only==0 );.  rc 
34cf0 3d 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75  = sqlite3RunVacu
34d00 75 6d 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  um(&p->zErrMsg, 
34d10 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20  db, pOp->p1);.  
34d20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
34d30 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
34d40 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
34d50 64 69 66 0a 0a 23 69 66 20 21 64 65 66 69 6e 65  dif..#if !define
34d60 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  d(SQLITE_OMIT_AU
34d70 54 4f 56 41 43 55 55 4d 29 0a 2f 2a 20 4f 70 63  TOVACUUM)./* Opc
34d80 6f 64 65 3a 20 49 6e 63 72 56 61 63 75 75 6d 20  ode: IncrVacuum 
34d90 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
34da0 2a 20 50 65 72 66 6f 72 6d 20 61 20 73 69 6e 67  * Perform a sing
34db0 6c 65 20 73 74 65 70 20 6f 66 20 74 68 65 20 69  le step of the i
34dc0 6e 63 72 65 6d 65 6e 74 61 6c 20 76 61 63 75 75  ncremental vacuu
34dd0 6d 20 70 72 6f 63 65 64 75 72 65 20 6f 6e 0a 2a  m procedure on.*
34de0 2a 20 74 68 65 20 50 31 20 64 61 74 61 62 61 73  * the P1 databas
34df0 65 2e 20 49 66 20 74 68 65 20 76 61 63 75 75 6d  e. If the vacuum
34e00 20 68 61 73 20 66 69 6e 69 73 68 65 64 2c 20 6a   has finished, j
34e10 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69  ump to instructi
34e20 6f 6e 0a 2a 2a 20 50 32 2e 20 4f 74 68 65 72 77  on.** P2. Otherw
34e30 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67  ise, fall throug
34e40 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
34e50 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  struction..*/.ca
34e60 73 65 20 4f 50 5f 49 6e 63 72 56 61 63 75 75 6d  se OP_IncrVacuum
34e70 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
34e80 6d 70 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70  mp */.  Btree *p
34e90 42 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  Bt;..  assert( p
34ea0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
34eb0 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
34ec0 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b    assert( DbMask
34ed0 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73  Test(p->btreeMas
34ee0 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20  k, pOp->p1) );. 
34ef0 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
34f00 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 42 74  Only==0 );.  pBt
34f10 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e   = db->aDb[pOp->
34f20 70 31 5d 2e 70 42 74 3b 0a 20 20 72 63 20 3d 20  p1].pBt;.  rc = 
34f30 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 63 72  sqlite3BtreeIncr
34f40 56 61 63 75 75 6d 28 70 42 74 29 3b 0a 20 20 56  Vacuum(pBt);.  V
34f50 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
34f60 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 2c 32  c==SQLITE_DONE,2
34f70 29 3b 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20  );.  if( rc ){. 
34f80 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
34f90 45 5f 44 4f 4e 45 20 29 20 67 6f 74 6f 20 61 62  E_DONE ) goto ab
34fa0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
34fb0 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  ;.    rc = SQLIT
34fc0 45 5f 4f 4b 3b 0a 20 20 20 20 67 6f 74 6f 20 6a  E_OK;.    goto j
34fd0 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20  ump_to_p2;.  }. 
34fe0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
34ff0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 78 70  ../* Opcode: Exp
35000 69 72 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  ire P1 * * * *.*
35010 2a 0a 2a 2a 20 43 61 75 73 65 20 70 72 65 63 6f  *.** Cause preco
35020 6d 70 69 6c 65 64 20 73 74 61 74 65 6d 65 6e 74  mpiled statement
35030 73 20 74 6f 20 65 78 70 69 72 65 2e 20 20 57 68  s to expire.  Wh
35040 65 6e 20 61 6e 20 65 78 70 69 72 65 64 20 73 74  en an expired st
35050 61 74 65 6d 65 6e 74 0a 2a 2a 20 69 73 20 65 78  atement.** is ex
35060 65 63 75 74 65 64 20 75 73 69 6e 67 20 73 71 6c  ecuted using sql
35070 69 74 65 33 5f 73 74 65 70 28 29 20 69 74 20 77  ite3_step() it w
35080 69 6c 6c 20 65 69 74 68 65 72 20 61 75 74 6f 6d  ill either autom
35090 61 74 69 63 61 6c 6c 79 0a 2a 2a 20 72 65 70 72  atically.** repr
350a0 65 70 61 72 65 20 69 74 73 65 6c 66 20 28 69 66  epare itself (if
350b0 20 69 74 20 77 61 73 20 6f 72 69 67 69 6e 61 6c   it was original
350c0 6c 79 20 63 72 65 61 74 65 64 20 75 73 69 6e 67  ly created using
350d0 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65   sqlite3_prepare
350e0 5f 76 32 28 29 29 0a 2a 2a 20 6f 72 20 69 74 20  _v2()).** or it 
350f0 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 53  will fail with S
35100 51 4c 49 54 45 5f 53 43 48 45 4d 41 2e 0a 2a 2a  QLITE_SCHEMA..**
35110 20 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 30 2c   .** If P1 is 0,
35120 20 74 68 65 6e 20 61 6c 6c 20 53 51 4c 20 73 74   then all SQL st
35130 61 74 65 6d 65 6e 74 73 20 62 65 63 6f 6d 65 20  atements become 
35140 65 78 70 69 72 65 64 2e 20 49 66 20 50 31 20 69  expired. If P1 i
35150 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20 74  s non-zero,.** t
35160 68 65 6e 20 6f 6e 6c 79 20 74 68 65 20 63 75 72  hen only the cur
35170 72 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e 67  rently executing
35180 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 65 78   statement is ex
35190 70 69 72 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  pired..*/.case O
351a0 50 5f 45 78 70 69 72 65 3a 20 7b 0a 20 20 69 66  P_Expire: {.  if
351b0 28 20 21 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20  ( !pOp->p1 ){.  
351c0 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50    sqlite3ExpireP
351d0 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74  reparedStatement
351e0 73 28 64 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  s(db);.  }else{.
351f0 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d      p->expired =
35200 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
35210 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .}..#ifndef SQLI
35220 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43  TE_OMIT_SHARED_C
35230 41 43 48 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ACHE./* Opcode: 
35240 54 61 62 6c 65 4c 6f 63 6b 20 50 31 20 50 32 20  TableLock P1 P2 
35250 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
35260 73 69 73 3a 20 69 44 62 3d 50 31 20 72 6f 6f 74  sis: iDb=P1 root
35270 3d 50 32 20 77 72 69 74 65 3d 50 33 0a 2a 2a 0a  =P2 write=P3.**.
35280 2a 2a 20 4f 62 74 61 69 6e 20 61 20 6c 6f 63 6b  ** Obtain a lock
35290 20 6f 6e 20 61 20 70 61 72 74 69 63 75 6c 61 72   on a particular
352a0 20 74 61 62 6c 65 2e 20 54 68 69 73 20 69 6e 73   table. This ins
352b0 74 72 75 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79  truction is only
352c0 20 75 73 65 64 20 77 68 65 6e 0a 2a 2a 20 74 68   used when.** th
352d0 65 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 66  e shared-cache f
352e0 65 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65  eature is enable
352f0 64 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  d. .**.** P1 is 
35300 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  the index of the
35310 20 64 61 74 61 62 61 73 65 20 69 6e 20 73 71 6c   database in sql
35320 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 74 68  ite3.aDb[] of th
35330 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 6f 6e  e database.** on
35340 20 77 68 69 63 68 20 74 68 65 20 6c 6f 63 6b 20   which the lock 
35350 69 73 20 61 63 71 75 69 72 65 64 2e 20 20 41 20  is acquired.  A 
35360 72 65 61 64 6c 6f 63 6b 20 69 73 20 6f 62 74 61  readlock is obta
35370 69 6e 65 64 20 69 66 20 50 33 3d 3d 30 20 6f 72  ined if P3==0 or
35380 0a 2a 2a 20 61 20 77 72 69 74 65 20 6c 6f 63 6b  .** a write lock
35390 20 69 66 20 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a 2a   if P3==1..**.**
353a0 20 50 32 20 63 6f 6e 74 61 69 6e 73 20 74 68 65   P2 contains the
353b0 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74 68   root-page of th
353c0 65 20 74 61 62 6c 65 20 74 6f 20 6c 6f 63 6b 2e  e table to lock.
353d0 0a 2a 2a 0a 2a 2a 20 50 34 20 63 6f 6e 74 61 69  .**.** P4 contai
353e0 6e 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  ns a pointer to 
353f0 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
35400 74 61 62 6c 65 20 62 65 69 6e 67 20 6c 6f 63 6b  table being lock
35410 65 64 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79  ed. This is only
35420 0a 2a 2a 20 75 73 65 64 20 74 6f 20 67 65 6e 65  .** used to gene
35430 72 61 74 65 20 61 6e 20 65 72 72 6f 72 20 6d 65  rate an error me
35440 73 73 61 67 65 20 69 66 20 74 68 65 20 6c 6f 63  ssage if the loc
35450 6b 20 63 61 6e 6e 6f 74 20 62 65 20 6f 62 74 61  k cannot be obta
35460 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ined..*/.case OP
35470 5f 54 61 62 6c 65 4c 6f 63 6b 3a 20 7b 0a 20 20  _TableLock: {.  
35480 75 38 20 69 73 57 72 69 74 65 4c 6f 63 6b 20 3d  u8 isWriteLock =
35490 20 28 75 38 29 70 4f 70 2d 3e 70 33 3b 0a 20 20   (u8)pOp->p3;.  
354a0 69 66 28 20 69 73 57 72 69 74 65 4c 6f 63 6b 20  if( isWriteLock 
354b0 7c 7c 20 30 3d 3d 28 64 62 2d 3e 66 6c 61 67 73  || 0==(db->flags
354c0 26 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f  &SQLITE_ReadUnco
354d0 6d 6d 69 74 74 65 64 29 20 29 7b 0a 20 20 20 20  mmitted) ){.    
354e0 69 6e 74 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31  int p1 = pOp->p1
354f0 3b 20 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ; .    assert( p
35500 31 3e 3d 30 20 26 26 20 70 31 3c 64 62 2d 3e 6e  1>=0 && p1<db->n
35510 44 62 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  Db );.    assert
35520 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e  ( DbMaskTest(p->
35530 62 74 72 65 65 4d 61 73 6b 2c 20 70 31 29 20 29  btreeMask, p1) )
35540 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 73  ;.    assert( is
35550 57 72 69 74 65 4c 6f 63 6b 3d 3d 30 20 7c 7c 20  WriteLock==0 || 
35560 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 31 20 29  isWriteLock==1 )
35570 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
35580 65 33 42 74 72 65 65 4c 6f 63 6b 54 61 62 6c 65  e3BtreeLockTable
35590 28 64 62 2d 3e 61 44 62 5b 70 31 5d 2e 70 42 74  (db->aDb[p1].pBt
355a0 2c 20 70 4f 70 2d 3e 70 32 2c 20 69 73 57 72 69  , pOp->p2, isWri
355b0 74 65 4c 6f 63 6b 29 3b 0a 20 20 20 20 69 66 28  teLock);.    if(
355c0 20 72 63 20 29 7b 0a 20 20 20 20 20 20 69 66 28   rc ){.      if(
355d0 20 28 72 63 26 30 78 46 46 29 3d 3d 53 51 4c 49   (rc&0xFF)==SQLI
355e0 54 45 5f 4c 4f 43 4b 45 44 20 29 7b 0a 20 20 20  TE_LOCKED ){.   
355f0 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20       const char 
35600 2a 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a  *z = pOp->p4.z;.
35610 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
35620 64 62 65 45 72 72 6f 72 28 70 2c 20 22 64 61 74  dbeError(p, "dat
35630 61 62 61 73 65 20 74 61 62 6c 65 20 69 73 20 6c  abase table is l
35640 6f 63 6b 65 64 3a 20 25 73 22 2c 20 7a 29 3b 0a  ocked: %s", z);.
35650 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 67 6f        }.      go
35660 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
35670 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d  error;.    }.  }
35680 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
35690 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
356a0 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 20 2a  T_SHARED_CACHE *
356b0 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
356c0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
356d0 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
356e0 42 65 67 69 6e 20 2a 20 2a 20 2a 20 50 34 20 2a  Begin * * * P4 *
356f0 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65  .**.** P4 may be
35700 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e   a pointer to an
35710 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74   sqlite3_vtab st
35720 72 75 63 74 75 72 65 2e 20 49 66 20 73 6f 2c 20  ructure. If so, 
35730 63 61 6c 6c 20 74 68 65 20 0a 2a 2a 20 78 42 65  call the .** xBe
35740 67 69 6e 20 6d 65 74 68 6f 64 20 66 6f 72 20 74  gin method for t
35750 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a  hat table..**.**
35760 20 41 6c 73 6f 2c 20 77 68 65 74 68 65 72 20 6f   Also, whether o
35770 72 20 6e 6f 74 20 50 34 20 69 73 20 73 65 74 2c  r not P4 is set,
35780 20 63 68 65 63 6b 20 74 68 61 74 20 74 68 69 73   check that this
35790 20 69 73 20 6e 6f 74 20 62 65 69 6e 67 20 63 61   is not being ca
357a0 6c 6c 65 64 20 66 72 6f 6d 0a 2a 2a 20 77 69 74  lled from.** wit
357b0 68 69 6e 20 61 20 63 61 6c 6c 62 61 63 6b 20 74  hin a callback t
357c0 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  o a virtual tabl
357d0 65 20 78 53 79 6e 63 28 29 20 6d 65 74 68 6f 64  e xSync() method
357e0 2e 20 49 66 20 69 74 20 69 73 2c 20 74 68 65 20  . If it is, the 
357f0 65 72 72 6f 72 0a 2a 2a 20 63 6f 64 65 20 77 69  error.** code wi
35800 6c 6c 20 62 65 20 73 65 74 20 74 6f 20 53 51 4c  ll be set to SQL
35810 49 54 45 5f 4c 4f 43 4b 45 44 2e 0a 2a 2f 0a 63  ITE_LOCKED..*/.c
35820 61 73 65 20 4f 50 5f 56 42 65 67 69 6e 3a 20 7b  ase OP_VBegin: {
35830 0a 20 20 56 54 61 62 6c 65 20 2a 70 56 54 61 62  .  VTable *pVTab
35840 3b 0a 20 20 70 56 54 61 62 20 3d 20 70 4f 70 2d  ;.  pVTab = pOp-
35850 3e 70 34 2e 70 56 74 61 62 3b 0a 20 20 72 63 20  >p4.pVtab;.  rc 
35860 3d 20 73 71 6c 69 74 65 33 56 74 61 62 42 65 67  = sqlite3VtabBeg
35870 69 6e 28 64 62 2c 20 70 56 54 61 62 29 3b 0a 20  in(db, pVTab);. 
35880 20 69 66 28 20 70 56 54 61 62 20 29 20 73 71 6c   if( pVTab ) sql
35890 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72  ite3VtabImportEr
358a0 72 6d 73 67 28 70 2c 20 70 56 54 61 62 2d 3e 70  rmsg(p, pVTab->p
358b0 56 74 61 62 29 3b 0a 20 20 69 66 28 20 72 63 20  Vtab);.  if( rc 
358c0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
358d0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65  _to_error;.  bre
358e0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
358f0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
35900 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
35910 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
35920 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
35930 20 4f 70 63 6f 64 65 3a 20 56 43 72 65 61 74 65   Opcode: VCreate
35940 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
35950 2a 2a 20 50 32 20 69 73 20 61 20 72 65 67 69 73  ** P2 is a regis
35960 74 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20 74  ter that holds t
35970 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 76 69 72  he name of a vir
35980 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 20 64 61  tual table in da
35990 74 61 62 61 73 65 20 0a 2a 2a 20 50 31 2e 20 43  tabase .** P1. C
359a0 61 6c 6c 20 74 68 65 20 78 43 72 65 61 74 65 20  all the xCreate 
359b0 6d 65 74 68 6f 64 20 66 6f 72 20 74 68 61 74 20  method for that 
359c0 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  table..*/.case O
359d0 50 5f 56 43 72 65 61 74 65 3a 20 7b 0a 20 20 4d  P_VCreate: {.  M
359e0 65 6d 20 73 4d 65 6d 3b 20 20 20 20 20 20 20 20  em sMem;        
359f0 20 20 2f 2a 20 46 6f 72 20 73 74 6f 72 69 6e 67    /* For storing
35a00 20 74 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e   the record bein
35a10 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63  g decoded */.  c
35a20 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 62 3b  onst char *zTab;
35a30 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
35a40 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a   virtual table *
35a50 2f 0a 0a 20 20 6d 65 6d 73 65 74 28 26 73 4d 65  /..  memset(&sMe
35a60 6d 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65  m, 0, sizeof(sMe
35a70 6d 29 29 3b 0a 20 20 73 4d 65 6d 2e 64 62 20 3d  m));.  sMem.db =
35a80 20 64 62 3b 0a 20 20 2f 2a 20 42 65 63 61 75 73   db;.  /* Becaus
35a90 65 20 50 32 20 69 73 20 61 6c 77 61 79 73 20 61  e P2 is always a
35aa0 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 2c 20   static string, 
35ab0 69 74 20 69 73 20 69 6d 70 6f 73 73 69 62 6c 65  it is impossible
35ac0 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 73 71   for the.  ** sq
35ad0 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6f 70 79  lite3VdbeMemCopy
35ae0 28 29 20 74 6f 20 66 61 69 6c 20 2a 2f 0a 20 20  () to fail */.  
35af0 61 73 73 65 72 74 28 20 28 61 4d 65 6d 5b 70 4f  assert( (aMem[pO
35b00 70 2d 3e 70 32 5d 2e 66 6c 61 67 73 20 26 20 4d  p->p2].flags & M
35b10 45 4d 5f 53 74 72 29 21 3d 30 20 29 3b 0a 20 20  EM_Str)!=0 );.  
35b20 61 73 73 65 72 74 28 20 28 61 4d 65 6d 5b 70 4f  assert( (aMem[pO
35b30 70 2d 3e 70 32 5d 2e 66 6c 61 67 73 20 26 20 4d  p->p2].flags & M
35b40 45 4d 5f 53 74 61 74 69 63 29 21 3d 30 20 29 3b  EM_Static)!=0 );
35b50 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
35b60 64 62 65 4d 65 6d 43 6f 70 79 28 26 73 4d 65 6d  dbeMemCopy(&sMem
35b70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  , &aMem[pOp->p2]
35b80 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d  );.  assert( rc=
35b90 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20  =SQLITE_OK );.  
35ba0 7a 54 61 62 20 3d 20 28 63 6f 6e 73 74 20 63 68  zTab = (const ch
35bb0 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75  ar*)sqlite3_valu
35bc0 65 5f 74 65 78 74 28 26 73 4d 65 6d 29 3b 0a 20  e_text(&sMem);. 
35bd0 20 61 73 73 65 72 74 28 20 7a 54 61 62 20 7c 7c   assert( zTab ||
35be0 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
35bf0 64 20 29 3b 0a 20 20 69 66 28 20 7a 54 61 62 20  d );.  if( zTab 
35c00 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
35c10 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61 74  te3VtabCallCreat
35c20 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 7a  e(db, pOp->p1, z
35c30 54 61 62 2c 20 26 70 2d 3e 7a 45 72 72 4d 73 67  Tab, &p->zErrMsg
35c40 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  );.  }.  sqlite3
35c50 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26  VdbeMemRelease(&
35c60 73 4d 65 6d 29 3b 0a 20 20 69 66 28 20 72 63 20  sMem);.  if( rc 
35c70 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
35c80 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65  _to_error;.  bre
35c90 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
35ca0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
35cb0 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
35cc0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
35cd0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
35ce0 20 4f 70 63 6f 64 65 3a 20 56 44 65 73 74 72 6f   Opcode: VDestro
35cf0 79 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  y P1 * * P4 *.**
35d00 0a 2a 2a 20 50 34 20 69 73 20 74 68 65 20 6e 61  .** P4 is the na
35d10 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20  me of a virtual 
35d20 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73  table in databas
35d30 65 20 50 31 2e 20 20 43 61 6c 6c 20 74 68 65 20  e P1.  Call the 
35d40 78 44 65 73 74 72 6f 79 20 6d 65 74 68 6f 64 0a  xDestroy method.
35d50 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65  ** of that table
35d60 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 44 65  ..*/.case OP_VDe
35d70 73 74 72 6f 79 3a 20 7b 0a 20 20 64 62 2d 3e 6e  stroy: {.  db->n
35d80 56 44 65 73 74 72 6f 79 2b 2b 3b 0a 20 20 72 63  VDestroy++;.  rc
35d90 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 43 61   = sqlite3VtabCa
35da0 6c 6c 44 65 73 74 72 6f 79 28 64 62 2c 20 70 4f  llDestroy(db, pO
35db0 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a  p->p1, pOp->p4.z
35dc0 29 3b 0a 20 20 64 62 2d 3e 6e 56 44 65 73 74 72  );.  db->nVDestr
35dd0 6f 79 2d 2d 3b 0a 20 20 69 66 28 20 72 63 20 29  oy--;.  if( rc )
35de0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
35df0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61  to_error;.  brea
35e00 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
35e10 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
35e20 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
35e30 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
35e40 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
35e50 4f 70 63 6f 64 65 3a 20 56 4f 70 65 6e 20 50 31  Opcode: VOpen P1
35e60 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
35e70 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
35e80 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  to a virtual tab
35e90 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71  le object, an sq
35ea0 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63  lite3_vtab struc
35eb0 74 75 72 65 2e 0a 2a 2a 20 50 31 20 69 73 20 61  ture..** P1 is a
35ec0 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 2e 20   cursor number. 
35ed0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6f 70 65   This opcode ope
35ee0 6e 73 20 61 20 63 75 72 73 6f 72 20 74 6f 20 74  ns a cursor to t
35ef0 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74 61  he virtual.** ta
35f00 62 6c 65 20 61 6e 64 20 73 74 6f 72 65 73 20 74  ble and stores t
35f10 68 61 74 20 63 75 72 73 6f 72 20 69 6e 20 50 31  hat cursor in P1
35f20 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 4f 70  ..*/.case OP_VOp
35f30 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  en: {.  VdbeCurs
35f40 6f 72 20 2a 70 43 75 72 3b 0a 20 20 73 71 6c 69  or *pCur;.  sqli
35f50 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20  te3_vtab_cursor 
35f60 2a 70 56 43 75 72 3b 0a 20 20 73 71 6c 69 74 65  *pVCur;.  sqlite
35f70 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
35f80 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
35f90 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
35fa0 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49  .  assert( p->bI
35fb0 73 52 65 61 64 65 72 20 29 3b 0a 20 20 70 43 75  sReader );.  pCu
35fc0 72 20 3d 20 30 3b 0a 20 20 70 56 43 75 72 20 3d  r = 0;.  pVCur =
35fd0 20 30 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 4f   0;.  pVtab = pO
35fe0 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74  p->p4.pVtab->pVt
35ff0 61 62 3b 0a 20 20 69 66 28 20 70 56 74 61 62 3d  ab;.  if( pVtab=
36000 3d 30 20 7c 7c 20 4e 45 56 45 52 28 70 56 74 61  =0 || NEVER(pVta
36010 62 2d 3e 70 4d 6f 64 75 6c 65 3d 3d 30 29 20 29  b->pModule==0) )
36020 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
36030 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 67 6f  E_LOCKED;.    go
36040 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
36050 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 70 4d 6f  error;.  }.  pMo
36060 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d  dule = pVtab->pM
36070 6f 64 75 6c 65 3b 0a 20 20 72 63 20 3d 20 70 4d  odule;.  rc = pM
36080 6f 64 75 6c 65 2d 3e 78 4f 70 65 6e 28 70 56 74  odule->xOpen(pVt
36090 61 62 2c 20 26 70 56 43 75 72 29 3b 0a 20 20 73  ab, &pVCur);.  s
360a0 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74  qlite3VtabImport
360b0 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29  Errmsg(p, pVtab)
360c0 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
360d0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
360e0 72 72 6f 72 3b 0a 0a 20 20 2f 2a 20 49 6e 69 74  rror;..  /* Init
360f0 69 61 6c 69 7a 65 20 73 71 6c 69 74 65 33 5f 76  ialize sqlite3_v
36100 74 61 62 5f 63 75 72 73 6f 72 20 62 61 73 65 20  tab_cursor base 
36110 63 6c 61 73 73 20 2a 2f 0a 20 20 70 56 43 75 72  class */.  pVCur
36120 2d 3e 70 56 74 61 62 20 3d 20 70 56 74 61 62 3b  ->pVtab = pVtab;
36130 0a 0a 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a  ..  /* Initializ
36140 65 20 76 64 62 65 20 63 75 72 73 6f 72 20 6f 62  e vdbe cursor ob
36150 6a 65 63 74 20 2a 2f 0a 20 20 70 43 75 72 20 3d  ject */.  pCur =
36160 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28   allocateCursor(
36170 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 2d  p, pOp->p1, 0, -
36180 31 2c 20 43 55 52 54 59 50 45 5f 56 54 41 42 29  1, CURTYPE_VTAB)
36190 3b 0a 20 20 69 66 28 20 70 43 75 72 20 29 7b 0a  ;.  if( pCur ){.
361a0 20 20 20 20 70 43 75 72 2d 3e 75 63 2e 70 56 43      pCur->uc.pVC
361b0 75 72 20 3d 20 70 56 43 75 72 3b 0a 20 20 20 20  ur = pVCur;.    
361c0 70 56 74 61 62 2d 3e 6e 52 65 66 2b 2b 3b 0a 20  pVtab->nRef++;. 
361d0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
361e0 72 74 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  rt( db->mallocFa
361f0 69 6c 65 64 20 29 3b 0a 20 20 20 20 70 4d 6f 64  iled );.    pMod
36200 75 6c 65 2d 3e 78 43 6c 6f 73 65 28 70 56 43 75  ule->xClose(pVCu
36210 72 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f  r);.    goto no_
36220 6d 65 6d 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  mem;.  }.  break
36230 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
36240 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
36250 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64  LTABLE */..#ifnd
36260 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
36270 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
36280 70 63 6f 64 65 3a 20 56 46 69 6c 74 65 72 20 50  pcode: VFilter P
36290 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20  1 P2 P3 P4 *.** 
362a0 53 79 6e 6f 70 73 69 73 3a 20 69 70 6c 61 6e 3d  Synopsis: iplan=
362b0 72 5b 50 33 5d 20 7a 70 6c 61 6e 3d 27 50 34 27  r[P3] zplan='P4'
362c0 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 63  .**.** P1 is a c
362d0 75 72 73 6f 72 20 6f 70 65 6e 65 64 20 75 73 69  ursor opened usi
362e0 6e 67 20 56 4f 70 65 6e 2e 20 20 50 32 20 69 73  ng VOpen.  P2 is
362f0 20 61 6e 20 61 64 64 72 65 73 73 20 74 6f 20 6a   an address to j
36300 75 6d 70 20 74 6f 20 69 66 0a 2a 2a 20 74 68 65  ump to if.** the
36310 20 66 69 6c 74 65 72 65 64 20 72 65 73 75 6c 74   filtered result
36320 20 73 65 74 20 69 73 20 65 6d 70 74 79 2e 0a 2a   set is empty..*
36330 2a 0a 2a 2a 20 50 34 20 69 73 20 65 69 74 68 65  *.** P4 is eithe
36340 72 20 4e 55 4c 4c 20 6f 72 20 61 20 73 74 72 69  r NULL or a stri
36350 6e 67 20 74 68 61 74 20 77 61 73 20 67 65 6e 65  ng that was gene
36360 72 61 74 65 64 20 62 79 20 74 68 65 20 78 42 65  rated by the xBe
36370 73 74 49 6e 64 65 78 0a 2a 2a 20 6d 65 74 68 6f  stIndex.** metho
36380 64 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e  d of the module.
36390 20 20 54 68 65 20 69 6e 74 65 72 70 72 65 74 61    The interpreta
363a0 74 69 6f 6e 20 6f 66 20 74 68 65 20 50 34 20 73  tion of the P4 s
363b0 74 72 69 6e 67 20 69 73 20 6c 65 66 74 0a 2a 2a  tring is left.**
363c0 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 69   to the module i
363d0 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a 2a  mplementation..*
363e0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
363f0 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 78 46 69   invokes the xFi
36400 6c 74 65 72 20 6d 65 74 68 6f 64 20 6f 6e 20 74  lter method on t
36410 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
36420 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20 62 79   specified.** by
36430 20 50 31 2e 20 20 54 68 65 20 69 6e 74 65 67 65   P1.  The intege
36440 72 20 71 75 65 72 79 20 70 6c 61 6e 20 70 61 72  r query plan par
36450 61 6d 65 74 65 72 20 74 6f 20 78 46 69 6c 74 65  ameter to xFilte
36460 72 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  r is stored in r
36470 65 67 69 73 74 65 72 0a 2a 2a 20 50 33 2e 20 52  egister.** P3. R
36480 65 67 69 73 74 65 72 20 50 33 2b 31 20 73 74 6f  egister P3+1 sto
36490 72 65 73 20 74 68 65 20 61 72 67 63 20 70 61 72  res the argc par
364a0 61 6d 65 74 65 72 20 74 6f 20 62 65 20 70 61 73  ameter to be pas
364b0 73 65 64 20 74 6f 20 74 68 65 0a 2a 2a 20 78 46  sed to the.** xF
364c0 69 6c 74 65 72 20 6d 65 74 68 6f 64 2e 20 52 65  ilter method. Re
364d0 67 69 73 74 65 72 73 20 50 33 2b 32 2e 2e 50 33  gisters P3+2..P3
364e0 2b 31 2b 61 72 67 63 20 61 72 65 20 74 68 65 20  +1+argc are the 
364f0 61 72 67 63 0a 2a 2a 20 61 64 64 69 74 69 6f 6e  argc.** addition
36500 61 6c 20 70 61 72 61 6d 65 74 65 72 73 20 77 68  al parameters wh
36510 69 63 68 20 61 72 65 20 70 61 73 73 65 64 20 74  ich are passed t
36520 6f 0a 2a 2a 20 78 46 69 6c 74 65 72 20 61 73 20  o.** xFilter as 
36530 61 72 67 76 2e 20 52 65 67 69 73 74 65 72 20 50  argv. Register P
36540 33 2b 32 20 62 65 63 6f 6d 65 73 20 61 72 67 76  3+2 becomes argv
36550 5b 30 5d 20 77 68 65 6e 20 70 61 73 73 65 64 20  [0] when passed 
36560 74 6f 20 78 46 69 6c 74 65 72 2e 0a 2a 2a 0a 2a  to xFilter..**.*
36570 2a 20 41 20 6a 75 6d 70 20 69 73 20 6d 61 64 65  * A jump is made
36580 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 72 65   to P2 if the re
36590 73 75 6c 74 20 73 65 74 20 61 66 74 65 72 20 66  sult set after f
365a0 69 6c 74 65 72 69 6e 67 20 77 6f 75 6c 64 20 62  iltering would b
365b0 65 20 65 6d 70 74 79 2e 0a 2a 2f 0a 63 61 73 65  e empty..*/.case
365c0 20 4f 50 5f 56 46 69 6c 74 65 72 3a 20 7b 20 20   OP_VFilter: {  
365d0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e   /* jump */.  in
365e0 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69 51  t nArg;.  int iQ
365f0 75 65 72 79 3b 0a 20 20 63 6f 6e 73 74 20 73 71  uery;.  const sq
36600 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
36610 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 51  odule;.  Mem *pQ
36620 75 65 72 79 3b 0a 20 20 4d 65 6d 20 2a 70 41 72  uery;.  Mem *pAr
36630 67 63 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74  gc;.  sqlite3_vt
36640 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 43 75 72  ab_cursor *pVCur
36650 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  ;.  sqlite3_vtab
36660 20 2a 70 56 74 61 62 3b 0a 20 20 56 64 62 65 43   *pVtab;.  VdbeC
36670 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 69  ursor *pCur;.  i
36680 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 69 3b  nt res;.  int i;
36690 0a 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a  .  Mem **apArg;.
366a0 0a 20 20 70 51 75 65 72 79 20 3d 20 26 61 4d 65  .  pQuery = &aMe
366b0 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 41  m[pOp->p3];.  pA
366c0 72 67 63 20 3d 20 26 70 51 75 65 72 79 5b 31 5d  rgc = &pQuery[1]
366d0 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70  ;.  pCur = p->ap
366e0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
366f0 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
36700 69 64 28 70 51 75 65 72 79 29 20 29 3b 0a 20 20  id(pQuery) );.  
36710 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
36720 4f 70 2d 3e 70 33 2c 20 70 51 75 65 72 79 29 3b  Op->p3, pQuery);
36730 0a 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d  .  assert( pCur-
36740 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
36750 50 45 5f 56 54 41 42 20 29 3b 0a 20 20 70 56 43  PE_VTAB );.  pVC
36760 75 72 20 3d 20 70 43 75 72 2d 3e 75 63 2e 70 56  ur = pCur->uc.pV
36770 43 75 72 3b 0a 20 20 70 56 74 61 62 20 3d 20 70  Cur;.  pVtab = p
36780 56 43 75 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70  VCur->pVtab;.  p
36790 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e  Module = pVtab->
367a0 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 2f 2a 20 47  pModule;..  /* G
367b0 72 61 62 20 74 68 65 20 69 6e 64 65 78 20 6e 75  rab the index nu
367c0 6d 62 65 72 20 61 6e 64 20 61 72 67 63 20 70 61  mber and argc pa
367d0 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20 61 73  rameters */.  as
367e0 73 65 72 74 28 20 28 70 51 75 65 72 79 2d 3e 66  sert( (pQuery->f
367f0 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 29 21 3d 30  lags&MEM_Int)!=0
36800 20 26 26 20 70 41 72 67 63 2d 3e 66 6c 61 67 73   && pArgc->flags
36810 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 6e  ==MEM_Int );.  n
36820 41 72 67 20 3d 20 28 69 6e 74 29 70 41 72 67 63  Arg = (int)pArgc
36830 2d 3e 75 2e 69 3b 0a 20 20 69 51 75 65 72 79 20  ->u.i;.  iQuery 
36840 3d 20 28 69 6e 74 29 70 51 75 65 72 79 2d 3e 75  = (int)pQuery->u
36850 2e 69 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65  .i;..  /* Invoke
36860 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65 74   the xFilter met
36870 68 6f 64 20 2a 2f 0a 20 20 72 65 73 20 3d 20 30  hod */.  res = 0
36880 3b 0a 20 20 61 70 41 72 67 20 3d 20 70 2d 3e 61  ;.  apArg = p->a
36890 70 41 72 67 3b 0a 20 20 66 6f 72 28 69 20 3d 20  pArg;.  for(i = 
368a0 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b  0; i<nArg; i++){
368b0 0a 20 20 20 20 61 70 41 72 67 5b 69 5d 20 3d 20  .    apArg[i] = 
368c0 26 70 41 72 67 63 5b 69 2b 31 5d 3b 0a 20 20 7d  &pArgc[i+1];.  }
368d0 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d  .  rc = pModule-
368e0 3e 78 46 69 6c 74 65 72 28 70 56 43 75 72 2c 20  >xFilter(pVCur, 
368f0 69 51 75 65 72 79 2c 20 70 4f 70 2d 3e 70 34 2e  iQuery, pOp->p4.
36900 7a 2c 20 6e 41 72 67 2c 20 61 70 41 72 67 29 3b  z, nArg, apArg);
36910 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d  .  sqlite3VtabIm
36920 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56  portErrmsg(p, pV
36930 74 61 62 29 3b 0a 20 20 69 66 28 20 72 63 20 29  tab);.  if( rc )
36940 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
36950 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 72 65 73 20  to_error;.  res 
36960 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28  = pModule->xEof(
36970 70 56 43 75 72 29 3b 0a 20 20 70 43 75 72 2d 3e  pVCur);.  pCur->
36980 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 56  nullRow = 0;.  V
36990 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
369a0 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20  es!=0,2);.  if( 
369b0 72 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  res ) goto jump_
369c0 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a  to_p2;.  break;.
369d0 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
369e0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
369f0 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
36a00 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
36a10 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
36a20 6f 64 65 3a 20 56 43 6f 6c 75 6d 6e 20 50 31 20  ode: VColumn P1 
36a30 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
36a40 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 76 63 6f  opsis: r[P3]=vco
36a50 6c 75 6d 6e 28 50 32 29 0a 2a 2a 0a 2a 2a 20 53  lumn(P2).**.** S
36a60 74 6f 72 65 20 74 68 65 20 76 61 6c 75 65 20 6f  tore the value o
36a70 66 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c 75  f the P2-th colu
36a80 6d 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 72 6f 77  mn of.** the row
36a90 20 6f 66 20 74 68 65 20 76 69 72 74 75 61 6c 2d   of the virtual-
36aa0 74 61 62 6c 65 20 74 68 61 74 20 74 68 65 20 0a  table that the .
36ab0 2a 2a 20 50 31 20 63 75 72 73 6f 72 20 69 73 20  ** P1 cursor is 
36ac0 70 6f 69 6e 74 69 6e 67 20 74 6f 20 69 6e 74 6f  pointing to into
36ad0 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2f   register P3..*/
36ae0 0a 63 61 73 65 20 4f 50 5f 56 43 6f 6c 75 6d 6e  .case OP_VColumn
36af0 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74  : {.  sqlite3_vt
36b00 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e  ab *pVtab;.  con
36b10 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  st sqlite3_modul
36b20 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65  e *pModule;.  Me
36b30 6d 20 2a 70 44 65 73 74 3b 0a 20 20 73 71 6c 69  m *pDest;.  sqli
36b40 74 65 33 5f 63 6f 6e 74 65 78 74 20 73 43 6f 6e  te3_context sCon
36b50 74 65 78 74 3b 0a 0a 20 20 56 64 62 65 43 75 72  text;..  VdbeCur
36b60 73 6f 72 20 2a 70 43 75 72 20 3d 20 70 2d 3e 61  sor *pCur = p->a
36b70 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
36b80 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e 65   assert( pCur->e
36b90 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
36ba0 5f 56 54 41 42 20 29 3b 0a 20 20 61 73 73 65 72  _VTAB );.  asser
36bb0 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20  t( pOp->p3>0 && 
36bc0 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
36bd0 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
36be0 29 20 29 3b 0a 20 20 70 44 65 73 74 20 3d 20 26  ) );.  pDest = &
36bf0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
36c00 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
36c10 65 28 70 2c 20 70 44 65 73 74 29 3b 0a 20 20 69  e(p, pDest);.  i
36c20 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77  f( pCur->nullRow
36c30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
36c40 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44  dbeMemSetNull(pD
36c50 65 73 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  est);.    break;
36c60 0a 20 20 7d 0a 20 20 70 56 74 61 62 20 3d 20 70  .  }.  pVtab = p
36c70 43 75 72 2d 3e 75 63 2e 70 56 43 75 72 2d 3e 70  Cur->uc.pVCur->p
36c80 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20  Vtab;.  pModule 
36c90 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  = pVtab->pModule
36ca0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64  ;.  assert( pMod
36cb0 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 20 29 3b 0a  ule->xColumn );.
36cc0 20 20 6d 65 6d 73 65 74 28 26 73 43 6f 6e 74 65    memset(&sConte
36cd0 78 74 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 43  xt, 0, sizeof(sC
36ce0 6f 6e 74 65 78 74 29 29 3b 0a 20 20 73 43 6f 6e  ontext));.  sCon
36cf0 74 65 78 74 2e 70 4f 75 74 20 3d 20 70 44 65 73  text.pOut = pDes
36d00 74 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46  t;.  MemSetTypeF
36d10 6c 61 67 28 70 44 65 73 74 2c 20 4d 45 4d 5f 4e  lag(pDest, MEM_N
36d20 75 6c 6c 29 3b 0a 20 20 72 63 20 3d 20 70 4d 6f  ull);.  rc = pMo
36d30 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 28 70 43  dule->xColumn(pC
36d40 75 72 2d 3e 75 63 2e 70 56 43 75 72 2c 20 26 73  ur->uc.pVCur, &s
36d50 43 6f 6e 74 65 78 74 2c 20 70 4f 70 2d 3e 70 32  Context, pOp->p2
36d60 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62  );.  sqlite3Vtab
36d70 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20  ImportErrmsg(p, 
36d80 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 73 43  pVtab);.  if( sC
36d90 6f 6e 74 65 78 74 2e 69 73 45 72 72 6f 72 20 29  ontext.isError )
36da0 7b 0a 20 20 20 20 72 63 20 3d 20 73 43 6f 6e 74  {.    rc = sCont
36db0 65 78 74 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d  ext.isError;.  }
36dc0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  .  sqlite3VdbeCh
36dd0 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 44 65  angeEncoding(pDe
36de0 73 74 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  st, encoding);. 
36df0 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
36e00 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74 29 3b  pOp->p3, pDest);
36e10 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
36e20 4f 42 53 49 5a 45 28 70 44 65 73 74 29 3b 0a 0a  OBSIZE(pDest);..
36e30 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
36e40 65 4d 65 6d 54 6f 6f 42 69 67 28 70 44 65 73 74  eMemTooBig(pDest
36e50 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ) ){.    goto to
36e60 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 69 66 28  o_big;.  }.  if(
36e70 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
36e80 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
36e90 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
36ea0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
36eb0 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
36ec0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
36ed0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
36ee0 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4e 65  E./* Opcode: VNe
36ef0 78 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  xt P1 P2 * * *.*
36f00 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20 76 69 72  *.** Advance vir
36f10 74 75 61 6c 20 74 61 62 6c 65 20 50 31 20 74 6f  tual table P1 to
36f20 20 74 68 65 20 6e 65 78 74 20 72 6f 77 20 69 6e   the next row in
36f30 20 69 74 73 20 72 65 73 75 6c 74 20 73 65 74 20   its result set 
36f40 61 6e 64 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 69  and.** jump to i
36f50 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 20  nstruction P2.  
36f60 4f 72 2c 20 69 66 20 74 68 65 20 76 69 72 74 75  Or, if the virtu
36f70 61 6c 20 74 61 62 6c 65 20 68 61 73 20 72 65 61  al table has rea
36f80 63 68 65 64 0a 2a 2a 20 74 68 65 20 65 6e 64 20  ched.** the end 
36f90 6f 66 20 69 74 73 20 72 65 73 75 6c 74 20 73 65  of its result se
36fa0 74 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  t, then fall thr
36fb0 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
36fc0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
36fd0 0a 63 61 73 65 20 4f 50 5f 56 4e 65 78 74 3a 20  .case OP_VNext: 
36fe0 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20  {   /* jump */. 
36ff0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
37000 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71  Vtab;.  const sq
37010 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
37020 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20 72 65 73  odule;.  int res
37030 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
37040 70 43 75 72 3b 0a 0a 20 20 72 65 73 20 3d 20 30  pCur;..  res = 0
37050 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70  ;.  pCur = p->ap
37060 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
37070 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e 65 43  assert( pCur->eC
37080 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
37090 56 54 41 42 20 29 3b 0a 20 20 69 66 28 20 70 43  VTAB );.  if( pC
370a0 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  ur->nullRow ){. 
370b0 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
370c0 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e 75 63  pVtab = pCur->uc
370d0 2e 70 56 43 75 72 2d 3e 70 56 74 61 62 3b 0a 20  .pVCur->pVtab;. 
370e0 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62   pModule = pVtab
370f0 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73  ->pModule;.  ass
37100 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e  ert( pModule->xN
37110 65 78 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e 76  ext );..  /* Inv
37120 6f 6b 65 20 74 68 65 20 78 4e 65 78 74 28 29 20  oke the xNext() 
37130 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f  method of the mo
37140 64 75 6c 65 2e 20 54 68 65 72 65 20 69 73 20 6e  dule. There is n
37150 6f 20 77 61 79 20 66 6f 72 20 74 68 65 0a 20 20  o way for the.  
37160 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20 69 6d  ** underlying im
37170 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20  plementation to 
37180 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20  return an error 
37190 69 66 20 6f 6e 65 20 6f 63 63 75 72 73 20 64 75  if one occurs du
371a0 72 69 6e 67 0a 20 20 2a 2a 20 78 4e 65 78 74 28  ring.  ** xNext(
371b0 29 2e 20 49 6e 73 74 65 61 64 2c 20 69 66 20 61  ). Instead, if a
371c0 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73 2c 20  n error occurs, 
371d0 74 72 75 65 20 69 73 20 72 65 74 75 72 6e 65 64  true is returned
371e0 20 28 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61   (indicating tha
371f0 74 20 0a 20 20 2a 2a 20 64 61 74 61 20 69 73 20  t .  ** data is 
37200 61 76 61 69 6c 61 62 6c 65 29 20 61 6e 64 20 74  available) and t
37210 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20 72 65  he error code re
37220 74 75 72 6e 65 64 20 77 68 65 6e 20 78 43 6f 6c  turned when xCol
37230 75 6d 6e 20 6f 72 0a 20 20 2a 2a 20 73 6f 6d 65  umn or.  ** some
37240 20 6f 74 68 65 72 20 6d 65 74 68 6f 64 20 69 73   other method is
37250 20 6e 65 78 74 20 69 6e 76 6f 6b 65 64 20 6f 6e   next invoked on
37260 20 74 68 65 20 73 61 76 65 20 76 69 72 74 75 61   the save virtua
37270 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72 2e 0a  l table cursor..
37280 20 20 2a 2f 0a 20 20 72 63 20 3d 20 70 4d 6f 64    */.  rc = pMod
37290 75 6c 65 2d 3e 78 4e 65 78 74 28 70 43 75 72 2d  ule->xNext(pCur-
372a0 3e 75 63 2e 70 56 43 75 72 29 3b 0a 20 20 73 71  >uc.pVCur);.  sq
372b0 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45  lite3VtabImportE
372c0 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b  rrmsg(p, pVtab);
372d0 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
372e0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
372f0 72 6f 72 3b 0a 20 20 72 65 73 20 3d 20 70 4d 6f  ror;.  res = pMo
37300 64 75 6c 65 2d 3e 78 45 6f 66 28 70 43 75 72 2d  dule->xEof(pCur-
37310 3e 75 63 2e 70 56 43 75 72 29 3b 0a 20 20 56 64  >uc.pVCur);.  Vd
37320 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 21 72  beBranchTaken(!r
37330 65 73 2c 32 29 3b 0a 20 20 69 66 28 20 21 72 65  es,2);.  if( !re
37340 73 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74  s ){.    /* If t
37350 68 65 72 65 20 69 73 20 64 61 74 61 2c 20 6a 75  here is data, ju
37360 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20  mp to P2 */.    
37370 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 5f  goto jump_to_p2_
37380 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e  and_check_for_in
37390 74 65 72 72 75 70 74 3b 0a 20 20 7d 0a 20 20 67  terrupt;.  }.  g
373a0 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e  oto check_for_in
373b0 74 65 72 72 75 70 74 3b 0a 7d 0a 23 65 6e 64 69  terrupt;.}.#endi
373c0 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
373d0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
373e0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
373f0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
37400 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 52  LE./* Opcode: VR
37410 65 6e 61 6d 65 20 50 31 20 2a 20 2a 20 50 34 20  ename P1 * * P4 
37420 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  *.**.** P4 is a 
37430 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72  pointer to a vir
37440 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63  tual table objec
37450 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74  t, an sqlite3_vt
37460 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  ab structure..**
37470 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76   This opcode inv
37480 6f 6b 65 73 20 74 68 65 20 63 6f 72 72 65 73 70  okes the corresp
37490 6f 6e 64 69 6e 67 20 78 52 65 6e 61 6d 65 20 6d  onding xRename m
374a0 65 74 68 6f 64 2e 20 54 68 65 20 76 61 6c 75 65  ethod. The value
374b0 0a 2a 2a 20 69 6e 20 72 65 67 69 73 74 65 72 20  .** in register 
374c0 50 31 20 69 73 20 70 61 73 73 65 64 20 61 73 20  P1 is passed as 
374d0 74 68 65 20 7a 4e 61 6d 65 20 61 72 67 75 6d 65  the zName argume
374e0 6e 74 20 74 6f 20 74 68 65 20 78 52 65 6e 61 6d  nt to the xRenam
374f0 65 20 6d 65 74 68 6f 64 2e 0a 2a 2f 0a 63 61 73  e method..*/.cas
37500 65 20 4f 50 5f 56 52 65 6e 61 6d 65 3a 20 7b 0a  e OP_VRename: {.
37510 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
37520 70 56 74 61 62 3b 0a 20 20 4d 65 6d 20 2a 70 4e  pVtab;.  Mem *pN
37530 61 6d 65 3b 0a 0a 20 20 70 56 74 61 62 20 3d 20  ame;..  pVtab = 
37540 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70  pOp->p4.pVtab->p
37550 56 74 61 62 3b 0a 20 20 70 4e 61 6d 65 20 3d 20  Vtab;.  pName = 
37560 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
37570 20 20 61 73 73 65 72 74 28 20 70 56 74 61 62 2d    assert( pVtab-
37580 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d  >pModule->xRenam
37590 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6d  e );.  assert( m
375a0 65 6d 49 73 56 61 6c 69 64 28 70 4e 61 6d 65 29  emIsValid(pName)
375b0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
375c0 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
375d0 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
375e0 28 70 4f 70 2d 3e 70 31 2c 20 70 4e 61 6d 65 29  (pOp->p1, pName)
375f0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4e 61 6d  ;.  assert( pNam
37600 65 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53  e->flags & MEM_S
37610 74 72 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  tr );.  testcase
37620 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51  ( pName->enc==SQ
37630 4c 49 54 45 5f 55 54 46 38 20 29 3b 0a 20 20 74  LITE_UTF8 );.  t
37640 65 73 74 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e  estcase( pName->
37650 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31  enc==SQLITE_UTF1
37660 36 42 45 20 29 3b 0a 20 20 74 65 73 74 63 61 73  6BE );.  testcas
37670 65 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53  e( pName->enc==S
37680 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 29 3b  QLITE_UTF16LE );
37690 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
376a0 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
376b0 67 28 70 4e 61 6d 65 2c 20 53 51 4c 49 54 45 5f  g(pName, SQLITE_
376c0 55 54 46 38 29 3b 0a 20 20 69 66 28 20 72 63 20  UTF8);.  if( rc 
376d0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
376e0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 72 63 20  _to_error;.  rc 
376f0 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  = pVtab->pModule
37700 2d 3e 78 52 65 6e 61 6d 65 28 70 56 74 61 62 2c  ->xRename(pVtab,
37710 20 70 4e 61 6d 65 2d 3e 7a 29 3b 0a 20 20 73 71   pName->z);.  sq
37720 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45  lite3VtabImportE
37730 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b  rrmsg(p, pVtab);
37740 0a 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20  .  p->expired = 
37750 30 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  0;.  if( rc ) go
37760 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
37770 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a  error;.  break;.
37780 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  }.#endif..#ifnde
37790 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
377a0 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
377b0 63 6f 64 65 3a 20 56 55 70 64 61 74 65 20 50 31  code: VUpdate P1
377c0 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
377d0 53 79 6e 6f 70 73 69 73 3a 20 64 61 74 61 3d 72  Synopsis: data=r
377e0 5b 50 33 40 50 32 5d 0a 2a 2a 0a 2a 2a 20 50 34  [P3@P2].**.** P4
377f0 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
37800 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
37810 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69   object, an sqli
37820 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75  te3_vtab structu
37830 72 65 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  re..** This opco
37840 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 63  de invokes the c
37850 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 78 55 70  orresponding xUp
37860 64 61 74 65 20 6d 65 74 68 6f 64 2e 20 50 32 20  date method. P2 
37870 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 63 6f  values.** are co
37880 6e 74 69 67 75 6f 75 73 20 6d 65 6d 6f 72 79 20  ntiguous memory 
37890 63 65 6c 6c 73 20 73 74 61 72 74 69 6e 67 20 61  cells starting a
378a0 74 20 50 33 20 74 6f 20 70 61 73 73 20 74 6f 20  t P3 to pass to 
378b0 74 68 65 20 78 55 70 64 61 74 65 20 0a 2a 2a 20  the xUpdate .** 
378c0 69 6e 76 6f 63 61 74 69 6f 6e 2e 20 54 68 65 20  invocation. The 
378d0 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
378e0 72 20 28 50 33 2b 50 32 2d 31 29 20 63 6f 72 72  r (P3+P2-1) corr
378f0 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 0a  esponds to the .
37900 2a 2a 20 70 32 74 68 20 65 6c 65 6d 65 6e 74 20  ** p2th element 
37910 6f 66 20 74 68 65 20 61 72 67 76 20 61 72 72 61  of the argv arra
37920 79 20 70 61 73 73 65 64 20 74 6f 20 78 55 70 64  y passed to xUpd
37930 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 78  ate..**.** The x
37940 55 70 64 61 74 65 20 6d 65 74 68 6f 64 20 77 69  Update method wi
37950 6c 6c 20 64 6f 20 61 20 44 45 4c 45 54 45 20 6f  ll do a DELETE o
37960 72 20 61 6e 20 49 4e 53 45 52 54 20 6f 72 20 62  r an INSERT or b
37970 6f 74 68 2e 0a 2a 2a 20 54 68 65 20 61 72 67 76  oth..** The argv
37980 5b 30 5d 20 65 6c 65 6d 65 6e 74 20 28 77 68 69  [0] element (whi
37990 63 68 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  ch corresponds t
379a0 6f 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 33  o memory cell P3
379b0 29 0a 2a 2a 20 69 73 20 74 68 65 20 72 6f 77 69  ).** is the rowi
379c0 64 20 6f 66 20 61 20 72 6f 77 20 74 6f 20 64 65  d of a row to de
379d0 6c 65 74 65 2e 20 20 49 66 20 61 72 67 76 5b 30  lete.  If argv[0
379e0 5d 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 6e  ] is NULL then n
379f0 6f 20 0a 2a 2a 20 64 65 6c 65 74 69 6f 6e 20 6f  o .** deletion o
37a00 63 63 75 72 73 2e 20 20 54 68 65 20 61 72 67 76  ccurs.  The argv
37a10 5b 31 5d 20 65 6c 65 6d 65 6e 74 20 69 73 20 74  [1] element is t
37a20 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20  he rowid of the 
37a30 6e 65 77 20 0a 2a 2a 20 72 6f 77 2e 20 20 54 68  new .** row.  Th
37a40 69 73 20 63 61 6e 20 62 65 20 4e 55 4c 4c 20 74  is can be NULL t
37a50 6f 20 68 61 76 65 20 74 68 65 20 76 69 72 74 75  o have the virtu
37a60 61 6c 20 74 61 62 6c 65 20 73 65 6c 65 63 74 20  al table select 
37a70 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72 6f 77 69  the new .** rowi
37a80 64 20 66 6f 72 20 69 74 73 65 6c 66 2e 20 20 54  d for itself.  T
37a90 68 65 20 73 75 62 73 65 71 75 65 6e 74 20 65 6c  he subsequent el
37aa0 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 61 72  ements in the ar
37ab0 72 61 79 20 61 72 65 20 0a 2a 2a 20 74 68 65 20  ray are .** the 
37ac0 76 61 6c 75 65 73 20 6f 66 20 63 6f 6c 75 6d 6e  values of column
37ad0 73 20 69 6e 20 74 68 65 20 6e 65 77 20 72 6f 77  s in the new row
37ae0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 3d 3d 31  ..**.** If P2==1
37af0 20 74 68 65 6e 20 6e 6f 20 69 6e 73 65 72 74 20   then no insert 
37b00 69 73 20 70 65 72 66 6f 72 6d 65 64 2e 20 20 61  is performed.  a
37b10 72 67 76 5b 30 5d 20 69 73 20 74 68 65 20 72 6f  rgv[0] is the ro
37b20 77 69 64 20 6f 66 0a 2a 2a 20 61 20 72 6f 77 20  wid of.** a row 
37b30 74 6f 20 64 65 6c 65 74 65 2e 0a 2a 2a 0a 2a 2a  to delete..**.**
37b40 20 50 31 20 69 73 20 61 20 62 6f 6f 6c 65 61 6e   P1 is a boolean
37b50 20 66 6c 61 67 2e 20 49 66 20 69 74 20 69 73 20   flag. If it is 
37b60 73 65 74 20 74 6f 20 74 72 75 65 20 61 6e 64 20  set to true and 
37b70 74 68 65 20 78 55 70 64 61 74 65 20 63 61 6c 6c  the xUpdate call
37b80 0a 2a 2a 20 69 73 20 73 75 63 63 65 73 73 66 75  .** is successfu
37b90 6c 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75  l, then the valu
37ba0 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71  e returned by sq
37bb0 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72  lite3_last_inser
37bc0 74 5f 72 6f 77 69 64 28 29 20 0a 2a 2a 20 69 73  t_rowid() .** is
37bd0 20 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75   set to the valu
37be0 65 20 6f 66 20 74 68 65 20 72 6f 77 69 64 20 66  e of the rowid f
37bf0 6f 72 20 74 68 65 20 72 6f 77 20 6a 75 73 74 20  or the row just 
37c00 69 6e 73 65 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  inserted..**.** 
37c10 50 35 20 69 73 20 74 68 65 20 65 72 72 6f 72 20  P5 is the error 
37c20 61 63 74 69 6f 6e 73 20 28 4f 45 5f 52 65 70 6c  actions (OE_Repl
37c30 61 63 65 2c 20 4f 45 5f 46 61 69 6c 2c 20 4f 45  ace, OE_Fail, OE
37c40 5f 49 67 6e 6f 72 65 2c 20 65 74 63 29 20 74 6f  _Ignore, etc) to
37c50 0a 2a 2a 20 61 70 70 6c 79 20 69 6e 20 74 68 65  .** apply in the
37c60 20 63 61 73 65 20 6f 66 20 61 20 63 6f 6e 73 74   case of a const
37c70 72 61 69 6e 74 20 66 61 69 6c 75 72 65 20 6f 6e  raint failure on
37c80 20 61 6e 20 69 6e 73 65 72 74 20 6f 72 20 75 70   an insert or up
37c90 64 61 74 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  date..*/.case OP
37ca0 5f 56 55 70 64 61 74 65 3a 20 7b 0a 20 20 73 71  _VUpdate: {.  sq
37cb0 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61  lite3_vtab *pVta
37cc0 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74  b;.  const sqlit
37cd0 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
37ce0 6c 65 3b 0a 20 20 69 6e 74 20 6e 41 72 67 3b 0a  le;.  int nArg;.
37cf0 20 20 69 6e 74 20 69 3b 0a 20 20 73 71 6c 69 74    int i;.  sqlit
37d00 65 5f 69 6e 74 36 34 20 72 6f 77 69 64 3b 0a 20  e_int64 rowid;. 
37d10 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a 20 20   Mem **apArg;.  
37d20 4d 65 6d 20 2a 70 58 3b 0a 0a 20 20 61 73 73 65  Mem *pX;..  asse
37d30 72 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 31 20 20  rt( pOp->p2==1  
37d40 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35        || pOp->p5
37d50 3d 3d 4f 45 5f 46 61 69 6c 20 20 20 7c 7c 20 70  ==OE_Fail   || p
37d60 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 6f 6c 6c 62  Op->p5==OE_Rollb
37d70 61 63 6b 20 0a 20 20 20 20 20 20 20 7c 7c 20 70  ack .       || p
37d80 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 41 62 6f 72 74  Op->p5==OE_Abort
37d90 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f   || pOp->p5==OE_
37da0 49 67 6e 6f 72 65 20 7c 7c 20 70 4f 70 2d 3e 70  Ignore || pOp->p
37db0 35 3d 3d 4f 45 5f 52 65 70 6c 61 63 65 0a 20 20  5==OE_Replace.  
37dc0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
37dd0 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20  readOnly==0 );. 
37de0 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34   pVtab = pOp->p4
37df0 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20  .pVtab->pVtab;. 
37e00 20 69 66 28 20 70 56 74 61 62 3d 3d 30 20 7c 7c   if( pVtab==0 ||
37e10 20 4e 45 56 45 52 28 70 56 74 61 62 2d 3e 70 4d   NEVER(pVtab->pM
37e20 6f 64 75 6c 65 3d 3d 30 29 20 29 7b 0a 20 20 20  odule==0) ){.   
37e30 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43   rc = SQLITE_LOC
37e40 4b 45 44 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62  KED;.    goto ab
37e50 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
37e60 3b 0a 20 20 7d 0a 20 20 70 4d 6f 64 75 6c 65 20  ;.  }.  pModule 
37e70 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  = pVtab->pModule
37e80 3b 0a 20 20 6e 41 72 67 20 3d 20 70 4f 70 2d 3e  ;.  nArg = pOp->
37e90 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  p2;.  assert( pO
37ea0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 56 54  p->p4type==P4_VT
37eb0 41 42 20 29 3b 0a 20 20 69 66 28 20 41 4c 57 41  AB );.  if( ALWA
37ec0 59 53 28 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64  YS(pModule->xUpd
37ed0 61 74 65 29 20 29 7b 0a 20 20 20 20 75 38 20 76  ate) ){.    u8 v
37ee0 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d 20  tabOnConflict = 
37ef0 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69  db->vtabOnConfli
37f00 63 74 3b 0a 20 20 20 20 61 70 41 72 67 20 3d 20  ct;.    apArg = 
37f10 70 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20 70 58  p->apArg;.    pX
37f20 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
37f30 5d 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  ];.    for(i=0; 
37f40 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20  i<nArg; i++){.  
37f50 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
37f60 73 56 61 6c 69 64 28 70 58 29 20 29 3b 0a 20 20  sValid(pX) );.  
37f70 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
37f80 61 6e 67 65 28 70 2c 20 70 58 29 3b 0a 20 20 20  ange(p, pX);.   
37f90 20 20 20 61 70 41 72 67 5b 69 5d 20 3d 20 70 58     apArg[i] = pX
37fa0 3b 0a 20 20 20 20 20 20 70 58 2b 2b 3b 0a 20 20  ;.      pX++;.  
37fb0 20 20 7d 0a 20 20 20 20 64 62 2d 3e 76 74 61 62    }.    db->vtab
37fc0 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 70 4f 70  OnConflict = pOp
37fd0 2d 3e 70 35 3b 0a 20 20 20 20 72 63 20 3d 20 70  ->p5;.    rc = p
37fe0 4d 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74 65 28  Module->xUpdate(
37ff0 70 56 74 61 62 2c 20 6e 41 72 67 2c 20 61 70 41  pVtab, nArg, apA
38000 72 67 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20 20  rg, &rowid);.   
38010 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c   db->vtabOnConfl
38020 69 63 74 20 3d 20 76 74 61 62 4f 6e 43 6f 6e 66  ict = vtabOnConf
38030 6c 69 63 74 3b 0a 20 20 20 20 73 71 6c 69 74 65  lict;.    sqlite
38040 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73  3VtabImportErrms
38050 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 20  g(p, pVtab);.   
38060 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
38070 4f 4b 20 26 26 20 70 4f 70 2d 3e 70 31 20 29 7b  OK && pOp->p1 ){
38080 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6e  .      assert( n
38090 41 72 67 3e 31 20 26 26 20 61 70 41 72 67 5b 30  Arg>1 && apArg[0
380a0 5d 20 26 26 20 28 61 70 41 72 67 5b 30 5d 2d 3e  ] && (apArg[0]->
380b0 66 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c 29 20  flags&MEM_Null) 
380c0 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6c 61 73  );.      db->las
380d0 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77  tRowid = lastRow
380e0 69 64 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20  id = rowid;.    
380f0 7d 0a 20 20 20 20 69 66 28 20 28 72 63 26 30 78  }.    if( (rc&0x
38100 66 66 29 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e 53  ff)==SQLITE_CONS
38110 54 52 41 49 4e 54 20 26 26 20 70 4f 70 2d 3e 70  TRAINT && pOp->p
38120 34 2e 70 56 74 61 62 2d 3e 62 43 6f 6e 73 74 72  4.pVtab->bConstr
38130 61 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 69 66  aint ){.      if
38140 28 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 49 67  ( pOp->p5==OE_Ig
38150 6e 6f 72 65 20 29 7b 0a 20 20 20 20 20 20 20 20  nore ){.        
38160 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
38170 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
38180 20 20 20 20 20 70 2d 3e 65 72 72 6f 72 41 63 74       p->errorAct
38190 69 6f 6e 20 3d 20 28 28 70 4f 70 2d 3e 70 35 3d  ion = ((pOp->p5=
381a0 3d 4f 45 5f 52 65 70 6c 61 63 65 29 20 3f 20 4f  =OE_Replace) ? O
381b0 45 5f 41 62 6f 72 74 20 3a 20 70 4f 70 2d 3e 70  E_Abort : pOp->p
381c0 35 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  5);.      }.    
381d0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 2d 3e  }else{.      p->
381e0 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 20 20 7d  nChange++;.    }
381f0 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f  .    if( rc ) go
38200 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
38210 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 62 72 65  error;.  }.  bre
38220 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
38230 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
38240 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
38250 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d 49  ndef  SQLITE_OMI
38260 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a  T_PAGER_PRAGMAS.
38270 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 67 65 63  /* Opcode: Pagec
38280 6f 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  ount P1 P2 * * *
38290 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65  .**.** Write the
382a0 20 63 75 72 72 65 6e 74 20 6e 75 6d 62 65 72 20   current number 
382b0 6f 66 20 70 61 67 65 73 20 69 6e 20 64 61 74 61  of pages in data
382c0 62 61 73 65 20 50 31 20 74 6f 20 6d 65 6d 6f 72  base P1 to memor
382d0 79 20 63 65 6c 6c 20 50 32 2e 0a 2a 2f 0a 63 61  y cell P2..*/.ca
382e0 73 65 20 4f 50 5f 50 61 67 65 63 6f 75 6e 74 3a  se OP_Pagecount:
382f0 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
38300 20 6f 75 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20   out2 */.  pOut 
38310 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
38320 28 70 2c 20 70 4f 70 2