/ Hex Artifact Content
Login

Artifact c8e7bec8764b26b8e80fadffab2b9c18e8ed5ab2e92d1be5a7aebeed18ca8be5:


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 20 20 20 20 2a 28 7a 43  ;.    }.    *(zC
3740: 73 72 2b 2b 29 20 3d 20 63 3b 0a 20 20 20 20 73  sr++) = c;.    s
3750: 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
3760: 31 30 30 2c 20 7a 43 73 72 2c 20 22 25 64 5b 22  100, zCsr, "%d["
3770: 2c 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20  , pMem->n);.    
3780: 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53  zCsr += sqlite3S
3790: 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20  trlen30(zCsr);. 
37a0: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36     for(i=0; i<16
37b0: 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69   && i<pMem->n; i
37c0: 2b 2b 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  ++){.      sqlit
37d0: 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c  e3_snprintf(100,
37e0: 20 7a 43 73 72 2c 20 22 25 30 32 58 22 2c 20 28   zCsr, "%02X", (
37f0: 28 69 6e 74 29 70 4d 65 6d 2d 3e 7a 5b 69 5d 20  (int)pMem->z[i] 
3800: 26 20 30 78 46 46 29 29 3b 0a 20 20 20 20 20 20  & 0xFF));.      
3810: 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53  zCsr += sqlite3S
3820: 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20  trlen30(zCsr);. 
3830: 20 20 20 7d 0a 20 20 20 20 66 6f 72 28 69 3d 30     }.    for(i=0
3840: 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d 65 6d  ; i<16 && i<pMem
3850: 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  ->n; i++){.     
3860: 20 63 68 61 72 20 7a 20 3d 20 70 4d 65 6d 2d 3e   char z = pMem->
3870: 7a 5b 69 5d 3b 0a 20 20 20 20 20 20 69 66 28 20  z[i];.      if( 
3880: 7a 3c 33 32 20 7c 7c 20 7a 3e 31 32 36 20 29 20  z<32 || z>126 ) 
3890: 2a 7a 43 73 72 2b 2b 20 3d 20 27 2e 27 3b 0a 20  *zCsr++ = '.';. 
38a0: 20 20 20 20 20 65 6c 73 65 20 2a 7a 43 73 72 2b       else *zCsr+
38b0: 2b 20 3d 20 7a 3b 0a 20 20 20 20 7d 0a 20 20 20  + = z;.    }.   
38c0: 20 2a 28 7a 43 73 72 2b 2b 29 20 3d 20 27 5d 27   *(zCsr++) = ']'
38d0: 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d 45  ;.    if( f & ME
38e0: 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20  M_Zero ){.      
38f0: 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
3900: 28 31 30 30 2c 20 7a 43 73 72 2c 22 2b 25 64 7a  (100, zCsr,"+%dz
3910: 22 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a 65 72 6f 29  ",pMem->u.nZero)
3920: 3b 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20  ;.      zCsr += 
3930: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
3940: 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20  zCsr);.    }.   
3950: 20 2a 7a 43 73 72 20 3d 20 27 5c 30 27 3b 0a 20   *zCsr = '\0';. 
3960: 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d   }else if( f & M
3970: 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 69 6e  EM_Str ){.    in
3980: 74 20 6a 2c 20 6b 3b 0a 20 20 20 20 7a 42 75 66  t j, k;.    zBuf
3990: 5b 30 5d 20 3d 20 27 20 27 3b 0a 20 20 20 20 69  [0] = ' ';.    i
39a0: 66 28 20 66 20 26 20 4d 45 4d 5f 44 79 6e 20 29  f( f & MEM_Dyn )
39b0: 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20  {.      zBuf[1] 
39c0: 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61 73 73  = 'z';.      ass
39d0: 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53  ert( (f & (MEM_S
39e0: 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29  tatic|MEM_Ephem)
39f0: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
3a00: 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74  e if( f & MEM_St
3a10: 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20 7a 42  atic ){.      zB
3a20: 75 66 5b 31 5d 20 3d 20 27 74 27 3b 0a 20 20 20  uf[1] = 't';.   
3a30: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
3a40: 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68  (MEM_Dyn|MEM_Eph
3a50: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
3a60: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
3a70: 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20 20 20 20  _Ephem ){.      
3a80: 7a 42 75 66 5b 31 5d 20 3d 20 27 65 27 3b 0a 20  zBuf[1] = 'e';. 
3a90: 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20       assert( (f 
3aa0: 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45  & (MEM_Static|ME
3ab0: 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a 20 20  M_Dyn))==0 );.  
3ac0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a    }else{.      z
3ad0: 42 75 66 5b 31 5d 20 3d 20 27 73 27 3b 0a 20 20  Buf[1] = 's';.  
3ae0: 20 20 7d 0a 20 20 20 20 6b 20 3d 20 32 3b 0a 20    }.    k = 2;. 
3af0: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
3b00: 6e 74 66 28 31 30 30 2c 20 26 7a 42 75 66 5b 6b  ntf(100, &zBuf[k
3b10: 5d 2c 20 22 25 64 22 2c 20 70 4d 65 6d 2d 3e 6e  ], "%d", pMem->n
3b20: 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c 69  );.    k += sqli
3b30: 74 65 33 53 74 72 6c 65 6e 33 30 28 26 7a 42 75  te3Strlen30(&zBu
3b40: 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66 5b  f[k]);.    zBuf[
3b50: 6b 2b 2b 5d 20 3d 20 27 5b 27 3b 0a 20 20 20 20  k++] = '[';.    
3b60: 66 6f 72 28 6a 3d 30 3b 20 6a 3c 31 35 20 26 26  for(j=0; j<15 &&
3b70: 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20 6a 2b 2b 29   j<pMem->n; j++)
3b80: 7b 0a 20 20 20 20 20 20 75 38 20 63 20 3d 20 70  {.      u8 c = p
3b90: 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20 20 20 20 20  Mem->z[j];.     
3ba0: 20 69 66 28 20 63 3e 3d 30 78 32 30 20 26 26 20   if( c>=0x20 && 
3bb0: 63 3c 30 78 37 66 20 29 7b 0a 20 20 20 20 20 20  c<0x7f ){.      
3bc0: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 63 3b    zBuf[k++] = c;
3bd0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
3be0: 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20        zBuf[k++] 
3bf0: 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20 7d 0a 20  = '.';.      }. 
3c00: 20 20 20 7d 0a 20 20 20 20 7a 42 75 66 5b 6b 2b     }.    zBuf[k+
3c10: 2b 5d 20 3d 20 27 5d 27 3b 0a 20 20 20 20 73 71  +] = ']';.    sq
3c20: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31  lite3_snprintf(1
3c30: 30 30 2c 26 7a 42 75 66 5b 6b 5d 2c 20 65 6e 63  00,&zBuf[k], enc
3c40: 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d  names[pMem->enc]
3c50: 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c 69  );.    k += sqli
3c60: 74 65 33 53 74 72 6c 65 6e 33 30 28 26 7a 42 75  te3Strlen30(&zBu
3c70: 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66 5b  f[k]);.    zBuf[
3c80: 6b 2b 2b 5d 20 3d 20 30 3b 0a 20 20 7d 0a 7d 0a  k++] = 0;.  }.}.
3c90: 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
3ca0: 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a  QLITE_DEBUG./*.*
3cb0: 2a 20 50 72 69 6e 74 20 74 68 65 20 76 61 6c 75  * Print the valu
3cc0: 65 20 6f 66 20 61 20 72 65 67 69 73 74 65 72 20  e of a register 
3cd0: 66 6f 72 20 74 72 61 63 69 6e 67 20 70 75 72 70  for tracing purp
3ce0: 6f 73 65 73 3a 0a 2a 2f 0a 73 74 61 74 69 63 20  oses:.*/.static 
3cf0: 76 6f 69 64 20 6d 65 6d 54 72 61 63 65 50 72 69  void memTracePri
3d00: 6e 74 28 4d 65 6d 20 2a 70 29 7b 0a 20 20 69 66  nt(Mem *p){.  if
3d10: 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ( p->flags & MEM
3d20: 5f 55 6e 64 65 66 69 6e 65 64 20 29 7b 0a 20 20  _Undefined ){.  
3d30: 20 20 70 72 69 6e 74 66 28 22 20 75 6e 64 65 66    printf(" undef
3d40: 69 6e 65 64 22 29 3b 0a 20 20 7d 65 6c 73 65 20  ined");.  }else 
3d50: 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d  if( p->flags & M
3d60: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 70  EM_Null ){.    p
3d70: 72 69 6e 74 66 28 22 20 4e 55 4c 4c 22 29 3b 0a  rintf(" NULL");.
3d80: 20 20 7d 65 6c 73 65 20 69 66 28 20 28 70 2d 3e    }else if( (p->
3d90: 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74  flags & (MEM_Int
3da0: 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 28 4d 45 4d  |MEM_Str))==(MEM
3db0: 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 20 29 7b  _Int|MEM_Str) ){
3dc0: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 73 69  .    printf(" si
3dd0: 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29 3b  :%lld", p->u.i);
3de0: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e  .  }else if( p->
3df0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
3e00: 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20  ){.    printf(" 
3e10: 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29  i:%lld", p->u.i)
3e20: 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
3e30: 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
3e40: 4f 49 4e 54 0a 20 20 7d 65 6c 73 65 20 69 66 28  OINT.  }else if(
3e50: 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f   p->flags & MEM_
3e60: 52 65 61 6c 20 29 7b 0a 20 20 20 20 70 72 69 6e  Real ){.    prin
3e70: 74 66 28 22 20 72 3a 25 67 22 2c 20 70 2d 3e 75  tf(" r:%g", p->u
3e80: 2e 72 29 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 65  .r);.#endif.  }e
3e90: 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73  lse if( p->flags
3ea0: 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 20 29 7b   & MEM_RowSet ){
3eb0: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 28 72  .    printf(" (r
3ec0: 6f 77 73 65 74 29 22 29 3b 0a 20 20 7d 65 6c 73  owset)");.  }els
3ed0: 65 7b 0a 20 20 20 20 63 68 61 72 20 7a 42 75 66  e{.    char zBuf
3ee0: 5b 32 30 30 5d 3b 0a 20 20 20 20 73 71 6c 69 74  [200];.    sqlit
3ef0: 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79 50  e3VdbeMemPrettyP
3f00: 72 69 6e 74 28 70 2c 20 7a 42 75 66 29 3b 0a 20  rint(p, zBuf);. 
3f10: 20 20 20 70 72 69 6e 74 66 28 22 20 25 73 22 2c     printf(" %s",
3f20: 20 7a 42 75 66 29 3b 0a 20 20 7d 0a 20 20 69 66   zBuf);.  }.  if
3f30: 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ( p->flags & MEM
3f40: 5f 53 75 62 74 79 70 65 20 29 20 70 72 69 6e 74  _Subtype ) print
3f50: 66 28 22 20 73 75 62 74 79 70 65 3d 30 78 25 30  f(" subtype=0x%0
3f60: 32 78 22 2c 20 70 2d 3e 65 53 75 62 74 79 70 65  2x", p->eSubtype
3f70: 29 3b 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69 64  );.}.static void
3f80: 20 72 65 67 69 73 74 65 72 54 72 61 63 65 28 69   registerTrace(i
3f90: 6e 74 20 69 52 65 67 2c 20 4d 65 6d 20 2a 70 29  nt iReg, Mem *p)
3fa0: 7b 0a 20 20 70 72 69 6e 74 66 28 22 52 45 47 5b  {.  printf("REG[
3fb0: 25 64 5d 20 3d 20 22 2c 20 69 52 65 67 29 3b 0a  %d] = ", iReg);.
3fc0: 20 20 6d 65 6d 54 72 61 63 65 50 72 69 6e 74 28    memTracePrint(
3fd0: 70 29 3b 0a 20 20 70 72 69 6e 74 66 28 22 5c 6e  p);.  printf("\n
3fe0: 22 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  ");.  sqlite3Vdb
3ff0: 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61  eCheckMemInvaria
4000: 6e 74 73 28 70 29 3b 0a 7d 0a 23 65 6e 64 69 66  nts(p);.}.#endif
4010: 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
4020: 44 45 42 55 47 0a 23 20 20 64 65 66 69 6e 65 20  DEBUG.#  define 
4030: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 52  REGISTER_TRACE(R
4040: 2c 4d 29 20 69 66 28 64 62 2d 3e 66 6c 61 67 73  ,M) if(db->flags
4050: 26 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63  &SQLITE_VdbeTrac
4060: 65 29 72 65 67 69 73 74 65 72 54 72 61 63 65 28  e)registerTrace(
4070: 52 2c 4d 29 0a 23 65 6c 73 65 0a 23 20 20 64 65  R,M).#else.#  de
4080: 66 69 6e 65 20 52 45 47 49 53 54 45 52 5f 54 52  fine REGISTER_TR
4090: 41 43 45 28 52 2c 4d 29 0a 23 65 6e 64 69 66 0a  ACE(R,M).#endif.
40a0: 0a 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52  ..#ifdef VDBE_PR
40b0: 4f 46 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a 20 68 77  OFILE../* .** hw
40c0: 74 69 6d 65 2e 68 20 63 6f 6e 74 61 69 6e 73 20  time.h contains 
40d0: 69 6e 6c 69 6e 65 20 61 73 73 65 6d 62 6c 65 72  inline assembler
40e0: 20 63 6f 64 65 20 66 6f 72 20 69 6d 70 6c 65 6d   code for implem
40f0: 65 6e 74 69 6e 67 20 0a 2a 2a 20 68 69 67 68 2d  enting .** high-
4100: 70 65 72 66 6f 72 6d 61 6e 63 65 20 74 69 6d 69  performance timi
4110: 6e 67 20 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a  ng routines..*/.
4120: 23 69 6e 63 6c 75 64 65 20 22 68 77 74 69 6d 65  #include "hwtime
4130: 2e 68 22 0a 0a 23 65 6e 64 69 66 0a 0a 23 69 66  .h"..#endif..#if
4140: 6e 64 65 66 20 4e 44 45 42 55 47 0a 2f 2a 0a 2a  ndef NDEBUG./*.*
4150: 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  * This function 
4160: 69 73 20 6f 6e 6c 79 20 63 61 6c 6c 65 64 20 66  is only called f
4170: 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e 20 61 73  rom within an as
4180: 73 65 72 74 28 29 20 65 78 70 72 65 73 73 69 6f  sert() expressio
4190: 6e 2e 20 49 74 0a 2a 2a 20 63 68 65 63 6b 73 20  n. It.** checks 
41a0: 74 68 61 74 20 74 68 65 20 73 71 6c 69 74 65 33  that the sqlite3
41b0: 2e 6e 54 72 61 6e 73 61 63 74 69 6f 6e 20 76 61  .nTransaction va
41c0: 72 69 61 62 6c 65 20 69 73 20 63 6f 72 72 65 63  riable is correc
41d0: 74 6c 79 20 73 65 74 20 74 6f 0a 2a 2a 20 74 68  tly set to.** th
41e0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d  e number of non-
41f0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65  transaction save
4200: 70 6f 69 6e 74 73 20 63 75 72 72 65 6e 74 6c 79  points currently
4210: 20 69 6e 20 74 68 65 20 0a 2a 2a 20 6c 69 6e 6b   in the .** link
4220: 65 64 20 6c 69 73 74 20 73 74 61 72 74 69 6e 67  ed list starting
4230: 20 61 74 20 73 71 6c 69 74 65 33 2e 70 53 61 76   at sqlite3.pSav
4240: 65 70 6f 69 6e 74 2e 0a 2a 2a 20 0a 2a 2a 20 55  epoint..** .** U
4250: 73 61 67 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  sage:.**.**     
4260: 61 73 73 65 72 74 28 20 63 68 65 63 6b 53 61 76  assert( checkSav
4270: 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29 20  epointCount(db) 
4280: 29 3b 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  );.*/.static int
4290: 20 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43   checkSavepointC
42a0: 6f 75 6e 74 28 73 71 6c 69 74 65 33 20 2a 64 62  ount(sqlite3 *db
42b0: 29 7b 0a 20 20 69 6e 74 20 6e 20 3d 20 30 3b 0a  ){.  int n = 0;.
42c0: 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 3b 0a    Savepoint *p;.
42d0: 20 20 66 6f 72 28 70 3d 64 62 2d 3e 70 53 61 76    for(p=db->pSav
42e0: 65 70 6f 69 6e 74 3b 20 70 3b 20 70 3d 70 2d 3e  epoint; p; p=p->
42f0: 70 4e 65 78 74 29 20 6e 2b 2b 3b 0a 20 20 61 73  pNext) n++;.  as
4300: 73 65 72 74 28 20 6e 3d 3d 28 64 62 2d 3e 6e 53  sert( n==(db->nS
4310: 61 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 69  avepoint + db->i
4320: 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65  sTransactionSave
4330: 70 6f 69 6e 74 29 20 29 3b 0a 20 20 72 65 74 75  point) );.  retu
4340: 72 6e 20 31 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  rn 1;.}.#endif..
4350: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  /*.** Return the
4360: 20 72 65 67 69 73 74 65 72 20 6f 66 20 70 4f 70   register of pOp
4370: 2d 3e 70 32 20 61 66 74 65 72 20 66 69 72 73 74  ->p2 after first
4380: 20 70 72 65 70 61 72 69 6e 67 20 69 74 20 74 6f   preparing it to
4390: 20 62 65 0a 2a 2a 20 6f 76 65 72 77 72 69 74 74   be.** overwritt
43a0: 65 6e 20 77 69 74 68 20 61 6e 20 69 6e 74 65 67  en with an integ
43b0: 65 72 20 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61  er value..*/.sta
43c0: 74 69 63 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c  tic SQLITE_NOINL
43d0: 49 4e 45 20 4d 65 6d 20 2a 6f 75 74 32 50 72 65  INE Mem *out2Pre
43e0: 72 65 6c 65 61 73 65 57 69 74 68 43 6c 65 61 72  releaseWithClear
43f0: 28 4d 65 6d 20 2a 70 4f 75 74 29 7b 0a 20 20 73  (Mem *pOut){.  s
4400: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
4410: 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 70 4f  Null(pOut);.  pO
4420: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
4430: 49 6e 74 3b 0a 20 20 72 65 74 75 72 6e 20 70 4f  Int;.  return pO
4440: 75 74 3b 0a 7d 0a 73 74 61 74 69 63 20 4d 65 6d  ut;.}.static Mem
4450: 20 2a 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65   *out2Prerelease
4460: 28 56 64 62 65 20 2a 70 2c 20 56 64 62 65 4f 70  (Vdbe *p, VdbeOp
4470: 20 2a 70 4f 70 29 7b 0a 20 20 4d 65 6d 20 2a 70   *pOp){.  Mem *p
4480: 4f 75 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Out;.  assert( p
4490: 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 61 73  Op->p2>0 );.  as
44a0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28  sert( pOp->p2<=(
44b0: 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
44c0: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75  Cursor) );.  pOu
44d0: 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70  t = &p->aMem[pOp
44e0: 2d 3e 70 32 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75  ->p2];.  memAbou
44f0: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75  tToChange(p, pOu
4500: 74 29 3b 0a 20 20 69 66 28 20 56 64 62 65 4d 65  t);.  if( VdbeMe
4510: 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74 29 20 29  mDynamic(pOut) )
4520: 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e  { /*OPTIMIZATION
4530: 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20  -IF-FALSE*/.    
4540: 72 65 74 75 72 6e 20 6f 75 74 32 50 72 65 72 65  return out2Prere
4550: 6c 65 61 73 65 57 69 74 68 43 6c 65 61 72 28 70  leaseWithClear(p
4560: 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  Out);.  }else{. 
4570: 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d     pOut->flags =
4580: 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 72 65   MEM_Int;.    re
4590: 74 75 72 6e 20 70 4f 75 74 3b 0a 20 20 7d 0a 7d  turn pOut;.  }.}
45a0: 0a 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63 75 74 65  .../*.** Execute
45b0: 20 61 73 20 6d 75 63 68 20 6f 66 20 61 20 56 44   as much of a VD
45c0: 42 45 20 70 72 6f 67 72 61 6d 20 61 73 20 77 65  BE program as we
45d0: 20 63 61 6e 2e 0a 2a 2a 20 54 68 69 73 20 69 73   can..** This is
45e0: 20 74 68 65 20 63 6f 72 65 20 6f 66 20 73 71 6c   the core of sql
45f0: 69 74 65 33 5f 73 74 65 70 28 29 2e 20 20 0a 2a  ite3_step().  .*
4600: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62  /.int sqlite3Vdb
4610: 65 45 78 65 63 28 0a 20 20 56 64 62 65 20 2a 70  eExec(.  Vdbe *p
4620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4630: 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20      /* The VDBE 
4640: 2a 2f 0a 29 7b 0a 20 20 4f 70 20 2a 61 4f 70 20  */.){.  Op *aOp 
4650: 3d 20 70 2d 3e 61 4f 70 3b 20 20 20 20 20 20 20  = p->aOp;       
4660: 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d     /* Copy of p-
4670: 3e 61 4f 70 20 2a 2f 0a 20 20 4f 70 20 2a 70 4f  >aOp */.  Op *pO
4680: 70 20 3d 20 61 4f 70 3b 20 20 20 20 20 20 20 20  p = aOp;        
4690: 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20       /* Current 
46a0: 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66  operation */.#if
46b0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
46c0: 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65  DEBUG) || define
46d0: 64 28 56 44 42 45 5f 50 52 4f 46 49 4c 45 29 0a  d(VDBE_PROFILE).
46e0: 20 20 4f 70 20 2a 70 4f 72 69 67 4f 70 3b 20 20    Op *pOrigOp;  
46f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
4700: 56 61 6c 75 65 20 6f 66 20 70 4f 70 20 61 74 20  Value of pOp at 
4710: 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65 20 6c  the top of the l
4720: 6f 6f 70 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69  oop */.#endif.#i
4730: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
4740: 47 0a 20 20 69 6e 74 20 6e 45 78 74 72 61 44 65  G.  int nExtraDe
4750: 6c 65 74 65 20 3d 20 30 3b 20 20 20 20 20 20 2f  lete = 0;      /
4760: 2a 20 56 65 72 69 66 69 65 73 20 46 4f 52 44 45  * Verifies FORDE
4770: 4c 45 54 45 20 61 6e 64 20 41 55 58 44 45 4c 45  LETE and AUXDELE
4780: 54 45 20 66 6c 61 67 73 20 2a 2f 0a 23 65 6e 64  TE flags */.#end
4790: 69 66 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51  if.  int rc = SQ
47a0: 4c 49 54 45 5f 4f 4b 3b 20 20 20 20 20 20 20 20  LITE_OK;        
47b0: 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75  /* Value to retu
47c0: 72 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20  rn */.  sqlite3 
47d0: 2a 64 62 20 3d 20 70 2d 3e 64 62 3b 20 20 20 20  *db = p->db;    
47e0: 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
47f0: 73 65 20 2a 2f 0a 20 20 75 38 20 72 65 73 65 74  se */.  u8 reset
4800: 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20  SchemaOnFault = 
4810: 30 3b 20 2f 2a 20 52 65 73 65 74 20 73 63 68 65  0; /* Reset sche
4820: 6d 61 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f  ma after an erro
4830: 72 20 69 66 20 70 6f 73 69 74 69 76 65 20 2a 2f  r if positive */
4840: 0a 20 20 75 38 20 65 6e 63 6f 64 69 6e 67 20 3d  .  u8 encoding =
4850: 20 45 4e 43 28 64 62 29 3b 20 20 20 20 20 2f 2a   ENC(db);     /*
4860: 20 54 68 65 20 64 61 74 61 62 61 73 65 20 65 6e   The database en
4870: 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  coding */.  int 
4880: 69 43 6f 6d 70 61 72 65 20 3d 20 30 3b 20 20 20  iCompare = 0;   
4890: 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74         /* Result
48a0: 20 6f 66 20 6c 61 73 74 20 63 6f 6d 70 61 72 69   of last compari
48b0: 73 6f 6e 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  son */.  unsigne
48c0: 64 20 6e 56 6d 53 74 65 70 20 3d 20 30 3b 20 20  d nVmStep = 0;  
48d0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
48e0: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
48f0: 20 73 74 65 70 73 20 2a 2f 0a 23 69 66 6e 64 65   steps */.#ifnde
4900: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  f SQLITE_OMIT_PR
4910: 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a  OGRESS_CALLBACK.
4920: 20 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67    unsigned nProg
4930: 72 65 73 73 4c 69 6d 69 74 3b 20 20 20 2f 2a 20  ressLimit;   /* 
4940: 49 6e 76 6f 6b 65 20 78 50 72 6f 67 72 65 73 73  Invoke xProgress
4950: 28 29 20 77 68 65 6e 20 6e 56 6d 53 74 65 70 20  () when nVmStep 
4960: 72 65 61 63 68 65 73 20 74 68 69 73 20 2a 2f 0a  reaches this */.
4970: 23 65 6e 64 69 66 0a 20 20 4d 65 6d 20 2a 61 4d  #endif.  Mem *aM
4980: 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 20 20 20  em = p->aMem;   
4990: 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 70      /* Copy of p
49a0: 2d 3e 61 4d 65 6d 20 2a 2f 0a 20 20 4d 65 6d 20  ->aMem */.  Mem 
49b0: 2a 70 49 6e 31 20 3d 20 30 3b 20 20 20 20 20 20  *pIn1 = 0;      
49c0: 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20 69 6e         /* 1st in
49d0: 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  put operand */. 
49e0: 20 4d 65 6d 20 2a 70 49 6e 32 20 3d 20 30 3b 20   Mem *pIn2 = 0; 
49f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32              /* 2
4a00: 6e 64 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64  nd input operand
4a10: 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 33 20   */.  Mem *pIn3 
4a20: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20  = 0;            
4a30: 20 2f 2a 20 33 72 64 20 69 6e 70 75 74 20 6f 70   /* 3rd input op
4a40: 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a  erand */.  Mem *
4a50: 70 4f 75 74 20 3d 20 30 3b 20 20 20 20 20 20 20  pOut = 0;       
4a60: 20 20 20 20 20 20 2f 2a 20 4f 75 74 70 75 74 20        /* Output 
4a70: 6f 70 65 72 61 6e 64 20 2a 2f 0a 23 69 66 64 65  operand */.#ifde
4a80: 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20  f VDBE_PROFILE. 
4a90: 20 75 36 34 20 73 74 61 72 74 3b 20 20 20 20 20   u64 start;     
4aa0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
4ab0: 50 55 20 63 6c 6f 63 6b 20 63 6f 75 6e 74 20 61  PU clock count a
4ac0: 74 20 73 74 61 72 74 20 6f 66 20 6f 70 63 6f 64  t start of opcod
4ad0: 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 2f 2a  e */.#endif.  /*
4ae0: 2a 2a 20 49 4e 53 45 52 54 20 53 54 41 43 4b 20  ** INSERT STACK 
4af0: 55 4e 49 4f 4e 20 48 45 52 45 20 2a 2a 2a 2f 0a  UNION HERE ***/.
4b00: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6d 61  .  assert( p->ma
4b10: 67 69 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43 5f  gic==VDBE_MAGIC_
4b20: 52 55 4e 20 29 3b 20 20 2f 2a 20 73 71 6c 69 74  RUN );  /* sqlit
4b30: 65 33 5f 73 74 65 70 28 29 20 76 65 72 69 66 69  e3_step() verifi
4b40: 65 73 20 74 68 69 73 20 2a 2f 0a 20 20 73 71 6c  es this */.  sql
4b50: 69 74 65 33 56 64 62 65 45 6e 74 65 72 28 70 29  ite3VdbeEnter(p)
4b60: 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53  ;.  if( p->rc==S
4b70: 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20  QLITE_NOMEM ){. 
4b80: 20 20 20 2f 2a 20 54 68 69 73 20 68 61 70 70 65     /* This happe
4b90: 6e 73 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29  ns if a malloc()
4ba0: 20 69 6e 73 69 64 65 20 61 20 63 61 6c 6c 20 74   inside a call t
4bb0: 6f 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  o sqlite3_column
4bc0: 5f 74 65 78 74 28 29 20 6f 72 0a 20 20 20 20 2a  _text() or.    *
4bd0: 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  * sqlite3_column
4be0: 5f 74 65 78 74 31 36 28 29 20 66 61 69 6c 65 64  _text16() failed
4bf0: 2e 20 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6e  .  */.    goto n
4c00: 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 61 73 73  o_mem;.  }.  ass
4c10: 65 72 74 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49  ert( p->rc==SQLI
4c20: 54 45 5f 4f 4b 20 7c 7c 20 28 70 2d 3e 72 63 26  TE_OK || (p->rc&
4c30: 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f 42 55  0xff)==SQLITE_BU
4c40: 53 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  SY );.  assert( 
4c50: 70 2d 3e 62 49 73 52 65 61 64 65 72 20 7c 7c 20  p->bIsReader || 
4c60: 70 2d 3e 72 65 61 64 4f 6e 6c 79 21 3d 30 20 29  p->readOnly!=0 )
4c70: 3b 0a 20 20 70 2d 3e 69 43 75 72 72 65 6e 74 54  ;.  p->iCurrentT
4c80: 69 6d 65 20 3d 20 30 3b 0a 20 20 61 73 73 65 72  ime = 0;.  asser
4c90: 74 28 20 70 2d 3e 65 78 70 6c 61 69 6e 3d 3d 30  t( p->explain==0
4ca0: 20 29 3b 0a 20 20 70 2d 3e 70 52 65 73 75 6c 74   );.  p->pResult
4cb0: 53 65 74 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 62  Set = 0;.  db->b
4cc0: 75 73 79 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79  usyHandler.nBusy
4cd0: 20 3d 20 30 3b 0a 20 20 69 66 28 20 64 62 2d 3e   = 0;.  if( db->
4ce0: 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64  u1.isInterrupted
4cf0: 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
4d00: 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a  e_to_interrupt;.
4d10: 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54    sqlite3VdbeIOT
4d20: 72 61 63 65 53 71 6c 28 70 29 3b 0a 23 69 66 6e  raceSql(p);.#ifn
4d30: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
4d40: 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43  PROGRESS_CALLBAC
4d50: 4b 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f  K.  if( db->xPro
4d60: 67 72 65 73 73 20 29 7b 0a 20 20 20 20 75 33 32  gress ){.    u32
4d70: 20 69 50 72 69 6f 72 20 3d 20 70 2d 3e 61 43 6f   iPrior = p->aCo
4d80: 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d  unter[SQLITE_STM
4d90: 54 53 54 41 54 55 53 5f 56 4d 5f 53 54 45 50 5d  TSTATUS_VM_STEP]
4da0: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 30 20  ;.    assert( 0 
4db0: 3c 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f  < db->nProgressO
4dc0: 70 73 20 29 3b 0a 20 20 20 20 6e 50 72 6f 67 72  ps );.    nProgr
4dd0: 65 73 73 4c 69 6d 69 74 20 3d 20 64 62 2d 3e 6e  essLimit = db->n
4de0: 50 72 6f 67 72 65 73 73 4f 70 73 20 2d 20 28 69  ProgressOps - (i
4df0: 50 72 69 6f 72 20 25 20 64 62 2d 3e 6e 50 72 6f  Prior % db->nPro
4e00: 67 72 65 73 73 4f 70 73 29 3b 0a 20 20 7d 65 6c  gressOps);.  }el
4e10: 73 65 7b 0a 20 20 20 20 6e 50 72 6f 67 72 65 73  se{.    nProgres
4e20: 73 4c 69 6d 69 74 20 3d 20 30 78 66 66 66 66 66  sLimit = 0xfffff
4e30: 66 66 66 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  fff;.  }.#endif.
4e40: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
4e50: 42 55 47 0a 20 20 73 71 6c 69 74 65 33 42 65 67  BUG.  sqlite3Beg
4e60: 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29  inBenignMalloc()
4e70: 3b 0a 20 20 69 66 28 20 70 2d 3e 70 63 3d 3d 30  ;.  if( p->pc==0
4e80: 0a 20 20 20 26 26 20 28 70 2d 3e 64 62 2d 3e 66  .   && (p->db->f
4e90: 6c 61 67 73 20 26 20 28 53 51 4c 49 54 45 5f 56  lags & (SQLITE_V
4ea0: 64 62 65 4c 69 73 74 69 6e 67 7c 53 51 4c 49 54  dbeListing|SQLIT
4eb0: 45 5f 56 64 62 65 45 51 50 7c 53 51 4c 49 54 45  E_VdbeEQP|SQLITE
4ec0: 5f 56 64 62 65 54 72 61 63 65 29 29 21 3d 30 0a  _VdbeTrace))!=0.
4ed0: 20 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a    ){.    int i;.
4ee0: 20 20 20 20 69 6e 74 20 6f 6e 63 65 20 3d 20 31      int once = 1
4ef0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
4f00: 65 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20  ePrintSql(p);.  
4f10: 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61    if( p->db->fla
4f20: 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65  gs & SQLITE_Vdbe
4f30: 4c 69 73 74 69 6e 67 20 29 7b 0a 20 20 20 20 20  Listing ){.     
4f40: 20 70 72 69 6e 74 66 28 22 56 44 42 45 20 50 72   printf("VDBE Pr
4f50: 6f 67 72 61 6d 20 4c 69 73 74 69 6e 67 3a 5c 6e  ogram Listing:\n
4f60: 22 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d  ");.      for(i=
4f70: 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b  0; i<p->nOp; i++
4f80: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
4f90: 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74  e3VdbePrintOp(st
4fa0: 64 6f 75 74 2c 20 69 2c 20 26 61 4f 70 5b 69 5d  dout, i, &aOp[i]
4fb0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
4fc0: 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e  .    if( p->db->
4fd0: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56  flags & SQLITE_V
4fe0: 64 62 65 45 51 50 20 29 7b 0a 20 20 20 20 20 20  dbeEQP ){.      
4ff0: 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f  for(i=0; i<p->nO
5000: 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  p; i++){.       
5010: 20 69 66 28 20 61 4f 70 5b 69 5d 2e 6f 70 63 6f   if( aOp[i].opco
5020: 64 65 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e 20 29  de==OP_Explain )
5030: 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  {.          if( 
5040: 6f 6e 63 65 20 29 20 70 72 69 6e 74 66 28 22 56  once ) printf("V
5050: 44 42 45 20 51 75 65 72 79 20 50 6c 61 6e 3a 5c  DBE Query Plan:\
5060: 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70  n");.          p
5070: 72 69 6e 74 66 28 22 25 73 5c 6e 22 2c 20 61 4f  rintf("%s\n", aO
5080: 70 5b 69 5d 2e 70 34 2e 7a 29 3b 0a 20 20 20 20  p[i].p4.z);.    
5090: 20 20 20 20 20 20 6f 6e 63 65 20 3d 20 30 3b 0a        once = 0;.
50a0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
50b0: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  }.    }.    if( 
50c0: 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53  p->db->flags & S
50d0: 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 20  QLITE_VdbeTrace 
50e0: 29 20 20 70 72 69 6e 74 66 28 22 56 44 42 45 20  )  printf("VDBE 
50f0: 54 72 61 63 65 3a 5c 6e 22 29 3b 0a 20 20 7d 0a  Trace:\n");.  }.
5100: 20 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69    sqlite3EndBeni
5110: 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 23 65 6e 64  gnMalloc();.#end
5120: 69 66 0a 20 20 66 6f 72 28 70 4f 70 3d 26 61 4f  if.  for(pOp=&aO
5130: 70 5b 70 2d 3e 70 63 5d 3b 20 31 3b 20 70 4f 70  p[p->pc]; 1; pOp
5140: 2b 2b 29 7b 0a 20 20 20 20 2f 2a 20 45 72 72 6f  ++){.    /* Erro
5150: 72 73 20 61 72 65 20 64 65 74 65 63 74 65 64 20  rs are detected 
5160: 62 79 20 69 6e 64 69 76 69 64 75 61 6c 20 6f 70  by individual op
5170: 63 6f 64 65 73 2c 20 77 69 74 68 20 61 6e 20 69  codes, with an i
5180: 6d 6d 65 64 69 61 74 65 0a 20 20 20 20 2a 2a 20  mmediate.    ** 
5190: 6a 75 6d 70 73 20 74 6f 20 61 62 6f 72 74 5f 64  jumps to abort_d
51a0: 75 65 5f 74 6f 5f 65 72 72 6f 72 2e 20 2a 2f 0a  ue_to_error. */.
51b0: 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d      assert( rc==
51c0: 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 0a 20 20  SQLITE_OK );..  
51d0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 3e 3d 61    assert( pOp>=a
51e0: 4f 70 20 26 26 20 70 4f 70 3c 26 61 4f 70 5b 70  Op && pOp<&aOp[p
51f0: 2d 3e 6e 4f 70 5d 29 3b 0a 23 69 66 64 65 66 20  ->nOp]);.#ifdef 
5200: 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20  VDBE_PROFILE.   
5210: 20 73 74 61 72 74 20 3d 20 73 71 6c 69 74 65 33   start = sqlite3
5220: 48 77 74 69 6d 65 28 29 3b 0a 23 65 6e 64 69 66  Hwtime();.#endif
5230: 0a 20 20 20 20 6e 56 6d 53 74 65 70 2b 2b 3b 0a  .    nVmStep++;.
5240: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
5250: 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54  ABLE_STMT_SCANST
5260: 41 54 55 53 0a 20 20 20 20 69 66 28 20 70 2d 3e  ATUS.    if( p->
5270: 61 6e 45 78 65 63 20 29 20 70 2d 3e 61 6e 45 78  anExec ) p->anEx
5280: 65 63 5b 28 69 6e 74 29 28 70 4f 70 2d 61 4f 70  ec[(int)(pOp-aOp
5290: 29 5d 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20  )]++;.#endif..  
52a0: 20 20 2f 2a 20 4f 6e 6c 79 20 61 6c 6c 6f 77 20    /* Only allow 
52b0: 74 72 61 63 69 6e 67 20 69 66 20 53 51 4c 49 54  tracing if SQLIT
52c0: 45 5f 44 45 42 55 47 20 69 73 20 64 65 66 69 6e  E_DEBUG is defin
52d0: 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65  ed..    */.#ifde
52e0: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
52f0: 20 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73     if( db->flags
5300: 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72   & SQLITE_VdbeTr
5310: 61 63 65 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ace ){.      sql
5320: 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28  ite3VdbePrintOp(
5330: 73 74 64 6f 75 74 2c 20 28 69 6e 74 29 28 70 4f  stdout, (int)(pO
5340: 70 20 2d 20 61 4f 70 29 2c 20 70 4f 70 29 3b 0a  p - aOp), pOp);.
5350: 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20      }.#endif.   
5360: 20 20 20 0a 0a 20 20 20 20 2f 2a 20 43 68 65 63     ..    /* Chec
5370: 6b 20 74 6f 20 73 65 65 20 69 66 20 77 65 20 6e  k to see if we n
5380: 65 65 64 20 74 6f 20 73 69 6d 75 6c 61 74 65 20  eed to simulate 
5390: 61 6e 20 69 6e 74 65 72 72 75 70 74 2e 20 20 54  an interrupt.  T
53a0: 68 69 73 20 6f 6e 6c 79 20 68 61 70 70 65 6e 73  his only happens
53b0: 0a 20 20 20 20 2a 2a 20 69 66 20 77 65 20 68 61  .    ** if we ha
53c0: 76 65 20 61 20 73 70 65 63 69 61 6c 20 74 65 73  ve a special tes
53d0: 74 20 62 75 69 6c 64 2e 0a 20 20 20 20 2a 2f 0a  t build..    */.
53e0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
53f0: 53 54 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74  ST.    if( sqlit
5400: 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75  e3_interrupt_cou
5410: 6e 74 3e 30 20 29 7b 0a 20 20 20 20 20 20 73 71  nt>0 ){.      sq
5420: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f  lite3_interrupt_
5430: 63 6f 75 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 69  count--;.      i
5440: 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  f( sqlite3_inter
5450: 72 75 70 74 5f 63 6f 75 6e 74 3d 3d 30 20 29 7b  rupt_count==0 ){
5460: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
5470: 5f 69 6e 74 65 72 72 75 70 74 28 64 62 29 3b 0a  _interrupt(db);.
5480: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65        }.    }.#e
5490: 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 53 61 6e  ndif..    /* San
54a0: 69 74 79 20 63 68 65 63 6b 69 6e 67 20 6f 6e 20  ity checking on 
54b0: 6f 74 68 65 72 20 6f 70 65 72 61 6e 64 73 20 2a  other operands *
54c0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
54d0: 44 45 42 55 47 0a 20 20 20 20 7b 0a 20 20 20 20  DEBUG.    {.    
54e0: 20 20 75 38 20 6f 70 50 72 6f 70 65 72 74 79 20    u8 opProperty 
54f0: 3d 20 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50  = sqlite3OpcodeP
5500: 72 6f 70 65 72 74 79 5b 70 4f 70 2d 3e 6f 70 63  roperty[pOp->opc
5510: 6f 64 65 5d 3b 0a 20 20 20 20 20 20 69 66 28 20  ode];.      if( 
5520: 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50  (opProperty & OP
5530: 46 4c 47 5f 49 4e 31 29 21 3d 30 20 29 7b 0a 20  FLG_IN1)!=0 ){. 
5540: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
5550: 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 20 20  Op->p1>0 );.    
5560: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
5570: 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  >p1<=(p->nMem+1 
5580: 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  - p->nCursor) );
5590: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
55a0: 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65   memIsValid(&aMe
55b0: 6d 5b 70 4f 70 2d 3e 70 31 5d 29 20 29 3b 0a 20  m[pOp->p1]) );. 
55c0: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73         assert( s
55d0: 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d  qlite3VdbeCheckM
55e0: 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 26 61 4d  emInvariants(&aM
55f0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 20 29 3b 0a  em[pOp->p1]) );.
5600: 20 20 20 20 20 20 20 20 52 45 47 49 53 54 45 52          REGISTER
5610: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20  _TRACE(pOp->p1, 
5620: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 3b  &aMem[pOp->p1]);
5630: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
5640: 66 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26  f( (opProperty &
5650: 20 4f 50 46 4c 47 5f 49 4e 32 29 21 3d 30 20 29   OPFLG_IN2)!=0 )
5660: 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
5670: 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20  ( pOp->p2>0 );. 
5680: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
5690: 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p2<=(p->nMem
56a0: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
56b0: 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
56c0: 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
56d0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 20 29  aMem[pOp->p2]) )
56e0: 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
56f0: 28 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65  ( sqlite3VdbeChe
5700: 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28  ckMemInvariants(
5710: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 20  &aMem[pOp->p2]) 
5720: 29 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49 53  );.        REGIS
5730: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
5740: 32 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  2, &aMem[pOp->p2
5750: 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ]);.      }.    
5760: 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72 74    if( (opPropert
5770: 79 20 26 20 4f 50 46 4c 47 5f 49 4e 33 29 21 3d  y & OPFLG_IN3)!=
5780: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  0 ){.        ass
5790: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29  ert( pOp->p3>0 )
57a0: 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
57b0: 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  ( pOp->p3<=(p->n
57c0: 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
57d0: 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61  or) );.        a
57e0: 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
57f0: 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  d(&aMem[pOp->p3]
5800: 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  ) );.        ass
5810: 65 72 74 28 20 73 71 6c 69 74 65 33 56 64 62 65  ert( sqlite3Vdbe
5820: 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e  CheckMemInvarian
5830: 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  ts(&aMem[pOp->p3
5840: 5d 29 20 29 3b 0a 20 20 20 20 20 20 20 20 52 45  ]) );.        RE
5850: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
5860: 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ->p3, &aMem[pOp-
5870: 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20  >p3]);.      }. 
5880: 20 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70       if( (opProp
5890: 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 4f 55 54  erty & OPFLG_OUT
58a0: 32 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  2)!=0 ){.       
58b0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
58c0: 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  >0 );.        as
58d0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28  sert( pOp->p2<=(
58e0: 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
58f0: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20  Cursor) );.     
5900: 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
5910: 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70  nge(p, &aMem[pOp
5920: 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 20 20 7d 0a  ->p2]);.      }.
5930: 20 20 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f        if( (opPro
5940: 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 4f 55  perty & OPFLG_OU
5950: 54 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  T3)!=0 ){.      
5960: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
5970: 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61  3>0 );.        a
5980: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d  ssert( pOp->p3<=
5990: 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
59a0: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20  nCursor) );.    
59b0: 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
59c0: 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f  ange(p, &aMem[pO
59d0: 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 7d  p->p3]);.      }
59e0: 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 23 69  .    }.#endif.#i
59f0: 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
5a00: 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e  _DEBUG) || defin
5a10: 65 64 28 56 44 42 45 5f 50 52 4f 46 49 4c 45 29  ed(VDBE_PROFILE)
5a20: 0a 20 20 20 20 70 4f 72 69 67 4f 70 20 3d 20 70  .    pOrigOp = p
5a30: 4f 70 3b 0a 23 65 6e 64 69 66 0a 20 20 0a 20 20  Op;.#endif.  .  
5a40: 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f    switch( pOp->o
5a50: 70 63 6f 64 65 20 29 7b 0a 0a 2f 2a 2a 2a 2a 2a  pcode ){../*****
5a60: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5a70: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5a80: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5a90: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5aa0: 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57 68 61 74  ********.** What
5ab0: 20 66 6f 6c 6c 6f 77 73 20 69 73 20 61 20 6d 61   follows is a ma
5ac0: 73 73 69 76 65 20 73 77 69 74 63 68 20 73 74 61  ssive switch sta
5ad0: 74 65 6d 65 6e 74 20 77 68 65 72 65 20 65 61 63  tement where eac
5ae0: 68 20 63 61 73 65 20 69 6d 70 6c 65 6d 65 6e 74  h case implement
5af0: 73 20 61 0a 2a 2a 20 73 65 70 61 72 61 74 65 20  s a.** separate 
5b00: 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e 20 74  instruction in t
5b10: 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  he virtual machi
5b20: 6e 65 2e 20 20 49 66 20 77 65 20 66 6f 6c 6c 6f  ne.  If we follo
5b30: 77 20 74 68 65 20 75 73 75 61 6c 0a 2a 2a 20 69  w the usual.** i
5b40: 6e 64 65 6e 74 61 74 69 6f 6e 20 63 6f 6e 76 65  ndentation conve
5b50: 6e 74 69 6f 6e 73 2c 20 65 61 63 68 20 63 61 73  ntions, each cas
5b60: 65 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 64 65  e should be inde
5b70: 6e 74 65 64 20 62 79 20 36 20 73 70 61 63 65 73  nted by 6 spaces
5b80: 2e 20 20 42 75 74 0a 2a 2a 20 74 68 61 74 20 69  .  But.** that i
5b90: 73 20 61 20 6c 6f 74 20 6f 66 20 77 61 73 74 65  s a lot of waste
5ba0: 64 20 73 70 61 63 65 20 6f 6e 20 74 68 65 20 6c  d space on the l
5bb0: 65 66 74 20 6d 61 72 67 69 6e 2e 20 20 53 6f 20  eft margin.  So 
5bc0: 74 68 65 20 63 6f 64 65 20 77 69 74 68 69 6e 0a  the code within.
5bd0: 2a 2a 20 74 68 65 20 73 77 69 74 63 68 20 73 74  ** the switch st
5be0: 61 74 65 6d 65 6e 74 20 77 69 6c 6c 20 62 72 65  atement will bre
5bf0: 61 6b 20 77 69 74 68 20 63 6f 6e 76 65 6e 74 69  ak with conventi
5c00: 6f 6e 20 61 6e 64 20 62 65 20 66 6c 75 73 68 2d  on and be flush-
5c10: 6c 65 66 74 2e 20 41 6e 6f 74 68 65 72 0a 2a 2a  left. Another.**
5c20: 20 62 69 67 20 63 6f 6d 6d 65 6e 74 20 28 73 69   big comment (si
5c30: 6d 69 6c 61 72 20 74 6f 20 74 68 69 73 20 6f 6e  milar to this on
5c40: 65 29 20 77 69 6c 6c 20 6d 61 72 6b 20 74 68 65  e) will mark the
5c50: 20 70 6f 69 6e 74 20 69 6e 20 74 68 65 20 63 6f   point in the co
5c60: 64 65 20 77 68 65 72 65 0a 2a 2a 20 77 65 20 74  de where.** we t
5c70: 72 61 6e 73 69 74 69 6f 6e 20 62 61 63 6b 20 74  ransition back t
5c80: 6f 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61  o normal indenta
5c90: 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  tion..**.** The 
5ca0: 66 6f 72 6d 61 74 74 69 6e 67 20 6f 66 20 65 61  formatting of ea
5cb0: 63 68 20 63 61 73 65 20 69 73 20 69 6d 70 6f 72  ch case is impor
5cc0: 74 61 6e 74 2e 20 20 54 68 65 20 6d 61 6b 65 66  tant.  The makef
5cd0: 69 6c 65 20 66 6f 72 20 53 51 4c 69 74 65 0a 2a  ile for SQLite.*
5ce0: 2a 20 67 65 6e 65 72 61 74 65 73 20 74 77 6f 20  * generates two 
5cf0: 43 20 66 69 6c 65 73 20 22 6f 70 63 6f 64 65 73  C files "opcodes
5d00: 2e 68 22 20 61 6e 64 20 22 6f 70 63 6f 64 65 73  .h" and "opcodes
5d10: 2e 63 22 20 62 79 20 73 63 61 6e 6e 69 6e 67 20  .c" by scanning 
5d20: 74 68 69 73 0a 2a 2a 20 66 69 6c 65 20 6c 6f 6f  this.** file loo
5d30: 6b 69 6e 67 20 66 6f 72 20 6c 69 6e 65 73 20 74  king for lines t
5d40: 68 61 74 20 62 65 67 69 6e 20 77 69 74 68 20 22  hat begin with "
5d50: 63 61 73 65 20 4f 50 5f 22 2e 20 20 54 68 65 20  case OP_".  The 
5d60: 6f 70 63 6f 64 65 73 2e 68 20 66 69 6c 65 73 0a  opcodes.h files.
5d70: 2a 2a 20 77 69 6c 6c 20 62 65 20 66 69 6c 6c 65  ** will be fille
5d80: 64 20 77 69 74 68 20 23 64 65 66 69 6e 65 73 20  d with #defines 
5d90: 74 68 61 74 20 67 69 76 65 20 75 6e 69 71 75 65  that give unique
5da0: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73 20   integer values 
5db0: 74 6f 20 65 61 63 68 0a 2a 2a 20 6f 70 63 6f 64  to each.** opcod
5dc0: 65 20 61 6e 64 20 74 68 65 20 6f 70 63 6f 64 65  e and the opcode
5dd0: 73 2e 63 20 66 69 6c 65 20 69 73 20 66 69 6c 6c  s.c file is fill
5de0: 65 64 20 77 69 74 68 20 61 6e 20 61 72 72 61 79  ed with an array
5df0: 20 6f 66 20 73 74 72 69 6e 67 73 20 77 68 65 72   of strings wher
5e00: 65 0a 2a 2a 20 65 61 63 68 20 73 74 72 69 6e 67  e.** each string
5e10: 20 69 73 20 74 68 65 20 73 79 6d 62 6f 6c 69 63   is the symbolic
5e20: 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 63 6f   name for the co
5e30: 72 72 65 73 70 6f 6e 64 69 6e 67 20 6f 70 63 6f  rresponding opco
5e40: 64 65 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 63  de.  If the.** c
5e50: 61 73 65 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ase statement is
5e60: 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 63   followed by a c
5e70: 6f 6d 6d 65 6e 74 20 6f 66 20 74 68 65 20 66 6f  omment of the fo
5e80: 72 6d 20 22 2f 23 20 73 61 6d 65 20 61 73 20 2e  rm "/# same as .
5e90: 2e 2e 20 23 2f 22 0a 2a 2a 20 74 68 61 74 20 63  .. #/".** that c
5ea0: 6f 6d 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74  omment is used t
5eb0: 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20  o determine the 
5ec0: 70 61 72 74 69 63 75 6c 61 72 20 76 61 6c 75 65  particular value
5ed0: 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 0a   of the opcode..
5ee0: 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20 6b 65 79 77  **.** Other keyw
5ef0: 6f 72 64 73 20 69 6e 20 74 68 65 20 63 6f 6d 6d  ords in the comm
5f00: 65 6e 74 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73  ent that follows
5f10: 20 65 61 63 68 20 63 61 73 65 20 61 72 65 20 75   each case are u
5f20: 73 65 64 20 74 6f 0a 2a 2a 20 63 6f 6e 73 74 72  sed to.** constr
5f30: 75 63 74 20 74 68 65 20 4f 50 46 4c 47 5f 49 4e  uct the OPFLG_IN
5f40: 49 54 49 41 4c 49 5a 45 52 20 76 61 6c 75 65 20  ITIALIZER value 
5f50: 74 68 61 74 20 69 6e 69 74 69 61 6c 69 7a 65 73  that initializes
5f60: 20 6f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b   opcodeProperty[
5f70: 5d 2e 0a 2a 2a 20 4b 65 79 77 6f 72 64 73 20 69  ]..** Keywords i
5f80: 6e 63 6c 75 64 65 3a 20 69 6e 31 2c 20 69 6e 32  nclude: in1, in2
5f90: 2c 20 69 6e 33 2c 20 6f 75 74 32 2c 20 6f 75 74  , in3, out2, out
5fa0: 33 2e 20 20 53 65 65 0a 2a 2a 20 74 68 65 20 6d  3.  See.** the m
5fb0: 6b 6f 70 63 6f 64 65 68 2e 61 77 6b 20 73 63 72  kopcodeh.awk scr
5fc0: 69 70 74 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ipt for addition
5fd0: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
5fe0: 2a 2a 0a 2a 2a 20 44 6f 63 75 6d 65 6e 74 61 74  **.** Documentat
5ff0: 69 6f 6e 20 61 62 6f 75 74 20 56 44 42 45 20 6f  ion about VDBE o
6000: 70 63 6f 64 65 73 20 69 73 20 67 65 6e 65 72 61  pcodes is genera
6010: 74 65 64 20 62 79 20 73 63 61 6e 6e 69 6e 67 20  ted by scanning 
6020: 74 68 69 73 20 66 69 6c 65 0a 2a 2a 20 66 6f 72  this file.** for
6030: 20 6c 69 6e 65 73 20 6f 66 20 74 68 61 74 20 63   lines of that c
6040: 6f 6e 74 61 69 6e 20 22 4f 70 63 6f 64 65 3a 22  ontain "Opcode:"
6050: 2e 20 20 54 68 61 74 20 6c 69 6e 65 20 61 6e 64  .  That line and
6060: 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 0a   all subsequent.
6070: 2a 2a 20 63 6f 6d 6d 65 6e 74 20 6c 69 6e 65 73  ** comment lines
6080: 20 61 72 65 20 75 73 65 64 20 69 6e 20 74 68 65   are used in the
6090: 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 74   generation of t
60a0: 68 65 20 6f 70 63 6f 64 65 2e 68 74 6d 6c 20 64  he opcode.html d
60b0: 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20  ocumentation.** 
60c0: 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 55 4d 4d  file..**.** SUMM
60d0: 41 52 59 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 46  ARY:.**.**     F
60e0: 6f 72 6d 61 74 74 69 6e 67 20 69 73 20 69 6d 70  ormatting is imp
60f0: 6f 72 74 61 6e 74 20 74 6f 20 73 63 72 69 70 74  ortant to script
6100: 73 20 74 68 61 74 20 73 63 61 6e 20 74 68 69 73  s that scan this
6110: 20 66 69 6c 65 2e 0a 2a 2a 20 20 20 20 20 44 6f   file..**     Do
6120: 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72 6f   not deviate fro
6130: 6d 20 74 68 65 20 66 6f 72 6d 61 74 74 69 6e 67  m the formatting
6140: 20 73 74 79 6c 65 20 63 75 72 72 65 6e 74 6c 79   style currently
6150: 20 69 6e 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 2a 2a   in use..**.****
6160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6170: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6180: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6190: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
61a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 20 4f  *********/../* O
61b0: 70 63 6f 64 65 3a 20 20 47 6f 74 6f 20 2a 20 50  pcode:  Goto * P
61c0: 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6e  2 * * *.**.** An
61d0: 20 75 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 6a   unconditional j
61e0: 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20 50  ump to address P
61f0: 32 2e 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 69  2..** The next i
6200: 6e 73 74 72 75 63 74 69 6f 6e 20 65 78 65 63 75  nstruction execu
6210: 74 65 64 20 77 69 6c 6c 20 62 65 20 0a 2a 2a 20  ted will be .** 
6220: 74 68 65 20 6f 6e 65 20 61 74 20 69 6e 64 65 78  the one at index
6230: 20 50 32 20 66 72 6f 6d 20 74 68 65 20 62 65 67   P2 from the beg
6240: 69 6e 6e 69 6e 67 20 6f 66 0a 2a 2a 20 74 68 65  inning of.** the
6250: 20 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20   program..**.** 
6260: 54 68 65 20 50 31 20 70 61 72 61 6d 65 74 65 72  The P1 parameter
6270: 20 69 73 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79   is not actually
6280: 20 75 73 65 64 20 62 79 20 74 68 69 73 20 6f 70   used by this op
6290: 63 6f 64 65 2e 20 20 48 6f 77 65 76 65 72 2c 20  code.  However, 
62a0: 69 74 0a 2a 2a 20 69 73 20 73 6f 6d 65 74 69 6d  it.** is sometim
62b0: 65 73 20 73 65 74 20 74 6f 20 31 20 69 6e 73 74  es set to 1 inst
62c0: 65 61 64 20 6f 66 20 30 20 61 73 20 61 20 68 69  ead of 0 as a hi
62d0: 6e 74 20 74 6f 20 74 68 65 20 63 6f 6d 6d 61 6e  nt to the comman
62e0: 64 2d 6c 69 6e 65 20 73 68 65 6c 6c 0a 2a 2a 20  d-line shell.** 
62f0: 74 68 61 74 20 74 68 69 73 20 47 6f 74 6f 20 69  that this Goto i
6300: 73 20 74 68 65 20 62 6f 74 74 6f 6d 20 6f 66 20  s the bottom of 
6310: 61 20 6c 6f 6f 70 20 61 6e 64 20 74 68 61 74 20  a loop and that 
6320: 74 68 65 20 6c 69 6e 65 73 20 66 72 6f 6d 20 50  the lines from P
6330: 32 20 64 6f 77 6e 0a 2a 2a 20 74 6f 20 74 68 65  2 down.** to the
6340: 20 63 75 72 72 65 6e 74 20 6c 69 6e 65 20 73 68   current line sh
6350: 6f 75 6c 64 20 62 65 20 69 6e 64 65 6e 74 65 64  ould be indented
6360: 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74   for EXPLAIN out
6370: 70 75 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  put..*/.case OP_
6380: 47 6f 74 6f 3a 20 7b 20 20 20 20 20 20 20 20 20  Goto: {         
6390: 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 6a      /* jump */.j
63a0: 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68  ump_to_p2_and_ch
63b0: 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70  eck_for_interrup
63c0: 74 3a 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b  t:.  pOp = &aOp[
63d0: 70 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a 0a 20  pOp->p2 - 1];.. 
63e0: 20 2f 2a 20 4f 70 63 6f 64 65 73 20 74 68 61 74   /* Opcodes that
63f0: 20 61 72 65 20 75 73 65 64 20 61 73 20 74 68 65   are used as the
6400: 20 62 6f 74 74 6f 6d 20 6f 66 20 61 20 6c 6f 6f   bottom of a loo
6410: 70 20 28 4f 50 5f 4e 65 78 74 2c 20 4f 50 5f 50  p (OP_Next, OP_P
6420: 72 65 76 2c 0a 20 20 2a 2a 20 4f 50 5f 56 4e 65  rev,.  ** OP_VNe
6430: 78 74 2c 20 6f 72 20 4f 50 5f 53 6f 72 74 65 72  xt, or OP_Sorter
6440: 4e 65 78 74 29 20 61 6c 6c 20 6a 75 6d 70 20 68  Next) all jump h
6450: 65 72 65 20 75 70 6f 6e 0a 20 20 2a 2a 20 63 6f  ere upon.  ** co
6460: 6d 70 6c 65 74 69 6f 6e 2e 20 20 43 68 65 63 6b  mpletion.  Check
6470: 20 74 6f 20 73 65 65 20 69 66 20 73 71 6c 69 74   to see if sqlit
6480: 65 33 5f 69 6e 74 65 72 72 75 70 74 28 29 20 68  e3_interrupt() h
6490: 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 0a 20  as been called. 
64a0: 20 2a 2a 20 6f 72 20 69 66 20 74 68 65 20 70 72   ** or if the pr
64b0: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
64c0: 6e 65 65 64 73 20 74 6f 20 62 65 20 69 6e 76 6f  needs to be invo
64d0: 6b 65 64 2e 20 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ked. .  **.  ** 
64e0: 54 68 69 73 20 63 6f 64 65 20 75 73 65 73 20 75  This code uses u
64f0: 6e 73 74 72 75 63 74 75 72 65 64 20 22 67 6f 74  nstructured "got
6500: 6f 22 20 73 74 61 74 65 6d 65 6e 74 73 20 61 6e  o" statements an
6510: 64 20 64 6f 65 73 20 6e 6f 74 20 6c 6f 6f 6b 20  d does not look 
6520: 63 6c 65 61 6e 2e 0a 20 20 2a 2a 20 42 75 74 20  clean..  ** But 
6530: 74 68 61 74 20 69 73 20 6e 6f 74 20 64 75 65 20  that is not due 
6540: 74 6f 20 73 6c 6f 70 70 79 20 63 6f 64 69 6e 67  to sloppy coding
6550: 20 68 61 62 69 74 73 2e 20 54 68 65 20 63 6f 64   habits. The cod
6560: 65 20 69 73 20 77 72 69 74 74 65 6e 20 74 68 69  e is written thi
6570: 73 0a 20 20 2a 2a 20 77 61 79 20 66 6f 72 20 70  s.  ** way for p
6580: 65 72 66 6f 72 6d 61 6e 63 65 2c 20 74 6f 20 61  erformance, to a
6590: 76 6f 69 64 20 68 61 76 69 6e 67 20 74 6f 20 72  void having to r
65a0: 75 6e 20 74 68 65 20 69 6e 74 65 72 72 75 70 74  un the interrupt
65b0: 20 61 6e 64 20 70 72 6f 67 72 65 73 73 0a 20 20   and progress.  
65c0: 2a 2a 20 63 68 65 63 6b 73 20 6f 6e 20 65 76 65  ** checks on eve
65d0: 72 79 20 6f 70 63 6f 64 65 2e 20 20 54 68 69 73  ry opcode.  This
65e0: 20 68 65 6c 70 73 20 73 71 6c 69 74 65 33 5f 73   helps sqlite3_s
65f0: 74 65 70 28 29 20 74 6f 20 72 75 6e 20 61 62 6f  tep() to run abo
6600: 75 74 20 31 2e 35 25 0a 20 20 2a 2a 20 66 61 73  ut 1.5%.  ** fas
6610: 74 65 72 20 61 63 63 6f 72 64 69 6e 67 20 74 6f  ter according to
6620: 20 22 76 61 6c 67 72 69 6e 64 20 2d 2d 74 6f 6f   "valgrind --too
6630: 6c 3d 63 61 63 68 65 67 72 69 6e 64 22 20 2a 2f  l=cachegrind" */
6640: 0a 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72  .check_for_inter
6650: 72 75 70 74 3a 0a 20 20 69 66 28 20 64 62 2d 3e  rupt:.  if( db->
6660: 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64  u1.isInterrupted
6670: 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
6680: 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a  e_to_interrupt;.
6690: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
66a0: 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c  MIT_PROGRESS_CAL
66b0: 4c 42 41 43 4b 0a 20 20 2f 2a 20 43 61 6c 6c 20  LBACK.  /* Call 
66c0: 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  the progress cal
66d0: 6c 62 61 63 6b 20 69 66 20 69 74 20 69 73 20 63  lback if it is c
66e0: 6f 6e 66 69 67 75 72 65 64 20 61 6e 64 20 74 68  onfigured and th
66f0: 65 20 72 65 71 75 69 72 65 64 20 6e 75 6d 62 65  e required numbe
6700: 72 0a 20 20 2a 2a 20 6f 66 20 56 44 42 45 20 6f  r.  ** of VDBE o
6710: 70 73 20 68 61 76 65 20 62 65 65 6e 20 65 78 65  ps have been exe
6720: 63 75 74 65 64 20 28 65 69 74 68 65 72 20 73 69  cuted (either si
6730: 6e 63 65 20 74 68 69 73 20 69 6e 76 6f 63 61 74  nce this invocat
6740: 69 6f 6e 20 6f 66 0a 20 20 2a 2a 20 73 71 6c 69  ion of.  ** sqli
6750: 74 65 33 56 64 62 65 45 78 65 63 28 29 20 6f 72  te3VdbeExec() or
6760: 20 73 69 6e 63 65 20 6c 61 73 74 20 74 69 6d 65   since last time
6770: 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61   the progress ca
6780: 6c 6c 62 61 63 6b 20 77 61 73 20 63 61 6c 6c 65  llback was calle
6790: 64 29 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20  d)..  ** If the 
67a0: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
67b0: 6b 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65  k returns non-ze
67c0: 72 6f 2c 20 65 78 69 74 20 74 68 65 20 76 69 72  ro, exit the vir
67d0: 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 77 69 74  tual machine wit
67e0: 68 0a 20 20 2a 2a 20 61 20 72 65 74 75 72 6e 20  h.  ** a return 
67f0: 63 6f 64 65 20 53 51 4c 49 54 45 5f 41 42 4f 52  code SQLITE_ABOR
6800: 54 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 6e 56  T..  */.  if( nV
6810: 6d 53 74 65 70 3e 3d 6e 50 72 6f 67 72 65 73 73  mStep>=nProgress
6820: 4c 69 6d 69 74 20 26 26 20 64 62 2d 3e 78 50 72  Limit && db->xPr
6830: 6f 67 72 65 73 73 21 3d 30 20 29 7b 0a 20 20 20  ogress!=0 ){.   
6840: 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 50 72   assert( db->nPr
6850: 6f 67 72 65 73 73 4f 70 73 21 3d 30 20 29 3b 0a  ogressOps!=0 );.
6860: 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d      nProgressLim
6870: 69 74 20 3d 20 6e 56 6d 53 74 65 70 20 2b 20 64  it = nVmStep + d
6880: 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20  b->nProgressOps 
6890: 2d 20 28 6e 56 6d 53 74 65 70 25 64 62 2d 3e 6e  - (nVmStep%db->n
68a0: 50 72 6f 67 72 65 73 73 4f 70 73 29 3b 0a 20 20  ProgressOps);.  
68b0: 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72    if( db->xProgr
68c0: 65 73 73 28 64 62 2d 3e 70 50 72 6f 67 72 65 73  ess(db->pProgres
68d0: 73 41 72 67 29 20 29 7b 0a 20 20 20 20 20 20 72  sArg) ){.      r
68e0: 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52  c = SQLITE_INTER
68f0: 52 55 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f  RUPT;.      goto
6900: 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
6910: 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23  ror;.    }.  }.#
6920: 65 6e 64 69 66 0a 20 20 0a 20 20 62 72 65 61 6b  endif.  .  break
6930: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
6940: 20 47 6f 73 75 62 20 50 31 20 50 32 20 2a 20 2a   Gosub P1 P2 * *
6950: 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74   *.**.** Write t
6960: 68 65 20 63 75 72 72 65 6e 74 20 61 64 64 72 65  he current addre
6970: 73 73 20 6f 6e 74 6f 20 72 65 67 69 73 74 65 72  ss onto register
6980: 20 50 31 0a 2a 2a 20 61 6e 64 20 74 68 65 6e 20   P1.** and then 
6990: 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20  jump to address 
69a0: 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47  P2..*/.case OP_G
69b0: 6f 73 75 62 3a 20 7b 20 20 20 20 20 20 20 20 20  osub: {         
69c0: 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
69d0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
69e0: 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70  0 && pOp->p1<=(p
69f0: 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
6a00: 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 49 6e 31  ursor) );.  pIn1
6a10: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
6a20: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 56 64 62  ];.  assert( Vdb
6a30: 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31  eMemDynamic(pIn1
6a40: 29 3d 3d 30 20 29 3b 0a 20 20 6d 65 6d 41 62 6f  )==0 );.  memAbo
6a50: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49  utToChange(p, pI
6a60: 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61  n1);.  pIn1->fla
6a70: 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
6a80: 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 28 69 6e 74  pIn1->u.i = (int
6a90: 29 28 70 4f 70 2d 61 4f 70 29 3b 0a 20 20 52 45  )(pOp-aOp);.  RE
6aa0: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
6ab0: 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 0a 20 20  ->p1, pIn1);..  
6ac0: 2f 2a 20 4d 6f 73 74 20 6a 75 6d 70 20 6f 70 65  /* Most jump ope
6ad0: 72 61 74 69 6f 6e 73 20 64 6f 20 61 20 67 6f 74  rations do a got
6ae0: 6f 20 74 6f 20 74 68 69 73 20 73 70 6f 74 20 69  o to this spot i
6af0: 6e 20 6f 72 64 65 72 20 74 6f 20 75 70 64 61 74  n order to updat
6b00: 65 0a 20 20 2a 2a 20 74 68 65 20 70 4f 70 20 70  e.  ** the pOp p
6b10: 6f 69 6e 74 65 72 2e 20 2a 2f 0a 6a 75 6d 70 5f  ointer. */.jump_
6b20: 74 6f 5f 70 32 3a 0a 20 20 70 4f 70 20 3d 20 26  to_p2:.  pOp = &
6b30: 61 4f 70 5b 70 4f 70 2d 3e 70 32 20 2d 20 31 5d  aOp[pOp->p2 - 1]
6b40: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
6b50: 20 4f 70 63 6f 64 65 3a 20 20 52 65 74 75 72 6e   Opcode:  Return
6b60: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
6b70: 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 6e 65  * Jump to the ne
6b80: 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61  xt instruction a
6b90: 66 74 65 72 20 74 68 65 20 61 64 64 72 65 73 73  fter the address
6ba0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
6bb0: 20 20 41 66 74 65 72 0a 2a 2a 20 74 68 65 20 6a    After.** the j
6bc0: 75 6d 70 2c 20 72 65 67 69 73 74 65 72 20 50 31  ump, register P1
6bd0: 20 62 65 63 6f 6d 65 73 20 75 6e 64 65 66 69 6e   becomes undefin
6be0: 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  ed..*/.case OP_R
6bf0: 65 74 75 72 6e 3a 20 7b 20 20 20 20 20 20 20 20  eturn: {        
6c00: 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70     /* in1 */.  p
6c10: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
6c20: 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
6c30: 70 49 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d  pIn1->flags==MEM
6c40: 5f 49 6e 74 20 29 3b 0a 20 20 70 4f 70 20 3d 20  _Int );.  pOp = 
6c50: 26 61 4f 70 5b 70 49 6e 31 2d 3e 75 2e 69 5d 3b  &aOp[pIn1->u.i];
6c60: 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d  .  pIn1->flags =
6c70: 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a   MEM_Undefined;.
6c80: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
6c90: 70 63 6f 64 65 3a 20 49 6e 69 74 43 6f 72 6f 75  pcode: InitCorou
6ca0: 74 69 6e 65 20 50 31 20 50 32 20 50 33 20 2a 20  tine P1 P2 P3 * 
6cb0: 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 75 70 20 72  *.**.** Set up r
6cc0: 65 67 69 73 74 65 72 20 50 31 20 73 6f 20 74 68  egister P1 so th
6cd0: 61 74 20 69 74 20 77 69 6c 6c 20 59 69 65 6c 64  at it will Yield
6ce0: 20 74 6f 20 74 68 65 20 63 6f 72 6f 75 74 69 6e   to the coroutin
6cf0: 65 0a 2a 2a 20 6c 6f 63 61 74 65 64 20 61 74 20  e.** located at 
6d00: 61 64 64 72 65 73 73 20 50 33 2e 0a 2a 2a 0a 2a  address P3..**.*
6d10: 2a 20 49 66 20 50 32 21 3d 30 20 74 68 65 6e 20  * If P2!=0 then 
6d20: 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 69 6d  the coroutine im
6d30: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69 6d 6d  plementation imm
6d40: 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 73  ediately follows
6d50: 0a 2a 2a 20 74 68 69 73 20 6f 70 63 6f 64 65 2e  .** this opcode.
6d60: 20 20 53 6f 20 6a 75 6d 70 20 6f 76 65 72 20 74    So jump over t
6d70: 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 69 6d 70  he coroutine imp
6d80: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 0a 2a  lementation to.*
6d90: 2a 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a  * address P2..**
6da0: 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 45 6e  .** See also: En
6db0: 64 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61  dCoroutine.*/.ca
6dc0: 73 65 20 4f 50 5f 49 6e 69 74 43 6f 72 6f 75 74  se OP_InitCorout
6dd0: 69 6e 65 3a 20 7b 20 20 20 20 20 2f 2a 20 6a 75  ine: {     /* ju
6de0: 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  mp */.  assert( 
6df0: 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 20 70 4f  pOp->p1>0 &&  pO
6e00: 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p->p1<=(p->nMem+
6e10: 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20  1 - p->nCursor) 
6e20: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
6e30: 2d 3e 70 32 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p2>=0 && pOp->
6e40: 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 61  p2<p->nOp );.  a
6e50: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d  ssert( pOp->p3>=
6e60: 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 70 2d 3e  0 && pOp->p3<p->
6e70: 6e 4f 70 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20  nOp );.  pOut = 
6e80: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
6e90: 20 20 61 73 73 65 72 74 28 20 21 56 64 62 65 4d    assert( !VdbeM
6ea0: 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74 29 20  emDynamic(pOut) 
6eb0: 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
6ec0: 20 70 4f 70 2d 3e 70 33 20 2d 20 31 3b 0a 20 20   pOp->p3 - 1;.  
6ed0: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
6ee0: 4d 5f 49 6e 74 3b 0a 20 20 69 66 28 20 70 4f 70  M_Int;.  if( pOp
6ef0: 2d 3e 70 32 20 29 20 67 6f 74 6f 20 6a 75 6d 70  ->p2 ) goto jump
6f00: 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b  _to_p2;.  break;
6f10: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  .}../* Opcode:  
6f20: 45 6e 64 43 6f 72 6f 75 74 69 6e 65 20 50 31 20  EndCoroutine P1 
6f30: 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  * * * *.**.** Th
6f40: 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74  e instruction at
6f50: 20 74 68 65 20 61 64 64 72 65 73 73 20 69 6e 20   the address in 
6f60: 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 61  register P1 is a
6f70: 20 59 69 65 6c 64 2e 0a 2a 2a 20 4a 75 6d 70 20   Yield..** Jump 
6f80: 74 6f 20 74 68 65 20 50 32 20 70 61 72 61 6d 65  to the P2 parame
6f90: 74 65 72 20 6f 66 20 74 68 61 74 20 59 69 65 6c  ter of that Yiel
6fa0: 64 2e 0a 2a 2a 20 41 66 74 65 72 20 74 68 65 20  d..** After the 
6fb0: 6a 75 6d 70 2c 20 72 65 67 69 73 74 65 72 20 50  jump, register P
6fc0: 31 20 62 65 63 6f 6d 65 73 20 75 6e 64 65 66 69  1 becomes undefi
6fd0: 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ned..**.** See a
6fe0: 6c 73 6f 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69  lso: InitCorouti
6ff0: 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 6e  ne.*/.case OP_En
7000: 64 43 6f 72 6f 75 74 69 6e 65 3a 20 7b 20 20 20  dCoroutine: {   
7010: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a          /* in1 *
7020: 2f 0a 20 20 56 64 62 65 4f 70 20 2a 70 43 61 6c  /.  VdbeOp *pCal
7030: 6c 65 72 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  ler;.  pIn1 = &a
7040: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
7050: 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
7060: 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a  ags==MEM_Int );.
7070: 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
7080: 75 2e 69 3e 3d 30 20 26 26 20 70 49 6e 31 2d 3e  u.i>=0 && pIn1->
7090: 75 2e 69 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20  u.i<p->nOp );.  
70a0: 70 43 61 6c 6c 65 72 20 3d 20 26 61 4f 70 5b 70  pCaller = &aOp[p
70b0: 49 6e 31 2d 3e 75 2e 69 5d 3b 0a 20 20 61 73 73  In1->u.i];.  ass
70c0: 65 72 74 28 20 70 43 61 6c 6c 65 72 2d 3e 6f 70  ert( pCaller->op
70d0: 63 6f 64 65 3d 3d 4f 50 5f 59 69 65 6c 64 20 29  code==OP_Yield )
70e0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 61 6c  ;.  assert( pCal
70f0: 6c 65 72 2d 3e 70 32 3e 3d 30 20 26 26 20 70 43  ler->p2>=0 && pC
7100: 61 6c 6c 65 72 2d 3e 70 32 3c 70 2d 3e 6e 4f 70  aller->p2<p->nOp
7110: 20 29 3b 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70   );.  pOp = &aOp
7120: 5b 70 43 61 6c 6c 65 72 2d 3e 70 32 20 2d 20 31  [pCaller->p2 - 1
7130: 5d 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ];.  pIn1->flags
7140: 20 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64   = MEM_Undefined
7150: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
7160: 20 4f 70 63 6f 64 65 3a 20 20 59 69 65 6c 64 20   Opcode:  Yield 
7170: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
7180: 2a 20 53 77 61 70 20 74 68 65 20 70 72 6f 67 72  * Swap the progr
7190: 61 6d 20 63 6f 75 6e 74 65 72 20 77 69 74 68 20  am counter with 
71a0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
71b0: 69 73 74 65 72 20 50 31 2e 20 20 54 68 69 73 0a  ister P1.  This.
71c0: 2a 2a 20 68 61 73 20 74 68 65 20 65 66 66 65 63  ** has the effec
71d0: 74 20 6f 66 20 79 69 65 6c 64 69 6e 67 20 74 6f  t of yielding to
71e0: 20 61 20 63 6f 72 6f 75 74 69 6e 65 2e 0a 2a 2a   a coroutine..**
71f0: 0a 2a 2a 20 49 66 20 74 68 65 20 63 6f 72 6f 75  .** If the corou
7200: 74 69 6e 65 20 74 68 61 74 20 69 73 20 6c 61 75  tine that is lau
7210: 6e 63 68 65 64 20 62 79 20 74 68 69 73 20 69 6e  nched by this in
7220: 73 74 72 75 63 74 69 6f 6e 20 65 6e 64 73 20 77  struction ends w
7230: 69 74 68 0a 2a 2a 20 59 69 65 6c 64 20 6f 72 20  ith.** Yield or 
7240: 52 65 74 75 72 6e 20 74 68 65 6e 20 63 6f 6e 74  Return then cont
7250: 69 6e 75 65 20 74 6f 20 74 68 65 20 6e 65 78 74  inue to the next
7260: 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42   instruction.  B
7270: 75 74 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 72  ut if.** the cor
7280: 6f 75 74 69 6e 65 20 6c 61 75 6e 63 68 65 64 20  outine launched 
7290: 62 79 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  by this instruct
72a0: 69 6f 6e 20 65 6e 64 73 20 77 69 74 68 0a 2a 2a  ion ends with.**
72b0: 20 45 6e 64 43 6f 72 6f 75 74 69 6e 65 2c 20 74   EndCoroutine, t
72c0: 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 20 72  hen jump to P2 r
72d0: 61 74 68 65 72 20 74 68 61 6e 20 63 6f 6e 74 69  ather than conti
72e0: 6e 75 69 6e 67 20 77 69 74 68 20 74 68 65 0a 2a  nuing with the.*
72f0: 2a 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  * next instructi
7300: 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  on..**.** See al
7310: 73 6f 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e  so: InitCoroutin
7320: 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 59 69 65  e.*/.case OP_Yie
7330: 6c 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ld: {           
7340: 20 2f 2a 20 69 6e 31 2c 20 6a 75 6d 70 20 2a 2f   /* in1, jump */
7350: 0a 20 20 69 6e 74 20 70 63 44 65 73 74 3b 0a 20  .  int pcDest;. 
7360: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
7370: 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
7380: 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63  ( VdbeMemDynamic
7390: 28 70 49 6e 31 29 3d 3d 30 20 29 3b 0a 20 20 70  (pIn1)==0 );.  p
73a0: 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  In1->flags = MEM
73b0: 5f 49 6e 74 3b 0a 20 20 70 63 44 65 73 74 20 3d  _Int;.  pcDest =
73c0: 20 28 69 6e 74 29 70 49 6e 31 2d 3e 75 2e 69 3b   (int)pIn1->u.i;
73d0: 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 28  .  pIn1->u.i = (
73e0: 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b  int)(pOp - aOp);
73f0: 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
7400: 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29  E(pOp->p1, pIn1)
7410: 3b 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70  ;.  pOp = &aOp[p
7420: 63 44 65 73 74 5d 3b 0a 20 20 62 72 65 61 6b 3b  cDest];.  break;
7430: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  .}../* Opcode:  
7440: 48 61 6c 74 49 66 4e 75 6c 6c 20 20 50 31 20 50  HaltIfNull  P1 P
7450: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
7460: 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 33 5d  nopsis: if r[P3]
7470: 3d 6e 75 6c 6c 20 68 61 6c 74 0a 2a 2a 0a 2a 2a  =null halt.**.**
7480: 20 43 68 65 63 6b 20 74 68 65 20 76 61 6c 75 65   Check the value
7490: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
74a0: 20 20 49 66 20 69 74 20 69 73 20 4e 55 4c 4c 20    If it is NULL 
74b0: 74 68 65 6e 20 48 61 6c 74 20 75 73 69 6e 67 0a  then Halt using.
74c0: 2a 2a 20 70 61 72 61 6d 65 74 65 72 20 50 31 2c  ** parameter P1,
74d0: 20 50 32 2c 20 61 6e 64 20 50 34 20 61 73 20 69   P2, and P4 as i
74e0: 66 20 74 68 69 73 20 77 65 72 65 20 61 20 48 61  f this were a Ha
74f0: 6c 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  lt instruction. 
7500: 20 49 66 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65   If the.** value
7510: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
7520: 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65  is not NULL, the
7530: 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 69  n this routine i
7540: 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2a 20 54 68  s a no-op..** Th
7550: 65 20 50 35 20 70 61 72 61 6d 65 74 65 72 20 73  e P5 parameter s
7560: 68 6f 75 6c 64 20 62 65 20 31 2e 0a 2a 2f 0a 63  hould be 1..*/.c
7570: 61 73 65 20 4f 50 5f 48 61 6c 74 49 66 4e 75 6c  ase OP_HaltIfNul
7580: 6c 3a 20 7b 20 20 20 20 20 20 2f 2a 20 69 6e 33  l: {      /* in3
7590: 20 2a 2f 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d   */.  pIn3 = &aM
75a0: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69  em[pOp->p3];.  i
75b0: 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20  f( (pIn3->flags 
75c0: 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29  & MEM_Null)==0 )
75d0: 20 62 72 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c   break;.  /* Fal
75e0: 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f  l through into O
75f0: 50 5f 48 61 6c 74 20 2a 2f 0a 7d 0a 0a 2f 2a 20  P_Halt */.}../* 
7600: 4f 70 63 6f 64 65 3a 20 20 48 61 6c 74 20 50 31  Opcode:  Halt P1
7610: 20 50 32 20 2a 20 50 34 20 50 35 0a 2a 2a 0a 2a   P2 * P4 P5.**.*
7620: 2a 20 45 78 69 74 20 69 6d 6d 65 64 69 61 74 65  * Exit immediate
7630: 6c 79 2e 20 20 41 6c 6c 20 6f 70 65 6e 20 63 75  ly.  All open cu
7640: 72 73 6f 72 73 2c 20 65 74 63 20 61 72 65 20 63  rsors, etc are c
7650: 6c 6f 73 65 64 0a 2a 2a 20 61 75 74 6f 6d 61 74  losed.** automat
7660: 69 63 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 50 31  ically..**.** P1
7670: 20 69 73 20 74 68 65 20 72 65 73 75 6c 74 20 63   is the result c
7680: 6f 64 65 20 72 65 74 75 72 6e 65 64 20 62 79 20  ode returned by 
7690: 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29 2c 20  sqlite3_exec(), 
76a0: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 29 2c  sqlite3_reset(),
76b0: 0a 2a 2a 20 6f 72 20 73 71 6c 69 74 65 33 5f 66  .** or sqlite3_f
76c0: 69 6e 61 6c 69 7a 65 28 29 2e 20 20 46 6f 72 20  inalize().  For 
76d0: 61 20 6e 6f 72 6d 61 6c 20 68 61 6c 74 2c 20 74  a normal halt, t
76e0: 68 69 73 20 73 68 6f 75 6c 64 20 62 65 20 53 51  his should be SQ
76f0: 4c 49 54 45 5f 4f 4b 20 28 30 29 2e 0a 2a 2a 20  LITE_OK (0)..** 
7700: 46 6f 72 20 65 72 72 6f 72 73 2c 20 69 74 20 63  For errors, it c
7710: 61 6e 20 62 65 20 73 6f 6d 65 20 6f 74 68 65 72  an be some other
7720: 20 76 61 6c 75 65 2e 20 20 49 66 20 50 31 21 3d   value.  If P1!=
7730: 30 20 74 68 65 6e 20 50 32 20 77 69 6c 6c 20 64  0 then P2 will d
7740: 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74  etermine.** whet
7750: 68 65 72 20 6f 72 20 6e 6f 74 20 74 6f 20 72 6f  her or not to ro
7760: 6c 6c 62 61 63 6b 20 74 68 65 20 63 75 72 72 65  llback the curre
7770: 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  nt transaction. 
7780: 20 44 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b   Do not rollback
7790: 0a 2a 2a 20 69 66 20 50 32 3d 3d 4f 45 5f 46 61  .** if P2==OE_Fa
77a0: 69 6c 2e 20 44 6f 20 74 68 65 20 72 6f 6c 6c 62  il. Do the rollb
77b0: 61 63 6b 20 69 66 20 50 32 3d 3d 4f 45 5f 52 6f  ack if P2==OE_Ro
77c0: 6c 6c 62 61 63 6b 2e 20 20 49 66 20 50 32 3d 3d  llback.  If P2==
77d0: 4f 45 5f 41 62 6f 72 74 2c 0a 2a 2a 20 74 68 65  OE_Abort,.** the
77e0: 6e 20 62 61 63 6b 20 6f 75 74 20 61 6c 6c 20 63  n back out all c
77f0: 68 61 6e 67 65 73 20 74 68 61 74 20 68 61 76 65  hanges that have
7800: 20 6f 63 63 75 72 72 65 64 20 64 75 72 69 6e 67   occurred during
7810: 20 74 68 69 73 20 65 78 65 63 75 74 69 6f 6e 20   this execution 
7820: 6f 66 20 74 68 65 0a 2a 2a 20 56 44 42 45 2c 20  of the.** VDBE, 
7830: 62 75 74 20 64 6f 20 6e 6f 74 20 72 6f 6c 6c 62  but do not rollb
7840: 61 63 6b 20 74 68 65 20 74 72 61 6e 73 61 63 74  ack the transact
7850: 69 6f 6e 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 50  ion. .**.** If P
7860: 34 20 69 73 20 6e 6f 74 20 6e 75 6c 6c 20 74 68  4 is not null th
7870: 65 6e 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f  en it is an erro
7880: 72 20 6d 65 73 73 61 67 65 20 73 74 72 69 6e 67  r message string
7890: 2e 0a 2a 2a 0a 2a 2a 20 50 35 20 69 73 20 61 20  ..**.** P5 is a 
78a0: 76 61 6c 75 65 20 62 65 74 77 65 65 6e 20 30 20  value between 0 
78b0: 61 6e 64 20 34 2c 20 69 6e 63 6c 75 73 69 76 65  and 4, inclusive
78c0: 2c 20 74 68 61 74 20 6d 6f 64 69 66 69 65 73 20  , that modifies 
78d0: 74 68 65 20 50 34 20 73 74 72 69 6e 67 2e 0a 2a  the P4 string..*
78e0: 2a 0a 2a 2a 20 20 20 20 30 3a 20 20 28 6e 6f 20  *.**    0:  (no 
78f0: 63 68 61 6e 67 65 29 0a 2a 2a 20 20 20 20 31 3a  change).**    1:
7900: 20 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 74 72    NOT NULL contr
7910: 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a  aint failed: P4.
7920: 2a 2a 20 20 20 20 32 3a 20 20 55 4e 49 51 55 45  **    2:  UNIQUE
7930: 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c   constraint fail
7940: 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20 33 3a 20  ed: P4.**    3: 
7950: 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e   CHECK constrain
7960: 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20  t failed: P4.** 
7970: 20 20 20 34 3a 20 20 46 4f 52 45 49 47 4e 20 4b     4:  FOREIGN K
7980: 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61  EY constraint fa
7990: 69 6c 65 64 3a 20 50 34 0a 2a 2a 0a 2a 2a 20 49  iled: P4.**.** I
79a0: 66 20 50 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f  f P5 is not zero
79b0: 20 61 6e 64 20 50 34 20 69 73 20 4e 55 4c 4c 2c   and P4 is NULL,
79c0: 20 74 68 65 6e 20 65 76 65 72 79 74 68 69 6e 67   then everything
79d0: 20 61 66 74 65 72 20 74 68 65 20 22 3a 22 20 69   after the ":" i
79e0: 73 0a 2a 2a 20 6f 6d 69 74 74 65 64 2e 0a 2a 2a  s.** omitted..**
79f0: 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 61 6e 20  .** There is an 
7a00: 69 6d 70 6c 69 65 64 20 22 48 61 6c 74 20 30 20  implied "Halt 0 
7a10: 30 20 30 22 20 69 6e 73 74 72 75 63 74 69 6f 6e  0 0" instruction
7a20: 20 69 6e 73 65 72 74 65 64 20 61 74 20 74 68 65   inserted at the
7a30: 20 76 65 72 79 20 65 6e 64 20 6f 66 0a 2a 2a 20   very end of.** 
7a40: 65 76 65 72 79 20 70 72 6f 67 72 61 6d 2e 20 20  every program.  
7a50: 53 6f 20 61 20 6a 75 6d 70 20 70 61 73 74 20 74  So a jump past t
7a60: 68 65 20 6c 61 73 74 20 69 6e 73 74 72 75 63 74  he last instruct
7a70: 69 6f 6e 20 6f 66 20 74 68 65 20 70 72 6f 67 72  ion of the progr
7a80: 61 6d 0a 2a 2a 20 69 73 20 74 68 65 20 73 61 6d  am.** is the sam
7a90: 65 20 61 73 20 65 78 65 63 75 74 69 6e 67 20 48  e as executing H
7aa0: 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  alt..*/.case OP_
7ab0: 48 61 6c 74 3a 20 7b 0a 20 20 56 64 62 65 46 72  Halt: {.  VdbeFr
7ac0: 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69  ame *pFrame;.  i
7ad0: 6e 74 20 70 63 78 3b 0a 0a 20 20 70 63 78 20 3d  nt pcx;..  pcx =
7ae0: 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70   (int)(pOp - aOp
7af0: 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31  );.  if( pOp->p1
7b00: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70  ==SQLITE_OK && p
7b10: 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20  ->pFrame ){.    
7b20: 2f 2a 20 48 61 6c 74 20 74 68 65 20 73 75 62 2d  /* Halt the sub-
7b30: 70 72 6f 67 72 61 6d 2e 20 52 65 74 75 72 6e 20  program. Return 
7b40: 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20 70  control to the p
7b50: 61 72 65 6e 74 20 66 72 61 6d 65 2e 20 2a 2f 0a  arent frame. */.
7b60: 20 20 20 20 70 46 72 61 6d 65 20 3d 20 70 2d 3e      pFrame = p->
7b70: 70 46 72 61 6d 65 3b 0a 20 20 20 20 70 2d 3e 70  pFrame;.    p->p
7b80: 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 2d 3e  Frame = pFrame->
7b90: 70 50 61 72 65 6e 74 3b 0a 20 20 20 20 70 2d 3e  pParent;.    p->
7ba0: 6e 46 72 61 6d 65 2d 2d 3b 0a 20 20 20 20 73 71  nFrame--;.    sq
7bb0: 6c 69 74 65 33 56 64 62 65 53 65 74 43 68 61 6e  lite3VdbeSetChan
7bc0: 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e  ges(db, p->nChan
7bd0: 67 65 29 3b 0a 20 20 20 20 70 63 78 20 3d 20 73  ge);.    pcx = s
7be0: 71 6c 69 74 65 33 56 64 62 65 46 72 61 6d 65 52  qlite3VdbeFrameR
7bf0: 65 73 74 6f 72 65 28 70 46 72 61 6d 65 29 3b 0a  estore(pFrame);.
7c00: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d      if( pOp->p2=
7c10: 3d 4f 45 5f 49 67 6e 6f 72 65 20 29 7b 0a 20 20  =OE_Ignore ){.  
7c20: 20 20 20 20 2f 2a 20 49 6e 73 74 72 75 63 74 69      /* Instructi
7c30: 6f 6e 20 70 63 78 20 69 73 20 74 68 65 20 4f 50  on pcx is the OP
7c40: 5f 50 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6e  _Program that in
7c50: 76 6f 6b 65 64 20 74 68 65 20 73 75 62 2d 70 72  voked the sub-pr
7c60: 6f 67 72 61 6d 20 0a 20 20 20 20 20 20 2a 2a 20  ogram .      ** 
7c70: 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20  currently being 
7c80: 68 61 6c 74 65 64 2e 20 49 66 20 74 68 65 20 70  halted. If the p
7c90: 32 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66  2 instruction of
7ca0: 20 74 68 69 73 20 4f 50 5f 48 61 6c 74 0a 20 20   this OP_Halt.  
7cb0: 20 20 20 20 2a 2a 20 69 6e 73 74 72 75 63 74 69      ** instructi
7cc0: 6f 6e 20 69 73 20 73 65 74 20 74 6f 20 4f 45 5f  on is set to OE_
7cd0: 49 67 6e 6f 72 65 2c 20 74 68 65 6e 20 74 68 65  Ignore, then the
7ce0: 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 69 73 20   sub-program is 
7cf0: 74 68 72 6f 77 69 6e 67 0a 20 20 20 20 20 20 2a  throwing.      *
7d00: 2a 20 61 6e 20 49 47 4e 4f 52 45 20 65 78 63 65  * an IGNORE exce
7d10: 70 74 69 6f 6e 2e 20 49 6e 20 74 68 69 73 20 63  ption. In this c
7d20: 61 73 65 20 6a 75 6d 70 20 74 6f 20 74 68 65 20  ase jump to the 
7d30: 61 64 64 72 65 73 73 20 73 70 65 63 69 66 69 65  address specifie
7d40: 64 0a 20 20 20 20 20 20 2a 2a 20 61 73 20 74 68  d.      ** as th
7d50: 65 20 70 32 20 6f 66 20 74 68 65 20 63 61 6c 6c  e p2 of the call
7d60: 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d 2e 20  ing OP_Program. 
7d70: 20 2a 2f 0a 20 20 20 20 20 20 70 63 78 20 3d 20   */.      pcx = 
7d80: 70 2d 3e 61 4f 70 5b 70 63 78 5d 2e 70 32 2d 31  p->aOp[pcx].p2-1
7d90: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 4f 70 20  ;.    }.    aOp 
7da0: 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20 20 61 4d  = p->aOp;.    aM
7db0: 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20  em = p->aMem;.  
7dc0: 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 63 78    pOp = &aOp[pcx
7dd0: 5d 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ];.    break;.  
7de0: 7d 0a 20 20 70 2d 3e 72 63 20 3d 20 70 4f 70 2d  }.  p->rc = pOp-
7df0: 3e 70 31 3b 0a 20 20 70 2d 3e 65 72 72 6f 72 41  >p1;.  p->errorA
7e00: 63 74 69 6f 6e 20 3d 20 28 75 38 29 70 4f 70 2d  ction = (u8)pOp-
7e10: 3e 70 32 3b 0a 20 20 70 2d 3e 70 63 20 3d 20 70  >p2;.  p->pc = p
7e20: 63 78 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  cx;.  assert( pO
7e30: 70 2d 3e 70 35 3c 3d 34 20 29 3b 0a 20 20 69 66  p->p5<=4 );.  if
7e40: 28 20 70 2d 3e 72 63 20 29 7b 0a 20 20 20 20 69  ( p->rc ){.    i
7e50: 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20  f( pOp->p5 ){.  
7e60: 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
7e70: 20 63 68 61 72 20 2a 20 63 6f 6e 73 74 20 61 7a   char * const az
7e80: 54 79 70 65 5b 5d 20 3d 20 7b 20 22 4e 4f 54 20  Type[] = { "NOT 
7e90: 4e 55 4c 4c 22 2c 20 22 55 4e 49 51 55 45 22 2c  NULL", "UNIQUE",
7ea0: 20 22 43 48 45 43 4b 22 2c 0a 20 20 20 20 20 20   "CHECK",.      
7eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ed0: 20 20 20 20 20 20 20 22 46 4f 52 45 49 47 4e 20         "FOREIGN 
7ee0: 4b 45 59 22 20 7d 3b 0a 20 20 20 20 20 20 74 65  KEY" };.      te
7ef0: 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d  stcase( pOp->p5=
7f00: 3d 31 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74  =1 );.      test
7f10: 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 32  case( pOp->p5==2
7f20: 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61   );.      testca
7f30: 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 33 20 29  se( pOp->p5==3 )
7f40: 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65  ;.      testcase
7f50: 28 20 70 4f 70 2d 3e 70 35 3d 3d 34 20 29 3b 0a  ( pOp->p5==4 );.
7f60: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
7f70: 65 45 72 72 6f 72 28 70 2c 20 22 25 73 20 63 6f  eError(p, "%s co
7f80: 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 22  nstraint failed"
7f90: 2c 20 61 7a 54 79 70 65 5b 70 4f 70 2d 3e 70 35  , azType[pOp->p5
7fa0: 2d 31 5d 29 3b 0a 20 20 20 20 20 20 69 66 28 20  -1]);.      if( 
7fb0: 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20  pOp->p4.z ){.   
7fc0: 20 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20       p->zErrMsg 
7fd0: 3d 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66  = sqlite3MPrintf
7fe0: 28 64 62 2c 20 22 25 7a 3a 20 25 73 22 2c 20 70  (db, "%z: %s", p
7ff0: 2d 3e 7a 45 72 72 4d 73 67 2c 20 70 4f 70 2d 3e  ->zErrMsg, pOp->
8000: 70 34 2e 7a 29 3b 0a 20 20 20 20 20 20 7d 0a 20  p4.z);.      }. 
8010: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
8020: 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72  sqlite3VdbeError
8030: 28 70 2c 20 22 25 73 22 2c 20 70 4f 70 2d 3e 70  (p, "%s", pOp->p
8040: 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  4.z);.    }.    
8050: 73 71 6c 69 74 65 33 5f 6c 6f 67 28 70 4f 70 2d  sqlite3_log(pOp-
8060: 3e 70 31 2c 20 22 61 62 6f 72 74 20 61 74 20 25  >p1, "abort at %
8070: 64 20 69 6e 20 5b 25 73 5d 3a 20 25 73 22 2c 20  d in [%s]: %s", 
8080: 70 63 78 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70 2d  pcx, p->zSql, p-
8090: 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 7d 0a 20  >zErrMsg);.  }. 
80a0: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
80b0: 65 48 61 6c 74 28 70 29 3b 0a 20 20 61 73 73 65  eHalt(p);.  asse
80c0: 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42  rt( rc==SQLITE_B
80d0: 55 53 59 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54  USY || rc==SQLIT
80e0: 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c 49  E_OK || rc==SQLI
80f0: 54 45 5f 45 52 52 4f 52 20 29 3b 0a 20 20 69 66  TE_ERROR );.  if
8100: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53  ( rc==SQLITE_BUS
8110: 59 20 29 7b 0a 20 20 20 20 70 2d 3e 72 63 20 3d  Y ){.    p->rc =
8120: 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
8130: 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
8140: 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
8150: 20 7c 7c 20 28 70 2d 3e 72 63 26 30 78 66 66 29   || (p->rc&0xff)
8160: 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41  ==SQLITE_CONSTRA
8170: 49 4e 54 20 29 3b 0a 20 20 20 20 61 73 73 65 72  INT );.    asser
8180: 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
8190: 20 7c 7c 20 64 62 2d 3e 6e 44 65 66 65 72 72 65   || db->nDeferre
81a0: 64 43 6f 6e 73 3e 30 20 7c 7c 20 64 62 2d 3e 6e  dCons>0 || db->n
81b0: 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3e  DeferredImmCons>
81c0: 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 70 2d  0 );.    rc = p-
81d0: 3e 72 63 20 3f 20 53 51 4c 49 54 45 5f 45 52 52  >rc ? SQLITE_ERR
81e0: 4f 52 20 3a 20 53 51 4c 49 54 45 5f 44 4f 4e 45  OR : SQLITE_DONE
81f0: 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62  ;.  }.  goto vdb
8200: 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20  e_return;.}../* 
8210: 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67 65 72 20  Opcode: Integer 
8220: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
8230: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50  ynopsis: r[P2]=P
8240: 31 0a 2a 2a 0a 2a 2a 20 54 68 65 20 33 32 2d 62  1.**.** The 32-b
8250: 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  it integer value
8260: 20 50 31 20 69 73 20 77 72 69 74 74 65 6e 20 69   P1 is written i
8270: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
8280: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65  .*/.case OP_Inte
8290: 67 65 72 3a 20 7b 20 20 20 20 20 20 20 20 20 2f  ger: {         /
82a0: 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70 4f 75 74  * out2 */.  pOut
82b0: 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
82c0: 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75  e(p, pOp);.  pOu
82d0: 74 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 31  t->u.i = pOp->p1
82e0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
82f0: 20 4f 70 63 6f 64 65 3a 20 49 6e 74 36 34 20 2a   Opcode: Int64 *
8300: 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79   P2 * P4 *.** Sy
8310: 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34  nopsis: r[P2]=P4
8320: 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
8330: 6f 69 6e 74 65 72 20 74 6f 20 61 20 36 34 2d 62  ointer to a 64-b
8340: 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  it integer value
8350: 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20  ..** Write that 
8360: 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73  value into regis
8370: 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
8380: 4f 50 5f 49 6e 74 36 34 3a 20 7b 20 20 20 20 20  OP_Int64: {     
8390: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
83a0: 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
83b0: 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
83c0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
83d0: 3e 70 34 2e 70 49 36 34 21 3d 30 20 29 3b 0a 20  >p4.pI64!=0 );. 
83e0: 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 2a 70 4f   pOut->u.i = *pO
83f0: 70 2d 3e 70 34 2e 70 49 36 34 3b 0a 20 20 62 72  p->p4.pI64;.  br
8400: 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20  eak;.}..#ifndef 
8410: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
8420: 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70  TING_POINT./* Op
8430: 63 6f 64 65 3a 20 52 65 61 6c 20 2a 20 50 32 20  code: Real * P2 
8440: 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  * P4 *.** Synops
8450: 69 73 3a 20 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a  is: r[P2]=P4.**.
8460: 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
8470: 65 72 20 74 6f 20 61 20 36 34 2d 62 69 74 20 66  er to a 64-bit f
8480: 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61  loating point va
8490: 6c 75 65 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68  lue..** Write th
84a0: 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65  at value into re
84b0: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61  gister P2..*/.ca
84c0: 73 65 20 4f 50 5f 52 65 61 6c 3a 20 7b 20 20 20  se OP_Real: {   
84d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
84e0: 20 61 73 20 54 4b 5f 46 4c 4f 41 54 2c 20 6f 75   as TK_FLOAT, ou
84f0: 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 6f  t2 */.  pOut = o
8500: 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
8510: 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 66   pOp);.  pOut->f
8520: 6c 61 67 73 20 3d 20 4d 45 4d 5f 52 65 61 6c 3b  lags = MEM_Real;
8530: 0a 20 20 61 73 73 65 72 74 28 20 21 73 71 6c 69  .  assert( !sqli
8540: 74 65 33 49 73 4e 61 4e 28 2a 70 4f 70 2d 3e 70  te3IsNaN(*pOp->p
8550: 34 2e 70 52 65 61 6c 29 20 29 3b 0a 20 20 70 4f  4.pReal) );.  pO
8560: 75 74 2d 3e 75 2e 72 20 3d 20 2a 70 4f 70 2d 3e  ut->u.r = *pOp->
8570: 70 34 2e 70 52 65 61 6c 3b 0a 20 20 62 72 65 61  p4.pReal;.  brea
8580: 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20  k;.}.#endif../* 
8590: 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e 67 38 20  Opcode: String8 
85a0: 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53  * P2 * P4 *.** S
85b0: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 27  ynopsis: r[P2]='
85c0: 50 34 27 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69  P4'.**.** P4 poi
85d0: 6e 74 73 20 74 6f 20 61 20 6e 75 6c 20 74 65 72  nts to a nul ter
85e0: 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73 74  minated UTF-8 st
85f0: 72 69 6e 67 2e 20 54 68 69 73 20 6f 70 63 6f 64  ring. This opcod
8600: 65 20 69 73 20 74 72 61 6e 73 66 6f 72 6d 65 64  e is transformed
8610: 20 0a 2a 2a 20 69 6e 74 6f 20 61 20 53 74 72 69   .** into a Stri
8620: 6e 67 20 6f 70 63 6f 64 65 20 62 65 66 6f 72 65  ng opcode before
8630: 20 69 74 20 69 73 20 65 78 65 63 75 74 65 64 20   it is executed 
8640: 66 6f 72 20 74 68 65 20 66 69 72 73 74 20 74 69  for the first ti
8650: 6d 65 2e 20 20 44 75 72 69 6e 67 0a 2a 2a 20 74  me.  During.** t
8660: 68 69 73 20 74 72 61 6e 73 66 6f 72 6d 61 74 69  his transformati
8670: 6f 6e 2c 20 74 68 65 20 6c 65 6e 67 74 68 20 6f  on, the length o
8680: 66 20 73 74 72 69 6e 67 20 50 34 20 69 73 20 63  f string P4 is c
8690: 6f 6d 70 75 74 65 64 20 61 6e 64 20 73 74 6f 72  omputed and stor
86a0: 65 64 0a 2a 2a 20 61 73 20 74 68 65 20 50 31 20  ed.** as the P1 
86b0: 70 61 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a 63 61  parameter..*/.ca
86c0: 73 65 20 4f 50 5f 53 74 72 69 6e 67 38 3a 20 7b  se OP_String8: {
86d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
86e0: 20 61 73 20 54 4b 5f 53 54 52 49 4e 47 2c 20 6f   as TK_STRING, o
86f0: 75 74 32 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ut2 */.  assert(
8700: 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b   pOp->p4.z!=0 );
8710: 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
8720: 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
8730: 3b 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  ;.  pOp->opcode 
8740: 3d 20 4f 50 5f 53 74 72 69 6e 67 3b 0a 20 20 70  = OP_String;.  p
8750: 4f 70 2d 3e 70 31 20 3d 20 73 71 6c 69 74 65 33  Op->p1 = sqlite3
8760: 53 74 72 6c 65 6e 33 30 28 70 4f 70 2d 3e 70 34  Strlen30(pOp->p4
8770: 2e 7a 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  .z);..#ifndef SQ
8780: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a  LITE_OMIT_UTF16.
8790: 20 20 69 66 28 20 65 6e 63 6f 64 69 6e 67 21 3d    if( encoding!=
87a0: 53 51 4c 49 54 45 5f 55 54 46 38 20 29 7b 0a 20  SQLITE_UTF8 ){. 
87b0: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
87c0: 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 4f 75  dbeMemSetStr(pOu
87d0: 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 2d 31  t, pOp->p4.z, -1
87e0: 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53  , SQLITE_UTF8, S
87f0: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
8800: 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
8810: 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d  QLITE_OK || rc==
8820: 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20 29 3b  SQLITE_TOOBIG );
8830: 0a 20 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f  .    if( SQLITE_
8840: 4f 4b 21 3d 73 71 6c 69 74 65 33 56 64 62 65 43  OK!=sqlite3VdbeC
8850: 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f  hangeEncoding(pO
8860: 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 20 29 20  ut, encoding) ) 
8870: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20  goto no_mem;.   
8880: 20 61 73 73 65 72 74 28 20 70 4f 75 74 2d 3e 73   assert( pOut->s
8890: 7a 4d 61 6c 6c 6f 63 3e 30 20 26 26 20 70 4f 75  zMalloc>0 && pOu
88a0: 74 2d 3e 7a 4d 61 6c 6c 6f 63 3d 3d 70 4f 75 74  t->zMalloc==pOut
88b0: 2d 3e 7a 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ->z );.    asser
88c0: 74 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69  t( VdbeMemDynami
88d0: 63 28 70 4f 75 74 29 3d 3d 30 20 29 3b 0a 20 20  c(pOut)==0 );.  
88e0: 20 20 70 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63    pOut->szMalloc
88f0: 20 3d 20 30 3b 0a 20 20 20 20 70 4f 75 74 2d 3e   = 0;.    pOut->
8900: 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 53 74 61  flags |= MEM_Sta
8910: 74 69 63 3b 0a 20 20 20 20 69 66 28 20 70 4f 70  tic;.    if( pOp
8920: 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 44 59 4e  ->p4type==P4_DYN
8930: 41 4d 49 43 20 29 7b 0a 20 20 20 20 20 20 73 71  AMIC ){.      sq
8940: 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
8950: 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20  pOp->p4.z);.    
8960: 7d 0a 20 20 20 20 70 4f 70 2d 3e 70 34 74 79 70  }.    pOp->p4typ
8970: 65 20 3d 20 50 34 5f 44 59 4e 41 4d 49 43 3b 0a  e = P4_DYNAMIC;.
8980: 20 20 20 20 70 4f 70 2d 3e 70 34 2e 7a 20 3d 20      pOp->p4.z = 
8990: 70 4f 75 74 2d 3e 7a 3b 0a 20 20 20 20 70 4f 70  pOut->z;.    pOp
89a0: 2d 3e 70 31 20 3d 20 70 4f 75 74 2d 3e 6e 3b 0a  ->p1 = pOut->n;.
89b0: 20 20 7d 0a 20 20 74 65 73 74 63 61 73 65 28 20    }.  testcase( 
89c0: 72 63 3d 3d 53 51 4c 49 54 45 5f 54 4f 4f 42 49  rc==SQLITE_TOOBI
89d0: 47 20 29 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66  G );.#endif.  if
89e0: 28 20 70 4f 70 2d 3e 70 31 3e 64 62 2d 3e 61 4c  ( pOp->p1>db->aL
89f0: 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
8a00: 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20  T_LENGTH] ){.   
8a10: 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
8a20: 20 7d 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d   }.  assert( rc=
8a30: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20  =SQLITE_OK );.  
8a40: 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20  /* Fall through 
8a50: 74 6f 20 74 68 65 20 6e 65 78 74 20 63 61 73 65  to the next case
8a60: 2c 20 4f 50 5f 53 74 72 69 6e 67 20 2a 2f 0a 7d  , OP_String */.}
8a70: 0a 20 20 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .  ./* Opcode: S
8a80: 74 72 69 6e 67 20 50 31 20 50 32 20 50 33 20 50  tring P1 P2 P3 P
8a90: 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
8aa0: 3a 20 72 5b 50 32 5d 3d 27 50 34 27 20 28 6c 65  : r[P2]='P4' (le
8ab0: 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20 54 68 65 20  n=P1).**.** The 
8ac0: 73 74 72 69 6e 67 20 76 61 6c 75 65 20 50 34 20  string value P4 
8ad0: 6f 66 20 6c 65 6e 67 74 68 20 50 31 20 28 62 79  of length P1 (by
8ae0: 74 65 73 29 20 69 73 20 73 74 6f 72 65 64 20 69  tes) is stored i
8af0: 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
8b00: 2a 0a 2a 2a 20 49 66 20 50 33 20 69 73 20 6e 6f  *.** If P3 is no
8b10: 74 20 7a 65 72 6f 20 61 6e 64 20 74 68 65 20 63  t zero and the c
8b20: 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
8b30: 65 72 20 50 33 20 69 73 20 65 71 75 61 6c 20 74  er P3 is equal t
8b40: 6f 20 50 35 2c 20 74 68 65 6e 0a 2a 2a 20 74 68  o P5, then.** th
8b50: 65 20 64 61 74 61 74 79 70 65 20 6f 66 20 74 68  e datatype of th
8b60: 65 20 72 65 67 69 73 74 65 72 20 50 32 20 69 73  e register P2 is
8b70: 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 42 4c   converted to BL
8b80: 4f 42 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e 74  OB.  The content
8b90: 20 69 73 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20   is.** the same 
8ba0: 73 65 71 75 65 6e 63 65 20 6f 66 20 62 79 74 65  sequence of byte
8bb0: 73 2c 20 69 74 20 69 73 20 6d 65 72 65 6c 79 20  s, it is merely 
8bc0: 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 61  interpreted as a
8bd0: 20 42 4c 4f 42 20 69 6e 73 74 65 61 64 0a 2a 2a   BLOB instead.**
8be0: 20 6f 66 20 61 20 73 74 72 69 6e 67 2c 20 61 73   of a string, as
8bf0: 20 69 66 20 69 74 20 68 61 64 20 62 65 65 6e 20   if it had been 
8c00: 43 41 53 54 2e 20 20 49 6e 20 6f 74 68 65 72 20  CAST.  In other 
8c10: 77 6f 72 64 73 3a 0a 2a 2a 0a 2a 2a 20 69 66 28  words:.**.** if(
8c20: 20 50 33 21 3d 30 20 61 6e 64 20 72 65 67 5b 50   P3!=0 and reg[P
8c30: 33 5d 3d 3d 50 35 20 29 20 72 65 67 5b 50 32 5d  3]==P5 ) reg[P2]
8c40: 20 3a 3d 20 43 41 53 54 28 72 65 67 5b 50 32 5d   := CAST(reg[P2]
8c50: 20 61 73 20 42 4c 4f 42 29 0a 2a 2f 0a 63 61 73   as BLOB).*/.cas
8c60: 65 20 4f 50 5f 53 74 72 69 6e 67 3a 20 7b 20 20  e OP_String: {  
8c70: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
8c80: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
8c90: 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70  ->p4.z!=0 );.  p
8ca0: 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
8cb0: 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
8cc0: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
8cd0: 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63  M_Str|MEM_Static
8ce0: 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75  |MEM_Term;.  pOu
8cf0: 74 2d 3e 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  t->z = pOp->p4.z
8d00: 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 70 4f  ;.  pOut->n = pO
8d10: 70 2d 3e 70 31 3b 0a 20 20 70 4f 75 74 2d 3e 65  p->p1;.  pOut->e
8d20: 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20  nc = encoding;. 
8d30: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
8d40: 53 49 5a 45 28 70 4f 75 74 29 3b 0a 23 69 66 6e  SIZE(pOut);.#ifn
8d50: 64 65 66 20 53 51 4c 49 54 45 5f 4c 49 4b 45 5f  def SQLITE_LIKE_
8d60: 44 4f 45 53 4e 54 5f 4d 41 54 43 48 5f 42 4c 4f  DOESNT_MATCH_BLO
8d70: 42 53 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 33  BS.  if( pOp->p3
8d80: 3e 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  >0 ){.    assert
8d90: 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  ( pOp->p3<=(p->n
8da0: 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
8db0: 6f 72 29 20 29 3b 0a 20 20 20 20 70 49 6e 33 20  or) );.    pIn3 
8dc0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
8dd0: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49  ;.    assert( pI
8de0: 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
8df0: 49 6e 74 20 29 3b 0a 20 20 20 20 69 66 28 20 70  Int );.    if( p
8e00: 49 6e 33 2d 3e 75 2e 69 3d 3d 70 4f 70 2d 3e 70  In3->u.i==pOp->p
8e10: 35 20 29 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  5 ) pOut->flags 
8e20: 3d 20 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53  = MEM_Blob|MEM_S
8e30: 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a  tatic|MEM_Term;.
8e40: 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 62 72 65    }.#endif.  bre
8e50: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
8e60: 3a 20 4e 75 6c 6c 20 50 31 20 50 32 20 50 33 20  : Null P1 P2 P3 
8e70: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
8e80: 20 72 5b 50 32 2e 2e 50 33 5d 3d 4e 55 4c 4c 0a   r[P2..P3]=NULL.
8e90: 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 4e 55  **.** Write a NU
8ea0: 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  LL into register
8eb0: 73 20 50 32 2e 20 20 49 66 20 50 33 20 67 72 65  s P2.  If P3 gre
8ec0: 61 74 65 72 20 74 68 61 6e 20 50 32 2c 20 74 68  ater than P2, th
8ed0: 65 6e 20 61 6c 73 6f 20 77 72 69 74 65 0a 2a 2a  en also write.**
8ee0: 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73   NULL into regis
8ef0: 74 65 72 20 50 33 20 61 6e 64 20 65 76 65 72 79  ter P3 and every
8f00: 20 72 65 67 69 73 74 65 72 20 69 6e 20 62 65 74   register in bet
8f10: 77 65 65 6e 20 50 32 20 61 6e 64 20 50 33 2e 20  ween P2 and P3. 
8f20: 20 49 66 20 50 33 0a 2a 2a 20 69 73 20 6c 65 73   If P3.** is les
8f30: 73 20 74 68 61 6e 20 50 32 20 28 74 79 70 69 63  s than P2 (typic
8f40: 61 6c 6c 79 20 50 33 20 69 73 20 7a 65 72 6f 29  ally P3 is zero)
8f50: 20 74 68 65 6e 20 6f 6e 6c 79 20 72 65 67 69 73   then only regis
8f60: 74 65 72 20 50 32 20 69 73 0a 2a 2a 20 73 65 74  ter P2 is.** set
8f70: 20 74 6f 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20   to NULL..**.** 
8f80: 49 66 20 74 68 65 20 50 31 20 76 61 6c 75 65 20  If the P1 value 
8f90: 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
8fa0: 6e 20 61 6c 73 6f 20 73 65 74 20 74 68 65 20 4d  n also set the M
8fb0: 45 4d 5f 43 6c 65 61 72 65 64 20 66 6c 61 67 20  EM_Cleared flag 
8fc0: 73 6f 20 74 68 61 74 0a 2a 2a 20 4e 55 4c 4c 20  so that.** NULL 
8fd0: 76 61 6c 75 65 73 20 77 69 6c 6c 20 6e 6f 74 20  values will not 
8fe0: 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 20 65 76  compare equal ev
8ff0: 65 6e 20 69 66 20 53 51 4c 49 54 45 5f 4e 55 4c  en if SQLITE_NUL
9000: 4c 45 51 20 69 73 20 73 65 74 20 6f 6e 0a 2a 2a  LEQ is set on.**
9010: 20 4f 50 5f 4e 65 20 6f 72 20 4f 50 5f 45 71 2e   OP_Ne or OP_Eq.
9020: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c  .*/.case OP_Null
9030: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
9040: 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20 63   out2 */.  int c
9050: 6e 74 3b 0a 20 20 75 31 36 20 6e 75 6c 6c 46 6c  nt;.  u16 nullFl
9060: 61 67 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74  ag;.  pOut = out
9070: 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
9080: 4f 70 29 3b 0a 20 20 63 6e 74 20 3d 20 70 4f 70  Op);.  cnt = pOp
9090: 2d 3e 70 33 2d 70 4f 70 2d 3e 70 32 3b 0a 20 20  ->p3-pOp->p2;.  
90a0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
90b0: 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
90c0: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70  >nCursor) );.  p
90d0: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e 75 6c  Out->flags = nul
90e0: 6c 46 6c 61 67 20 3d 20 70 4f 70 2d 3e 70 31 20  lFlag = pOp->p1 
90f0: 3f 20 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f  ? (MEM_Null|MEM_
9100: 43 6c 65 61 72 65 64 29 20 3a 20 4d 45 4d 5f 4e  Cleared) : MEM_N
9110: 75 6c 6c 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d  ull;.  pOut->n =
9120: 20 30 3b 0a 20 20 77 68 69 6c 65 28 20 63 6e 74   0;.  while( cnt
9130: 3e 30 20 29 7b 0a 20 20 20 20 70 4f 75 74 2b 2b  >0 ){.    pOut++
9140: 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f  ;.    memAboutTo
9150: 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b  Change(p, pOut);
9160: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
9170: 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29  MemSetNull(pOut)
9180: 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  ;.    pOut->flag
9190: 73 20 3d 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20  s = nullFlag;.  
91a0: 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 30 3b 0a 20    pOut->n = 0;. 
91b0: 20 20 20 63 6e 74 2d 2d 3b 0a 20 20 7d 0a 20 20     cnt--;.  }.  
91c0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
91d0: 6f 64 65 3a 20 53 6f 66 74 4e 75 6c 6c 20 50 31  ode: SoftNull P1
91e0: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f   * * * *.** Syno
91f0: 70 73 69 73 3a 20 72 5b 50 31 5d 3d 4e 55 4c 4c  psis: r[P1]=NULL
9200: 0a 2a 2a 0a 2a 2a 20 53 65 74 20 72 65 67 69 73  .**.** Set regis
9210: 74 65 72 20 50 31 20 74 6f 20 68 61 76 65 20 74  ter P1 to have t
9220: 68 65 20 76 61 6c 75 65 20 4e 55 4c 4c 20 61 73  he value NULL as
9230: 20 73 65 65 6e 20 62 79 20 74 68 65 20 4f 50 5f   seen by the OP_
9240: 4d 61 6b 65 52 65 63 6f 72 64 0a 2a 2a 20 69 6e  MakeRecord.** in
9250: 73 74 72 75 63 74 69 6f 6e 2c 20 62 75 74 20 64  struction, but d
9260: 6f 20 6e 6f 74 20 66 72 65 65 20 61 6e 79 20 73  o not free any s
9270: 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d 65  tring or blob me
9280: 6d 6f 72 79 20 61 73 73 6f 63 69 61 74 65 64 20  mory associated 
9290: 77 69 74 68 0a 2a 2a 20 74 68 65 20 72 65 67 69  with.** the regi
92a0: 73 74 65 72 2c 20 73 6f 20 74 68 61 74 20 69 66  ster, so that if
92b0: 20 74 68 65 20 76 61 6c 75 65 20 77 61 73 20 61   the value was a
92c0: 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20   string or blob 
92d0: 74 68 61 74 20 77 61 73 0a 2a 2a 20 70 72 65 76  that was.** prev
92e0: 69 6f 75 73 6c 79 20 63 6f 70 69 65 64 20 75 73  iously copied us
92f0: 69 6e 67 20 4f 50 5f 53 43 6f 70 79 2c 20 74 68  ing OP_SCopy, th
9300: 65 20 63 6f 70 69 65 73 20 77 69 6c 6c 20 63 6f  e copies will co
9310: 6e 74 69 6e 75 65 20 74 6f 20 62 65 20 76 61 6c  ntinue to be val
9320: 69 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  id..*/.case OP_S
9330: 6f 66 74 4e 75 6c 6c 3a 20 7b 0a 20 20 61 73 73  oftNull: {.  ass
9340: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26  ert( pOp->p1>0 &
9350: 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e  & pOp->p1<=(p->n
9360: 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
9370: 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20  or) );.  pOut = 
9380: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
9390: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
93a0: 28 70 4f 75 74 2d 3e 66 6c 61 67 73 26 7e 28 4d  (pOut->flags&~(M
93b0: 45 4d 5f 55 6e 64 65 66 69 6e 65 64 7c 4d 45 4d  EM_Undefined|MEM
93c0: 5f 41 66 66 4d 61 73 6b 29 29 7c 4d 45 4d 5f 4e  _AffMask))|MEM_N
93d0: 75 6c 6c 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ull;.  break;.}.
93e0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 6c 6f 62  ./* Opcode: Blob
93f0: 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
9400: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
9410: 3d 50 34 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a  =P4 (len=P1).**.
9420: 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20 74 6f 20  ** P4 points to 
9430: 61 20 62 6c 6f 62 20 6f 66 20 64 61 74 61 20 50  a blob of data P
9440: 31 20 62 79 74 65 73 20 6c 6f 6e 67 2e 20 20 53  1 bytes long.  S
9450: 74 6f 72 65 20 74 68 69 73 0a 2a 2a 20 62 6c 6f  tore this.** blo
9460: 62 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  b in register P2
9470: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 6c 6f  ..*/.case OP_Blo
9480: 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  b: {            
9490: 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
94a0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
94b0: 20 3c 3d 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c   <= SQLITE_MAX_L
94c0: 45 4e 47 54 48 20 29 3b 0a 20 20 70 4f 75 74 20  ENGTH );.  pOut 
94d0: 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
94e0: 28 70 2c 20 70 4f 70 29 3b 0a 20 20 73 71 6c 69  (p, pOp);.  sqli
94f0: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72  te3VdbeMemSetStr
9500: 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a  (pOut, pOp->p4.z
9510: 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 30 29  , pOp->p1, 0, 0)
9520: 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20  ;.  pOut->enc = 
9530: 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41  encoding;.  UPDA
9540: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
9550: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
9560: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61  }../* Opcode: Va
9570: 72 69 61 62 6c 65 20 50 31 20 50 32 20 2a 20 50  riable P1 P2 * P
9580: 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
9590: 20 72 5b 50 32 5d 3d 70 61 72 61 6d 65 74 65 72   r[P2]=parameter
95a0: 28 50 31 2c 50 34 29 0a 2a 2a 0a 2a 2a 20 54 72  (P1,P4).**.** Tr
95b0: 61 6e 73 66 65 72 20 74 68 65 20 76 61 6c 75 65  ansfer the value
95c0: 73 20 6f 66 20 62 6f 75 6e 64 20 70 61 72 61 6d  s of bound param
95d0: 65 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67  eter P1 into reg
95e0: 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 49  ister P2.**.** I
95f0: 66 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 20  f the parameter 
9600: 69 73 20 6e 61 6d 65 64 2c 20 74 68 65 6e 20 69  is named, then i
9610: 74 73 20 6e 61 6d 65 20 61 70 70 65 61 72 73 20  ts name appears 
9620: 69 6e 20 50 34 2e 0a 2a 2a 20 54 68 65 20 50 34  in P4..** The P4
9630: 20 76 61 6c 75 65 20 69 73 20 75 73 65 64 20 62   value is used b
9640: 79 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70  y sqlite3_bind_p
9650: 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28 29 2e  arameter_name().
9660: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61 72 69  .*/.case OP_Vari
9670: 61 62 6c 65 3a 20 7b 20 20 20 20 20 20 20 20 20  able: {         
9680: 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
9690: 4d 65 6d 20 2a 70 56 61 72 3b 20 20 20 20 20 20  Mem *pVar;      
96a0: 20 2f 2a 20 56 61 6c 75 65 20 62 65 69 6e 67 20   /* Value being 
96b0: 74 72 61 6e 73 66 65 72 72 65 64 20 2a 2f 0a 0a  transferred */..
96c0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
96d0: 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d  1>0 && pOp->p1<=
96e0: 70 2d 3e 6e 56 61 72 20 29 3b 0a 20 20 61 73 73  p->nVar );.  ass
96f0: 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d  ert( pOp->p4.z==
9700: 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d  0 || pOp->p4.z==
9710: 73 71 6c 69 74 65 33 56 4c 69 73 74 4e 75 6d 54  sqlite3VListNumT
9720: 6f 4e 61 6d 65 28 70 2d 3e 70 56 4c 69 73 74 2c  oName(p->pVList,
9730: 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 70 56  pOp->p1) );.  pV
9740: 61 72 20 3d 20 26 70 2d 3e 61 56 61 72 5b 70 4f  ar = &p->aVar[pO
9750: 70 2d 3e 70 31 20 2d 20 31 5d 3b 0a 20 20 69 66  p->p1 - 1];.  if
9760: 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
9770: 54 6f 6f 42 69 67 28 70 56 61 72 29 20 29 7b 0a  TooBig(pVar) ){.
9780: 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
9790: 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 20 3d 20 26  ;.  }.  pOut = &
97a0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
97b0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
97c0: 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c  hallowCopy(pOut,
97d0: 20 70 56 61 72 2c 20 4d 45 4d 5f 53 74 61 74 69   pVar, MEM_Stati
97e0: 63 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  c);.  UPDATE_MAX
97f0: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
9800: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
9810: 4f 70 63 6f 64 65 3a 20 4d 6f 76 65 20 50 31 20  Opcode: Move P1 
9820: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
9830: 6f 70 73 69 73 3a 20 72 5b 50 32 40 50 33 5d 3d  opsis: r[P2@P3]=
9840: 72 5b 50 31 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 4d  r[P1@P3].**.** M
9850: 6f 76 65 20 74 68 65 20 50 33 20 76 61 6c 75 65  ove the P3 value
9860: 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
9870: 2e 2e 50 31 2b 50 33 2d 31 20 6f 76 65 72 20 69  ..P1+P3-1 over i
9880: 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 73  nto.** registers
9890: 20 50 32 2e 2e 50 32 2b 50 33 2d 31 2e 20 20 52   P2..P2+P3-1.  R
98a0: 65 67 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b  egisters P1..P1+
98b0: 50 33 2d 31 20 61 72 65 0a 2a 2a 20 6c 65 66 74  P3-1 are.** left
98c0: 20 68 6f 6c 64 69 6e 67 20 61 20 4e 55 4c 4c 2e   holding a NULL.
98d0: 20 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72    It is an error
98e0: 20 66 6f 72 20 72 65 67 69 73 74 65 72 20 72 61   for register ra
98f0: 6e 67 65 73 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50  nges.** P1..P1+P
9900: 33 2d 31 20 61 6e 64 20 50 32 2e 2e 50 32 2b 50  3-1 and P2..P2+P
9910: 33 2d 31 20 74 6f 20 6f 76 65 72 6c 61 70 2e 20  3-1 to overlap. 
9920: 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 0a   It is an error.
9930: 2a 2a 20 66 6f 72 20 50 33 20 74 6f 20 62 65 20  ** for P3 to be 
9940: 6c 65 73 73 20 74 68 61 6e 20 31 2e 0a 2a 2f 0a  less than 1..*/.
9950: 63 61 73 65 20 4f 50 5f 4d 6f 76 65 3a 20 7b 0a  case OP_Move: {.
9960: 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20    int n;        
9970: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
9980: 72 65 67 69 73 74 65 72 73 20 6c 65 66 74 20 74  registers left t
9990: 6f 20 63 6f 70 79 20 2a 2f 0a 20 20 69 6e 74 20  o copy */.  int 
99a0: 70 31 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  p1;          /* 
99b0: 52 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79  Register to copy
99c0: 20 66 72 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20 70   from */.  int p
99d0: 32 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52  2;          /* R
99e0: 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20  egister to copy 
99f0: 74 6f 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70  to */..  n = pOp
9a00: 2d 3e 70 33 3b 0a 20 20 70 31 20 3d 20 70 4f 70  ->p3;.  p1 = pOp
9a10: 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70  ->p1;.  p2 = pOp
9a20: 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p2;.  assert( 
9a30: 6e 3e 30 20 26 26 20 70 31 3e 30 20 26 26 20 70  n>0 && p1>0 && p
9a40: 32 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  2>0 );.  assert(
9a50: 20 70 31 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32 2b   p1+n<=p2 || p2+
9a60: 6e 3c 3d 70 31 20 29 3b 0a 0a 20 20 70 49 6e 31  n<=p1 );..  pIn1
9a70: 20 3d 20 26 61 4d 65 6d 5b 70 31 5d 3b 0a 20 20   = &aMem[p1];.  
9a80: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 32 5d  pOut = &aMem[p2]
9a90: 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 61 73 73 65  ;.  do{.    asse
9aa0: 72 74 28 20 70 4f 75 74 3c 3d 26 61 4d 65 6d 5b  rt( pOut<=&aMem[
9ab0: 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
9ac0: 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20  nCursor)] );.   
9ad0: 20 61 73 73 65 72 74 28 20 70 49 6e 31 3c 3d 26   assert( pIn1<=&
9ae0: 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2b 31 20  aMem[(p->nMem+1 
9af0: 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29  - p->nCursor)] )
9b00: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  ;.    assert( me
9b10: 6d 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29  mIsValid(pIn1) )
9b20: 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f  ;.    memAboutTo
9b30: 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b  Change(p, pOut);
9b40: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
9b50: 4d 65 6d 4d 6f 76 65 28 70 4f 75 74 2c 20 70 49  MemMove(pOut, pI
9b60: 6e 31 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  n1);.#ifdef SQLI
9b70: 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28  TE_DEBUG.    if(
9b80: 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f   pOut->pScopyFro
9b90: 6d 3e 3d 26 61 4d 65 6d 5b 70 31 5d 20 26 26 20  m>=&aMem[p1] && 
9ba0: 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d  pOut->pScopyFrom
9bb0: 3c 70 4f 75 74 20 29 7b 0a 20 20 20 20 20 20 70  <pOut ){.      p
9bc0: 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20  Out->pScopyFrom 
9bd0: 2b 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 70 31 3b  += pOp->p2 - p1;
9be0: 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  .    }.#endif.  
9bf0: 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65    Deephemeralize
9c00: 28 70 4f 75 74 29 3b 0a 20 20 20 20 52 45 47 49  (pOut);.    REGI
9c10: 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b 2b 2c  STER_TRACE(p2++,
9c20: 20 70 4f 75 74 29 3b 0a 20 20 20 20 70 49 6e 31   pOut);.    pIn1
9c30: 2b 2b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a  ++;.    pOut++;.
9c40: 20 20 7d 77 68 69 6c 65 28 20 2d 2d 6e 20 29 3b    }while( --n );
9c50: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
9c60: 4f 70 63 6f 64 65 3a 20 43 6f 70 79 20 50 31 20  Opcode: Copy P1 
9c70: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
9c80: 6f 70 73 69 73 3a 20 72 5b 50 32 40 50 33 2b 31  opsis: r[P2@P3+1
9c90: 5d 3d 72 5b 50 31 40 50 33 2b 31 5d 0a 2a 2a 0a  ]=r[P1@P3+1].**.
9ca0: 2a 2a 20 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f  ** Make a copy o
9cb0: 66 20 72 65 67 69 73 74 65 72 73 20 50 31 2e 2e  f registers P1..
9cc0: 50 31 2b 50 33 20 69 6e 74 6f 20 72 65 67 69 73  P1+P3 into regis
9cd0: 74 65 72 73 20 50 32 2e 2e 50 32 2b 50 33 2e 0a  ters P2..P2+P3..
9ce0: 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
9cf0: 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 64  uction makes a d
9d00: 65 65 70 20 63 6f 70 79 20 6f 66 20 74 68 65 20  eep copy of the 
9d10: 76 61 6c 75 65 2e 20 20 41 20 64 75 70 6c 69 63  value.  A duplic
9d20: 61 74 65 0a 2a 2a 20 69 73 20 6d 61 64 65 20 6f  ate.** is made o
9d30: 66 20 61 6e 79 20 73 74 72 69 6e 67 20 6f 72 20  f any string or 
9d40: 62 6c 6f 62 20 63 6f 6e 73 74 61 6e 74 2e 20 20  blob constant.  
9d50: 53 65 65 20 61 6c 73 6f 20 4f 50 5f 53 43 6f 70  See also OP_SCop
9d60: 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f  y..*/.case OP_Co
9d70: 70 79 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 0a  py: {.  int n;..
9d80: 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20    n = pOp->p3;. 
9d90: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
9da0: 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d  p->p1];.  pOut =
9db0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
9dc0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 21  .  assert( pOut!
9dd0: 3d 70 49 6e 31 20 29 3b 0a 20 20 77 68 69 6c 65  =pIn1 );.  while
9de0: 28 20 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ( 1 ){.    sqlit
9df0: 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77  e3VdbeMemShallow
9e00: 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c  Copy(pOut, pIn1,
9e10: 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 20   MEM_Ephem);.   
9e20: 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28   Deephemeralize(
9e30: 70 4f 75 74 29 3b 0a 23 69 66 64 65 66 20 53 51  pOut);.#ifdef SQ
9e40: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 70  LITE_DEBUG.    p
9e50: 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20  Out->pScopyFrom 
9e60: 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20  = 0;.#endif.    
9e70: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
9e80: 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33 2d 6e  Op->p2+pOp->p3-n
9e90: 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 69 66 28  , pOut);.    if(
9ea0: 20 28 6e 2d 2d 29 3d 3d 30 20 29 20 62 72 65 61   (n--)==0 ) brea
9eb0: 6b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20  k;.    pOut++;. 
9ec0: 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20     pIn1++;.  }. 
9ed0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
9ee0: 63 6f 64 65 3a 20 53 43 6f 70 79 20 50 31 20 50  code: SCopy P1 P
9ef0: 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
9f00: 73 69 73 3a 20 72 5b 50 32 5d 3d 72 5b 50 31 5d  sis: r[P2]=r[P1]
9f10: 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 73 68  .**.** Make a sh
9f20: 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 72 65  allow copy of re
9f30: 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20 72  gister P1 into r
9f40: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
9f50: 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
9f60: 6f 6e 20 6d 61 6b 65 73 20 61 20 73 68 61 6c 6c  on makes a shall
9f70: 6f 77 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76  ow copy of the v
9f80: 61 6c 75 65 2e 20 20 49 66 20 74 68 65 20 76 61  alue.  If the va
9f90: 6c 75 65 0a 2a 2a 20 69 73 20 61 20 73 74 72 69  lue.** is a stri
9fa0: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 74 68 65 6e  ng or blob, then
9fb0: 20 74 68 65 20 63 6f 70 79 20 69 73 20 6f 6e 6c   the copy is onl
9fc0: 79 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  y a pointer to t
9fd0: 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 61  he.** original a
9fe0: 6e 64 20 68 65 6e 63 65 20 69 66 20 74 68 65 20  nd hence if the 
9ff0: 6f 72 69 67 69 6e 61 6c 20 63 68 61 6e 67 65 73  original changes
a000: 20 73 6f 20 77 69 6c 6c 20 74 68 65 20 63 6f 70   so will the cop
a010: 79 2e 0a 2a 2a 20 57 6f 72 73 65 2c 20 69 66 20  y..** Worse, if 
a020: 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 69 73 20  the original is 
a030: 64 65 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65  deallocated, the
a040: 20 63 6f 70 79 20 62 65 63 6f 6d 65 73 20 69 6e   copy becomes in
a050: 76 61 6c 69 64 2e 0a 2a 2a 20 54 68 75 73 20 74  valid..** Thus t
a060: 68 65 20 70 72 6f 67 72 61 6d 20 6d 75 73 74 20  he program must 
a070: 67 75 61 72 61 6e 74 65 65 20 74 68 61 74 20 74  guarantee that t
a080: 68 65 20 6f 72 69 67 69 6e 61 6c 20 77 69 6c 6c  he original will
a090: 20 6e 6f 74 20 63 68 61 6e 67 65 0a 2a 2a 20 64   not change.** d
a0a0: 75 72 69 6e 67 20 74 68 65 20 6c 69 66 65 74 69  uring the lifeti
a0b0: 6d 65 20 6f 66 20 74 68 65 20 63 6f 70 79 2e 20  me of the copy. 
a0c0: 20 55 73 65 20 4f 50 5f 43 6f 70 79 20 74 6f 20   Use OP_Copy to 
a0d0: 6d 61 6b 65 20 61 20 63 6f 6d 70 6c 65 74 65 0a  make a complete.
a0e0: 2a 2a 20 63 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65  ** copy..*/.case
a0f0: 20 4f 50 5f 53 43 6f 70 79 3a 20 7b 20 20 20 20   OP_SCopy: {    
a100: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
a110: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
a120: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f  m[pOp->p1];.  pO
a130: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
a140: 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p2];.  assert( p
a150: 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 73  Out!=pIn1 );.  s
a160: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
a170: 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70  llowCopy(pOut, p
a180: 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b  In1, MEM_Ephem);
a190: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
a1a0: 45 42 55 47 0a 20 20 69 66 28 20 70 4f 75 74 2d  EBUG.  if( pOut-
a1b0: 3e 70 53 63 6f 70 79 46 72 6f 6d 3d 3d 30 20 29  >pScopyFrom==0 )
a1c0: 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f   pOut->pScopyFro
a1d0: 6d 20 3d 20 70 49 6e 31 3b 0a 23 65 6e 64 69 66  m = pIn1;.#endif
a1e0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
a1f0: 4f 70 63 6f 64 65 3a 20 49 6e 74 43 6f 70 79 20  Opcode: IntCopy 
a200: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
a210: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72  ynopsis: r[P2]=r
a220: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73  [P1].**.** Trans
a230: 66 65 72 20 74 68 65 20 69 6e 74 65 67 65 72 20  fer the integer 
a240: 76 61 6c 75 65 20 68 65 6c 64 20 69 6e 20 72 65  value held in re
a250: 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20 72  gister P1 into r
a260: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
a270: 2a 20 54 68 69 73 20 69 73 20 61 6e 20 6f 70 74  * This is an opt
a280: 69 6d 69 7a 65 64 20 76 65 72 73 69 6f 6e 20 6f  imized version o
a290: 66 20 53 43 6f 70 79 20 74 68 61 74 20 77 6f 72  f SCopy that wor
a2a0: 6b 73 20 6f 6e 6c 79 20 66 6f 72 20 69 6e 74 65  ks only for inte
a2b0: 67 65 72 0a 2a 2a 20 76 61 6c 75 65 73 2e 0a 2a  ger.** values..*
a2c0: 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 43 6f 70  /.case OP_IntCop
a2d0: 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  y: {            
a2e0: 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e  /* out2 */.  pIn
a2f0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
a300: 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70  1];.  assert( (p
a310: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
a320: 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 70 4f  _Int)!=0 );.  pO
a330: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
a340: 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  p2];.  sqlite3Vd
a350: 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4f  beMemSetInt64(pO
a360: 75 74 2c 20 70 49 6e 31 2d 3e 75 2e 69 29 3b 0a  ut, pIn1->u.i);.
a370: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
a380: 70 63 6f 64 65 3a 20 52 65 73 75 6c 74 52 6f 77  pcode: ResultRow
a390: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
a3a0: 53 79 6e 6f 70 73 69 73 3a 20 6f 75 74 70 75 74  Synopsis: output
a3b0: 3d 72 5b 50 31 40 50 32 5d 0a 2a 2a 0a 2a 2a 20  =r[P1@P2].**.** 
a3c0: 54 68 65 20 72 65 67 69 73 74 65 72 73 20 50 31  The registers P1
a3d0: 20 74 68 72 6f 75 67 68 20 50 31 2b 50 32 2d 31   through P1+P2-1
a3e0: 20 63 6f 6e 74 61 69 6e 20 61 20 73 69 6e 67 6c   contain a singl
a3f0: 65 20 72 6f 77 20 6f 66 0a 2a 2a 20 72 65 73 75  e row of.** resu
a400: 6c 74 73 2e 20 54 68 69 73 20 6f 70 63 6f 64 65  lts. This opcode
a410: 20 63 61 75 73 65 73 20 74 68 65 20 73 71 6c 69   causes the sqli
a420: 74 65 33 5f 73 74 65 70 28 29 20 63 61 6c 6c 20  te3_step() call 
a430: 74 6f 20 74 65 72 6d 69 6e 61 74 65 0a 2a 2a 20  to terminate.** 
a440: 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 52  with an SQLITE_R
a450: 4f 57 20 72 65 74 75 72 6e 20 63 6f 64 65 20 61  OW return code a
a460: 6e 64 20 69 74 20 73 65 74 73 20 75 70 20 74 68  nd it sets up th
a470: 65 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 0a 2a  e sqlite3_stmt.*
a480: 2a 20 73 74 72 75 63 74 75 72 65 20 74 6f 20 70  * structure to p
a490: 72 6f 76 69 64 65 20 61 63 63 65 73 73 20 74 6f  rovide access to
a4a0: 20 74 68 65 20 72 28 50 31 29 2e 2e 72 28 50 31   the r(P1)..r(P1
a4b0: 2b 50 32 2d 31 29 20 76 61 6c 75 65 73 20 61 73  +P2-1) values as
a4c0: 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 20 72  .** the result r
a4d0: 6f 77 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  ow..*/.case OP_R
a4e0: 65 73 75 6c 74 52 6f 77 3a 20 7b 0a 20 20 4d 65  esultRow: {.  Me
a4f0: 6d 20 2a 70 4d 65 6d 3b 0a 20 20 69 6e 74 20 69  m *pMem;.  int i
a500: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6e  ;.  assert( p->n
a510: 52 65 73 43 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e  ResColumn==pOp->
a520: 70 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  p2 );.  assert( 
a530: 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 61  pOp->p1>0 );.  a
a540: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 2b 70  ssert( pOp->p1+p
a550: 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p2<=(p->nMem
a560: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
a570: 2b 31 20 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53  +1 );..#ifndef S
a580: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52  QLITE_OMIT_PROGR
a590: 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 2f  ESS_CALLBACK.  /
a5a0: 2a 20 52 75 6e 20 74 68 65 20 70 72 6f 67 72 65  * Run the progre
a5b0: 73 73 20 63 6f 75 6e 74 65 72 20 6a 75 73 74 20  ss counter just 
a5c0: 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67  before returning
a5d0: 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d  ..  */.  if( db-
a5e0: 3e 78 50 72 6f 67 72 65 73 73 21 3d 30 0a 20 20  >xProgress!=0.  
a5f0: 20 26 26 20 6e 56 6d 53 74 65 70 3e 3d 6e 50 72   && nVmStep>=nPr
a600: 6f 67 72 65 73 73 4c 69 6d 69 74 20 0a 20 20 20  ogressLimit .   
a610: 26 26 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73  && db->xProgress
a620: 28 64 62 2d 3e 70 50 72 6f 67 72 65 73 73 41 72  (db->pProgressAr
a630: 67 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 72  g)!=0.  ){.    r
a640: 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52  c = SQLITE_INTER
a650: 52 55 50 54 3b 0a 20 20 20 20 67 6f 74 6f 20 61  RUPT;.    goto a
a660: 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
a670: 72 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20  r;.  }.#endif.. 
a680: 20 2f 2a 20 49 66 20 74 68 69 73 20 73 74 61 74   /* If this stat
a690: 65 6d 65 6e 74 20 68 61 73 20 76 69 6f 6c 61 74  ement has violat
a6a0: 65 64 20 69 6d 6d 65 64 69 61 74 65 20 66 6f 72  ed immediate for
a6b0: 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
a6c0: 69 6e 74 73 2c 20 64 6f 0a 20 20 2a 2a 20 6e 6f  ints, do.  ** no
a6d0: 74 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d  t return the num
a6e0: 62 65 72 20 6f 66 20 72 6f 77 73 20 6d 6f 64 69  ber of rows modi
a6f0: 66 69 65 64 2e 20 41 6e 64 20 64 6f 20 6e 6f 74  fied. And do not
a700: 20 52 45 4c 45 41 53 45 20 74 68 65 20 73 74 61   RELEASE the sta
a710: 74 65 6d 65 6e 74 0a 20 20 2a 2a 20 74 72 61 6e  tement.  ** tran
a720: 73 61 63 74 69 6f 6e 2e 20 49 74 20 6e 65 65 64  saction. It need
a730: 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62  s to be rolled b
a740: 61 63 6b 2e 20 20 2a 2f 0a 20 20 69 66 28 20 53  ack.  */.  if( S
a750: 51 4c 49 54 45 5f 4f 4b 21 3d 28 72 63 20 3d 20  QLITE_OK!=(rc = 
a760: 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b  sqlite3VdbeCheck
a770: 46 6b 28 70 2c 20 30 29 29 20 29 7b 0a 20 20 20  Fk(p, 0)) ){.   
a780: 20 61 73 73 65 72 74 28 20 64 62 2d 3e 66 6c 61   assert( db->fla
a790: 67 73 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52  gs&SQLITE_CountR
a7a0: 6f 77 73 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ows );.    asser
a7b0: 74 28 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f  t( p->usesStmtJo
a7c0: 75 72 6e 61 6c 20 29 3b 0a 20 20 20 20 67 6f 74  urnal );.    got
a7d0: 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
a7e0: 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  rror;.  }..  /* 
a7f0: 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 43 6f  If the SQLITE_Co
a800: 75 6e 74 52 6f 77 73 20 66 6c 61 67 20 69 73 20  untRows flag is 
a810: 73 65 74 20 69 6e 20 73 71 6c 69 74 65 33 2e 66  set in sqlite3.f
a820: 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20  lags mask, then 
a830: 0a 20 20 2a 2a 20 44 4d 4c 20 73 74 61 74 65 6d  .  ** DML statem
a840: 65 6e 74 73 20 69 6e 76 6f 6b 65 20 74 68 69 73  ents invoke this
a850: 20 6f 70 63 6f 64 65 20 74 6f 20 72 65 74 75 72   opcode to retur
a860: 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
a870: 72 6f 77 73 20 0a 20 20 2a 2a 20 6d 6f 64 69 66  rows .  ** modif
a880: 69 65 64 20 74 6f 20 74 68 65 20 75 73 65 72 2e  ied to the user.
a890: 20 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e 6c   This is the onl
a8a0: 79 20 77 61 79 20 74 68 61 74 20 61 20 56 4d 20  y way that a VM 
a8b0: 74 68 61 74 0a 20 20 2a 2a 20 6f 70 65 6e 73 20  that.  ** opens 
a8c0: 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e  a statement tran
a8d0: 73 61 63 74 69 6f 6e 20 6d 61 79 20 69 6e 76 6f  saction may invo
a8e0: 6b 65 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a  ke this opcode..
a8f0: 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 63 61 73    **.  ** In cas
a900: 65 20 74 68 69 73 20 69 73 20 73 75 63 68 20 61  e this is such a
a910: 20 73 74 61 74 65 6d 65 6e 74 2c 20 63 6c 6f 73   statement, clos
a920: 65 20 61 6e 79 20 73 74 61 74 65 6d 65 6e 74 20  e any statement 
a930: 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20 2a 2a  transaction.  **
a940: 20 6f 70 65 6e 65 64 20 62 79 20 74 68 69 73 20   opened by this 
a950: 56 4d 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e  VM before return
a960: 69 6e 67 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74  ing control to t
a970: 68 65 20 75 73 65 72 2e 20 54 68 69 73 20 69 73  he user. This is
a980: 20 74 6f 0a 20 20 2a 2a 20 65 6e 73 75 72 65 20   to.  ** ensure 
a990: 74 68 61 74 20 73 74 61 74 65 6d 65 6e 74 2d 74  that statement-t
a9a0: 72 61 6e 73 61 63 74 69 6f 6e 73 20 61 72 65 20  ransactions are 
a9b0: 61 6c 77 61 79 73 20 6e 65 73 74 65 64 2c 20 6e  always nested, n
a9c0: 6f 74 20 6f 76 65 72 6c 61 70 70 69 6e 67 2e 0a  ot overlapping..
a9d0: 20 20 2a 2a 20 49 66 20 74 68 65 20 6f 70 65 6e    ** If the open
a9e0: 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73   statement-trans
a9f0: 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 63 6c  action is not cl
aa00: 6f 73 65 64 20 68 65 72 65 2c 20 74 68 65 6e 20  osed here, then 
aa10: 74 68 65 20 75 73 65 72 0a 20 20 2a 2a 20 6d 61  the user.  ** ma
aa20: 79 20 73 74 65 70 20 61 6e 6f 74 68 65 72 20 56  y step another V
aa30: 4d 20 74 68 61 74 20 6f 70 65 6e 73 20 69 74 73  M that opens its
aa40: 20 6f 77 6e 20 73 74 61 74 65 6d 65 6e 74 20 74   own statement t
aa50: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 54 68 69 73  ransaction. This
aa60: 0a 20 20 2a 2a 20 6d 61 79 20 6c 65 61 64 20 74  .  ** may lead t
aa70: 6f 20 6f 76 65 72 6c 61 70 70 69 6e 67 20 73 74  o overlapping st
aa80: 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
aa90: 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ions..  **.  ** 
aaa0: 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72  The statement tr
aab0: 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 65 76  ansaction is nev
aac0: 65 72 20 61 20 74 6f 70 2d 6c 65 76 65 6c 20 74  er a top-level t
aad0: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 48 65 6e  ransaction.  Hen
aae0: 63 65 0a 20 20 2a 2a 20 74 68 65 20 52 45 4c 45  ce.  ** the RELE
aaf0: 41 53 45 20 63 61 6c 6c 20 62 65 6c 6f 77 20 63  ASE call below c
ab00: 61 6e 20 6e 65 76 65 72 20 66 61 69 6c 2e 0a 20  an never fail.. 
ab10: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 2d   */.  assert( p-
ab20: 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 7c  >iStatement==0 |
ab30: 7c 20 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49  | db->flags&SQLI
ab40: 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a  TE_CountRows );.
ab50: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
ab60: 62 65 43 6c 6f 73 65 53 74 61 74 65 6d 65 6e 74  beCloseStatement
ab70: 28 70 2c 20 53 41 56 45 50 4f 49 4e 54 5f 52 45  (p, SAVEPOINT_RE
ab80: 4c 45 41 53 45 29 3b 0a 20 20 61 73 73 65 72 74  LEASE);.  assert
ab90: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
aba0: 29 3b 0a 0a 20 20 2f 2a 20 49 6e 76 61 6c 69 64  );..  /* Invalid
abb0: 61 74 65 20 61 6c 6c 20 65 70 68 65 6d 65 72 61  ate all ephemera
abc0: 6c 20 63 75 72 73 6f 72 20 72 6f 77 20 63 61 63  l cursor row cac
abd0: 68 65 73 20 2a 2f 0a 20 20 70 2d 3e 63 61 63 68  hes */.  p->cach
abe0: 65 43 74 72 20 3d 20 28 70 2d 3e 63 61 63 68 65  eCtr = (p->cache
abf0: 43 74 72 20 2b 20 32 29 7c 31 3b 0a 0a 20 20 2f  Ctr + 2)|1;..  /
ac00: 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20  * Make sure the 
ac10: 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63  results of the c
ac20: 75 72 72 65 6e 74 20 72 6f 77 20 61 72 65 20 5c  urrent row are \
ac30: 30 30 30 20 74 65 72 6d 69 6e 61 74 65 64 0a 20  000 terminated. 
ac40: 20 2a 2a 20 61 6e 64 20 68 61 76 65 20 61 6e 20   ** and have an 
ac50: 61 73 73 69 67 6e 65 64 20 74 79 70 65 2e 20 20  assigned type.  
ac60: 54 68 65 20 72 65 73 75 6c 74 73 20 61 72 65 20  The results are 
ac70: 64 65 2d 65 70 68 65 6d 65 72 61 6c 69 7a 65 64  de-ephemeralized
ac80: 20 61 73 0a 20 20 2a 2a 20 61 20 73 69 64 65 20   as.  ** a side 
ac90: 65 66 66 65 63 74 2e 0a 20 20 2a 2f 0a 20 20 70  effect..  */.  p
aca0: 4d 65 6d 20 3d 20 70 2d 3e 70 52 65 73 75 6c 74  Mem = p->pResult
acb0: 53 65 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Set = &aMem[pOp-
acc0: 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 69 3d 30 3b  >p1];.  for(i=0;
acd0: 20 69 3c 70 4f 70 2d 3e 70 32 3b 20 69 2b 2b 29   i<pOp->p2; i++)
ace0: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  {.    assert( me
acf0: 6d 49 73 56 61 6c 69 64 28 26 70 4d 65 6d 5b 69  mIsValid(&pMem[i
ad00: 5d 29 20 29 3b 0a 20 20 20 20 44 65 65 70 68 65  ]) );.    Deephe
ad10: 6d 65 72 61 6c 69 7a 65 28 26 70 4d 65 6d 5b 69  meralize(&pMem[i
ad20: 5d 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  ]);.    assert( 
ad30: 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73 20 26  (pMem[i].flags &
ad40: 20 4d 45 4d 5f 45 70 68 65 6d 29 3d 3d 30 0a 20   MEM_Ephem)==0. 
ad50: 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 28 70             || (p
ad60: 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73 20 26 20 28  Mem[i].flags & (
ad70: 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62  MEM_Str|MEM_Blob
ad80: 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c  ))==0 );.    sql
ad90: 69 74 65 33 56 64 62 65 4d 65 6d 4e 75 6c 54 65  ite3VdbeMemNulTe
ada0: 72 6d 69 6e 61 74 65 28 26 70 4d 65 6d 5b 69 5d  rminate(&pMem[i]
adb0: 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  );.    REGISTER_
adc0: 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2b 69 2c  TRACE(pOp->p1+i,
add0: 20 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 7d 0a   &pMem[i]);.  }.
ade0: 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63    if( db->malloc
adf0: 46 61 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f  Failed ) goto no
ae00: 5f 6d 65 6d 3b 0a 0a 20 20 69 66 28 20 64 62 2d  _mem;..  if( db-
ae10: 3e 6d 54 72 61 63 65 20 26 20 53 51 4c 49 54 45  >mTrace & SQLITE
ae20: 5f 54 52 41 43 45 5f 52 4f 57 20 29 7b 0a 20 20  _TRACE_ROW ){.  
ae30: 20 20 64 62 2d 3e 78 54 72 61 63 65 28 53 51 4c    db->xTrace(SQL
ae40: 49 54 45 5f 54 52 41 43 45 5f 52 4f 57 2c 20 64  ITE_TRACE_ROW, d
ae50: 62 2d 3e 70 54 72 61 63 65 41 72 67 2c 20 70 2c  b->pTraceArg, p,
ae60: 20 30 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52   0);.  }..  /* R
ae70: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 52 4f 57  eturn SQLITE_ROW
ae80: 0a 20 20 2a 2f 0a 20 20 70 2d 3e 70 63 20 3d 20  .  */.  p->pc = 
ae90: 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29  (int)(pOp - aOp)
aea0: 20 2b 20 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c   + 1;.  rc = SQL
aeb0: 49 54 45 5f 52 4f 57 3b 0a 20 20 67 6f 74 6f 20  ITE_ROW;.  goto 
aec0: 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a  vdbe_return;.}..
aed0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6e 63 61  /* Opcode: Conca
aee0: 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
aef0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
af00: 5d 3d 72 5b 50 32 5d 2b 72 5b 50 31 5d 0a 2a 2a  ]=r[P2]+r[P1].**
af10: 0a 2a 2a 20 41 64 64 20 74 68 65 20 74 65 78 74  .** Add the text
af20: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
af30: 6f 6e 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20  onto the end of 
af40: 74 68 65 20 74 65 78 74 20 69 6e 0a 2a 2a 20 72  the text in.** r
af50: 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 20 73  egister P2 and s
af60: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
af70: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
af80: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 74 68 65  ** If either the
af90: 20 50 31 20 6f 72 20 50 32 20 74 65 78 74 20 61   P1 or P2 text a
afa0: 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f  re NULL then sto
afb0: 72 65 20 4e 55 4c 4c 20 69 6e 20 50 33 2e 0a 2a  re NULL in P3..*
afc0: 2a 0a 2a 2a 20 20 20 50 33 20 3d 20 50 32 20 7c  *.**   P3 = P2 |
afd0: 7c 20 50 31 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73  | P1.**.** It is
afe0: 20 69 6c 6c 65 67 61 6c 20 66 6f 72 20 50 31 20   illegal for P1 
aff0: 61 6e 64 20 50 33 20 74 6f 20 62 65 20 74 68 65  and P3 to be the
b000: 20 73 61 6d 65 20 72 65 67 69 73 74 65 72 2e 20   same register. 
b010: 53 6f 6d 65 74 69 6d 65 73 2c 0a 2a 2a 20 69 66  Sometimes,.** if
b020: 20 50 33 20 69 73 20 74 68 65 20 73 61 6d 65 20   P3 is the same 
b030: 72 65 67 69 73 74 65 72 20 61 73 20 50 32 2c 20  register as P2, 
b040: 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  the implementati
b050: 6f 6e 20 69 73 20 61 62 6c 65 0a 2a 2a 20 74 6f  on is able.** to
b060: 20 61 76 6f 69 64 20 61 20 6d 65 6d 63 70 79 28   avoid a memcpy(
b070: 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f  )..*/.case OP_Co
b080: 6e 63 61 74 3a 20 7b 20 20 20 20 20 20 20 20 20  ncat: {         
b090: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
b0a0: 43 4f 4e 43 41 54 2c 20 69 6e 31 2c 20 69 6e 32  CONCAT, in1, in2
b0b0: 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20  , out3 */.  i64 
b0c0: 6e 42 79 74 65 3b 0a 0a 20 20 70 49 6e 31 20 3d  nByte;..  pIn1 =
b0d0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
b0e0: 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
b0f0: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74  pOp->p2];.  pOut
b100: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
b110: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
b120: 31 21 3d 70 4f 75 74 20 29 3b 0a 20 20 69 66 28  1!=pOut );.  if(
b130: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20   (pIn1->flags | 
b140: 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d  pIn2->flags) & M
b150: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73  EM_Null ){.    s
b160: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
b170: 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20  Null(pOut);.    
b180: 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 66 28  break;.  }.  if(
b190: 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31   ExpandBlob(pIn1
b1a0: 29 20 7c 7c 20 45 78 70 61 6e 64 42 6c 6f 62 28  ) || ExpandBlob(
b1b0: 70 49 6e 32 29 20 29 20 67 6f 74 6f 20 6e 6f 5f  pIn2) ) goto no_
b1c0: 6d 65 6d 3b 0a 20 20 53 74 72 69 6e 67 69 66 79  mem;.  Stringify
b1d0: 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29  (pIn1, encoding)
b1e0: 3b 0a 20 20 53 74 72 69 6e 67 69 66 79 28 70 49  ;.  Stringify(pI
b1f0: 6e 32 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  n2, encoding);. 
b200: 20 6e 42 79 74 65 20 3d 20 70 49 6e 31 2d 3e 6e   nByte = pIn1->n
b210: 20 2b 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 69 66   + pIn2->n;.  if
b220: 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d  ( nByte>db->aLim
b230: 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
b240: 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67  LENGTH] ){.    g
b250: 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d  oto too_big;.  }
b260: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64  .  if( sqlite3Vd
b270: 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20  beMemGrow(pOut, 
b280: 28 69 6e 74 29 6e 42 79 74 65 2b 32 2c 20 70 4f  (int)nByte+2, pO
b290: 75 74 3d 3d 70 49 6e 32 29 20 29 7b 0a 20 20 20  ut==pIn2) ){.   
b2a0: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
b2b0: 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  }.  MemSetTypeFl
b2c0: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 53 74 72  ag(pOut, MEM_Str
b2d0: 29 3b 0a 20 20 69 66 28 20 70 4f 75 74 21 3d 70  );.  if( pOut!=p
b2e0: 49 6e 32 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70  In2 ){.    memcp
b2f0: 79 28 70 4f 75 74 2d 3e 7a 2c 20 70 49 6e 32 2d  y(pOut->z, pIn2-
b300: 3e 7a 2c 20 70 49 6e 32 2d 3e 6e 29 3b 0a 20 20  >z, pIn2->n);.  
b310: 7d 0a 20 20 6d 65 6d 63 70 79 28 26 70 4f 75 74  }.  memcpy(&pOut
b320: 2d 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c 20 70 49  ->z[pIn2->n], pI
b330: 6e 31 2d 3e 7a 2c 20 70 49 6e 31 2d 3e 6e 29 3b  n1->z, pIn1->n);
b340: 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65  .  pOut->z[nByte
b350: 5d 3d 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e  ]=0;.  pOut->z[n
b360: 42 79 74 65 2b 31 5d 20 3d 20 30 3b 0a 20 20 70  Byte+1] = 0;.  p
b370: 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45  Out->flags |= ME
b380: 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e  M_Term;.  pOut->
b390: 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a  n = (int)nByte;.
b3a0: 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e    pOut->enc = en
b3b0: 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45  coding;.  UPDATE
b3c0: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
b3d0: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
b3e0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 20  ./* Opcode: Add 
b3f0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
b400: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d  Synopsis: r[P3]=
b410: 72 5b 50 31 5d 2b 72 5b 50 32 5d 0a 2a 2a 0a 2a  r[P1]+r[P2].**.*
b420: 2a 20 41 64 64 20 74 68 65 20 76 61 6c 75 65 20  * Add the value 
b430: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
b440: 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  o the value in r
b450: 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e  egister P2.** an
b460: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
b470: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
b480: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
b490: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
b4a0: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
b4b0: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
b4c0: 20 4d 75 6c 74 69 70 6c 79 20 50 31 20 50 32 20   Multiply P1 P2 
b4d0: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
b4e0: 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 2a  is: r[P3]=r[P1]*
b4f0: 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d  r[P2].**.**.** M
b500: 75 6c 74 69 70 6c 79 20 74 68 65 20 76 61 6c 75  ultiply the valu
b510: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
b520: 20 62 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e   by the value in
b530: 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 20   register P2.** 
b540: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
b550: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
b560: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
b570: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
b580: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
b590: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
b5a0: 65 3a 20 53 75 62 74 72 61 63 74 20 50 31 20 50  e: Subtract P1 P
b5b0: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
b5c0: 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32  psis: r[P3]=r[P2
b5d0: 5d 2d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 75  ]-r[P1].**.** Su
b5e0: 62 74 72 61 63 74 20 74 68 65 20 76 61 6c 75 65  btract the value
b5f0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
b600: 66 72 6f 6d 20 74 68 65 20 76 61 6c 75 65 20 69  from the value i
b610: 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a  n register P2.**
b620: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
b630: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
b640: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
b650: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
b660: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
b670: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
b680: 64 65 3a 20 44 69 76 69 64 65 20 50 31 20 50 32  de: Divide P1 P2
b690: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
b6a0: 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d  sis: r[P3]=r[P2]
b6b0: 2f 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 44 69 76  /r[P1].**.** Div
b6c0: 69 64 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  ide the value in
b6d0: 20 72 65 67 69 73 74 65 72 20 50 31 20 62 79 20   register P1 by 
b6e0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
b6f0: 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20  ister P2.** and 
b700: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
b710: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
b720: 28 50 33 3d 50 32 2f 50 31 29 2e 20 49 66 20 74  (P3=P2/P1). If t
b730: 68 65 20 76 61 6c 75 65 20 69 6e 20 0a 2a 2a 20  he value in .** 
b740: 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 7a  register P1 is z
b750: 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 72 65  ero, then the re
b760: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 20 49 66  sult is NULL. If
b770: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
b780: 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68 65 20 72   .** NULL, the r
b790: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
b7a0: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6d  /./* Opcode: Rem
b7b0: 61 69 6e 64 65 72 20 50 31 20 50 32 20 50 33 20  ainder P1 P2 P3 
b7c0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
b7d0: 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 25 72 5b 50   r[P3]=r[P2]%r[P
b7e0: 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 75 74 65  1].**.** Compute
b7f0: 20 74 68 65 20 72 65 6d 61 69 6e 64 65 72 20 61   the remainder a
b800: 66 74 65 72 20 69 6e 74 65 67 65 72 20 72 65 67  fter integer reg
b810: 69 73 74 65 72 20 50 32 20 69 73 20 64 69 76 69  ister P2 is divi
b820: 64 65 64 20 62 79 20 0a 2a 2a 20 72 65 67 69 73  ded by .** regis
b830: 74 65 72 20 50 31 20 61 6e 64 20 73 74 6f 72 65  ter P1 and store
b840: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
b850: 65 67 69 73 74 65 72 20 50 33 2e 20 0a 2a 2a 20  egister P3. .** 
b860: 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  If the value in 
b870: 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 7a  register P1 is z
b880: 65 72 6f 20 74 68 65 20 72 65 73 75 6c 74 20 69  ero the result i
b890: 73 20 4e 55 4c 4c 2e 0a 2a 2a 20 49 66 20 65 69  s NULL..** If ei
b8a0: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
b8b0: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
b8c0: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73   is NULL..*/.cas
b8d0: 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20  e OP_Add:       
b8e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
b8f0: 61 6d 65 20 61 73 20 54 4b 5f 50 4c 55 53 2c 20  ame as TK_PLUS, 
b900: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
b910: 2f 0a 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61  /.case OP_Subtra
b920: 63 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  ct:             
b930: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4d   /* same as TK_M
b940: 49 4e 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  INUS, in1, in2, 
b950: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
b960: 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 20 20 20  Multiply:       
b970: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
b980: 73 20 54 4b 5f 53 54 41 52 2c 20 69 6e 31 2c 20  s TK_STAR, in1, 
b990: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
b9a0: 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 20 20 20  e OP_Divide:    
b9b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
b9c0: 61 6d 65 20 61 73 20 54 4b 5f 53 4c 41 53 48 2c  ame as TK_SLASH,
b9d0: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
b9e0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 6d 61 69  */.case OP_Remai
b9f0: 6e 64 65 72 3a 20 7b 20 20 20 20 20 20 20 20 20  nder: {         
ba00: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
ba10: 52 45 4d 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  REM, in1, in2, o
ba20: 75 74 33 20 2a 2f 0a 20 20 63 68 61 72 20 62 49  ut3 */.  char bI
ba30: 6e 74 69 6e 74 3b 20 20 20 2f 2a 20 53 74 61 72  ntint;   /* Star
ba40: 74 65 64 20 6f 75 74 20 61 73 20 74 77 6f 20 69  ted out as two i
ba50: 6e 74 65 67 65 72 20 6f 70 65 72 61 6e 64 73 20  nteger operands 
ba60: 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 3b 20  */.  u16 flags; 
ba70: 20 20 20 20 20 2f 2a 20 43 6f 6d 62 69 6e 65 64       /* Combined
ba80: 20 4d 45 4d 5f 2a 20 66 6c 61 67 73 20 66 72 6f   MEM_* flags fro
ba90: 6d 20 62 6f 74 68 20 69 6e 70 75 74 73 20 2a 2f  m both inputs */
baa0: 0a 20 20 75 31 36 20 74 79 70 65 31 3b 20 20 20  .  u16 type1;   
bab0: 20 20 20 2f 2a 20 4e 75 6d 65 72 69 63 20 74 79     /* Numeric ty
bac0: 70 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61  pe of left opera
bad0: 6e 64 20 2a 2f 0a 20 20 75 31 36 20 74 79 70 65  nd */.  u16 type
bae0: 32 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 65 72  2;      /* Numer
baf0: 69 63 20 74 79 70 65 20 6f 66 20 72 69 67 68 74  ic type of right
bb00: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36   operand */.  i6
bb10: 34 20 69 41 3b 20 20 20 20 20 20 20 20 20 2f 2a  4 iA;         /*
bb20: 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f   Integer value o
bb30: 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a  f left operand *
bb40: 2f 0a 20 20 69 36 34 20 69 42 3b 20 20 20 20 20  /.  i64 iB;     
bb50: 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76      /* Integer v
bb60: 61 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70  alue of right op
bb70: 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c  erand */.  doubl
bb80: 65 20 72 41 3b 20 20 20 20 20 20 2f 2a 20 52 65  e rA;      /* Re
bb90: 61 6c 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74  al value of left
bba0: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f   operand */.  do
bbb0: 75 62 6c 65 20 72 42 3b 20 20 20 20 20 20 2f 2a  uble rB;      /*
bbc0: 20 52 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 72   Real value of r
bbd0: 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  ight operand */.
bbe0: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
bbf0: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 74 79 70 65  pOp->p1];.  type
bc00: 31 20 3d 20 6e 75 6d 65 72 69 63 54 79 70 65 28  1 = numericType(
bc10: 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20  pIn1);.  pIn2 = 
bc20: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
bc30: 20 20 74 79 70 65 32 20 3d 20 6e 75 6d 65 72 69    type2 = numeri
bc40: 63 54 79 70 65 28 70 49 6e 32 29 3b 0a 20 20 70  cType(pIn2);.  p
bc50: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
bc60: 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 20 3d 20  >p3];.  flags = 
bc70: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49  pIn1->flags | pI
bc80: 6e 32 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28  n2->flags;.  if(
bc90: 20 28 74 79 70 65 31 20 26 20 74 79 70 65 32 20   (type1 & type2 
bca0: 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 7b  & MEM_Int)!=0 ){
bcb0: 0a 20 20 20 20 69 41 20 3d 20 70 49 6e 31 2d 3e  .    iA = pIn1->
bcc0: 75 2e 69 3b 0a 20 20 20 20 69 42 20 3d 20 70 49  u.i;.    iB = pI
bcd0: 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 62 49 6e  n2->u.i;.    bIn
bce0: 74 69 6e 74 20 3d 20 31 3b 0a 20 20 20 20 73 77  tint = 1;.    sw
bcf0: 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  itch( pOp->opcod
bd00: 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20  e ){.      case 
bd10: 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 69 66  OP_Add:       if
bd20: 28 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36  ( sqlite3AddInt6
bd30: 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f  4(&iB,iA) ) goto
bd40: 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b   fp_math;  break
bd50: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
bd60: 53 75 62 74 72 61 63 74 3a 20 20 69 66 28 20 73  Subtract:  if( s
bd70: 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34 28 26  qlite3SubInt64(&
bd80: 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70  iB,iA) ) goto fp
bd90: 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20  _math;  break;. 
bda0: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 4d 75 6c       case OP_Mul
bdb0: 74 69 70 6c 79 3a 20 20 69 66 28 20 73 71 6c 69  tiply:  if( sqli
bdc0: 74 65 33 4d 75 6c 49 6e 74 36 34 28 26 69 42 2c  te3MulInt64(&iB,
bdd0: 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61  iA) ) goto fp_ma
bde0: 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20  th;  break;.    
bdf0: 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65    case OP_Divide
be00: 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20  : {.        if( 
be10: 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69  iA==0 ) goto ari
be20: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
be30: 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20  s_null;.        
be40: 69 66 28 20 69 41 3d 3d 2d 31 20 26 26 20 69 42  if( iA==-1 && iB
be50: 3d 3d 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36 34  ==SMALLEST_INT64
be60: 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b   ) goto fp_math;
be70: 0a 20 20 20 20 20 20 20 20 69 42 20 2f 3d 20 69  .        iB /= i
be80: 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  A;.        break
be90: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
bea0: 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20  default: {.     
beb0: 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67     if( iA==0 ) g
bec0: 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72  oto arithmetic_r
bed0: 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20  esult_is_null;. 
bee0: 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d         if( iA==-
bef0: 31 20 29 20 69 41 20 3d 20 31 3b 0a 20 20 20 20  1 ) iA = 1;.    
bf00: 20 20 20 20 69 42 20 25 3d 20 69 41 3b 0a 20 20      iB %= iA;.  
bf10: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
bf20: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70     }.    }.    p
bf30: 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 42 3b 0a 20  Out->u.i = iB;. 
bf40: 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
bf50: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
bf60: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 28 66  ;.  }else if( (f
bf70: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
bf80: 21 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  !=0 ){.    goto 
bf90: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
bfa0: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 7d 65 6c  t_is_null;.  }el
bfb0: 73 65 7b 0a 20 20 20 20 62 49 6e 74 69 6e 74 20  se{.    bIntint 
bfc0: 3d 20 30 3b 0a 66 70 5f 6d 61 74 68 3a 0a 20 20  = 0;.fp_math:.  
bfd0: 20 20 72 41 20 3d 20 73 71 6c 69 74 65 33 56 64    rA = sqlite3Vd
bfe0: 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 31  beRealValue(pIn1
bff0: 29 3b 0a 20 20 20 20 72 42 20 3d 20 73 71 6c 69  );.    rB = sqli
c000: 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65  te3VdbeRealValue
c010: 28 70 49 6e 32 29 3b 0a 20 20 20 20 73 77 69 74  (pIn2);.    swit
c020: 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  ch( pOp->opcode 
c030: 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  ){.      case OP
c040: 5f 41 64 64 3a 20 20 20 20 20 20 20 20 20 72 42  _Add:         rB
c050: 20 2b 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72   += rA;       br
c060: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
c070: 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20  OP_Subtract:    
c080: 72 42 20 2d 3d 20 72 41 3b 20 20 20 20 20 20 20  rB -= rA;       
c090: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
c0a0: 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20  e OP_Multiply:  
c0b0: 20 20 72 42 20 2a 3d 20 72 41 3b 20 20 20 20 20    rB *= rA;     
c0c0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
c0d0: 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b  ase OP_Divide: {
c0e0: 0a 20 20 20 20 20 20 20 20 2f 2a 20 28 64 6f 75  .        /* (dou
c0f0: 62 6c 65 29 30 20 49 6e 20 63 61 73 65 20 6f 66  ble)0 In case of
c100: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
c110: 41 54 49 4e 47 5f 50 4f 49 4e 54 2e 2e 2e 20 2a  ATING_POINT... *
c120: 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 41  /.        if( rA
c130: 3d 3d 28 64 6f 75 62 6c 65 29 30 20 29 20 67 6f  ==(double)0 ) go
c140: 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65  to arithmetic_re
c150: 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20  sult_is_null;.  
c160: 20 20 20 20 20 20 72 42 20 2f 3d 20 72 41 3b 0a        rB /= rA;.
c170: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
c180: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66       }.      def
c190: 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20  ault: {.        
c1a0: 69 41 20 3d 20 28 69 36 34 29 72 41 3b 0a 20 20  iA = (i64)rA;.  
c1b0: 20 20 20 20 20 20 69 42 20 3d 20 28 69 36 34 29        iB = (i64)
c1c0: 72 42 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  rB;.        if( 
c1d0: 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69  iA==0 ) goto ari
c1e0: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
c1f0: 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20  s_null;.        
c200: 69 66 28 20 69 41 3d 3d 2d 31 20 29 20 69 41 20  if( iA==-1 ) iA 
c210: 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 72 42 20  = 1;.        rB 
c220: 3d 20 28 64 6f 75 62 6c 65 29 28 69 42 20 25 20  = (double)(iB % 
c230: 69 41 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65  iA);.        bre
c240: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
c250: 7d 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  }.#ifdef SQLITE_
c260: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
c270: 49 4e 54 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e  INT.    pOut->u.
c280: 69 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53  i = rB;.    MemS
c290: 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
c2a0: 20 4d 45 4d 5f 49 6e 74 29 3b 0a 23 65 6c 73 65   MEM_Int);.#else
c2b0: 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
c2c0: 49 73 4e 61 4e 28 72 42 29 20 29 7b 0a 20 20 20  IsNaN(rB) ){.   
c2d0: 20 20 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74     goto arithmet
c2e0: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
c2f0: 6c 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75  l;.    }.    pOu
c300: 74 2d 3e 75 2e 72 20 3d 20 72 42 3b 0a 20 20 20  t->u.r = rB;.   
c310: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
c320: 70 4f 75 74 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b  pOut, MEM_Real);
c330: 0a 20 20 20 20 69 66 28 20 28 28 74 79 70 65 31  .    if( ((type1
c340: 7c 74 79 70 65 32 29 26 4d 45 4d 5f 52 65 61 6c  |type2)&MEM_Real
c350: 29 3d 3d 30 20 26 26 20 21 62 49 6e 74 69 6e 74  )==0 && !bIntint
c360: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
c370: 33 56 64 62 65 49 6e 74 65 67 65 72 41 66 66 69  3VdbeIntegerAffi
c380: 6e 69 74 79 28 70 4f 75 74 29 3b 0a 20 20 20 20  nity(pOut);.    
c390: 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62  }.#endif.  }.  b
c3a0: 72 65 61 6b 3b 0a 0a 61 72 69 74 68 6d 65 74 69  reak;..arithmeti
c3b0: 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c  c_result_is_null
c3c0: 3a 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  :.  sqlite3VdbeM
c3d0: 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b  emSetNull(pOut);
c3e0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
c3f0: 4f 70 63 6f 64 65 3a 20 43 6f 6c 6c 53 65 71 20  Opcode: CollSeq 
c400: 50 31 20 2a 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20  P1 * * P4.**.** 
c410: 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
c420: 74 6f 20 61 20 43 6f 6c 6c 53 65 71 20 6f 62 6a  to a CollSeq obj
c430: 65 63 74 2e 20 49 66 20 74 68 65 20 6e 65 78 74  ect. If the next
c440: 20 63 61 6c 6c 20 74 6f 20 61 20 75 73 65 72 20   call to a user 
c450: 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20 6f 72 20 61  function.** or a
c460: 67 67 72 65 67 61 74 65 20 63 61 6c 6c 73 20 73  ggregate calls s
c470: 71 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c  qlite3GetFuncCol
c480: 6c 53 65 71 28 29 2c 20 74 68 69 73 20 63 6f 6c  lSeq(), this col
c490: 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
c4a0: 77 69 6c 6c 0a 2a 2a 20 62 65 20 72 65 74 75 72  will.** be retur
c4b0: 6e 65 64 2e 20 54 68 69 73 20 69 73 20 75 73 65  ned. This is use
c4c0: 64 20 62 79 20 74 68 65 20 62 75 69 6c 74 2d 69  d by the built-i
c4d0: 6e 20 6d 69 6e 28 29 2c 20 6d 61 78 28 29 20 61  n min(), max() a
c4e0: 6e 64 20 6e 75 6c 6c 69 66 28 29 0a 2a 2a 20 66  nd nullif().** f
c4f0: 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20  unctions..**.** 
c500: 49 66 20 50 31 20 69 73 20 6e 6f 74 20 7a 65 72  If P1 is not zer
c510: 6f 2c 20 74 68 65 6e 20 69 74 20 69 73 20 61 20  o, then it is a 
c520: 72 65 67 69 73 74 65 72 20 74 68 61 74 20 61 20  register that a 
c530: 73 75 62 73 65 71 75 65 6e 74 20 6d 69 6e 28 29  subsequent min()
c540: 20 6f 72 0a 2a 2a 20 6d 61 78 28 29 20 61 67 67   or.** max() agg
c550: 72 65 67 61 74 65 20 77 69 6c 6c 20 73 65 74 20  regate will set 
c560: 74 6f 20 31 20 69 66 20 74 68 65 20 63 75 72 72  to 1 if the curr
c570: 65 6e 74 20 72 6f 77 20 69 73 20 6e 6f 74 20 74  ent row is not t
c580: 68 65 20 6d 69 6e 69 6d 75 6d 20 6f 72 0a 2a 2a  he minimum or.**
c590: 20 6d 61 78 69 6d 75 6d 2e 20 20 54 68 65 20 50   maximum.  The P
c5a0: 31 20 72 65 67 69 73 74 65 72 20 69 73 20 69 6e  1 register is in
c5b0: 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 30 20 62  itialized to 0 b
c5c0: 79 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  y this instructi
c5d0: 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e  on..**.** The in
c5e0: 74 65 72 66 61 63 65 20 75 73 65 64 20 62 79 20  terface used by 
c5f0: 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  the implementati
c600: 6f 6e 20 6f 66 20 74 68 65 20 61 66 6f 72 65 6d  on of the aforem
c610: 65 6e 74 69 6f 6e 65 64 20 66 75 6e 63 74 69 6f  entioned functio
c620: 6e 73 0a 2a 2a 20 74 6f 20 72 65 74 72 69 65 76  ns.** to retriev
c630: 65 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20  e the collation 
c640: 73 65 71 75 65 6e 63 65 20 73 65 74 20 62 79 20  sequence set by 
c650: 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6e  this opcode is n
c660: 6f 74 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20  ot available.** 
c670: 70 75 62 6c 69 63 6c 79 2e 20 20 4f 6e 6c 79 20  publicly.  Only 
c680: 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f  built-in functio
c690: 6e 73 20 68 61 76 65 20 61 63 63 65 73 73 20 74  ns have access t
c6a0: 6f 20 74 68 69 73 20 66 65 61 74 75 72 65 2e 0a  o this feature..
c6b0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 6c 53  */.case OP_CollS
c6c0: 65 71 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20  eq: {.  assert( 
c6d0: 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
c6e0: 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 69 66 28  COLLSEQ );.  if(
c6f0: 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20   pOp->p1 ){.    
c700: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
c710: 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70  tInt64(&aMem[pOp
c720: 2d 3e 70 31 5d 2c 20 30 29 3b 0a 20 20 7d 0a 20  ->p1], 0);.  }. 
c730: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
c740: 63 6f 64 65 3a 20 42 69 74 41 6e 64 20 50 31 20  code: BitAnd P1 
c750: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
c760: 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50  opsis: r[P3]=r[P
c770: 31 5d 26 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54  1]&r[P2].**.** T
c780: 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69 73 65  ake the bit-wise
c790: 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75   AND of the valu
c7a0: 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  es in register P
c7b0: 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20  1 and P2 and.** 
c7c0: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
c7d0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
c7e0: 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e  .** If either in
c7f0: 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65  put is NULL, the
c800: 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e   result is NULL.
c810: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42  .*/./* Opcode: B
c820: 69 74 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20  itOr P1 P2 P3 * 
c830: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
c840: 5b 50 33 5d 3d 72 5b 50 31 5d 7c 72 5b 50 32 5d  [P3]=r[P1]|r[P2]
c850: 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20  .**.** Take the 
c860: 62 69 74 2d 77 69 73 65 20 4f 52 20 6f 66 20 74  bit-wise OR of t
c870: 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
c880: 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20  ister P1 and P2 
c890: 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65  and.** store the
c8a0: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
c8b0: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
c8c0: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
c8d0: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
c8e0: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s NULL..*/./* Op
c8f0: 63 6f 64 65 3a 20 53 68 69 66 74 4c 65 66 74 20  code: ShiftLeft 
c900: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
c910: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d  Synopsis: r[P3]=
c920: 72 5b 50 32 5d 3c 3c 72 5b 50 31 5d 0a 2a 2a 0a  r[P2]<<r[P1].**.
c930: 2a 2a 20 53 68 69 66 74 20 74 68 65 20 69 6e 74  ** Shift the int
c940: 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72 65  eger value in re
c950: 67 69 73 74 65 72 20 50 32 20 74 6f 20 74 68 65  gister P2 to the
c960: 20 6c 65 66 74 20 62 79 20 74 68 65 0a 2a 2a 20   left by the.** 
c970: 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20 73  number of bits s
c980: 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65 20  pecified by the 
c990: 69 6e 74 65 67 65 72 20 69 6e 20 72 65 67 69 73  integer in regis
c9a0: 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65  ter P1..** Store
c9b0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
c9c0: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
c9d0: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
c9e0: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
c9f0: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
ca00: 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 52  * Opcode: ShiftR
ca10: 69 67 68 74 20 50 31 20 50 32 20 50 33 20 2a 20  ight P1 P2 P3 * 
ca20: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
ca30: 5b 50 33 5d 3d 72 5b 50 32 5d 3e 3e 72 5b 50 31  [P3]=r[P2]>>r[P1
ca40: 5d 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68  ].**.** Shift th
ca50: 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20  e integer value 
ca60: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 74  in register P2 t
ca70: 6f 20 74 68 65 20 72 69 67 68 74 20 62 79 20 74  o the right by t
ca80: 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20  he.** number of 
ca90: 62 69 74 73 20 73 70 65 63 69 66 69 65 64 20 62  bits specified b
caa0: 79 20 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e  y the integer in
cab0: 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
cac0: 20 53 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   Store the resul
cad0: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
cae0: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
caf0: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
cb00: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
cb10: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74  ..*/.case OP_Bit
cb20: 41 6e 64 3a 20 20 20 20 20 20 20 20 20 20 20 20  And:            
cb30: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
cb40: 54 4b 5f 42 49 54 41 4e 44 2c 20 69 6e 31 2c 20  TK_BITAND, in1, 
cb50: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
cb60: 65 20 4f 50 5f 42 69 74 4f 72 3a 20 20 20 20 20  e OP_BitOr:     
cb70: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
cb80: 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4f 52  same as TK_BITOR
cb90: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
cba0: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66   */.case OP_Shif
cbb0: 74 4c 65 66 74 3a 20 20 20 20 20 20 20 20 20 20  tLeft:          
cbc0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
cbd0: 4b 5f 4c 53 48 49 46 54 2c 20 69 6e 31 2c 20 69  K_LSHIFT, in1, i
cbe0: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
cbf0: 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74 3a 20   OP_ShiftRight: 
cc00: 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73  {           /* s
cc10: 61 6d 65 20 61 73 20 54 4b 5f 52 53 48 49 46 54  ame as TK_RSHIFT
cc20: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
cc30: 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b 0a 20 20   */.  i64 iA;.  
cc40: 75 36 34 20 75 41 3b 0a 20 20 69 36 34 20 69 42  u64 uA;.  i64 iB
cc50: 3b 0a 20 20 75 38 20 6f 70 3b 0a 0a 20 20 70 49  ;.  u8 op;..  pI
cc60: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
cc70: 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61  p1];.  pIn2 = &a
cc80: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
cc90: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
cca0: 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49  ->p3];.  if( (pI
ccb0: 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32  n1->flags | pIn2
ccc0: 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e  ->flags) & MEM_N
ccd0: 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ull ){.    sqlit
cce0: 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
ccf0: 28 70 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61  (pOut);.    brea
cd00: 6b 3b 0a 20 20 7d 0a 20 20 69 41 20 3d 20 73 71  k;.  }.  iA = sq
cd10: 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
cd20: 65 28 70 49 6e 32 29 3b 0a 20 20 69 42 20 3d 20  e(pIn2);.  iB = 
cd30: 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
cd40: 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 6f 70 20  lue(pIn1);.  op 
cd50: 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20  = pOp->opcode;. 
cd60: 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 41   if( op==OP_BitA
cd70: 6e 64 20 29 7b 0a 20 20 20 20 69 41 20 26 3d 20  nd ){.    iA &= 
cd80: 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  iB;.  }else if( 
cd90: 6f 70 3d 3d 4f 50 5f 42 69 74 4f 72 20 29 7b 0a  op==OP_BitOr ){.
cda0: 20 20 20 20 69 41 20 7c 3d 20 69 42 3b 0a 20 20      iA |= iB;.  
cdb0: 7d 65 6c 73 65 20 69 66 28 20 69 42 21 3d 30 20  }else if( iB!=0 
cdc0: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f  ){.    assert( o
cdd0: 70 3d 3d 4f 50 5f 53 68 69 66 74 52 69 67 68 74  p==OP_ShiftRight
cde0: 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74   || op==OP_Shift
cdf0: 4c 65 66 74 20 29 3b 0a 0a 20 20 20 20 2f 2a 20  Left );..    /* 
ce00: 49 66 20 73 68 69 66 74 69 6e 67 20 62 79 20 61  If shifting by a
ce10: 20 6e 65 67 61 74 69 76 65 20 61 6d 6f 75 6e 74   negative amount
ce20: 2c 20 73 68 69 66 74 20 69 6e 20 74 68 65 20 6f  , shift in the o
ce30: 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e 20 2a  ther direction *
ce40: 2f 0a 20 20 20 20 69 66 28 20 69 42 3c 30 20 29  /.    if( iB<0 )
ce50: 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
ce60: 4f 50 5f 53 68 69 66 74 52 69 67 68 74 3d 3d 4f  OP_ShiftRight==O
ce70: 50 5f 53 68 69 66 74 4c 65 66 74 2b 31 20 29 3b  P_ShiftLeft+1 );
ce80: 0a 20 20 20 20 20 20 6f 70 20 3d 20 32 2a 4f 50  .      op = 2*OP
ce90: 5f 53 68 69 66 74 4c 65 66 74 20 2b 20 31 20 2d  _ShiftLeft + 1 -
cea0: 20 6f 70 3b 0a 20 20 20 20 20 20 69 42 20 3d 20   op;.      iB = 
ceb0: 69 42 3e 28 2d 36 34 29 20 3f 20 2d 69 42 20 3a  iB>(-64) ? -iB :
cec0: 20 36 34 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20   64;.    }..    
ced0: 69 66 28 20 69 42 3e 3d 36 34 20 29 7b 0a 20 20  if( iB>=64 ){.  
cee0: 20 20 20 20 69 41 20 3d 20 28 69 41 3e 3d 30 20      iA = (iA>=0 
cef0: 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c  || op==OP_ShiftL
cf00: 65 66 74 29 20 3f 20 30 20 3a 20 2d 31 3b 0a 20  eft) ? 0 : -1;. 
cf10: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
cf20: 6d 65 6d 63 70 79 28 26 75 41 2c 20 26 69 41 2c  memcpy(&uA, &iA,
cf30: 20 73 69 7a 65 6f 66 28 75 41 29 29 3b 0a 20 20   sizeof(uA));.  
cf40: 20 20 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 53      if( op==OP_S
cf50: 68 69 66 74 4c 65 66 74 20 29 7b 0a 20 20 20 20  hiftLeft ){.    
cf60: 20 20 20 20 75 41 20 3c 3c 3d 20 69 42 3b 0a 20      uA <<= iB;. 
cf70: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
cf80: 20 20 20 20 75 41 20 3e 3e 3d 20 69 42 3b 0a 20      uA >>= iB;. 
cf90: 20 20 20 20 20 20 20 2f 2a 20 53 69 67 6e 2d 65         /* Sign-e
cfa0: 78 74 65 6e 64 20 6f 6e 20 61 20 72 69 67 68 74  xtend on a right
cfb0: 20 73 68 69 66 74 20 6f 66 20 61 20 6e 65 67 61   shift of a nega
cfc0: 74 69 76 65 20 6e 75 6d 62 65 72 20 2a 2f 0a 20  tive number */. 
cfd0: 20 20 20 20 20 20 20 69 66 28 20 69 41 3c 30 20         if( iA<0 
cfe0: 29 20 75 41 20 7c 3d 20 28 28 28 28 75 36 34 29  ) uA |= ((((u64)
cff0: 30 78 66 66 66 66 66 66 66 66 29 3c 3c 33 32 29  0xffffffff)<<32)
d000: 7c 30 78 66 66 66 66 66 66 66 66 29 20 3c 3c 20  |0xffffffff) << 
d010: 28 36 34 2d 69 42 29 3b 0a 20 20 20 20 20 20 7d  (64-iB);.      }
d020: 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28 26 69  .      memcpy(&i
d030: 41 2c 20 26 75 41 2c 20 73 69 7a 65 6f 66 28 69  A, &uA, sizeof(i
d040: 41 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  A));.    }.  }. 
d050: 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 41 3b   pOut->u.i = iA;
d060: 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
d070: 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
d080: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
d090: 20 4f 70 63 6f 64 65 3a 20 41 64 64 49 6d 6d 20   Opcode: AddImm 
d0a0: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
d0b0: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d  Synopsis: r[P1]=
d0c0: 72 5b 50 31 5d 2b 50 32 0a 2a 2a 20 0a 2a 2a 20  r[P1]+P2.** .** 
d0d0: 41 64 64 20 74 68 65 20 63 6f 6e 73 74 61 6e 74  Add the constant
d0e0: 20 50 32 20 74 6f 20 74 68 65 20 76 61 6c 75 65   P2 to the value
d0f0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
d100: 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 20 69  .** The result i
d110: 73 20 61 6c 77 61 79 73 20 61 6e 20 69 6e 74 65  s always an inte
d120: 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 66 6f  ger..**.** To fo
d130: 72 63 65 20 61 6e 79 20 72 65 67 69 73 74 65 72  rce any register
d140: 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65   to be an intege
d150: 72 2c 20 6a 75 73 74 20 61 64 64 20 30 2e 0a 2a  r, just add 0..*
d160: 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 49 6d 6d  /.case OP_AddImm
d170: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
d180: 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  * in1 */.  pIn1 
d190: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
d1a0: 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
d1b0: 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20  ange(p, pIn1);. 
d1c0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
d1d0: 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b  ntegerify(pIn1);
d1e0: 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20  .  pIn1->u.i += 
d1f0: 70 4f 70 2d 3e 70 32 3b 0a 20 20 62 72 65 61 6b  pOp->p2;.  break
d200: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
d210: 4d 75 73 74 42 65 49 6e 74 20 50 31 20 50 32 20  MustBeInt P1 P2 
d220: 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f 72  * * *.** .** For
d230: 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ce the value in 
d240: 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62  register P1 to b
d250: 65 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49  e an integer.  I
d260: 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69  f the value.** i
d270: 6e 20 50 31 20 69 73 20 6e 6f 74 20 61 6e 20 69  n P1 is not an i
d280: 6e 74 65 67 65 72 20 61 6e 64 20 63 61 6e 6e 6f  nteger and canno
d290: 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69  t be converted i
d2a0: 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a  nto an integer.*
d2b0: 2a 20 77 69 74 68 6f 75 74 20 64 61 74 61 20 6c  * without data l
d2c0: 6f 73 73 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69  oss, then jump i
d2d0: 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
d2e0: 2c 20 6f 72 20 69 66 20 50 32 3d 3d 30 0a 2a 2a  , or if P2==0.**
d2f0: 20 72 61 69 73 65 20 61 6e 20 53 51 4c 49 54 45   raise an SQLITE
d300: 5f 4d 49 53 4d 41 54 43 48 20 65 78 63 65 70 74  _MISMATCH except
d310: 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
d320: 4d 75 73 74 42 65 49 6e 74 3a 20 7b 20 20 20 20  MustBeInt: {    
d330: 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
d340: 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
d350: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
d360: 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
d370: 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d  ags & MEM_Int)==
d380: 30 20 29 7b 0a 20 20 20 20 61 70 70 6c 79 41 66  0 ){.    applyAf
d390: 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 53 51 4c  finity(pIn1, SQL
d3a0: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c  ITE_AFF_NUMERIC,
d3b0: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20   encoding);.    
d3c0: 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
d3d0: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d  (pIn1->flags&MEM
d3e0: 5f 49 6e 74 29 3d 3d 30 2c 20 32 29 3b 0a 20 20  _Int)==0, 2);.  
d3f0: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
d400: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30  gs & MEM_Int)==0
d410: 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 4f   ){.      if( pO
d420: 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20  p->p2==0 ){.    
d430: 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
d440: 4d 49 53 4d 41 54 43 48 3b 0a 20 20 20 20 20 20  MISMATCH;.      
d450: 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
d460: 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
d470: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
d480: 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
d490: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
d4a0: 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46   }.  MemSetTypeF
d4b0: 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 49 6e  lag(pIn1, MEM_In
d4c0: 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
d4d0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
d4e0: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
d4f0: 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  NT./* Opcode: Re
d500: 61 6c 41 66 66 69 6e 69 74 79 20 50 31 20 2a 20  alAffinity P1 * 
d510: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 72  * * *.**.** If r
d520: 65 67 69 73 74 65 72 20 50 31 20 68 6f 6c 64 73  egister P1 holds
d530: 20 61 6e 20 69 6e 74 65 67 65 72 20 63 6f 6e 76   an integer conv
d540: 65 72 74 20 69 74 20 74 6f 20 61 20 72 65 61 6c  ert it to a real
d550: 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 54 68   value..**.** Th
d560: 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65  is opcode is use
d570: 64 20 77 68 65 6e 20 65 78 74 72 61 63 74 69 6e  d when extractin
d580: 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72  g information fr
d590: 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 74 68 61 74  om a column that
d5a0: 0a 2a 2a 20 68 61 73 20 52 45 41 4c 20 61 66 66  .** has REAL aff
d5b0: 69 6e 69 74 79 2e 20 20 53 75 63 68 20 63 6f 6c  inity.  Such col
d5c0: 75 6d 6e 20 76 61 6c 75 65 73 20 6d 61 79 20 73  umn values may s
d5d0: 74 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 61  till be stored a
d5e0: 73 0a 2a 2a 20 69 6e 74 65 67 65 72 73 2c 20 66  s.** integers, f
d5f0: 6f 72 20 73 70 61 63 65 20 65 66 66 69 63 69 65  or space efficie
d600: 6e 63 79 2c 20 62 75 74 20 61 66 74 65 72 20 65  ncy, but after e
d610: 78 74 72 61 63 74 69 6f 6e 20 77 65 20 77 61 6e  xtraction we wan
d620: 74 20 74 68 65 6d 0a 2a 2a 20 74 6f 20 68 61 76  t them.** to hav
d630: 65 20 6f 6e 6c 79 20 61 20 72 65 61 6c 20 76 61  e only a real va
d640: 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  lue..*/.case OP_
d650: 52 65 61 6c 41 66 66 69 6e 69 74 79 3a 20 7b 20  RealAffinity: { 
d660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d670: 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e   /* in1 */.  pIn
d680: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
d690: 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  1];.  if( pIn1->
d6a0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
d6b0: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
d6c0: 62 65 4d 65 6d 52 65 61 6c 69 66 79 28 70 49 6e  beMemRealify(pIn
d6d0: 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  1);.  }.  break;
d6e0: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64  .}.#endif..#ifnd
d6f0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  ef SQLITE_OMIT_C
d700: 41 53 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  AST./* Opcode: C
d710: 61 73 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ast P1 P2 * * *.
d720: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 66 66  ** Synopsis: aff
d730: 69 6e 69 74 79 28 72 5b 50 31 5d 29 0a 2a 2a 0a  inity(r[P1]).**.
d740: 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c  ** Force the val
d750: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
d760: 31 20 74 6f 20 62 65 20 74 68 65 20 74 79 70 65  1 to be the type
d770: 20 64 65 66 69 6e 65 64 20 62 79 20 50 32 2e 0a   defined by P2..
d780: 2a 2a 20 0a 2a 2a 20 3c 75 6c 3e 0a 2a 2a 20 3c  ** .** <ul>.** <
d790: 6c 69 3e 20 50 32 3d 3d 27 41 27 20 26 72 61 72  li> P2=='A' &rar
d7a0: 72 3b 20 42 4c 4f 42 0a 2a 2a 20 3c 6c 69 3e 20  r; BLOB.** <li> 
d7b0: 50 32 3d 3d 27 42 27 20 26 72 61 72 72 3b 20 54  P2=='B' &rarr; T
d7c0: 45 58 54 0a 2a 2a 20 3c 6c 69 3e 20 50 32 3d 3d  EXT.** <li> P2==
d7d0: 27 43 27 20 26 72 61 72 72 3b 20 4e 55 4d 45 52  'C' &rarr; NUMER
d7e0: 49 43 0a 2a 2a 20 3c 6c 69 3e 20 50 32 3d 3d 27  IC.** <li> P2=='
d7f0: 44 27 20 26 72 61 72 72 3b 20 49 4e 54 45 47 45  D' &rarr; INTEGE
d800: 52 0a 2a 2a 20 3c 6c 69 3e 20 50 32 3d 3d 27 45  R.** <li> P2=='E
d810: 27 20 26 72 61 72 72 3b 20 52 45 41 4c 0a 2a 2a  ' &rarr; REAL.**
d820: 20 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a 20 41 20 4e   </ul>.**.** A N
d830: 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74  ULL value is not
d840: 20 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73   changed by this
d850: 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65   routine.  It re
d860: 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63  mains NULL..*/.c
d870: 61 73 65 20 4f 50 5f 43 61 73 74 3a 20 7b 20 20  ase OP_Cast: {  
d880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d890: 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65  /* in1 */.  asse
d8a0: 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 53 51 4c  rt( pOp->p2>=SQL
d8b0: 49 54 45 5f 41 46 46 5f 42 4c 4f 42 20 26 26 20  ITE_AFF_BLOB && 
d8c0: 70 4f 70 2d 3e 70 32 3c 3d 53 51 4c 49 54 45 5f  pOp->p2<=SQLITE_
d8d0: 41 46 46 5f 52 45 41 4c 20 29 3b 0a 20 20 74 65  AFF_REAL );.  te
d8e0: 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d  stcase( pOp->p2=
d8f0: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54  =SQLITE_AFF_TEXT
d900: 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
d910: 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
d920: 41 46 46 5f 42 4c 4f 42 20 29 3b 0a 20 20 74 65  AFF_BLOB );.  te
d930: 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d  stcase( pOp->p2=
d940: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45  =SQLITE_AFF_NUME
d950: 52 49 43 20 29 3b 0a 20 20 74 65 73 74 63 61 73  RIC );.  testcas
d960: 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49  e( pOp->p2==SQLI
d970: 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 29  TE_AFF_INTEGER )
d980: 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f  ;.  testcase( pO
d990: 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46  p->p2==SQLITE_AF
d9a0: 46 5f 52 45 41 4c 20 29 3b 0a 20 20 70 49 6e 31  F_REAL );.  pIn1
d9b0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
d9c0: 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  ];.  memAboutToC
d9d0: 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a  hange(p, pIn1);.
d9e0: 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f    rc = ExpandBlo
d9f0: 62 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74  b(pIn1);.  sqlit
da00: 65 33 56 64 62 65 4d 65 6d 43 61 73 74 28 70 49  e3VdbeMemCast(pI
da10: 6e 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 65 6e 63  n1, pOp->p2, enc
da20: 6f 64 69 6e 67 29 3b 0a 20 20 55 50 44 41 54 45  oding);.  UPDATE
da30: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49  _MAX_BLOBSIZE(pI
da40: 6e 31 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  n1);.  if( rc ) 
da50: 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
da60: 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b  o_error;.  break
da70: 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
da80: 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 20 2a  LITE_OMIT_CAST *
da90: 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 71  /../* Opcode: Eq
daa0: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
dab0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49 46 20  ** Synopsis: IF 
dac0: 72 5b 50 33 5d 3d 3d 72 5b 50 31 5d 0a 2a 2a 0a  r[P3]==r[P1].**.
dad0: 2a 2a 20 43 6f 6d 70 61 72 65 20 74 68 65 20 76  ** Compare the v
dae0: 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
daf0: 72 20 50 31 20 61 6e 64 20 50 33 2e 20 20 49 66  r P1 and P3.  If
db00: 20 72 65 67 28 50 33 29 3d 3d 72 65 67 28 50 31   reg(P3)==reg(P1
db10: 29 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74  ) then.** jump t
db20: 6f 20 61 64 64 72 65 73 73 20 50 32 2e 20 20 4f  o address P2.  O
db30: 72 20 69 66 20 74 68 65 20 53 51 4c 49 54 45 5f  r if the SQLITE_
db40: 53 54 4f 52 45 50 32 20 66 6c 61 67 20 69 73 20  STOREP2 flag is 
db50: 73 65 74 20 69 6e 20 50 35 2c 20 74 68 65 6e 0a  set in P5, then.
db60: 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  ** store the res
db70: 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f  ult of compariso
db80: 6e 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  n in register P2
db90: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ..**.** The SQLI
dba0: 54 45 5f 41 46 46 5f 4d 41 53 4b 20 70 6f 72 74  TE_AFF_MASK port
dbb0: 69 6f 6e 20 6f 66 20 50 35 20 6d 75 73 74 20 62  ion of P5 must b
dbc0: 65 20 61 6e 20 61 66 66 69 6e 69 74 79 20 63 68  e an affinity ch
dbd0: 61 72 61 63 74 65 72 20 2d 0a 2a 2a 20 53 51 4c  aracter -.** SQL
dbe0: 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 53 51  ITE_AFF_TEXT, SQ
dbf0: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
dc00: 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20  , and so forth. 
dc10: 41 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61  An attempt is ma
dc20: 64 65 20 0a 2a 2a 20 74 6f 20 63 6f 65 72 63 65  de .** to coerce
dc30: 20 62 6f 74 68 20 69 6e 70 75 74 73 20 61 63 63   both inputs acc
dc40: 6f 72 64 69 6e 67 20 74 6f 20 74 68 69 73 20 61  ording to this a
dc50: 66 66 69 6e 69 74 79 20 62 65 66 6f 72 65 20 74  ffinity before t
dc60: 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e  he.** comparison
dc70: 20 69 73 20 6d 61 64 65 2e 20 49 66 20 74 68 65   is made. If the
dc80: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b   SQLITE_AFF_MASK
dc90: 20 69 73 20 30 78 30 30 2c 20 74 68 65 6e 20 6e   is 0x00, then n
dca0: 75 6d 65 72 69 63 0a 2a 2a 20 61 66 66 69 6e 69  umeric.** affini
dcb0: 74 79 20 69 73 20 75 73 65 64 2e 20 4e 6f 74 65  ty is used. Note
dcc0: 20 74 68 61 74 20 74 68 65 20 61 66 66 69 6e 69   that the affini
dcd0: 74 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 61  ty conversions a
dce0: 72 65 20 73 74 6f 72 65 64 0a 2a 2a 20 62 61 63  re stored.** bac
dcf0: 6b 20 69 6e 74 6f 20 74 68 65 20 69 6e 70 75 74  k into the input
dd00: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e   registers P1 an
dd10: 64 20 50 33 2e 20 20 53 6f 20 74 68 69 73 20 6f  d P3.  So this o
dd20: 70 63 6f 64 65 20 63 61 6e 20 63 61 75 73 65 0a  pcode can cause.
dd30: 2a 2a 20 70 65 72 73 69 73 74 65 6e 74 20 63 68  ** persistent ch
dd40: 61 6e 67 65 73 20 74 6f 20 72 65 67 69 73 74 65  anges to registe
dd50: 72 73 20 50 31 20 61 6e 64 20 50 33 2e 0a 2a 2a  rs P1 and P3..**
dd60: 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79 20 63 6f 6e  .** Once any con
dd70: 76 65 72 73 69 6f 6e 73 20 68 61 76 65 20 74 61  versions have ta
dd80: 6b 65 6e 20 70 6c 61 63 65 2c 20 61 6e 64 20 6e  ken place, and n
dd90: 65 69 74 68 65 72 20 76 61 6c 75 65 20 69 73 20  either value is 
dda0: 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20 76 61  NULL, .** the va
ddb0: 6c 75 65 73 20 61 72 65 20 63 6f 6d 70 61 72 65  lues are compare
ddc0: 64 2e 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65  d. If both value
ddd0: 73 20 61 72 65 20 62 6c 6f 62 73 20 74 68 65 6e  s are blobs then
dde0: 20 6d 65 6d 63 6d 70 28 29 20 69 73 0a 2a 2a 20   memcmp() is.** 
ddf0: 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e  used to determin
de00: 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  e the results of
de10: 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e   the comparison.
de20: 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73    If both values
de30: 0a 2a 2a 20 61 72 65 20 74 65 78 74 2c 20 74 68  .** are text, th
de40: 65 6e 20 74 68 65 20 61 70 70 72 6f 70 72 69 61  en the appropria
de50: 74 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e  te collating fun
de60: 63 74 69 6f 6e 20 73 70 65 63 69 66 69 65 64 20  ction specified 
de70: 69 6e 0a 2a 2a 20 50 34 20 69 73 20 75 73 65 64  in.** P4 is used
de80: 20 74 6f 20 64 6f 20 74 68 65 20 63 6f 6d 70 61   to do the compa
de90: 72 69 73 6f 6e 2e 20 20 49 66 20 50 34 20 69 73  rison.  If P4 is
dea0: 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 20 74   not specified t
deb0: 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29 20  hen.** memcmp() 
dec0: 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 61  is used to compa
ded0: 72 65 20 74 65 78 74 20 73 74 72 69 6e 67 2e 20  re text string. 
dee0: 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20   If both values 
def0: 61 72 65 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c 20  are.** numeric, 
df00: 74 68 65 6e 20 61 20 6e 75 6d 65 72 69 63 20 63  then a numeric c
df10: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 75 73 65  omparison is use
df20: 64 2e 20 49 66 20 74 68 65 20 74 77 6f 20 76 61  d. If the two va
df30: 6c 75 65 73 0a 2a 2a 20 61 72 65 20 6f 66 20 64  lues.** are of d
df40: 69 66 66 65 72 65 6e 74 20 74 79 70 65 73 2c 20  ifferent types, 
df50: 74 68 65 6e 20 6e 75 6d 62 65 72 73 20 61 72 65  then numbers are
df60: 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73   considered less
df70: 20 74 68 61 6e 0a 2a 2a 20 73 74 72 69 6e 67 73   than.** strings
df80: 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65   and strings are
df90: 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73   considered less
dfa0: 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2a 0a   than blobs..**.
dfb0: 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e 55 4c  ** If SQLITE_NUL
dfc0: 4c 45 51 20 69 73 20 73 65 74 20 69 6e 20 50 35  LEQ is set in P5
dfd0: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
dfe0: 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69   of comparison i
dff0: 73 20 61 6c 77 61 79 73 20 65 69 74 68 65 72 0a  s always either.
e000: 2a 2a 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65  ** true or false
e010: 20 61 6e 64 20 69 73 20 6e 65 76 65 72 20 4e 55   and is never NU
e020: 4c 4c 2e 20 20 49 66 20 62 6f 74 68 20 6f 70 65  LL.  If both ope
e030: 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20 74  rands are NULL t
e040: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 0a 2a  hen the result.*
e050: 2a 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20  * of comparison 
e060: 69 73 20 74 72 75 65 2e 20 20 49 66 20 65 69 74  is true.  If eit
e070: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
e080: 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73  ULL then the res
e090: 75 6c 74 20 69 73 20 66 61 6c 73 65 2e 0a 2a 2a  ult is false..**
e0a0: 20 49 66 20 6e 65 69 74 68 65 72 20 6f 70 65 72   If neither oper
e0b0: 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65 20  and is NULL the 
e0c0: 72 65 73 75 6c 74 20 69 73 20 74 68 65 20 73 61  result is the sa
e0d0: 6d 65 20 61 73 20 69 74 20 77 6f 75 6c 64 20 62  me as it would b
e0e0: 65 20 69 66 0a 2a 2a 20 74 68 65 20 53 51 4c 49  e if.** the SQLI
e0f0: 54 45 5f 4e 55 4c 4c 45 51 20 66 6c 61 67 20 77  TE_NULLEQ flag w
e100: 65 72 65 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d  ere omitted from
e110: 20 50 35 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 62 6f   P5..**.** If bo
e120: 74 68 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50  th SQLITE_STOREP
e130: 32 20 61 6e 64 20 53 51 4c 49 54 45 5f 4b 45 45  2 and SQLITE_KEE
e140: 50 4e 55 4c 4c 20 66 6c 61 67 73 20 61 72 65 20  PNULL flags are 
e150: 73 65 74 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20  set then the.** 
e160: 63 6f 6e 74 65 6e 74 20 6f 66 20 72 5b 50 32 5d  content of r[P2]
e170: 20 69 73 20 6f 6e 6c 79 20 63 68 61 6e 67 65 64   is only changed
e180: 20 69 66 20 74 68 65 20 6e 65 77 20 76 61 6c 75   if the new valu
e190: 65 20 69 73 20 4e 55 4c 4c 20 6f 72 20 30 20 28  e is NULL or 0 (
e1a0: 66 61 6c 73 65 29 2e 0a 2a 2a 20 49 6e 20 6f 74  false)..** In ot
e1b0: 68 65 72 20 77 6f 72 64 73 2c 20 61 20 70 72 69  her words, a pri
e1c0: 6f 72 20 72 5b 50 32 5d 20 76 61 6c 75 65 20 77  or r[P2] value w
e1d0: 69 6c 6c 20 6e 6f 74 20 62 65 20 6f 76 65 72 77  ill not be overw
e1e0: 72 69 74 74 65 6e 20 62 79 20 31 20 28 74 72 75  ritten by 1 (tru
e1f0: 65 29 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  e)..*/./* Opcode
e200: 3a 20 4e 65 20 50 31 20 50 32 20 50 33 20 50 34  : Ne P1 P2 P3 P4
e210: 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
e220: 20 49 46 20 72 5b 50 33 5d 21 3d 72 5b 50 31 5d   IF r[P3]!=r[P1]
e230: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b  .**.** This work
e240: 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20  s just like the 
e250: 45 71 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74  Eq opcode except
e260: 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69   that the jump i
e270: 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68  s taken if.** th
e280: 65 20 6f 70 65 72 61 6e 64 73 20 69 6e 20 72 65  e operands in re
e290: 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50  gisters P1 and P
e2a0: 33 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 2e  3 are not equal.
e2b0: 20 20 53 65 65 20 74 68 65 20 45 71 20 6f 70 63    See the Eq opc
e2c0: 6f 64 65 20 66 6f 72 0a 2a 2a 20 61 64 64 69 74  ode for.** addit
e2d0: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
e2e0: 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 62 6f 74 68  n..**.** If both
e2f0: 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20   SQLITE_STOREP2 
e300: 61 6e 64 20 53 51 4c 49 54 45 5f 4b 45 45 50 4e  and SQLITE_KEEPN
e310: 55 4c 4c 20 66 6c 61 67 73 20 61 72 65 20 73 65  ULL flags are se
e320: 74 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 63 6f  t then the.** co
e330: 6e 74 65 6e 74 20 6f 66 20 72 5b 50 32 5d 20 69  ntent of r[P2] i
e340: 73 20 6f 6e 6c 79 20 63 68 61 6e 67 65 64 20 69  s only changed i
e350: 66 20 74 68 65 20 6e 65 77 20 76 61 6c 75 65 20  f the new value 
e360: 69 73 20 4e 55 4c 4c 20 6f 72 20 31 20 28 74 72  is NULL or 1 (tr
e370: 75 65 29 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72  ue)..** In other
e380: 20 77 6f 72 64 73 2c 20 61 20 70 72 69 6f 72 20   words, a prior 
e390: 72 5b 50 32 5d 20 76 61 6c 75 65 20 77 69 6c 6c  r[P2] value will
e3a0: 20 6e 6f 74 20 62 65 20 6f 76 65 72 77 72 69 74   not be overwrit
e3b0: 74 65 6e 20 62 79 20 30 20 28 66 61 6c 73 65 29  ten by 0 (false)
e3c0: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
e3d0: 4c 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50  Lt P1 P2 P3 P4 P
e3e0: 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49  5.** Synopsis: I
e3f0: 46 20 72 5b 50 33 5d 3c 72 5b 50 31 5d 0a 2a 2a  F r[P3]<r[P1].**
e400: 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 68 65 20  .** Compare the 
e410: 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74  values in regist
e420: 65 72 20 50 31 20 61 6e 64 20 50 33 2e 20 20 49  er P1 and P3.  I
e430: 66 20 72 65 67 28 50 33 29 3c 72 65 67 28 50 31  f reg(P3)<reg(P1
e440: 29 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74  ) then.** jump t
e450: 6f 20 61 64 64 72 65 73 73 20 50 32 2e 20 20 4f  o address P2.  O
e460: 72 20 69 66 20 74 68 65 20 53 51 4c 49 54 45 5f  r if the SQLITE_
e470: 53 54 4f 52 45 50 32 20 66 6c 61 67 20 69 73 20  STOREP2 flag is 
e480: 73 65 74 20 69 6e 20 50 35 20 73 74 6f 72 65 0a  set in P5 store.
e490: 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  ** the result of
e4a0: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 28 30 20 6f   comparison (0 o
e4b0: 72 20 31 20 6f 72 20 4e 55 4c 4c 29 20 69 6e 74  r 1 or NULL) int
e4c0: 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
e4d0: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49  *.** If the SQLI
e4e0: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69  TE_JUMPIFNULL bi
e4f0: 74 20 6f 66 20 50 35 20 69 73 20 73 65 74 20 61  t of P5 is set a
e500: 6e 64 20 65 69 74 68 65 72 20 72 65 67 28 50 31  nd either reg(P1
e510: 29 20 6f 72 0a 2a 2a 20 72 65 67 28 50 33 29 20  ) or.** reg(P3) 
e520: 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65  is NULL then the
e530: 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 2e 20   take the jump. 
e540: 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a   If the SQLITE_J
e550: 55 4d 50 49 46 4e 55 4c 4c 20 0a 2a 2a 20 62 69  UMPIFNULL .** bi
e560: 74 20 69 73 20 63 6c 65 61 72 20 74 68 65 6e 20  t is clear then 
e570: 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 66 20  fall through if 
e580: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
e590: 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68  s NULL..**.** Th
e5a0: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53  e SQLITE_AFF_MAS
e5b0: 4b 20 70 6f 72 74 69 6f 6e 20 6f 66 20 50 35 20  K portion of P5 
e5c0: 6d 75 73 74 20 62 65 20 61 6e 20 61 66 66 69 6e  must be an affin
e5d0: 69 74 79 20 63 68 61 72 61 63 74 65 72 20 2d 0a  ity character -.
e5e0: 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  ** SQLITE_AFF_TE
e5f0: 58 54 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 49  XT, SQLITE_AFF_I
e600: 4e 54 45 47 45 52 2c 20 61 6e 64 20 73 6f 20 66  NTEGER, and so f
e610: 6f 72 74 68 2e 20 41 6e 20 61 74 74 65 6d 70 74  orth. An attempt
e620: 20 69 73 20 6d 61 64 65 20 0a 2a 2a 20 74 6f 20   is made .** to 
e630: 63 6f 65 72 63 65 20 62 6f 74 68 20 69 6e 70 75  coerce both inpu
e640: 74 73 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20  ts according to 
e650: 74 68 69 73 20 61 66 66 69 6e 69 74 79 20 62 65  this affinity be
e660: 66 6f 72 65 20 74 68 65 0a 2a 2a 20 63 6f 6d 70  fore the.** comp
e670: 61 72 69 73 6f 6e 20 69 73 20 6d 61 64 65 2e 20  arison is made. 
e680: 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46  If the SQLITE_AF
e690: 46 5f 4d 41 53 4b 20 69 73 20 30 78 30 30 2c 20  F_MASK is 0x00, 
e6a0: 74 68 65 6e 20 6e 75 6d 65 72 69 63 0a 2a 2a 20  then numeric.** 
e6b0: 61 66 66 69 6e 69 74 79 20 69 73 20 75 73 65 64  affinity is used
e6c0: 2e 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20  . Note that the 
e6d0: 61 66 66 69 6e 69 74 79 20 63 6f 6e 76 65 72 73  affinity convers
e6e0: 69 6f 6e 73 20 61 72 65 20 73 74 6f 72 65 64 0a  ions are stored.
e6f0: 2a 2a 20 62 61 63 6b 20 69 6e 74 6f 20 74 68 65  ** back into the
e700: 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73   input registers
e710: 20 50 31 20 61 6e 64 20 50 33 2e 20 20 53 6f 20   P1 and P3.  So 
e720: 74 68 69 73 20 6f 70 63 6f 64 65 20 63 61 6e 20  this opcode can 
e730: 63 61 75 73 65 0a 2a 2a 20 70 65 72 73 69 73 74  cause.** persist
e740: 65 6e 74 20 63 68 61 6e 67 65 73 20 74 6f 20 72  ent changes to r
e750: 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20  egisters P1 and 
e760: 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61  P3..**.** Once a
e770: 6e 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 68  ny conversions h
e780: 61 76 65 20 74 61 6b 65 6e 20 70 6c 61 63 65 2c  ave taken place,
e790: 20 61 6e 64 20 6e 65 69 74 68 65 72 20 76 61 6c   and neither val
e7a0: 75 65 20 69 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20  ue is NULL, .** 
e7b0: 74 68 65 20 76 61 6c 75 65 73 20 61 72 65 20 63  the values are c
e7c0: 6f 6d 70 61 72 65 64 2e 20 49 66 20 62 6f 74 68  ompared. If both
e7d0: 20 76 61 6c 75 65 73 20 61 72 65 20 62 6c 6f 62   values are blob
e7e0: 73 20 74 68 65 6e 20 6d 65 6d 63 6d 70 28 29 20  s then memcmp() 
e7f0: 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20 64 65  is.** used to de
e800: 74 65 72 6d 69 6e 65 20 74 68 65 20 72 65 73 75  termine the resu
e810: 6c 74 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 61  lts of the compa
e820: 72 69 73 6f 6e 2e 20 20 49 66 20 62 6f 74 68 20  rison.  If both 
e830: 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 74 65  values.** are te
e840: 78 74 2c 20 74 68 65 6e 20 74 68 65 20 61 70 70  xt, then the app
e850: 72 6f 70 72 69 61 74 65 20 63 6f 6c 6c 61 74 69  ropriate collati
e860: 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73 70 65 63  ng function spec
e870: 69 66 69 65 64 20 69 6e 0a 2a 2a 20 50 34 20 69  ified in.** P4 i
e880: 73 20 20 75 73 65 64 20 74 6f 20 64 6f 20 74 68  s  used to do th
e890: 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49  e comparison.  I
e8a0: 66 20 50 34 20 69 73 20 6e 6f 74 20 73 70 65 63  f P4 is not spec
e8b0: 69 66 69 65 64 20 74 68 65 6e 0a 2a 2a 20 6d 65  ified then.** me
e8c0: 6d 63 6d 70 28 29 20 69 73 20 75 73 65 64 20 74  mcmp() is used t
e8d0: 6f 20 63 6f 6d 70 61 72 65 20 74 65 78 74 20 73  o compare text s
e8e0: 74 72 69 6e 67 2e 20 20 49 66 20 62 6f 74 68 20  tring.  If both 
e8f0: 76 61 6c 75 65 73 20 61 72 65 0a 2a 2a 20 6e 75  values are.** nu
e900: 6d 65 72 69 63 2c 20 74 68 65 6e 20 61 20 6e 75  meric, then a nu
e910: 6d 65 72 69 63 20 63 6f 6d 70 61 72 69 73 6f 6e  meric comparison
e920: 20 69 73 20 75 73 65 64 2e 20 49 66 20 74 68 65   is used. If the
e930: 20 74 77 6f 20 76 61 6c 75 65 73 0a 2a 2a 20 61   two values.** a
e940: 72 65 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20  re of different 
e950: 74 79 70 65 73 2c 20 74 68 65 6e 20 6e 75 6d 62  types, then numb
e960: 65 72 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72  ers are consider
e970: 65 64 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20  ed less than.** 
e980: 73 74 72 69 6e 67 73 20 61 6e 64 20 73 74 72 69  strings and stri
e990: 6e 67 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72  ngs are consider
e9a0: 65 64 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f  ed less than blo
e9b0: 62 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  bs..*/./* Opcode
e9c0: 3a 20 4c 65 20 50 31 20 50 32 20 50 33 20 50 34  : Le P1 P2 P3 P4
e9d0: 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
e9e0: 20 49 46 20 72 5b 50 33 5d 3c 3d 72 5b 50 31 5d   IF r[P3]<=r[P1]
e9f0: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b  .**.** This work
ea00: 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20  s just like the 
ea10: 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74  Lt opcode except
ea20: 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69   that the jump i
ea30: 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68  s taken if.** th
ea40: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67  e content of reg
ea50: 69 73 74 65 72 20 50 33 20 69 73 20 6c 65 73 73  ister P3 is less
ea60: 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
ea70: 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  o the content of
ea80: 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e  .** register P1.
ea90: 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63    See the Lt opc
eaa0: 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ode for addition
eab0: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
eac0: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 74  */./* Opcode: Gt
ead0: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
eae0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49 46 20  ** Synopsis: IF 
eaf0: 72 5b 50 33 5d 3e 72 5b 50 31 5d 0a 2a 2a 0a 2a  r[P3]>r[P1].**.*
eb00: 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73  * This works jus
eb10: 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70  t like the Lt op
eb20: 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74  code except that
eb30: 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
eb40: 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e  en if.** the con
eb50: 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
eb60: 20 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74   P3 is greater t
eb70: 68 61 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  han the content 
eb80: 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  of.** register P
eb90: 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f  1.  See the Lt o
eba0: 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69  pcode for additi
ebb0: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
ebc0: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
ebd0: 47 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50  Ge P1 P2 P3 P4 P
ebe0: 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49  5.** Synopsis: I
ebf0: 46 20 72 5b 50 33 5d 3e 3d 72 5b 50 31 5d 0a 2a  F r[P3]>=r[P1].*
ec00: 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20  *.** This works 
ec10: 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74  just like the Lt
ec20: 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74   opcode except t
ec30: 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20  hat the jump is 
ec40: 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20  taken if.** the 
ec50: 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
ec60: 74 65 72 20 50 33 20 69 73 20 67 72 65 61 74 65  ter P3 is greate
ec70: 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  r than or equal 
ec80: 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  to the content o
ec90: 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31  f.** register P1
eca0: 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70  .  See the Lt op
ecb0: 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f  code for additio
ecc0: 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
ecd0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 71 3a 20  .*/.case OP_Eq: 
ece0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ecf0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 45 51 2c 20   same as TK_EQ, 
ed00: 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
ed10: 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20  /.case OP_Ne:   
ed20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
ed30: 61 6d 65 20 61 73 20 54 4b 5f 4e 45 2c 20 6a 75  ame as TK_NE, ju
ed40: 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
ed50: 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20 20  case OP_Lt:     
ed60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
ed70: 65 20 61 73 20 54 4b 5f 4c 54 2c 20 6a 75 6d 70  e as TK_LT, jump
ed80: 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61  , in1, in3 */.ca
ed90: 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20 20 20 20  se OP_Le:       
eda0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
edb0: 61 73 20 54 4b 5f 4c 45 2c 20 6a 75 6d 70 2c 20  as TK_LE, jump, 
edc0: 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  in1, in3 */.case
edd0: 20 4f 50 5f 47 74 3a 20 20 20 20 20 20 20 20 20   OP_Gt:         
ede0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
edf0: 20 54 4b 5f 47 54 2c 20 6a 75 6d 70 2c 20 69 6e   TK_GT, jump, in
ee00: 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  1, in3 */.case O
ee10: 50 5f 47 65 3a 20 7b 20 20 20 20 20 20 20 20 20  P_Ge: {         
ee20: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
ee30: 4b 5f 47 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c  K_GE, jump, in1,
ee40: 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72 65   in3 */.  int re
ee50: 73 2c 20 72 65 73 32 3b 20 20 20 20 20 20 2f 2a  s, res2;      /*
ee60: 20 52 65 73 75 6c 74 20 6f 66 20 74 68 65 20 63   Result of the c
ee70: 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20 70 49 6e  omparison of pIn
ee80: 31 20 61 67 61 69 6e 73 74 20 70 49 6e 33 20 2a  1 against pIn3 *
ee90: 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74  /.  char affinit
eea0: 79 3b 20 20 20 20 20 20 2f 2a 20 41 66 66 69 6e  y;      /* Affin
eeb0: 69 74 79 20 74 6f 20 75 73 65 20 66 6f 72 20 63  ity to use for c
eec0: 6f 6d 70 61 72 69 73 6f 6e 20 2a 2f 0a 20 20 75  omparison */.  u
eed0: 31 36 20 66 6c 61 67 73 31 3b 20 20 20 20 20 20  16 flags1;      
eee0: 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 69 6e     /* Copy of in
eef0: 69 74 69 61 6c 20 76 61 6c 75 65 20 6f 66 20 70  itial value of p
ef00: 49 6e 31 2d 3e 66 6c 61 67 73 20 2a 2f 0a 20 20  In1->flags */.  
ef10: 75 31 36 20 66 6c 61 67 73 33 3b 20 20 20 20 20  u16 flags3;     
ef20: 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 69      /* Copy of i
ef30: 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f 66 20  nitial value of 
ef40: 70 49 6e 33 2d 3e 66 6c 61 67 73 20 2a 2f 0a 0a  pIn3->flags */..
ef50: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
ef60: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20  Op->p1];.  pIn3 
ef70: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
ef80: 3b 0a 20 20 66 6c 61 67 73 31 20 3d 20 70 49 6e  ;.  flags1 = pIn
ef90: 31 2d 3e 66 6c 61 67 73 3b 0a 20 20 66 6c 61 67  1->flags;.  flag
efa0: 73 33 20 3d 20 70 49 6e 33 2d 3e 66 6c 61 67 73  s3 = pIn3->flags
efb0: 3b 0a 20 20 69 66 28 20 28 66 6c 61 67 73 31 20  ;.  if( (flags1 
efc0: 7c 20 66 6c 61 67 73 33 29 26 4d 45 4d 5f 4e 75  | flags3)&MEM_Nu
efd0: 6c 6c 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 65  ll ){.    /* One
efe0: 20 6f 72 20 62 6f 74 68 20 6f 70 65 72 61 6e 64   or both operand
eff0: 73 20 61 72 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20  s are NULL */.  
f000: 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
f010: 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 29 7b  SQLITE_NULLEQ ){
f020: 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 53 51 4c  .      /* If SQL
f030: 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65  ITE_NULLEQ is se
f040: 74 20 28 77 68 69 63 68 20 77 69 6c 6c 20 6f 6e  t (which will on
f050: 6c 79 20 68 61 70 70 65 6e 20 69 66 20 74 68 65  ly happen if the
f060: 20 6f 70 65 72 61 74 6f 72 20 69 73 0a 20 20 20   operator is.   
f070: 20 20 20 2a 2a 20 4f 50 5f 45 71 20 6f 72 20 4f     ** OP_Eq or O
f080: 50 5f 4e 65 29 20 74 68 65 6e 20 74 61 6b 65 20  P_Ne) then take 
f090: 74 68 65 20 6a 75 6d 70 20 6f 72 20 6e 6f 74 20  the jump or not 
f0a0: 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65  depending on whe
f0b0: 74 68 65 72 0a 20 20 20 20 20 20 2a 2a 20 6f 72  ther.      ** or
f0c0: 20 6e 6f 74 20 62 6f 74 68 20 6f 70 65 72 61 6e   not both operan
f0d0: 64 73 20 61 72 65 20 6e 75 6c 6c 2e 0a 20 20 20  ds are null..   
f0e0: 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65     */.      asse
f0f0: 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
f100: 3d 4f 50 5f 45 71 20 7c 7c 20 70 4f 70 2d 3e 6f  =OP_Eq || pOp->o
f110: 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a  pcode==OP_Ne );.
f120: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66        assert( (f
f130: 6c 61 67 73 31 20 26 20 4d 45 4d 5f 43 6c 65 61  lags1 & MEM_Clea
f140: 72 65 64 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20  red)==0 );.     
f150: 20 61 73 73 65 72 74 28 20 28 70 4f 70 2d 3e 70   assert( (pOp->p
f160: 35 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  5 & SQLITE_JUMPI
f170: 46 4e 55 4c 4c 29 3d 3d 30 20 29 3b 0a 20 20 20  FNULL)==0 );.   
f180: 20 20 20 69 66 28 20 28 66 6c 61 67 73 31 26 66     if( (flags1&f
f190: 6c 61 67 73 33 26 4d 45 4d 5f 4e 75 6c 6c 29 21  lags3&MEM_Null)!
f1a0: 3d 30 0a 20 20 20 20 20 20 20 26 26 20 28 66 6c  =0.       && (fl
f1b0: 61 67 73 33 26 4d 45 4d 5f 43 6c 65 61 72 65 64  ags3&MEM_Cleared
f1c0: 29 3d 3d 30 0a 20 20 20 20 20 20 29 7b 0a 20 20  )==0.      ){.  
f1d0: 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b 20 20        res = 0;  
f1e0: 2f 2a 20 4f 70 65 72 61 6e 64 73 20 61 72 65 20  /* Operands are 
f1f0: 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20 7d  equal */.      }
f200: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 72 65  else{.        re
f210: 73 20 3d 20 31 3b 20 20 2f 2a 20 4f 70 65 72 61  s = 1;  /* Opera
f220: 6e 64 73 20 61 72 65 20 6e 6f 74 20 65 71 75 61  nds are not equa
f230: 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 0a 20 20 20  l */.      }.   
f240: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a   }else{.      /*
f250: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69   SQLITE_NULLEQ i
f260: 73 20 63 6c 65 61 72 20 61 6e 64 20 61 74 20 6c  s clear and at l
f270: 65 61 73 74 20 6f 6e 65 20 6f 70 65 72 61 6e 64  east one operand
f280: 20 69 73 20 4e 55 4c 4c 2c 0a 20 20 20 20 20 20   is NULL,.      
f290: 2a 2a 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  ** then the resu
f2a0: 6c 74 20 69 73 20 61 6c 77 61 79 73 20 4e 55 4c  lt is always NUL
f2b0: 4c 2e 0a 20 20 20 20 20 20 2a 2a 20 54 68 65 20  L..      ** The 
f2c0: 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
f2d0: 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50   the SQLITE_JUMP
f2e0: 49 46 4e 55 4c 4c 20 62 69 74 20 69 73 20 73 65  IFNULL bit is se
f2f0: 74 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  t..      */.    
f300: 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
f310: 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29  SQLITE_STOREP2 )
f320: 7b 0a 20 20 20 20 20 20 20 20 70 4f 75 74 20 3d  {.        pOut =
f330: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
f340: 0a 20 20 20 20 20 20 20 20 69 43 6f 6d 70 61 72  .        iCompar
f350: 65 20 3d 20 31 3b 20 20 20 20 2f 2a 20 4f 70 65  e = 1;    /* Ope
f360: 72 61 6e 64 73 20 61 72 65 20 6e 6f 74 20 65 71  rands are not eq
f370: 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20 20 20 6d  ual */.        m
f380: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
f390: 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 20 20  p, pOut);.      
f3a0: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
f3b0: 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29  (pOut, MEM_Null)
f3c0: 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49 53 54  ;.        REGIST
f3d0: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
f3e0: 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 7d  , pOut);.      }
f3f0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 56 64  else{.        Vd
f400: 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 32 2c  beBranchTaken(2,
f410: 33 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  3);.        if( 
f420: 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45  pOp->p5 & SQLITE
f430: 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 29 7b 0a 20  _JUMPIFNULL ){. 
f440: 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6a 75           goto ju
f450: 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 20 20  mp_to_p2;.      
f460: 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
f470: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20    break;.    }. 
f480: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 4e   }else{.    /* N
f490: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
f4a0: 73 20 4e 55 4c 4c 2e 20 20 44 6f 20 61 20 63 6f  s NULL.  Do a co
f4b0: 6d 70 61 72 69 73 6f 6e 2e 20 2a 2f 0a 20 20 20  mparison. */.   
f4c0: 20 61 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d   affinity = pOp-
f4d0: 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 41 46 46  >p5 & SQLITE_AFF
f4e0: 5f 4d 41 53 4b 3b 0a 20 20 20 20 69 66 28 20 61  _MASK;.    if( a
f4f0: 66 66 69 6e 69 74 79 3e 3d 53 51 4c 49 54 45 5f  ffinity>=SQLITE_
f500: 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 7b 0a 20  AFF_NUMERIC ){. 
f510: 20 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 31       if( (flags1
f520: 20 7c 20 66 6c 61 67 73 33 29 26 4d 45 4d 5f 53   | flags3)&MEM_S
f530: 74 72 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66  tr ){.        if
f540: 28 20 28 66 6c 61 67 73 31 20 26 20 28 4d 45 4d  ( (flags1 & (MEM
f550: 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45  _Int|MEM_Real|ME
f560: 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72  M_Str))==MEM_Str
f570: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 61 70   ){.          ap
f580: 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  plyNumericAffini
f590: 74 79 28 70 49 6e 31 2c 30 29 3b 0a 20 20 20 20  ty(pIn1,0);.    
f5a0: 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
f5b0: 66 6c 61 67 73 33 21 3d 70 49 6e 33 2d 3e 66 6c  flags3!=pIn3->fl
f5c0: 61 67 73 20 29 3b 20 2f 2a 20 50 6f 73 73 69 62  ags ); /* Possib
f5d0: 6c 65 20 69 66 20 70 49 6e 31 3d 3d 70 49 6e 33  le if pIn1==pIn3
f5e0: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 66 6c   */.          fl
f5f0: 61 67 73 33 20 3d 20 70 49 6e 33 2d 3e 66 6c 61  ags3 = pIn3->fla
f600: 67 73 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  gs;.        }.  
f610: 20 20 20 20 20 20 69 66 28 20 28 66 6c 61 67 73        if( (flags
f620: 33 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d  3 & (MEM_Int|MEM
f630: 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d  _Real|MEM_Str))=
f640: 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20  =MEM_Str ){.    
f650: 20 20 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72        applyNumer
f660: 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e 33 2c  icAffinity(pIn3,
f670: 30 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  0);.        }.  
f680: 20 20 20 20 7d 0a 20 20 20 20 20 20 2f 2a 20 48      }.      /* H
f690: 61 6e 64 6c 65 20 74 68 65 20 63 6f 6d 6d 6f 6e  andle the common
f6a0: 20 63 61 73 65 20 6f 66 20 69 6e 74 65 67 65 72   case of integer
f6b0: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 68 65 72 65   comparison here
f6c0: 2c 20 61 73 20 61 6e 0a 20 20 20 20 20 20 2a 2a  , as an.      **
f6d0: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2c 20 74   optimization, t
f6e0: 6f 20 61 76 6f 69 64 20 61 20 63 61 6c 6c 20 74  o avoid a call t
f6f0: 6f 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70  o sqlite3MemComp
f700: 61 72 65 28 29 20 2a 2f 0a 20 20 20 20 20 20 69  are() */.      i
f710: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
f720: 26 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20  & pIn3->flags & 
f730: 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 7b 0a 20  MEM_Int)!=0 ){. 
f740: 20 20 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d         if( pIn3-
f750: 3e 75 2e 69 20 3e 20 70 49 6e 31 2d 3e 75 2e 69  >u.i > pIn1->u.i
f760: 20 29 7b 20 72 65 73 20 3d 20 2b 31 3b 20 67 6f   ){ res = +1; go
f770: 74 6f 20 63 6f 6d 70 61 72 65 5f 6f 70 3b 20 7d  to compare_op; }
f780: 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 49 6e  .        if( pIn
f790: 33 2d 3e 75 2e 69 20 3c 20 70 49 6e 31 2d 3e 75  3->u.i < pIn1->u
f7a0: 2e 69 20 29 7b 20 72 65 73 20 3d 20 2d 31 3b 20  .i ){ res = -1; 
f7b0: 67 6f 74 6f 20 63 6f 6d 70 61 72 65 5f 6f 70 3b  goto compare_op;
f7c0: 20 7d 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d   }.        res =
f7d0: 20 30 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   0;.        goto
f7e0: 20 63 6f 6d 70 61 72 65 5f 6f 70 3b 0a 20 20 20   compare_op;.   
f7f0: 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 20 69     }.    }else i
f800: 66 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c  f( affinity==SQL
f810: 49 54 45 5f 41 46 46 5f 54 45 58 54 20 29 7b 0a  ITE_AFF_TEXT ){.
f820: 20 20 20 20 20 20 69 66 28 20 28 66 6c 61 67 73        if( (flags
f830: 31 20 26 20 4d 45 4d 5f 53 74 72 29 3d 3d 30 20  1 & MEM_Str)==0 
f840: 26 26 20 28 66 6c 61 67 73 31 20 26 20 28 4d 45  && (flags1 & (ME
f850: 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29  M_Int|MEM_Real))
f860: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 74  !=0 ){.        t
f870: 65 73 74 63 61 73 65 28 20 70 49 6e 31 2d 3e 66  estcase( pIn1->f
f880: 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
f890: 3b 0a 20 20 20 20 20 20 20 20 74 65 73 74 63 61  ;.        testca
f8a0: 73 65 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  se( pIn1->flags 
f8b0: 26 20 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a 20 20  & MEM_Real );.  
f8c0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
f8d0: 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 70 49  eMemStringify(pI
f8e0: 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 2c 20 31 29  n1, encoding, 1)
f8f0: 3b 0a 20 20 20 20 20 20 20 20 74 65 73 74 63 61  ;.        testca
f900: 73 65 28 20 28 66 6c 61 67 73 31 26 4d 45 4d 5f  se( (flags1&MEM_
f910: 44 79 6e 29 20 21 3d 20 28 70 49 6e 31 2d 3e 66  Dyn) != (pIn1->f
f920: 6c 61 67 73 26 4d 45 4d 5f 44 79 6e 29 20 29 3b  lags&MEM_Dyn) );
f930: 0a 20 20 20 20 20 20 20 20 66 6c 61 67 73 31 20  .        flags1 
f940: 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  = (pIn1->flags &
f950: 20 7e 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20   ~MEM_TypeMask) 
f960: 7c 20 28 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f  | (flags1 & MEM_
f970: 54 79 70 65 4d 61 73 6b 29 3b 0a 20 20 20 20 20  TypeMask);.     
f980: 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 21     assert( pIn1!
f990: 3d 70 49 6e 33 20 29 3b 0a 20 20 20 20 20 20 7d  =pIn3 );.      }
f9a0: 0a 20 20 20 20 20 20 69 66 28 20 28 66 6c 61 67  .      if( (flag
f9b0: 73 33 20 26 20 4d 45 4d 5f 53 74 72 29 3d 3d 30  s3 & MEM_Str)==0
f9c0: 20 26 26 20 28 66 6c 61 67 73 33 20 26 20 28 4d   && (flags3 & (M
f9d0: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29  EM_Int|MEM_Real)
f9e0: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )!=0 ){.        
f9f0: 74 65 73 74 63 61 73 65 28 20 70 49 6e 33 2d 3e  testcase( pIn3->
fa00: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
fa10: 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73 74 63  );.        testc
fa20: 61 73 65 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73  ase( pIn3->flags
fa30: 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a 20   & MEM_Real );. 
fa40: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
fa50: 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 70  beMemStringify(p
fa60: 49 6e 33 2c 20 65 6e 63 6f 64 69 6e 67 2c 20 31  In3, encoding, 1
fa70: 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73 74 63  );.        testc
fa80: 61 73 65 28 20 28 66 6c 61 67 73 33 26 4d 45 4d  ase( (flags3&MEM
fa90: 5f 44 79 6e 29 20 21 3d 20 28 70 49 6e 33 2d 3e  _Dyn) != (pIn3->
faa0: 66 6c 61 67 73 26 4d 45 4d 5f 44 79 6e 29 20 29  flags&MEM_Dyn) )
fab0: 3b 0a 20 20 20 20 20 20 20 20 66 6c 61 67 73 33  ;.        flags3
fac0: 20 3d 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20   = (pIn3->flags 
fad0: 26 20 7e 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29  & ~MEM_TypeMask)
fae0: 20 7c 20 28 66 6c 61 67 73 33 20 26 20 4d 45 4d   | (flags3 & MEM
faf0: 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20 20 20 20  _TypeMask);.    
fb00: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61 73    }.    }.    as
fb10: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
fb20: 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 7c 7c  e==P4_COLLSEQ ||
fb30: 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 3d 3d   pOp->p4.pColl==
fb40: 30 20 29 3b 0a 20 20 20 20 72 65 73 20 3d 20 73  0 );.    res = s
fb50: 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65  qlite3MemCompare
fb60: 28 70 49 6e 33 2c 20 70 49 6e 31 2c 20 70 4f 70  (pIn3, pIn1, pOp
fb70: 2d 3e 70 34 2e 70 43 6f 6c 6c 29 3b 0a 20 20 7d  ->p4.pColl);.  }
fb80: 0a 63 6f 6d 70 61 72 65 5f 6f 70 3a 0a 20 20 2f  .compare_op:.  /
fb90: 2a 20 41 74 20 74 68 69 73 20 70 6f 69 6e 74 2c  * At this point,
fba0: 20 72 65 73 20 69 73 20 6e 65 67 61 74 69 76 65   res is negative
fbb0: 2c 20 7a 65 72 6f 2c 20 6f 72 20 70 6f 73 69 74  , zero, or posit
fbc0: 69 76 65 20 69 66 20 72 65 67 5b 50 31 5d 20 69  ive if reg[P1] i
fbd0: 73 0a 20 20 2a 2a 20 6c 65 73 73 20 74 68 61 6e  s.  ** less than
fbe0: 2c 20 65 71 75 61 6c 20 74 6f 2c 20 6f 72 20 67  , equal to, or g
fbf0: 72 65 61 74 65 72 20 74 68 61 6e 20 72 65 67 5b  reater than reg[
fc00: 50 33 5d 2c 20 72 65 73 70 65 63 74 69 76 65 6c  P3], respectivel
fc10: 79 2e 20 20 43 6f 6d 70 75 74 65 0a 20 20 2a 2a  y.  Compute.  **
fc20: 20 74 68 65 20 61 6e 73 77 65 72 20 74 6f 20 74   the answer to t
fc30: 68 69 73 20 6f 70 65 72 61 74 6f 72 20 69 6e 20  his operator in 
fc40: 72 65 73 32 2c 20 64 65 70 65 6e 64 69 6e 67 20  res2, depending 
fc50: 6f 6e 20 77 68 61 74 20 74 68 65 20 63 6f 6d 70  on what the comp
fc60: 61 72 69 73 6f 6e 0a 20 20 2a 2a 20 6f 70 65 72  arison.  ** oper
fc70: 61 74 6f 72 20 61 63 74 75 61 6c 6c 79 20 69 73  ator actually is
fc80: 2e 20 20 54 68 65 20 6e 65 78 74 20 62 6c 6f 63  .  The next bloc
fc90: 6b 20 6f 66 20 63 6f 64 65 20 64 65 70 65 6e 64  k of code depend
fca0: 73 20 6f 6e 20 74 68 65 20 66 61 63 74 0a 20 20  s on the fact.  
fcb0: 2a 2a 20 74 68 61 74 20 74 68 65 20 36 20 63 6f  ** that the 6 co
fcc0: 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f  mparison operato
fcd0: 72 73 20 61 72 65 20 63 6f 6e 73 65 63 75 74 69  rs are consecuti
fce0: 76 65 20 69 6e 74 65 67 65 72 73 20 69 6e 20 74  ve integers in t
fcf0: 68 69 73 0a 20 20 2a 2a 20 6f 72 64 65 72 3a 20  his.  ** order: 
fd00: 20 4e 45 2c 20 45 51 2c 20 47 54 2c 20 4c 45 2c   NE, EQ, GT, LE,
fd10: 20 4c 54 2c 20 47 45 20 2a 2f 0a 20 20 61 73 73   LT, GE */.  ass
fd20: 65 72 74 28 20 4f 50 5f 45 71 3d 3d 4f 50 5f 4e  ert( OP_Eq==OP_N
fd30: 65 2b 31 20 29 3b 20 61 73 73 65 72 74 28 20 4f  e+1 ); assert( O
fd40: 50 5f 47 74 3d 3d 4f 50 5f 4e 65 2b 32 20 29 3b  P_Gt==OP_Ne+2 );
fd50: 20 61 73 73 65 72 74 28 20 4f 50 5f 4c 65 3d 3d   assert( OP_Le==
fd60: 4f 50 5f 4e 65 2b 33 20 29 3b 0a 20 20 61 73 73  OP_Ne+3 );.  ass
fd70: 65 72 74 28 20 4f 50 5f 4c 74 3d 3d 4f 50 5f 4e  ert( OP_Lt==OP_N
fd80: 65 2b 34 20 29 3b 20 61 73 73 65 72 74 28 20 4f  e+4 ); assert( O
fd90: 50 5f 47 65 3d 3d 4f 50 5f 4e 65 2b 35 20 29 3b  P_Ge==OP_Ne+5 );
fda0: 0a 20 20 69 66 28 20 72 65 73 3c 30 20 29 7b 20  .  if( res<0 ){ 
fdb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fdc0: 20 20 20 20 20 20 20 2f 2a 20 6e 65 2c 20 65 71         /* ne, eq
fdd0: 2c 20 67 74 2c 20 6c 65 2c 20 6c 74 2c 20 67 65  , gt, le, lt, ge
fde0: 20 2a 2f 0a 20 20 20 20 73 74 61 74 69 63 20 63   */.    static c
fdf0: 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
fe00: 61 72 20 61 4c 54 62 5b 5d 20 3d 20 7b 20 31 2c  ar aLTb[] = { 1,
fe10: 20 20 30 2c 20 20 30 2c 20 20 31 2c 20 20 31 2c    0,  0,  1,  1,
fe20: 20 20 30 20 7d 3b 0a 20 20 20 20 72 65 73 32 20    0 };.    res2 
fe30: 3d 20 61 4c 54 62 5b 70 4f 70 2d 3e 6f 70 63 6f  = aLTb[pOp->opco
fe40: 64 65 20 2d 20 4f 50 5f 4e 65 5d 3b 0a 20 20 7d  de - OP_Ne];.  }
fe50: 65 6c 73 65 20 69 66 28 20 72 65 73 3d 3d 30 20  else if( res==0 
fe60: 29 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f  ){.    static co
fe70: 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
fe80: 72 20 61 45 51 62 5b 5d 20 3d 20 7b 20 30 2c 20  r aEQb[] = { 0, 
fe90: 20 31 2c 20 20 30 2c 20 20 31 2c 20 20 30 2c 20   1,  0,  1,  0, 
fea0: 20 31 20 7d 3b 0a 20 20 20 20 72 65 73 32 20 3d   1 };.    res2 =
feb0: 20 61 45 51 62 5b 70 4f 70 2d 3e 6f 70 63 6f 64   aEQb[pOp->opcod
fec0: 65 20 2d 20 4f 50 5f 4e 65 5d 3b 0a 20 20 7d 65  e - OP_Ne];.  }e
fed0: 6c 73 65 7b 0a 20 20 20 20 73 74 61 74 69 63 20  lse{.    static 
fee0: 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63  const unsigned c
fef0: 68 61 72 20 61 47 54 62 5b 5d 20 3d 20 7b 20 31  har aGTb[] = { 1
ff00: 2c 20 20 30 2c 20 20 31 2c 20 20 30 2c 20 20 30  ,  0,  1,  0,  0
ff10: 2c 20 20 31 20 7d 3b 0a 20 20 20 20 72 65 73 32  ,  1 };.    res2
ff20: 20 3d 20 61 47 54 62 5b 70 4f 70 2d 3e 6f 70 63   = aGTb[pOp->opc
ff30: 6f 64 65 20 2d 20 4f 50 5f 4e 65 5d 3b 0a 20 20  ode - OP_Ne];.  
ff40: 7d 0a 0a 20 20 2f 2a 20 55 6e 64 6f 20 61 6e 79  }..  /* Undo any
ff50: 20 63 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79   changes made by
ff60: 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 29   applyAffinity()
ff70: 20 74 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65   to the input re
ff80: 67 69 73 74 65 72 73 2e 20 2a 2f 0a 20 20 61 73  gisters. */.  as
ff90: 73 65 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61  sert( (pIn1->fla
ffa0: 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29 20 3d 3d  gs & MEM_Dyn) ==
ffb0: 20 28 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f 44   (flags1 & MEM_D
ffc0: 79 6e 29 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66  yn) );.  pIn1->f
ffd0: 6c 61 67 73 20 3d 20 66 6c 61 67 73 31 3b 0a 20  lags = flags1;. 
ffe0: 20 61 73 73 65 72 74 28 20 28 70 49 6e 33 2d 3e   assert( (pIn3->
fff0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 44 79 6e 29  flags & MEM_Dyn)
10000 20 3d 3d 20 28 66 6c 61 67 73 33 20 26 20 4d 45   == (flags3 & ME
10010 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 70 49 6e 33  M_Dyn) );.  pIn3
10020 2d 3e 66 6c 61 67 73 20 3d 20 66 6c 61 67 73 33  ->flags = flags3
10030 3b 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35  ;..  if( pOp->p5
10040 20 26 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50   & SQLITE_STOREP
10050 32 20 29 7b 0a 20 20 20 20 70 4f 75 74 20 3d 20  2 ){.    pOut = 
10060 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
10070 20 20 20 20 69 43 6f 6d 70 61 72 65 20 3d 20 72      iCompare = r
10080 65 73 3b 0a 20 20 20 20 69 66 28 20 28 70 4f 70  es;.    if( (pOp
10090 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4b 45  ->p5 & SQLITE_KE
100a0 45 50 4e 55 4c 4c 29 21 3d 30 20 29 7b 0a 20 20  EPNULL)!=0 ){.  
100b0 20 20 20 20 2f 2a 20 54 68 65 20 4b 45 45 50 4e      /* The KEEPN
100c0 55 4c 4c 20 66 6c 61 67 20 70 72 65 76 65 6e 74  ULL flag prevent
100d0 73 20 4f 50 5f 45 71 20 66 72 6f 6d 20 6f 76 65  s OP_Eq from ove
100e0 72 77 72 69 74 69 6e 67 20 61 20 4e 55 4c 4c 20  rwriting a NULL 
100f0 77 69 74 68 20 31 0a 20 20 20 20 20 20 2a 2a 20  with 1.      ** 
10100 61 6e 64 20 70 72 65 76 65 6e 74 73 20 4f 50 5f  and prevents OP_
10110 4e 65 20 66 72 6f 6d 20 6f 76 65 72 77 72 69 74  Ne from overwrit
10120 69 6e 67 20 4e 55 4c 4c 20 77 69 74 68 20 30 2e  ing NULL with 0.
10130 20 20 54 68 69 73 20 66 6c 61 67 0a 20 20 20 20    This flag.    
10140 20 20 2a 2a 20 69 73 20 6f 6e 6c 79 20 75 73 65    ** is only use
10150 64 20 69 6e 20 63 6f 6e 74 65 78 74 73 20 77 68  d in contexts wh
10160 65 72 65 20 65 69 74 68 65 72 3a 0a 20 20 20 20  ere either:.    
10170 20 20 2a 2a 20 20 20 28 31 29 20 6f 70 3d 3d 4f    **   (1) op==O
10180 50 5f 45 71 20 26 26 20 28 72 5b 50 32 5d 3d 3d  P_Eq && (r[P2]==
10190 4e 55 4c 4c 20 7c 7c 20 72 5b 50 32 5d 3d 3d 30  NULL || r[P2]==0
101a0 29 0a 20 20 20 20 20 20 2a 2a 20 20 20 28 32 29  ).      **   (2)
101b0 20 6f 70 3d 3d 4f 50 5f 4e 65 20 26 26 20 28 72   op==OP_Ne && (r
101c0 5b 50 32 5d 3d 3d 4e 55 4c 4c 20 7c 7c 20 72 5b  [P2]==NULL || r[
101d0 50 32 5d 3d 3d 31 29 0a 20 20 20 20 20 20 2a 2a  P2]==1).      **
101e0 20 54 68 65 72 65 66 6f 72 65 20 69 74 20 69 73   Therefore it is
101f0 20 6e 6f 74 20 6e 65 63 65 73 73 61 72 79 20 74   not necessary t
10200 6f 20 63 68 65 63 6b 20 74 68 65 20 63 6f 6e 74  o check the cont
10210 65 6e 74 20 6f 66 20 72 5b 50 32 5d 20 66 6f 72  ent of r[P2] for
10220 0a 20 20 20 20 20 20 2a 2a 20 4e 55 4c 4c 2e 20  .      ** NULL. 
10230 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  */.      assert(
10240 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
10250 5f 4e 65 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  _Ne || pOp->opco
10260 64 65 3d 3d 4f 50 5f 45 71 20 29 3b 0a 20 20 20  de==OP_Eq );.   
10270 20 20 20 61 73 73 65 72 74 28 20 72 65 73 32 3d     assert( res2=
10280 3d 30 20 7c 7c 20 72 65 73 32 3d 3d 31 20 29 3b  =0 || res2==1 );
10290 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28  .      testcase(
102a0 20 72 65 73 32 3d 3d 30 20 26 26 20 70 4f 70 2d   res2==0 && pOp-
102b0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 29  >opcode==OP_Eq )
102c0 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65  ;.      testcase
102d0 28 20 72 65 73 32 3d 3d 31 20 26 26 20 70 4f 70  ( res2==1 && pOp
102e0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20  ->opcode==OP_Eq 
102f0 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73  );.      testcas
10300 65 28 20 72 65 73 32 3d 3d 30 20 26 26 20 70 4f  e( res2==0 && pO
10310 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65  p->opcode==OP_Ne
10320 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61   );.      testca
10330 73 65 28 20 72 65 73 32 3d 3d 31 20 26 26 20 70  se( res2==1 && p
10340 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e  Op->opcode==OP_N
10350 65 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 28  e );.      if( (
10360 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
10370 45 71 29 3d 3d 72 65 73 32 20 29 20 62 72 65 61  Eq)==res2 ) brea
10380 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6d 65 6d  k;.    }.    mem
10390 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
103a0 20 70 4f 75 74 29 3b 0a 20 20 20 20 4d 65 6d 53   pOut);.    MemS
103b0 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
103c0 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 70   MEM_Int);.    p
103d0 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 65 73 32 3b  Out->u.i = res2;
103e0 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
103f0 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75  ACE(pOp->p2, pOu
10400 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  t);.  }else{.   
10410 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
10420 28 72 65 73 21 3d 30 2c 20 28 70 4f 70 2d 3e 70  (res!=0, (pOp->p
10430 35 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45  5 & SQLITE_NULLE
10440 51 29 3f 32 3a 33 29 3b 0a 20 20 20 20 69 66 28  Q)?2:3);.    if(
10450 20 72 65 73 32 20 29 7b 0a 20 20 20 20 20 20 67   res2 ){.      g
10460 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
10470 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
10480 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
10490 20 45 6c 73 65 4e 6f 74 45 71 20 2a 20 50 32 20   ElseNotEq * P2 
104a0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73  * * *.**.** This
104b0 20 6f 70 63 6f 64 65 20 6d 75 73 74 20 69 6d 6d   opcode must imm
104c0 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 20  ediately follow 
104d0 61 6e 20 4f 50 5f 4c 74 20 6f 72 20 4f 50 5f 47  an OP_Lt or OP_G
104e0 74 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65  t comparison ope
104f0 72 61 74 6f 72 2e 0a 2a 2a 20 49 66 20 72 65 73  rator..** If res
10500 75 6c 74 20 6f 66 20 61 6e 20 4f 50 5f 45 71 20  ult of an OP_Eq 
10510 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 6e 20 74 68  comparison on th
10520 65 20 73 61 6d 65 20 74 77 6f 20 6f 70 65 72 61  e same two opera
10530 6e 64 73 0a 2a 2a 20 77 6f 75 6c 64 20 68 61 76  nds.** would hav
10540 65 20 62 65 20 4e 55 4c 4c 20 6f 72 20 66 61 6c  e be NULL or fal
10550 73 65 20 28 30 29 2c 20 74 68 65 6e 20 74 68 65  se (0), then the
10560 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a  n jump to P2. .*
10570 2a 20 49 66 20 74 68 65 20 72 65 73 75 6c 74 20  * If the result 
10580 6f 66 20 61 6e 20 4f 50 5f 45 71 20 63 6f 6d 70  of an OP_Eq comp
10590 61 72 69 73 6f 6e 20 6f 6e 20 74 68 65 20 74 77  arison on the tw
105a0 6f 20 70 72 65 76 69 6f 75 73 20 6f 70 65 72 61  o previous opera
105b0 6e 64 73 0a 2a 2a 20 77 6f 75 6c 64 20 68 61 76  nds.** would hav
105c0 65 20 62 65 65 6e 20 74 72 75 65 20 28 31 29 2c  e been true (1),
105d0 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75   then fall throu
105e0 67 68 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45  gh..*/.case OP_E
105f0 6c 73 65 4e 6f 74 45 71 3a 20 7b 20 20 20 20 20  lseNotEq: {     
10600 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
10610 45 53 43 41 50 45 2c 20 6a 75 6d 70 20 2a 2f 0a  ESCAPE, jump */.
10620 20 20 61 73 73 65 72 74 28 20 70 4f 70 3e 61 4f    assert( pOp>aO
10630 70 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p );.  assert( p
10640 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f  Op[-1].opcode==O
10650 50 5f 4c 74 20 7c 7c 20 70 4f 70 5b 2d 31 5d 2e  P_Lt || pOp[-1].
10660 6f 70 63 6f 64 65 3d 3d 4f 50 5f 47 74 20 29 3b  opcode==OP_Gt );
10670 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d  .  assert( pOp[-
10680 31 5d 2e 70 35 20 26 20 53 51 4c 49 54 45 5f 53  1].p5 & SQLITE_S
10690 54 4f 52 45 50 32 20 29 3b 0a 20 20 56 64 62 65  TOREP2 );.  Vdbe
106a0 42 72 61 6e 63 68 54 61 6b 65 6e 28 69 43 6f 6d  BranchTaken(iCom
106b0 70 61 72 65 21 3d 30 2c 20 32 29 3b 0a 20 20 69  pare!=0, 2);.  i
106c0 66 28 20 69 43 6f 6d 70 61 72 65 21 3d 30 20 29  f( iCompare!=0 )
106d0 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
106e0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f  ;.  break;.}.../
106f0 2a 20 4f 70 63 6f 64 65 3a 20 50 65 72 6d 75 74  * Opcode: Permut
10700 61 74 69 6f 6e 20 2a 20 2a 20 2a 20 50 34 20 2a  ation * * * P4 *
10710 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 70  .**.** Set the p
10720 65 72 6d 75 74 61 74 69 6f 6e 20 75 73 65 64 20  ermutation used 
10730 62 79 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72  by the OP_Compar
10740 65 20 6f 70 65 72 61 74 6f 72 20 69 6e 20 74 68  e operator in th
10750 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 73 74 72 75  e next.** instru
10760 63 74 69 6f 6e 2e 20 20 54 68 65 20 70 65 72 6d  ction.  The perm
10770 75 74 61 74 69 6f 6e 20 69 73 20 73 74 6f 72 65  utation is store
10780 64 20 69 6e 20 74 68 65 20 50 34 20 6f 70 65 72  d in the P4 oper
10790 61 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70  and..**.** The p
107a0 65 72 6d 75 74 61 74 69 6f 6e 20 69 73 20 6f 6e  ermutation is on
107b0 6c 79 20 76 61 6c 69 64 20 75 6e 74 69 6c 20 74  ly valid until t
107c0 68 65 20 6e 65 78 74 20 4f 50 5f 43 6f 6d 70 61  he next OP_Compa
107d0 72 65 20 74 68 61 74 20 68 61 73 0a 2a 2a 20 74  re that has.** t
107e0 68 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54  he OPFLAG_PERMUT
107f0 45 20 62 69 74 20 73 65 74 20 69 6e 20 50 35 2e  E bit set in P5.
10800 20 54 79 70 69 63 61 6c 6c 79 20 74 68 65 20 4f   Typically the O
10810 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20 73 68  P_Permutation sh
10820 6f 75 6c 64 20 0a 2a 2a 20 6f 63 63 75 72 20 69  ould .** occur i
10830 6d 6d 65 64 69 61 74 65 6c 79 20 70 72 69 6f 72  mmediately prior
10840 20 74 6f 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61   to the OP_Compa
10850 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 69  re..**.** The fi
10860 72 73 74 20 69 6e 74 65 67 65 72 20 69 6e 20 74  rst integer in t
10870 68 65 20 50 34 20 69 6e 74 65 67 65 72 20 61 72  he P4 integer ar
10880 72 61 79 20 69 73 20 74 68 65 20 6c 65 6e 67 74  ray is the lengt
10890 68 20 6f 66 20 74 68 65 20 61 72 72 61 79 0a 2a  h of the array.*
108a0 2a 20 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 62  * and does not b
108b0 65 63 6f 6d 65 20 70 61 72 74 20 6f 66 20 74 68  ecome part of th
108c0 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 2e 0a 2a  e permutation..*
108d0 2f 0a 63 61 73 65 20 4f 50 5f 50 65 72 6d 75 74  /.case OP_Permut
108e0 61 74 69 6f 6e 3a 20 7b 0a 20 20 61 73 73 65 72  ation: {.  asser
108f0 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
10900 50 34 5f 49 4e 54 41 52 52 41 59 20 29 3b 0a 20  P4_INTARRAY );. 
10910 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
10920 2e 61 69 20 29 3b 0a 20 20 61 73 73 65 72 74 28  .ai );.  assert(
10930 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d   pOp[1].opcode==
10940 4f 50 5f 43 6f 6d 70 61 72 65 20 29 3b 0a 20 20  OP_Compare );.  
10950 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70  assert( pOp[1].p
10960 35 20 26 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55  5 & OPFLAG_PERMU
10970 54 45 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  TE );.  break;.}
10980 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6d  ../* Opcode: Com
10990 70 61 72 65 20 50 31 20 50 32 20 50 33 20 50 34  pare P1 P2 P3 P4
109a0 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
109b0 20 72 5b 50 31 40 50 33 5d 20 3c 2d 3e 20 72 5b   r[P1@P3] <-> r[
109c0 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d  P2@P3].**.** Com
109d0 70 61 72 65 20 74 77 6f 20 76 65 63 74 6f 72 73  pare two vectors
109e0 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 69 6e   of registers in
109f0 20 72 65 67 28 50 31 29 2e 2e 72 65 67 28 50 31   reg(P1)..reg(P1
10a00 2b 50 33 2d 31 29 20 28 63 61 6c 6c 20 74 68 69  +P3-1) (call thi
10a10 73 0a 2a 2a 20 76 65 63 74 6f 72 20 22 41 22 29  s.** vector "A")
10a20 20 61 6e 64 20 69 6e 20 72 65 67 28 50 32 29 2e   and in reg(P2).
10a30 2e 72 65 67 28 50 32 2b 50 33 2d 31 29 20 28 22  .reg(P2+P3-1) ("
10a40 42 22 29 2e 20 20 53 61 76 65 20 74 68 65 20 72  B").  Save the r
10a50 65 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20  esult of.** the 
10a60 63 6f 6d 70 61 72 69 73 6f 6e 20 66 6f 72 20 75  comparison for u
10a70 73 65 20 62 79 20 74 68 65 20 6e 65 78 74 20 4f  se by the next O
10a80 50 5f 4a 75 6d 70 20 69 6e 73 74 72 75 63 74 2e  P_Jump instruct.
10a90 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61 73  .**.** If P5 has
10aa0 20 74 68 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d   the OPFLAG_PERM
10ab0 55 54 45 20 62 69 74 20 73 65 74 2c 20 74 68 65  UTE bit set, the
10ac0 6e 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20 63  n the order of c
10ad0 6f 6d 70 61 72 69 73 6f 6e 20 69 73 0a 2a 2a 20  omparison is.** 
10ae0 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68  determined by th
10af0 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f 50  e most recent OP
10b00 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20 6f 70 65  _Permutation ope
10b10 72 61 74 6f 72 2e 20 20 49 66 20 74 68 65 0a 2a  rator.  If the.*
10b20 2a 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45  * OPFLAG_PERMUTE
10b30 20 62 69 74 20 69 73 20 63 6c 65 61 72 2c 20 74   bit is clear, t
10b40 68 65 6e 20 72 65 67 69 73 74 65 72 20 61 72 65  hen register are
10b50 20 63 6f 6d 70 61 72 65 64 20 69 6e 20 73 65 71   compared in seq
10b60 75 65 6e 74 69 61 6c 0a 2a 2a 20 6f 72 64 65 72  uential.** order
10b70 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  ..**.** P4 is a 
10b80 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72  KeyInfo structur
10b90 65 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 63  e that defines c
10ba0 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
10bb0 65 73 20 61 6e 64 20 73 6f 72 74 0a 2a 2a 20 6f  es and sort.** o
10bc0 72 64 65 72 73 20 66 6f 72 20 74 68 65 20 63 6f  rders for the co
10bd0 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68 65 20 70  mparison.  The p
10be0 65 72 6d 75 74 61 74 69 6f 6e 20 61 70 70 6c 69  ermutation appli
10bf0 65 73 20 74 6f 20 72 65 67 69 73 74 65 72 73 0a  es to registers.
10c00 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 20 4b 65  ** only.  The Ke
10c10 79 49 6e 66 6f 20 65 6c 65 6d 65 6e 74 73 20 61  yInfo elements a
10c20 72 65 20 75 73 65 64 20 73 65 71 75 65 6e 74 69  re used sequenti
10c30 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ally..**.** The 
10c40 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 20  comparison is a 
10c50 73 6f 72 74 20 63 6f 6d 70 61 72 69 73 6f 6e 2c  sort comparison,
10c60 20 73 6f 20 4e 55 4c 4c 73 20 63 6f 6d 70 61 72   so NULLs compar
10c70 65 20 65 71 75 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c  e equal,.** NULL
10c80 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20  s are less than 
10c90 6e 75 6d 62 65 72 73 2c 20 6e 75 6d 62 65 72 73  numbers, numbers
10ca0 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 73   are less than s
10cb0 74 72 69 6e 67 73 2c 0a 2a 2a 20 61 6e 64 20 73  trings,.** and s
10cc0 74 72 69 6e 67 73 20 61 72 65 20 6c 65 73 73 20  trings are less 
10cd0 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 63  than blobs..*/.c
10ce0 61 73 65 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20  ase OP_Compare: 
10cf0 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74  {.  int n;.  int
10d00 20 69 3b 0a 20 20 69 6e 74 20 70 31 3b 0a 20 20   i;.  int p1;.  
10d10 69 6e 74 20 70 32 3b 0a 20 20 63 6f 6e 73 74 20  int p2;.  const 
10d20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66  KeyInfo *pKeyInf
10d30 6f 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20  o;.  int idx;.  
10d40 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b 20  CollSeq *pColl; 
10d50 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20     /* Collating 
10d60 73 65 71 75 65 6e 63 65 20 74 6f 20 75 73 65 20  sequence to use 
10d70 6f 6e 20 74 68 69 73 20 74 65 72 6d 20 2a 2f 0a  on this term */.
10d80 20 20 69 6e 74 20 62 52 65 76 3b 20 20 20 20 20    int bRev;     
10d90 20 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72       /* True for
10da0 20 44 45 53 43 45 4e 44 49 4e 47 20 73 6f 72 74   DESCENDING sort
10db0 20 6f 72 64 65 72 20 2a 2f 0a 20 20 69 6e 74 20   order */.  int 
10dc0 2a 61 50 65 72 6d 75 74 65 3b 20 20 20 20 20 2f  *aPermute;     /
10dd0 2a 20 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f  * The permutatio
10de0 6e 20 2a 2f 0a 0a 20 20 69 66 28 20 28 70 4f 70  n */..  if( (pOp
10df0 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 45  ->p5 & OPFLAG_PE
10e00 52 4d 55 54 45 29 3d 3d 30 20 29 7b 0a 20 20 20  RMUTE)==0 ){.   
10e10 20 61 50 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20   aPermute = 0;. 
10e20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
10e30 72 74 28 20 70 4f 70 3e 61 4f 70 20 29 3b 0a 20  rt( pOp>aOp );. 
10e40 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d     assert( pOp[-
10e50 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 50 65  1].opcode==OP_Pe
10e60 72 6d 75 74 61 74 69 6f 6e 20 29 3b 0a 20 20 20  rmutation );.   
10e70 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d   assert( pOp[-1]
10e80 2e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41  .p4type==P4_INTA
10e90 52 52 41 59 20 29 3b 0a 20 20 20 20 61 50 65 72  RRAY );.    aPer
10ea0 6d 75 74 65 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70  mute = pOp[-1].p
10eb0 34 2e 61 69 20 2b 20 31 3b 0a 20 20 20 20 61 73  4.ai + 1;.    as
10ec0 73 65 72 74 28 20 61 50 65 72 6d 75 74 65 21 3d  sert( aPermute!=
10ed0 30 20 29 3b 0a 20 20 7d 0a 20 20 6e 20 3d 20 70  0 );.  }.  n = p
10ee0 4f 70 2d 3e 70 33 3b 0a 20 20 70 4b 65 79 49 6e  Op->p3;.  pKeyIn
10ef0 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65  fo = pOp->p4.pKe
10f00 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28  yInfo;.  assert(
10f10 20 6e 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74   n>0 );.  assert
10f20 28 20 70 4b 65 79 49 6e 66 6f 21 3d 30 20 29 3b  ( pKeyInfo!=0 );
10f30 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b  .  p1 = pOp->p1;
10f40 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b  .  p2 = pOp->p2;
10f50 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
10f60 45 42 55 47 0a 20 20 69 66 28 20 61 50 65 72 6d  EBUG.  if( aPerm
10f70 75 74 65 20 29 7b 0a 20 20 20 20 69 6e 74 20 6b  ute ){.    int k
10f80 2c 20 6d 78 20 3d 20 30 3b 0a 20 20 20 20 66 6f  , mx = 0;.    fo
10f90 72 28 6b 3d 30 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29  r(k=0; k<n; k++)
10fa0 20 69 66 28 20 61 50 65 72 6d 75 74 65 5b 6b 5d   if( aPermute[k]
10fb0 3e 6d 78 20 29 20 6d 78 20 3d 20 61 50 65 72 6d  >mx ) mx = aPerm
10fc0 75 74 65 5b 6b 5d 3b 0a 20 20 20 20 61 73 73 65  ute[k];.    asse
10fd0 72 74 28 20 70 31 3e 30 20 26 26 20 70 31 2b 6d  rt( p1>0 && p1+m
10fe0 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  x<=(p->nMem+1 - 
10ff0 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b  p->nCursor)+1 );
11000 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3e  .    assert( p2>
11010 30 20 26 26 20 70 32 2b 6d 78 3c 3d 28 70 2d 3e  0 && p2+mx<=(p->
11020 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
11030 73 6f 72 29 2b 31 20 29 3b 0a 20 20 7d 65 6c 73  sor)+1 );.  }els
11040 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e{.    assert( p
11050 31 3e 30 20 26 26 20 70 31 2b 6e 3c 3d 28 70 2d  1>0 && p1+n<=(p-
11060 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
11070 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 20 20 61  rsor)+1 );.    a
11080 73 73 65 72 74 28 20 70 32 3e 30 20 26 26 20 70  ssert( p2>0 && p
11090 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  2+n<=(p->nMem+1 
110a0 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20  - p->nCursor)+1 
110b0 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a  );.  }.#endif /*
110c0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f   SQLITE_DEBUG */
110d0 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b  .  for(i=0; i<n;
110e0 20 69 2b 2b 29 7b 0a 20 20 20 20 69 64 78 20 3d   i++){.    idx =
110f0 20 61 50 65 72 6d 75 74 65 20 3f 20 61 50 65 72   aPermute ? aPer
11100 6d 75 74 65 5b 69 5d 20 3a 20 69 3b 0a 20 20 20  mute[i] : i;.   
11110 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
11120 6c 69 64 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78  lid(&aMem[p1+idx
11130 5d 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  ]) );.    assert
11140 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d  ( memIsValid(&aM
11150 65 6d 5b 70 32 2b 69 64 78 5d 29 20 29 3b 0a 20  em[p2+idx]) );. 
11160 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
11170 45 28 70 31 2b 69 64 78 2c 20 26 61 4d 65 6d 5b  E(p1+idx, &aMem[
11180 70 31 2b 69 64 78 5d 29 3b 0a 20 20 20 20 52 45  p1+idx]);.    RE
11190 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b  GISTER_TRACE(p2+
111a0 69 64 78 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64  idx, &aMem[p2+id
111b0 78 5d 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  x]);.    assert(
111c0 20 69 3c 70 4b 65 79 49 6e 66 6f 2d 3e 6e 4b 65   i<pKeyInfo->nKe
111d0 79 46 69 65 6c 64 20 29 3b 0a 20 20 20 20 70 43  yField );.    pC
111e0 6f 6c 6c 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e  oll = pKeyInfo->
111f0 61 43 6f 6c 6c 5b 69 5d 3b 0a 20 20 20 20 62 52  aColl[i];.    bR
11200 65 76 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61  ev = pKeyInfo->a
11210 53 6f 72 74 4f 72 64 65 72 5b 69 5d 3b 0a 20 20  SortOrder[i];.  
11220 20 20 69 43 6f 6d 70 61 72 65 20 3d 20 73 71 6c    iCompare = sql
11230 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 26  ite3MemCompare(&
11240 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 2c 20 26 61  aMem[p1+idx], &a
11250 4d 65 6d 5b 70 32 2b 69 64 78 5d 2c 20 70 43 6f  Mem[p2+idx], pCo
11260 6c 6c 29 3b 0a 20 20 20 20 69 66 28 20 69 43 6f  ll);.    if( iCo
11270 6d 70 61 72 65 20 29 7b 0a 20 20 20 20 20 20 69  mpare ){.      i
11280 66 28 20 62 52 65 76 20 29 20 69 43 6f 6d 70 61  f( bRev ) iCompa
11290 72 65 20 3d 20 2d 69 43 6f 6d 70 61 72 65 3b 0a  re = -iCompare;.
112a0 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
112b0 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
112c0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 75  }../* Opcode: Ju
112d0 6d 70 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  mp P1 P2 P3 * *.
112e0 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68  **.** Jump to th
112f0 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74  e instruction at
11300 20 61 64 64 72 65 73 73 20 50 31 2c 20 50 32 2c   address P1, P2,
11310 20 6f 72 20 50 33 20 64 65 70 65 6e 64 69 6e 67   or P3 depending
11320 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 69   on whether.** i
11330 6e 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e  n the most recen
11340 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 69 6e 73  t OP_Compare ins
11350 74 72 75 63 74 69 6f 6e 20 74 68 65 20 50 31 20  truction the P1 
11360 76 65 63 74 6f 72 20 77 61 73 20 6c 65 73 73 20  vector was less 
11370 74 68 61 6e 0a 2a 2a 20 65 71 75 61 6c 20 74 6f  than.** equal to
11380 2c 20 6f 72 20 67 72 65 61 74 65 72 20 74 68 61  , or greater tha
11390 6e 20 74 68 65 20 50 32 20 76 65 63 74 6f 72 2c  n the P2 vector,
113a0 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a   respectively..*
113b0 2f 0a 63 61 73 65 20 4f 50 5f 4a 75 6d 70 3a 20  /.case OP_Jump: 
113c0 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  {             /*
113d0 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 69   jump */.  if( i
113e0 43 6f 6d 70 61 72 65 3c 30 20 29 7b 0a 20 20 20  Compare<0 ){.   
113f0 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
11400 28 30 2c 33 29 3b 20 70 4f 70 20 3d 20 26 61 4f  (0,3); pOp = &aO
11410 70 5b 70 4f 70 2d 3e 70 31 20 2d 20 31 5d 3b 0a  p[pOp->p1 - 1];.
11420 20 20 7d 65 6c 73 65 20 69 66 28 20 69 43 6f 6d    }else if( iCom
11430 70 61 72 65 3d 3d 30 20 29 7b 0a 20 20 20 20 56  pare==0 ){.    V
11440 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31  dbeBranchTaken(1
11450 2c 33 29 3b 20 70 4f 70 20 3d 20 26 61 4f 70 5b  ,3); pOp = &aOp[
11460 70 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20 20  pOp->p2 - 1];.  
11470 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42  }else{.    VdbeB
11480 72 61 6e 63 68 54 61 6b 65 6e 28 32 2c 33 29 3b  ranchTaken(2,3);
11490 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d   pOp = &aOp[pOp-
114a0 3e 70 33 20 2d 20 31 5d 3b 0a 20 20 7d 0a 20 20  >p3 - 1];.  }.  
114b0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
114c0 6f 64 65 3a 20 41 6e 64 20 50 31 20 50 32 20 50  ode: And P1 P2 P
114d0 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
114e0 73 3a 20 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20  s: r[P3]=(r[P1] 
114f0 26 26 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20  && r[P2]).**.** 
11500 54 61 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c  Take the logical
11510 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75   AND of the valu
11520 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 73 20  es in registers 
11530 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a  P1 and P2 and.**
11540 20 77 72 69 74 65 20 74 68 65 20 72 65 73 75 6c   write the resul
11550 74 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  t into register 
11560 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74  P3..**.** If eit
11570 68 65 72 20 50 31 20 6f 72 20 50 32 20 69 73 20  her P1 or P2 is 
11580 30 20 28 66 61 6c 73 65 29 20 74 68 65 6e 20 74  0 (false) then t
11590 68 65 20 72 65 73 75 6c 74 20 69 73 20 30 20 65  he result is 0 e
115a0 76 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 74  ven if.** the ot
115b0 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
115c0 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 74  L.  A NULL and t
115d0 72 75 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73  rue or two NULLs
115e0 20 67 69 76 65 0a 2a 2a 20 61 20 4e 55 4c 4c 20   give.** a NULL 
115f0 6f 75 74 70 75 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70  output..*/./* Op
11600 63 6f 64 65 3a 20 4f 72 20 50 31 20 50 32 20 50  code: Or P1 P2 P
11610 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
11620 73 3a 20 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20  s: r[P3]=(r[P1] 
11630 7c 7c 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20  || r[P2]).**.** 
11640 54 61 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c  Take the logical
11650 20 4f 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65   OR of the value
11660 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
11670 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73   and P2 and.** s
11680 74 6f 72 65 20 74 68 65 20 61 6e 73 77 65 72 20  tore the answer 
11690 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
116a0 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  **.** If either 
116b0 50 31 20 6f 72 20 50 32 20 69 73 20 6e 6f 6e 7a  P1 or P2 is nonz
116c0 65 72 6f 20 28 74 72 75 65 29 20 74 68 65 6e 20  ero (true) then 
116d0 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 31 20  the result is 1 
116e0 28 74 72 75 65 29 0a 2a 2a 20 65 76 65 6e 20 69  (true).** even i
116f0 66 20 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75  f the other inpu
11700 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55  t is NULL.  A NU
11710 4c 4c 20 61 6e 64 20 66 61 6c 73 65 20 6f 72 20  LL and false or 
11720 74 77 6f 20 4e 55 4c 4c 73 0a 2a 2a 20 67 69 76  two NULLs.** giv
11730 65 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e  e a NULL output.
11740 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 6e 64 3a  .*/.case OP_And:
11750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
11760 20 73 61 6d 65 20 61 73 20 54 4b 5f 41 4e 44 2c   same as TK_AND,
11770 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
11780 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 72 3a 20 7b  */.case OP_Or: {
11790 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
117a0 73 61 6d 65 20 61 73 20 54 4b 5f 4f 52 2c 20 69  same as TK_OR, i
117b0 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
117c0 0a 20 20 69 6e 74 20 76 31 3b 20 20 20 20 2f 2a  .  int v1;    /*
117d0 20 4c 65 66 74 20 6f 70 65 72 61 6e 64 3a 20 20   Left operand:  
117e0 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55  0==FALSE, 1==TRU
117f0 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72  E, 2==UNKNOWN or
11800 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 6e 74 20 76   NULL */.  int v
11810 32 3b 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f  2;    /* Right o
11820 70 65 72 61 6e 64 3a 20 30 3d 3d 46 41 4c 53 45  perand: 0==FALSE
11830 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e  , 1==TRUE, 2==UN
11840 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f  KNOWN or NULL */
11850 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
11860 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
11870 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
11880 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76  EM_Null ){.    v
11890 31 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a  1 = 2;.  }else{.
118a0 20 20 20 20 76 31 20 3d 20 73 71 6c 69 74 65 33      v1 = sqlite3
118b0 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
118c0 31 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 70 49 6e  1)!=0;.  }.  pIn
118d0 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  2 = &aMem[pOp->p
118e0 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e 32 2d 3e  2];.  if( pIn2->
118f0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
11900 20 29 7b 0a 20 20 20 20 76 32 20 3d 20 32 3b 0a   ){.    v2 = 2;.
11910 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76 32 20    }else{.    v2 
11920 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
11930 56 61 6c 75 65 28 70 49 6e 32 29 21 3d 30 3b 0a  Value(pIn2)!=0;.
11940 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f    }.  if( pOp->o
11950 70 63 6f 64 65 3d 3d 4f 50 5f 41 6e 64 20 29 7b  pcode==OP_And ){
11960 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73  .    static cons
11970 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
11980 61 6e 64 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20  and_logic[] = { 
11990 30 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c 20 32  0, 0, 0, 0, 1, 2
119a0 2c 20 30 2c 20 32 2c 20 32 20 7d 3b 0a 20 20 20  , 0, 2, 2 };.   
119b0 20 76 31 20 3d 20 61 6e 64 5f 6c 6f 67 69 63 5b   v1 = and_logic[
119c0 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 65 6c 73  v1*3+v2];.  }els
119d0 65 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f  e{.    static co
119e0 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
119f0 72 20 6f 72 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b  r or_logic[] = {
11a00 20 30 2c 20 31 2c 20 32 2c 20 31 2c 20 31 2c 20   0, 1, 2, 1, 1, 
11a10 31 2c 20 32 2c 20 31 2c 20 32 20 7d 3b 0a 20 20  1, 2, 1, 2 };.  
11a20 20 20 76 31 20 3d 20 6f 72 5f 6c 6f 67 69 63 5b    v1 = or_logic[
11a30 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 0a 20 20  v1*3+v2];.  }.  
11a40 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
11a50 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 76 31 3d  ->p3];.  if( v1=
11a60 3d 32 20 29 7b 0a 20 20 20 20 4d 65 6d 53 65 74  =2 ){.    MemSet
11a70 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
11a80 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 7d 65 6c 73  EM_Null);.  }els
11a90 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  e{.    pOut->u.i
11aa0 20 3d 20 76 31 3b 0a 20 20 20 20 4d 65 6d 53 65   = v1;.    MemSe
11ab0 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
11ac0 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20 20  MEM_Int);.  }.  
11ad0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
11ae0 6f 64 65 3a 20 4e 6f 74 20 50 31 20 50 32 20 2a  ode: Not P1 P2 *
11af0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
11b00 3a 20 72 5b 50 32 5d 3d 20 21 72 5b 50 31 5d 0a  : r[P2]= !r[P1].
11b10 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20  **.** Interpret 
11b20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
11b30 69 73 74 65 72 20 50 31 20 61 73 20 61 20 62 6f  ister P1 as a bo
11b40 6f 6c 65 61 6e 20 76 61 6c 75 65 2e 20 20 53 74  olean value.  St
11b50 6f 72 65 20 74 68 65 0a 2a 2a 20 62 6f 6f 6c 65  ore the.** boole
11b60 61 6e 20 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e  an complement in
11b70 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49   register P2.  I
11b80 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
11b90 65 67 69 73 74 65 72 20 50 31 20 69 73 20 0a 2a  egister P1 is .*
11ba0 2a 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 61 20 4e  * NULL, then a N
11bb0 55 4c 4c 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ULL is stored in
11bc0 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
11bd0 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  Not: {          
11be0 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
11bf0 20 54 4b 5f 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75   TK_NOT, in1, ou
11c00 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  t2 */.  pIn1 = &
11c10 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
11c20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
11c30 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65  p->p2];.  sqlite
11c40 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
11c50 70 4f 75 74 29 3b 0a 20 20 69 66 28 20 28 70 49  pOut);.  if( (pI
11c60 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
11c70 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Null)==0 ){.    
11c80 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
11c90 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d  M_Int;.    pOut-
11ca0 3e 75 2e 69 20 3d 20 21 73 71 6c 69 74 65 33 56  >u.i = !sqlite3V
11cb0 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31  dbeIntValue(pIn1
11cc0 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
11cd0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69  }../* Opcode: Bi
11ce0 74 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  tNot P1 P2 * * *
11cf0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
11d00 50 31 5d 3d 20 7e 72 5b 50 31 5d 0a 2a 2a 0a 2a  P1]= ~r[P1].**.*
11d10 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20  * Interpret the 
11d20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
11d30 74 65 72 20 50 31 20 61 73 20 61 6e 20 69 6e 74  ter P1 as an int
11d40 65 67 65 72 2e 20 20 53 74 6f 72 65 20 74 68 65  eger.  Store the
11d50 0a 2a 2a 20 6f 6e 65 73 2d 63 6f 6d 70 6c 65 6d  .** ones-complem
11d60 65 6e 74 20 6f 66 20 74 68 65 20 50 31 20 76 61  ent of the P1 va
11d70 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  lue into registe
11d80 72 20 50 32 2e 20 20 49 66 20 50 31 20 68 6f 6c  r P2.  If P1 hol
11d90 64 73 0a 2a 2a 20 61 20 4e 55 4c 4c 20 74 68 65  ds.** a NULL the
11da0 6e 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69  n store a NULL i
11db0 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  n P2..*/.case OP
11dc0 5f 42 69 74 4e 6f 74 3a 20 7b 20 20 20 20 20 20  _BitNot: {      
11dd0 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
11de0 73 20 54 4b 5f 42 49 54 4e 4f 54 2c 20 69 6e 31  s TK_BITNOT, in1
11df0 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31  , out2 */.  pIn1
11e00 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
11e10 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ];.  pOut = &aMe
11e20 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71  m[pOp->p2];.  sq
11e30 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
11e40 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 69 66 28  ull(pOut);.  if(
11e50 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
11e60 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a  MEM_Null)==0 ){.
11e70 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
11e80 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70  = MEM_Int;.    p
11e90 4f 75 74 2d 3e 75 2e 69 20 3d 20 7e 73 71 6c 69  Out->u.i = ~sqli
11ea0 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
11eb0 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65  pIn1);.  }.  bre
11ec0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
11ed0 3a 20 4f 6e 63 65 20 50 31 20 50 32 20 2a 20 2a  : Once P1 P2 * *
11ee0 20 2a 0a 2a 2a 0a 2a 2a 20 46 61 6c 6c 20 74 68   *.**.** Fall th
11ef0 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
11f00 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68  t instruction th
11f10 65 20 66 69 72 73 74 20 74 69 6d 65 20 74 68 69  e first time thi
11f20 73 20 6f 70 63 6f 64 65 20 69 73 0a 2a 2a 20 65  s opcode is.** e
11f30 6e 63 6f 75 6e 74 65 72 65 64 20 6f 6e 20 65 61  ncountered on ea
11f40 63 68 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66  ch invocation of
11f50 20 74 68 65 20 62 79 74 65 2d 63 6f 64 65 20 70   the byte-code p
11f60 72 6f 67 72 61 6d 2e 20 20 4a 75 6d 70 20 74 6f  rogram.  Jump to
11f70 20 50 32 0a 2a 2a 20 6f 6e 20 74 68 65 20 73 65   P2.** on the se
11f80 63 6f 6e 64 20 61 6e 64 20 61 6c 6c 20 73 75 62  cond and all sub
11f90 73 65 71 75 65 6e 74 20 65 6e 63 6f 75 6e 74 65  sequent encounte
11fa0 72 73 20 64 75 72 69 6e 67 20 74 68 65 20 73 61  rs during the sa
11fb0 6d 65 20 69 6e 76 6f 63 61 74 69 6f 6e 2e 0a 2a  me invocation..*
11fc0 2a 0a 2a 2a 20 54 6f 70 2d 6c 65 76 65 6c 20 70  *.** Top-level p
11fd0 72 6f 67 72 61 6d 73 20 64 65 74 65 72 6d 69 6e  rograms determin
11fe0 65 20 66 69 72 73 74 20 69 6e 76 6f 63 61 74 69  e first invocati
11ff0 6f 6e 20 62 79 20 63 6f 6d 70 61 72 69 6e 67 20  on by comparing 
12000 74 68 65 20 50 31 0a 2a 2a 20 6f 70 65 72 61 6e  the P1.** operan
12010 64 20 61 67 61 69 6e 73 74 20 74 68 65 20 50 31  d against the P1
12020 20 6f 70 65 72 61 6e 64 20 6f 6e 20 74 68 65 20   operand on the 
12030 4f 50 5f 49 6e 69 74 20 6f 70 63 6f 64 65 20 61  OP_Init opcode a
12040 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a  t the beginning.
12050 2a 2a 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61  ** of the progra
12060 6d 2e 20 20 49 66 20 74 68 65 20 50 31 20 76 61  m.  If the P1 va
12070 6c 75 65 73 20 64 69 66 66 65 72 2c 20 74 68 65  lues differ, the
12080 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 61  n fall through a
12090 6e 64 20 6d 61 6b 65 0a 2a 2a 20 74 68 65 20 50  nd make.** the P
120a0 31 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65  1 of this opcode
120b0 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 50 31   equal to the P1
120c0 20 6f 66 20 4f 50 5f 49 6e 69 74 2e 20 20 49 66   of OP_Init.  If
120d0 20 50 31 20 76 61 6c 75 65 73 20 61 72 65 0a 2a   P1 values are.*
120e0 2a 20 74 68 65 20 73 61 6d 65 20 74 68 65 6e 20  * the same then 
120f0 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 2e 0a 2a  take the jump..*
12100 2a 0a 2a 2a 20 46 6f 72 20 73 75 62 70 72 6f 67  *.** For subprog
12110 72 61 6d 73 2c 20 74 68 65 72 65 20 69 73 20 61  rams, there is a
12120 20 62 69 74 6d 61 73 6b 20 69 6e 20 74 68 65 20   bitmask in the 
12130 56 64 62 65 46 72 61 6d 65 20 74 68 61 74 20 64  VdbeFrame that d
12140 65 74 65 72 6d 69 6e 65 73 0a 2a 2a 20 77 68 65  etermines.** whe
12150 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20  ther or not the 
12160 6a 75 6d 70 20 73 68 6f 75 6c 64 20 62 65 20 74  jump should be t
12170 61 6b 65 6e 2e 20 20 54 68 65 20 62 69 74 6d 61  aken.  The bitma
12180 73 6b 20 69 73 20 6e 65 63 65 73 73 61 72 79 0a  sk is necessary.
12190 2a 2a 20 62 65 63 61 75 73 65 20 74 68 65 20 73  ** because the s
121a0 65 6c 66 2d 61 6c 74 65 72 69 6e 67 20 63 6f 64  elf-altering cod
121b0 65 20 74 72 69 63 6b 20 64 6f 65 73 20 6e 6f 74  e trick does not
121c0 20 77 6f 72 6b 20 66 6f 72 20 72 65 63 75 72 73   work for recurs
121d0 69 76 65 0a 2a 2a 20 74 72 69 67 67 65 72 73 2e  ive.** triggers.
121e0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 6e 63 65  .*/.case OP_Once
121f0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
12200 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 75 33 32  /* jump */.  u32
12210 20 69 41 64 64 72 3b 20 20 20 20 20 20 20 20 20   iAddr;         
12220 20 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65 73         /* Addres
12230 73 20 6f 66 20 74 68 69 73 20 69 6e 73 74 72 75  s of this instru
12240 63 74 69 6f 6e 20 2a 2f 0a 20 20 61 73 73 65 72  ction */.  asser
12250 74 28 20 70 2d 3e 61 4f 70 5b 30 5d 2e 6f 70 63  t( p->aOp[0].opc
12260 6f 64 65 3d 3d 4f 50 5f 49 6e 69 74 20 29 3b 0a  ode==OP_Init );.
12270 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20    if( p->pFrame 
12280 29 7b 0a 20 20 20 20 69 41 64 64 72 20 3d 20 28  ){.    iAddr = (
12290 69 6e 74 29 28 70 4f 70 20 2d 20 70 2d 3e 61 4f  int)(pOp - p->aO
122a0 70 29 3b 0a 20 20 20 20 69 66 28 20 28 70 2d 3e  p);.    if( (p->
122b0 70 46 72 61 6d 65 2d 3e 61 4f 6e 63 65 5b 69 41  pFrame->aOnce[iA
122c0 64 64 72 2f 38 5d 20 26 20 28 31 3c 3c 28 69 41  ddr/8] & (1<<(iA
122d0 64 64 72 20 26 20 37 29 29 29 21 3d 30 20 29 7b  ddr & 7)))!=0 ){
122e0 0a 20 20 20 20 20 20 56 64 62 65 42 72 61 6e 63  .      VdbeBranc
122f0 68 54 61 6b 65 6e 28 31 2c 20 32 29 3b 0a 20 20  hTaken(1, 2);.  
12300 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f      goto jump_to
12310 5f 70 32 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70  _p2;.    }.    p
12320 2d 3e 70 46 72 61 6d 65 2d 3e 61 4f 6e 63 65 5b  ->pFrame->aOnce[
12330 69 41 64 64 72 2f 38 5d 20 7c 3d 20 31 3c 3c 28  iAddr/8] |= 1<<(
12340 69 41 64 64 72 20 26 20 37 29 3b 0a 20 20 7d 65  iAddr & 7);.  }e
12350 6c 73 65 7b 0a 20 20 20 20 69 66 28 20 70 2d 3e  lse{.    if( p->
12360 61 4f 70 5b 30 5d 2e 70 31 3d 3d 70 4f 70 2d 3e  aOp[0].p1==pOp->
12370 70 31 20 29 7b 0a 20 20 20 20 20 20 56 64 62 65  p1 ){.      Vdbe
12380 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 20 32  BranchTaken(1, 2
12390 29 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6a 75  );.      goto ju
123a0 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a  mp_to_p2;.    }.
123b0 20 20 7d 0a 20 20 56 64 62 65 42 72 61 6e 63 68    }.  VdbeBranch
123c0 54 61 6b 65 6e 28 30 2c 20 32 29 3b 0a 20 20 70  Taken(0, 2);.  p
123d0 4f 70 2d 3e 70 31 20 3d 20 70 2d 3e 61 4f 70 5b  Op->p1 = p->aOp[
123e0 30 5d 2e 70 31 3b 0a 20 20 62 72 65 61 6b 3b 0a  0].p1;.  break;.
123f0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66  }../* Opcode: If
12400 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
12410 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69  .** Jump to P2 i
12420 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
12430 65 67 69 73 74 65 72 20 50 31 20 69 73 20 74 72  egister P1 is tr
12440 75 65 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a  ue.  The value.*
12450 2a 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20  * is considered 
12460 74 72 75 65 20 69 66 20 69 74 20 69 73 20 6e 75  true if it is nu
12470 6d 65 72 69 63 20 61 6e 64 20 6e 6f 6e 2d 7a 65  meric and non-ze
12480 72 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  ro.  If the valu
12490 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55  e.** in P1 is NU
124a0 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65  LL then take the
124b0 20 6a 75 6d 70 20 69 66 20 61 6e 64 20 6f 6e 6c   jump if and onl
124c0 79 20 69 66 20 50 33 20 69 73 20 6e 6f 6e 2d 7a  y if P3 is non-z
124d0 65 72 6f 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ero..*/./* Opcod
124e0 65 3a 20 49 66 4e 6f 74 20 50 31 20 50 32 20 50  e: IfNot P1 P2 P
124f0 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  3 * *.**.** Jump
12500 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61   to P2 if the va
12510 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
12520 50 31 20 69 73 20 46 61 6c 73 65 2e 20 20 54 68  P1 is False.  Th
12530 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f  e value.** is co
12540 6e 73 69 64 65 72 65 64 20 66 61 6c 73 65 20 69  nsidered false i
12550 66 20 69 74 20 68 61 73 20 61 20 6e 75 6d 65 72  f it has a numer
12560 69 63 20 76 61 6c 75 65 20 6f 66 20 7a 65 72 6f  ic value of zero
12570 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a  .  If the value.
12580 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c  ** in P1 is NULL
12590 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a   then take the j
125a0 75 6d 70 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20  ump if and only 
125b0 69 66 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72  if P3 is non-zer
125c0 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66  o..*/.case OP_If
125d0 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
125e0 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
125f0 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74 3a  /.case OP_IfNot:
12600 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
12610 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
12620 69 6e 74 20 63 3b 0a 20 20 70 49 6e 31 20 3d 20  int c;.  pIn1 = 
12630 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
12640 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67    if( pIn1->flag
12650 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s & MEM_Null ){.
12660 20 20 20 20 63 20 3d 20 70 4f 70 2d 3e 70 33 3b      c = pOp->p3;
12670 0a 20 20 7d 65 6c 73 65 7b 0a 23 69 66 64 65 66  .  }else{.#ifdef
12680 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
12690 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20  ATING_POINT.    
126a0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  c = sqlite3VdbeI
126b0 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30  ntValue(pIn1)!=0
126c0 3b 0a 23 65 6c 73 65 0a 20 20 20 20 63 20 3d 20  ;.#else.    c = 
126d0 73 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56  sqlite3VdbeRealV
126e0 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 2e 30 3b  alue(pIn1)!=0.0;
126f0 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20  .#endif.    if( 
12700 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
12710 49 66 4e 6f 74 20 29 20 63 20 3d 20 21 63 3b 0a  IfNot ) c = !c;.
12720 20 20 7d 0a 20 20 56 64 62 65 42 72 61 6e 63 68    }.  VdbeBranch
12730 54 61 6b 65 6e 28 63 21 3d 30 2c 20 32 29 3b 0a  Taken(c!=0, 2);.
12740 20 20 69 66 28 20 63 20 29 7b 0a 20 20 20 20 67    if( c ){.    g
12750 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
12760 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
12770 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 73 4e 75 6c  /* Opcode: IsNul
12780 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  l P1 P2 * * *.**
12790 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b   Synopsis: if r[
127a0 50 31 5d 3d 3d 4e 55 4c 4c 20 67 6f 74 6f 20 50  P1]==NULL goto P
127b0 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20  2.**.** Jump to 
127c0 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20  P2 if the value 
127d0 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
127e0 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
127f0 4f 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20 20 20 20  OP_IsNull: {    
12800 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
12810 61 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20 6a 75  as TK_ISNULL, ju
12820 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
12830 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
12840 31 5d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68  1];.  VdbeBranch
12850 54 61 6b 65 6e 28 20 28 70 49 6e 31 2d 3e 66 6c  Taken( (pIn1->fl
12860 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21  ags & MEM_Null)!
12870 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 28 70  =0, 2);.  if( (p
12880 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
12890 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a 20 20 20  _Null)!=0 ){.   
128a0 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
128b0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
128c0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74  ../* Opcode: Not
128d0 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a  Null P1 P2 * * *
128e0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
128f0 20 72 5b 50 31 5d 21 3d 4e 55 4c 4c 20 67 6f 74   r[P1]!=NULL got
12900 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20  o P2.**.** Jump 
12910 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c  to P2 if the val
12920 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
12930 31 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20 20  1 is not NULL.  
12940 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 4e  .*/.case OP_NotN
12950 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ull: {          
12960 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
12970 4e 4f 54 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69  NOTNULL, jump, i
12980 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
12990 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
129a0 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
129b0 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
129c0 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 2c 20 32   MEM_Null)==0, 2
129d0 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
129e0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
129f0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f  )==0 ){.    goto
12a00 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d   jump_to_p2;.  }
12a10 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
12a20 4f 70 63 6f 64 65 3a 20 49 66 4e 75 6c 6c 52 6f  Opcode: IfNullRo
12a30 77 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  w P1 P2 P3 * *.*
12a40 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 50  * Synopsis: if P
12a50 31 2e 6e 75 6c 6c 52 6f 77 20 74 68 65 6e 20 72  1.nullRow then r
12a60 5b 50 33 5d 3d 4e 55 4c 4c 2c 20 67 6f 74 6f 20  [P3]=NULL, goto 
12a70 50 32 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74  P2.**.** Check t
12a80 68 65 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20  he cursor P1 to 
12a90 73 65 65 20 69 66 20 69 74 20 69 73 20 63 75 72  see if it is cur
12aa0 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20  rently pointing 
12ab0 61 74 20 61 20 4e 55 4c 4c 20 72 6f 77 2e 0a 2a  at a NULL row..*
12ac0 2a 20 49 66 20 69 74 20 69 73 2c 20 74 68 65 6e  * If it is, then
12ad0 20 73 65 74 20 72 65 67 69 73 74 65 72 20 50 33   set register P3
12ae0 20 74 6f 20 4e 55 4c 4c 20 61 6e 64 20 6a 75 6d   to NULL and jum
12af0 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
12b00 20 50 32 2e 0a 2a 2a 20 49 66 20 50 31 20 69 73   P2..** If P1 is
12b10 20 6e 6f 74 20 6f 6e 20 61 20 4e 55 4c 4c 20 72   not on a NULL r
12b20 6f 77 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  ow, then fall th
12b30 72 6f 75 67 68 20 77 69 74 68 6f 75 74 20 6d 61  rough without ma
12b40 6b 69 6e 67 20 61 6e 79 0a 2a 2a 20 63 68 61 6e  king any.** chan
12b50 67 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ges..*/.case OP_
12b60 49 66 4e 75 6c 6c 52 6f 77 3a 20 7b 20 20 20 20  IfNullRow: {    
12b70 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
12b80 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
12b90 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
12ba0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
12bb0 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72  assert( p->apCsr
12bc0 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b 0a  [pOp->p1]!=0 );.
12bd0 20 20 69 66 28 20 70 2d 3e 61 70 43 73 72 5b 70    if( p->apCsr[p
12be0 4f 70 2d 3e 70 31 5d 2d 3e 6e 75 6c 6c 52 6f 77  Op->p1]->nullRow
12bf0 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
12c00 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 61 4d  dbeMemSetNull(aM
12c10 65 6d 20 2b 20 70 4f 70 2d 3e 70 33 29 3b 0a 20  em + pOp->p3);. 
12c20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
12c30 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  p2;.  }.  break;
12c40 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
12c50 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20 50  olumn P1 P2 P3 P
12c60 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
12c70 3a 20 72 5b 50 33 5d 3d 50 58 0a 2a 2a 0a 2a 2a  : r[P3]=PX.**.**
12c80 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 64   Interpret the d
12c90 61 74 61 20 74 68 61 74 20 63 75 72 73 6f 72 20  ata that cursor 
12ca0 50 31 20 70 6f 69 6e 74 73 20 74 6f 20 61 73 20  P1 points to as 
12cb0 61 20 73 74 72 75 63 74 75 72 65 20 62 75 69 6c  a structure buil
12cc0 74 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20 4d  t using.** the M
12cd0 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74 72 75  akeRecord instru
12ce0 63 74 69 6f 6e 2e 20 20 28 53 65 65 20 74 68 65  ction.  (See the
12cf0 20 4d 61 6b 65 52 65 63 6f 72 64 20 6f 70 63 6f   MakeRecord opco
12d00 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  de for additiona
12d10 6c 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  l.** information
12d20 20 61 62 6f 75 74 20 74 68 65 20 66 6f 72 6d 61   about the forma
12d30 74 20 6f 66 20 74 68 65 20 64 61 74 61 2e 29 20  t of the data.) 
12d40 20 45 78 74 72 61 63 74 20 74 68 65 20 50 32 2d   Extract the P2-
12d50 74 68 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 66 72 6f  th column.** fro
12d60 6d 20 74 68 69 73 20 72 65 63 6f 72 64 2e 20 20  m this record.  
12d70 49 66 20 74 68 65 72 65 20 61 72 65 20 6c 65 73  If there are les
12d80 73 20 74 68 61 74 20 28 50 32 2b 31 29 20 0a 2a  s that (P2+1) .*
12d90 2a 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20  * values in the 
12da0 72 65 63 6f 72 64 2c 20 65 78 74 72 61 63 74 20  record, extract 
12db0 61 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68  a NULL..**.** Th
12dc0 65 20 76 61 6c 75 65 20 65 78 74 72 61 63 74 65  e value extracte
12dd0 64 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  d is stored in r
12de0 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a  egister P3..**.*
12df0 2a 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20  * If the record 
12e00 63 6f 6e 74 61 69 6e 73 20 66 65 77 65 72 20 74  contains fewer t
12e10 68 61 6e 20 50 32 20 66 69 65 6c 64 73 2c 20 74  han P2 fields, t
12e20 68 65 6e 20 65 78 74 72 61 63 74 20 61 20 4e 55  hen extract a NU
12e30 4c 4c 2e 20 20 4f 72 2c 0a 2a 2a 20 69 66 20 74  LL.  Or,.** if t
12e40 68 65 20 50 34 20 61 72 67 75 6d 65 6e 74 20 69  he P4 argument i
12e50 73 20 61 20 50 34 5f 4d 45 4d 20 75 73 65 20 74  s a P4_MEM use t
12e60 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
12e70 50 34 20 61 72 67 75 6d 65 6e 74 20 61 73 0a 2a  P4 argument as.*
12e80 2a 20 74 68 65 20 72 65 73 75 6c 74 2e 0a 2a 2a  * the result..**
12e90 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41  .** If the OPFLA
12ea0 47 5f 43 4c 45 41 52 43 41 43 48 45 20 62 69 74  G_CLEARCACHE bit
12eb0 20 69 73 20 73 65 74 20 6f 6e 20 50 35 20 61 6e   is set on P5 an
12ec0 64 20 50 31 20 69 73 20 61 20 70 73 65 75 64 6f  d P1 is a pseudo
12ed0 2d 74 61 62 6c 65 20 63 75 72 73 6f 72 2c 0a 2a  -table cursor,.*
12ee0 2a 20 74 68 65 6e 20 74 68 65 20 63 61 63 68 65  * then the cache
12ef0 20 6f 66 20 74 68 65 20 63 75 72 73 6f 72 20 69   of the cursor i
12f00 73 20 72 65 73 65 74 20 70 72 69 6f 72 20 74 6f  s reset prior to
12f10 20 65 78 74 72 61 63 74 69 6e 67 20 74 68 65 20   extracting the 
12f20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 54 68 65 20 66  column..** The f
12f30 69 72 73 74 20 4f 50 5f 43 6f 6c 75 6d 6e 20 61  irst OP_Column a
12f40 67 61 69 6e 73 74 20 61 20 70 73 65 75 64 6f 2d  gainst a pseudo-
12f50 74 61 62 6c 65 20 61 66 74 65 72 20 74 68 65 20  table after the 
12f60 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63 6f 6e  value of the con
12f70 74 65 6e 74 0a 2a 2a 20 72 65 67 69 73 74 65 72  tent.** register
12f80 20 68 61 73 20 63 68 61 6e 67 65 64 20 73 68 6f   has changed sho
12f90 75 6c 64 20 68 61 76 65 20 74 68 69 73 20 62 69  uld have this bi
12fa0 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  t set..**.** If 
12fb0 74 68 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54  the OPFLAG_LENGT
12fc0 48 41 52 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f  HARG and OPFLAG_
12fd0 54 59 50 45 4f 46 41 52 47 20 62 69 74 73 20 61  TYPEOFARG bits a
12fe0 72 65 20 73 65 74 20 6f 6e 20 50 35 20 74 68 65  re set on P5 the
12ff0 6e 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 20  n.** the result 
13000 69 73 20 67 75 61 72 61 6e 74 65 65 64 20 74 6f  is guaranteed to
13010 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 61 73   only be used as
13020 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 6f 66   the argument of
13030 20 61 20 6c 65 6e 67 74 68 28 29 0a 2a 2a 20 6f   a length().** o
13040 72 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74  r typeof() funct
13050 69 6f 6e 2c 20 72 65 73 70 65 63 74 69 76 65 6c  ion, respectivel
13060 79 2e 20 20 54 68 65 20 6c 6f 61 64 69 6e 67 20  y.  The loading 
13070 6f 66 20 6c 61 72 67 65 20 62 6c 6f 62 73 20 63  of large blobs c
13080 61 6e 20 62 65 0a 2a 2a 20 73 6b 69 70 70 65 64  an be.** skipped
13090 20 66 6f 72 20 6c 65 6e 67 74 68 28 29 20 61 6e   for length() an
130a0 64 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 20 6c 6f  d all content lo
130b0 61 64 69 6e 67 20 63 61 6e 20 62 65 20 73 6b 69  ading can be ski
130c0 70 70 65 64 20 66 6f 72 20 74 79 70 65 6f 66 28  pped for typeof(
130d0 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f  )..*/.case OP_Co
130e0 6c 75 6d 6e 3a 20 7b 0a 20 20 69 6e 74 20 70 32  lumn: {.  int p2
130f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
13100 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 74 6f  column number to
13110 20 72 65 74 72 69 65 76 65 20 2a 2f 0a 20 20 56   retrieve */.  V
13120 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20  dbeCursor *pC;  
13130 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75    /* The VDBE cu
13140 72 73 6f 72 20 2a 2f 0a 20 20 42 74 43 75 72 73  rsor */.  BtCurs
13150 6f 72 20 2a 70 43 72 73 72 3b 20 20 20 2f 2a 20  or *pCrsr;   /* 
13160 54 68 65 20 42 54 72 65 65 20 63 75 72 73 6f 72  The BTree cursor
13170 20 2a 2f 0a 20 20 75 33 32 20 2a 61 4f 66 66 73   */.  u32 *aOffs
13180 65 74 3b 20 20 20 20 20 20 2f 2a 20 61 4f 66 66  et;      /* aOff
13190 73 65 74 5b 69 5d 20 69 73 20 6f 66 66 73 65 74  set[i] is offset
131a0 20 74 6f 20 73 74 61 72 74 20 6f 66 20 64 61 74   to start of dat
131b0 61 20 66 6f 72 20 69 2d 74 68 20 63 6f 6c 75 6d  a for i-th colum
131c0 6e 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b 20  n */.  int len; 
131d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
131e0 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73   length of the s
131f0 65 72 69 61 6c 69 7a 65 64 20 64 61 74 61 20 66  erialized data f
13200 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 2a 2f  or the column */
13210 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20  .  int i;       
13220 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f        /* Loop co
13230 75 6e 74 65 72 20 2a 2f 0a 20 20 4d 65 6d 20 2a  unter */.  Mem *
13240 70 44 65 73 74 3b 20 20 20 20 20 20 20 20 2f 2a  pDest;        /*
13250 20 57 68 65 72 65 20 74 6f 20 77 72 69 74 65 20   Where to write 
13260 74 68 65 20 65 78 74 72 61 63 74 65 64 20 76 61  the extracted va
13270 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d 20 73 4d 65  lue */.  Mem sMe
13280 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  m;          /* F
13290 6f 72 20 73 74 6f 72 69 6e 67 20 74 68 65 20 72  or storing the r
132a0 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f  ecord being deco
132b0 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75  ded */.  const u
132c0 38 20 2a 7a 44 61 74 61 3b 20 20 20 2f 2a 20 50  8 *zData;   /* P
132d0 61 72 74 20 6f 66 20 74 68 65 20 72 65 63 6f 72  art of the recor
132e0 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64 20  d being decoded 
132f0 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a  */.  const u8 *z
13300 48 64 72 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20  Hdr;    /* Next 
13310 75 6e 70 61 72 73 65 64 20 62 79 74 65 20 6f 66  unparsed byte of
13320 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a 20   the header */. 
13330 20 63 6f 6e 73 74 20 75 38 20 2a 7a 45 6e 64 48   const u8 *zEndH
13340 64 72 3b 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74  dr; /* Pointer t
13350 6f 20 66 69 72 73 74 20 62 79 74 65 20 61 66 74  o first byte aft
13360 65 72 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f  er the header */
13370 0a 20 20 75 36 34 20 6f 66 66 73 65 74 36 34 3b  .  u64 offset64;
13380 20 20 20 20 20 20 2f 2a 20 36 34 2d 62 69 74 20        /* 64-bit 
13390 6f 66 66 73 65 74 20 2a 2f 0a 20 20 75 33 32 20  offset */.  u32 
133a0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  t;             /
133b0 2a 20 41 20 74 79 70 65 20 63 6f 64 65 20 66 72  * A type code fr
133c0 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 20 68 65  om the record he
133d0 61 64 65 72 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  ader */.  Mem *p
133e0 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Reg;         /* 
133f0 50 73 65 75 64 6f 54 61 62 6c 65 20 69 6e 70 75  PseudoTable inpu
13400 74 20 72 65 67 69 73 74 65 72 20 2a 2f 0a 0a 20  t register */.. 
13410 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
13420 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 32 20 3d 20  Op->p1];.  p2 = 
13430 70 4f 70 2d 3e 70 32 3b 0a 0a 20 20 2f 2a 20 49  pOp->p2;..  /* I
13440 66 20 74 68 65 20 63 75 72 73 6f 72 20 63 61 63  f the cursor cac
13450 68 65 20 69 73 20 73 74 61 6c 65 20 28 6d 65 61  he is stale (mea
13460 6e 69 6e 67 20 69 74 20 69 73 20 6e 6f 74 20 63  ning it is not c
13470 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20 61  urrently point a
13480 74 0a 20 20 2a 2a 20 74 68 65 20 63 6f 72 72 65  t.  ** the corre
13490 63 74 20 72 6f 77 29 20 74 68 65 6e 20 62 72 69  ct row) then bri
134a0 6e 67 20 69 74 20 75 70 2d 74 6f 2d 64 61 74 65  ng it up-to-date
134b0 20 62 79 20 64 6f 69 6e 67 20 74 68 65 20 6e 65   by doing the ne
134c0 63 65 73 73 61 72 79 20 0a 20 20 2a 2a 20 42 2d  cessary .  ** B-
134d0 54 72 65 65 20 73 65 65 6b 2e 20 2a 2f 0a 20 20  Tree seek. */.  
134e0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
134f0 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 26 70 43  CursorMoveto(&pC
13500 2c 20 26 70 32 29 3b 0a 20 20 69 66 28 20 72 63  , &p2);.  if( rc
13510 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
13520 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 61  e_to_error;..  a
13530 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
13540 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d   && pOp->p3<=(p-
13550 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
13560 72 73 6f 72 29 20 29 3b 0a 20 20 70 44 65 73 74  rsor) );.  pDest
13570 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
13580 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  ];.  memAboutToC
13590 68 61 6e 67 65 28 70 2c 20 70 44 65 73 74 29 3b  hange(p, pDest);
135a0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
135b0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
135c0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
135d0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
135e0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 32 3c 70  ;.  assert( p2<p
135f0 43 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a 20 20 61  C->nField );.  a
13600 4f 66 66 73 65 74 20 3d 20 70 43 2d 3e 61 4f 66  Offset = pC->aOf
13610 66 73 65 74 3b 0a 20 20 61 73 73 65 72 74 28 20  fset;.  assert( 
13620 70 43 2d 3e 65 43 75 72 54 79 70 65 21 3d 43 55  pC->eCurType!=CU
13630 52 54 59 50 45 5f 56 54 41 42 20 29 3b 0a 20 20  RTYPE_VTAB );.  
13640 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
13650 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f 50 53  Type!=CURTYPE_PS
13660 45 55 44 4f 20 7c 7c 20 70 43 2d 3e 6e 75 6c 6c  EUDO || pC->null
13670 52 6f 77 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Row );.  assert(
13680 20 70 43 2d 3e 65 43 75 72 54 79 70 65 21 3d 43   pC->eCurType!=C
13690 55 52 54 59 50 45 5f 53 4f 52 54 45 52 20 29 3b  URTYPE_SORTER );
136a0 0a 0a 20 20 69 66 28 20 70 43 2d 3e 63 61 63 68  ..  if( pC->cach
136b0 65 53 74 61 74 75 73 21 3d 70 2d 3e 63 61 63 68  eStatus!=p->cach
136c0 65 43 74 72 20 29 7b 20 20 20 20 20 20 20 20 20  eCtr ){         
136d0 20 20 20 20 20 20 20 2f 2a 4f 50 54 49 4d 49 5a         /*OPTIMIZ
136e0 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f  ATION-IF-FALSE*/
136f0 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c  .    if( pC->nul
13700 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20 20 69 66  lRow ){.      if
13710 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
13720 43 55 52 54 59 50 45 5f 50 53 45 55 44 4f 20 29  CURTYPE_PSEUDO )
13730 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
13740 28 20 70 43 2d 3e 75 63 2e 70 73 65 75 64 6f 54  ( pC->uc.pseudoT
13750 61 62 6c 65 52 65 67 3e 30 20 29 3b 0a 20 20 20  ableReg>0 );.   
13760 20 20 20 20 20 70 52 65 67 20 3d 20 26 61 4d 65       pReg = &aMe
13770 6d 5b 70 43 2d 3e 75 63 2e 70 73 65 75 64 6f 54  m[pC->uc.pseudoT
13780 61 62 6c 65 52 65 67 5d 3b 0a 20 20 20 20 20 20  ableReg];.      
13790 20 20 61 73 73 65 72 74 28 20 70 52 65 67 2d 3e    assert( pReg->
137a0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62  flags & MEM_Blob
137b0 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
137c0 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
137d0 52 65 67 29 20 29 3b 0a 20 20 20 20 20 20 20 20  Reg) );.        
137e0 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20  pC->payloadSize 
137f0 3d 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 70 52  = pC->szRow = pR
13800 65 67 2d 3e 6e 3b 0a 20 20 20 20 20 20 20 20 70  eg->n;.        p
13810 43 2d 3e 61 52 6f 77 20 3d 20 28 75 38 2a 29 70  C->aRow = (u8*)p
13820 52 65 67 2d 3e 7a 3b 0a 20 20 20 20 20 20 7d 65  Reg->z;.      }e
13830 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  lse{.        sql
13840 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
13850 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20 20  ll(pDest);.     
13860 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d     goto op_colum
13870 6e 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20  n_out;.      }. 
13880 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
13890 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70  pCrsr = pC->uc.p
138a0 43 75 72 73 6f 72 3b 0a 20 20 20 20 20 20 61 73  Cursor;.      as
138b0 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
138c0 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
138d0 45 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  E );.      asser
138e0 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20 20 20  t( pCrsr );.    
138f0 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
13900 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61  3BtreeCursorIsVa
13910 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a 20 20  lid(pCrsr) );.  
13920 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53      pC->payloadS
13930 69 7a 65 20 3d 20 73 71 6c 69 74 65 33 42 74 72  ize = sqlite3Btr
13940 65 65 50 61 79 6c 6f 61 64 53 69 7a 65 28 70 43  eePayloadSize(pC
13950 72 73 72 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e  rsr);.      pC->
13960 61 52 6f 77 20 3d 20 73 71 6c 69 74 65 33 42 74  aRow = sqlite3Bt
13970 72 65 65 50 61 79 6c 6f 61 64 46 65 74 63 68 28  reePayloadFetch(
13980 70 43 72 73 72 2c 20 26 70 43 2d 3e 73 7a 52 6f  pCrsr, &pC->szRo
13990 77 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  w);.      assert
139a0 28 20 70 43 2d 3e 73 7a 52 6f 77 3c 3d 70 43 2d  ( pC->szRow<=pC-
139b0 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 29 3b 0a  >payloadSize );.
139c0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43        assert( pC
139d0 2d 3e 73 7a 52 6f 77 3c 3d 36 35 35 33 36 20 29  ->szRow<=65536 )
139e0 3b 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 70 61  ;  /* Maximum pa
139f0 67 65 20 73 69 7a 65 20 69 73 20 36 34 4b 69 42  ge size is 64KiB
13a00 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 43   */.      if( pC
13a10 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3e 20  ->payloadSize > 
13a20 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b  (u32)db->aLimit[
13a30 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
13a40 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 20 20  GTH] ){.        
13a50 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
13a60 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
13a70 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
13a80 3d 20 70 2d 3e 63 61 63 68 65 43 74 72 3b 0a 20  = p->cacheCtr;. 
13a90 20 20 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65     pC->iHdrOffse
13aa0 74 20 3d 20 67 65 74 56 61 72 69 6e 74 33 32 28  t = getVarint32(
13ab0 70 43 2d 3e 61 52 6f 77 2c 20 61 4f 66 66 73 65  pC->aRow, aOffse
13ac0 74 5b 30 5d 29 3b 0a 20 20 20 20 70 43 2d 3e 6e  t[0]);.    pC->n
13ad0 48 64 72 50 61 72 73 65 64 20 3d 20 30 3b 0a 0a  HdrParsed = 0;..
13ae0 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 73 7a 52  .    if( pC->szR
13af0 6f 77 3c 61 4f 66 66 73 65 74 5b 30 5d 20 29 7b  ow<aOffset[0] ){
13b00 20 20 20 20 20 20 2f 2a 4f 50 54 49 4d 49 5a 41        /*OPTIMIZA
13b10 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a  TION-IF-FALSE*/.
13b20 20 20 20 20 20 20 2f 2a 20 70 43 2d 3e 61 52 6f        /* pC->aRo
13b30 77 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20  w does not have 
13b40 74 6f 20 68 6f 6c 64 20 74 68 65 20 65 6e 74 69  to hold the enti
13b50 72 65 20 72 6f 77 2c 20 62 75 74 20 69 74 20 64  re row, but it d
13b60 6f 65 73 20 61 74 20 6c 65 61 73 74 0a 20 20 20  oes at least.   
13b70 20 20 20 2a 2a 20 6e 65 65 64 20 74 6f 20 63 6f     ** need to co
13b80 76 65 72 20 74 68 65 20 68 65 61 64 65 72 20 6f  ver the header o
13b90 66 20 74 68 65 20 72 65 63 6f 72 64 2e 20 20 49  f the record.  I
13ba0 66 20 70 43 2d 3e 61 52 6f 77 20 64 6f 65 73 20  f pC->aRow does 
13bb0 6e 6f 74 20 63 6f 6e 74 61 69 6e 0a 20 20 20 20  not contain.    
13bc0 20 20 2a 2a 20 74 68 65 20 63 6f 6d 70 6c 65 74    ** the complet
13bd0 65 20 68 65 61 64 65 72 2c 20 74 68 65 6e 20 73  e header, then s
13be0 65 74 20 69 74 20 74 6f 20 7a 65 72 6f 2c 20 66  et it to zero, f
13bf0 6f 72 63 69 6e 67 20 74 68 65 20 68 65 61 64 65  orcing the heade
13c00 72 20 74 6f 20 62 65 0a 20 20 20 20 20 20 2a 2a  r to be.      **
13c10 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c   dynamically all
13c20 6f 63 61 74 65 64 2e 20 2a 2f 0a 20 20 20 20 20  ocated. */.     
13c30 20 70 43 2d 3e 61 52 6f 77 20 3d 20 30 3b 0a 20   pC->aRow = 0;. 
13c40 20 20 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20 3d       pC->szRow =
13c50 20 30 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 4d 61   0;..      /* Ma
13c60 6b 65 20 73 75 72 65 20 61 20 63 6f 72 72 75 70  ke sure a corrup
13c70 74 20 64 61 74 61 62 61 73 65 20 68 61 73 20 6e  t database has n
13c80 6f 74 20 67 69 76 65 6e 20 75 73 20 61 6e 20 6f  ot given us an o
13c90 76 65 72 73 69 7a 65 20 68 65 61 64 65 72 2e 0a  versize header..
13ca0 20 20 20 20 20 20 2a 2a 20 44 6f 20 74 68 69 73        ** Do this
13cb0 20 6e 6f 77 20 74 6f 20 61 76 6f 69 64 20 61 6e   now to avoid an
13cc0 20 6f 76 65 72 73 69 7a 65 20 6d 65 6d 6f 72 79   oversize memory
13cd0 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 0a 20 20 20   allocation..   
13ce0 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 54     **.      ** T
13cf0 79 70 65 20 65 6e 74 72 69 65 73 20 63 61 6e 20  ype entries can 
13d00 62 65 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64  be between 1 and
13d10 20 35 20 62 79 74 65 73 20 65 61 63 68 2e 20 20   5 bytes each.  
13d20 42 75 74 20 34 20 61 6e 64 20 35 20 62 79 74 65  But 4 and 5 byte
13d30 0a 20 20 20 20 20 20 2a 2a 20 74 79 70 65 73 20  .      ** types 
13d40 75 73 65 20 73 6f 20 6d 75 63 68 20 64 61 74 61  use so much data
13d50 20 73 70 61 63 65 20 74 68 61 74 20 74 68 65 72   space that ther
13d60 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 34 30  e can only be 40
13d70 39 36 20 61 6e 64 20 33 32 20 6f 66 0a 20 20 20  96 and 32 of.   
13d80 20 20 20 2a 2a 20 74 68 65 6d 2c 20 72 65 73 70     ** them, resp
13d90 65 63 74 69 76 65 6c 79 2e 20 20 53 6f 20 74 68  ectively.  So th
13da0 65 20 6d 61 78 69 6d 75 6d 20 68 65 61 64 65 72  e maximum header
13db0 20 6c 65 6e 67 74 68 20 72 65 73 75 6c 74 73 20   length results 
13dc0 66 72 6f 6d 20 61 0a 20 20 20 20 20 20 2a 2a 20  from a.      ** 
13dd0 33 2d 62 79 74 65 20 74 79 70 65 20 66 6f 72 20  3-byte type for 
13de0 65 61 63 68 20 6f 66 20 74 68 65 20 6d 61 78 69  each of the maxi
13df0 6d 75 6d 20 6f 66 20 33 32 37 36 38 20 63 6f 6c  mum of 32768 col
13e00 75 6d 6e 73 20 70 6c 75 73 20 74 68 72 65 65 0a  umns plus three.
13e10 20 20 20 20 20 20 2a 2a 20 65 78 74 72 61 20 62        ** extra b
13e20 79 74 65 73 20 66 6f 72 20 74 68 65 20 68 65 61  ytes for the hea
13e30 64 65 72 20 6c 65 6e 67 74 68 20 69 74 73 65 6c  der length itsel
13e40 66 2e 20 20 33 32 37 36 38 2a 33 20 2b 20 33 20  f.  32768*3 + 3 
13e50 3d 20 39 38 33 30 37 2e 0a 20 20 20 20 20 20 2a  = 98307..      *
13e60 2f 0a 20 20 20 20 20 20 69 66 28 20 61 4f 66 66  /.      if( aOff
13e70 73 65 74 5b 30 5d 20 3e 20 39 38 33 30 37 20 7c  set[0] > 98307 |
13e80 7c 20 61 4f 66 66 73 65 74 5b 30 5d 20 3e 20 70  | aOffset[0] > p
13e90 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 29  C->payloadSize )
13ea0 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53  {.        rc = S
13eb0 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b  QLITE_CORRUPT_BK
13ec0 50 54 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f  PT;.        goto
13ed0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
13ee0 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ror;.      }.   
13ef0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a   }else{.      /*
13f00 20 54 68 69 73 20 69 73 20 61 6e 20 6f 70 74 69   This is an opti
13f10 6d 69 7a 61 74 69 6f 6e 2e 20 20 42 79 20 73 6b  mization.  By sk
13f20 69 70 70 69 6e 67 20 6f 76 65 72 20 74 68 65 20  ipping over the 
13f30 66 69 72 73 74 20 66 65 77 20 74 65 73 74 73 0a  first few tests.
13f40 20 20 20 20 20 20 2a 2a 20 28 65 78 3a 20 70 43        ** (ex: pC
13f50 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d 70 32  ->nHdrParsed<=p2
13f60 29 20 69 6e 20 74 68 65 20 6e 65 78 74 20 73 65  ) in the next se
13f70 63 74 69 6f 6e 2c 20 77 65 20 61 63 68 69 65 76  ction, we achiev
13f80 65 20 61 0a 20 20 20 20 20 20 2a 2a 20 6d 65 61  e a.      ** mea
13f90 73 75 72 61 62 6c 65 20 70 65 72 66 6f 72 6d 61  surable performa
13fa0 6e 63 65 20 67 61 69 6e 2e 0a 20 20 20 20 20 20  nce gain..      
13fb0 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 54 68 69 73  **.      ** This
13fc0 20 62 72 61 6e 63 68 20 69 73 20 74 61 6b 65 6e   branch is taken
13fd0 20 65 76 65 6e 20 69 66 20 61 4f 66 66 73 65 74   even if aOffset
13fe0 5b 30 5d 3d 3d 30 2e 20 20 53 75 63 68 20 61 20  [0]==0.  Such a 
13ff0 72 65 63 6f 72 64 20 69 73 20 6e 65 76 65 72 0a  record is never.
14000 20 20 20 20 20 20 2a 2a 20 67 65 6e 65 72 61 74        ** generat
14010 65 64 20 62 79 20 53 51 4c 69 74 65 2c 20 61 6e  ed by SQLite, an
14020 64 20 63 6f 75 6c 64 20 62 65 20 63 6f 6e 73 69  d could be consi
14030 64 65 72 65 64 20 63 6f 72 72 75 70 74 69 6f 6e  dered corruption
14040 2c 20 62 75 74 20 77 65 0a 20 20 20 20 20 20 2a  , but we.      *
14050 2a 20 61 63 63 65 70 74 20 69 74 20 66 6f 72 20  * accept it for 
14060 68 69 73 74 6f 72 69 63 61 6c 20 72 65 61 73 6f  historical reaso
14070 6e 73 2e 20 20 57 68 65 6e 20 61 4f 66 66 73 65  ns.  When aOffse
14080 74 5b 30 5d 3d 3d 30 2c 20 74 68 65 20 63 6f 64  t[0]==0, the cod
14090 65 20 74 68 69 73 0a 20 20 20 20 20 20 2a 2a 20  e this.      ** 
140a0 62 72 61 6e 63 68 20 6a 75 6d 70 73 20 74 6f 20  branch jumps to 
140b0 72 65 61 64 73 20 70 61 73 74 20 74 68 65 20 65  reads past the e
140c0 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  nd of the record
140d0 2c 20 62 75 74 20 6e 65 76 65 72 20 6d 6f 72 65  , but never more
140e0 0a 20 20 20 20 20 20 2a 2a 20 74 68 61 6e 20 61  .      ** than a
140f0 20 66 65 77 20 62 79 74 65 73 2e 20 20 45 76 65   few bytes.  Eve
14100 6e 20 69 66 20 74 68 65 20 72 65 63 6f 72 64 20  n if the record 
14110 6f 63 63 75 72 73 20 61 74 20 74 68 65 20 65 6e  occurs at the en
14120 64 20 6f 66 20 74 68 65 20 70 61 67 65 0a 20 20  d of the page.  
14130 20 20 20 20 2a 2a 20 63 6f 6e 74 65 6e 74 20 61      ** content a
14140 72 65 61 2c 20 74 68 65 20 22 70 61 67 65 20 68  rea, the "page h
14150 65 61 64 65 72 22 20 63 6f 6d 65 73 20 61 66 74  eader" comes aft
14160 65 72 20 74 68 65 20 70 61 67 65 20 63 6f 6e 74  er the page cont
14170 65 6e 74 20 61 6e 64 20 73 6f 0a 20 20 20 20 20  ent and so.     
14180 20 2a 2a 20 74 68 69 73 20 6f 76 65 72 72 65 61   ** this overrea
14190 64 20 69 73 20 68 61 72 6d 6c 65 73 73 2e 20 20  d is harmless.  
141a0 53 69 6d 69 6c 61 72 20 6f 76 65 72 72 65 61 64  Similar overread
141b0 73 20 63 61 6e 20 6f 63 63 75 72 20 66 6f 72 20  s can occur for 
141c0 61 20 63 6f 72 72 75 70 74 0a 20 20 20 20 20 20  a corrupt.      
141d0 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ** database file
141e0 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
141f0 20 7a 44 61 74 61 20 3d 20 70 43 2d 3e 61 52 6f   zData = pC->aRo
14200 77 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  w;.      assert(
14210 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c   pC->nHdrParsed<
14220 3d 70 32 20 29 3b 20 20 20 20 20 20 20 20 20 2f  =p2 );         /
14230 2a 20 43 6f 6e 64 69 74 69 6f 6e 61 6c 20 73 6b  * Conditional sk
14240 69 70 70 65 64 20 2a 2f 0a 20 20 20 20 20 20 74  ipped */.      t
14250 65 73 74 63 61 73 65 28 20 61 4f 66 66 73 65 74  estcase( aOffset
14260 5b 30 5d 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  [0]==0 );.      
14270 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 72  goto op_column_r
14280 65 61 64 5f 68 65 61 64 65 72 3b 0a 20 20 20 20  ead_header;.    
14290 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65  }.  }..  /* Make
142a0 20 73 75 72 65 20 61 74 20 6c 65 61 73 74 20 74   sure at least t
142b0 68 65 20 66 69 72 73 74 20 70 32 2b 31 20 65 6e  he first p2+1 en
142c0 74 72 69 65 73 20 6f 66 20 74 68 65 20 68 65 61  tries of the hea
142d0 64 65 72 20 68 61 76 65 20 62 65 65 6e 0a 20 20  der have been.  
142e0 2a 2a 20 70 61 72 73 65 64 20 61 6e 64 20 76 61  ** parsed and va
142f0 6c 69 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  lid information 
14300 69 73 20 69 6e 20 61 4f 66 66 73 65 74 5b 5d 20  is in aOffset[] 
14310 61 6e 64 20 70 43 2d 3e 61 54 79 70 65 5b 5d 2e  and pC->aType[].
14320 0a 20 20 2a 2f 0a 20 20 69 66 28 20 70 43 2d 3e  .  */.  if( pC->
14330 6e 48 64 72 50 61 72 73 65 64 3c 3d 70 32 20 29  nHdrParsed<=p2 )
14340 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72  {.    /* If ther
14350 65 20 69 73 20 6d 6f 72 65 20 68 65 61 64 65 72  e is more header
14360 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 70   available for p
14370 61 72 73 69 6e 67 20 69 6e 20 74 68 65 20 72 65  arsing in the re
14380 63 6f 72 64 2c 20 74 72 79 0a 20 20 20 20 2a 2a  cord, try.    **
14390 20 74 6f 20 65 78 74 72 61 63 74 20 61 64 64 69   to extract addi
143a0 74 69 6f 6e 61 6c 20 66 69 65 6c 64 73 20 75 70  tional fields up
143b0 20 74 68 72 6f 75 67 68 20 74 68 65 20 70 32 2b   through the p2+
143c0 31 2d 74 68 20 66 69 65 6c 64 20 0a 20 20 20 20  1-th field .    
143d0 2a 2f 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 69  */.    if( pC->i
143e0 48 64 72 4f 66 66 73 65 74 3c 61 4f 66 66 73 65  HdrOffset<aOffse
143f0 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 2f 2a  t[0] ){.      /*
14400 20 4d 61 6b 65 20 73 75 72 65 20 7a 44 61 74 61   Make sure zData
14410 20 70 6f 69 6e 74 73 20 74 6f 20 65 6e 6f 75 67   points to enoug
14420 68 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  h of the record 
14430 74 6f 20 63 6f 76 65 72 20 74 68 65 20 68 65 61  to cover the hea
14440 64 65 72 2e 20 2a 2f 0a 20 20 20 20 20 20 69 66  der. */.      if
14450 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 7b  ( pC->aRow==0 ){
14460 0a 20 20 20 20 20 20 20 20 6d 65 6d 73 65 74 28  .        memset(
14470 26 73 4d 65 6d 2c 20 30 2c 20 73 69 7a 65 6f 66  &sMem, 0, sizeof
14480 28 73 4d 65 6d 29 29 3b 0a 20 20 20 20 20 20 20  (sMem));.       
14490 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
144a0 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70 43  eMemFromBtree(pC
144b0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 30 2c  ->uc.pCursor, 0,
144c0 20 61 4f 66 66 73 65 74 5b 30 5d 2c 20 26 73 4d   aOffset[0], &sM
144d0 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  em);.        if(
144e0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
144f0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
14500 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
14510 20 20 7a 44 61 74 61 20 3d 20 28 75 38 2a 29 73    zData = (u8*)s
14520 4d 65 6d 2e 7a 3b 0a 20 20 20 20 20 20 7d 65 6c  Mem.z;.      }el
14530 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 44 61 74  se{.        zDat
14540 61 20 3d 20 70 43 2d 3e 61 52 6f 77 3b 0a 20 20  a = pC->aRow;.  
14550 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f      }.  .      /
14560 2a 20 46 69 6c 6c 20 69 6e 20 70 43 2d 3e 61 54  * Fill in pC->aT
14570 79 70 65 5b 69 5d 20 61 6e 64 20 61 4f 66 66 73  ype[i] and aOffs
14580 65 74 5b 69 5d 20 76 61 6c 75 65 73 20 74 68 72  et[i] values thr
14590 6f 75 67 68 20 74 68 65 20 70 32 2d 74 68 20 66  ough the p2-th f
145a0 69 65 6c 64 2e 20 2a 2f 0a 20 20 20 20 6f 70 5f  ield. */.    op_
145b0 63 6f 6c 75 6d 6e 5f 72 65 61 64 5f 68 65 61 64  column_read_head
145c0 65 72 3a 0a 20 20 20 20 20 20 69 20 3d 20 70 43  er:.      i = pC
145d0 2d 3e 6e 48 64 72 50 61 72 73 65 64 3b 0a 20 20  ->nHdrParsed;.  
145e0 20 20 20 20 6f 66 66 73 65 74 36 34 20 3d 20 61      offset64 = a
145f0 4f 66 66 73 65 74 5b 69 5d 3b 0a 20 20 20 20 20  Offset[i];.     
14600 20 7a 48 64 72 20 3d 20 7a 44 61 74 61 20 2b 20   zHdr = zData + 
14610 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 3b 0a  pC->iHdrOffset;.
14620 20 20 20 20 20 20 7a 45 6e 64 48 64 72 20 3d 20        zEndHdr = 
14630 7a 44 61 74 61 20 2b 20 61 4f 66 66 73 65 74 5b  zData + aOffset[
14640 30 5d 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61  0];.      testca
14650 73 65 28 20 7a 48 64 72 3e 3d 7a 45 6e 64 48 64  se( zHdr>=zEndHd
14660 72 20 29 3b 0a 20 20 20 20 20 20 64 6f 7b 0a 20  r );.      do{. 
14670 20 20 20 20 20 20 20 69 66 28 20 28 74 20 3d 20         if( (t = 
14680 7a 48 64 72 5b 30 5d 29 3c 30 78 38 30 20 29 7b  zHdr[0])<0x80 ){
14690 0a 20 20 20 20 20 20 20 20 20 20 7a 48 64 72 2b  .          zHdr+
146a0 2b 3b 0a 20 20 20 20 20 20 20 20 20 20 6f 66 66  +;.          off
146b0 73 65 74 36 34 20 2b 3d 20 73 71 6c 69 74 65 33  set64 += sqlite3
146c0 56 64 62 65 4f 6e 65 42 79 74 65 53 65 72 69 61  VdbeOneByteSeria
146d0 6c 54 79 70 65 4c 65 6e 28 74 29 3b 0a 20 20 20  lTypeLen(t);.   
146e0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
146f0 20 20 20 20 20 20 7a 48 64 72 20 2b 3d 20 73 71        zHdr += sq
14700 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32  lite3GetVarint32
14710 28 7a 48 64 72 2c 20 26 74 29 3b 0a 20 20 20 20  (zHdr, &t);.    
14720 20 20 20 20 20 20 6f 66 66 73 65 74 36 34 20 2b        offset64 +
14730 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72  = sqlite3VdbeSer
14740 69 61 6c 54 79 70 65 4c 65 6e 28 74 29 3b 0a 20  ialTypeLen(t);. 
14750 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
14760 20 70 43 2d 3e 61 54 79 70 65 5b 69 2b 2b 5d 20   pC->aType[i++] 
14770 3d 20 74 3b 0a 20 20 20 20 20 20 20 20 61 4f 66  = t;.        aOf
14780 66 73 65 74 5b 69 5d 20 3d 20 28 75 33 32 29 28  fset[i] = (u32)(
14790 6f 66 66 73 65 74 36 34 20 26 20 30 78 66 66 66  offset64 & 0xfff
147a0 66 66 66 66 66 29 3b 0a 20 20 20 20 20 20 7d 77  fffff);.      }w
147b0 68 69 6c 65 28 20 69 3c 3d 70 32 20 26 26 20 7a  hile( i<=p2 && z
147c0 48 64 72 3c 7a 45 6e 64 48 64 72 20 29 3b 0a 0a  Hdr<zEndHdr );..
147d0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 72 65 63        /* The rec
147e0 6f 72 64 20 69 73 20 63 6f 72 72 75 70 74 20 69  ord is corrupt i
147f0 66 20 61 6e 79 20 6f 66 20 74 68 65 20 66 6f 6c  f any of the fol
14800 6c 6f 77 69 6e 67 20 61 72 65 20 74 72 75 65 3a  lowing are true:
14810 0a 20 20 20 20 20 20 2a 2a 20 28 31 29 20 74 68  .      ** (1) th
14820 65 20 62 79 74 65 73 20 6f 66 20 74 68 65 20 68  e bytes of the h
14830 65 61 64 65 72 20 65 78 74 65 6e 64 20 70 61 73  eader extend pas
14840 74 20 74 68 65 20 64 65 63 6c 61 72 65 64 20 68  t the declared h
14850 65 61 64 65 72 20 73 69 7a 65 0a 20 20 20 20 20  eader size.     
14860 20 2a 2a 20 28 32 29 20 74 68 65 20 65 6e 74 69   ** (2) the enti
14870 72 65 20 68 65 61 64 65 72 20 77 61 73 20 75 73  re header was us
14880 65 64 20 62 75 74 20 6e 6f 74 20 61 6c 6c 20 64  ed but not all d
14890 61 74 61 20 77 61 73 20 75 73 65 64 0a 20 20 20  ata was used.   
148a0 20 20 20 2a 2a 20 28 33 29 20 74 68 65 20 65 6e     ** (3) the en
148b0 64 20 6f 66 20 74 68 65 20 64 61 74 61 20 65 78  d of the data ex
148c0 74 65 6e 64 73 20 62 65 79 6f 6e 64 20 74 68 65  tends beyond the
148d0 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f   end of the reco
148e0 72 64 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  rd..      */.   
148f0 20 20 20 69 66 28 20 28 7a 48 64 72 3e 3d 7a 45     if( (zHdr>=zE
14900 6e 64 48 64 72 20 26 26 20 28 7a 48 64 72 3e 7a  ndHdr && (zHdr>z
14910 45 6e 64 48 64 72 20 7c 7c 20 6f 66 66 73 65 74  EndHdr || offset
14920 36 34 21 3d 70 43 2d 3e 70 61 79 6c 6f 61 64 53  64!=pC->payloadS
14930 69 7a 65 29 29 0a 20 20 20 20 20 20 20 7c 7c 20  ize)).       || 
14940 28 6f 66 66 73 65 74 36 34 20 3e 20 70 43 2d 3e  (offset64 > pC->
14950 70 61 79 6c 6f 61 64 53 69 7a 65 29 0a 20 20 20  payloadSize).   
14960 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66     ){.        if
14970 28 20 61 4f 66 66 73 65 74 5b 30 5d 3d 3d 30 20  ( aOffset[0]==0 
14980 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 20 3d  ){.          i =
14990 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 7a 48   0;.          zH
149a0 64 72 20 3d 20 7a 45 6e 64 48 64 72 3b 0a 20 20  dr = zEndHdr;.  
149b0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
149c0 20 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61         if( pC->a
149d0 52 6f 77 3d 3d 30 20 29 20 73 71 6c 69 74 65 33  Row==0 ) sqlite3
149e0 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26  VdbeMemRelease(&
149f0 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 20  sMem);.         
14a00 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52   rc = SQLITE_COR
14a10 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20  RUPT_BKPT;.     
14a20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
14a30 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
14a40 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
14a50 0a 20 20 20 20 20 20 70 43 2d 3e 6e 48 64 72 50  .      pC->nHdrP
14a60 61 72 73 65 64 20 3d 20 69 3b 0a 20 20 20 20 20  arsed = i;.     
14a70 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 20   pC->iHdrOffset 
14a80 3d 20 28 75 33 32 29 28 7a 48 64 72 20 2d 20 7a  = (u32)(zHdr - z
14a90 44 61 74 61 29 3b 0a 20 20 20 20 20 20 69 66 28  Data);.      if(
14aa0 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 20 73   pC->aRow==0 ) s
14ab0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c  qlite3VdbeMemRel
14ac0 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20 20 20  ease(&sMem);.   
14ad0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 74 20   }else{.      t 
14ae0 3d 20 30 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  = 0;.    }..    
14af0 2f 2a 20 49 66 20 61 66 74 65 72 20 74 72 79 69  /* If after tryi
14b00 6e 67 20 74 6f 20 65 78 74 72 61 63 74 20 6e 65  ng to extract ne
14b10 77 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74  w entries from t
14b20 68 65 20 68 65 61 64 65 72 2c 20 6e 48 64 72 50  he header, nHdrP
14b30 61 72 73 65 64 20 69 73 0a 20 20 20 20 2a 2a 20  arsed is.    ** 
14b40 73 74 69 6c 6c 20 6e 6f 74 20 75 70 20 74 6f 20  still not up to 
14b50 70 32 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74  p2, that means t
14b60 68 61 74 20 74 68 65 20 72 65 63 6f 72 64 20 68  hat the record h
14b70 61 73 20 66 65 77 65 72 20 74 68 61 6e 20 70 32  as fewer than p2
14b80 0a 20 20 20 20 2a 2a 20 63 6f 6c 75 6d 6e 73 2e  .    ** columns.
14b90 20 20 53 6f 20 74 68 65 20 72 65 73 75 6c 74 20    So the result 
14ba0 77 69 6c 6c 20 62 65 20 65 69 74 68 65 72 20 74  will be either t
14bb0 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  he default value
14bc0 20 6f 72 20 61 20 4e 55 4c 4c 2e 0a 20 20 20 20   or a NULL..    
14bd0 2a 2f 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e  */.    if( pC->n
14be0 48 64 72 50 61 72 73 65 64 3c 3d 70 32 20 29 7b  HdrParsed<=p2 ){
14bf0 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  .      if( pOp->
14c00 70 34 74 79 70 65 3d 3d 50 34 5f 4d 45 4d 20 29  p4type==P4_MEM )
14c10 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
14c20 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43  3VdbeMemShallowC
14c30 6f 70 79 28 70 44 65 73 74 2c 20 70 4f 70 2d 3e  opy(pDest, pOp->
14c40 70 34 2e 70 4d 65 6d 2c 20 4d 45 4d 5f 53 74 61  p4.pMem, MEM_Sta
14c50 74 69 63 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  tic);.      }els
14c60 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  e{.        sqlit
14c70 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
14c80 28 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 7d  (pDest);.      }
14c90 0a 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63  .      goto op_c
14ca0 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d  olumn_out;.    }
14cb0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 74 20  .  }else{.    t 
14cc0 3d 20 70 43 2d 3e 61 54 79 70 65 5b 70 32 5d 3b  = pC->aType[p2];
14cd0 0a 20 20 7d 0a 0a 20 20 2f 2a 20 45 78 74 72 61  .  }..  /* Extra
14ce0 63 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 66  ct the content f
14cf0 6f 72 20 74 68 65 20 70 32 2b 31 2d 74 68 20 63  or the p2+1-th c
14d00 6f 6c 75 6d 6e 2e 20 20 43 6f 6e 74 72 6f 6c 20  olumn.  Control 
14d10 63 61 6e 20 6f 6e 6c 79 0a 20 20 2a 2a 20 72 65  can only.  ** re
14d20 61 63 68 20 74 68 69 73 20 70 6f 69 6e 74 20 69  ach this point i
14d30 66 20 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 61  f aOffset[p2], a
14d40 4f 66 66 73 65 74 5b 70 32 2b 31 5d 2c 20 61 6e  Offset[p2+1], an
14d50 64 20 70 43 2d 3e 61 54 79 70 65 5b 70 32 5d 20  d pC->aType[p2] 
14d60 61 72 65 0a 20 20 2a 2a 20 61 6c 6c 20 76 61 6c  are.  ** all val
14d70 69 64 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72  id..  */.  asser
14d80 74 28 20 70 32 3c 70 43 2d 3e 6e 48 64 72 50 61  t( p2<pC->nHdrPa
14d90 72 73 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74  rsed );.  assert
14da0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
14db0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c  );.  assert( sql
14dc0 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d  ite3VdbeCheckMem
14dd0 49 6e 76 61 72 69 61 6e 74 73 28 70 44 65 73 74  Invariants(pDest
14de0 29 20 29 3b 0a 20 20 69 66 28 20 56 64 62 65 4d  ) );.  if( VdbeM
14df0 65 6d 44 79 6e 61 6d 69 63 28 70 44 65 73 74 29  emDynamic(pDest)
14e00 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
14e10 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44  dbeMemSetNull(pD
14e20 65 73 74 29 3b 0a 20 20 7d 0a 20 20 61 73 73 65  est);.  }.  asse
14e30 72 74 28 20 74 3d 3d 70 43 2d 3e 61 54 79 70 65  rt( t==pC->aType
14e40 5b 70 32 5d 20 29 3b 0a 20 20 69 66 28 20 70 43  [p2] );.  if( pC
14e50 2d 3e 73 7a 52 6f 77 3e 3d 61 4f 66 66 73 65 74  ->szRow>=aOffset
14e60 5b 70 32 2b 31 5d 20 29 7b 0a 20 20 20 20 2f 2a  [p2+1] ){.    /*
14e70 20 54 68 69 73 20 69 73 20 74 68 65 20 63 6f 6d   This is the com
14e80 6d 6f 6e 20 63 61 73 65 20 77 68 65 72 65 20 74  mon case where t
14e90 68 65 20 64 65 73 69 72 65 64 20 63 6f 6e 74 65  he desired conte
14ea0 6e 74 20 66 69 74 73 20 6f 6e 20 74 68 65 20 6f  nt fits on the o
14eb0 72 69 67 69 6e 61 6c 0a 20 20 20 20 2a 2a 20 70  riginal.    ** p
14ec0 61 67 65 20 2d 20 77 68 65 72 65 20 74 68 65 20  age - where the 
14ed0 63 6f 6e 74 65 6e 74 20 69 73 20 6e 6f 74 20 6f  content is not o
14ee0 6e 20 61 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61  n an overflow pa
14ef0 67 65 20 2a 2f 0a 20 20 20 20 7a 44 61 74 61 20  ge */.    zData 
14f00 3d 20 70 43 2d 3e 61 52 6f 77 20 2b 20 61 4f 66  = pC->aRow + aOf
14f10 66 73 65 74 5b 70 32 5d 3b 0a 20 20 20 20 69 66  fset[p2];.    if
14f20 28 20 74 3c 31 32 20 29 7b 0a 20 20 20 20 20 20  ( t<12 ){.      
14f30 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
14f40 6c 47 65 74 28 7a 44 61 74 61 2c 20 74 2c 20 70  lGet(zData, t, p
14f50 44 65 73 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65  Dest);.    }else
14f60 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68  {.      /* If th
14f70 65 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 69  e column value i
14f80 73 20 61 20 73 74 72 69 6e 67 2c 20 77 65 20 6e  s a string, we n
14f90 65 65 64 20 61 20 70 65 72 73 69 73 74 65 6e 74  eed a persistent
14fa0 20 76 61 6c 75 65 2c 20 6e 6f 74 0a 20 20 20 20   value, not.    
14fb0 20 20 2a 2a 20 61 20 4d 45 4d 5f 45 70 68 65 6d    ** a MEM_Ephem
14fc0 20 76 61 6c 75 65 2e 20 20 54 68 69 73 20 62 72   value.  This br
14fd0 61 6e 63 68 20 69 73 20 61 20 66 61 73 74 20 73  anch is a fast s
14fe0 68 6f 72 74 2d 63 75 74 20 74 68 61 74 20 69 73  hort-cut that is
14ff0 20 65 71 75 69 76 61 6c 65 6e 74 0a 20 20 20 20   equivalent.    
15000 20 20 2a 2a 20 74 6f 20 63 61 6c 6c 69 6e 67 20    ** to calling 
15010 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
15020 6c 47 65 74 28 29 20 61 6e 64 20 73 71 6c 69 74  lGet() and sqlit
15030 65 33 56 64 62 65 44 65 65 70 68 65 6d 65 72 61  e3VdbeDeephemera
15040 6c 69 7a 65 28 29 2e 0a 20 20 20 20 20 20 2a 2f  lize()..      */
15050 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f  .      static co
15060 6e 73 74 20 75 31 36 20 61 46 6c 61 67 5b 5d 20  nst u16 aFlag[] 
15070 3d 20 7b 20 4d 45 4d 5f 42 6c 6f 62 2c 20 4d 45  = { MEM_Blob, ME
15080 4d 5f 53 74 72 7c 4d 45 4d 5f 54 65 72 6d 20 7d  M_Str|MEM_Term }
15090 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e 6e  ;.      pDest->n
150a0 20 3d 20 6c 65 6e 20 3d 20 28 74 2d 31 32 29 2f   = len = (t-12)/
150b0 32 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e  2;.      pDest->
150c0 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a  enc = encoding;.
150d0 20 20 20 20 20 20 69 66 28 20 70 44 65 73 74 2d        if( pDest-
150e0 3e 73 7a 4d 61 6c 6c 6f 63 20 3c 20 6c 65 6e 2b  >szMalloc < len+
150f0 32 20 29 7b 0a 20 20 20 20 20 20 20 20 70 44 65  2 ){.        pDe
15100 73 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  st->flags = MEM_
15110 4e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66  Null;.        if
15120 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
15130 47 72 6f 77 28 70 44 65 73 74 2c 20 6c 65 6e 2b  Grow(pDest, len+
15140 32 2c 20 30 29 20 29 20 67 6f 74 6f 20 6e 6f 5f  2, 0) ) goto no_
15150 6d 65 6d 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  mem;.      }else
15160 7b 0a 20 20 20 20 20 20 20 20 70 44 65 73 74 2d  {.        pDest-
15170 3e 7a 20 3d 20 70 44 65 73 74 2d 3e 7a 4d 61 6c  >z = pDest->zMal
15180 6c 6f 63 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  loc;.      }.   
15190 20 20 20 6d 65 6d 63 70 79 28 70 44 65 73 74 2d     memcpy(pDest-
151a0 3e 7a 2c 20 7a 44 61 74 61 2c 20 6c 65 6e 29 3b  >z, zData, len);
151b0 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e 7a 5b  .      pDest->z[
151c0 6c 65 6e 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20  len] = 0;.      
151d0 70 44 65 73 74 2d 3e 7a 5b 6c 65 6e 2b 31 5d 20  pDest->z[len+1] 
151e0 3d 20 30 3b 0a 20 20 20 20 20 20 70 44 65 73 74  = 0;.      pDest
151f0 2d 3e 66 6c 61 67 73 20 3d 20 61 46 6c 61 67 5b  ->flags = aFlag[
15200 74 26 31 5d 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  t&1];.    }.  }e
15210 6c 73 65 7b 0a 20 20 20 20 70 44 65 73 74 2d 3e  lse{.    pDest->
15220 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a  enc = encoding;.
15230 20 20 20 20 2f 2a 20 54 68 69 73 20 62 72 61 6e      /* This bran
15240 63 68 20 68 61 70 70 65 6e 73 20 6f 6e 6c 79 20  ch happens only 
15250 77 68 65 6e 20 63 6f 6e 74 65 6e 74 20 69 73 20  when content is 
15260 6f 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65  on overflow page
15270 73 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 28 70  s */.    if( ((p
15280 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46 4c 41 47  Op->p5 & (OPFLAG
15290 5f 4c 45 4e 47 54 48 41 52 47 7c 4f 50 46 4c 41  _LENGTHARG|OPFLA
152a0 47 5f 54 59 50 45 4f 46 41 52 47 29 29 21 3d 30  G_TYPEOFARG))!=0
152b0 0a 20 20 20 20 20 20 20 20 20 20 26 26 20 28 28  .          && ((
152c0 74 3e 3d 31 32 20 26 26 20 28 74 26 31 29 3d 3d  t>=12 && (t&1)==
152d0 30 29 20 7c 7c 20 28 70 4f 70 2d 3e 70 35 20 26  0) || (pOp->p5 &
152e0 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52   OPFLAG_TYPEOFAR
152f0 47 29 21 3d 30 29 29 0a 20 20 20 20 20 7c 7c 20  G)!=0)).     || 
15300 28 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33 56 64  (len = sqlite3Vd
15310 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28  beSerialTypeLen(
15320 74 29 29 3d 3d 30 0a 20 20 20 20 29 7b 0a 20 20  t))==0.    ){.  
15330 20 20 20 20 2f 2a 20 43 6f 6e 74 65 6e 74 20 69      /* Content i
15340 73 20 69 72 72 65 6c 65 76 61 6e 74 20 66 6f 72  s irrelevant for
15350 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 31 2e 20  .      **    1. 
15360 74 68 65 20 74 79 70 65 6f 66 28 29 20 66 75 6e  the typeof() fun
15370 63 74 69 6f 6e 2c 0a 20 20 20 20 20 20 2a 2a 20  ction,.      ** 
15380 20 20 20 32 2e 20 74 68 65 20 6c 65 6e 67 74 68     2. the length
15390 28 58 29 20 66 75 6e 63 74 69 6f 6e 20 69 66 20  (X) function if 
153a0 58 20 69 73 20 61 20 62 6c 6f 62 2c 20 61 6e 64  X is a blob, and
153b0 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 33 2e 20  .      **    3. 
153c0 69 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6c  if the content l
153d0 65 6e 67 74 68 20 69 73 20 7a 65 72 6f 2e 0a 20  ength is zero.. 
153e0 20 20 20 20 20 2a 2a 20 53 6f 20 77 65 20 6d 69       ** So we mi
153f0 67 68 74 20 61 73 20 77 65 6c 6c 20 75 73 65 20  ght as well use 
15400 62 6f 67 75 73 20 63 6f 6e 74 65 6e 74 20 72 61  bogus content ra
15410 74 68 65 72 20 74 68 61 6e 20 72 65 61 64 69 6e  ther than readin
15420 67 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6e 74 65  g.      ** conte
15430 6e 74 20 66 72 6f 6d 20 64 69 73 6b 2e 20 0a 20  nt from disk. . 
15440 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a       **.      **
15450 20 41 6c 74 68 6f 75 67 68 20 73 71 6c 69 74 65   Although sqlite
15460 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 29  3VdbeSerialGet()
15470 20 6d 61 79 20 72 65 61 64 20 61 74 20 6d 6f 73   may read at mos
15480 74 20 38 20 62 79 74 65 73 20 66 72 6f 6d 20 74  t 8 bytes from t
15490 68 65 0a 20 20 20 20 20 20 2a 2a 20 62 75 66 66  he.      ** buff
154a0 65 72 20 70 61 73 73 65 64 20 74 6f 20 69 74 2c  er passed to it,
154b0 20 64 65 62 75 67 67 69 6e 67 20 66 75 6e 63 74   debugging funct
154c0 69 6f 6e 20 56 64 62 65 4d 65 6d 50 72 65 74 74  ion VdbeMemPrett
154d0 79 50 72 69 6e 74 28 29 20 6d 61 79 0a 20 20 20  yPrint() may.   
154e0 20 20 20 2a 2a 20 72 65 61 64 20 75 70 20 74 6f     ** read up to
154f0 20 31 36 2e 20 53 6f 20 31 36 20 62 79 74 65 73   16. So 16 bytes
15500 20 6f 66 20 62 6f 67 75 73 20 63 6f 6e 74 65 6e   of bogus conten
15510 74 20 69 73 20 73 75 70 70 6c 69 65 64 2e 0a 20  t is supplied.. 
15520 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 74       */.      st
15530 61 74 69 63 20 75 38 20 61 5a 65 72 6f 5b 31 36  atic u8 aZero[16
15540 5d 3b 20 20 2f 2a 20 54 68 69 73 20 69 73 20 74  ];  /* This is t
15550 68 65 20 62 6f 67 75 73 20 63 6f 6e 74 65 6e 74  he bogus content
15560 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65   */.      sqlite
15570 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 61  3VdbeSerialGet(a
15580 5a 65 72 6f 2c 20 74 2c 20 70 44 65 73 74 29 3b  Zero, t, pDest);
15590 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
155a0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
155b0 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70  beMemFromBtree(p
155c0 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 61  C->uc.pCursor, a
155d0 4f 66 66 73 65 74 5b 70 32 5d 2c 20 6c 65 6e 2c  Offset[p2], len,
155e0 20 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 69   pDest);.      i
155f0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
15600 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
15610 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
15620 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72    sqlite3VdbeSer
15630 69 61 6c 47 65 74 28 28 63 6f 6e 73 74 20 75 38  ialGet((const u8
15640 2a 29 70 44 65 73 74 2d 3e 7a 2c 20 74 2c 20 70  *)pDest->z, t, p
15650 44 65 73 74 29 3b 0a 20 20 20 20 20 20 70 44 65  Dest);.      pDe
15660 73 74 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45  st->flags &= ~ME
15670 4d 5f 45 70 68 65 6d 3b 0a 20 20 20 20 7d 0a 20  M_Ephem;.    }. 
15680 20 7d 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75   }..op_column_ou
15690 74 3a 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  t:.  UPDATE_MAX_
156a0 42 4c 4f 42 53 49 5a 45 28 70 44 65 73 74 29 3b  BLOBSIZE(pDest);
156b0 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
156c0 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74  E(pOp->p3, pDest
156d0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
156e0 2a 20 4f 70 63 6f 64 65 3a 20 41 66 66 69 6e 69  * Opcode: Affini
156f0 74 79 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a  ty P1 P2 * P4 *.
15700 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 66 66  ** Synopsis: aff
15710 69 6e 69 74 79 28 72 5b 50 31 40 50 32 5d 29 0a  inity(r[P1@P2]).
15720 2a 2a 0a 2a 2a 20 41 70 70 6c 79 20 61 66 66 69  **.** Apply affi
15730 6e 69 74 69 65 73 20 74 6f 20 61 20 72 61 6e 67  nities to a rang
15740 65 20 6f 66 20 50 32 20 72 65 67 69 73 74 65 72  e of P2 register
15750 73 20 73 74 61 72 74 69 6e 67 20 77 69 74 68 20  s starting with 
15760 50 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  P1..**.** P4 is 
15770 61 20 73 74 72 69 6e 67 20 74 68 61 74 20 69 73  a string that is
15780 20 50 32 20 63 68 61 72 61 63 74 65 72 73 20 6c   P2 characters l
15790 6f 6e 67 2e 20 54 68 65 20 4e 2d 74 68 20 63 68  ong. The N-th ch
157a0 61 72 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a  aracter of the.*
157b0 2a 20 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74  * string indicat
157c0 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66  es the column af
157d0 66 69 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75  finity that shou
157e0 6c 64 20 62 65 20 75 73 65 64 20 66 6f 72 20 74  ld be used for t
157f0 68 65 20 4e 2d 74 68 0a 2a 2a 20 6d 65 6d 6f 72  he N-th.** memor
15800 79 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 72 61  y cell in the ra
15810 6e 67 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  nge..*/.case OP_
15820 41 66 66 69 6e 69 74 79 3a 20 7b 0a 20 20 63 6f  Affinity: {.  co
15830 6e 73 74 20 63 68 61 72 20 2a 7a 41 66 66 69 6e  nst char *zAffin
15840 69 74 79 3b 20 20 20 2f 2a 20 54 68 65 20 61 66  ity;   /* The af
15850 66 69 6e 69 74 79 20 74 6f 20 62 65 20 61 70 70  finity to be app
15860 6c 69 65 64 20 2a 2f 0a 0a 20 20 7a 41 66 66 69  lied */..  zAffi
15870 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  nity = pOp->p4.z
15880 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 41 66 66  ;.  assert( zAff
15890 69 6e 69 74 79 21 3d 30 20 29 3b 0a 20 20 61 73  inity!=0 );.  as
158a0 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
158b0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 41 66  );.  assert( zAf
158c0 66 69 6e 69 74 79 5b 70 4f 70 2d 3e 70 32 5d 3d  finity[pOp->p2]=
158d0 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26  =0 );.  pIn1 = &
158e0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
158f0 20 64 6f 7b 0a 20 20 20 20 61 73 73 65 72 74 28   do{.    assert(
15900 20 70 49 6e 31 20 3c 3d 20 26 70 2d 3e 61 4d 65   pIn1 <= &p->aMe
15910 6d 5b 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  m[(p->nMem+1 - p
15920 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20  ->nCursor)] );. 
15930 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
15940 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20  Valid(pIn1) );. 
15950 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79     applyAffinity
15960 28 70 49 6e 31 2c 20 2a 28 7a 41 66 66 69 6e 69  (pIn1, *(zAffini
15970 74 79 2b 2b 29 2c 20 65 6e 63 6f 64 69 6e 67 29  ty++), encoding)
15980 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20  ;.    pIn1++;.  
15990 7d 77 68 69 6c 65 28 20 7a 41 66 66 69 6e 69 74  }while( zAffinit
159a0 79 5b 30 5d 20 29 3b 0a 20 20 62 72 65 61 6b 3b  y[0] );.  break;
159b0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d  .}../* Opcode: M
159c0 61 6b 65 52 65 63 6f 72 64 20 50 31 20 50 32 20  akeRecord P1 P2 
159d0 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
159e0 73 69 73 3a 20 72 5b 50 33 5d 3d 6d 6b 72 65 63  sis: r[P3]=mkrec
159f0 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a  (r[P1@P2]).**.**
15a00 20 43 6f 6e 76 65 72 74 20 50 32 20 72 65 67 69   Convert P2 regi
15a10 73 74 65 72 73 20 62 65 67 69 6e 6e 69 6e 67 20  sters beginning 
15a20 77 69 74 68 20 50 31 20 69 6e 74 6f 20 74 68 65  with P1 into the
15a30 20 5b 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 5d   [record format]
15a40 0a 2a 2a 20 75 73 65 20 61 73 20 61 20 64 61 74  .** use as a dat
15a50 61 20 72 65 63 6f 72 64 20 69 6e 20 61 20 64 61  a record in a da
15a60 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
15a70 61 73 20 61 20 6b 65 79 0a 2a 2a 20 69 6e 20 61  as a key.** in a
15a80 6e 20 69 6e 64 65 78 2e 20 20 54 68 65 20 4f 50  n index.  The OP
15a90 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 20 63  _Column opcode c
15aa0 61 6e 20 64 65 63 6f 64 65 20 74 68 65 20 72 65  an decode the re
15ab0 63 6f 72 64 20 6c 61 74 65 72 2e 0a 2a 2a 0a 2a  cord later..**.*
15ac0 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20 73 74  * P4 may be a st
15ad0 72 69 6e 67 20 74 68 61 74 20 69 73 20 50 32 20  ring that is P2 
15ae0 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e  characters long.
15af0 20 20 54 68 65 20 4e 2d 74 68 20 63 68 61 72 61    The N-th chara
15b00 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73  cter of the.** s
15b10 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20  tring indicates 
15b20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e  the column affin
15b30 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20  ity that should 
15b40 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20  be used for the 
15b50 4e 2d 74 68 0a 2a 2a 20 66 69 65 6c 64 20 6f 66  N-th.** field of
15b60 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79 2e 0a   the index key..
15b70 2a 2a 0a 2a 2a 20 54 68 65 20 6d 61 70 70 69 6e  **.** The mappin
15b80 67 20 66 72 6f 6d 20 63 68 61 72 61 63 74 65 72  g from character
15b90 20 74 6f 20 61 66 66 69 6e 69 74 79 20 69 73 20   to affinity is 
15ba0 67 69 76 65 6e 20 62 79 20 74 68 65 20 53 51 4c  given by the SQL
15bb0 49 54 45 5f 41 46 46 5f 0a 2a 2a 20 6d 61 63 72  ITE_AFF_.** macr
15bc0 6f 73 20 64 65 66 69 6e 65 64 20 69 6e 20 73 71  os defined in sq
15bd0 6c 69 74 65 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a  liteInt.h..**.**
15be0 20 49 66 20 50 34 20 69 73 20 4e 55 4c 4c 20 74   If P4 is NULL t
15bf0 68 65 6e 20 61 6c 6c 20 69 6e 64 65 78 20 66 69  hen all index fi
15c00 65 6c 64 73 20 68 61 76 65 20 74 68 65 20 61 66  elds have the af
15c10 66 69 6e 69 74 79 20 42 4c 4f 42 2e 0a 2a 2f 0a  finity BLOB..*/.
15c20 63 61 73 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f  case OP_MakeReco
15c30 72 64 3a 20 7b 0a 20 20 75 38 20 2a 7a 4e 65 77  rd: {.  u8 *zNew
15c40 52 65 63 6f 72 64 3b 20 20 20 20 20 20 20 20 2f  Record;        /
15c50 2a 20 41 20 62 75 66 66 65 72 20 74 6f 20 68 6f  * A buffer to ho
15c60 6c 64 20 74 68 65 20 64 61 74 61 20 66 6f 72 20  ld the data for 
15c70 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a  the new record *
15c80 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 20 20  /.  Mem *pRec;  
15c90 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
15ca0 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a  e new record */.
15cb0 20 20 75 36 34 20 6e 44 61 74 61 3b 20 20 20 20    u64 nData;    
15cc0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
15cd0 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64  er of bytes of d
15ce0 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 69  ata space */.  i
15cf0 6e 74 20 6e 48 64 72 3b 20 20 20 20 20 20 20 20  nt nHdr;        
15d00 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
15d10 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61 64  of bytes of head
15d20 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 36  er space */.  i6
15d30 34 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20  4 nByte;        
15d40 20 20 20 20 20 2f 2a 20 44 61 74 61 20 73 70 61       /* Data spa
15d50 63 65 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  ce required for 
15d60 74 68 69 73 20 72 65 63 6f 72 64 20 2a 2f 0a 20  this record */. 
15d70 20 69 36 34 20 6e 5a 65 72 6f 3b 20 20 20 20 20   i64 nZero;     
15d80 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
15d90 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73 20  r of zero bytes 
15da0 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
15db0 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
15dc0 74 20 6e 56 61 72 69 6e 74 3b 20 20 20 20 20 20  t nVarint;      
15dd0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
15de0 66 20 62 79 74 65 73 20 69 6e 20 61 20 76 61 72  f bytes in a var
15df0 69 6e 74 20 2a 2f 0a 20 20 75 33 32 20 73 65 72  int */.  u32 ser
15e00 69 61 6c 5f 74 79 70 65 3b 20 20 20 20 20 20 20  ial_type;       
15e10 2f 2a 20 54 79 70 65 20 66 69 65 6c 64 20 2a 2f  /* Type field */
15e20 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 30 3b 20  .  Mem *pData0; 
15e30 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
15e40 73 74 20 66 69 65 6c 64 20 74 6f 20 62 65 20 63  st field to be c
15e50 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20 74 68 65  ombined into the
15e60 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d   record */.  Mem
15e70 20 2a 70 4c 61 73 74 3b 20 20 20 20 20 20 20 20   *pLast;        
15e80 20 20 20 20 2f 2a 20 4c 61 73 74 20 66 69 65 6c      /* Last fiel
15e90 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  d of the record 
15ea0 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b  */.  int nField;
15eb0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
15ec0 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20  umber of fields 
15ed0 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  in the record */
15ee0 0a 20 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69  .  char *zAffini
15ef0 74 79 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ty;       /* The
15f00 20 61 66 66 69 6e 69 74 79 20 73 74 72 69 6e 67   affinity string
15f10 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20   for the record 
15f20 2a 2f 0a 20 20 69 6e 74 20 66 69 6c 65 5f 66 6f  */.  int file_fo
15f30 72 6d 61 74 3b 20 20 20 20 20 20 20 2f 2a 20 46  rmat;       /* F
15f40 69 6c 65 20 66 6f 72 6d 61 74 20 74 6f 20 75 73  ile format to us
15f50 65 20 66 6f 72 20 65 6e 63 6f 64 69 6e 67 20 2a  e for encoding *
15f60 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20  /.  int i;      
15f70 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70             /* Sp
15f80 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65 77  ace used in zNew
15f90 52 65 63 6f 72 64 5b 5d 20 68 65 61 64 65 72 20  Record[] header 
15fa0 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20 20  */.  int j;     
15fb0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
15fc0 70 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65  pace used in zNe
15fd0 77 52 65 63 6f 72 64 5b 5d 20 63 6f 6e 74 65 6e  wRecord[] conten
15fe0 74 20 2a 2f 0a 20 20 75 33 32 20 6c 65 6e 3b 20  t */.  u32 len; 
15ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
16000 20 4c 65 6e 67 74 68 20 6f 66 20 61 20 66 69 65   Length of a fie
16010 6c 64 20 2a 2f 0a 0a 20 20 2f 2a 20 41 73 73 75  ld */..  /* Assu
16020 6d 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20  ming the record 
16030 63 6f 6e 74 61 69 6e 73 20 4e 20 66 69 65 6c 64  contains N field
16040 73 2c 20 74 68 65 20 72 65 63 6f 72 64 20 66 6f  s, the record fo
16050 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20  rmat looks.  ** 
16060 6c 69 6b 65 20 74 68 69 73 3a 0a 20 20 2a 2a 0a  like this:.  **.
16070 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d    ** -----------
16080 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16090 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
160a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
160b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20  -------------.  
160c0 2a 2a 20 7c 20 68 64 72 2d 73 69 7a 65 20 7c 20  ** | hdr-size | 
160d0 74 79 70 65 20 30 20 7c 20 74 79 70 65 20 31 20  type 0 | type 1 
160e0 7c 20 2e 2e 2e 20 7c 20 74 79 70 65 20 4e 2d 31  | ... | type N-1
160f0 20 7c 20 64 61 74 61 30 20 7c 20 2e 2e 2e 20 7c   | data0 | ... |
16100 20 64 61 74 61 20 4e 2d 31 20 7c 20 0a 20 20 2a   data N-1 | .  *
16110 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  * --------------
16120 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16130 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16140 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16150 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a  ----------.  **.
16160 20 20 2a 2a 20 44 61 74 61 28 30 29 20 69 73 20    ** Data(0) is 
16170 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73  taken from regis
16180 74 65 72 20 50 31 2e 20 20 44 61 74 61 28 31 29  ter P1.  Data(1)
16190 20 63 6f 6d 65 73 20 66 72 6f 6d 20 72 65 67 69   comes from regi
161a0 73 74 65 72 20 50 31 2b 31 0a 20 20 2a 2a 20 61  ster P1+1.  ** a
161b0 6e 64 20 73 6f 20 66 6f 72 74 68 2e 0a 20 20 2a  nd so forth..  *
161c0 2a 0a 20 20 2a 2a 20 45 61 63 68 20 74 79 70 65  *.  ** Each type
161d0 20 66 69 65 6c 64 20 69 73 20 61 20 76 61 72 69   field is a vari
161e0 6e 74 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20  nt representing 
161f0 74 68 65 20 73 65 72 69 61 6c 20 74 79 70 65 20  the serial type 
16200 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20 63 6f 72  of the .  ** cor
16210 72 65 73 70 6f 6e 64 69 6e 67 20 64 61 74 61 20  responding data 
16220 65 6c 65 6d 65 6e 74 20 28 73 65 65 20 73 71 6c  element (see sql
16230 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
16240 70 65 28 29 29 2e 20 54 68 65 0a 20 20 2a 2a 20  pe()). The.  ** 
16250 68 64 72 2d 73 69 7a 65 20 66 69 65 6c 64 20 69  hdr-size field i
16260 73 20 61 6c 73 6f 20 61 20 76 61 72 69 6e 74 20  s also a varint 
16270 77 68 69 63 68 20 69 73 20 74 68 65 20 6f 66 66  which is the off
16280 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67  set from the beg
16290 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66 20 74  inning.  ** of t
162a0 68 65 20 72 65 63 6f 72 64 20 74 6f 20 64 61 74  he record to dat
162b0 61 30 2e 0a 20 20 2a 2f 0a 20 20 6e 44 61 74 61  a0..  */.  nData
162c0 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a   = 0;         /*
162d0 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
162e0 20 6f 66 20 64 61 74 61 20 73 70 61 63 65 20 2a   of data space *
162f0 2f 0a 20 20 6e 48 64 72 20 3d 20 30 3b 20 20 20  /.  nHdr = 0;   
16300 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
16310 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61   of bytes of hea
16320 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e  der space */.  n
16330 5a 65 72 6f 20 3d 20 30 3b 20 20 20 20 20 20 20  Zero = 0;       
16340 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a    /* Number of z
16350 65 72 6f 20 62 79 74 65 73 20 61 74 20 74 68 65  ero bytes at the
16360 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f   end of the reco
16370 72 64 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20 3d  rd */.  nField =
16380 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41 66 66   pOp->p1;.  zAff
16390 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e  inity = pOp->p4.
163a0 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69  z;.  assert( nFi
163b0 65 6c 64 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32  eld>0 && pOp->p2
163c0 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 46  >0 && pOp->p2+nF
163d0 69 65 6c 64 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ield<=(p->nMem+1
163e0 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31   - p->nCursor)+1
163f0 20 29 3b 0a 20 20 70 44 61 74 61 30 20 3d 20 26   );.  pData0 = &
16400 61 4d 65 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20  aMem[nField];.  
16410 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 32  nField = pOp->p2
16420 3b 0a 20 20 70 4c 61 73 74 20 3d 20 26 70 44 61  ;.  pLast = &pDa
16430 74 61 30 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20  ta0[nField-1];. 
16440 20 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70   file_format = p
16450 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f  ->minWriteFileFo
16460 72 6d 61 74 3b 0a 0a 20 20 2f 2a 20 49 64 65 6e  rmat;..  /* Iden
16470 74 69 66 79 20 74 68 65 20 6f 75 74 70 75 74 20  tify the output 
16480 72 65 67 69 73 74 65 72 20 2a 2f 0a 20 20 61 73  register */.  as
16490 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f  sert( pOp->p3<pO
164a0 70 2d 3e 70 31 20 7c 7c 20 70 4f 70 2d 3e 70 33  p->p1 || pOp->p3
164b0 3e 3d 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70  >=pOp->p1+pOp->p
164c0 32 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  2 );.  pOut = &a
164d0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
164e0 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
164f0 28 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a  (p, pOut);..  /*
16500 20 41 70 70 6c 79 20 74 68 65 20 72 65 71 75 65   Apply the reque
16510 73 74 65 64 20 61 66 66 69 6e 69 74 79 20 74 6f  sted affinity to
16520 20 61 6c 6c 20 69 6e 70 75 74 73 0a 20 20 2a 2f   all inputs.  */
16530 0a 20 20 61 73 73 65 72 74 28 20 70 44 61 74 61  .  assert( pData
16540 30 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 69 66  0<=pLast );.  if
16550 28 20 7a 41 66 66 69 6e 69 74 79 20 29 7b 0a 20  ( zAffinity ){. 
16560 20 20 20 70 52 65 63 20 3d 20 70 44 61 74 61 30     pRec = pData0
16570 3b 0a 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20  ;.    do{.      
16580 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 52  applyAffinity(pR
16590 65 63 2b 2b 2c 20 2a 28 7a 41 66 66 69 6e 69 74  ec++, *(zAffinit
165a0 79 2b 2b 29 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  y++), encoding);
165b0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 7a  .      assert( z
165c0 41 66 66 69 6e 69 74 79 5b 30 5d 3d 3d 30 20 7c  Affinity[0]==0 |
165d0 7c 20 70 52 65 63 3c 3d 70 4c 61 73 74 20 29 3b  | pRec<=pLast );
165e0 0a 20 20 20 20 7d 77 68 69 6c 65 28 20 7a 41 66  .    }while( zAf
165f0 66 69 6e 69 74 79 5b 30 5d 20 29 3b 0a 20 20 7d  finity[0] );.  }
16600 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
16610 45 4e 41 42 4c 45 5f 4e 55 4c 4c 5f 54 52 49 4d  ENABLE_NULL_TRIM
16620 0a 20 20 2f 2a 20 4e 55 4c 4c 73 20 63 61 6e 20  .  /* NULLs can 
16630 62 65 20 73 61 66 65 6c 79 20 74 72 69 6d 6d 65  be safely trimme
16640 64 20 66 72 6f 6d 20 74 68 65 20 65 6e 64 20 6f  d from the end o
16650 66 20 74 68 65 20 72 65 63 6f 72 64 2c 20 61 73  f the record, as
16660 20 6c 6f 6e 67 20 61 73 0a 20 20 2a 2a 20 61 73   long as.  ** as
16670 20 74 68 65 20 73 63 68 65 6d 61 20 66 6f 72 6d   the schema form
16680 61 74 20 69 73 20 32 20 6f 72 20 6d 6f 72 65 20  at is 2 or more 
16690 61 6e 64 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20  and none of the 
166a0 6f 6d 69 74 74 65 64 20 63 6f 6c 75 6d 6e 73 0a  omitted columns.
166b0 20 20 2a 2a 20 68 61 76 65 20 61 20 6e 6f 6e 2d    ** have a non-
166c0 4e 55 4c 4c 20 64 65 66 61 75 6c 74 20 76 61 6c  NULL default val
166d0 75 65 2e 20 20 41 6c 73 6f 2c 20 74 68 65 20 72  ue.  Also, the r
166e0 65 63 6f 72 64 20 6d 75 73 74 20 62 65 20 6c 65  ecord must be le
166f0 66 74 20 77 69 74 68 0a 20 20 2a 2a 20 61 74 20  ft with.  ** at 
16700 6c 65 61 73 74 20 6f 6e 65 20 66 69 65 6c 64 2e  least one field.
16710 20 20 49 66 20 50 35 3e 30 20 74 68 65 6e 20 69    If P5>0 then i
16720 74 20 77 69 6c 6c 20 62 65 20 6f 6e 65 20 6d 6f  t will be one mo
16730 72 65 20 74 68 61 6e 20 74 68 65 0a 20 20 2a 2a  re than the.  **
16740 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 72 69   index of the ri
16750 67 68 74 2d 6d 6f 73 74 20 63 6f 6c 75 6d 6e 20  ght-most column 
16760 77 69 74 68 20 61 20 6e 6f 6e 2d 4e 55 4c 4c 20  with a non-NULL 
16770 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 2a 2f  default value */
16780 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29  .  if( pOp->p5 )
16790 7b 0a 20 20 20 20 77 68 69 6c 65 28 20 28 70 4c  {.    while( (pL
167a0 61 73 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ast->flags & MEM
167b0 5f 4e 75 6c 6c 29 21 3d 30 20 26 26 20 6e 46 69  _Null)!=0 && nFi
167c0 65 6c 64 3e 70 4f 70 2d 3e 70 35 20 29 7b 0a 20  eld>pOp->p5 ){. 
167d0 20 20 20 20 20 70 4c 61 73 74 2d 2d 3b 0a 20 20       pLast--;.  
167e0 20 20 20 20 6e 46 69 65 6c 64 2d 2d 3b 0a 20 20      nField--;.  
167f0 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a    }.  }.#endif..
16800 20 20 2f 2a 20 4c 6f 6f 70 20 74 68 72 6f 75 67    /* Loop throug
16810 68 20 74 68 65 20 65 6c 65 6d 65 6e 74 73 20 74  h the elements t
16820 68 61 74 20 77 69 6c 6c 20 6d 61 6b 65 20 75 70  hat will make up
16830 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 66   the record to f
16840 69 67 75 72 65 0a 20 20 2a 2a 20 6f 75 74 20 68  igure.  ** out h
16850 6f 77 20 6d 75 63 68 20 73 70 61 63 65 20 69 73  ow much space is
16860 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68   required for th
16870 65 20 6e 65 77 20 72 65 63 6f 72 64 2e 0a 20 20  e new record..  
16880 2a 2f 0a 20 20 70 52 65 63 20 3d 20 70 4c 61 73  */.  pRec = pLas
16890 74 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 61 73 73  t;.  do{.    ass
168a0 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
168b0 70 52 65 63 29 20 29 3b 0a 20 20 20 20 70 52 65  pRec) );.    pRe
168c0 63 2d 3e 75 54 65 6d 70 20 3d 20 73 65 72 69 61  c->uTemp = seria
168d0 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69 74 65 33  l_type = sqlite3
168e0 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 28 70  VdbeSerialType(p
168f0 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74  Rec, file_format
16900 2c 20 26 6c 65 6e 29 3b 0a 20 20 20 20 69 66 28  , &len);.    if(
16910 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d   pRec->flags & M
16920 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20  EM_Zero ){.     
16930 20 69 66 28 20 6e 44 61 74 61 20 29 7b 0a 20 20   if( nData ){.  
16940 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
16950 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c  3VdbeMemExpandBl
16960 6f 62 28 70 52 65 63 29 20 29 20 67 6f 74 6f 20  ob(pRec) ) goto 
16970 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20 20 7d 65  no_mem;.      }e
16980 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 6e 5a 65  lse{.        nZe
16990 72 6f 20 2b 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a  ro += pRec->u.nZ
169a0 65 72 6f 3b 0a 20 20 20 20 20 20 20 20 6c 65 6e  ero;.        len
169b0 20 2d 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72   -= pRec->u.nZer
169c0 6f 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  o;.      }.    }
169d0 0a 20 20 20 20 6e 44 61 74 61 20 2b 3d 20 6c 65  .    nData += le
169e0 6e 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28  n;.    testcase(
169f0 20 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d 31 32   serial_type==12
16a00 37 20 29 3b 0a 20 20 20 20 74 65 73 74 63 61 73  7 );.    testcas
16a10 65 28 20 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d  e( serial_type==
16a20 31 32 38 20 29 3b 0a 20 20 20 20 6e 48 64 72 20  128 );.    nHdr 
16a30 2b 3d 20 73 65 72 69 61 6c 5f 74 79 70 65 3c 3d  += serial_type<=
16a40 31 32 37 20 3f 20 31 20 3a 20 73 71 6c 69 74 65  127 ? 1 : sqlite
16a50 33 56 61 72 69 6e 74 4c 65 6e 28 73 65 72 69 61  3VarintLen(seria
16a60 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20 69 66 28  l_type);.    if(
16a70 20 70 52 65 63 3d 3d 70 44 61 74 61 30 20 29 20   pRec==pData0 ) 
16a80 62 72 65 61 6b 3b 0a 20 20 20 20 70 52 65 63 2d  break;.    pRec-
16a90 2d 3b 0a 20 20 7d 77 68 69 6c 65 28 31 29 3b 0a  -;.  }while(1);.
16aa0 0a 20 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f  .  /* EVIDENCE-O
16ab0 46 3a 20 52 2d 32 32 35 36 34 2d 31 31 36 34 37  F: R-22564-11647
16ac0 20 54 68 65 20 68 65 61 64 65 72 20 62 65 67 69   The header begi
16ad0 6e 73 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65  ns with a single
16ae0 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20 77 68 69   varint.  ** whi
16af0 63 68 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68  ch determines th
16b00 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  e total number o
16b10 66 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 68  f bytes in the h
16b20 65 61 64 65 72 2e 20 54 68 65 20 76 61 72 69 6e  eader. The varin
16b30 74 0a 20 20 2a 2a 20 76 61 6c 75 65 20 69 73 20  t.  ** value is 
16b40 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20  the size of the 
16b50 68 65 61 64 65 72 20 69 6e 20 62 79 74 65 73 20  header in bytes 
16b60 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20 73 69  including the si
16b70 7a 65 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20 69  ze varint.  ** i
16b80 74 73 65 6c 66 2e 20 2a 2f 0a 20 20 74 65 73 74  tself. */.  test
16b90 63 61 73 65 28 20 6e 48 64 72 3d 3d 31 32 36 20  case( nHdr==126 
16ba0 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e  );.  testcase( n
16bb0 48 64 72 3d 3d 31 32 37 20 29 3b 0a 20 20 69 66  Hdr==127 );.  if
16bc0 28 20 6e 48 64 72 3c 3d 31 32 36 20 29 7b 0a 20  ( nHdr<=126 ){. 
16bd0 20 20 20 2f 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e     /* The common
16be0 20 63 61 73 65 20 2a 2f 0a 20 20 20 20 6e 48 64   case */.    nHd
16bf0 72 20 2b 3d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b  r += 1;.  }else{
16c00 0a 20 20 20 20 2f 2a 20 52 61 72 65 20 63 61 73  .    /* Rare cas
16c10 65 20 6f 66 20 61 20 72 65 61 6c 6c 79 20 6c 61  e of a really la
16c20 72 67 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20  rge header */.  
16c30 20 20 6e 56 61 72 69 6e 74 20 3d 20 73 71 6c 69    nVarint = sqli
16c40 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64  te3VarintLen(nHd
16c50 72 29 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20  r);.    nHdr += 
16c60 6e 56 61 72 69 6e 74 3b 0a 20 20 20 20 69 66 28  nVarint;.    if(
16c70 20 6e 56 61 72 69 6e 74 3c 73 71 6c 69 74 65 33   nVarint<sqlite3
16c80 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29 20  VarintLen(nHdr) 
16c90 29 20 6e 48 64 72 2b 2b 3b 0a 20 20 7d 0a 20 20  ) nHdr++;.  }.  
16ca0 6e 42 79 74 65 20 3d 20 6e 48 64 72 2b 6e 44 61  nByte = nHdr+nDa
16cb0 74 61 3b 0a 20 20 69 66 28 20 6e 42 79 74 65 2b  ta;.  if( nByte+
16cc0 6e 5a 65 72 6f 3e 64 62 2d 3e 61 4c 69 6d 69 74  nZero>db->aLimit
16cd0 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
16ce0 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74  NGTH] ){.    got
16cf0 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a  o too_big;.  }..
16d00 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74    /* Make sure t
16d10 68 65 20 6f 75 74 70 75 74 20 72 65 67 69 73 74  he output regist
16d20 65 72 20 68 61 73 20 61 20 62 75 66 66 65 72 20  er has a buffer 
16d30 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74 6f 20  large enough to 
16d40 73 74 6f 72 65 20 0a 20 20 2a 2a 20 74 68 65 20  store .  ** the 
16d50 6e 65 77 20 72 65 63 6f 72 64 2e 20 54 68 65 20  new record. The 
16d60 6f 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20  output register 
16d70 28 70 4f 70 2d 3e 70 33 29 20 69 73 20 6e 6f 74  (pOp->p3) is not
16d80 20 61 6c 6c 6f 77 65 64 20 74 6f 0a 20 20 2a 2a   allowed to.  **
16d90 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 69   be one of the i
16da0 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 20 28  nput registers (
16db0 62 65 63 61 75 73 65 20 74 68 65 20 66 6f 6c 6c  because the foll
16dc0 6f 77 69 6e 67 20 63 61 6c 6c 20 74 6f 0a 20 20  owing call to.  
16dd0 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  ** sqlite3VdbeMe
16de0 6d 43 6c 65 61 72 41 6e 64 52 65 73 69 7a 65 28  mClearAndResize(
16df0 29 20 63 6f 75 6c 64 20 63 6c 6f 62 62 65 72 20  ) could clobber 
16e00 74 68 65 20 76 61 6c 75 65 20 62 65 66 6f 72 65  the value before
16e10 20 69 74 20 69 73 20 75 73 65 64 29 2e 0a 20 20   it is used)..  
16e20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  */.  if( sqlite3
16e30 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52  VdbeMemClearAndR
16e40 65 73 69 7a 65 28 70 4f 75 74 2c 20 28 69 6e 74  esize(pOut, (int
16e50 29 6e 42 79 74 65 29 20 29 7b 0a 20 20 20 20 67  )nByte) ){.    g
16e60 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
16e70 20 20 7a 4e 65 77 52 65 63 6f 72 64 20 3d 20 28    zNewRecord = (
16e80 75 38 20 2a 29 70 4f 75 74 2d 3e 7a 3b 0a 0a 20  u8 *)pOut->z;.. 
16e90 20 2f 2a 20 57 72 69 74 65 20 74 68 65 20 72 65   /* Write the re
16ea0 63 6f 72 64 20 2a 2f 0a 20 20 69 20 3d 20 70 75  cord */.  i = pu
16eb0 74 56 61 72 69 6e 74 33 32 28 7a 4e 65 77 52 65  tVarint32(zNewRe
16ec0 63 6f 72 64 2c 20 6e 48 64 72 29 3b 0a 20 20 6a  cord, nHdr);.  j
16ed0 20 3d 20 6e 48 64 72 3b 0a 20 20 61 73 73 65 72   = nHdr;.  asser
16ee0 74 28 20 70 44 61 74 61 30 3c 3d 70 4c 61 73 74  t( pData0<=pLast
16ef0 20 29 3b 0a 20 20 70 52 65 63 20 3d 20 70 44 61   );.  pRec = pDa
16f00 74 61 30 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 73  ta0;.  do{.    s
16f10 65 72 69 61 6c 5f 74 79 70 65 20 3d 20 70 52 65  erial_type = pRe
16f20 63 2d 3e 75 54 65 6d 70 3b 0a 20 20 20 20 2f 2a  c->uTemp;.    /*
16f30 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
16f40 30 36 35 32 39 2d 34 37 33 36 32 20 46 6f 6c 6c  06529-47362 Foll
16f50 6f 77 69 6e 67 20 74 68 65 20 73 69 7a 65 20 76  owing the size v
16f60 61 72 69 6e 74 20 61 72 65 20 6f 6e 65 20 6f 72  arint are one or
16f70 20 6d 6f 72 65 0a 20 20 20 20 2a 2a 20 61 64 64   more.    ** add
16f80 69 74 69 6f 6e 61 6c 20 76 61 72 69 6e 74 73 2c  itional varints,
16f90 20 6f 6e 65 20 70 65 72 20 63 6f 6c 75 6d 6e 2e   one per column.
16fa0 20 2a 2f 0a 20 20 20 20 69 20 2b 3d 20 70 75 74   */.    i += put
16fb0 56 61 72 69 6e 74 33 32 28 26 7a 4e 65 77 52 65  Varint32(&zNewRe
16fc0 63 6f 72 64 5b 69 5d 2c 20 73 65 72 69 61 6c 5f  cord[i], serial_
16fd0 74 79 70 65 29 3b 20 20 20 20 20 20 20 20 20 20  type);          
16fe0 20 20 2f 2a 20 73 65 72 69 61 6c 20 74 79 70 65    /* serial type
16ff0 20 2a 2f 0a 20 20 20 20 2f 2a 20 45 56 49 44 45   */.    /* EVIDE
17000 4e 43 45 2d 4f 46 3a 20 52 2d 36 34 35 33 36 2d  NCE-OF: R-64536-
17010 35 31 37 32 38 20 54 68 65 20 76 61 6c 75 65 73  51728 The values
17020 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
17030 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 0a 20   in the record. 
17040 20 20 20 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c     ** immediatel
17050 79 20 66 6f 6c 6c 6f 77 20 74 68 65 20 68 65 61  y follow the hea
17060 64 65 72 2e 20 2a 2f 0a 20 20 20 20 6a 20 2b 3d  der. */.    j +=
17070 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
17080 61 6c 50 75 74 28 26 7a 4e 65 77 52 65 63 6f 72  alPut(&zNewRecor
17090 64 5b 6a 5d 2c 20 70 52 65 63 2c 20 73 65 72 69  d[j], pRec, seri
170a0 61 6c 5f 74 79 70 65 29 3b 20 2f 2a 20 63 6f 6e  al_type); /* con
170b0 74 65 6e 74 20 2a 2f 0a 20 20 7d 77 68 69 6c 65  tent */.  }while
170c0 28 20 28 2b 2b 70 52 65 63 29 3c 3d 70 4c 61 73  ( (++pRec)<=pLas
170d0 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69  t );.  assert( i
170e0 3d 3d 6e 48 64 72 20 29 3b 0a 20 20 61 73 73 65  ==nHdr );.  asse
170f0 72 74 28 20 6a 3d 3d 6e 42 79 74 65 20 29 3b 0a  rt( j==nByte );.
17100 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
17110 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
17120 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
17130 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70  >nCursor) );.  p
17140 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42  Out->n = (int)nB
17150 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  yte;.  pOut->fla
17160 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 3b 0a 20  gs = MEM_Blob;. 
17170 20 69 66 28 20 6e 5a 65 72 6f 20 29 7b 0a 20 20   if( nZero ){.  
17180 20 20 70 4f 75 74 2d 3e 75 2e 6e 5a 65 72 6f 20    pOut->u.nZero 
17190 3d 20 6e 5a 65 72 6f 3b 0a 20 20 20 20 70 4f 75  = nZero;.    pOu
171a0 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f  t->flags |= MEM_
171b0 5a 65 72 6f 3b 0a 20 20 7d 0a 20 20 52 45 47 49  Zero;.  }.  REGI
171c0 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
171d0 70 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50 44  p3, pOut);.  UPD
171e0 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
171f0 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
17200 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  .}../* Opcode: C
17210 6f 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  ount P1 P2 * * *
17220 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
17230 50 32 5d 3d 63 6f 75 6e 74 28 29 0a 2a 2a 0a 2a  P2]=count().**.*
17240 2a 20 53 74 6f 72 65 20 74 68 65 20 6e 75 6d 62  * Store the numb
17250 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 28 61  er of entries (a
17260 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 29  n integer value)
17270 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72   in the table or
17280 20 69 6e 64 65 78 20 0a 2a 2a 20 6f 70 65 6e 65   index .** opene
17290 64 20 62 79 20 63 75 72 73 6f 72 20 50 31 20 69  d by cursor P1 i
172a0 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2f  n register P2.*/
172b0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
172c0 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a  OMIT_BTREECOUNT.
172d0 63 61 73 65 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b  case OP_Count: {
172e0 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
172f0 20 2a 2f 0a 20 20 69 36 34 20 6e 45 6e 74 72 79   */.  i64 nEntry
17300 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
17310 72 73 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  rsr;..  assert( 
17320 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
17330 5d 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  ]->eCurType==CUR
17340 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
17350 70 43 72 73 72 20 3d 20 70 2d 3e 61 70 43 73 72  pCrsr = p->apCsr
17360 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 75 63 2e 70 43  [pOp->p1]->uc.pC
17370 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28  ursor;.  assert(
17380 20 70 43 72 73 72 20 29 3b 0a 20 20 6e 45 6e 74   pCrsr );.  nEnt
17390 72 79 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20  ry = 0;  /* Not 
173a0 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73  needed.  Only us
173b0 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20  ed to silence a 
173c0 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72 63  warning. */.  rc
173d0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
173e0 6f 75 6e 74 28 70 43 72 73 72 2c 20 26 6e 45 6e  ount(pCrsr, &nEn
173f0 74 72 79 29 3b 0a 20 20 69 66 28 20 72 63 20 29  try);.  if( rc )
17400 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
17410 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 4f 75 74  to_error;.  pOut
17420 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
17430 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75  e(p, pOp);.  pOu
17440 74 2d 3e 75 2e 69 20 3d 20 6e 45 6e 74 72 79 3b  t->u.i = nEntry;
17450 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
17460 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  if../* Opcode: S
17470 61 76 65 70 6f 69 6e 74 20 50 31 20 2a 20 2a 20  avepoint P1 * * 
17480 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c  P4 *.**.** Open,
17490 20 72 65 6c 65 61 73 65 20 6f 72 20 72 6f 6c 6c   release or roll
174a0 62 61 63 6b 20 74 68 65 20 73 61 76 65 70 6f 69  back the savepoi
174b0 6e 74 20 6e 61 6d 65 64 20 62 79 20 70 61 72 61  nt named by para
174c0 6d 65 74 65 72 20 50 34 2c 20 64 65 70 65 6e 64  meter P4, depend
174d0 69 6e 67 0a 2a 2a 20 6f 6e 20 74 68 65 20 76 61  ing.** on the va
174e0 6c 75 65 20 6f 66 20 50 31 2e 20 54 6f 20 6f 70  lue of P1. To op
174f0 65 6e 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69  en a new savepoi
17500 6e 74 2c 20 50 31 3d 3d 30 2e 20 54 6f 20 72 65  nt, P1==0. To re
17510 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29 20 61  lease (commit) a
17520 6e 0a 2a 2a 20 65 78 69 73 74 69 6e 67 20 73 61  n.** existing sa
17530 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 31 2c 20  vepoint, P1==1, 
17540 6f 72 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61  or to rollback a
17550 6e 20 65 78 69 73 74 69 6e 67 20 73 61 76 65 70  n existing savep
17560 6f 69 6e 74 20 50 31 3d 3d 32 2e 0a 2a 2f 0a 63  oint P1==2..*/.c
17570 61 73 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74  ase OP_Savepoint
17580 3a 20 7b 0a 20 20 69 6e 74 20 70 31 3b 20 20 20  : {.  int p1;   
17590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
175a0 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f        /* Value o
175b0 66 20 50 31 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  f P1 operand */.
175c0 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
175d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
175e0 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 73 61 76    /* Name of sav
175f0 65 70 6f 69 6e 74 20 2a 2f 0a 20 20 69 6e 74 20  epoint */.  int 
17600 6e 4e 61 6d 65 3b 0a 20 20 53 61 76 65 70 6f 69  nName;.  Savepoi
17610 6e 74 20 2a 70 4e 65 77 3b 0a 20 20 53 61 76 65  nt *pNew;.  Save
17620 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e  point *pSavepoin
17630 74 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  t;.  Savepoint *
17640 70 54 6d 70 3b 0a 20 20 69 6e 74 20 69 53 61 76  pTmp;.  int iSav
17650 65 70 6f 69 6e 74 3b 0a 20 20 69 6e 74 20 69 69  epoint;.  int ii
17660 3b 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70  ;..  p1 = pOp->p
17670 31 3b 0a 20 20 7a 4e 61 6d 65 20 3d 20 70 4f 70  1;.  zName = pOp
17680 2d 3e 70 34 2e 7a 3b 0a 0a 20 20 2f 2a 20 41 73  ->p4.z;..  /* As
17690 73 65 72 74 20 74 68 61 74 20 74 68 65 20 70 31  sert that the p1
176a0 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 76 61   parameter is va
176b0 6c 69 64 2e 20 41 6c 73 6f 20 74 68 61 74 20 69  lid. Also that i
176c0 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f 70  f there is no op
176d0 65 6e 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63 74  en.  ** transact
176e0 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 72 65 20  ion, then there 
176f0 63 61 6e 6e 6f 74 20 62 65 20 61 6e 79 20 73 61  cannot be any sa
17700 76 65 70 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f 0a  vepoints. .  */.
17710 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53    assert( db->pS
17720 61 76 65 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20 64  avepoint==0 || d
17730 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30  b->autoCommit==0
17740 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31   );.  assert( p1
17750 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49  ==SAVEPOINT_BEGI
17760 4e 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  N||p1==SAVEPOINT
17770 5f 52 45 4c 45 41 53 45 7c 7c 70 31 3d 3d 53 41  _RELEASE||p1==SA
17780 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b  VEPOINT_ROLLBACK
17790 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62   );.  assert( db
177a0 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 7c 7c 20  ->pSavepoint || 
177b0 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f  db->isTransactio
177c0 6e 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 29 3b  nSavepoint==0 );
177d0 0a 20 20 61 73 73 65 72 74 28 20 63 68 65 63 6b  .  assert( check
177e0 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64  SavepointCount(d
177f0 62 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  b) );.  assert( 
17800 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a  p->bIsReader );.
17810 0a 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50  .  if( p1==SAVEP
17820 4f 49 4e 54 5f 42 45 47 49 4e 20 29 7b 0a 20 20  OINT_BEGIN ){.  
17830 20 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 57    if( db->nVdbeW
17840 72 69 74 65 3e 30 20 29 7b 0a 20 20 20 20 20 20  rite>0 ){.      
17850 2f 2a 20 41 20 6e 65 77 20 73 61 76 65 70 6f 69  /* A new savepoi
17860 6e 74 20 63 61 6e 6e 6f 74 20 62 65 20 63 72 65  nt cannot be cre
17870 61 74 65 64 20 69 66 20 74 68 65 72 65 20 61 72  ated if there ar
17880 65 20 61 63 74 69 76 65 20 77 72 69 74 65 20 0a  e active write .
17890 20 20 20 20 20 20 2a 2a 20 73 74 61 74 65 6d 65        ** stateme
178a0 6e 74 73 20 28 69 2e 65 2e 20 6f 70 65 6e 20 72  nts (i.e. open r
178b0 65 61 64 2f 77 72 69 74 65 20 69 6e 63 72 65 6d  ead/write increm
178c0 65 6e 74 61 6c 20 62 6c 6f 62 20 68 61 6e 64 6c  ental blob handl
178d0 65 73 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  es)..      */.  
178e0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45      sqlite3VdbeE
178f0 72 72 6f 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20  rror(p, "cannot 
17900 6f 70 65 6e 20 73 61 76 65 70 6f 69 6e 74 20 2d  open savepoint -
17910 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   SQL statements 
17920 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20  in progress");. 
17930 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
17940 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65  _BUSY;.    }else
17950 7b 0a 20 20 20 20 20 20 6e 4e 61 6d 65 20 3d 20  {.      nName = 
17960 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
17970 7a 4e 61 6d 65 29 3b 0a 0a 23 69 66 6e 64 65 66  zName);..#ifndef
17980 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
17990 54 55 41 4c 54 41 42 4c 45 0a 20 20 20 20 20 20  TUALTABLE.      
179a0 2f 2a 20 54 68 69 73 20 63 61 6c 6c 20 69 73 20  /* This call is 
179b0 4f 6b 20 65 76 65 6e 20 69 66 20 74 68 69 73 20  Ok even if this 
179c0 73 61 76 65 70 6f 69 6e 74 20 69 73 20 61 63 74  savepoint is act
179d0 75 61 6c 6c 79 20 61 20 74 72 61 6e 73 61 63 74  ually a transact
179e0 69 6f 6e 0a 20 20 20 20 20 20 2a 2a 20 73 61 76  ion.      ** sav
179f0 65 70 6f 69 6e 74 20 28 61 6e 64 20 74 68 65 72  epoint (and ther
17a00 65 66 6f 72 65 20 73 68 6f 75 6c 64 20 6e 6f 74  efore should not
17a10 20 70 72 6f 6d 70 74 20 78 53 61 76 65 70 6f 69   prompt xSavepoi
17a20 6e 74 28 29 29 20 63 61 6c 6c 62 61 63 6b 73 2e  nt()) callbacks.
17a30 0a 20 20 20 20 20 20 2a 2a 20 49 66 20 74 68 69  .      ** If thi
17a40 73 20 69 73 20 61 20 74 72 61 6e 73 61 63 74 69  s is a transacti
17a50 6f 6e 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69  on savepoint bei
17a60 6e 67 20 6f 70 65 6e 65 64 2c 20 69 74 20 69 73  ng opened, it is
17a70 20 67 75 61 72 61 6e 74 65 65 64 0a 20 20 20 20   guaranteed.    
17a80 20 20 2a 2a 20 74 68 61 74 20 74 68 65 20 64 62    ** that the db
17a90 2d 3e 61 56 54 72 61 6e 73 5b 5d 20 61 72 72 61  ->aVTrans[] arra
17aa0 79 20 69 73 20 65 6d 70 74 79 2e 20 20 2a 2f 0a  y is empty.  */.
17ab0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62        assert( db
17ac0 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20  ->autoCommit==0 
17ad0 7c 7c 20 64 62 2d 3e 6e 56 54 72 61 6e 73 3d 3d  || db->nVTrans==
17ae0 30 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  0 );.      rc = 
17af0 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70  sqlite3VtabSavep
17b00 6f 69 6e 74 28 64 62 2c 20 53 41 56 45 50 4f 49  oint(db, SAVEPOI
17b10 4e 54 5f 42 45 47 49 4e 2c 0a 20 20 20 20 20 20  NT_BEGIN,.      
17b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b30 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53            db->nS
17b40 74 61 74 65 6d 65 6e 74 2b 64 62 2d 3e 6e 53 61  tatement+db->nSa
17b50 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20  vepoint);.      
17b60 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
17b70 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  K ) goto abort_d
17b80 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e  ue_to_error;.#en
17b90 64 69 66 0a 0a 20 20 20 20 20 20 2f 2a 20 43 72  dif..      /* Cr
17ba0 65 61 74 65 20 61 20 6e 65 77 20 73 61 76 65 70  eate a new savep
17bb0 6f 69 6e 74 20 73 74 72 75 63 74 75 72 65 2e 20  oint structure. 
17bc0 2a 2f 0a 20 20 20 20 20 20 70 4e 65 77 20 3d 20  */.      pNew = 
17bd0 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52  sqlite3DbMallocR
17be0 61 77 4e 4e 28 64 62 2c 20 73 69 7a 65 6f 66 28  awNN(db, sizeof(
17bf0 53 61 76 65 70 6f 69 6e 74 29 2b 6e 4e 61 6d 65  Savepoint)+nName
17c00 2b 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  +1);.      if( p
17c10 4e 65 77 20 29 7b 0a 20 20 20 20 20 20 20 20 70  New ){.        p
17c20 4e 65 77 2d 3e 7a 4e 61 6d 65 20 3d 20 28 63 68  New->zName = (ch
17c30 61 72 20 2a 29 26 70 4e 65 77 5b 31 5d 3b 0a 20  ar *)&pNew[1];. 
17c40 20 20 20 20 20 20 20 6d 65 6d 63 70 79 28 70 4e         memcpy(pN
17c50 65 77 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65  ew->zName, zName
17c60 2c 20 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20  , nName+1);.    
17c70 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74  .        /* If t
17c80 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 20  here is no open 
17c90 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65  transaction, the
17ca0 6e 20 6d 61 72 6b 20 74 68 69 73 20 61 73 20 61  n mark this as a
17cb0 20 73 70 65 63 69 61 6c 0a 20 20 20 20 20 20 20   special.       
17cc0 20 2a 2a 20 22 74 72 61 6e 73 61 63 74 69 6f 6e   ** "transaction
17cd0 20 73 61 76 65 70 6f 69 6e 74 22 2e 20 2a 2f 0a   savepoint". */.
17ce0 20 20 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e          if( db->
17cf0 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20  autoCommit ){.  
17d00 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f          db->auto
17d10 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20  Commit = 0;.    
17d20 20 20 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e        db->isTran
17d30 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74  sactionSavepoint
17d40 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65   = 1;.        }e
17d50 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 64  lse{.          d
17d60 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2b 2b 3b  b->nSavepoint++;
17d70 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  .        }..    
17d80 20 20 20 20 2f 2a 20 4c 69 6e 6b 20 74 68 65 20      /* Link the 
17d90 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20 69 6e  new savepoint in
17da0 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
17db0 68 61 6e 64 6c 65 27 73 20 6c 69 73 74 2e 20 2a  handle's list. *
17dc0 2f 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e  /.        pNew->
17dd0 70 4e 65 78 74 20 3d 20 64 62 2d 3e 70 53 61 76  pNext = db->pSav
17de0 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20 20  epoint;.        
17df0 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d  db->pSavepoint =
17e00 20 70 4e 65 77 3b 0a 20 20 20 20 20 20 20 20 70   pNew;.        p
17e10 4e 65 77 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f  New->nDeferredCo
17e20 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72  ns = db->nDeferr
17e30 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 20 20  edCons;.        
17e40 70 4e 65 77 2d 3e 6e 44 65 66 65 72 72 65 64 49  pNew->nDeferredI
17e50 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65  mmCons = db->nDe
17e60 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20  ferredImmCons;. 
17e70 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
17e80 65 6c 73 65 7b 0a 20 20 20 20 69 53 61 76 65 70  else{.    iSavep
17e90 6f 69 6e 74 20 3d 20 30 3b 0a 0a 20 20 20 20 2f  oint = 0;..    /
17ea0 2a 20 46 69 6e 64 20 74 68 65 20 6e 61 6d 65 64  * Find the named
17eb0 20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66 20 74   savepoint. If t
17ec0 68 65 72 65 20 69 73 20 6e 6f 20 73 75 63 68 20  here is no such 
17ed0 73 61 76 65 70 6f 69 6e 74 2c 20 74 68 65 6e 20  savepoint, then 
17ee0 61 6e 0a 20 20 20 20 2a 2a 20 61 6e 20 65 72 72  an.    ** an err
17ef0 6f 72 20 69 73 20 72 65 74 75 72 6e 65 64 20 74  or is returned t
17f00 6f 20 74 68 65 20 75 73 65 72 2e 20 20 2a 2f 0a  o the user.  */.
17f10 20 20 20 20 66 6f 72 28 0a 20 20 20 20 20 20 70      for(.      p
17f20 53 61 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e  Savepoint = db->
17f30 70 53 61 76 65 70 6f 69 6e 74 3b 20 0a 20 20 20  pSavepoint; .   
17f40 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20 26 26     pSavepoint &&
17f50 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28   sqlite3StrICmp(
17f60 70 53 61 76 65 70 6f 69 6e 74 2d 3e 7a 4e 61 6d  pSavepoint->zNam
17f70 65 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20  e, zName);.     
17f80 20 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53   pSavepoint = pS
17f90 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 0a  avepoint->pNext.
17fa0 20 20 20 20 29 7b 0a 20 20 20 20 20 20 69 53 61      ){.      iSa
17fb0 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 7d  vepoint++;.    }
17fc0 0a 20 20 20 20 69 66 28 20 21 70 53 61 76 65 70  .    if( !pSavep
17fd0 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 73 71  oint ){.      sq
17fe0 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70  lite3VdbeError(p
17ff0 2c 20 22 6e 6f 20 73 75 63 68 20 73 61 76 65 70  , "no such savep
18000 6f 69 6e 74 3a 20 25 73 22 2c 20 7a 4e 61 6d 65  oint: %s", zName
18010 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  );.      rc = SQ
18020 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20  LITE_ERROR;.    
18030 7d 65 6c 73 65 20 69 66 28 20 64 62 2d 3e 6e 56  }else if( db->nV
18040 64 62 65 57 72 69 74 65 3e 30 20 26 26 20 70 31  dbeWrite>0 && p1
18050 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45  ==SAVEPOINT_RELE
18060 41 53 45 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  ASE ){.      /* 
18070 49 74 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62  It is not possib
18080 6c 65 20 74 6f 20 72 65 6c 65 61 73 65 20 28 63  le to release (c
18090 6f 6d 6d 69 74 29 20 61 20 73 61 76 65 70 6f 69  ommit) a savepoi
180a0 6e 74 20 69 66 20 74 68 65 72 65 20 61 72 65 20  nt if there are 
180b0 0a 20 20 20 20 20 20 2a 2a 20 61 63 74 69 76 65  .      ** active
180c0 20 77 72 69 74 65 20 73 74 61 74 65 6d 65 6e 74   write statement
180d0 73 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  s..      */.    
180e0 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72    sqlite3VdbeErr
180f0 6f 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20 72 65  or(p, "cannot re
18100 6c 65 61 73 65 20 73 61 76 65 70 6f 69 6e 74 20  lease savepoint 
18110 2d 20 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  - ".            
18120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53                "S
18130 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  QL statements in
18140 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20   progress");.   
18150 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42     rc = SQLITE_B
18160 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  USY;.    }else{.
18170 0a 20 20 20 20 20 20 2f 2a 20 44 65 74 65 72 6d  .      /* Determ
18180 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ine whether or n
18190 6f 74 20 74 68 69 73 20 69 73 20 61 20 74 72 61  ot this is a tra
181a0 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69  nsaction savepoi
181b0 6e 74 2e 20 49 66 20 73 6f 2c 0a 20 20 20 20 20  nt. If so,.     
181c0 20 2a 2a 20 61 6e 64 20 74 68 69 73 20 69 73 20   ** and this is 
181d0 61 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e  a RELEASE comman
181e0 64 2c 20 74 68 65 6e 20 74 68 65 20 63 75 72 72  d, then the curr
181f0 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
18200 0a 20 20 20 20 20 20 2a 2a 20 69 73 20 63 6f 6d  .      ** is com
18210 6d 69 74 74 65 64 2e 20 0a 20 20 20 20 20 20 2a  mitted. .      *
18220 2f 0a 20 20 20 20 20 20 69 6e 74 20 69 73 54 72  /.      int isTr
18230 61 6e 73 61 63 74 69 6f 6e 20 3d 20 70 53 61 76  ansaction = pSav
18240 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3d 3d 30  epoint->pNext==0
18250 20 26 26 20 64 62 2d 3e 69 73 54 72 61 6e 73 61   && db->isTransa
18260 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 0a  ctionSavepoint;.
18270 20 20 20 20 20 20 69 66 28 20 69 73 54 72 61 6e        if( isTran
18280 73 61 63 74 69 6f 6e 20 26 26 20 70 31 3d 3d 53  saction && p1==S
18290 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45  AVEPOINT_RELEASE
182a0 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20   ){.        if( 
182b0 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62  (rc = sqlite3Vdb
182c0 65 43 68 65 63 6b 46 6b 28 70 2c 20 31 29 29 21  eCheckFk(p, 1))!
182d0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
182e0 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62          goto vdb
182f0 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20  e_return;.      
18300 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e    }.        db->
18310 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a  autoCommit = 1;.
18320 20 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69          if( sqli
18330 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3d 3d  te3VdbeHalt(p)==
18340 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20  SQLITE_BUSY ){. 
18350 20 20 20 20 20 20 20 20 20 70 2d 3e 70 63 20 3d           p->pc =
18360 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70   (int)(pOp - aOp
18370 29 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d  );.          db-
18380 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b  >autoCommit = 0;
18390 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e 72 63  .          p->rc
183a0 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42   = rc = SQLITE_B
183b0 55 53 59 3b 0a 20 20 20 20 20 20 20 20 20 20 67  USY;.          g
183c0 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
183d0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
183e0 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63     db->isTransac
183f0 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20  tionSavepoint = 
18400 30 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  0;.        rc = 
18410 70 2d 3e 72 63 3b 0a 20 20 20 20 20 20 7d 65 6c  p->rc;.      }el
18420 73 65 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20  se{.        int 
18430 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65 3b 0a  isSchemaChange;.
18440 20 20 20 20 20 20 20 20 69 53 61 76 65 70 6f 69          iSavepoi
18450 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f  nt = db->nSavepo
18460 69 6e 74 20 2d 20 69 53 61 76 65 70 6f 69 6e 74  int - iSavepoint
18470 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 69 66   - 1;.        if
18480 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ( p1==SAVEPOINT_
18490 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20 20 20 20  ROLLBACK ){.    
184a0 20 20 20 20 20 20 69 73 53 63 68 65 6d 61 43 68        isSchemaCh
184b0 61 6e 67 65 20 3d 20 28 64 62 2d 3e 6d 44 62 46  ange = (db->mDbF
184c0 6c 61 67 73 20 26 20 44 42 46 4c 41 47 5f 53 63  lags & DBFLAG_Sc
184d0 68 65 6d 61 43 68 61 6e 67 65 29 21 3d 30 3b 0a  hemaChange)!=0;.
184e0 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 69 69            for(ii
184f0 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20  =0; ii<db->nDb; 
18500 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20  ii++){.         
18510 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
18520 74 72 65 65 54 72 69 70 41 6c 6c 43 75 72 73 6f  treeTripAllCurso
18530 72 73 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70  rs(db->aDb[ii].p
18540 42 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  Bt,.            
18550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18560 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54             SQLIT
18570 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b  E_ABORT_ROLLBACK
18580 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
18590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
185a0 20 20 20 20 20 20 20 20 20 69 73 53 63 68 65 6d           isSchem
185b0 61 43 68 61 6e 67 65 3d 3d 30 29 3b 0a 20 20 20  aChange==0);.   
185c0 20 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21           if( rc!
185d0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74  =SQLITE_OK ) got
185e0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
185f0 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20  rror;.          
18600 7d 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  }.        }else{
18610 0a 20 20 20 20 20 20 20 20 20 20 69 73 53 63 68  .          isSch
18620 65 6d 61 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20  emaChange = 0;. 
18630 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
18640 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64 62   for(ii=0; ii<db
18650 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20  ->nDb; ii++){.  
18660 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
18670 69 74 65 33 42 74 72 65 65 53 61 76 65 70 6f 69  ite3BtreeSavepoi
18680 6e 74 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70  nt(db->aDb[ii].p
18690 42 74 2c 20 70 31 2c 20 69 53 61 76 65 70 6f 69  Bt, p1, iSavepoi
186a0 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69  nt);.          i
186b0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
186c0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
186d0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
186e0 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20  o_error;.       
186f0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20     }.        }. 
18700 20 20 20 20 20 20 20 69 66 28 20 69 73 53 63 68         if( isSch
18710 65 6d 61 43 68 61 6e 67 65 20 29 7b 0a 20 20 20  emaChange ){.   
18720 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 78         sqlite3Ex
18730 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74  pirePreparedStat
18740 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20  ements(db);.    
18750 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65 73        sqlite3Res
18760 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f  etAllSchemasOfCo
18770 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20  nnection(db);.  
18780 20 20 20 20 20 20 20 20 64 62 2d 3e 6d 44 62 46          db->mDbF
18790 6c 61 67 73 20 7c 3d 20 44 42 46 4c 41 47 5f 53  lags |= DBFLAG_S
187a0 63 68 65 6d 61 43 68 61 6e 67 65 3b 0a 20 20 20  chemaChange;.   
187b0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
187c0 20 0a 20 20 20 20 20 20 2f 2a 20 52 65 67 61 72   .      /* Regar
187d0 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72  dless of whether
187e0 20 74 68 69 73 20 69 73 20 61 20 52 45 4c 45 41   this is a RELEA
187f0 53 45 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 2c 20  SE or ROLLBACK, 
18800 64 65 73 74 72 6f 79 20 61 6c 6c 20 0a 20 20 20  destroy all .   
18810 20 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74 73     ** savepoints
18820 20 6e 65 73 74 65 64 20 69 6e 73 69 64 65 20 6f   nested inside o
18830 66 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20  f the savepoint 
18840 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f  being operated o
18850 6e 2e 20 2a 2f 0a 20 20 20 20 20 20 77 68 69 6c  n. */.      whil
18860 65 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e  e( db->pSavepoin
18870 74 21 3d 70 53 61 76 65 70 6f 69 6e 74 20 29 7b  t!=pSavepoint ){
18880 0a 20 20 20 20 20 20 20 20 70 54 6d 70 20 3d 20  .        pTmp = 
18890 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a  db->pSavepoint;.
188a0 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76          db->pSav
188b0 65 70 6f 69 6e 74 20 3d 20 70 54 6d 70 2d 3e 70  epoint = pTmp->p
188c0 4e 65 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71  Next;.        sq
188d0 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
188e0 70 54 6d 70 29 3b 0a 20 20 20 20 20 20 20 20 64  pTmp);.        d
188f0 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b  b->nSavepoint--;
18900 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
18910 2f 2a 20 49 66 20 69 74 20 69 73 20 61 20 52 45  /* If it is a RE
18920 4c 45 41 53 45 2c 20 74 68 65 6e 20 64 65 73 74  LEASE, then dest
18930 72 6f 79 20 74 68 65 20 73 61 76 65 70 6f 69 6e  roy the savepoin
18940 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64  t being operated
18950 20 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20 74 6f   on .      ** to
18960 6f 2e 20 49 66 20 69 74 20 69 73 20 61 20 52 4f  o. If it is a RO
18970 4c 4c 42 41 43 4b 20 54 4f 2c 20 74 68 65 6e 20  LLBACK TO, then 
18980 73 65 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  set the number o
18990 66 20 64 65 66 65 72 72 65 64 20 0a 20 20 20 20  f deferred .    
189a0 20 20 2a 2a 20 63 6f 6e 73 74 72 61 69 6e 74 20    ** constraint 
189b0 76 69 6f 6c 61 74 69 6f 6e 73 20 70 72 65 73 65  violations prese
189c0 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  nt in the databa
189d0 73 65 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  se to the value 
189e0 73 74 6f 72 65 64 0a 20 20 20 20 20 20 2a 2a 20  stored.      ** 
189f0 77 68 65 6e 20 74 68 65 20 73 61 76 65 70 6f 69  when the savepoi
18a00 6e 74 20 77 61 73 20 63 72 65 61 74 65 64 2e 20  nt was created. 
18a10 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 31   */.      if( p1
18a20 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45  ==SAVEPOINT_RELE
18a30 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20 20 61  ASE ){.        a
18a40 73 73 65 72 74 28 20 70 53 61 76 65 70 6f 69 6e  ssert( pSavepoin
18a50 74 3d 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e  t==db->pSavepoin
18a60 74 20 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d  t );.        db-
18a70 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53  >pSavepoint = pS
18a80 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3b  avepoint->pNext;
18a90 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
18aa0 44 62 46 72 65 65 28 64 62 2c 20 70 53 61 76 65  DbFree(db, pSave
18ab0 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  point);.        
18ac0 69 66 28 20 21 69 73 54 72 61 6e 73 61 63 74 69  if( !isTransacti
18ad0 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  on ){.          
18ae0 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d  db->nSavepoint--
18af0 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
18b00 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
18b10 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f   db->nDeferredCo
18b20 6e 73 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d  ns = pSavepoint-
18b30 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a  >nDeferredCons;.
18b40 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 44 65 66          db->nDef
18b50 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 70  erredImmCons = p
18b60 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66 65  Savepoint->nDefe
18b70 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20  rredImmCons;.   
18b80 20 20 20 7d 0a 0a 20 20 20 20 20 20 69 66 28 20     }..      if( 
18b90 21 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 7c  !isTransaction |
18ba0 7c 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  | p1==SAVEPOINT_
18bb0 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20 20 20 20  ROLLBACK ){.    
18bc0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
18bd0 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 64 62  VtabSavepoint(db
18be0 2c 20 70 31 2c 20 69 53 61 76 65 70 6f 69 6e 74  , p1, iSavepoint
18bf0 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72  );.        if( r
18c00 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67  c!=SQLITE_OK ) g
18c10 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
18c20 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
18c30 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20      }.  }.  if( 
18c40 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
18c50 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20  due_to_error;.. 
18c60 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
18c70 63 6f 64 65 3a 20 41 75 74 6f 43 6f 6d 6d 69 74  code: AutoCommit
18c80 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
18c90 2a 2a 20 53 65 74 20 74 68 65 20 64 61 74 61 62  ** Set the datab
18ca0 61 73 65 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20  ase auto-commit 
18cb0 66 6c 61 67 20 74 6f 20 50 31 20 28 31 20 6f 72  flag to P1 (1 or
18cc0 20 30 29 2e 20 49 66 20 50 32 20 69 73 20 74 72   0). If P2 is tr
18cd0 75 65 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b  ue, roll.** back
18ce0 20 61 6e 79 20 63 75 72 72 65 6e 74 6c 79 20 61   any currently a
18cf0 63 74 69 76 65 20 62 74 72 65 65 20 74 72 61 6e  ctive btree tran
18d00 73 61 63 74 69 6f 6e 73 2e 20 49 66 20 74 68 65  sactions. If the
18d10 72 65 20 61 72 65 20 61 6e 79 20 61 63 74 69 76  re are any activ
18d20 65 0a 2a 2a 20 56 4d 73 20 28 61 70 61 72 74 20  e.** VMs (apart 
18d30 66 72 6f 6d 20 74 68 69 73 20 6f 6e 65 29 2c 20  from this one), 
18d40 74 68 65 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20  then a ROLLBACK 
18d50 66 61 69 6c 73 2e 20 20 41 20 43 4f 4d 4d 49 54  fails.  A COMMIT
18d60 20 66 61 69 6c 73 20 69 66 0a 2a 2a 20 74 68 65   fails if.** the
18d70 72 65 20 61 72 65 20 61 63 74 69 76 65 20 77 72  re are active wr
18d80 69 74 69 6e 67 20 56 4d 73 20 6f 72 20 61 63 74  iting VMs or act
18d90 69 76 65 20 56 4d 73 20 74 68 61 74 20 75 73 65  ive VMs that use
18da0 20 73 68 61 72 65 64 20 63 61 63 68 65 2e 0a 2a   shared cache..*
18db0 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
18dc0 63 74 69 6f 6e 20 63 61 75 73 65 73 20 74 68 65  ction causes the
18dd0 20 56 4d 20 74 6f 20 68 61 6c 74 2e 0a 2a 2f 0a   VM to halt..*/.
18de0 63 61 73 65 20 4f 50 5f 41 75 74 6f 43 6f 6d 6d  case OP_AutoComm
18df0 69 74 3a 20 7b 0a 20 20 69 6e 74 20 64 65 73 69  it: {.  int desi
18e00 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20  redAutoCommit;. 
18e10 20 69 6e 74 20 69 52 6f 6c 6c 62 61 63 6b 3b 0a   int iRollback;.
18e20 0a 20 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  .  desiredAutoCo
18e30 6d 6d 69 74 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  mmit = pOp->p1;.
18e40 20 20 69 52 6f 6c 6c 62 61 63 6b 20 3d 20 70 4f    iRollback = pO
18e50 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28  p->p2;.  assert(
18e60 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
18e70 69 74 3d 3d 31 20 7c 7c 20 64 65 73 69 72 65 64  it==1 || desired
18e80 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b  AutoCommit==0 );
18e90 0a 20 20 61 73 73 65 72 74 28 20 64 65 73 69 72  .  assert( desir
18ea0 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20  edAutoCommit==1 
18eb0 7c 7c 20 69 52 6f 6c 6c 62 61 63 6b 3d 3d 30 20  || iRollback==0 
18ec0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  );.  assert( db-
18ed0 3e 6e 56 64 62 65 41 63 74 69 76 65 3e 30 20 29  >nVdbeActive>0 )
18ee0 3b 20 20 2f 2a 20 41 74 20 6c 65 61 73 74 20 74  ;  /* At least t
18ef0 68 69 73 20 6f 6e 65 20 56 4d 20 69 73 20 61 63  his one VM is ac
18f00 74 69 76 65 20 2a 2f 0a 20 20 61 73 73 65 72 74  tive */.  assert
18f10 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29  ( p->bIsReader )
18f20 3b 0a 0a 20 20 69 66 28 20 64 65 73 69 72 65 64  ;..  if( desired
18f30 41 75 74 6f 43 6f 6d 6d 69 74 21 3d 64 62 2d 3e  AutoCommit!=db->
18f40 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20  autoCommit ){.  
18f50 20 20 69 66 28 20 69 52 6f 6c 6c 62 61 63 6b 20    if( iRollback 
18f60 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
18f70 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
18f80 69 74 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20 73  it==1 );.      s
18f90 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c  qlite3RollbackAl
18fa0 6c 28 64 62 2c 20 53 51 4c 49 54 45 5f 41 42 4f  l(db, SQLITE_ABO
18fb0 52 54 5f 52 4f 4c 4c 42 41 43 4b 29 3b 0a 20 20  RT_ROLLBACK);.  
18fc0 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d      db->autoComm
18fd0 69 74 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73  it = 1;.    }els
18fe0 65 20 69 66 28 20 64 65 73 69 72 65 64 41 75 74  e if( desiredAut
18ff0 6f 43 6f 6d 6d 69 74 20 26 26 20 64 62 2d 3e 6e  oCommit && db->n
19000 56 64 62 65 57 72 69 74 65 3e 30 20 29 7b 0a 20  VdbeWrite>0 ){. 
19010 20 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73 20       /* If this 
19020 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c  instruction impl
19030 65 6d 65 6e 74 73 20 61 20 43 4f 4d 4d 49 54 20  ements a COMMIT 
19040 61 6e 64 20 6f 74 68 65 72 20 56 4d 73 20 61 72  and other VMs ar
19050 65 20 77 72 69 74 69 6e 67 0a 20 20 20 20 20 20  e writing.      
19060 2a 2a 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72  ** return an err
19070 6f 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68  or indicating th
19080 61 74 20 74 68 65 20 6f 74 68 65 72 20 56 4d 73  at the other VMs
19090 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65 20 66   must complete f
190a0 69 72 73 74 2e 20 0a 20 20 20 20 20 20 2a 2f 0a  irst. .      */.
190b0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
190c0 65 45 72 72 6f 72 28 70 2c 20 22 63 61 6e 6e 6f  eError(p, "canno
190d0 74 20 63 6f 6d 6d 69 74 20 74 72 61 6e 73 61 63  t commit transac
190e0 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20 20 20 20  tion - ".       
190f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19100 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e     "SQL statemen
19110 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29  ts in progress")
19120 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  ;.      rc = SQL
19130 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20  ITE_BUSY;.      
19140 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
19150 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c  o_error;.    }el
19160 73 65 20 69 66 28 20 28 72 63 20 3d 20 73 71 6c  se if( (rc = sql
19170 69 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28  ite3VdbeCheckFk(
19180 70 2c 20 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f  p, 1))!=SQLITE_O
19190 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  K ){.      goto 
191a0 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20  vdbe_return;.   
191b0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62   }else{.      db
191c0 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28  ->autoCommit = (
191d0 75 38 29 64 65 73 69 72 65 64 41 75 74 6f 43 6f  u8)desiredAutoCo
191e0 6d 6d 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20  mmit;.    }.    
191f0 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 48  if( sqlite3VdbeH
19200 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42  alt(p)==SQLITE_B
19210 55 53 59 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e  USY ){.      p->
19220 70 63 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d  pc = (int)(pOp -
19230 20 61 4f 70 29 3b 0a 20 20 20 20 20 20 64 62 2d   aOp);.      db-
19240 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75  >autoCommit = (u
19250 38 29 28 31 2d 64 65 73 69 72 65 64 41 75 74 6f  8)(1-desiredAuto
19260 43 6f 6d 6d 69 74 29 3b 0a 20 20 20 20 20 20 70  Commit);.      p
19270 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49  ->rc = rc = SQLI
19280 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 67  TE_BUSY;.      g
19290 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
192a0 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72  .    }.    asser
192b0 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e  t( db->nStatemen
192c0 74 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69  t==0 );.    sqli
192d0 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e  te3CloseSavepoin
192e0 74 73 28 64 62 29 3b 0a 20 20 20 20 69 66 28 20  ts(db);.    if( 
192f0 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  p->rc==SQLITE_OK
19300 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53   ){.      rc = S
19310 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 20 20  QLITE_DONE;.    
19320 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20  }else{.      rc 
19330 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
19340 20 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f 20 76      }.    goto v
19350 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 7d 65  dbe_return;.  }e
19360 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  lse{.    sqlite3
19370 56 64 62 65 45 72 72 6f 72 28 70 2c 0a 20 20 20  VdbeError(p,.   
19380 20 20 20 20 20 28 21 64 65 73 69 72 65 64 41 75       (!desiredAu
19390 74 6f 43 6f 6d 6d 69 74 29 3f 22 63 61 6e 6e 6f  toCommit)?"canno
193a0 74 20 73 74 61 72 74 20 61 20 74 72 61 6e 73 61  t start a transa
193b0 63 74 69 6f 6e 20 77 69 74 68 69 6e 20 61 20 74  ction within a t
193c0 72 61 6e 73 61 63 74 69 6f 6e 22 3a 28 0a 20 20  ransaction":(.  
193d0 20 20 20 20 20 20 28 69 52 6f 6c 6c 62 61 63 6b        (iRollback
193e0 29 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61  )?"cannot rollba
193f0 63 6b 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74  ck - no transact
19400 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22 3a 0a  ion is active":.
19410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19420 20 20 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69     "cannot commi
19430 74 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69  t - no transacti
19440 6f 6e 20 69 73 20 61 63 74 69 76 65 22 29 29 3b  on is active"));
19450 0a 20 20 20 20 20 20 20 20 20 0a 20 20 20 20 72  .         .    r
19460 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
19470 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74  ;.    goto abort
19480 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
19490 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
194a0 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61 6e 73 61  * Opcode: Transa
194b0 63 74 69 6f 6e 20 50 31 20 50 32 20 50 33 20 50  ction P1 P2 P3 P
194c0 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e  4 P5.**.** Begin
194d0 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f   a transaction o
194e0 6e 20 64 61 74 61 62 61 73 65 20 50 31 20 69 66  n database P1 if
194f0 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69   a transaction i
19500 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 0a 2a 2a  s not already.**
19510 20 61 63 74 69 76 65 2e 0a 2a 2a 20 49 66 20 50   active..** If P
19520 32 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  2 is non-zero, t
19530 68 65 6e 20 61 20 77 72 69 74 65 2d 74 72 61 6e  hen a write-tran
19540 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74  saction is start
19550 65 64 2c 20 6f 72 20 69 66 20 61 20 0a 2a 2a 20  ed, or if a .** 
19560 72 65 61 64 2d 74 72 61 6e 73 61 63 74 69 6f 6e  read-transaction
19570 20 69 73 20 61 6c 72 65 61 64 79 20 61 63 74 69   is already acti
19580 76 65 2c 20 69 74 20 69 73 20 75 70 67 72 61 64  ve, it is upgrad
19590 65 64 20 74 6f 20 61 20 77 72 69 74 65 2d 74 72  ed to a write-tr
195a0 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2a 20 49 66  ansaction..** If
195b0 20 50 32 20 69 73 20 7a 65 72 6f 2c 20 74 68 65   P2 is zero, the
195c0 6e 20 61 20 72 65 61 64 2d 74 72 61 6e 73 61 63  n a read-transac
195d0 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2e  tion is started.
195e0 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65  .**.** P1 is the
195f0 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61   index of the da
19600 74 61 62 61 73 65 20 66 69 6c 65 20 6f 6e 20 77  tabase file on w
19610 68 69 63 68 20 74 68 65 20 74 72 61 6e 73 61 63  hich the transac
19620 74 69 6f 6e 20 69 73 0a 2a 2a 20 73 74 61 72 74  tion is.** start
19630 65 64 2e 20 20 49 6e 64 65 78 20 30 20 69 73 20  ed.  Index 0 is 
19640 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
19650 65 20 66 69 6c 65 20 61 6e 64 20 69 6e 64 65 78  e file and index
19660 20 31 20 69 73 20 74 68 65 0a 2a 2a 20 66 69 6c   1 is the.** fil
19670 65 20 75 73 65 64 20 66 6f 72 20 74 65 6d 70 6f  e used for tempo
19680 72 61 72 79 20 74 61 62 6c 65 73 2e 20 20 49 6e  rary tables.  In
19690 64 69 63 65 73 20 6f 66 20 32 20 6f 72 20 6d 6f  dices of 2 or mo
196a0 72 65 20 61 72 65 20 75 73 65 64 20 66 6f 72 0a  re are used for.
196b0 2a 2a 20 61 74 74 61 63 68 65 64 20 64 61 74 61  ** attached data
196c0 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  bases..**.** If 
196d0 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74  a write-transact
196e0 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 20 61  ion is started a
196f0 6e 64 20 74 68 65 20 56 64 62 65 2e 75 73 65 73  nd the Vdbe.uses
19700 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 66 6c 61 67  StmtJournal flag
19710 20 69 73 0a 2a 2a 20 74 72 75 65 20 28 74 68 69   is.** true (thi
19720 73 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 66  s flag is set if
19730 20 74 68 65 20 56 64 62 65 20 6d 61 79 20 6d 6f   the Vdbe may mo
19740 64 69 66 79 20 6d 6f 72 65 20 74 68 61 6e 20 6f  dify more than o
19750 6e 65 20 72 6f 77 20 61 6e 64 20 6d 61 79 0a 2a  ne row and may.*
19760 2a 20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54  * throw an ABORT
19770 20 65 78 63 65 70 74 69 6f 6e 29 2c 20 61 20 73   exception), a s
19780 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
19790 74 69 6f 6e 20 6d 61 79 20 61 6c 73 6f 20 62 65  tion may also be
197a0 20 6f 70 65 6e 65 64 2e 0a 2a 2a 20 4d 6f 72 65   opened..** More
197b0 20 73 70 65 63 69 66 69 63 61 6c 6c 79 2c 20 61   specifically, a
197c0 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
197d0 61 63 74 69 6f 6e 20 69 73 20 6f 70 65 6e 65 64  action is opened
197e0 20 69 66 66 20 74 68 65 20 64 61 74 61 62 61 73   iff the databas
197f0 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  e.** connection 
19800 69 73 20 63 75 72 72 65 6e 74 6c 79 20 6e 6f 74  is currently not
19810 20 69 6e 20 61 75 74 6f 63 6f 6d 6d 69 74 20 6d   in autocommit m
19820 6f 64 65 2c 20 6f 72 20 69 66 20 74 68 65 72 65  ode, or if there
19830 20 61 72 65 20 6f 74 68 65 72 0a 2a 2a 20 61 63   are other.** ac
19840 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74 73 2e  tive statements.
19850 20 41 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61   A statement tra
19860 6e 73 61 63 74 69 6f 6e 20 61 6c 6c 6f 77 73 20  nsaction allows 
19870 74 68 65 20 63 68 61 6e 67 65 73 20 6d 61 64 65  the changes made
19880 20 62 79 20 74 68 69 73 0a 2a 2a 20 56 44 42 45   by this.** VDBE
19890 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61   to be rolled ba
198a0 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f  ck after an erro
198b0 72 20 77 69 74 68 6f 75 74 20 68 61 76 69 6e 67  r without having
198c0 20 74 6f 20 72 6f 6c 6c 20 62 61 63 6b 20 74 68   to roll back th
198d0 65 0a 2a 2a 20 65 6e 74 69 72 65 20 74 72 61 6e  e.** entire tran
198e0 73 61 63 74 69 6f 6e 2e 20 49 66 20 6e 6f 20 65  saction. If no e
198f0 72 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74 65  rror is encounte
19900 72 65 64 2c 20 74 68 65 20 73 74 61 74 65 6d 65  red, the stateme
19910 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a  nt transaction.*
19920 2a 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63  * will automatic
19930 61 6c 6c 79 20 63 6f 6d 6d 69 74 20 77 68 65 6e  ally commit when
19940 20 74 68 65 20 56 44 42 45 20 68 61 6c 74 73 2e   the VDBE halts.
19950 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20  .**.** If P5!=0 
19960 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65  then this opcode
19970 20 61 6c 73 6f 20 63 68 65 63 6b 73 20 74 68 65   also checks the
19980 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 61   schema cookie a
19990 67 61 69 6e 73 74 20 50 33 0a 2a 2a 20 61 6e 64  gainst P3.** and
199a0 20 74 68 65 20 73 63 68 65 6d 61 20 67 65 6e 65   the schema gene
199b0 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20 61  ration counter a
199c0 67 61 69 6e 73 74 20 50 34 2e 0a 2a 2a 20 54 68  gainst P4..** Th
199d0 65 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73  e cookie changes
199e0 20 69 74 73 20 76 61 6c 75 65 20 77 68 65 6e 65   its value whene
199f0 76 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65  ver the database
19a00 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2e   schema changes.
19a10 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69  .** This operati
19a20 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20 64 65  on is used to de
19a30 74 65 63 74 20 77 68 65 6e 20 74 68 61 74 20 74  tect when that t
19a40 68 65 20 63 6f 6f 6b 69 65 20 68 61 73 20 63 68  he cookie has ch
19a50 61 6e 67 65 64 0a 2a 2a 20 61 6e 64 20 74 68 61  anged.** and tha
19a60 74 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72  t the current pr
19a70 6f 63 65 73 73 20 6e 65 65 64 73 20 74 6f 20 72  ocess needs to r
19a80 65 72 65 61 64 20 74 68 65 20 73 63 68 65 6d 61  eread the schema
19a90 2e 20 20 49 66 20 74 68 65 20 73 63 68 65 6d 61  .  If the schema
19aa0 0a 2a 2a 20 63 6f 6f 6b 69 65 20 69 6e 20 50 33  .** cookie in P3
19ab0 20 64 69 66 66 65 72 73 20 66 72 6f 6d 20 74 68   differs from th
19ac0 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20  e schema cookie 
19ad0 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
19ae0 68 65 61 64 65 72 20 6f 72 0a 2a 2a 20 69 66 20  header or.** if 
19af0 74 68 65 20 73 63 68 65 6d 61 20 67 65 6e 65 72  the schema gener
19b00 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20 69 6e  ation counter in
19b10 20 50 34 20 64 69 66 66 65 72 73 20 66 72 6f 6d   P4 differs from
19b20 20 74 68 65 20 63 75 72 72 65 6e 74 0a 2a 2a 20   the current.** 
19b30 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74  generation count
19b40 65 72 2c 20 74 68 65 6e 20 61 6e 20 53 51 4c 49  er, then an SQLI
19b50 54 45 5f 53 43 48 45 4d 41 20 65 72 72 6f 72 20  TE_SCHEMA error 
19b60 69 73 20 72 61 69 73 65 64 20 61 6e 64 20 65 78  is raised and ex
19b70 65 63 75 74 69 6f 6e 0a 2a 2a 20 68 61 6c 74 73  ecution.** halts
19b80 2e 20 20 54 68 65 20 73 71 6c 69 74 65 33 5f 73  .  The sqlite3_s
19b90 74 65 70 28 29 20 77 72 61 70 70 65 72 20 66 75  tep() wrapper fu
19ba0 6e 63 74 69 6f 6e 20 6d 69 67 68 74 20 74 68 65  nction might the
19bb0 6e 20 72 65 70 72 65 70 61 72 65 20 74 68 65 0a  n reprepare the.
19bc0 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64  ** statement and
19bd0 20 72 65 72 75 6e 20 69 74 20 66 72 6f 6d 20 74   rerun it from t
19be0 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 0a 2a 2f  he beginning..*/
19bf0 0a 63 61 73 65 20 4f 50 5f 54 72 61 6e 73 61 63  .case OP_Transac
19c00 74 69 6f 6e 3a 20 7b 0a 20 20 42 74 72 65 65 20  tion: {.  Btree 
19c10 2a 70 42 74 3b 0a 20 20 69 6e 74 20 69 4d 65 74  *pBt;.  int iMet
19c20 61 3b 0a 20 20 69 6e 74 20 69 47 65 6e 3b 0a 0a  a;.  int iGen;..
19c30 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73    assert( p->bIs
19c40 52 65 61 64 65 72 20 29 3b 0a 20 20 61 73 73 65  Reader );.  asse
19c50 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
19c60 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 30  =0 || pOp->p2==0
19c70 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
19c80 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
19c90 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
19ca0 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
19cb0 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
19cc0 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20  , pOp->p1) );.  
19cd0 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 26 20 28  if( pOp->p2 && (
19ce0 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
19cf0 54 45 5f 51 75 65 72 79 4f 6e 6c 79 29 21 3d 30  TE_QueryOnly)!=0
19d00 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
19d10 49 54 45 5f 52 45 41 44 4f 4e 4c 59 3b 0a 20 20  ITE_READONLY;.  
19d20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
19d30 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20  _to_error;.  }. 
19d40 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70   pBt = db->aDb[p
19d50 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 0a 20 20  Op->p1].pBt;..  
19d60 69 66 28 20 70 42 74 20 29 7b 0a 20 20 20 20 72  if( pBt ){.    r
19d70 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
19d80 42 65 67 69 6e 54 72 61 6e 73 28 70 42 74 2c 20  BeginTrans(pBt, 
19d90 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 20 20 74 65  pOp->p2);.    te
19da0 73 74 63 61 73 65 28 20 72 63 3d 3d 53 51 4c 49  stcase( rc==SQLI
19db0 54 45 5f 42 55 53 59 5f 53 4e 41 50 53 48 4f 54  TE_BUSY_SNAPSHOT
19dc0 20 29 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65   );.    testcase
19dd0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53  ( rc==SQLITE_BUS
19de0 59 5f 52 45 43 4f 56 45 52 59 20 29 3b 0a 20 20  Y_RECOVERY );.  
19df0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
19e00 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 69 66 28  _OK ){.      if(
19e10 20 28 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49   (rc&0xff)==SQLI
19e20 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20  TE_BUSY ){.     
19e30 20 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e 74 29     p->pc = (int)
19e40 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 20  (pOp - aOp);.   
19e50 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b       p->rc = rc;
19e60 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64  .        goto vd
19e70 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20  be_return;.     
19e80 20 7d 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62   }.      goto ab
19e90 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
19ea0 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28  ;.    }..    if(
19eb0 20 70 4f 70 2d 3e 70 32 20 26 26 20 70 2d 3e 75   pOp->p2 && p->u
19ec0 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 0a  sesStmtJournal .
19ed0 20 20 20 20 20 26 26 20 28 64 62 2d 3e 61 75 74       && (db->aut
19ee0 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62  oCommit==0 || db
19ef0 2d 3e 6e 56 64 62 65 52 65 61 64 3e 31 29 20 0a  ->nVdbeRead>1) .
19f00 20 20 20 20 29 7b 0a 20 20 20 20 20 20 61 73 73      ){.      ass
19f10 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
19f20 65 49 73 49 6e 54 72 61 6e 73 28 70 42 74 29 20  eIsInTrans(pBt) 
19f30 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e  );.      if( p->
19f40 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29 7b  iStatement==0 ){
19f50 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
19f60 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3e   db->nStatement>
19f70 3d 30 20 26 26 20 64 62 2d 3e 6e 53 61 76 65 70  =0 && db->nSavep
19f80 6f 69 6e 74 3e 3d 30 20 29 3b 0a 20 20 20 20 20  oint>=0 );.     
19f90 20 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e     db->nStatemen
19fa0 74 2b 2b 3b 20 0a 20 20 20 20 20 20 20 20 70 2d  t++; .        p-
19fb0 3e 69 53 74 61 74 65 6d 65 6e 74 20 3d 20 64 62  >iStatement = db
19fc0 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64  ->nSavepoint + d
19fd0 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3b 0a 20  b->nStatement;. 
19fe0 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 72 63       }..      rc
19ff0 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53 61   = sqlite3VtabSa
1a000 76 65 70 6f 69 6e 74 28 64 62 2c 20 53 41 56 45  vepoint(db, SAVE
1a010 50 4f 49 4e 54 5f 42 45 47 49 4e 2c 20 70 2d 3e  POINT_BEGIN, p->
1a020 69 53 74 61 74 65 6d 65 6e 74 2d 31 29 3b 0a 20  iStatement-1);. 
1a030 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
1a040 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
1a050 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1a060 72 65 65 42 65 67 69 6e 53 74 6d 74 28 70 42 74  reeBeginStmt(pBt
1a070 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 29  , p->iStatement)
1a080 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ;.      }..     
1a090 20 2f 2a 20 53 74 6f 72 65 20 74 68 65 20 63 75   /* Store the cu
1a0a0 72 72 65 6e 74 20 76 61 6c 75 65 20 6f 66 20 74  rrent value of t
1a0b0 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  he database hand
1a0c0 6c 65 73 20 64 65 66 65 72 72 65 64 20 63 6f 6e  les deferred con
1a0d0 73 74 72 61 69 6e 74 0a 20 20 20 20 20 20 2a 2a  straint.      **
1a0e0 20 63 6f 75 6e 74 65 72 2e 20 49 66 20 74 68 65   counter. If the
1a0f0 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
1a100 61 63 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20  action needs to 
1a110 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2c 0a  be rolled back,.
1a120 20 20 20 20 20 20 2a 2a 20 74 68 65 20 76 61 6c        ** the val
1a130 75 65 20 6f 66 20 74 68 69 73 20 63 6f 75 6e 74  ue of this count
1a140 65 72 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72  er needs to be r
1a150 65 73 74 6f 72 65 64 20 74 6f 6f 2e 20 20 2a 2f  estored too.  */
1a160 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44  .      p->nStmtD
1a170 65 66 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65  efCons = db->nDe
1a180 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20  ferredCons;.    
1a190 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66 49 6d 6d    p->nStmtDefImm
1a1a0 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65  Cons = db->nDefe
1a1b0 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20  rredImmCons;.   
1a1c0 20 7d 0a 0a 20 20 20 20 2f 2a 20 47 61 74 68 65   }..    /* Gathe
1a1d0 72 20 74 68 65 20 73 63 68 65 6d 61 20 76 65 72  r the schema ver
1a1e0 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20  sion number for 
1a1f0 63 68 65 63 6b 69 6e 67 3a 0a 20 20 20 20 2a 2a  checking:.    **
1a200 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d   IMPLEMENTATION-
1a210 4f 46 3a 20 52 2d 30 33 31 38 39 2d 35 31 31 33  OF: R-03189-5113
1a220 35 20 41 73 20 65 61 63 68 20 53 51 4c 20 73 74  5 As each SQL st
1a230 61 74 65 6d 65 6e 74 20 72 75 6e 73 2c 20 74 68  atement runs, th
1a240 65 20 73 63 68 65 6d 61 0a 20 20 20 20 2a 2a 20  e schema.    ** 
1a250 76 65 72 73 69 6f 6e 20 69 73 20 63 68 65 63 6b  version is check
1a260 65 64 20 74 6f 20 65 6e 73 75 72 65 20 74 68 61  ed to ensure tha
1a270 74 20 74 68 65 20 73 63 68 65 6d 61 20 68 61 73  t the schema has
1a280 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 73 69 6e   not changed sin
1a290 63 65 20 74 68 65 0a 20 20 20 20 2a 2a 20 53 51  ce the.    ** SQ
1a2a0 4c 20 73 74 61 74 65 6d 65 6e 74 20 77 61 73 20  L statement was 
1a2b0 70 72 65 70 61 72 65 64 2e 0a 20 20 20 20 2a 2f  prepared..    */
1a2c0 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65  .    sqlite3Btre
1a2d0 65 47 65 74 4d 65 74 61 28 70 42 74 2c 20 42 54  eGetMeta(pBt, BT
1a2e0 52 45 45 5f 53 43 48 45 4d 41 5f 56 45 52 53 49  REE_SCHEMA_VERSI
1a2f0 4f 4e 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74  ON, (u32 *)&iMet
1a300 61 29 3b 0a 20 20 20 20 69 47 65 6e 20 3d 20 64  a);.    iGen = d
1a310 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
1a320 70 53 63 68 65 6d 61 2d 3e 69 47 65 6e 65 72 61  pSchema->iGenera
1a330 74 69 6f 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  tion;.  }else{. 
1a340 20 20 20 69 47 65 6e 20 3d 20 69 4d 65 74 61 20     iGen = iMeta 
1a350 3d 20 30 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  = 0;.  }.  asser
1a360 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c  t( pOp->p5==0 ||
1a370 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
1a380 5f 49 4e 54 33 32 20 29 3b 0a 20 20 69 66 28 20  _INT32 );.  if( 
1a390 70 4f 70 2d 3e 70 35 20 26 26 20 28 69 4d 65 74  pOp->p5 && (iMet
1a3a0 61 21 3d 70 4f 70 2d 3e 70 33 20 7c 7c 20 69 47  a!=pOp->p3 || iG
1a3b0 65 6e 21 3d 70 4f 70 2d 3e 70 34 2e 69 29 20 29  en!=pOp->p4.i) )
1a3c0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46  {.    sqlite3DbF
1a3d0 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d  ree(db, p->zErrM
1a3e0 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72  sg);.    p->zErr
1a3f0 4d 73 67 20 3d 20 73 71 6c 69 74 65 33 44 62 53  Msg = sqlite3DbS
1a400 74 72 44 75 70 28 64 62 2c 20 22 64 61 74 61 62  trDup(db, "datab
1a410 61 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 63  ase schema has c
1a420 68 61 6e 67 65 64 22 29 3b 0a 20 20 20 20 2f 2a  hanged");.    /*
1a430 20 49 66 20 74 68 65 20 73 63 68 65 6d 61 2d 63   If the schema-c
1a440 6f 6f 6b 69 65 20 66 72 6f 6d 20 74 68 65 20 64  ookie from the d
1a450 61 74 61 62 61 73 65 20 66 69 6c 65 20 6d 61 74  atabase file mat
1a460 63 68 65 73 20 74 68 65 20 63 6f 6f 6b 69 65 20  ches the cookie 
1a470 0a 20 20 20 20 2a 2a 20 73 74 6f 72 65 64 20 77  .    ** stored w
1a480 69 74 68 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72  ith the in-memor
1a490 79 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  y representation
1a4a0 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61 2c 20   of the schema, 
1a4b0 64 6f 0a 20 20 20 20 2a 2a 20 6e 6f 74 20 72 65  do.    ** not re
1a4c0 6c 6f 61 64 20 74 68 65 20 73 63 68 65 6d 61 20  load the schema 
1a4d0 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
1a4e0 65 20 66 69 6c 65 2e 0a 20 20 20 20 2a 2a 0a 20  e file..    **. 
1a4f0 20 20 20 2a 2a 20 49 66 20 76 69 72 74 75 61 6c     ** If virtual
1a500 2d 74 61 62 6c 65 73 20 61 72 65 20 69 6e 20 75  -tables are in u
1a510 73 65 2c 20 74 68 69 73 20 69 73 20 6e 6f 74 20  se, this is not 
1a520 6a 75 73 74 20 61 6e 20 6f 70 74 69 6d 69 7a 61  just an optimiza
1a530 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a 20 4f 66 74  tion..    ** Oft
1a540 65 6e 2c 20 76 2d 74 61 62 6c 65 73 20 73 74 6f  en, v-tables sto
1a550 72 65 20 74 68 65 69 72 20 64 61 74 61 20 69 6e  re their data in
1a560 20 6f 74 68 65 72 20 53 51 4c 69 74 65 20 74 61   other SQLite ta
1a570 62 6c 65 73 2c 20 77 68 69 63 68 0a 20 20 20 20  bles, which.    
1a580 2a 2a 20 61 72 65 20 71 75 65 72 69 65 64 20 66  ** are queried f
1a590 72 6f 6d 20 77 69 74 68 69 6e 20 78 4e 65 78 74  rom within xNext
1a5a0 28 29 20 61 6e 64 20 6f 74 68 65 72 20 76 2d 74  () and other v-t
1a5b0 61 62 6c 65 20 6d 65 74 68 6f 64 73 20 75 73 69  able methods usi
1a5c0 6e 67 0a 20 20 20 20 2a 2a 20 70 72 65 70 61 72  ng.    ** prepar
1a5d0 65 64 20 71 75 65 72 69 65 73 2e 20 49 66 20 73  ed queries. If s
1a5e0 75 63 68 20 61 20 71 75 65 72 79 20 69 73 20 6f  uch a query is o
1a5f0 75 74 2d 6f 66 2d 64 61 74 65 2c 20 77 65 20 64  ut-of-date, we d
1a600 6f 20 6e 6f 74 20 77 61 6e 74 20 74 6f 0a 20 20  o not want to.  
1a610 20 20 2a 2a 20 64 69 73 63 61 72 64 20 74 68 65    ** discard the
1a620 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
1a630 2c 20 61 73 20 74 68 65 20 75 73 65 72 20 63 6f  , as the user co
1a640 64 65 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20  de implementing 
1a650 74 68 65 0a 20 20 20 20 2a 2a 20 76 2d 74 61 62  the.    ** v-tab
1a660 6c 65 20 77 6f 75 6c 64 20 68 61 76 65 20 74 6f  le would have to
1a670 20 62 65 20 72 65 61 64 79 20 66 6f 72 20 74 68   be ready for th
1a680 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73  e sqlite3_vtab s
1a690 74 72 75 63 74 75 72 65 20 69 74 73 65 6c 66 0a  tructure itself.
1a6a0 20 20 20 20 2a 2a 20 74 6f 20 62 65 20 69 6e 76      ** to be inv
1a6b0 61 6c 69 64 61 74 65 64 20 77 68 65 6e 65 76 65  alidated wheneve
1a6c0 72 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  r sqlite3_step()
1a6d0 20 69 73 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20   is called from 
1a6e0 77 69 74 68 69 6e 20 0a 20 20 20 20 2a 2a 20 61  within .    ** a
1a6f0 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 2e   v-table method.
1a700 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
1a710 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
1a720 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61  .pSchema->schema
1a730 5f 63 6f 6f 6b 69 65 21 3d 69 4d 65 74 61 20 29  _cookie!=iMeta )
1a740 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52  {.      sqlite3R
1a750 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 64 62  esetOneSchema(db
1a760 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20  , pOp->p1);.    
1a770 7d 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64  }.    p->expired
1a780 20 3d 20 31 3b 0a 20 20 20 20 72 63 20 3d 20 53   = 1;.    rc = S
1a790 51 4c 49 54 45 5f 53 43 48 45 4d 41 3b 0a 20 20  QLITE_SCHEMA;.  
1a7a0 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  }.  if( rc ) got
1a7b0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1a7c0 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  rror;.  break;.}
1a7d0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61  ../* Opcode: Rea
1a7e0 64 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33  dCookie P1 P2 P3
1a7f0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20   * *.**.** Read 
1a800 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 33  cookie number P3
1a810 20 66 72 6f 6d 20 64 61 74 61 62 61 73 65 20 50   from database P
1a820 31 20 61 6e 64 20 77 72 69 74 65 20 69 74 20 69  1 and write it i
1a830 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
1a840 0a 2a 2a 20 50 33 3d 3d 31 20 69 73 20 74 68 65  .** P3==1 is the
1a850 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e   schema version.
1a860 20 20 50 33 3d 3d 32 20 69 73 20 74 68 65 20 64    P3==2 is the d
1a870 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a  atabase format..
1a880 2a 2a 20 50 33 3d 3d 33 20 69 73 20 74 68 65 20  ** P3==3 is the 
1a890 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65  recommended page
1a8a0 72 20 63 61 63 68 65 20 73 69 7a 65 2c 20 61 6e  r cache size, an
1a8b0 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d  d so forth.  P1=
1a8c0 3d 30 20 69 73 0a 2a 2a 20 74 68 65 20 6d 61 69  =0 is.** the mai
1a8d0 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
1a8e0 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65  and P1==1 is the
1a8f0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 75   database file u
1a900 73 65 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20  sed to store.** 
1a910 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
1a920 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 6d 75  ..**.** There mu
1a930 73 74 20 62 65 20 61 20 72 65 61 64 2d 6c 6f 63  st be a read-loc
1a940 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73  k on the databas
1a950 65 20 28 65 69 74 68 65 72 20 61 20 74 72 61 6e  e (either a tran
1a960 73 61 63 74 69 6f 6e 0a 2a 2a 20 6d 75 73 74 20  saction.** must 
1a970 62 65 20 73 74 61 72 74 65 64 20 6f 72 20 74 68  be started or th
1a980 65 72 65 20 6d 75 73 74 20 62 65 20 61 6e 20 6f  ere must be an o
1a990 70 65 6e 20 63 75 72 73 6f 72 29 20 62 65 66 6f  pen cursor) befo
1a9a0 72 65 0a 2a 2a 20 65 78 65 63 75 74 69 6e 67 20  re.** executing 
1a9b0 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
1a9c0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61  ..*/.case OP_Rea
1a9d0 64 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20  dCookie: {      
1a9e0 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
1a9f0 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b   */.  int iMeta;
1aa00 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e  .  int iDb;.  in
1aa10 74 20 69 43 6f 6f 6b 69 65 3b 0a 0a 20 20 61 73  t iCookie;..  as
1aa20 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64  sert( p->bIsRead
1aa30 65 72 20 29 3b 0a 20 20 69 44 62 20 3d 20 70 4f  er );.  iDb = pO
1aa40 70 2d 3e 70 31 3b 0a 20 20 69 43 6f 6f 6b 69 65  p->p1;.  iCookie
1aa50 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73   = pOp->p3;.  as
1aa60 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 53 51  sert( pOp->p3<SQ
1aa70 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54  LITE_N_BTREE_MET
1aa80 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69  A );.  assert( i
1aa90 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d  Db>=0 && iDb<db-
1aaa0 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
1aab0 28 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70  ( db->aDb[iDb].p
1aac0 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  Bt!=0 );.  asser
1aad0 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d  t( DbMaskTest(p-
1aae0 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 44 62 29  >btreeMask, iDb)
1aaf0 20 29 3b 0a 0a 20 20 73 71 6c 69 74 65 33 42 74   );..  sqlite3Bt
1ab00 72 65 65 47 65 74 4d 65 74 61 28 64 62 2d 3e 61  reeGetMeta(db->a
1ab10 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20 69 43 6f  Db[iDb].pBt, iCo
1ab20 6f 6b 69 65 2c 20 28 75 33 32 20 2a 29 26 69 4d  okie, (u32 *)&iM
1ab30 65 74 61 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f  eta);.  pOut = o
1ab40 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
1ab50 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75   pOp);.  pOut->u
1ab60 2e 69 20 3d 20 69 4d 65 74 61 3b 0a 20 20 62 72  .i = iMeta;.  br
1ab70 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1ab80 65 3a 20 53 65 74 43 6f 6f 6b 69 65 20 50 31 20  e: SetCookie P1 
1ab90 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
1aba0 57 72 69 74 65 20 74 68 65 20 69 6e 74 65 67 65  Write the intege
1abb0 72 20 76 61 6c 75 65 20 50 33 20 69 6e 74 6f 20  r value P3 into 
1abc0 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 32  cookie number P2
1abd0 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 2e   of database P1.
1abe0 0a 2a 2a 20 50 32 3d 3d 31 20 69 73 20 74 68 65  .** P2==1 is the
1abf0 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e   schema version.
1ac00 20 20 50 32 3d 3d 32 20 69 73 20 74 68 65 20 64    P2==2 is the d
1ac10 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a  atabase format..
1ac20 2a 2a 20 50 32 3d 3d 33 20 69 73 20 74 68 65 20  ** P2==3 is the 
1ac30 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65  recommended page
1ac40 72 20 63 61 63 68 65 20 0a 2a 2a 20 73 69 7a 65  r cache .** size
1ac50 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20  , and so forth. 
1ac60 20 50 31 3d 3d 30 20 69 73 20 74 68 65 20 6d 61   P1==0 is the ma
1ac70 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
1ac80 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68   and P1==1 is th
1ac90 65 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 20 66  e .** database f
1aca0 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72  ile used to stor
1acb0 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  e temporary tabl
1acc0 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72 61 6e  es..**.** A tran
1acd0 73 61 63 74 69 6f 6e 20 6d 75 73 74 20 62 65 20  saction must be 
1ace0 73 74 61 72 74 65 64 20 62 65 66 6f 72 65 20 65  started before e
1acf0 78 65 63 75 74 69 6e 67 20 74 68 69 73 20 6f 70  xecuting this op
1ad00 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  code..*/.case OP
1ad10 5f 53 65 74 43 6f 6f 6b 69 65 3a 20 7b 0a 20 20  _SetCookie: {.  
1ad20 44 62 20 2a 70 44 62 3b 0a 20 20 61 73 73 65 72  Db *pDb;.  asser
1ad30 74 28 20 70 4f 70 2d 3e 70 32 3c 53 51 4c 49 54  t( pOp->p2<SQLIT
1ad40 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29  E_N_BTREE_META )
1ad50 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1ad60 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
1ad70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  1<db->nDb );.  a
1ad80 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73  ssert( DbMaskTes
1ad90 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20  t(p->btreeMask, 
1ada0 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73  pOp->p1) );.  as
1adb0 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
1adc0 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20  y==0 );.  pDb = 
1add0 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31  &db->aDb[pOp->p1
1ade0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44 62  ];.  assert( pDb
1adf0 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73  ->pBt!=0 );.  as
1ae00 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68  sert( sqlite3Sch
1ae10 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c  emaMutexHeld(db,
1ae20 20 70 4f 70 2d 3e 70 31 2c 20 30 29 20 29 3b 0a   pOp->p1, 0) );.
1ae30 20 20 2f 2a 20 53 65 65 20 6e 6f 74 65 20 61 62    /* See note ab
1ae40 6f 75 74 20 69 6e 64 65 78 20 73 68 69 66 74 69  out index shifti
1ae50 6e 67 20 6f 6e 20 4f 50 5f 52 65 61 64 43 6f 6f  ng on OP_ReadCoo
1ae60 6b 69 65 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71  kie */.  rc = sq
1ae70 6c 69 74 65 33 42 74 72 65 65 55 70 64 61 74 65  lite3BtreeUpdate
1ae80 4d 65 74 61 28 70 44 62 2d 3e 70 42 74 2c 20 70  Meta(pDb->pBt, p
1ae90 4f 70 2d 3e 70 32 2c 20 70 4f 70 2d 3e 70 33 29  Op->p2, pOp->p3)
1aea0 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d  ;.  if( pOp->p2=
1aeb0 3d 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56 45  =BTREE_SCHEMA_VE
1aec0 52 53 49 4f 4e 20 29 7b 0a 20 20 20 20 2f 2a 20  RSION ){.    /* 
1aed0 57 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20  When the schema 
1aee0 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 2c 20  cookie changes, 
1aef0 72 65 63 6f 72 64 20 74 68 65 20 6e 65 77 20 63  record the new c
1af00 6f 6f 6b 69 65 20 69 6e 74 65 72 6e 61 6c 6c 79  ookie internally
1af10 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70 53 63   */.    pDb->pSc
1af20 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f  hema->schema_coo
1af30 6b 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  kie = pOp->p3;. 
1af40 20 20 20 64 62 2d 3e 6d 44 62 46 6c 61 67 73 20     db->mDbFlags 
1af50 7c 3d 20 44 42 46 4c 41 47 5f 53 63 68 65 6d 61  |= DBFLAG_Schema
1af60 43 68 61 6e 67 65 3b 0a 20 20 7d 65 6c 73 65 20  Change;.  }else 
1af70 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52  if( pOp->p2==BTR
1af80 45 45 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 29  EE_FILE_FORMAT )
1af90 7b 0a 20 20 20 20 2f 2a 20 52 65 63 6f 72 64 20  {.    /* Record 
1afa0 63 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20 66  changes in the f
1afb0 69 6c 65 20 66 6f 72 6d 61 74 20 2a 2f 0a 20 20  ile format */.  
1afc0 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e    pDb->pSchema->
1afd0 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70 4f  file_format = pO
1afe0 70 2d 3e 70 33 3b 0a 20 20 7d 0a 20 20 69 66 28  p->p3;.  }.  if(
1aff0 20 70 4f 70 2d 3e 70 31 3d 3d 31 20 29 7b 0a 20   pOp->p1==1 ){. 
1b000 20 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65     /* Invalidate
1b010 20 61 6c 6c 20 70 72 65 70 61 72 65 64 20 73 74   all prepared st
1b020 61 74 65 6d 65 6e 74 73 20 77 68 65 6e 65 76 65  atements wheneve
1b030 72 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62  r the TEMP datab
1b040 61 73 65 0a 20 20 20 20 2a 2a 20 73 63 68 65 6d  ase.    ** schem
1b050 61 20 69 73 20 63 68 61 6e 67 65 64 2e 20 20 54  a is changed.  T
1b060 69 63 6b 65 74 20 23 31 36 34 34 20 2a 2f 0a 20  icket #1644 */. 
1b070 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65     sqlite3Expire
1b080 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e  PreparedStatemen
1b090 74 73 28 64 62 29 3b 0a 20 20 20 20 70 2d 3e 65  ts(db);.    p->e
1b0a0 78 70 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d 0a  xpired = 0;.  }.
1b0b0 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
1b0c0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1b0d0 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  or;.  break;.}..
1b0e0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 52  /* Opcode: OpenR
1b0f0 65 61 64 20 50 31 20 50 32 20 50 33 20 50 34 20  ead P1 P2 P3 P4 
1b100 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
1b110 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a  root=P2 iDb=P3.*
1b120 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61 64  *.** Open a read
1b130 2d 6f 6e 6c 79 20 63 75 72 73 6f 72 20 66 6f 72  -only cursor for
1b140 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61   the database ta
1b150 62 6c 65 20 77 68 6f 73 65 20 72 6f 6f 74 20 70  ble whose root p
1b160 61 67 65 20 69 73 0a 2a 2a 20 50 32 20 69 6e 20  age is.** P2 in 
1b170 61 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  a database file.
1b180 20 20 54 68 65 20 64 61 74 61 62 61 73 65 20 66    The database f
1b190 69 6c 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65  ile is determine
1b1a0 64 20 62 79 20 50 33 2e 20 0a 2a 2a 20 50 33 3d  d by P3. .** P3=
1b1b0 3d 30 20 6d 65 61 6e 73 20 74 68 65 20 6d 61 69  =0 means the mai
1b1c0 6e 20 64 61 74 61 62 61 73 65 2c 20 50 33 3d 3d  n database, P3==
1b1d0 31 20 6d 65 61 6e 73 20 74 68 65 20 64 61 74 61  1 means the data
1b1e0 62 61 73 65 20 75 73 65 64 20 66 6f 72 20 0a 2a  base used for .*
1b1f0 2a 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  * temporary tabl
1b200 65 73 2c 20 61 6e 64 20 50 33 3e 31 20 6d 65 61  es, and P3>1 mea
1b210 6e 73 20 75 73 65 64 20 74 68 65 20 63 6f 72 72  ns used the corr
1b220 65 73 70 6f 6e 64 69 6e 67 20 61 74 74 61 63 68  esponding attach
1b230 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e 20  ed.** database. 
1b240 20 47 69 76 65 20 74 68 65 20 6e 65 77 20 63 75   Give the new cu
1b250 72 73 6f 72 20 61 6e 20 69 64 65 6e 74 69 66 69  rsor an identifi
1b260 65 72 20 6f 66 20 50 31 2e 20 20 54 68 65 20 50  er of P1.  The P
1b270 31 0a 2a 2a 20 76 61 6c 75 65 73 20 6e 65 65 64  1.** values need
1b280 20 6e 6f 74 20 62 65 20 63 6f 6e 74 69 67 75 6f   not be contiguo
1b290 75 73 20 62 75 74 20 61 6c 6c 20 50 31 20 76 61  us but all P1 va
1b2a0 6c 75 65 73 20 73 68 6f 75 6c 64 20 62 65 20 73  lues should be s
1b2b0 6d 61 6c 6c 20 69 6e 74 65 67 65 72 73 2e 0a 2a  mall integers..*
1b2c0 2a 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72  * It is an error
1b2d0 20 66 6f 72 20 50 31 20 74 6f 20 62 65 20 6e 65   for P1 to be ne
1b2e0 67 61 74 69 76 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  gative..**.** If
1b2f0 20 50 35 21 3d 30 20 74 68 65 6e 20 75 73 65 20   P5!=0 then use 
1b300 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
1b310 65 67 69 73 74 65 72 20 50 32 20 61 73 20 74 68  egister P2 as th
1b320 65 20 72 6f 6f 74 20 70 61 67 65 2c 20 6e 6f 74  e root page, not
1b330 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66  .** the value of
1b340 20 50 32 20 69 74 73 65 6c 66 2e 0a 2a 2a 0a 2a   P2 itself..**.*
1b350 2a 20 54 68 65 72 65 20 77 69 6c 6c 20 62 65 20  * There will be 
1b360 61 20 72 65 61 64 20 6c 6f 63 6b 20 6f 6e 20 74  a read lock on t
1b370 68 65 20 64 61 74 61 62 61 73 65 20 77 68 65 6e  he database when
1b380 65 76 65 72 20 74 68 65 72 65 20 69 73 20 61 6e  ever there is an
1b390 0a 2a 2a 20 6f 70 65 6e 20 63 75 72 73 6f 72 2e  .** open cursor.
1b3a0 20 20 49 66 20 74 68 65 20 64 61 74 61 62 61 73    If the databas
1b3b0 65 20 77 61 73 20 75 6e 6c 6f 63 6b 65 64 20 70  e was unlocked p
1b3c0 72 69 6f 72 20 74 6f 20 74 68 69 73 20 69 6e 73  rior to this ins
1b3d0 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 74 68 65 6e  truction.** then
1b3e0 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 69 73 20   a read lock is 
1b3f0 61 63 71 75 69 72 65 64 20 61 73 20 70 61 72 74  acquired as part
1b400 20 6f 66 20 74 68 69 73 20 69 6e 73 74 72 75 63   of this instruc
1b410 74 69 6f 6e 2e 20 20 41 20 72 65 61 64 0a 2a 2a  tion.  A read.**
1b420 20 6c 6f 63 6b 20 61 6c 6c 6f 77 73 20 6f 74 68   lock allows oth
1b430 65 72 20 70 72 6f 63 65 73 73 65 73 20 74 6f 20  er processes to 
1b440 72 65 61 64 20 74 68 65 20 64 61 74 61 62 61 73  read the databas
1b450 65 20 62 75 74 20 70 72 6f 68 69 62 69 74 73 0a  e but prohibits.
1b460 2a 2a 20 61 6e 79 20 6f 74 68 65 72 20 70 72 6f  ** any other pro
1b470 63 65 73 73 20 66 72 6f 6d 20 6d 6f 64 69 66 79  cess from modify
1b480 69 6e 67 20 74 68 65 20 64 61 74 61 62 61 73 65  ing the database
1b490 2e 20 20 54 68 65 20 72 65 61 64 20 6c 6f 63 6b  .  The read lock
1b4a0 20 69 73 0a 2a 2a 20 72 65 6c 65 61 73 65 64 20   is.** released 
1b4b0 77 68 65 6e 20 61 6c 6c 20 63 75 72 73 6f 72 73  when all cursors
1b4c0 20 61 72 65 20 63 6c 6f 73 65 64 2e 20 20 49 66   are closed.  If
1b4d0 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
1b4e0 6e 20 61 74 74 65 6d 70 74 73 0a 2a 2a 20 74 6f  n attempts.** to
1b4f0 20 67 65 74 20 61 20 72 65 61 64 20 6c 6f 63 6b   get a read lock
1b500 20 62 75 74 20 66 61 69 6c 73 2c 20 74 68 65 20   but fails, the 
1b510 73 63 72 69 70 74 20 74 65 72 6d 69 6e 61 74 65  script terminate
1b520 73 20 77 69 74 68 20 61 6e 0a 2a 2a 20 53 51 4c  s with an.** SQL
1b530 49 54 45 5f 42 55 53 59 20 65 72 72 6f 72 20 63  ITE_BUSY error c
1b540 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  ode..**.** The P
1b550 34 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20 65  4 value may be e
1b560 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72  ither an integer
1b570 20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72 20 61   (P4_INT32) or a
1b580 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61   pointer to.** a
1b590 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75   KeyInfo structu
1b5a0 72 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e  re (P4_KEYINFO).
1b5b0 20 49 66 20 69 74 20 69 73 20 61 20 70 6f 69 6e   If it is a poin
1b5c0 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f  ter to a KeyInfo
1b5d0 20 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2c 20   .** structure, 
1b5e0 74 68 65 6e 20 73 61 69 64 20 73 74 72 75 63 74  then said struct
1b5f0 75 72 65 20 64 65 66 69 6e 65 73 20 74 68 65 20  ure defines the 
1b600 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c  content and coll
1b610 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e  ating .** sequen
1b620 63 65 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20  ce of the index 
1b630 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74  being opened. Ot
1b640 68 65 72 77 69 73 65 2c 20 69 66 20 50 34 20 69  herwise, if P4 i
1b650 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a  s an integer .**
1b660 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20 73 65   value, it is se
1b670 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20  t to the number 
1b680 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
1b690 65 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53  e table..**.** S
1b6a0 65 65 20 61 6c 73 6f 3a 20 4f 70 65 6e 57 72 69  ee also: OpenWri
1b6b0 74 65 2c 20 52 65 6f 70 65 6e 49 64 78 0a 2a 2f  te, ReopenIdx.*/
1b6c0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6f 70  ./* Opcode: Reop
1b6d0 65 6e 49 64 78 20 50 31 20 50 32 20 50 33 20 50  enIdx P1 P2 P3 P
1b6e0 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
1b6f0 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33  : root=P2 iDb=P3
1b700 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 65 6f 70 65  .**.** The Reope
1b710 6e 49 64 78 20 6f 70 63 6f 64 65 20 77 6f 72 6b  nIdx opcode work
1b720 73 20 65 78 61 63 74 6c 79 20 6c 69 6b 65 20 52  s exactly like R
1b730 65 61 64 4f 70 65 6e 20 65 78 63 65 70 74 20 74  eadOpen except t
1b740 68 61 74 20 69 74 20 66 69 72 73 74 0a 2a 2a 20  hat it first.** 
1b750 63 68 65 63 6b 73 20 74 6f 20 73 65 65 20 69 66  checks to see if
1b760 20 74 68 65 20 63 75 72 73 6f 72 20 6f 6e 20 50   the cursor on P
1b770 31 20 69 73 20 61 6c 72 65 61 64 79 20 6f 70 65  1 is already ope
1b780 6e 20 77 69 74 68 20 61 20 72 6f 6f 74 20 70 61  n with a root pa
1b790 67 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20  ge.** number of 
1b7a0 50 32 20 61 6e 64 20 69 66 20 69 74 20 69 73 20  P2 and if it is 
1b7b0 74 68 69 73 20 6f 70 63 6f 64 65 20 62 65 63 6f  this opcode beco
1b7c0 6d 65 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 49 6e  mes a no-op.  In
1b7d0 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 0a 2a 2a   other words,.**
1b7e0 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 69   if the cursor i
1b7f0 73 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 2c 20  s already open, 
1b800 64 6f 20 6e 6f 74 20 72 65 6f 70 65 6e 20 69 74  do not reopen it
1b810 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 65 6f 70  ..**.** The Reop
1b820 65 6e 49 64 78 20 6f 70 63 6f 64 65 20 6d 61 79  enIdx opcode may
1b830 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 77 69   only be used wi
1b840 74 68 20 50 35 3d 3d 30 20 61 6e 64 20 77 69 74  th P5==0 and wit
1b850 68 20 50 34 20 62 65 69 6e 67 0a 2a 2a 20 61 20  h P4 being.** a 
1b860 50 34 5f 4b 45 59 49 4e 46 4f 20 6f 62 6a 65 63  P4_KEYINFO objec
1b870 74 2e 20 20 46 75 72 74 68 65 72 6d 6f 72 65 2c  t.  Furthermore,
1b880 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 6d 75   the P3 value mu
1b890 73 74 20 62 65 20 74 68 65 20 73 61 6d 65 20 61  st be the same a
1b8a0 73 0a 2a 2a 20 65 76 65 72 79 20 6f 74 68 65 72  s.** every other
1b8b0 20 52 65 6f 70 65 6e 49 64 78 20 6f 72 20 4f 70   ReopenIdx or Op
1b8c0 65 6e 52 65 61 64 20 66 6f 72 20 74 68 65 20 73  enRead for the s
1b8d0 61 6d 65 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  ame cursor numbe
1b8e0 72 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 74 68 65  r..**.** See the
1b8f0 20 4f 70 65 6e 52 65 61 64 20 6f 70 63 6f 64 65   OpenRead opcode
1b900 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66   documentation f
1b910 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
1b920 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  formation..*/./*
1b930 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 57 72 69   Opcode: OpenWri
1b940 74 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50  te P1 P2 P3 P4 P
1b950 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  5.** Synopsis: r
1b960 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a  oot=P2 iDb=P3.**
1b970 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61 64 2f  .** Open a read/
1b980 77 72 69 74 65 20 63 75 72 73 6f 72 20 6e 61 6d  write cursor nam
1b990 65 64 20 50 31 20 6f 6e 20 74 68 65 20 74 61 62  ed P1 on the tab
1b9a0 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73  le or index whos
1b9b0 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 69  e root.** page i
1b9c0 73 20 50 32 2e 20 20 4f 72 20 69 66 20 50 35 21  s P2.  Or if P5!
1b9d0 3d 30 20 75 73 65 20 74 68 65 20 63 6f 6e 74 65  =0 use the conte
1b9e0 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
1b9f0 32 20 74 6f 20 66 69 6e 64 20 74 68 65 0a 2a 2a  2 to find the.**
1ba00 20 72 6f 6f 74 20 70 61 67 65 2e 0a 2a 2a 0a 2a   root page..**.*
1ba10 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65 20 6d  * The P4 value m
1ba20 61 79 20 62 65 20 65 69 74 68 65 72 20 61 6e 20  ay be either an 
1ba30 69 6e 74 65 67 65 72 20 28 50 34 5f 49 4e 54 33  integer (P4_INT3
1ba40 32 29 20 6f 72 20 61 20 70 6f 69 6e 74 65 72 20  2) or a pointer 
1ba50 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20  to.** a KeyInfo 
1ba60 73 74 72 75 63 74 75 72 65 20 28 50 34 5f 4b 45  structure (P4_KE
1ba70 59 49 4e 46 4f 29 2e 20 49 66 20 69 74 20 69 73  YINFO). If it is
1ba80 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
1ba90 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75  KeyInfo .** stru
1baa0 63 74 75 72 65 2c 20 74 68 65 6e 20 73 61 69 64  cture, then said
1bab0 20 73 74 72 75 63 74 75 72 65 20 64 65 66 69 6e   structure defin
1bac0 65 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 61  es the content a
1bad0 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a  nd collating .**
1bae0 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68 65   sequence of the
1baf0 20 69 6e 64 65 78 20 62 65 69 6e 67 20 6f 70 65   index being ope
1bb00 6e 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  ned. Otherwise, 
1bb10 69 66 20 50 34 20 69 73 20 61 6e 20 69 6e 74 65  if P4 is an inte
1bb20 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69  ger .** value, i
1bb30 74 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20  t is set to the 
1bb40 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
1bb50 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2c 20  s in the table, 
1bb60 6f 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 61 72  or to the.** lar
1bb70 67 65 73 74 20 69 6e 64 65 78 20 6f 66 20 61 6e  gest index of an
1bb80 79 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20  y column of the 
1bb90 74 61 62 6c 65 20 74 68 61 74 20 69 73 20 61 63  table that is ac
1bba0 74 75 61 6c 6c 79 20 75 73 65 64 2e 0a 2a 2a 0a  tually used..**.
1bbb0 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
1bbc0 69 6f 6e 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  ion works just l
1bbd0 69 6b 65 20 4f 70 65 6e 52 65 61 64 20 65 78 63  ike OpenRead exc
1bbe0 65 70 74 20 74 68 61 74 20 69 74 20 6f 70 65 6e  ept that it open
1bbf0 73 20 74 68 65 20 63 75 72 73 6f 72 0a 2a 2a 20  s the cursor.** 
1bc00 69 6e 20 72 65 61 64 2f 77 72 69 74 65 20 6d 6f  in read/write mo
1bc10 64 65 2e 20 20 46 6f 72 20 61 20 67 69 76 65 6e  de.  For a given
1bc20 20 74 61 62 6c 65 2c 20 74 68 65 72 65 20 63 61   table, there ca
1bc30 6e 20 62 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  n be one or more
1bc40 20 72 65 61 64 2d 6f 6e 6c 79 0a 2a 2a 20 63 75   read-only.** cu
1bc50 72 73 6f 72 73 20 6f 72 20 61 20 73 69 6e 67 6c  rsors or a singl
1bc60 65 20 72 65 61 64 2f 77 72 69 74 65 20 63 75 72  e read/write cur
1bc70 73 6f 72 20 62 75 74 20 6e 6f 74 20 62 6f 74 68  sor but not both
1bc80 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
1bc90 20 4f 70 65 6e 52 65 61 64 2e 0a 2a 2f 0a 63 61   OpenRead..*/.ca
1bca0 73 65 20 4f 50 5f 52 65 6f 70 65 6e 49 64 78 3a  se OP_ReopenIdx:
1bcb0 20 7b 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b   {.  int nField;
1bcc0 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79  .  KeyInfo *pKey
1bcd0 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 70 32 3b 0a  Info;.  int p2;.
1bce0 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74    int iDb;.  int
1bcf0 20 77 72 46 6c 61 67 3b 0a 20 20 42 74 72 65 65   wrFlag;.  Btree
1bd00 20 2a 70 58 3b 0a 20 20 56 64 62 65 43 75 72 73   *pX;.  VdbeCurs
1bd10 6f 72 20 2a 70 43 75 72 3b 0a 20 20 44 62 20 2a  or *pCur;.  Db *
1bd20 70 44 62 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  pDb;..  assert( 
1bd30 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f  pOp->p5==0 || pO
1bd40 70 2d 3e 70 35 3d 3d 4f 50 46 4c 41 47 5f 53 45  p->p5==OPFLAG_SE
1bd50 45 4b 45 51 20 29 3b 0a 20 20 61 73 73 65 72 74  EKEQ );.  assert
1bd60 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
1bd70 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20 20 70  4_KEYINFO );.  p
1bd80 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  Cur = p->apCsr[p
1bd90 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70  Op->p1];.  if( p
1bda0 43 75 72 20 26 26 20 70 43 75 72 2d 3e 70 67 6e  Cur && pCur->pgn
1bdb0 6f 52 6f 6f 74 3d 3d 28 75 33 32 29 70 4f 70 2d  oRoot==(u32)pOp-
1bdc0 3e 70 32 20 29 7b 0a 20 20 20 20 61 73 73 65 72  >p2 ){.    asser
1bdd0 74 28 20 70 43 75 72 2d 3e 69 44 62 3d 3d 70 4f  t( pCur->iDb==pO
1bde0 70 2d 3e 70 33 20 29 3b 20 20 20 20 20 20 2f 2a  p->p3 );      /*
1bdf0 20 47 75 61 72 61 6e 74 65 65 64 20 62 79 20 74   Guaranteed by t
1be00 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f  he code generato
1be10 72 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6f 70  r */.    goto op
1be20 65 6e 5f 63 75 72 73 6f 72 5f 73 65 74 5f 68 69  en_cursor_set_hi
1be30 6e 74 73 3b 0a 20 20 7d 0a 20 20 2f 2a 20 49 66  nts;.  }.  /* If
1be40 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 6e   the cursor is n
1be50 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65  ot currently ope
1be60 6e 20 6f 72 20 69 73 20 6f 70 65 6e 20 6f 6e 20  n or is open on 
1be70 61 20 64 69 66 66 65 72 65 6e 74 0a 20 20 2a 2a  a different.  **
1be80 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 66 61 6c   index, then fal
1be90 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f  l through into O
1bea0 50 5f 4f 70 65 6e 52 65 61 64 20 74 6f 20 66 6f  P_OpenRead to fo
1beb0 72 63 65 20 61 20 72 65 6f 70 65 6e 20 2a 2f 0a  rce a reopen */.
1bec0 63 61 73 65 20 4f 50 5f 4f 70 65 6e 52 65 61 64  case OP_OpenRead
1bed0 3a 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 57 72  :.case OP_OpenWr
1bee0 69 74 65 3a 0a 0a 20 20 61 73 73 65 72 74 28 20  ite:..  assert( 
1bef0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
1bf00 4f 70 65 6e 57 72 69 74 65 20 7c 7c 20 70 4f 70  OpenWrite || pOp
1bf10 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e  ->p5==0 || pOp->
1bf20 70 35 3d 3d 4f 50 46 4c 41 47 5f 53 45 45 4b 45  p5==OPFLAG_SEEKE
1bf30 51 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Q );.  assert( p
1bf40 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20  ->bIsReader );. 
1bf50 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
1bf60 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 52 65 61  code==OP_OpenRea
1bf70 64 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  d || pOp->opcode
1bf80 3d 3d 4f 50 5f 52 65 6f 70 65 6e 49 64 78 0a 20  ==OP_ReopenIdx. 
1bf90 20 20 20 20 20 20 20 20 20 7c 7c 20 70 2d 3e 72           || p->r
1bfa0 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20  eadOnly==0 );.. 
1bfb0 20 69 66 28 20 70 2d 3e 65 78 70 69 72 65 64 20   if( p->expired 
1bfc0 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
1bfd0 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43  TE_ABORT_ROLLBAC
1bfe0 4b 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  K;.    goto abor
1bff0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1c000 20 20 7d 0a 0a 20 20 6e 46 69 65 6c 64 20 3d 20    }..  nField = 
1c010 30 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20  0;.  pKeyInfo = 
1c020 30 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70  0;.  p2 = pOp->p
1c030 32 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e  2;.  iDb = pOp->
1c040 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44  p3;.  assert( iD
1c050 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e  b>=0 && iDb<db->
1c060 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
1c070 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
1c080 74 72 65 65 4d 61 73 6b 2c 20 69 44 62 29 20 29  treeMask, iDb) )
1c090 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61  ;.  pDb = &db->a
1c0a0 44 62 5b 69 44 62 5d 3b 0a 20 20 70 58 20 3d 20  Db[iDb];.  pX = 
1c0b0 70 44 62 2d 3e 70 42 74 3b 0a 20 20 61 73 73 65  pDb->pBt;.  asse
1c0c0 72 74 28 20 70 58 21 3d 30 20 29 3b 0a 20 20 69  rt( pX!=0 );.  i
1c0d0 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
1c0e0 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20 29 7b 0a  OP_OpenWrite ){.
1c0f0 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c      assert( OPFL
1c100 41 47 5f 46 4f 52 44 45 4c 45 54 45 3d 3d 42 54  AG_FORDELETE==BT
1c110 52 45 45 5f 46 4f 52 44 45 4c 45 54 45 20 29 3b  REE_FORDELETE );
1c120 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20 42 54  .    wrFlag = BT
1c130 52 45 45 5f 57 52 43 53 52 20 7c 20 28 70 4f 70  REE_WRCSR | (pOp
1c140 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 46 4f  ->p5 & OPFLAG_FO
1c150 52 44 45 4c 45 54 45 29 3b 0a 20 20 20 20 61 73  RDELETE);.    as
1c160 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68  sert( sqlite3Sch
1c170 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c  emaMutexHeld(db,
1c180 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20   iDb, 0) );.    
1c190 69 66 28 20 70 44 62 2d 3e 70 53 63 68 65 6d 61  if( pDb->pSchema
1c1a0 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3c 20  ->file_format < 
1c1b0 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46  p->minWriteFileF
1c1c0 6f 72 6d 61 74 20 29 7b 0a 20 20 20 20 20 20 70  ormat ){.      p
1c1d0 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f  ->minWriteFileFo
1c1e0 72 6d 61 74 20 3d 20 70 44 62 2d 3e 70 53 63 68  rmat = pDb->pSch
1c1f0 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74  ema->file_format
1c200 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
1c210 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20 30 3b  .    wrFlag = 0;
1c220 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .  }.  if( pOp->
1c230 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 32 49 53  p5 & OPFLAG_P2IS
1c240 52 45 47 20 29 7b 0a 20 20 20 20 61 73 73 65 72  REG ){.    asser
1c250 74 28 20 70 32 3e 30 20 29 3b 0a 20 20 20 20 61  t( p2>0 );.    a
1c260 73 73 65 72 74 28 20 70 32 3c 3d 28 70 2d 3e 6e  ssert( p2<=(p->n
1c270 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
1c280 6f 72 29 20 29 3b 0a 20 20 20 20 70 49 6e 32 20  or) );.    pIn2 
1c290 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 20  = &aMem[p2];.   
1c2a0 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
1c2b0 6c 69 64 28 70 49 6e 32 29 20 29 3b 0a 20 20 20  lid(pIn2) );.   
1c2c0 20 61 73 73 65 72 74 28 20 28 70 49 6e 32 2d 3e   assert( (pIn2->
1c2d0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
1c2e0 21 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74  !=0 );.    sqlit
1c2f0 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
1c300 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 20 20 70  ify(pIn2);.    p
1c310 32 20 3d 20 28 69 6e 74 29 70 49 6e 32 2d 3e 75  2 = (int)pIn2->u
1c320 2e 69 3b 0a 20 20 20 20 2f 2a 20 54 68 65 20 70  .i;.    /* The p
1c330 32 20 76 61 6c 75 65 20 61 6c 77 61 79 73 20 63  2 value always c
1c340 6f 6d 65 73 20 66 72 6f 6d 20 61 20 70 72 69 6f  omes from a prio
1c350 72 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65  r OP_CreateTable
1c360 20 6f 70 63 6f 64 65 20 61 6e 64 0a 20 20 20 20   opcode and.    
1c370 2a 2a 20 74 68 61 74 20 6f 70 63 6f 64 65 20 77  ** that opcode w
1c380 69 6c 6c 20 61 6c 77 61 79 73 20 73 65 74 20 74  ill always set t
1c390 68 65 20 70 32 20 76 61 6c 75 65 20 74 6f 20 32  he p2 value to 2
1c3a0 20 6f 72 20 6d 6f 72 65 20 6f 72 20 65 6c 73 65   or more or else
1c3b0 20 66 61 69 6c 2e 0a 20 20 20 20 2a 2a 20 49 66   fail..    ** If
1c3c0 20 74 68 65 72 65 20 77 65 72 65 20 61 20 66 61   there were a fa
1c3d0 69 6c 75 72 65 2c 20 74 68 65 20 70 72 65 70 61  ilure, the prepa
1c3e0 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 77 6f  red statement wo
1c3f0 75 6c 64 20 68 61 76 65 20 68 61 6c 74 65 64 0a  uld have halted.
1c400 20 20 20 20 2a 2a 20 62 65 66 6f 72 65 20 72 65      ** before re
1c410 61 63 68 69 6e 67 20 74 68 69 73 20 69 6e 73 74  aching this inst
1c420 72 75 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20  ruction. */.    
1c430 61 73 73 65 72 74 28 20 70 32 3e 3d 32 20 29 3b  assert( p2>=2 );
1c440 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .  }.  if( pOp->
1c450 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e  p4type==P4_KEYIN
1c460 46 4f 20 29 7b 0a 20 20 20 20 70 4b 65 79 49 6e  FO ){.    pKeyIn
1c470 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65  fo = pOp->p4.pKe
1c480 79 49 6e 66 6f 3b 0a 20 20 20 20 61 73 73 65 72  yInfo;.    asser
1c490 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63  t( pKeyInfo->enc
1c4a0 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20 20 20  ==ENC(db) );.   
1c4b0 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66   assert( pKeyInf
1c4c0 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20 20  o->db==db );.   
1c4d0 20 6e 46 69 65 6c 64 20 3d 20 70 4b 65 79 49 6e   nField = pKeyIn
1c4e0 66 6f 2d 3e 6e 41 6c 6c 46 69 65 6c 64 3b 0a 20  fo->nAllField;. 
1c4f0 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e   }else if( pOp->
1c500 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
1c510 20 29 7b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d   ){.    nField =
1c520 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 7d 0a   pOp->p4.i;.  }.
1c530 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1c540 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  1>=0 );.  assert
1c550 28 20 6e 46 69 65 6c 64 3e 3d 30 20 29 3b 0a 20  ( nField>=0 );. 
1c560 20 74 65 73 74 63 61 73 65 28 20 6e 46 69 65 6c   testcase( nFiel
1c570 64 3d 3d 30 20 29 3b 20 20 2f 2a 20 54 61 62 6c  d==0 );  /* Tabl
1c580 65 20 77 69 74 68 20 49 4e 54 45 47 45 52 20 50  e with INTEGER P
1c590 52 49 4d 41 52 59 20 4b 45 59 20 61 6e 64 20 6e  RIMARY KEY and n
1c5a0 6f 74 68 69 6e 67 20 65 6c 73 65 20 2a 2f 0a 20  othing else */. 
1c5b0 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65   pCur = allocate
1c5c0 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70  Cursor(p, pOp->p
1c5d0 31 2c 20 6e 46 69 65 6c 64 2c 20 69 44 62 2c 20  1, nField, iDb, 
1c5e0 43 55 52 54 59 50 45 5f 42 54 52 45 45 29 3b 0a  CURTYPE_BTREE);.
1c5f0 20 20 69 66 28 20 70 43 75 72 3d 3d 30 20 29 20    if( pCur==0 ) 
1c600 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70  goto no_mem;.  p
1c610 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31  Cur->nullRow = 1
1c620 3b 0a 20 20 70 43 75 72 2d 3e 69 73 4f 72 64 65  ;.  pCur->isOrde
1c630 72 65 64 20 3d 20 31 3b 0a 20 20 70 43 75 72 2d  red = 1;.  pCur-
1c640 3e 70 67 6e 6f 52 6f 6f 74 20 3d 20 70 32 3b 0a  >pgnoRoot = p2;.
1c650 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
1c660 42 55 47 0a 20 20 70 43 75 72 2d 3e 77 72 46 6c  BUG.  pCur->wrFl
1c670 61 67 20 3d 20 77 72 46 6c 61 67 3b 0a 23 65 6e  ag = wrFlag;.#en
1c680 64 69 66 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  dif.  rc = sqlit
1c690 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 58  e3BtreeCursor(pX
1c6a0 2c 20 70 32 2c 20 77 72 46 6c 61 67 2c 20 70 4b  , p2, wrFlag, pK
1c6b0 65 79 49 6e 66 6f 2c 20 70 43 75 72 2d 3e 75 63  eyInfo, pCur->uc
1c6c0 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 70 43 75  .pCursor);.  pCu
1c6d0 72 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b  r->pKeyInfo = pK
1c6e0 65 79 49 6e 66 6f 3b 0a 20 20 2f 2a 20 53 65 74  eyInfo;.  /* Set
1c6f0 20 74 68 65 20 56 64 62 65 43 75 72 73 6f 72 2e   the VdbeCursor.
1c700 69 73 54 61 62 6c 65 20 76 61 72 69 61 62 6c 65  isTable variable
1c710 2e 20 50 72 65 76 69 6f 75 73 20 76 65 72 73 69  . Previous versi
1c720 6f 6e 73 20 6f 66 0a 20 20 2a 2a 20 53 51 4c 69  ons of.  ** SQLi
1c730 74 65 20 75 73 65 64 20 74 6f 20 63 68 65 63 6b  te used to check
1c740 20 69 66 20 74 68 65 20 72 6f 6f 74 2d 70 61 67   if the root-pag
1c750 65 20 66 6c 61 67 73 20 77 65 72 65 20 73 61 6e  e flags were san
1c760 65 20 61 74 20 74 68 69 73 20 70 6f 69 6e 74 0a  e at this point.
1c770 20 20 2a 2a 20 61 6e 64 20 72 65 70 6f 72 74 20    ** and report 
1c780 64 61 74 61 62 61 73 65 20 63 6f 72 72 75 70 74  database corrupt
1c790 69 6f 6e 20 69 66 20 74 68 65 79 20 77 65 72 65  ion if they were
1c7a0 20 6e 6f 74 2c 20 62 75 74 20 74 68 69 73 20 63   not, but this c
1c7b0 68 65 63 6b 20 68 61 73 0a 20 20 2a 2a 20 73 69  heck has.  ** si
1c7c0 6e 63 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74  nce moved into t
1c7d0 68 65 20 62 74 72 65 65 20 6c 61 79 65 72 2e 20  he btree layer. 
1c7e0 20 2a 2f 20 20 0a 20 20 70 43 75 72 2d 3e 69 73   */  .  pCur->is
1c7f0 54 61 62 6c 65 20 3d 20 70 4f 70 2d 3e 70 34 74  Table = pOp->p4t
1c800 79 70 65 21 3d 50 34 5f 4b 45 59 49 4e 46 4f 3b  ype!=P4_KEYINFO;
1c810 0a 0a 6f 70 65 6e 5f 63 75 72 73 6f 72 5f 73 65  ..open_cursor_se
1c820 74 5f 68 69 6e 74 73 3a 0a 20 20 61 73 73 65 72  t_hints:.  asser
1c830 74 28 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53  t( OPFLAG_BULKCS
1c840 52 3d 3d 42 54 52 45 45 5f 42 55 4c 4b 4c 4f 41  R==BTREE_BULKLOA
1c850 44 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f  D );.  assert( O
1c860 50 46 4c 41 47 5f 53 45 45 4b 45 51 3d 3d 42 54  PFLAG_SEEKEQ==BT
1c870 52 45 45 5f 53 45 45 4b 5f 45 51 20 29 3b 0a 20  REE_SEEK_EQ );. 
1c880 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e   testcase( pOp->
1c890 70 35 20 26 20 4f 50 46 4c 41 47 5f 42 55 4c 4b  p5 & OPFLAG_BULK
1c8a0 43 53 52 20 29 3b 0a 23 69 66 64 65 66 20 53 51  CSR );.#ifdef SQ
1c8b0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55 52 53  LITE_ENABLE_CURS
1c8c0 4f 52 5f 48 49 4e 54 53 0a 20 20 74 65 73 74 63  OR_HINTS.  testc
1c8d0 61 73 65 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f  ase( pOp->p2 & O
1c8e0 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 29 3b 0a  PFLAG_SEEKEQ );.
1c8f0 23 65 6e 64 69 66 0a 20 20 73 71 6c 69 74 65 33  #endif.  sqlite3
1c900 42 74 72 65 65 43 75 72 73 6f 72 48 69 6e 74 46  BtreeCursorHintF
1c910 6c 61 67 73 28 70 43 75 72 2d 3e 75 63 2e 70 43  lags(pCur->uc.pC
1c920 75 72 73 6f 72 2c 0a 20 20 20 20 20 20 20 20 20  ursor,.         
1c930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c940 20 20 20 20 20 20 28 70 4f 70 2d 3e 70 35 20 26        (pOp->p5 &
1c950 20 28 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52   (OPFLAG_BULKCSR
1c960 7c 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 29 29  |OPFLAG_SEEKEQ))
1c970 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  );.  if( rc ) go
1c980 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1c990 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a  error;.  break;.
1c9a0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70  }../* Opcode: Op
1c9b0 65 6e 44 75 70 20 50 31 20 50 32 20 2a 20 2a 20  enDup P1 P2 * * 
1c9c0 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e  *.**.** Open a n
1c9d0 65 77 20 63 75 72 73 6f 72 20 50 31 20 74 68 61  ew cursor P1 tha
1c9e0 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
1c9f0 73 61 6d 65 20 65 70 68 65 6d 65 72 61 6c 20 74  same ephemeral t
1ca00 61 62 6c 65 20 61 73 0a 2a 2a 20 63 75 72 73 6f  able as.** curso
1ca10 72 20 50 32 2e 20 20 54 68 65 20 50 32 20 63 75  r P2.  The P2 cu
1ca20 72 73 6f 72 20 6d 75 73 74 20 68 61 76 65 20 62  rsor must have b
1ca30 65 65 6e 20 6f 70 65 6e 65 64 20 62 79 20 61 20  een opened by a 
1ca40 70 72 69 6f 72 20 4f 50 5f 4f 70 65 6e 45 70 68  prior OP_OpenEph
1ca50 65 6d 65 72 61 6c 0a 2a 2a 20 6f 70 63 6f 64 65  emeral.** opcode
1ca60 2e 20 20 4f 6e 6c 79 20 65 70 68 65 6d 65 72 61  .  Only ephemera
1ca70 6c 20 63 75 72 73 6f 72 73 20 6d 61 79 20 62 65  l cursors may be
1ca80 20 64 75 70 6c 69 63 61 74 65 64 2e 0a 2a 2a 0a   duplicated..**.
1ca90 2a 2a 20 44 75 70 6c 69 63 61 74 65 20 65 70 68  ** Duplicate eph
1caa0 65 6d 65 72 61 6c 20 63 75 72 73 6f 72 73 20 61  emeral cursors a
1cab0 72 65 20 75 73 65 64 20 66 6f 72 20 73 65 6c 66  re used for self
1cac0 2d 6a 6f 69 6e 73 20 6f 66 20 6d 61 74 65 72 69  -joins of materi
1cad0 61 6c 69 7a 65 64 20 76 69 65 77 73 2e 0a 2a 2f  alized views..*/
1cae0 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 44 75 70  .case OP_OpenDup
1caf0 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
1cb00 20 2a 70 4f 72 69 67 3b 20 20 20 20 2f 2a 20 54   *pOrig;    /* T
1cb10 68 65 20 6f 72 69 67 69 6e 61 6c 20 63 75 72 73  he original curs
1cb20 6f 72 20 74 6f 20 62 65 20 64 75 70 6c 69 63 61  or to be duplica
1cb30 74 65 64 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ted */.  VdbeCur
1cb40 73 6f 72 20 2a 70 43 78 3b 20 20 20 20 20 20 2f  sor *pCx;      /
1cb50 2a 20 54 68 65 20 6e 65 77 20 63 75 72 73 6f 72  * The new cursor
1cb60 20 2a 2f 0a 0a 20 20 70 4f 72 69 67 20 3d 20 70   */..  pOrig = p
1cb70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 32 5d  ->apCsr[pOp->p2]
1cb80 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 72 69  ;.  assert( pOri
1cb90 67 2d 3e 70 42 74 78 21 3d 30 20 29 3b 20 20 2f  g->pBtx!=0 );  /
1cba0 2a 20 4f 6e 6c 79 20 65 70 68 65 6d 65 72 61 6c  * Only ephemeral
1cbb0 20 63 75 72 73 6f 72 73 20 63 61 6e 20 62 65 20   cursors can be 
1cbc0 64 75 70 6c 69 63 61 74 65 64 20 2a 2f 0a 0a 20  duplicated */.. 
1cbd0 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43   pCx = allocateC
1cbe0 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31  ursor(p, pOp->p1
1cbf0 2c 20 70 4f 72 69 67 2d 3e 6e 46 69 65 6c 64 2c  , pOrig->nField,
1cc00 20 2d 31 2c 20 43 55 52 54 59 50 45 5f 42 54 52   -1, CURTYPE_BTR
1cc10 45 45 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d  EE);.  if( pCx==
1cc20 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
1cc30 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20  .  pCx->nullRow 
1cc40 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 69 73 45 70  = 1;.  pCx->isEp
1cc50 68 65 6d 65 72 61 6c 20 3d 20 31 3b 0a 20 20 70  hemeral = 1;.  p
1cc60 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70  Cx->pKeyInfo = p
1cc70 4f 72 69 67 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a  Orig->pKeyInfo;.
1cc80 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d    pCx->isTable =
1cc90 20 70 4f 72 69 67 2d 3e 69 73 54 61 62 6c 65 3b   pOrig->isTable;
1cca0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
1ccb0 74 72 65 65 43 75 72 73 6f 72 28 70 4f 72 69 67  treeCursor(pOrig
1ccc0 2d 3e 70 42 74 78 2c 20 4d 41 53 54 45 52 5f 52  ->pBtx, MASTER_R
1ccd0 4f 4f 54 2c 20 42 54 52 45 45 5f 57 52 43 53 52  OOT, BTREE_WRCSR
1cce0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1ccf0 20 20 20 20 20 20 20 20 20 20 20 20 70 43 78 2d              pCx-
1cd00 3e 70 4b 65 79 49 6e 66 6f 2c 20 70 43 78 2d 3e  >pKeyInfo, pCx->
1cd10 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 2f  uc.pCursor);.  /
1cd20 2a 20 54 68 65 20 73 71 6c 69 74 65 33 42 74 72  * The sqlite3Btr
1cd30 65 65 43 75 72 73 6f 72 28 29 20 72 6f 75 74 69  eeCursor() routi
1cd40 6e 65 20 63 61 6e 20 6f 6e 6c 79 20 66 61 69 6c  ne can only fail
1cd50 20 66 6f 72 20 74 68 65 20 66 69 72 73 74 20 63   for the first c
1cd60 75 72 73 6f 72 0a 20 20 2a 2a 20 6f 70 65 6e 65  ursor.  ** opene
1cd70 64 20 66 6f 72 20 61 20 64 61 74 61 62 61 73 65  d for a database
1cd80 2e 20 20 53 69 6e 63 65 20 74 68 65 72 65 20 69  .  Since there i
1cd90 73 20 61 6c 72 65 61 64 79 20 61 6e 20 6f 70 65  s already an ope
1cda0 6e 20 63 75 72 73 6f 72 20 77 68 65 6e 20 74 68  n cursor when th
1cdb0 69 73 0a 20 20 2a 2a 20 6f 70 63 6f 64 65 20 69  is.  ** opcode i
1cdc0 73 20 72 75 6e 2c 20 74 68 65 20 73 71 6c 69 74  s run, the sqlit
1cdd0 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 29 20  e3BtreeCursor() 
1cde0 63 61 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a 20  cannot fail */. 
1cdf0 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
1ce00 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 62 72 65 61  ITE_OK );.  brea
1ce10 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65  k;.}.../* Opcode
1ce20 3a 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20  : OpenEphemeral 
1ce30 50 31 20 50 32 20 2a 20 50 34 20 50 35 0a 2a 2a  P1 P2 * P4 P5.**
1ce40 20 53 79 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c 75   Synopsis: nColu
1ce50 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e  mn=P2.**.** Open
1ce60 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20 50 31   a new cursor P1
1ce70 20 74 6f 20 61 20 74 72 61 6e 73 69 65 6e 74 20   to a transient 
1ce80 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75  table..** The cu
1ce90 72 73 6f 72 20 69 73 20 61 6c 77 61 79 73 20 6f  rsor is always o
1cea0 70 65 6e 65 64 20 72 65 61 64 2f 77 72 69 74 65  pened read/write
1ceb0 20 65 76 65 6e 20 69 66 20 0a 2a 2a 20 74 68 65   even if .** the
1cec0 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 69   main database i
1ced0 73 20 72 65 61 64 2d 6f 6e 6c 79 2e 20 20 54 68  s read-only.  Th
1cee0 65 20 65 70 68 65 6d 65 72 61 6c 0a 2a 2a 20 74  e ephemeral.** t
1cef0 61 62 6c 65 20 69 73 20 64 65 6c 65 74 65 64 20  able is deleted 
1cf00 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 77 68  automatically wh
1cf10 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  en the cursor is
1cf20 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 50   closed..**.** P
1cf30 32 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20  2 is the number 
1cf40 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
1cf50 65 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c  e ephemeral tabl
1cf60 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72  e..** The cursor
1cf70 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 42 54 72   points to a BTr
1cf80 65 65 20 74 61 62 6c 65 20 69 66 20 50 34 3d 3d  ee table if P4==
1cf90 30 20 61 6e 64 20 74 6f 20 61 20 42 54 72 65 65  0 and to a BTree
1cfa0 20 69 6e 64 65 78 0a 2a 2a 20 69 66 20 50 34 20   index.** if P4 
1cfb0 69 73 20 6e 6f 74 20 30 2e 20 20 49 66 20 50 34  is not 0.  If P4
1cfc0 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 74   is not NULL, it
1cfd0 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 4b 65 79   points to a Key
1cfe0 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 0a 2a  Info structure.*
1cff0 2a 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 74  * that defines t
1d000 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 6b 65 79  he format of key
1d010 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 2e 0a  s in the index..
1d020 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 70 61 72  **.** The P5 par
1d030 61 6d 65 74 65 72 20 63 61 6e 20 62 65 20 61 20  ameter can be a 
1d040 6d 61 73 6b 20 6f 66 20 74 68 65 20 42 54 52 45  mask of the BTRE
1d050 45 5f 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65  E_* flags define
1d060 64 0a 2a 2a 20 69 6e 20 62 74 72 65 65 2e 68 2e  d.** in btree.h.
1d070 20 20 54 68 65 73 65 20 66 6c 61 67 73 20 63 6f    These flags co
1d080 6e 74 72 6f 6c 20 61 73 70 65 63 74 73 20 6f 66  ntrol aspects of
1d090 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f   the operation o
1d0a0 66 0a 2a 2a 20 74 68 65 20 62 74 72 65 65 2e 20  f.** the btree. 
1d0b0 20 54 68 65 20 42 54 52 45 45 5f 4f 4d 49 54 5f   The BTREE_OMIT_
1d0c0 4a 4f 55 52 4e 41 4c 20 61 6e 64 20 42 54 52 45  JOURNAL and BTRE
1d0d0 45 5f 53 49 4e 47 4c 45 20 66 6c 61 67 73 20 61  E_SINGLE flags a
1d0e0 72 65 0a 2a 2a 20 61 64 64 65 64 20 61 75 74 6f  re.** added auto
1d0f0 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2f 0a 2f 2a  matically..*/./*
1d100 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 41 75 74   Opcode: OpenAut
1d110 6f 69 6e 64 65 78 20 50 31 20 50 32 20 2a 20 50  oindex P1 P2 * P
1d120 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
1d130 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a   nColumn=P2.**.*
1d140 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f  * This opcode wo
1d150 72 6b 73 20 74 68 65 20 73 61 6d 65 20 61 73 20  rks the same as 
1d160 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  OP_OpenEphemeral
1d170 2e 20 20 49 74 20 68 61 73 20 61 0a 2a 2a 20 64  .  It has a.** d
1d180 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 20 74 6f  ifferent name to
1d190 20 64 69 73 74 69 6e 67 75 69 73 68 20 69 74 73   distinguish its
1d1a0 20 75 73 65 2e 20 20 54 61 62 6c 65 73 20 63 72   use.  Tables cr
1d1b0 65 61 74 65 64 20 75 73 69 6e 67 0a 2a 2a 20 62  eated using.** b
1d1c0 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77 69  y this opcode wi
1d1d0 6c 6c 20 62 65 20 75 73 65 64 20 66 6f 72 20 61  ll be used for a
1d1e0 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65  utomatically cre
1d1f0 61 74 65 64 20 74 72 61 6e 73 69 65 6e 74 0a 2a  ated transient.*
1d200 2a 20 69 6e 64 69 63 65 73 20 69 6e 20 6a 6f 69  * indices in joi
1d210 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f  ns..*/.case OP_O
1d220 70 65 6e 41 75 74 6f 69 6e 64 65 78 3a 20 0a 63  penAutoindex: .c
1d230 61 73 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d  ase OP_OpenEphem
1d240 65 72 61 6c 3a 20 7b 0a 20 20 56 64 62 65 43 75  eral: {.  VdbeCu
1d250 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20 4b 65 79  rsor *pCx;.  Key
1d260 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a  Info *pKeyInfo;.
1d270 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20  .  static const 
1d280 69 6e 74 20 76 66 73 46 6c 61 67 73 20 3d 20 0a  int vfsFlags = .
1d290 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45        SQLITE_OPE
1d2a0 4e 5f 52 45 41 44 57 52 49 54 45 20 7c 0a 20 20  N_READWRITE |.  
1d2b0 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f      SQLITE_OPEN_
1d2c0 43 52 45 41 54 45 20 7c 0a 20 20 20 20 20 20 53  CREATE |.      S
1d2d0 51 4c 49 54 45 5f 4f 50 45 4e 5f 45 58 43 4c 55  QLITE_OPEN_EXCLU
1d2e0 53 49 56 45 20 7c 0a 20 20 20 20 20 20 53 51 4c  SIVE |.      SQL
1d2f0 49 54 45 5f 4f 50 45 4e 5f 44 45 4c 45 54 45 4f  ITE_OPEN_DELETEO
1d300 4e 43 4c 4f 53 45 20 7c 0a 20 20 20 20 20 20 53  NCLOSE |.      S
1d310 51 4c 49 54 45 5f 4f 50 45 4e 5f 54 52 41 4e 53  QLITE_OPEN_TRANS
1d320 49 45 4e 54 5f 44 42 3b 0a 20 20 61 73 73 65 72  IENT_DB;.  asser
1d330 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b  t( pOp->p1>=0 );
1d340 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1d350 70 32 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d  p2>=0 );.  pCx =
1d360 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28   allocateCursor(
1d370 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  p, pOp->p1, pOp-
1d380 3e 70 32 2c 20 2d 31 2c 20 43 55 52 54 59 50 45  >p2, -1, CURTYPE
1d390 5f 42 54 52 45 45 29 3b 0a 20 20 69 66 28 20 70  _BTREE);.  if( p
1d3a0 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  Cx==0 ) goto no_
1d3b0 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c  mem;.  pCx->null
1d3c0 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e  Row = 1;.  pCx->
1d3d0 69 73 45 70 68 65 6d 65 72 61 6c 20 3d 20 31 3b  isEphemeral = 1;
1d3e0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
1d3f0 74 72 65 65 4f 70 65 6e 28 64 62 2d 3e 70 56 66  treeOpen(db->pVf
1d400 73 2c 20 30 2c 20 64 62 2c 20 26 70 43 78 2d 3e  s, 0, db, &pCx->
1d410 70 42 74 78 2c 20 0a 20 20 20 20 20 20 20 20 20  pBtx, .         
1d420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42                 B
1d430 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41  TREE_OMIT_JOURNA
1d440 4c 20 7c 20 42 54 52 45 45 5f 53 49 4e 47 4c 45  L | BTREE_SINGLE
1d450 20 7c 20 70 4f 70 2d 3e 70 35 2c 20 76 66 73 46   | pOp->p5, vfsF
1d460 6c 61 67 73 29 3b 0a 20 20 69 66 28 20 72 63 3d  lags);.  if( rc=
1d470 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1d480 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1d490 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70 43  reeBeginTrans(pC
1d4a0 78 2d 3e 70 42 74 78 2c 20 31 29 3b 0a 20 20 7d  x->pBtx, 1);.  }
1d4b0 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
1d4c0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 2f 2a 20 49  E_OK ){.    /* I
1d4d0 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20 69 6e  f a transient in
1d4e0 64 65 78 20 69 73 20 72 65 71 75 69 72 65 64 2c  dex is required,
1d4f0 20 63 72 65 61 74 65 20 69 74 20 62 79 20 63 61   create it by ca
1d500 6c 6c 69 6e 67 0a 20 20 20 20 2a 2a 20 73 71 6c  lling.    ** sql
1d510 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54  ite3BtreeCreateT
1d520 61 62 6c 65 28 29 20 77 69 74 68 20 74 68 65 20  able() with the 
1d530 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 66 6c  BTREE_BLOBKEY fl
1d540 61 67 20 62 65 66 6f 72 65 0a 20 20 20 20 2a 2a  ag before.    **
1d550 20 6f 70 65 6e 69 6e 67 20 69 74 2e 20 49 66 20   opening it. If 
1d560 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c  a transient tabl
1d570 65 20 69 73 20 72 65 71 75 69 72 65 64 2c 20 6a  e is required, j
1d580 75 73 74 20 75 73 65 20 74 68 65 0a 20 20 20 20  ust use the.    
1d590 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ** automatically
1d5a0 20 63 72 65 61 74 65 64 20 74 61 62 6c 65 20 77   created table w
1d5b0 69 74 68 20 72 6f 6f 74 2d 70 61 67 65 20 31 20  ith root-page 1 
1d5c0 28 61 6e 20 42 4c 4f 42 5f 49 4e 54 4b 45 59 20  (an BLOB_INTKEY 
1d5d0 74 61 62 6c 65 29 2e 0a 20 20 20 20 2a 2f 0a 20  table)..    */. 
1d5e0 20 20 20 69 66 28 20 28 70 43 78 2d 3e 70 4b 65     if( (pCx->pKe
1d5f0 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f  yInfo = pKeyInfo
1d600 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49   = pOp->p4.pKeyI
1d610 6e 66 6f 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  nfo)!=0 ){.     
1d620 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 20 20 20   int pgno;.     
1d630 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
1d640 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f  type==P4_KEYINFO
1d650 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   );.      rc = s
1d660 71 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74  qlite3BtreeCreat
1d670 65 54 61 62 6c 65 28 70 43 78 2d 3e 70 42 74 78  eTable(pCx->pBtx
1d680 2c 20 26 70 67 6e 6f 2c 20 42 54 52 45 45 5f 42  , &pgno, BTREE_B
1d690 4c 4f 42 4b 45 59 20 7c 20 70 4f 70 2d 3e 70 35  LOBKEY | pOp->p5
1d6a0 29 3b 20 0a 20 20 20 20 20 20 69 66 28 20 72 63  ); .      if( rc
1d6b0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
1d6c0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
1d6d0 67 6e 6f 3d 3d 4d 41 53 54 45 52 5f 52 4f 4f 54  gno==MASTER_ROOT
1d6e0 2b 31 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  +1 );.        as
1d6f0 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e  sert( pKeyInfo->
1d700 64 62 3d 3d 64 62 20 29 3b 0a 20 20 20 20 20 20  db==db );.      
1d710 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e    assert( pKeyIn
1d720 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29  fo->enc==ENC(db)
1d730 20 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   );.        rc =
1d740 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
1d750 73 6f 72 28 70 43 78 2d 3e 70 42 74 78 2c 20 70  sor(pCx->pBtx, p
1d760 67 6e 6f 2c 20 42 54 52 45 45 5f 57 52 43 53 52  gno, BTREE_WRCSR
1d770 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1d780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d790 20 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43 78 2d    pKeyInfo, pCx-
1d7a0 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20  >uc.pCursor);.  
1d7b0 20 20 20 20 7d 0a 20 20 20 20 20 20 70 43 78 2d      }.      pCx-
1d7c0 3e 69 73 54 61 62 6c 65 20 3d 20 30 3b 0a 20 20  >isTable = 0;.  
1d7d0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
1d7e0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1d7f0 43 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74 78  Cursor(pCx->pBtx
1d800 2c 20 4d 41 53 54 45 52 5f 52 4f 4f 54 2c 20 42  , MASTER_ROOT, B
1d810 54 52 45 45 5f 57 52 43 53 52 2c 0a 20 20 20 20  TREE_WRCSR,.    
1d820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d830 20 20 20 20 20 20 20 20 20 20 30 2c 20 70 43 78            0, pCx
1d840 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20  ->uc.pCursor);. 
1d850 20 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c       pCx->isTabl
1d860 65 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d  e = 1;.    }.  }
1d870 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
1d880 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1d890 72 6f 72 3b 0a 20 20 70 43 78 2d 3e 69 73 4f 72  ror;.  pCx->isOr
1d8a0 64 65 72 65 64 20 3d 20 28 70 4f 70 2d 3e 70 35  dered = (pOp->p5
1d8b0 21 3d 42 54 52 45 45 5f 55 4e 4f 52 44 45 52 45  !=BTREE_UNORDERE
1d8c0 44 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  D);.  break;.}..
1d8d0 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65  /* Opcode: Sorte
1d8e0 72 4f 70 65 6e 20 50 31 20 50 32 20 50 33 20 50  rOpen P1 P2 P3 P
1d8f0 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  4 *.**.** This o
1d900 70 63 6f 64 65 20 77 6f 72 6b 73 20 6c 69 6b 65  pcode works like
1d910 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
1d920 6c 20 65 78 63 65 70 74 20 74 68 61 74 20 69 74  l except that it
1d930 20 6f 70 65 6e 73 0a 2a 2a 20 61 20 74 72 61 6e   opens.** a tran
1d940 73 69 65 6e 74 20 69 6e 64 65 78 20 74 68 61 74  sient index that
1d950 20 69 73 20 73 70 65 63 69 66 69 63 61 6c 6c 79   is specifically
1d960 20 64 65 73 69 67 6e 65 64 20 74 6f 20 73 6f 72   designed to sor
1d970 74 20 6c 61 72 67 65 0a 2a 2a 20 74 61 62 6c 65  t large.** table
1d980 73 20 75 73 69 6e 67 20 61 6e 20 65 78 74 65 72  s using an exter
1d990 6e 61 6c 20 6d 65 72 67 65 2d 73 6f 72 74 20 61  nal merge-sort a
1d9a0 6c 67 6f 72 69 74 68 6d 2e 0a 2a 2a 0a 2a 2a 20  lgorithm..**.** 
1d9b0 49 66 20 61 72 67 75 6d 65 6e 74 20 50 33 20 69  If argument P3 i
1d9c0 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
1d9d0 20 69 74 20 69 6e 64 69 63 61 74 65 73 20 74 68   it indicates th
1d9e0 61 74 20 74 68 65 20 73 6f 72 74 65 72 20 6d 61  at the sorter ma
1d9f0 79 0a 2a 2a 20 61 73 73 75 6d 65 20 74 68 61 74  y.** assume that
1da00 20 61 20 73 74 61 62 6c 65 20 73 6f 72 74 20 63   a stable sort c
1da10 6f 6e 73 69 64 65 72 69 6e 67 20 74 68 65 20 66  onsidering the f
1da20 69 72 73 74 20 50 33 20 66 69 65 6c 64 73 20 6f  irst P3 fields o
1da30 66 20 65 61 63 68 0a 2a 2a 20 6b 65 79 20 69 73  f each.** key is
1da40 20 73 75 66 66 69 63 69 65 6e 74 20 74 6f 20 70   sufficient to p
1da50 72 6f 64 75 63 65 20 74 68 65 20 72 65 71 75 69  roduce the requi
1da60 72 65 64 20 72 65 73 75 6c 74 73 2e 0a 2a 2f 0a  red results..*/.
1da70 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 4f 70  case OP_SorterOp
1da80 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  en: {.  VdbeCurs
1da90 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 61 73 73 65  or *pCx;..  asse
1daa0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29  rt( pOp->p1>=0 )
1dab0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1dac0 3e 70 32 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20  >p2>=0 );.  pCx 
1dad0 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72  = allocateCursor
1dae0 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  (p, pOp->p1, pOp
1daf0 2d 3e 70 32 2c 20 2d 31 2c 20 43 55 52 54 59 50  ->p2, -1, CURTYP
1db00 45 5f 53 4f 52 54 45 52 29 3b 0a 20 20 69 66 28  E_SORTER);.  if(
1db10 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e   pCx==0 ) goto n
1db20 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 70 4b  o_mem;.  pCx->pK
1db30 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34  eyInfo = pOp->p4
1db40 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73  .pKeyInfo;.  ass
1db50 65 72 74 28 20 70 43 78 2d 3e 70 4b 65 79 49 6e  ert( pCx->pKeyIn
1db60 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20  fo->db==db );.  
1db70 61 73 73 65 72 74 28 20 70 43 78 2d 3e 70 4b 65  assert( pCx->pKe
1db80 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28  yInfo->enc==ENC(
1db90 64 62 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  db) );.  rc = sq
1dba0 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 49  lite3VdbeSorterI
1dbb0 6e 69 74 28 64 62 2c 20 70 4f 70 2d 3e 70 33 2c  nit(db, pOp->p3,
1dbc0 20 70 43 78 29 3b 0a 20 20 69 66 28 20 72 63 20   pCx);.  if( rc 
1dbd0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
1dbe0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65  _to_error;.  bre
1dbf0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1dc00 3a 20 53 65 71 75 65 6e 63 65 54 65 73 74 20 50  : SequenceTest P
1dc10 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
1dc20 6e 6f 70 73 69 73 3a 20 69 66 28 20 63 75 72 73  nopsis: if( curs
1dc30 6f 72 5b 50 31 5d 2e 63 74 72 2b 2b 20 29 20 70  or[P1].ctr++ ) p
1dc40 63 20 3d 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20  c = P2.**.** P1 
1dc50 69 73 20 61 20 73 6f 72 74 65 72 20 63 75 72 73  is a sorter curs
1dc60 6f 72 2e 20 49 66 20 74 68 65 20 73 65 71 75 65  or. If the seque
1dc70 6e 63 65 20 63 6f 75 6e 74 65 72 20 69 73 20 63  nce counter is c
1dc80 75 72 72 65 6e 74 6c 79 20 7a 65 72 6f 2c 20 6a  urrently zero, j
1dc90 75 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e 20 52 65  ump.** to P2. Re
1dca0 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74  gardless of whet
1dcb0 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 6a  her or not the j
1dcc0 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 69 6e  ump is taken, in
1dcd0 63 72 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 74  crement the.** t
1dce0 68 65 20 73 65 71 75 65 6e 63 65 20 76 61 6c 75  he sequence valu
1dcf0 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  e..*/.case OP_Se
1dd00 71 75 65 6e 63 65 54 65 73 74 3a 20 7b 0a 20 20  quenceTest: {.  
1dd10 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
1dd20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1dd30 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
1dd40 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1dd50 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
1dd60 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
1dd70 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29  ( isSorter(pC) )
1dd80 3b 0a 20 20 69 66 28 20 28 70 43 2d 3e 73 65 71  ;.  if( (pC->seq
1dd90 43 6f 75 6e 74 2b 2b 29 3d 3d 30 20 29 7b 0a 20  Count++)==0 ){. 
1dda0 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
1ddb0 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  p2;.  }.  break;
1ddc0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .}../* Opcode: O
1ddd0 70 65 6e 50 73 65 75 64 6f 20 50 31 20 50 32 20  penPseudo P1 P2 
1dde0 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
1ddf0 69 73 3a 20 50 33 20 63 6f 6c 75 6d 6e 73 20 69  is: P3 columns i
1de00 6e 20 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 4f 70  n r[P2].**.** Op
1de10 65 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20  en a new cursor 
1de20 74 68 61 74 20 70 6f 69 6e 74 73 20 74 6f 20 61  that points to a
1de30 20 66 61 6b 65 20 74 61 62 6c 65 20 74 68 61 74   fake table that
1de40 20 63 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e 67   contains a sing
1de50 6c 65 0a 2a 2a 20 72 6f 77 20 6f 66 20 64 61 74  le.** row of dat
1de60 61 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e 74 20  a.  The content 
1de70 6f 66 20 74 68 61 74 20 6f 6e 65 20 72 6f 77 20  of that one row 
1de80 69 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  is the content o
1de90 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 72 65 67 69  f memory.** regi
1dea0 73 74 65 72 20 50 32 2e 20 20 49 6e 20 6f 74 68  ster P2.  In oth
1deb0 65 72 20 77 6f 72 64 73 2c 20 63 75 72 73 6f 72  er words, cursor
1dec0 20 50 31 20 62 65 63 6f 6d 65 73 20 61 6e 20 61   P1 becomes an a
1ded0 6c 69 61 73 20 66 6f 72 20 74 68 65 20 0a 2a 2a  lias for the .**
1dee0 20 4d 45 4d 5f 42 6c 6f 62 20 63 6f 6e 74 65 6e   MEM_Blob conten
1def0 74 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 72  t contained in r
1df00 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
1df10 2a 20 41 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  * A pseudo-table
1df20 20 63 72 65 61 74 65 64 20 62 79 20 74 68 69 73   created by this
1df30 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20   opcode is used 
1df40 74 6f 20 68 6f 6c 64 20 61 20 73 69 6e 67 6c 65  to hold a single
1df50 0a 2a 2a 20 72 6f 77 20 6f 75 74 70 75 74 20 66  .** row output f
1df60 72 6f 6d 20 74 68 65 20 73 6f 72 74 65 72 20 73  rom the sorter s
1df70 6f 20 74 68 61 74 20 74 68 65 20 72 6f 77 20 63  o that the row c
1df80 61 6e 20 62 65 20 64 65 63 6f 6d 70 6f 73 65 64  an be decomposed
1df90 20 69 6e 74 6f 0a 2a 2a 20 69 6e 64 69 76 69 64   into.** individ
1dfa0 75 61 6c 20 63 6f 6c 75 6d 6e 73 20 75 73 69 6e  ual columns usin
1dfb0 67 20 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20  g the OP_Column 
1dfc0 6f 70 63 6f 64 65 2e 20 20 54 68 65 20 4f 50 5f  opcode.  The OP_
1dfd0 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 0a 2a 2a  Column opcode.**
1dfe0 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 63 75 72   is the only cur
1dff0 73 6f 72 20 6f 70 63 6f 64 65 20 74 68 61 74 20  sor opcode that 
1e000 77 6f 72 6b 73 20 77 69 74 68 20 61 20 70 73 65  works with a pse
1e010 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a  udo-table..**.**
1e020 20 50 33 20 69 73 20 74 68 65 20 6e 75 6d 62 65   P3 is the numbe
1e030 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74  r of fields in t
1e040 68 65 20 72 65 63 6f 72 64 73 20 74 68 61 74 20  he records that 
1e050 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 62  will be stored b
1e060 79 0a 2a 2a 20 74 68 65 20 70 73 65 75 64 6f 2d  y.** the pseudo-
1e070 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  table..*/.case O
1e080 50 5f 4f 70 65 6e 50 73 65 75 64 6f 3a 20 7b 0a  P_OpenPseudo: {.
1e090 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1e0a0 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  x;..  assert( pO
1e0b0 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73  p->p1>=0 );.  as
1e0c0 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30  sert( pOp->p3>=0
1e0d0 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f   );.  pCx = allo
1e0e0 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f  cateCursor(p, pO
1e0f0 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 33 2c 20  p->p1, pOp->p3, 
1e100 2d 31 2c 20 43 55 52 54 59 50 45 5f 50 53 45 55  -1, CURTYPE_PSEU
1e110 44 4f 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d  DO);.  if( pCx==
1e120 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
1e130 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20  .  pCx->nullRow 
1e140 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 75 63 2e 70  = 1;.  pCx->uc.p
1e150 73 65 75 64 6f 54 61 62 6c 65 52 65 67 20 3d 20  seudoTableReg = 
1e160 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 43 78 2d 3e  pOp->p2;.  pCx->
1e170 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 61  isTable = 1;.  a
1e180 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d  ssert( pOp->p5==
1e190 30 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  0 );.  break;.}.
1e1a0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 6f 73  ./* Opcode: Clos
1e1b0 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  e P1 * * * *.**.
1e1c0 2a 2a 20 43 6c 6f 73 65 20 61 20 63 75 72 73 6f  ** Close a curso
1e1d0 72 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65  r previously ope
1e1e0 6e 65 64 20 61 73 20 50 31 2e 20 20 49 66 20 50  ned as P1.  If P
1e1f0 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 63 75 72 72  1 is not.** curr
1e200 65 6e 74 6c 79 20 6f 70 65 6e 2c 20 74 68 69 73  ently open, this
1e210 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20   instruction is 
1e220 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65  a no-op..*/.case
1e230 20 4f 50 5f 43 6c 6f 73 65 3a 20 7b 0a 20 20 61   OP_Close: {.  a
1e240 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1e250 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
1e260 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 73 71 6c  nCursor );.  sql
1e270 69 74 65 33 56 64 62 65 46 72 65 65 43 75 72 73  ite3VdbeFreeCurs
1e280 6f 72 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b 70  or(p, p->apCsr[p
1e290 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20 70 2d 3e 61  Op->p1]);.  p->a
1e2a0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20  pCsr[pOp->p1] = 
1e2b0 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23  0;.  break;.}..#
1e2c0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
1e2d0 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 55 53 45 44 5f  BLE_COLUMN_USED_
1e2e0 4d 41 53 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  MASK./* Opcode: 
1e2f0 43 6f 6c 75 6d 6e 73 55 73 65 64 20 50 31 20 2a  ColumnsUsed P1 *
1e300 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68   * P4 *.**.** Th
1e310 69 73 20 6f 70 63 6f 64 65 20 28 77 68 69 63 68  is opcode (which
1e320 20 6f 6e 6c 79 20 65 78 69 73 74 73 20 69 66 20   only exists if 
1e330 53 51 4c 69 74 65 20 77 61 73 20 63 6f 6d 70 69  SQLite was compi
1e340 6c 65 64 20 77 69 74 68 0a 2a 2a 20 53 51 4c 49  led with.** SQLI
1e350 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e  TE_ENABLE_COLUMN
1e360 5f 55 53 45 44 5f 4d 41 53 4b 29 20 69 64 65 6e  _USED_MASK) iden
1e370 74 69 66 69 65 73 20 77 68 69 63 68 20 63 6f 6c  tifies which col
1e380 75 6d 6e 73 20 6f 66 20 74 68 65 0a 2a 2a 20 74  umns of the.** t
1e390 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 66 6f  able or index fo
1e3a0 72 20 63 75 72 73 6f 72 20 50 31 20 61 72 65 20  r cursor P1 are 
1e3b0 75 73 65 64 2e 20 20 50 34 20 69 73 20 61 20 36  used.  P4 is a 6
1e3c0 34 2d 62 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a  4-bit integer.**
1e3d0 20 28 50 34 5f 49 4e 54 36 34 29 20 69 6e 20 77   (P4_INT64) in w
1e3e0 68 69 63 68 20 74 68 65 20 66 69 72 73 74 20 36  hich the first 6
1e3f0 33 20 62 69 74 73 20 61 72 65 20 6f 6e 65 20 66  3 bits are one f
1e400 6f 72 20 65 61 63 68 20 6f 66 20 74 68 65 0a 2a  or each of the.*
1e410 2a 20 66 69 72 73 74 20 36 33 20 63 6f 6c 75 6d  * first 63 colum
1e420 6e 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  ns of the table 
1e430 6f 72 20 69 6e 64 65 78 20 74 68 61 74 20 61 72  or index that ar
1e440 65 20 61 63 74 75 61 6c 6c 79 20 75 73 65 64 0a  e actually used.
1e450 2a 2a 20 62 79 20 74 68 65 20 63 75 72 73 6f 72  ** by the cursor
1e460 2e 20 20 54 68 65 20 68 69 67 68 2d 6f 72 64 65  .  The high-orde
1e470 72 20 62 69 74 20 69 73 20 73 65 74 20 69 66 20  r bit is set if 
1e480 61 6e 79 20 63 6f 6c 75 6d 6e 20 61 66 74 65 72  any column after
1e490 0a 2a 2a 20 74 68 65 20 36 34 74 68 20 69 73 20  .** the 64th is 
1e4a0 75 73 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  used..*/.case OP
1e4b0 5f 43 6f 6c 75 6d 6e 73 55 73 65 64 3a 20 7b 0a  _ColumnsUsed: {.
1e4c0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1e4d0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
1e4e0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
1e4f0 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
1e500 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
1e510 45 20 29 3b 0a 20 20 70 43 2d 3e 6d 61 73 6b 55  E );.  pC->maskU
1e520 73 65 64 20 3d 20 2a 28 75 36 34 2a 29 70 4f 70  sed = *(u64*)pOp
1e530 2d 3e 70 34 2e 70 49 36 34 3b 0a 20 20 62 72 65  ->p4.pI64;.  bre
1e540 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ak;.}.#endif../*
1e550 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 45 20   Opcode: SeekGE 
1e560 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
1e570 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
1e580 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66  [P3@P4].**.** If
1e590 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
1e5a0 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c  s to an SQL tabl
1e5b0 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75  e (B-Tree that u
1e5c0 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73  ses integer keys
1e5d0 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76  ), .** use the v
1e5e0 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
1e5f0 20 50 33 20 61 73 20 74 68 65 20 6b 65 79 2e 20   P3 as the key. 
1e600 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
1e610 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53  fers .** to an S
1e620 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50  QL index, then P
1e630 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69  3 is the first i
1e640 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34  n an array of P4
1e650 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74   registers .** t
1e660 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20  hat are used as 
1e670 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
1e680 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65  x key. .**.** Re
1e690 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20  position cursor 
1e6a0 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70  P1 so that  it p
1e6b0 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61  oints to the sma
1e6c0 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61 74  llest entry that
1e6d0 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20   .** is greater 
1e6e0 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
1e6f0 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20   the key value. 
1e700 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
1e710 72 65 63 6f 72 64 73 20 0a 2a 2a 20 67 72 65 61  records .** grea
1e720 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ter than or equa
1e730 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64  l to the key and
1e740 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P2 is not zero,
1e750 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
1e760 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63  ..**.** If the c
1e770 75 72 73 6f 72 20 50 31 20 77 61 73 20 6f 70 65  ursor P1 was ope
1e780 6e 65 64 20 75 73 69 6e 67 20 74 68 65 20 4f 50  ned using the OP
1e790 46 4c 41 47 5f 53 45 45 4b 45 51 20 66 6c 61 67  FLAG_SEEKEQ flag
1e7a0 2c 20 74 68 65 6e 20 74 68 69 73 0a 2a 2a 20 6f  , then this.** o
1e7b0 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61 79  pcode will alway
1e7c0 73 20 6c 61 6e 64 20 6f 6e 20 61 20 72 65 63 6f  s land on a reco
1e7d0 72 64 20 74 68 61 74 20 65 71 75 61 6c 6c 79 20  rd that equally 
1e7e0 65 71 75 61 6c 73 20 74 68 65 20 6b 65 79 2c 20  equals the key, 
1e7f0 6f 72 0a 2a 2a 20 65 6c 73 65 20 6a 75 6d 70 20  or.** else jump 
1e800 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
1e810 32 2e 20 20 57 68 65 6e 20 74 68 65 20 63 75 72  2.  When the cur
1e820 73 6f 72 20 69 73 20 4f 50 46 4c 41 47 5f 53 45  sor is OPFLAG_SE
1e830 45 4b 45 51 2c 20 74 68 69 73 0a 2a 2a 20 6f 70  EKEQ, this.** op
1e840 63 6f 64 65 20 6d 75 73 74 20 62 65 20 66 6f 6c  code must be fol
1e850 6c 6f 77 65 64 20 62 79 20 61 6e 20 49 64 78 4c  lowed by an IdxL
1e860 45 20 6f 70 63 6f 64 65 20 77 69 74 68 20 74 68  E opcode with th
1e870 65 20 73 61 6d 65 20 61 72 67 75 6d 65 6e 74 73  e same arguments
1e880 2e 0a 2a 2a 20 54 68 65 20 49 64 78 4c 45 20 6f  ..** The IdxLE o
1e890 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 73 6b  pcode will be sk
1e8a0 69 70 70 65 64 20 69 66 20 74 68 69 73 20 6f 70  ipped if this op
1e8b0 63 6f 64 65 20 73 75 63 63 65 65 64 73 2c 20 62  code succeeds, b
1e8c0 75 74 20 74 68 65 0a 2a 2a 20 49 64 78 4c 45 20  ut the.** IdxLE 
1e8d0 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 75  opcode will be u
1e8e0 73 65 64 20 6f 6e 20 73 75 62 73 65 71 75 65 6e  sed on subsequen
1e8f0 74 20 6c 6f 6f 70 20 69 74 65 72 61 74 69 6f 6e  t loop iteration
1e900 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  s..**.** This op
1e910 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20  code leaves the 
1e920 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65  cursor configure
1e930 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66 6f 72  d to move in for
1e940 77 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a 20 66  ward order,.** f
1e950 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  rom the beginnin
1e960 67 20 74 6f 77 61 72 64 20 74 68 65 20 65 6e 64  g toward the end
1e970 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
1e980 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  s, the cursor is
1e990 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74  .** configured t
1e9a0 6f 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f 74 20  o use Next, not 
1e9b0 50 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  Prev..**.** See 
1e9c0 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
1e9d0 46 6f 75 6e 64 2c 20 53 65 65 6b 4c 74 2c 20 53  Found, SeekLt, S
1e9e0 65 65 6b 47 74 2c 20 53 65 65 6b 4c 65 0a 2a 2f  eekGt, SeekLe.*/
1e9f0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b  ./* Opcode: Seek
1ea00 47 54 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  GT P1 P2 P3 P4 *
1ea10 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
1ea20 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
1ea30 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
1ea40 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74  fers to an SQL t
1ea50 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61  able (B-Tree tha
1ea60 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b  t uses integer k
1ea70 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68  eys), .** use th
1ea80 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
1ea90 74 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e  ter P3 as a key.
1eaa0 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
1eab0 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53  fers .** to an S
1eac0 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50  QL index, then P
1ead0 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69  3 is the first i
1eae0 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34  n an array of P4
1eaf0 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74   registers .** t
1eb00 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20  hat are used as 
1eb10 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
1eb20 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65  x key. .**.** Re
1eb30 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20  position cursor 
1eb40 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70  P1 so that  it p
1eb50 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61  oints to the sma
1eb60 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61 74  llest entry that
1eb70 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20   .** is greater 
1eb80 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c  than the key val
1eb90 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65  ue. If there are
1eba0 20 6e 6f 20 72 65 63 6f 72 64 73 20 67 72 65 61   no records grea
1ebb0 74 65 72 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65  ter than .** the
1ebc0 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e   key and P2 is n
1ebd0 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75  ot zero, then ju
1ebe0 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  mp to P2..**.** 
1ebf0 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76  This opcode leav
1ec00 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f  es the cursor co
1ec10 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65  nfigured to move
1ec20 20 69 6e 20 66 6f 72 77 61 72 64 20 6f 72 64 65   in forward orde
1ec30 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62  r,.** from the b
1ec40 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20  eginning toward 
1ec50 74 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68  the end.  In oth
1ec60 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75  er words, the cu
1ec70 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69  rsor is.** confi
1ec80 67 75 72 65 64 20 74 6f 20 75 73 65 20 4e 65 78  gured to use Nex
1ec90 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2a 0a  t, not Prev..**.
1eca0 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
1ecb0 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65  nd, NotFound, Se
1ecc0 65 6b 4c 74 2c 20 53 65 65 6b 47 65 2c 20 53 65  ekLt, SeekGe, Se
1ecd0 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ekLe.*/./* Opcod
1ece0 65 3a 20 53 65 65 6b 4c 54 20 50 31 20 50 32 20  e: SeekLT P1 P2 
1ecf0 50 33 20 50 34 20 2a 20 0a 2a 2a 20 53 79 6e 6f  P3 P4 * .** Syno
1ed00 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
1ed10 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73  4].**.** If curs
1ed20 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20  or P1 refers to 
1ed30 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d  an SQL table (B-
1ed40 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69  Tree that uses i
1ed50 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a  nteger keys), .*
1ed60 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20  * use the value 
1ed70 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61  in register P3 a
1ed80 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73  s a key. If curs
1ed90 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a  or P1 refers .**
1eda0 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78   to an SQL index
1edb0 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65  , then P3 is the
1edc0 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72   first in an arr
1edd0 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  ay of P4 registe
1ede0 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20  rs .** that are 
1edf0 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63  used as an unpac
1ee00 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a  ked index key. .
1ee10 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e  **.** Reposition
1ee20 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
1ee30 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  at  it points to
1ee40 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74   the largest ent
1ee50 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c  ry that .** is l
1ee60 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79  ess than the key
1ee70 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65   value. If there
1ee80 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20   are no records 
1ee90 6c 65 73 73 20 74 68 61 6e 20 0a 2a 2a 20 74 68  less than .** th
1eea0 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20  e key and P2 is 
1eeb0 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a  not zero, then j
1eec0 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ump to P2..**.**
1eed0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61   This opcode lea
1eee0 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63  ves the cursor c
1eef0 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76  onfigured to mov
1ef00 65 20 69 6e 20 72 65 76 65 72 73 65 20 6f 72 64  e in reverse ord
1ef10 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20  er,.** from the 
1ef20 65 6e 64 20 74 6f 77 61 72 64 20 74 68 65 20 62  end toward the b
1ef30 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74  eginning.  In ot
1ef40 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63  her words, the c
1ef50 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66  ursor is.** conf
1ef60 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 50 72  igured to use Pr
1ef70 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2a  ev, not Next..**
1ef80 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
1ef90 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53  und, NotFound, S
1efa0 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53  eekGt, SeekGe, S
1efb0 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  eekLe.*/./* Opco
1efc0 64 65 3a 20 53 65 65 6b 4c 45 20 50 31 20 50 32  de: SeekLE P1 P2
1efd0 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
1efe0 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
1eff0 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73  4].**.** If curs
1f000 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20  or P1 refers to 
1f010 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d  an SQL table (B-
1f020 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69  Tree that uses i
1f030 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a  nteger keys), .*
1f040 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20  * use the value 
1f050 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61  in register P3 a
1f060 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73  s a key. If curs
1f070 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a  or P1 refers .**
1f080 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78   to an SQL index
1f090 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65  , then P3 is the
1f0a0 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72   first in an arr
1f0b0 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  ay of P4 registe
1f0c0 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20  rs .** that are 
1f0d0 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63  used as an unpac
1f0e0 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a  ked index key. .
1f0f0 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e  **.** Reposition
1f100 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
1f110 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  at it points to 
1f120 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72  the largest entr
1f130 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65  y that .** is le
1f140 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  ss than or equal
1f150 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75   to the key valu
1f160 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  e. If there are 
1f170 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 6c  no records .** l
1f180 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ess than or equa
1f190 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64  l to the key and
1f1a0 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P2 is not zero,
1f1b0 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
1f1c0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
1f1d0 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63  ode leaves the c
1f1e0 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64  ursor configured
1f1f0 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76 65   to move in reve
1f200 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72  rse order,.** fr
1f210 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f 77 61 72  om the end towar
1f220 64 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e  d the beginning.
1f230 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
1f240 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a  , the cursor is.
1f250 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  ** configured to
1f260 20 75 73 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e   use Prev, not N
1f270 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ext..**.** If th
1f280 65 20 63 75 72 73 6f 72 20 50 31 20 77 61 73 20  e cursor P1 was 
1f290 6f 70 65 6e 65 64 20 75 73 69 6e 67 20 74 68 65  opened using the
1f2a0 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 66   OPFLAG_SEEKEQ f
1f2b0 6c 61 67 2c 20 74 68 65 6e 20 74 68 69 73 0a 2a  lag, then this.*
1f2c0 2a 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c  * opcode will al
1f2d0 77 61 79 73 20 6c 61 6e 64 20 6f 6e 20 61 20 72  ways land on a r
1f2e0 65 63 6f 72 64 20 74 68 61 74 20 65 71 75 61 6c  ecord that equal
1f2f0 6c 79 20 65 71 75 61 6c 73 20 74 68 65 20 6b 65  ly equals the ke
1f300 79 2c 20 6f 72 0a 2a 2a 20 65 6c 73 65 20 6a 75  y, or.** else ju
1f310 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
1f320 6f 20 50 32 2e 20 20 57 68 65 6e 20 74 68 65 20  o P2.  When the 
1f330 63 75 72 73 6f 72 20 69 73 20 4f 50 46 4c 41 47  cursor is OPFLAG
1f340 5f 53 45 45 4b 45 51 2c 20 74 68 69 73 0a 2a 2a  _SEEKEQ, this.**
1f350 20 6f 70 63 6f 64 65 20 6d 75 73 74 20 62 65 20   opcode must be 
1f360 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20 49  followed by an I
1f370 64 78 47 45 20 6f 70 63 6f 64 65 20 77 69 74 68  dxGE opcode with
1f380 20 74 68 65 20 73 61 6d 65 20 61 72 67 75 6d 65   the same argume
1f390 6e 74 73 2e 0a 2a 2a 20 54 68 65 20 49 64 78 47  nts..** The IdxG
1f3a0 45 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65  E opcode will be
1f3b0 20 73 6b 69 70 70 65 64 20 69 66 20 74 68 69 73   skipped if this
1f3c0 20 6f 70 63 6f 64 65 20 73 75 63 63 65 65 64 73   opcode succeeds
1f3d0 2c 20 62 75 74 20 74 68 65 0a 2a 2a 20 49 64 78  , but the.** Idx
1f3e0 47 45 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62  GE opcode will b
1f3f0 65 20 75 73 65 64 20 6f 6e 20 73 75 62 73 65 71  e used on subseq
1f400 75 65 6e 74 20 6c 6f 6f 70 20 69 74 65 72 61 74  uent loop iterat
1f410 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  ions..**.** See 
1f420 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
1f430 46 6f 75 6e 64 2c 20 53 65 65 6b 47 74 2c 20 53  Found, SeekGt, S
1f440 65 65 6b 47 65 2c 20 53 65 65 6b 4c 74 0a 2a 2f  eekGe, SeekLt.*/
1f450 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c 54 3a  .case OP_SeekLT:
1f460 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
1f470 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
1f480 5f 53 65 65 6b 4c 45 3a 20 20 20 20 20 20 20 20  _SeekLE:        
1f490 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1f4a0 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 47 45 3a  .case OP_SeekGE:
1f4b0 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
1f4c0 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
1f4d0 5f 53 65 65 6b 47 54 3a 20 7b 20 20 20 20 20 20  _SeekGT: {      
1f4e0 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1f4f0 0a 20 20 69 6e 74 20 72 65 73 3b 20 20 20 20 20  .  int res;     
1f500 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 61 72 69        /* Compari
1f510 73 6f 6e 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20  son result */.  
1f520 69 6e 74 20 6f 63 3b 20 20 20 20 20 20 20 20 20  int oc;         
1f530 20 20 20 2f 2a 20 4f 70 63 6f 64 65 20 2a 2f 0a     /* Opcode */.
1f540 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1f550 3b 20 20 20 20 2f 2a 20 54 68 65 20 63 75 72 73  ;    /* The curs
1f560 6f 72 20 74 6f 20 73 65 65 6b 20 2a 2f 0a 20 20  or to seek */.  
1f570 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72  UnpackedRecord r
1f580 3b 20 20 2f 2a 20 54 68 65 20 6b 65 79 20 74 6f  ;  /* The key to
1f590 20 73 65 65 6b 20 66 6f 72 20 2a 2f 0a 20 20 69   seek for */.  i
1f5a0 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20  nt nField;      
1f5b0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
1f5c0 6f 6c 75 6d 6e 73 20 6f 72 20 66 69 65 6c 64 73  olumns or fields
1f5d0 20 69 6e 20 74 68 65 20 6b 65 79 20 2a 2f 0a 20   in the key */. 
1f5e0 20 69 36 34 20 69 4b 65 79 3b 20 20 20 20 20 20   i64 iKey;      
1f5f0 20 20 20 20 2f 2a 20 54 68 65 20 72 6f 77 69 64      /* The rowid
1f600 20 77 65 20 61 72 65 20 74 6f 20 73 65 65 6b 20   we are to seek 
1f610 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 65 71 4f 6e  to */.  int eqOn
1f620 6c 79 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e  ly;        /* On
1f630 6c 79 20 69 6e 74 65 72 65 73 74 65 64 20 69 6e  ly interested in
1f640 20 3d 3d 20 72 65 73 75 6c 74 73 20 2a 2f 0a 0a   == results */..
1f650 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1f660 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
1f670 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1f680 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 21  assert( pOp->p2!
1f690 3d 30 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  =0 );.  pC = p->
1f6a0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
1f6b0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
1f6c0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
1f6d0 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
1f6e0 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73  PE_BTREE );.  as
1f6f0 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 45 20  sert( OP_SeekLE 
1f700 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 31 20 29  == OP_SeekLT+1 )
1f710 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53  ;.  assert( OP_S
1f720 65 65 6b 47 45 20 3d 3d 20 4f 50 5f 53 65 65 6b  eekGE == OP_Seek
1f730 4c 54 2b 32 20 29 3b 0a 20 20 61 73 73 65 72 74  LT+2 );.  assert
1f740 28 20 4f 50 5f 53 65 65 6b 47 54 20 3d 3d 20 4f  ( OP_SeekGT == O
1f750 50 5f 53 65 65 6b 4c 54 2b 33 20 29 3b 0a 20 20  P_SeekLT+3 );.  
1f760 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 4f 72  assert( pC->isOr
1f770 64 65 72 65 64 20 29 3b 0a 20 20 61 73 73 65 72  dered );.  asser
1f780 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  t( pC->uc.pCurso
1f790 72 21 3d 30 20 29 3b 0a 20 20 6f 63 20 3d 20 70  r!=0 );.  oc = p
1f7a0 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 65 71  Op->opcode;.  eq
1f7b0 4f 6e 6c 79 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  Only = 0;.  pC->
1f7c0 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 23 69 66  nullRow = 0;.#if
1f7d0 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
1f7e0 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20  .  pC->seekOp = 
1f7f0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e  pOp->opcode;.#en
1f800 64 69 66 0a 0a 20 20 69 66 28 20 70 43 2d 3e 69  dif..  if( pC->i
1f810 73 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a  sTable ){.    /*
1f820 20 54 68 65 20 42 54 52 45 45 5f 53 45 45 4b 5f   The BTREE_SEEK_
1f830 45 51 20 66 6c 61 67 20 69 73 20 6f 6e 6c 79 20  EQ flag is only 
1f840 73 65 74 20 6f 6e 20 69 6e 64 65 78 20 63 75 72  set on index cur
1f850 73 6f 72 73 20 2a 2f 0a 20 20 20 20 61 73 73 65  sors */.    asse
1f860 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65  rt( sqlite3Btree
1f870 43 75 72 73 6f 72 48 61 73 48 69 6e 74 28 70 43  CursorHasHint(pC
1f880 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 42 54  ->uc.pCursor, BT
1f890 52 45 45 5f 53 45 45 4b 5f 45 51 29 3d 3d 30 0a  REE_SEEK_EQ)==0.
1f8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c                ||
1f8b0 20 43 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a 0a   CORRUPT_DB );..
1f8c0 20 20 20 20 2f 2a 20 54 68 65 20 69 6e 70 75 74      /* The input
1f8d0 20 76 61 6c 75 65 20 69 6e 20 50 33 20 6d 69 67   value in P3 mig
1f8e0 68 74 20 62 65 20 6f 66 20 61 6e 79 20 74 79 70  ht be of any typ
1f8f0 65 3a 20 69 6e 74 65 67 65 72 2c 20 72 65 61 6c  e: integer, real
1f900 2c 20 73 74 72 69 6e 67 2c 0a 20 20 20 20 2a 2a  , string,.    **
1f910 20 62 6c 6f 62 2c 20 6f 72 20 4e 55 4c 4c 2e 20   blob, or NULL. 
1f920 20 42 75 74 20 69 74 20 6e 65 65 64 73 20 74 6f   But it needs to
1f930 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 20 62   be an integer b
1f940 65 66 6f 72 65 20 77 65 20 63 61 6e 20 64 6f 0a  efore we can do.
1f950 20 20 20 20 2a 2a 20 74 68 65 20 73 65 65 6b 2c      ** the seek,
1f960 20 73 6f 20 63 6f 6e 76 65 72 74 20 69 74 2e 20   so convert it. 
1f970 2a 2f 0a 20 20 20 20 70 49 6e 33 20 3d 20 26 61  */.    pIn3 = &a
1f980 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
1f990 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61    if( (pIn3->fla
1f9a0 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45  gs & (MEM_Int|ME
1f9b0 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29  M_Real|MEM_Str))
1f9c0 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20  ==MEM_Str ){.   
1f9d0 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41     applyNumericA
1f9e0 66 66 69 6e 69 74 79 28 70 49 6e 33 2c 20 30 29  ffinity(pIn3, 0)
1f9f0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 4b 65 79  ;.    }.    iKey
1fa00 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
1fa10 74 56 61 6c 75 65 28 70 49 6e 33 29 3b 0a 0a 20  tValue(pIn3);.. 
1fa20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20     /* If the P3 
1fa30 76 61 6c 75 65 20 63 6f 75 6c 64 20 6e 6f 74 20  value could not 
1fa40 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74  be converted int
1fa50 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 77 69 74  o an integer wit
1fa60 68 6f 75 74 0a 20 20 20 20 2a 2a 20 6c 6f 73 73  hout.    ** loss
1fa70 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c   of information,
1fa80 20 74 68 65 6e 20 73 70 65 63 69 61 6c 20 70 72   then special pr
1fa90 6f 63 65 73 73 69 6e 67 20 69 73 20 72 65 71 75  ocessing is requ
1faa0 69 72 65 64 2e 2e 2e 20 2a 2f 0a 20 20 20 20 69  ired... */.    i
1fab0 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20  f( (pIn3->flags 
1fac0 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b  & MEM_Int)==0 ){
1fad0 0a 20 20 20 20 20 20 69 66 28 20 28 70 49 6e 33  .      if( (pIn3
1fae0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65  ->flags & MEM_Re
1faf0 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  al)==0 ){.      
1fb00 20 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20 76    /* If the P3 v
1fb10 61 6c 75 65 20 63 61 6e 6e 6f 74 20 62 65 20 63  alue cannot be c
1fb20 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e  onverted into an
1fb30 79 20 6b 69 6e 64 20 6f 66 20 61 20 6e 75 6d 62  y kind of a numb
1fb40 65 72 2c 0a 20 20 20 20 20 20 20 20 2a 2a 20 74  er,.        ** t
1fb50 68 65 6e 20 74 68 65 20 73 65 65 6b 20 69 73 20  hen the seek is 
1fb60 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2c 20 73 6f  not possible, so
1fb70 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20   jump to P2 */. 
1fb80 20 20 20 20 20 20 20 56 64 62 65 42 72 61 6e 63         VdbeBranc
1fb90 68 54 61 6b 65 6e 28 31 2c 32 29 3b 20 67 6f 74  hTaken(1,2); got
1fba0 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
1fbb0 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
1fbc0 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49     }..      /* I
1fbd0 66 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74  f the approximat
1fbe0 69 6f 6e 20 69 4b 65 79 20 69 73 20 6c 61 72 67  ion iKey is larg
1fbf0 65 72 20 74 68 61 6e 20 74 68 65 20 61 63 74 75  er than the actu
1fc00 61 6c 20 72 65 61 6c 20 73 65 61 72 63 68 0a 20  al real search. 
1fc10 20 20 20 20 20 2a 2a 20 74 65 72 6d 2c 20 73 75       ** term, su
1fc20 62 73 74 69 74 75 74 65 20 3e 3d 20 66 6f 72 20  bstitute >= for 
1fc30 3e 20 61 6e 64 20 3c 20 66 6f 72 20 3c 3d 2e 20  > and < for <=. 
1fc40 65 2e 67 2e 20 69 66 20 74 68 65 20 73 65 61 72  e.g. if the sear
1fc50 63 68 20 74 65 72 6d 0a 20 20 20 20 20 20 2a 2a  ch term.      **
1fc60 20 69 73 20 34 2e 39 20 61 6e 64 20 74 68 65 20   is 4.9 and the 
1fc70 69 6e 74 65 67 65 72 20 61 70 70 72 6f 78 69 6d  integer approxim
1fc80 61 74 69 6f 6e 20 35 3a 0a 20 20 20 20 20 20 2a  ation 5:.      *
1fc90 2a 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20 20  *.      **      
1fca0 20 20 28 78 20 3e 20 20 34 2e 39 29 20 20 20 20    (x >  4.9)    
1fcb0 2d 3e 20 20 20 20 20 28 78 20 3e 3d 20 35 29 0a  ->     (x >= 5).
1fcc0 20 20 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20        **        
1fcd0 28 78 20 3c 3d 20 34 2e 39 29 20 20 20 20 2d 3e  (x <= 4.9)    ->
1fce0 20 20 20 20 20 28 78 20 3c 20 20 35 29 0a 20 20       (x <  5).  
1fcf0 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28      */.      if(
1fd00 20 70 49 6e 33 2d 3e 75 2e 72 3c 28 64 6f 75 62   pIn3->u.r<(doub
1fd10 6c 65 29 69 4b 65 79 20 29 7b 0a 20 20 20 20 20  le)iKey ){.     
1fd20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65     assert( OP_Se
1fd30 65 6b 47 45 3d 3d 28 4f 50 5f 53 65 65 6b 47 54  ekGE==(OP_SeekGT
1fd40 2d 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61  -1) );.        a
1fd50 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 54  ssert( OP_SeekLT
1fd60 3d 3d 28 4f 50 5f 53 65 65 6b 4c 45 2d 31 29 20  ==(OP_SeekLE-1) 
1fd70 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
1fd80 74 28 20 28 4f 50 5f 53 65 65 6b 4c 45 20 26 20  t( (OP_SeekLE & 
1fd90 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65  0x0001)==(OP_See
1fda0 6b 47 54 20 26 20 30 78 30 30 30 31 29 20 29 3b  kGT & 0x0001) );
1fdb0 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 6f 63  .        if( (oc
1fdc0 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f   & 0x0001)==(OP_
1fdd0 53 65 65 6b 47 54 20 26 20 30 78 30 30 30 31 29  SeekGT & 0x0001)
1fde0 20 29 20 6f 63 2d 2d 3b 0a 20 20 20 20 20 20 7d   ) oc--;.      }
1fdf0 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68  ..      /* If th
1fe00 65 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20  e approximation 
1fe10 69 4b 65 79 20 69 73 20 73 6d 61 6c 6c 65 72 20  iKey is smaller 
1fe20 74 68 61 6e 20 74 68 65 20 61 63 74 75 61 6c 20  than the actual 
1fe30 72 65 61 6c 20 73 65 61 72 63 68 0a 20 20 20 20  real search.    
1fe40 20 20 2a 2a 20 74 65 72 6d 2c 20 73 75 62 73 74    ** term, subst
1fe50 69 74 75 74 65 20 3c 3d 20 66 6f 72 20 3c 20 61  itute <= for < a
1fe60 6e 64 20 3e 20 66 6f 72 20 3e 3d 2e 20 20 2a 2f  nd > for >=.  */
1fe70 0a 20 20 20 20 20 20 65 6c 73 65 20 69 66 28 20  .      else if( 
1fe80 70 49 6e 33 2d 3e 75 2e 72 3e 28 64 6f 75 62 6c  pIn3->u.r>(doubl
1fe90 65 29 69 4b 65 79 20 29 7b 0a 20 20 20 20 20 20  e)iKey ){.      
1fea0 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65    assert( OP_See
1feb0 6b 4c 45 3d 3d 28 4f 50 5f 53 65 65 6b 4c 54 2b  kLE==(OP_SeekLT+
1fec0 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  1) );.        as
1fed0 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 54 3d  sert( OP_SeekGT=
1fee0 3d 28 4f 50 5f 53 65 65 6b 47 45 2b 31 29 20 29  =(OP_SeekGE+1) )
1fef0 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
1ff00 28 20 28 4f 50 5f 53 65 65 6b 4c 54 20 26 20 30  ( (OP_SeekLT & 0
1ff10 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b  x0001)==(OP_Seek
1ff20 47 45 20 26 20 30 78 30 30 30 31 29 20 29 3b 0a  GE & 0x0001) );.
1ff30 20 20 20 20 20 20 20 20 69 66 28 20 28 6f 63 20          if( (oc 
1ff40 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53  & 0x0001)==(OP_S
1ff50 65 65 6b 4c 54 20 26 20 30 78 30 30 30 31 29 20  eekLT & 0x0001) 
1ff60 29 20 6f 63 2b 2b 3b 0a 20 20 20 20 20 20 7d 0a  ) oc++;.      }.
1ff70 20 20 20 20 7d 20 0a 20 20 20 20 72 63 20 3d 20      } .    rc = 
1ff80 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
1ff90 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 75  toUnpacked(pC->u
1ffa0 63 2e 70 43 75 72 73 6f 72 2c 20 30 2c 20 28 75  c.pCursor, 0, (u
1ffb0 36 34 29 69 4b 65 79 2c 20 30 2c 20 26 72 65 73  64)iKey, 0, &res
1ffc0 29 3b 0a 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74  );.    pC->movet
1ffd0 6f 54 61 72 67 65 74 20 3d 20 69 4b 65 79 3b 20  oTarget = iKey; 
1ffe0 20 2f 2a 20 55 73 65 64 20 62 79 20 4f 50 5f 44   /* Used by OP_D
1fff0 65 6c 65 74 65 20 2a 2f 0a 20 20 20 20 69 66 28  elete */.    if(
20000 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
20010 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f  {.      goto abo
20020 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
20030 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
20040 20 20 20 20 2f 2a 20 46 6f 72 20 61 20 63 75 72      /* For a cur
20050 73 6f 72 20 77 69 74 68 20 74 68 65 20 42 54 52  sor with the BTR
20060 45 45 5f 53 45 45 4b 5f 45 51 20 68 69 6e 74 2c  EE_SEEK_EQ hint,
20070 20 6f 6e 6c 79 20 74 68 65 20 4f 50 5f 53 65 65   only the OP_See
20080 6b 47 45 20 61 6e 64 0a 20 20 20 20 2a 2a 20 4f  kGE and.    ** O
20090 50 5f 53 65 65 6b 4c 45 20 6f 70 63 6f 64 65 73  P_SeekLE opcodes
200a0 20 61 72 65 20 61 6c 6c 6f 77 65 64 2c 20 61 6e   are allowed, an
200b0 64 20 74 68 65 73 65 20 6d 75 73 74 20 62 65 20  d these must be 
200c0 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c  immediately foll
200d0 6f 77 65 64 0a 20 20 20 20 2a 2a 20 62 79 20 61  owed.    ** by a
200e0 6e 20 4f 50 5f 49 64 78 47 54 20 6f 72 20 4f 50  n OP_IdxGT or OP
200f0 5f 49 64 78 4c 54 20 6f 70 63 6f 64 65 2c 20 72  _IdxLT opcode, r
20100 65 73 70 65 63 74 69 76 65 6c 79 2c 20 77 69 74  espectively, wit
20110 68 20 74 68 65 20 73 61 6d 65 20 6b 65 79 2e 0a  h the same key..
20120 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 73      */.    if( s
20130 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
20140 72 48 61 73 48 69 6e 74 28 70 43 2d 3e 75 63 2e  rHasHint(pC->uc.
20150 70 43 75 72 73 6f 72 2c 20 42 54 52 45 45 5f 53  pCursor, BTREE_S
20160 45 45 4b 5f 45 51 29 20 29 7b 0a 20 20 20 20 20  EEK_EQ) ){.     
20170 20 65 71 4f 6e 6c 79 20 3d 20 31 3b 0a 20 20 20   eqOnly = 1;.   
20180 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
20190 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b 47  opcode==OP_SeekG
201a0 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  E || pOp->opcode
201b0 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 3b 0a 20  ==OP_SeekLE );. 
201c0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
201d0 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  [1].opcode==OP_I
201e0 64 78 4c 54 20 7c 7c 20 70 4f 70 5b 31 5d 2e 6f  dxLT || pOp[1].o
201f0 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20  pcode==OP_IdxGT 
20200 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
20210 20 70 4f 70 5b 31 5d 2e 70 31 3d 3d 70 4f 70 5b   pOp[1].p1==pOp[
20220 30 5d 2e 70 31 20 29 3b 0a 20 20 20 20 20 20 61  0].p1 );.      a
20230 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70 32  ssert( pOp[1].p2
20240 3d 3d 70 4f 70 5b 30 5d 2e 70 32 20 29 3b 0a 20  ==pOp[0].p2 );. 
20250 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
20260 5b 31 5d 2e 70 33 3d 3d 70 4f 70 5b 30 5d 2e 70  [1].p3==pOp[0].p
20270 33 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  3 );.      asser
20280 74 28 20 70 4f 70 5b 31 5d 2e 70 34 2e 69 3d 3d  t( pOp[1].p4.i==
20290 70 4f 70 5b 30 5d 2e 70 34 2e 69 20 29 3b 0a 20  pOp[0].p4.i );. 
202a0 20 20 20 7d 0a 0a 20 20 20 20 6e 46 69 65 6c 64     }..    nField
202b0 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20   = pOp->p4.i;.  
202c0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
202d0 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
202e0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6e  );.    assert( n
202f0 46 69 65 6c 64 3e 30 20 29 3b 0a 20 20 20 20 72  Field>0 );.    r
20300 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e  .pKeyInfo = pC->
20310 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e  pKeyInfo;.    r.
20320 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 6e 46  nField = (u16)nF
20330 69 65 6c 64 3b 0a 0a 20 20 20 20 2f 2a 20 54 68  ield;..    /* Th
20340 65 20 6e 65 78 74 20 6c 69 6e 65 20 6f 66 20 63  e next line of c
20350 6f 64 65 20 63 6f 6d 70 75 74 65 73 20 61 73 20  ode computes as 
20360 66 6f 6c 6c 6f 77 73 2c 20 6f 6e 6c 79 20 66 61  follows, only fa
20370 73 74 65 72 3a 0a 20 20 20 20 2a 2a 20 20 20 69  ster:.    **   i
20380 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54  f( oc==OP_SeekGT
20390 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c   || oc==OP_SeekL
203a0 45 20 29 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20  E ){.    **     
203b0 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2d  r.default_rc = -
203c0 31 3b 0a 20 20 20 20 2a 2a 20 20 20 7d 65 6c 73  1;.    **   }els
203d0 65 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20 72 2e  e{.    **     r.
203e0 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2b 31 3b  default_rc = +1;
203f0 0a 20 20 20 20 2a 2a 20 20 20 7d 0a 20 20 20 20  .    **   }.    
20400 2a 2f 0a 20 20 20 20 72 2e 64 65 66 61 75 6c 74  */.    r.default
20410 5f 72 63 20 3d 20 28 28 31 20 26 20 28 6f 63 20  _rc = ((1 & (oc 
20420 2d 20 4f 50 5f 53 65 65 6b 4c 54 29 29 20 3f 20  - OP_SeekLT)) ? 
20430 2d 31 20 3a 20 2b 31 29 3b 0a 20 20 20 20 61 73  -1 : +1);.    as
20440 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65  sert( oc!=OP_See
20450 6b 47 54 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74  kGT || r.default
20460 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20 20 20 20 61  _rc==-1 );.    a
20470 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65  ssert( oc!=OP_Se
20480 65 6b 4c 45 20 7c 7c 20 72 2e 64 65 66 61 75 6c  ekLE || r.defaul
20490 74 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20 20 20 20  t_rc==-1 );.    
204a0 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53  assert( oc!=OP_S
204b0 65 65 6b 47 45 20 7c 7c 20 72 2e 64 65 66 61 75  eekGE || r.defau
204c0 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a 20 20 20  lt_rc==+1 );.   
204d0 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f   assert( oc!=OP_
204e0 53 65 65 6b 4c 54 20 7c 7c 20 72 2e 64 65 66 61  SeekLT || r.defa
204f0 75 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a 0a 20  ult_rc==+1 );.. 
20500 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65     r.aMem = &aMe
20510 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64  m[pOp->p3];.#ifd
20520 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
20530 20 20 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72      { int i; for
20540 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64  (i=0; i<r.nField
20550 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d  ; i++) assert( m
20560 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65  emIsValid(&r.aMe
20570 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69  m[i]) ); }.#endi
20580 66 0a 20 20 20 20 72 2e 65 71 53 65 65 6e 20 3d  f.    r.eqSeen =
20590 20 30 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   0;.    rc = sql
205a0 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
205b0 6e 70 61 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70  npacked(pC->uc.p
205c0 43 75 72 73 6f 72 2c 20 26 72 2c 20 30 2c 20 30  Cursor, &r, 0, 0
205d0 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 69 66 28  , &res);.    if(
205e0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
205f0 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f  {.      goto abo
20600 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
20610 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 65  .    }.    if( e
20620 71 4f 6e 6c 79 20 26 26 20 72 2e 65 71 53 65 65  qOnly && r.eqSee
20630 6e 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73  n==0 ){.      as
20640 73 65 72 74 28 20 72 65 73 21 3d 30 20 29 3b 0a  sert( res!=0 );.
20650 20 20 20 20 20 20 67 6f 74 6f 20 73 65 65 6b 5f        goto seek_
20660 6e 6f 74 5f 66 6f 75 6e 64 3b 0a 20 20 20 20 7d  not_found;.    }
20670 0a 20 20 7d 0a 20 20 70 43 2d 3e 64 65 66 65 72  .  }.  pC->defer
20680 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20  redMoveto = 0;. 
20690 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
206a0 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
206b0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
206c0 53 54 0a 20 20 73 71 6c 69 74 65 33 5f 73 65 61  ST.  sqlite3_sea
206d0 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e  rch_count++;.#en
206e0 64 69 66 0a 20 20 69 66 28 20 6f 63 3e 3d 4f 50  dif.  if( oc>=OP
206f0 5f 53 65 65 6b 47 45 20 29 7b 20 20 61 73 73 65  _SeekGE ){  asse
20700 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47  rt( oc==OP_SeekG
20710 45 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  E || oc==OP_Seek
20720 47 54 20 29 3b 0a 20 20 20 20 69 66 28 20 72 65  GT );.    if( re
20730 73 3c 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26  s<0 || (res==0 &
20740 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 29  & oc==OP_SeekGT)
20750 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20   ){.      res = 
20760 30 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  0;.      rc = sq
20770 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74 28 70  lite3BtreeNext(p
20780 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 30  C->uc.pCursor, 0
20790 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21  );.      if( rc!
207a0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
207b0 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
207c0 4c 49 54 45 5f 44 4f 4e 45 20 29 7b 0a 20 20 20  LITE_DONE ){.   
207d0 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
207e0 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 20 20 20  TE_OK;.         
207f0 20 72 65 73 20 3d 20 31 3b 0a 20 20 20 20 20 20   res = 1;.      
20800 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
20810 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
20820 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
20830 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
20840 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
20850 65 73 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20  es = 0;.    }.  
20860 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
20870 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 54  t( oc==OP_SeekLT
20880 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c   || oc==OP_SeekL
20890 45 20 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73  E );.    if( res
208a0 3e 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26  >0 || (res==0 &&
208b0 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 54 29 20   oc==OP_SeekLT) 
208c0 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 30  ){.      res = 0
208d0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
208e0 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75  ite3BtreePreviou
208f0 73 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  s(pC->uc.pCursor
20900 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20  , 0);.      if( 
20910 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
20920 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63 3d  .        if( rc=
20930 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 7b 0a  =SQLITE_DONE ){.
20940 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 53            rc = S
20950 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20  QLITE_OK;.      
20960 20 20 20 20 72 65 73 20 3d 20 31 3b 0a 20 20 20      res = 1;.   
20970 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
20980 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
20990 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
209a0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
209b0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
209c0 20 20 2f 2a 20 72 65 73 20 6d 69 67 68 74 20 62    /* res might b
209d0 65 20 6e 65 67 61 74 69 76 65 20 62 65 63 61 75  e negative becau
209e0 73 65 20 74 68 65 20 74 61 62 6c 65 20 69 73 20  se the table is 
209f0 65 6d 70 74 79 2e 20 20 43 68 65 63 6b 20 74 6f  empty.  Check to
20a00 0a 20 20 20 20 20 20 2a 2a 20 73 65 65 20 69 66  .      ** see if
20a10 20 74 68 69 73 20 69 73 20 74 68 65 20 63 61 73   this is the cas
20a20 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  e..      */.    
20a30 20 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33 42    res = sqlite3B
20a40 74 72 65 65 45 6f 66 28 70 43 2d 3e 75 63 2e 70  treeEof(pC->uc.p
20a50 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20  Cursor);.    }. 
20a60 20 7d 0a 73 65 65 6b 5f 6e 6f 74 5f 66 6f 75 6e   }.seek_not_foun
20a70 64 3a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  d:.  assert( pOp
20a80 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 56 64 62 65  ->p2>0 );.  Vdbe
20a90 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21  BranchTaken(res!
20aa0 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73  =0,2);.  if( res
20ab0 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d   ){.    goto jum
20ac0 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65  p_to_p2;.  }else
20ad0 20 69 66 28 20 65 71 4f 6e 6c 79 20 29 7b 0a 20   if( eqOnly ){. 
20ae0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31     assert( pOp[1
20af0 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ].opcode==OP_Idx
20b00 4c 54 20 7c 7c 20 70 4f 70 5b 31 5d 2e 6f 70 63  LT || pOp[1].opc
20b10 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b  ode==OP_IdxGT );
20b20 0a 20 20 20 20 70 4f 70 2b 2b 3b 20 2f 2a 20 53  .    pOp++; /* S
20b30 6b 69 70 20 74 68 65 20 4f 50 5f 49 64 78 4c 74  kip the OP_IdxLt
20b40 20 6f 72 20 4f 50 5f 49 64 78 47 54 20 74 68 61   or OP_IdxGT tha
20b50 74 20 66 6f 6c 6c 6f 77 73 20 2a 2f 0a 20 20 7d  t follows */.  }
20b60 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
20b70 4f 70 63 6f 64 65 3a 20 46 6f 75 6e 64 20 50 31  Opcode: Found P1
20b80 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
20b90 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
20ba0 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50  3@P4].**.** If P
20bb0 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74  4==0 then regist
20bc0 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c  er P3 holds a bl
20bd0 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62  ob constructed b
20be0 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49  y MakeRecord.  I
20bf0 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72  f.** P4>0 then r
20c00 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68  egister P3 is th
20c10 65 20 66 69 72 73 74 20 6f 66 20 50 34 20 72 65  e first of P4 re
20c20 67 69 73 74 65 72 73 20 74 68 61 74 20 66 6f 72  gisters that for
20c30 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a  m an unpacked.**
20c40 20 72 65 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a 20 43   record..**.** C
20c50 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61  ursor P1 is on a
20c60 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20  n index btree.  
20c70 49 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 64  If the record id
20c80 65 6e 74 69 66 69 65 64 20 62 79 20 50 33 20 61  entified by P3 a
20c90 6e 64 20 50 34 0a 2a 2a 20 69 73 20 61 20 70 72  nd P4.** is a pr
20ca0 65 66 69 78 20 6f 66 20 61 6e 79 20 65 6e 74 72  efix of any entr
20cb0 79 20 69 6e 20 50 31 20 74 68 65 6e 20 61 20 6a  y in P1 then a j
20cc0 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50  ump is made to P
20cd0 32 20 61 6e 64 0a 2a 2a 20 50 31 20 69 73 20 6c  2 and.** P1 is l
20ce0 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20  eft pointing at 
20cf0 74 68 65 20 6d 61 74 63 68 69 6e 67 20 65 6e 74  the matching ent
20d00 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  ry..**.** This o
20d10 70 65 72 61 74 69 6f 6e 20 6c 65 61 76 65 73 20  peration leaves 
20d20 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20  the cursor in a 
20d30 73 74 61 74 65 20 77 68 65 72 65 20 69 74 20 63  state where it c
20d40 61 6e 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65  an be.** advance
20d50 64 20 69 6e 20 74 68 65 20 66 6f 72 77 61 72 64  d in the forward
20d60 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 54 68 65   direction.  The
20d70 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   Next instructio
20d80 6e 20 77 69 6c 6c 20 77 6f 72 6b 2c 0a 2a 2a 20  n will work,.** 
20d90 62 75 74 20 6e 6f 74 20 74 68 65 20 50 72 65 76  but not the Prev
20da0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
20db0 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f  .** See also: No
20dc0 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69  tFound, NoConfli
20dd0 63 74 2c 20 4e 6f 74 45 78 69 73 74 73 2e 20 53  ct, NotExists. S
20de0 65 65 6b 47 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  eekGe.*/./* Opco
20df0 64 65 3a 20 4e 6f 74 46 6f 75 6e 64 20 50 31 20  de: NotFound P1 
20e00 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
20e10 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
20e20 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  @P4].**.** If P4
20e30 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74 65  ==0 then registe
20e40 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f  r P3 holds a blo
20e50 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79  b constructed by
20e60 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66   MakeRecord.  If
20e70 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65  .** P4>0 then re
20e80 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65  gister P3 is the
20e90 20 66 69 72 73 74 20 6f 66 20 50 34 20 72 65 67   first of P4 reg
20ea0 69 73 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d  isters that form
20eb0 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20   an unpacked.** 
20ec0 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43  record..** .** C
20ed0 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61  ursor P1 is on a
20ee0 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20  n index btree.  
20ef0 49 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 64  If the record id
20f00 65 6e 74 69 66 69 65 64 20 62 79 20 50 33 20 61  entified by P3 a
20f10 6e 64 20 50 34 0a 2a 2a 20 69 73 20 6e 6f 74 20  nd P4.** is not 
20f20 74 68 65 20 70 72 65 66 69 78 20 6f 66 20 61 6e  the prefix of an
20f30 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74 68  y entry in P1 th
20f40 65 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d 61 64  en a jump is mad
20f50 65 20 74 6f 20 50 32 2e 20 20 49 66 20 50 31 20  e to P2.  If P1 
20f60 0a 2a 2a 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e  .** does contain
20f70 20 61 6e 20 65 6e 74 72 79 20 77 68 6f 73 65 20   an entry whose 
20f80 70 72 65 66 69 78 20 6d 61 74 63 68 65 73 20 74  prefix matches t
20f90 68 65 20 50 33 2f 50 34 20 72 65 63 6f 72 64 20  he P3/P4 record 
20fa0 74 68 65 6e 20 63 6f 6e 74 72 6f 6c 0a 2a 2a 20  then control.** 
20fb0 66 61 6c 6c 73 20 74 68 72 6f 75 67 68 20 74 6f  falls through to
20fc0 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
20fd0 63 74 69 6f 6e 20 61 6e 64 20 50 31 20 69 73 20  ction and P1 is 
20fe0 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74  left pointing at
20ff0 20 74 68 65 0a 2a 2a 20 6d 61 74 63 68 69 6e 67   the.** matching
21000 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68   entry..**.** Th
21010 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61  is operation lea
21020 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 69  ves the cursor i
21030 6e 20 61 20 73 74 61 74 65 20 77 68 65 72 65 20  n a state where 
21040 69 74 20 63 61 6e 6e 6f 74 20 62 65 0a 2a 2a 20  it cannot be.** 
21050 61 64 76 61 6e 63 65 64 20 69 6e 20 65 69 74 68  advanced in eith
21060 65 72 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49  er direction.  I
21070 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
21080 68 65 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76  he Next and Prev
21090 0a 2a 2a 20 6f 70 63 6f 64 65 73 20 64 6f 20 6e  .** opcodes do n
210a0 6f 74 20 77 6f 72 6b 20 61 66 74 65 72 20 74 68  ot work after th
210b0 69 73 20 6f 70 65 72 61 74 69 6f 6e 2e 0a 2a 2a  is operation..**
210c0 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
210d0 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73 2c 20  und, NotExists, 
210e0 4e 6f 43 6f 6e 66 6c 69 63 74 0a 2a 2f 0a 2f 2a  NoConflict.*/./*
210f0 20 4f 70 63 6f 64 65 3a 20 4e 6f 43 6f 6e 66 6c   Opcode: NoConfl
21100 69 63 74 20 50 31 20 50 32 20 50 33 20 50 34 20  ict P1 P2 P3 P4 
21110 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  *.** Synopsis: k
21120 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
21130 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20  * If P4==0 then 
21140 72 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64  register P3 hold
21150 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75  s a blob constru
21160 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f  cted by MakeReco
21170 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20  rd.  If.** P4>0 
21180 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33  then register P3
21190 20 69 73 20 74 68 65 20 66 69 72 73 74 20 6f 66   is the first of
211a0 20 50 34 20 72 65 67 69 73 74 65 72 73 20 74 68   P4 registers th
211b0 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63  at form an unpac
211c0 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a  ked.** record..*
211d0 2a 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20  * .** Cursor P1 
211e0 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62  is on an index b
211f0 74 72 65 65 2e 20 20 49 66 20 74 68 65 20 72 65  tree.  If the re
21200 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64 20  cord identified 
21210 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20  by P3 and P4.** 
21220 63 6f 6e 74 61 69 6e 73 20 61 6e 79 20 4e 55 4c  contains any NUL
21230 4c 20 76 61 6c 75 65 2c 20 6a 75 6d 70 20 69 6d  L value, jump im
21240 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
21250 20 20 49 66 20 61 6c 6c 20 74 65 72 6d 73 20 6f    If all terms o
21260 66 20 74 68 65 0a 2a 2a 20 72 65 63 6f 72 64 20  f the.** record 
21270 61 72 65 20 6e 6f 74 2d 4e 55 4c 4c 20 74 68 65  are not-NULL the
21280 6e 20 61 20 63 68 65 63 6b 20 69 73 20 64 6f 6e  n a check is don
21290 65 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69  e to determine i
212a0 66 20 61 6e 79 20 72 6f 77 20 69 6e 20 74 68 65  f any row in the
212b0 0a 2a 2a 20 50 31 20 69 6e 64 65 78 20 62 74 72  .** P1 index btr
212c0 65 65 20 68 61 73 20 61 20 6d 61 74 63 68 69 6e  ee has a matchin
212d0 67 20 6b 65 79 20 70 72 65 66 69 78 2e 20 20 49  g key prefix.  I
212e0 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6d  f there are no m
212f0 61 74 63 68 65 73 2c 20 6a 75 6d 70 0a 2a 2a 20  atches, jump.** 
21300 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
21310 32 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20  2.  If there is 
21320 61 20 6d 61 74 63 68 2c 20 66 61 6c 6c 20 74 68  a match, fall th
21330 72 6f 75 67 68 20 61 6e 64 20 6c 65 61 76 65 20  rough and leave 
21340 74 68 65 20 50 31 0a 2a 2a 20 63 75 72 73 6f 72  the P1.** cursor
21350 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 65   pointing to the
21360 20 6d 61 74 63 68 69 6e 67 20 72 6f 77 2e 0a 2a   matching row..*
21370 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
21380 20 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 4f   is similar to O
21390 50 5f 4e 6f 74 46 6f 75 6e 64 20 77 69 74 68 20  P_NotFound with 
213a0 74 68 65 20 65 78 63 65 70 74 69 6f 6e 73 20 74  the exceptions t
213b0 68 61 74 20 74 68 65 0a 2a 2a 20 62 72 61 6e 63  hat the.** branc
213c0 68 20 69 73 20 61 6c 77 61 79 73 20 74 61 6b 65  h is always take
213d0 6e 20 69 66 20 61 6e 79 20 70 61 72 74 20 6f 66  n if any part of
213e0 20 74 68 65 20 73 65 61 72 63 68 20 6b 65 79 20   the search key 
213f0 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  input is NULL..*
21400 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74  *.** This operat
21410 69 6f 6e 20 6c 65 61 76 65 73 20 74 68 65 20 63  ion leaves the c
21420 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65  ursor in a state
21430 20 77 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74   where it cannot
21440 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20   be.** advanced 
21450 69 6e 20 65 69 74 68 65 72 20 64 69 72 65 63 74  in either direct
21460 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  ion.  In other w
21470 6f 72 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61  ords, the Next a
21480 6e 64 20 50 72 65 76 0a 2a 2a 20 6f 70 63 6f 64  nd Prev.** opcod
21490 65 73 20 64 6f 20 6e 6f 74 20 77 6f 72 6b 20 61  es do not work a
214a0 66 74 65 72 20 74 68 69 73 20 6f 70 65 72 61 74  fter this operat
214b0 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ion..**.** See a
214c0 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 46  lso: NotFound, F
214d0 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73 0a  ound, NotExists.
214e0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 43 6f 6e  */.case OP_NoCon
214f0 66 6c 69 63 74 3a 20 20 20 20 20 2f 2a 20 6a 75  flict:     /* ju
21500 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  mp, in3 */.case 
21510 4f 50 5f 4e 6f 74 46 6f 75 6e 64 3a 20 20 20 20  OP_NotFound:    
21520 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
21530 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6f 75 6e 64  */.case OP_Found
21540 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
21550 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74  mp, in3 */.  int
21560 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 3b 0a   alreadyExists;.
21570 20 20 69 6e 74 20 74 61 6b 65 4a 75 6d 70 3b 0a    int takeJump;.
21580 20 20 69 6e 74 20 69 69 3b 0a 20 20 56 64 62 65    int ii;.  Vdbe
21590 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e  Cursor *pC;.  in
215a0 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65  t res;.  Unpacke
215b0 64 52 65 63 6f 72 64 20 2a 70 46 72 65 65 3b 0a  dRecord *pFree;.
215c0 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64    UnpackedRecord
215d0 20 2a 70 49 64 78 4b 65 79 3b 0a 20 20 55 6e 70   *pIdxKey;.  Unp
215e0 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a  ackedRecord r;..
215f0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
21600 53 54 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  ST.  if( pOp->op
21610 63 6f 64 65 21 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c  code!=OP_NoConfl
21620 69 63 74 20 29 20 73 71 6c 69 74 65 33 5f 66 6f  ict ) sqlite3_fo
21630 75 6e 64 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e  und_count++;.#en
21640 64 69 66 0a 0a 20 20 61 73 73 65 72 74 28 20 70  dif..  assert( p
21650 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
21660 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
21670 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
21680 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
21690 33 32 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  32 );.  pC = p->
216a0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
216b0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
216c0 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
216d0 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65  _DEBUG.  pC->see
216e0 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64  kOp = pOp->opcod
216f0 65 3b 0a 23 65 6e 64 69 66 0a 20 20 70 49 6e 33  e;.#endif.  pIn3
21700 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
21710 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  ];.  assert( pC-
21720 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
21730 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73  PE_BTREE );.  as
21740 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75  sert( pC->uc.pCu
21750 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73  rsor!=0 );.  ass
21760 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
21770 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70  ==0 );.  if( pOp
21780 2d 3e 70 34 2e 69 3e 30 20 29 7b 0a 20 20 20 20  ->p4.i>0 ){.    
21790 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d  r.pKeyInfo = pC-
217a0 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72  >pKeyInfo;.    r
217b0 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70  .nField = (u16)p
217c0 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 72 2e  Op->p4.i;.    r.
217d0 61 4d 65 6d 20 3d 20 70 49 6e 33 3b 0a 23 69 66  aMem = pIn3;.#if
217e0 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
217f0 0a 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69  .    for(ii=0; i
21800 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 69 2b 2b  i<r.nField; ii++
21810 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
21820 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61   memIsValid(&r.a
21830 4d 65 6d 5b 69 69 5d 29 20 29 3b 0a 20 20 20 20  Mem[ii]) );.    
21840 20 20 61 73 73 65 72 74 28 20 28 72 2e 61 4d 65    assert( (r.aMe
21850 6d 5b 69 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45  m[ii].flags & ME
21860 4d 5f 5a 65 72 6f 29 3d 3d 30 20 7c 7c 20 72 2e  M_Zero)==0 || r.
21870 61 4d 65 6d 5b 69 69 5d 2e 6e 3d 3d 30 20 29 3b  aMem[ii].n==0 );
21880 0a 20 20 20 20 20 20 69 66 28 20 69 69 20 29 20  .      if( ii ) 
21890 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
218a0 4f 70 2d 3e 70 33 2b 69 69 2c 20 26 72 2e 61 4d  Op->p3+ii, &r.aM
218b0 65 6d 5b 69 69 5d 29 3b 0a 20 20 20 20 7d 0a 23  em[ii]);.    }.#
218c0 65 6e 64 69 66 0a 20 20 20 20 70 49 64 78 4b 65  endif.    pIdxKe
218d0 79 20 3d 20 26 72 3b 0a 20 20 20 20 70 46 72 65  y = &r;.    pFre
218e0 65 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a  e = 0;.  }else{.
218f0 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 33      assert( pIn3
21900 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c  ->flags & MEM_Bl
21910 6f 62 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 45  ob );.    rc = E
21920 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 33 29 3b  xpandBlob(pIn3);
21930 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d  .    assert( rc=
21940 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 63  =SQLITE_OK || rc
21950 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29  ==SQLITE_NOMEM )
21960 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67  ;.    if( rc ) g
21970 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20  oto no_mem;.    
21980 70 46 72 65 65 20 3d 20 70 49 64 78 4b 65 79 20  pFree = pIdxKey 
21990 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 6c 6c  = sqlite3VdbeAll
219a0 6f 63 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  ocUnpackedRecord
219b0 28 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 29 3b 0a  (pC->pKeyInfo);.
219c0 20 20 20 20 69 66 28 20 70 49 64 78 4b 65 79 3d      if( pIdxKey=
219d0 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
219e0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
219f0 65 52 65 63 6f 72 64 55 6e 70 61 63 6b 28 70 43  eRecordUnpack(pC
21a00 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 70 49 6e 33  ->pKeyInfo, pIn3
21a10 2d 3e 6e 2c 20 70 49 6e 33 2d 3e 7a 2c 20 70 49  ->n, pIn3->z, pI
21a20 64 78 4b 65 79 29 3b 0a 20 20 7d 0a 20 20 70 49  dxKey);.  }.  pI
21a30 64 78 4b 65 79 2d 3e 64 65 66 61 75 6c 74 5f 72  dxKey->default_r
21a40 63 20 3d 20 30 3b 0a 20 20 74 61 6b 65 4a 75 6d  c = 0;.  takeJum
21a50 70 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 4f 70  p = 0;.  if( pOp
21a60 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 43  ->opcode==OP_NoC
21a70 6f 6e 66 6c 69 63 74 20 29 7b 0a 20 20 20 20 2f  onflict ){.    /
21a80 2a 20 46 6f 72 20 74 68 65 20 4f 50 5f 4e 6f 43  * For the OP_NoC
21a90 6f 6e 66 6c 69 63 74 20 6f 70 63 6f 64 65 2c 20  onflict opcode, 
21aa0 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66  take the jump if
21ab0 20 61 6e 79 20 6f 66 20 74 68 65 0a 20 20 20 20   any of the.    
21ac0 2a 2a 20 69 6e 70 75 74 20 66 69 65 6c 64 73 20  ** input fields 
21ad0 61 72 65 20 4e 55 4c 4c 2c 20 73 69 6e 63 65 20  are NULL, since 
21ae0 61 6e 79 20 6b 65 79 20 77 69 74 68 20 61 20 4e  any key with a N
21af0 55 4c 4c 20 77 69 6c 6c 20 6e 6f 74 0a 20 20 20  ULL will not.   
21b00 20 2a 2a 20 63 6f 6e 66 6c 69 63 74 20 2a 2f 0a   ** conflict */.
21b10 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69      for(ii=0; ii
21b20 3c 70 49 64 78 4b 65 79 2d 3e 6e 46 69 65 6c 64  <pIdxKey->nField
21b30 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69  ; ii++){.      i
21b40 66 28 20 70 49 64 78 4b 65 79 2d 3e 61 4d 65 6d  f( pIdxKey->aMem
21b50 5b 69 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d  [ii].flags & MEM
21b60 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 20 20 20  _Null ){.       
21b70 20 74 61 6b 65 4a 75 6d 70 20 3d 20 31 3b 0a 20   takeJump = 1;. 
21b80 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
21b90 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
21ba0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
21bb0 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65  reeMovetoUnpacke
21bc0 64 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  d(pC->uc.pCursor
21bd0 2c 20 70 49 64 78 4b 65 79 2c 20 30 2c 20 30 2c  , pIdxKey, 0, 0,
21be0 20 26 72 65 73 29 3b 0a 20 20 69 66 28 20 70 46   &res);.  if( pF
21bf0 72 65 65 20 29 20 73 71 6c 69 74 65 33 44 62 46  ree ) sqlite3DbF
21c00 72 65 65 4e 4e 28 64 62 2c 20 70 46 72 65 65 29  reeNN(db, pFree)
21c10 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49  ;.  if( rc!=SQLI
21c20 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 67 6f 74  TE_OK ){.    got
21c30 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
21c40 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e  rror;.  }.  pC->
21c50 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 72 65 73  seekResult = res
21c60 3b 0a 20 20 61 6c 72 65 61 64 79 45 78 69 73 74  ;.  alreadyExist
21c70 73 20 3d 20 28 72 65 73 3d 3d 30 29 3b 0a 20 20  s = (res==0);.  
21c80 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 2d  pC->nullRow = 1-
21c90 61 6c 72 65 61 64 79 45 78 69 73 74 73 3b 0a 20  alreadyExists;. 
21ca0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
21cb0 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63  eto = 0;.  pC->c
21cc0 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
21cd0 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28 20  HE_STALE;.  if( 
21ce0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
21cf0 46 6f 75 6e 64 20 29 7b 0a 20 20 20 20 56 64 62  Found ){.    Vdb
21d00 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 61 6c 72  eBranchTaken(alr
21d10 65 61 64 79 45 78 69 73 74 73 21 3d 30 2c 32 29  eadyExists!=0,2)
21d20 3b 0a 20 20 20 20 69 66 28 20 61 6c 72 65 61 64  ;.    if( alread
21d30 79 45 78 69 73 74 73 20 29 20 67 6f 74 6f 20 6a  yExists ) goto j
21d40 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c  ump_to_p2;.  }el
21d50 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e  se{.    VdbeBran
21d60 63 68 54 61 6b 65 6e 28 74 61 6b 65 4a 75 6d 70  chTaken(takeJump
21d70 7c 7c 61 6c 72 65 61 64 79 45 78 69 73 74 73 3d  ||alreadyExists=
21d80 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 74  =0,2);.    if( t
21d90 61 6b 65 4a 75 6d 70 20 7c 7c 20 21 61 6c 72 65  akeJump || !alre
21da0 61 64 79 45 78 69 73 74 73 20 29 20 67 6f 74 6f  adyExists ) goto
21db0 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d   jump_to_p2;.  }
21dc0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
21dd0 4f 70 63 6f 64 65 3a 20 53 65 65 6b 52 6f 77 69  Opcode: SeekRowi
21de0 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  d P1 P2 P3 * *.*
21df0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b  * Synopsis: intk
21e00 65 79 3d 72 5b 50 33 5d 0a 2a 2a 0a 2a 2a 20 50  ey=r[P3].**.** P
21e10 31 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f  1 is the index o
21e20 66 20 61 20 63 75 72 73 6f 72 20 6f 70 65 6e 20  f a cursor open 
21e30 6f 6e 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  on an SQL table 
21e40 62 74 72 65 65 20 28 77 69 74 68 20 69 6e 74 65  btree (with inte
21e50 67 65 72 0a 2a 2a 20 6b 65 79 73 29 2e 20 20 49  ger.** keys).  I
21e60 66 20 72 65 67 69 73 74 65 72 20 50 33 20 64 6f  f register P3 do
21e70 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61  es not contain a
21e80 6e 20 69 6e 74 65 67 65 72 20 6f 72 20 69 66 20  n integer or if 
21e90 50 31 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 63  P1 does not.** c
21ea0 6f 6e 74 61 69 6e 20 61 20 72 65 63 6f 72 64 20  ontain a record 
21eb0 77 69 74 68 20 72 6f 77 69 64 20 50 33 20 74 68  with rowid P3 th
21ec0 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  en jump immediat
21ed0 65 6c 79 20 74 6f 20 50 32 2e 20 20 0a 2a 2a 20  ely to P2.  .** 
21ee0 4f 72 2c 20 69 66 20 50 32 20 69 73 20 30 2c 20  Or, if P2 is 0, 
21ef0 72 61 69 73 65 20 61 6e 20 53 51 4c 49 54 45 5f  raise an SQLITE_
21f00 43 4f 52 52 55 50 54 20 65 72 72 6f 72 2e 20 49  CORRUPT error. I
21f10 66 20 50 31 20 64 6f 65 73 20 63 6f 6e 74 61 69  f P1 does contai
21f20 6e 0a 2a 2a 20 61 20 72 65 63 6f 72 64 20 77 69  n.** a record wi
21f30 74 68 20 72 6f 77 69 64 20 50 33 20 74 68 65 6e  th rowid P3 then
21f40 20 0a 2a 2a 20 6c 65 61 76 65 20 74 68 65 20 63   .** leave the c
21f50 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20 61  ursor pointing a
21f60 74 20 74 68 61 74 20 72 65 63 6f 72 64 20 61 6e  t that record an
21f70 64 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  d fall through t
21f80 6f 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e  o the next.** in
21f90 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
21fa0 20 54 68 65 20 4f 50 5f 4e 6f 74 45 78 69 73 74   The OP_NotExist
21fb0 73 20 6f 70 63 6f 64 65 20 70 65 72 66 6f 72 6d  s opcode perform
21fc0 73 20 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61  s the same opera
21fd0 74 69 6f 6e 2c 20 62 75 74 20 77 69 74 68 20 4f  tion, but with O
21fe0 50 5f 4e 6f 74 45 78 69 73 74 73 0a 2a 2a 20 74  P_NotExists.** t
21ff0 68 65 20 50 33 20 72 65 67 69 73 74 65 72 20 6d  he P3 register m
22000 75 73 74 20 62 65 20 67 75 61 72 61 6e 74 65 65  ust be guarantee
22010 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 61 6e 20  d to contain an 
22020 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20 20  integer value.  
22030 57 69 74 68 20 74 68 69 73 0a 2a 2a 20 6f 70 63  With this.** opc
22040 6f 64 65 2c 20 72 65 67 69 73 74 65 72 20 50 33  ode, register P3
22050 20 6d 69 67 68 74 20 6e 6f 74 20 63 6f 6e 74 61   might not conta
22060 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a  in an integer..*
22070 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e 6f 74 46  *.** The OP_NotF
22080 6f 75 6e 64 20 6f 70 63 6f 64 65 20 70 65 72 66  ound opcode perf
22090 6f 72 6d 73 20 74 68 65 20 73 61 6d 65 20 6f 70  orms the same op
220a0 65 72 61 74 69 6f 6e 20 6f 6e 20 69 6e 64 65 78  eration on index
220b0 20 62 74 72 65 65 73 0a 2a 2a 20 28 77 69 74 68   btrees.** (with
220c0 20 61 72 62 69 74 72 61 72 79 20 6d 75 6c 74 69   arbitrary multi
220d0 2d 76 61 6c 75 65 20 6b 65 79 73 29 2e 0a 2a 2a  -value keys)..**
220e0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
220f0 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f  leaves the curso
22100 72 20 69 6e 20 61 20 73 74 61 74 65 20 77 68 65  r in a state whe
22110 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 20  re it cannot be 
22120 61 64 76 61 6e 63 65 64 0a 2a 2a 20 69 6e 20 65  advanced.** in e
22130 69 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e  ither direction.
22140 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
22150 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50  , the Next and P
22160 72 65 76 20 6f 70 63 6f 64 65 73 20 77 69 6c 6c  rev opcodes will
22170 0a 2a 2a 20 6e 6f 74 20 77 6f 72 6b 20 66 6f 6c  .** not work fol
22180 6c 6f 77 69 6e 67 20 74 68 69 73 20 6f 70 63 6f  lowing this opco
22190 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  de..**.** See al
221a0 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f  so: Found, NotFo
221b0 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c  und, NoConflict,
221c0 20 53 65 65 6b 52 6f 77 69 64 0a 2a 2f 0a 2f 2a   SeekRowid.*/./*
221d0 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 45 78 69 73   Opcode: NotExis
221e0 74 73 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ts P1 P2 P3 * *.
221f0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74  ** Synopsis: int
22200 6b 65 79 3d 72 5b 50 33 5d 0a 2a 2a 0a 2a 2a 20  key=r[P3].**.** 
22210 50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78 20  P1 is the index 
22220 6f 66 20 61 20 63 75 72 73 6f 72 20 6f 70 65 6e  of a cursor open
22230 20 6f 6e 20 61 6e 20 53 51 4c 20 74 61 62 6c 65   on an SQL table
22240 20 62 74 72 65 65 20 28 77 69 74 68 20 69 6e 74   btree (with int
22250 65 67 65 72 0a 2a 2a 20 6b 65 79 73 29 2e 20 20  eger.** keys).  
22260 50 33 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72  P3 is an integer
22270 20 72 6f 77 69 64 2e 20 20 49 66 20 50 31 20 64   rowid.  If P1 d
22280 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20  oes not contain 
22290 61 20 72 65 63 6f 72 64 20 77 69 74 68 0a 2a 2a  a record with.**
222a0 20 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20 6a   rowid P3 then j
222b0 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ump immediately 
222c0 74 6f 20 50 32 2e 20 20 4f 72 2c 20 69 66 20 50  to P2.  Or, if P
222d0 32 20 69 73 20 30 2c 20 72 61 69 73 65 20 61 6e  2 is 0, raise an
222e0 0a 2a 2a 20 53 51 4c 49 54 45 5f 43 4f 52 52 55  .** SQLITE_CORRU
222f0 50 54 20 65 72 72 6f 72 2e 20 49 66 20 50 31 20  PT error. If P1 
22300 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61 20 72  does contain a r
22310 65 63 6f 72 64 20 77 69 74 68 20 72 6f 77 69 64  ecord with rowid
22320 20 50 33 20 74 68 65 6e 20 0a 2a 2a 20 6c 65 61   P3 then .** lea
22330 76 65 20 74 68 65 20 63 75 72 73 6f 72 20 70 6f  ve the cursor po
22340 69 6e 74 69 6e 67 20 61 74 20 74 68 61 74 20 72  inting at that r
22350 65 63 6f 72 64 20 61 6e 64 20 66 61 6c 6c 20 74  ecord and fall t
22360 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
22370 78 74 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f  xt.** instructio
22380 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f  n..**.** The OP_
22390 53 65 65 6b 52 6f 77 69 64 20 6f 70 63 6f 64 65  SeekRowid opcode
223a0 20 70 65 72 66 6f 72 6d 73 20 74 68 65 20 73 61   performs the sa
223b0 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 62 75 74  me operation but
223c0 20 61 6c 73 6f 20 61 6c 6c 6f 77 73 20 74 68 65   also allows the
223d0 0a 2a 2a 20 50 33 20 72 65 67 69 73 74 65 72 20  .** P3 register 
223e0 74 6f 20 63 6f 6e 74 61 69 6e 20 61 20 6e 6f 6e  to contain a non
223f0 2d 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2c 20  -integer value, 
22400 69 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68  in which case th
22410 65 20 6a 75 6d 70 20 69 73 0a 2a 2a 20 61 6c 77  e jump is.** alw
22420 61 79 73 20 74 61 6b 65 6e 2e 20 20 54 68 69 73  ays taken.  This
22430 20 6f 70 63 6f 64 65 20 72 65 71 75 69 72 65 73   opcode requires
22440 20 74 68 61 74 20 50 33 20 61 6c 77 61 79 73 20   that P3 always 
22450 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67  contain an integ
22460 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50  er..**.** The OP
22470 5f 4e 6f 74 46 6f 75 6e 64 20 6f 70 63 6f 64 65  _NotFound opcode
22480 20 70 65 72 66 6f 72 6d 73 20 74 68 65 20 73 61   performs the sa
22490 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 6e 20  me operation on 
224a0 69 6e 64 65 78 20 62 74 72 65 65 73 0a 2a 2a 20  index btrees.** 
224b0 28 77 69 74 68 20 61 72 62 69 74 72 61 72 79 20  (with arbitrary 
224c0 6d 75 6c 74 69 2d 76 61 6c 75 65 20 6b 65 79 73  multi-value keys
224d0 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  )..**.** This op
224e0 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20  code leaves the 
224f0 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74  cursor in a stat
22500 65 20 77 68 65 72 65 20 69 74 20 63 61 6e 6e 6f  e where it canno
22510 74 20 62 65 20 61 64 76 61 6e 63 65 64 0a 2a 2a  t be advanced.**
22520 20 69 6e 20 65 69 74 68 65 72 20 64 69 72 65 63   in either direc
22530 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20  tion.  In other 
22540 77 6f 72 64 73 2c 20 74 68 65 20 4e 65 78 74 20  words, the Next 
22550 61 6e 64 20 50 72 65 76 20 6f 70 63 6f 64 65 73  and Prev opcodes
22560 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 77 6f 72   will.** not wor
22570 6b 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 69 73  k following this
22580 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53   opcode..**.** S
22590 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
225a0 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66  NotFound, NoConf
225b0 6c 69 63 74 2c 20 53 65 65 6b 52 6f 77 69 64 0a  lict, SeekRowid.
225c0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 52  */.case OP_SeekR
225d0 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 2f  owid: {        /
225e0 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20  * jump, in3 */. 
225f0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
22600 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
22610 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20  sr;.  int res;. 
22620 20 75 36 34 20 69 4b 65 79 3b 0a 0a 20 20 70 49   u64 iKey;..  pI
22630 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
22640 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 33  p3];.  if( (pIn3
22650 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
22660 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61 70 70  t)==0 ){.    app
22670 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 33 2c  lyAffinity(pIn3,
22680 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45   SQLITE_AFF_NUME
22690 52 49 43 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  RIC, encoding);.
226a0 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66      if( (pIn3->f
226b0 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d  lags & MEM_Int)=
226c0 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  =0 ) goto jump_t
226d0 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 2f 2a 20 46  o_p2;.  }.  /* F
226e0 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f  all through into
226f0 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 2a 2f   OP_NotExists */
22700 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 45 78 69 73  .case OP_NotExis
22710 74 73 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ts:          /* 
22720 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 70  jump, in3 */.  p
22730 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
22740 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p3];.  assert( 
22750 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
22760 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72  M_Int );.  asser
22770 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
22780 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
22790 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
227a0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
227b0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
227c0 20 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54   );.#ifdef SQLIT
227d0 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65  E_DEBUG.  pC->se
227e0 65 6b 4f 70 20 3d 20 30 3b 0a 23 65 6e 64 69 66  ekOp = 0;.#endif
227f0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
22800 73 54 61 62 6c 65 20 29 3b 0a 20 20 61 73 73 65  sTable );.  asse
22810 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
22820 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
22830 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d  );.  pCrsr = pC-
22840 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 61  >uc.pCursor;.  a
22850 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30 20  ssert( pCrsr!=0 
22860 29 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20  );.  res = 0;.  
22870 69 4b 65 79 20 3d 20 70 49 6e 33 2d 3e 75 2e 69  iKey = pIn3->u.i
22880 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
22890 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
228a0 6b 65 64 28 70 43 72 73 72 2c 20 30 2c 20 69 4b  ked(pCrsr, 0, iK
228b0 65 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20  ey, 0, &res);.  
228c0 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
228d0 54 45 5f 4f 4b 20 7c 7c 20 72 65 73 3d 3d 30 20  TE_OK || res==0 
228e0 29 3b 0a 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54  );.  pC->movetoT
228f0 61 72 67 65 74 20 3d 20 69 4b 65 79 3b 20 20 2f  arget = iKey;  /
22900 2a 20 55 73 65 64 20 62 79 20 4f 50 5f 44 65 6c  * Used by OP_Del
22910 65 74 65 20 2a 2f 0a 20 20 70 43 2d 3e 6e 75 6c  ete */.  pC->nul
22920 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  lRow = 0;.  pC->
22930 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
22940 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 2d  CHE_STALE;.  pC-
22950 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
22960 3d 20 30 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  = 0;.  VdbeBranc
22970 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29  hTaken(res!=0,2)
22980 3b 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75  ;.  pC->seekResu
22990 6c 74 20 3d 20 72 65 73 3b 0a 20 20 69 66 28 20  lt = res;.  if( 
229a0 72 65 73 21 3d 30 20 29 7b 0a 20 20 20 20 61 73  res!=0 ){.    as
229b0 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
229c0 5f 4f 4b 20 29 3b 0a 20 20 20 20 69 66 28 20 70  _OK );.    if( p
229d0 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20 20 20  Op->p2==0 ){.   
229e0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43     rc = SQLITE_C
229f0 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20  ORRUPT_BKPT;.   
22a00 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 67 6f   }else{.      go
22a10 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
22a20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72     }.  }.  if( r
22a30 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
22a40 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62  ue_to_error;.  b
22a50 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
22a60 64 65 3a 20 53 65 71 75 65 6e 63 65 20 50 31 20  de: Sequence P1 
22a70 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
22a80 70 73 69 73 3a 20 72 5b 50 32 5d 3d 63 75 72 73  psis: r[P2]=curs
22a90 6f 72 5b 50 31 5d 2e 63 74 72 2b 2b 0a 2a 2a 0a  or[P1].ctr++.**.
22aa0 2a 2a 20 46 69 6e 64 20 74 68 65 20 6e 65 78 74  ** Find the next
22ab0 20 61 76 61 69 6c 61 62 6c 65 20 73 65 71 75 65   available seque
22ac0 6e 63 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 63  nce number for c
22ad0 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 57 72 69  ursor P1..** Wri
22ae0 74 65 20 74 68 65 20 73 65 71 75 65 6e 63 65 20  te the sequence 
22af0 6e 75 6d 62 65 72 20 69 6e 74 6f 20 72 65 67 69  number into regi
22b00 73 74 65 72 20 50 32 2e 0a 2a 2a 20 54 68 65 20  ster P2..** The 
22b10 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20  sequence number 
22b20 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  on the cursor is
22b30 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 66 74   incremented aft
22b40 65 72 20 74 68 69 73 0a 2a 2a 20 69 6e 73 74 72  er this.** instr
22b50 75 63 74 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61 73  uction.  .*/.cas
22b60 65 20 4f 50 5f 53 65 71 75 65 6e 63 65 3a 20 7b  e OP_Sequence: {
22b70 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
22b80 74 32 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  t2 */.  assert( 
22b90 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
22ba0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
22bb0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
22bc0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 21  >apCsr[pOp->p1]!
22bd0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
22be0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
22bf0 5d 2d 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52  ]->eCurType!=CUR
22c00 54 59 50 45 5f 56 54 41 42 20 29 3b 0a 20 20 70  TYPE_VTAB );.  p
22c10 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
22c20 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
22c30 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 2d 3e 61  pOut->u.i = p->a
22c40 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 73  pCsr[pOp->p1]->s
22c50 65 71 43 6f 75 6e 74 2b 2b 3b 0a 20 20 62 72 65  eqCount++;.  bre
22c60 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64  ak;.}.../* Opcod
22c70 65 3a 20 4e 65 77 52 6f 77 69 64 20 50 31 20 50  e: NewRowid P1 P
22c80 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
22c90 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69  psis: r[P2]=rowi
22ca0 64 0a 2a 2a 0a 2a 2a 20 47 65 74 20 61 20 6e 65  d.**.** Get a ne
22cb0 77 20 69 6e 74 65 67 65 72 20 72 65 63 6f 72 64  w integer record
22cc0 20 6e 75 6d 62 65 72 20 28 61 2e 6b 2e 61 20 22   number (a.k.a "
22cd0 72 6f 77 69 64 22 29 20 75 73 65 64 20 61 73 20  rowid") used as 
22ce0 74 68 65 20 6b 65 79 20 74 6f 20 61 20 74 61 62  the key to a tab
22cf0 6c 65 2e 0a 2a 2a 20 54 68 65 20 72 65 63 6f 72  le..** The recor
22d00 64 20 6e 75 6d 62 65 72 20 69 73 20 6e 6f 74 20  d number is not 
22d10 70 72 65 76 69 6f 75 73 6c 79 20 75 73 65 64 20  previously used 
22d20 61 73 20 61 20 6b 65 79 20 69 6e 20 74 68 65 20  as a key in the 
22d30 64 61 74 61 62 61 73 65 0a 2a 2a 20 74 61 62 6c  database.** tabl
22d40 65 20 74 68 61 74 20 63 75 72 73 6f 72 20 50 31  e that cursor P1
22d50 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20 54 68 65   points to.  The
22d60 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62   new record numb
22d70 65 72 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a  er is written.**
22d80 20 77 72 69 74 74 65 6e 20 74 6f 20 72 65 67 69   written to regi
22d90 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49  ster P2..**.** I
22da0 66 20 50 33 3e 30 20 74 68 65 6e 20 50 33 20 69  f P3>0 then P3 i
22db0 73 20 61 20 72 65 67 69 73 74 65 72 20 69 6e 20  s a register in 
22dc0 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 6f  the root frame o
22dd0 66 20 74 68 69 73 20 56 44 42 45 20 74 68 61 74  f this VDBE that
22de0 20 68 6f 6c 64 73 20 0a 2a 2a 20 74 68 65 20 6c   holds .** the l
22df0 61 72 67 65 73 74 20 70 72 65 76 69 6f 75 73 6c  argest previousl
22e00 79 20 67 65 6e 65 72 61 74 65 64 20 72 65 63 6f  y generated reco
22e10 72 64 20 6e 75 6d 62 65 72 2e 20 4e 6f 20 6e 65  rd number. No ne
22e20 77 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 73  w record numbers
22e30 20 61 72 65 0a 2a 2a 20 61 6c 6c 6f 77 65 64 20   are.** allowed 
22e40 74 6f 20 62 65 20 6c 65 73 73 20 74 68 61 6e 20  to be less than 
22e50 74 68 69 73 20 76 61 6c 75 65 2e 20 57 68 65 6e  this value. When
22e60 20 74 68 69 73 20 76 61 6c 75 65 20 72 65 61 63   this value reac
22e70 68 65 73 20 69 74 73 20 6d 61 78 69 6d 75 6d 2c  hes its maximum,
22e80 20 0a 2a 2a 20 61 6e 20 53 51 4c 49 54 45 5f 46   .** an SQLITE_F
22e90 55 4c 4c 20 65 72 72 6f 72 20 69 73 20 67 65 6e  ULL error is gen
22ea0 65 72 61 74 65 64 2e 20 54 68 65 20 50 33 20 72  erated. The P3 r
22eb0 65 67 69 73 74 65 72 20 69 73 20 75 70 64 61 74  egister is updat
22ec0 65 64 20 77 69 74 68 20 74 68 65 20 27 0a 2a 2a  ed with the '.**
22ed0 20 67 65 6e 65 72 61 74 65 64 20 72 65 63 6f 72   generated recor
22ee0 64 20 6e 75 6d 62 65 72 2e 20 54 68 69 73 20 50  d number. This P
22ef0 33 20 6d 65 63 68 61 6e 69 73 6d 20 69 73 20 75  3 mechanism is u
22f00 73 65 64 20 74 6f 20 68 65 6c 70 20 69 6d 70 6c  sed to help impl
22f10 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 41 55 54  ement the.** AUT
22f20 4f 49 4e 43 52 45 4d 45 4e 54 20 66 65 61 74 75  OINCREMENT featu
22f30 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  re..*/.case OP_N
22f40 65 77 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20  ewRowid: {      
22f50 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
22f60 20 20 69 36 34 20 76 3b 20 20 20 20 20 20 20 20    i64 v;        
22f70 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
22f80 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20 56  new rowid */.  V
22f90 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20  dbeCursor *pC;  
22fa0 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20        /* Cursor 
22fb0 6f 66 20 74 61 62 6c 65 20 74 6f 20 67 65 74 20  of table to get 
22fc0 74 68 65 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f  the new rowid */
22fd0 0a 20 20 69 6e 74 20 72 65 73 3b 20 20 20 20 20  .  int res;     
22fe0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73            /* Res
22ff0 75 6c 74 20 6f 66 20 61 6e 20 73 71 6c 69 74 65  ult of an sqlite
23000 33 42 74 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a  3BtreeLast() */.
23010 20 20 69 6e 74 20 63 6e 74 3b 20 20 20 20 20 20    int cnt;      
23020 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e           /* Coun
23030 74 65 72 20 74 6f 20 6c 69 6d 69 74 20 74 68 65  ter to limit the
23040 20 6e 75 6d 62 65 72 20 6f 66 20 73 65 61 72 63   number of searc
23050 68 65 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d  hes */.  Mem *pM
23060 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
23070 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64  /* Register hold
23080 69 6e 67 20 6c 61 72 67 65 73 74 20 72 6f 77 69  ing largest rowi
23090 64 20 66 6f 72 20 41 55 54 4f 49 4e 43 52 45 4d  d for AUTOINCREM
230a0 45 4e 54 20 2a 2f 0a 20 20 56 64 62 65 46 72 61  ENT */.  VdbeFra
230b0 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20 20 20 20  me *pFrame;     
230c0 2f 2a 20 52 6f 6f 74 20 66 72 61 6d 65 20 6f 66  /* Root frame of
230d0 20 56 44 42 45 20 2a 2f 0a 0a 20 20 76 20 3d 20   VDBE */..  v = 
230e0 30 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20  0;.  res = 0;.  
230f0 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
23100 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
23110 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
23120 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
23130 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
23140 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
23150 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
23160 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
23170 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
23180 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
23190 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
231a0 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29  >uc.pCursor!=0 )
231b0 3b 0a 20 20 7b 0a 20 20 20 20 2f 2a 20 54 68 65  ;.  {.    /* The
231c0 20 6e 65 78 74 20 72 6f 77 69 64 20 6f 72 20 72   next rowid or r
231d0 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 28 64 69  ecord number (di
231e0 66 66 65 72 65 6e 74 20 74 65 72 6d 73 20 66 6f  fferent terms fo
231f0 72 20 74 68 65 20 73 61 6d 65 0a 20 20 20 20 2a  r the same.    *
23200 2a 20 74 68 69 6e 67 29 20 69 73 20 6f 62 74 61  * thing) is obta
23210 69 6e 65 64 20 69 6e 20 61 20 74 77 6f 2d 73 74  ined in a two-st
23220 65 70 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 20 20  ep algorithm..  
23230 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 46 69 72 73    **.    ** Firs
23240 74 20 77 65 20 61 74 74 65 6d 70 74 20 74 6f 20  t we attempt to 
23250 66 69 6e 64 20 74 68 65 20 6c 61 72 67 65 73 74  find the largest
23260 20 65 78 69 73 74 69 6e 67 20 72 6f 77 69 64 20   existing rowid 
23270 61 6e 64 20 61 64 64 20 6f 6e 65 0a 20 20 20 20  and add one.    
23280 2a 2a 20 74 6f 20 74 68 61 74 2e 20 20 42 75 74  ** to that.  But
23290 20 69 66 20 74 68 65 20 6c 61 72 67 65 73 74 20   if the largest 
232a0 65 78 69 73 74 69 6e 67 20 72 6f 77 69 64 20 69  existing rowid i
232b0 73 20 61 6c 72 65 61 64 79 20 74 68 65 20 6d 61  s already the ma
232c0 78 69 6d 75 6d 0a 20 20 20 20 2a 2a 20 70 6f 73  ximum.    ** pos
232d0 69 74 69 76 65 20 69 6e 74 65 67 65 72 2c 20 77  itive integer, w
232e0 65 20 68 61 76 65 20 74 6f 20 66 61 6c 6c 20 74  e have to fall t
232f0 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 73 65  hrough to the se
23300 63 6f 6e 64 0a 20 20 20 20 2a 2a 20 70 72 6f 62  cond.    ** prob
23310 61 62 69 6c 69 73 74 69 63 20 61 6c 67 6f 72 69  abilistic algori
23320 74 68 6d 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  thm.    **.    *
23330 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 61 6c 67  * The second alg
23340 6f 72 69 74 68 6d 20 69 73 20 74 6f 20 73 65 6c  orithm is to sel
23350 65 63 74 20 61 20 72 6f 77 69 64 20 61 74 20 72  ect a rowid at r
23360 61 6e 64 6f 6d 20 61 6e 64 20 73 65 65 20 69 66  andom and see if
23370 0a 20 20 20 20 2a 2a 20 69 74 20 61 6c 72 65 61  .    ** it alrea
23380 64 79 20 65 78 69 73 74 73 20 69 6e 20 74 68 65  dy exists in the
23390 20 74 61 62 6c 65 2e 20 20 49 66 20 69 74 20 64   table.  If it d
233a0 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 77  oes not exist, w
233b0 65 20 68 61 76 65 0a 20 20 20 20 2a 2a 20 73 75  e have.    ** su
233c0 63 63 65 65 64 65 64 2e 20 20 49 66 20 74 68 65  cceeded.  If the
233d0 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 64 6f   random rowid do
233e0 65 73 20 65 78 69 73 74 2c 20 77 65 20 73 65 6c  es exist, we sel
233f0 65 63 74 20 61 20 6e 65 77 20 6f 6e 65 0a 20 20  ect a new one.  
23400 20 20 2a 2a 20 61 6e 64 20 74 72 79 20 61 67 61    ** and try aga
23410 69 6e 2c 20 75 70 20 74 6f 20 31 30 30 20 74 69  in, up to 100 ti
23420 6d 65 73 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  mes..    */.    
23430 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
23440 62 6c 65 20 29 3b 0a 0a 23 69 66 64 65 66 20 53  ble );..#ifdef S
23450 51 4c 49 54 45 5f 33 32 42 49 54 5f 52 4f 57 49  QLITE_32BIT_ROWI
23460 44 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58  D.#   define MAX
23470 5f 52 4f 57 49 44 20 30 78 37 66 66 66 66 66 66  _ROWID 0x7ffffff
23480 66 0a 23 65 6c 73 65 0a 20 20 20 20 2f 2a 20 53  f.#else.    /* S
23490 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 20 63 6f  ome compilers co
234a0 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 63 6f 6e  mplain about con
234b0 73 74 61 6e 74 73 20 6f 66 20 74 68 65 20 66 6f  stants of the fo
234c0 72 6d 20 30 78 37 66 66 66 66 66 66 66 66 66 66  rm 0x7ffffffffff
234d0 66 66 66 66 66 2e 0a 20 20 20 20 2a 2a 20 4f 74  fffff..    ** Ot
234e0 68 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62  hers complain ab
234f0 6f 75 74 20 30 78 37 66 66 66 66 66 66 66 66 66  out 0x7fffffffff
23500 66 66 66 66 66 66 66 4c 4c 2e 20 20 54 68 65 20  fffffffLL.  The 
23510 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20  following macro 
23520 73 65 65 6d 73 0a 20 20 20 20 2a 2a 20 74 6f 20  seems.    ** to 
23530 70 72 6f 76 69 64 65 20 74 68 65 20 63 6f 6e 73  provide the cons
23540 74 61 6e 74 20 77 68 69 6c 65 20 6d 61 6b 69 6e  tant while makin
23550 67 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73 20  g all compilers 
23560 68 61 70 70 79 2e 0a 20 20 20 20 2a 2f 0a 23 20  happy..    */.# 
23570 20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57    define MAX_ROW
23580 49 44 20 20 28 69 36 34 29 28 20 28 28 28 75 36  ID  (i64)( (((u6
23590 34 29 30 78 37 66 66 66 66 66 66 66 29 3c 3c 33  4)0x7fffffff)<<3
235a0 32 29 20 7c 20 28 75 36 34 29 30 78 66 66 66 66  2) | (u64)0xffff
235b0 66 66 66 66 20 29 0a 23 65 6e 64 69 66 0a 0a 20  ffff ).#endif.. 
235c0 20 20 20 69 66 28 20 21 70 43 2d 3e 75 73 65 52     if( !pC->useR
235d0 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20  andomRowid ){.  
235e0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
235f0 42 74 72 65 65 4c 61 73 74 28 70 43 2d 3e 75 63  BtreeLast(pC->uc
23600 2e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b  .pCursor, &res);
23610 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53  .      if( rc!=S
23620 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
23630 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
23640 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
23650 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 72     }.      if( r
23660 65 73 20 29 7b 0a 20 20 20 20 20 20 20 20 76 20  es ){.        v 
23670 3d 20 31 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52  = 1;   /* IMP: R
23680 2d 36 31 39 31 34 2d 34 38 30 37 34 20 2a 2f 0a  -61914-48074 */.
23690 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
236a0 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
236b0 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49  ite3BtreeCursorI
236c0 73 56 61 6c 69 64 28 70 43 2d 3e 75 63 2e 70 43  sValid(pC->uc.pC
236d0 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20  ursor) );.      
236e0 20 20 76 20 3d 20 73 71 6c 69 74 65 33 42 74 72    v = sqlite3Btr
236f0 65 65 49 6e 74 65 67 65 72 4b 65 79 28 70 43 2d  eeIntegerKey(pC-
23700 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20  >uc.pCursor);.  
23710 20 20 20 20 20 20 69 66 28 20 76 3e 3d 4d 41 58        if( v>=MAX
23720 5f 52 4f 57 49 44 20 29 7b 0a 20 20 20 20 20 20  _ROWID ){.      
23730 20 20 20 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f      pC->useRando
23740 6d 52 6f 77 69 64 20 3d 20 31 3b 0a 20 20 20 20  mRowid = 1;.    
23750 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
23760 20 20 20 20 20 76 2b 2b 3b 20 20 20 2f 2a 20 49       v++;   /* I
23770 4d 50 3a 20 52 2d 32 39 35 33 38 2d 33 34 39 38  MP: R-29538-3498
23780 37 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d 0a 20  7 */.        }. 
23790 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 23 69       }.    }..#i
237a0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
237b0 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a  T_AUTOINCREMENT.
237c0 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20      if( pOp->p3 
237d0 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41 73 73 65  ){.      /* Asse
237e0 72 74 20 74 68 61 74 20 50 33 20 69 73 20 61 20  rt that P3 is a 
237f0 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c  valid memory cel
23800 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65  l. */.      asse
23810 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b  rt( pOp->p3>0 );
23820 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 70 46  .      if( p->pF
23830 72 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 20 20  rame ){.        
23840 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46  for(pFrame=p->pF
23850 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50  rame; pFrame->pP
23860 61 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46  arent; pFrame=pF
23870 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a  rame->pParent);.
23880 20 20 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72          /* Asser
23890 74 20 74 68 61 74 20 50 33 20 69 73 20 61 20 76  t that P3 is a v
238a0 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  alid memory cell
238b0 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73 73  . */.        ass
238c0 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 46  ert( pOp->p3<=pF
238d0 72 61 6d 65 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20  rame->nMem );.  
238e0 20 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 70 46        pMem = &pF
238f0 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  rame->aMem[pOp->
23900 70 33 5d 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  p3];.      }else
23910 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 41 73 73  {.        /* Ass
23920 65 72 74 20 74 68 61 74 20 50 33 20 69 73 20 61  ert that P3 is a
23930 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65   valid memory ce
23940 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61  ll. */.        a
23950 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d  ssert( pOp->p3<=
23960 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
23970 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20  nCursor) );.    
23980 20 20 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d      pMem = &aMem
23990 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20  [pOp->p3];.     
239a0 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
239b0 6e 67 65 28 70 2c 20 70 4d 65 6d 29 3b 0a 20 20  nge(p, pMem);.  
239c0 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65      }.      asse
239d0 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
239e0 4d 65 6d 29 20 29 3b 0a 0a 20 20 20 20 20 20 52  Mem) );..      R
239f0 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
23a00 70 2d 3e 70 33 2c 20 70 4d 65 6d 29 3b 0a 20 20  p->p3, pMem);.  
23a10 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
23a20 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 4d 65  emIntegerify(pMe
23a30 6d 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  m);.      assert
23a40 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  ( (pMem->flags &
23a50 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 20   MEM_Int)!=0 ); 
23a60 20 2f 2a 20 6d 65 6d 28 50 33 29 20 68 6f 6c 64   /* mem(P3) hold
23a70 73 20 61 6e 20 69 6e 74 65 67 65 72 20 2a 2f 0a  s an integer */.
23a80 20 20 20 20 20 20 69 66 28 20 70 4d 65 6d 2d 3e        if( pMem->
23a90 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57 49 44 20 7c  u.i==MAX_ROWID |
23aa0 7c 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52  | pC->useRandomR
23ab0 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 20 20  owid ){.        
23ac0 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c  rc = SQLITE_FULL
23ad0 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 31 37  ;   /* IMP: R-17
23ae0 38 31 37 2d 30 30 36 33 30 20 2a 2f 0a 20 20 20  817-00630 */.   
23af0 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
23b00 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
23b10 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
23b20 76 3c 70 4d 65 6d 2d 3e 75 2e 69 2b 31 20 29 7b  v<pMem->u.i+1 ){
23b30 0a 20 20 20 20 20 20 20 20 76 20 3d 20 70 4d 65  .        v = pMe
23b40 6d 2d 3e 75 2e 69 20 2b 20 31 3b 0a 20 20 20 20  m->u.i + 1;.    
23b50 20 20 7d 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e    }.      pMem->
23b60 75 2e 69 20 3d 20 76 3b 0a 20 20 20 20 7d 0a 23  u.i = v;.    }.#
23b70 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20 70 43  endif.    if( pC
23b80 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64  ->useRandomRowid
23b90 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 4d 50   ){.      /* IMP
23ba0 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20  LEMENTATION-OF: 
23bb0 52 2d 30 37 36 37 37 2d 34 31 38 38 31 20 49 66  R-07677-41881 If
23bc0 20 74 68 65 20 6c 61 72 67 65 73 74 20 52 4f 57   the largest ROW
23bd0 49 44 20 69 73 20 65 71 75 61 6c 20 74 6f 20 74  ID is equal to t
23be0 68 65 0a 20 20 20 20 20 20 2a 2a 20 6c 61 72 67  he.      ** larg
23bf0 65 73 74 20 70 6f 73 73 69 62 6c 65 20 69 6e 74  est possible int
23c00 65 67 65 72 20 28 39 32 32 33 33 37 32 30 33 36  eger (9223372036
23c10 38 35 34 37 37 35 38 30 37 29 20 74 68 65 6e 20  854775807) then 
23c20 74 68 65 20 64 61 74 61 62 61 73 65 0a 20 20 20  the database.   
23c30 20 20 20 2a 2a 20 65 6e 67 69 6e 65 20 73 74 61     ** engine sta
23c40 72 74 73 20 70 69 63 6b 69 6e 67 20 70 6f 73 69  rts picking posi
23c50 74 69 76 65 20 63 61 6e 64 69 64 61 74 65 20 52  tive candidate R
23c60 4f 57 49 44 73 20 61 74 20 72 61 6e 64 6f 6d 20  OWIDs at random 
23c70 75 6e 74 69 6c 0a 20 20 20 20 20 20 2a 2a 20 69  until.      ** i
23c80 74 20 66 69 6e 64 73 20 6f 6e 65 20 74 68 61 74  t finds one that
23c90 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73   is not previous
23ca0 6c 79 20 75 73 65 64 2e 20 2a 2f 0a 20 20 20 20  ly used. */.    
23cb0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
23cc0 33 3d 3d 30 20 29 3b 20 20 2f 2a 20 57 65 20 63  3==0 );  /* We c
23cd0 61 6e 6e 6f 74 20 62 65 20 69 6e 20 72 61 6e 64  annot be in rand
23ce0 6f 6d 20 72 6f 77 69 64 20 6d 6f 64 65 20 69 66  om rowid mode if
23cf0 20 74 68 69 73 20 69 73 0a 20 20 20 20 20 20 20   this is.       
23d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d10 20 20 20 20 20 20 2a 2a 20 61 6e 20 41 55 54 4f        ** an AUTO
23d20 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c 65 2e  INCREMENT table.
23d30 20 2a 2f 0a 20 20 20 20 20 20 63 6e 74 20 3d 20   */.      cnt = 
23d40 30 3b 0a 20 20 20 20 20 20 64 6f 7b 0a 20 20 20  0;.      do{.   
23d50 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 61 6e       sqlite3_ran
23d60 64 6f 6d 6e 65 73 73 28 73 69 7a 65 6f 66 28 76  domness(sizeof(v
23d70 29 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 20 20  ), &v);.        
23d80 76 20 26 3d 20 28 4d 41 58 5f 52 4f 57 49 44 3e  v &= (MAX_ROWID>
23d90 3e 31 29 3b 20 76 2b 2b 3b 20 20 2f 2a 20 45 6e  >1); v++;  /* En
23da0 73 75 72 65 20 74 68 61 74 20 76 20 69 73 20 67  sure that v is g
23db0 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f  reater than zero
23dc0 20 2a 2f 0a 20 20 20 20 20 20 7d 77 68 69 6c 65   */.      }while
23dd0 28 20 20 28 28 72 63 20 3d 20 73 71 6c 69 74 65  (  ((rc = sqlite
23de0 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61  3BtreeMovetoUnpa
23df0 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43 75 72  cked(pC->uc.pCur
23e00 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 76 2c 0a  sor, 0, (u64)v,.
23e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e40 20 30 2c 20 26 72 65 73 29 29 3d 3d 53 51 4c 49   0, &res))==SQLI
23e50 54 45 5f 4f 4b 29 0a 20 20 20 20 20 20 20 20 20  TE_OK).         
23e60 20 20 20 26 26 20 28 72 65 73 3d 3d 30 29 0a 20     && (res==0). 
23e70 20 20 20 20 20 20 20 20 20 20 20 26 26 20 28 2b             && (+
23e80 2b 63 6e 74 3c 31 30 30 29 29 3b 0a 20 20 20 20  +cnt<100));.    
23e90 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
23ea0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
23eb0 6f 72 3b 0a 20 20 20 20 20 20 69 66 28 20 72 65  or;.      if( re
23ec0 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  s==0 ){.        
23ed0 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c  rc = SQLITE_FULL
23ee0 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 33 38  ;   /* IMP: R-38
23ef0 32 31 39 2d 35 33 30 30 32 20 2a 2f 0a 20 20 20  219-53002 */.   
23f00 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
23f10 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
23f20 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65      }.      asse
23f30 72 74 28 20 76 3e 30 20 29 3b 20 20 2f 2a 20 45  rt( v>0 );  /* E
23f40 56 3a 20 52 2d 34 30 38 31 32 2d 30 33 35 37 30  V: R-40812-03570
23f50 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 20 20 70 43   */.    }.    pC
23f60 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
23f70 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61   = 0;.    pC->ca
23f80 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
23f90 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 70  E_STALE;.  }.  p
23fa0 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20  Out->u.i = v;.  
23fb0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
23fc0 6f 64 65 3a 20 49 6e 73 65 72 74 20 50 31 20 50  ode: Insert P1 P
23fd0 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
23fe0 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72  nopsis: intkey=r
23ff0 5b 50 33 5d 20 64 61 74 61 3d 72 5b 50 32 5d 0a  [P3] data=r[P2].
24000 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 6e 20 65  **.** Write an e
24010 6e 74 72 79 20 69 6e 74 6f 20 74 68 65 20 74 61  ntry into the ta
24020 62 6c 65 20 6f 66 20 63 75 72 73 6f 72 20 50 31  ble of cursor P1
24030 2e 20 20 41 20 6e 65 77 20 65 6e 74 72 79 20 69  .  A new entry i
24040 73 0a 2a 2a 20 63 72 65 61 74 65 64 20 69 66 20  s.** created if 
24050 69 74 20 64 6f 65 73 6e 27 74 20 61 6c 72 65 61  it doesn't alrea
24060 64 79 20 65 78 69 73 74 20 6f 72 20 74 68 65 20  dy exist or the 
24070 64 61 74 61 20 66 6f 72 20 61 6e 20 65 78 69 73  data for an exis
24080 74 69 6e 67 0a 2a 2a 20 65 6e 74 72 79 20 69 73  ting.** entry is
24090 20 6f 76 65 72 77 72 69 74 74 65 6e 2e 20 20 54   overwritten.  T
240a0 68 65 20 64 61 74 61 20 69 73 20 74 68 65 20 76  he data is the v
240b0 61 6c 75 65 20 4d 45 4d 5f 42 6c 6f 62 20 73 74  alue MEM_Blob st
240c0 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
240d0 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 32 2e 20 54  .** number P2. T
240e0 68 65 20 6b 65 79 20 69 73 20 73 74 6f 72 65 64  he key is stored
240f0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
24100 20 54 68 65 20 6b 65 79 20 6d 75 73 74 0a 2a 2a   The key must.**
24110 20 62 65 20 61 20 4d 45 4d 5f 49 6e 74 2e 0a 2a   be a MEM_Int..*
24120 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c  *.** If the OPFL
24130 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20  AG_NCHANGE flag 
24140 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20 74 68  of P5 is set, th
24150 65 6e 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67  en the row chang
24160 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20 69 6e  e count is.** in
24170 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68 65 72  cremented (other
24180 77 69 73 65 20 6e 6f 74 29 2e 20 20 49 66 20 74  wise not).  If t
24190 68 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f  he OPFLAG_LASTRO
241a0 57 49 44 20 66 6c 61 67 20 6f 66 20 50 35 20 69  WID flag of P5 i
241b0 73 20 73 65 74 2c 0a 2a 2a 20 74 68 65 6e 20 72  s set,.** then r
241c0 6f 77 69 64 20 69 73 20 73 74 6f 72 65 64 20 66  owid is stored f
241d0 6f 72 20 73 75 62 73 65 71 75 65 6e 74 20 72 65  or subsequent re
241e0 74 75 72 6e 20 62 79 20 74 68 65 0a 2a 2a 20 73  turn by the.** s
241f0 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65  qlite3_last_inse
24200 72 74 5f 72 6f 77 69 64 28 29 20 66 75 6e 63 74  rt_rowid() funct
24210 69 6f 6e 20 28 6f 74 68 65 72 77 69 73 65 20 69  ion (otherwise i
24220 74 20 69 73 20 75 6e 6d 6f 64 69 66 69 65 64 29  t is unmodified)
24230 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
24240 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53  PFLAG_USESEEKRES
24250 55 4c 54 20 66 6c 61 67 20 6f 66 20 50 35 20 69  ULT flag of P5 i
24260 73 20 73 65 74 2c 20 74 68 65 20 69 6d 70 6c 65  s set, the imple
24270 6d 65 6e 74 61 74 69 6f 6e 20 6d 69 67 68 74 0a  mentation might.
24280 2a 2a 20 72 75 6e 20 66 61 73 74 65 72 20 62 79  ** run faster by
24290 20 61 76 6f 69 64 69 6e 67 20 61 6e 20 75 6e 6e   avoiding an unn
242a0 65 63 65 73 73 61 72 79 20 73 65 65 6b 20 6f 6e  ecessary seek on
242b0 20 63 75 72 73 6f 72 20 50 31 2e 20 20 48 6f 77   cursor P1.  How
242c0 65 76 65 72 2c 0a 2a 2a 20 74 68 65 20 4f 50 46  ever,.** the OPF
242d0 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c  LAG_USESEEKRESUL
242e0 54 20 66 6c 61 67 20 6d 75 73 74 20 6f 6e 6c 79  T flag must only
242f0 20 62 65 20 73 65 74 20 69 66 20 74 68 65 72 65   be set if there
24300 20 68 61 76 65 20 62 65 65 6e 20 6e 6f 20 70 72   have been no pr
24310 69 6f 72 0a 2a 2a 20 73 65 65 6b 73 20 6f 6e 20  ior.** seeks on 
24320 74 68 65 20 63 75 72 73 6f 72 20 6f 72 20 69 66  the cursor or if
24330 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
24340 20 73 65 65 6b 20 75 73 65 64 20 61 20 6b 65 79   seek used a key
24350 20 65 71 75 61 6c 20 74 6f 20 50 33 2e 0a 2a 2a   equal to P3..**
24360 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41  .** If the OPFLA
24370 47 5f 49 53 55 50 44 41 54 45 20 66 6c 61 67 20  G_ISUPDATE flag 
24380 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68 69  is set, then thi
24390 73 20 6f 70 63 6f 64 65 20 69 73 20 70 61 72 74  s opcode is part
243a0 20 6f 66 20 61 6e 0a 2a 2a 20 55 50 44 41 54 45   of an.** UPDATE
243b0 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 4f 74 68   operation.  Oth
243c0 65 72 77 69 73 65 20 28 69 66 20 74 68 65 20 66  erwise (if the f
243d0 6c 61 67 20 69 73 20 63 6c 65 61 72 29 20 74 68  lag is clear) th
243e0 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 0a 2a  en this opcode.*
243f0 2a 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e 20  * is part of an 
24400 49 4e 53 45 52 54 20 6f 70 65 72 61 74 69 6f 6e  INSERT operation
24410 2e 20 20 54 68 65 20 64 69 66 66 65 72 65 6e 63  .  The differenc
24420 65 20 69 73 20 6f 6e 6c 79 20 69 6d 70 6f 72 74  e is only import
24430 61 6e 74 20 74 6f 0a 2a 2a 20 74 68 65 20 75 70  ant to.** the up
24440 64 61 74 65 20 68 6f 6f 6b 2e 0a 2a 2a 0a 2a 2a  date hook..**.**
24450 20 50 61 72 61 6d 65 74 65 72 20 50 34 20 6d 61   Parameter P4 ma
24460 79 20 70 6f 69 6e 74 20 74 6f 20 61 20 54 61 62  y point to a Tab
24470 6c 65 20 73 74 72 75 63 74 75 72 65 2c 20 6f 72  le structure, or
24480 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 20 49 66   may be NULL. If
24490 20 69 74 20 69 73 20 0a 2a 2a 20 6e 6f 74 20 4e   it is .** not N
244a0 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65 20 75 70  ULL, then the up
244b0 64 61 74 65 2d 68 6f 6f 6b 20 28 73 71 6c 69 74  date-hook (sqlit
244c0 65 33 2e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  e3.xUpdateCallba
244d0 63 6b 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 0a  ck) is invoked .
244e0 2a 2a 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 73  ** following a s
244f0 75 63 63 65 73 73 66 75 6c 20 69 6e 73 65 72 74  uccessful insert
24500 2e 0a 2a 2a 0a 2a 2a 20 28 57 41 52 4e 49 4e 47  ..**.** (WARNING
24510 2f 54 4f 44 4f 3a 20 49 66 20 50 31 20 69 73 20  /TODO: If P1 is 
24520 61 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 20  a pseudo-cursor 
24530 61 6e 64 20 50 32 20 69 73 20 64 79 6e 61 6d 69  and P2 is dynami
24540 63 61 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74  cally.** allocat
24550 65 64 2c 20 74 68 65 6e 20 6f 77 6e 65 72 73 68  ed, then ownersh
24560 69 70 20 6f 66 20 50 32 20 69 73 20 74 72 61 6e  ip of P2 is tran
24570 73 66 65 72 72 65 64 20 74 6f 20 74 68 65 20 70  sferred to the p
24580 73 65 75 64 6f 2d 63 75 72 73 6f 72 0a 2a 2a 20  seudo-cursor.** 
24590 61 6e 64 20 72 65 67 69 73 74 65 72 20 50 32 20  and register P2 
245a0 62 65 63 6f 6d 65 73 20 65 70 68 65 6d 65 72 61  becomes ephemera
245b0 6c 2e 20 20 49 66 20 74 68 65 20 63 75 72 73 6f  l.  If the curso
245c0 72 20 69 73 20 63 68 61 6e 67 65 64 2c 20 74 68  r is changed, th
245d0 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20 72 65  e.** value of re
245e0 67 69 73 74 65 72 20 50 32 20 77 69 6c 6c 20 74  gister P2 will t
245f0 68 65 6e 20 63 68 61 6e 67 65 2e 20 20 4d 61 6b  hen change.  Mak
24600 65 20 73 75 72 65 20 74 68 69 73 20 64 6f 65 73  e sure this does
24610 20 6e 6f 74 0a 2a 2a 20 63 61 75 73 65 20 61 6e   not.** cause an
24620 79 20 70 72 6f 62 6c 65 6d 73 2e 29 0a 2a 2a 0a  y problems.).**.
24630 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
24640 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f  ion only works o
24650 6e 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20 65  n tables.  The e
24660 71 75 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75  quivalent instru
24670 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 69 6e 64  ction.** for ind
24680 69 63 65 73 20 69 73 20 4f 50 5f 49 64 78 49 6e  ices is OP_IdxIn
24690 73 65 72 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  sert..*/./* Opco
246a0 64 65 3a 20 49 6e 73 65 72 74 49 6e 74 20 50 31  de: InsertInt P1
246b0 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
246c0 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79  Synopsis: intkey
246d0 3d 50 33 20 64 61 74 61 3d 72 5b 50 32 5d 0a 2a  =P3 data=r[P2].*
246e0 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20  *.** This works 
246f0 65 78 61 63 74 6c 79 20 6c 69 6b 65 20 4f 50 5f  exactly like OP_
24700 49 6e 73 65 72 74 20 65 78 63 65 70 74 20 74 68  Insert except th
24710 61 74 20 74 68 65 20 6b 65 79 20 69 73 20 74 68  at the key is th
24720 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 76 61 6c  e.** integer val
24730 75 65 20 50 33 2c 20 6e 6f 74 20 74 68 65 20 76  ue P3, not the v
24740 61 6c 75 65 20 6f 66 20 74 68 65 20 69 6e 74 65  alue of the inte
24750 67 65 72 20 73 74 6f 72 65 64 20 69 6e 20 72 65  ger stored in re
24760 67 69 73 74 65 72 20 50 33 2e 0a 2a 2f 0a 63 61  gister P3..*/.ca
24770 73 65 20 4f 50 5f 49 6e 73 65 72 74 3a 20 0a 63  se OP_Insert: .c
24780 61 73 65 20 4f 50 5f 49 6e 73 65 72 74 49 6e 74  ase OP_InsertInt
24790 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61  : {.  Mem *pData
247a0 3b 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63  ;       /* MEM c
247b0 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 64 61 74 61  ell holding data
247c0 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20   for the record 
247d0 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 20 2a  to be inserted *
247e0 2f 0a 20 20 4d 65 6d 20 2a 70 4b 65 79 3b 20 20  /.  Mem *pKey;  
247f0 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c        /* MEM cel
24800 6c 20 68 6f 6c 64 69 6e 67 20 6b 65 79 20 20 66  l holding key  f
24810 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  or the record */
24820 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
24830 43 3b 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 74  C;   /* Cursor t
24840 6f 20 74 61 62 6c 65 20 69 6e 74 6f 20 77 68 69  o table into whi
24850 63 68 20 69 6e 73 65 72 74 20 69 73 20 77 72 69  ch insert is wri
24860 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 73 65  tten */.  int se
24870 65 6b 52 65 73 75 6c 74 3b 20 20 20 2f 2a 20 52  ekResult;   /* R
24880 65 73 75 6c 74 20 6f 66 20 70 72 69 6f 72 20 73  esult of prior s
24890 65 65 6b 20 6f 72 20 30 20 69 66 20 6e 6f 20 55  eek or 0 if no U
248a0 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61  SESEEKRESULT fla
248b0 67 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  g */.  const cha
248c0 72 20 2a 7a 44 62 3b 20 20 2f 2a 20 64 61 74 61  r *zDb;  /* data
248d0 62 61 73 65 20 6e 61 6d 65 20 2d 20 75 73 65 64  base name - used
248e0 20 62 79 20 74 68 65 20 75 70 64 61 74 65 20 68   by the update h
248f0 6f 6f 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ook */.  Table *
24900 70 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 54 61  pTab;      /* Ta
24910 62 6c 65 20 73 74 72 75 63 74 75 72 65 20 2d 20  ble structure - 
24920 75 73 65 64 20 62 79 20 75 70 64 61 74 65 20 61  used by update a
24930 6e 64 20 70 72 65 2d 75 70 64 61 74 65 20 68 6f  nd pre-update ho
24940 6f 6b 73 20 2a 2f 0a 20 20 69 6e 74 20 6f 70 3b  oks */.  int op;
24950 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70             /* Op
24960 63 6f 64 65 20 66 6f 72 20 75 70 64 61 74 65 20  code for update 
24970 68 6f 6f 6b 3a 20 53 51 4c 49 54 45 5f 55 50 44  hook: SQLITE_UPD
24980 41 54 45 20 6f 72 20 53 51 4c 49 54 45 5f 49 4e  ATE or SQLITE_IN
24990 53 45 52 54 20 2a 2f 0a 20 20 42 74 72 65 65 50  SERT */.  BtreeP
249a0 61 79 6c 6f 61 64 20 78 3b 20 20 20 2f 2a 20 50  ayload x;   /* P
249b0 61 79 6c 6f 61 64 20 74 6f 20 62 65 20 69 6e 73  ayload to be ins
249c0 65 72 74 65 64 20 2a 2f 0a 0a 20 20 6f 70 20 3d  erted */..  op =
249d0 20 30 3b 0a 20 20 70 44 61 74 61 20 3d 20 26 61   0;.  pData = &a
249e0 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
249f0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
24a00 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
24a10 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
24a20 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
24a30 28 70 44 61 74 61 29 20 29 3b 0a 20 20 70 43 20  (pData) );.  pC 
24a40 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
24a50 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
24a60 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
24a70 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
24a80 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
24a90 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75  .  assert( pC->u
24aa0 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  c.pCursor!=0 );.
24ab0 20 20 61 73 73 65 72 74 28 20 28 70 4f 70 2d 3e    assert( (pOp->
24ac0 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 4e 4f  p5 & OPFLAG_ISNO
24ad0 4f 50 29 20 7c 7c 20 70 43 2d 3e 69 73 54 61 62  OP) || pC->isTab
24ae0 6c 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  le );.  assert( 
24af0 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
24b00 54 41 42 4c 45 20 7c 7c 20 70 4f 70 2d 3e 70 34  TABLE || pOp->p4
24b10 74 79 70 65 3e 3d 50 34 5f 53 54 41 54 49 43 20  type>=P4_STATIC 
24b20 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
24b30 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 44 61  ACE(pOp->p2, pDa
24b40 74 61 29 3b 0a 0a 20 20 69 66 28 20 70 4f 70 2d  ta);..  if( pOp-
24b50 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65  >opcode==OP_Inse
24b60 72 74 20 29 7b 0a 20 20 20 20 70 4b 65 79 20 3d  rt ){.    pKey =
24b70 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
24b80 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65  .    assert( pKe
24b90 79 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  y->flags & MEM_I
24ba0 6e 74 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  nt );.    assert
24bb0 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4b 65  ( memIsValid(pKe
24bc0 79 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54  y) );.    REGIST
24bd0 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
24be0 2c 20 70 4b 65 79 29 3b 0a 20 20 20 20 78 2e 6e  , pKey);.    x.n
24bf0 4b 65 79 20 3d 20 70 4b 65 79 2d 3e 75 2e 69 3b  Key = pKey->u.i;
24c00 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
24c10 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
24c20 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 49 6e 74 20  e==OP_InsertInt 
24c30 29 3b 0a 20 20 20 20 78 2e 6e 4b 65 79 20 3d 20  );.    x.nKey = 
24c40 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 0a 20 20  pOp->p3;.  }..  
24c50 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  if( pOp->p4type=
24c60 3d 50 34 5f 54 41 42 4c 45 20 26 26 20 48 41 53  =P4_TABLE && HAS
24c70 5f 55 50 44 41 54 45 5f 48 4f 4f 4b 28 64 62 29  _UPDATE_HOOK(db)
24c80 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
24c90 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20  pC->iDb>=0 );.  
24ca0 20 20 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b    zDb = db->aDb[
24cb0 70 43 2d 3e 69 44 62 5d 2e 7a 44 62 53 4e 61 6d  pC->iDb].zDbSNam
24cc0 65 3b 0a 20 20 20 20 70 54 61 62 20 3d 20 70 4f  e;.    pTab = pO
24cd0 70 2d 3e 70 34 2e 70 54 61 62 3b 0a 20 20 20 20  p->p4.pTab;.    
24ce0 61 73 73 65 72 74 28 20 28 70 4f 70 2d 3e 70 35  assert( (pOp->p5
24cf0 20 26 20 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f 50   & OPFLAG_ISNOOP
24d00 29 20 7c 7c 20 48 61 73 52 6f 77 69 64 28 70 54  ) || HasRowid(pT
24d10 61 62 29 20 29 3b 0a 20 20 20 20 6f 70 20 3d 20  ab) );.    op = 
24d20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ((pOp->p5 & OPFL
24d30 41 47 5f 49 53 55 50 44 41 54 45 29 20 3f 20 53  AG_ISUPDATE) ? S
24d40 51 4c 49 54 45 5f 55 50 44 41 54 45 20 3a 20 53  QLITE_UPDATE : S
24d50 51 4c 49 54 45 5f 49 4e 53 45 52 54 29 3b 0a 20  QLITE_INSERT);. 
24d60 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 54 61 62   }else{.    pTab
24d70 20 3d 20 30 3b 20 2f 2a 20 4e 6f 74 20 6e 65 65   = 0; /* Not nee
24d80 64 65 64 2e 20 20 53 69 6c 65 6e 63 65 20 61 20  ded.  Silence a 
24d90 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67  compiler warning
24da0 2e 20 2a 2f 0a 20 20 20 20 7a 44 62 20 3d 20 30  . */.    zDb = 0
24db0 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64  ;  /* Not needed
24dc0 2e 20 20 53 69 6c 65 6e 63 65 20 61 20 63 6f 6d  .  Silence a com
24dd0 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 2e 20 2a  piler warning. *
24de0 2f 0a 20 20 7d 0a 0a 23 69 66 64 65 66 20 53 51  /.  }..#ifdef SQ
24df0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55  LITE_ENABLE_PREU
24e00 50 44 41 54 45 5f 48 4f 4f 4b 0a 20 20 2f 2a 20  PDATE_HOOK.  /* 
24e10 49 6e 76 6f 6b 65 20 74 68 65 20 70 72 65 2d 75  Invoke the pre-u
24e20 70 64 61 74 65 20 68 6f 6f 6b 2c 20 69 66 20 61  pdate hook, if a
24e30 6e 79 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e  ny */.  if( db->
24e40 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61  xPreUpdateCallba
24e50 63 6b 20 0a 20 20 20 26 26 20 70 4f 70 2d 3e 70  ck .   && pOp->p
24e60 34 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45 0a  4type==P4_TABLE.
24e70 20 20 20 26 26 20 21 28 70 4f 70 2d 3e 70 35 20     && !(pOp->p5 
24e80 26 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54  & OPFLAG_ISUPDAT
24e90 45 29 0a 20 20 29 7b 0a 20 20 20 20 73 71 6c 69  E).  ){.    sqli
24ea0 74 65 33 56 64 62 65 50 72 65 55 70 64 61 74 65  te3VdbePreUpdate
24eb0 48 6f 6f 6b 28 70 2c 20 70 43 2c 20 53 51 4c 49  Hook(p, pC, SQLI
24ec0 54 45 5f 49 4e 53 45 52 54 2c 20 7a 44 62 2c 20  TE_INSERT, zDb, 
24ed0 70 54 61 62 2c 20 78 2e 6e 4b 65 79 2c 20 70 4f  pTab, x.nKey, pO
24ee0 70 2d 3e 70 32 29 3b 0a 20 20 7d 0a 20 20 69 66  p->p2);.  }.  if
24ef0 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ( pOp->p5 & OPFL
24f00 41 47 5f 49 53 4e 4f 4f 50 20 29 20 62 72 65 61  AG_ISNOOP ) brea
24f10 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66 28  k;.#endif..  if(
24f20 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41   pOp->p5 & OPFLA
24f30 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e  G_NCHANGE ) p->n
24f40 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 69 66 28 20  Change++;.  if( 
24f50 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
24f60 5f 4c 41 53 54 52 4f 57 49 44 20 29 20 64 62 2d  _LASTROWID ) db-
24f70 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 78 2e 6e  >lastRowid = x.n
24f80 4b 65 79 3b 0a 20 20 69 66 28 20 70 44 61 74 61  Key;.  if( pData
24f90 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
24fa0 6c 6c 20 29 7b 0a 20 20 20 20 78 2e 70 44 61 74  ll ){.    x.pDat
24fb0 61 20 3d 20 30 3b 0a 20 20 20 20 78 2e 6e 44 61  a = 0;.    x.nDa
24fc0 74 61 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b  ta = 0;.  }else{
24fd0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 44 61  .    assert( pDa
24fe0 74 61 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  ta->flags & (MEM
24ff0 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 20 29  _Blob|MEM_Str) )
25000 3b 0a 20 20 20 20 78 2e 70 44 61 74 61 20 3d 20  ;.    x.pData = 
25010 70 44 61 74 61 2d 3e 7a 3b 0a 20 20 20 20 78 2e  pData->z;.    x.
25020 6e 44 61 74 61 20 3d 20 70 44 61 74 61 2d 3e 6e  nData = pData->n
25030 3b 0a 20 20 7d 0a 20 20 73 65 65 6b 52 65 73 75  ;.  }.  seekResu
25040 6c 74 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26  lt = ((pOp->p5 &
25050 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
25060 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65  ESULT) ? pC->see
25070 6b 52 65 73 75 6c 74 20 3a 20 30 29 3b 0a 20 20  kResult : 0);.  
25080 69 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73  if( pData->flags
25090 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20   & MEM_Zero ){. 
250a0 20 20 20 78 2e 6e 5a 65 72 6f 20 3d 20 70 44 61     x.nZero = pDa
250b0 74 61 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 7d  ta->u.nZero;.  }
250c0 65 6c 73 65 7b 0a 20 20 20 20 78 2e 6e 5a 65 72  else{.    x.nZer
250d0 6f 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 78 2e 70  o = 0;.  }.  x.p
250e0 4b 65 79 20 3d 20 30 3b 0a 20 20 72 63 20 3d 20  Key = 0;.  rc = 
250f0 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 73 65  sqlite3BtreeInse
25100 72 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  rt(pC->uc.pCurso
25110 72 2c 20 26 78 2c 0a 20 20 20 20 20 20 28 70 4f  r, &x,.      (pO
25120 70 2d 3e 70 35 20 26 20 28 4f 50 46 4c 41 47 5f  p->p5 & (OPFLAG_
25130 41 50 50 45 4e 44 7c 4f 50 46 4c 41 47 5f 53 41  APPEND|OPFLAG_SA
25140 56 45 50 4f 53 49 54 49 4f 4e 29 29 2c 20 73 65  VEPOSITION)), se
25150 65 6b 52 65 73 75 6c 74 0a 20 20 29 3b 0a 20 20  ekResult.  );.  
25160 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
25170 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61  to = 0;.  pC->ca
25180 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
25190 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49  E_STALE;..  /* I
251a0 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65  nvoke the update
251b0 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65  -hook if require
251c0 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 20 29  d. */.  if( rc )
251d0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
251e0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20  to_error;.  if( 
251f0 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  db->xUpdateCallb
25200 61 63 6b 20 26 26 20 6f 70 20 29 7b 0a 20 20 20  ack && op ){.   
25210 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c   db->xUpdateCall
25220 62 61 63 6b 28 64 62 2d 3e 70 55 70 64 61 74 65  back(db->pUpdate
25230 41 72 67 2c 20 6f 70 2c 20 7a 44 62 2c 20 70 54  Arg, op, zDb, pT
25240 61 62 2d 3e 7a 4e 61 6d 65 2c 20 78 2e 6e 4b 65  ab->zName, x.nKe
25250 79 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  y);.  }.  break;
25260 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  .}../* Opcode: D
25270 65 6c 65 74 65 20 50 31 20 50 32 20 50 33 20 50  elete P1 P2 P3 P
25280 34 20 50 35 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74  4 P5.**.** Delet
25290 65 20 74 68 65 20 72 65 63 6f 72 64 20 61 74 20  e the record at 
252a0 77 68 69 63 68 20 74 68 65 20 50 31 20 63 75 72  which the P1 cur
252b0 73 6f 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79  sor is currently
252c0 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a   pointing..**.**
252d0 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 53   If the OPFLAG_S
252e0 41 56 45 50 4f 53 49 54 49 4f 4e 20 62 69 74 20  AVEPOSITION bit 
252f0 6f 66 20 74 68 65 20 50 35 20 70 61 72 61 6d 65  of the P5 parame
25300 74 65 72 20 69 73 20 73 65 74 2c 20 74 68 65 6e  ter is set, then
25310 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 20 77  .** the cursor w
25320 69 6c 6c 20 62 65 20 6c 65 66 74 20 70 6f 69 6e  ill be left poin
25330 74 69 6e 67 20 61 74 20 20 65 69 74 68 65 72 20  ting at  either 
25340 74 68 65 20 6e 65 78 74 20 6f 72 20 74 68 65 20  the next or the 
25350 70 72 65 76 69 6f 75 73 0a 2a 2a 20 72 65 63 6f  previous.** reco
25360 72 64 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  rd in the table.
25370 20 49 66 20 69 74 20 69 73 20 6c 65 66 74 20 70   If it is left p
25380 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6e  ointing at the n
25390 65 78 74 20 72 65 63 6f 72 64 2c 20 74 68 65 6e  ext record, then
253a0 0a 2a 2a 20 74 68 65 20 6e 65 78 74 20 4e 65 78  .** the next Nex
253b0 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 69  t instruction wi
253c0 6c 6c 20 62 65 20 61 20 6e 6f 2d 6f 70 2e 20 41  ll be a no-op. A
253d0 73 20 61 20 72 65 73 75 6c 74 2c 20 69 6e 20 74  s a result, in t
253e0 68 69 73 20 63 61 73 65 0a 2a 2a 20 69 74 20 69  his case.** it i
253f0 73 20 6f 6b 20 74 6f 20 64 65 6c 65 74 65 20 61  s ok to delete a
25400 20 72 65 63 6f 72 64 20 66 72 6f 6d 20 77 69 74   record from wit
25410 68 69 6e 20 61 20 4e 65 78 74 20 6c 6f 6f 70 2e  hin a Next loop.
25420 20 49 66 20 0a 2a 2a 20 4f 50 46 4c 41 47 5f 53   If .** OPFLAG_S
25430 41 56 45 50 4f 53 49 54 49 4f 4e 20 62 69 74 20  AVEPOSITION bit 
25440 6f 66 20 50 35 20 69 73 20 63 6c 65 61 72 2c 20  of P5 is clear, 
25450 74 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20  then the cursor 
25460 77 69 6c 6c 20 62 65 0a 2a 2a 20 6c 65 66 74 20  will be.** left 
25470 69 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65 64 20  in an undefined 
25480 73 74 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  state..**.** If 
25490 74 68 65 20 4f 50 46 4c 41 47 5f 41 55 58 44 45  the OPFLAG_AUXDE
254a0 4c 45 54 45 20 62 69 74 20 69 73 20 73 65 74 20  LETE bit is set 
254b0 6f 6e 20 50 35 2c 20 74 68 61 74 20 69 6e 64 69  on P5, that indi
254c0 63 61 74 65 73 20 74 68 61 74 20 74 68 69 73 0a  cates that this.
254d0 2a 2a 20 64 65 6c 65 74 65 20 6f 6e 65 20 6f 66  ** delete one of
254e0 20 73 65 76 65 72 61 6c 20 61 73 73 6f 63 69 61   several associa
254f0 74 65 64 20 77 69 74 68 20 64 65 6c 65 74 69 6e  ted with deletin
25500 67 20 61 20 74 61 62 6c 65 20 72 6f 77 20 61 6e  g a table row an
25510 64 20 61 6c 6c 20 69 74 73 0a 2a 2a 20 61 73 73  d all its.** ass
25520 6f 63 69 61 74 65 64 20 69 6e 64 65 78 20 65 6e  ociated index en
25530 74 72 69 65 73 2e 20 20 45 78 61 63 74 6c 79 20  tries.  Exactly 
25540 6f 6e 65 20 6f 66 20 74 68 6f 73 65 20 64 65 6c  one of those del
25550 65 74 65 73 20 69 73 20 74 68 65 20 22 70 72 69  etes is the "pri
25560 6d 61 72 79 22 0a 2a 2a 20 64 65 6c 65 74 65 2e  mary".** delete.
25570 20 20 54 68 65 20 6f 74 68 65 72 73 20 61 72 65    The others are
25580 20 61 6c 6c 20 6f 6e 20 4f 50 46 4c 41 47 5f 46   all on OPFLAG_F
25590 4f 52 44 45 4c 45 54 45 20 63 75 72 73 6f 72 73  ORDELETE cursors
255a0 20 6f 72 20 65 6c 73 65 20 61 72 65 0a 2a 2a 20   or else are.** 
255b0 6d 61 72 6b 65 64 20 77 69 74 68 20 74 68 65 20  marked with the 
255c0 41 55 58 44 45 4c 45 54 45 20 66 6c 61 67 2e 0a  AUXDELETE flag..
255d0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
255e0 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67  LAG_NCHANGE flag
255f0 20 6f 66 20 50 32 20 28 4e 42 3a 20 50 32 20 6e   of P2 (NB: P2 n
25600 6f 74 20 50 35 29 20 69 73 20 73 65 74 2c 20 74  ot P5) is set, t
25610 68 65 6e 20 74 68 65 20 72 6f 77 0a 2a 2a 20 63  hen the row.** c
25620 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 20 69  hange count is i
25630 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68 65  ncremented (othe
25640 72 77 69 73 65 20 6e 6f 74 29 2e 0a 2a 2a 0a 2a  rwise not)..**.*
25650 2a 20 50 31 20 6d 75 73 74 20 6e 6f 74 20 62 65  * P1 must not be
25660 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20   pseudo-table.  
25670 49 74 20 68 61 73 20 74 6f 20 62 65 20 61 20 72  It has to be a r
25680 65 61 6c 20 74 61 62 6c 65 20 77 69 74 68 0a 2a  eal table with.*
25690 2a 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 2e  * multiple rows.
256a0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20  .**.** If P4 is 
256b0 6e 6f 74 20 4e 55 4c 4c 20 74 68 65 6e 20 69 74  not NULL then it
256c0 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 54 61 62   points to a Tab
256d0 6c 65 20 6f 62 6a 65 63 74 2e 20 49 6e 20 74 68  le object. In th
256e0 69 73 20 63 61 73 65 20 65 69 74 68 65 72 20 0a  is case either .
256f0 2a 2a 20 74 68 65 20 75 70 64 61 74 65 20 6f 72  ** the update or
25700 20 70 72 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b   pre-update hook
25710 2c 20 6f 72 20 62 6f 74 68 2c 20 6d 61 79 20 62  , or both, may b
25720 65 20 69 6e 76 6f 6b 65 64 2e 20 54 68 65 20 50  e invoked. The P
25730 31 20 63 75 72 73 6f 72 20 6d 75 73 74 0a 2a 2a  1 cursor must.**
25740 20 68 61 76 65 20 62 65 65 6e 20 70 6f 73 69 74   have been posit
25750 69 6f 6e 65 64 20 75 73 69 6e 67 20 4f 50 5f 4e  ioned using OP_N
25760 6f 74 46 6f 75 6e 64 20 70 72 69 6f 72 20 74 6f  otFound prior to
25770 20 69 6e 76 6f 6b 69 6e 67 20 74 68 69 73 20 6f   invoking this o
25780 70 63 6f 64 65 20 69 6e 20 0a 2a 2a 20 74 68 69  pcode in .** thi
25790 73 20 63 61 73 65 2e 20 53 70 65 63 69 66 69 63  s case. Specific
257a0 61 6c 6c 79 2c 20 69 66 20 6f 6e 65 20 69 73 20  ally, if one is 
257b0 63 6f 6e 66 69 67 75 72 65 64 2c 20 74 68 65 20  configured, the 
257c0 70 72 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b 20  pre-update hook 
257d0 69 73 20 0a 2a 2a 20 69 6e 76 6f 6b 65 64 20 69  is .** invoked i
257e0 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  f P4 is not NULL
257f0 2e 20 54 68 65 20 75 70 64 61 74 65 2d 68 6f 6f  . The update-hoo
25800 6b 20 69 73 20 69 6e 76 6f 6b 65 64 20 69 66 20  k is invoked if 
25810 6f 6e 65 20 69 73 20 63 6f 6e 66 69 67 75 72 65  one is configure
25820 64 2c 20 0a 2a 2a 20 50 34 20 69 73 20 6e 6f 74  d, .** P4 is not
25830 20 4e 55 4c 4c 2c 20 61 6e 64 20 74 68 65 20 4f   NULL, and the O
25840 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c  PFLAG_NCHANGE fl
25850 61 67 20 69 73 20 73 65 74 20 69 6e 20 50 32 2e  ag is set in P2.
25860 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
25870 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20 66 6c  FLAG_ISUPDATE fl
25880 61 67 20 69 73 20 73 65 74 20 69 6e 20 50 32 2c  ag is set in P2,
25890 20 74 68 65 6e 20 50 33 20 63 6f 6e 74 61 69 6e   then P3 contain
258a0 73 20 74 68 65 20 61 64 64 72 65 73 73 0a 2a 2a  s the address.**
258b0 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63   of the memory c
258c0 65 6c 6c 20 74 68 61 74 20 63 6f 6e 74 61 69 6e  ell that contain
258d0 73 20 74 68 65 20 76 61 6c 75 65 20 74 68 61 74  s the value that
258e0 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68   the rowid of th
258f0 65 20 72 6f 77 20 77 69 6c 6c 0a 2a 2a 20 62 65  e row will.** be
25900 20 73 65 74 20 74 6f 20 62 79 20 74 68 65 20 75   set to by the u
25910 70 64 61 74 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  pdate..*/.case O
25920 50 5f 44 65 6c 65 74 65 3a 20 7b 0a 20 20 56 64  P_Delete: {.  Vd
25930 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
25940 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b  const char *zDb;
25950 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a  .  Table *pTab;.
25960 20 20 69 6e 74 20 6f 70 66 6c 61 67 73 3b 0a 0a    int opflags;..
25970 20 20 6f 70 66 6c 61 67 73 20 3d 20 70 4f 70 2d    opflags = pOp-
25980 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70  >p2;.  assert( p
25990 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
259a0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
259b0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
259c0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
259d0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
259e0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
259f0 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
25a00 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72  BTREE );.  asser
25a10 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  t( pC->uc.pCurso
25a20 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  r!=0 );.  assert
25a30 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
25a40 76 65 74 6f 3d 3d 30 20 29 3b 0a 0a 23 69 66 64  veto==0 );..#ifd
25a50 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
25a60 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70    if( pOp->p4typ
25a70 65 3d 3d 50 34 5f 54 41 42 4c 45 20 26 26 20 48  e==P4_TABLE && H
25a80 61 73 52 6f 77 69 64 28 70 4f 70 2d 3e 70 34 2e  asRowid(pOp->p4.
25a90 70 54 61 62 29 20 26 26 20 70 4f 70 2d 3e 70 35  pTab) && pOp->p5
25aa0 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66  ==0 ){.    /* If
25ab0 20 70 35 20 69 73 20 7a 65 72 6f 2c 20 74 68 65   p5 is zero, the
25ac0 20 73 65 65 6b 20 6f 70 65 72 61 74 69 6f 6e 20   seek operation 
25ad0 74 68 61 74 20 70 6f 73 69 74 69 6f 6e 65 64 20  that positioned 
25ae0 74 68 65 20 63 75 72 73 6f 72 20 70 72 69 6f 72  the cursor prior
25af0 20 74 6f 0a 20 20 20 20 2a 2a 20 4f 50 5f 44 65   to.    ** OP_De
25b00 6c 65 74 65 20 77 69 6c 6c 20 68 61 76 65 20 61  lete will have a
25b10 6c 73 6f 20 73 65 74 20 74 68 65 20 70 43 2d 3e  lso set the pC->
25b20 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 66 69 65  movetoTarget fie
25b30 6c 64 20 74 6f 20 74 68 65 20 72 6f 77 69 64 20  ld to the rowid 
25b40 6f 66 0a 20 20 20 20 2a 2a 20 74 68 65 20 72 6f  of.    ** the ro
25b50 77 20 74 68 61 74 20 69 73 20 62 65 69 6e 67 20  w that is being 
25b60 64 65 6c 65 74 65 64 20 2a 2f 0a 20 20 20 20 69  deleted */.    i
25b70 36 34 20 69 4b 65 79 20 3d 20 73 71 6c 69 74 65  64 iKey = sqlite
25b80 33 42 74 72 65 65 49 6e 74 65 67 65 72 4b 65 79  3BtreeIntegerKey
25b90 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29  (pC->uc.pCursor)
25ba0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
25bb0 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 3d 3d  ->movetoTarget==
25bc0 69 4b 65 79 20 29 3b 0a 20 20 7d 0a 23 65 6e 64  iKey );.  }.#end
25bd0 69 66 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20  if..  /* If the 
25be0 75 70 64 61 74 65 2d 68 6f 6f 6b 20 6f 72 20 70  update-hook or p
25bf0 72 65 2d 75 70 64 61 74 65 2d 68 6f 6f 6b 20 77  re-update-hook w
25c00 69 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20  ill be invoked, 
25c10 73 65 74 20 7a 44 62 20 74 6f 0a 20 20 2a 2a 20  set zDb to.  ** 
25c20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
25c30 64 62 20 74 6f 20 70 61 73 73 20 61 73 20 74 6f  db to pass as to
25c40 20 69 74 2e 20 41 6c 73 6f 20 73 65 74 20 6c 6f   it. Also set lo
25c50 63 61 6c 20 70 54 61 62 20 74 6f 20 61 20 63 6f  cal pTab to a co
25c60 70 79 0a 20 20 2a 2a 20 6f 66 20 70 34 2e 70 54  py.  ** of p4.pT
25c70 61 62 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20  ab. Finally, if 
25c80 70 35 20 69 73 20 74 72 75 65 2c 20 69 6e 64 69  p5 is true, indi
25c90 63 61 74 69 6e 67 20 74 68 61 74 20 74 68 69 73  cating that this
25ca0 20 63 75 72 73 6f 72 20 77 61 73 0a 20 20 2a 2a   cursor was.  **
25cb0 20 6c 61 73 74 20 6d 6f 76 65 64 20 77 69 74 68   last moved with
25cc0 20 4f 50 5f 4e 65 78 74 20 6f 72 20 4f 50 5f 50   OP_Next or OP_P
25cd0 72 65 76 2c 20 6e 6f 74 20 53 65 65 6b 20 6f 72  rev, not Seek or
25ce0 20 4e 6f 74 46 6f 75 6e 64 2c 20 73 65 74 20 0a   NotFound, set .
25cf0 20 20 2a 2a 20 56 64 62 65 43 75 72 73 6f 72 2e    ** VdbeCursor.
25d00 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 74 6f 20  movetoTarget to 
25d10 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 69  the current rowi
25d20 64 2e 20 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70  d.  */.  if( pOp
25d30 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54 41 42  ->p4type==P4_TAB
25d40 4c 45 20 26 26 20 48 41 53 5f 55 50 44 41 54 45  LE && HAS_UPDATE
25d50 5f 48 4f 4f 4b 28 64 62 29 20 29 7b 0a 20 20 20  _HOOK(db) ){.   
25d60 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62   assert( pC->iDb
25d70 3e 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72  >=0 );.    asser
25d80 74 28 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62 21  t( pOp->p4.pTab!
25d90 3d 30 20 29 3b 0a 20 20 20 20 7a 44 62 20 3d 20  =0 );.    zDb = 
25da0 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d  db->aDb[pC->iDb]
25db0 2e 7a 44 62 53 4e 61 6d 65 3b 0a 20 20 20 20 70  .zDbSName;.    p
25dc0 54 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 54  Tab = pOp->p4.pT
25dd0 61 62 3b 0a 20 20 20 20 69 66 28 20 28 70 4f 70  ab;.    if( (pOp
25de0 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 53 41  ->p5 & OPFLAG_SA
25df0 56 45 50 4f 53 49 54 49 4f 4e 29 21 3d 30 20 26  VEPOSITION)!=0 &
25e00 26 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b  & pC->isTable ){
25e10 0a 20 20 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74  .      pC->movet
25e20 6f 54 61 72 67 65 74 20 3d 20 73 71 6c 69 74 65  oTarget = sqlite
25e30 33 42 74 72 65 65 49 6e 74 65 67 65 72 4b 65 79  3BtreeIntegerKey
25e40 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29  (pC->uc.pCursor)
25e50 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
25e60 0a 20 20 20 20 7a 44 62 20 3d 20 30 3b 20 20 20  .    zDb = 0;   
25e70 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20  /* Not needed.  
25e80 53 69 6c 65 6e 63 65 20 61 20 63 6f 6d 70 69 6c  Silence a compil
25e90 65 72 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20  er warning. */. 
25ea0 20 20 20 70 54 61 62 20 3d 20 30 3b 20 20 2f 2a     pTab = 0;  /*
25eb0 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 53 69   Not needed.  Si
25ec0 6c 65 6e 63 65 20 61 20 63 6f 6d 70 69 6c 65 72  lence a compiler
25ed0 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 7d   warning. */.  }
25ee0 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
25ef0 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41 54 45  ENABLE_PREUPDATE
25f00 5f 48 4f 4f 4b 0a 20 20 2f 2a 20 49 6e 76 6f 6b  _HOOK.  /* Invok
25f10 65 20 74 68 65 20 70 72 65 2d 75 70 64 61 74 65  e the pre-update
25f20 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65  -hook if require
25f30 64 2e 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e  d. */.  if( db->
25f40 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61  xPreUpdateCallba
25f50 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 70 54  ck && pOp->p4.pT
25f60 61 62 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  ab ){.    assert
25f70 28 20 21 28 6f 70 66 6c 61 67 73 20 26 20 4f 50  ( !(opflags & OP
25f80 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20 0a  FLAG_ISUPDATE) .
25f90 20 20 20 20 20 20 20 20 20 7c 7c 20 48 61 73 52           || HasR
25fa0 6f 77 69 64 28 70 54 61 62 29 3d 3d 30 20 0a 20  owid(pTab)==0 . 
25fb0 20 20 20 20 20 20 20 20 7c 7c 20 28 61 4d 65 6d          || (aMem
25fc0 5b 70 4f 70 2d 3e 70 33 5d 2e 66 6c 61 67 73 20  [pOp->p3].flags 
25fd0 26 20 4d 45 4d 5f 49 6e 74 29 20 0a 20 20 20 20  & MEM_Int) .    
25fe0 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
25ff0 62 65 50 72 65 55 70 64 61 74 65 48 6f 6f 6b 28  bePreUpdateHook(
26000 70 2c 20 70 43 2c 0a 20 20 20 20 20 20 20 20 28  p, pC,.        (
26010 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 41 47  opflags & OPFLAG
26020 5f 49 53 55 50 44 41 54 45 29 20 3f 20 53 51 4c  _ISUPDATE) ? SQL
26030 49 54 45 5f 55 50 44 41 54 45 20 3a 20 53 51 4c  ITE_UPDATE : SQL
26040 49 54 45 5f 44 45 4c 45 54 45 2c 20 0a 20 20 20  ITE_DELETE, .   
26050 20 20 20 20 20 7a 44 62 2c 20 70 54 61 62 2c 20       zDb, pTab, 
26060 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74  pC->movetoTarget
26070 2c 0a 20 20 20 20 20 20 20 20 70 4f 70 2d 3e 70  ,.        pOp->p
26080 33 0a 20 20 20 20 29 3b 0a 20 20 7d 0a 20 20 69  3.    );.  }.  i
26090 66 28 20 6f 70 66 6c 61 67 73 20 26 20 4f 50 46  f( opflags & OPF
260a0 4c 41 47 5f 49 53 4e 4f 4f 50 20 29 20 62 72 65  LAG_ISNOOP ) bre
260b0 61 6b 3b 0a 23 65 6e 64 69 66 0a 20 0a 20 20 2f  ak;.#endif. .  /
260c0 2a 20 4f 6e 6c 79 20 66 6c 61 67 73 20 74 68 61  * Only flags tha
260d0 74 20 63 61 6e 20 62 65 20 73 65 74 20 61 72 65  t can be set are
260e0 20 53 41 56 45 50 4f 49 53 54 49 4f 4e 20 61 6e   SAVEPOISTION an
260f0 64 20 41 55 58 44 45 4c 45 54 45 20 2a 2f 20 0a  d AUXDELETE */ .
26100 20 20 61 73 73 65 72 74 28 20 28 70 4f 70 2d 3e    assert( (pOp->
26110 70 35 20 26 20 7e 28 4f 50 46 4c 41 47 5f 53 41  p5 & ~(OPFLAG_SA
26120 56 45 50 4f 53 49 54 49 4f 4e 7c 4f 50 46 4c 41  VEPOSITION|OPFLA
26130 47 5f 41 55 58 44 45 4c 45 54 45 29 29 3d 3d 30  G_AUXDELETE))==0
26140 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50   );.  assert( OP
26150 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f  FLAG_SAVEPOSITIO
26160 4e 3d 3d 42 54 52 45 45 5f 53 41 56 45 50 4f 53  N==BTREE_SAVEPOS
26170 49 54 49 4f 4e 20 29 3b 0a 20 20 61 73 73 65 72  ITION );.  asser
26180 74 28 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c  t( OPFLAG_AUXDEL
26190 45 54 45 3d 3d 42 54 52 45 45 5f 41 55 58 44 45  ETE==BTREE_AUXDE
261a0 4c 45 54 45 20 29 3b 0a 0a 23 69 66 64 65 66 20  LETE );..#ifdef 
261b0 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69  SQLITE_DEBUG.  i
261c0 66 28 20 70 2d 3e 70 46 72 61 6d 65 3d 3d 30 20  f( p->pFrame==0 
261d0 29 7b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 69  ){.    if( pC->i
261e0 73 45 70 68 65 6d 65 72 61 6c 3d 3d 30 0a 20 20  sEphemeral==0.  
261f0 20 20 20 20 20 20 26 26 20 28 70 4f 70 2d 3e 70        && (pOp->p
26200 35 20 26 20 4f 50 46 4c 41 47 5f 41 55 58 44 45  5 & OPFLAG_AUXDE
26210 4c 45 54 45 29 3d 3d 30 0a 20 20 20 20 20 20 20  LETE)==0.       
26220 20 26 26 20 28 70 43 2d 3e 77 72 46 6c 61 67 20   && (pC->wrFlag 
26230 26 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45  & OPFLAG_FORDELE
26240 54 45 29 3d 3d 30 0a 20 20 20 20 20 20 29 7b 0a  TE)==0.      ){.
26250 20 20 20 20 20 20 6e 45 78 74 72 61 44 65 6c 65        nExtraDele
26260 74 65 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  te++;.    }.    
26270 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50  if( pOp->p2 & OP
26280 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 7b 0a  FLAG_NCHANGE ){.
26290 20 20 20 20 20 20 6e 45 78 74 72 61 44 65 6c 65        nExtraDele
262a0 74 65 2d 2d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  te--;.    }.  }.
262b0 23 65 6e 64 69 66 0a 0a 20 20 72 63 20 3d 20 73  #endif..  rc = s
262c0 71 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65 74  qlite3BtreeDelet
262d0 65 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  e(pC->uc.pCursor
262e0 2c 20 70 4f 70 2d 3e 70 35 29 3b 0a 20 20 70 43  , pOp->p5);.  pC
262f0 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
26300 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70  CACHE_STALE;.  p
26310 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20  C->seekResult = 
26320 30 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  0;.  if( rc ) go
26330 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
26340 65 72 72 6f 72 3b 0a 0a 20 20 2f 2a 20 49 6e 76  error;..  /* Inv
26350 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d 68  oke the update-h
26360 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e  ook if required.
26370 20 2a 2f 0a 20 20 69 66 28 20 6f 70 66 6c 61 67   */.  if( opflag
26380 73 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  s & OPFLAG_NCHAN
26390 47 45 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 43 68  GE ){.    p->nCh
263a0 61 6e 67 65 2b 2b 3b 0a 20 20 20 20 69 66 28 20  ange++;.    if( 
263b0 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  db->xUpdateCallb
263c0 61 63 6b 20 26 26 20 48 61 73 52 6f 77 69 64 28  ack && HasRowid(
263d0 70 54 61 62 29 20 29 7b 0a 20 20 20 20 20 20 64  pTab) ){.      d
263e0 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  b->xUpdateCallba
263f0 63 6b 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72  ck(db->pUpdateAr
26400 67 2c 20 53 51 4c 49 54 45 5f 44 45 4c 45 54 45  g, SQLITE_DELETE
26410 2c 20 7a 44 62 2c 20 70 54 61 62 2d 3e 7a 4e 61  , zDb, pTab->zNa
26420 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 20 70 43  me,.          pC
26430 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 29 3b  ->movetoTarget);
26440 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
26450 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20  C->iDb>=0 );.   
26460 20 7d 0a 20 20 7d 0a 0a 20 20 62 72 65 61 6b 3b   }.  }..  break;
26470 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  .}./* Opcode: Re
26480 73 65 74 43 6f 75 6e 74 20 2a 20 2a 20 2a 20 2a  setCount * * * *
26490 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c   *.**.** The val
264a0 75 65 20 6f 66 20 74 68 65 20 63 68 61 6e 67 65  ue of the change
264b0 20 63 6f 75 6e 74 65 72 20 69 73 20 63 6f 70 69   counter is copi
264c0 65 64 20 74 6f 20 74 68 65 20 64 61 74 61 62 61  ed to the databa
264d0 73 65 20 68 61 6e 64 6c 65 0a 2a 2a 20 63 68 61  se handle.** cha
264e0 6e 67 65 20 63 6f 75 6e 74 65 72 20 28 72 65 74  nge counter (ret
264f0 75 72 6e 65 64 20 62 79 20 73 75 62 73 65 71 75  urned by subsequ
26500 65 6e 74 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c  ent calls to sql
26510 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 29 2e  ite3_changes()).
26520 0a 2a 2a 20 54 68 65 6e 20 74 68 65 20 56 4d 73  .** Then the VMs
26530 20 69 6e 74 65 72 6e 61 6c 20 63 68 61 6e 67 65   internal change
26540 20 63 6f 75 6e 74 65 72 20 72 65 73 65 74 73 20   counter resets 
26550 74 6f 20 30 2e 0a 2a 2a 20 54 68 69 73 20 69 73  to 0..** This is
26560 20 75 73 65 64 20 62 79 20 74 72 69 67 67 65 72   used by trigger
26570 20 70 72 6f 67 72 61 6d 73 2e 0a 2a 2f 0a 63 61   programs..*/.ca
26580 73 65 20 4f 50 5f 52 65 73 65 74 43 6f 75 6e 74  se OP_ResetCount
26590 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  : {.  sqlite3Vdb
265a0 65 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20  eSetChanges(db, 
265b0 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 70  p->nChange);.  p
265c0 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20  ->nChange = 0;. 
265d0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
265e0 63 6f 64 65 3a 20 53 6f 72 74 65 72 43 6f 6d 70  code: SorterComp
265f0 61 72 65 20 50 31 20 50 32 20 50 33 20 50 34 0a  are P1 P2 P3 P4.
26600 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
26610 6b 65 79 28 50 31 29 21 3d 74 72 69 6d 28 72 5b  key(P1)!=trim(r[
26620 50 33 5d 2c 50 34 29 20 67 6f 74 6f 20 50 32 0a  P3],P4) goto P2.
26630 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 73 6f  **.** P1 is a so
26640 72 74 65 72 20 63 75 72 73 6f 72 2e 20 54 68 69  rter cursor. Thi
26650 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f  s instruction co
26660 6d 70 61 72 65 73 20 61 20 70 72 65 66 69 78 20  mpares a prefix 
26670 6f 66 20 74 68 65 0a 2a 2a 20 72 65 63 6f 72 64  of the.** record
26680 20 62 6c 6f 62 20 69 6e 20 72 65 67 69 73 74 65   blob in registe
26690 72 20 50 33 20 61 67 61 69 6e 73 74 20 61 20 70  r P3 against a p
266a0 72 65 66 69 78 20 6f 66 20 74 68 65 20 65 6e 74  refix of the ent
266b0 72 79 20 74 68 61 74 20 0a 2a 2a 20 74 68 65 20  ry that .** the 
266c0 73 6f 72 74 65 72 20 63 75 72 73 6f 72 20 63 75  sorter cursor cu
266d0 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 73 20 74  rrently points t
266e0 6f 2e 20 20 4f 6e 6c 79 20 74 68 65 20 66 69 72  o.  Only the fir
266f0 73 74 20 50 34 20 66 69 65 6c 64 73 0a 2a 2a 20  st P4 fields.** 
26700 6f 66 20 72 5b 50 33 5d 20 61 6e 64 20 74 68 65  of r[P3] and the
26710 20 73 6f 72 74 65 72 20 72 65 63 6f 72 64 20 61   sorter record a
26720 72 65 20 63 6f 6d 70 61 72 65 64 2e 0a 2a 2a 0a  re compared..**.
26730 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50 33 20  ** If either P3 
26740 6f 72 20 74 68 65 20 73 6f 72 74 65 72 20 63 6f  or the sorter co
26750 6e 74 61 69 6e 73 20 61 20 4e 55 4c 4c 20 69 6e  ntains a NULL in
26760 20 6f 6e 65 20 6f 66 20 74 68 65 69 72 20 73 69   one of their si
26770 67 6e 69 66 69 63 61 6e 74 0a 2a 2a 20 66 69 65  gnificant.** fie
26780 6c 64 73 20 28 6e 6f 74 20 63 6f 75 6e 74 69 6e  lds (not countin
26790 67 20 74 68 65 20 50 34 20 66 69 65 6c 64 73 20  g the P4 fields 
267a0 61 74 20 74 68 65 20 65 6e 64 20 77 68 69 63 68  at the end which
267b0 20 61 72 65 20 69 67 6e 6f 72 65 64 29 20 74 68   are ignored) th
267c0 65 6e 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72  en.** the compar
267d0 69 73 6f 6e 20 69 73 20 61 73 73 75 6d 65 64 20  ison is assumed 
267e0 74 6f 20 62 65 20 65 71 75 61 6c 2e 0a 2a 2a 0a  to be equal..**.
267f0 2a 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20  ** Fall through 
26800 74 6f 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  to next instruct
26810 69 6f 6e 20 69 66 20 74 68 65 20 74 77 6f 20 72  ion if the two r
26820 65 63 6f 72 64 73 20 63 6f 6d 70 61 72 65 20 65  ecords compare e
26830 71 75 61 6c 20 74 6f 0a 2a 2a 20 65 61 63 68 20  qual to.** each 
26840 6f 74 68 65 72 2e 20 20 4a 75 6d 70 20 74 6f 20  other.  Jump to 
26850 50 32 20 69 66 20 74 68 65 79 20 61 72 65 20 64  P2 if they are d
26860 69 66 66 65 72 65 6e 74 2e 0a 2a 2f 0a 63 61 73  ifferent..*/.cas
26870 65 20 4f 50 5f 53 6f 72 74 65 72 43 6f 6d 70 61  e OP_SorterCompa
26880 72 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  re: {.  VdbeCurs
26890 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65  or *pC;.  int re
268a0 73 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 43 6f 6c  s;.  int nKeyCol
268b0 3b 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  ;..  pC = p->apC
268c0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
268d0 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28  ssert( isSorter(
268e0 70 43 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  pC) );.  assert(
268f0 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
26900 5f 49 4e 54 33 32 20 29 3b 0a 20 20 70 49 6e 33  _INT32 );.  pIn3
26910 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
26920 5d 3b 0a 20 20 6e 4b 65 79 43 6f 6c 20 3d 20 70  ];.  nKeyCol = p
26930 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 72 65 73 20  Op->p4.i;.  res 
26940 3d 20 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  = 0;.  rc = sqli
26950 74 65 33 56 64 62 65 53 6f 72 74 65 72 43 6f 6d  te3VdbeSorterCom
26960 70 61 72 65 28 70 43 2c 20 70 49 6e 33 2c 20 6e  pare(pC, pIn3, n
26970 4b 65 79 43 6f 6c 2c 20 26 72 65 73 29 3b 0a 20  KeyCol, &res);. 
26980 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
26990 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66  (res!=0,2);.  if
269a0 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
269b0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
269c0 20 20 69 66 28 20 72 65 73 20 29 20 67 6f 74 6f    if( res ) goto
269d0 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62   jump_to_p2;.  b
269e0 72 65 61 6b 3b 0a 7d 3b 0a 0a 2f 2a 20 4f 70 63  reak;.};../* Opc
269f0 6f 64 65 3a 20 53 6f 72 74 65 72 44 61 74 61 20  ode: SorterData 
26a00 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
26a10 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
26a20 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65  data.**.** Write
26a30 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
26a40 32 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 6f  2 the current so
26a50 72 74 65 72 20 64 61 74 61 20 66 6f 72 20 73 6f  rter data for so
26a60 72 74 65 72 20 63 75 72 73 6f 72 20 50 31 2e 0a  rter cursor P1..
26a70 2a 2a 20 54 68 65 6e 20 63 6c 65 61 72 20 74 68  ** Then clear th
26a80 65 20 63 6f 6c 75 6d 6e 20 68 65 61 64 65 72 20  e column header 
26a90 63 61 63 68 65 20 6f 6e 20 63 75 72 73 6f 72 20  cache on cursor 
26aa0 50 33 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  P3..**.** This o
26ab0 70 63 6f 64 65 20 69 73 20 6e 6f 72 6d 61 6c 6c  pcode is normall
26ac0 79 20 75 73 65 20 74 6f 20 6d 6f 76 65 20 61 20  y use to move a 
26ad0 72 65 63 6f 72 64 20 6f 75 74 20 6f 66 20 74 68  record out of th
26ae0 65 20 73 6f 72 74 65 72 20 61 6e 64 20 69 6e 74  e sorter and int
26af0 6f 0a 2a 2a 20 61 20 72 65 67 69 73 74 65 72 20  o.** a register 
26b00 74 68 61 74 20 69 73 20 74 68 65 20 73 6f 75 72  that is the sour
26b10 63 65 20 66 6f 72 20 61 20 70 73 65 75 64 6f 2d  ce for a pseudo-
26b20 74 61 62 6c 65 20 63 75 72 73 6f 72 20 63 72 65  table cursor cre
26b30 61 74 65 64 20 75 73 69 6e 67 0a 2a 2a 20 4f 70  ated using.** Op
26b40 65 6e 50 73 65 75 64 6f 2e 20 20 54 68 61 74 20  enPseudo.  That 
26b50 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 75 72  pseudo-table cur
26b60 73 6f 72 20 69 73 20 74 68 65 20 6f 6e 65 20 74  sor is the one t
26b70 68 61 74 20 69 73 20 69 64 65 6e 74 69 66 69 65  hat is identifie
26b80 64 20 62 79 0a 2a 2a 20 70 61 72 61 6d 65 74 65  d by.** paramete
26b90 72 20 50 33 2e 20 20 43 6c 65 61 72 69 6e 67 20  r P3.  Clearing 
26ba0 74 68 65 20 50 33 20 63 6f 6c 75 6d 6e 20 63 61  the P3 column ca
26bb0 63 68 65 20 61 73 20 70 61 72 74 20 6f 66 20 74  che as part of t
26bc0 68 69 73 20 6f 70 63 6f 64 65 20 73 61 76 65 73  his opcode saves
26bd0 0a 2a 2a 20 75 73 20 66 72 6f 6d 20 68 61 76 69  .** us from havi
26be0 6e 67 20 74 6f 20 69 73 73 75 65 20 61 20 73 65  ng to issue a se
26bf0 70 61 72 61 74 65 20 4e 75 6c 6c 52 6f 77 20 69  parate NullRow i
26c00 6e 73 74 72 75 63 74 69 6f 6e 20 74 6f 20 63 6c  nstruction to cl
26c10 65 61 72 20 74 68 61 74 20 63 61 63 68 65 2e 0a  ear that cache..
26c20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65  */.case OP_Sorte
26c30 72 44 61 74 61 3a 20 7b 0a 20 20 56 64 62 65 43  rData: {.  VdbeC
26c40 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 70 4f  ursor *pC;..  pO
26c50 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
26c60 70 32 5d 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  p2];.  pC = p->a
26c70 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
26c80 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65   assert( isSorte
26c90 72 28 70 43 29 20 29 3b 0a 20 20 72 63 20 3d 20  r(pC) );.  rc = 
26ca0 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65  sqlite3VdbeSorte
26cb0 72 52 6f 77 6b 65 79 28 70 43 2c 20 70 4f 75 74  rRowkey(pC, pOut
26cc0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 21  );.  assert( rc!
26cd0 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70  =SQLITE_OK || (p
26ce0 4f 75 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Out->flags & MEM
26cf0 5f 42 6c 6f 62 29 20 29 3b 0a 20 20 61 73 73 65  _Blob) );.  asse
26d00 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
26d10 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
26d20 72 73 6f 72 20 29 3b 0a 20 20 69 66 28 20 72 63  rsor );.  if( rc
26d30 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
26d40 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 2d  e_to_error;.  p-
26d50 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 33 5d 2d  >apCsr[pOp->p3]-
26d60 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
26d70 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 62 72  ACHE_STALE;.  br
26d80 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
26d90 65 3a 20 52 6f 77 44 61 74 61 20 50 31 20 50 32  e: RowData P1 P2
26da0 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
26db0 73 69 73 3a 20 72 5b 50 32 5d 3d 64 61 74 61 0a  sis: r[P2]=data.
26dc0 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f  **.** Write into
26dd0 20 72 65 67 69 73 74 65 72 20 50 32 20 74 68 65   register P2 the
26de0 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20 63 6f   complete row co
26df0 6e 74 65 6e 74 20 66 6f 72 20 74 68 65 20 72 6f  ntent for the ro
26e00 77 20 61 74 20 0a 2a 2a 20 77 68 69 63 68 20 63  w at .** which c
26e10 75 72 73 6f 72 20 50 31 20 69 73 20 63 75 72 72  ursor P1 is curr
26e20 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 2e 0a  ently pointing..
26e30 2a 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20 69  ** There is no i
26e40 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66  nterpretation of
26e50 20 74 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20   the data.  .** 
26e60 49 74 20 69 73 20 6a 75 73 74 20 63 6f 70 69 65  It is just copie
26e70 64 20 6f 6e 74 6f 20 74 68 65 20 50 32 20 72 65  d onto the P2 re
26e80 67 69 73 74 65 72 20 65 78 61 63 74 6c 79 20 61  gister exactly a
26e90 73 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e  s .** it is foun
26ea0 64 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  d in the databas
26eb0 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  e file..**.** If
26ec0 20 63 75 72 73 6f 72 20 50 31 20 69 73 20 61 6e   cursor P1 is an
26ed0 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 74 68 65   index, then the
26ee0 20 63 6f 6e 74 65 6e 74 20 69 73 20 74 68 65 20   content is the 
26ef0 6b 65 79 20 6f 66 20 74 68 65 20 72 6f 77 2e 0a  key of the row..
26f00 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 32 20  ** If cursor P2 
26f10 69 73 20 61 20 74 61 62 6c 65 2c 20 74 68 65 6e  is a table, then
26f20 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 65 78 74   the content ext
26f30 72 61 63 74 65 64 20 69 73 20 74 68 65 20 64 61  racted is the da
26f40 74 61 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ta..**.** If the
26f50 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20   P1 cursor must 
26f60 62 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61  be pointing to a
26f70 20 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20   valid row (not 
26f80 61 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f  a NULL row).** o
26f90 66 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20  f a real table, 
26fa0 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62  not a pseudo-tab
26fb0 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 21  le..**.** If P3!
26fc0 3d 30 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63  =0 then this opc
26fd0 6f 64 65 20 69 73 20 61 6c 6c 6f 77 65 64 20 74  ode is allowed t
26fe0 6f 20 6d 61 6b 65 20 61 6e 20 65 70 68 65 72 6d  o make an epherm
26ff0 65 72 61 6c 20 70 6f 69 6e 74 65 72 0a 2a 2a 20  eral pointer.** 
27000 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  into the databas
27010 65 20 70 61 67 65 2e 20 20 54 68 61 74 20 6d 65  e page.  That me
27020 61 6e 73 20 74 68 61 74 20 74 68 65 20 63 6f 6e  ans that the con
27030 74 65 6e 74 20 6f 66 20 74 68 65 20 6f 75 74 70  tent of the outp
27040 75 74 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 77  ut.** register w
27050 69 6c 6c 20 62 65 20 69 6e 76 61 6c 69 64 61 74  ill be invalidat
27060 65 64 20 61 73 20 73 6f 6f 6e 20 61 73 20 74 68  ed as soon as th
27070 65 20 63 75 72 73 6f 72 20 6d 6f 76 65 73 20 2d  e cursor moves -
27080 20 69 6e 63 6c 75 64 69 6e 67 0a 2a 2a 20 6d 6f   including.** mo
27090 76 65 73 20 63 61 75 73 65 64 20 62 79 20 6f 74  ves caused by ot
270a0 68 65 72 20 63 75 72 73 6f 72 73 20 74 68 61 74  her cursors that
270b0 20 22 73 61 76 65 22 20 74 68 65 20 74 68 65 20   "save" the the 
270c0 63 75 72 72 65 6e 74 20 63 75 72 73 6f 72 73 0a  current cursors.
270d0 2a 2a 20 70 6f 73 69 74 69 6f 6e 20 69 6e 20 6f  ** position in o
270e0 72 64 65 72 20 74 68 61 74 20 74 68 65 79 20 63  rder that they c
270f0 61 6e 20 77 72 69 74 65 20 74 6f 20 74 68 65 20  an write to the 
27100 73 61 6d 65 20 74 61 62 6c 65 2e 20 20 49 66 20  same table.  If 
27110 50 33 3d 3d 30 0a 2a 2a 20 74 68 65 6e 20 61 20  P3==0.** then a 
27120 63 6f 70 79 20 6f 66 20 74 68 65 20 64 61 74 61  copy of the data
27130 20 69 73 20 6d 61 64 65 20 69 6e 74 6f 20 6d 65   is made into me
27140 6d 6f 72 79 2e 20 20 50 33 21 3d 30 20 69 73 20  mory.  P3!=0 is 
27150 66 61 73 74 65 72 2c 20 62 75 74 0a 2a 2a 20 50  faster, but.** P
27160 33 3d 3d 30 20 69 73 20 73 61 66 65 72 2e 0a 2a  3==0 is safer..*
27170 2a 0a 2a 2a 20 49 66 20 50 33 21 3d 30 20 74 68  *.** If P3!=0 th
27180 65 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  en the content o
27190 66 20 74 68 65 20 50 32 20 72 65 67 69 73 74 65  f the P2 registe
271a0 72 20 69 73 20 75 6e 73 75 69 74 61 62 6c 65 20  r is unsuitable 
271b0 66 6f 72 20 75 73 65 0a 2a 2a 20 69 6e 20 4f 50  for use.** in OP
271c0 5f 52 65 73 75 6c 74 20 61 6e 64 20 61 6e 79 20  _Result and any 
271d0 4f 50 5f 52 65 73 75 6c 74 20 77 69 6c 6c 20 69  OP_Result will i
271e0 6e 76 61 6c 69 64 61 74 65 20 74 68 65 20 50 32  nvalidate the P2
271f0 20 72 65 67 69 73 74 65 72 20 63 6f 6e 74 65 6e   register conten
27200 74 2e 0a 2a 2a 20 54 68 65 20 50 32 20 72 65 67  t..** The P2 reg
27210 69 73 74 65 72 20 63 6f 6e 74 65 6e 74 20 69 73  ister content is
27220 20 69 6e 76 61 6c 69 64 61 74 65 64 20 62 79 20   invalidated by 
27230 6f 70 63 6f 64 65 73 20 6c 69 6b 65 20 4f 50 5f  opcodes like OP_
27240 46 75 6e 63 74 69 6f 6e 20 6f 72 0a 2a 2a 20 62  Function or.** b
27250 79 20 61 6e 79 20 75 73 65 20 6f 66 20 61 6e 6f  y any use of ano
27260 74 68 65 72 20 63 75 72 73 6f 72 20 70 6f 69 6e  ther cursor poin
27270 74 69 6e 67 20 74 6f 20 74 68 65 20 73 61 6d 65  ting to the same
27280 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20   table..*/.case 
27290 4f 50 5f 52 6f 77 44 61 74 61 3a 20 7b 0a 20 20  OP_RowData: {.  
272a0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
272b0 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
272c0 72 3b 0a 20 20 75 33 32 20 6e 3b 0a 0a 20 20 70  r;.  u32 n;..  p
272d0 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
272e0 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 0a 20  ease(p, pOp);.. 
272f0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
27300 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
27310 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
27320 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
27330 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
27340 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
27350 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
27360 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
27370 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53  );.  assert( isS
27380 6f 72 74 65 72 28 70 43 29 3d 3d 30 20 29 3b 0a  orter(pC)==0 );.
27390 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 6e 75    assert( pC->nu
273a0 6c 6c 52 6f 77 3d 3d 30 20 29 3b 0a 20 20 61 73  llRow==0 );.  as
273b0 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75  sert( pC->uc.pCu
273c0 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 70 43 72  rsor!=0 );.  pCr
273d0 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72  sr = pC->uc.pCur
273e0 73 6f 72 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 4f  sor;..  /* The O
273f0 50 5f 52 6f 77 44 61 74 61 20 6f 70 63 6f 64 65  P_RowData opcode
27400 73 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f 77 20  s always follow 
27410 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72 0a  OP_NotExists or.
27420 20 20 2a 2a 20 4f 50 5f 53 65 65 6b 52 6f 77 69    ** OP_SeekRowi
27430 64 20 6f 72 20 4f 50 5f 52 65 77 69 6e 64 2f 4f  d or OP_Rewind/O
27440 70 5f 4e 65 78 74 20 77 69 74 68 20 6e 6f 20 69  p_Next with no i
27450 6e 74 65 72 76 65 6e 69 6e 67 20 69 6e 73 74 72  ntervening instr
27460 75 63 74 69 6f 6e 73 0a 20 20 2a 2a 20 74 68 61  uctions.  ** tha
27470 74 20 6d 69 67 68 74 20 69 6e 76 61 6c 69 64 61  t might invalida
27480 74 65 20 74 68 65 20 63 75 72 73 6f 72 2e 0a 20  te the cursor.. 
27490 20 2a 2a 20 49 66 20 74 68 69 73 20 77 68 65 72   ** If this wher
274a0 65 20 6e 6f 74 20 74 68 65 20 63 61 73 65 2c 20  e not the case, 
274b0 6f 6e 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  on of the follow
274c0 69 6e 67 20 61 73 73 65 72 74 28 29 73 0a 20 20  ing assert()s.  
274d0 2a 2a 20 77 6f 75 6c 64 20 66 61 69 6c 2e 20 20  ** would fail.  
274e0 53 68 6f 75 6c 64 20 74 68 69 73 20 65 76 65 72  Should this ever
274f0 20 63 68 61 6e 67 65 20 28 62 65 63 61 75 73 65   change (because
27500 20 6f 66 20 63 68 61 6e 67 65 73 20 69 6e 20 74   of changes in t
27510 68 65 20 63 6f 64 65 0a 20 20 2a 2a 20 67 65 6e  he code.  ** gen
27520 65 72 61 74 6f 72 29 20 74 68 65 6e 20 74 68 65  erator) then the
27530 20 66 69 78 20 77 6f 75 6c 64 20 62 65 20 74 6f   fix would be to
27540 20 69 6e 73 65 72 74 20 61 20 63 61 6c 6c 20 74   insert a call t
27550 6f 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64  o.  ** sqlite3Vd
27560 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29  beCursorMoveto()
27570 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ..  */.  assert(
27580 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
27590 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  eto==0 );.  asse
275a0 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65  rt( sqlite3Btree
275b0 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43  CursorIsValid(pC
275c0 72 73 72 29 20 29 3b 0a 23 69 66 20 30 20 20 2f  rsr) );.#if 0  /
275d0 2a 20 4e 6f 74 20 72 65 71 75 69 72 65 64 20 64  * Not required d
275e0 75 65 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f  ue to the previo
275f0 75 73 20 74 6f 20 61 73 73 65 72 74 28 29 20 73  us to assert() s
27600 74 61 74 65 6d 65 6e 74 73 20 2a 2f 0a 20 20 72  tatements */.  r
27610 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
27620 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b  ursorMoveto(pC);
27630 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
27640 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72  E_OK ) goto abor
27650 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
27660 23 65 6e 64 69 66 0a 0a 20 20 6e 20 3d 20 73 71  #endif..  n = sq
27670 6c 69 74 65 33 42 74 72 65 65 50 61 79 6c 6f 61  lite3BtreePayloa
27680 64 53 69 7a 65 28 70 43 72 73 72 29 3b 0a 20 20  dSize(pCrsr);.  
27690 69 66 28 20 6e 3e 28 75 33 32 29 64 62 2d 3e 61  if( n>(u32)db->a
276a0 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
276b0 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20  IT_LENGTH] ){.  
276c0 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
276d0 20 20 7d 0a 20 20 74 65 73 74 63 61 73 65 28 20    }.  testcase( 
276e0 6e 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73  n==0 );.  rc = s
276f0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f  qlite3VdbeMemFro
27700 6d 42 74 72 65 65 28 70 43 72 73 72 2c 20 30 2c  mBtree(pCrsr, 0,
27710 20 6e 2c 20 70 4f 75 74 29 3b 0a 20 20 69 66 28   n, pOut);.  if(
27720 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
27730 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
27740 20 69 66 28 20 21 70 4f 70 2d 3e 70 33 20 29 20   if( !pOp->p3 ) 
27750 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70  Deephemeralize(p
27760 4f 75 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d  Out);.  UPDATE_M
27770 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
27780 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
27790 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75  ACE(pOp->p2, pOu
277a0 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
277b0 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 69 64  /* Opcode: Rowid
277c0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
277d0 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
277e0 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 53 74 6f 72  rowid.**.** Stor
277f0 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
27800 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63   an integer whic
27810 68 20 69 73 20 74 68 65 20 6b 65 79 20 6f 66 20  h is the key of 
27820 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20  the table entry 
27830 74 68 61 74 0a 2a 2a 20 50 31 20 69 73 20 63 75  that.** P1 is cu
27840 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20 74 6f  rrently point to
27850 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 63 61 6e 20 62  ..**.** P1 can b
27860 65 20 65 69 74 68 65 72 20 61 6e 20 6f 72 64 69  e either an ordi
27870 6e 61 72 79 20 74 61 62 6c 65 20 6f 72 20 61 20  nary table or a 
27880 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20  virtual table.  
27890 54 68 65 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a  There used to.**
278a0 20 62 65 20 61 20 73 65 70 61 72 61 74 65 20 4f   be a separate O
278b0 50 5f 56 52 6f 77 69 64 20 6f 70 63 6f 64 65 20  P_VRowid opcode 
278c0 66 6f 72 20 75 73 65 20 77 69 74 68 20 76 69 72  for use with vir
278d0 74 75 61 6c 20 74 61 62 6c 65 73 2c 20 62 75 74  tual tables, but
278e0 20 74 68 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63   this.** one opc
278f0 6f 64 65 20 6e 6f 77 20 77 6f 72 6b 73 20 66 6f  ode now works fo
27900 72 20 62 6f 74 68 20 74 61 62 6c 65 20 74 79 70  r both table typ
27910 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  es..*/.case OP_R
27920 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20  owid: {         
27930 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
27940 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
27950 2a 70 43 3b 0a 20 20 69 36 34 20 76 3b 0a 20 20  *pC;.  i64 v;.  
27960 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
27970 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c  tab;.  const sql
27980 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
27990 64 75 6c 65 3b 0a 0a 20 20 70 4f 75 74 20 3d 20  dule;..  pOut = 
279a0 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
279b0 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65 72 74  , pOp);.  assert
279c0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
279d0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
279e0 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
279f0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
27a00 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
27a10 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
27a20 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52 54 59  >eCurType!=CURTY
27a30 50 45 5f 50 53 45 55 44 4f 20 7c 7c 20 70 43 2d  PE_PSEUDO || pC-
27a40 3e 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20 20 69 66  >nullRow );.  if
27a50 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b  ( pC->nullRow ){
27a60 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  .    pOut->flags
27a70 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20   = MEM_Null;.   
27a80 20 62 72 65 61 6b 3b 0a 20 20 7d 65 6c 73 65 20   break;.  }else 
27a90 69 66 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  if( pC->deferred
27aa0 4d 6f 76 65 74 6f 20 29 7b 0a 20 20 20 20 76 20  Moveto ){.    v 
27ab0 3d 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67  = pC->movetoTarg
27ac0 65 74 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  et;.#ifndef SQLI
27ad0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
27ae0 41 42 4c 45 0a 20 20 7d 65 6c 73 65 20 69 66 28  ABLE.  }else if(
27af0 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
27b00 55 52 54 59 50 45 5f 56 54 41 42 20 29 7b 0a 20  URTYPE_VTAB ){. 
27b10 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75     assert( pC->u
27b20 63 2e 70 56 43 75 72 21 3d 30 20 29 3b 0a 20 20  c.pVCur!=0 );.  
27b30 20 20 70 56 74 61 62 20 3d 20 70 43 2d 3e 75 63    pVtab = pC->uc
27b40 2e 70 56 43 75 72 2d 3e 70 56 74 61 62 3b 0a 20  .pVCur->pVtab;. 
27b50 20 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74     pModule = pVt
27b60 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 20  ab->pModule;.   
27b70 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65   assert( pModule
27b80 2d 3e 78 52 6f 77 69 64 20 29 3b 0a 20 20 20 20  ->xRowid );.    
27b90 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 52  rc = pModule->xR
27ba0 6f 77 69 64 28 70 43 2d 3e 75 63 2e 70 56 43 75  owid(pC->uc.pVCu
27bb0 72 2c 20 26 76 29 3b 0a 20 20 20 20 73 71 6c 69  r, &v);.    sqli
27bc0 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72  te3VtabImportErr
27bd0 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20  msg(p, pVtab);. 
27be0 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f     if( rc ) goto
27bf0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
27c00 72 6f 72 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53  ror;.#endif /* S
27c10 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
27c20 41 4c 54 41 42 4c 45 20 2a 2f 0a 20 20 7d 65 6c  ALTABLE */.  }el
27c30 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
27c40 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
27c50 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
27c60 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75     assert( pC->u
27c70 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  c.pCursor!=0 );.
27c80 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
27c90 56 64 62 65 43 75 72 73 6f 72 52 65 73 74 6f 72  VdbeCursorRestor
27ca0 65 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20 72  e(pC);.    if( r
27cb0 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
27cc0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
27cd0 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77   if( pC->nullRow
27ce0 20 29 7b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e   ){.      pOut->
27cf0 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c  flags = MEM_Null
27d00 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;.      break;. 
27d10 20 20 20 7d 0a 20 20 20 20 76 20 3d 20 73 71 6c     }.    v = sql
27d20 69 74 65 33 42 74 72 65 65 49 6e 74 65 67 65 72  ite3BtreeInteger
27d30 4b 65 79 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  Key(pC->uc.pCurs
27d40 6f 72 29 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d  or);.  }.  pOut-
27d50 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65 61  >u.i = v;.  brea
27d60 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
27d70 20 4e 75 6c 6c 52 6f 77 20 50 31 20 2a 20 2a 20   NullRow P1 * * 
27d80 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74  * *.**.** Move t
27d90 68 65 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20  he cursor P1 to 
27da0 61 20 6e 75 6c 6c 20 72 6f 77 2e 20 20 41 6e 79  a null row.  Any
27db0 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 65 72 61   OP_Column opera
27dc0 74 69 6f 6e 73 0a 2a 2a 20 74 68 61 74 20 6f 63  tions.** that oc
27dd0 63 75 72 20 77 68 69 6c 65 20 74 68 65 20 63 75  cur while the cu
27de0 72 73 6f 72 20 69 73 20 6f 6e 20 74 68 65 20 6e  rsor is on the n
27df0 75 6c 6c 20 72 6f 77 20 77 69 6c 6c 20 61 6c 77  ull row will alw
27e00 61 79 73 0a 2a 2a 20 77 72 69 74 65 20 61 20 4e  ays.** write a N
27e10 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ULL..*/.case OP_
27e20 4e 75 6c 6c 52 6f 77 3a 20 7b 0a 20 20 56 64 62  NullRow: {.  Vdb
27e30 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20  eCursor *pC;..  
27e40 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
27e50 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
27e60 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
27e70 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
27e80 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
27e90 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 6e  pC!=0 );.  pC->n
27ea0 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43  ullRow = 1;.  pC
27eb0 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
27ec0 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69  CACHE_STALE;.  i
27ed0 66 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  f( pC->eCurType=
27ee0 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
27ef0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  {.    assert( pC
27f00 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20  ->uc.pCursor!=0 
27f10 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74  );.    sqlite3Bt
27f20 72 65 65 43 6c 65 61 72 43 75 72 73 6f 72 28 70  reeClearCursor(p
27f30 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a  C->uc.pCursor);.
27f40 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
27f50 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 45  /* Opcode: SeekE
27f60 6e 64 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  nd P1 * * * *.**
27f70 0a 2a 2a 20 50 6f 73 69 74 69 6f 6e 20 63 75 72  .** Position cur
27f80 73 6f 72 20 50 31 20 61 74 20 74 68 65 20 65 6e  sor P1 at the en
27f90 64 20 6f 66 20 74 68 65 20 62 74 72 65 65 20 66  d of the btree f
27fa0 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 20 6f  or the purpose o
27fb0 66 0a 2a 2a 20 61 70 70 65 6e 64 69 6e 67 20 61  f.** appending a
27fc0 20 6e 65 77 20 65 6e 74 72 79 20 6f 6e 74 6f 20   new entry onto 
27fd0 74 68 65 20 62 74 72 65 65 2e 0a 2a 2a 0a 2a 2a  the btree..**.**
27fe0 20 49 74 20 69 73 20 61 73 73 75 6d 65 64 20 74   It is assumed t
27ff0 68 61 74 20 74 68 65 20 63 75 72 73 6f 72 20 69  hat the cursor i
28000 73 20 75 73 65 64 20 6f 6e 6c 79 20 66 6f 72 20  s used only for 
28010 61 70 70 65 6e 64 69 6e 67 20 61 6e 64 20 73 6f  appending and so
28020 0a 2a 2a 20 69 66 20 74 68 65 20 63 75 72 73 6f  .** if the curso
28030 72 20 69 73 20 76 61 6c 69 64 2c 20 74 68 65 6e  r is valid, then
28040 20 74 68 65 20 63 75 72 73 6f 72 20 6d 75 73 74   the cursor must
28050 20 61 6c 72 65 61 64 79 20 62 65 20 70 6f 69 6e   already be poin
28060 74 69 6e 67 0a 2a 2a 20 61 74 20 74 68 65 20 65  ting.** at the e
28070 6e 64 20 6f 66 20 74 68 65 20 62 74 72 65 65 20  nd of the btree 
28080 61 6e 64 20 73 6f 20 6e 6f 20 63 68 61 6e 67 65  and so no change
28090 73 20 61 72 65 20 6d 61 64 65 20 74 6f 0a 2a 2a  s are made to.**
280a0 20 74 68 65 20 63 75 72 73 6f 72 2e 0a 2a 2f 0a   the cursor..*/.
280b0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 61 73 74 20  /* Opcode: Last 
280c0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
280d0 2a 20 54 68 65 20 6e 65 78 74 20 75 73 65 20 6f  * The next use o
280e0 66 20 74 68 65 20 52 6f 77 69 64 20 6f 72 20 43  f the Rowid or C
280f0 6f 6c 75 6d 6e 20 6f 72 20 50 72 65 76 20 69 6e  olumn or Prev in
28100 73 74 72 75 63 74 69 6f 6e 20 66 6f 72 20 50 31  struction for P1
28110 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72 20   .** will refer 
28120 74 6f 20 74 68 65 20 6c 61 73 74 20 65 6e 74 72  to the last entr
28130 79 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  y in the databas
28140 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
28150 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62 6c  ..** If the tabl
28160 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 65 6d  e or index is em
28170 70 74 79 20 61 6e 64 20 50 32 3e 30 2c 20 74 68  pty and P2>0, th
28180 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  en jump immediat
28190 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66  ely to P2..** If
281a0 20 50 32 20 69 73 20 30 20 6f 72 20 69 66 20 74   P2 is 0 or if t
281b0 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
281c0 78 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20  x is not empty, 
281d0 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20  fall through.** 
281e0 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  to the following
281f0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
28200 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
28210 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f  leaves the curso
28220 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  r configured to 
28230 6d 6f 76 65 20 69 6e 20 72 65 76 65 72 73 65 20  move in reverse 
28240 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74  order,.** from t
28250 68 65 20 65 6e 64 20 74 6f 77 61 72 64 20 74 68  he end toward th
28260 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e  e beginning.  In
28270 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
28280 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63  e cursor is.** c
28290 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65  onfigured to use
282a0 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e   Prev, not Next.
282b0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b  .*/.case OP_Seek
282c0 45 6e 64 3a 0a 63 61 73 65 20 4f 50 5f 4c 61 73  End:.case OP_Las
282d0 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  t: {        /* j
282e0 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ump */.  VdbeCur
282f0 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
28300 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
28310 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74  t res;..  assert
28320 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
28330 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
28340 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
28350 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
28360 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
28370 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
28380 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
28390 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 70 43  PE_BTREE );.  pC
283a0 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75  rsr = pC->uc.pCu
283b0 72 73 6f 72 3b 0a 20 20 72 65 73 20 3d 20 30 3b  rsor;.  res = 0;
283c0 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72  .  assert( pCrsr
283d0 21 3d 30 20 29 3b 0a 23 69 66 64 65 66 20 53 51  !=0 );.#ifdef SQ
283e0 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d  LITE_DEBUG.  pC-
283f0 3e 73 65 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f  >seekOp = pOp->o
28400 70 63 6f 64 65 3b 0a 23 65 6e 64 69 66 0a 20 20  pcode;.#endif.  
28410 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
28420 3d 4f 50 5f 53 65 65 6b 45 6e 64 20 29 7b 0a 20  =OP_SeekEnd ){. 
28430 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
28440 70 32 3d 3d 30 20 29 3b 0a 20 20 20 20 70 43 2d  p2==0 );.    pC-
28450 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 2d 31  >seekResult = -1
28460 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  ;.    if( sqlite
28470 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61  3BtreeCursorIsVa
28480 6c 69 64 4e 4e 28 70 43 72 73 72 29 20 29 7b 0a  lidNN(pCrsr) ){.
28490 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
284a0 20 7d 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71   }.  }.  rc = sq
284b0 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 70  lite3BtreeLast(p
284c0 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 70  Crsr, &res);.  p
284d0 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38  C->nullRow = (u8
284e0 29 72 65 73 3b 0a 20 20 70 43 2d 3e 64 65 66 65  )res;.  pC->defe
284f0 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
28500 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
28510 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
28520 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
28530 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
28540 72 6f 72 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  ror;.  if( pOp->
28550 70 32 3e 30 20 29 7b 0a 20 20 20 20 56 64 62 65  p2>0 ){.    Vdbe
28560 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21  BranchTaken(res!
28570 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 72  =0,2);.    if( r
28580 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  es ) goto jump_t
28590 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61  o_p2;.  }.  brea
285a0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
285b0 20 49 66 53 6d 61 6c 6c 65 72 20 50 31 20 50 32   IfSmaller P1 P2
285c0 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 45 73   P3 * *.**.** Es
285d0 74 69 6d 61 74 65 20 74 68 65 20 6e 75 6d 62 65  timate the numbe
285e0 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65  r of rows in the
285f0 20 74 61 62 6c 65 20 50 31 2e 20 20 4a 75 6d 70   table P1.  Jump
28600 20 74 6f 20 50 32 20 69 66 20 74 68 61 74 0a 2a   to P2 if that.*
28610 2a 20 65 73 74 69 6d 61 74 65 20 69 73 20 6c 65  * estimate is le
28620 73 73 20 74 68 61 6e 20 61 70 70 72 6f 78 69 6d  ss than approxim
28630 61 74 65 6c 79 20 32 2a 2a 28 30 2e 31 2a 50 33  ately 2**(0.1*P3
28640 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66  )..*/.case OP_If
28650 53 6d 61 6c 6c 65 72 3a 20 7b 20 20 20 20 20 20  Smaller: {      
28660 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56    /* jump */.  V
28670 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
28680 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
28690 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69  ;.  int res;.  i
286a0 36 34 20 73 7a 3b 0a 0a 20 20 61 73 73 65 72 74  64 sz;..  assert
286b0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
286c0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
286d0 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
286e0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
286f0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
28700 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d  );.  pCrsr = pC-
28710 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 61  >uc.pCursor;.  a
28720 73 73 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a  ssert( pCrsr );.
28730 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
28740 72 65 65 46 69 72 73 74 28 70 43 72 73 72 2c 20  reeFirst(pCrsr, 
28750 26 72 65 73 29 3b 0a 20 20 69 66 28 20 72 63 20  &res);.  if( rc 
28760 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
28770 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28  _to_error;.  if(
28780 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 73   res==0 ){.    s
28790 7a 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  z = sqlite3Btree
287a0 52 6f 77 43 6f 75 6e 74 45 73 74 28 70 43 72 73  RowCountEst(pCrs
287b0 72 29 3b 0a 20 20 20 20 69 66 28 20 41 4c 57 41  r);.    if( ALWA
287c0 59 53 28 73 7a 3e 3d 30 29 20 26 26 20 73 71 6c  YS(sz>=0) && sql
287d0 69 74 65 33 4c 6f 67 45 73 74 28 28 75 36 34 29  ite3LogEst((u64)
287e0 73 7a 29 3c 70 4f 70 2d 3e 70 33 20 29 20 72 65  sz)<pOp->p3 ) re
287f0 73 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 56 64 62  s = 1;.  }.  Vdb
28800 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73  eBranchTaken(res
28810 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65  !=0,2);.  if( re
28820 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  s ) goto jump_to
28830 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  _p2;.  break;.}.
28840 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72  ../* Opcode: Sor
28850 74 65 72 53 6f 72 74 20 50 31 20 50 32 20 2a 20  terSort P1 P2 * 
28860 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 66 74 65 72 20  * *.**.** After 
28870 61 6c 6c 20 72 65 63 6f 72 64 73 20 68 61 76 65  all records have
28880 20 62 65 65 6e 20 69 6e 73 65 72 74 65 64 20 69   been inserted i
28890 6e 74 6f 20 74 68 65 20 53 6f 72 74 65 72 20 6f  nto the Sorter o
288a0 62 6a 65 63 74 0a 2a 2a 20 69 64 65 6e 74 69 66  bject.** identif
288b0 69 65 64 20 62 79 20 50 31 2c 20 69 6e 76 6f 6b  ied by P1, invok
288c0 65 20 74 68 69 73 20 6f 70 63 6f 64 65 20 74 6f  e this opcode to
288d0 20 61 63 74 75 61 6c 6c 79 20 64 6f 20 74 68 65   actually do the
288e0 20 73 6f 72 74 69 6e 67 2e 0a 2a 2a 20 4a 75 6d   sorting..** Jum
288f0 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 72 65  p to P2 if there
28900 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20   are no records 
28910 74 6f 20 62 65 20 73 6f 72 74 65 64 2e 0a 2a 2a  to be sorted..**
28920 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
28930 69 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20  is an alias for 
28940 4f 50 5f 53 6f 72 74 20 61 6e 64 20 4f 50 5f 52  OP_Sort and OP_R
28950 65 77 69 6e 64 20 74 68 61 74 20 69 73 20 75 73  ewind that is us
28960 65 64 0a 2a 2a 20 66 6f 72 20 53 6f 72 74 65 72  ed.** for Sorter
28970 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a 2f 2a 20   objects..*/./* 
28980 4f 70 63 6f 64 65 3a 20 53 6f 72 74 20 50 31 20  Opcode: Sort P1 
28990 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  P2 * * *.**.** T
289a0 68 69 73 20 6f 70 63 6f 64 65 20 64 6f 65 73 20  his opcode does 
289b0 65 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65  exactly the same
289c0 20 74 68 69 6e 67 20 61 73 20 4f 50 5f 52 65 77   thing as OP_Rew
289d0 69 6e 64 20 65 78 63 65 70 74 20 74 68 61 74 0a  ind except that.
289e0 2a 2a 20 69 74 20 69 6e 63 72 65 6d 65 6e 74 73  ** it increments
289f0 20 61 6e 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64   an undocumented
28a00 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
28a10 20 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e   used for testin
28a20 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e 67  g..**.** Sorting
28a30 20 69 73 20 61 63 63 6f 6d 70 6c 69 73 68 65 64   is accomplished
28a40 20 62 79 20 77 72 69 74 69 6e 67 20 72 65 63 6f   by writing reco
28a50 72 64 73 20 69 6e 74 6f 20 61 20 73 6f 72 74 69  rds into a sorti
28a60 6e 67 20 69 6e 64 65 78 2c 0a 2a 2a 20 74 68 65  ng index,.** the
28a70 6e 20 72 65 77 69 6e 64 69 6e 67 20 74 68 61 74  n rewinding that
28a80 20 69 6e 64 65 78 20 61 6e 64 20 70 6c 61 79 69   index and playi
28a90 6e 67 20 69 74 20 62 61 63 6b 20 66 72 6f 6d 20  ng it back from 
28aa0 62 65 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a 20  beginning to.** 
28ab0 65 6e 64 2e 20 20 57 65 20 75 73 65 20 74 68 65  end.  We use the
28ac0 20 4f 50 5f 53 6f 72 74 20 6f 70 63 6f 64 65 20   OP_Sort opcode 
28ad0 69 6e 73 74 65 61 64 20 6f 66 20 4f 50 5f 52 65  instead of OP_Re
28ae0 77 69 6e 64 20 74 6f 20 64 6f 20 74 68 65 0a 2a  wind to do the.*
28af0 2a 20 72 65 77 69 6e 64 69 6e 67 20 73 6f 20 74  * rewinding so t
28b00 68 61 74 20 74 68 65 20 67 6c 6f 62 61 6c 20 76  hat the global v
28b10 61 72 69 61 62 6c 65 20 77 69 6c 6c 20 62 65 20  ariable will be 
28b20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e 64 0a  incremented and.
28b30 2a 2a 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65  ** regression te
28b40 73 74 73 20 63 61 6e 20 64 65 74 65 72 6d 69 6e  sts can determin
28b50 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  e whether or not
28b60 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 69   the optimizer i
28b70 73 0a 2a 2a 20 63 6f 72 72 65 63 74 6c 79 20 6f  s.** correctly o
28b80 70 74 69 6d 69 7a 69 6e 67 20 6f 75 74 20 73 6f  ptimizing out so
28b90 72 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  rts..*/.case OP_
28ba0 53 6f 72 74 65 72 53 6f 72 74 3a 20 20 20 20 2f  SorterSort:    /
28bb0 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f  * jump */.case O
28bc0 50 5f 53 6f 72 74 3a 20 7b 20 20 20 20 20 20 20  P_Sort: {       
28bd0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64   /* jump */.#ifd
28be0 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
28bf0 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f   sqlite3_sort_co
28c00 75 6e 74 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33  unt++;.  sqlite3
28c10 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2d 2d 3b  _search_count--;
28c20 0a 23 65 6e 64 69 66 0a 20 20 70 2d 3e 61 43 6f  .#endif.  p->aCo
28c30 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d  unter[SQLITE_STM
28c40 54 53 54 41 54 55 53 5f 53 4f 52 54 5d 2b 2b 3b  TSTATUS_SORT]++;
28c50 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75  .  /* Fall throu
28c60 67 68 20 69 6e 74 6f 20 4f 50 5f 52 65 77 69 6e  gh into OP_Rewin
28c70 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65  d */.}./* Opcode
28c80 3a 20 52 65 77 69 6e 64 20 50 31 20 50 32 20 2a  : Rewind P1 P2 *
28c90 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e   * *.**.** The n
28ca0 65 78 74 20 75 73 65 20 6f 66 20 74 68 65 20 52  ext use of the R
28cb0 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f  owid or Column o
28cc0 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69  r Next instructi
28cd0 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69  on for P1 .** wi
28ce0 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65 20  ll refer to the 
28cf0 66 69 72 73 74 20 65 6e 74 72 79 20 69 6e 20 74  first entry in t
28d00 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  he database tabl
28d10 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49  e or index..** I
28d20 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  f the table or i
28d30 6e 64 65 78 20 69 73 20 65 6d 70 74 79 2c 20 6a  ndex is empty, j
28d40 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ump immediately 
28d50 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 74 68 65  to P2..** If the
28d60 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
28d70 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61  is not empty, fa
28d80 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
28d90 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 0a 2a 2a 20  e following .** 
28da0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
28db0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c  ** This opcode l
28dc0 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
28dd0 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d   configured to m
28de0 6f 76 65 20 69 6e 20 66 6f 72 77 61 72 64 20 6f  ove in forward o
28df0 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68  rder,.** from th
28e00 65 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61  e beginning towa
28e10 72 64 20 74 68 65 20 65 6e 64 2e 20 20 49 6e 20  rd the end.  In 
28e20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
28e30 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f   cursor is.** co
28e40 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20  nfigured to use 
28e50 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a  Next, not Prev..
28e60 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 77 69 6e  */.case OP_Rewin
28e70 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  d: {        /* j
28e80 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ump */.  VdbeCur
28e90 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
28ea0 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
28eb0 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74  t res;..  assert
28ec0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
28ed0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
28ee0 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
28ef0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
28f00 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
28f10 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53  );.  assert( isS
28f20 6f 72 74 65 72 28 70 43 29 3d 3d 28 70 4f 70 2d  orter(pC)==(pOp-
28f30 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74  >opcode==OP_Sort
28f40 65 72 53 6f 72 74 29 20 29 3b 0a 20 20 72 65 73  erSort) );.  res
28f50 20 3d 20 31 3b 0a 23 69 66 64 65 66 20 53 51 4c   = 1;.#ifdef SQL
28f60 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e  ITE_DEBUG.  pC->
28f70 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 52 65 77 69  seekOp = OP_Rewi
28f80 6e 64 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28  nd;.#endif.  if(
28f90 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 7b   isSorter(pC) ){
28fa0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
28fb0 33 56 64 62 65 53 6f 72 74 65 72 52 65 77 69 6e  3VdbeSorterRewin
28fc0 64 28 70 43 2c 20 26 72 65 73 29 3b 0a 20 20 7d  d(pC, &res);.  }
28fd0 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
28fe0 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
28ff0 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
29000 0a 20 20 20 20 70 43 72 73 72 20 3d 20 70 43 2d  .    pCrsr = pC-
29010 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 20  >uc.pCursor;.   
29020 20 61 73 73 65 72 74 28 20 70 43 72 73 72 20 29   assert( pCrsr )
29030 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
29040 65 33 42 74 72 65 65 46 69 72 73 74 28 70 43 72  e3BtreeFirst(pCr
29050 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 70  sr, &res);.    p
29060 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
29070 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63  o = 0;.    pC->c
29080 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
29090 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20  HE_STALE;.  }.  
290a0 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
290b0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
290c0 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  ;.  pC->nullRow 
290d0 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 61 73 73  = (u8)res;.  ass
290e0 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26  ert( pOp->p2>0 &
290f0 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70  & pOp->p2<p->nOp
29100 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68   );.  VdbeBranch
29110 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b  Taken(res!=0,2);
29120 0a 20 20 69 66 28 20 72 65 73 20 29 20 67 6f 74  .  if( res ) got
29130 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
29140 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
29150 6f 64 65 3a 20 4e 65 78 74 20 50 31 20 50 32 20  ode: Next P1 P2 
29160 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 41  P3 P4 P5.**.** A
29170 64 76 61 6e 63 65 20 63 75 72 73 6f 72 20 50 31  dvance cursor P1
29180 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e   so that it poin
29190 74 73 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6b  ts to the next k
291a0 65 79 2f 64 61 74 61 20 70 61 69 72 20 69 6e 20  ey/data pair in 
291b0 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20  its.** table or 
291c0 69 6e 64 65 78 2e 20 20 49 66 20 74 68 65 72 65  index.  If there
291d0 20 61 72 65 20 6e 6f 20 6d 6f 72 65 20 6b 65 79   are no more key
291e0 2f 76 61 6c 75 65 20 70 61 69 72 73 20 74 68 65  /value pairs the
291f0 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a  n fall through.*
29200 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69  * to the followi
29210 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  ng instruction. 
29220 20 42 75 74 20 69 66 20 74 68 65 20 63 75 72 73   But if the curs
29230 6f 72 20 61 64 76 61 6e 63 65 20 77 61 73 20 73  or advance was s
29240 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75  uccessful,.** ju
29250 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
29260 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  o P2..**.** The 
29270 4e 65 78 74 20 6f 70 63 6f 64 65 20 69 73 20 6f  Next opcode is o
29280 6e 6c 79 20 76 61 6c 69 64 20 66 6f 6c 6c 6f 77  nly valid follow
29290 69 6e 67 20 61 6e 20 53 65 65 6b 47 54 2c 20 53  ing an SeekGT, S
292a0 65 65 6b 47 45 2c 20 6f 72 0a 2a 2a 20 4f 50 5f  eekGE, or.** OP_
292b0 52 65 77 69 6e 64 20 6f 70 63 6f 64 65 20 75 73  Rewind opcode us
292c0 65 64 20 74 6f 20 70 6f 73 69 74 69 6f 6e 20 74  ed to position t
292d0 68 65 20 63 75 72 73 6f 72 2e 20 20 4e 65 78 74  he cursor.  Next
292e0 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 0a   is not allowed.
292f0 2a 2a 20 74 6f 20 66 6f 6c 6c 6f 77 20 53 65 65  ** to follow See
29300 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 6f 72 20  kLT, SeekLE, or 
29310 4f 50 5f 4c 61 73 74 2e 0a 2a 2a 0a 2a 2a 20 54  OP_Last..**.** T
29320 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73  he P1 cursor mus
29330 74 20 62 65 20 66 6f 72 20 61 20 72 65 61 6c 20  t be for a real 
29340 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65  table, not a pse
29350 75 64 6f 2d 74 61 62 6c 65 2e 20 20 50 31 20 6d  udo-table.  P1 m
29360 75 73 74 20 68 61 76 65 0a 2a 2a 20 62 65 65 6e  ust have.** been
29370 20 6f 70 65 6e 65 64 20 70 72 69 6f 72 20 74 6f   opened prior to
29380 20 74 68 69 73 20 6f 70 63 6f 64 65 20 6f 72 20   this opcode or 
29390 74 68 65 20 70 72 6f 67 72 61 6d 20 77 69 6c 6c  the program will
293a0 20 73 65 67 66 61 75 6c 74 2e 0a 2a 2a 0a 2a 2a   segfault..**.**
293b0 20 54 68 65 20 50 33 20 76 61 6c 75 65 20 69 73   The P3 value is
293c0 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62   a hint to the b
293d0 74 72 65 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  tree implementat
293e0 69 6f 6e 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74  ion. If P3==1, t
293f0 68 61 74 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20  hat.** means P1 
29400 69 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20  is an SQL index 
29410 61 6e 64 20 74 68 61 74 20 74 68 69 73 20 69 6e  and that this in
29420 73 74 72 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20  struction could 
29430 68 61 76 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69  have been.** omi
29440 74 74 65 64 20 69 66 20 74 68 61 74 20 69 6e 64  tted if that ind
29450 65 78 20 68 61 64 20 62 65 65 6e 20 75 6e 69 71  ex had been uniq
29460 75 65 2e 20 20 50 33 20 69 73 20 75 73 75 61 6c  ue.  P3 is usual
29470 6c 79 20 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20  ly 0.  P3 is.** 
29480 61 6c 77 61 79 73 20 65 69 74 68 65 72 20 30 20  always either 0 
29490 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69  or 1..**.** P4 i
294a0 73 20 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65  s always of type
294b0 20 50 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65   P4_ADVANCE. The
294c0 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65   function pointe
294d0 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73  r points to.** s
294e0 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74 28  qlite3BtreeNext(
294f0 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69  )..**.** If P5 i
29500 73 20 70 6f 73 69 74 69 76 65 20 61 6e 64 20 74  s positive and t
29510 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
29520 2c 20 74 68 65 6e 20 65 76 65 6e 74 20 63 6f 75  , then event cou
29530 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50  nter.** number P
29540 35 2d 31 20 69 6e 20 74 68 65 20 70 72 65 70 61  5-1 in the prepa
29550 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73  red statement is
29560 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a   incremented..**
29570 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 50 72  .** See also: Pr
29580 65 76 2c 20 4e 65 78 74 49 66 4f 70 65 6e 0a 2a  ev, NextIfOpen.*
29590 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78  /./* Opcode: Nex
295a0 74 49 66 4f 70 65 6e 20 50 31 20 50 32 20 50 33  tIfOpen P1 P2 P3
295b0 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69   P4 P5.**.** Thi
295c0 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a  s opcode works j
295d0 75 73 74 20 6c 69 6b 65 20 4e 65 78 74 20 65 78  ust like Next ex
295e0 63 65 70 74 20 74 68 61 74 20 69 66 20 63 75 72  cept that if cur
295f0 73 6f 72 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a  sor P1 is not.**
29600 20 6f 70 65 6e 20 69 74 20 62 65 68 61 76 65 73   open it behaves
29610 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 2f 2a 20   a no-op..*/./* 
29620 4f 70 63 6f 64 65 3a 20 50 72 65 76 20 50 31 20  Opcode: Prev P1 
29630 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
29640 2a 20 42 61 63 6b 20 75 70 20 63 75 72 73 6f 72  * Back up cursor
29650 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70   P1 so that it p
29660 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 70 72 65  oints to the pre
29670 76 69 6f 75 73 20 6b 65 79 2f 64 61 74 61 20 70  vious key/data p
29680 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61  air in its.** ta
29690 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49  ble or index.  I
296a0 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 70 72  f there is no pr
296b0 65 76 69 6f 75 73 20 6b 65 79 2f 76 61 6c 75 65  evious key/value
296c0 20 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c 6c   pairs then fall
296d0 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74   through.** to t
296e0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73  he following ins
296f0 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69  truction.  But i
29700 66 20 74 68 65 20 63 75 72 73 6f 72 20 62 61 63  f the cursor bac
29710 6b 75 70 20 77 61 73 20 73 75 63 63 65 73 73 66  kup was successf
29720 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65  ul,.** jump imme
29730 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a  diately to P2..*
29740 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 72 65 76  *.**.** The Prev
29750 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20   opcode is only 
29760 76 61 6c 69 64 20 66 6f 6c 6c 6f 77 69 6e 67 20  valid following 
29770 61 6e 20 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c  an SeekLT, SeekL
29780 45 2c 20 6f 72 0a 2a 2a 20 4f 50 5f 4c 61 73 74  E, or.** OP_Last
29790 20 6f 70 63 6f 64 65 20 75 73 65 64 20 74 6f 20   opcode used to 
297a0 70 6f 73 69 74 69 6f 6e 20 74 68 65 20 63 75 72  position the cur
297b0 73 6f 72 2e 20 20 50 72 65 76 20 69 73 20 6e 6f  sor.  Prev is no
297c0 74 20 61 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20  t allowed.** to 
297d0 66 6f 6c 6c 6f 77 20 53 65 65 6b 47 54 2c 20 53  follow SeekGT, S
297e0 65 65 6b 47 45 2c 20 6f 72 20 4f 50 5f 52 65 77  eekGE, or OP_Rew
297f0 69 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  ind..**.** The P
29800 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65  1 cursor must be
29810 20 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c   for a real tabl
29820 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d  e, not a pseudo-
29830 74 61 62 6c 65 2e 20 20 49 66 20 50 31 20 69 73  table.  If P1 is
29840 0a 2a 2a 20 6e 6f 74 20 6f 70 65 6e 20 74 68 65  .** not open the
29850 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72 20 69  n the behavior i
29860 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a  s undefined..**.
29870 2a 2a 20 54 68 65 20 50 33 20 76 61 6c 75 65 20  ** The P3 value 
29880 69 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65  is a hint to the
29890 20 62 74 72 65 65 20 69 6d 70 6c 65 6d 65 6e 74   btree implement
298a0 61 74 69 6f 6e 2e 20 49 66 20 50 33 3d 3d 31 2c  ation. If P3==1,
298b0 20 74 68 61 74 0a 2a 2a 20 6d 65 61 6e 73 20 50   that.** means P
298c0 31 20 69 73 20 61 6e 20 53 51 4c 20 69 6e 64 65  1 is an SQL inde
298d0 78 20 61 6e 64 20 74 68 61 74 20 74 68 69 73 20  x and that this 
298e0 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 75 6c  instruction coul
298f0 64 20 68 61 76 65 20 62 65 65 6e 0a 2a 2a 20 6f  d have been.** o
29900 6d 69 74 74 65 64 20 69 66 20 74 68 61 74 20 69  mitted if that i
29910 6e 64 65 78 20 68 61 64 20 62 65 65 6e 20 75 6e  ndex had been un
29920 69 71 75 65 2e 20 20 50 33 20 69 73 20 75 73 75  ique.  P3 is usu
29930 61 6c 6c 79 20 30 2e 20 20 50 33 20 69 73 0a 2a  ally 0.  P3 is.*
29940 2a 20 61 6c 77 61 79 73 20 65 69 74 68 65 72 20  * always either 
29950 30 20 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34  0 or 1..**.** P4
29960 20 69 73 20 61 6c 77 61 79 73 20 6f 66 20 74 79   is always of ty
29970 70 65 20 50 34 5f 41 44 56 41 4e 43 45 2e 20 54  pe P4_ADVANCE. T
29980 68 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e  he function poin
29990 74 65 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a  ter points to.**
299a0 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65   sqlite3BtreePre
299b0 76 69 6f 75 73 28 29 2e 0a 2a 2a 0a 2a 2a 20 49  vious()..**.** I
299c0 66 20 50 35 20 69 73 20 70 6f 73 69 74 69 76 65  f P5 is positive
299d0 20 61 6e 64 20 74 68 65 20 6a 75 6d 70 20 69 73   and the jump is
299e0 20 74 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65   taken, then eve
299f0 6e 74 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75  nt counter.** nu
29a00 6d 62 65 72 20 50 35 2d 31 20 69 6e 20 74 68 65  mber P5-1 in the
29a10 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
29a20 65 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  ent is increment
29a30 65 64 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  ed..*/./* Opcode
29a40 3a 20 50 72 65 76 49 66 4f 70 65 6e 20 50 31 20  : PrevIfOpen P1 
29a50 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
29a60 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f  * This opcode wo
29a70 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 50 72  rks just like Pr
29a80 65 76 20 65 78 63 65 70 74 20 74 68 61 74 20 69  ev except that i
29a90 66 20 63 75 72 73 6f 72 20 50 31 20 69 73 20 6e  f cursor P1 is n
29aa0 6f 74 0a 2a 2a 20 6f 70 65 6e 20 69 74 20 62 65  ot.** open it be
29ab0 68 61 76 65 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a  haves a no-op..*
29ac0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72  /./* Opcode: Sor
29ad0 74 65 72 4e 65 78 74 20 50 31 20 50 32 20 2a 20  terNext P1 P2 * 
29ae0 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  * P5.**.** This 
29af0 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a 75 73  opcode works jus
29b00 74 20 6c 69 6b 65 20 4f 50 5f 4e 65 78 74 20 65  t like OP_Next e
29b10 78 63 65 70 74 20 74 68 61 74 20 50 31 20 6d 75  xcept that P1 mu
29b20 73 74 20 62 65 20 61 0a 2a 2a 20 73 6f 72 74 65  st be a.** sorte
29b30 72 20 6f 62 6a 65 63 74 20 66 6f 72 20 77 68 69  r object for whi
29b40 63 68 20 74 68 65 20 4f 50 5f 53 6f 72 74 65 72  ch the OP_Sorter
29b50 53 6f 72 74 20 6f 70 63 6f 64 65 20 68 61 73 20  Sort opcode has 
29b60 62 65 65 6e 0a 2a 2a 20 69 6e 76 6f 6b 65 64 2e  been.** invoked.
29b70 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 61 64    This opcode ad
29b80 76 61 6e 63 65 73 20 74 68 65 20 63 75 72 73 6f  vances the curso
29b90 72 20 74 6f 20 74 68 65 20 6e 65 78 74 20 73 6f  r to the next so
29ba0 72 74 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2c 20  rted.** record, 
29bb0 6f 72 20 6a 75 6d 70 73 20 74 6f 20 50 32 20 69  or jumps to P2 i
29bc0 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6d  f there are no m
29bd0 6f 72 65 20 73 6f 72 74 65 64 20 72 65 63 6f 72  ore sorted recor
29be0 64 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ds..*/.case OP_S
29bf0 6f 72 74 65 72 4e 65 78 74 3a 20 7b 20 20 2f 2a  orterNext: {  /*
29c00 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43   jump */.  VdbeC
29c10 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 70 43  ursor *pC;..  pC
29c20 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
29c30 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
29c40 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a  isSorter(pC) );.
29c50 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
29c60 62 65 53 6f 72 74 65 72 4e 65 78 74 28 64 62 2c  beSorterNext(db,
29c70 20 70 43 29 3b 0a 20 20 67 6f 74 6f 20 6e 65 78   pC);.  goto nex
29c80 74 5f 74 61 69 6c 3b 0a 63 61 73 65 20 4f 50 5f  t_tail;.case OP_
29c90 50 72 65 76 49 66 4f 70 65 6e 3a 20 20 20 20 2f  PrevIfOpen:    /
29ca0 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f  * jump */.case O
29cb0 50 5f 4e 65 78 74 49 66 4f 70 65 6e 3a 20 20 20  P_NextIfOpen:   
29cc0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66   /* jump */.  if
29cd0 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  ( p->apCsr[pOp->
29ce0 70 31 5d 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a  p1]==0 ) break;.
29cf0 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67    /* Fall throug
29d00 68 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 65  h */.case OP_Pre
29d10 76 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  v:          /* j
29d20 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  ump */.case OP_N
29d30 65 78 74 3a 20 20 20 20 20 20 20 20 20 20 2f 2a  ext:          /*
29d40 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72   jump */.  asser
29d50 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
29d60 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
29d70 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
29d80 20 70 4f 70 2d 3e 70 35 3c 41 72 72 61 79 53 69   pOp->p5<ArraySi
29d90 7a 65 28 70 2d 3e 61 43 6f 75 6e 74 65 72 29 20  ze(p->aCounter) 
29da0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
29db0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
29dc0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
29dd0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65    assert( pC->de
29de0 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20  ferredMoveto==0 
29df0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
29e00 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
29e10 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73  PE_BTREE );.  as
29e20 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
29e30 65 21 3d 4f 50 5f 4e 65 78 74 20 7c 7c 20 70 4f  e!=OP_Next || pO
29e40 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d  p->p4.xAdvance==
29e50 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74  sqlite3BtreeNext
29e60 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
29e70 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72  p->opcode!=OP_Pr
29e80 65 76 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41  ev || pOp->p4.xA
29e90 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42  dvance==sqlite3B
29ea0 74 72 65 65 50 72 65 76 69 6f 75 73 20 29 3b 0a  treePrevious );.
29eb0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
29ec0 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 49 66  pcode!=OP_NextIf
29ed0 4f 70 65 6e 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e  Open || pOp->p4.
29ee0 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65  xAdvance==sqlite
29ef0 33 42 74 72 65 65 4e 65 78 74 20 29 3b 0a 20 20  3BtreeNext );.  
29f00 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
29f10 6f 64 65 21 3d 4f 50 5f 50 72 65 76 49 66 4f 70  ode!=OP_PrevIfOp
29f20 65 6e 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41  en || pOp->p4.xA
29f30 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42  dvance==sqlite3B
29f40 74 72 65 65 50 72 65 76 69 6f 75 73 29 3b 0a 0a  treePrevious);..
29f50 20 20 2f 2a 20 54 68 65 20 4e 65 78 74 20 6f 70    /* The Next op
29f60 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 75 73 65  code is only use
29f70 64 20 61 66 74 65 72 20 53 65 65 6b 47 54 2c 20  d after SeekGT, 
29f80 53 65 65 6b 47 45 2c 20 61 6e 64 20 52 65 77 69  SeekGE, and Rewi
29f90 6e 64 2e 0a 20 20 2a 2a 20 54 68 65 20 50 72 65  nd..  ** The Pre
29fa0 76 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79  v opcode is only
29fb0 20 75 73 65 64 20 61 66 74 65 72 20 53 65 65 6b   used after Seek
29fc0 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 61 6e 64 20  LT, SeekLE, and 
29fd0 4c 61 73 74 2e 20 2a 2f 0a 20 20 61 73 73 65 72  Last. */.  asser
29fe0 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  t( pOp->opcode!=
29ff0 4f 50 5f 4e 65 78 74 20 7c 7c 20 70 4f 70 2d 3e  OP_Next || pOp->
2a000 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 49  opcode!=OP_NextI
2a010 66 4f 70 65 6e 0a 20 20 20 20 20 20 20 7c 7c 20  fOpen.       || 
2a020 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53  pC->seekOp==OP_S
2a030 65 65 6b 47 54 20 7c 7c 20 70 43 2d 3e 73 65 65  eekGT || pC->see
2a040 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 47 45 0a 20  kOp==OP_SeekGE. 
2a050 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65        || pC->see
2a060 6b 4f 70 3d 3d 4f 50 5f 52 65 77 69 6e 64 20 7c  kOp==OP_Rewind |
2a070 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50  | pC->seekOp==OP
2a080 5f 46 6f 75 6e 64 29 3b 0a 20 20 61 73 73 65 72  _Found);.  asser
2a090 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  t( pOp->opcode!=
2a0a0 4f 50 5f 50 72 65 76 20 7c 7c 20 70 4f 70 2d 3e  OP_Prev || pOp->
2a0b0 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 49  opcode!=OP_PrevI
2a0c0 66 4f 70 65 6e 0a 20 20 20 20 20 20 20 7c 7c 20  fOpen.       || 
2a0d0 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53  pC->seekOp==OP_S
2a0e0 65 65 6b 4c 54 20 7c 7c 20 70 43 2d 3e 73 65 65  eekLT || pC->see
2a0f0 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 4c 45 0a 20  kOp==OP_SeekLE. 
2a100 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65        || pC->see
2a110 6b 4f 70 3d 3d 4f 50 5f 4c 61 73 74 20 29 3b 0a  kOp==OP_Last );.
2a120 0a 20 20 72 63 20 3d 20 70 4f 70 2d 3e 70 34 2e  .  rc = pOp->p4.
2a130 78 41 64 76 61 6e 63 65 28 70 43 2d 3e 75 63 2e  xAdvance(pC->uc.
2a140 70 43 75 72 73 6f 72 2c 20 70 4f 70 2d 3e 70 33  pCursor, pOp->p3
2a150 29 3b 0a 6e 65 78 74 5f 74 61 69 6c 3a 0a 20 20  );.next_tail:.  
2a160 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
2a170 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
2a180 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
2a190 28 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 2c 32  (rc==SQLITE_OK,2
2a1a0 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
2a1b0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 70 43  ITE_OK ){.    pC
2a1c0 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20  ->nullRow = 0;. 
2a1d0 20 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 70     p->aCounter[p
2a1e0 4f 70 2d 3e 70 35 5d 2b 2b 3b 0a 23 69 66 64 65  Op->p5]++;.#ifde
2a1f0 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
2a200 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68    sqlite3_search
2a210 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66  _count++;.#endif
2a220 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  .    goto jump_t
2a230 6f 5f 70 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66  o_p2_and_check_f
2a240 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20 20  or_interrupt;.  
2a250 7d 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49  }.  if( rc!=SQLI
2a260 54 45 5f 44 4f 4e 45 20 29 20 67 6f 74 6f 20 61  TE_DONE ) goto a
2a270 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
2a280 72 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45  r;.  rc = SQLITE
2a290 5f 4f 4b 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  _OK;.  pC->nullR
2a2a0 6f 77 20 3d 20 31 3b 0a 20 20 67 6f 74 6f 20 63  ow = 1;.  goto c
2a2b0 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75  heck_for_interru
2a2c0 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  pt;.}../* Opcode
2a2d0 3a 20 49 64 78 49 6e 73 65 72 74 20 50 31 20 50  : IdxInsert P1 P
2a2e0 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
2a2f0 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 32  nopsis: key=r[P2
2a300 5d 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72  ].**.** Register
2a310 20 50 32 20 68 6f 6c 64 73 20 61 6e 20 53 51 4c   P2 holds an SQL
2a320 20 69 6e 64 65 78 20 6b 65 79 20 6d 61 64 65 20   index key made 
2a330 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 4d 61 6b  using the.** Mak
2a340 65 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74  eRecord instruct
2a350 69 6f 6e 73 2e 20 20 54 68 69 73 20 6f 70 63 6f  ions.  This opco
2a360 64 65 20 77 72 69 74 65 73 20 74 68 61 74 20 6b  de writes that k
2a370 65 79 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 69  ey.** into the i
2a380 6e 64 65 78 20 50 31 2e 20 20 44 61 74 61 20 66  ndex P1.  Data f
2a390 6f 72 20 74 68 65 20 65 6e 74 72 79 20 69 73 20  or the entry is 
2a3a0 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  nil..**.** If P4
2a3b0 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
2a3c0 65 6e 20 69 74 20 69 73 20 74 68 65 20 6e 75 6d  en it is the num
2a3d0 62 65 72 20 6f 66 20 76 61 6c 75 65 73 20 69 6e  ber of values in
2a3e0 20 74 68 65 20 75 6e 70 61 63 6b 65 64 0a 2a 2a   the unpacked.**
2a3f0 20 6b 65 79 20 6f 66 20 72 65 67 28 50 32 29 2e   key of reg(P2).
2a400 20 20 49 6e 20 74 68 61 74 20 63 61 73 65 2c 20    In that case, 
2a410 50 33 20 69 73 20 74 68 65 20 69 6e 64 65 78 20  P3 is the index 
2a420 6f 66 20 74 68 65 20 66 69 72 73 74 20 72 65 67  of the first reg
2a430 69 73 74 65 72 0a 2a 2a 20 66 6f 72 20 74 68 65  ister.** for the
2a440 20 75 6e 70 61 63 6b 65 64 20 6b 65 79 2e 20 20   unpacked key.  
2a450 54 68 65 20 61 76 61 69 6c 61 62 69 6c 69 74 79  The availability
2a460 20 6f 66 20 74 68 65 20 75 6e 70 61 63 6b 65 64   of the unpacked
2a470 20 6b 65 79 20 63 61 6e 20 73 6f 6d 65 74 69 6d   key can sometim
2a480 65 73 0a 2a 2a 20 62 65 20 61 6e 20 6f 70 74 69  es.** be an opti
2a490 6d 69 7a 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  mization..**.** 
2a4a0 49 66 20 50 35 20 68 61 73 20 74 68 65 20 4f 50  If P5 has the OP
2a4b0 46 4c 41 47 5f 41 50 50 45 4e 44 20 62 69 74 20  FLAG_APPEND bit 
2a4c0 73 65 74 2c 20 74 68 61 74 20 69 73 20 61 20 68  set, that is a h
2a4d0 69 6e 74 20 74 6f 20 74 68 65 20 62 2d 74 72 65  int to the b-tre
2a4e0 65 20 6c 61 79 65 72 0a 2a 2a 20 74 68 61 74 20  e layer.** that 
2a4f0 74 68 69 73 20 69 6e 73 65 72 74 20 69 73 20 6c  this insert is l
2a500 69 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61  ikely to be an a
2a510 70 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ppend..**.** If 
2a520 50 35 20 68 61 73 20 74 68 65 20 4f 50 46 4c 41  P5 has the OPFLA
2a530 47 5f 4e 43 48 41 4e 47 45 20 62 69 74 20 73 65  G_NCHANGE bit se
2a540 74 2c 20 74 68 65 6e 20 74 68 65 20 63 68 61 6e  t, then the chan
2a550 67 65 20 63 6f 75 6e 74 65 72 20 69 73 0a 2a 2a  ge counter is.**
2a560 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20   incremented by 
2a570 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
2a580 2e 20 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  .  If the OPFLAG
2a590 5f 4e 43 48 41 4e 47 45 20 62 69 74 20 69 73 20  _NCHANGE bit is 
2a5a0 63 6c 65 61 72 2c 0a 2a 2a 20 74 68 65 6e 20 74  clear,.** then t
2a5b0 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65  he change counte
2a5c0 72 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a  r is unchanged..
2a5d0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
2a5e0 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c  LAG_USESEEKRESUL
2a5f0 54 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20  T flag of P5 is 
2a600 73 65 74 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65  set, the impleme
2a610 6e 74 61 74 69 6f 6e 20 6d 69 67 68 74 0a 2a 2a  ntation might.**
2a620 20 72 75 6e 20 66 61 73 74 65 72 20 62 79 20 61   run faster by a
2a630 76 6f 69 64 69 6e 67 20 61 6e 20 75 6e 6e 65 63  voiding an unnec
2a640 65 73 73 61 72 79 20 73 65 65 6b 20 6f 6e 20 63  essary seek on c
2a650 75 72 73 6f 72 20 50 31 2e 20 20 48 6f 77 65 76  ursor P1.  Howev
2a660 65 72 2c 0a 2a 2a 20 74 68 65 20 4f 50 46 4c 41  er,.** the OPFLA
2a670 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20  G_USESEEKRESULT 
2a680 66 6c 61 67 20 6d 75 73 74 20 6f 6e 6c 79 20 62  flag must only b
2a690 65 20 73 65 74 20 69 66 20 74 68 65 72 65 20 68  e set if there h
2a6a0 61 76 65 20 62 65 65 6e 20 6e 6f 20 70 72 69 6f  ave been no prio
2a6b0 72 0a 2a 2a 20 73 65 65 6b 73 20 6f 6e 20 74 68  r.** seeks on th
2a6c0 65 20 63 75 72 73 6f 72 20 6f 72 20 69 66 20 74  e cursor or if t
2a6d0 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 73  he most recent s
2a6e0 65 65 6b 20 75 73 65 64 20 61 20 6b 65 79 20 65  eek used a key e
2a6f0 71 75 69 76 61 6c 65 6e 74 0a 2a 2a 20 74 6f 20  quivalent.** to 
2a700 50 32 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  P2. .**.** This 
2a710 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79  instruction only
2a720 20 77 6f 72 6b 73 20 66 6f 72 20 69 6e 64 69 63   works for indic
2a730 65 73 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c  es.  The equival
2a740 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a  ent instruction.
2a750 2a 2a 20 66 6f 72 20 74 61 62 6c 65 73 20 69 73  ** for tables is
2a760 20 4f 50 5f 49 6e 73 65 72 74 2e 0a 2a 2f 0a 2f   OP_Insert..*/./
2a770 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72  * Opcode: Sorter
2a780 49 6e 73 65 72 74 20 50 31 20 50 32 20 2a 20 2a  Insert P1 P2 * *
2a790 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
2a7a0 6b 65 79 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20  key=r[P2].**.** 
2a7b0 52 65 67 69 73 74 65 72 20 50 32 20 68 6f 6c 64  Register P2 hold
2a7c0 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 6b  s an SQL index k
2a7d0 65 79 20 6d 61 64 65 20 75 73 69 6e 67 20 74 68  ey made using th
2a7e0 65 0a 2a 2a 20 4d 61 6b 65 52 65 63 6f 72 64 20  e.** MakeRecord 
2a7f0 69 6e 73 74 72 75 63 74 69 6f 6e 73 2e 20 20 54  instructions.  T
2a800 68 69 73 20 6f 70 63 6f 64 65 20 77 72 69 74 65  his opcode write
2a810 73 20 74 68 61 74 20 6b 65 79 0a 2a 2a 20 69 6e  s that key.** in
2a820 74 6f 20 74 68 65 20 73 6f 72 74 65 72 20 50 31  to the sorter P1
2a830 2e 20 20 44 61 74 61 20 66 6f 72 20 74 68 65 20  .  Data for the 
2a840 65 6e 74 72 79 20 69 73 20 6e 69 6c 2e 0a 2a 2f  entry is nil..*/
2a850 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 49  .case OP_SorterI
2a860 6e 73 65 72 74 3a 20 20 20 20 20 20 20 2f 2a 20  nsert:       /* 
2a870 69 6e 32 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  in2 */.case OP_I
2a880 64 78 49 6e 73 65 72 74 3a 20 7b 20 20 20 20 20  dxInsert: {     
2a890 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56     /* in2 */.  V
2a8a0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
2a8b0 20 42 74 72 65 65 50 61 79 6c 6f 61 64 20 78 3b   BtreePayload x;
2a8c0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
2a8d0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
2a8e0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
2a8f0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
2a900 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
2a910 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
2a920 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28  ssert( isSorter(
2a930 70 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64  pC)==(pOp->opcod
2a940 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65  e==OP_SorterInse
2a950 72 74 29 20 29 3b 0a 20 20 70 49 6e 32 20 3d 20  rt) );.  pIn2 = 
2a960 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
2a970 20 20 61 73 73 65 72 74 28 20 70 49 6e 32 2d 3e    assert( pIn2->
2a980 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62  flags & MEM_Blob
2a990 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   );.  if( pOp->p
2a9a0 35 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  5 & OPFLAG_NCHAN
2a9b0 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b  GE ) p->nChange+
2a9c0 2b 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  +;.  assert( pC-
2a9d0 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
2a9e0 50 45 5f 42 54 52 45 45 20 7c 7c 20 70 4f 70 2d  PE_BTREE || pOp-
2a9f0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74  >opcode==OP_Sort
2aa00 65 72 49 6e 73 65 72 74 20 29 3b 0a 20 20 61 73  erInsert );.  as
2aa10 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
2aa20 65 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 45  e==0 );.  rc = E
2aa30 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 3b  xpandBlob(pIn2);
2aa40 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
2aa50 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2aa60 72 6f 72 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  ror;.  if( pOp->
2aa70 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65  opcode==OP_Sorte
2aa80 72 49 6e 73 65 72 74 20 29 7b 0a 20 20 20 20 72  rInsert ){.    r
2aa90 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  c = sqlite3VdbeS
2aaa0 6f 72 74 65 72 57 72 69 74 65 28 70 43 2c 20 70  orterWrite(pC, p
2aab0 49 6e 32 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  In2);.  }else{. 
2aac0 20 20 20 78 2e 6e 4b 65 79 20 3d 20 70 49 6e 32     x.nKey = pIn2
2aad0 2d 3e 6e 3b 0a 20 20 20 20 78 2e 70 4b 65 79 20  ->n;.    x.pKey 
2aae0 3d 20 70 49 6e 32 2d 3e 7a 3b 0a 20 20 20 20 78  = pIn2->z;.    x
2aaf0 2e 61 4d 65 6d 20 3d 20 61 4d 65 6d 20 2b 20 70  .aMem = aMem + p
2ab00 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 78 2e 6e 4d  Op->p3;.    x.nM
2ab10 65 6d 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70  em = (u16)pOp->p
2ab20 34 2e 69 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  4.i;.    rc = sq
2ab30 6c 69 74 65 33 42 74 72 65 65 49 6e 73 65 72 74  lite3BtreeInsert
2ab40 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
2ab50 20 26 78 2c 0a 20 20 20 20 20 20 20 20 20 28 70   &x,.         (p
2ab60 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46 4c 41 47  Op->p5 & (OPFLAG
2ab70 5f 41 50 50 45 4e 44 7c 4f 50 46 4c 41 47 5f 53  _APPEND|OPFLAG_S
2ab80 41 56 45 50 4f 53 49 54 49 4f 4e 29 29 2c 20 0a  AVEPOSITION)), .
2ab90 20 20 20 20 20 20 20 20 28 28 70 4f 70 2d 3e 70          ((pOp->p
2aba0 35 20 26 20 4f 50 46 4c 41 47 5f 55 53 45 53 45  5 & OPFLAG_USESE
2abb0 45 4b 52 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e  EKRESULT) ? pC->
2abc0 73 65 65 6b 52 65 73 75 6c 74 20 3a 20 30 29 0a  seekResult : 0).
2abd0 20 20 20 20 20 20 20 20 29 3b 0a 20 20 20 20 61          );.    a
2abe0 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
2abf0 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
2ac00 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61      pC->cacheSta
2ac10 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
2ac20 45 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 29  E;.  }.  if( rc)
2ac30 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
2ac40 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61  to_error;.  brea
2ac50 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2ac60 20 49 64 78 44 65 6c 65 74 65 20 50 31 20 50 32   IdxDelete P1 P2
2ac70 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
2ac80 73 69 73 3a 20 6b 65 79 3d 72 5b 50 32 40 50 33  sis: key=r[P2@P3
2ac90 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6e 74  ].**.** The cont
2aca0 65 6e 74 20 6f 66 20 50 33 20 72 65 67 69 73 74  ent of P3 regist
2acb0 65 72 73 20 73 74 61 72 74 69 6e 67 20 61 74 20  ers starting at 
2acc0 72 65 67 69 73 74 65 72 20 50 32 20 66 6f 72 6d  register P2 form
2acd0 0a 2a 2a 20 61 6e 20 75 6e 70 61 63 6b 65 64 20  .** an unpacked 
2ace0 69 6e 64 65 78 20 6b 65 79 2e 20 54 68 69 73 20  index key. This 
2acf0 6f 70 63 6f 64 65 20 72 65 6d 6f 76 65 73 20 74  opcode removes t
2ad00 68 61 74 20 65 6e 74 72 79 20 66 72 6f 6d 20 74  hat entry from t
2ad10 68 65 20 0a 2a 2a 20 69 6e 64 65 78 20 6f 70 65  he .** index ope
2ad20 6e 65 64 20 62 79 20 63 75 72 73 6f 72 20 50 31  ned by cursor P1
2ad30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78  ..*/.case OP_Idx
2ad40 44 65 6c 65 74 65 3a 20 7b 0a 20 20 56 64 62 65  Delete: {.  Vdbe
2ad50 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74  Cursor *pC;.  Bt
2ad60 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
2ad70 20 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70 61   int res;.  Unpa
2ad80 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20  ckedRecord r;.. 
2ad90 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
2ada0 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  >0 );.  assert( 
2adb0 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70  pOp->p2>0 && pOp
2adc0 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33 3c 3d 28 70  ->p2+pOp->p3<=(p
2add0 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
2ade0 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 61 73  ursor)+1 );.  as
2adf0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
2ae00 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
2ae10 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
2ae20 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
2ae30 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
2ae40 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
2ae50 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
2ae60 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
2ae70 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63    pCrsr = pC->uc
2ae80 2e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65  .pCursor;.  asse
2ae90 72 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a  rt( pCrsr!=0 );.
2aea0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2aeb0 35 3d 3d 30 20 29 3b 0a 20 20 72 2e 70 4b 65 79  5==0 );.  r.pKey
2aec0 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49  Info = pC->pKeyI
2aed0 6e 66 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20  nfo;.  r.nField 
2aee0 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 33 3b 0a  = (u16)pOp->p3;.
2aef0 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d    r.default_rc =
2af00 20 30 3b 0a 20 20 72 2e 61 4d 65 6d 20 3d 20 26   0;.  r.aMem = &
2af10 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
2af20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
2af30 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
2af40 28 70 43 72 73 72 2c 20 26 72 2c 20 30 2c 20 30  (pCrsr, &r, 0, 0
2af50 2c 20 26 72 65 73 29 3b 0a 20 20 69 66 28 20 72  , &res);.  if( r
2af60 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
2af70 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69  ue_to_error;.  i
2af80 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20  f( res==0 ){.   
2af90 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
2afa0 65 65 44 65 6c 65 74 65 28 70 43 72 73 72 2c 20  eeDelete(pCrsr, 
2afb0 42 54 52 45 45 5f 41 55 58 44 45 4c 45 54 45 29  BTREE_AUXDELETE)
2afc0 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67  ;.    if( rc ) g
2afd0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
2afe0 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 61 73  _error;.  }.  as
2aff0 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
2b000 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
2b010 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
2b020 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
2b030 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74    pC->seekResult
2b040 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = 0;.  break;.}
2b050 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 66  ../* Opcode: Def
2b060 65 72 72 65 64 53 65 65 6b 20 50 31 20 2a 20 50  erredSeek P1 * P
2b070 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
2b080 69 73 3a 20 4d 6f 76 65 20 50 33 20 74 6f 20 50  is: Move P3 to P
2b090 31 2e 72 6f 77 69 64 20 69 66 20 6e 65 65 64 65  1.rowid if neede
2b0a0 64 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 6e  d.**.** P1 is an
2b0b0 20 6f 70 65 6e 20 69 6e 64 65 78 20 63 75 72 73   open index curs
2b0c0 6f 72 20 61 6e 64 20 50 33 20 69 73 20 61 20 63  or and P3 is a c
2b0d0 75 72 73 6f 72 20 6f 6e 20 74 68 65 20 63 6f 72  ursor on the cor
2b0e0 72 65 73 70 6f 6e 64 69 6e 67 0a 2a 2a 20 74 61  responding.** ta
2b0f0 62 6c 65 2e 20 20 54 68 69 73 20 6f 70 63 6f 64  ble.  This opcod
2b100 65 20 64 6f 65 73 20 61 20 64 65 66 65 72 72 65  e does a deferre
2b110 64 20 73 65 65 6b 20 6f 66 20 74 68 65 20 50 33  d seek of the P3
2b120 20 74 61 62 6c 65 20 63 75 72 73 6f 72 0a 2a 2a   table cursor.**
2b130 20 74 6f 20 74 68 65 20 72 6f 77 20 74 68 61 74   to the row that
2b140 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
2b150 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20  the current row 
2b160 6f 66 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  of P1..**.** Thi
2b170 73 20 69 73 20 61 20 64 65 66 65 72 72 65 64 20  s is a deferred 
2b180 73 65 65 6b 2e 20 20 4e 6f 74 68 69 6e 67 20 61  seek.  Nothing a
2b190 63 74 75 61 6c 6c 79 20 68 61 70 70 65 6e 73 20  ctually happens 
2b1a0 75 6e 74 69 6c 0a 2a 2a 20 74 68 65 20 63 75 72  until.** the cur
2b1b0 73 6f 72 20 69 73 20 75 73 65 64 20 74 6f 20 72  sor is used to r
2b1c0 65 61 64 20 61 20 72 65 63 6f 72 64 2e 20 20 54  ead a record.  T
2b1d0 68 61 74 20 77 61 79 2c 20 69 66 20 6e 6f 20 72  hat way, if no r
2b1e0 65 61 64 73 0a 2a 2a 20 6f 63 63 75 72 2c 20 6e  eads.** occur, n
2b1f0 6f 20 75 6e 6e 65 63 65 73 73 61 72 79 20 49 2f  o unnecessary I/
2b200 4f 20 68 61 70 70 65 6e 73 2e 0a 2a 2a 0a 2a 2a  O happens..**.**
2b210 20 50 34 20 6d 61 79 20 62 65 20 61 6e 20 61 72   P4 may be an ar
2b220 72 61 79 20 6f 66 20 69 6e 74 65 67 65 72 73 20  ray of integers 
2b230 28 74 79 70 65 20 50 34 5f 49 4e 54 41 52 52 41  (type P4_INTARRA
2b240 59 29 20 63 6f 6e 74 61 69 6e 69 6e 67 0a 2a 2a  Y) containing.**
2b250 20 6f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65   one entry for e
2b260 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68  ach column in th
2b270 65 20 50 33 20 74 61 62 6c 65 2e 20 20 49 66 20  e P3 table.  If 
2b280 61 72 72 61 79 20 65 6e 74 72 79 20 61 28 69 29  array entry a(i)
2b290 0a 2a 2a 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c  .** is non-zero,
2b2a0 20 74 68 65 6e 20 72 65 61 64 69 6e 67 20 63 6f   then reading co
2b2b0 6c 75 6d 6e 20 61 28 69 29 2d 31 20 66 72 6f 6d  lumn a(i)-1 from
2b2c0 20 63 75 72 73 6f 72 20 50 33 20 69 73 20 0a 2a   cursor P3 is .*
2b2d0 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 20  * equivalent to 
2b2e0 70 65 72 66 6f 72 6d 69 6e 67 20 74 68 65 20 64  performing the d
2b2f0 65 66 65 72 72 65 64 20 73 65 65 6b 20 61 6e 64  eferred seek and
2b300 20 74 68 65 6e 20 72 65 61 64 69 6e 67 20 63 6f   then reading co
2b310 6c 75 6d 6e 20 69 20 0a 2a 2a 20 66 72 6f 6d 20  lumn i .** from 
2b320 50 31 2e 20 20 54 68 69 73 20 69 6e 66 6f 72 6d  P1.  This inform
2b330 61 74 69 6f 6e 20 69 73 20 73 74 6f 72 65 64 20  ation is stored 
2b340 69 6e 20 50 33 20 61 6e 64 20 75 73 65 64 20 74  in P3 and used t
2b350 6f 20 72 65 64 69 72 65 63 74 0a 2a 2a 20 72 65  o redirect.** re
2b360 61 64 73 20 61 67 61 69 6e 73 74 20 50 33 20 6f  ads against P3 o
2b370 76 65 72 20 74 6f 20 50 31 2c 20 74 68 75 73 20  ver to P1, thus 
2b380 70 6f 73 73 69 62 6c 79 20 61 76 6f 69 64 69 6e  possibly avoidin
2b390 67 20 74 68 65 20 6e 65 65 64 20 74 6f 0a 2a 2a  g the need to.**
2b3a0 20 73 65 65 6b 20 61 6e 64 20 72 65 61 64 20 63   seek and read c
2b3b0 75 72 73 6f 72 20 50 33 2e 0a 2a 2f 0a 2f 2a 20  ursor P3..*/./* 
2b3c0 4f 70 63 6f 64 65 3a 20 49 64 78 52 6f 77 69 64  Opcode: IdxRowid
2b3d0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
2b3e0 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
2b3f0 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 57 72 69 74  rowid.**.** Writ
2b400 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
2b410 50 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68  P2 an integer wh
2b420 69 63 68 20 69 73 20 74 68 65 20 6c 61 73 74 20  ich is the last 
2b430 65 6e 74 72 79 20 69 6e 20 74 68 65 20 72 65 63  entry in the rec
2b440 6f 72 64 20 61 74 0a 2a 2a 20 74 68 65 20 65 6e  ord at.** the en
2b450 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6b  d of the index k
2b460 65 79 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79  ey pointed to by
2b470 20 63 75 72 73 6f 72 20 50 31 2e 20 20 54 68 69   cursor P1.  Thi
2b480 73 20 69 6e 74 65 67 65 72 20 73 68 6f 75 6c 64  s integer should
2b490 20 62 65 0a 2a 2a 20 74 68 65 20 72 6f 77 69 64   be.** the rowid
2b4a0 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 65 6e   of the table en
2b4b0 74 72 79 20 74 6f 20 77 68 69 63 68 20 74 68 69  try to which thi
2b4c0 73 20 69 6e 64 65 78 20 65 6e 74 72 79 20 70 6f  s index entry po
2b4d0 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  ints..**.** See 
2b4e0 61 6c 73 6f 3a 20 52 6f 77 69 64 2c 20 4d 61 6b  also: Rowid, Mak
2b4f0 65 52 65 63 6f 72 64 2e 0a 2a 2f 0a 63 61 73 65  eRecord..*/.case
2b500 20 4f 50 5f 44 65 66 65 72 72 65 64 53 65 65 6b   OP_DeferredSeek
2b510 3a 0a 63 61 73 65 20 4f 50 5f 49 64 78 52 6f 77  :.case OP_IdxRow
2b520 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  id: {           
2b530 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 56 64 62  /* out2 */.  Vdb
2b540 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20  eCursor *pC;    
2b550 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
2b560 50 31 20 69 6e 64 65 78 20 63 75 72 73 6f 72 20  P1 index cursor 
2b570 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
2b580 2a 70 54 61 62 43 75 72 3b 20 20 20 20 20 20 20  *pTabCur;       
2b590 20 2f 2a 20 54 68 65 20 50 32 20 74 61 62 6c 65   /* The P2 table
2b5a0 20 63 75 72 73 6f 72 20 28 4f 50 5f 44 65 66 65   cursor (OP_Defe
2b5b0 72 72 65 64 53 65 65 6b 20 6f 6e 6c 79 29 20 2a  rredSeek only) *
2b5c0 2f 0a 20 20 69 36 34 20 72 6f 77 69 64 3b 20 20  /.  i64 rowid;  
2b5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b5e0 2f 2a 20 52 6f 77 69 64 20 74 68 61 74 20 50 31  /* Rowid that P1
2b5f0 20 63 75 72 72 65 6e 74 20 70 6f 69 6e 74 73 20   current points 
2b600 74 6f 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28  to */..  assert(
2b610 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
2b620 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
2b630 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
2b640 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
2b650 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
2b660 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
2b670 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
2b680 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73  E_BTREE );.  ass
2b690 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72  ert( pC->uc.pCur
2b6a0 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  sor!=0 );.  asse
2b6b0 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d  rt( pC->isTable=
2b6c0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
2b6d0 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
2b6e0 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  to==0 );.  asser
2b6f0 74 28 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  t( !pC->nullRow 
2b700 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
2b710 4f 50 5f 49 64 78 52 6f 77 69 64 20 29 3b 0a 0a  OP_IdxRowid );..
2b720 20 20 2f 2a 20 54 68 65 20 49 64 78 52 6f 77 69    /* The IdxRowi
2b730 64 20 61 6e 64 20 53 65 65 6b 20 6f 70 63 6f 64  d and Seek opcod
2b740 65 73 20 61 72 65 20 63 6f 6d 62 69 6e 65 64 20  es are combined 
2b750 62 65 63 61 75 73 65 20 6f 66 20 74 68 65 20 63  because of the c
2b760 6f 6d 6d 6f 6e 61 6c 69 74 79 0a 20 20 2a 2a 20  ommonality.  ** 
2b770 6f 66 20 73 71 6c 69 74 65 33 56 64 62 65 43 75  of sqlite3VdbeCu
2b780 72 73 6f 72 52 65 73 74 6f 72 65 28 29 20 61 6e  rsorRestore() an
2b790 64 20 73 71 6c 69 74 65 33 56 64 62 65 49 64 78  d sqlite3VdbeIdx
2b7a0 52 6f 77 69 64 28 29 2e 20 2a 2f 0a 20 20 72 63  Rowid(). */.  rc
2b7b0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75   = sqlite3VdbeCu
2b7c0 72 73 6f 72 52 65 73 74 6f 72 65 28 70 43 29 3b  rsorRestore(pC);
2b7d0 0a 0a 20 20 2f 2a 20 73 71 6c 69 74 65 33 56 62  ..  /* sqlite3Vb
2b7e0 65 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28 29  eCursorRestore()
2b7f0 20 63 61 6e 20 6f 6e 6c 79 20 66 61 69 6c 20 69   can only fail i
2b800 66 20 74 68 65 20 72 65 63 6f 72 64 20 68 61 73  f the record has
2b810 20 62 65 65 6e 20 64 65 6c 65 74 65 64 0a 20 20   been deleted.  
2b820 2a 2a 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65  ** out from unde
2b830 72 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 54  r the cursor.  T
2b840 68 61 74 20 77 69 6c 6c 20 6e 65 76 65 72 20 68  hat will never h
2b850 61 70 70 65 6e 73 20 66 6f 72 20 61 6e 20 49 64  appens for an Id
2b860 78 52 6f 77 69 64 0a 20 20 2a 2a 20 6f 72 20 53  xRowid.  ** or S
2b870 65 65 6b 20 6f 70 63 6f 64 65 20 2a 2f 0a 20 20  eek opcode */.  
2b880 69 66 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51  if( NEVER(rc!=SQ
2b890 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f 74 6f 20  LITE_OK) ) goto 
2b8a0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2b8b0 6f 72 3b 0a 0a 20 20 69 66 28 20 21 70 43 2d 3e  or;..  if( !pC->
2b8c0 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 72  nullRow ){.    r
2b8d0 6f 77 69 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f  owid = 0;  /* No
2b8e0 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20  t needed.  Only 
2b8f0 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20  used to silence 
2b900 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20  a warning. */.  
2b910 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
2b920 62 65 49 64 78 52 6f 77 69 64 28 64 62 2c 20 70  beIdxRowid(db, p
2b930 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26  C->uc.pCursor, &
2b940 72 6f 77 69 64 29 3b 0a 20 20 20 20 69 66 28 20  rowid);.    if( 
2b950 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
2b960 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  .      goto abor
2b970 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
2b980 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 4f      }.    if( pO
2b990 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 44 65  p->opcode==OP_De
2b9a0 66 65 72 72 65 64 53 65 65 6b 20 29 7b 0a 20 20  ferredSeek ){.  
2b9b0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
2b9c0 3e 70 33 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p3>=0 && pOp->p
2b9d0 33 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  3<p->nCursor );.
2b9e0 20 20 20 20 20 20 70 54 61 62 43 75 72 20 3d 20        pTabCur = 
2b9f0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 33  p->apCsr[pOp->p3
2ba00 5d 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ];.      assert(
2ba10 20 70 54 61 62 43 75 72 21 3d 30 20 29 3b 0a 20   pTabCur!=0 );. 
2ba20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 54 61       assert( pTa
2ba30 62 43 75 72 2d 3e 65 43 75 72 54 79 70 65 3d 3d  bCur->eCurType==
2ba40 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
2ba50 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
2ba60 54 61 62 43 75 72 2d 3e 75 63 2e 70 43 75 72 73  TabCur->uc.pCurs
2ba70 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 20 20 61  or!=0 );.      a
2ba80 73 73 65 72 74 28 20 70 54 61 62 43 75 72 2d 3e  ssert( pTabCur->
2ba90 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 20  isTable );.     
2baa0 20 70 54 61 62 43 75 72 2d 3e 6e 75 6c 6c 52 6f   pTabCur->nullRo
2bab0 77 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 54 61  w = 0;.      pTa
2bac0 62 43 75 72 2d 3e 6d 6f 76 65 74 6f 54 61 72 67  bCur->movetoTarg
2bad0 65 74 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20  et = rowid;.    
2bae0 20 20 70 54 61 62 43 75 72 2d 3e 64 65 66 65 72    pTabCur->defer
2baf0 72 65 64 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a 20  redMoveto = 1;. 
2bb00 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
2bb10 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
2bb20 41 52 52 41 59 20 7c 7c 20 70 4f 70 2d 3e 70 34  ARRAY || pOp->p4
2bb30 2e 61 69 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  .ai==0 );.      
2bb40 70 54 61 62 43 75 72 2d 3e 61 41 6c 74 4d 61 70  pTabCur->aAltMap
2bb50 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20   = pOp->p4.ai;. 
2bb60 20 20 20 20 20 70 54 61 62 43 75 72 2d 3e 70 41       pTabCur->pA
2bb70 6c 74 43 75 72 73 6f 72 20 3d 20 70 43 3b 0a 20  ltCursor = pC;. 
2bb80 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
2bb90 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
2bba0 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
2bbb0 20 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d       pOut->u.i =
2bbc0 20 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20   rowid;.    }.  
2bbd0 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
2bbe0 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
2bbf0 4f 50 5f 49 64 78 52 6f 77 69 64 20 29 3b 0a 20  OP_IdxRowid );. 
2bc00 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2bc10 6d 53 65 74 4e 75 6c 6c 28 26 61 4d 65 6d 5b 70  mSetNull(&aMem[p
2bc20 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 7d 0a 20 20  Op->p2]);.  }.  
2bc30 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2bc40 6f 64 65 3a 20 49 64 78 47 45 20 50 31 20 50 32  ode: IdxGE P1 P2
2bc50 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
2bc60 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
2bc70 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34  P4].**.** The P4
2bc80 20 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73   register values
2bc90 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
2bca0 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63  P3 form an unpac
2bcb0 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65  ked index .** ke
2bcc0 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65  y that omits the
2bcd0 20 50 52 49 4d 41 52 59 20 4b 45 59 2e 20 20 43   PRIMARY KEY.  C
2bce0 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20  ompare this key 
2bcf0 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68  value against th
2bd00 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74  e index .** that
2bd10 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
2bd20 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67   pointing to, ig
2bd30 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41  noring the PRIMA
2bd40 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 20  RY KEY or ROWID 
2bd50 0a 2a 2a 20 66 69 65 6c 64 73 20 61 74 20 74 68  .** fields at th
2bd60 65 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  e end..**.** If 
2bd70 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74  the P1 index ent
2bd80 72 79 20 69 73 20 67 72 65 61 74 65 72 20 74 68  ry is greater th
2bd90 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
2bda0 68 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20  he key value.** 
2bdb0 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
2bdc0 20 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c    Otherwise fall
2bdd0 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
2bde0 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
2bdf0 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
2be00 49 64 78 47 54 20 50 31 20 50 32 20 50 33 20 50  IdxGT P1 P2 P3 P
2be10 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
2be20 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
2be30 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69  *.** The P4 regi
2be40 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69  ster values begi
2be50 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f  nning with P3 fo
2be60 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  rm an unpacked i
2be70 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61  ndex .** key tha
2be80 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d  t omits the PRIM
2be90 41 52 59 20 4b 45 59 2e 20 20 43 6f 6d 70 61 72  ARY KEY.  Compar
2bea0 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65  e this key value
2beb0 20 61 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64   against the ind
2bec0 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69  ex .** that P1 i
2bed0 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  s currently poin
2bee0 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e  ting to, ignorin
2bef0 67 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  g the PRIMARY KE
2bf00 59 20 6f 72 20 52 4f 57 49 44 20 0a 2a 2a 20 66  Y or ROWID .** f
2bf10 69 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64  ields at the end
2bf20 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
2bf30 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73  1 index entry is
2bf40 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68   greater than th
2bf50 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74  e key value.** t
2bf60 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20  hen jump to P2. 
2bf70 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20   Otherwise fall 
2bf80 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
2bf90 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
2bfa0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .*/./* Opcode: I
2bfb0 64 78 4c 54 20 50 31 20 50 32 20 50 33 20 50 34  dxLT P1 P2 P3 P4
2bfc0 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
2bfd0 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
2bfe0 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73  .** The P4 regis
2bff0 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e  ter values begin
2c000 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72  ning with P3 for
2c010 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  m an unpacked in
2c020 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74  dex .** key that
2c030 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41   omits the PRIMA
2c040 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e  RY KEY or ROWID.
2c050 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b    Compare this k
2c060 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74  ey value against
2c070 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 74 68  .** the index th
2c080 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e 74  at P1 is current
2c090 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20  ly pointing to, 
2c0a0 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49  ignoring the PRI
2c0b0 4d 41 52 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52  MARY KEY or.** R
2c0c0 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69  OWID on the P1 i
2c0d0 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ndex..**.** If t
2c0e0 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72  he P1 index entr
2c0f0 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74  y is less than t
2c100 68 65 20 6b 65 79 20 76 61 6c 75 65 20 74 68 65  he key value the
2c110 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  n jump to P2..**
2c120 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20   Otherwise fall 
2c130 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
2c140 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
2c150 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .*/./* Opcode: I
2c160 64 78 4c 45 20 50 31 20 50 32 20 50 33 20 50 34  dxLE P1 P2 P3 P4
2c170 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
2c180 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
2c190 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73  .** The P4 regis
2c1a0 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e  ter values begin
2c1b0 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72  ning with P3 for
2c1c0 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  m an unpacked in
2c1d0 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74  dex .** key that
2c1e0 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41   omits the PRIMA
2c1f0 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e  RY KEY or ROWID.
2c200 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b    Compare this k
2c210 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74  ey value against
2c220 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 74 68  .** the index th
2c230 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e 74  at P1 is current
2c240 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20  ly pointing to, 
2c250 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49  ignoring the PRI
2c260 4d 41 52 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52  MARY KEY or.** R
2c270 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69  OWID on the P1 i
2c280 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ndex..**.** If t
2c290 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72  he P1 index entr
2c2a0 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f  y is less than o
2c2b0 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
2c2c0 65 79 20 76 61 6c 75 65 20 74 68 65 6e 20 6a 75  ey value then ju
2c2d0 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e 20 4f 74 68  mp.** to P2. Oth
2c2e0 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f  erwise fall thro
2c2f0 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
2c300 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
2c310 63 61 73 65 20 4f 50 5f 49 64 78 4c 45 3a 20 20  case OP_IdxLE:  
2c320 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
2c330 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 47 54  */.case OP_IdxGT
2c340 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  :          /* ju
2c350 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64  mp */.case OP_Id
2c360 78 4c 54 3a 20 20 20 20 20 20 20 20 20 20 2f 2a  xLT:          /*
2c370 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50   jump */.case OP
2c380 5f 49 64 78 47 45 3a 20 20 7b 20 20 20 20 20 20  _IdxGE:  {      
2c390 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64   /* jump */.  Vd
2c3a0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
2c3b0 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63  int res;.  Unpac
2c3c0 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20  kedRecord r;..  
2c3d0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
2c3e0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
2c3f0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
2c400 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
2c410 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
2c420 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
2c430 74 28 20 70 43 2d 3e 69 73 4f 72 64 65 72 65 64  t( pC->isOrdered
2c440 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
2c450 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
2c460 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61  YPE_BTREE );.  a
2c470 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43  ssert( pC->uc.pC
2c480 75 72 73 6f 72 21 3d 30 29 3b 0a 20 20 61 73 73  ursor!=0);.  ass
2c490 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
2c4a0 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
2c4b0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d  assert( pOp->p5=
2c4c0 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 31  =0 || pOp->p5==1
2c4d0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
2c4e0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
2c4f0 54 33 32 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49  T32 );.  r.pKeyI
2c500 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e  nfo = pC->pKeyIn
2c510 66 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d  fo;.  r.nField =
2c520 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b   (u16)pOp->p4.i;
2c530 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
2c540 64 65 3c 4f 50 5f 49 64 78 4c 54 20 29 7b 0a 20  de<OP_IdxLT ){. 
2c550 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
2c560 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45  opcode==OP_IdxLE
2c570 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
2c580 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20  =OP_IdxGT );.   
2c590 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20   r.default_rc = 
2c5a0 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  -1;.  }else{.   
2c5b0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
2c5c0 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20 7c  code==OP_IdxGE |
2c5d0 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
2c5e0 50 5f 49 64 78 4c 54 20 29 3b 0a 20 20 20 20 72  P_IdxLT );.    r
2c5f0 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b  .default_rc = 0;
2c600 0a 20 20 7d 0a 20 20 72 2e 61 4d 65 6d 20 3d 20  .  }.  r.aMem = 
2c610 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
2c620 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
2c630 42 55 47 0a 20 20 7b 20 69 6e 74 20 69 3b 20 66  BUG.  { int i; f
2c640 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65  or(i=0; i<r.nFie
2c650 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28  ld; i++) assert(
2c660 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61   memIsValid(&r.a
2c670 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e  Mem[i]) ); }.#en
2c680 64 69 66 0a 20 20 72 65 73 20 3d 20 30 3b 20 20  dif.  res = 0;  
2c690 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20  /* Not needed.  
2c6a0 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 69 6c  Only used to sil
2c6b0 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20  ence a warning. 
2c6c0 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  */.  rc = sqlite
2c6d0 33 56 64 62 65 49 64 78 4b 65 79 43 6f 6d 70 61  3VdbeIdxKeyCompa
2c6e0 72 65 28 64 62 2c 20 70 43 2c 20 26 72 2c 20 26  re(db, pC, &r, &
2c6f0 72 65 73 29 3b 0a 20 20 61 73 73 65 72 74 28 20  res);.  assert( 
2c700 28 4f 50 5f 49 64 78 4c 45 26 31 29 3d 3d 28 4f  (OP_IdxLE&1)==(O
2c710 50 5f 49 64 78 4c 54 26 31 29 20 26 26 20 28 4f  P_IdxLT&1) && (O
2c720 50 5f 49 64 78 47 45 26 31 29 3d 3d 28 4f 50 5f  P_IdxGE&1)==(OP_
2c730 49 64 78 47 54 26 31 29 20 29 3b 0a 20 20 69 66  IdxGT&1) );.  if
2c740 28 20 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 26 31  ( (pOp->opcode&1
2c750 29 3d 3d 28 4f 50 5f 49 64 78 4c 54 26 31 29 20  )==(OP_IdxLT&1) 
2c760 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
2c770 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
2c780 64 78 4c 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  dxLE || pOp->opc
2c790 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 3b  ode==OP_IdxLT );
2c7a0 0a 20 20 20 20 72 65 73 20 3d 20 2d 72 65 73 3b  .    res = -res;
2c7b0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
2c7c0 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
2c7d0 65 3d 3d 4f 50 5f 49 64 78 47 45 20 7c 7c 20 70  e==OP_IdxGE || p
2c7e0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
2c7f0 64 78 47 54 20 29 3b 0a 20 20 20 20 72 65 73 2b  dxGT );.    res+
2c800 2b 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42 72 61  +;.  }.  VdbeBra
2c810 6e 63 68 54 61 6b 65 6e 28 72 65 73 3e 30 2c 32  nchTaken(res>0,2
2c820 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  );.  if( rc ) go
2c830 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
2c840 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 72 65 73  error;.  if( res
2c850 3e 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  >0 ) goto jump_t
2c860 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  o_p2;.  break;.}
2c870 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 73  ../* Opcode: Des
2c880 74 72 6f 79 20 50 31 20 50 32 20 50 33 20 2a 20  troy P1 P2 P3 * 
2c890 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61  *.**.** Delete a
2c8a0 6e 20 65 6e 74 69 72 65 20 64 61 74 61 62 61 73  n entire databas
2c8b0 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
2c8c0 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65   whose root page
2c8d0 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
2c8e0 0a 2a 2a 20 66 69 6c 65 20 69 73 20 67 69 76 65  .** file is give
2c8f0 6e 20 62 79 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54  n by P1..**.** T
2c900 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64  he table being d
2c910 65 73 74 72 6f 79 65 64 20 69 73 20 69 6e 20 74  estroyed is in t
2c920 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
2c930 20 66 69 6c 65 20 69 66 20 50 33 3d 3d 30 2e 20   file if P3==0. 
2c940 20 49 66 0a 2a 2a 20 50 33 3d 3d 31 20 74 68 65   If.** P3==1 the
2c950 6e 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62  n the table to b
2c960 65 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68  e clear is in th
2c970 65 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61  e auxiliary data
2c980 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61  base file.** tha
2c990 74 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f  t is used to sto
2c9a0 72 65 20 74 61 62 6c 65 73 20 63 72 65 61 74 65  re tables create
2c9b0 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 54 45   using CREATE TE
2c9c0 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a  MPORARY TABLE..*
2c9d0 2a 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41 43 55  *.** If AUTOVACU
2c9e0 55 4d 20 69 73 20 65 6e 61 62 6c 65 64 20 74 68  UM is enabled th
2c9f0 65 6e 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c  en it is possibl
2ca00 65 20 74 68 61 74 20 61 6e 6f 74 68 65 72 20 72  e that another r
2ca10 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 6d 69 67 68  oot page.** migh
2ca20 74 20 62 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20  t be moved into 
2ca30 74 68 65 20 6e 65 77 6c 79 20 64 65 6c 65 74 65  the newly delete
2ca40 64 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 6f  d root page in o
2ca50 72 64 65 72 20 74 6f 20 6b 65 65 70 20 61 6c 6c  rder to keep all
2ca60 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65 73 20 63  .** root pages c
2ca70 6f 6e 74 69 67 75 6f 75 73 20 61 74 20 74 68 65  ontiguous at the
2ca80 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68   beginning of th
2ca90 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 65  e database.  The
2caa0 20 66 6f 72 6d 65 72 0a 2a 2a 20 76 61 6c 75 65   former.** value
2cab0 20 6f 66 20 74 68 65 20 72 6f 6f 74 20 70 61 67   of the root pag
2cac0 65 20 74 68 61 74 20 6d 6f 76 65 64 20 2d 20 69  e that moved - i
2cad0 74 73 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20  ts value before 
2cae0 74 68 65 20 6d 6f 76 65 20 6f 63 63 75 72 72 65  the move occurre
2caf0 64 20 2d 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64  d -.** is stored
2cb00 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
2cb10 20 49 66 20 6e 6f 20 70 61 67 65 20 6d 6f 76 65   If no page move
2cb20 6d 65 6e 74 20 77 61 73 20 72 65 71 75 69 72 65  ment was require
2cb30 64 20 28 62 65 63 61 75 73 65 20 74 68 65 0a 2a  d (because the.*
2cb40 2a 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64 72  * table being dr
2cb50 6f 70 70 65 64 20 77 61 73 20 61 6c 72 65 61 64  opped was alread
2cb60 79 20 74 68 65 20 6c 61 73 74 20 6f 6e 65 20 69  y the last one i
2cb70 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 29 20  n the database) 
2cb80 74 68 65 6e 20 61 20 0a 2a 2a 20 7a 65 72 6f 20  then a .** zero 
2cb90 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
2cba0 69 73 74 65 72 20 50 32 2e 20 20 49 66 20 41 55  ister P2.  If AU
2cbb0 54 4f 56 41 43 55 55 4d 20 69 73 20 64 69 73 61  TOVACUUM is disa
2cbc0 62 6c 65 64 20 74 68 65 6e 20 61 20 7a 65 72 6f  bled then a zero
2cbd0 20 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64 20 69   .** is stored i
2cbe0 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
2cbf0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
2cc00 20 74 68 72 6f 77 73 20 61 6e 20 65 72 72 6f 72   throws an error
2cc10 20 69 66 20 74 68 65 72 65 20 61 72 65 20 61 6e   if there are an
2cc20 79 20 61 63 74 69 76 65 20 72 65 61 64 65 72 20  y active reader 
2cc30 56 4d 73 20 77 68 65 6e 0a 2a 2a 20 69 74 20 69  VMs when.** it i
2cc40 73 20 69 6e 76 6f 6b 65 64 2e 20 54 68 69 73 20  s invoked. This 
2cc50 69 73 20 64 6f 6e 65 20 74 6f 20 61 76 6f 69 64  is done to avoid
2cc60 20 74 68 65 20 64 69 66 66 69 63 75 6c 74 79 20   the difficulty 
2cc70 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
2cc80 0a 2a 2a 20 75 70 64 61 74 69 6e 67 20 65 78 69  .** updating exi
2cc90 73 74 69 6e 67 20 63 75 72 73 6f 72 73 20 77 68  sting cursors wh
2cca0 65 6e 20 61 20 72 6f 6f 74 20 70 61 67 65 20 69  en a root page i
2ccb0 73 20 6d 6f 76 65 64 20 69 6e 20 61 6e 20 41 55  s moved in an AU
2ccc0 54 4f 56 41 43 55 55 4d 20 0a 2a 2a 20 64 61 74  TOVACUUM .** dat
2ccd0 61 62 61 73 65 2e 20 54 68 69 73 20 65 72 72 6f  abase. This erro
2cce0 72 20 69 73 20 74 68 72 6f 77 6e 20 65 76 65 6e  r is thrown even
2ccf0 20 69 66 20 74 68 65 20 64 61 74 61 62 61 73 65   if the database
2cd00 20 69 73 20 6e 6f 74 20 61 6e 20 41 55 54 4f 56   is not an AUTOV
2cd10 41 43 55 55 4d 20 0a 2a 2a 20 64 62 20 69 6e 20  ACUUM .** db in 
2cd20 6f 72 64 65 72 20 74 6f 20 61 76 6f 69 64 20 69  order to avoid i
2cd30 6e 74 72 6f 64 75 63 69 6e 67 20 61 6e 20 69 6e  ntroducing an in
2cd40 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 62 65  compatibility be
2cd50 74 77 65 65 6e 20 61 75 74 6f 76 61 63 75 75 6d  tween autovacuum
2cd60 20 0a 2a 2a 20 61 6e 64 20 6e 6f 6e 2d 61 75 74   .** and non-aut
2cd70 6f 76 61 63 75 75 6d 20 6d 6f 64 65 73 2e 0a 2a  ovacuum modes..*
2cd80 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43  *.** See also: C
2cd90 6c 65 61 72 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  lear.*/.case OP_
2cda0 44 65 73 74 72 6f 79 3a 20 7b 20 20 20 20 20 2f  Destroy: {     /
2cdb0 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20  * out2 */.  int 
2cdc0 69 4d 6f 76 65 64 3b 0a 20 20 69 6e 74 20 69 44  iMoved;.  int iD
2cdd0 62 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d  b;..  assert( p-
2cde0 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
2cdf0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2ce00 31 3e 31 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20  1>1 );.  pOut = 
2ce10 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
2ce20 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e  , pOp);.  pOut->
2ce30 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c  flags = MEM_Null
2ce40 3b 0a 20 20 69 66 28 20 64 62 2d 3e 6e 56 64 62  ;.  if( db->nVdb
2ce50 65 52 65 61 64 20 3e 20 64 62 2d 3e 6e 56 44 65  eRead > db->nVDe
2ce60 73 74 72 6f 79 2b 31 20 29 7b 0a 20 20 20 20 72  stroy+1 ){.    r
2ce70 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45  c = SQLITE_LOCKE
2ce80 44 3b 0a 20 20 20 20 70 2d 3e 65 72 72 6f 72 41  D;.    p->errorA
2ce90 63 74 69 6f 6e 20 3d 20 4f 45 5f 41 62 6f 72 74  ction = OE_Abort
2cea0 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74  ;.    goto abort
2ceb0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
2cec0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 44 62 20   }else{.    iDb 
2ced0 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 61  = pOp->p3;.    a
2cee0 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73  ssert( DbMaskTes
2cef0 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20  t(p->btreeMask, 
2cf00 69 44 62 29 20 29 3b 0a 20 20 20 20 69 4d 6f 76  iDb) );.    iMov
2cf10 65 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20  ed = 0;  /* Not 
2cf20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 74 6f  needed.  Only to
2cf30 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69   silence a warni
2cf40 6e 67 2e 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20  ng. */.    rc = 
2cf50 73 71 6c 69 74 65 33 42 74 72 65 65 44 72 6f 70  sqlite3BtreeDrop
2cf60 54 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 69 44  Table(db->aDb[iD
2cf70 62 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c  b].pBt, pOp->p1,
2cf80 20 26 69 4d 6f 76 65 64 29 3b 0a 20 20 20 20 70   &iMoved);.    p
2cf90 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
2cfa0 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  _Int;.    pOut->
2cfb0 75 2e 69 20 3d 20 69 4d 6f 76 65 64 3b 0a 20 20  u.i = iMoved;.  
2cfc0 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
2cfd0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2cfe0 6f 72 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  or;.#ifndef SQLI
2cff0 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55  TE_OMIT_AUTOVACU
2d000 55 4d 0a 20 20 20 20 69 66 28 20 69 4d 6f 76 65  UM.    if( iMove
2d010 64 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71  d!=0 ){.      sq
2d020 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76  lite3RootPageMov
2d030 65 64 28 64 62 2c 20 69 44 62 2c 20 69 4d 6f 76  ed(db, iDb, iMov
2d040 65 64 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20  ed, pOp->p1);.  
2d050 20 20 20 20 2f 2a 20 41 6c 6c 20 4f 50 5f 44 65      /* All OP_De
2d060 73 74 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e 73  stroy operations
2d070 20 6f 63 63 75 72 20 6f 6e 20 74 68 65 20 73 61   occur on the sa
2d080 6d 65 20 62 74 72 65 65 20 2a 2f 0a 20 20 20 20  me btree */.    
2d090 20 20 61 73 73 65 72 74 28 20 72 65 73 65 74 53    assert( resetS
2d0a0 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 30 20  chemaOnFault==0 
2d0b0 7c 7c 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e  || resetSchemaOn
2d0c0 46 61 75 6c 74 3d 3d 69 44 62 2b 31 20 29 3b 0a  Fault==iDb+1 );.
2d0d0 20 20 20 20 20 20 72 65 73 65 74 53 63 68 65 6d        resetSchem
2d0e0 61 4f 6e 46 61 75 6c 74 20 3d 20 69 44 62 2b 31  aOnFault = iDb+1
2d0f0 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20  ;.    }.#endif. 
2d100 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
2d110 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 65 61 72 20  * Opcode: Clear 
2d120 50 31 20 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20 44  P1 P2 P3.**.** D
2d130 65 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e  elete all conten
2d140 74 73 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ts of the databa
2d150 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  se table or inde
2d160 78 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67  x whose root pag
2d170 65 0a 2a 2a 20 69 6e 20 74 68 65 20 64 61 74 61  e.** in the data
2d180 62 61 73 65 20 66 69 6c 65 20 69 73 20 67 69 76  base file is giv
2d190 65 6e 20 62 79 20 50 31 2e 20 20 42 75 74 2c 20  en by P1.  But, 
2d1a0 75 6e 6c 69 6b 65 20 44 65 73 74 72 6f 79 2c 20  unlike Destroy, 
2d1b0 64 6f 20 6e 6f 74 0a 2a 2a 20 72 65 6d 6f 76 65  do not.** remove
2d1c0 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
2d1d0 64 65 78 20 66 72 6f 6d 20 74 68 65 20 64 61 74  dex from the dat
2d1e0 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a  abase file..**.*
2d1f0 2a 20 54 68 65 20 74 61 62 6c 65 20 62 65 69 6e  * The table bein
2d200 67 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68  g clear is in th
2d210 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
2d220 66 69 6c 65 20 69 66 20 50 32 3d 3d 30 2e 20 20  file if P2==0.  
2d230 49 66 0a 2a 2a 20 50 32 3d 3d 31 20 74 68 65 6e  If.** P2==1 then
2d240 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65   the table to be
2d250 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65   clear is in the
2d260 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62   auxiliary datab
2d270 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74  ase file.** that
2d280 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72   is used to stor
2d290 65 20 74 61 62 6c 65 73 20 63 72 65 61 74 65 20  e tables create 
2d2a0 75 73 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d  using CREATE TEM
2d2b0 50 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a  PORARY TABLE..**
2d2c0 0a 2a 2a 20 49 66 20 74 68 65 20 50 33 20 76 61  .** If the P3 va
2d2d0 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c  lue is non-zero,
2d2e0 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20   then the table 
2d2f0 72 65 66 65 72 72 65 64 20 74 6f 20 6d 75 73 74  referred to must
2d300 20 62 65 20 61 6e 0a 2a 2a 20 69 6e 74 6b 65 79   be an.** intkey
2d310 20 74 61 62 6c 65 20 28 61 6e 20 53 51 4c 20 74   table (an SQL t
2d320 61 62 6c 65 2c 20 6e 6f 74 20 61 6e 20 69 6e 64  able, not an ind
2d330 65 78 29 2e 20 49 6e 20 74 68 69 73 20 63 61 73  ex). In this cas
2d340 65 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65  e the row change
2d350 20 0a 2a 2a 20 63 6f 75 6e 74 20 69 73 20 69 6e   .** count is in
2d360 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68 65  cremented by the
2d370 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
2d380 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62 65 69  in the table bei
2d390 6e 67 20 63 6c 65 61 72 65 64 2e 20 0a 2a 2a 20  ng cleared. .** 
2d3a0 49 66 20 50 33 20 69 73 20 67 72 65 61 74 65 72  If P3 is greater
2d3b0 20 74 68 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e   than zero, then
2d3c0 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65   the value store
2d3d0 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  d in register P3
2d3e0 20 69 73 0a 2a 2a 20 61 6c 73 6f 20 69 6e 63 72   is.** also incr
2d3f0 65 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e  emented by the n
2d400 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e  umber of rows in
2d410 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   the table being
2d420 20 63 6c 65 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20   cleared..**.** 
2d430 53 65 65 20 61 6c 73 6f 3a 20 44 65 73 74 72 6f  See also: Destro
2d440 79 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 65  y.*/.case OP_Cle
2d450 61 72 3a 20 7b 0a 20 20 69 6e 74 20 6e 43 68 61  ar: {.  int nCha
2d460 6e 67 65 3b 0a 20 0a 20 20 6e 43 68 61 6e 67 65  nge;. .  nChange
2d470 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
2d480 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
2d490 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61  ;.  assert( DbMa
2d4a0 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d  skTest(p->btreeM
2d4b0 61 73 6b 2c 20 70 4f 70 2d 3e 70 32 29 20 29 3b  ask, pOp->p2) );
2d4c0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
2d4d0 74 72 65 65 43 6c 65 61 72 54 61 62 6c 65 28 0a  treeClearTable(.
2d4e0 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 70 4f        db->aDb[pO
2d4f0 70 2d 3e 70 32 5d 2e 70 42 74 2c 20 70 4f 70 2d  p->p2].pBt, pOp-
2d500 3e 70 31 2c 20 28 70 4f 70 2d 3e 70 33 20 3f 20  >p1, (pOp->p3 ? 
2d510 26 6e 43 68 61 6e 67 65 20 3a 20 30 29 0a 20 20  &nChange : 0).  
2d520 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 33  );.  if( pOp->p3
2d530 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e   ){.    p->nChan
2d540 67 65 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20  ge += nChange;. 
2d550 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 3e 30     if( pOp->p3>0
2d560 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
2d570 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d  ( memIsValid(&aM
2d580 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a  em[pOp->p3]) );.
2d590 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f        memAboutTo
2d5a0 43 68 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b  Change(p, &aMem[
2d5b0 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20  pOp->p3]);.     
2d5c0 20 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 75   aMem[pOp->p3].u
2d5d0 2e 69 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20  .i += nChange;. 
2d5e0 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72     }.  }.  if( r
2d5f0 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
2d600 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62  ue_to_error;.  b
2d610 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2d620 64 65 3a 20 52 65 73 65 74 53 6f 72 74 65 72 20  de: ResetSorter 
2d630 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
2d640 20 44 65 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74   Delete all cont
2d650 65 6e 74 73 20 66 72 6f 6d 20 74 68 65 20 65 70  ents from the ep
2d660 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 6f 72  hemeral table or
2d670 20 73 6f 72 74 65 72 0a 2a 2a 20 74 68 61 74 20   sorter.** that 
2d680 69 73 20 6f 70 65 6e 20 6f 6e 20 63 75 72 73 6f  is open on curso
2d690 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  r P1..**.** This
2d6a0 20 6f 70 63 6f 64 65 20 6f 6e 6c 79 20 77 6f 72   opcode only wor
2d6b0 6b 73 20 66 6f 72 20 63 75 72 73 6f 72 73 20 75  ks for cursors u
2d6c0 73 65 64 20 66 6f 72 20 73 6f 72 74 69 6e 67 20  sed for sorting 
2d6d0 61 6e 64 0a 2a 2a 20 6f 70 65 6e 65 64 20 77 69  and.** opened wi
2d6e0 74 68 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65  th OP_OpenEpheme
2d6f0 72 61 6c 20 6f 72 20 4f 50 5f 53 6f 72 74 65 72  ral or OP_Sorter
2d700 4f 70 65 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  Open..*/.case OP
2d710 5f 52 65 73 65 74 53 6f 72 74 65 72 3a 20 7b 0a  _ResetSorter: {.
2d720 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
2d730 3b 0a 20 0a 20 20 61 73 73 65 72 74 28 20 70 4f  ;. .  assert( pO
2d740 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
2d750 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
2d760 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
2d770 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
2d780 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
2d790 20 69 66 28 20 69 73 53 6f 72 74 65 72 28 70 43   if( isSorter(pC
2d7a0 29 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  ) ){.    sqlite3
2d7b0 56 64 62 65 53 6f 72 74 65 72 52 65 73 65 74 28  VdbeSorterReset(
2d7c0 64 62 2c 20 70 43 2d 3e 75 63 2e 70 53 6f 72 74  db, pC->uc.pSort
2d7d0 65 72 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  er);.  }else{.  
2d7e0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
2d7f0 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
2d800 42 54 52 45 45 20 29 3b 0a 20 20 20 20 61 73 73  BTREE );.    ass
2d810 65 72 74 28 20 70 43 2d 3e 69 73 45 70 68 65 6d  ert( pC->isEphem
2d820 65 72 61 6c 20 29 3b 0a 20 20 20 20 72 63 20 3d  eral );.    rc =
2d830 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65   sqlite3BtreeCle
2d840 61 72 54 61 62 6c 65 4f 66 43 75 72 73 6f 72 28  arTableOfCursor(
2d850 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b  pC->uc.pCursor);
2d860 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f  .    if( rc ) go
2d870 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
2d880 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 62 72 65  error;.  }.  bre
2d890 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2d8a0 3a 20 43 72 65 61 74 65 54 61 62 6c 65 20 50 31  : CreateTable P1
2d8b0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
2d8c0 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 6f  opsis: r[P2]=roo
2d8d0 74 20 69 44 62 3d 50 31 0a 2a 2a 0a 2a 2a 20 41  t iDb=P1.**.** A
2d8e0 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77 20 74 61  llocate a new ta
2d8f0 62 6c 65 20 69 6e 20 74 68 65 20 6d 61 69 6e 20  ble in the main 
2d900 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
2d910 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65   P1==0 or in the
2d920 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79 20 64 61  .** auxiliary da
2d930 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50  tabase file if P
2d940 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61 74  1==1 or in an at
2d950 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20  tached database 
2d960 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69  if.** P1>1.  Wri
2d970 74 65 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65  te the root page
2d980 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e   number of the n
2d990 65 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a  ew table into.**
2d9a0 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a   register P2.**.
2d9b0 2a 2a 20 54 68 65 20 64 69 66 66 65 72 65 6e 63  ** The differenc
2d9c0 65 20 62 65 74 77 65 65 6e 20 61 20 74 61 62 6c  e between a tabl
2d9d0 65 20 61 6e 64 20 61 6e 20 69 6e 64 65 78 20 69  e and an index i
2d9e0 73 20 74 68 69 73 3a 20 20 41 20 74 61 62 6c 65  s this:  A table
2d9f0 20 6d 75 73 74 0a 2a 2a 20 68 61 76 65 20 61 20   must.** have a 
2da00 34 2d 62 79 74 65 20 69 6e 74 65 67 65 72 20 6b  4-byte integer k
2da10 65 79 20 61 6e 64 20 63 61 6e 20 68 61 76 65 20  ey and can have 
2da20 61 72 62 69 74 72 61 72 79 20 64 61 74 61 2e 20  arbitrary data. 
2da30 20 41 6e 20 69 6e 64 65 78 0a 2a 2a 20 68 61 73   An index.** has
2da40 20 61 6e 20 61 72 62 69 74 72 61 72 79 20 6b 65   an arbitrary ke
2da50 79 20 62 75 74 20 6e 6f 20 64 61 74 61 2e 0a 2a  y but no data..*
2da60 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43  *.** See also: C
2da70 72 65 61 74 65 49 6e 64 65 78 0a 2a 2f 0a 2f 2a  reateIndex.*/./*
2da80 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74 65 49   Opcode: CreateI
2da90 6e 64 65 78 20 50 31 20 50 32 20 2a 20 2a 20 2a  ndex P1 P2 * * *
2daa0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
2dab0 50 32 5d 3d 72 6f 6f 74 20 69 44 62 3d 50 31 0a  P2]=root iDb=P1.
2dac0 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61  **.** Allocate a
2dad0 20 6e 65 77 20 69 6e 64 65 78 20 69 6e 20 74 68   new index in th
2dae0 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
2daf0 66 69 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f 72  file if P1==0 or
2db00 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c   in the.** auxil
2db10 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69  iary database fi
2db20 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f 72 20 69  le if P1==1 or i
2db30 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61  n an attached da
2db40 74 61 62 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e  tabase if.** P1>
2db50 31 2e 20 20 57 72 69 74 65 20 74 68 65 20 72 6f  1.  Write the ro
2db60 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f  ot page number o
2db70 66 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20  f the new table 
2db80 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72  into.** register
2db90 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 64   P2..**.** See d
2dba0 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 6e 20  ocumentation on 
2dbb0 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20 66  OP_CreateTable f
2dbc0 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
2dbd0 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  formation..*/.ca
2dbe0 73 65 20 4f 50 5f 43 72 65 61 74 65 49 6e 64 65  se OP_CreateInde
2dbf0 78 3a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  x:            /*
2dc00 20 6f 75 74 32 20 2a 2f 0a 63 61 73 65 20 4f 50   out2 */.case OP
2dc10 5f 43 72 65 61 74 65 54 61 62 6c 65 3a 20 7b 20  _CreateTable: { 
2dc20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
2dc30 20 2a 2f 0a 20 20 69 6e 74 20 70 67 6e 6f 3b 0a   */.  int pgno;.
2dc40 20 20 69 6e 74 20 66 6c 61 67 73 3b 0a 20 20 44    int flags;.  D
2dc50 62 20 2a 70 44 62 3b 0a 0a 20 20 70 4f 75 74 20  b *pDb;..  pOut 
2dc60 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
2dc70 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 67 6e 6f  (p, pOp);.  pgno
2dc80 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
2dc90 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
2dca0 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
2dcb0 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73  .  assert( DbMas
2dcc0 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61  kTest(p->btreeMa
2dcd0 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a  sk, pOp->p1) );.
2dce0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
2dcf0 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44  dOnly==0 );.  pD
2dd00 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70  b = &db->aDb[pOp
2dd10 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2dd20 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a   pDb->pBt!=0 );.
2dd30 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
2dd40 65 3d 3d 4f 50 5f 43 72 65 61 74 65 54 61 62 6c  e==OP_CreateTabl
2dd50 65 20 29 7b 0a 20 20 20 20 2f 2a 20 66 6c 61 67  e ){.    /* flag
2dd60 73 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45 59  s = BTREE_INTKEY
2dd70 3b 20 2a 2f 0a 20 20 20 20 66 6c 61 67 73 20 3d  ; */.    flags =
2dd80 20 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b 0a 20   BTREE_INTKEY;. 
2dd90 20 7d 65 6c 73 65 7b 0a 20 20 20 20 66 6c 61 67   }else{.    flag
2dda0 73 20 3d 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45  s = BTREE_BLOBKE
2ddb0 59 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71  Y;.  }.  rc = sq
2ddc0 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65  lite3BtreeCreate
2ddd0 54 61 62 6c 65 28 70 44 62 2d 3e 70 42 74 2c 20  Table(pDb->pBt, 
2dde0 26 70 67 6e 6f 2c 20 66 6c 61 67 73 29 3b 0a 20  &pgno, flags);. 
2ddf0 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
2de00 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
2de10 72 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  r;.  pOut->u.i =
2de20 20 70 67 6e 6f 3b 0a 20 20 62 72 65 61 6b 3b 0a   pgno;.  break;.
2de30 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 71  }../* Opcode: Sq
2de40 6c 45 78 65 63 20 2a 20 2a 20 2a 20 50 34 20 2a  lExec * * * P4 *
2de50 0a 2a 2a 0a 2a 2a 20 52 75 6e 20 74 68 65 20 53  .**.** Run the S
2de60 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 6f 72 20  QL statement or 
2de70 73 74 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69  statements speci
2de80 66 69 65 64 20 69 6e 20 74 68 65 20 50 34 20 73  fied in the P4 s
2de90 74 72 69 6e 67 2e 0a 2a 2f 0a 63 61 73 65 20 4f  tring..*/.case O
2dea0 50 5f 53 71 6c 45 78 65 63 3a 20 7b 0a 20 20 64  P_SqlExec: {.  d
2deb0 62 2d 3e 6e 53 71 6c 45 78 65 63 2b 2b 3b 0a 20  b->nSqlExec++;. 
2dec0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78   rc = sqlite3_ex
2ded0 65 63 28 64 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a  ec(db, pOp->p4.z
2dee0 2c 20 30 2c 20 30 2c 20 30 29 3b 0a 20 20 64 62  , 0, 0, 0);.  db
2def0 2d 3e 6e 53 71 6c 45 78 65 63 2d 2d 3b 0a 20 20  ->nSqlExec--;.  
2df00 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
2df10 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
2df20 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
2df30 20 4f 70 63 6f 64 65 3a 20 50 61 72 73 65 53 63   Opcode: ParseSc
2df40 68 65 6d 61 20 50 31 20 2a 20 2a 20 50 34 20 2a  hema P1 * * P4 *
2df50 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 61 6e 64 20  .**.** Read and 
2df60 70 61 72 73 65 20 61 6c 6c 20 65 6e 74 72 69 65  parse all entrie
2df70 73 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 49 54  s from the SQLIT
2df80 45 5f 4d 41 53 54 45 52 20 74 61 62 6c 65 20 6f  E_MASTER table o
2df90 66 20 64 61 74 61 62 61 73 65 20 50 31 0a 2a 2a  f database P1.**
2dfa0 20 74 68 61 74 20 6d 61 74 63 68 20 74 68 65 20   that match the 
2dfb0 57 48 45 52 45 20 63 6c 61 75 73 65 20 50 34 2e  WHERE clause P4.
2dfc0 20 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63   .**.** This opc
2dfd0 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20  ode invokes the 
2dfe0 70 61 72 73 65 72 20 74 6f 20 63 72 65 61 74 65  parser to create
2dff0 20 61 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d   a new virtual m
2e000 61 63 68 69 6e 65 2c 0a 2a 2a 20 74 68 65 6e 20  achine,.** then 
2e010 72 75 6e 73 20 74 68 65 20 6e 65 77 20 76 69 72  runs the new vir
2e020 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49  tual machine.  I
2e030 74 20 69 73 20 74 68 75 73 20 61 20 72 65 2d 65  t is thus a re-e
2e040 6e 74 72 61 6e 74 20 6f 70 63 6f 64 65 2e 0a 2a  ntrant opcode..*
2e050 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 73 65 53  /.case OP_ParseS
2e060 63 68 65 6d 61 3a 20 7b 0a 20 20 69 6e 74 20 69  chema: {.  int i
2e070 44 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  Db;.  const char
2e080 20 2a 7a 4d 61 73 74 65 72 3b 0a 20 20 63 68 61   *zMaster;.  cha
2e090 72 20 2a 7a 53 71 6c 3b 0a 20 20 49 6e 69 74 44  r *zSql;.  InitD
2e0a0 61 74 61 20 69 6e 69 74 44 61 74 61 3b 0a 0a 20  ata initData;.. 
2e0b0 20 2f 2a 20 41 6e 79 20 70 72 65 70 61 72 65 64   /* Any prepared
2e0c0 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20   statement that 
2e0d0 69 6e 76 6f 6b 65 73 20 74 68 69 73 20 6f 70 63  invokes this opc
2e0e0 6f 64 65 20 77 69 6c 6c 20 68 6f 6c 64 20 6d 75  ode will hold mu
2e0f0 74 65 78 65 73 0a 20 20 2a 2a 20 6f 6e 20 65 76  texes.  ** on ev
2e100 65 72 79 20 62 74 72 65 65 2e 20 20 54 68 69 73  ery btree.  This
2e110 20 69 73 20 61 20 70 72 65 72 65 71 75 69 73 69   is a prerequisi
2e120 74 65 20 66 6f 72 20 69 6e 76 6f 6b 69 6e 67 20  te for invoking 
2e130 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 49 6e 69  .  ** sqlite3Ini
2e140 74 43 61 6c 6c 62 61 63 6b 28 29 2e 0a 20 20 2a  tCallback()..  *
2e150 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
2e160 44 45 42 55 47 0a 20 20 66 6f 72 28 69 44 62 3d  DEBUG.  for(iDb=
2e170 30 3b 20 69 44 62 3c 64 62 2d 3e 6e 44 62 3b 20  0; iDb<db->nDb; 
2e180 69 44 62 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65  iDb++){.    asse
2e190 72 74 28 20 69 44 62 3d 3d 31 20 7c 7c 20 73 71  rt( iDb==1 || sq
2e1a0 6c 69 74 65 33 42 74 72 65 65 48 6f 6c 64 73 4d  lite3BtreeHoldsM
2e1b0 75 74 65 78 28 64 62 2d 3e 61 44 62 5b 69 44 62  utex(db->aDb[iDb
2e1c0 5d 2e 70 42 74 29 20 29 3b 0a 20 20 7d 0a 23 65  ].pBt) );.  }.#e
2e1d0 6e 64 69 66 0a 0a 20 20 69 44 62 20 3d 20 70 4f  ndif..  iDb = pO
2e1e0 70 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72 74 28  p->p1;.  assert(
2e1f0 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64   iDb>=0 && iDb<d
2e200 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
2e210 72 74 28 20 44 62 48 61 73 50 72 6f 70 65 72 74  rt( DbHasPropert
2e220 79 28 64 62 2c 20 69 44 62 2c 20 44 42 5f 53 63  y(db, iDb, DB_Sc
2e230 68 65 6d 61 4c 6f 61 64 65 64 29 20 29 3b 0a 20  hemaLoaded) );. 
2e240 20 2f 2a 20 55 73 65 64 20 74 6f 20 62 65 20 61   /* Used to be a
2e250 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 2a 2f 20   conditional */ 
2e260 7b 0a 20 20 20 20 7a 4d 61 73 74 65 72 20 3d 20  {.    zMaster = 
2e270 4d 41 53 54 45 52 5f 4e 41 4d 45 3b 0a 20 20 20  MASTER_NAME;.   
2e280 20 69 6e 69 74 44 61 74 61 2e 64 62 20 3d 20 64   initData.db = d
2e290 62 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e  b;.    initData.
2e2a0 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  iDb = pOp->p1;. 
2e2b0 20 20 20 69 6e 69 74 44 61 74 61 2e 70 7a 45 72     initData.pzEr
2e2c0 72 4d 73 67 20 3d 20 26 70 2d 3e 7a 45 72 72 4d  rMsg = &p->zErrM
2e2d0 73 67 3b 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73  sg;.    zSql = s
2e2e0 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62  qlite3MPrintf(db
2e2f0 2c 0a 20 20 20 20 20 20 20 22 53 45 4c 45 43 54  ,.       "SELECT
2e300 20 6e 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c   name, rootpage,
2e310 20 73 71 6c 20 46 52 4f 4d 20 27 25 71 27 2e 25   sql FROM '%q'.%
2e320 73 20 57 48 45 52 45 20 25 73 20 4f 52 44 45 52  s WHERE %s ORDER
2e330 20 42 59 20 72 6f 77 69 64 22 2c 0a 20 20 20 20   BY rowid",.    
2e340 20 20 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e     db->aDb[iDb].
2e350 7a 44 62 53 4e 61 6d 65 2c 20 7a 4d 61 73 74 65  zDbSName, zMaste
2e360 72 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  r, pOp->p4.z);. 
2e370 20 20 20 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29     if( zSql==0 )
2e380 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
2e390 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 3b 0a  ITE_NOMEM_BKPT;.
2e3a0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
2e3b0 20 61 73 73 65 72 74 28 20 64 62 2d 3e 69 6e 69   assert( db->ini
2e3c0 74 2e 62 75 73 79 3d 3d 30 20 29 3b 0a 20 20 20  t.busy==0 );.   
2e3d0 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79     db->init.busy
2e3e0 20 3d 20 31 3b 0a 20 20 20 20 20 20 69 6e 69 74   = 1;.      init
2e3f0 44 61 74 61 2e 72 63 20 3d 20 53 51 4c 49 54 45  Data.rc = SQLITE
2e400 5f 4f 4b 3b 0a 20 20 20 20 20 20 61 73 73 65 72  _OK;.      asser
2e410 74 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  t( !db->mallocFa
2e420 69 6c 65 64 20 29 3b 0a 20 20 20 20 20 20 72 63  iled );.      rc
2e430 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28   = sqlite3_exec(
2e440 64 62 2c 20 7a 53 71 6c 2c 20 73 71 6c 69 74 65  db, zSql, sqlite
2e450 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2c 20 26  3InitCallback, &
2e460 69 6e 69 74 44 61 74 61 2c 20 30 29 3b 0a 20 20  initData, 0);.  
2e470 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
2e480 54 45 5f 4f 4b 20 29 20 72 63 20 3d 20 69 6e 69  TE_OK ) rc = ini
2e490 74 44 61 74 61 2e 72 63 3b 0a 20 20 20 20 20 20  tData.rc;.      
2e4a0 73 71 6c 69 74 65 33 44 62 46 72 65 65 4e 4e 28  sqlite3DbFreeNN(
2e4b0 64 62 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20  db, zSql);.     
2e4c0 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d   db->init.busy =
2e4d0 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20   0;.    }.  }.  
2e4e0 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 73 71  if( rc ){.    sq
2e4f0 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68  lite3ResetAllSch
2e500 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e  emasOfConnection
2e510 28 64 62 29 3b 0a 20 20 20 20 69 66 28 20 72 63  (db);.    if( rc
2e520 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29  ==SQLITE_NOMEM )
2e530 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f  {.      goto no_
2e540 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67  mem;.    }.    g
2e550 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
2e560 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 62 72  _error;.  }.  br
2e570 65 61 6b 3b 20 20 0a 7d 0a 0a 23 69 66 20 21 64  eak;  .}..#if !d
2e580 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
2e590 49 54 5f 41 4e 41 4c 59 5a 45 29 0a 2f 2a 20 4f  IT_ANALYZE)./* O
2e5a0 70 63 6f 64 65 3a 20 4c 6f 61 64 41 6e 61 6c 79  pcode: LoadAnaly
2e5b0 73 69 73 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  sis P1 * * * *.*
2e5c0 2a 0a 2a 2a 20 52 65 61 64 20 74 68 65 20 73 71  *.** Read the sq
2e5d0 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65  lite_stat1 table
2e5e0 20 66 6f 72 20 64 61 74 61 62 61 73 65 20 50 31   for database P1
2e5f0 20 61 6e 64 20 6c 6f 61 64 20 74 68 65 20 63 6f   and load the co
2e600 6e 74 65 6e 74 0a 2a 2a 20 6f 66 20 74 68 61 74  ntent.** of that
2e610 20 74 61 62 6c 65 20 69 6e 74 6f 20 74 68 65 20   table into the 
2e620 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78 20 68  internal index h
2e630 61 73 68 20 74 61 62 6c 65 2e 20 20 54 68 69 73  ash table.  This
2e640 20 77 69 6c 6c 20 63 61 75 73 65 0a 2a 2a 20 74   will cause.** t
2e650 68 65 20 61 6e 61 6c 79 73 69 73 20 74 6f 20 62  he analysis to b
2e660 65 20 75 73 65 64 20 77 68 65 6e 20 70 72 65 70  e used when prep
2e670 61 72 69 6e 67 20 61 6c 6c 20 73 75 62 73 65 71  aring all subseq
2e680 75 65 6e 74 20 71 75 65 72 69 65 73 2e 0a 2a 2f  uent queries..*/
2e690 0a 63 61 73 65 20 4f 50 5f 4c 6f 61 64 41 6e 61  .case OP_LoadAna
2e6a0 6c 79 73 69 73 3a 20 7b 0a 20 20 61 73 73 65 72  lysis: {.  asser
2e6b0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
2e6c0 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62   pOp->p1<db->nDb
2e6d0 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
2e6e0 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 64  e3AnalysisLoad(d
2e6f0 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 69  b, pOp->p1);.  i
2e700 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
2e710 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
2e720 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 23 65  .  break;  .}.#e
2e730 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64  ndif /* !defined
2e740 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41  (SQLITE_OMIT_ANA
2e750 4c 59 5a 45 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63  LYZE) */../* Opc
2e760 6f 64 65 3a 20 44 72 6f 70 54 61 62 6c 65 20 50  ode: DropTable P
2e770 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
2e780 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65   Remove the inte
2e790 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29  rnal (in-memory)
2e7a0 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73   data structures
2e7b0 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a   that describe.*
2e7c0 2a 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65  * the table name
2e7d0 64 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65  d P4 in database
2e7e0 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61   P1.  This is ca
2e7f0 6c 6c 65 64 20 61 66 74 65 72 20 61 20 74 61 62  lled after a tab
2e800 6c 65 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64  le.** is dropped
2e810 20 66 72 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e   from disk (usin
2e820 67 20 74 68 65 20 44 65 73 74 72 6f 79 20 6f 70  g the Destroy op
2e830 63 6f 64 65 29 20 69 6e 20 6f 72 64 65 72 20 74  code) in order t
2e840 6f 20 6b 65 65 70 20 0a 2a 2a 20 74 68 65 20 69  o keep .** the i
2e850 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e  nternal represen
2e860 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  tation of the.**
2e870 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65   schema consiste
2e880 6e 74 20 77 69 74 68 20 77 68 61 74 20 69 73 20  nt with what is 
2e890 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65  on disk..*/.case
2e8a0 20 4f 50 5f 44 72 6f 70 54 61 62 6c 65 3a 20 7b   OP_DropTable: {
2e8b0 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  .  sqlite3Unlink
2e8c0 41 6e 64 44 65 6c 65 74 65 54 61 62 6c 65 28 64  AndDeleteTable(d
2e8d0 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  b, pOp->p1, pOp-
2e8e0 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b  >p4.z);.  break;
2e8f0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  .}../* Opcode: D
2e900 72 6f 70 49 6e 64 65 78 20 50 31 20 2a 20 2a 20  ropIndex P1 * * 
2e910 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76  P4 *.**.** Remov
2e920 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28  e the internal (
2e930 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20  in-memory) data 
2e940 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74 20  structures that 
2e950 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20  describe.** the 
2e960 69 6e 64 65 78 20 6e 61 6d 65 64 20 50 34 20 69  index named P4 i
2e970 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20  n database P1.  
2e980 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61  This is called a
2e990 66 74 65 72 20 61 6e 20 69 6e 64 65 78 0a 2a 2a  fter an index.**
2e9a0 20 69 73 20 64 72 6f 70 70 65 64 20 66 72 6f 6d   is dropped from
2e9b0 20 64 69 73 6b 20 28 75 73 69 6e 67 20 74 68 65   disk (using the
2e9c0 20 44 65 73 74 72 6f 79 20 6f 70 63 6f 64 65 29   Destroy opcode)
2e9d0 0a 2a 2a 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  .** in order to 
2e9e0 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72 6e 61  keep the interna
2e9f0 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  l representation
2ea00 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d   of the.** schem
2ea10 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74  a consistent wit
2ea20 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73  h what is on dis
2ea30 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72  k..*/.case OP_Dr
2ea40 6f 70 49 6e 64 65 78 3a 20 7b 0a 20 20 73 71 6c  opIndex: {.  sql
2ea50 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
2ea60 65 74 65 49 6e 64 65 78 28 64 62 2c 20 70 4f 70  eteIndex(db, pOp
2ea70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  ->p1, pOp->p4.z)
2ea80 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
2ea90 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 72 69   Opcode: DropTri
2eaa0 67 67 65 72 20 50 31 20 2a 20 2a 20 50 34 20 2a  gger P1 * * P4 *
2eab0 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68  .**.** Remove th
2eac0 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d  e internal (in-m
2ead0 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75  emory) data stru
2eae0 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63  ctures that desc
2eaf0 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 72 69 67  ribe.** the trig
2eb00 67 65 72 20 6e 61 6d 65 64 20 50 34 20 69 6e 20  ger named P4 in 
2eb10 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68  database P1.  Th
2eb20 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74  is is called aft
2eb30 65 72 20 61 20 74 72 69 67 67 65 72 0a 2a 2a 20  er a trigger.** 
2eb40 69 73 20 64 72 6f 70 70 65 64 20 66 72 6f 6d 20  is dropped from 
2eb50 64 69 73 6b 20 28 75 73 69 6e 67 20 74 68 65 20  disk (using the 
2eb60 44 65 73 74 72 6f 79 20 6f 70 63 6f 64 65 29 20  Destroy opcode) 
2eb70 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70  in order to keep
2eb80 20 0a 2a 2a 20 74 68 65 20 69 6e 74 65 72 6e 61   .** the interna
2eb90 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  l representation
2eba0 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d   of the.** schem
2ebb0 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74  a consistent wit
2ebc0 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73  h what is on dis
2ebd0 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72  k..*/.case OP_Dr
2ebe0 6f 70 54 72 69 67 67 65 72 3a 20 7b 0a 20 20 73  opTrigger: {.  s
2ebf0 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
2ec00 65 6c 65 74 65 54 72 69 67 67 65 72 28 64 62 2c  eleteTrigger(db,
2ec10 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
2ec20 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  4.z);.  break;.}
2ec30 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ...#ifndef SQLIT
2ec40 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59  E_OMIT_INTEGRITY
2ec50 5f 43 48 45 43 4b 0a 2f 2a 20 4f 70 63 6f 64 65  _CHECK./* Opcode
2ec60 3a 20 49 6e 74 65 67 72 69 74 79 43 6b 20 50 31  : IntegrityCk P1
2ec70 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
2ec80 2a 2a 20 44 6f 20 61 6e 20 61 6e 61 6c 79 73 69  ** Do an analysi
2ec90 73 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  s of the current
2eca0 6c 79 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65  ly open database
2ecb0 2e 20 20 53 74 6f 72 65 20 69 6e 0a 2a 2a 20 72  .  Store in.** r
2ecc0 65 67 69 73 74 65 72 20 50 31 20 74 68 65 20 74  egister P1 the t
2ecd0 65 78 74 20 6f 66 20 61 6e 20 65 72 72 6f 72 20  ext of an error 
2ece0 6d 65 73 73 61 67 65 20 64 65 73 63 72 69 62 69  message describi
2ecf0 6e 67 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e  ng any problems.
2ed00 0a 2a 2a 20 49 66 20 6e 6f 20 70 72 6f 62 6c 65  .** If no proble
2ed10 6d 73 20 61 72 65 20 66 6f 75 6e 64 2c 20 73 74  ms are found, st
2ed20 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20 72 65  ore a NULL in re
2ed30 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a  gister P1..**.**
2ed40 20 54 68 65 20 72 65 67 69 73 74 65 72 20 50 33   The register P3
2ed50 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6c 65   contains one le
2ed60 73 73 20 74 68 61 6e 20 74 68 65 20 6d 61 78 69  ss than the maxi
2ed70 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 61 6c  mum number of al
2ed80 6c 6f 77 65 64 20 65 72 72 6f 72 73 2e 0a 2a 2a  lowed errors..**
2ed90 20 41 74 20 6d 6f 73 74 20 72 65 67 28 50 33 29   At most reg(P3)
2eda0 20 65 72 72 6f 72 73 20 77 69 6c 6c 20 62 65 20   errors will be 
2edb0 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 20 49 6e 20  reported..** In 
2edc0 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
2edd0 20 61 6e 61 6c 79 73 69 73 20 73 74 6f 70 73 20   analysis stops 
2ede0 61 73 20 73 6f 6f 6e 20 61 73 20 72 65 67 28 50  as soon as reg(P
2edf0 31 29 20 65 72 72 6f 72 73 20 61 72 65 20 0a 2a  1) errors are .*
2ee00 2a 20 73 65 65 6e 2e 20 20 52 65 67 28 50 31 29  * seen.  Reg(P1)
2ee10 20 69 73 20 75 70 64 61 74 65 64 20 77 69 74 68   is updated with
2ee20 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65   the number of e
2ee30 72 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67 2e  rrors remaining.
2ee40 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 20  .**.** The root 
2ee50 70 61 67 65 20 6e 75 6d 62 65 72 73 20 6f 66 20  page numbers of 
2ee60 61 6c 6c 20 74 61 62 6c 65 73 20 69 6e 20 74 68  all tables in th
2ee70 65 20 64 61 74 61 62 61 73 65 20 61 72 65 20 69  e database are i
2ee80 6e 74 65 67 65 72 73 0a 2a 2a 20 73 74 6f 72 65  ntegers.** store
2ee90 64 20 69 6e 20 50 34 5f 49 4e 54 41 52 52 41 59  d in P4_INTARRAY
2eea0 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a   argument..**.**
2eeb0 20 49 66 20 50 35 20 69 73 20 6e 6f 74 20 7a 65   If P5 is not ze
2eec0 72 6f 2c 20 74 68 65 20 63 68 65 63 6b 20 69 73  ro, the check is
2eed0 20 64 6f 6e 65 20 6f 6e 20 74 68 65 20 61 75 78   done on the aux
2eee0 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 0a  iliary database.
2eef0 2a 2a 20 66 69 6c 65 2c 20 6e 6f 74 20 74 68 65  ** file, not the
2ef00 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
2ef10 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ile..**.** This 
2ef20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 74  opcode is used t
2ef30 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20  o implement the 
2ef40 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 20  integrity_check 
2ef50 70 72 61 67 6d 61 2e 0a 2a 2f 0a 63 61 73 65 20  pragma..*/.case 
2ef60 4f 50 5f 49 6e 74 65 67 72 69 74 79 43 6b 3a 20  OP_IntegrityCk: 
2ef70 7b 0a 20 20 69 6e 74 20 6e 52 6f 6f 74 3b 20 20  {.  int nRoot;  
2ef80 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
2ef90 20 74 61 62 6c 65 73 20 74 6f 20 63 68 65 63 6b   tables to check
2efa0 2e 20 20 28 4e 75 6d 62 65 72 20 6f 66 20 72 6f  .  (Number of ro
2efb0 6f 74 20 70 61 67 65 73 2e 29 20 2a 2f 0a 20 20  ot pages.) */.  
2efc0 69 6e 74 20 2a 61 52 6f 6f 74 3b 20 20 20 20 20  int *aRoot;     
2efd0 2f 2a 20 41 72 72 61 79 20 6f 66 20 72 6f 6f 74  /* Array of root
2efe0 70 61 67 65 20 6e 75 6d 62 65 72 73 20 66 6f 72  page numbers for
2eff0 20 74 61 62 6c 65 73 20 74 6f 20 62 65 20 63 68   tables to be ch
2f000 65 63 6b 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e  ecked */.  int n
2f010 45 72 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75  Err;       /* Nu
2f020 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72  mber of errors r
2f030 65 70 6f 72 74 65 64 20 2a 2f 0a 20 20 63 68 61  eported */.  cha
2f040 72 20 2a 7a 3b 20 20 20 20 20 20 20 20 2f 2a 20  r *z;        /* 
2f050 54 65 78 74 20 6f 66 20 74 68 65 20 65 72 72 6f  Text of the erro
2f060 72 20 72 65 70 6f 72 74 20 2a 2f 0a 20 20 4d 65  r report */.  Me
2f070 6d 20 2a 70 6e 45 72 72 3b 20 20 20 20 20 2f 2a  m *pnErr;     /*
2f080 20 52 65 67 69 73 74 65 72 20 6b 65 65 70 69 6e   Register keepin
2f090 67 20 74 72 61 63 6b 20 6f 66 20 65 72 72 6f 72  g track of error
2f0a0 73 20 72 65 6d 61 69 6e 69 6e 67 20 2a 2f 0a 0a  s remaining */..
2f0b0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73    assert( p->bIs
2f0c0 52 65 61 64 65 72 20 29 3b 0a 20 20 6e 52 6f 6f  Reader );.  nRoo
2f0d0 74 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61  t = pOp->p2;.  a
2f0e0 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70 34 2e 61  Root = pOp->p4.a
2f0f0 69 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 52 6f  i;.  assert( nRo
2f100 6f 74 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74  ot>0 );.  assert
2f110 28 20 61 52 6f 6f 74 5b 6e 52 6f 6f 74 5d 3d 3d  ( aRoot[nRoot]==
2f120 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
2f130 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d  Op->p3>0 && pOp-
2f140 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  >p3<=(p->nMem+1 
2f150 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  - p->nCursor) );
2f160 0a 20 20 70 6e 45 72 72 20 3d 20 26 61 4d 65 6d  .  pnErr = &aMem
2f170 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73  [pOp->p3];.  ass
2f180 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61  ert( (pnErr->fla
2f190 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  gs & MEM_Int)!=0
2f1a0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   );.  assert( (p
2f1b0 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26 20 28 4d  nErr->flags & (M
2f1c0 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29  EM_Str|MEM_Blob)
2f1d0 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d  )==0 );.  pIn1 =
2f1e0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
2f1f0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2f200 70 35 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p5<db->nDb );.  
2f210 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65  assert( DbMaskTe
2f220 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c  st(p->btreeMask,
2f230 20 70 4f 70 2d 3e 70 35 29 20 29 3b 0a 20 20 7a   pOp->p5) );.  z
2f240 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49   = sqlite3BtreeI
2f250 6e 74 65 67 72 69 74 79 43 68 65 63 6b 28 64 62  ntegrityCheck(db
2f260 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 35 5d 2e 70  ->aDb[pOp->p5].p
2f270 42 74 2c 20 61 52 6f 6f 74 2c 20 6e 52 6f 6f 74  Bt, aRoot, nRoot
2f280 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
2f290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f2a0 20 20 20 28 69 6e 74 29 70 6e 45 72 72 2d 3e 75     (int)pnErr->u
2f2b0 2e 69 2b 31 2c 20 26 6e 45 72 72 29 3b 0a 20 20  .i+1, &nErr);.  
2f2c0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
2f2d0 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 69  tNull(pIn1);.  i
2f2e0 66 28 20 6e 45 72 72 3d 3d 30 20 29 7b 0a 20 20  f( nErr==0 ){.  
2f2f0 20 20 61 73 73 65 72 74 28 20 7a 3d 3d 30 20 29    assert( z==0 )
2f300 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 7a 3d  ;.  }else if( z=
2f310 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e  =0 ){.    goto n
2f320 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c 73 65 7b 0a  o_mem;.  }else{.
2f330 20 20 20 20 70 6e 45 72 72 2d 3e 75 2e 69 20 2d      pnErr->u.i -
2f340 3d 20 6e 45 72 72 2d 31 3b 0a 20 20 20 20 73 71  = nErr-1;.    sq
2f350 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53  lite3VdbeMemSetS
2f360 74 72 28 70 49 6e 31 2c 20 7a 2c 20 2d 31 2c 20  tr(pIn1, z, -1, 
2f370 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 73 71 6c  SQLITE_UTF8, sql
2f380 69 74 65 33 5f 66 72 65 65 29 3b 0a 20 20 7d 0a  ite3_free);.  }.
2f390 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
2f3a0 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 73  BSIZE(pIn1);.  s
2f3b0 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
2f3c0 45 6e 63 6f 64 69 6e 67 28 70 49 6e 31 2c 20 65  Encoding(pIn1, e
2f3d0 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 62 72 65 61  ncoding);.  brea
2f3e0 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
2f3f0 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47  QLITE_OMIT_INTEG
2f400 52 49 54 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a 2f  RITY_CHECK */../
2f410 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74  * Opcode: RowSet
2f420 41 64 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Add P1 P2 * * *.
2f430 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 77  ** Synopsis: row
2f440 73 65 74 28 50 31 29 3d 72 5b 50 32 5d 0a 2a 2a  set(P1)=r[P2].**
2f450 0a 2a 2a 20 49 6e 73 65 72 74 20 74 68 65 20 69  .** Insert the i
2f460 6e 74 65 67 65 72 20 76 61 6c 75 65 20 68 65 6c  nteger value hel
2f470 64 20 62 79 20 72 65 67 69 73 74 65 72 20 50 32  d by register P2
2f480 20 69 6e 74 6f 20 61 20 52 6f 77 53 65 74 20 6f   into a RowSet o
2f490 62 6a 65 63 74 0a 2a 2a 20 68 65 6c 64 20 69 6e  bject.** held in
2f4a0 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
2f4b0 0a 2a 2a 20 41 6e 20 61 73 73 65 72 74 69 6f 6e  .** An assertion
2f4c0 20 66 61 69 6c 73 20 69 66 20 50 32 20 69 73 20   fails if P2 is 
2f4d0 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a  not an integer..
2f4e0 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65  */.case OP_RowSe
2f4f0 74 41 64 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a  tAdd: {       /*
2f500 20 69 6e 31 2c 20 69 6e 32 20 2a 2f 0a 20 20 70   in1, in2 */.  p
2f510 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
2f520 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26  >p1];.  pIn2 = &
2f530 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
2f540 20 61 73 73 65 72 74 28 20 28 70 49 6e 32 2d 3e   assert( (pIn2->
2f550 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
2f560 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 28 70 49  !=0 );.  if( (pI
2f570 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
2f580 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20  RowSet)==0 ){.  
2f590 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2f5a0 53 65 74 52 6f 77 53 65 74 28 70 49 6e 31 29 3b  SetRowSet(pIn1);
2f5b0 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  .    if( (pIn1->
2f5c0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53  flags & MEM_RowS
2f5d0 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  et)==0 ) goto no
2f5e0 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  _mem;.  }.  sqli
2f5f0 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28  te3RowSetInsert(
2f600 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c  pIn1->u.pRowSet,
2f610 20 70 49 6e 32 2d 3e 75 2e 69 29 3b 0a 20 20 62   pIn2->u.i);.  b
2f620 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2f630 64 65 3a 20 52 6f 77 53 65 74 52 65 61 64 20 50  de: RowSetRead P
2f640 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
2f650 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72  ynopsis: r[P3]=r
2f660 6f 77 73 65 74 28 50 31 29 0a 2a 2a 0a 2a 2a 20  owset(P1).**.** 
2f670 45 78 74 72 61 63 74 20 74 68 65 20 73 6d 61 6c  Extract the smal
2f680 6c 65 73 74 20 76 61 6c 75 65 20 66 72 6f 6d 20  lest value from 
2f690 74 68 65 20 52 6f 77 53 65 74 20 6f 62 6a 65 63  the RowSet objec
2f6a0 74 20 69 6e 20 50 31 0a 2a 2a 20 61 6e 64 20 70  t in P1.** and p
2f6b0 75 74 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e  ut that value in
2f6c0 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  to register P3..
2f6d0 2a 2a 20 4f 72 2c 20 69 66 20 52 6f 77 53 65 74  ** Or, if RowSet
2f6e0 20 6f 62 6a 65 63 74 20 50 31 20 69 73 20 69 6e   object P1 is in
2f6f0 69 74 69 61 6c 6c 79 20 65 6d 70 74 79 2c 20 6c  itially empty, l
2f700 65 61 76 65 20 50 33 0a 2a 2a 20 75 6e 63 68 61  eave P3.** uncha
2f710 6e 67 65 64 20 61 6e 64 20 6a 75 6d 70 20 74 6f  nged and jump to
2f720 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e   instruction P2.
2f730 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53  .*/.case OP_RowS
2f740 65 74 52 65 61 64 3a 20 7b 20 20 20 20 20 20 20  etRead: {       
2f750 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 6f 75  /* jump, in1, ou
2f760 74 33 20 2a 2f 0a 20 20 69 36 34 20 76 61 6c 3b  t3 */.  i64 val;
2f770 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
2f780 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
2f790 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
2f7a0 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 0a  MEM_RowSet)==0 .
2f7b0 20 20 20 7c 7c 20 73 71 6c 69 74 65 33 52 6f 77     || sqlite3Row
2f7c0 53 65 74 4e 65 78 74 28 70 49 6e 31 2d 3e 75 2e  SetNext(pIn1->u.
2f7d0 70 52 6f 77 53 65 74 2c 20 26 76 61 6c 29 3d 3d  pRowSet, &val)==
2f7e0 30 0a 20 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  0.  ){.    /* Th
2f7f0 65 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20  e boolean index 
2f800 69 73 20 65 6d 70 74 79 20 2a 2f 0a 20 20 20 20  is empty */.    
2f810 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
2f820 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 20  tNull(pIn1);.   
2f830 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
2f840 28 31 2c 32 29 3b 0a 20 20 20 20 67 6f 74 6f 20  (1,2);.    goto 
2f850 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63  jump_to_p2_and_c
2f860 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75  heck_for_interru
2f870 70 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  pt;.  }else{.   
2f880 20 2f 2a 20 41 20 76 61 6c 75 65 20 77 61 73 20   /* A value was 
2f890 70 75 6c 6c 65 64 20 66 72 6f 6d 20 74 68 65 20  pulled from the 
2f8a0 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 56 64 62  index */.    Vdb
2f8b0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c 32  eBranchTaken(0,2
2f8c0 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
2f8d0 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61  beMemSetInt64(&a
2f8e0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2c 20 76 61  Mem[pOp->p3], va
2f8f0 6c 29 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 63  l);.  }.  goto c
2f900 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75  heck_for_interru
2f910 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  pt;.}../* Opcode
2f920 3a 20 52 6f 77 53 65 74 54 65 73 74 20 50 31 20  : RowSetTest P1 
2f930 50 32 20 50 33 20 50 34 0a 2a 2a 20 53 79 6e 6f  P2 P3 P4.** Syno
2f940 70 73 69 73 3a 20 69 66 20 72 5b 50 33 5d 20 69  psis: if r[P3] i
2f950 6e 20 72 6f 77 73 65 74 28 50 31 29 20 67 6f 74  n rowset(P1) got
2f960 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73  o P2.**.** Regis
2f970 74 65 72 20 50 33 20 69 73 20 61 73 73 75 6d 65  ter P3 is assume
2f980 64 20 74 6f 20 68 6f 6c 64 20 61 20 36 34 2d 62  d to hold a 64-b
2f990 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  it integer value
2f9a0 2e 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31  . If register P1
2f9b0 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61 20 52  .** contains a R
2f9c0 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 61 6e 64  owSet object and
2f9d0 20 74 68 61 74 20 52 6f 77 53 65 74 20 6f 62 6a   that RowSet obj
2f9e0 65 63 74 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20  ect contains.** 
2f9f0 74 68 65 20 76 61 6c 75 65 20 68 65 6c 64 20 69  the value held i
2fa00 6e 20 50 33 2c 20 6a 75 6d 70 20 74 6f 20 72 65  n P3, jump to re
2fa10 67 69 73 74 65 72 20 50 32 2e 20 4f 74 68 65 72  gister P2. Other
2fa20 77 69 73 65 2c 20 69 6e 73 65 72 74 20 74 68 65  wise, insert the
2fa30 0a 2a 2a 20 69 6e 74 65 67 65 72 20 69 6e 20 50  .** integer in P
2fa40 33 20 69 6e 74 6f 20 74 68 65 20 52 6f 77 53 65  3 into the RowSe
2fa50 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65 20 6f  t and continue o
2fa60 6e 20 74 6f 20 74 68 65 0a 2a 2a 20 6e 65 78 74  n to the.** next
2fa70 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54   opcode..**.** T
2fa80 68 65 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74  he RowSet object
2fa90 20 69 73 20 6f 70 74 69 6d 69 7a 65 64 20 66 6f   is optimized fo
2faa0 72 20 74 68 65 20 63 61 73 65 20 77 68 65 72 65  r the case where
2fab0 20 73 65 74 73 20 6f 66 20 69 6e 74 65 67 65 72   sets of integer
2fac0 73 0a 2a 2a 20 61 72 65 20 69 6e 73 65 72 74 65  s.** are inserte
2fad0 64 20 69 6e 20 64 69 73 74 69 6e 63 74 20 70 68  d in distinct ph
2fae0 61 73 65 73 2c 20 77 68 69 63 68 20 65 61 63 68  ases, which each
2faf0 20 73 65 74 20 63 6f 6e 74 61 69 6e 73 20 6e 6f   set contains no
2fb00 20 64 75 70 6c 69 63 61 74 65 73 2e 0a 2a 2a 20   duplicates..** 
2fb10 45 61 63 68 20 73 65 74 20 69 73 20 69 64 65 6e  Each set is iden
2fb20 74 69 66 69 65 64 20 62 79 20 61 20 75 6e 69 71  tified by a uniq
2fb30 75 65 20 50 34 20 76 61 6c 75 65 2e 20 54 68 65  ue P4 value. The
2fb40 20 66 69 72 73 74 20 73 65 74 0a 2a 2a 20 6d 75   first set.** mu
2fb50 73 74 20 68 61 76 65 20 50 34 3d 3d 30 2c 20 74  st have P4==0, t
2fb60 68 65 20 66 69 6e 61 6c 20 73 65 74 20 6d 75 73  he final set mus
2fb70 74 20 68 61 76 65 20 50 34 3d 3d 2d 31 2c 20 61  t have P4==-1, a
2fb80 6e 64 20 66 6f 72 20 61 6c 6c 20 6f 74 68 65 72  nd for all other
2fb90 20 73 65 74 73 0a 2a 2a 20 6d 75 73 74 20 68 61   sets.** must ha
2fba0 76 65 20 50 34 3e 30 2e 0a 2a 2a 0a 2a 2a 20 54  ve P4>0..**.** T
2fbb0 68 69 73 20 61 6c 6c 6f 77 73 20 6f 70 74 69 6d  his allows optim
2fbc0 69 7a 61 74 69 6f 6e 73 3a 20 28 61 29 20 77 68  izations: (a) wh
2fbd0 65 6e 20 50 34 3d 3d 30 20 74 68 65 72 65 20 69  en P4==0 there i
2fbe0 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 74 65 73  s no need to tes
2fbf0 74 0a 2a 2a 20 74 68 65 20 52 6f 77 53 65 74 20  t.** the RowSet 
2fc00 6f 62 6a 65 63 74 20 66 6f 72 20 50 33 2c 20 61  object for P3, a
2fc10 73 20 69 74 20 69 73 20 67 75 61 72 61 6e 74 65  s it is guarante
2fc20 65 64 20 6e 6f 74 20 74 6f 20 63 6f 6e 74 61 69  ed not to contai
2fc30 6e 20 69 74 2c 0a 2a 2a 20 28 62 29 20 77 68 65  n it,.** (b) whe
2fc40 6e 20 50 34 3d 3d 2d 31 20 74 68 65 72 65 20 69  n P4==-1 there i
2fc50 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20 69 6e 73  s no need to ins
2fc60 65 72 74 20 74 68 65 20 76 61 6c 75 65 2c 20 61  ert the value, a
2fc70 73 20 69 74 20 77 69 6c 6c 0a 2a 2a 20 6e 65 76  s it will.** nev
2fc80 65 72 20 62 65 20 74 65 73 74 65 64 20 66 6f 72  er be tested for
2fc90 2c 20 61 6e 64 20 28 63 29 20 77 68 65 6e 20 61  , and (c) when a
2fca0 20 76 61 6c 75 65 20 74 68 61 74 20 69 73 20 70   value that is p
2fcb0 61 72 74 20 6f 66 20 73 65 74 20 58 20 69 73 0a  art of set X is.
2fcc0 2a 2a 20 69 6e 73 65 72 74 65 64 2c 20 74 68 65  ** inserted, the
2fcd0 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f  re is no need to
2fce0 20 73 65 61 72 63 68 20 74 6f 20 73 65 65 20 69   search to see i
2fcf0 66 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65  f the same value
2fd00 20 77 61 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73   was.** previous
2fd10 6c 79 20 69 6e 73 65 72 74 65 64 20 61 73 20 70  ly inserted as p
2fd20 61 72 74 20 6f 66 20 73 65 74 20 58 20 28 6f 6e  art of set X (on
2fd30 6c 79 20 69 66 20 69 74 20 77 61 73 20 70 72 65  ly if it was pre
2fd40 76 69 6f 75 73 6c 79 0a 2a 2a 20 69 6e 73 65 72  viously.** inser
2fd50 74 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 73  ted as part of s
2fd60 6f 6d 65 20 6f 74 68 65 72 20 73 65 74 29 2e 0a  ome other set)..
2fd70 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65  */.case OP_RowSe
2fd80 74 54 65 73 74 3a 20 7b 20 20 20 20 20 20 20 20  tTest: {        
2fd90 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2fda0 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
2fdb0 2f 0a 20 20 69 6e 74 20 69 53 65 74 3b 0a 20 20  /.  int iSet;.  
2fdc0 69 6e 74 20 65 78 69 73 74 73 3b 0a 0a 20 20 70  int exists;..  p
2fdd0 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
2fde0 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26  >p1];.  pIn3 = &
2fdf0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
2fe00 20 69 53 65 74 20 3d 20 70 4f 70 2d 3e 70 34 2e   iSet = pOp->p4.
2fe10 69 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  i;.  assert( pIn
2fe20 33 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74  3->flags&MEM_Int
2fe30 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65   );..  /* If the
2fe40 72 65 20 69 73 20 61 6e 79 74 68 69 6e 67 20 6f  re is anything o
2fe50 74 68 65 72 20 74 68 61 6e 20 61 20 72 6f 77 73  ther than a rows
2fe60 65 74 20 6f 62 6a 65 63 74 20 69 6e 20 6d 65 6d  et object in mem
2fe70 6f 72 79 20 63 65 6c 6c 20 50 31 2c 0a 20 20 2a  ory cell P1,.  *
2fe80 2a 20 64 65 6c 65 74 65 20 69 74 20 6e 6f 77 20  * delete it now 
2fe90 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a 65 20 50  and initialize P
2fea0 31 20 77 69 74 68 20 61 6e 20 65 6d 70 74 79 20  1 with an empty 
2feb0 72 6f 77 73 65 74 0a 20 20 2a 2f 0a 20 20 69 66  rowset.  */.  if
2fec0 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
2fed0 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20   MEM_RowSet)==0 
2fee0 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
2fef0 62 65 4d 65 6d 53 65 74 52 6f 77 53 65 74 28 70  beMemSetRowSet(p
2ff00 49 6e 31 29 3b 0a 20 20 20 20 69 66 28 20 28 70  In1);.    if( (p
2ff10 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
2ff20 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 20 67 6f  _RowSet)==0 ) go
2ff30 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a  to no_mem;.  }..
2ff40 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2ff50 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
2ff60 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 53 65  );.  assert( iSe
2ff70 74 3d 3d 2d 31 20 7c 7c 20 69 53 65 74 3e 3d 30  t==-1 || iSet>=0
2ff80 20 29 3b 0a 20 20 69 66 28 20 69 53 65 74 20 29   );.  if( iSet )
2ff90 7b 0a 20 20 20 20 65 78 69 73 74 73 20 3d 20 73  {.    exists = s
2ffa0 71 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73 74  qlite3RowSetTest
2ffb0 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74  (pIn1->u.pRowSet
2ffc0 2c 20 69 53 65 74 2c 20 70 49 6e 33 2d 3e 75 2e  , iSet, pIn3->u.
2ffd0 69 29 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e  i);.    VdbeBran
2ffe0 63 68 54 61 6b 65 6e 28 65 78 69 73 74 73 21 3d  chTaken(exists!=
2fff0 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 65 78  0,2);.    if( ex
30000 69 73 74 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70  ists ) goto jump
30010 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 69 66  _to_p2;.  }.  if
30020 28 20 69 53 65 74 3e 3d 30 20 29 7b 0a 20 20 20  ( iSet>=0 ){.   
30030 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e   sqlite3RowSetIn
30040 73 65 72 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f  sert(pIn1->u.pRo
30050 77 53 65 74 2c 20 70 49 6e 33 2d 3e 75 2e 69 29  wSet, pIn3->u.i)
30060 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
30070 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ...#ifndef SQLIT
30080 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 0a  E_OMIT_TRIGGER..
30090 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 6f 67 72  /* Opcode: Progr
300a0 61 6d 20 50 31 20 50 32 20 50 33 20 50 34 20 50  am P1 P2 P3 P4 P
300b0 35 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20  5.**.** Execute 
300c0 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f 67  the trigger prog
300d0 72 61 6d 20 70 61 73 73 65 64 20 61 73 20 50 34  ram passed as P4
300e0 20 28 74 79 70 65 20 50 34 5f 53 55 42 50 52 4f   (type P4_SUBPRO
300f0 47 52 41 4d 29 2e 20 0a 2a 2a 0a 2a 2a 20 50 31  GRAM). .**.** P1
30100 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64   contains the ad
30110 64 72 65 73 73 20 6f 66 20 74 68 65 20 6d 65 6d  dress of the mem
30120 6f 72 79 20 63 65 6c 6c 20 74 68 61 74 20 63 6f  ory cell that co
30130 6e 74 61 69 6e 73 20 74 68 65 20 66 69 72 73 74  ntains the first
30140 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c   memory .** cell
30150 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20   in an array of 
30160 76 61 6c 75 65 73 20 75 73 65 64 20 61 73 20 61  values used as a
30170 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20  rguments to the 
30180 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20 50 32 20  sub-program. P2 
30190 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  .** contains the
301a0 20 61 64 64 72 65 73 73 20 74 6f 20 6a 75 6d 70   address to jump
301b0 20 74 6f 20 69 66 20 74 68 65 20 73 75 62 2d 70   to if the sub-p
301c0 72 6f 67 72 61 6d 20 74 68 72 6f 77 73 20 61 6e  rogram throws an
301d0 20 49 47 4e 4f 52 45 20 0a 2a 2a 20 65 78 63 65   IGNORE .** exce
301e0 70 74 69 6f 6e 20 75 73 69 6e 67 20 74 68 65 20  ption using the 
301f0 52 41 49 53 45 28 29 20 66 75 6e 63 74 69 6f 6e  RAISE() function
30200 2e 20 52 65 67 69 73 74 65 72 20 50 33 20 63 6f  . Register P3 co
30210 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64 72 65  ntains the addre
30220 73 73 20 0a 2a 2a 20 6f 66 20 61 20 6d 65 6d 6f  ss .** of a memo
30230 72 79 20 63 65 6c 6c 20 69 6e 20 74 68 69 73 20  ry cell in this 
30240 28 74 68 65 20 70 61 72 65 6e 74 29 20 56 4d 20  (the parent) VM 
30250 74 68 61 74 20 69 73 20 75 73 65 64 20 74 6f 20  that is used to 
30260 61 6c 6c 6f 63 61 74 65 20 74 68 65 20 0a 2a 2a  allocate the .**
30270 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64   memory required
30280 20 62 79 20 74 68 65 20 73 75 62 2d 76 64 62 65   by the sub-vdbe
30290 20 61 74 20 72 75 6e 74 69 6d 65 2e 0a 2a 2a 0a   at runtime..**.
302a0 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
302b0 65 72 20 74 6f 20 74 68 65 20 56 4d 20 63 6f 6e  er to the VM con
302c0 74 61 69 6e 69 6e 67 20 74 68 65 20 74 72 69 67  taining the trig
302d0 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a  ger program..**.
302e0 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 6e 2d  ** If P5 is non-
302f0 7a 65 72 6f 2c 20 74 68 65 6e 20 72 65 63 75 72  zero, then recur
30300 73 69 76 65 20 70 72 6f 67 72 61 6d 20 69 6e 76  sive program inv
30310 6f 63 61 74 69 6f 6e 20 69 73 20 65 6e 61 62 6c  ocation is enabl
30320 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50  ed..*/.case OP_P
30330 72 6f 67 72 61 6d 3a 20 7b 20 20 20 20 20 20 20  rogram: {       
30340 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e   /* jump */.  in
30350 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20 20  t nMem;         
30360 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
30370 6f 66 20 6d 65 6d 6f 72 79 20 72 65 67 69 73 74  of memory regist
30380 65 72 73 20 66 6f 72 20 73 75 62 2d 70 72 6f 67  ers for sub-prog
30390 72 61 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 79  ram */.  int nBy
303a0 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  te;             
303b0 20 2f 2a 20 42 79 74 65 73 20 6f 66 20 72 75 6e   /* Bytes of run
303c0 74 69 6d 65 20 73 70 61 63 65 20 72 65 71 75 69  time space requi
303d0 72 65 64 20 66 6f 72 20 73 75 62 2d 70 72 6f 67  red for sub-prog
303e0 72 61 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52  ram */.  Mem *pR
303f0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
30400 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20   /* Register to 
30410 61 6c 6c 6f 63 61 74 65 20 72 75 6e 74 69 6d 65  allocate runtime
30420 20 73 70 61 63 65 20 2a 2f 0a 20 20 4d 65 6d 20   space */.  Mem 
30430 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20  *pMem;          
30440 20 20 20 20 2f 2a 20 55 73 65 64 20 74 6f 20 69      /* Used to i
30450 74 65 72 61 74 65 20 74 68 72 6f 75 67 68 20 6d  terate through m
30460 65 6d 6f 72 79 20 63 65 6c 6c 73 20 2a 2f 0a 20  emory cells */. 
30470 20 4d 65 6d 20 2a 70 45 6e 64 3b 20 20 20 20 20   Mem *pEnd;     
30480 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74           /* Last
30490 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20   memory cell in 
304a0 6e 65 77 20 61 72 72 61 79 20 2a 2f 0a 20 20 56  new array */.  V
304b0 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65  dbeFrame *pFrame
304c0 3b 20 20 20 20 20 20 2f 2a 20 4e 65 77 20 76 64  ;      /* New vd
304d0 62 65 20 66 72 61 6d 65 20 74 6f 20 65 78 65 63  be frame to exec
304e0 75 74 65 20 69 6e 20 2a 2f 0a 20 20 53 75 62 50  ute in */.  SubP
304f0 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d  rogram *pProgram
30500 3b 20 20 20 2f 2a 20 53 75 62 2d 70 72 6f 67 72  ;   /* Sub-progr
30510 61 6d 20 74 6f 20 65 78 65 63 75 74 65 20 2a 2f  am to execute */
30520 0a 20 20 76 6f 69 64 20 2a 74 3b 20 20 20 20 20  .  void *t;     
30530 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f             /* To
30540 6b 65 6e 20 69 64 65 6e 74 69 66 79 69 6e 67 20  ken identifying 
30550 74 72 69 67 67 65 72 20 2a 2f 0a 0a 20 20 70 50  trigger */..  pP
30560 72 6f 67 72 61 6d 20 3d 20 70 4f 70 2d 3e 70 34  rogram = pOp->p4
30570 2e 70 50 72 6f 67 72 61 6d 3b 0a 20 20 70 52 74  .pProgram;.  pRt
30580 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
30590 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 50 72  ];.  assert( pPr
305a0 6f 67 72 61 6d 2d 3e 6e 4f 70 3e 30 20 29 3b 0a  ogram->nOp>0 );.
305b0 20 20 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 70    .  /* If the p
305c0 35 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 2c  5 flag is clear,
305d0 20 74 68 65 6e 20 72 65 63 75 72 73 69 76 65 20   then recursive 
305e0 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72  invocation of tr
305f0 69 67 67 65 72 73 20 69 73 20 0a 20 20 2a 2a 20  iggers is .  ** 
30600 64 69 73 61 62 6c 65 64 20 66 6f 72 20 62 61 63  disabled for bac
30610 6b 77 61 72 64 73 20 63 6f 6d 70 61 74 69 62 69  kwards compatibi
30620 6c 69 74 79 20 28 70 35 20 69 73 20 73 65 74 20  lity (p5 is set 
30630 69 66 20 74 68 69 73 20 73 75 62 2d 70 72 6f 67  if this sub-prog
30640 72 61 6d 0a 20 20 2a 2a 20 69 73 20 72 65 61 6c  ram.  ** is real
30650 6c 79 20 61 20 74 72 69 67 67 65 72 2c 20 6e 6f  ly a trigger, no
30660 74 20 61 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  t a foreign key 
30670 61 63 74 69 6f 6e 2c 20 61 6e 64 20 74 68 65 20  action, and the 
30680 66 6c 61 67 20 73 65 74 0a 20 20 2a 2a 20 61 6e  flag set.  ** an
30690 64 20 63 6c 65 61 72 65 64 20 62 79 20 74 68 65  d cleared by the
306a0 20 22 50 52 41 47 4d 41 20 72 65 63 75 72 73 69   "PRAGMA recursi
306b0 76 65 5f 74 72 69 67 67 65 72 73 22 20 63 6f 6d  ve_triggers" com
306c0 6d 61 6e 64 20 69 73 20 63 6c 65 61 72 29 2e 0a  mand is clear)..
306d0 20 20 2a 2a 20 0a 20 20 2a 2a 20 49 74 20 69 73    ** .  ** It is
306e0 20 72 65 63 75 72 73 69 76 65 20 69 6e 76 6f 63   recursive invoc
306f0 61 74 69 6f 6e 20 6f 66 20 74 72 69 67 67 65 72  ation of trigger
30700 73 2c 20 61 74 20 74 68 65 20 53 51 4c 20 6c 65  s, at the SQL le
30710 76 65 6c 2c 20 74 68 61 74 20 69 73 20 0a 20 20  vel, that is .  
30720 2a 2a 20 64 69 73 61 62 6c 65 64 2e 20 49 6e 20  ** disabled. In 
30730 73 6f 6d 65 20 63 61 73 65 73 20 61 20 73 69 6e  some cases a sin
30740 67 6c 65 20 74 72 69 67 67 65 72 20 6d 61 79 20  gle trigger may 
30750 67 65 6e 65 72 61 74 65 20 6d 6f 72 65 20 74 68  generate more th
30760 61 6e 20 6f 6e 65 20 0a 20 20 2a 2a 20 53 75 62  an one .  ** Sub
30770 50 72 6f 67 72 61 6d 20 28 69 66 20 74 68 65 20  Program (if the 
30780 74 72 69 67 67 65 72 20 6d 61 79 20 62 65 20 65  trigger may be e
30790 78 65 63 75 74 65 64 20 77 69 74 68 20 6d 6f 72  xecuted with mor
307a0 65 20 74 68 61 6e 20 6f 6e 65 20 64 69 66 66 65  e than one diffe
307b0 72 65 6e 74 20 0a 20 20 2a 2a 20 4f 4e 20 43 4f  rent .  ** ON CO
307c0 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d  NFLICT algorithm
307d0 29 2e 20 53 75 62 50 72 6f 67 72 61 6d 20 73 74  ). SubProgram st
307e0 72 75 63 74 75 72 65 73 20 61 73 73 6f 63 69 61  ructures associa
307f0 74 65 64 20 77 69 74 68 20 61 0a 20 20 2a 2a 20  ted with a.  ** 
30800 73 69 6e 67 6c 65 20 74 72 69 67 67 65 72 20 61  single trigger a
30810 6c 6c 20 68 61 76 65 20 74 68 65 20 73 61 6d 65  ll have the same
30820 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 53   value for the S
30830 75 62 50 72 6f 67 72 61 6d 2e 74 6f 6b 65 6e 20  ubProgram.token 
30840 0a 20 20 2a 2a 20 76 61 72 69 61 62 6c 65 2e 20  .  ** variable. 
30850 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   */.  if( pOp->p
30860 35 20 29 7b 0a 20 20 20 20 74 20 3d 20 70 50 72  5 ){.    t = pPr
30870 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20  ogram->token;.  
30880 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e    for(pFrame=p->
30890 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 20 26  pFrame; pFrame &
308a0 26 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 21  & pFrame->token!
308b0 3d 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d  =t; pFrame=pFram
308c0 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20  e->pParent);.   
308d0 20 69 66 28 20 70 46 72 61 6d 65 20 29 20 62 72   if( pFrame ) br
308e0 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  eak;.  }..  if( 
308f0 70 2d 3e 6e 46 72 61 6d 65 3e 3d 64 62 2d 3e 61  p->nFrame>=db->a
30900 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
30910 49 54 5f 54 52 49 47 47 45 52 5f 44 45 50 54 48  IT_TRIGGER_DEPTH
30920 5d 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51  ] ){.    rc = SQ
30930 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20  LITE_ERROR;.    
30940 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72  sqlite3VdbeError
30950 28 70 2c 20 22 74 6f 6f 20 6d 61 6e 79 20 6c 65  (p, "too many le
30960 76 65 6c 73 20 6f 66 20 74 72 69 67 67 65 72 20  vels of trigger 
30970 72 65 63 75 72 73 69 6f 6e 22 29 3b 0a 20 20 20  recursion");.   
30980 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
30990 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20  to_error;.  }.. 
309a0 20 2f 2a 20 52 65 67 69 73 74 65 72 20 70 52 74   /* Register pRt
309b0 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72   is used to stor
309c0 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 72 65 71  e the memory req
309d0 75 69 72 65 64 20 74 6f 20 73 61 76 65 20 74 68  uired to save th
309e0 65 20 73 74 61 74 65 0a 20 20 2a 2a 20 6f 66 20  e state.  ** of 
309f0 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 67  the current prog
30a00 72 61 6d 2c 20 61 6e 64 20 74 68 65 20 6d 65 6d  ram, and the mem
30a10 6f 72 79 20 72 65 71 75 69 72 65 64 20 61 74 20  ory required at 
30a20 72 75 6e 74 69 6d 65 20 74 6f 20 65 78 65 63 75  runtime to execu
30a30 74 65 0a 20 20 2a 2a 20 74 68 65 20 74 72 69 67  te.  ** the trig
30a40 67 65 72 20 70 72 6f 67 72 61 6d 2e 20 49 66 20  ger program. If 
30a50 74 68 69 73 20 74 72 69 67 67 65 72 20 68 61 73  this trigger has
30a60 20 62 65 65 6e 20 66 69 72 65 64 20 62 65 66 6f   been fired befo
30a70 72 65 2c 20 74 68 65 6e 20 70 52 74 20 0a 20 20  re, then pRt .  
30a80 2a 2a 20 69 73 20 61 6c 72 65 61 64 79 20 61 6c  ** is already al
30a90 6c 6f 63 61 74 65 64 2e 20 4f 74 68 65 72 77 69  located. Otherwi
30aa0 73 65 2c 20 69 74 20 6d 75 73 74 20 62 65 20 69  se, it must be i
30ab0 6e 69 74 69 61 6c 69 7a 65 64 2e 20 20 2a 2f 0a  nitialized.  */.
30ac0 20 20 69 66 28 20 28 70 52 74 2d 3e 66 6c 61 67    if( (pRt->flag
30ad0 73 26 4d 45 4d 5f 46 72 61 6d 65 29 3d 3d 30 20  s&MEM_Frame)==0 
30ae0 29 7b 0a 20 20 20 20 2f 2a 20 53 75 62 50 72 6f  ){.    /* SubPro
30af0 67 72 61 6d 2e 6e 4d 65 6d 20 69 73 20 73 65 74  gram.nMem is set
30b00 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   to the number o
30b10 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75  f memory cells u
30b20 73 65 64 20 62 79 20 74 68 65 20 0a 20 20 20 20  sed by the .    
30b30 2a 2a 20 70 72 6f 67 72 61 6d 20 73 74 6f 72 65  ** program store
30b40 64 20 69 6e 20 53 75 62 50 72 6f 67 72 61 6d 2e  d in SubProgram.
30b50 61 4f 70 2e 20 41 73 20 77 65 6c 6c 20 61 73 20  aOp. As well as 
30b60 74 68 65 73 65 2c 20 6f 6e 65 20 6d 65 6d 6f 72  these, one memor
30b70 79 0a 20 20 20 20 2a 2a 20 63 65 6c 6c 20 69 73  y.    ** cell is
30b80 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 65 61   required for ea
30b90 63 68 20 63 75 72 73 6f 72 20 75 73 65 64 20 62  ch cursor used b
30ba0 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 20 53  y the program. S
30bb0 65 74 20 6c 6f 63 61 6c 0a 20 20 20 20 2a 2a 20  et local.    ** 
30bc0 76 61 72 69 61 62 6c 65 20 6e 4d 65 6d 20 28 61  variable nMem (a
30bd0 6e 64 20 6c 61 74 65 72 2c 20 56 64 62 65 46 72  nd later, VdbeFr
30be0 61 6d 65 2e 6e 43 68 69 6c 64 4d 65 6d 29 20 74  ame.nChildMem) t
30bf0 6f 20 74 68 69 73 20 76 61 6c 75 65 2e 0a 20 20  o this value..  
30c00 20 20 2a 2f 0a 20 20 20 20 6e 4d 65 6d 20 3d 20    */.    nMem = 
30c10 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 20 2b  pProgram->nMem +
30c20 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b   pProgram->nCsr;
30c30 0a 20 20 20 20 61 73 73 65 72 74 28 20 6e 4d 65  .    assert( nMe
30c40 6d 3e 30 20 29 3b 0a 20 20 20 20 69 66 28 20 70  m>0 );.    if( p
30c50 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 30  Program->nCsr==0
30c60 20 29 20 6e 4d 65 6d 2b 2b 3b 0a 20 20 20 20 6e   ) nMem++;.    n
30c70 42 79 74 65 20 3d 20 52 4f 55 4e 44 38 28 73 69  Byte = ROUND8(si
30c80 7a 65 6f 66 28 56 64 62 65 46 72 61 6d 65 29 29  zeof(VdbeFrame))
30c90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b  .              +
30ca0 20 6e 4d 65 6d 20 2a 20 73 69 7a 65 6f 66 28 4d   nMem * sizeof(M
30cb0 65 6d 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  em).            
30cc0 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43    + pProgram->nC
30cd0 73 72 20 2a 20 73 69 7a 65 6f 66 28 56 64 62 65  sr * sizeof(Vdbe
30ce0 43 75 72 73 6f 72 2a 29 0a 20 20 20 20 20 20 20  Cursor*).       
30cf0 20 20 20 20 20 20 20 2b 20 28 70 50 72 6f 67 72         + (pProgr
30d00 61 6d 2d 3e 6e 4f 70 20 2b 20 37 29 2f 38 3b 0a  am->nOp + 7)/8;.
30d10 20 20 20 20 70 46 72 61 6d 65 20 3d 20 73 71 6c      pFrame = sql
30d20 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f  ite3DbMallocZero
30d30 28 64 62 2c 20 6e 42 79 74 65 29 3b 0a 20 20 20  (db, nByte);.   
30d40 20 69 66 28 20 21 70 46 72 61 6d 65 20 29 7b 0a   if( !pFrame ){.
30d50 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65        goto no_me
30d60 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  m;.    }.    sql
30d70 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61  ite3VdbeMemRelea
30d80 73 65 28 70 52 74 29 3b 0a 20 20 20 20 70 52 74  se(pRt);.    pRt
30d90 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 46 72  ->flags = MEM_Fr
30da0 61 6d 65 3b 0a 20 20 20 20 70 52 74 2d 3e 75 2e  ame;.    pRt->u.
30db0 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b  pFrame = pFrame;
30dc0 0a 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 76 20  ..    pFrame->v 
30dd0 3d 20 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  = p;.    pFrame-
30de0 3e 6e 43 68 69 6c 64 4d 65 6d 20 3d 20 6e 4d 65  >nChildMem = nMe
30df0 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e  m;.    pFrame->n
30e00 43 68 69 6c 64 43 73 72 20 3d 20 70 50 72 6f 67  ChildCsr = pProg
30e10 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 70  ram->nCsr;.    p
30e20 46 72 61 6d 65 2d 3e 70 63 20 3d 20 28 69 6e 74  Frame->pc = (int
30e30 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20  )(pOp - aOp);.  
30e40 20 20 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 20 3d    pFrame->aMem =
30e50 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 70 46   p->aMem;.    pF
30e60 72 61 6d 65 2d 3e 6e 4d 65 6d 20 3d 20 70 2d 3e  rame->nMem = p->
30e70 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65  nMem;.    pFrame
30e80 2d 3e 61 70 43 73 72 20 3d 20 70 2d 3e 61 70 43  ->apCsr = p->apC
30e90 73 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  sr;.    pFrame->
30ea0 6e 43 75 72 73 6f 72 20 3d 20 70 2d 3e 6e 43 75  nCursor = p->nCu
30eb0 72 73 6f 72 3b 0a 20 20 20 20 70 46 72 61 6d 65  rsor;.    pFrame
30ec0 2d 3e 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a  ->aOp = p->aOp;.
30ed0 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4f 70 20      pFrame->nOp 
30ee0 3d 20 70 2d 3e 6e 4f 70 3b 0a 20 20 20 20 70 46  = p->nOp;.    pF
30ef0 72 61 6d 65 2d 3e 74 6f 6b 65 6e 20 3d 20 70 50  rame->token = pP
30f00 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 23  rogram->token;.#
30f10 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
30f20 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41  BLE_STMT_SCANSTA
30f30 54 55 53 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  TUS.    pFrame->
30f40 61 6e 45 78 65 63 20 3d 20 70 2d 3e 61 6e 45 78  anExec = p->anEx
30f50 65 63 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20  ec;.#endif..    
30f60 70 45 6e 64 20 3d 20 26 56 64 62 65 46 72 61 6d  pEnd = &VdbeFram
30f70 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b 70 46 72  eMem(pFrame)[pFr
30f80 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 5d 3b  ame->nChildMem];
30f90 0a 20 20 20 20 66 6f 72 28 70 4d 65 6d 3d 56 64  .    for(pMem=Vd
30fa0 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d  beFrameMem(pFram
30fb0 65 29 3b 20 70 4d 65 6d 21 3d 70 45 6e 64 3b 20  e); pMem!=pEnd; 
30fc0 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 20 20 70  pMem++){.      p
30fd0 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Mem->flags = MEM
30fe0 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 20 20  _Undefined;.    
30ff0 20 20 70 4d 65 6d 2d 3e 64 62 20 3d 20 64 62 3b    pMem->db = db;
31000 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
31010 20 20 20 20 70 46 72 61 6d 65 20 3d 20 70 52 74      pFrame = pRt
31020 2d 3e 75 2e 70 46 72 61 6d 65 3b 0a 20 20 20 20  ->u.pFrame;.    
31030 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d  assert( pProgram
31040 2d 3e 6e 4d 65 6d 2b 70 50 72 6f 67 72 61 6d 2d  ->nMem+pProgram-
31050 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e  >nCsr==pFrame->n
31060 43 68 69 6c 64 4d 65 6d 20 0a 20 20 20 20 20 20  ChildMem .      
31070 20 20 7c 7c 20 28 70 50 72 6f 67 72 61 6d 2d 3e    || (pProgram->
31080 6e 43 73 72 3d 3d 30 20 26 26 20 70 50 72 6f 67  nCsr==0 && pProg
31090 72 61 6d 2d 3e 6e 4d 65 6d 2b 31 3d 3d 70 46 72  ram->nMem+1==pFr
310a0 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 29 20  ame->nChildMem) 
310b0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
310c0 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70  Program->nCsr==p
310d0 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72  Frame->nChildCsr
310e0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
310f0 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29  (int)(pOp - aOp)
31100 3d 3d 70 46 72 61 6d 65 2d 3e 70 63 20 29 3b 0a  ==pFrame->pc );.
31110 20 20 7d 0a 0a 20 20 70 2d 3e 6e 46 72 61 6d 65    }..  p->nFrame
31120 2b 2b 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 70 50  ++;.  pFrame->pP
31130 61 72 65 6e 74 20 3d 20 70 2d 3e 70 46 72 61 6d  arent = p->pFram
31140 65 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6c 61 73  e;.  pFrame->las
31150 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73  tRowid = db->las
31160 74 52 6f 77 69 64 3b 0a 20 20 70 46 72 61 6d 65  tRowid;.  pFrame
31170 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 70 2d 3e 6e  ->nChange = p->n
31180 43 68 61 6e 67 65 3b 0a 20 20 70 46 72 61 6d 65  Change;.  pFrame
31190 2d 3e 6e 44 62 43 68 61 6e 67 65 20 3d 20 70 2d  ->nDbChange = p-
311a0 3e 64 62 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20  >db->nChange;.  
311b0 61 73 73 65 72 74 28 20 70 46 72 61 6d 65 2d 3e  assert( pFrame->
311c0 70 41 75 78 44 61 74 61 3d 3d 30 20 29 3b 0a 20  pAuxData==0 );. 
311d0 20 70 46 72 61 6d 65 2d 3e 70 41 75 78 44 61 74   pFrame->pAuxDat
311e0 61 20 3d 20 70 2d 3e 70 41 75 78 44 61 74 61 3b  a = p->pAuxData;
311f0 0a 20 20 70 2d 3e 70 41 75 78 44 61 74 61 20 3d  .  p->pAuxData =
31200 20 30 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65   0;.  p->nChange
31210 20 3d 20 30 3b 0a 20 20 70 2d 3e 70 46 72 61 6d   = 0;.  p->pFram
31220 65 20 3d 20 70 46 72 61 6d 65 3b 0a 20 20 70 2d  e = pFrame;.  p-
31230 3e 61 4d 65 6d 20 3d 20 61 4d 65 6d 20 3d 20 56  >aMem = aMem = V
31240 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61  dbeFrameMem(pFra
31250 6d 65 29 3b 0a 20 20 70 2d 3e 6e 4d 65 6d 20 3d  me);.  p->nMem =
31260 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d   pFrame->nChildM
31270 65 6d 3b 0a 20 20 70 2d 3e 6e 43 75 72 73 6f 72  em;.  p->nCursor
31280 20 3d 20 28 75 31 36 29 70 46 72 61 6d 65 2d 3e   = (u16)pFrame->
31290 6e 43 68 69 6c 64 43 73 72 3b 0a 20 20 70 2d 3e  nChildCsr;.  p->
312a0 61 70 43 73 72 20 3d 20 28 56 64 62 65 43 75 72  apCsr = (VdbeCur
312b0 73 6f 72 20 2a 2a 29 26 61 4d 65 6d 5b 70 2d 3e  sor **)&aMem[p->
312c0 6e 4d 65 6d 5d 3b 0a 20 20 70 46 72 61 6d 65 2d  nMem];.  pFrame-
312d0 3e 61 4f 6e 63 65 20 3d 20 28 75 38 2a 29 26 70  >aOnce = (u8*)&p
312e0 2d 3e 61 70 43 73 72 5b 70 50 72 6f 67 72 61 6d  ->apCsr[pProgram
312f0 2d 3e 6e 43 73 72 5d 3b 0a 20 20 6d 65 6d 73 65  ->nCsr];.  memse
31300 74 28 70 46 72 61 6d 65 2d 3e 61 4f 6e 63 65 2c  t(pFrame->aOnce,
31310 20 30 2c 20 28 70 50 72 6f 67 72 61 6d 2d 3e 6e   0, (pProgram->n
31320 4f 70 20 2b 20 37 29 2f 38 29 3b 0a 20 20 70 2d  Op + 7)/8);.  p-
31330 3e 61 4f 70 20 3d 20 61 4f 70 20 3d 20 70 50 72  >aOp = aOp = pPr
31340 6f 67 72 61 6d 2d 3e 61 4f 70 3b 0a 20 20 70 2d  ogram->aOp;.  p-
31350 3e 6e 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d  >nOp = pProgram-
31360 3e 6e 4f 70 3b 0a 23 69 66 64 65 66 20 53 51 4c  >nOp;.#ifdef SQL
31370 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f  ITE_ENABLE_STMT_
31380 53 43 41 4e 53 54 41 54 55 53 0a 20 20 70 2d 3e  SCANSTATUS.  p->
31390 61 6e 45 78 65 63 20 3d 20 30 3b 0a 23 65 6e 64  anExec = 0;.#end
313a0 69 66 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b  if.  pOp = &aOp[
313b0 2d 31 5d 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d  -1];..  break;.}
313c0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72  ../* Opcode: Par
313d0 61 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  am P1 P2 * * *.*
313e0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
313f0 20 69 73 20 6f 6e 6c 79 20 65 76 65 72 20 70 72   is only ever pr
31400 65 73 65 6e 74 20 69 6e 20 73 75 62 2d 70 72 6f  esent in sub-pro
31410 67 72 61 6d 73 20 63 61 6c 6c 65 64 20 76 69 61  grams called via
31420 20 74 68 65 20 0a 2a 2a 20 4f 50 5f 50 72 6f 67   the .** OP_Prog
31430 72 61 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ram instruction.
31440 20 43 6f 70 79 20 61 20 76 61 6c 75 65 20 63 75   Copy a value cu
31450 72 72 65 6e 74 6c 79 20 73 74 6f 72 65 64 20 69  rrently stored i
31460 6e 20 61 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63  n a memory .** c
31470 65 6c 6c 20 6f 66 20 74 68 65 20 63 61 6c 6c 69  ell of the calli
31480 6e 67 20 28 70 61 72 65 6e 74 29 20 66 72 61 6d  ng (parent) fram
31490 65 20 74 6f 20 63 65 6c 6c 20 50 32 20 69 6e 20  e to cell P2 in 
314a0 74 68 65 20 63 75 72 72 65 6e 74 20 66 72 61 6d  the current fram
314b0 65 73 20 0a 2a 2a 20 61 64 64 72 65 73 73 20 73  es .** address s
314c0 70 61 63 65 2e 20 54 68 69 73 20 69 73 20 75 73  pace. This is us
314d0 65 64 20 62 79 20 74 72 69 67 67 65 72 20 70 72  ed by trigger pr
314e0 6f 67 72 61 6d 73 20 74 6f 20 61 63 63 65 73 73  ograms to access
314f0 20 74 68 65 20 6e 65 77 2e 2a 20 0a 2a 2a 20 61   the new.* .** a
31500 6e 64 20 6f 6c 64 2e 2a 20 76 61 6c 75 65 73 2e  nd old.* values.
31510 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 64 64 72 65  .**.** The addre
31520 73 73 20 6f 66 20 74 68 65 20 63 65 6c 6c 20 69  ss of the cell i
31530 6e 20 74 68 65 20 70 61 72 65 6e 74 20 66 72 61  n the parent fra
31540 6d 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  me is determined
31550 20 62 79 20 61 64 64 69 6e 67 0a 2a 2a 20 74 68   by adding.** th
31560 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50  e value of the P
31570 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  1 argument to th
31580 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50  e value of the P
31590 31 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  1 argument to th
315a0 65 0a 2a 2a 20 63 61 6c 6c 69 6e 67 20 4f 50 5f  e.** calling OP_
315b0 50 72 6f 67 72 61 6d 20 69 6e 73 74 72 75 63 74  Program instruct
315c0 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
315d0 50 61 72 61 6d 3a 20 7b 20 20 20 20 20 20 20 20  Param: {        
315e0 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
315f0 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d  VdbeFrame *pFram
31600 65 3b 0a 20 20 4d 65 6d 20 2a 70 49 6e 3b 0a 20  e;.  Mem *pIn;. 
31610 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
31620 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
31630 20 20 70 46 72 61 6d 65 20 3d 20 70 2d 3e 70 46    pFrame = p->pF
31640 72 61 6d 65 3b 0a 20 20 70 49 6e 20 3d 20 26 70  rame;.  pIn = &p
31650 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d  Frame->aMem[pOp-
31660 3e 70 31 20 2b 20 70 46 72 61 6d 65 2d 3e 61 4f  >p1 + pFrame->aO
31670 70 5b 70 46 72 61 6d 65 2d 3e 70 63 5d 2e 70 31  p[pFrame->pc].p1
31680 5d 3b 20 20 20 0a 20 20 73 71 6c 69 74 65 33 56  ];   .  sqlite3V
31690 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70  dbeMemShallowCop
316a0 79 28 70 4f 75 74 2c 20 70 49 6e 2c 20 4d 45 4d  y(pOut, pIn, MEM
316b0 5f 45 70 68 65 6d 29 3b 0a 20 20 62 72 65 61 6b  _Ephem);.  break
316c0 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 23  ;.}..#endif /* #
316d0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
316e0 49 54 5f 54 52 49 47 47 45 52 20 2a 2f 0a 0a 23  IT_TRIGGER */..#
316f0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
31700 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 2f  IT_FOREIGN_KEY./
31710 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 43 6f 75 6e  * Opcode: FkCoun
31720 74 65 72 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ter P1 P2 * * *.
31730 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 66 6b 63  ** Synopsis: fkc
31740 74 72 5b 50 31 5d 2b 3d 50 32 0a 2a 2a 0a 2a 2a  tr[P1]+=P2.**.**
31750 20 49 6e 63 72 65 6d 65 6e 74 20 61 20 22 63 6f   Increment a "co
31760 6e 73 74 72 61 69 6e 74 20 63 6f 75 6e 74 65 72  nstraint counter
31770 22 20 62 79 20 50 32 20 28 50 32 20 6d 61 79 20  " by P2 (P2 may 
31780 62 65 20 6e 65 67 61 74 69 76 65 20 6f 72 20 70  be negative or p
31790 6f 73 69 74 69 76 65 29 2e 0a 2a 2a 20 49 66 20  ositive)..** If 
317a0 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  P1 is non-zero, 
317b0 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
317c0 73 74 72 61 69 6e 74 20 63 6f 75 6e 74 65 72 20  straint counter 
317d0 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 0a  is incremented .
317e0 2a 2a 20 28 64 65 66 65 72 72 65 64 20 66 6f 72  ** (deferred for
317f0 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
31800 69 6e 74 73 29 2e 20 4f 74 68 65 72 77 69 73 65  ints). Otherwise
31810 2c 20 69 66 20 50 31 20 69 73 20 7a 65 72 6f 2c  , if P1 is zero,
31820 20 74 68 65 20 0a 2a 2a 20 73 74 61 74 65 6d 65   the .** stateme
31830 6e 74 20 63 6f 75 6e 74 65 72 20 69 73 20 69 6e  nt counter is in
31840 63 72 65 6d 65 6e 74 65 64 20 28 69 6d 6d 65 64  cremented (immed
31850 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  iate foreign key
31860 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 0a 2a   constraints)..*
31870 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 43 6f 75 6e  /.case OP_FkCoun
31880 74 65 72 3a 20 7b 0a 20 20 69 66 28 20 64 62 2d  ter: {.  if( db-
31890 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
318a0 44 65 66 65 72 46 4b 73 20 29 7b 0a 20 20 20 20  DeferFKs ){.    
318b0 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  db->nDeferredImm
318c0 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b  Cons += pOp->p2;
318d0 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70  .  }else if( pOp
318e0 2d 3e 70 31 20 29 7b 0a 20 20 20 20 64 62 2d 3e  ->p1 ){.    db->
318f0 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20 2b 3d  nDeferredCons +=
31900 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73   pOp->p2;.  }els
31910 65 7b 0a 20 20 20 20 70 2d 3e 6e 46 6b 43 6f 6e  e{.    p->nFkCon
31920 73 74 72 61 69 6e 74 20 2b 3d 20 70 4f 70 2d 3e  straint += pOp->
31930 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  p2;.  }.  break;
31940 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46  .}../* Opcode: F
31950 6b 49 66 5a 65 72 6f 20 50 31 20 50 32 20 2a 20  kIfZero P1 P2 * 
31960 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
31970 20 69 66 20 66 6b 63 74 72 5b 50 31 5d 3d 3d 30   if fkctr[P1]==0
31980 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54   goto P2.**.** T
31990 68 69 73 20 6f 70 63 6f 64 65 20 74 65 73 74 73  his opcode tests
319a0 20 69 66 20 61 20 66 6f 72 65 69 67 6e 20 6b 65   if a foreign ke
319b0 79 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75  y constraint-cou
319c0 6e 74 65 72 20 69 73 20 63 75 72 72 65 6e 74 6c  nter is currentl
319d0 79 20 7a 65 72 6f 2e 0a 2a 2a 20 49 66 20 73 6f  y zero..** If so
319e0 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75  , jump to instru
319f0 63 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65 72 77  ction P2. Otherw
31a00 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67  ise, fall throug
31a10 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 0a 2a  h to the next .*
31a20 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  * instruction..*
31a30 2a 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f  *.** If P1 is no
31a40 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65  n-zero, then the
31a50 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
31a60 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63  f the database c
31a70 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65  onstraint-counte
31a80 72 0a 2a 2a 20 69 73 20 7a 65 72 6f 20 28 74 68  r.** is zero (th
31a90 65 20 6f 6e 65 20 74 68 61 74 20 63 6f 75 6e 74  e one that count
31aa0 73 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74  s deferred const
31ab0 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73  raint violations
31ac0 29 2e 20 49 66 20 50 31 20 69 73 0a 2a 2a 20 7a  ). If P1 is.** z
31ad0 65 72 6f 2c 20 74 68 65 20 6a 75 6d 70 20 69 73  ero, the jump is
31ae0 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20 73 74   taken if the st
31af0 61 74 65 6d 65 6e 74 20 63 6f 6e 73 74 72 61 69  atement constrai
31b00 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73 20 7a 65  nt-counter is ze
31b10 72 6f 0a 2a 2a 20 28 69 6d 6d 65 64 69 61 74 65  ro.** (immediate
31b20 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
31b30 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
31b40 6e 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ns)..*/.case OP_
31b50 46 6b 49 66 5a 65 72 6f 3a 20 7b 20 20 20 20 20  FkIfZero: {     
31b60 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
31b70 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a   if( pOp->p1 ){.
31b80 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
31b90 6b 65 6e 28 64 62 2d 3e 6e 44 65 66 65 72 72 65  ken(db->nDeferre
31ba0 64 43 6f 6e 73 3d 3d 30 20 26 26 20 64 62 2d 3e  dCons==0 && db->
31bb0 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
31bc0 3d 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69 66 28  ==0, 2);.    if(
31bd0 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f   db->nDeferredCo
31be0 6e 73 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65  ns==0 && db->nDe
31bf0 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30  ferredImmCons==0
31c00 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f   ) goto jump_to_
31c10 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  p2;.  }else{.   
31c20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
31c30 28 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e  (p->nFkConstrain
31c40 74 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66  t==0 && db->nDef
31c50 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c  erredImmCons==0,
31c60 20 32 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e   2);.    if( p->
31c70 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30  nFkConstraint==0
31c80 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65   && db->nDeferre
31c90 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20 67 6f  dImmCons==0 ) go
31ca0 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
31cb0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
31cc0 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66 20  ndif /* #ifndef 
31cd0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45  SQLITE_OMIT_FORE
31ce0 49 47 4e 5f 4b 45 59 20 2a 2f 0a 0a 23 69 66 6e  IGN_KEY */..#ifn
31cf0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
31d00 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2f 2a  AUTOINCREMENT./*
31d10 20 4f 70 63 6f 64 65 3a 20 4d 65 6d 4d 61 78 20   Opcode: MemMax 
31d20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
31d30 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d 6d  ynopsis: r[P1]=m
31d40 61 78 28 72 5b 50 31 5d 2c 72 5b 50 32 5d 29 0a  ax(r[P1],r[P2]).
31d50 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 72 65  **.** P1 is a re
31d60 67 69 73 74 65 72 20 69 6e 20 74 68 65 20 72 6f  gister in the ro
31d70 6f 74 20 66 72 61 6d 65 20 6f 66 20 74 68 69 73  ot frame of this
31d80 20 56 4d 20 28 74 68 65 20 72 6f 6f 74 20 66 72   VM (the root fr
31d90 61 6d 65 20 69 73 0a 2a 2a 20 64 69 66 66 65 72  ame is.** differ
31da0 65 6e 74 20 66 72 6f 6d 20 74 68 65 20 63 75 72  ent from the cur
31db0 72 65 6e 74 20 66 72 61 6d 65 20 69 66 20 74 68  rent frame if th
31dc0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  is instruction i
31dd0 73 20 62 65 69 6e 67 20 65 78 65 63 75 74 65 64  s being executed
31de0 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 73 75 62  .** within a sub
31df0 2d 70 72 6f 67 72 61 6d 29 2e 20 53 65 74 20 74  -program). Set t
31e00 68 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69  he value of regi
31e10 73 74 65 72 20 50 31 20 74 6f 20 74 68 65 20 6d  ster P1 to the m
31e20 61 78 69 6d 75 6d 20 6f 66 20 0a 2a 2a 20 69 74  aximum of .** it
31e30 73 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20  s current value 
31e40 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e  and the value in
31e50 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
31e60 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63  .** This instruc
31e70 74 69 6f 6e 20 74 68 72 6f 77 73 20 61 6e 20 65  tion throws an e
31e80 72 72 6f 72 20 69 66 20 74 68 65 20 6d 65 6d 6f  rror if the memo
31e90 72 79 20 63 65 6c 6c 20 69 73 20 6e 6f 74 20 69  ry cell is not i
31ea0 6e 69 74 69 61 6c 6c 79 0a 2a 2a 20 61 6e 20 69  nitially.** an i
31eb0 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20  nteger..*/.case 
31ec0 4f 50 5f 4d 65 6d 4d 61 78 3a 20 7b 20 20 20 20  OP_MemMax: {    
31ed0 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20      /* in2 */.  
31ee0 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d  VdbeFrame *pFram
31ef0 65 3b 0a 20 20 69 66 28 20 70 2d 3e 70 46 72 61  e;.  if( p->pFra
31f00 6d 65 20 29 7b 0a 20 20 20 20 66 6f 72 28 70 46  me ){.    for(pF
31f10 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20  rame=p->pFrame; 
31f20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b  pFrame->pParent;
31f30 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e   pFrame=pFrame->
31f40 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 70 49  pParent);.    pI
31f50 6e 31 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d  n1 = &pFrame->aM
31f60 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d  em[pOp->p1];.  }
31f70 65 6c 73 65 7b 0a 20 20 20 20 70 49 6e 31 20 3d  else{.    pIn1 =
31f80 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
31f90 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 6d  .  }.  assert( m
31fa0 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20  emIsValid(pIn1) 
31fb0 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
31fc0 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49  MemIntegerify(pI
31fd0 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61  n1);.  pIn2 = &a
31fe0 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
31ff0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
32000 74 65 67 65 72 69 66 79 28 70 49 6e 32 29 3b 0a  tegerify(pIn2);.
32010 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c    if( pIn1->u.i<
32020 70 49 6e 32 2d 3e 75 2e 69 29 7b 0a 20 20 20 20  pIn2->u.i){.    
32030 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 49 6e 32  pIn1->u.i = pIn2
32040 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 62 72 65  ->u.i;.  }.  bre
32050 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
32060 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
32070 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 0a 2f 2a  INCREMENT */../*
32080 20 4f 70 63 6f 64 65 3a 20 49 66 50 6f 73 20 50   Opcode: IfPos P
32090 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
320a0 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31  ynopsis: if r[P1
320b0 5d 3e 30 20 74 68 65 6e 20 72 5b 50 31 5d 2d 3d  ]>0 then r[P1]-=
320c0 50 33 2c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  P3, goto P2.**.*
320d0 2a 20 52 65 67 69 73 74 65 72 20 50 31 20 6d 75  * Register P1 mu
320e0 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e  st contain an in
320f0 74 65 67 65 72 2e 0a 2a 2a 20 49 66 20 74 68 65  teger..** If the
32100 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74   value of regist
32110 65 72 20 50 31 20 69 73 20 31 20 6f 72 20 67 72  er P1 is 1 or gr
32120 65 61 74 65 72 2c 20 73 75 62 74 72 61 63 74 20  eater, subtract 
32130 50 33 20 66 72 6f 6d 20 74 68 65 0a 2a 2a 20 76  P3 from the.** v
32140 61 6c 75 65 20 69 6e 20 50 31 20 61 6e 64 20 6a  alue in P1 and j
32150 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ump to P2..**.**
32160 20 49 66 20 74 68 65 20 69 6e 69 74 69 61 6c 20   If the initial 
32170 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65  value of registe
32180 72 20 50 31 20 69 73 20 6c 65 73 73 20 74 68 61  r P1 is less tha
32190 6e 20 31 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a  n 1, then the.**
321a0 20 76 61 6c 75 65 20 69 73 20 75 6e 63 68 61 6e   value is unchan
321b0 67 65 64 20 61 6e 64 20 63 6f 6e 74 72 6f 6c 20  ged and control 
321c0 70 61 73 73 65 73 20 74 68 72 6f 75 67 68 20 74  passes through t
321d0 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
321e0 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
321f0 4f 50 5f 49 66 50 6f 73 3a 20 7b 20 20 20 20 20  OP_IfPos: {     
32200 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
32210 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
32220 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
32230 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
32240 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 56  s&MEM_Int );.  V
32250 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 20  dbeBranchTaken( 
32260 70 49 6e 31 2d 3e 75 2e 69 3e 30 2c 20 32 29 3b  pIn1->u.i>0, 2);
32270 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69  .  if( pIn1->u.i
32280 3e 30 20 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e  >0 ){.    pIn1->
32290 75 2e 69 20 2d 3d 20 70 4f 70 2d 3e 70 33 3b 0a  u.i -= pOp->p3;.
322a0 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f      goto jump_to
322b0 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  _p2;.  }.  break
322c0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
322d0 4f 66 66 73 65 74 4c 69 6d 69 74 20 50 31 20 50  OffsetLimit P1 P
322e0 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
322f0 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e 30  psis: if r[P1]>0
32300 20 74 68 65 6e 20 72 5b 50 32 5d 3d 72 5b 50 31   then r[P2]=r[P1
32310 5d 2b 6d 61 78 28 30 2c 72 5b 50 33 5d 29 20 65  ]+max(0,r[P3]) e
32320 6c 73 65 20 72 5b 50 32 5d 3d 28 2d 31 29 0a 2a  lse r[P2]=(-1).*
32330 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
32340 20 70 65 72 66 6f 72 6d 73 20 61 20 63 6f 6d 6d   performs a comm
32350 6f 6e 6c 79 20 75 73 65 64 20 63 6f 6d 70 75 74  only used comput
32360 61 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64  ation associated
32370 20 77 69 74 68 0a 2a 2a 20 4c 49 4d 49 54 20 61   with.** LIMIT a
32380 6e 64 20 4f 46 46 53 45 54 20 70 72 6f 63 65 73  nd OFFSET proces
32390 73 2e 20 20 72 5b 50 31 5d 20 68 6f 6c 64 73 20  s.  r[P1] holds 
323a0 74 68 65 20 6c 69 6d 69 74 20 63 6f 75 6e 74 65  the limit counte
323b0 72 2e 20 20 72 5b 50 33 5d 0a 2a 2a 20 68 6f 6c  r.  r[P3].** hol
323c0 64 73 20 74 68 65 20 6f 66 66 73 65 74 20 63 6f  ds the offset co
323d0 75 6e 74 65 72 2e 20 20 54 68 65 20 6f 70 63 6f  unter.  The opco
323e0 64 65 20 63 6f 6d 70 75 74 65 73 20 74 68 65 20  de computes the 
323f0 63 6f 6d 62 69 6e 65 64 20 76 61 6c 75 65 0a 2a  combined value.*
32400 2a 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20 61  * of the LIMIT a
32410 6e 64 20 4f 46 46 53 45 54 20 61 6e 64 20 73 74  nd OFFSET and st
32420 6f 72 65 73 20 74 68 61 74 20 76 61 6c 75 65 20  ores that value 
32430 69 6e 20 72 5b 50 32 5d 2e 20 20 54 68 65 20 72  in r[P2].  The r
32440 5b 50 32 5d 0a 2a 2a 20 76 61 6c 75 65 20 63 6f  [P2].** value co
32450 6d 70 75 74 65 64 20 69 73 20 74 68 65 20 74 6f  mputed is the to
32460 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  tal number of ro
32470 77 73 20 74 68 61 74 20 77 69 6c 6c 20 6e 65 65  ws that will nee
32480 64 20 74 6f 20 62 65 0a 2a 2a 20 76 69 73 69 74  d to be.** visit
32490 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 63  ed in order to c
324a0 6f 6d 70 6c 65 74 65 20 74 68 65 20 71 75 65 72  omplete the quer
324b0 79 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 72 5b 50 33  y..**.** If r[P3
324c0 5d 20 69 73 20 7a 65 72 6f 20 6f 72 20 6e 65 67  ] is zero or neg
324d0 61 74 69 76 65 2c 20 74 68 61 74 20 6d 65 61 6e  ative, that mean
324e0 73 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4f 46  s there is no OF
324f0 46 53 45 54 0a 2a 2a 20 61 6e 64 20 72 5b 50 32  FSET.** and r[P2
32500 5d 20 69 73 20 73 65 74 20 74 6f 20 62 65 20 74  ] is set to be t
32510 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
32520 4c 49 4d 49 54 2c 20 72 5b 50 31 5d 2e 0a 2a 2a  LIMIT, r[P1]..**
32530 0a 2a 2a 20 69 66 20 72 5b 50 31 5d 20 69 73 20  .** if r[P1] is 
32540 7a 65 72 6f 20 6f 72 20 6e 65 67 61 74 69 76 65  zero or negative
32550 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 65  , that means the
32560 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54 0a 2a  re is no LIMIT.*
32570 2a 20 61 6e 64 20 72 5b 50 32 5d 20 69 73 20 73  * and r[P2] is s
32580 65 74 20 74 6f 20 2d 31 2e 20 0a 2a 2a 0a 2a 2a  et to -1. .**.**
32590 20 4f 74 68 65 72 77 69 73 65 2c 20 72 5b 50 32   Otherwise, r[P2
325a0 5d 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20  ] is set to the 
325b0 73 75 6d 20 6f 66 20 72 5b 50 31 5d 20 61 6e 64  sum of r[P1] and
325c0 20 72 5b 50 33 5d 2e 0a 2a 2f 0a 63 61 73 65 20   r[P3]..*/.case 
325d0 4f 50 5f 4f 66 66 73 65 74 4c 69 6d 69 74 3a 20  OP_OffsetLimit: 
325e0 7b 20 20 20 20 2f 2a 20 69 6e 31 2c 20 6f 75 74  {    /* in1, out
325f0 32 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 36 34 20  2, in3 */.  i64 
32600 78 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  x;.  pIn1 = &aMe
32610 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49  m[pOp->p1];.  pI
32620 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
32630 70 33 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75  p3];.  pOut = ou
32640 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
32650 70 4f 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20  pOp);.  assert( 
32660 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
32670 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72  M_Int );.  asser
32680 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  t( pIn3->flags &
32690 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 78 20   MEM_Int );.  x 
326a0 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 69  = pIn1->u.i;.  i
326b0 66 28 20 78 3c 3d 30 20 7c 7c 20 73 71 6c 69 74  f( x<=0 || sqlit
326c0 65 33 41 64 64 49 6e 74 36 34 28 26 78 2c 20 70  e3AddInt64(&x, p
326d0 49 6e 33 2d 3e 75 2e 69 3e 30 3f 70 49 6e 33 2d  In3->u.i>0?pIn3-
326e0 3e 75 2e 69 3a 30 29 20 29 7b 0a 20 20 20 20 2f  >u.i:0) ){.    /
326f0 2a 20 49 66 20 74 68 65 20 4c 49 4d 49 54 20 69  * If the LIMIT i
32700 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65  s less than or e
32710 71 75 61 6c 20 74 6f 20 7a 65 72 6f 2c 20 6c 6f  qual to zero, lo
32720 6f 70 20 66 6f 72 65 76 65 72 2e 20 20 54 68 69  op forever.  Thi
32730 73 0a 20 20 20 20 2a 2a 20 69 73 20 64 6f 63 75  s.    ** is docu
32740 6d 65 6e 74 65 64 2e 20 20 42 75 74 20 61 6c 73  mented.  But als
32750 6f 2c 20 69 66 20 74 68 65 20 4c 49 4d 49 54 2b  o, if the LIMIT+
32760 4f 46 46 53 45 54 20 65 78 63 65 65 64 73 20 32  OFFSET exceeds 2
32770 5e 36 33 20 74 68 65 6e 0a 20 20 20 20 2a 2a 20  ^63 then.    ** 
32780 61 6c 73 6f 20 6c 6f 6f 70 20 66 6f 72 65 76 65  also loop foreve
32790 72 2e 20 20 54 68 69 73 20 69 73 20 75 6e 64 6f  r.  This is undo
327a0 63 75 6d 65 6e 74 65 64 2e 20 20 49 6e 20 66 61  cumented.  In fa
327b0 63 74 2c 20 6f 6e 65 20 63 6f 75 6c 64 20 61 72  ct, one could ar
327c0 67 75 65 0a 20 20 20 20 2a 2a 20 74 68 61 74 20  gue.    ** that 
327d0 74 68 65 20 6c 6f 6f 70 20 73 68 6f 75 6c 64 20  the loop should 
327e0 74 65 72 6d 69 6e 61 74 65 2e 20 20 42 75 74 20  terminate.  But 
327f0 61 73 73 75 6d 69 6e 67 20 31 20 62 69 6c 6c 69  assuming 1 billi
32800 6f 6e 20 69 74 65 72 61 74 69 6f 6e 73 0a 20 20  on iterations.  
32810 20 20 2a 2a 20 70 65 72 20 73 65 63 6f 6e 64 20    ** per second 
32820 28 66 61 72 20 65 78 63 65 65 64 69 6e 67 20 74  (far exceeding t
32830 68 65 20 63 61 70 61 62 69 6c 69 74 69 65 73 20  he capabilities 
32840 6f 66 20 61 6e 79 20 63 75 72 72 65 6e 74 20 68  of any current h
32850 61 72 64 77 61 72 65 29 0a 20 20 20 20 2a 2a 20  ardware).    ** 
32860 69 74 20 77 6f 75 6c 64 20 74 61 6b 65 20 6e 65  it would take ne
32870 61 72 6c 79 20 33 30 30 20 79 65 61 72 73 20 74  arly 300 years t
32880 6f 20 61 63 74 75 61 6c 6c 79 20 72 65 61 63 68  o actually reach
32890 20 74 68 65 20 6c 69 6d 69 74 2e 20 20 53 6f 0a   the limit.  So.
328a0 20 20 20 20 2a 2a 20 6c 6f 6f 70 69 6e 67 20 66      ** looping f
328b0 6f 72 65 76 65 72 20 69 73 20 61 20 72 65 61 73  orever is a reas
328c0 6f 6e 61 62 6c 65 20 61 70 70 72 6f 78 69 6d 61  onable approxima
328d0 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20 70 4f 75  tion. */.    pOu
328e0 74 2d 3e 75 2e 69 20 3d 20 2d 31 3b 0a 20 20 7d  t->u.i = -1;.  }
328f0 65 6c 73 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e  else{.    pOut->
32900 75 2e 69 20 3d 20 78 3b 0a 20 20 7d 0a 20 20 62  u.i = x;.  }.  b
32910 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
32920 64 65 3a 20 49 66 4e 6f 74 5a 65 72 6f 20 50 31  de: IfNotZero P1
32930 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
32940 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 21  opsis: if r[P1]!
32950 3d 30 20 74 68 65 6e 20 72 5b 50 31 5d 2d 2d 2c  =0 then r[P1]--,
32960 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52   goto P2.**.** R
32970 65 67 69 73 74 65 72 20 50 31 20 6d 75 73 74 20  egister P1 must 
32980 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67  contain an integ
32990 65 72 2e 20 20 49 66 20 74 68 65 20 63 6f 6e 74  er.  If the cont
329a0 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
329b0 50 31 20 69 73 0a 2a 2a 20 69 6e 69 74 69 61 6c  P1 is.** initial
329c0 6c 79 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  ly greater than 
329d0 7a 65 72 6f 2c 20 74 68 65 6e 20 64 65 63 72 65  zero, then decre
329e0 6d 65 6e 74 20 74 68 65 20 76 61 6c 75 65 20 69  ment the value i
329f0 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a  n register P1..*
32a00 2a 20 49 66 20 69 74 20 69 73 20 6e 6f 6e 2d 7a  * If it is non-z
32a10 65 72 6f 20 28 6e 65 67 61 74 69 76 65 20 6f 72  ero (negative or
32a20 20 70 6f 73 69 74 69 76 65 29 20 61 6e 64 20 74   positive) and t
32a30 68 65 6e 20 61 6c 73 6f 20 6a 75 6d 70 20 74 6f  hen also jump to
32a40 20 50 32 2e 20 20 0a 2a 2a 20 49 66 20 72 65 67   P2.  .** If reg
32a50 69 73 74 65 72 20 50 31 20 69 73 20 69 6e 69 74  ister P1 is init
32a60 69 61 6c 6c 79 20 7a 65 72 6f 2c 20 6c 65 61 76  ially zero, leav
32a70 65 20 69 74 20 75 6e 63 68 61 6e 67 65 64 20 61  e it unchanged a
32a80 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 2e  nd fall through.
32a90 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f  .*/.case OP_IfNo
32aa0 74 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 20 20  tZero: {        
32ab0 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  /* jump, in1 */.
32ac0 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
32ad0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
32ae0 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d  t( pIn1->flags&M
32af0 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 56 64 62 65  EM_Int );.  Vdbe
32b00 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 49 6e 31  BranchTaken(pIn1
32b10 2d 3e 75 2e 69 3c 30 2c 20 32 29 3b 0a 20 20 69  ->u.i<0, 2);.  i
32b20 66 28 20 70 49 6e 31 2d 3e 75 2e 69 20 29 7b 0a  f( pIn1->u.i ){.
32b30 20 20 20 20 20 69 66 28 20 70 49 6e 31 2d 3e 75       if( pIn1->u
32b40 2e 69 3e 30 20 29 20 70 49 6e 31 2d 3e 75 2e 69  .i>0 ) pIn1->u.i
32b50 2d 2d 3b 0a 20 20 20 20 20 67 6f 74 6f 20 6a 75  --;.     goto ju
32b60 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20  mp_to_p2;.  }.  
32b70 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
32b80 6f 64 65 3a 20 44 65 63 72 4a 75 6d 70 5a 65 72  ode: DecrJumpZer
32b90 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  o P1 P2 * * *.**
32ba0 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 28 2d   Synopsis: if (-
32bb0 2d 72 5b 50 31 5d 29 3d 3d 30 20 67 6f 74 6f 20  -r[P1])==0 goto 
32bc0 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65  P2.**.** Registe
32bd0 72 20 50 31 20 6d 75 73 74 20 68 6f 6c 64 20 61  r P1 must hold a
32be0 6e 20 69 6e 74 65 67 65 72 2e 20 20 44 65 63 72  n integer.  Decr
32bf0 65 6d 65 6e 74 20 74 68 65 20 76 61 6c 75 65 20  ement the value 
32c00 69 6e 20 50 31 0a 2a 2a 20 61 6e 64 20 6a 75 6d  in P1.** and jum
32c10 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 6e  p to P2 if the n
32c20 65 77 20 76 61 6c 75 65 20 69 73 20 65 78 61 63  ew value is exac
32c30 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2f 0a 63 61 73  tly zero..*/.cas
32c40 65 20 4f 50 5f 44 65 63 72 4a 75 6d 70 5a 65 72  e OP_DecrJumpZer
32c50 6f 3a 20 7b 20 20 20 20 20 20 2f 2a 20 6a 75 6d  o: {      /* jum
32c60 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  p, in1 */.  pIn1
32c70 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
32c80 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
32c90 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74  1->flags&MEM_Int
32ca0 20 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e   );.  if( pIn1->
32cb0 75 2e 69 3e 53 4d 41 4c 4c 45 53 54 5f 49 4e 54  u.i>SMALLEST_INT
32cc0 36 34 20 29 20 70 49 6e 31 2d 3e 75 2e 69 2d 2d  64 ) pIn1->u.i--
32cd0 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
32ce0 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30  ken(pIn1->u.i==0
32cf0 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31  , 2);.  if( pIn1
32d00 2d 3e 75 2e 69 3d 3d 30 20 29 20 67 6f 74 6f 20  ->u.i==0 ) goto 
32d10 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72  jump_to_p2;.  br
32d20 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f  eak;.}.../* Opco
32d30 64 65 3a 20 41 67 67 53 74 65 70 30 20 2a 20 50  de: AggStep0 * P
32d40 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
32d50 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b  nopsis: accum=r[
32d60 50 33 5d 20 73 74 65 70 28 72 5b 50 32 40 50 35  P3] step(r[P2@P5
32d70 5d 29 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65  ]).**.** Execute
32d80 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69   the step functi
32d90 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67  on for an aggreg
32da0 61 74 65 2e 20 20 54 68 65 0a 2a 2a 20 66 75 6e  ate.  The.** fun
32db0 63 74 69 6f 6e 20 68 61 73 20 50 35 20 61 72 67  ction has P5 arg
32dc0 75 6d 65 6e 74 73 2e 20 20 20 50 34 20 69 73 20  uments.   P4 is 
32dd0 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
32de0 20 46 75 6e 63 44 65 66 0a 2a 2a 20 73 74 72 75   FuncDef.** stru
32df0 63 74 75 72 65 20 74 68 61 74 20 73 70 65 63 69  cture that speci
32e00 66 69 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f  fies the functio
32e10 6e 2e 20 20 52 65 67 69 73 74 65 72 20 50 33 20  n.  Register P3 
32e20 69 73 20 74 68 65 0a 2a 2a 20 61 63 63 75 6d 75  is the.** accumu
32e30 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  lator..**.** The
32e40 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20 61 72   P5 arguments ar
32e50 65 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67  e taken from reg
32e60 69 73 74 65 72 20 50 32 20 61 6e 64 20 69 74 73  ister P2 and its
32e70 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 0a  .** successors..
32e80 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67  */./* Opcode: Ag
32e90 67 53 74 65 70 20 2a 20 50 32 20 50 33 20 50 34  gStep * P2 P3 P4
32ea0 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
32eb0 20 61 63 63 75 6d 3d 72 5b 50 33 5d 20 73 74 65   accum=r[P3] ste
32ec0 70 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a  p(r[P2@P5]).**.*
32ed0 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 73 74  * Execute the st
32ee0 65 70 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20  ep function for 
32ef0 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20 54  an aggregate.  T
32f00 68 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 68  he.** function h
32f10 61 73 20 50 35 20 61 72 67 75 6d 65 6e 74 73 2e  as P5 arguments.
32f20 20 20 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74     P4 is a point
32f30 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33  er to an sqlite3
32f40 5f 63 6f 6e 74 65 78 74 0a 2a 2a 20 6f 62 6a 65  _context.** obje
32f50 63 74 20 74 68 61 74 20 69 73 20 75 73 65 64 20  ct that is used 
32f60 74 6f 20 72 75 6e 20 74 68 65 20 66 75 6e 63 74  to run the funct
32f70 69 6f 6e 2e 20 20 52 65 67 69 73 74 65 72 20 50  ion.  Register P
32f80 33 20 69 73 0a 2a 2a 20 61 73 20 74 68 65 20 61  3 is.** as the a
32f90 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a  ccumulator..**.*
32fa0 2a 20 54 68 65 20 50 35 20 61 72 67 75 6d 65 6e  * The P5 argumen
32fb0 74 73 20 61 72 65 20 74 61 6b 65 6e 20 66 72 6f  ts are taken fro
32fc0 6d 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  m register P2 an
32fd0 64 20 69 74 73 0a 2a 2a 20 73 75 63 63 65 73 73  d its.** success
32fe0 6f 72 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ors..**.** This 
32ff0 6f 70 63 6f 64 65 20 69 73 20 69 6e 69 74 69 61  opcode is initia
33000 6c 6c 79 20 63 6f 64 65 64 20 61 73 20 4f 50 5f  lly coded as OP_
33010 41 67 67 53 74 65 70 30 2e 20 20 4f 6e 20 66 69  AggStep0.  On fi
33020 72 73 74 20 65 76 61 6c 75 61 74 69 6f 6e 2c 0a  rst evaluation,.
33030 2a 2a 20 74 68 65 20 46 75 6e 63 44 65 66 20 73  ** the FuncDef s
33040 74 6f 72 65 64 20 69 6e 20 50 34 20 69 73 20 63  tored in P4 is c
33050 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e  onverted into an
33060 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
33070 20 61 6e 64 0a 2a 2a 20 74 68 65 20 6f 70 63 6f   and.** the opco
33080 64 65 20 69 73 20 63 68 61 6e 67 65 64 2e 20 20  de is changed.  
33090 49 6e 20 74 68 69 73 20 77 61 79 2c 20 74 68 65  In this way, the
330a0 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
330b0 6f 66 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65  of the.** sqlite
330c0 33 5f 63 6f 6e 74 65 78 74 20 6f 6e 6c 79 20 68  3_context only h
330d0 61 70 70 65 6e 73 20 6f 6e 63 65 2c 20 69 6e 73  appens once, ins
330e0 74 65 61 64 20 6f 66 20 6f 6e 20 65 61 63 68 20  tead of on each 
330f0 63 61 6c 6c 20 74 6f 20 74 68 65 0a 2a 2a 20 73  call to the.** s
33100 74 65 70 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f  tep function..*/
33110 0a 63 61 73 65 20 4f 50 5f 41 67 67 53 74 65 70  .case OP_AggStep
33120 30 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20  0: {.  int n;.  
33130 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
33140 2a 70 43 74 78 3b 0a 0a 20 20 61 73 73 65 72 74  *pCtx;..  assert
33150 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
33160 34 5f 46 55 4e 43 44 45 46 20 29 3b 0a 20 20 6e  4_FUNCDEF );.  n
33170 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 73   = pOp->p5;.  as
33180 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
33190 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e  && pOp->p3<=(p->
331a0 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
331b0 73 6f 72 29 20 29 3b 0a 20 20 61 73 73 65 72 74  sor) );.  assert
331c0 28 20 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e  ( n==0 || (pOp->
331d0 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b  p2>0 && pOp->p2+
331e0 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  n<=(p->nMem+1 - 
331f0 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 29 20 29  p->nCursor)+1) )
33200 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
33210 3e 70 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c 20 70  >p3<pOp->p2 || p
33220 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 32 2b  Op->p3>=pOp->p2+
33230 6e 20 29 3b 0a 20 20 70 43 74 78 20 3d 20 73 71  n );.  pCtx = sq
33240 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
33250 4e 4e 28 64 62 2c 20 73 69 7a 65 6f 66 28 2a 70  NN(db, sizeof(*p
33260 43 74 78 29 20 2b 20 28 6e 2d 31 29 2a 73 69 7a  Ctx) + (n-1)*siz
33270 65 6f 66 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  eof(sqlite3_valu
33280 65 2a 29 29 3b 0a 20 20 69 66 28 20 70 43 74 78  e*));.  if( pCtx
33290 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
332a0 6d 3b 0a 20 20 70 43 74 78 2d 3e 70 4d 65 6d 20  m;.  pCtx->pMem 
332b0 3d 20 30 3b 0a 20 20 70 43 74 78 2d 3e 70 46 75  = 0;.  pCtx->pFu
332c0 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75  nc = pOp->p4.pFu
332d0 6e 63 3b 0a 20 20 70 43 74 78 2d 3e 69 4f 70 20  nc;.  pCtx->iOp 
332e0 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f  = (int)(pOp - aO
332f0 70 29 3b 0a 20 20 70 43 74 78 2d 3e 70 56 64 62  p);.  pCtx->pVdb
33300 65 20 3d 20 70 3b 0a 20 20 70 43 74 78 2d 3e 61  e = p;.  pCtx->a
33310 72 67 63 20 3d 20 6e 3b 0a 20 20 70 4f 70 2d 3e  rgc = n;.  pOp->
33320 70 34 74 79 70 65 20 3d 20 50 34 5f 46 55 4e 43  p4type = P4_FUNC
33330 43 54 58 3b 0a 20 20 70 4f 70 2d 3e 70 34 2e 70  CTX;.  pOp->p4.p
33340 43 74 78 20 3d 20 70 43 74 78 3b 0a 20 20 70 4f  Ctx = pCtx;.  pO
33350 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 41  p->opcode = OP_A
33360 67 67 53 74 65 70 3b 0a 20 20 2f 2a 20 46 61 6c  ggStep;.  /* Fal
33370 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f  l through into O
33380 50 5f 41 67 67 53 74 65 70 20 2a 2f 0a 7d 0a 63  P_AggStep */.}.c
33390 61 73 65 20 4f 50 5f 41 67 67 53 74 65 70 3a 20  ase OP_AggStep: 
333a0 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73 71 6c  {.  int i;.  sql
333b0 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43  ite3_context *pC
333c0 74 78 3b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b  tx;.  Mem *pMem;
333d0 0a 20 20 4d 65 6d 20 74 3b 0a 0a 20 20 61 73 73  .  Mem t;..  ass
333e0 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
333f0 3d 3d 50 34 5f 46 55 4e 43 43 54 58 20 29 3b 0a  ==P4_FUNCCTX );.
33400 20 20 70 43 74 78 20 3d 20 70 4f 70 2d 3e 70 34    pCtx = pOp->p4
33410 2e 70 43 74 78 3b 0a 20 20 70 4d 65 6d 20 3d 20  .pCtx;.  pMem = 
33420 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
33430 0a 20 20 2f 2a 20 49 66 20 74 68 69 73 20 66 75  .  /* If this fu
33440 6e 63 74 69 6f 6e 20 69 73 20 69 6e 73 69 64 65  nction is inside
33450 20 6f 66 20 61 20 74 72 69 67 67 65 72 2c 20 74   of a trigger, t
33460 68 65 20 72 65 67 69 73 74 65 72 20 61 72 72 61  he register arra
33470 79 20 69 6e 20 61 4d 65 6d 5b 5d 0a 20 20 2a 2a  y in aMem[].  **
33480 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20 66 72   might change fr
33490 6f 6d 20 6f 6e 65 20 65 76 61 6c 75 61 74 69 6f  om one evaluatio
334a0 6e 20 74 6f 20 74 68 65 20 6e 65 78 74 2e 20 20  n to the next.  
334b0 54 68 65 20 6e 65 78 74 20 62 6c 6f 63 6b 20 6f  The next block o
334c0 66 20 63 6f 64 65 0a 20 20 2a 2a 20 63 68 65 63  f code.  ** chec
334d0 6b 73 20 74 6f 20 73 65 65 20 69 66 20 74 68 65  ks to see if the
334e0 20 72 65 67 69 73 74 65 72 20 61 72 72 61 79 20   register array 
334f0 68 61 73 20 63 68 61 6e 67 65 64 2c 20 61 6e 64  has changed, and
33500 20 69 66 20 73 6f 20 69 74 0a 20 20 2a 2a 20 72   if so it.  ** r
33510 65 69 6e 69 74 69 61 6c 69 7a 65 73 20 74 68 65  einitializes the
33520 20 72 65 6c 61 76 61 6e 74 20 70 61 72 74 73 20   relavant parts 
33530 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 63  of the sqlite3_c
33540 6f 6e 74 65 78 74 20 6f 62 6a 65 63 74 20 2a 2f  ontext object */
33550 0a 20 20 69 66 28 20 70 43 74 78 2d 3e 70 4d 65  .  if( pCtx->pMe
33560 6d 20 21 3d 20 70 4d 65 6d 20 29 7b 0a 20 20 20  m != pMem ){.   
33570 20 70 43 74 78 2d 3e 70 4d 65 6d 20 3d 20 70 4d   pCtx->pMem = pM
33580 65 6d 3b 0a 20 20 20 20 66 6f 72 28 69 3d 70 43  em;.    for(i=pC
33590 74 78 2d 3e 61 72 67 63 2d 31 3b 20 69 3e 3d 30  tx->argc-1; i>=0
335a0 3b 20 69 2d 2d 29 20 70 43 74 78 2d 3e 61 72 67  ; i--) pCtx->arg
335b0 76 5b 69 5d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  v[i] = &aMem[pOp
335c0 2d 3e 70 32 2b 69 5d 3b 0a 20 20 7d 0a 0a 23 69  ->p2+i];.  }..#i
335d0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
335e0 47 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70  G.  for(i=0; i<p
335f0 43 74 78 2d 3e 61 72 67 63 3b 20 69 2b 2b 29 7b  Ctx->argc; i++){
33600 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
33610 49 73 56 61 6c 69 64 28 70 43 74 78 2d 3e 61 72  IsValid(pCtx->ar
33620 67 76 5b 69 5d 29 20 29 3b 0a 20 20 20 20 52 45  gv[i]) );.    RE
33630 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
33640 2d 3e 70 32 2b 69 2c 20 70 43 74 78 2d 3e 61 72  ->p2+i, pCtx->ar
33650 67 76 5b 69 5d 29 3b 0a 20 20 7d 0a 23 65 6e 64  gv[i]);.  }.#end
33660 69 66 0a 0a 20 20 70 4d 65 6d 2d 3e 6e 2b 2b 3b  if..  pMem->n++;
33670 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
33680 6d 49 6e 69 74 28 26 74 2c 20 64 62 2c 20 4d 45  mInit(&t, db, ME
33690 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 70 43 74 78 2d  M_Null);.  pCtx-
336a0 3e 70 4f 75 74 20 3d 20 26 74 3b 0a 20 20 70 43  >pOut = &t;.  pC
336b0 74 78 2d 3e 66 45 72 72 6f 72 4f 72 41 75 78 20  tx->fErrorOrAux 
336c0 3d 20 30 3b 0a 20 20 70 43 74 78 2d 3e 73 6b 69  = 0;.  pCtx->ski
336d0 70 46 6c 61 67 20 3d 20 30 3b 0a 20 20 28 70 43  pFlag = 0;.  (pC
336e0 74 78 2d 3e 70 46 75 6e 63 2d 3e 78 53 46 75 6e  tx->pFunc->xSFun
336f0 63 29 28 70 43 74 78 2c 70 43 74 78 2d 3e 61 72  c)(pCtx,pCtx->ar
33700 67 63 2c 70 43 74 78 2d 3e 61 72 67 76 29 3b 20  gc,pCtx->argv); 
33710 2f 2a 20 49 4d 50 3a 20 52 2d 32 34 35 30 35 2d  /* IMP: R-24505-
33720 32 33 32 33 30 20 2a 2f 0a 20 20 69 66 28 20 70  23230 */.  if( p
33730 43 74 78 2d 3e 66 45 72 72 6f 72 4f 72 41 75 78  Ctx->fErrorOrAux
33740 20 29 7b 0a 20 20 20 20 69 66 28 20 70 43 74 78   ){.    if( pCtx
33750 2d 3e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20  ->isError ){.   
33760 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
33770 72 6f 72 28 70 2c 20 22 25 73 22 2c 20 73 71 6c  ror(p, "%s", sql
33780 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28  ite3_value_text(
33790 26 74 29 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  &t));.      rc =
337a0 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 3b 0a   pCtx->isError;.
337b0 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
337c0 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28  3VdbeMemRelease(
337d0 26 74 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20  &t);.    if( rc 
337e0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
337f0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 65 6c  _to_error;.  }el
33800 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
33810 74 2e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 4e 75 6c  t.flags==MEM_Nul
33820 6c 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70  l );.  }.  if( p
33830 43 74 78 2d 3e 73 6b 69 70 46 6c 61 67 20 29 7b  Ctx->skipFlag ){
33840 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
33850 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  [-1].opcode==OP_
33860 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20 69  CollSeq );.    i
33870 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 31 3b 0a 20   = pOp[-1].p1;. 
33880 20 20 20 69 66 28 20 69 20 29 20 73 71 6c 69 74     if( i ) sqlit
33890 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36  e3VdbeMemSetInt6
338a0 34 28 26 61 4d 65 6d 5b 69 5d 2c 20 31 29 3b 0a  4(&aMem[i], 1);.
338b0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
338c0 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 46 69  /* Opcode: AggFi
338d0 6e 61 6c 20 50 31 20 50 32 20 2a 20 50 34 20 2a  nal P1 P2 * P4 *
338e0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 63  .** Synopsis: ac
338f0 63 75 6d 3d 72 5b 50 31 5d 20 4e 3d 50 32 0a 2a  cum=r[P1] N=P2.*
33900 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65  *.** Execute the
33910 20 66 69 6e 61 6c 69 7a 65 72 20 66 75 6e 63 74   finalizer funct
33920 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67 72 65  ion for an aggre
33930 67 61 74 65 2e 20 20 50 31 20 69 73 0a 2a 2a 20  gate.  P1 is.** 
33940 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74  the memory locat
33950 69 6f 6e 20 74 68 61 74 20 69 73 20 74 68 65 20  ion that is the 
33960 61 63 63 75 6d 75 6c 61 74 6f 72 20 66 6f 72 20  accumulator for 
33970 74 68 65 20 61 67 67 72 65 67 61 74 65 2e 0a 2a  the aggregate..*
33980 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20 6e  *.** P2 is the n
33990 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
339a0 74 73 20 74 68 61 74 20 74 68 65 20 73 74 65 70  ts that the step
339b0 20 66 75 6e 63 74 69 6f 6e 20 74 61 6b 65 73 20   function takes 
339c0 61 6e 64 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  and.** P4 is a p
339d0 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 46 75  ointer to the Fu
339e0 6e 63 44 65 66 20 66 6f 72 20 74 68 69 73 20 66  ncDef for this f
339f0 75 6e 63 74 69 6f 6e 2e 20 20 54 68 65 20 50 32  unction.  The P2
33a00 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 69 73 20  .** argument is 
33a10 6e 6f 74 20 75 73 65 64 20 62 79 20 74 68 69 73  not used by this
33a20 20 6f 70 63 6f 64 65 2e 20 20 49 74 20 69 73 20   opcode.  It is 
33a30 6f 6e 6c 79 20 74 68 65 72 65 20 74 6f 20 64 69  only there to di
33a40 73 61 6d 62 69 67 75 61 74 65 0a 2a 2a 20 66 75  sambiguate.** fu
33a50 6e 63 74 69 6f 6e 73 20 74 68 61 74 20 63 61 6e  nctions that can
33a60 20 74 61 6b 65 20 76 61 72 79 69 6e 67 20 6e 75   take varying nu
33a70 6d 62 65 72 73 20 6f 66 20 61 72 67 75 6d 65 6e  mbers of argumen
33a80 74 73 2e 20 20 54 68 65 0a 2a 2a 20 50 34 20 61  ts.  The.** P4 a
33a90 72 67 75 6d 65 6e 74 20 69 73 20 6f 6e 6c 79 20  rgument is only 
33aa0 6e 65 65 64 65 64 20 66 6f 72 20 74 68 65 20 64  needed for the d
33ab0 65 67 65 6e 65 72 61 74 65 20 63 61 73 65 20 77  egenerate case w
33ac0 68 65 72 65 0a 2a 2a 20 74 68 65 20 73 74 65 70  here.** the step
33ad0 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 6e 6f   function was no
33ae0 74 20 70 72 65 76 69 6f 75 73 6c 79 20 63 61 6c  t previously cal
33af0 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  led..*/.case OP_
33b00 41 67 67 46 69 6e 61 6c 3a 20 7b 0a 20 20 4d 65  AggFinal: {.  Me
33b10 6d 20 2a 70 4d 65 6d 3b 0a 20 20 61 73 73 65 72  m *pMem;.  asser
33b20 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20  t( pOp->p1>0 && 
33b30 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p1<=(p->nMe
33b40 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
33b50 29 20 29 3b 0a 20 20 70 4d 65 6d 20 3d 20 26 61  ) );.  pMem = &a
33b60 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
33b70 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66  assert( (pMem->f
33b80 6c 61 67 73 20 26 20 7e 28 4d 45 4d 5f 4e 75 6c  lags & ~(MEM_Nul
33b90 6c 7c 4d 45 4d 5f 41 67 67 29 29 3d 3d 30 20 29  l|MEM_Agg))==0 )
33ba0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
33bb0 56 64 62 65 4d 65 6d 46 69 6e 61 6c 69 7a 65 28  VdbeMemFinalize(
33bc0 70 4d 65 6d 2c 20 70 4f 70 2d 3e 70 34 2e 70 46  pMem, pOp->p4.pF
33bd0 75 6e 63 29 3b 0a 20 20 69 66 28 20 72 63 20 29  unc);.  if( rc )
33be0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
33bf0 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22 2c 20  eError(p, "%s", 
33c00 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65  sqlite3_value_te
33c10 78 74 28 70 4d 65 6d 29 29 3b 0a 20 20 20 20 67  xt(pMem));.    g
33c20 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
33c30 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 73 71  _error;.  }.  sq
33c40 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45  lite3VdbeChangeE
33c50 6e 63 6f 64 69 6e 67 28 70 4d 65 6d 2c 20 65 6e  ncoding(pMem, en
33c60 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50 44 41 54  coding);.  UPDAT
33c70 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
33c80 4d 65 6d 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  Mem);.  if( sqli
33c90 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67  te3VdbeMemTooBig
33ca0 28 70 4d 65 6d 29 20 29 7b 0a 20 20 20 20 67 6f  (pMem) ){.    go
33cb0 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
33cc0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e    break;.}..#ifn
33cd0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
33ce0 57 41 4c 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43  WAL./* Opcode: C
33cf0 68 65 63 6b 70 6f 69 6e 74 20 50 31 20 50 32 20  heckpoint P1 P2 
33d00 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65  P3 * *.**.** Che
33d10 63 6b 70 6f 69 6e 74 20 64 61 74 61 62 61 73 65  ckpoint database
33d20 20 50 31 2e 20 54 68 69 73 20 69 73 20 61 20 6e   P1. This is a n
33d30 6f 2d 6f 70 20 69 66 20 50 31 20 69 73 20 6e 6f  o-op if P1 is no
33d40 74 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 0a 2a  t currently in.*
33d50 2a 20 57 41 4c 20 6d 6f 64 65 2e 20 50 61 72 61  * WAL mode. Para
33d60 6d 65 74 65 72 20 50 32 20 69 73 20 6f 6e 65 20  meter P2 is one 
33d70 6f 66 20 53 51 4c 49 54 45 5f 43 48 45 43 4b 50  of SQLITE_CHECKP
33d80 4f 49 4e 54 5f 50 41 53 53 49 56 45 2c 20 46 55  OINT_PASSIVE, FU
33d90 4c 4c 2c 0a 2a 2a 20 52 45 53 54 41 52 54 2c 20  LL,.** RESTART, 
33da0 6f 72 20 54 52 55 4e 43 41 54 45 2e 20 20 57 72  or TRUNCATE.  Wr
33db0 69 74 65 20 31 20 6f 72 20 30 20 69 6e 74 6f 20  ite 1 or 0 into 
33dc0 6d 65 6d 5b 50 33 5d 20 69 66 20 74 68 65 20 63  mem[P3] if the c
33dd0 68 65 63 6b 70 6f 69 6e 74 20 72 65 74 75 72 6e  heckpoint return
33de0 73 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53 59  s.** SQLITE_BUSY
33df0 20 6f 72 20 6e 6f 74 2c 20 72 65 73 70 65 63 74   or not, respect
33e00 69 76 65 6c 79 2e 20 20 57 72 69 74 65 20 74 68  ively.  Write th
33e10 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  e number of page
33e20 73 20 69 6e 20 74 68 65 0a 2a 2a 20 57 41 4c 20  s in the.** WAL 
33e30 61 66 74 65 72 20 74 68 65 20 63 68 65 63 6b 70  after the checkp
33e40 6f 69 6e 74 20 69 6e 74 6f 20 6d 65 6d 5b 50 33  oint into mem[P3
33e50 2b 31 5d 20 61 6e 64 20 74 68 65 20 6e 75 6d 62  +1] and the numb
33e60 65 72 20 6f 66 20 70 61 67 65 73 0a 2a 2a 20 69  er of pages.** i
33e70 6e 20 74 68 65 20 57 41 4c 20 74 68 61 74 20 68  n the WAL that h
33e80 61 76 65 20 62 65 65 6e 20 63 68 65 63 6b 70 6f  ave been checkpo
33e90 69 6e 74 65 64 20 61 66 74 65 72 20 74 68 65 20  inted after the 
33ea0 63 68 65 63 6b 70 6f 69 6e 74 0a 2a 2a 20 63 6f  checkpoint.** co
33eb0 6d 70 6c 65 74 65 73 20 69 6e 74 6f 20 6d 65 6d  mpletes into mem
33ec0 5b 50 33 2b 32 5d 2e 20 20 48 6f 77 65 76 65 72  [P3+2].  However
33ed0 20 6f 6e 20 61 6e 20 65 72 72 6f 72 2c 20 6d 65   on an error, me
33ee0 6d 5b 50 33 2b 31 5d 20 61 6e 64 0a 2a 2a 20 6d  m[P3+1] and.** m
33ef0 65 6d 5b 50 33 2b 32 5d 20 61 72 65 20 69 6e 69  em[P3+2] are ini
33f00 74 69 61 6c 69 7a 65 64 20 74 6f 20 2d 31 2e 0a  tialized to -1..
33f10 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 68 65 63 6b  */.case OP_Check
33f20 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 69  point: {.  int i
33f30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
33f40 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f             /* Lo
33f50 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20  op counter */.  
33f60 69 6e 74 20 61 52 65 73 5b 33 5d 3b 20 20 20 20  int aRes[3];    
33f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33f80 2f 2a 20 52 65 73 75 6c 74 73 20 2a 2f 0a 20 20  /* Results */.  
33f90 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20  Mem *pMem;      
33fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33fb0 2f 2a 20 57 72 69 74 65 20 72 65 73 75 6c 74 73  /* Write results
33fc0 20 68 65 72 65 20 2a 2f 0a 0a 20 20 61 73 73 65   here */..  asse
33fd0 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
33fe0 3d 30 20 29 3b 0a 20 20 61 52 65 73 5b 30 5d 20  =0 );.  aRes[0] 
33ff0 3d 20 30 3b 0a 20 20 61 52 65 73 5b 31 5d 20 3d  = 0;.  aRes[1] =
34000 20 61 52 65 73 5b 32 5d 20 3d 20 2d 31 3b 0a 20   aRes[2] = -1;. 
34010 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
34020 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f  ==SQLITE_CHECKPO
34030 49 4e 54 5f 50 41 53 53 49 56 45 0a 20 20 20 20  INT_PASSIVE.    
34040 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53     || pOp->p2==S
34050 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54  QLITE_CHECKPOINT
34060 5f 46 55 4c 4c 0a 20 20 20 20 20 20 20 7c 7c 20  _FULL.       || 
34070 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
34080 43 48 45 43 4b 50 4f 49 4e 54 5f 52 45 53 54 41  CHECKPOINT_RESTA
34090 52 54 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f 70  RT.       || pOp
340a0 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45  ->p2==SQLITE_CHE
340b0 43 4b 50 4f 49 4e 54 5f 54 52 55 4e 43 41 54 45  CKPOINT_TRUNCATE
340c0 0a 20 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  .  );.  rc = sql
340d0 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28 64  ite3Checkpoint(d
340e0 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  b, pOp->p1, pOp-
340f0 3e 70 32 2c 20 26 61 52 65 73 5b 31 5d 2c 20 26  >p2, &aRes[1], &
34100 61 52 65 73 5b 32 5d 29 3b 0a 20 20 69 66 28 20  aRes[2]);.  if( 
34110 72 63 20 29 7b 0a 20 20 20 20 69 66 28 20 72 63  rc ){.    if( rc
34120 21 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 20  !=SQLITE_BUSY ) 
34130 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
34140 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 72 63 20  o_error;.    rc 
34150 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20  = SQLITE_OK;.   
34160 20 61 52 65 73 5b 30 5d 20 3d 20 31 3b 0a 20 20   aRes[0] = 1;.  
34170 7d 0a 20 20 66 6f 72 28 69 3d 30 2c 20 70 4d 65  }.  for(i=0, pMe
34180 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  m = &aMem[pOp->p
34190 33 5d 3b 20 69 3c 33 3b 20 69 2b 2b 2c 20 70 4d  3]; i<3; i++, pM
341a0 65 6d 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74  em++){.    sqlit
341b0 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36  e3VdbeMemSetInt6
341c0 34 28 70 4d 65 6d 2c 20 28 69 36 34 29 61 52 65  4(pMem, (i64)aRe
341d0 73 5b 69 5d 29 3b 0a 20 20 7d 20 20 20 20 0a 20  s[i]);.  }    . 
341e0 20 62 72 65 61 6b 3b 0a 7d 3b 20 20 0a 23 65 6e   break;.};  .#en
341f0 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
34200 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 0a  ITE_OMIT_PRAGMA.
34210 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 6f 75 72 6e  /* Opcode: Journ
34220 61 6c 4d 6f 64 65 20 50 31 20 50 32 20 50 33 20  alMode P1 P2 P3 
34230 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 65  * *.**.** Change
34240 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64   the journal mod
34250 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31  e of database P1
34260 20 74 6f 20 50 33 2e 20 50 33 20 6d 75 73 74 20   to P3. P3 must 
34270 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 0a 2a 2a  be one of the.**
34280 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f   PAGER_JOURNALMO
34290 44 45 5f 58 58 58 20 76 61 6c 75 65 73 2e 20 49  DE_XXX values. I
342a0 66 20 63 68 61 6e 67 69 6e 67 20 62 65 74 77 65  f changing betwe
342b0 65 6e 20 74 68 65 20 76 61 72 69 6f 75 73 20 72  en the various r
342c0 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6d 6f 64 65 73  ollback.** modes
342d0 20 28 64 65 6c 65 74 65 2c 20 74 72 75 6e 63 61   (delete, trunca
342e0 74 65 2c 20 70 65 72 73 69 73 74 2c 20 6f 66 66  te, persist, off
342f0 20 61 6e 64 20 6d 65 6d 6f 72 79 29 2c 20 74 68   and memory), th
34300 69 73 20 69 73 20 61 20 73 69 6d 70 6c 65 0a 2a  is is a simple.*
34310 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20 4e 6f 20  * operation. No 
34320 49 4f 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a  IO is required..
34330 2a 2a 0a 2a 2a 20 49 66 20 63 68 61 6e 67 69 6e  **.** If changin
34340 67 20 69 6e 74 6f 20 6f 72 20 6f 75 74 20 6f 66  g into or out of
34350 20 57 41 4c 20 6d 6f 64 65 20 74 68 65 20 70 72   WAL mode the pr
34360 6f 63 65 64 75 72 65 20 69 73 20 6d 6f 72 65 20  ocedure is more 
34370 63 6f 6d 70 6c 69 63 61 74 65 64 2e 0a 2a 2a 0a  complicated..**.
34380 2a 2a 20 57 72 69 74 65 20 61 20 73 74 72 69 6e  ** Write a strin
34390 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  g containing the
343a0 20 66 69 6e 61 6c 20 6a 6f 75 72 6e 61 6c 2d 6d   final journal-m
343b0 6f 64 65 20 74 6f 20 72 65 67 69 73 74 65 72 20  ode to register 
343c0 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a  P2..*/.case OP_J
343d0 6f 75 72 6e 61 6c 4d 6f 64 65 3a 20 7b 20 20 20  ournalMode: {   
343e0 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 42 74   /* out2 */.  Bt
343f0 72 65 65 20 2a 70 42 74 3b 20 20 20 20 20 20 20  ree *pBt;       
34400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
34410 20 42 74 72 65 65 20 74 6f 20 63 68 61 6e 67 65   Btree to change
34420 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66   journal mode of
34430 20 2a 2f 0a 20 20 50 61 67 65 72 20 2a 70 50 61   */.  Pager *pPa
34440 67 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  ger;            
34450 20 20 20 20 20 20 2f 2a 20 50 61 67 65 72 20 61        /* Pager a
34460 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 70  ssociated with p
34470 42 74 20 2a 2f 0a 20 20 69 6e 74 20 65 4e 65 77  Bt */.  int eNew
34480 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
34490 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 77 20 6a          /* New j
344a0 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 20  ournal mode */. 
344b0 20 69 6e 74 20 65 4f 6c 64 3b 20 20 20 20 20 20   int eOld;      
344c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
344d0 20 2f 2a 20 54 68 65 20 6f 6c 64 20 6a 6f 75 72   /* The old jour
344e0 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 23 69 66 6e  nal mode */.#ifn
344f0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
34500 57 41 4c 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  WAL.  const char
34510 20 2a 7a 46 69 6c 65 6e 61 6d 65 3b 20 20 20 20   *zFilename;    
34520 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
34530 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 66   database file f
34540 6f 72 20 70 50 61 67 65 72 20 2a 2f 0a 23 65 6e  or pPager */.#en
34550 64 69 66 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75  dif..  pOut = ou
34560 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
34570 70 4f 70 29 3b 0a 20 20 65 4e 65 77 20 3d 20 70  pOp);.  eNew = p
34580 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74  Op->p3;.  assert
34590 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  ( eNew==PAGER_JO
345a0 55 52 4e 41 4c 4d 4f 44 45 5f 44 45 4c 45 54 45  URNALMODE_DELETE
345b0 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77   .       || eNew
345c0 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
345d0 4f 44 45 5f 54 52 55 4e 43 41 54 45 20 0a 20 20  ODE_TRUNCATE .  
345e0 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41       || eNew==PA
345f0 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
34600 50 45 52 53 49 53 54 20 0a 20 20 20 20 20 20 20  PERSIST .       
34610 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  || eNew==PAGER_J
34620 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 0a 20  OURNALMODE_OFF. 
34630 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50        || eNew==P
34640 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
34650 5f 4d 45 4d 4f 52 59 0a 20 20 20 20 20 20 20 7c  _MEMORY.       |
34660 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
34670 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20  URNALMODE_WAL.  
34680 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41       || eNew==PA
34690 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
346a0 51 55 45 52 59 0a 20 20 29 3b 0a 20 20 61 73 73  QUERY.  );.  ass
346b0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
346c0 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e  && pOp->p1<db->n
346d0 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
346e0 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
346f0 3b 0a 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61  ;..  pBt = db->a
34700 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b  Db[pOp->p1].pBt;
34710 0a 20 20 70 50 61 67 65 72 20 3d 20 73 71 6c 69  .  pPager = sqli
34720 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70 42  te3BtreePager(pB
34730 74 29 3b 0a 20 20 65 4f 6c 64 20 3d 20 73 71 6c  t);.  eOld = sql
34740 69 74 65 33 50 61 67 65 72 47 65 74 4a 6f 75 72  ite3PagerGetJour
34750 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 29 3b  nalMode(pPager);
34760 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d 50 41 47  .  if( eNew==PAG
34770 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51  ER_JOURNALMODE_Q
34780 55 45 52 59 20 29 20 65 4e 65 77 20 3d 20 65 4f  UERY ) eNew = eO
34790 6c 64 3b 0a 20 20 69 66 28 20 21 73 71 6c 69 74  ld;.  if( !sqlit
347a0 65 33 50 61 67 65 72 4f 6b 54 6f 43 68 61 6e 67  e3PagerOkToChang
347b0 65 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61  eJournalMode(pPa
347c0 67 65 72 29 20 29 20 65 4e 65 77 20 3d 20 65 4f  ger) ) eNew = eO
347d0 6c 64 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ld;..#ifndef SQL
347e0 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 7a  ITE_OMIT_WAL.  z
347f0 46 69 6c 65 6e 61 6d 65 20 3d 20 73 71 6c 69 74  Filename = sqlit
34800 65 33 50 61 67 65 72 46 69 6c 65 6e 61 6d 65 28  e3PagerFilename(
34810 70 50 61 67 65 72 2c 20 31 29 3b 0a 0a 20 20 2f  pPager, 1);..  /
34820 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 61  * Do not allow a
34830 20 74 72 61 6e 73 69 74 69 6f 6e 20 74 6f 20 6a   transition to j
34840 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d 57 41 4c 20  ournal_mode=WAL 
34850 66 6f 72 20 61 20 64 61 74 61 62 61 73 65 0a 20  for a database. 
34860 20 2a 2a 20 69 6e 20 74 65 6d 70 6f 72 61 72 79   ** in temporary
34870 20 73 74 6f 72 61 67 65 20 6f 72 20 69 66 20 74   storage or if t
34880 68 65 20 56 46 53 20 64 6f 65 73 20 6e 6f 74 20  he VFS does not 
34890 73 75 70 70 6f 72 74 20 73 68 61 72 65 64 20 6d  support shared m
348a0 65 6d 6f 72 79 20 0a 20 20 2a 2f 0a 20 20 69 66  emory .  */.  if
348b0 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  ( eNew==PAGER_JO
348c0 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20  URNALMODE_WAL.  
348d0 20 26 26 20 28 73 71 6c 69 74 65 33 53 74 72 6c   && (sqlite3Strl
348e0 65 6e 33 30 28 7a 46 69 6c 65 6e 61 6d 65 29 3d  en30(zFilename)=
348f0 3d 30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  =0           /* 
34900 54 65 6d 70 20 66 69 6c 65 20 2a 2f 0a 20 20 20  Temp file */.   
34910 20 20 20 20 7c 7c 20 21 73 71 6c 69 74 65 33 50      || !sqlite3P
34920 61 67 65 72 57 61 6c 53 75 70 70 6f 72 74 65 64  agerWalSupported
34930 28 70 50 61 67 65 72 29 29 20 20 20 2f 2a 20 4e  (pPager))   /* N
34940 6f 20 73 68 61 72 65 64 2d 6d 65 6d 6f 72 79 20  o shared-memory 
34950 73 75 70 70 6f 72 74 20 2a 2f 0a 20 20 29 7b 0a  support */.  ){.
34960 20 20 20 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b      eNew = eOld;
34970 0a 20 20 7d 0a 0a 20 20 69 66 28 20 28 65 4e 65  .  }..  if( (eNe
34980 77 21 3d 65 4f 6c 64 29 0a 20 20 20 26 26 20 28  w!=eOld).   && (
34990 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eOld==PAGER_JOUR
349a0 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 7c 7c 20 65  NALMODE_WAL || e
349b0 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
349c0 41 4c 4d 4f 44 45 5f 57 41 4c 29 0a 20 20 29 7b  ALMODE_WAL).  ){
349d0 0a 20 20 20 20 69 66 28 20 21 64 62 2d 3e 61 75  .    if( !db->au
349e0 74 6f 43 6f 6d 6d 69 74 20 7c 7c 20 64 62 2d 3e  toCommit || db->
349f0 6e 56 64 62 65 52 65 61 64 3e 31 20 29 7b 0a 20  nVdbeRead>1 ){. 
34a00 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
34a10 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20 20 73 71  _ERROR;.      sq
34a20 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70  lite3VdbeError(p
34a30 2c 0a 20 20 20 20 20 20 20 20 20 20 22 63 61 6e  ,.          "can
34a40 6e 6f 74 20 63 68 61 6e 67 65 20 25 73 20 77 61  not change %s wa
34a50 6c 20 6d 6f 64 65 20 66 72 6f 6d 20 77 69 74 68  l mode from with
34a60 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  in a transaction
34a70 22 2c 0a 20 20 20 20 20 20 20 20 20 20 28 65 4e  ",.          (eN
34a80 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
34a90 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 22 69 6e 74  LMODE_WAL ? "int
34aa0 6f 22 20 3a 20 22 6f 75 74 20 6f 66 22 29 0a 20  o" : "out of"). 
34ab0 20 20 20 20 20 29 3b 0a 20 20 20 20 20 20 67 6f       );.      go
34ac0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
34ad0 65 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65  error;.    }else
34ae0 7b 0a 20 0a 20 20 20 20 20 20 69 66 28 20 65 4f  {. .      if( eO
34af0 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ld==PAGER_JOURNA
34b00 4c 4d 4f 44 45 5f 57 41 4c 20 29 7b 0a 20 20 20  LMODE_WAL ){.   
34b10 20 20 20 20 20 2f 2a 20 49 66 20 6c 65 61 76 69       /* If leavi
34b20 6e 67 20 57 41 4c 20 6d 6f 64 65 2c 20 63 6c 6f  ng WAL mode, clo
34b30 73 65 20 74 68 65 20 6c 6f 67 20 66 69 6c 65 2e  se the log file.
34b40 20 49 66 20 73 75 63 63 65 73 73 66 75 6c 2c 20   If successful, 
34b50 74 68 65 20 63 61 6c 6c 0a 20 20 20 20 20 20 20  the call.       
34b60 20 2a 2a 20 74 6f 20 50 61 67 65 72 43 6c 6f 73   ** to PagerClos
34b70 65 57 61 6c 28 29 20 63 68 65 63 6b 70 6f 69 6e  eWal() checkpoin
34b80 74 73 20 61 6e 64 20 64 65 6c 65 74 65 73 20 74  ts and deletes t
34b90 68 65 20 77 72 69 74 65 2d 61 68 65 61 64 2d 6c  he write-ahead-l
34ba0 6f 67 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 66  og .        ** f
34bb0 69 6c 65 2e 20 41 6e 20 45 58 43 4c 55 53 49 56  ile. An EXCLUSIV
34bc0 45 20 6c 6f 63 6b 20 6d 61 79 20 73 74 69 6c 6c  E lock may still
34bd0 20 62 65 20 68 65 6c 64 20 6f 6e 20 74 68 65 20   be held on the 
34be0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 0a 20  database file . 
34bf0 20 20 20 20 20 20 20 2a 2a 20 61 66 74 65 72 20         ** after 
34c00 61 20 73 75 63 63 65 73 73 66 75 6c 20 72 65 74  a successful ret
34c10 75 72 6e 2e 20 0a 20 20 20 20 20 20 20 20 2a 2f  urn. .        */
34c20 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
34c30 6c 69 74 65 33 50 61 67 65 72 43 6c 6f 73 65 57  lite3PagerCloseW
34c40 61 6c 28 70 50 61 67 65 72 2c 20 64 62 29 3b 0a  al(pPager, db);.
34c50 20 20 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d          if( rc==
34c60 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
34c70 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61         sqlite3Pa
34c80 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64  gerSetJournalMod
34c90 65 28 70 50 61 67 65 72 2c 20 65 4e 65 77 29 3b  e(pPager, eNew);
34ca0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
34cb0 20 7d 65 6c 73 65 20 69 66 28 20 65 4f 6c 64 3d   }else if( eOld=
34cc0 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
34cd0 44 45 5f 4d 45 4d 4f 52 59 20 29 7b 0a 20 20 20  DE_MEMORY ){.   
34ce0 20 20 20 20 20 2f 2a 20 43 61 6e 6e 6f 74 20 74       /* Cannot t
34cf0 72 61 6e 73 69 74 69 6f 6e 20 64 69 72 65 63 74  ransition direct
34d00 6c 79 20 66 72 6f 6d 20 4d 45 4d 4f 52 59 20 74  ly from MEMORY t
34d10 6f 20 57 41 4c 2e 20 20 55 73 65 20 6d 6f 64 65  o WAL.  Use mode
34d20 20 4f 46 46 0a 20 20 20 20 20 20 20 20 2a 2a 20   OFF.        ** 
34d30 61 73 20 61 6e 20 69 6e 74 65 72 6d 65 64 69 61  as an intermedia
34d40 74 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 73 71  te */.        sq
34d50 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75  lite3PagerSetJou
34d60 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c  rnalMode(pPager,
34d70 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f   PAGER_JOURNALMO
34d80 44 45 5f 4f 46 46 29 3b 0a 20 20 20 20 20 20 7d  DE_OFF);.      }
34d90 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 4f 70 65  .  .      /* Ope
34da0 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  n a transaction 
34db0 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  on the database 
34dc0 66 69 6c 65 2e 20 52 65 67 61 72 64 6c 65 73 73  file. Regardless
34dd0 20 6f 66 20 74 68 65 20 6a 6f 75 72 6e 61 6c 0a   of the journal.
34de0 20 20 20 20 20 20 2a 2a 20 6d 6f 64 65 2c 20 74        ** mode, t
34df0 68 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  his transaction 
34e00 61 6c 77 61 79 73 20 75 73 65 73 20 61 20 72 6f  always uses a ro
34e10 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 0a  llback journal..
34e20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61        */.      a
34e30 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74  ssert( sqlite3Bt
34e40 72 65 65 49 73 49 6e 54 72 61 6e 73 28 70 42 74  reeIsInTrans(pBt
34e50 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66  )==0 );.      if
34e60 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
34e70 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
34e80 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 56  sqlite3BtreeSetV
34e90 65 72 73 69 6f 6e 28 70 42 74 2c 20 28 65 4e 65  ersion(pBt, (eNe
34ea0 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
34eb0 4d 4f 44 45 5f 57 41 4c 20 3f 20 32 20 3a 20 31  MODE_WAL ? 2 : 1
34ec0 29 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ));.      }.    
34ed0 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  }.  }.#endif /* 
34ee0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
34ef0 49 54 5f 57 41 4c 20 2a 2f 0a 0a 20 20 69 66 28  IT_WAL */..  if(
34f00 20 72 63 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c   rc ) eNew = eOl
34f10 64 3b 0a 20 20 65 4e 65 77 20 3d 20 73 71 6c 69  d;.  eNew = sqli
34f20 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e  te3PagerSetJourn
34f30 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65  alMode(pPager, e
34f40 4e 65 77 29 3b 0a 0a 20 20 70 4f 75 74 2d 3e 66  New);..  pOut->f
34f50 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d  lags = MEM_Str|M
34f60 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65  EM_Static|MEM_Te
34f70 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20  rm;.  pOut->z = 
34f80 28 63 68 61 72 20 2a 29 73 71 6c 69 74 65 33 4a  (char *)sqlite3J
34f90 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 65  ournalModename(e
34fa0 4e 65 77 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20  New);.  pOut->n 
34fb0 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
34fc0 30 28 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 70 4f  0(pOut->z);.  pO
34fd0 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45  ut->enc = SQLITE
34fe0 5f 55 54 46 38 3b 0a 20 20 73 71 6c 69 74 65 33  _UTF8;.  sqlite3
34ff0 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
35000 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e  ng(pOut, encodin
35010 67 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  g);.  if( rc ) g
35020 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
35030 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b  _error;.  break;
35040 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  .};.#endif /* SQ
35050 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41  LITE_OMIT_PRAGMA
35060 20 2a 2f 0a 0a 23 69 66 20 21 64 65 66 69 6e 65   */..#if !define
35070 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 41  d(SQLITE_OMIT_VA
35080 43 55 55 4d 29 20 26 26 20 21 64 65 66 69 6e 65  CUUM) && !define
35090 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 54  d(SQLITE_OMIT_AT
350a0 54 41 43 48 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TACH)./* Opcode:
350b0 20 56 61 63 75 75 6d 20 50 31 20 2a 20 2a 20 2a   Vacuum P1 * * *
350c0 20 2a 0a 2a 2a 0a 2a 2a 20 56 61 63 75 75 6d 20   *.**.** Vacuum 
350d0 74 68 65 20 65 6e 74 69 72 65 20 64 61 74 61 62  the entire datab
350e0 61 73 65 20 50 31 2e 20 20 50 31 20 69 73 20 30  ase P1.  P1 is 0
350f0 20 66 6f 72 20 22 6d 61 69 6e 22 2c 20 61 6e 64   for "main", and
35100 20 32 20 6f 72 20 6d 6f 72 65 0a 2a 2a 20 66 6f   2 or more.** fo
35110 72 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61  r an attached da
35120 74 61 62 61 73 65 2e 20 20 54 68 65 20 22 74 65  tabase.  The "te
35130 6d 70 22 20 64 61 74 61 62 61 73 65 20 6d 61 79  mp" database may
35140 20 6e 6f 74 20 62 65 20 76 61 63 75 75 6d 65 64   not be vacuumed
35150 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61 63  ..*/.case OP_Vac
35160 75 75 6d 3a 20 7b 0a 20 20 61 73 73 65 72 74 28  uum: {.  assert(
35170 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
35180 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
35190 33 52 75 6e 56 61 63 75 75 6d 28 26 70 2d 3e 7a  3RunVacuum(&p->z
351a0 45 72 72 4d 73 67 2c 20 64 62 2c 20 70 4f 70 2d  ErrMsg, db, pOp-
351b0 3e 70 31 29 3b 0a 20 20 69 66 28 20 72 63 20 29  >p1);.  if( rc )
351c0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
351d0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61  to_error;.  brea
351e0 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66  k;.}.#endif..#if
351f0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
35200 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d  _OMIT_AUTOVACUUM
35210 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 63  )./* Opcode: Inc
35220 72 56 61 63 75 75 6d 20 50 31 20 50 32 20 2a 20  rVacuum P1 P2 * 
35230 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 65 72 66 6f 72  * *.**.** Perfor
35240 6d 20 61 20 73 69 6e 67 6c 65 20 73 74 65 70 20  m a single step 
35250 6f 66 20 74 68 65 20 69 6e 63 72 65 6d 65 6e 74  of the increment
35260 61 6c 20 76 61 63 75 75 6d 20 70 72 6f 63 65 64  al vacuum proced
35270 75 72 65 20 6f 6e 0a 2a 2a 20 74 68 65 20 50 31  ure on.** the P1
35280 20 64 61 74 61 62 61 73 65 2e 20 49 66 20 74 68   database. If th
35290 65 20 76 61 63 75 75 6d 20 68 61 73 20 66 69 6e  e vacuum has fin
352a0 69 73 68 65 64 2c 20 6a 75 6d 70 20 74 6f 20 69  ished, jump to i
352b0 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 50 32  nstruction.** P2
352c0 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 66 61 6c  . Otherwise, fal
352d0 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
352e0 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
352f0 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  n..*/.case OP_In
35300 63 72 56 61 63 75 75 6d 3a 20 7b 20 20 20 20 20  crVacuum: {     
35310 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
35320 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20 61  Btree *pBt;..  a
35330 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
35340 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d  0 && pOp->p1<db-
35350 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
35360 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e  ( DbMaskTest(p->
35370 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e  btreeMask, pOp->
35380 70 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  p1) );.  assert(
35390 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
353a0 29 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61  );.  pBt = db->a
353b0 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b  Db[pOp->p1].pBt;
353c0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
353d0 74 72 65 65 49 6e 63 72 56 61 63 75 75 6d 28 70  treeIncrVacuum(p
353e0 42 74 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  Bt);.  VdbeBranc
353f0 68 54 61 6b 65 6e 28 72 63 3d 3d 53 51 4c 49 54  hTaken(rc==SQLIT
35400 45 5f 44 4f 4e 45 2c 32 29 3b 0a 20 20 69 66 28  E_DONE,2);.  if(
35410 20 72 63 20 29 7b 0a 20 20 20 20 69 66 28 20 72   rc ){.    if( r
35420 63 21 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29  c!=SQLITE_DONE )
35430 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
35440 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 72 63  to_error;.    rc
35450 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
35460 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
35470 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  2;.  }.  break;.
35480 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63  }.#endif../* Opc
35490 6f 64 65 3a 20 45 78 70 69 72 65 20 50 31 20 2a  ode: Expire P1 *
354a0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 61 75   * * *.**.** Cau
354b0 73 65 20 70 72 65 63 6f 6d 70 69 6c 65 64 20 73  se precompiled s
354c0 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 65 78 70  tatements to exp
354d0 69 72 65 2e 20 20 57 68 65 6e 20 61 6e 20 65 78  ire.  When an ex
354e0 70 69 72 65 64 20 73 74 61 74 65 6d 65 6e 74 0a  pired statement.
354f0 2a 2a 20 69 73 20 65 78 65 63 75 74 65 64 20 75  ** is executed u
35500 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 73 74 65  sing sqlite3_ste
35510 70 28 29 20 69 74 20 77 69 6c 6c 20 65 69 74 68  p() it will eith
35520 65 72 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  er automatically
35530 0a 2a 2a 20 72 65 70 72 65 70 61 72 65 20 69 74  .** reprepare it
35540 73 65 6c 66 20 28 69 66 20 69 74 20 77 61 73 20  self (if it was 
35550 6f 72 69 67 69 6e 61 6c 6c 79 20 63 72 65 61 74  originally creat
35560 65 64 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33  ed using sqlite3
35570 5f 70 72 65 70 61 72 65 5f 76 32 28 29 29 0a 2a  _prepare_v2()).*
35580 2a 20 6f 72 20 69 74 20 77 69 6c 6c 20 66 61 69  * or it will fai
35590 6c 20 77 69 74 68 20 53 51 4c 49 54 45 5f 53 43  l with SQLITE_SC
355a0 48 45 4d 41 2e 0a 2a 2a 20 0a 2a 2a 20 49 66 20  HEMA..** .** If 
355b0 50 31 20 69 73 20 30 2c 20 74 68 65 6e 20 61 6c  P1 is 0, then al
355c0 6c 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  l SQL statements
355d0 20 62 65 63 6f 6d 65 20 65 78 70 69 72 65 64 2e   become expired.
355e0 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65   If P1 is non-ze
355f0 72 6f 2c 0a 2a 2a 20 74 68 65 6e 20 6f 6e 6c 79  ro,.** then only
35600 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 65   the currently e
35610 78 65 63 75 74 69 6e 67 20 73 74 61 74 65 6d 65  xecuting stateme
35620 6e 74 20 69 73 20 65 78 70 69 72 65 64 2e 0a 2a  nt is expired..*
35630 2f 0a 63 61 73 65 20 4f 50 5f 45 78 70 69 72 65  /.case OP_Expire
35640 3a 20 7b 0a 20 20 69 66 28 20 21 70 4f 70 2d 3e  : {.  if( !pOp->
35650 70 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  p1 ){.    sqlite
35660 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53  3ExpirePreparedS
35670 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20  tatements(db);. 
35680 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 65   }else{.    p->e
35690 78 70 69 72 65 64 20 3d 20 31 3b 0a 20 20 7d 0a  xpired = 1;.  }.
356a0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e    break;.}..#ifn
356b0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
356c0 53 48 41 52 45 44 5f 43 41 43 48 45 0a 2f 2a 20  SHARED_CACHE./* 
356d0 4f 70 63 6f 64 65 3a 20 54 61 62 6c 65 4c 6f 63  Opcode: TableLoc
356e0 6b 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  k P1 P2 P3 P4 *.
356f0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 44 62  ** Synopsis: iDb
35700 3d 50 31 20 72 6f 6f 74 3d 50 32 20 77 72 69 74  =P1 root=P2 writ
35710 65 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 62 74 61 69  e=P3.**.** Obtai
35720 6e 20 61 20 6c 6f 63 6b 20 6f 6e 20 61 20 70 61  n a lock on a pa
35730 72 74 69 63 75 6c 61 72 20 74 61 62 6c 65 2e 20  rticular table. 
35740 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
35750 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 77 68   is only used wh
35760 65 6e 0a 2a 2a 20 74 68 65 20 73 68 61 72 65 64  en.** the shared
35770 2d 63 61 63 68 65 20 66 65 61 74 75 72 65 20 69  -cache feature i
35780 73 20 65 6e 61 62 6c 65 64 2e 20 0a 2a 2a 0a 2a  s enabled. .**.*
35790 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e 64 65  * P1 is the inde
357a0 78 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  x of the databas
357b0 65 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62  e in sqlite3.aDb
357c0 5b 5d 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  [] of the databa
357d0 73 65 0a 2a 2a 20 6f 6e 20 77 68 69 63 68 20 74  se.** on which t
357e0 68 65 20 6c 6f 63 6b 20 69 73 20 61 63 71 75 69  he lock is acqui
357f0 72 65 64 2e 20 20 41 20 72 65 61 64 6c 6f 63 6b  red.  A readlock
35800 20 69 73 20 6f 62 74 61 69 6e 65 64 20 69 66 20   is obtained if 
35810 50 33 3d 3d 30 20 6f 72 0a 2a 2a 20 61 20 77 72  P3==0 or.** a wr
35820 69 74 65 20 6c 6f 63 6b 20 69 66 20 50 33 3d 3d  ite lock if P3==
35830 31 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 63 6f 6e 74  1..**.** P2 cont
35840 61 69 6e 73 20 74 68 65 20 72 6f 6f 74 2d 70 61  ains the root-pa
35850 67 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  ge of the table 
35860 74 6f 20 6c 6f 63 6b 2e 0a 2a 2a 0a 2a 2a 20 50  to lock..**.** P
35870 34 20 63 6f 6e 74 61 69 6e 73 20 61 20 70 6f 69  4 contains a poi
35880 6e 74 65 72 20 74 6f 20 74 68 65 20 6e 61 6d 65  nter to the name
35890 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 62 65   of the table be
358a0 69 6e 67 20 6c 6f 63 6b 65 64 2e 20 54 68 69 73  ing locked. This
358b0 20 69 73 20 6f 6e 6c 79 0a 2a 2a 20 75 73 65 64   is only.** used
358c0 20 74 6f 20 67 65 6e 65 72 61 74 65 20 61 6e 20   to generate an 
358d0 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 69 66  error message if
358e0 20 74 68 65 20 6c 6f 63 6b 20 63 61 6e 6e 6f 74   the lock cannot
358f0 20 62 65 20 6f 62 74 61 69 6e 65 64 2e 0a 2a 2f   be obtained..*/
35900 0a 63 61 73 65 20 4f 50 5f 54 61 62 6c 65 4c 6f  .case OP_TableLo
35910 63 6b 3a 20 7b 0a 20 20 75 38 20 69 73 57 72 69  ck: {.  u8 isWri
35920 74 65 4c 6f 63 6b 20 3d 20 28 75 38 29 70 4f 70  teLock = (u8)pOp
35930 2d 3e 70 33 3b 0a 20 20 69 66 28 20 69 73 57 72  ->p3;.  if( isWr
35940 69 74 65 4c 6f 63 6b 20 7c 7c 20 30 3d 3d 28 64  iteLock || 0==(d
35950 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f  b->flags&SQLITE_
35960 52 65 61 64 55 6e 63 6f 6d 6d 69 74 29 20 29 7b  ReadUncommit) ){
35970 0a 20 20 20 20 69 6e 74 20 70 31 20 3d 20 70 4f  .    int p1 = pO
35980 70 2d 3e 70 31 3b 20 0a 20 20 20 20 61 73 73 65  p->p1; .    asse
35990 72 74 28 20 70 31 3e 3d 30 20 26 26 20 70 31 3c  rt( p1>=0 && p1<
359a0 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 20 20 61  db->nDb );.    a
359b0 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73  ssert( DbMaskTes
359c0 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20  t(p->btreeMask, 
359d0 70 31 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72  p1) );.    asser
359e0 74 28 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d  t( isWriteLock==
359f0 30 20 7c 7c 20 69 73 57 72 69 74 65 4c 6f 63 6b  0 || isWriteLock
35a00 3d 3d 31 20 29 3b 0a 20 20 20 20 72 63 20 3d 20  ==1 );.    rc = 
35a10 73 71 6c 69 74 65 33 42 74 72 65 65 4c 6f 63 6b  sqlite3BtreeLock
35a20 54 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 70 31  Table(db->aDb[p1
35a30 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20  ].pBt, pOp->p2, 
35a40 69 73 57 72 69 74 65 4c 6f 63 6b 29 3b 0a 20 20  isWriteLock);.  
35a50 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20    if( rc ){.    
35a60 20 20 69 66 28 20 28 72 63 26 30 78 46 46 29 3d    if( (rc&0xFF)=
35a70 3d 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 29  =SQLITE_LOCKED )
35a80 7b 0a 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20  {.        const 
35a90 63 68 61 72 20 2a 7a 20 3d 20 70 4f 70 2d 3e 70  char *z = pOp->p
35aa0 34 2e 7a 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  4.z;.        sql
35ab0 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
35ac0 20 22 64 61 74 61 62 61 73 65 20 74 61 62 6c 65   "database table
35ad0 20 69 73 20 6c 6f 63 6b 65 64 3a 20 25 73 22 2c   is locked: %s",
35ae0 20 7a 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20   z);.      }.   
35af0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
35b00 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
35b10 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
35b20 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
35b30 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41  E_OMIT_SHARED_CA
35b40 43 48 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  CHE */..#ifndef 
35b50 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
35b60 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
35b70 64 65 3a 20 56 42 65 67 69 6e 20 2a 20 2a 20 2a  de: VBegin * * *
35b80 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 6d   P4 *.**.** P4 m
35b90 61 79 20 62 65 20 61 20 70 6f 69 6e 74 65 72 20  ay be a pointer 
35ba0 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74  to an sqlite3_vt
35bb0 61 62 20 73 74 72 75 63 74 75 72 65 2e 20 49 66  ab structure. If
35bc0 20 73 6f 2c 20 63 61 6c 6c 20 74 68 65 20 0a 2a   so, call the .*
35bd0 2a 20 78 42 65 67 69 6e 20 6d 65 74 68 6f 64 20  * xBegin method 
35be0 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65 2e 0a  for that table..
35bf0 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c 20 77 68 65 74  **.** Also, whet
35c00 68 65 72 20 6f 72 20 6e 6f 74 20 50 34 20 69 73  her or not P4 is
35c10 20 73 65 74 2c 20 63 68 65 63 6b 20 74 68 61 74   set, check that
35c20 20 74 68 69 73 20 69 73 20 6e 6f 74 20 62 65 69   this is not bei
35c30 6e 67 20 63 61 6c 6c 65 64 20 66 72 6f 6d 0a 2a  ng called from.*
35c40 2a 20 77 69 74 68 69 6e 20 61 20 63 61 6c 6c 62  * within a callb
35c50 61 63 6b 20 74 6f 20 61 20 76 69 72 74 75 61 6c  ack to a virtual
35c60 20 74 61 62 6c 65 20 78 53 79 6e 63 28 29 20 6d   table xSync() m
35c70 65 74 68 6f 64 2e 20 49 66 20 69 74 20 69 73 2c  ethod. If it is,
35c80 20 74 68 65 20 65 72 72 6f 72 0a 2a 2a 20 63 6f   the error.** co
35c90 64 65 20 77 69 6c 6c 20 62 65 20 73 65 74 20 74  de will be set t
35ca0 6f 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 2e  o SQLITE_LOCKED.
35cb0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 42 65 67  .*/.case OP_VBeg
35cc0 69 6e 3a 20 7b 0a 20 20 56 54 61 62 6c 65 20 2a  in: {.  VTable *
35cd0 70 56 54 61 62 3b 0a 20 20 70 56 54 61 62 20 3d  pVTab;.  pVTab =
35ce0 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 3b 0a   pOp->p4.pVtab;.
35cf0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74    rc = sqlite3Vt
35d00 61 62 42 65 67 69 6e 28 64 62 2c 20 70 56 54 61  abBegin(db, pVTa
35d10 62 29 3b 0a 20 20 69 66 28 20 70 56 54 61 62 20  b);.  if( pVTab 
35d20 29 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70  ) sqlite3VtabImp
35d30 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 54  ortErrmsg(p, pVT
35d40 61 62 2d 3e 70 56 74 61 62 29 3b 0a 20 20 69 66  ab->pVtab);.  if
35d50 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
35d60 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
35d70 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
35d80 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
35d90 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
35da0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
35db0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
35dc0 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43  LE./* Opcode: VC
35dd0 72 65 61 74 65 20 50 31 20 50 32 20 2a 20 2a 20  reate P1 P2 * * 
35de0 2a 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 61 20  *.**.** P2 is a 
35df0 72 65 67 69 73 74 65 72 20 74 68 61 74 20 68 6f  register that ho
35e00 6c 64 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  lds the name of 
35e10 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
35e20 69 6e 20 64 61 74 61 62 61 73 65 20 0a 2a 2a 20  in database .** 
35e30 50 31 2e 20 43 61 6c 6c 20 74 68 65 20 78 43 72  P1. Call the xCr
35e40 65 61 74 65 20 6d 65 74 68 6f 64 20 66 6f 72 20  eate method for 
35e50 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63  that table..*/.c
35e60 61 73 65 20 4f 50 5f 56 43 72 65 61 74 65 3a 20  ase OP_VCreate: 
35e70 7b 0a 20 20 4d 65 6d 20 73 4d 65 6d 3b 20 20 20  {.  Mem sMem;   
35e80 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 73 74         /* For st
35e90 6f 72 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64  oring the record
35ea0 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64 20 2a   being decoded *
35eb0 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
35ec0 7a 54 61 62 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f  zTab;  /* Name o
35ed0 66 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  f the virtual ta
35ee0 62 6c 65 20 2a 2f 0a 0a 20 20 6d 65 6d 73 65 74  ble */..  memset
35ef0 28 26 73 4d 65 6d 2c 20 30 2c 20 73 69 7a 65 6f  (&sMem, 0, sizeo
35f00 66 28 73 4d 65 6d 29 29 3b 0a 20 20 73 4d 65 6d  f(sMem));.  sMem
35f10 2e 64 62 20 3d 20 64 62 3b 0a 20 20 2f 2a 20 42  .db = db;.  /* B
35f20 65 63 61 75 73 65 20 50 32 20 69 73 20 61 6c 77  ecause P2 is alw
35f30 61 79 73 20 61 20 73 74 61 74 69 63 20 73 74 72  ays a static str
35f40 69 6e 67 2c 20 69 74 20 69 73 20 69 6d 70 6f 73  ing, it is impos
35f50 73 69 62 6c 65 20 66 6f 72 20 74 68 65 0a 20 20  sible for the.  
35f60 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  ** sqlite3VdbeMe
35f70 6d 43 6f 70 79 28 29 20 74 6f 20 66 61 69 6c 20  mCopy() to fail 
35f80 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 28 61 4d  */.  assert( (aM
35f90 65 6d 5b 70 4f 70 2d 3e 70 32 5d 2e 66 6c 61 67  em[pOp->p2].flag
35fa0 73 20 26 20 4d 45 4d 5f 53 74 72 29 21 3d 30 20  s & MEM_Str)!=0 
35fb0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 61 4d  );.  assert( (aM
35fc0 65 6d 5b 70 4f 70 2d 3e 70 32 5d 2e 66 6c 61 67  em[pOp->p2].flag
35fd0 73 20 26 20 4d 45 4d 5f 53 74 61 74 69 63 29 21  s & MEM_Static)!
35fe0 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  =0 );.  rc = sql
35ff0 69 74 65 33 56 64 62 65 4d 65 6d 43 6f 70 79 28  ite3VdbeMemCopy(
36000 26 73 4d 65 6d 2c 20 26 61 4d 65 6d 5b 70 4f 70  &sMem, &aMem[pOp
36010 2d 3e 70 32 5d 29 3b 0a 20 20 61 73 73 65 72 74  ->p2]);.  assert
36020 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
36030 29 3b 0a 20 20 7a 54 61 62 20 3d 20 28 63 6f 6e  );.  zTab = (con
36040 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74 65 33  st char*)sqlite3
36050 5f 76 61 6c 75 65 5f 74 65 78 74 28 26 73 4d 65  _value_text(&sMe
36060 6d 29 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 54  m);.  assert( zT
36070 61 62 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c 6f 63  ab || db->malloc
36080 46 61 69 6c 65 64 20 29 3b 0a 20 20 69 66 28 20  Failed );.  if( 
36090 7a 54 61 62 20 29 7b 0a 20 20 20 20 72 63 20 3d  zTab ){.    rc =
360a0 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c   sqlite3VtabCall
360b0 43 72 65 61 74 65 28 64 62 2c 20 70 4f 70 2d 3e  Create(db, pOp->
360c0 70 31 2c 20 7a 54 61 62 2c 20 26 70 2d 3e 7a 45  p1, zTab, &p->zE
360d0 72 72 4d 73 67 29 3b 0a 20 20 7d 0a 20 20 73 71  rrMsg);.  }.  sq
360e0 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
360f0 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20 20 69 66  ase(&sMem);.  if
36100 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
36110 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
36120 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
36130 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
36140 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
36150 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
36160 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
36170 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 44  LE./* Opcode: VD
36180 65 73 74 72 6f 79 20 50 31 20 2a 20 2a 20 50 34  estroy P1 * * P4
36190 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 74   *.**.** P4 is t
361a0 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 76 69 72  he name of a vir
361b0 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 20 64 61  tual table in da
361c0 74 61 62 61 73 65 20 50 31 2e 20 20 43 61 6c 6c  tabase P1.  Call
361d0 20 74 68 65 20 78 44 65 73 74 72 6f 79 20 6d 65   the xDestroy me
361e0 74 68 6f 64 0a 2a 2a 20 6f 66 20 74 68 61 74 20  thod.** of that 
361f0 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  table..*/.case O
36200 50 5f 56 44 65 73 74 72 6f 79 3a 20 7b 0a 20 20  P_VDestroy: {.  
36210 64 62 2d 3e 6e 56 44 65 73 74 72 6f 79 2b 2b 3b  db->nVDestroy++;
36220 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
36230 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79 28 64  tabCallDestroy(d
36240 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  b, pOp->p1, pOp-
36250 3e 70 34 2e 7a 29 3b 0a 20 20 64 62 2d 3e 6e 56  >p4.z);.  db->nV
36260 44 65 73 74 72 6f 79 2d 2d 3b 0a 20 20 69 66 28  Destroy--;.  if(
36270 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
36280 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
36290 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
362a0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
362b0 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
362c0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
362d0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
362e0 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4f 70  E./* Opcode: VOp
362f0 65 6e 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  en P1 * * P4 *.*
36300 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
36310 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61  nter to a virtua
36320 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20  l table object, 
36330 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  an sqlite3_vtab 
36340 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 50 31  structure..** P1
36350 20 69 73 20 61 20 63 75 72 73 6f 72 20 6e 75 6d   is a cursor num
36360 62 65 72 2e 20 20 54 68 69 73 20 6f 70 63 6f 64  ber.  This opcod
36370 65 20 6f 70 65 6e 73 20 61 20 63 75 72 73 6f 72  e opens a cursor
36380 20 74 6f 20 74 68 65 20 76 69 72 74 75 61 6c 0a   to the virtual.
36390 2a 2a 20 74 61 62 6c 65 20 61 6e 64 20 73 74 6f  ** table and sto
363a0 72 65 73 20 74 68 61 74 20 63 75 72 73 6f 72 20  res that cursor 
363b0 69 6e 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f  in P1..*/.case O
363c0 50 5f 56 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62  P_VOpen: {.  Vdb
363d0 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20  eCursor *pCur;. 
363e0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75   sqlite3_vtab_cu
363f0 72 73 6f 72 20 2a 70 56 43 75 72 3b 0a 20 20 73  rsor *pVCur;.  s
36400 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
36410 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69  ab;.  const sqli
36420 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
36430 75 6c 65 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  ule;..  assert( 
36440 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a  p->bIsReader );.
36450 20 20 70 43 75 72 20 3d 20 30 3b 0a 20 20 70 56    pCur = 0;.  pV
36460 43 75 72 20 3d 20 30 3b 0a 20 20 70 56 74 61 62  Cur = 0;.  pVtab
36470 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62   = pOp->p4.pVtab
36480 2d 3e 70 56 74 61 62 3b 0a 20 20 69 66 28 20 70  ->pVtab;.  if( p
36490 56 74 61 62 3d 3d 30 20 7c 7c 20 4e 45 56 45 52  Vtab==0 || NEVER
364a0 28 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3d  (pVtab->pModule=
364b0 3d 30 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  =0) ){.    rc = 
364c0 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20  SQLITE_LOCKED;. 
364d0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
364e0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a  e_to_error;.  }.
364f0 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61    pModule = pVta
36500 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 72 63  b->pModule;.  rc
36510 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4f 70 65   = pModule->xOpe
36520 6e 28 70 56 74 61 62 2c 20 26 70 56 43 75 72 29  n(pVtab, &pVCur)
36530 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62 49  ;.  sqlite3VtabI
36540 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70  mportErrmsg(p, p
36550 56 74 61 62 29 3b 0a 20 20 69 66 28 20 72 63 20  Vtab);.  if( rc 
36560 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
36570 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 2f 2a  _to_error;..  /*
36580 20 49 6e 69 74 69 61 6c 69 7a 65 20 73 71 6c 69   Initialize sqli
36590 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20  te3_vtab_cursor 
365a0 62 61 73 65 20 63 6c 61 73 73 20 2a 2f 0a 20 20  base class */.  
365b0 70 56 43 75 72 2d 3e 70 56 74 61 62 20 3d 20 70  pVCur->pVtab = p
365c0 56 74 61 62 3b 0a 0a 20 20 2f 2a 20 49 6e 69 74  Vtab;..  /* Init
365d0 69 61 6c 69 7a 65 20 76 64 62 65 20 63 75 72 73  ialize vdbe curs
365e0 6f 72 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 70  or object */.  p
365f0 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75  Cur = allocateCu
36600 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c  rsor(p, pOp->p1,
36610 20 30 2c 20 2d 31 2c 20 43 55 52 54 59 50 45 5f   0, -1, CURTYPE_
36620 56 54 41 42 29 3b 0a 20 20 69 66 28 20 70 43 75  VTAB);.  if( pCu
36630 72 20 29 7b 0a 20 20 20 20 70 43 75 72 2d 3e 75  r ){.    pCur->u
36640 63 2e 70 56 43 75 72 20 3d 20 70 56 43 75 72 3b  c.pVCur = pVCur;
36650 0a 20 20 20 20 70 56 74 61 62 2d 3e 6e 52 65 66  .    pVtab->nRef
36660 2b 2b 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ++;.  }else{.   
36670 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6d 61 6c   assert( db->mal
36680 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 20  locFailed );.   
36690 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6c 6f 73 65   pModule->xClose
366a0 28 70 56 43 75 72 29 3b 0a 20 20 20 20 67 6f 74  (pVCur);.    got
366b0 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20  o no_mem;.  }.  
366c0 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
366d0 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
366e0 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
366f0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
36700 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
36710 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 46 69 6c  ./* Opcode: VFil
36720 74 65 72 20 50 31 20 50 32 20 50 33 20 50 34 20  ter P1 P2 P3 P4 
36730 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
36740 70 6c 61 6e 3d 72 5b 50 33 5d 20 7a 70 6c 61 6e  plan=r[P3] zplan
36750 3d 27 50 34 27 0a 2a 2a 0a 2a 2a 20 50 31 20 69  ='P4'.**.** P1 i
36760 73 20 61 20 63 75 72 73 6f 72 20 6f 70 65 6e 65  s a cursor opene
36770 64 20 75 73 69 6e 67 20 56 4f 70 65 6e 2e 20 20  d using VOpen.  
36780 50 32 20 69 73 20 61 6e 20 61 64 64 72 65 73 73  P2 is an address
36790 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66 0a 2a   to jump to if.*
367a0 2a 20 74 68 65 20 66 69 6c 74 65 72 65 64 20 72  * the filtered r
367b0 65 73 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70  esult set is emp
367c0 74 79 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  ty..**.** P4 is 
367d0 65 69 74 68 65 72 20 4e 55 4c 4c 20 6f 72 20 61  either NULL or a
367e0 20 73 74 72 69 6e 67 20 74 68 61 74 20 77 61 73   string that was
367f0 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 74 68   generated by th
36800 65 20 78 42 65 73 74 49 6e 64 65 78 0a 2a 2a 20  e xBestIndex.** 
36810 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f  method of the mo
36820 64 75 6c 65 2e 20 20 54 68 65 20 69 6e 74 65 72  dule.  The inter
36830 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  pretation of the
36840 20 50 34 20 73 74 72 69 6e 67 20 69 73 20 6c 65   P4 string is le
36850 66 74 0a 2a 2a 20 74 6f 20 74 68 65 20 6d 6f 64  ft.** to the mod
36860 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  ule implementati
36870 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  on..**.** This o
36880 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68  pcode invokes th
36890 65 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64  e xFilter method
368a0 20 6f 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20   on the virtual 
368b0 74 61 62 6c 65 20 73 70 65 63 69 66 69 65 64 0a  table specified.
368c0 2a 2a 20 62 79 20 50 31 2e 20 20 54 68 65 20 69  ** by P1.  The i
368d0 6e 74 65 67 65 72 20 71 75 65 72 79 20 70 6c 61  nteger query pla
368e0 6e 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 78  n parameter to x
368f0 46 69 6c 74 65 72 20 69 73 20 73 74 6f 72 65 64  Filter is stored
36900 20 69 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a 20   in register.** 
36910 50 33 2e 20 52 65 67 69 73 74 65 72 20 50 33 2b  P3. Register P3+
36920 31 20 73 74 6f 72 65 73 20 74 68 65 20 61 72 67  1 stores the arg
36930 63 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 62  c parameter to b
36940 65 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 0a  e passed to the.
36950 2a 2a 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f  ** xFilter metho
36960 64 2e 20 52 65 67 69 73 74 65 72 73 20 50 33 2b  d. Registers P3+
36970 32 2e 2e 50 33 2b 31 2b 61 72 67 63 20 61 72 65  2..P3+1+argc are
36980 20 74 68 65 20 61 72 67 63 0a 2a 2a 20 61 64 64   the argc.** add
36990 69 74 69 6f 6e 61 6c 20 70 61 72 61 6d 65 74 65  itional paramete
369a0 72 73 20 77 68 69 63 68 20 61 72 65 20 70 61 73  rs which are pas
369b0 73 65 64 20 74 6f 0a 2a 2a 20 78 46 69 6c 74 65  sed to.** xFilte
369c0 72 20 61 73 20 61 72 67 76 2e 20 52 65 67 69 73  r as argv. Regis
369d0 74 65 72 20 50 33 2b 32 20 62 65 63 6f 6d 65 73  ter P3+2 becomes
369e0 20 61 72 67 76 5b 30 5d 20 77 68 65 6e 20 70 61   argv[0] when pa
369f0 73 73 65 64 20 74 6f 20 78 46 69 6c 74 65 72 2e  ssed to xFilter.
36a00 0a 2a 2a 0a 2a 2a 20 41 20 6a 75 6d 70 20 69 73  .**.** A jump is
36a10 20 6d 61 64 65 20 74 6f 20 50 32 20 69 66 20 74   made to P2 if t
36a20 68 65 20 72 65 73 75 6c 74 20 73 65 74 20 61 66  he result set af
36a30 74 65 72 20 66 69 6c 74 65 72 69 6e 67 20 77 6f  ter filtering wo
36a40 75 6c 64 20 62 65 20 65 6d 70 74 79 2e 0a 2a 2f  uld be empty..*/
36a50 0a 63 61 73 65 20 4f 50 5f 56 46 69 6c 74 65 72  .case OP_VFilter
36a60 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f  : {   /* jump */
36a70 0a 20 20 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69  .  int nArg;.  i
36a80 6e 74 20 69 51 75 65 72 79 3b 0a 20 20 63 6f 6e  nt iQuery;.  con
36a90 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  st sqlite3_modul
36aa0 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65  e *pModule;.  Me
36ab0 6d 20 2a 70 51 75 65 72 79 3b 0a 20 20 4d 65 6d  m *pQuery;.  Mem
36ac0 20 2a 70 41 72 67 63 3b 0a 20 20 73 71 6c 69 74   *pArgc;.  sqlit
36ad0 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a  e3_vtab_cursor *
36ae0 70 56 43 75 72 3b 0a 20 20 73 71 6c 69 74 65 33  pVCur;.  sqlite3
36af0 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20  _vtab *pVtab;.  
36b00 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72  VdbeCursor *pCur
36b10 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69  ;.  int res;.  i
36b20 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70  nt i;.  Mem **ap
36b30 41 72 67 3b 0a 0a 20 20 70 51 75 65 72 79 20 3d  Arg;..  pQuery =
36b40 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
36b50 0a 20 20 70 41 72 67 63 20 3d 20 26 70 51 75 65  .  pArgc = &pQue
36b60 72 79 5b 31 5d 3b 0a 20 20 70 43 75 72 20 3d 20  ry[1];.  pCur = 
36b70 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
36b80 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d  ];.  assert( mem
36b90 49 73 56 61 6c 69 64 28 70 51 75 65 72 79 29 20  IsValid(pQuery) 
36ba0 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
36bb0 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 51 75  ACE(pOp->p3, pQu
36bc0 65 72 79 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ery);.  assert( 
36bd0 70 43 75 72 2d 3e 65 43 75 72 54 79 70 65 3d 3d  pCur->eCurType==
36be0 43 55 52 54 59 50 45 5f 56 54 41 42 20 29 3b 0a  CURTYPE_VTAB );.
36bf0 20 20 70 56 43 75 72 20 3d 20 70 43 75 72 2d 3e    pVCur = pCur->
36c00 75 63 2e 70 56 43 75 72 3b 0a 20 20 70 56 74 61  uc.pVCur;.  pVta
36c10 62 20 3d 20 70 56 43 75 72 2d 3e 70 56 74 61 62  b = pVCur->pVtab
36c20 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56  ;.  pModule = pV
36c30 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 0a 20  tab->pModule;.. 
36c40 20 2f 2a 20 47 72 61 62 20 74 68 65 20 69 6e 64   /* Grab the ind
36c50 65 78 20 6e 75 6d 62 65 72 20 61 6e 64 20 61 72  ex number and ar
36c60 67 63 20 70 61 72 61 6d 65 74 65 72 73 20 2a 2f  gc parameters */
36c70 0a 20 20 61 73 73 65 72 74 28 20 28 70 51 75 65  .  assert( (pQue
36c80 72 79 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e  ry->flags&MEM_In
36c90 74 29 21 3d 30 20 26 26 20 70 41 72 67 63 2d 3e  t)!=0 && pArgc->
36ca0 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29  flags==MEM_Int )
36cb0 3b 0a 20 20 6e 41 72 67 20 3d 20 28 69 6e 74 29  ;.  nArg = (int)
36cc0 70 41 72 67 63 2d 3e 75 2e 69 3b 0a 20 20 69 51  pArgc->u.i;.  iQ
36cd0 75 65 72 79 20 3d 20 28 69 6e 74 29 70 51 75 65  uery = (int)pQue
36ce0 72 79 2d 3e 75 2e 69 3b 0a 0a 20 20 2f 2a 20 49  ry->u.i;..  /* I
36cf0 6e 76 6f 6b 65 20 74 68 65 20 78 46 69 6c 74 65  nvoke the xFilte
36d00 72 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 72 65  r method */.  re
36d10 73 20 3d 20 30 3b 0a 20 20 61 70 41 72 67 20 3d  s = 0;.  apArg =
36d20 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 66 6f 72   p->apArg;.  for
36d30 28 69 20 3d 20 30 3b 20 69 3c 6e 41 72 67 3b 20  (i = 0; i<nArg; 
36d40 69 2b 2b 29 7b 0a 20 20 20 20 61 70 41 72 67 5b  i++){.    apArg[
36d50 69 5d 20 3d 20 26 70 41 72 67 63 5b 69 2b 31 5d  i] = &pArgc[i+1]
36d60 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 70 4d 6f  ;.  }.  rc = pMo
36d70 64 75 6c 65 2d 3e 78 46 69 6c 74 65 72 28 70 56  dule->xFilter(pV
36d80 43 75 72 2c 20 69 51 75 65 72 79 2c 20 70 4f 70  Cur, iQuery, pOp
36d90 2d 3e 70 34 2e 7a 2c 20 6e 41 72 67 2c 20 61 70  ->p4.z, nArg, ap
36da0 41 72 67 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  Arg);.  sqlite3V
36db0 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28  tabImportErrmsg(
36dc0 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28  p, pVtab);.  if(
36dd0 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
36de0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
36df0 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e   res = pModule->
36e00 78 45 6f 66 28 70 56 43 75 72 29 3b 0a 20 20 70  xEof(pVCur);.  p
36e10 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30  Cur->nullRow = 0
36e20 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
36e30 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20  ken(res!=0,2);. 
36e40 20 69 66 28 20 72 65 73 20 29 20 67 6f 74 6f 20   if( res ) goto 
36e50 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72  jump_to_p2;.  br
36e60 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
36e70 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
36e80 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
36e90 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
36ea0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
36eb0 2a 20 4f 70 63 6f 64 65 3a 20 56 43 6f 6c 75 6d  * Opcode: VColum
36ec0 6e 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  n P1 P2 P3 * *.*
36ed0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
36ee0 5d 3d 76 63 6f 6c 75 6d 6e 28 50 32 29 0a 2a 2a  ]=vcolumn(P2).**
36ef0 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 76 61  .** Store the va
36f00 6c 75 65 20 6f 66 20 74 68 65 20 50 32 2d 74 68  lue of the P2-th
36f10 20 63 6f 6c 75 6d 6e 20 6f 66 0a 2a 2a 20 74 68   column of.** th
36f20 65 20 72 6f 77 20 6f 66 20 74 68 65 20 76 69 72  e row of the vir
36f30 74 75 61 6c 2d 74 61 62 6c 65 20 74 68 61 74 20  tual-table that 
36f40 74 68 65 20 0a 2a 2a 20 50 31 20 63 75 72 73 6f  the .** P1 curso
36f50 72 20 69 73 20 70 6f 69 6e 74 69 6e 67 20 74 6f  r is pointing to
36f60 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
36f70 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43  3..*/.case OP_VC
36f80 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 73 71 6c 69 74  olumn: {.  sqlit
36f90 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
36fa0 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
36fb0 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
36fc0 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 0a 20  .  Mem *pDest;. 
36fd0 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
36fe0 20 73 43 6f 6e 74 65 78 74 3b 0a 0a 20 20 56 64   sContext;..  Vd
36ff0 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 20 3d  beCursor *pCur =
37000 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
37010 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
37020 75 72 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  ur->eCurType==CU
37030 52 54 59 50 45 5f 56 54 41 42 20 29 3b 0a 20 20  RTYPE_VTAB );.  
37040 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
37050 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  0 && pOp->p3<=(p
37060 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
37070 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 44 65 73  ursor) );.  pDes
37080 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
37090 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f  3];.  memAboutTo
370a0 43 68 61 6e 67 65 28 70 2c 20 70 44 65 73 74 29  Change(p, pDest)
370b0 3b 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e 75  ;.  if( pCur->nu
370c0 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 73 71 6c  llRow ){.    sql
370d0 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
370e0 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20 62  ll(pDest);.    b
370f0 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61  reak;.  }.  pVta
37100 62 20 3d 20 70 43 75 72 2d 3e 75 63 2e 70 56 43  b = pCur->uc.pVC
37110 75 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f  ur->pVtab;.  pMo
37120 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d  dule = pVtab->pM
37130 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74 28  odule;.  assert(
37140 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d   pModule->xColum
37150 6e 20 29 3b 0a 20 20 6d 65 6d 73 65 74 28 26 73  n );.  memset(&s
37160 43 6f 6e 74 65 78 74 2c 20 30 2c 20 73 69 7a 65  Context, 0, size
37170 6f 66 28 73 43 6f 6e 74 65 78 74 29 29 3b 0a 20  of(sContext));. 
37180 20 73 43 6f 6e 74 65 78 74 2e 70 4f 75 74 20 3d   sContext.pOut =
37190 20 70 44 65 73 74 3b 0a 20 20 4d 65 6d 53 65 74   pDest;.  MemSet
371a0 54 79 70 65 46 6c 61 67 28 70 44 65 73 74 2c 20  TypeFlag(pDest, 
371b0 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 72 63 20  MEM_Null);.  rc 
371c0 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75  = pModule->xColu
371d0 6d 6e 28 70 43 75 72 2d 3e 75 63 2e 70 56 43 75  mn(pCur->uc.pVCu
371e0 72 2c 20 26 73 43 6f 6e 74 65 78 74 2c 20 70 4f  r, &sContext, pO
371f0 70 2d 3e 70 32 29 3b 0a 20 20 73 71 6c 69 74 65  p->p2);.  sqlite
37200 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73  3VtabImportErrms
37210 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69  g(p, pVtab);.  i
37220 66 28 20 73 43 6f 6e 74 65 78 74 2e 69 73 45 72  f( sContext.isEr
37230 72 6f 72 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  ror ){.    rc = 
37240 73 43 6f 6e 74 65 78 74 2e 69 73 45 72 72 6f 72  sContext.isError
37250 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56  ;.  }.  sqlite3V
37260 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
37270 67 28 70 44 65 73 74 2c 20 65 6e 63 6f 64 69 6e  g(pDest, encodin
37280 67 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54  g);.  REGISTER_T
37290 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44  RACE(pOp->p3, pD
372a0 65 73 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d  est);.  UPDATE_M
372b0 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73  AX_BLOBSIZE(pDes
372c0 74 29 3b 0a 0a 20 20 69 66 28 20 73 71 6c 69 74  t);..  if( sqlit
372d0 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28  e3VdbeMemTooBig(
372e0 70 44 65 73 74 29 20 29 7b 0a 20 20 20 20 67 6f  pDest) ){.    go
372f0 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
37300 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
37310 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
37320 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  or;.  break;.}.#
37330 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
37340 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
37350 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
37360 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
37370 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
37380 3a 20 56 4e 65 78 74 20 50 31 20 50 32 20 2a 20  : VNext P1 P2 * 
37390 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63  * *.**.** Advanc
373a0 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
373b0 50 31 20 74 6f 20 74 68 65 20 6e 65 78 74 20 72  P1 to the next r
373c0 6f 77 20 69 6e 20 69 74 73 20 72 65 73 75 6c 74  ow in its result
373d0 20 73 65 74 20 61 6e 64 0a 2a 2a 20 6a 75 6d 70   set and.** jump
373e0 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   to instruction 
373f0 50 32 2e 20 20 4f 72 2c 20 69 66 20 74 68 65 20  P2.  Or, if the 
37400 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 68 61  virtual table ha
37410 73 20 72 65 61 63 68 65 64 0a 2a 2a 20 74 68 65  s reached.** the
37420 20 65 6e 64 20 6f 66 20 69 74 73 20 72 65 73 75   end of its resu
37430 6c 74 20 73 65 74 2c 20 74 68 65 6e 20 66 61 6c  lt set, then fal
37440 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
37450 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
37460 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 4e  n..*/.case OP_VN
37470 65 78 74 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d 70  ext: {   /* jump
37480 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 74   */.  sqlite3_vt
37490 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e  ab *pVtab;.  con
374a0 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  st sqlite3_modul
374b0 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e  e *pModule;.  in
374c0 74 20 72 65 73 3b 0a 20 20 56 64 62 65 43 75 72  t res;.  VdbeCur
374d0 73 6f 72 20 2a 70 43 75 72 3b 0a 0a 20 20 72 65  sor *pCur;..  re
374e0 73 20 3d 20 30 3b 0a 20 20 70 43 75 72 20 3d 20  s = 0;.  pCur = 
374f0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
37500 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 75  ];.  assert( pCu
37510 72 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  r->eCurType==CUR
37520 54 59 50 45 5f 56 54 41 42 20 29 3b 0a 20 20 69  TYPE_VTAB );.  i
37530 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77  f( pCur->nullRow
37540 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20   ){.    break;. 
37550 20 7d 0a 20 20 70 56 74 61 62 20 3d 20 70 43 75   }.  pVtab = pCu
37560 72 2d 3e 75 63 2e 70 56 43 75 72 2d 3e 70 56 74  r->uc.pVCur->pVt
37570 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20  ab;.  pModule = 
37580 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a  pVtab->pModule;.
37590 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c    assert( pModul
375a0 65 2d 3e 78 4e 65 78 74 20 29 3b 0a 0a 20 20 2f  e->xNext );..  /
375b0 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 78 4e 65  * Invoke the xNe
375c0 78 74 28 29 20 6d 65 74 68 6f 64 20 6f 66 20 74  xt() method of t
375d0 68 65 20 6d 6f 64 75 6c 65 2e 20 54 68 65 72 65  he module. There
375e0 20 69 73 20 6e 6f 20 77 61 79 20 66 6f 72 20 74   is no way for t
375f0 68 65 0a 20 20 2a 2a 20 75 6e 64 65 72 6c 79 69  he.  ** underlyi
37600 6e 67 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ng implementatio
37610 6e 20 74 6f 20 72 65 74 75 72 6e 20 61 6e 20 65  n to return an e
37620 72 72 6f 72 20 69 66 20 6f 6e 65 20 6f 63 63 75  rror if one occu
37630 72 73 20 64 75 72 69 6e 67 0a 20 20 2a 2a 20 78  rs during.  ** x
37640 4e 65 78 74 28 29 2e 20 49 6e 73 74 65 61 64 2c  Next(). Instead,
37650 20 69 66 20 61 6e 20 65 72 72 6f 72 20 6f 63 63   if an error occ
37660 75 72 73 2c 20 74 72 75 65 20 69 73 20 72 65 74  urs, true is ret
37670 75 72 6e 65 64 20 28 69 6e 64 69 63 61 74 69 6e  urned (indicatin
37680 67 20 74 68 61 74 20 0a 20 20 2a 2a 20 64 61 74  g that .  ** dat
37690 61 20 69 73 20 61 76 61 69 6c 61 62 6c 65 29 20  a is available) 
376a0 61 6e 64 20 74 68 65 20 65 72 72 6f 72 20 63 6f  and the error co
376b0 64 65 20 72 65 74 75 72 6e 65 64 20 77 68 65 6e  de returned when
376c0 20 78 43 6f 6c 75 6d 6e 20 6f 72 0a 20 20 2a 2a   xColumn or.  **
376d0 20 73 6f 6d 65 20 6f 74 68 65 72 20 6d 65 74 68   some other meth
376e0 6f 64 20 69 73 20 6e 65 78 74 20 69 6e 76 6f 6b  od is next invok
376f0 65 64 20 6f 6e 20 74 68 65 20 73 61 76 65 20 76  ed on the save v
37700 69 72 74 75 61 6c 20 74 61 62 6c 65 20 63 75 72  irtual table cur
37710 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20 72 63 20 3d  sor..  */.  rc =
37720 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 28   pModule->xNext(
37730 70 43 75 72 2d 3e 75 63 2e 70 56 43 75 72 29 3b  pCur->uc.pVCur);
37740 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d  .  sqlite3VtabIm
37750 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56  portErrmsg(p, pV
37760 74 61 62 29 3b 0a 20 20 69 66 28 20 72 63 20 29  tab);.  if( rc )
37770 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
37780 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 72 65 73 20  to_error;.  res 
37790 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28  = pModule->xEof(
377a0 70 43 75 72 2d 3e 75 63 2e 70 56 43 75 72 29 3b  pCur->uc.pVCur);
377b0 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
377c0 65 6e 28 21 72 65 73 2c 32 29 3b 0a 20 20 69 66  en(!res,2);.  if
377d0 28 20 21 72 65 73 20 29 7b 0a 20 20 20 20 2f 2a  ( !res ){.    /*
377e0 20 49 66 20 74 68 65 72 65 20 69 73 20 64 61 74   If there is dat
377f0 61 2c 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f  a, jump to P2 */
37800 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  .    goto jump_t
37810 6f 5f 70 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66  o_p2_and_check_f
37820 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20 20  or_interrupt;.  
37830 7d 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66  }.  goto check_f
37840 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a  or_interrupt;.}.
37850 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
37860 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
37870 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
37880 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
37890 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
378a0 65 3a 20 56 52 65 6e 61 6d 65 20 50 31 20 2a 20  e: VRename P1 * 
378b0 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
378c0 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
378d0 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
378e0 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74  object, an sqlit
378f0 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72  e3_vtab structur
37900 65 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  e..** This opcod
37910 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f  e invokes the co
37920 72 72 65 73 70 6f 6e 64 69 6e 67 20 78 52 65 6e  rresponding xRen
37930 61 6d 65 20 6d 65 74 68 6f 64 2e 20 54 68 65 20  ame method. The 
37940 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 72 65 67 69  value.** in regi
37950 73 74 65 72 20 50 31 20 69 73 20 70 61 73 73 65  ster P1 is passe
37960 64 20 61 73 20 74 68 65 20 7a 4e 61 6d 65 20 61  d as the zName a
37970 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 78  rgument to the x
37980 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e 0a 2a  Rename method..*
37990 2f 0a 63 61 73 65 20 4f 50 5f 56 52 65 6e 61 6d  /.case OP_VRenam
379a0 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76  e: {.  sqlite3_v
379b0 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 4d 65  tab *pVtab;.  Me
379c0 6d 20 2a 70 4e 61 6d 65 3b 0a 0a 20 20 70 56 74  m *pName;..  pVt
379d0 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74  ab = pOp->p4.pVt
379e0 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4e 61  ab->pVtab;.  pNa
379f0 6d 65 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  me = &aMem[pOp->
37a00 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
37a10 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78  Vtab->pModule->x
37a20 52 65 6e 61 6d 65 20 29 3b 0a 20 20 61 73 73 65  Rename );.  asse
37a30 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
37a40 4e 61 6d 65 29 20 29 3b 0a 20 20 61 73 73 65 72  Name) );.  asser
37a50 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
37a60 30 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  0 );.  REGISTER_
37a70 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70  TRACE(pOp->p1, p
37a80 4e 61 6d 65 29 3b 0a 20 20 61 73 73 65 72 74 28  Name);.  assert(
37a90 20 70 4e 61 6d 65 2d 3e 66 6c 61 67 73 20 26 20   pName->flags & 
37aa0 4d 45 4d 5f 53 74 72 20 29 3b 0a 20 20 74 65 73  MEM_Str );.  tes
37ab0 74 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e  tcase( pName->en
37ac0 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 38 20 29  c==SQLITE_UTF8 )
37ad0 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4e  ;.  testcase( pN
37ae0 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54 45  ame->enc==SQLITE
37af0 5f 55 54 46 31 36 42 45 20 29 3b 0a 20 20 74 65  _UTF16BE );.  te
37b00 73 74 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65  stcase( pName->e
37b10 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36  nc==SQLITE_UTF16
37b20 4c 45 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  LE );.  rc = sql
37b30 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e  ite3VdbeChangeEn
37b40 63 6f 64 69 6e 67 28 70 4e 61 6d 65 2c 20 53 51  coding(pName, SQ
37b50 4c 49 54 45 5f 55 54 46 38 29 3b 0a 20 20 69 66  LITE_UTF8);.  if
37b60 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
37b70 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
37b80 20 20 72 63 20 3d 20 70 56 74 61 62 2d 3e 70 4d    rc = pVtab->pM
37b90 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 28 70  odule->xRename(p
37ba0 56 74 61 62 2c 20 70 4e 61 6d 65 2d 3e 7a 29 3b  Vtab, pName->z);
37bb0 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d  .  sqlite3VtabIm
37bc0 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56  portErrmsg(p, pV
37bd0 74 61 62 29 3b 0a 20 20 70 2d 3e 65 78 70 69 72  tab);.  p->expir
37be0 65 64 20 3d 20 30 3b 0a 20 20 69 66 28 20 72 63  ed = 0;.  if( rc
37bf0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
37c00 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72  e_to_error;.  br
37c10 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23  eak;.}.#endif..#
37c20 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
37c30 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
37c40 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 55 70 64 61  /* Opcode: VUpda
37c50 74 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50  te P1 P2 P3 P4 P
37c60 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 64  5.** Synopsis: d
37c70 61 74 61 3d 72 5b 50 33 40 50 32 5d 0a 2a 2a 0a  ata=r[P3@P2].**.
37c80 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
37c90 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20  er to a virtual 
37ca0 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e  table object, an
37cb0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74   sqlite3_vtab st
37cc0 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73  ructure..** This
37cd0 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20   opcode invokes 
37ce0 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
37cf0 67 20 78 55 70 64 61 74 65 20 6d 65 74 68 6f 64  g xUpdate method
37d00 2e 20 50 32 20 76 61 6c 75 65 73 0a 2a 2a 20 61  . P2 values.** a
37d10 72 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 6d 65  re contiguous me
37d20 6d 6f 72 79 20 63 65 6c 6c 73 20 73 74 61 72 74  mory cells start
37d30 69 6e 67 20 61 74 20 50 33 20 74 6f 20 70 61 73  ing at P3 to pas
37d40 73 20 74 6f 20 74 68 65 20 78 55 70 64 61 74 65  s to the xUpdate
37d50 20 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 2e   .** invocation.
37d60 20 54 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   The value in re
37d70 67 69 73 74 65 72 20 28 50 33 2b 50 32 2d 31 29  gister (P3+P2-1)
37d80 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
37d90 74 68 65 20 0a 2a 2a 20 70 32 74 68 20 65 6c 65  the .** p2th ele
37da0 6d 65 6e 74 20 6f 66 20 74 68 65 20 61 72 67 76  ment of the argv
37db0 20 61 72 72 61 79 20 70 61 73 73 65 64 20 74 6f   array passed to
37dc0 20 78 55 70 64 61 74 65 2e 0a 2a 2a 0a 2a 2a 20   xUpdate..**.** 
37dd0 54 68 65 20 78 55 70 64 61 74 65 20 6d 65 74 68  The xUpdate meth
37de0 6f 64 20 77 69 6c 6c 20 64 6f 20 61 20 44 45 4c  od will do a DEL
37df0 45 54 45 20 6f 72 20 61 6e 20 49 4e 53 45 52 54  ETE or an INSERT
37e00 20 6f 72 20 62 6f 74 68 2e 0a 2a 2a 20 54 68 65   or both..** The
37e10 20 61 72 67 76 5b 30 5d 20 65 6c 65 6d 65 6e 74   argv[0] element
37e20 20 28 77 68 69 63 68 20 63 6f 72 72 65 73 70 6f   (which correspo
37e30 6e 64 73 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65  nds to memory ce
37e40 6c 6c 20 50 33 29 0a 2a 2a 20 69 73 20 74 68 65  ll P3).** is the
37e50 20 72 6f 77 69 64 20 6f 66 20 61 20 72 6f 77 20   rowid of a row 
37e60 74 6f 20 64 65 6c 65 74 65 2e 20 20 49 66 20 61  to delete.  If a
37e70 72 67 76 5b 30 5d 20 69 73 20 4e 55 4c 4c 20 74  rgv[0] is NULL t
37e80 68 65 6e 20 6e 6f 20 0a 2a 2a 20 64 65 6c 65 74  hen no .** delet
37e90 69 6f 6e 20 6f 63 63 75 72 73 2e 20 20 54 68 65  ion occurs.  The
37ea0 20 61 72 67 76 5b 31 5d 20 65 6c 65 6d 65 6e 74   argv[1] element
37eb0 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66   is the rowid of
37ec0 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72 6f 77   the new .** row
37ed0 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65 20 4e  .  This can be N
37ee0 55 4c 4c 20 74 6f 20 68 61 76 65 20 74 68 65 20  ULL to have the 
37ef0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73 65  virtual table se
37f00 6c 65 63 74 20 74 68 65 20 6e 65 77 20 0a 2a 2a  lect the new .**
37f10 20 72 6f 77 69 64 20 66 6f 72 20 69 74 73 65 6c   rowid for itsel
37f20 66 2e 20 20 54 68 65 20 73 75 62 73 65 71 75 65  f.  The subseque
37f30 6e 74 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 74  nt elements in t
37f40 68 65 20 61 72 72 61 79 20 61 72 65 20 0a 2a 2a  he array are .**
37f50 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 63   the values of c
37f60 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 6e 65  olumns in the ne
37f70 77 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  w row..**.** If 
37f80 50 32 3d 3d 31 20 74 68 65 6e 20 6e 6f 20 69 6e  P2==1 then no in
37f90 73 65 72 74 20 69 73 20 70 65 72 66 6f 72 6d 65  sert is performe
37fa0 64 2e 20 20 61 72 67 76 5b 30 5d 20 69 73 20 74  d.  argv[0] is t
37fb0 68 65 20 72 6f 77 69 64 20 6f 66 0a 2a 2a 20 61  he rowid of.** a
37fc0 20 72 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e 0a   row to delete..
37fd0 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 62 6f  **.** P1 is a bo
37fe0 6f 6c 65 61 6e 20 66 6c 61 67 2e 20 49 66 20 69  olean flag. If i
37ff0 74 20 69 73 20 73 65 74 20 74 6f 20 74 72 75 65  t is set to true
38000 20 61 6e 64 20 74 68 65 20 78 55 70 64 61 74 65   and the xUpdate
38010 20 63 61 6c 6c 0a 2a 2a 20 69 73 20 73 75 63 63   call.** is succ
38020 65 73 73 66 75 6c 2c 20 74 68 65 6e 20 74 68 65  essful, then the
38030 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20   value returned 
38040 62 79 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f  by sqlite3_last_
38050 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20 0a  insert_rowid() .
38060 2a 2a 20 69 73 20 73 65 74 20 74 6f 20 74 68 65  ** is set to the
38070 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 72 6f   value of the ro
38080 77 69 64 20 66 6f 72 20 74 68 65 20 72 6f 77 20  wid for the row 
38090 6a 75 73 74 20 69 6e 73 65 72 74 65 64 2e 0a 2a  just inserted..*
380a0 2a 0a 2a 2a 20 50 35 20 69 73 20 74 68 65 20 65  *.** P5 is the e
380b0 72 72 6f 72 20 61 63 74 69 6f 6e 73 20 28 4f 45  rror actions (OE
380c0 5f 52 65 70 6c 61 63 65 2c 20 4f 45 5f 46 61 69  _Replace, OE_Fai
380d0 6c 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 65 74  l, OE_Ignore, et
380e0 63 29 20 74 6f 0a 2a 2a 20 61 70 70 6c 79 20 69  c) to.** apply i
380f0 6e 20 74 68 65 20 63 61 73 65 20 6f 66 20 61 20  n the case of a 
38100 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 75  constraint failu
38110 72 65 20 6f 6e 20 61 6e 20 69 6e 73 65 72 74 20  re on an insert 
38120 6f 72 20 75 70 64 61 74 65 2e 0a 2a 2f 0a 63 61  or update..*/.ca
38130 73 65 20 4f 50 5f 56 55 70 64 61 74 65 3a 20 7b  se OP_VUpdate: {
38140 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
38150 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20  *pVtab;.  const 
38160 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
38170 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20 6e  pModule;.  int n
38180 41 72 67 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  Arg;.  int i;.  
38190 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 72 6f 77  sqlite_int64 row
381a0 69 64 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70 41 72  id;.  Mem **apAr
381b0 67 3b 0a 20 20 4d 65 6d 20 2a 70 58 3b 0a 0a 20  g;.  Mem *pX;.. 
381c0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
381d0 3d 3d 31 20 20 20 20 20 20 20 20 7c 7c 20 70 4f  ==1        || pO
381e0 70 2d 3e 70 35 3d 3d 4f 45 5f 46 61 69 6c 20 20  p->p5==OE_Fail  
381f0 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f   || pOp->p5==OE_
38200 52 6f 6c 6c 62 61 63 6b 20 0a 20 20 20 20 20 20  Rollback .      
38210 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f   || pOp->p5==OE_
38220 41 62 6f 72 74 20 7c 7c 20 70 4f 70 2d 3e 70 35  Abort || pOp->p5
38230 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 7c 7c 20 70  ==OE_Ignore || p
38240 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65 70 6c 61  Op->p5==OE_Repla
38250 63 65 0a 20 20 29 3b 0a 20 20 61 73 73 65 72 74  ce.  );.  assert
38260 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
38270 20 29 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 4f   );.  pVtab = pO
38280 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74  p->p4.pVtab->pVt
38290 61 62 3b 0a 20 20 69 66 28 20 70 56 74 61 62 3d  ab;.  if( pVtab=
382a0 3d 30 20 7c 7c 20 4e 45 56 45 52 28 70 56 74 61  =0 || NEVER(pVta
382b0 62 2d 3e 70 4d 6f 64 75 6c 65 3d 3d 30 29 20 29  b->pModule==0) )
382c0 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
382d0 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 67 6f  E_LOCKED;.    go
382e0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
382f0 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 70 4d 6f  error;.  }.  pMo
38300 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d  dule = pVtab->pM
38310 6f 64 75 6c 65 3b 0a 20 20 6e 41 72 67 20 3d 20  odule;.  nArg = 
38320 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72  pOp->p2;.  asser
38330 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3