/ Hex Artifact Content
Login

Artifact 3961408d1e4507b468b6297b79307bd3eee51988:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 66  implements the f
01a0: 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 72 75 6e  unction that run
01b0: 73 20 74 68 65 0a 2a 2a 20 62 79 74 65 63 6f 64  s the.** bytecod
01c0: 65 20 6f 66 20 61 20 70 72 65 70 61 72 65 64 20  e of a prepared 
01d0: 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  statement..**.**
01e0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
01f0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
0200: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0210: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0220: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0230: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0240: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0250: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0260: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0270: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0280: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0290: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
02a0: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
02b0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
02c0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
02d0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
02e0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
02f0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
0300: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0310: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0320: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0330: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0340: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0350: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0360: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0370: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  ../*.** Invoke t
0380: 68 69 73 20 6d 61 63 72 6f 20 6f 6e 20 6d 65 6d  his macro on mem
0390: 6f 72 79 20 63 65 6c 6c 73 20 6a 75 73 74 20 70  ory cells just p
03a0: 72 69 6f 72 20 74 6f 20 63 68 61 6e 67 69 6e 67  rior to changing
03b0: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
03c0: 20 74 68 65 20 63 65 6c 6c 2e 20 20 54 68 69 73   the cell.  This
03d0: 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73 20   macro verifies 
03e0: 74 68 61 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70  that shallow cop
03f0: 69 65 73 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 6d  ies are.** not m
0400: 69 73 75 73 65 64 2e 20 20 41 20 73 68 61 6c 6c  isused.  A shall
0410: 6f 77 20 63 6f 70 79 20 6f 66 20 61 20 73 74 72  ow copy of a str
0420: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6a 75 73 74  ing or blob just
0430: 20 63 6f 70 69 65 73 20 61 0a 2a 2a 20 70 6f 69   copies a.** poi
0440: 6e 74 65 72 20 74 6f 20 74 68 65 20 73 74 72 69  nter to the stri
0450: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 6e 6f 74 20  ng or blob, not 
0460: 74 68 65 20 63 6f 6e 74 65 6e 74 2e 20 20 49 66  the content.  If
0470: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a   the original.**
0480: 20 69 73 20 63 68 61 6e 67 65 64 20 77 68 69 6c   is changed whil
0490: 65 20 74 68 65 20 63 6f 70 79 20 69 73 20 73 74  e the copy is st
04a0: 69 6c 6c 20 69 6e 20 75 73 65 2c 20 74 68 65 20  ill in use, the 
04b0: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d  string or blob m
04c0: 69 67 68 74 0a 2a 2a 20 62 65 20 63 68 61 6e 67  ight.** be chang
04d0: 65 64 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65  ed out from unde
04e0: 72 20 74 68 65 20 63 6f 70 79 2e 20 20 54 68 69  r the copy.  Thi
04f0: 73 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73  s macro verifies
0500: 20 74 68 61 74 20 6e 6f 74 68 69 6e 67 0a 2a 2a   that nothing.**
0510: 20 6c 69 6b 65 20 74 68 61 74 20 65 76 65 72 20   like that ever 
0520: 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 23 69 66 64  happens..*/.#ifd
0530: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
0540: 23 20 64 65 66 69 6e 65 20 6d 65 6d 41 62 6f 75  # define memAbou
0550: 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 20 73  tToChange(P,M) s
0560: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 41 62 6f  qlite3VdbeMemAbo
0570: 75 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 0a  utToChange(P,M).
0580: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 6d  #else.# define m
0590: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
05a0: 50 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  P,M).#endif../*.
05b0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
05c0: 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
05d0: 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
05e0: 65 76 65 72 79 20 74 69 6d 65 20 61 20 63 75 72  every time a cur
05f0: 73 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65 69  sor.** moves, ei
0600: 74 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f 53  ther by the OP_S
0610: 65 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c 20  eekXX, OP_Next, 
0620: 6f 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f 64  or OP_Prev opcod
0630: 65 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a 2a  es.  The test.**
0640: 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65 20   procedures use 
0650: 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  this information
0660: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68   to make sure th
0670: 61 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a 2a  at indices are.*
0680: 2a 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63  * working correc
0690: 74 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69 61  tly.  This varia
06a0: 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74  ble has no funct
06b0: 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74  ion other than t
06c0: 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79  o.** help verify
06d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
06e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69  ration of the li
06f0: 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  brary..*/.#ifdef
0700: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74   SQLITE_TEST.int
0710: 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
0720: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0730: 66 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68  f../*.** When th
0740: 69 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  is global variab
0750: 6c 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c 20  le is positive, 
0760: 69 74 20 67 65 74 73 20 64 65 63 72 65 6d 65 6e  it gets decremen
0770: 74 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65 0a  ted once before.
0780: 2a 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63 74  ** each instruct
0790: 69 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45 2e  ion in the VDBE.
07a0: 20 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65    When it reache
07b0: 73 20 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e 69  s zero, the u1.i
07c0: 73 49 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a 20  sInterrupted.** 
07d0: 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c  field of the sql
07e0: 69 74 65 33 20 73 74 72 75 63 74 75 72 65 20 69  ite3 structure i
07f0: 73 20 73 65 74 20 69 6e 20 6f 72 64 65 72 20 74  s set in order t
0800: 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e  o simulate an in
0810: 74 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20 54  terrupt..**.** T
0820: 68 69 73 20 66 61 63 69 6c 69 74 79 20 69 73 20  his facility is 
0830: 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67  used for testing
0840: 20 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e 20   purposes only. 
0850: 20 49 74 20 64 6f 65 73 20 6e 6f 74 20 66 75 6e   It does not fun
0860: 63 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20 6f  ction.** in an o
0870: 72 64 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a 2a  rdinary build..*
0880: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
0890: 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33  TEST.int sqlite3
08a0: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
08b0: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a   = 0;.#endif../*
08c0: 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f  .** The next glo
08d0: 62 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20  bal variable is 
08e0: 69 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68  incremented each
08f0: 20 74 79 70 65 20 74 68 65 20 4f 50 5f 53 6f 72   type the OP_Sor
0900: 74 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  t opcode.** is e
0910: 78 65 63 75 74 65 64 2e 20 20 54 68 65 20 74 65  xecuted.  The te
0920: 73 74 20 70 72 6f 63 65 64 75 72 65 73 20 75 73  st procedures us
0930: 65 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69  e this informati
0940: 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  on to make sure 
0950: 74 68 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67 20  that.** sorting 
0960: 69 73 20 6f 63 63 75 72 72 69 6e 67 20 6f 72 20  is occurring or 
0970: 6e 6f 74 20 6f 63 63 75 72 72 69 6e 67 20 61 74  not occurring at
0980: 20 61 70 70 72 6f 70 72 69 61 74 65 20 74 69 6d   appropriate tim
0990: 65 73 2e 20 20 20 54 68 69 73 20 76 61 72 69 61  es.   This varia
09a0: 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75  ble.** has no fu
09b0: 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61  nction other tha
09c0: 6e 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79  n to help verify
09d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
09e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  ration of the.**
09f0: 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66   library..*/.#if
0a00: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
0a10: 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72 74  int sqlite3_sort
0a20: 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64  _count = 0;.#end
0a30: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65  if../*.** The ne
0a40: 78 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  xt global variab
0a50: 6c 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 73  le records the s
0a60: 69 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65  ize of the large
0a70: 73 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f  st MEM_Blob.** o
0a80: 72 20 4d 45 4d 5f 53 74 72 20 74 68 61 74 20 68  r MEM_Str that h
0a90: 61 73 20 62 65 65 6e 20 75 73 65 64 20 62 79 20  as been used by 
0aa0: 61 20 56 44 42 45 20 6f 70 63 6f 64 65 2e 20 20  a VDBE opcode.  
0ab0: 54 68 65 20 74 65 73 74 20 70 72 6f 63 65 64 75  The test procedu
0ac0: 72 65 73 0a 2a 2a 20 75 73 65 20 74 68 69 73 20  res.** use this 
0ad0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d  information to m
0ae0: 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68  ake sure that th
0af0: 65 20 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e 63  e zero-blob func
0b00: 74 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73 20  tionality.** is 
0b10: 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c  working correctl
0b20: 79 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62  y.   This variab
0b30: 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69  le has no functi
0b40: 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f  on other than to
0b50: 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20  .** help verify 
0b60: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0b70: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62  ation of the lib
0b80: 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  rary..*/.#ifdef 
0b90: 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20  SQLITE_TEST.int 
0ba0: 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62  sqlite3_max_blob
0bb0: 73 69 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69 63  size = 0;.static
0bc0: 20 76 6f 69 64 20 75 70 64 61 74 65 4d 61 78 42   void updateMaxB
0bd0: 6c 6f 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29 7b  lobsize(Mem *p){
0be0: 0a 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73  .  if( (p->flags
0bf0: 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
0c00: 42 6c 6f 62 29 29 21 3d 30 20 26 26 20 70 2d 3e  Blob))!=0 && p->
0c10: 6e 3e 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c  n>sqlite3_max_bl
0c20: 6f 62 73 69 7a 65 20 29 7b 0a 20 20 20 20 73 71  obsize ){.    sq
0c30: 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69  lite3_max_blobsi
0c40: 7a 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d  ze = p->n;.  }.}
0c50: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
0c60: 68 69 73 20 6d 61 63 72 6f 20 65 76 61 6c 75 61  his macro evalua
0c70: 74 65 73 20 74 6f 20 74 72 75 65 20 69 66 20 65  tes to true if e
0c80: 69 74 68 65 72 20 74 68 65 20 75 70 64 61 74 65  ither the update
0c90: 20 68 6f 6f 6b 20 6f 72 20 74 68 65 20 70 72 65   hook or the pre
0ca0: 75 70 64 61 74 65 0a 2a 2a 20 68 6f 6f 6b 20 61  update.** hook a
0cb0: 72 65 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 64  re enabled for d
0cc0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 20  atabase connect 
0cd0: 44 42 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  DB..*/.#ifdef SQ
0ce0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55  LITE_ENABLE_PREU
0cf0: 50 44 41 54 45 5f 48 4f 4f 4b 0a 23 20 64 65 66  PDATE_HOOK.# def
0d00: 69 6e 65 20 48 41 53 5f 55 50 44 41 54 45 5f 48  ine HAS_UPDATE_H
0d10: 4f 4f 4b 28 44 42 29 20 28 28 44 42 29 2d 3e 78  OOK(DB) ((DB)->x
0d20: 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63  PreUpdateCallbac
0d30: 6b 7c 7c 28 44 42 29 2d 3e 78 55 70 64 61 74 65  k||(DB)->xUpdate
0d40: 43 61 6c 6c 62 61 63 6b 29 0a 23 65 6c 73 65 0a  Callback).#else.
0d50: 23 20 64 65 66 69 6e 65 20 48 41 53 5f 55 50 44  # define HAS_UPD
0d60: 41 54 45 5f 48 4f 4f 4b 28 44 42 29 20 28 28 44  ATE_HOOK(DB) ((D
0d70: 42 29 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  B)->xUpdateCallb
0d80: 61 63 6b 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ack).#endif../*.
0d90: 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f 62  ** The next glob
0da0: 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20 69  al variable is i
0db0: 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68 20  ncremented each 
0dc0: 74 69 6d 65 20 74 68 65 20 4f 50 5f 46 6f 75 6e  time the OP_Foun
0dd0: 64 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  d opcode.** is e
0de0: 78 65 63 75 74 65 64 2e 20 54 68 69 73 20 69 73  xecuted. This is
0df0: 20 75 73 65 64 20 74 6f 20 74 65 73 74 20 77 68   used to test wh
0e00: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
0e10: 20 66 6f 72 65 69 67 6e 20 6b 65 79 0a 2a 2a 20   foreign key.** 
0e20: 6f 70 65 72 61 74 69 6f 6e 20 69 6d 70 6c 65 6d  operation implem
0e30: 65 6e 74 65 64 20 75 73 69 6e 67 20 4f 50 5f 46  ented using OP_F
0e40: 6b 49 73 5a 65 72 6f 20 69 73 20 77 6f 72 6b 69  kIsZero is worki
0e50: 6e 67 2e 20 54 68 69 73 20 76 61 72 69 61 62 6c  ng. This variabl
0e60: 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75 6e 63  e.** has no func
0e70: 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20  tion other than 
0e80: 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79 20 74  to help verify t
0e90: 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61  he correct opera
0ea0: 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 6c  tion of the.** l
0eb0: 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65  ibrary..*/.#ifde
0ec0: 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e  f SQLITE_TEST.in
0ed0: 74 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f  t sqlite3_found_
0ee0: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0ef0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 61 20  f../*.** Test a 
0f00: 72 65 67 69 73 74 65 72 20 74 6f 20 73 65 65 20  register to see 
0f10: 69 66 20 69 74 20 65 78 63 65 65 64 73 20 74 68  if it exceeds th
0f20: 65 20 63 75 72 72 65 6e 74 20 6d 61 78 69 6d 75  e current maximu
0f30: 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2a 20  m blob size..** 
0f40: 49 66 20 69 74 20 64 6f 65 73 2c 20 72 65 63 6f  If it does, reco
0f50: 72 64 20 74 68 65 20 6e 65 77 20 6d 61 78 69 6d  rd the new maxim
0f60: 75 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2f  um blob size..*/
0f70: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
0f80: 49 54 45 5f 54 45 53 54 29 20 26 26 20 21 64 65  ITE_TEST) && !de
0f90: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
0fa0: 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 29 0a  T_BUILTIN_TEST).
0fb0: 23 20 64 65 66 69 6e 65 20 55 50 44 41 54 45 5f  # define UPDATE_
0fc0: 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 50 29 20  MAX_BLOBSIZE(P) 
0fd0: 20 75 70 64 61 74 65 4d 61 78 42 6c 6f 62 73 69   updateMaxBlobsi
0fe0: 7a 65 28 50 29 0a 23 65 6c 73 65 0a 23 20 64 65  ze(P).#else.# de
0ff0: 66 69 6e 65 20 55 50 44 41 54 45 5f 4d 41 58 5f  fine UPDATE_MAX_
1000: 42 4c 4f 42 53 49 5a 45 28 50 29 0a 23 65 6e 64  BLOBSIZE(P).#end
1010: 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65  if../*.** Invoke
1020: 20 74 68 65 20 56 44 42 45 20 63 6f 76 65 72 61   the VDBE covera
1030: 67 65 20 63 61 6c 6c 62 61 63 6b 2c 20 69 66 20  ge callback, if 
1040: 74 68 61 74 20 63 61 6c 6c 62 61 63 6b 20 69 73  that callback is
1050: 20 64 65 66 69 6e 65 64 2e 20 20 54 68 69 73 0a   defined.  This.
1060: 2a 2a 20 66 65 61 74 75 72 65 20 69 73 20 75 73  ** feature is us
1070: 65 64 20 66 6f 72 20 74 65 73 74 20 73 75 69 74  ed for test suit
1080: 65 20 76 61 6c 69 64 61 74 69 6f 6e 20 6f 6e 6c  e validation onl
1090: 79 20 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 61  y and does not a
10a0: 70 70 65 61 72 20 61 6e 0a 2a 2a 20 70 72 6f 64  ppear an.** prod
10b0: 75 63 74 69 6f 6e 20 62 75 69 6c 64 73 2e 0a 2a  uction builds..*
10c0: 2a 0a 2a 2a 20 4d 20 69 73 20 61 6e 20 69 6e 74  *.** M is an int
10d0: 65 67 65 72 2c 20 32 20 6f 72 20 33 2c 20 74 68  eger, 2 or 3, th
10e0: 61 74 20 69 6e 64 69 63 65 73 20 68 6f 77 20 6d  at indices how m
10f0: 61 6e 79 20 64 69 66 66 65 72 65 6e 74 20 77 61  any different wa
1100: 79 73 20 74 68 65 0a 2a 2a 20 62 72 61 6e 63 68  ys the.** branch
1110: 20 63 61 6e 20 67 6f 2e 20 20 49 74 20 69 73 20   can go.  It is 
1120: 75 73 75 61 6c 6c 79 20 32 2e 20 20 22 49 22 20  usually 2.  "I" 
1130: 69 73 20 74 68 65 20 64 69 72 65 63 74 69 6f 6e  is the direction
1140: 20 74 68 65 20 62 72 61 6e 63 68 0a 2a 2a 20 67   the branch.** g
1150: 6f 65 73 2e 20 20 30 20 6d 65 61 6e 73 20 66 61  oes.  0 means fa
1160: 6c 6c 73 20 74 68 72 6f 75 67 68 2e 20 20 31 20  lls through.  1 
1170: 6d 65 61 6e 73 20 62 72 61 6e 63 68 20 69 73 20  means branch is 
1180: 74 61 6b 65 6e 2e 20 20 32 20 6d 65 61 6e 73 20  taken.  2 means 
1190: 74 68 65 0a 2a 2a 20 73 65 63 6f 6e 64 20 61 6c  the.** second al
11a0: 74 65 72 6e 61 74 69 76 65 20 62 72 61 6e 63 68  ternative branch
11b0: 20 69 73 20 74 61 6b 65 6e 2e 0a 2a 2a 0a 2a 2a   is taken..**.**
11c0: 20 69 53 72 63 4c 69 6e 65 20 69 73 20 74 68 65   iSrcLine is the
11d0: 20 73 6f 75 72 63 65 20 63 6f 64 65 20 6c 69 6e   source code lin
11e0: 65 20 28 66 72 6f 6d 20 74 68 65 20 5f 5f 4c 49  e (from the __LI
11f0: 4e 45 5f 5f 20 6d 61 63 72 6f 29 20 74 68 61 74  NE__ macro) that
1200: 0a 2a 2a 20 67 65 6e 65 72 61 74 65 64 20 74 68  .** generated th
1210: 65 20 56 44 42 45 20 69 6e 73 74 72 75 63 74 69  e VDBE instructi
1220: 6f 6e 2e 20 20 54 68 69 73 20 69 6e 73 74 72 75  on.  This instru
1230: 6d 65 6e 74 61 74 69 6f 6e 20 61 73 73 75 6d 65  mentation assume
1240: 73 20 74 68 61 74 20 61 6c 6c 0a 2a 2a 20 73 6f  s that all.** so
1250: 75 72 63 65 20 63 6f 64 65 20 69 73 20 69 6e 20  urce code is in 
1260: 61 20 73 69 6e 67 6c 65 20 66 69 6c 65 20 28 74  a single file (t
1270: 68 65 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 29  he amalgamation)
1280: 2e 20 20 53 70 65 63 69 61 6c 20 76 61 6c 75 65  .  Special value
1290: 73 20 31 0a 2a 2a 20 61 6e 64 20 32 20 66 6f 72  s 1.** and 2 for
12a0: 20 74 68 65 20 69 53 72 63 4c 69 6e 65 20 70 61   the iSrcLine pa
12b0: 72 61 6d 65 74 65 72 20 6d 65 61 6e 20 74 68 61  rameter mean tha
12c0: 74 20 74 68 69 73 20 70 61 72 74 69 63 75 6c 61  t this particula
12d0: 72 20 62 72 61 6e 63 68 20 69 73 0a 2a 2a 20 61  r branch is.** a
12e0: 6c 77 61 79 73 20 74 61 6b 65 6e 20 6f 72 20 6e  lways taken or n
12f0: 65 76 65 72 20 74 61 6b 65 6e 2c 20 72 65 73 70  ever taken, resp
1300: 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 23 69 66  ectively..*/.#if
1310: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
1320: 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45 29 0a  _VDBE_COVERAGE).
1330: 23 20 64 65 66 69 6e 65 20 56 64 62 65 42 72 61  # define VdbeBra
1340: 6e 63 68 54 61 6b 65 6e 28 49 2c 4d 29 0a 23 65  nchTaken(I,M).#e
1350: 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 56 64 62  lse.# define Vdb
1360: 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 49 2c 4d  eBranchTaken(I,M
1370: 29 20 76 64 62 65 54 61 6b 65 42 72 61 6e 63 68  ) vdbeTakeBranch
1380: 28 70 4f 70 2d 3e 69 53 72 63 4c 69 6e 65 2c 49  (pOp->iSrcLine,I
1390: 2c 4d 29 0a 20 20 73 74 61 74 69 63 20 76 6f 69  ,M).  static voi
13a0: 64 20 76 64 62 65 54 61 6b 65 42 72 61 6e 63 68  d vdbeTakeBranch
13b0: 28 69 6e 74 20 69 53 72 63 4c 69 6e 65 2c 20 75  (int iSrcLine, u
13c0: 38 20 49 2c 20 75 38 20 4d 29 7b 0a 20 20 20 20  8 I, u8 M){.    
13d0: 69 66 28 20 69 53 72 63 4c 69 6e 65 3c 3d 32 20  if( iSrcLine<=2 
13e0: 26 26 20 41 4c 57 41 59 53 28 69 53 72 63 4c 69  && ALWAYS(iSrcLi
13f0: 6e 65 3e 30 29 20 29 7b 0a 20 20 20 20 20 20 4d  ne>0) ){.      M
1400: 20 3d 20 69 53 72 63 4c 69 6e 65 3b 0a 20 20 20   = iSrcLine;.   
1410: 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 65     /* Assert the
1420: 20 74 72 75 74 68 20 6f 66 20 56 64 62 65 43 6f   truth of VdbeCo
1430: 76 65 72 61 67 65 41 6c 77 61 79 73 54 61 6b 65  verageAlwaysTake
1440: 6e 28 29 20 61 6e 64 20 0a 20 20 20 20 20 20 2a  n() and .      *
1450: 2a 20 56 64 62 65 43 6f 76 65 72 61 67 65 4e 65  * VdbeCoverageNe
1460: 76 65 72 54 61 6b 65 6e 28 29 20 2a 2f 0a 20 20  verTaken() */.  
1470: 20 20 20 20 61 73 73 65 72 74 28 20 28 4d 20 26      assert( (M &
1480: 20 49 29 3d 3d 49 20 29 3b 0a 20 20 20 20 7d 65   I)==I );.    }e
1490: 6c 73 65 7b 0a 20 20 20 20 20 20 69 66 28 20 73  lse{.      if( s
14a0: 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
14b0: 69 67 2e 78 56 64 62 65 42 72 61 6e 63 68 3d 3d  ig.xVdbeBranch==
14c0: 30 20 29 20 72 65 74 75 72 6e 3b 20 20 2f 2a 4e  0 ) return;  /*N
14d0: 4f 5f 54 45 53 54 2a 2f 0a 20 20 20 20 20 20 73  O_TEST*/.      s
14e0: 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
14f0: 69 67 2e 78 56 64 62 65 42 72 61 6e 63 68 28 73  ig.xVdbeBranch(s
1500: 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
1510: 69 67 2e 70 56 64 62 65 42 72 61 6e 63 68 41 72  ig.pVdbeBranchAr
1520: 67 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  g,.             
1530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1540: 20 20 20 20 20 20 20 20 20 69 53 72 63 4c 69 6e           iSrcLin
1550: 65 2c 49 2c 4d 29 3b 0a 20 20 20 20 7d 0a 20 20  e,I,M);.    }.  
1560: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  }.#endif../*.** 
1570: 43 6f 6e 76 65 72 74 20 74 68 65 20 67 69 76 65  Convert the give
1580: 6e 20 72 65 67 69 73 74 65 72 20 69 6e 74 6f 20  n register into 
1590: 61 20 73 74 72 69 6e 67 20 69 66 20 69 74 20 69  a string if it i
15a0: 73 6e 27 74 20 6f 6e 65 0a 2a 2a 20 61 6c 72 65  sn't one.** alre
15b0: 61 64 79 2e 20 52 65 74 75 72 6e 20 6e 6f 6e 2d  ady. Return non-
15c0: 7a 65 72 6f 20 69 66 20 61 20 6d 61 6c 6c 6f 63  zero if a malloc
15d0: 28 29 20 66 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65  () fails..*/.#de
15e0: 66 69 6e 65 20 53 74 72 69 6e 67 69 66 79 28 50  fine Stringify(P
15f0: 2c 20 65 6e 63 29 20 5c 0a 20 20 20 69 66 28 28  , enc) \.   if((
1600: 28 50 29 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f  (P)->flags&(MEM_
1610: 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d  Str|MEM_Blob))==
1620: 30 20 26 26 20 73 71 6c 69 74 65 33 56 64 62 65  0 && sqlite3Vdbe
1630: 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 50 2c 65  MemStringify(P,e
1640: 6e 63 2c 30 29 29 20 5c 0a 20 20 20 20 20 7b 20  nc,0)) \.     { 
1650: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 20 7d 0a 0a  goto no_mem; }..
1660: 2f 2a 0a 2a 2a 20 41 6e 20 65 70 68 65 6d 65 72  /*.** An ephemer
1670: 61 6c 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20  al string value 
1680: 28 73 69 67 6e 69 66 69 65 64 20 62 79 20 74 68  (signified by th
1690: 65 20 4d 45 4d 5f 45 70 68 65 6d 20 66 6c 61 67  e MEM_Ephem flag
16a0: 29 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20 61 20  ) contains.** a 
16b0: 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 64 79 6e  pointer to a dyn
16c0: 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74  amically allocat
16d0: 65 64 20 73 74 72 69 6e 67 20 77 68 65 72 65 20  ed string where 
16e0: 73 6f 6d 65 20 6f 74 68 65 72 20 65 6e 74 69 74  some other entit
16f0: 79 0a 2a 2a 20 69 73 20 72 65 73 70 6f 6e 73 69  y.** is responsi
1700: 62 6c 65 20 66 6f 72 20 64 65 61 6c 6c 6f 63 61  ble for dealloca
1710: 74 69 6e 67 20 74 68 61 74 20 73 74 72 69 6e 67  ting that string
1720: 2e 20 20 42 65 63 61 75 73 65 20 74 68 65 20 72  .  Because the r
1730: 65 67 69 73 74 65 72 0a 2a 2a 20 64 6f 65 73 20  egister.** does 
1740: 6e 6f 74 20 63 6f 6e 74 72 6f 6c 20 74 68 65 20  not control the 
1750: 73 74 72 69 6e 67 2c 20 69 74 20 6d 69 67 68 74  string, it might
1760: 20 62 65 20 64 65 6c 65 74 65 64 20 77 69 74 68   be deleted with
1770: 6f 75 74 20 74 68 65 20 72 65 67 69 73 74 65 72  out the register
1780: 0a 2a 2a 20 6b 6e 6f 77 69 6e 67 20 69 74 2e 0a  .** knowing it..
1790: 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75 74 69  **.** This routi
17a0: 6e 65 20 63 6f 6e 76 65 72 74 73 20 61 6e 20 65  ne converts an e
17b0: 70 68 65 6d 65 72 61 6c 20 73 74 72 69 6e 67 20  phemeral string 
17c0: 69 6e 74 6f 20 61 20 64 79 6e 61 6d 69 63 61 6c  into a dynamical
17d0: 6c 79 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20  ly allocated.** 
17e0: 73 74 72 69 6e 67 20 74 68 61 74 20 74 68 65 20  string that the 
17f0: 72 65 67 69 73 74 65 72 20 69 74 73 65 6c 66 20  register itself 
1800: 63 6f 6e 74 72 6f 6c 73 2e 20 20 49 6e 20 6f 74  controls.  In ot
1810: 68 65 72 20 77 6f 72 64 73 2c 20 69 74 0a 2a 2a  her words, it.**
1820: 20 63 6f 6e 76 65 72 74 73 20 61 6e 20 4d 45 4d   converts an MEM
1830: 5f 45 70 68 65 6d 20 73 74 72 69 6e 67 20 69 6e  _Ephem string in
1840: 74 6f 20 61 20 73 74 72 69 6e 67 20 77 69 74 68  to a string with
1850: 20 50 2e 7a 3d 3d 50 2e 7a 4d 61 6c 6c 6f 63 2e   P.z==P.zMalloc.
1860: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 65 65 70  .*/.#define Deep
1870: 68 65 6d 65 72 61 6c 69 7a 65 28 50 29 20 5c 0a  hemeralize(P) \.
1880: 20 20 20 69 66 28 20 28 28 50 29 2d 3e 66 6c 61     if( ((P)->fla
1890: 67 73 26 4d 45 4d 5f 45 70 68 65 6d 29 21 3d 30  gs&MEM_Ephem)!=0
18a0: 20 5c 0a 20 20 20 20 20 20 20 26 26 20 73 71 6c   \.       && sql
18b0: 69 74 65 33 56 64 62 65 4d 65 6d 4d 61 6b 65 57  ite3VdbeMemMakeW
18c0: 72 69 74 65 61 62 6c 65 28 50 29 20 29 7b 20 67  riteable(P) ){ g
18d0: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 7d 0a 0a 2f 2a  oto no_mem;}../*
18e0: 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20   Return true if 
18f0: 74 68 65 20 63 75 72 73 6f 72 20 77 61 73 20 6f  the cursor was o
1900: 70 65 6e 65 64 20 75 73 69 6e 67 20 74 68 65 20  pened using the 
1910: 4f 50 5f 4f 70 65 6e 53 6f 72 74 65 72 20 6f 70  OP_OpenSorter op
1920: 63 6f 64 65 2e 20 2a 2f 0a 23 64 65 66 69 6e 65  code. */.#define
1930: 20 69 73 53 6f 72 74 65 72 28 78 29 20 28 28 78   isSorter(x) ((x
1940: 29 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  )->eCurType==CUR
1950: 54 59 50 45 5f 53 4f 52 54 45 52 29 0a 0a 2f 2a  TYPE_SORTER)../*
1960: 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 56 64 62  .** Allocate Vdb
1970: 65 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 69  eCursor number i
1980: 43 75 72 2e 20 20 52 65 74 75 72 6e 20 61 20 70  Cur.  Return a p
1990: 6f 69 6e 74 65 72 20 74 6f 20 69 74 2e 20 20 52  ointer to it.  R
19a0: 65 74 75 72 6e 20 4e 55 4c 4c 0a 2a 2a 20 69 66  eturn NULL.** if
19b0: 20 77 65 20 72 75 6e 20 6f 75 74 20 6f 66 20 6d   we run out of m
19c0: 65 6d 6f 72 79 2e 0a 2a 2f 0a 73 74 61 74 69 63  emory..*/.static
19d0: 20 56 64 62 65 43 75 72 73 6f 72 20 2a 61 6c 6c   VdbeCursor *all
19e0: 6f 63 61 74 65 43 75 72 73 6f 72 28 0a 20 20 56  ocateCursor(.  V
19f0: 64 62 65 20 2a 70 2c 20 20 20 20 20 20 20 20 20  dbe *p,         
1a00: 20 20 20 20 20 2f 2a 20 54 68 65 20 76 69 72 74       /* The virt
1a10: 75 61 6c 20 6d 61 63 68 69 6e 65 20 2a 2f 0a 20  ual machine */. 
1a20: 20 69 6e 74 20 69 43 75 72 2c 20 20 20 20 20 20   int iCur,      
1a30: 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
1a40: 6f 66 20 74 68 65 20 6e 65 77 20 56 64 62 65 43  of the new VdbeC
1a50: 75 72 73 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  ursor */.  int n
1a60: 46 69 65 6c 64 2c 20 20 20 20 20 20 20 20 20 20  Field,          
1a70: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66 69   /* Number of fi
1a80: 65 6c 64 73 20 69 6e 20 74 68 65 20 74 61 62 6c  elds in the tabl
1a90: 65 20 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20  e or index */.  
1aa0: 69 6e 74 20 69 44 62 2c 20 20 20 20 20 20 20 20  int iDb,        
1ab0: 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73        /* Databas
1ac0: 65 20 74 68 65 20 63 75 72 73 6f 72 20 62 65 6c  e the cursor bel
1ad0: 6f 6e 67 73 20 74 6f 2c 20 6f 72 20 2d 31 20 2a  ongs to, or -1 *
1ae0: 2f 0a 20 20 75 38 20 65 43 75 72 54 79 70 65 20  /.  u8 eCurType 
1af0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 79 70            /* Typ
1b00: 65 20 6f 66 20 74 68 65 20 6e 65 77 20 63 75 72  e of the new cur
1b10: 73 6f 72 20 2a 2f 0a 29 7b 0a 20 20 2f 2a 20 46  sor */.){.  /* F
1b20: 69 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79 20 63  ind the memory c
1b30: 65 6c 6c 20 74 68 61 74 20 77 69 6c 6c 20 62 65  ell that will be
1b40: 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
1b50: 68 65 20 62 6c 6f 62 20 6f 66 20 6d 65 6d 6f 72  he blob of memor
1b60: 79 0a 20 20 2a 2a 20 72 65 71 75 69 72 65 64 20  y.  ** required 
1b70: 66 6f 72 20 74 68 69 73 20 56 64 62 65 43 75 72  for this VdbeCur
1b80: 73 6f 72 20 73 74 72 75 63 74 75 72 65 2e 20 49  sor structure. I
1b90: 74 20 69 73 20 63 6f 6e 76 65 6e 69 65 6e 74 20  t is convenient 
1ba0: 74 6f 20 75 73 65 20 61 20 0a 20 20 2a 2a 20 76  to use a .  ** v
1bb0: 64 62 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  dbe memory cell 
1bc0: 74 6f 20 6d 61 6e 61 67 65 20 74 68 65 20 6d 65  to manage the me
1bd0: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
1be0: 72 65 71 75 69 72 65 64 20 66 6f 72 20 61 0a 20  required for a. 
1bf0: 20 2a 2a 20 56 64 62 65 43 75 72 73 6f 72 20 73   ** VdbeCursor s
1c00: 74 72 75 63 74 75 72 65 20 66 6f 72 20 74 68 65  tructure for the
1c10: 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 65 61 73 6f   following reaso
1c20: 6e 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20  ns:.  **.  **   
1c30: 2a 20 53 6f 6d 65 74 69 6d 65 73 20 63 75 72 73  * Sometimes curs
1c40: 6f 72 20 6e 75 6d 62 65 72 73 20 61 72 65 20 75  or numbers are u
1c50: 73 65 64 20 66 6f 72 20 61 20 63 6f 75 70 6c 65  sed for a couple
1c60: 20 6f 66 20 64 69 66 66 65 72 65 6e 74 0a 20 20   of different.  
1c70: 2a 2a 20 20 20 20 20 70 75 72 70 6f 73 65 73 20  **     purposes 
1c80: 69 6e 20 61 20 76 64 62 65 20 70 72 6f 67 72 61  in a vdbe progra
1c90: 6d 2e 20 54 68 65 20 64 69 66 66 65 72 65 6e 74  m. The different
1ca0: 20 75 73 65 73 20 6d 69 67 68 74 20 72 65 71 75   uses might requ
1cb0: 69 72 65 0a 20 20 2a 2a 20 20 20 20 20 64 69 66  ire.  **     dif
1cc0: 66 65 72 65 6e 74 20 73 69 7a 65 64 20 61 6c 6c  ferent sized all
1cd0: 6f 63 61 74 69 6f 6e 73 2e 20 4d 65 6d 6f 72 79  ocations. Memory
1ce0: 20 63 65 6c 6c 73 20 70 72 6f 76 69 64 65 20 67   cells provide g
1cf0: 72 6f 77 61 62 6c 65 0a 20 20 2a 2a 20 20 20 20  rowable.  **    
1d00: 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2e 0a 20 20   allocations..  
1d10: 2a 2a 0a 20 20 2a 2a 20 20 20 2a 20 57 68 65 6e  **.  **   * When
1d20: 20 75 73 69 6e 67 20 45 4e 41 42 4c 45 5f 4d 45   using ENABLE_ME
1d30: 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 2c  MORY_MANAGEMENT,
1d40: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 62 75 66   memory cell buf
1d50: 66 65 72 73 20 63 61 6e 0a 20 20 2a 2a 20 20 20  fers can.  **   
1d60: 20 20 62 65 20 66 72 65 65 64 20 6c 61 7a 69 6c    be freed lazil
1d70: 79 20 76 69 61 20 74 68 65 20 73 71 6c 69 74 65  y via the sqlite
1d80: 33 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79  3_release_memory
1d90: 28 29 20 41 50 49 2e 20 54 68 69 73 0a 20 20 2a  () API. This.  *
1da0: 2a 20 20 20 20 20 6d 69 6e 69 6d 69 7a 65 73 20  *     minimizes 
1db0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 61  the number of ma
1dc0: 6c 6c 6f 63 20 63 61 6c 6c 73 20 6d 61 64 65 20  lloc calls made 
1dd0: 62 79 20 74 68 65 20 73 79 73 74 65 6d 2e 0a 20  by the system.. 
1de0: 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 6d 65 6d   **.  ** The mem
1df0: 6f 72 79 20 63 65 6c 6c 20 66 6f 72 20 63 75 72  ory cell for cur
1e00: 73 6f 72 20 30 20 69 73 20 61 4d 65 6d 5b 30 5d  sor 0 is aMem[0]
1e10: 2e 20 54 68 65 20 72 65 73 74 20 61 72 65 20 61  . The rest are a
1e20: 6c 6c 6f 63 61 74 65 64 20 66 72 6f 6d 0a 20 20  llocated from.  
1e30: 2a 2a 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68  ** the top of th
1e40: 65 20 72 65 67 69 73 74 65 72 20 73 70 61 63 65  e register space
1e50: 2e 20 20 43 75 72 73 6f 72 20 31 20 69 73 20 61  .  Cursor 1 is a
1e60: 74 20 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d 31 5d  t Mem[p->nMem-1]
1e70: 2e 0a 20 20 2a 2a 20 43 75 72 73 6f 72 20 32 20  ..  ** Cursor 2 
1e80: 69 73 20 61 74 20 4d 65 6d 5b 70 2d 3e 6e 4d 65  is at Mem[p->nMe
1e90: 6d 2d 32 5d 2e 20 41 6e 64 20 73 6f 20 66 6f 72  m-2]. And so for
1ea0: 74 68 2e 0a 20 20 2a 2f 0a 20 20 4d 65 6d 20 2a  th..  */.  Mem *
1eb0: 70 4d 65 6d 20 3d 20 69 43 75 72 3e 30 20 3f 20  pMem = iCur>0 ? 
1ec0: 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d  &p->aMem[p->nMem
1ed0: 2d 69 43 75 72 5d 20 3a 20 70 2d 3e 61 4d 65 6d  -iCur] : p->aMem
1ee0: 3b 0a 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 0a  ;..  int nByte;.
1ef0: 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1f00: 78 20 3d 20 30 3b 0a 20 20 6e 42 79 74 65 20 3d  x = 0;.  nByte =
1f10: 20 0a 20 20 20 20 20 20 52 4f 55 4e 44 38 28 73   .      ROUND8(s
1f20: 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72  izeof(VdbeCursor
1f30: 29 29 20 2b 20 32 2a 73 69 7a 65 6f 66 28 75 33  )) + 2*sizeof(u3
1f40: 32 29 2a 6e 46 69 65 6c 64 20 2b 20 0a 20 20 20  2)*nField + .   
1f50: 20 20 20 28 65 43 75 72 54 79 70 65 3d 3d 43 55     (eCurType==CU
1f60: 52 54 59 50 45 5f 42 54 52 45 45 3f 73 71 6c 69  RTYPE_BTREE?sqli
1f70: 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 53 69  te3BtreeCursorSi
1f80: 7a 65 28 29 3a 30 29 3b 0a 0a 20 20 61 73 73 65  ze():0);..  asse
1f90: 72 74 28 20 69 43 75 72 3e 3d 30 20 26 26 20 69  rt( iCur>=0 && i
1fa0: 43 75 72 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  Cur<p->nCursor )
1fb0: 3b 0a 20 20 69 66 28 20 70 2d 3e 61 70 43 73 72  ;.  if( p->apCsr
1fc0: 5b 69 43 75 72 5d 20 29 7b 20 2f 2a 4f 50 54 49  [iCur] ){ /*OPTI
1fd0: 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53  MIZATION-IF-FALS
1fe0: 45 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56  E*/.    sqlite3V
1ff0: 64 62 65 46 72 65 65 43 75 72 73 6f 72 28 70 2c  dbeFreeCursor(p,
2000: 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 29   p->apCsr[iCur])
2010: 3b 0a 20 20 20 20 70 2d 3e 61 70 43 73 72 5b 69  ;.    p->apCsr[i
2020: 43 75 72 5d 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  Cur] = 0;.  }.  
2030: 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d 73  if( SQLITE_OK==s
2040: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c 65  qlite3VdbeMemCle
2050: 61 72 41 6e 64 52 65 73 69 7a 65 28 70 4d 65 6d  arAndResize(pMem
2060: 2c 20 6e 42 79 74 65 29 20 29 7b 0a 20 20 20 20  , nByte) ){.    
2070: 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d  p->apCsr[iCur] =
2080: 20 70 43 78 20 3d 20 28 56 64 62 65 43 75 72 73   pCx = (VdbeCurs
2090: 6f 72 2a 29 70 4d 65 6d 2d 3e 7a 3b 0a 20 20 20  or*)pMem->z;.   
20a0: 20 6d 65 6d 73 65 74 28 70 43 78 2c 20 30 2c 20   memset(pCx, 0, 
20b0: 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f  sizeof(VdbeCurso
20c0: 72 29 29 3b 0a 20 20 20 20 70 43 78 2d 3e 65 43  r));.    pCx->eC
20d0: 75 72 54 79 70 65 20 3d 20 65 43 75 72 54 79 70  urType = eCurTyp
20e0: 65 3b 0a 20 20 20 20 70 43 78 2d 3e 69 44 62 20  e;.    pCx->iDb 
20f0: 3d 20 69 44 62 3b 0a 20 20 20 20 70 43 78 2d 3e  = iDb;.    pCx->
2100: 6e 46 69 65 6c 64 20 3d 20 6e 46 69 65 6c 64 3b  nField = nField;
2110: 0a 20 20 20 20 70 43 78 2d 3e 61 4f 66 66 73 65  .    pCx->aOffse
2120: 74 20 3d 20 26 70 43 78 2d 3e 61 54 79 70 65 5b  t = &pCx->aType[
2130: 6e 46 69 65 6c 64 5d 3b 0a 20 20 20 20 69 66 28  nField];.    if(
2140: 20 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59   eCurType==CURTY
2150: 50 45 5f 42 54 52 45 45 20 29 7b 0a 20 20 20 20  PE_BTREE ){.    
2160: 20 20 70 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f    pCx->uc.pCurso
2170: 72 20 3d 20 28 42 74 43 75 72 73 6f 72 2a 29 0a  r = (BtCursor*).
2180: 20 20 20 20 20 20 20 20 20 20 26 70 4d 65 6d 2d            &pMem-
2190: 3e 7a 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66  >z[ROUND8(sizeof
21a0: 28 56 64 62 65 43 75 72 73 6f 72 29 29 2b 32 2a  (VdbeCursor))+2*
21b0: 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69 65  sizeof(u32)*nFie
21c0: 6c 64 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ld];.      sqlit
21d0: 65 33 42 74 72 65 65 43 75 72 73 6f 72 5a 65 72  e3BtreeCursorZer
21e0: 6f 28 70 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f  o(pCx->uc.pCurso
21f0: 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  r);.    }.  }.  
2200: 72 65 74 75 72 6e 20 70 43 78 3b 0a 7d 0a 0a 2f  return pCx;.}../
2210: 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76  *.** Try to conv
2220: 65 72 74 20 61 20 76 61 6c 75 65 20 69 6e 74 6f  ert a value into
2230: 20 61 20 6e 75 6d 65 72 69 63 20 72 65 70 72 65   a numeric repre
2240: 73 65 6e 74 61 74 69 6f 6e 20 69 66 20 77 65 20  sentation if we 
2250: 63 61 6e 0a 2a 2a 20 64 6f 20 73 6f 20 77 69 74  can.** do so wit
2260: 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20 69 6e 66  hout loss of inf
2270: 6f 72 6d 61 74 69 6f 6e 2e 20 20 49 6e 20 6f 74  ormation.  In ot
2280: 68 65 72 20 77 6f 72 64 73 2c 20 69 66 20 74 68  her words, if th
2290: 65 20 73 74 72 69 6e 67 0a 2a 2a 20 6c 6f 6f 6b  e string.** look
22a0: 73 20 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c  s like a number,
22b0: 20 63 6f 6e 76 65 72 74 20 69 74 20 69 6e 74 6f   convert it into
22c0: 20 61 20 6e 75 6d 62 65 72 2e 20 20 49 66 20 69   a number.  If i
22d0: 74 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 6c 6f  t does not.** lo
22e0: 6f 6b 20 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72  ok like a number
22f0: 2c 20 6c 65 61 76 65 20 69 74 20 61 6c 6f 6e 65  , leave it alone
2300: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 62  ..**.** If the b
2310: 54 72 79 46 6f 72 49 6e 74 20 66 6c 61 67 20 69  TryForInt flag i
2320: 73 20 74 72 75 65 2c 20 74 68 65 6e 20 65 78 74  s true, then ext
2330: 72 61 20 65 66 66 6f 72 74 20 69 73 20 6d 61 64  ra effort is mad
2340: 65 20 74 6f 20 67 69 76 65 0a 2a 2a 20 61 6e 20  e to give.** an 
2350: 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e  integer represen
2360: 74 61 74 69 6f 6e 2e 20 20 53 74 72 69 6e 67 73  tation.  Strings
2370: 20 74 68 61 74 20 6c 6f 6f 6b 20 6c 69 6b 65 20   that look like 
2380: 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 0a 2a  floating point.*
2390: 2a 20 76 61 6c 75 65 73 20 62 75 74 20 77 68 69  * values but whi
23a0: 63 68 20 68 61 76 65 20 6e 6f 20 66 72 61 63 74  ch have no fract
23b0: 69 6f 6e 61 6c 20 63 6f 6d 70 6f 6e 65 6e 74 20  ional component 
23c0: 28 65 78 61 6d 70 6c 65 3a 20 27 34 38 2e 30 30  (example: '48.00
23d0: 27 29 0a 2a 2a 20 77 69 6c 6c 20 68 61 76 65 20  ').** will have 
23e0: 61 20 4d 45 4d 5f 49 6e 74 20 72 65 70 72 65 73  a MEM_Int repres
23f0: 65 6e 74 61 74 69 6f 6e 20 77 68 65 6e 20 62 54  entation when bT
2400: 72 79 46 6f 72 49 6e 74 20 69 73 20 74 72 75 65  ryForInt is true
2410: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 62 54 72 79 46  ..**.** If bTryF
2420: 6f 72 49 6e 74 20 69 73 20 66 61 6c 73 65 2c 20  orInt is false, 
2430: 74 68 65 6e 20 69 66 20 74 68 65 20 69 6e 70 75  then if the inpu
2440: 74 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e  t string contain
2450: 73 20 61 20 64 65 63 69 6d 61 6c 0a 2a 2a 20 70  s a decimal.** p
2460: 6f 69 6e 74 20 6f 72 20 65 78 70 6f 6e 65 6e 74  oint or exponent
2470: 69 61 6c 20 6e 6f 74 61 74 69 6f 6e 2c 20 74 68  ial notation, th
2480: 65 20 72 65 73 75 6c 74 20 69 73 20 6f 6e 6c 79  e result is only
2490: 20 4d 45 4d 5f 52 65 61 6c 2c 20 65 76 65 6e 0a   MEM_Real, even.
24a0: 2a 2a 20 69 66 20 74 68 65 72 65 20 69 73 20 61  ** if there is a
24b0: 6e 20 65 78 61 63 74 20 69 6e 74 65 67 65 72 20  n exact integer 
24c0: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
24d0: 66 20 74 68 65 20 71 75 61 6e 74 69 74 79 2e 0a  f the quantity..
24e0: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61  */.static void a
24f0: 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
2500: 69 74 79 28 4d 65 6d 20 2a 70 52 65 63 2c 20 69  ity(Mem *pRec, i
2510: 6e 74 20 62 54 72 79 46 6f 72 49 6e 74 29 7b 0a  nt bTryForInt){.
2520: 20 20 64 6f 75 62 6c 65 20 72 56 61 6c 75 65 3b    double rValue;
2530: 0a 20 20 69 36 34 20 69 56 61 6c 75 65 3b 0a 20  .  i64 iValue;. 
2540: 20 75 38 20 65 6e 63 20 3d 20 70 52 65 63 2d 3e   u8 enc = pRec->
2550: 65 6e 63 3b 0a 20 20 61 73 73 65 72 74 28 20 28  enc;.  assert( (
2560: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pRec->flags & (M
2570: 45 4d 5f 53 74 72 7c 4d 45 4d 5f 49 6e 74 7c 4d  EM_Str|MEM_Int|M
2580: 45 4d 5f 52 65 61 6c 29 29 3d 3d 4d 45 4d 5f 53  EM_Real))==MEM_S
2590: 74 72 20 29 3b 0a 20 20 69 66 28 20 73 71 6c 69  tr );.  if( sqli
25a0: 74 65 33 41 74 6f 46 28 70 52 65 63 2d 3e 7a 2c  te3AtoF(pRec->z,
25b0: 20 26 72 56 61 6c 75 65 2c 20 70 52 65 63 2d 3e   &rValue, pRec->
25c0: 6e 2c 20 65 6e 63 29 3d 3d 30 20 29 20 72 65 74  n, enc)==0 ) ret
25d0: 75 72 6e 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71  urn;.  if( 0==sq
25e0: 6c 69 74 65 33 41 74 6f 69 36 34 28 70 52 65 63  lite3Atoi64(pRec
25f0: 2d 3e 7a 2c 20 26 69 56 61 6c 75 65 2c 20 70 52  ->z, &iValue, pR
2600: 65 63 2d 3e 6e 2c 20 65 6e 63 29 20 29 7b 0a 20  ec->n, enc) ){. 
2610: 20 20 20 70 52 65 63 2d 3e 75 2e 69 20 3d 20 69     pRec->u.i = i
2620: 56 61 6c 75 65 3b 0a 20 20 20 20 70 52 65 63 2d  Value;.    pRec-
2630: 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 49 6e  >flags |= MEM_In
2640: 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  t;.  }else{.    
2650: 70 52 65 63 2d 3e 75 2e 72 20 3d 20 72 56 61 6c  pRec->u.r = rVal
2660: 75 65 3b 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c  ue;.    pRec->fl
2670: 61 67 73 20 7c 3d 20 4d 45 4d 5f 52 65 61 6c 3b  ags |= MEM_Real;
2680: 0a 20 20 20 20 69 66 28 20 62 54 72 79 46 6f 72  .    if( bTryFor
2690: 49 6e 74 20 29 20 73 71 6c 69 74 65 33 56 64 62  Int ) sqlite3Vdb
26a0: 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74 79  eIntegerAffinity
26b0: 28 70 52 65 63 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f  (pRec);.  }.}../
26c0: 2a 0a 2a 2a 20 50 72 6f 63 65 73 73 69 6e 67 20  *.** Processing 
26d0: 69 73 20 64 65 74 65 72 6d 69 6e 65 20 62 79 20  is determine by 
26e0: 74 68 65 20 61 66 66 69 6e 69 74 79 20 70 61 72  the affinity par
26f0: 61 6d 65 74 65 72 3a 0a 2a 2a 0a 2a 2a 20 53 51  ameter:.**.** SQ
2700: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
2710: 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f  :.** SQLITE_AFF_
2720: 52 45 41 4c 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f  REAL:.** SQLITE_
2730: 41 46 46 5f 4e 55 4d 45 52 49 43 3a 0a 2a 2a 20  AFF_NUMERIC:.** 
2740: 20 20 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72     Try to conver
2750: 74 20 70 52 65 63 20 74 6f 20 61 6e 20 69 6e 74  t pRec to an int
2760: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
2770: 69 6f 6e 20 6f 72 20 61 20 0a 2a 2a 20 20 20 20  ion or a .**    
2780: 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20 72  floating-point r
2790: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 66  epresentation if
27a0: 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72   an integer repr
27b0: 65 73 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20 20 20  esentation.**   
27c0: 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65   is not possible
27d0: 2e 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65  .  Note that the
27e0: 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65   integer represe
27f0: 6e 74 61 74 69 6f 6e 20 69 73 0a 2a 2a 20 20 20  ntation is.**   
2800: 20 61 6c 77 61 79 73 20 70 72 65 66 65 72 72 65   always preferre
2810: 64 2c 20 65 76 65 6e 20 69 66 20 74 68 65 20 61  d, even if the a
2820: 66 66 69 6e 69 74 79 20 69 73 20 52 45 41 4c 2c  ffinity is REAL,
2830: 20 62 65 63 61 75 73 65 0a 2a 2a 20 20 20 20 61   because.**    a
2840: 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73  n integer repres
2850: 65 6e 74 61 74 69 6f 6e 20 69 73 20 6d 6f 72 65  entation is more
2860: 20 73 70 61 63 65 20 65 66 66 69 63 69 65 6e 74   space efficient
2870: 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2a 0a 2a 2a 20   on disk..**.** 
2880: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 3a  SQLITE_AFF_TEXT:
2890: 0a 2a 2a 20 20 20 20 43 6f 6e 76 65 72 74 20 70  .**    Convert p
28a0: 52 65 63 20 74 6f 20 61 20 74 65 78 74 20 72 65  Rec to a text re
28b0: 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a  presentation..**
28c0: 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 42  .** SQLITE_AFF_B
28d0: 4c 4f 42 3a 0a 2a 2a 20 20 20 20 4e 6f 2d 6f 70  LOB:.**    No-op
28e0: 2e 20 20 70 52 65 63 20 69 73 20 75 6e 63 68 61  .  pRec is uncha
28f0: 6e 67 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  nged..*/.static 
2900: 76 6f 69 64 20 61 70 70 6c 79 41 66 66 69 6e 69  void applyAffini
2910: 74 79 28 0a 20 20 4d 65 6d 20 2a 70 52 65 63 2c  ty(.  Mem *pRec,
2920: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
2930: 20 76 61 6c 75 65 20 74 6f 20 61 70 70 6c 79 20   value to apply 
2940: 61 66 66 69 6e 69 74 79 20 74 6f 20 2a 2f 0a 20  affinity to */. 
2950: 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 2c 20   char affinity, 
2960: 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69       /* The affi
2970: 6e 69 74 79 20 74 6f 20 62 65 20 61 70 70 6c 69  nity to be appli
2980: 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 20 20  ed */.  u8 enc  
2990: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55              /* U
29a0: 73 65 20 74 68 69 73 20 74 65 78 74 20 65 6e 63  se this text enc
29b0: 6f 64 69 6e 67 20 2a 2f 0a 29 7b 0a 20 20 69 66  oding */.){.  if
29c0: 28 20 61 66 66 69 6e 69 74 79 3e 3d 53 51 4c 49  ( affinity>=SQLI
29d0: 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 29  TE_AFF_NUMERIC )
29e0: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 61 66  {.    assert( af
29f0: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
2a00: 46 46 5f 49 4e 54 45 47 45 52 20 7c 7c 20 61 66  FF_INTEGER || af
2a10: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
2a20: 46 46 5f 52 45 41 4c 0a 20 20 20 20 20 20 20 20  FF_REAL.        
2a30: 20 20 20 20 20 7c 7c 20 61 66 66 69 6e 69 74 79       || affinity
2a40: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  ==SQLITE_AFF_NUM
2a50: 45 52 49 43 20 29 3b 0a 20 20 20 20 69 66 28 20  ERIC );.    if( 
2a60: 28 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d  (pRec->flags & M
2a70: 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 20 2f 2a  EM_Int)==0 ){ /*
2a80: 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d  OPTIMIZATION-IF-
2a90: 46 41 4c 53 45 2a 2f 0a 20 20 20 20 20 20 69 66  FALSE*/.      if
2aa0: 28 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 20 26  ( (pRec->flags &
2ab0: 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b   MEM_Real)==0 ){
2ac0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 52 65  .        if( pRe
2ad0: 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53  c->flags & MEM_S
2ae0: 74 72 20 29 20 61 70 70 6c 79 4e 75 6d 65 72 69  tr ) applyNumeri
2af0: 63 41 66 66 69 6e 69 74 79 28 70 52 65 63 2c 31  cAffinity(pRec,1
2b00: 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
2b10: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
2b20: 64 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69  dbeIntegerAffini
2b30: 74 79 28 70 52 65 63 29 3b 0a 20 20 20 20 20 20  ty(pRec);.      
2b40: 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 20  }.    }.  }else 
2b50: 69 66 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51  if( affinity==SQ
2b60: 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20 29 7b  LITE_AFF_TEXT ){
2b70: 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 74 74  .    /* Only att
2b80: 65 6d 70 74 20 74 68 65 20 63 6f 6e 76 65 72 73  empt the convers
2b90: 69 6f 6e 20 74 6f 20 54 45 58 54 20 69 66 20 74  ion to TEXT if t
2ba0: 68 65 72 65 20 69 73 20 61 6e 20 69 6e 74 65 67  here is an integ
2bb0: 65 72 20 6f 72 20 72 65 61 6c 0a 20 20 20 20 2a  er or real.    *
2bc0: 2a 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  * representation
2bd0: 20 28 62 6c 6f 62 20 61 6e 64 20 4e 55 4c 4c 20   (blob and NULL 
2be0: 64 6f 20 6e 6f 74 20 67 65 74 20 63 6f 6e 76 65  do not get conve
2bf0: 72 74 65 64 29 20 62 75 74 20 6e 6f 20 73 74 72  rted) but no str
2c00: 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65 70 72 65  ing.    ** repre
2c10: 73 65 6e 74 61 74 69 6f 6e 2e 20 20 49 74 20 77  sentation.  It w
2c20: 6f 75 6c 64 20 62 65 20 68 61 72 6d 6c 65 73 73  ould be harmless
2c30: 20 74 6f 20 72 65 70 65 61 74 20 74 68 65 20 63   to repeat the c
2c40: 6f 6e 76 65 72 73 69 6f 6e 20 69 66 20 0a 20 20  onversion if .  
2c50: 20 20 2a 2a 20 74 68 65 72 65 20 69 73 20 61 6c    ** there is al
2c60: 72 65 61 64 79 20 61 20 73 74 72 69 6e 67 20 72  ready a string r
2c70: 65 70 2c 20 62 75 74 20 69 74 20 69 73 20 70 6f  ep, but it is po
2c80: 69 6e 74 6c 65 73 73 20 74 6f 20 77 61 73 74 65  intless to waste
2c90: 20 74 68 6f 73 65 0a 20 20 20 20 2a 2a 20 43 50   those.    ** CP
2ca0: 55 20 63 79 63 6c 65 73 2e 20 2a 2f 0a 20 20 20  U cycles. */.   
2cb0: 20 69 66 28 20 30 3d 3d 28 70 52 65 63 2d 3e 66   if( 0==(pRec->f
2cc0: 6c 61 67 73 26 4d 45 4d 5f 53 74 72 29 20 29 7b  lags&MEM_Str) ){
2cd0: 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d   /*OPTIMIZATION-
2ce0: 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20 20  IF-FALSE*/.     
2cf0: 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61 67   if( (pRec->flag
2d00: 73 26 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f  s&(MEM_Real|MEM_
2d10: 49 6e 74 29 29 20 29 7b 0a 20 20 20 20 20 20 20  Int)) ){.       
2d20: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2d30: 74 72 69 6e 67 69 66 79 28 70 52 65 63 2c 20 65  tringify(pRec, e
2d40: 6e 63 2c 20 31 29 3b 0a 20 20 20 20 20 20 7d 0a  nc, 1);.      }.
2d50: 20 20 20 20 7d 0a 20 20 20 20 70 52 65 63 2d 3e      }.    pRec->
2d60: 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 52  flags &= ~(MEM_R
2d70: 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  eal|MEM_Int);.  
2d80: 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74  }.}../*.** Try t
2d90: 6f 20 63 6f 6e 76 65 72 74 20 74 68 65 20 74 79  o convert the ty
2da0: 70 65 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e  pe of a function
2db0: 20 61 72 67 75 6d 65 6e 74 20 6f 72 20 61 20 72   argument or a r
2dc0: 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 0a 2a 2a 20  esult column.** 
2dd0: 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63 20 72  into a numeric r
2de0: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20 20  epresentation.  
2df0: 55 73 65 20 65 69 74 68 65 72 20 49 4e 54 45 47  Use either INTEG
2e00: 45 52 20 6f 72 20 52 45 41 4c 20 77 68 69 63 68  ER or REAL which
2e10: 65 76 65 72 0a 2a 2a 20 69 73 20 61 70 70 72 6f  ever.** is appro
2e20: 70 72 69 61 74 65 2e 20 20 42 75 74 20 6f 6e 6c  priate.  But onl
2e30: 79 20 64 6f 20 74 68 65 20 63 6f 6e 76 65 72 73  y do the convers
2e40: 69 6f 6e 20 69 66 20 69 74 20 69 73 20 70 6f 73  ion if it is pos
2e50: 73 69 62 6c 65 20 77 69 74 68 6f 75 74 0a 2a 2a  sible without.**
2e60: 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61   loss of informa
2e70: 74 69 6f 6e 20 61 6e 64 20 72 65 74 75 72 6e 20  tion and return 
2e80: 74 68 65 20 72 65 76 69 73 65 64 20 74 79 70 65  the revised type
2e90: 20 6f 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74   of the argument
2ea0: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
2eb0: 5f 76 61 6c 75 65 5f 6e 75 6d 65 72 69 63 5f 74  _value_numeric_t
2ec0: 79 70 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  ype(sqlite3_valu
2ed0: 65 20 2a 70 56 61 6c 29 7b 0a 20 20 69 6e 74 20  e *pVal){.  int 
2ee0: 65 54 79 70 65 20 3d 20 73 71 6c 69 74 65 33 5f  eType = sqlite3_
2ef0: 76 61 6c 75 65 5f 74 79 70 65 28 70 56 61 6c 29  value_type(pVal)
2f00: 3b 0a 20 20 69 66 28 20 65 54 79 70 65 3d 3d 53  ;.  if( eType==S
2f10: 51 4c 49 54 45 5f 54 45 58 54 20 29 7b 0a 20 20  QLITE_TEXT ){.  
2f20: 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20 28 4d    Mem *pMem = (M
2f30: 65 6d 2a 29 70 56 61 6c 3b 0a 20 20 20 20 61 70  em*)pVal;.    ap
2f40: 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  plyNumericAffini
2f50: 74 79 28 70 4d 65 6d 2c 20 30 29 3b 0a 20 20 20  ty(pMem, 0);.   
2f60: 20 65 54 79 70 65 20 3d 20 73 71 6c 69 74 65 33   eType = sqlite3
2f70: 5f 76 61 6c 75 65 5f 74 79 70 65 28 70 56 61 6c  _value_type(pVal
2f80: 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
2f90: 65 54 79 70 65 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  eType;.}../*.** 
2fa0: 45 78 70 6f 72 74 65 64 20 76 65 72 73 69 6f 6e  Exported version
2fb0: 20 6f 66 20 61 70 70 6c 79 41 66 66 69 6e 69 74   of applyAffinit
2fc0: 79 28 29 2e 20 54 68 69 73 20 6f 6e 65 20 77 6f  y(). This one wo
2fd0: 72 6b 73 20 6f 6e 20 73 71 6c 69 74 65 33 5f 76  rks on sqlite3_v
2fe0: 61 6c 75 65 2a 2c 20 0a 2a 2a 20 6e 6f 74 20 74  alue*, .** not t
2ff0: 68 65 20 69 6e 74 65 72 6e 61 6c 20 4d 65 6d 2a  he internal Mem*
3000: 20 74 79 70 65 2e 0a 2a 2f 0a 76 6f 69 64 20 73   type..*/.void s
3010: 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70 6c 79  qlite3ValueApply
3020: 41 66 66 69 6e 69 74 79 28 0a 20 20 73 71 6c 69  Affinity(.  sqli
3030: 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 2c  te3_value *pVal,
3040: 20 0a 20 20 75 38 20 61 66 66 69 6e 69 74 79 2c   .  u8 affinity,
3050: 20 0a 20 20 75 38 20 65 6e 63 0a 29 7b 0a 20 20   .  u8 enc.){.  
3060: 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 28 4d  applyAffinity((M
3070: 65 6d 20 2a 29 70 56 61 6c 2c 20 61 66 66 69 6e  em *)pVal, affin
3080: 69 74 79 2c 20 65 6e 63 29 3b 0a 7d 0a 0a 2f 2a  ity, enc);.}../*
3090: 0a 2a 2a 20 70 4d 65 6d 20 63 75 72 72 65 6e 74  .** pMem current
30a0: 6c 79 20 6f 6e 6c 79 20 68 6f 6c 64 73 20 61 20  ly only holds a 
30b0: 73 74 72 69 6e 67 20 74 79 70 65 20 28 6f 72 20  string type (or 
30c0: 6d 61 79 62 65 20 61 20 42 4c 4f 42 20 74 68 61  maybe a BLOB tha
30d0: 74 20 77 65 20 63 61 6e 0a 2a 2a 20 69 6e 74 65  t we can.** inte
30e0: 72 70 72 65 74 20 61 73 20 61 20 73 74 72 69 6e  rpret as a strin
30f0: 67 20 69 66 20 77 65 20 77 61 6e 74 20 74 6f 29  g if we want to)
3100: 2e 20 20 43 6f 6d 70 75 74 65 20 69 74 73 20 63  .  Compute its c
3110: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 0a 2a 2a 20  orresponding.** 
3120: 6e 75 6d 65 72 69 63 20 74 79 70 65 2c 20 69 66  numeric type, if
3130: 20 68 61 73 20 6f 6e 65 2e 20 20 53 65 74 20 74   has one.  Set t
3140: 68 65 20 70 4d 65 6d 2d 3e 75 2e 72 20 61 6e 64  he pMem->u.r and
3150: 20 70 4d 65 6d 2d 3e 75 2e 69 20 66 69 65 6c 64   pMem->u.i field
3160: 73 0a 2a 2a 20 61 63 63 6f 72 64 69 6e 67 6c 79  s.** accordingly
3170: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 75 31 36 20  ..*/.static u16 
3180: 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20  SQLITE_NOINLINE 
3190: 63 6f 6d 70 75 74 65 4e 75 6d 65 72 69 63 54 79  computeNumericTy
31a0: 70 65 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20  pe(Mem *pMem){. 
31b0: 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e   assert( (pMem->
31c0: 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74  flags & (MEM_Int
31d0: 7c 4d 45 4d 5f 52 65 61 6c 29 29 3d 3d 30 20 29  |MEM_Real))==0 )
31e0: 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d 65  ;.  assert( (pMe
31f0: 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  m->flags & (MEM_
3200: 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 21 3d  Str|MEM_Blob))!=
3210: 30 20 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  0 );.  if( sqlit
3220: 65 33 41 74 6f 46 28 70 4d 65 6d 2d 3e 7a 2c 20  e3AtoF(pMem->z, 
3230: 26 70 4d 65 6d 2d 3e 75 2e 72 2c 20 70 4d 65 6d  &pMem->u.r, pMem
3240: 2d 3e 6e 2c 20 70 4d 65 6d 2d 3e 65 6e 63 29 3d  ->n, pMem->enc)=
3250: 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  =0 ){.    return
3260: 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71   0;.  }.  if( sq
3270: 6c 69 74 65 33 41 74 6f 69 36 34 28 70 4d 65 6d  lite3Atoi64(pMem
3280: 2d 3e 7a 2c 20 26 70 4d 65 6d 2d 3e 75 2e 69 2c  ->z, &pMem->u.i,
3290: 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d 3e   pMem->n, pMem->
32a0: 65 6e 63 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  enc)==SQLITE_OK 
32b0: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 4d 45  ){.    return ME
32c0: 4d 5f 49 6e 74 3b 0a 20 20 7d 0a 20 20 72 65 74  M_Int;.  }.  ret
32d0: 75 72 6e 20 4d 45 4d 5f 52 65 61 6c 3b 0a 7d 0a  urn MEM_Real;.}.
32e0: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  ./*.** Return th
32f0: 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20 66  e numeric type f
3300: 6f 72 20 70 4d 65 6d 2c 20 65 69 74 68 65 72 20  or pMem, either 
3310: 4d 45 4d 5f 49 6e 74 20 6f 72 20 4d 45 4d 5f 52  MEM_Int or MEM_R
3320: 65 61 6c 20 6f 72 20 62 6f 74 68 20 6f 72 0a 2a  eal or both or.*
3330: 2a 20 6e 6f 6e 65 2e 20 20 0a 2a 2a 0a 2a 2a 20  * none.  .**.** 
3340: 55 6e 6c 69 6b 65 20 61 70 70 6c 79 4e 75 6d 65  Unlike applyNume
3350: 72 69 63 41 66 66 69 6e 69 74 79 28 29 2c 20 74  ricAffinity(), t
3360: 68 69 73 20 72 6f 75 74 69 6e 65 20 64 6f 65 73  his routine does
3370: 20 6e 6f 74 20 6d 6f 64 69 66 79 20 70 4d 65 6d   not modify pMem
3380: 2d 3e 66 6c 61 67 73 2e 0a 2a 2a 20 42 75 74 20  ->flags..** But 
3390: 69 74 20 64 6f 65 73 20 73 65 74 20 70 4d 65 6d  it does set pMem
33a0: 2d 3e 75 2e 72 20 61 6e 64 20 70 4d 65 6d 2d 3e  ->u.r and pMem->
33b0: 75 2e 69 20 61 70 70 72 6f 70 72 69 61 74 65 6c  u.i appropriatel
33c0: 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 75 31 36  y..*/.static u16
33d0: 20 6e 75 6d 65 72 69 63 54 79 70 65 28 4d 65 6d   numericType(Mem
33e0: 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 66 28 20 70   *pMem){.  if( p
33f0: 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  Mem->flags & (ME
3400: 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 20  M_Int|MEM_Real) 
3410: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 70 4d  ){.    return pM
3420: 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  em->flags & (MEM
3430: 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 3b 0a  _Int|MEM_Real);.
3440: 20 20 7d 0a 20 20 69 66 28 20 70 4d 65 6d 2d 3e    }.  if( pMem->
3450: 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72  flags & (MEM_Str
3460: 7c 4d 45 4d 5f 42 6c 6f 62 29 20 29 7b 0a 20 20  |MEM_Blob) ){.  
3470: 20 20 72 65 74 75 72 6e 20 63 6f 6d 70 75 74 65    return compute
3480: 4e 75 6d 65 72 69 63 54 79 70 65 28 70 4d 65 6d  NumericType(pMem
3490: 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
34a0: 30 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c  0;.}..#ifdef SQL
34b0: 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20  ITE_DEBUG./*.** 
34c0: 57 72 69 74 65 20 61 20 6e 69 63 65 20 73 74 72  Write a nice str
34d0: 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74 69  ing representati
34e0: 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e  on of the conten
34f0: 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d 65 6d 0a  ts of cell pMem.
3500: 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65 72 20 7a  ** into buffer z
3510: 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e 42 75 66  Buf, length nBuf
3520: 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..*/.void sqlite
3530: 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79 50 72  3VdbeMemPrettyPr
3540: 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20 63  int(Mem *pMem, c
3550: 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20 20 63 68  har *zBuf){.  ch
3560: 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42 75 66 3b  ar *zCsr = zBuf;
3570: 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d 65 6d 2d  .  int f = pMem-
3580: 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74 61 74 69  >flags;..  stati
3590: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f  c const char *co
35a0: 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d  nst encnames[] =
35b0: 20 7b 22 28 58 29 22 2c 20 22 28 38 29 22 2c 20   {"(X)", "(8)", 
35c0: 22 28 31 36 4c 45 29 22 2c 20 22 28 31 36 42 45  "(16LE)", "(16BE
35d0: 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66 26 4d 45  )"};..  if( f&ME
35e0: 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20 20 69 6e  M_Blob ){.    in
35f0: 74 20 69 3b 0a 20 20 20 20 63 68 61 72 20 63 3b  t i;.    char c;
3600: 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d  .    if( f & MEM
3610: 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20 63 20  _Dyn ){.      c 
3620: 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61 73 73  = 'z';.      ass
3630: 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53  ert( (f & (MEM_S
3640: 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29  tatic|MEM_Ephem)
3650: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
3660: 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74  e if( f & MEM_St
3670: 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20 63 20  atic ){.      c 
3680: 3d 20 27 74 27 3b 0a 20 20 20 20 20 20 61 73 73  = 't';.      ass
3690: 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 44  ert( (f & (MEM_D
36a0: 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d  yn|MEM_Ephem))==
36b0: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  0 );.    }else i
36c0: 66 28 20 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d  f( f & MEM_Ephem
36d0: 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 65   ){.      c = 'e
36e0: 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ';.      assert(
36f0: 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69   (f & (MEM_Stati
3700: 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29  c|MEM_Dyn))==0 )
3710: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
3720: 20 20 20 63 20 3d 20 27 73 27 3b 0a 20 20 20 20     c = 's';.    
3730: 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  }..    sqlite3_s
3740: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
3750: 72 2c 20 22 25 63 22 2c 20 63 29 3b 0a 20 20 20  r, "%c", c);.   
3760: 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33   zCsr += sqlite3
3770: 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a  Strlen30(zCsr);.
3780: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
3790: 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20  intf(100, zCsr, 
37a0: 22 25 64 5b 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b  "%d[", pMem->n);
37b0: 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c  .    zCsr += sql
37c0: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73  ite3Strlen30(zCs
37d0: 72 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b  r);.    for(i=0;
37e0: 20 69 3c 31 36 20 26 26 20 69 3c 70 4d 65 6d 2d   i<16 && i<pMem-
37f0: 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  >n; i++){.      
3800: 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66  sqlite3_snprintf
3810: 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25 30 32  (100, zCsr, "%02
3820: 58 22 2c 20 28 28 69 6e 74 29 70 4d 65 6d 2d 3e  X", ((int)pMem->
3830: 7a 5b 69 5d 20 26 20 30 78 46 46 29 29 3b 0a 20  z[i] & 0xFF));. 
3840: 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c       zCsr += sql
3850: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73  ite3Strlen30(zCs
3860: 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 66 6f  r);.    }.    fo
3870: 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26 20 69  r(i=0; i<16 && i
3880: 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a  <pMem->n; i++){.
3890: 20 20 20 20 20 20 63 68 61 72 20 7a 20 3d 20 70        char z = p
38a0: 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20 20 20 20  Mem->z[i];.     
38b0: 20 69 66 28 20 7a 3c 33 32 20 7c 7c 20 7a 3e 31   if( z<32 || z>1
38c0: 32 36 20 29 20 2a 7a 43 73 72 2b 2b 20 3d 20 27  26 ) *zCsr++ = '
38d0: 2e 27 3b 0a 20 20 20 20 20 20 65 6c 73 65 20 2a  .';.      else *
38e0: 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20 20 20 20  zCsr++ = z;.    
38f0: 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73  }..    sqlite3_s
3900: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
3910: 72 2c 20 22 5d 25 73 22 2c 20 65 6e 63 6e 61 6d  r, "]%s", encnam
3920: 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b 0a  es[pMem->enc]);.
3930: 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69      zCsr += sqli
3940: 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72  te3Strlen30(zCsr
3950: 29 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d  );.    if( f & M
3960: 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20  EM_Zero ){.     
3970: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
3980: 66 28 31 30 30 2c 20 7a 43 73 72 2c 22 2b 25 64  f(100, zCsr,"+%d
3990: 7a 22 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a 65 72 6f  z",pMem->u.nZero
39a0: 29 3b 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d  );.      zCsr +=
39b0: 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
39c0: 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20  (zCsr);.    }.  
39d0: 20 20 2a 7a 43 73 72 20 3d 20 27 5c 30 27 3b 0a    *zCsr = '\0';.
39e0: 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20    }else if( f & 
39f0: 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 69  MEM_Str ){.    i
3a00: 6e 74 20 6a 2c 20 6b 3b 0a 20 20 20 20 7a 42 75  nt j, k;.    zBu
3a10: 66 5b 30 5d 20 3d 20 27 20 27 3b 0a 20 20 20 20  f[0] = ' ';.    
3a20: 69 66 28 20 66 20 26 20 4d 45 4d 5f 44 79 6e 20  if( f & MEM_Dyn 
3a30: 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d  ){.      zBuf[1]
3a40: 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61 73   = 'z';.      as
3a50: 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f  sert( (f & (MEM_
3a60: 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d  Static|MEM_Ephem
3a70: 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c  ))==0 );.    }el
3a80: 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 53  se if( f & MEM_S
3a90: 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20 7a  tatic ){.      z
3aa0: 42 75 66 5b 31 5d 20 3d 20 27 74 27 3b 0a 20 20  Buf[1] = 't';.  
3ab0: 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26      assert( (f &
3ac0: 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70   (MEM_Dyn|MEM_Ep
3ad0: 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  hem))==0 );.    
3ae0: 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45  }else if( f & ME
3af0: 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20 20 20  M_Ephem ){.     
3b00: 20 7a 42 75 66 5b 31 5d 20 3d 20 27 65 27 3b 0a   zBuf[1] = 'e';.
3b10: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66        assert( (f
3b20: 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d   & (MEM_Static|M
3b30: 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a 20  EM_Dyn))==0 );. 
3b40: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
3b50: 7a 42 75 66 5b 31 5d 20 3d 20 27 73 27 3b 0a 20  zBuf[1] = 's';. 
3b60: 20 20 20 7d 0a 20 20 20 20 6b 20 3d 20 32 3b 0a     }.    k = 2;.
3b70: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
3b80: 69 6e 74 66 28 31 30 30 2c 20 26 7a 42 75 66 5b  intf(100, &zBuf[
3b90: 6b 5d 2c 20 22 25 64 22 2c 20 70 4d 65 6d 2d 3e  k], "%d", pMem->
3ba0: 6e 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c  n);.    k += sql
3bb0: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26 7a 42  ite3Strlen30(&zB
3bc0: 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66  uf[k]);.    zBuf
3bd0: 5b 6b 2b 2b 5d 20 3d 20 27 5b 27 3b 0a 20 20 20  [k++] = '[';.   
3be0: 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 31 35 20 26   for(j=0; j<15 &
3bf0: 26 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20 6a 2b 2b  & j<pMem->n; j++
3c00: 29 7b 0a 20 20 20 20 20 20 75 38 20 63 20 3d 20  ){.      u8 c = 
3c10: 70 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20 20 20 20  pMem->z[j];.    
3c20: 20 20 69 66 28 20 63 3e 3d 30 78 32 30 20 26 26    if( c>=0x20 &&
3c30: 20 63 3c 30 78 37 66 20 29 7b 0a 20 20 20 20 20   c<0x7f ){.     
3c40: 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 63     zBuf[k++] = c
3c50: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
3c60: 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d         zBuf[k++]
3c70: 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20 7d 0a   = '.';.      }.
3c80: 20 20 20 20 7d 0a 20 20 20 20 7a 42 75 66 5b 6b      }.    zBuf[k
3c90: 2b 2b 5d 20 3d 20 27 5d 27 3b 0a 20 20 20 20 73  ++] = ']';.    s
3ca0: 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28  qlite3_snprintf(
3cb0: 31 30 30 2c 26 7a 42 75 66 5b 6b 5d 2c 20 65 6e  100,&zBuf[k], en
3cc0: 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63  cnames[pMem->enc
3cd0: 5d 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c  ]);.    k += sql
3ce0: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26 7a 42  ite3Strlen30(&zB
3cf0: 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66  uf[k]);.    zBuf
3d00: 5b 6b 2b 2b 5d 20 3d 20 30 3b 0a 20 20 7d 0a 7d  [k++] = 0;.  }.}
3d10: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
3d20: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a  SQLITE_DEBUG./*.
3d30: 2a 2a 20 50 72 69 6e 74 20 74 68 65 20 76 61 6c  ** Print the val
3d40: 75 65 20 6f 66 20 61 20 72 65 67 69 73 74 65 72  ue of a register
3d50: 20 66 6f 72 20 74 72 61 63 69 6e 67 20 70 75 72   for tracing pur
3d60: 70 6f 73 65 73 3a 0a 2a 2f 0a 73 74 61 74 69 63  poses:.*/.static
3d70: 20 76 6f 69 64 20 6d 65 6d 54 72 61 63 65 50 72   void memTracePr
3d80: 69 6e 74 28 4d 65 6d 20 2a 70 29 7b 0a 20 20 69  int(Mem *p){.  i
3d90: 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45  f( p->flags & ME
3da0: 4d 5f 55 6e 64 65 66 69 6e 65 64 20 29 7b 0a 20  M_Undefined ){. 
3db0: 20 20 20 70 72 69 6e 74 66 28 22 20 75 6e 64 65     printf(" unde
3dc0: 66 69 6e 65 64 22 29 3b 0a 20 20 7d 65 6c 73 65  fined");.  }else
3dd0: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
3de0: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
3df0: 70 72 69 6e 74 66 28 22 20 4e 55 4c 4c 22 29 3b  printf(" NULL");
3e00: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 28 70 2d  .  }else if( (p-
3e10: 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e  >flags & (MEM_In
3e20: 74 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 28 4d 45  t|MEM_Str))==(ME
3e30: 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 20 29  M_Int|MEM_Str) )
3e40: 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 73  {.    printf(" s
3e50: 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29  i:%lld", p->u.i)
3e60: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d  ;.  }else if( p-
3e70: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
3e80: 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22   ){.    printf("
3e90: 20 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69   i:%lld", p->u.i
3ea0: 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
3eb0: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
3ec0: 50 4f 49 4e 54 0a 20 20 7d 65 6c 73 65 20 69 66  POINT.  }else if
3ed0: 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ( p->flags & MEM
3ee0: 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 70 72 69  _Real ){.    pri
3ef0: 6e 74 66 28 22 20 72 3a 25 67 22 2c 20 70 2d 3e  ntf(" r:%g", p->
3f00: 75 2e 72 29 3b 0a 23 65 6e 64 69 66 0a 20 20 7d  u.r);.#endif.  }
3f10: 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67  else if( p->flag
3f20: 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 20 29  s & MEM_RowSet )
3f30: 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 28  {.    printf(" (
3f40: 72 6f 77 73 65 74 29 22 29 3b 0a 20 20 7d 65 6c  rowset)");.  }el
3f50: 73 65 7b 0a 20 20 20 20 63 68 61 72 20 7a 42 75  se{.    char zBu
3f60: 66 5b 32 30 30 5d 3b 0a 20 20 20 20 73 71 6c 69  f[200];.    sqli
3f70: 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79  te3VdbeMemPretty
3f80: 50 72 69 6e 74 28 70 2c 20 7a 42 75 66 29 3b 0a  Print(p, zBuf);.
3f90: 20 20 20 20 70 72 69 6e 74 66 28 22 20 25 73 22      printf(" %s"
3fa0: 2c 20 7a 42 75 66 29 3b 0a 20 20 7d 0a 20 20 69  , zBuf);.  }.  i
3fb0: 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45  f( p->flags & ME
3fc0: 4d 5f 53 75 62 74 79 70 65 20 29 20 70 72 69 6e  M_Subtype ) prin
3fd0: 74 66 28 22 20 73 75 62 74 79 70 65 3d 30 78 25  tf(" subtype=0x%
3fe0: 30 32 78 22 2c 20 70 2d 3e 65 53 75 62 74 79 70  02x", p->eSubtyp
3ff0: 65 29 3b 0a 7d 0a 73 74 61 74 69 63 20 76 6f 69  e);.}.static voi
4000: 64 20 72 65 67 69 73 74 65 72 54 72 61 63 65 28  d registerTrace(
4010: 69 6e 74 20 69 52 65 67 2c 20 4d 65 6d 20 2a 70  int iReg, Mem *p
4020: 29 7b 0a 20 20 70 72 69 6e 74 66 28 22 52 45 47  ){.  printf("REG
4030: 5b 25 64 5d 20 3d 20 22 2c 20 69 52 65 67 29 3b  [%d] = ", iReg);
4040: 0a 20 20 6d 65 6d 54 72 61 63 65 50 72 69 6e 74  .  memTracePrint
4050: 28 70 29 3b 0a 20 20 70 72 69 6e 74 66 28 22 5c  (p);.  printf("\
4060: 6e 22 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23  n");.}.#endif..#
4070: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
4080: 55 47 0a 23 20 20 64 65 66 69 6e 65 20 52 45 47  UG.#  define REG
4090: 49 53 54 45 52 5f 54 52 41 43 45 28 52 2c 4d 29  ISTER_TRACE(R,M)
40a0: 20 69 66 28 64 62 2d 3e 66 6c 61 67 73 26 53 51   if(db->flags&SQ
40b0: 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 29 72  LITE_VdbeTrace)r
40c0: 65 67 69 73 74 65 72 54 72 61 63 65 28 52 2c 4d  egisterTrace(R,M
40d0: 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e  ).#else.#  defin
40e0: 65 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45  e REGISTER_TRACE
40f0: 28 52 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 0a 23  (R,M).#endif...#
4100: 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49  ifdef VDBE_PROFI
4110: 4c 45 0a 0a 2f 2a 20 0a 2a 2a 20 68 77 74 69 6d  LE../* .** hwtim
4120: 65 2e 68 20 63 6f 6e 74 61 69 6e 73 20 69 6e 6c  e.h contains inl
4130: 69 6e 65 20 61 73 73 65 6d 62 6c 65 72 20 63 6f  ine assembler co
4140: 64 65 20 66 6f 72 20 69 6d 70 6c 65 6d 65 6e 74  de for implement
4150: 69 6e 67 20 0a 2a 2a 20 68 69 67 68 2d 70 65 72  ing .** high-per
4160: 66 6f 72 6d 61 6e 63 65 20 74 69 6d 69 6e 67 20  formance timing 
4170: 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a 23 69 6e  routines..*/.#in
4180: 63 6c 75 64 65 20 22 68 77 74 69 6d 65 2e 68 22  clude "hwtime.h"
4190: 0a 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  ..#endif..#ifnde
41a0: 66 20 4e 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 54  f NDEBUG./*.** T
41b0: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  his function is 
41c0: 6f 6e 6c 79 20 63 61 6c 6c 65 64 20 66 72 6f 6d  only called from
41d0: 20 77 69 74 68 69 6e 20 61 6e 20 61 73 73 65 72   within an asser
41e0: 74 28 29 20 65 78 70 72 65 73 73 69 6f 6e 2e 20  t() expression. 
41f0: 49 74 0a 2a 2a 20 63 68 65 63 6b 73 20 74 68 61  It.** checks tha
4200: 74 20 74 68 65 20 73 71 6c 69 74 65 33 2e 6e 54  t the sqlite3.nT
4210: 72 61 6e 73 61 63 74 69 6f 6e 20 76 61 72 69 61  ransaction varia
4220: 62 6c 65 20 69 73 20 63 6f 72 72 65 63 74 6c 79  ble is correctly
4230: 20 73 65 74 20 74 6f 0a 2a 2a 20 74 68 65 20 6e   set to.** the n
4240: 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61  umber of non-tra
4250: 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69  nsaction savepoi
4260: 6e 74 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e  nts currently in
4270: 20 74 68 65 20 0a 2a 2a 20 6c 69 6e 6b 65 64 20   the .** linked 
4280: 6c 69 73 74 20 73 74 61 72 74 69 6e 67 20 61 74  list starting at
4290: 20 73 71 6c 69 74 65 33 2e 70 53 61 76 65 70 6f   sqlite3.pSavepo
42a0: 69 6e 74 2e 0a 2a 2a 20 0a 2a 2a 20 55 73 61 67  int..** .** Usag
42b0: 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73  e:.**.**     ass
42c0: 65 72 74 28 20 63 68 65 63 6b 53 61 76 65 70 6f  ert( checkSavepo
42d0: 69 6e 74 43 6f 75 6e 74 28 64 62 29 20 29 3b 0a  intCount(db) );.
42e0: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 63 68  */.static int ch
42f0: 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e  eckSavepointCoun
4300: 74 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a  t(sqlite3 *db){.
4310: 20 20 69 6e 74 20 6e 20 3d 20 30 3b 0a 20 20 53    int n = 0;.  S
4320: 61 76 65 70 6f 69 6e 74 20 2a 70 3b 0a 20 20 66  avepoint *p;.  f
4330: 6f 72 28 70 3d 64 62 2d 3e 70 53 61 76 65 70 6f  or(p=db->pSavepo
4340: 69 6e 74 3b 20 70 3b 20 70 3d 70 2d 3e 70 4e 65  int; p; p=p->pNe
4350: 78 74 29 20 6e 2b 2b 3b 0a 20 20 61 73 73 65 72  xt) n++;.  asser
4360: 74 28 20 6e 3d 3d 28 64 62 2d 3e 6e 53 61 76 65  t( n==(db->nSave
4370: 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 69 73 54 72  point + db->isTr
4380: 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69  ansactionSavepoi
4390: 6e 74 29 20 29 3b 0a 20 20 72 65 74 75 72 6e 20  nt) );.  return 
43a0: 31 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  1;.}.#endif../*.
43b0: 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 72 65  ** Return the re
43c0: 67 69 73 74 65 72 20 6f 66 20 70 4f 70 2d 3e 70  gister of pOp->p
43d0: 32 20 61 66 74 65 72 20 66 69 72 73 74 20 70 72  2 after first pr
43e0: 65 70 61 72 69 6e 67 20 69 74 20 74 6f 20 62 65  eparing it to be
43f0: 0a 2a 2a 20 6f 76 65 72 77 72 69 74 74 65 6e 20  .** overwritten 
4400: 77 69 74 68 20 61 6e 20 69 6e 74 65 67 65 72 20  with an integer 
4410: 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63  value..*/.static
4420: 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45   SQLITE_NOINLINE
4430: 20 4d 65 6d 20 2a 6f 75 74 32 50 72 65 72 65 6c   Mem *out2Prerel
4440: 65 61 73 65 57 69 74 68 43 6c 65 61 72 28 4d 65  easeWithClear(Me
4450: 6d 20 2a 70 4f 75 74 29 7b 0a 20 20 73 71 6c 69  m *pOut){.  sqli
4460: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
4470: 6c 28 70 4f 75 74 29 3b 0a 20 20 70 4f 75 74 2d  l(pOut);.  pOut-
4480: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
4490: 3b 0a 20 20 72 65 74 75 72 6e 20 70 4f 75 74 3b  ;.  return pOut;
44a0: 0a 7d 0a 73 74 61 74 69 63 20 4d 65 6d 20 2a 6f  .}.static Mem *o
44b0: 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 56 64  ut2Prerelease(Vd
44c0: 62 65 20 2a 70 2c 20 56 64 62 65 4f 70 20 2a 70  be *p, VdbeOp *p
44d0: 4f 70 29 7b 0a 20 20 4d 65 6d 20 2a 70 4f 75 74  Op){.  Mem *pOut
44e0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
44f0: 3e 70 32 3e 30 20 29 3b 0a 20 20 61 73 73 65 72  >p2>0 );.  asser
4500: 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e  t( pOp->p2<=(p->
4510: 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
4520: 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 20 3d  sor) );.  pOut =
4530: 20 26 70 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70   &p->aMem[pOp->p
4540: 32 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f  2];.  memAboutTo
4550: 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b  Change(p, pOut);
4560: 0a 20 20 69 66 28 20 56 64 62 65 4d 65 6d 44 79  .  if( VdbeMemDy
4570: 6e 61 6d 69 63 28 70 4f 75 74 29 20 29 7b 20 2f  namic(pOut) ){ /
4580: 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49 46  *OPTIMIZATION-IF
4590: 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20 72 65 74  -FALSE*/.    ret
45a0: 75 72 6e 20 6f 75 74 32 50 72 65 72 65 6c 65 61  urn out2Prerelea
45b0: 73 65 57 69 74 68 43 6c 65 61 72 28 70 4f 75 74  seWithClear(pOut
45c0: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
45d0: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
45e0: 4d 5f 49 6e 74 3b 0a 20 20 20 20 72 65 74 75 72  M_Int;.    retur
45f0: 6e 20 70 4f 75 74 3b 0a 20 20 7d 0a 7d 0a 0a 0a  n pOut;.  }.}...
4600: 2f 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 61 73  /*.** Execute as
4610: 20 6d 75 63 68 20 6f 66 20 61 20 56 44 42 45 20   much of a VDBE 
4620: 70 72 6f 67 72 61 6d 20 61 73 20 77 65 20 63 61  program as we ca
4630: 6e 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20 74 68  n..** This is th
4640: 65 20 63 6f 72 65 20 6f 66 20 73 71 6c 69 74 65  e core of sqlite
4650: 33 5f 73 74 65 70 28 29 2e 20 20 0a 2a 2f 0a 69  3_step().  .*/.i
4660: 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 45 78  nt sqlite3VdbeEx
4670: 65 63 28 0a 20 20 56 64 62 65 20 2a 70 20 20 20  ec(.  Vdbe *p   
4680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4690: 20 2f 2a 20 54 68 65 20 56 44 42 45 20 2a 2f 0a   /* The VDBE */.
46a0: 29 7b 0a 20 20 4f 70 20 2a 61 4f 70 20 3d 20 70  ){.  Op *aOp = p
46b0: 2d 3e 61 4f 70 3b 20 20 20 20 20 20 20 20 20 20  ->aOp;          
46c0: 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4f  /* Copy of p->aO
46d0: 70 20 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70 20 3d  p */.  Op *pOp =
46e0: 20 61 4f 70 3b 20 20 20 20 20 20 20 20 20 20 20   aOp;           
46f0: 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 6f 70 65    /* Current ope
4700: 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 20 64 65  ration */.#if de
4710: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
4720: 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 56  UG) || defined(V
4730: 44 42 45 5f 50 52 4f 46 49 4c 45 29 0a 20 20 4f  DBE_PROFILE).  O
4740: 70 20 2a 70 4f 72 69 67 4f 70 3b 20 20 20 20 20  p *pOrigOp;     
4750: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
4760: 75 65 20 6f 66 20 70 4f 70 20 61 74 20 74 68 65  ue of pOp at the
4770: 20 74 6f 70 20 6f 66 20 74 68 65 20 6c 6f 6f 70   top of the loop
4780: 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 64 65   */.#endif.#ifde
4790: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
47a0: 20 69 6e 74 20 6e 45 78 74 72 61 44 65 6c 65 74   int nExtraDelet
47b0: 65 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 56  e = 0;      /* V
47c0: 65 72 69 66 69 65 73 20 46 4f 52 44 45 4c 45 54  erifies FORDELET
47d0: 45 20 61 6e 64 20 41 55 58 44 45 4c 45 54 45 20  E and AUXDELETE 
47e0: 66 6c 61 67 73 20 2a 2f 0a 23 65 6e 64 69 66 0a  flags */.#endif.
47f0: 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49 54    int rc = SQLIT
4800: 45 5f 4f 4b 3b 20 20 20 20 20 20 20 20 2f 2a 20  E_OK;        /* 
4810: 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20  Value to return 
4820: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  */.  sqlite3 *db
4830: 20 3d 20 70 2d 3e 64 62 3b 20 20 20 20 20 20 20   = p->db;       
4840: 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20  /* The database 
4850: 2a 2f 0a 20 20 75 38 20 72 65 73 65 74 53 63 68  */.  u8 resetSch
4860: 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 30 3b 20  emaOnFault = 0; 
4870: 2f 2a 20 52 65 73 65 74 20 73 63 68 65 6d 61 20  /* Reset schema 
4880: 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20 69  after an error i
4890: 66 20 70 6f 73 69 74 69 76 65 20 2a 2f 0a 20 20  f positive */.  
48a0: 75 38 20 65 6e 63 6f 64 69 6e 67 20 3d 20 45 4e  u8 encoding = EN
48b0: 43 28 64 62 29 3b 20 20 20 20 20 2f 2a 20 54 68  C(db);     /* Th
48c0: 65 20 64 61 74 61 62 61 73 65 20 65 6e 63 6f 64  e database encod
48d0: 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69 43 6f  ing */.  int iCo
48e0: 6d 70 61 72 65 20 3d 20 30 3b 20 20 20 20 20 20  mpare = 0;      
48f0: 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66      /* Result of
4900: 20 6c 61 73 74 20 4f 50 5f 43 6f 6d 70 61 72 65   last OP_Compare
4910: 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a 20 20   operation */.  
4920: 75 6e 73 69 67 6e 65 64 20 6e 56 6d 53 74 65 70  unsigned nVmStep
4930: 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 4e 75   = 0;      /* Nu
4940: 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c 20  mber of virtual 
4950: 6d 61 63 68 69 6e 65 20 73 74 65 70 73 20 2a 2f  machine steps */
4960: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
4970: 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41  OMIT_PROGRESS_CA
4980: 4c 4c 42 41 43 4b 0a 20 20 75 6e 73 69 67 6e 65  LLBACK.  unsigne
4990: 64 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74  d nProgressLimit
49a0: 20 3d 20 30 3b 2f 2a 20 49 6e 76 6f 6b 65 20 78   = 0;/* Invoke x
49b0: 50 72 6f 67 72 65 73 73 28 29 20 77 68 65 6e 20  Progress() when 
49c0: 6e 56 6d 53 74 65 70 20 72 65 61 63 68 65 73 20  nVmStep reaches 
49d0: 74 68 69 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  this */.#endif. 
49e0: 20 4d 65 6d 20 2a 61 4d 65 6d 20 3d 20 70 2d 3e   Mem *aMem = p->
49f0: 61 4d 65 6d 3b 20 20 20 20 20 20 20 2f 2a 20 43  aMem;       /* C
4a00: 6f 70 79 20 6f 66 20 70 2d 3e 61 4d 65 6d 20 2a  opy of p->aMem *
4a10: 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 31 20 3d 20  /.  Mem *pIn1 = 
4a20: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  0;             /
4a30: 2a 20 31 73 74 20 69 6e 70 75 74 20 6f 70 65 72  * 1st input oper
4a40: 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49  and */.  Mem *pI
4a50: 6e 32 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  n2 = 0;         
4a60: 20 20 20 20 2f 2a 20 32 6e 64 20 69 6e 70 75 74      /* 2nd input
4a70: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65   operand */.  Me
4a80: 6d 20 2a 70 49 6e 33 20 3d 20 30 3b 20 20 20 20  m *pIn3 = 0;    
4a90: 20 20 20 20 20 20 20 20 20 2f 2a 20 33 72 64 20           /* 3rd 
4aa0: 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f  input operand */
4ab0: 0a 20 20 4d 65 6d 20 2a 70 4f 75 74 20 3d 20 30  .  Mem *pOut = 0
4ac0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
4ad0: 20 4f 75 74 70 75 74 20 6f 70 65 72 61 6e 64 20   Output operand 
4ae0: 2a 2f 0a 20 20 69 6e 74 20 2a 61 50 65 72 6d 75  */.  int *aPermu
4af0: 74 65 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  te = 0;         
4b00: 2f 2a 20 50 65 72 6d 75 74 61 74 69 6f 6e 20 6f  /* Permutation o
4b10: 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 4f 50  f columns for OP
4b20: 5f 43 6f 6d 70 61 72 65 20 2a 2f 0a 20 20 69 36  _Compare */.  i6
4b30: 34 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 64 62  4 lastRowid = db
4b40: 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 20 20 2f 2a  ->lastRowid;  /*
4b50: 20 53 61 76 65 64 20 76 61 6c 75 65 20 6f 66 20   Saved value of 
4b60: 74 68 65 20 6c 61 73 74 20 69 6e 73 65 72 74 20  the last insert 
4b70: 52 4f 57 49 44 20 2a 2f 0a 20 20 69 6e 74 20 63  ROWID */.  int c
4b80: 6d 70 52 65 73 3b 20 20 20 20 20 20 20 20 20 20  mpRes;          
4b90: 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20        /* Result 
4ba0: 6f 66 20 6c 61 73 74 20 63 6f 6d 70 61 72 69 73  of last comparis
4bb0: 6f 6e 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a  on operation */.
4bc0: 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46  #ifdef VDBE_PROF
4bd0: 49 4c 45 0a 20 20 75 36 34 20 73 74 61 72 74 3b  ILE.  u64 start;
4be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4bf0: 20 2f 2a 20 43 50 55 20 63 6c 6f 63 6b 20 63 6f   /* CPU clock co
4c00: 75 6e 74 20 61 74 20 73 74 61 72 74 20 6f 66 20  unt at start of 
4c10: 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66  opcode */.#endif
4c20: 0a 20 20 2f 2a 2a 2a 20 49 4e 53 45 52 54 20 53  .  /*** INSERT S
4c30: 54 41 43 4b 20 55 4e 49 4f 4e 20 48 45 52 45 20  TACK UNION HERE 
4c40: 2a 2a 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20  ***/..  assert( 
4c50: 70 2d 3e 6d 61 67 69 63 3d 3d 56 44 42 45 5f 4d  p->magic==VDBE_M
4c60: 41 47 49 43 5f 52 55 4e 20 29 3b 20 20 2f 2a 20  AGIC_RUN );  /* 
4c70: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 76  sqlite3_step() v
4c80: 65 72 69 66 69 65 73 20 74 68 69 73 20 2a 2f 0a  erifies this */.
4c90: 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 6e 74    sqlite3VdbeEnt
4ca0: 65 72 28 70 29 3b 0a 20 20 69 66 28 20 70 2d 3e  er(p);.  if( p->
4cb0: 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  rc==SQLITE_NOMEM
4cc0: 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20   ){.    /* This 
4cd0: 68 61 70 70 65 6e 73 20 69 66 20 61 20 6d 61 6c  happens if a mal
4ce0: 6c 6f 63 28 29 20 69 6e 73 69 64 65 20 61 20 63  loc() inside a c
4cf0: 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33 5f 63  all to sqlite3_c
4d00: 6f 6c 75 6d 6e 5f 74 65 78 74 28 29 20 6f 72 0a  olumn_text() or.
4d10: 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f 63      ** sqlite3_c
4d20: 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 28 29 20 66  olumn_text16() f
4d30: 61 69 6c 65 64 2e 20 20 2a 2f 0a 20 20 20 20 67  ailed.  */.    g
4d40: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
4d50: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 63 3d    assert( p->rc=
4d60: 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70  =SQLITE_OK || (p
4d70: 2d 3e 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49  ->rc&0xff)==SQLI
4d80: 54 45 5f 42 55 53 59 20 29 3b 0a 20 20 61 73 73  TE_BUSY );.  ass
4d90: 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65  ert( p->bIsReade
4da0: 72 20 7c 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  r || p->readOnly
4db0: 21 3d 30 20 29 3b 0a 20 20 70 2d 3e 72 63 20 3d  !=0 );.  p->rc =
4dc0: 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 70 2d   SQLITE_OK;.  p-
4dd0: 3e 69 43 75 72 72 65 6e 74 54 69 6d 65 20 3d 20  >iCurrentTime = 
4de0: 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  0;.  assert( p->
4df0: 65 78 70 6c 61 69 6e 3d 3d 30 20 29 3b 0a 20 20  explain==0 );.  
4e00: 70 2d 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20  p->pResultSet = 
4e10: 30 3b 0a 20 20 64 62 2d 3e 62 75 73 79 48 61 6e  0;.  db->busyHan
4e20: 64 6c 65 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a  dler.nBusy = 0;.
4e30: 20 20 69 66 28 20 64 62 2d 3e 75 31 2e 69 73 49    if( db->u1.isI
4e40: 6e 74 65 72 72 75 70 74 65 64 20 29 20 67 6f 74  nterrupted ) got
4e50: 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69  o abort_due_to_i
4e60: 6e 74 65 72 72 75 70 74 3b 0a 20 20 73 71 6c 69  nterrupt;.  sqli
4e70: 74 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71  te3VdbeIOTraceSq
4e80: 6c 28 70 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  l(p);.#ifndef SQ
4e90: 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45  LITE_OMIT_PROGRE
4ea0: 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 66  SS_CALLBACK.  if
4eb0: 28 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 20  ( db->xProgress 
4ec0: 29 7b 0a 20 20 20 20 75 33 32 20 69 50 72 69 6f  ){.    u32 iPrio
4ed0: 72 20 3d 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b  r = p->aCounter[
4ee0: 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55  SQLITE_STMTSTATU
4ef0: 53 5f 56 4d 5f 53 54 45 50 5d 3b 0a 20 20 20 20  S_VM_STEP];.    
4f00: 61 73 73 65 72 74 28 20 30 20 3c 20 64 62 2d 3e  assert( 0 < db->
4f10: 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 29 3b 0a  nProgressOps );.
4f20: 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d      nProgressLim
4f30: 69 74 20 3d 20 64 62 2d 3e 6e 50 72 6f 67 72 65  it = db->nProgre
4f40: 73 73 4f 70 73 20 2d 20 28 69 50 72 69 6f 72 20  ssOps - (iPrior 
4f50: 25 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f  % db->nProgressO
4f60: 70 73 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  ps);.  }.#endif.
4f70: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
4f80: 42 55 47 0a 20 20 73 71 6c 69 74 65 33 42 65 67  BUG.  sqlite3Beg
4f90: 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29  inBenignMalloc()
4fa0: 3b 0a 20 20 69 66 28 20 70 2d 3e 70 63 3d 3d 30  ;.  if( p->pc==0
4fb0: 0a 20 20 20 26 26 20 28 70 2d 3e 64 62 2d 3e 66  .   && (p->db->f
4fc0: 6c 61 67 73 20 26 20 28 53 51 4c 49 54 45 5f 56  lags & (SQLITE_V
4fd0: 64 62 65 4c 69 73 74 69 6e 67 7c 53 51 4c 49 54  dbeListing|SQLIT
4fe0: 45 5f 56 64 62 65 45 51 50 7c 53 51 4c 49 54 45  E_VdbeEQP|SQLITE
4ff0: 5f 56 64 62 65 54 72 61 63 65 29 29 21 3d 30 0a  _VdbeTrace))!=0.
5000: 20 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a    ){.    int i;.
5010: 20 20 20 20 69 6e 74 20 6f 6e 63 65 20 3d 20 31      int once = 1
5020: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
5030: 65 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20  ePrintSql(p);.  
5040: 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61    if( p->db->fla
5050: 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65  gs & SQLITE_Vdbe
5060: 4c 69 73 74 69 6e 67 20 29 7b 0a 20 20 20 20 20  Listing ){.     
5070: 20 70 72 69 6e 74 66 28 22 56 44 42 45 20 50 72   printf("VDBE Pr
5080: 6f 67 72 61 6d 20 4c 69 73 74 69 6e 67 3a 5c 6e  ogram Listing:\n
5090: 22 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d  ");.      for(i=
50a0: 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b  0; i<p->nOp; i++
50b0: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
50c0: 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74  e3VdbePrintOp(st
50d0: 64 6f 75 74 2c 20 69 2c 20 26 61 4f 70 5b 69 5d  dout, i, &aOp[i]
50e0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
50f0: 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e  .    if( p->db->
5100: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56  flags & SQLITE_V
5110: 64 62 65 45 51 50 20 29 7b 0a 20 20 20 20 20 20  dbeEQP ){.      
5120: 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f  for(i=0; i<p->nO
5130: 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  p; i++){.       
5140: 20 69 66 28 20 61 4f 70 5b 69 5d 2e 6f 70 63 6f   if( aOp[i].opco
5150: 64 65 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e 20 29  de==OP_Explain )
5160: 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  {.          if( 
5170: 6f 6e 63 65 20 29 20 70 72 69 6e 74 66 28 22 56  once ) printf("V
5180: 44 42 45 20 51 75 65 72 79 20 50 6c 61 6e 3a 5c  DBE Query Plan:\
5190: 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70  n");.          p
51a0: 72 69 6e 74 66 28 22 25 73 5c 6e 22 2c 20 61 4f  rintf("%s\n", aO
51b0: 70 5b 69 5d 2e 70 34 2e 7a 29 3b 0a 20 20 20 20  p[i].p4.z);.    
51c0: 20 20 20 20 20 20 6f 6e 63 65 20 3d 20 30 3b 0a        once = 0;.
51d0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
51e0: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  }.    }.    if( 
51f0: 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53  p->db->flags & S
5200: 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 20  QLITE_VdbeTrace 
5210: 29 20 20 70 72 69 6e 74 66 28 22 56 44 42 45 20  )  printf("VDBE 
5220: 54 72 61 63 65 3a 5c 6e 22 29 3b 0a 20 20 7d 0a  Trace:\n");.  }.
5230: 20 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69    sqlite3EndBeni
5240: 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 23 65 6e 64  gnMalloc();.#end
5250: 69 66 0a 20 20 66 6f 72 28 70 4f 70 3d 26 61 4f  if.  for(pOp=&aO
5260: 70 5b 70 2d 3e 70 63 5d 3b 20 31 3b 20 70 4f 70  p[p->pc]; 1; pOp
5270: 2b 2b 29 7b 0a 20 20 20 20 2f 2a 20 45 72 72 6f  ++){.    /* Erro
5280: 72 73 20 61 72 65 20 64 65 74 65 63 74 65 64 20  rs are detected 
5290: 62 79 20 69 6e 64 69 76 69 64 75 61 6c 20 6f 70  by individual op
52a0: 63 6f 64 65 73 2c 20 77 69 74 68 20 61 6e 20 69  codes, with an i
52b0: 6d 6d 65 64 69 61 74 65 0a 20 20 20 20 2a 2a 20  mmediate.    ** 
52c0: 6a 75 6d 70 73 20 74 6f 20 61 62 6f 72 74 5f 64  jumps to abort_d
52d0: 75 65 5f 74 6f 5f 65 72 72 6f 72 2e 20 2a 2f 0a  ue_to_error. */.
52e0: 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d      assert( rc==
52f0: 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 0a 20 20  SQLITE_OK );..  
5300: 20 20 61 73 73 65 72 74 28 20 70 4f 70 3e 3d 61    assert( pOp>=a
5310: 4f 70 20 26 26 20 70 4f 70 3c 26 61 4f 70 5b 70  Op && pOp<&aOp[p
5320: 2d 3e 6e 4f 70 5d 29 3b 0a 23 69 66 64 65 66 20  ->nOp]);.#ifdef 
5330: 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20  VDBE_PROFILE.   
5340: 20 73 74 61 72 74 20 3d 20 73 71 6c 69 74 65 33   start = sqlite3
5350: 48 77 74 69 6d 65 28 29 3b 0a 23 65 6e 64 69 66  Hwtime();.#endif
5360: 0a 20 20 20 20 6e 56 6d 53 74 65 70 2b 2b 3b 0a  .    nVmStep++;.
5370: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
5380: 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54  ABLE_STMT_SCANST
5390: 41 54 55 53 0a 20 20 20 20 69 66 28 20 70 2d 3e  ATUS.    if( p->
53a0: 61 6e 45 78 65 63 20 29 20 70 2d 3e 61 6e 45 78  anExec ) p->anEx
53b0: 65 63 5b 28 69 6e 74 29 28 70 4f 70 2d 61 4f 70  ec[(int)(pOp-aOp
53c0: 29 5d 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20  )]++;.#endif..  
53d0: 20 20 2f 2a 20 4f 6e 6c 79 20 61 6c 6c 6f 77 20    /* Only allow 
53e0: 74 72 61 63 69 6e 67 20 69 66 20 53 51 4c 49 54  tracing if SQLIT
53f0: 45 5f 44 45 42 55 47 20 69 73 20 64 65 66 69 6e  E_DEBUG is defin
5400: 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65  ed..    */.#ifde
5410: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
5420: 20 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73     if( db->flags
5430: 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72   & SQLITE_VdbeTr
5440: 61 63 65 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ace ){.      sql
5450: 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28  ite3VdbePrintOp(
5460: 73 74 64 6f 75 74 2c 20 28 69 6e 74 29 28 70 4f  stdout, (int)(pO
5470: 70 20 2d 20 61 4f 70 29 2c 20 70 4f 70 29 3b 0a  p - aOp), pOp);.
5480: 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20      }.#endif.   
5490: 20 20 20 0a 0a 20 20 20 20 2f 2a 20 43 68 65 63     ..    /* Chec
54a0: 6b 20 74 6f 20 73 65 65 20 69 66 20 77 65 20 6e  k to see if we n
54b0: 65 65 64 20 74 6f 20 73 69 6d 75 6c 61 74 65 20  eed to simulate 
54c0: 61 6e 20 69 6e 74 65 72 72 75 70 74 2e 20 20 54  an interrupt.  T
54d0: 68 69 73 20 6f 6e 6c 79 20 68 61 70 70 65 6e 73  his only happens
54e0: 0a 20 20 20 20 2a 2a 20 69 66 20 77 65 20 68 61  .    ** if we ha
54f0: 76 65 20 61 20 73 70 65 63 69 61 6c 20 74 65 73  ve a special tes
5500: 74 20 62 75 69 6c 64 2e 0a 20 20 20 20 2a 2f 0a  t build..    */.
5510: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
5520: 53 54 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74  ST.    if( sqlit
5530: 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75  e3_interrupt_cou
5540: 6e 74 3e 30 20 29 7b 0a 20 20 20 20 20 20 73 71  nt>0 ){.      sq
5550: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f  lite3_interrupt_
5560: 63 6f 75 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 69  count--;.      i
5570: 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  f( sqlite3_inter
5580: 72 75 70 74 5f 63 6f 75 6e 74 3d 3d 30 20 29 7b  rupt_count==0 ){
5590: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
55a0: 5f 69 6e 74 65 72 72 75 70 74 28 64 62 29 3b 0a  _interrupt(db);.
55b0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65        }.    }.#e
55c0: 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 53 61 6e  ndif..    /* San
55d0: 69 74 79 20 63 68 65 63 6b 69 6e 67 20 6f 6e 20  ity checking on 
55e0: 6f 74 68 65 72 20 6f 70 65 72 61 6e 64 73 20 2a  other operands *
55f0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
5600: 44 45 42 55 47 0a 20 20 20 20 7b 0a 20 20 20 20  DEBUG.    {.    
5610: 20 20 75 38 20 6f 70 50 72 6f 70 65 72 74 79 20    u8 opProperty 
5620: 3d 20 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50  = sqlite3OpcodeP
5630: 72 6f 70 65 72 74 79 5b 70 4f 70 2d 3e 6f 70 63  roperty[pOp->opc
5640: 6f 64 65 5d 3b 0a 20 20 20 20 20 20 69 66 28 20  ode];.      if( 
5650: 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50  (opProperty & OP
5660: 46 4c 47 5f 49 4e 31 29 21 3d 30 20 29 7b 0a 20  FLG_IN1)!=0 ){. 
5670: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
5680: 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 20 20  Op->p1>0 );.    
5690: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
56a0: 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  >p1<=(p->nMem+1 
56b0: 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  - p->nCursor) );
56c0: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
56d0: 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65   memIsValid(&aMe
56e0: 6d 5b 70 4f 70 2d 3e 70 31 5d 29 20 29 3b 0a 20  m[pOp->p1]) );. 
56f0: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73         assert( s
5700: 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d  qlite3VdbeCheckM
5710: 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 26 61 4d  emInvariants(&aM
5720: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 20 29 3b 0a  em[pOp->p1]) );.
5730: 20 20 20 20 20 20 20 20 52 45 47 49 53 54 45 52          REGISTER
5740: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20  _TRACE(pOp->p1, 
5750: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 3b  &aMem[pOp->p1]);
5760: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
5770: 66 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26  f( (opProperty &
5780: 20 4f 50 46 4c 47 5f 49 4e 32 29 21 3d 30 20 29   OPFLG_IN2)!=0 )
5790: 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
57a0: 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20  ( pOp->p2>0 );. 
57b0: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
57c0: 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p2<=(p->nMem
57d0: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
57e0: 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
57f0: 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
5800: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 20 29  aMem[pOp->p2]) )
5810: 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
5820: 28 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65  ( sqlite3VdbeChe
5830: 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28  ckMemInvariants(
5840: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 20  &aMem[pOp->p2]) 
5850: 29 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49 53  );.        REGIS
5860: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
5870: 32 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  2, &aMem[pOp->p2
5880: 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ]);.      }.    
5890: 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72 74    if( (opPropert
58a0: 79 20 26 20 4f 50 46 4c 47 5f 49 4e 33 29 21 3d  y & OPFLG_IN3)!=
58b0: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  0 ){.        ass
58c0: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29  ert( pOp->p3>0 )
58d0: 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
58e0: 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  ( pOp->p3<=(p->n
58f0: 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
5900: 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61  or) );.        a
5910: 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
5920: 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  d(&aMem[pOp->p3]
5930: 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  ) );.        ass
5940: 65 72 74 28 20 73 71 6c 69 74 65 33 56 64 62 65  ert( sqlite3Vdbe
5950: 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e  CheckMemInvarian
5960: 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  ts(&aMem[pOp->p3
5970: 5d 29 20 29 3b 0a 20 20 20 20 20 20 20 20 52 45  ]) );.        RE
5980: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
5990: 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ->p3, &aMem[pOp-
59a0: 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20  >p3]);.      }. 
59b0: 20 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70       if( (opProp
59c0: 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 4f 55 54  erty & OPFLG_OUT
59d0: 32 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  2)!=0 ){.       
59e0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
59f0: 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  >0 );.        as
5a00: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28  sert( pOp->p2<=(
5a10: 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
5a20: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20  Cursor) );.     
5a30: 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
5a40: 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70  nge(p, &aMem[pOp
5a50: 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 20 20 7d 0a  ->p2]);.      }.
5a60: 20 20 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f        if( (opPro
5a70: 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 4f 55  perty & OPFLG_OU
5a80: 54 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  T3)!=0 ){.      
5a90: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
5aa0: 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61  3>0 );.        a
5ab0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d  ssert( pOp->p3<=
5ac0: 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
5ad0: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20  nCursor) );.    
5ae0: 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
5af0: 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f  ange(p, &aMem[pO
5b00: 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 7d  p->p3]);.      }
5b10: 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 23 69  .    }.#endif.#i
5b20: 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
5b30: 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e  _DEBUG) || defin
5b40: 65 64 28 56 44 42 45 5f 50 52 4f 46 49 4c 45 29  ed(VDBE_PROFILE)
5b50: 0a 20 20 20 20 70 4f 72 69 67 4f 70 20 3d 20 70  .    pOrigOp = p
5b60: 4f 70 3b 0a 23 65 6e 64 69 66 0a 20 20 0a 20 20  Op;.#endif.  .  
5b70: 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f    switch( pOp->o
5b80: 70 63 6f 64 65 20 29 7b 0a 0a 2f 2a 2a 2a 2a 2a  pcode ){../*****
5b90: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5ba0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5bb0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5bc0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5bd0: 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57 68 61 74  ********.** What
5be0: 20 66 6f 6c 6c 6f 77 73 20 69 73 20 61 20 6d 61   follows is a ma
5bf0: 73 73 69 76 65 20 73 77 69 74 63 68 20 73 74 61  ssive switch sta
5c00: 74 65 6d 65 6e 74 20 77 68 65 72 65 20 65 61 63  tement where eac
5c10: 68 20 63 61 73 65 20 69 6d 70 6c 65 6d 65 6e 74  h case implement
5c20: 73 20 61 0a 2a 2a 20 73 65 70 61 72 61 74 65 20  s a.** separate 
5c30: 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e 20 74  instruction in t
5c40: 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  he virtual machi
5c50: 6e 65 2e 20 20 49 66 20 77 65 20 66 6f 6c 6c 6f  ne.  If we follo
5c60: 77 20 74 68 65 20 75 73 75 61 6c 0a 2a 2a 20 69  w the usual.** i
5c70: 6e 64 65 6e 74 61 74 69 6f 6e 20 63 6f 6e 76 65  ndentation conve
5c80: 6e 74 69 6f 6e 73 2c 20 65 61 63 68 20 63 61 73  ntions, each cas
5c90: 65 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 64 65  e should be inde
5ca0: 6e 74 65 64 20 62 79 20 36 20 73 70 61 63 65 73  nted by 6 spaces
5cb0: 2e 20 20 42 75 74 0a 2a 2a 20 74 68 61 74 20 69  .  But.** that i
5cc0: 73 20 61 20 6c 6f 74 20 6f 66 20 77 61 73 74 65  s a lot of waste
5cd0: 64 20 73 70 61 63 65 20 6f 6e 20 74 68 65 20 6c  d space on the l
5ce0: 65 66 74 20 6d 61 72 67 69 6e 2e 20 20 53 6f 20  eft margin.  So 
5cf0: 74 68 65 20 63 6f 64 65 20 77 69 74 68 69 6e 0a  the code within.
5d00: 2a 2a 20 74 68 65 20 73 77 69 74 63 68 20 73 74  ** the switch st
5d10: 61 74 65 6d 65 6e 74 20 77 69 6c 6c 20 62 72 65  atement will bre
5d20: 61 6b 20 77 69 74 68 20 63 6f 6e 76 65 6e 74 69  ak with conventi
5d30: 6f 6e 20 61 6e 64 20 62 65 20 66 6c 75 73 68 2d  on and be flush-
5d40: 6c 65 66 74 2e 20 41 6e 6f 74 68 65 72 0a 2a 2a  left. Another.**
5d50: 20 62 69 67 20 63 6f 6d 6d 65 6e 74 20 28 73 69   big comment (si
5d60: 6d 69 6c 61 72 20 74 6f 20 74 68 69 73 20 6f 6e  milar to this on
5d70: 65 29 20 77 69 6c 6c 20 6d 61 72 6b 20 74 68 65  e) will mark the
5d80: 20 70 6f 69 6e 74 20 69 6e 20 74 68 65 20 63 6f   point in the co
5d90: 64 65 20 77 68 65 72 65 0a 2a 2a 20 77 65 20 74  de where.** we t
5da0: 72 61 6e 73 69 74 69 6f 6e 20 62 61 63 6b 20 74  ransition back t
5db0: 6f 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61  o normal indenta
5dc0: 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  tion..**.** The 
5dd0: 66 6f 72 6d 61 74 74 69 6e 67 20 6f 66 20 65 61  formatting of ea
5de0: 63 68 20 63 61 73 65 20 69 73 20 69 6d 70 6f 72  ch case is impor
5df0: 74 61 6e 74 2e 20 20 54 68 65 20 6d 61 6b 65 66  tant.  The makef
5e00: 69 6c 65 20 66 6f 72 20 53 51 4c 69 74 65 0a 2a  ile for SQLite.*
5e10: 2a 20 67 65 6e 65 72 61 74 65 73 20 74 77 6f 20  * generates two 
5e20: 43 20 66 69 6c 65 73 20 22 6f 70 63 6f 64 65 73  C files "opcodes
5e30: 2e 68 22 20 61 6e 64 20 22 6f 70 63 6f 64 65 73  .h" and "opcodes
5e40: 2e 63 22 20 62 79 20 73 63 61 6e 6e 69 6e 67 20  .c" by scanning 
5e50: 74 68 69 73 0a 2a 2a 20 66 69 6c 65 20 6c 6f 6f  this.** file loo
5e60: 6b 69 6e 67 20 66 6f 72 20 6c 69 6e 65 73 20 74  king for lines t
5e70: 68 61 74 20 62 65 67 69 6e 20 77 69 74 68 20 22  hat begin with "
5e80: 63 61 73 65 20 4f 50 5f 22 2e 20 20 54 68 65 20  case OP_".  The 
5e90: 6f 70 63 6f 64 65 73 2e 68 20 66 69 6c 65 73 0a  opcodes.h files.
5ea0: 2a 2a 20 77 69 6c 6c 20 62 65 20 66 69 6c 6c 65  ** will be fille
5eb0: 64 20 77 69 74 68 20 23 64 65 66 69 6e 65 73 20  d with #defines 
5ec0: 74 68 61 74 20 67 69 76 65 20 75 6e 69 71 75 65  that give unique
5ed0: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73 20   integer values 
5ee0: 74 6f 20 65 61 63 68 0a 2a 2a 20 6f 70 63 6f 64  to each.** opcod
5ef0: 65 20 61 6e 64 20 74 68 65 20 6f 70 63 6f 64 65  e and the opcode
5f00: 73 2e 63 20 66 69 6c 65 20 69 73 20 66 69 6c 6c  s.c file is fill
5f10: 65 64 20 77 69 74 68 20 61 6e 20 61 72 72 61 79  ed with an array
5f20: 20 6f 66 20 73 74 72 69 6e 67 73 20 77 68 65 72   of strings wher
5f30: 65 0a 2a 2a 20 65 61 63 68 20 73 74 72 69 6e 67  e.** each string
5f40: 20 69 73 20 74 68 65 20 73 79 6d 62 6f 6c 69 63   is the symbolic
5f50: 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 63 6f   name for the co
5f60: 72 72 65 73 70 6f 6e 64 69 6e 67 20 6f 70 63 6f  rresponding opco
5f70: 64 65 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 63  de.  If the.** c
5f80: 61 73 65 20 73 74 61 74 65 6d 65 6e 74 20 69 73  ase statement is
5f90: 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 63   followed by a c
5fa0: 6f 6d 6d 65 6e 74 20 6f 66 20 74 68 65 20 66 6f  omment of the fo
5fb0: 72 6d 20 22 2f 23 20 73 61 6d 65 20 61 73 20 2e  rm "/# same as .
5fc0: 2e 2e 20 23 2f 22 0a 2a 2a 20 74 68 61 74 20 63  .. #/".** that c
5fd0: 6f 6d 6d 65 6e 74 20 69 73 20 75 73 65 64 20 74  omment is used t
5fe0: 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20  o determine the 
5ff0: 70 61 72 74 69 63 75 6c 61 72 20 76 61 6c 75 65  particular value
6000: 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 0a   of the opcode..
6010: 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20 6b 65 79 77  **.** Other keyw
6020: 6f 72 64 73 20 69 6e 20 74 68 65 20 63 6f 6d 6d  ords in the comm
6030: 65 6e 74 20 74 68 61 74 20 66 6f 6c 6c 6f 77 73  ent that follows
6040: 20 65 61 63 68 20 63 61 73 65 20 61 72 65 20 75   each case are u
6050: 73 65 64 20 74 6f 0a 2a 2a 20 63 6f 6e 73 74 72  sed to.** constr
6060: 75 63 74 20 74 68 65 20 4f 50 46 4c 47 5f 49 4e  uct the OPFLG_IN
6070: 49 54 49 41 4c 49 5a 45 52 20 76 61 6c 75 65 20  ITIALIZER value 
6080: 74 68 61 74 20 69 6e 69 74 69 61 6c 69 7a 65 73  that initializes
6090: 20 6f 70 63 6f 64 65 50 72 6f 70 65 72 74 79 5b   opcodeProperty[
60a0: 5d 2e 0a 2a 2a 20 4b 65 79 77 6f 72 64 73 20 69  ]..** Keywords i
60b0: 6e 63 6c 75 64 65 3a 20 69 6e 31 2c 20 69 6e 32  nclude: in1, in2
60c0: 2c 20 69 6e 33 2c 20 6f 75 74 32 2c 20 6f 75 74  , in3, out2, out
60d0: 33 2e 20 20 53 65 65 0a 2a 2a 20 74 68 65 20 6d  3.  See.** the m
60e0: 6b 6f 70 63 6f 64 65 68 2e 61 77 6b 20 73 63 72  kopcodeh.awk scr
60f0: 69 70 74 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ipt for addition
6100: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
6110: 2a 2a 0a 2a 2a 20 44 6f 63 75 6d 65 6e 74 61 74  **.** Documentat
6120: 69 6f 6e 20 61 62 6f 75 74 20 56 44 42 45 20 6f  ion about VDBE o
6130: 70 63 6f 64 65 73 20 69 73 20 67 65 6e 65 72 61  pcodes is genera
6140: 74 65 64 20 62 79 20 73 63 61 6e 6e 69 6e 67 20  ted by scanning 
6150: 74 68 69 73 20 66 69 6c 65 0a 2a 2a 20 66 6f 72  this file.** for
6160: 20 6c 69 6e 65 73 20 6f 66 20 74 68 61 74 20 63   lines of that c
6170: 6f 6e 74 61 69 6e 20 22 4f 70 63 6f 64 65 3a 22  ontain "Opcode:"
6180: 2e 20 20 54 68 61 74 20 6c 69 6e 65 20 61 6e 64  .  That line and
6190: 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 0a   all subsequent.
61a0: 2a 2a 20 63 6f 6d 6d 65 6e 74 20 6c 69 6e 65 73  ** comment lines
61b0: 20 61 72 65 20 75 73 65 64 20 69 6e 20 74 68 65   are used in the
61c0: 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 74   generation of t
61d0: 68 65 20 6f 70 63 6f 64 65 2e 68 74 6d 6c 20 64  he opcode.html d
61e0: 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 0a 2a 2a 20  ocumentation.** 
61f0: 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 55 4d 4d  file..**.** SUMM
6200: 41 52 59 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 46  ARY:.**.**     F
6210: 6f 72 6d 61 74 74 69 6e 67 20 69 73 20 69 6d 70  ormatting is imp
6220: 6f 72 74 61 6e 74 20 74 6f 20 73 63 72 69 70 74  ortant to script
6230: 73 20 74 68 61 74 20 73 63 61 6e 20 74 68 69 73  s that scan this
6240: 20 66 69 6c 65 2e 0a 2a 2a 20 20 20 20 20 44 6f   file..**     Do
6250: 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72 6f   not deviate fro
6260: 6d 20 74 68 65 20 66 6f 72 6d 61 74 74 69 6e 67  m the formatting
6270: 20 73 74 79 6c 65 20 63 75 72 72 65 6e 74 6c 79   style currently
6280: 20 69 6e 20 75 73 65 2e 0a 2a 2a 0a 2a 2a 2a 2a   in use..**.****
6290: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
62a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
62b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
62c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
62d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 20 4f  *********/../* O
62e0: 70 63 6f 64 65 3a 20 20 47 6f 74 6f 20 2a 20 50  pcode:  Goto * P
62f0: 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 6e  2 * * *.**.** An
6300: 20 75 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 6a   unconditional j
6310: 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20 50  ump to address P
6320: 32 2e 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 69  2..** The next i
6330: 6e 73 74 72 75 63 74 69 6f 6e 20 65 78 65 63 75  nstruction execu
6340: 74 65 64 20 77 69 6c 6c 20 62 65 20 0a 2a 2a 20  ted will be .** 
6350: 74 68 65 20 6f 6e 65 20 61 74 20 69 6e 64 65 78  the one at index
6360: 20 50 32 20 66 72 6f 6d 20 74 68 65 20 62 65 67   P2 from the beg
6370: 69 6e 6e 69 6e 67 20 6f 66 0a 2a 2a 20 74 68 65  inning of.** the
6380: 20 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20   program..**.** 
6390: 54 68 65 20 50 31 20 70 61 72 61 6d 65 74 65 72  The P1 parameter
63a0: 20 69 73 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79   is not actually
63b0: 20 75 73 65 64 20 62 79 20 74 68 69 73 20 6f 70   used by this op
63c0: 63 6f 64 65 2e 20 20 48 6f 77 65 76 65 72 2c 20  code.  However, 
63d0: 69 74 0a 2a 2a 20 69 73 20 73 6f 6d 65 74 69 6d  it.** is sometim
63e0: 65 73 20 73 65 74 20 74 6f 20 31 20 69 6e 73 74  es set to 1 inst
63f0: 65 61 64 20 6f 66 20 30 20 61 73 20 61 20 68 69  ead of 0 as a hi
6400: 6e 74 20 74 6f 20 74 68 65 20 63 6f 6d 6d 61 6e  nt to the comman
6410: 64 2d 6c 69 6e 65 20 73 68 65 6c 6c 0a 2a 2a 20  d-line shell.** 
6420: 74 68 61 74 20 74 68 69 73 20 47 6f 74 6f 20 69  that this Goto i
6430: 73 20 74 68 65 20 62 6f 74 74 6f 6d 20 6f 66 20  s the bottom of 
6440: 61 20 6c 6f 6f 70 20 61 6e 64 20 74 68 61 74 20  a loop and that 
6450: 74 68 65 20 6c 69 6e 65 73 20 66 72 6f 6d 20 50  the lines from P
6460: 32 20 64 6f 77 6e 0a 2a 2a 20 74 6f 20 74 68 65  2 down.** to the
6470: 20 63 75 72 72 65 6e 74 20 6c 69 6e 65 20 73 68   current line sh
6480: 6f 75 6c 64 20 62 65 20 69 6e 64 65 6e 74 65 64  ould be indented
6490: 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74   for EXPLAIN out
64a0: 70 75 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  put..*/.case OP_
64b0: 47 6f 74 6f 3a 20 7b 20 20 20 20 20 20 20 20 20  Goto: {         
64c0: 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 6a      /* jump */.j
64d0: 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68  ump_to_p2_and_ch
64e0: 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70  eck_for_interrup
64f0: 74 3a 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b  t:.  pOp = &aOp[
6500: 70 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a 0a 20  pOp->p2 - 1];.. 
6510: 20 2f 2a 20 4f 70 63 6f 64 65 73 20 74 68 61 74   /* Opcodes that
6520: 20 61 72 65 20 75 73 65 64 20 61 73 20 74 68 65   are used as the
6530: 20 62 6f 74 74 6f 6d 20 6f 66 20 61 20 6c 6f 6f   bottom of a loo
6540: 70 20 28 4f 50 5f 4e 65 78 74 2c 20 4f 50 5f 50  p (OP_Next, OP_P
6550: 72 65 76 2c 0a 20 20 2a 2a 20 4f 50 5f 56 4e 65  rev,.  ** OP_VNe
6560: 78 74 2c 20 4f 50 5f 52 6f 77 53 65 74 4e 65 78  xt, OP_RowSetNex
6570: 74 2c 20 6f 72 20 4f 50 5f 53 6f 72 74 65 72 4e  t, or OP_SorterN
6580: 65 78 74 29 20 61 6c 6c 20 6a 75 6d 70 20 68 65  ext) all jump he
6590: 72 65 20 75 70 6f 6e 0a 20 20 2a 2a 20 63 6f 6d  re upon.  ** com
65a0: 70 6c 65 74 69 6f 6e 2e 20 20 43 68 65 63 6b 20  pletion.  Check 
65b0: 74 6f 20 73 65 65 20 69 66 20 73 71 6c 69 74 65  to see if sqlite
65c0: 33 5f 69 6e 74 65 72 72 75 70 74 28 29 20 68 61  3_interrupt() ha
65d0: 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 0a 20 20  s been called.  
65e0: 2a 2a 20 6f 72 20 69 66 20 74 68 65 20 70 72 6f  ** or if the pro
65f0: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 6e  gress callback n
6600: 65 65 64 73 20 74 6f 20 62 65 20 69 6e 76 6f 6b  eeds to be invok
6610: 65 64 2e 20 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  ed. .  **.  ** T
6620: 68 69 73 20 63 6f 64 65 20 75 73 65 73 20 75 6e  his code uses un
6630: 73 74 72 75 63 74 75 72 65 64 20 22 67 6f 74 6f  structured "goto
6640: 22 20 73 74 61 74 65 6d 65 6e 74 73 20 61 6e 64  " statements and
6650: 20 64 6f 65 73 20 6e 6f 74 20 6c 6f 6f 6b 20 63   does not look c
6660: 6c 65 61 6e 2e 0a 20 20 2a 2a 20 42 75 74 20 74  lean..  ** But t
6670: 68 61 74 20 69 73 20 6e 6f 74 20 64 75 65 20 74  hat is not due t
6680: 6f 20 73 6c 6f 70 70 79 20 63 6f 64 69 6e 67 20  o sloppy coding 
6690: 68 61 62 69 74 73 2e 20 54 68 65 20 63 6f 64 65  habits. The code
66a0: 20 69 73 20 77 72 69 74 74 65 6e 20 74 68 69 73   is written this
66b0: 0a 20 20 2a 2a 20 77 61 79 20 66 6f 72 20 70 65  .  ** way for pe
66c0: 72 66 6f 72 6d 61 6e 63 65 2c 20 74 6f 20 61 76  rformance, to av
66d0: 6f 69 64 20 68 61 76 69 6e 67 20 74 6f 20 72 75  oid having to ru
66e0: 6e 20 74 68 65 20 69 6e 74 65 72 72 75 70 74 20  n the interrupt 
66f0: 61 6e 64 20 70 72 6f 67 72 65 73 73 0a 20 20 2a  and progress.  *
6700: 2a 20 63 68 65 63 6b 73 20 6f 6e 20 65 76 65 72  * checks on ever
6710: 79 20 6f 70 63 6f 64 65 2e 20 20 54 68 69 73 20  y opcode.  This 
6720: 68 65 6c 70 73 20 73 71 6c 69 74 65 33 5f 73 74  helps sqlite3_st
6730: 65 70 28 29 20 74 6f 20 72 75 6e 20 61 62 6f 75  ep() to run abou
6740: 74 20 31 2e 35 25 0a 20 20 2a 2a 20 66 61 73 74  t 1.5%.  ** fast
6750: 65 72 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20  er according to 
6760: 22 76 61 6c 67 72 69 6e 64 20 2d 2d 74 6f 6f 6c  "valgrind --tool
6770: 3d 63 61 63 68 65 67 72 69 6e 64 22 20 2a 2f 0a  =cachegrind" */.
6780: 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72  check_for_interr
6790: 75 70 74 3a 0a 20 20 69 66 28 20 64 62 2d 3e 75  upt:.  if( db->u
67a0: 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 20  1.isInterrupted 
67b0: 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
67c0: 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a 23  _to_interrupt;.#
67d0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
67e0: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
67f0: 42 41 43 4b 0a 20 20 2f 2a 20 43 61 6c 6c 20 74  BACK.  /* Call t
6800: 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  he progress call
6810: 62 61 63 6b 20 69 66 20 69 74 20 69 73 20 63 6f  back if it is co
6820: 6e 66 69 67 75 72 65 64 20 61 6e 64 20 74 68 65  nfigured and the
6830: 20 72 65 71 75 69 72 65 64 20 6e 75 6d 62 65 72   required number
6840: 0a 20 20 2a 2a 20 6f 66 20 56 44 42 45 20 6f 70  .  ** of VDBE op
6850: 73 20 68 61 76 65 20 62 65 65 6e 20 65 78 65 63  s have been exec
6860: 75 74 65 64 20 28 65 69 74 68 65 72 20 73 69 6e  uted (either sin
6870: 63 65 20 74 68 69 73 20 69 6e 76 6f 63 61 74 69  ce this invocati
6880: 6f 6e 20 6f 66 0a 20 20 2a 2a 20 73 71 6c 69 74  on of.  ** sqlit
6890: 65 33 56 64 62 65 45 78 65 63 28 29 20 6f 72 20  e3VdbeExec() or 
68a0: 73 69 6e 63 65 20 6c 61 73 74 20 74 69 6d 65 20  since last time 
68b0: 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  the progress cal
68c0: 6c 62 61 63 6b 20 77 61 73 20 63 61 6c 6c 65 64  lback was called
68d0: 29 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 70  )..  ** If the p
68e0: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
68f0: 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72   returns non-zer
6900: 6f 2c 20 65 78 69 74 20 74 68 65 20 76 69 72 74  o, exit the virt
6910: 75 61 6c 20 6d 61 63 68 69 6e 65 20 77 69 74 68  ual machine with
6920: 0a 20 20 2a 2a 20 61 20 72 65 74 75 72 6e 20 63  .  ** a return c
6930: 6f 64 65 20 53 51 4c 49 54 45 5f 41 42 4f 52 54  ode SQLITE_ABORT
6940: 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d  ..  */.  if( db-
6950: 3e 78 50 72 6f 67 72 65 73 73 21 3d 30 20 26 26  >xProgress!=0 &&
6960: 20 6e 56 6d 53 74 65 70 3e 3d 6e 50 72 6f 67 72   nVmStep>=nProgr
6970: 65 73 73 4c 69 6d 69 74 20 29 7b 0a 20 20 20 20  essLimit ){.    
6980: 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 50 72 6f  assert( db->nPro
6990: 67 72 65 73 73 4f 70 73 21 3d 30 20 29 3b 0a 20  gressOps!=0 );. 
69a0: 20 20 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69     nProgressLimi
69b0: 74 20 3d 20 6e 56 6d 53 74 65 70 20 2b 20 64 62  t = nVmStep + db
69c0: 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 2d  ->nProgressOps -
69d0: 20 28 6e 56 6d 53 74 65 70 25 64 62 2d 3e 6e 50   (nVmStep%db->nP
69e0: 72 6f 67 72 65 73 73 4f 70 73 29 3b 0a 20 20 20  rogressOps);.   
69f0: 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65   if( db->xProgre
6a00: 73 73 28 64 62 2d 3e 70 50 72 6f 67 72 65 73 73  ss(db->pProgress
6a10: 41 72 67 29 20 29 7b 0a 20 20 20 20 20 20 72 63  Arg) ){.      rc
6a20: 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52   = SQLITE_INTERR
6a30: 55 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20  UPT;.      goto 
6a40: 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
6a50: 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65  or;.    }.  }.#e
6a60: 6e 64 69 66 0a 20 20 0a 20 20 62 72 65 61 6b 3b  ndif.  .  break;
6a70: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  .}../* Opcode:  
6a80: 47 6f 73 75 62 20 50 31 20 50 32 20 2a 20 2a 20  Gosub P1 P2 * * 
6a90: 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68  *.**.** Write th
6aa0: 65 20 63 75 72 72 65 6e 74 20 61 64 64 72 65 73  e current addres
6ab0: 73 20 6f 6e 74 6f 20 72 65 67 69 73 74 65 72 20  s onto register 
6ac0: 50 31 0a 2a 2a 20 61 6e 64 20 74 68 65 6e 20 6a  P1.** and then j
6ad0: 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20 50  ump to address P
6ae0: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f  2..*/.case OP_Go
6af0: 73 75 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20  sub: {          
6b00: 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61    /* jump */.  a
6b10: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
6b20: 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d   && pOp->p1<=(p-
6b30: 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
6b40: 72 73 6f 72 29 20 29 3b 0a 20 20 70 49 6e 31 20  rsor) );.  pIn1 
6b50: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
6b60: 3b 0a 20 20 61 73 73 65 72 74 28 20 56 64 62 65  ;.  assert( Vdbe
6b70: 4d 65 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31 29  MemDynamic(pIn1)
6b80: 3d 3d 30 20 29 3b 0a 20 20 6d 65 6d 41 62 6f 75  ==0 );.  memAbou
6b90: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e  tToChange(p, pIn
6ba0: 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67  1);.  pIn1->flag
6bb0: 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70  s = MEM_Int;.  p
6bc0: 49 6e 31 2d 3e 75 2e 69 20 3d 20 28 69 6e 74 29  In1->u.i = (int)
6bd0: 28 70 4f 70 2d 61 4f 70 29 3b 0a 20 20 52 45 47  (pOp-aOp);.  REG
6be0: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
6bf0: 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 0a 20 20 2f  >p1, pIn1);..  /
6c00: 2a 20 4d 6f 73 74 20 6a 75 6d 70 20 6f 70 65 72  * Most jump oper
6c10: 61 74 69 6f 6e 73 20 64 6f 20 61 20 67 6f 74 6f  ations do a goto
6c20: 20 74 6f 20 74 68 69 73 20 73 70 6f 74 20 69 6e   to this spot in
6c30: 20 6f 72 64 65 72 20 74 6f 20 75 70 64 61 74 65   order to update
6c40: 0a 20 20 2a 2a 20 74 68 65 20 70 4f 70 20 70 6f  .  ** the pOp po
6c50: 69 6e 74 65 72 2e 20 2a 2f 0a 6a 75 6d 70 5f 74  inter. */.jump_t
6c60: 6f 5f 70 32 3a 0a 20 20 70 4f 70 20 3d 20 26 61  o_p2:.  pOp = &a
6c70: 4f 70 5b 70 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b  Op[pOp->p2 - 1];
6c80: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
6c90: 4f 70 63 6f 64 65 3a 20 20 52 65 74 75 72 6e 20  Opcode:  Return 
6ca0: 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
6cb0: 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 6e 65 78   Jump to the nex
6cc0: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 66  t instruction af
6cd0: 74 65 72 20 74 68 65 20 61 64 64 72 65 73 73 20  ter the address 
6ce0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  in register P1. 
6cf0: 20 41 66 74 65 72 0a 2a 2a 20 74 68 65 20 6a 75   After.** the ju
6d00: 6d 70 2c 20 72 65 67 69 73 74 65 72 20 50 31 20  mp, register P1 
6d10: 62 65 63 6f 6d 65 73 20 75 6e 64 65 66 69 6e 65  becomes undefine
6d20: 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  d..*/.case OP_Re
6d30: 74 75 72 6e 3a 20 7b 20 20 20 20 20 20 20 20 20  turn: {         
6d40: 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49    /* in1 */.  pI
6d50: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
6d60: 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
6d70: 49 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f  In1->flags==MEM_
6d80: 49 6e 74 20 29 3b 0a 20 20 70 4f 70 20 3d 20 26  Int );.  pOp = &
6d90: 61 4f 70 5b 70 49 6e 31 2d 3e 75 2e 69 5d 3b 0a  aOp[pIn1->u.i];.
6da0: 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20    pIn1->flags = 
6db0: 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20  MEM_Undefined;. 
6dc0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
6dd0: 63 6f 64 65 3a 20 49 6e 69 74 43 6f 72 6f 75 74  code: InitCorout
6de0: 69 6e 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ine P1 P2 P3 * *
6df0: 0a 2a 2a 0a 2a 2a 20 53 65 74 20 75 70 20 72 65  .**.** Set up re
6e00: 67 69 73 74 65 72 20 50 31 20 73 6f 20 74 68 61  gister P1 so tha
6e10: 74 20 69 74 20 77 69 6c 6c 20 59 69 65 6c 64 20  t it will Yield 
6e20: 74 6f 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65  to the coroutine
6e30: 0a 2a 2a 20 6c 6f 63 61 74 65 64 20 61 74 20 61  .** located at a
6e40: 64 64 72 65 73 73 20 50 33 2e 0a 2a 2a 0a 2a 2a  ddress P3..**.**
6e50: 20 49 66 20 50 32 21 3d 30 20 74 68 65 6e 20 74   If P2!=0 then t
6e60: 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 69 6d 70  he coroutine imp
6e70: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69 6d 6d 65  lementation imme
6e80: 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 73 0a  diately follows.
6e90: 2a 2a 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20  ** this opcode. 
6ea0: 20 53 6f 20 6a 75 6d 70 20 6f 76 65 72 20 74 68   So jump over th
6eb0: 65 20 63 6f 72 6f 75 74 69 6e 65 20 69 6d 70 6c  e coroutine impl
6ec0: 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 0a 2a 2a  ementation to.**
6ed0: 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a 0a   address P2..**.
6ee0: 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 45 6e 64  ** See also: End
6ef0: 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73  Coroutine.*/.cas
6f00: 65 20 4f 50 5f 49 6e 69 74 43 6f 72 6f 75 74 69  e OP_InitCorouti
6f10: 6e 65 3a 20 7b 20 20 20 20 20 2f 2a 20 6a 75 6d  ne: {     /* jum
6f20: 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  p */.  assert( p
6f30: 4f 70 2d 3e 70 31 3e 30 20 26 26 20 20 70 4f 70  Op->p1>0 &&  pOp
6f40: 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ->p1<=(p->nMem+1
6f50: 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29   - p->nCursor) )
6f60: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
6f70: 3e 70 32 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p2>=0 && pOp->p
6f80: 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 61 73  2<p->nOp );.  as
6f90: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30  sert( pOp->p3>=0
6fa0: 20 26 26 20 70 4f 70 2d 3e 70 33 3c 70 2d 3e 6e   && pOp->p3<p->n
6fb0: 4f 70 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26  Op );.  pOut = &
6fc0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
6fd0: 20 61 73 73 65 72 74 28 20 21 56 64 62 65 4d 65   assert( !VdbeMe
6fe0: 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74 29 20 29  mDynamic(pOut) )
6ff0: 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
7000: 70 4f 70 2d 3e 70 33 20 2d 20 31 3b 0a 20 20 70  pOp->p3 - 1;.  p
7010: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
7020: 5f 49 6e 74 3b 0a 20 20 69 66 28 20 70 4f 70 2d  _Int;.  if( pOp-
7030: 3e 70 32 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  >p2 ) goto jump_
7040: 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a  to_p2;.  break;.
7050: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 45  }../* Opcode:  E
7060: 6e 64 43 6f 72 6f 75 74 69 6e 65 20 50 31 20 2a  ndCoroutine P1 *
7070: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65   * * *.**.** The
7080: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 20   instruction at 
7090: 74 68 65 20 61 64 64 72 65 73 73 20 69 6e 20 72  the address in r
70a0: 65 67 69 73 74 65 72 20 50 31 20 69 73 20 61 20  egister P1 is a 
70b0: 59 69 65 6c 64 2e 0a 2a 2a 20 4a 75 6d 70 20 74  Yield..** Jump t
70c0: 6f 20 74 68 65 20 50 32 20 70 61 72 61 6d 65 74  o the P2 paramet
70d0: 65 72 20 6f 66 20 74 68 61 74 20 59 69 65 6c 64  er of that Yield
70e0: 2e 0a 2a 2a 20 41 66 74 65 72 20 74 68 65 20 6a  ..** After the j
70f0: 75 6d 70 2c 20 72 65 67 69 73 74 65 72 20 50 31  ump, register P1
7100: 20 62 65 63 6f 6d 65 73 20 75 6e 64 65 66 69 6e   becomes undefin
7110: 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ed..**.** See al
7120: 73 6f 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e  so: InitCoroutin
7130: 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 6e 64  e.*/.case OP_End
7140: 43 6f 72 6f 75 74 69 6e 65 3a 20 7b 20 20 20 20  Coroutine: {    
7150: 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f         /* in1 */
7160: 0a 20 20 56 64 62 65 4f 70 20 2a 70 43 61 6c 6c  .  VdbeOp *pCall
7170: 65 72 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  er;.  pIn1 = &aM
7180: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
7190: 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
71a0: 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  gs==MEM_Int );. 
71b0: 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 75   assert( pIn1->u
71c0: 2e 69 3e 3d 30 20 26 26 20 70 49 6e 31 2d 3e 75  .i>=0 && pIn1->u
71d0: 2e 69 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70  .i<p->nOp );.  p
71e0: 43 61 6c 6c 65 72 20 3d 20 26 61 4f 70 5b 70 49  Caller = &aOp[pI
71f0: 6e 31 2d 3e 75 2e 69 5d 3b 0a 20 20 61 73 73 65  n1->u.i];.  asse
7200: 72 74 28 20 70 43 61 6c 6c 65 72 2d 3e 6f 70 63  rt( pCaller->opc
7210: 6f 64 65 3d 3d 4f 50 5f 59 69 65 6c 64 20 29 3b  ode==OP_Yield );
7220: 0a 20 20 61 73 73 65 72 74 28 20 70 43 61 6c 6c  .  assert( pCall
7230: 65 72 2d 3e 70 32 3e 3d 30 20 26 26 20 70 43 61  er->p2>=0 && pCa
7240: 6c 6c 65 72 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20  ller->p2<p->nOp 
7250: 29 3b 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b  );.  pOp = &aOp[
7260: 70 43 61 6c 6c 65 72 2d 3e 70 32 20 2d 20 31 5d  pCaller->p2 - 1]
7270: 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  ;.  pIn1->flags 
7280: 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b  = MEM_Undefined;
7290: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
72a0: 4f 70 63 6f 64 65 3a 20 20 59 69 65 6c 64 20 50  Opcode:  Yield P
72b0: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
72c0: 20 53 77 61 70 20 74 68 65 20 70 72 6f 67 72 61   Swap the progra
72d0: 6d 20 63 6f 75 6e 74 65 72 20 77 69 74 68 20 74  m counter with t
72e0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
72f0: 73 74 65 72 20 50 31 2e 20 20 54 68 69 73 0a 2a  ster P1.  This.*
7300: 2a 20 68 61 73 20 74 68 65 20 65 66 66 65 63 74  * has the effect
7310: 20 6f 66 20 79 69 65 6c 64 69 6e 67 20 74 6f 20   of yielding to 
7320: 61 20 63 6f 72 6f 75 74 69 6e 65 2e 0a 2a 2a 0a  a coroutine..**.
7330: 2a 2a 20 49 66 20 74 68 65 20 63 6f 72 6f 75 74  ** If the corout
7340: 69 6e 65 20 74 68 61 74 20 69 73 20 6c 61 75 6e  ine that is laun
7350: 63 68 65 64 20 62 79 20 74 68 69 73 20 69 6e 73  ched by this ins
7360: 74 72 75 63 74 69 6f 6e 20 65 6e 64 73 20 77 69  truction ends wi
7370: 74 68 0a 2a 2a 20 59 69 65 6c 64 20 6f 72 20 52  th.** Yield or R
7380: 65 74 75 72 6e 20 74 68 65 6e 20 63 6f 6e 74 69  eturn then conti
7390: 6e 75 65 20 74 6f 20 74 68 65 20 6e 65 78 74 20  nue to the next 
73a0: 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75  instruction.  Bu
73b0: 74 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 72 6f  t if.** the coro
73c0: 75 74 69 6e 65 20 6c 61 75 6e 63 68 65 64 20 62  utine launched b
73d0: 79 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  y this instructi
73e0: 6f 6e 20 65 6e 64 73 20 77 69 74 68 0a 2a 2a 20  on ends with.** 
73f0: 45 6e 64 43 6f 72 6f 75 74 69 6e 65 2c 20 74 68  EndCoroutine, th
7400: 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 20 72 61  en jump to P2 ra
7410: 74 68 65 72 20 74 68 61 6e 20 63 6f 6e 74 69 6e  ther than contin
7420: 75 69 6e 67 20 77 69 74 68 20 74 68 65 0a 2a 2a  uing with the.**
7430: 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
7440: 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  n..**.** See als
7450: 6f 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65  o: InitCoroutine
7460: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 59 69 65 6c  .*/.case OP_Yiel
7470: 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  d: {            
7480: 2f 2a 20 69 6e 31 2c 20 6a 75 6d 70 20 2a 2f 0a  /* in1, jump */.
7490: 20 20 69 6e 74 20 70 63 44 65 73 74 3b 0a 20 20    int pcDest;.  
74a0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
74b0: 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
74c0: 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28   VdbeMemDynamic(
74d0: 70 49 6e 31 29 3d 3d 30 20 29 3b 0a 20 20 70 49  pIn1)==0 );.  pI
74e0: 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  n1->flags = MEM_
74f0: 49 6e 74 3b 0a 20 20 70 63 44 65 73 74 20 3d 20  Int;.  pcDest = 
7500: 28 69 6e 74 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a  (int)pIn1->u.i;.
7510: 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 28 69    pIn1->u.i = (i
7520: 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a  nt)(pOp - aOp);.
7530: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
7540: 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b  (pOp->p1, pIn1);
7550: 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 63  .  pOp = &aOp[pc
7560: 44 65 73 74 5d 3b 0a 20 20 62 72 65 61 6b 3b 0a  Dest];.  break;.
7570: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48  }../* Opcode:  H
7580: 61 6c 74 49 66 4e 75 6c 6c 20 20 50 31 20 50 32  altIfNull  P1 P2
7590: 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
75a0: 6f 70 73 69 73 3a 20 20 69 66 20 72 5b 50 33 5d  opsis:  if r[P3]
75b0: 3d 6e 75 6c 6c 20 68 61 6c 74 0a 2a 2a 0a 2a 2a  =null halt.**.**
75c0: 20 43 68 65 63 6b 20 74 68 65 20 76 61 6c 75 65   Check the value
75d0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
75e0: 20 20 49 66 20 69 74 20 69 73 20 4e 55 4c 4c 20    If it is NULL 
75f0: 74 68 65 6e 20 48 61 6c 74 20 75 73 69 6e 67 0a  then Halt using.
7600: 2a 2a 20 70 61 72 61 6d 65 74 65 72 20 50 31 2c  ** parameter P1,
7610: 20 50 32 2c 20 61 6e 64 20 50 34 20 61 73 20 69   P2, and P4 as i
7620: 66 20 74 68 69 73 20 77 65 72 65 20 61 20 48 61  f this were a Ha
7630: 6c 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  lt instruction. 
7640: 20 49 66 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65   If the.** value
7650: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
7660: 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65  is not NULL, the
7670: 6e 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 69  n this routine i
7680: 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2a 20 54 68  s a no-op..** Th
7690: 65 20 50 35 20 70 61 72 61 6d 65 74 65 72 20 73  e P5 parameter s
76a0: 68 6f 75 6c 64 20 62 65 20 31 2e 0a 2a 2f 0a 63  hould be 1..*/.c
76b0: 61 73 65 20 4f 50 5f 48 61 6c 74 49 66 4e 75 6c  ase OP_HaltIfNul
76c0: 6c 3a 20 7b 20 20 20 20 20 20 2f 2a 20 69 6e 33  l: {      /* in3
76d0: 20 2a 2f 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d   */.  pIn3 = &aM
76e0: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69  em[pOp->p3];.  i
76f0: 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20  f( (pIn3->flags 
7700: 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29  & MEM_Null)==0 )
7710: 20 62 72 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c   break;.  /* Fal
7720: 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f  l through into O
7730: 50 5f 48 61 6c 74 20 2a 2f 0a 7d 0a 0a 2f 2a 20  P_Halt */.}../* 
7740: 4f 70 63 6f 64 65 3a 20 20 48 61 6c 74 20 50 31  Opcode:  Halt P1
7750: 20 50 32 20 2a 20 50 34 20 50 35 0a 2a 2a 0a 2a   P2 * P4 P5.**.*
7760: 2a 20 45 78 69 74 20 69 6d 6d 65 64 69 61 74 65  * Exit immediate
7770: 6c 79 2e 20 20 41 6c 6c 20 6f 70 65 6e 20 63 75  ly.  All open cu
7780: 72 73 6f 72 73 2c 20 65 74 63 20 61 72 65 20 63  rsors, etc are c
7790: 6c 6f 73 65 64 0a 2a 2a 20 61 75 74 6f 6d 61 74  losed.** automat
77a0: 69 63 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 50 31  ically..**.** P1
77b0: 20 69 73 20 74 68 65 20 72 65 73 75 6c 74 20 63   is the result c
77c0: 6f 64 65 20 72 65 74 75 72 6e 65 64 20 62 79 20  ode returned by 
77d0: 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29 2c 20  sqlite3_exec(), 
77e0: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 29 2c  sqlite3_reset(),
77f0: 0a 2a 2a 20 6f 72 20 73 71 6c 69 74 65 33 5f 66  .** or sqlite3_f
7800: 69 6e 61 6c 69 7a 65 28 29 2e 20 20 46 6f 72 20  inalize().  For 
7810: 61 20 6e 6f 72 6d 61 6c 20 68 61 6c 74 2c 20 74  a normal halt, t
7820: 68 69 73 20 73 68 6f 75 6c 64 20 62 65 20 53 51  his should be SQ
7830: 4c 49 54 45 5f 4f 4b 20 28 30 29 2e 0a 2a 2a 20  LITE_OK (0)..** 
7840: 46 6f 72 20 65 72 72 6f 72 73 2c 20 69 74 20 63  For errors, it c
7850: 61 6e 20 62 65 20 73 6f 6d 65 20 6f 74 68 65 72  an be some other
7860: 20 76 61 6c 75 65 2e 20 20 49 66 20 50 31 21 3d   value.  If P1!=
7870: 30 20 74 68 65 6e 20 50 32 20 77 69 6c 6c 20 64  0 then P2 will d
7880: 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65 74  etermine.** whet
7890: 68 65 72 20 6f 72 20 6e 6f 74 20 74 6f 20 72 6f  her or not to ro
78a0: 6c 6c 62 61 63 6b 20 74 68 65 20 63 75 72 72 65  llback the curre
78b0: 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  nt transaction. 
78c0: 20 44 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b   Do not rollback
78d0: 0a 2a 2a 20 69 66 20 50 32 3d 3d 4f 45 5f 46 61  .** if P2==OE_Fa
78e0: 69 6c 2e 20 44 6f 20 74 68 65 20 72 6f 6c 6c 62  il. Do the rollb
78f0: 61 63 6b 20 69 66 20 50 32 3d 3d 4f 45 5f 52 6f  ack if P2==OE_Ro
7900: 6c 6c 62 61 63 6b 2e 20 20 49 66 20 50 32 3d 3d  llback.  If P2==
7910: 4f 45 5f 41 62 6f 72 74 2c 0a 2a 2a 20 74 68 65  OE_Abort,.** the
7920: 6e 20 62 61 63 6b 20 6f 75 74 20 61 6c 6c 20 63  n back out all c
7930: 68 61 6e 67 65 73 20 74 68 61 74 20 68 61 76 65  hanges that have
7940: 20 6f 63 63 75 72 72 65 64 20 64 75 72 69 6e 67   occurred during
7950: 20 74 68 69 73 20 65 78 65 63 75 74 69 6f 6e 20   this execution 
7960: 6f 66 20 74 68 65 0a 2a 2a 20 56 44 42 45 2c 20  of the.** VDBE, 
7970: 62 75 74 20 64 6f 20 6e 6f 74 20 72 6f 6c 6c 62  but do not rollb
7980: 61 63 6b 20 74 68 65 20 74 72 61 6e 73 61 63 74  ack the transact
7990: 69 6f 6e 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 50  ion. .**.** If P
79a0: 34 20 69 73 20 6e 6f 74 20 6e 75 6c 6c 20 74 68  4 is not null th
79b0: 65 6e 20 69 74 20 69 73 20 61 6e 20 65 72 72 6f  en it is an erro
79c0: 72 20 6d 65 73 73 61 67 65 20 73 74 72 69 6e 67  r message string
79d0: 2e 0a 2a 2a 0a 2a 2a 20 50 35 20 69 73 20 61 20  ..**.** P5 is a 
79e0: 76 61 6c 75 65 20 62 65 74 77 65 65 6e 20 30 20  value between 0 
79f0: 61 6e 64 20 34 2c 20 69 6e 63 6c 75 73 69 76 65  and 4, inclusive
7a00: 2c 20 74 68 61 74 20 6d 6f 64 69 66 69 65 73 20  , that modifies 
7a10: 74 68 65 20 50 34 20 73 74 72 69 6e 67 2e 0a 2a  the P4 string..*
7a20: 2a 0a 2a 2a 20 20 20 20 30 3a 20 20 28 6e 6f 20  *.**    0:  (no 
7a30: 63 68 61 6e 67 65 29 0a 2a 2a 20 20 20 20 31 3a  change).**    1:
7a40: 20 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 74 72    NOT NULL contr
7a50: 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a  aint failed: P4.
7a60: 2a 2a 20 20 20 20 32 3a 20 20 55 4e 49 51 55 45  **    2:  UNIQUE
7a70: 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c   constraint fail
7a80: 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20 33 3a 20  ed: P4.**    3: 
7a90: 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e   CHECK constrain
7aa0: 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20  t failed: P4.** 
7ab0: 20 20 20 34 3a 20 20 46 4f 52 45 49 47 4e 20 4b     4:  FOREIGN K
7ac0: 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61  EY constraint fa
7ad0: 69 6c 65 64 3a 20 50 34 0a 2a 2a 0a 2a 2a 20 49  iled: P4.**.** I
7ae0: 66 20 50 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f  f P5 is not zero
7af0: 20 61 6e 64 20 50 34 20 69 73 20 4e 55 4c 4c 2c   and P4 is NULL,
7b00: 20 74 68 65 6e 20 65 76 65 72 79 74 68 69 6e 67   then everything
7b10: 20 61 66 74 65 72 20 74 68 65 20 22 3a 22 20 69   after the ":" i
7b20: 73 0a 2a 2a 20 6f 6d 69 74 74 65 64 2e 0a 2a 2a  s.** omitted..**
7b30: 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 61 6e 20  .** There is an 
7b40: 69 6d 70 6c 69 65 64 20 22 48 61 6c 74 20 30 20  implied "Halt 0 
7b50: 30 20 30 22 20 69 6e 73 74 72 75 63 74 69 6f 6e  0 0" instruction
7b60: 20 69 6e 73 65 72 74 65 64 20 61 74 20 74 68 65   inserted at the
7b70: 20 76 65 72 79 20 65 6e 64 20 6f 66 0a 2a 2a 20   very end of.** 
7b80: 65 76 65 72 79 20 70 72 6f 67 72 61 6d 2e 20 20  every program.  
7b90: 53 6f 20 61 20 6a 75 6d 70 20 70 61 73 74 20 74  So a jump past t
7ba0: 68 65 20 6c 61 73 74 20 69 6e 73 74 72 75 63 74  he last instruct
7bb0: 69 6f 6e 20 6f 66 20 74 68 65 20 70 72 6f 67 72  ion of the progr
7bc0: 61 6d 0a 2a 2a 20 69 73 20 74 68 65 20 73 61 6d  am.** is the sam
7bd0: 65 20 61 73 20 65 78 65 63 75 74 69 6e 67 20 48  e as executing H
7be0: 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  alt..*/.case OP_
7bf0: 48 61 6c 74 3a 20 7b 0a 20 20 56 64 62 65 46 72  Halt: {.  VdbeFr
7c00: 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69  ame *pFrame;.  i
7c10: 6e 74 20 70 63 78 3b 0a 0a 20 20 70 63 78 20 3d  nt pcx;..  pcx =
7c20: 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70   (int)(pOp - aOp
7c30: 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31  );.  if( pOp->p1
7c40: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70  ==SQLITE_OK && p
7c50: 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20  ->pFrame ){.    
7c60: 2f 2a 20 48 61 6c 74 20 74 68 65 20 73 75 62 2d  /* Halt the sub-
7c70: 70 72 6f 67 72 61 6d 2e 20 52 65 74 75 72 6e 20  program. Return 
7c80: 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20 70  control to the p
7c90: 61 72 65 6e 74 20 66 72 61 6d 65 2e 20 2a 2f 0a  arent frame. */.
7ca0: 20 20 20 20 70 46 72 61 6d 65 20 3d 20 70 2d 3e      pFrame = p->
7cb0: 70 46 72 61 6d 65 3b 0a 20 20 20 20 70 2d 3e 70  pFrame;.    p->p
7cc0: 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 2d 3e  Frame = pFrame->
7cd0: 70 50 61 72 65 6e 74 3b 0a 20 20 20 20 70 2d 3e  pParent;.    p->
7ce0: 6e 46 72 61 6d 65 2d 2d 3b 0a 20 20 20 20 73 71  nFrame--;.    sq
7cf0: 6c 69 74 65 33 56 64 62 65 53 65 74 43 68 61 6e  lite3VdbeSetChan
7d00: 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e  ges(db, p->nChan
7d10: 67 65 29 3b 0a 20 20 20 20 70 63 78 20 3d 20 73  ge);.    pcx = s
7d20: 71 6c 69 74 65 33 56 64 62 65 46 72 61 6d 65 52  qlite3VdbeFrameR
7d30: 65 73 74 6f 72 65 28 70 46 72 61 6d 65 29 3b 0a  estore(pFrame);.
7d40: 20 20 20 20 6c 61 73 74 52 6f 77 69 64 20 3d 20      lastRowid = 
7d50: 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20  db->lastRowid;. 
7d60: 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d     if( pOp->p2==
7d70: 4f 45 5f 49 67 6e 6f 72 65 20 29 7b 0a 20 20 20  OE_Ignore ){.   
7d80: 20 20 20 2f 2a 20 49 6e 73 74 72 75 63 74 69 6f     /* Instructio
7d90: 6e 20 70 63 78 20 69 73 20 74 68 65 20 4f 50 5f  n pcx is the OP_
7da0: 50 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6e 76  Program that inv
7db0: 6f 6b 65 64 20 74 68 65 20 73 75 62 2d 70 72 6f  oked the sub-pro
7dc0: 67 72 61 6d 20 0a 20 20 20 20 20 20 2a 2a 20 63  gram .      ** c
7dd0: 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 68  urrently being h
7de0: 61 6c 74 65 64 2e 20 49 66 20 74 68 65 20 70 32  alted. If the p2
7df0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20   instruction of 
7e00: 74 68 69 73 20 4f 50 5f 48 61 6c 74 0a 20 20 20  this OP_Halt.   
7e10: 20 20 20 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f     ** instructio
7e20: 6e 20 69 73 20 73 65 74 20 74 6f 20 4f 45 5f 49  n is set to OE_I
7e30: 67 6e 6f 72 65 2c 20 74 68 65 6e 20 74 68 65 20  gnore, then the 
7e40: 73 75 62 2d 70 72 6f 67 72 61 6d 20 69 73 20 74  sub-program is t
7e50: 68 72 6f 77 69 6e 67 0a 20 20 20 20 20 20 2a 2a  hrowing.      **
7e60: 20 61 6e 20 49 47 4e 4f 52 45 20 65 78 63 65 70   an IGNORE excep
7e70: 74 69 6f 6e 2e 20 49 6e 20 74 68 69 73 20 63 61  tion. In this ca
7e80: 73 65 20 6a 75 6d 70 20 74 6f 20 74 68 65 20 61  se jump to the a
7e90: 64 64 72 65 73 73 20 73 70 65 63 69 66 69 65 64  ddress specified
7ea0: 0a 20 20 20 20 20 20 2a 2a 20 61 73 20 74 68 65  .      ** as the
7eb0: 20 70 32 20 6f 66 20 74 68 65 20 63 61 6c 6c 69   p2 of the calli
7ec0: 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d 2e 20 20  ng OP_Program.  
7ed0: 2a 2f 0a 20 20 20 20 20 20 70 63 78 20 3d 20 70  */.      pcx = p
7ee0: 2d 3e 61 4f 70 5b 70 63 78 5d 2e 70 32 2d 31 3b  ->aOp[pcx].p2-1;
7ef0: 0a 20 20 20 20 7d 0a 20 20 20 20 61 4f 70 20 3d  .    }.    aOp =
7f00: 20 70 2d 3e 61 4f 70 3b 0a 20 20 20 20 61 4d 65   p->aOp;.    aMe
7f10: 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20  m = p->aMem;.   
7f20: 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 63 78 5d   pOp = &aOp[pcx]
7f30: 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
7f40: 0a 20 20 70 2d 3e 72 63 20 3d 20 70 4f 70 2d 3e  .  p->rc = pOp->
7f50: 70 31 3b 0a 20 20 70 2d 3e 65 72 72 6f 72 41 63  p1;.  p->errorAc
7f60: 74 69 6f 6e 20 3d 20 28 75 38 29 70 4f 70 2d 3e  tion = (u8)pOp->
7f70: 70 32 3b 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63  p2;.  p->pc = pc
7f80: 78 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  x;.  assert( pOp
7f90: 2d 3e 70 35 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p5>=0 && pOp->
7fa0: 70 35 3c 3d 34 20 29 3b 0a 20 20 69 66 28 20 70  p5<=4 );.  if( p
7fb0: 2d 3e 72 63 20 29 7b 0a 20 20 20 20 69 66 28 20  ->rc ){.    if( 
7fc0: 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 20  pOp->p5 ){.     
7fd0: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68   static const ch
7fe0: 61 72 20 2a 20 63 6f 6e 73 74 20 61 7a 54 79 70  ar * const azTyp
7ff0: 65 5b 5d 20 3d 20 7b 20 22 4e 4f 54 20 4e 55 4c  e[] = { "NOT NUL
8000: 4c 22 2c 20 22 55 4e 49 51 55 45 22 2c 20 22 43  L", "UNIQUE", "C
8010: 48 45 43 4b 22 2c 0a 20 20 20 20 20 20 20 20 20  HECK",.         
8020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8040: 20 20 20 20 22 46 4f 52 45 49 47 4e 20 4b 45 59      "FOREIGN KEY
8050: 22 20 7d 3b 0a 20 20 20 20 20 20 74 65 73 74 63  " };.      testc
8060: 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 31 20  ase( pOp->p5==1 
8070: 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73  );.      testcas
8080: 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 32 20 29 3b  e( pOp->p5==2 );
8090: 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28  .      testcase(
80a0: 20 70 4f 70 2d 3e 70 35 3d 3d 33 20 29 3b 0a 20   pOp->p5==3 );. 
80b0: 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70       testcase( p
80c0: 4f 70 2d 3e 70 35 3d 3d 34 20 29 3b 0a 20 20 20  Op->p5==4 );.   
80d0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
80e0: 72 6f 72 28 70 2c 20 22 25 73 20 63 6f 6e 73 74  ror(p, "%s const
80f0: 72 61 69 6e 74 20 66 61 69 6c 65 64 22 2c 20 61  raint failed", a
8100: 7a 54 79 70 65 5b 70 4f 70 2d 3e 70 35 2d 31 5d  zType[pOp->p5-1]
8110: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70  );.      if( pOp
8120: 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 20 20  ->p4.z ){.      
8130: 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73    p->zErrMsg = s
8140: 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62  qlite3MPrintf(db
8150: 2c 20 22 25 7a 3a 20 25 73 22 2c 20 70 2d 3e 7a  , "%z: %s", p->z
8160: 45 72 72 4d 73 67 2c 20 70 4f 70 2d 3e 70 34 2e  ErrMsg, pOp->p4.
8170: 7a 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  z);.      }.    
8180: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c  }else{.      sql
8190: 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
81a0: 20 22 25 73 22 2c 20 70 4f 70 2d 3e 70 34 2e 7a   "%s", pOp->p4.z
81b0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  );.    }.    sql
81c0: 69 74 65 33 5f 6c 6f 67 28 70 4f 70 2d 3e 70 31  ite3_log(pOp->p1
81d0: 2c 20 22 61 62 6f 72 74 20 61 74 20 25 64 20 69  , "abort at %d i
81e0: 6e 20 5b 25 73 5d 3a 20 25 73 22 2c 20 70 63 78  n [%s]: %s", pcx
81f0: 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70 2d 3e 7a 45  , p->zSql, p->zE
8200: 72 72 4d 73 67 29 3b 0a 20 20 7d 0a 20 20 72 63  rrMsg);.  }.  rc
8210: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 48 61   = sqlite3VdbeHa
8220: 6c 74 28 70 29 3b 0a 20 20 61 73 73 65 72 74 28  lt(p);.  assert(
8230: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59   rc==SQLITE_BUSY
8240: 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f   || rc==SQLITE_O
8250: 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f  K || rc==SQLITE_
8260: 45 52 52 4f 52 20 29 3b 0a 20 20 69 66 28 20 72  ERROR );.  if( r
8270: 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29  c==SQLITE_BUSY )
8280: 7b 0a 20 20 20 20 70 2d 3e 72 63 20 3d 20 53 51  {.    p->rc = SQ
8290: 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c  LITE_BUSY;.  }el
82a0: 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
82b0: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
82c0: 20 28 70 2d 3e 72 63 26 30 78 66 66 29 3d 3d 53   (p->rc&0xff)==S
82d0: 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54  QLITE_CONSTRAINT
82e0: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
82f0: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
8300: 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f   db->nDeferredCo
8310: 6e 73 3e 30 20 7c 7c 20 64 62 2d 3e 6e 44 65 66  ns>0 || db->nDef
8320: 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3e 30 20 29  erredImmCons>0 )
8330: 3b 0a 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63  ;.    rc = p->rc
8340: 20 3f 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 20   ? SQLITE_ERROR 
8350: 3a 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20  : SQLITE_DONE;. 
8360: 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72   }.  goto vdbe_r
8370: 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  eturn;.}../* Opc
8380: 6f 64 65 3a 20 49 6e 74 65 67 65 72 20 50 31 20  ode: Integer P1 
8390: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
83a0: 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 31 0a 2a  psis: r[P2]=P1.*
83b0: 2a 0a 2a 2a 20 54 68 65 20 33 32 2d 62 69 74 20  *.** The 32-bit 
83c0: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50 31  integer value P1
83d0: 20 69 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f   is written into
83e0: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
83f0: 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 65 72  .case OP_Integer
8400: 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  : {         /* o
8410: 75 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20  ut2 */.  pOut = 
8420: 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
8430: 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e  , pOp);.  pOut->
8440: 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  u.i = pOp->p1;. 
8450: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
8460: 63 6f 64 65 3a 20 49 6e 74 36 34 20 2a 20 50 32  code: Int64 * P2
8470: 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
8480: 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34 0a 2a 2a  sis: r[P2]=P4.**
8490: 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
84a0: 74 65 72 20 74 6f 20 61 20 36 34 2d 62 69 74 20  ter to a 64-bit 
84b0: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a  integer value..*
84c0: 2a 20 57 72 69 74 65 20 74 68 61 74 20 76 61 6c  * Write that val
84d0: 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  ue into register
84e0: 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
84f0: 49 6e 74 36 34 3a 20 7b 20 20 20 20 20 20 20 20  Int64: {        
8500: 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
8510: 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
8520: 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
8530: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
8540: 2e 70 49 36 34 21 3d 30 20 29 3b 0a 20 20 70 4f  .pI64!=0 );.  pO
8550: 75 74 2d 3e 75 2e 69 20 3d 20 2a 70 4f 70 2d 3e  ut->u.i = *pOp->
8560: 70 34 2e 70 49 36 34 3b 0a 20 20 62 72 65 61 6b  p4.pI64;.  break
8570: 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ;.}..#ifndef SQL
8580: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
8590: 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64  G_POINT./* Opcod
85a0: 65 3a 20 52 65 61 6c 20 2a 20 50 32 20 2a 20 50  e: Real * P2 * P
85b0: 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
85c0: 20 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20   r[P2]=P4.**.** 
85d0: 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
85e0: 74 6f 20 61 20 36 34 2d 62 69 74 20 66 6c 6f 61  to a 64-bit floa
85f0: 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c 75 65  ting point value
8600: 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20  ..** Write that 
8610: 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73  value into regis
8620: 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ter P2..*/.case 
8630: 4f 50 5f 52 65 61 6c 3a 20 7b 20 20 20 20 20 20  OP_Real: {      
8640: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
8650: 20 54 4b 5f 46 4c 4f 41 54 2c 20 6f 75 74 32 20   TK_FLOAT, out2 
8660: 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  */.  pOut = out2
8670: 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
8680: 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67  p);.  pOut->flag
8690: 73 20 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20  s = MEM_Real;.  
86a0: 61 73 73 65 72 74 28 20 21 73 71 6c 69 74 65 33  assert( !sqlite3
86b0: 49 73 4e 61 4e 28 2a 70 4f 70 2d 3e 70 34 2e 70  IsNaN(*pOp->p4.p
86c0: 52 65 61 6c 29 20 29 3b 0a 20 20 70 4f 75 74 2d  Real) );.  pOut-
86d0: 3e 75 2e 72 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e  >u.r = *pOp->p4.
86e0: 70 52 65 61 6c 3b 0a 20 20 62 72 65 61 6b 3b 0a  pReal;.  break;.
86f0: 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63  }.#endif../* Opc
8700: 6f 64 65 3a 20 53 74 72 69 6e 67 38 20 2a 20 50  ode: String8 * P
8710: 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f  2 * P4 *.** Syno
8720: 70 73 69 73 3a 20 72 5b 50 32 5d 3d 27 50 34 27  psis: r[P2]='P4'
8730: 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73  .**.** P4 points
8740: 20 74 6f 20 61 20 6e 75 6c 20 74 65 72 6d 69 6e   to a nul termin
8750: 61 74 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e  ated UTF-8 strin
8760: 67 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  g. This opcode i
8770: 73 20 74 72 61 6e 73 66 6f 72 6d 65 64 20 0a 2a  s transformed .*
8780: 2a 20 69 6e 74 6f 20 61 20 53 74 72 69 6e 67 20  * into a String 
8790: 6f 70 63 6f 64 65 20 62 65 66 6f 72 65 20 69 74  opcode before it
87a0: 20 69 73 20 65 78 65 63 75 74 65 64 20 66 6f 72   is executed for
87b0: 20 74 68 65 20 66 69 72 73 74 20 74 69 6d 65 2e   the first time.
87c0: 20 20 44 75 72 69 6e 67 0a 2a 2a 20 74 68 69 73    During.** this
87d0: 20 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 2c   transformation,
87e0: 20 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 73   the length of s
87f0: 74 72 69 6e 67 20 50 34 20 69 73 20 63 6f 6d 70  tring P4 is comp
8800: 75 74 65 64 20 61 6e 64 20 73 74 6f 72 65 64 0a  uted and stored.
8810: 2a 2a 20 61 73 20 74 68 65 20 50 31 20 70 61 72  ** as the P1 par
8820: 61 6d 65 74 65 72 2e 0a 2a 2f 0a 63 61 73 65 20  ameter..*/.case 
8830: 4f 50 5f 53 74 72 69 6e 67 38 3a 20 7b 20 20 20  OP_String8: {   
8840: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
8850: 20 54 4b 5f 53 54 52 49 4e 47 2c 20 6f 75 74 32   TK_STRING, out2
8860: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
8870: 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20  p->p4.z!=0 );.  
8880: 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
8890: 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
88a0: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f   pOp->opcode = O
88b0: 50 5f 53 74 72 69 6e 67 3b 0a 20 20 70 4f 70 2d  P_String;.  pOp-
88c0: 3e 70 31 20 3d 20 73 71 6c 69 74 65 33 53 74 72  >p1 = sqlite3Str
88d0: 6c 65 6e 33 30 28 70 4f 70 2d 3e 70 34 2e 7a 29  len30(pOp->p4.z)
88e0: 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ;..#ifndef SQLIT
88f0: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 69  E_OMIT_UTF16.  i
8900: 66 28 20 65 6e 63 6f 64 69 6e 67 21 3d 53 51 4c  f( encoding!=SQL
8910: 49 54 45 5f 55 54 46 38 20 29 7b 0a 20 20 20 20  ITE_UTF8 ){.    
8920: 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
8930: 4d 65 6d 53 65 74 53 74 72 28 70 4f 75 74 2c 20  MemSetStr(pOut, 
8940: 70 4f 70 2d 3e 70 34 2e 7a 2c 20 2d 31 2c 20 53  pOp->p4.z, -1, S
8950: 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c 49  QLITE_UTF8, SQLI
8960: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
8970: 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
8980: 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c  TE_OK || rc==SQL
8990: 49 54 45 5f 54 4f 4f 42 49 47 20 29 3b 0a 20 20  ITE_TOOBIG );.  
89a0: 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21    if( SQLITE_OK!
89b0: 3d 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e  =sqlite3VdbeChan
89c0: 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c  geEncoding(pOut,
89d0: 20 65 6e 63 6f 64 69 6e 67 29 20 29 20 67 6f 74   encoding) ) got
89e0: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61 73  o no_mem;.    as
89f0: 73 65 72 74 28 20 70 4f 75 74 2d 3e 73 7a 4d 61  sert( pOut->szMa
8a00: 6c 6c 6f 63 3e 30 20 26 26 20 70 4f 75 74 2d 3e  lloc>0 && pOut->
8a10: 7a 4d 61 6c 6c 6f 63 3d 3d 70 4f 75 74 2d 3e 7a  zMalloc==pOut->z
8a20: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
8a30: 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70  VdbeMemDynamic(p
8a40: 4f 75 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20 70  Out)==0 );.    p
8a50: 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 3d 20  Out->szMalloc = 
8a60: 30 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  0;.    pOut->fla
8a70: 67 73 20 7c 3d 20 4d 45 4d 5f 53 74 61 74 69 63  gs |= MEM_Static
8a80: 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  ;.    if( pOp->p
8a90: 34 74 79 70 65 3d 3d 50 34 5f 44 59 4e 41 4d 49  4type==P4_DYNAMI
8aa0: 43 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  C ){.      sqlit
8ab0: 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 4f 70  e3DbFree(db, pOp
8ac0: 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a 20  ->p4.z);.    }. 
8ad0: 20 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d     pOp->p4type =
8ae0: 20 50 34 5f 44 59 4e 41 4d 49 43 3b 0a 20 20 20   P4_DYNAMIC;.   
8af0: 20 70 4f 70 2d 3e 70 34 2e 7a 20 3d 20 70 4f 75   pOp->p4.z = pOu
8b00: 74 2d 3e 7a 3b 0a 20 20 20 20 70 4f 70 2d 3e 70  t->z;.    pOp->p
8b10: 31 20 3d 20 70 4f 75 74 2d 3e 6e 3b 0a 20 20 7d  1 = pOut->n;.  }
8b20: 0a 20 20 74 65 73 74 63 61 73 65 28 20 72 63 3d  .  testcase( rc=
8b30: 3d 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20 29  =SQLITE_TOOBIG )
8b40: 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70  ;.#endif.  if( p
8b50: 4f 70 2d 3e 70 31 3e 64 62 2d 3e 61 4c 69 6d 69  Op->p1>db->aLimi
8b60: 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
8b70: 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f  ENGTH] ){.    go
8b80: 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
8b90: 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
8ba0: 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 2f 2a 20  LITE_OK );.  /* 
8bb0: 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  Fall through to 
8bc0: 74 68 65 20 6e 65 78 74 20 63 61 73 65 2c 20 4f  the next case, O
8bd0: 50 5f 53 74 72 69 6e 67 20 2a 2f 0a 7d 0a 20 20  P_String */.}.  
8be0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 74 72 69  ./* Opcode: Stri
8bf0: 6e 67 20 50 31 20 50 32 20 50 33 20 50 34 20 50  ng P1 P2 P3 P4 P
8c00: 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  5.** Synopsis: r
8c10: 5b 50 32 5d 3d 27 50 34 27 20 28 6c 65 6e 3d 50  [P2]='P4' (len=P
8c20: 31 29 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72  1).**.** The str
8c30: 69 6e 67 20 76 61 6c 75 65 20 50 34 20 6f 66 20  ing value P4 of 
8c40: 6c 65 6e 67 74 68 20 50 31 20 28 62 79 74 65 73  length P1 (bytes
8c50: 29 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  ) is stored in r
8c60: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
8c70: 2a 20 49 66 20 50 33 20 69 73 20 6e 6f 74 20 7a  * If P3 is not z
8c80: 65 72 6f 20 61 6e 64 20 74 68 65 20 63 6f 6e 74  ero and the cont
8c90: 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
8ca0: 50 33 20 69 73 20 65 71 75 61 6c 20 74 6f 20 50  P3 is equal to P
8cb0: 35 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 64  5, then.** the d
8cc0: 61 74 61 74 79 70 65 20 6f 66 20 74 68 65 20 72  atatype of the r
8cd0: 65 67 69 73 74 65 72 20 50 32 20 69 73 20 63 6f  egister P2 is co
8ce0: 6e 76 65 72 74 65 64 20 74 6f 20 42 4c 4f 42 2e  nverted to BLOB.
8cf0: 20 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 69 73    The content is
8d00: 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 73 65 71  .** the same seq
8d10: 75 65 6e 63 65 20 6f 66 20 62 79 74 65 73 2c 20  uence of bytes, 
8d20: 69 74 20 69 73 20 6d 65 72 65 6c 79 20 69 6e 74  it is merely int
8d30: 65 72 70 72 65 74 65 64 20 61 73 20 61 20 42 4c  erpreted as a BL
8d40: 4f 42 20 69 6e 73 74 65 61 64 0a 2a 2a 20 6f 66  OB instead.** of
8d50: 20 61 20 73 74 72 69 6e 67 2c 20 61 73 20 69 66   a string, as if
8d60: 20 69 74 20 68 61 64 20 62 65 65 6e 20 43 41 53   it had been CAS
8d70: 54 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  T.  In other wor
8d80: 64 73 3a 0a 2a 2a 0a 2a 2a 20 69 66 28 20 50 33  ds:.**.** if( P3
8d90: 21 3d 30 20 61 6e 64 20 72 65 67 5b 50 33 5d 3d  !=0 and reg[P3]=
8da0: 3d 50 35 20 29 20 72 65 67 5b 50 32 5d 20 3a 3d  =P5 ) reg[P2] :=
8db0: 20 43 41 53 54 28 72 65 67 5b 50 32 5d 20 61 73   CAST(reg[P2] as
8dc0: 20 42 4c 4f 42 29 0a 2a 2f 0a 63 61 73 65 20 4f   BLOB).*/.case O
8dd0: 50 5f 53 74 72 69 6e 67 3a 20 7b 20 20 20 20 20  P_String: {     
8de0: 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
8df0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
8e00: 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74  4.z!=0 );.  pOut
8e10: 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
8e20: 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75  e(p, pOp);.  pOu
8e30: 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53  t->flags = MEM_S
8e40: 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45  tr|MEM_Static|ME
8e50: 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e  M_Term;.  pOut->
8e60: 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  z = pOp->p4.z;. 
8e70: 20 70 4f 75 74 2d 3e 6e 20 3d 20 70 4f 70 2d 3e   pOut->n = pOp->
8e80: 70 31 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20  p1;.  pOut->enc 
8e90: 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50  = encoding;.  UP
8ea0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
8eb0: 45 28 70 4f 75 74 29 3b 0a 23 69 66 6e 64 65 66  E(pOut);.#ifndef
8ec0: 20 53 51 4c 49 54 45 5f 4c 49 4b 45 5f 44 4f 45   SQLITE_LIKE_DOE
8ed0: 53 4e 54 5f 4d 41 54 43 48 5f 42 4c 4f 42 53 0a  SNT_MATCH_BLOBS.
8ee0: 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 3e 30 20    if( pOp->p3>0 
8ef0: 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
8f00: 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
8f10: 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
8f20: 20 29 3b 0a 20 20 20 20 70 49 6e 33 20 3d 20 26   );.    pIn3 = &
8f30: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
8f40: 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d     assert( pIn3-
8f50: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
8f60: 20 29 3b 0a 20 20 20 20 69 66 28 20 70 49 6e 33   );.    if( pIn3
8f70: 2d 3e 75 2e 69 3d 3d 70 4f 70 2d 3e 70 35 20 29  ->u.i==pOp->p5 )
8f80: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
8f90: 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 61 74  EM_Blob|MEM_Stat
8fa0: 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 7d  ic|MEM_Term;.  }
8fb0: 0a 23 65 6e 64 69 66 0a 20 20 62 72 65 61 6b 3b  .#endif.  break;
8fc0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
8fd0: 75 6c 6c 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ull P1 P2 P3 * *
8fe0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72  .** Synopsis:  r
8ff0: 5b 50 32 2e 2e 50 33 5d 3d 4e 55 4c 4c 0a 2a 2a  [P2..P3]=NULL.**
9000: 0a 2a 2a 20 57 72 69 74 65 20 61 20 4e 55 4c 4c  .** Write a NULL
9010: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 73 20   into registers 
9020: 50 32 2e 20 20 49 66 20 50 33 20 67 72 65 61 74  P2.  If P3 great
9030: 65 72 20 74 68 61 6e 20 50 32 2c 20 74 68 65 6e  er than P2, then
9040: 20 61 6c 73 6f 20 77 72 69 74 65 0a 2a 2a 20 4e   also write.** N
9050: 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ULL into registe
9060: 72 20 50 33 20 61 6e 64 20 65 76 65 72 79 20 72  r P3 and every r
9070: 65 67 69 73 74 65 72 20 69 6e 20 62 65 74 77 65  egister in betwe
9080: 65 6e 20 50 32 20 61 6e 64 20 50 33 2e 20 20 49  en P2 and P3.  I
9090: 66 20 50 33 0a 2a 2a 20 69 73 20 6c 65 73 73 20  f P3.** is less 
90a0: 74 68 61 6e 20 50 32 20 28 74 79 70 69 63 61 6c  than P2 (typical
90b0: 6c 79 20 50 33 20 69 73 20 7a 65 72 6f 29 20 74  ly P3 is zero) t
90c0: 68 65 6e 20 6f 6e 6c 79 20 72 65 67 69 73 74 65  hen only registe
90d0: 72 20 50 32 20 69 73 0a 2a 2a 20 73 65 74 20 74  r P2 is.** set t
90e0: 6f 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 49 66  o NULL..**.** If
90f0: 20 74 68 65 20 50 31 20 76 61 6c 75 65 20 69 73   the P1 value is
9100: 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20   non-zero, then 
9110: 61 6c 73 6f 20 73 65 74 20 74 68 65 20 4d 45 4d  also set the MEM
9120: 5f 43 6c 65 61 72 65 64 20 66 6c 61 67 20 73 6f  _Cleared flag so
9130: 20 74 68 61 74 0a 2a 2a 20 4e 55 4c 4c 20 76 61   that.** NULL va
9140: 6c 75 65 73 20 77 69 6c 6c 20 6e 6f 74 20 63 6f  lues will not co
9150: 6d 70 61 72 65 20 65 71 75 61 6c 20 65 76 65 6e  mpare equal even
9160: 20 69 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45   if SQLITE_NULLE
9170: 51 20 69 73 20 73 65 74 20 6f 6e 0a 2a 2a 20 4f  Q is set on.** O
9180: 50 5f 4e 65 20 6f 72 20 4f 50 5f 45 71 2e 0a 2a  P_Ne or OP_Eq..*
9190: 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 3a 20  /.case OP_Null: 
91a0: 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  {           /* o
91b0: 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74  ut2 */.  int cnt
91c0: 3b 0a 20 20 75 31 36 20 6e 75 6c 6c 46 6c 61 67  ;.  u16 nullFlag
91d0: 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ;.  pOut = out2P
91e0: 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
91f0: 29 3b 0a 20 20 63 6e 74 20 3d 20 70 4f 70 2d 3e  );.  cnt = pOp->
9200: 70 33 2d 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73  p3-pOp->p2;.  as
9210: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28  sert( pOp->p3<=(
9220: 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
9230: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75  Cursor) );.  pOu
9240: 74 2d 3e 66 6c 61 67 73 20 3d 20 6e 75 6c 6c 46  t->flags = nullF
9250: 6c 61 67 20 3d 20 70 4f 70 2d 3e 70 31 20 3f 20  lag = pOp->p1 ? 
9260: 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 43 6c  (MEM_Null|MEM_Cl
9270: 65 61 72 65 64 29 20 3a 20 4d 45 4d 5f 4e 75 6c  eared) : MEM_Nul
9280: 6c 3b 0a 20 20 77 68 69 6c 65 28 20 63 6e 74 3e  l;.  while( cnt>
9290: 30 20 29 7b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b  0 ){.    pOut++;
92a0: 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  .    memAboutToC
92b0: 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a  hange(p, pOut);.
92c0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
92d0: 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b  emSetNull(pOut);
92e0: 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  .    pOut->flags
92f0: 20 3d 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20 20   = nullFlag;.   
9300: 20 63 6e 74 2d 2d 3b 0a 20 20 7d 0a 20 20 62 72   cnt--;.  }.  br
9310: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
9320: 65 3a 20 53 6f 66 74 4e 75 6c 6c 20 50 31 20 2a  e: SoftNull P1 *
9330: 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
9340: 69 73 3a 20 20 72 5b 50 31 5d 3d 4e 55 4c 4c 0a  is:  r[P1]=NULL.
9350: 2a 2a 0a 2a 2a 20 53 65 74 20 72 65 67 69 73 74  **.** Set regist
9360: 65 72 20 50 31 20 74 6f 20 68 61 76 65 20 74 68  er P1 to have th
9370: 65 20 76 61 6c 75 65 20 4e 55 4c 4c 20 61 73 20  e value NULL as 
9380: 73 65 65 6e 20 62 79 20 74 68 65 20 4f 50 5f 4d  seen by the OP_M
9390: 61 6b 65 52 65 63 6f 72 64 0a 2a 2a 20 69 6e 73  akeRecord.** ins
93a0: 74 72 75 63 74 69 6f 6e 2c 20 62 75 74 20 64 6f  truction, but do
93b0: 20 6e 6f 74 20 66 72 65 65 20 61 6e 79 20 73 74   not free any st
93c0: 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d 65 6d  ring or blob mem
93d0: 6f 72 79 20 61 73 73 6f 63 69 61 74 65 64 20 77  ory associated w
93e0: 69 74 68 0a 2a 2a 20 74 68 65 20 72 65 67 69 73  ith.** the regis
93f0: 74 65 72 2c 20 73 6f 20 74 68 61 74 20 69 66 20  ter, so that if 
9400: 74 68 65 20 76 61 6c 75 65 20 77 61 73 20 61 20  the value was a 
9410: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74  string or blob t
9420: 68 61 74 20 77 61 73 0a 2a 2a 20 70 72 65 76 69  hat was.** previ
9430: 6f 75 73 6c 79 20 63 6f 70 69 65 64 20 75 73 69  ously copied usi
9440: 6e 67 20 4f 50 5f 53 43 6f 70 79 2c 20 74 68 65  ng OP_SCopy, the
9450: 20 63 6f 70 69 65 73 20 77 69 6c 6c 20 63 6f 6e   copies will con
9460: 74 69 6e 75 65 20 74 6f 20 62 65 20 76 61 6c 69  tinue to be vali
9470: 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f  d..*/.case OP_So
9480: 66 74 4e 75 6c 6c 3a 20 7b 0a 20 20 61 73 73 65  ftNull: {.  asse
9490: 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26  rt( pOp->p1>0 &&
94a0: 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d   pOp->p1<=(p->nM
94b0: 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
94c0: 72 29 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26  r) );.  pOut = &
94d0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
94e0: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 28   pOut->flags = (
94f0: 70 4f 75 74 2d 3e 66 6c 61 67 73 7c 4d 45 4d 5f  pOut->flags|MEM_
9500: 4e 75 6c 6c 29 26 7e 4d 45 4d 5f 55 6e 64 65 66  Null)&~MEM_Undef
9510: 69 6e 65 64 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ined;.  break;.}
9520: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 6c 6f  ../* Opcode: Blo
9530: 62 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  b P1 P2 * P4 *.*
9540: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
9550: 5d 3d 50 34 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a  ]=P4 (len=P1).**
9560: 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20 74 6f  .** P4 points to
9570: 20 61 20 62 6c 6f 62 20 6f 66 20 64 61 74 61 20   a blob of data 
9580: 50 31 20 62 79 74 65 73 20 6c 6f 6e 67 2e 20 20  P1 bytes long.  
9590: 53 74 6f 72 65 20 74 68 69 73 0a 2a 2a 20 62 6c  Store this.** bl
95a0: 6f 62 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ob in register P
95b0: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 6c  2..*/.case OP_Bl
95c0: 6f 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ob: {           
95d0: 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
95e0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
95f0: 31 20 3c 3d 20 53 51 4c 49 54 45 5f 4d 41 58 5f  1 <= SQLITE_MAX_
9600: 4c 45 4e 47 54 48 20 29 3b 0a 20 20 70 4f 75 74  LENGTH );.  pOut
9610: 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
9620: 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 73 71 6c  e(p, pOp);.  sql
9630: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74  ite3VdbeMemSetSt
9640: 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e  r(pOut, pOp->p4.
9650: 7a 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 30  z, pOp->p1, 0, 0
9660: 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d  );.  pOut->enc =
9670: 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44   encoding;.  UPD
9680: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
9690: 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
96a0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  .}../* Opcode: V
96b0: 61 72 69 61 62 6c 65 20 50 31 20 50 32 20 2a 20  ariable P1 P2 * 
96c0: 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
96d0: 3a 20 72 5b 50 32 5d 3d 70 61 72 61 6d 65 74 65  : r[P2]=paramete
96e0: 72 28 50 31 2c 50 34 29 0a 2a 2a 0a 2a 2a 20 54  r(P1,P4).**.** T
96f0: 72 61 6e 73 66 65 72 20 74 68 65 20 76 61 6c 75  ransfer the valu
9700: 65 73 20 6f 66 20 62 6f 75 6e 64 20 70 61 72 61  es of bound para
9710: 6d 65 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65  meter P1 into re
9720: 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20  gister P2.**.** 
9730: 49 66 20 74 68 65 20 70 61 72 61 6d 65 74 65 72  If the parameter
9740: 20 69 73 20 6e 61 6d 65 64 2c 20 74 68 65 6e 20   is named, then 
9750: 69 74 73 20 6e 61 6d 65 20 61 70 70 65 61 72 73  its name appears
9760: 20 69 6e 20 50 34 2e 0a 2a 2a 20 54 68 65 20 50   in P4..** The P
9770: 34 20 76 61 6c 75 65 20 69 73 20 75 73 65 64 20  4 value is used 
9780: 62 79 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  by sqlite3_bind_
9790: 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28 29  parameter_name()
97a0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61 72  ..*/.case OP_Var
97b0: 69 61 62 6c 65 3a 20 7b 20 20 20 20 20 20 20 20  iable: {        
97c0: 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
97d0: 20 4d 65 6d 20 2a 70 56 61 72 3b 20 20 20 20 20   Mem *pVar;     
97e0: 20 20 2f 2a 20 56 61 6c 75 65 20 62 65 69 6e 67    /* Value being
97f0: 20 74 72 61 6e 73 66 65 72 72 65 64 20 2a 2f 0a   transferred */.
9800: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
9810: 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  p1>0 && pOp->p1<
9820: 3d 70 2d 3e 6e 56 61 72 20 29 3b 0a 20 20 61 73  =p->nVar );.  as
9830: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 3d  sert( pOp->p4.z=
9840: 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 7a 3d  =0 || pOp->p4.z=
9850: 3d 70 2d 3e 61 7a 56 61 72 5b 70 4f 70 2d 3e 70  =p->azVar[pOp->p
9860: 31 2d 31 5d 20 29 3b 0a 20 20 70 56 61 72 20 3d  1-1] );.  pVar =
9870: 20 26 70 2d 3e 61 56 61 72 5b 70 4f 70 2d 3e 70   &p->aVar[pOp->p
9880: 31 20 2d 20 31 5d 3b 0a 20 20 69 66 28 20 73 71  1 - 1];.  if( sq
9890: 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42  lite3VdbeMemTooB
98a0: 69 67 28 70 56 61 72 29 20 29 7b 0a 20 20 20 20  ig(pVar) ){.    
98b0: 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
98c0: 7d 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  }.  pOut = out2P
98d0: 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
98e0: 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
98f0: 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70  MemShallowCopy(p
9900: 4f 75 74 2c 20 70 56 61 72 2c 20 4d 45 4d 5f 53  Out, pVar, MEM_S
9910: 74 61 74 69 63 29 3b 0a 20 20 55 50 44 41 54 45  tatic);.  UPDATE
9920: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
9930: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
9940: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 6f 76 65  ./* Opcode: Move
9950: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
9960: 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 32   Synopsis:  r[P2
9970: 40 50 33 5d 3d 72 5b 50 31 40 50 33 5d 0a 2a 2a  @P3]=r[P1@P3].**
9980: 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20 50 33 20  .** Move the P3 
9990: 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74  values in regist
99a0: 65 72 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20 6f  er P1..P1+P3-1 o
99b0: 76 65 72 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69  ver into.** regi
99c0: 73 74 65 72 73 20 50 32 2e 2e 50 32 2b 50 33 2d  sters P2..P2+P3-
99d0: 31 2e 20 20 52 65 67 69 73 74 65 72 73 20 50 31  1.  Registers P1
99e0: 2e 2e 50 31 2b 50 33 2d 31 20 61 72 65 0a 2a 2a  ..P1+P3-1 are.**
99f0: 20 6c 65 66 74 20 68 6f 6c 64 69 6e 67 20 61 20   left holding a 
9a00: 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20 61 6e 20  NULL.  It is an 
9a10: 65 72 72 6f 72 20 66 6f 72 20 72 65 67 69 73 74  error for regist
9a20: 65 72 20 72 61 6e 67 65 73 0a 2a 2a 20 50 31 2e  er ranges.** P1.
9a30: 2e 50 31 2b 50 33 2d 31 20 61 6e 64 20 50 32 2e  .P1+P3-1 and P2.
9a40: 2e 50 32 2b 50 33 2d 31 20 74 6f 20 6f 76 65 72  .P2+P3-1 to over
9a50: 6c 61 70 2e 20 20 49 74 20 69 73 20 61 6e 20 65  lap.  It is an e
9a60: 72 72 6f 72 0a 2a 2a 20 66 6f 72 20 50 33 20 74  rror.** for P3 t
9a70: 6f 20 62 65 20 6c 65 73 73 20 74 68 61 6e 20 31  o be less than 1
9a80: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 6f 76  ..*/.case OP_Mov
9a90: 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 20 20 20  e: {.  int n;   
9aa0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
9ab0: 72 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 6c  r of registers l
9ac0: 65 66 74 20 74 6f 20 63 6f 70 79 20 2a 2f 0a 20  eft to copy */. 
9ad0: 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20 20   int p1;        
9ae0: 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f    /* Register to
9af0: 20 63 6f 70 79 20 66 72 6f 6d 20 2a 2f 0a 20 20   copy from */.  
9b00: 69 6e 74 20 70 32 3b 20 20 20 20 20 20 20 20 20  int p2;         
9b10: 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20   /* Register to 
9b20: 63 6f 70 79 20 74 6f 20 2a 2f 0a 0a 20 20 6e 20  copy to */..  n 
9b30: 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 31 20  = pOp->p3;.  p1 
9b40: 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20  = pOp->p1;.  p2 
9b50: 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73  = pOp->p2;.  ass
9b60: 65 72 74 28 20 6e 3e 30 20 26 26 20 70 31 3e 30  ert( n>0 && p1>0
9b70: 20 26 26 20 70 32 3e 30 20 29 3b 0a 20 20 61 73   && p2>0 );.  as
9b80: 73 65 72 74 28 20 70 31 2b 6e 3c 3d 70 32 20 7c  sert( p1+n<=p2 |
9b90: 7c 20 70 32 2b 6e 3c 3d 70 31 20 29 3b 0a 0a 20  | p2+n<=p1 );.. 
9ba0: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 31   pIn1 = &aMem[p1
9bb0: 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ];.  pOut = &aMe
9bc0: 6d 5b 70 32 5d 3b 0a 20 20 64 6f 7b 0a 20 20 20  m[p2];.  do{.   
9bd0: 20 61 73 73 65 72 74 28 20 70 4f 75 74 3c 3d 26   assert( pOut<=&
9be0: 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2b 31 20  aMem[(p->nMem+1 
9bf0: 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29  - p->nCursor)] )
9c00: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49  ;.    assert( pI
9c10: 6e 31 3c 3d 26 61 4d 65 6d 5b 28 70 2d 3e 6e 4d  n1<=&aMem[(p->nM
9c20: 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
9c30: 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72  r)] );.    asser
9c40: 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49  t( memIsValid(pI
9c50: 6e 31 29 20 29 3b 0a 20 20 20 20 6d 65 6d 41 62  n1) );.    memAb
9c60: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
9c70: 4f 75 74 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  Out);.    sqlite
9c80: 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70 4f 75  3VdbeMemMove(pOu
9c90: 74 2c 20 70 49 6e 31 29 3b 0a 23 69 66 64 65 66  t, pIn1);.#ifdef
9ca0: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
9cb0: 20 20 69 66 28 20 70 4f 75 74 2d 3e 70 53 63 6f    if( pOut->pSco
9cc0: 70 79 46 72 6f 6d 3e 3d 26 61 4d 65 6d 5b 70 31  pyFrom>=&aMem[p1
9cd0: 5d 20 26 26 20 70 4f 75 74 2d 3e 70 53 63 6f 70  ] && pOut->pScop
9ce0: 79 46 72 6f 6d 3c 70 4f 75 74 20 29 7b 0a 20 20  yFrom<pOut ){.  
9cf0: 20 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79      pOut->pScopy
9d00: 46 72 6f 6d 20 2b 3d 20 70 4f 70 2d 3e 70 32 20  From += pOp->p2 
9d10: 2d 20 70 31 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  - p1;.    }.#end
9d20: 69 66 0a 20 20 20 20 44 65 65 70 68 65 6d 65 72  if.    Deephemer
9d30: 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 20 20 20  alize(pOut);.   
9d40: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
9d50: 70 32 2b 2b 2c 20 70 4f 75 74 29 3b 0a 20 20 20  p2++, pOut);.   
9d60: 20 70 49 6e 31 2b 2b 3b 0a 20 20 20 20 70 4f 75   pIn1++;.    pOu
9d70: 74 2b 2b 3b 0a 20 20 7d 77 68 69 6c 65 28 20 2d  t++;.  }while( -
9d80: 2d 6e 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  -n );.  break;.}
9d90: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 70  ../* Opcode: Cop
9da0: 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  y P1 P2 P3 * *.*
9db0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
9dc0: 40 50 33 2b 31 5d 3d 72 5b 50 31 40 50 33 2b 31  @P3+1]=r[P1@P3+1
9dd0: 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 63  ].**.** Make a c
9de0: 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65 72 73  opy of registers
9df0: 20 50 31 2e 2e 50 31 2b 50 33 20 69 6e 74 6f 20   P1..P1+P3 into 
9e00: 72 65 67 69 73 74 65 72 73 20 50 32 2e 2e 50 32  registers P2..P2
9e10: 2b 50 33 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  +P3..**.** This 
9e20: 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65  instruction make
9e30: 73 20 61 20 64 65 65 70 20 63 6f 70 79 20 6f 66  s a deep copy of
9e40: 20 74 68 65 20 76 61 6c 75 65 2e 20 20 41 20 64   the value.  A d
9e50: 75 70 6c 69 63 61 74 65 0a 2a 2a 20 69 73 20 6d  uplicate.** is m
9e60: 61 64 65 20 6f 66 20 61 6e 79 20 73 74 72 69 6e  ade of any strin
9e70: 67 20 6f 72 20 62 6c 6f 62 20 63 6f 6e 73 74 61  g or blob consta
9e80: 6e 74 2e 20 20 53 65 65 20 61 6c 73 6f 20 4f 50  nt.  See also OP
9e90: 5f 53 43 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20  _SCopy..*/.case 
9ea0: 4f 50 5f 43 6f 70 79 3a 20 7b 0a 20 20 69 6e 74  OP_Copy: {.  int
9eb0: 20 6e 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e   n;..  n = pOp->
9ec0: 70 33 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  p3;.  pIn1 = &aM
9ed0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
9ee0: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
9ef0: 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p2];.  assert( 
9f00: 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20  pOut!=pIn1 );.  
9f10: 77 68 69 6c 65 28 20 31 20 29 7b 0a 20 20 20 20  while( 1 ){.    
9f20: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68  sqlite3VdbeMemSh
9f30: 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20  allowCopy(pOut, 
9f40: 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29  pIn1, MEM_Ephem)
9f50: 3b 0a 20 20 20 20 44 65 65 70 68 65 6d 65 72 61  ;.    Deephemera
9f60: 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 23 69 66 64  lize(pOut);.#ifd
9f70: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
9f80: 20 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79      pOut->pScopy
9f90: 46 72 6f 6d 20 3d 20 30 3b 0a 23 65 6e 64 69 66  From = 0;.#endif
9fa0: 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
9fb0: 41 43 45 28 70 4f 70 2d 3e 70 32 2b 70 4f 70 2d  ACE(pOp->p2+pOp-
9fc0: 3e 70 33 2d 6e 2c 20 70 4f 75 74 29 3b 0a 20 20  >p3-n, pOut);.  
9fd0: 20 20 69 66 28 20 28 6e 2d 2d 29 3d 3d 30 20 29    if( (n--)==0 )
9fe0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 70 4f 75 74   break;.    pOut
9ff0: 2b 2b 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a  ++;.    pIn1++;.
a000: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
a010: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 43 6f 70 79  /* Opcode: SCopy
a020: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
a030: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
a040: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65  r[P1].**.** Make
a050: 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20   a shallow copy 
a060: 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69  of register P1 i
a070: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
a080: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74  .**.** This inst
a090: 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20  ruction makes a 
a0a0: 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20  shallow copy of 
a0b0: 74 68 65 20 76 61 6c 75 65 2e 20 20 49 66 20 74  the value.  If t
a0c0: 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 61  he value.** is a
a0d0: 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 2c   string or blob,
a0e0: 20 74 68 65 6e 20 74 68 65 20 63 6f 70 79 20 69   then the copy i
a0f0: 73 20 6f 6e 6c 79 20 61 20 70 6f 69 6e 74 65 72  s only a pointer
a100: 20 74 6f 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69   to the.** origi
a110: 6e 61 6c 20 61 6e 64 20 68 65 6e 63 65 20 69 66  nal and hence if
a120: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 63 68   the original ch
a130: 61 6e 67 65 73 20 73 6f 20 77 69 6c 6c 20 74 68  anges so will th
a140: 65 20 63 6f 70 79 2e 0a 2a 2a 20 57 6f 72 73 65  e copy..** Worse
a150: 2c 20 69 66 20 74 68 65 20 6f 72 69 67 69 6e 61  , if the origina
a160: 6c 20 69 73 20 64 65 61 6c 6c 6f 63 61 74 65 64  l is deallocated
a170: 2c 20 74 68 65 20 63 6f 70 79 20 62 65 63 6f 6d  , the copy becom
a180: 65 73 20 69 6e 76 61 6c 69 64 2e 0a 2a 2a 20 54  es invalid..** T
a190: 68 75 73 20 74 68 65 20 70 72 6f 67 72 61 6d 20  hus the program 
a1a0: 6d 75 73 74 20 67 75 61 72 61 6e 74 65 65 20 74  must guarantee t
a1b0: 68 61 74 20 74 68 65 20 6f 72 69 67 69 6e 61 6c  hat the original
a1c0: 20 77 69 6c 6c 20 6e 6f 74 20 63 68 61 6e 67 65   will not change
a1d0: 0a 2a 2a 20 64 75 72 69 6e 67 20 74 68 65 20 6c  .** during the l
a1e0: 69 66 65 74 69 6d 65 20 6f 66 20 74 68 65 20 63  ifetime of the c
a1f0: 6f 70 79 2e 20 20 55 73 65 20 4f 50 5f 43 6f 70  opy.  Use OP_Cop
a200: 79 20 74 6f 20 6d 61 6b 65 20 61 20 63 6f 6d 70  y to make a comp
a210: 6c 65 74 65 0a 2a 2a 20 63 6f 70 79 2e 0a 2a 2f  lete.** copy..*/
a220: 0a 63 61 73 65 20 4f 50 5f 53 43 6f 70 79 3a 20  .case OP_SCopy: 
a230: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
a240: 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d  out2 */.  pIn1 =
a250: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
a260: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
a270: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65  pOp->p2];.  asse
a280: 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20 29  rt( pOut!=pIn1 )
a290: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
a2a0: 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f  emShallowCopy(pO
a2b0: 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70  ut, pIn1, MEM_Ep
a2c0: 68 65 6d 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  hem);.#ifdef SQL
a2d0: 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20  ITE_DEBUG.  if( 
a2e0: 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d  pOut->pScopyFrom
a2f0: 3d 3d 30 20 29 20 70 4f 75 74 2d 3e 70 53 63 6f  ==0 ) pOut->pSco
a300: 70 79 46 72 6f 6d 20 3d 20 70 49 6e 31 3b 0a 23  pyFrom = pIn1;.#
a310: 65 6e 64 69 66 0a 20 20 62 72 65 61 6b 3b 0a 7d  endif.  break;.}
a320: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74  ../* Opcode: Int
a330: 43 6f 70 79 20 50 31 20 50 32 20 2a 20 2a 20 2a  Copy P1 P2 * * *
a340: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
a350: 50 32 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  P2]=r[P1].**.** 
a360: 54 72 61 6e 73 66 65 72 20 74 68 65 20 69 6e 74  Transfer the int
a370: 65 67 65 72 20 76 61 6c 75 65 20 68 65 6c 64 20  eger value held 
a380: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
a390: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
a3a0: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61  .**.** This is a
a3b0: 6e 20 6f 70 74 69 6d 69 7a 65 64 20 76 65 72 73  n optimized vers
a3c0: 69 6f 6e 20 6f 66 20 53 43 6f 70 79 20 74 68 61  ion of SCopy tha
a3d0: 74 20 77 6f 72 6b 73 20 6f 6e 6c 79 20 66 6f 72  t works only for
a3e0: 20 69 6e 74 65 67 65 72 0a 2a 2a 20 76 61 6c 75   integer.** valu
a3f0: 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  es..*/.case OP_I
a400: 6e 74 43 6f 70 79 3a 20 7b 20 20 20 20 20 20 20  ntCopy: {       
a410: 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
a420: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
a430: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
a440: 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  t( (pIn1->flags 
a450: 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b  & MEM_Int)!=0 );
a460: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
a470: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69  pOp->p2];.  sqli
a480: 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74  te3VdbeMemSetInt
a490: 36 34 28 70 4f 75 74 2c 20 70 49 6e 31 2d 3e 75  64(pOut, pIn1->u
a4a0: 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .i);.  break;.}.
a4b0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 75  ./* Opcode: Resu
a4c0: 6c 74 52 6f 77 20 50 31 20 50 32 20 2a 20 2a 20  ltRow P1 P2 * * 
a4d0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
a4e0: 6f 75 74 70 75 74 3d 72 5b 50 31 40 50 32 5d 0a  output=r[P1@P2].
a4f0: 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74  **.** The regist
a500: 65 72 73 20 50 31 20 74 68 72 6f 75 67 68 20 50  ers P1 through P
a510: 31 2b 50 32 2d 31 20 63 6f 6e 74 61 69 6e 20 61  1+P2-1 contain a
a520: 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 0a 2a   single row of.*
a530: 2a 20 72 65 73 75 6c 74 73 2e 20 54 68 69 73 20  * results. This 
a540: 6f 70 63 6f 64 65 20 63 61 75 73 65 73 20 74 68  opcode causes th
a550: 65 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  e sqlite3_step()
a560: 20 63 61 6c 6c 20 74 6f 20 74 65 72 6d 69 6e 61   call to termina
a570: 74 65 0a 2a 2a 20 77 69 74 68 20 61 6e 20 53 51  te.** with an SQ
a580: 4c 49 54 45 5f 52 4f 57 20 72 65 74 75 72 6e 20  LITE_ROW return 
a590: 63 6f 64 65 20 61 6e 64 20 69 74 20 73 65 74 73  code and it sets
a5a0: 20 75 70 20 74 68 65 20 73 71 6c 69 74 65 33 5f   up the sqlite3_
a5b0: 73 74 6d 74 0a 2a 2a 20 73 74 72 75 63 74 75 72  stmt.** structur
a5c0: 65 20 74 6f 20 70 72 6f 76 69 64 65 20 61 63 63  e to provide acc
a5d0: 65 73 73 20 74 6f 20 74 68 65 20 72 28 50 31 29  ess to the r(P1)
a5e0: 2e 2e 72 28 50 31 2b 50 32 2d 31 29 20 76 61 6c  ..r(P1+P2-1) val
a5f0: 75 65 73 20 61 73 0a 2a 2a 20 74 68 65 20 72 65  ues as.** the re
a600: 73 75 6c 74 20 72 6f 77 2e 0a 2a 2f 0a 63 61 73  sult row..*/.cas
a610: 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 3a 20  e OP_ResultRow: 
a620: 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20  {.  Mem *pMem;. 
a630: 20 69 6e 74 20 69 3b 0a 20 20 61 73 73 65 72 74   int i;.  assert
a640: 28 20 70 2d 3e 6e 52 65 73 43 6f 6c 75 6d 6e 3d  ( p->nResColumn=
a650: 3d 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 61 73  =pOp->p2 );.  as
a660: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
a670: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
a680: 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 3c 3d 28 70  ->p1+pOp->p2<=(p
a690: 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
a6a0: 75 72 73 6f 72 29 2b 31 20 29 3b 0a 0a 23 69 66  ursor)+1 );..#if
a6b0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
a6c0: 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41  _PROGRESS_CALLBA
a6d0: 43 4b 0a 20 20 2f 2a 20 52 75 6e 20 74 68 65 20  CK.  /* Run the 
a6e0: 70 72 6f 67 72 65 73 73 20 63 6f 75 6e 74 65 72  progress counter
a6f0: 20 6a 75 73 74 20 62 65 66 6f 72 65 20 72 65 74   just before ret
a700: 75 72 6e 69 6e 67 2e 0a 20 20 2a 2f 0a 20 20 69  urning..  */.  i
a710: 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73  f( db->xProgress
a720: 21 3d 30 0a 20 20 20 26 26 20 6e 56 6d 53 74 65  !=0.   && nVmSte
a730: 70 3e 3d 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69  p>=nProgressLimi
a740: 74 0a 20 20 20 26 26 20 64 62 2d 3e 78 50 72 6f  t.   && db->xPro
a750: 67 72 65 73 73 28 64 62 2d 3e 70 50 72 6f 67 72  gress(db->pProgr
a760: 65 73 73 41 72 67 29 21 3d 30 0a 20 20 29 7b 0a  essArg)!=0.  ){.
a770: 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
a780: 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 20 20 67  INTERRUPT;.    g
a790: 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
a7a0: 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 23 65 6e 64  _error;.  }.#end
a7b0: 69 66 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69 73  if..  /* If this
a7c0: 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20 76   statement has v
a7d0: 69 6f 6c 61 74 65 64 20 69 6d 6d 65 64 69 61 74  iolated immediat
a7e0: 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  e foreign key co
a7f0: 6e 73 74 72 61 69 6e 74 73 2c 20 64 6f 0a 20 20  nstraints, do.  
a800: 2a 2a 20 6e 6f 74 20 72 65 74 75 72 6e 20 74 68  ** not return th
a810: 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  e number of rows
a820: 20 6d 6f 64 69 66 69 65 64 2e 20 41 6e 64 20 64   modified. And d
a830: 6f 20 6e 6f 74 20 52 45 4c 45 41 53 45 20 74 68  o not RELEASE th
a840: 65 20 73 74 61 74 65 6d 65 6e 74 0a 20 20 2a 2a  e statement.  **
a850: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49 74   transaction. It
a860: 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 6f 6c   needs to be rol
a870: 6c 65 64 20 62 61 63 6b 2e 20 20 2a 2f 0a 20 20  led back.  */.  
a880: 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 28  if( SQLITE_OK!=(
a890: 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
a8a0: 43 68 65 63 6b 46 6b 28 70 2c 20 30 29 29 20 29  CheckFk(p, 0)) )
a8b0: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 64 62  {.    assert( db
a8c0: 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 43  ->flags&SQLITE_C
a8d0: 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 20 20  ountRows );.    
a8e0: 61 73 73 65 72 74 28 20 70 2d 3e 75 73 65 73 53  assert( p->usesS
a8f0: 74 6d 74 4a 6f 75 72 6e 61 6c 20 29 3b 0a 20 20  tmtJournal );.  
a900: 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
a910: 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 0a  _to_error;.  }..
a920: 20 20 2f 2a 20 49 66 20 74 68 65 20 53 51 4c 49    /* If the SQLI
a930: 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 66 6c 61  TE_CountRows fla
a940: 67 20 69 73 20 73 65 74 20 69 6e 20 73 71 6c 69  g is set in sqli
a950: 74 65 33 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20  te3.flags mask, 
a960: 74 68 65 6e 20 0a 20 20 2a 2a 20 44 4d 4c 20 73  then .  ** DML s
a970: 74 61 74 65 6d 65 6e 74 73 20 69 6e 76 6f 6b 65  tatements invoke
a980: 20 74 68 69 73 20 6f 70 63 6f 64 65 20 74 6f 20   this opcode to 
a990: 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65  return the numbe
a9a0: 72 20 6f 66 20 72 6f 77 73 20 0a 20 20 2a 2a 20  r of rows .  ** 
a9b0: 6d 6f 64 69 66 69 65 64 20 74 6f 20 74 68 65 20  modified to the 
a9c0: 75 73 65 72 2e 20 54 68 69 73 20 69 73 20 74 68  user. This is th
a9d0: 65 20 6f 6e 6c 79 20 77 61 79 20 74 68 61 74 20  e only way that 
a9e0: 61 20 56 4d 20 74 68 61 74 0a 20 20 2a 2a 20 6f  a VM that.  ** o
a9f0: 70 65 6e 73 20 61 20 73 74 61 74 65 6d 65 6e 74  pens a statement
aa00: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79   transaction may
aa10: 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70 63   invoke this opc
aa20: 6f 64 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49  ode..  **.  ** I
aa30: 6e 20 63 61 73 65 20 74 68 69 73 20 69 73 20 73  n case this is s
aa40: 75 63 68 20 61 20 73 74 61 74 65 6d 65 6e 74 2c  uch a statement,
aa50: 20 63 6c 6f 73 65 20 61 6e 79 20 73 74 61 74 65   close any state
aa60: 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
aa70: 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20  .  ** opened by 
aa80: 74 68 69 73 20 56 4d 20 62 65 66 6f 72 65 20 72  this VM before r
aa90: 65 74 75 72 6e 69 6e 67 20 63 6f 6e 74 72 6f 6c  eturning control
aaa0: 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54 68   to the user. Th
aab0: 69 73 20 69 73 20 74 6f 0a 20 20 2a 2a 20 65 6e  is is to.  ** en
aac0: 73 75 72 65 20 74 68 61 74 20 73 74 61 74 65 6d  sure that statem
aad0: 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73  ent-transactions
aae0: 20 61 72 65 20 61 6c 77 61 79 73 20 6e 65 73 74   are always nest
aaf0: 65 64 2c 20 6e 6f 74 20 6f 76 65 72 6c 61 70 70  ed, not overlapp
ab00: 69 6e 67 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65  ing..  ** If the
ab10: 20 6f 70 65 6e 20 73 74 61 74 65 6d 65 6e 74 2d   open statement-
ab20: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e  transaction is n
ab30: 6f 74 20 63 6c 6f 73 65 64 20 68 65 72 65 2c 20  ot closed here, 
ab40: 74 68 65 6e 20 74 68 65 20 75 73 65 72 0a 20 20  then the user.  
ab50: 2a 2a 20 6d 61 79 20 73 74 65 70 20 61 6e 6f 74  ** may step anot
ab60: 68 65 72 20 56 4d 20 74 68 61 74 20 6f 70 65 6e  her VM that open
ab70: 73 20 69 74 73 20 6f 77 6e 20 73 74 61 74 65 6d  s its own statem
ab80: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  ent transaction.
ab90: 20 54 68 69 73 0a 20 20 2a 2a 20 6d 61 79 20 6c   This.  ** may l
aba0: 65 61 64 20 74 6f 20 6f 76 65 72 6c 61 70 70 69  ead to overlappi
abb0: 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  ng statement tra
abc0: 6e 73 61 63 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a  nsactions..  **.
abd0: 20 20 2a 2a 20 54 68 65 20 73 74 61 74 65 6d 65    ** The stateme
abe0: 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  nt transaction i
abf0: 73 20 6e 65 76 65 72 20 61 20 74 6f 70 2d 6c 65  s never a top-le
ac00: 76 65 6c 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  vel transaction.
ac10: 20 20 48 65 6e 63 65 0a 20 20 2a 2a 20 74 68 65    Hence.  ** the
ac20: 20 52 45 4c 45 41 53 45 20 63 61 6c 6c 20 62 65   RELEASE call be
ac30: 6c 6f 77 20 63 61 6e 20 6e 65 76 65 72 20 66 61  low can never fa
ac40: 69 6c 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72  il..  */.  asser
ac50: 74 28 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74  t( p->iStatement
ac60: 3d 3d 30 20 7c 7c 20 64 62 2d 3e 66 6c 61 67 73  ==0 || db->flags
ac70: 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77  &SQLITE_CountRow
ac80: 73 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  s );.  rc = sqli
ac90: 74 65 33 56 64 62 65 43 6c 6f 73 65 53 74 61 74  te3VdbeCloseStat
aca0: 65 6d 65 6e 74 28 70 2c 20 53 41 56 45 50 4f 49  ement(p, SAVEPOI
acb0: 4e 54 5f 52 45 4c 45 41 53 45 29 3b 0a 20 20 61  NT_RELEASE);.  a
acc0: 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
acd0: 45 5f 4f 4b 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e  E_OK );..  /* In
ace0: 76 61 6c 69 64 61 74 65 20 61 6c 6c 20 65 70 68  validate all eph
acf0: 65 6d 65 72 61 6c 20 63 75 72 73 6f 72 20 72 6f  emeral cursor ro
ad00: 77 20 63 61 63 68 65 73 20 2a 2f 0a 20 20 70 2d  w caches */.  p-
ad10: 3e 63 61 63 68 65 43 74 72 20 3d 20 28 70 2d 3e  >cacheCtr = (p->
ad20: 63 61 63 68 65 43 74 72 20 2b 20 32 29 7c 31 3b  cacheCtr + 2)|1;
ad30: 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65  ..  /* Make sure
ad40: 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
ad50: 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20  the current row 
ad60: 61 72 65 20 5c 30 30 30 20 74 65 72 6d 69 6e 61  are \000 termina
ad70: 74 65 64 0a 20 20 2a 2a 20 61 6e 64 20 68 61 76  ted.  ** and hav
ad80: 65 20 61 6e 20 61 73 73 69 67 6e 65 64 20 74 79  e an assigned ty
ad90: 70 65 2e 20 20 54 68 65 20 72 65 73 75 6c 74 73  pe.  The results
ada0: 20 61 72 65 20 64 65 2d 65 70 68 65 6d 65 72 61   are de-ephemera
adb0: 6c 69 7a 65 64 20 61 73 0a 20 20 2a 2a 20 61 20  lized as.  ** a 
adc0: 73 69 64 65 20 65 66 66 65 63 74 2e 0a 20 20 2a  side effect..  *
add0: 2f 0a 20 20 70 4d 65 6d 20 3d 20 70 2d 3e 70 52  /.  pMem = p->pR
ade0: 65 73 75 6c 74 53 65 74 20 3d 20 26 61 4d 65 6d  esultSet = &aMem
adf0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72  [pOp->p1];.  for
ae00: 28 69 3d 30 3b 20 69 3c 70 4f 70 2d 3e 70 32 3b  (i=0; i<pOp->p2;
ae10: 20 69 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72   i++){.    asser
ae20: 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 70  t( memIsValid(&p
ae30: 4d 65 6d 5b 69 5d 29 20 29 3b 0a 20 20 20 20 44  Mem[i]) );.    D
ae40: 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 26 70  eephemeralize(&p
ae50: 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 61 73 73  Mem[i]);.    ass
ae60: 65 72 74 28 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c  ert( (pMem[i].fl
ae70: 61 67 73 20 26 20 4d 45 4d 5f 45 70 68 65 6d 29  ags & MEM_Ephem)
ae80: 3d 3d 30 0a 20 20 20 20 20 20 20 20 20 20 20 20  ==0.            
ae90: 7c 7c 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67  || (pMem[i].flag
aea0: 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  s & (MEM_Str|MEM
aeb0: 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20  _Blob))==0 );.  
aec0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
aed0: 4e 75 6c 54 65 72 6d 69 6e 61 74 65 28 26 70 4d  NulTerminate(&pM
aee0: 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 52 45 47 49  em[i]);.    REGI
aef0: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
af00: 70 31 2b 69 2c 20 26 70 4d 65 6d 5b 69 5d 29 3b  p1+i, &pMem[i]);
af10: 0a 20 20 7d 0a 20 20 69 66 28 20 64 62 2d 3e 6d  .  }.  if( db->m
af20: 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f  allocFailed ) go
af30: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 0a 20 20 69 66  to no_mem;..  if
af40: 28 20 64 62 2d 3e 6d 54 72 61 63 65 20 26 20 53  ( db->mTrace & S
af50: 51 4c 49 54 45 5f 54 52 41 43 45 5f 52 4f 57 20  QLITE_TRACE_ROW 
af60: 29 7b 0a 20 20 20 20 64 62 2d 3e 78 54 72 61 63  ){.    db->xTrac
af70: 65 28 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 52  e(SQLITE_TRACE_R
af80: 4f 57 2c 20 64 62 2d 3e 70 54 72 61 63 65 41 72  OW, db->pTraceAr
af90: 67 2c 20 70 2c 20 30 29 3b 0a 20 20 7d 0a 0a 20  g, p, 0);.  }.. 
afa0: 20 2f 2a 20 52 65 74 75 72 6e 20 53 51 4c 49 54   /* Return SQLIT
afb0: 45 5f 52 4f 57 0a 20 20 2a 2f 0a 20 20 70 2d 3e  E_ROW.  */.  p->
afc0: 70 63 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d  pc = (int)(pOp -
afd0: 20 61 4f 70 29 20 2b 20 31 3b 0a 20 20 72 63 20   aOp) + 1;.  rc 
afe0: 3d 20 53 51 4c 49 54 45 5f 52 4f 57 3b 0a 20 20  = SQLITE_ROW;.  
aff0: 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
b000: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
b010: 43 6f 6e 63 61 74 20 50 31 20 50 32 20 50 33 20  Concat P1 P2 P3 
b020: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
b030: 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2b 72 5b 50   r[P3]=r[P2]+r[P
b040: 31 5d 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65  1].**.** Add the
b050: 20 74 65 78 74 20 69 6e 20 72 65 67 69 73 74 65   text in registe
b060: 72 20 50 31 20 6f 6e 74 6f 20 74 68 65 20 65 6e  r P1 onto the en
b070: 64 20 6f 66 20 74 68 65 20 74 65 78 74 20 69 6e  d of the text in
b080: 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32 20  .** register P2 
b090: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
b0a0: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
b0b0: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
b0c0: 72 20 74 68 65 20 50 31 20 6f 72 20 50 32 20 74  r the P1 or P2 t
b0d0: 65 78 74 20 61 72 65 20 4e 55 4c 4c 20 74 68 65  ext are NULL the
b0e0: 6e 20 73 74 6f 72 65 20 4e 55 4c 4c 20 69 6e 20  n store NULL in 
b0f0: 50 33 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 33 20 3d  P3..**.**   P3 =
b100: 20 50 32 20 7c 7c 20 50 31 0a 2a 2a 0a 2a 2a 20   P2 || P1.**.** 
b110: 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 66 6f  It is illegal fo
b120: 72 20 50 31 20 61 6e 64 20 50 33 20 74 6f 20 62  r P1 and P3 to b
b130: 65 20 74 68 65 20 73 61 6d 65 20 72 65 67 69 73  e the same regis
b140: 74 65 72 2e 20 53 6f 6d 65 74 69 6d 65 73 2c 0a  ter. Sometimes,.
b150: 2a 2a 20 69 66 20 50 33 20 69 73 20 74 68 65 20  ** if P3 is the 
b160: 73 61 6d 65 20 72 65 67 69 73 74 65 72 20 61 73  same register as
b170: 20 50 32 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65   P2, the impleme
b180: 6e 74 61 74 69 6f 6e 20 69 73 20 61 62 6c 65 0a  ntation is able.
b190: 2a 2a 20 74 6f 20 61 76 6f 69 64 20 61 20 6d 65  ** to avoid a me
b1a0: 6d 63 70 79 28 29 2e 0a 2a 2f 0a 63 61 73 65 20  mcpy()..*/.case 
b1b0: 4f 50 5f 43 6f 6e 63 61 74 3a 20 7b 20 20 20 20  OP_Concat: {    
b1c0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
b1d0: 73 20 54 4b 5f 43 4f 4e 43 41 54 2c 20 69 6e 31  s TK_CONCAT, in1
b1e0: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20  , in2, out3 */. 
b1f0: 20 69 36 34 20 6e 42 79 74 65 3b 0a 0a 20 20 70   i64 nByte;..  p
b200: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
b210: 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26  >p1];.  pIn2 = &
b220: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
b230: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
b240: 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74  p->p3];.  assert
b250: 28 20 70 49 6e 31 21 3d 70 4f 75 74 20 29 3b 0a  ( pIn1!=pOut );.
b260: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
b270: 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73  gs | pIn2->flags
b280: 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  ) & MEM_Null ){.
b290: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
b2a0: 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b  emSetNull(pOut);
b2b0: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
b2c0: 20 20 69 66 28 20 45 78 70 61 6e 64 42 6c 6f 62    if( ExpandBlob
b2d0: 28 70 49 6e 31 29 20 7c 7c 20 45 78 70 61 6e 64  (pIn1) || Expand
b2e0: 42 6c 6f 62 28 70 49 6e 32 29 20 29 20 67 6f 74  Blob(pIn2) ) got
b2f0: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 53 74 72 69  o no_mem;.  Stri
b300: 6e 67 69 66 79 28 70 49 6e 31 2c 20 65 6e 63 6f  ngify(pIn1, enco
b310: 64 69 6e 67 29 3b 0a 20 20 53 74 72 69 6e 67 69  ding);.  Stringi
b320: 66 79 28 70 49 6e 32 2c 20 65 6e 63 6f 64 69 6e  fy(pIn2, encodin
b330: 67 29 3b 0a 20 20 6e 42 79 74 65 20 3d 20 70 49  g);.  nByte = pI
b340: 6e 31 2d 3e 6e 20 2b 20 70 49 6e 32 2d 3e 6e 3b  n1->n + pIn2->n;
b350: 0a 20 20 69 66 28 20 6e 42 79 74 65 3e 64 62 2d  .  if( nByte>db-
b360: 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
b370: 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a  IMIT_LENGTH] ){.
b380: 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
b390: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69  ;.  }.  if( sqli
b3a0: 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70  te3VdbeMemGrow(p
b3b0: 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 2b  Out, (int)nByte+
b3c0: 32 2c 20 70 4f 75 74 3d 3d 70 49 6e 32 29 20 29  2, pOut==pIn2) )
b3d0: 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65  {.    goto no_me
b3e0: 6d 3b 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54  m;.  }.  MemSetT
b3f0: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
b400: 4d 5f 53 74 72 29 3b 0a 20 20 69 66 28 20 70 4f  M_Str);.  if( pO
b410: 75 74 21 3d 70 49 6e 32 20 29 7b 0a 20 20 20 20  ut!=pIn2 ){.    
b420: 6d 65 6d 63 70 79 28 70 4f 75 74 2d 3e 7a 2c 20  memcpy(pOut->z, 
b430: 70 49 6e 32 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 6e  pIn2->z, pIn2->n
b440: 29 3b 0a 20 20 7d 0a 20 20 6d 65 6d 63 70 79 28  );.  }.  memcpy(
b450: 26 70 4f 75 74 2d 3e 7a 5b 70 49 6e 32 2d 3e 6e  &pOut->z[pIn2->n
b460: 5d 2c 20 70 49 6e 31 2d 3e 7a 2c 20 70 49 6e 31  ], pIn1->z, pIn1
b470: 2d 3e 6e 29 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b  ->n);.  pOut->z[
b480: 6e 42 79 74 65 5d 3d 30 3b 0a 20 20 70 4f 75 74  nByte]=0;.  pOut
b490: 2d 3e 7a 5b 6e 42 79 74 65 2b 31 5d 20 3d 20 30  ->z[nByte+1] = 0
b4a0: 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
b4b0: 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70  |= MEM_Term;.  p
b4c0: 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42  Out->n = (int)nB
b4d0: 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63  yte;.  pOut->enc
b4e0: 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55   = encoding;.  U
b4f0: 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
b500: 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  ZE(pOut);.  brea
b510: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
b520: 20 41 64 64 20 50 31 20 50 32 20 50 33 20 2a 20   Add P1 P2 P3 * 
b530: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
b540: 72 5b 50 33 5d 3d 72 5b 50 31 5d 2b 72 5b 50 32  r[P3]=r[P1]+r[P2
b550: 5d 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20  ].**.** Add the 
b560: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
b570: 72 20 50 31 20 74 6f 20 74 68 65 20 76 61 6c 75  r P1 to the valu
b580: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
b590: 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68  .** and store th
b5a0: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
b5b0: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
b5c0: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
b5d0: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
b5e0: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
b5f0: 70 63 6f 64 65 3a 20 4d 75 6c 74 69 70 6c 79 20  pcode: Multiply 
b600: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
b610: 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d  Synopsis:  r[P3]
b620: 3d 72 5b 50 31 5d 2a 72 5b 50 32 5d 0a 2a 2a 0a  =r[P1]*r[P2].**.
b630: 2a 2a 0a 2a 2a 20 4d 75 6c 74 69 70 6c 79 20 74  **.** Multiply t
b640: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
b650: 73 74 65 72 20 50 31 20 62 79 20 74 68 65 20 76  ster P1 by the v
b660: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
b670: 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65   P2.** and store
b680: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
b690: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
b6a0: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
b6b0: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
b6c0: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
b6d0: 2a 20 4f 70 63 6f 64 65 3a 20 53 75 62 74 72 61  * Opcode: Subtra
b6e0: 63 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ct P1 P2 P3 * *.
b6f0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b  ** Synopsis:  r[
b700: 50 33 5d 3d 72 5b 50 32 5d 2d 72 5b 50 31 5d 0a  P3]=r[P2]-r[P1].
b710: 2a 2a 0a 2a 2a 20 53 75 62 74 72 61 63 74 20 74  **.** Subtract t
b720: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
b730: 73 74 65 72 20 50 31 20 66 72 6f 6d 20 74 68 65  ster P1 from the
b740: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
b750: 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f  er P2.** and sto
b760: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
b770: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
b780: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
b790: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
b7a0: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
b7b0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 69 76 69  ./* Opcode: Divi
b7c0: 64 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  de P1 P2 P3 * *.
b7d0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b  ** Synopsis:  r[
b7e0: 50 33 5d 3d 72 5b 50 32 5d 2f 72 5b 50 31 5d 0a  P3]=r[P2]/r[P1].
b7f0: 2a 2a 0a 2a 2a 20 44 69 76 69 64 65 20 74 68 65  **.** Divide the
b800: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
b810: 65 72 20 50 31 20 62 79 20 74 68 65 20 76 61 6c  er P1 by the val
b820: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
b830: 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74  2.** and store t
b840: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
b850: 69 73 74 65 72 20 50 33 20 28 50 33 3d 50 32 2f  ister P3 (P3=P2/
b860: 50 31 29 2e 20 49 66 20 74 68 65 20 76 61 6c 75  P1). If the valu
b870: 65 20 69 6e 20 0a 2a 2a 20 72 65 67 69 73 74 65  e in .** registe
b880: 72 20 50 31 20 69 73 20 7a 65 72 6f 2c 20 74 68  r P1 is zero, th
b890: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
b8a0: 20 4e 55 4c 4c 2e 20 49 66 20 65 69 74 68 65 72   NULL. If either
b8b0: 20 69 6e 70 75 74 20 69 73 20 0a 2a 2a 20 4e 55   input is .** NU
b8c0: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
b8d0: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s NULL..*/./* Op
b8e0: 63 6f 64 65 3a 20 52 65 6d 61 69 6e 64 65 72 20  code: Remainder 
b8f0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
b900: 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d  Synopsis:  r[P3]
b910: 3d 72 5b 50 32 5d 25 72 5b 50 31 5d 0a 2a 2a 0a  =r[P2]%r[P1].**.
b920: 2a 2a 20 43 6f 6d 70 75 74 65 20 74 68 65 20 72  ** Compute the r
b930: 65 6d 61 69 6e 64 65 72 20 61 66 74 65 72 20 69  emainder after i
b940: 6e 74 65 67 65 72 20 72 65 67 69 73 74 65 72 20  nteger register 
b950: 50 32 20 69 73 20 64 69 76 69 64 65 64 20 62 79  P2 is divided by
b960: 20 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31   .** register P1
b970: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
b980: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
b990: 72 20 50 33 2e 20 0a 2a 2a 20 49 66 20 74 68 65  r P3. .** If the
b9a0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
b9b0: 65 72 20 50 31 20 69 73 20 7a 65 72 6f 20 74 68  er P1 is zero th
b9c0: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
b9d0: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 6f  ..** If either o
b9e0: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 20  perand is NULL, 
b9f0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
ba00: 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41  LL..*/.case OP_A
ba10: 64 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  dd:             
ba20: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
ba30: 20 54 4b 5f 50 4c 55 53 2c 20 69 6e 31 2c 20 69   TK_PLUS, in1, i
ba40: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
ba50: 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20   OP_Subtract:   
ba60: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
ba70: 6d 65 20 61 73 20 54 4b 5f 4d 49 4e 55 53 2c 20  me as TK_MINUS, 
ba80: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
ba90: 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70  /.case OP_Multip
baa0: 6c 79 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  ly:             
bab0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53   /* same as TK_S
bac0: 54 41 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  TAR, in1, in2, o
bad0: 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  ut3 */.case OP_D
bae0: 69 76 69 64 65 3a 20 20 20 20 20 20 20 20 20 20  ivide:          
baf0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
bb00: 20 54 4b 5f 53 4c 41 53 48 2c 20 69 6e 31 2c 20   TK_SLASH, in1, 
bb10: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
bb20: 65 20 4f 50 5f 52 65 6d 61 69 6e 64 65 72 3a 20  e OP_Remainder: 
bb30: 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73  {           /* s
bb40: 61 6d 65 20 61 73 20 54 4b 5f 52 45 4d 2c 20 69  ame as TK_REM, i
bb50: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
bb60: 0a 20 20 63 68 61 72 20 62 49 6e 74 69 6e 74 3b  .  char bIntint;
bb70: 20 20 20 2f 2a 20 53 74 61 72 74 65 64 20 6f 75     /* Started ou
bb80: 74 20 61 73 20 74 77 6f 20 69 6e 74 65 67 65 72  t as two integer
bb90: 20 6f 70 65 72 61 6e 64 73 20 2a 2f 0a 20 20 75   operands */.  u
bba0: 31 36 20 66 6c 61 67 73 3b 20 20 20 20 20 20 2f  16 flags;      /
bbb0: 2a 20 43 6f 6d 62 69 6e 65 64 20 4d 45 4d 5f 2a  * Combined MEM_*
bbc0: 20 66 6c 61 67 73 20 66 72 6f 6d 20 62 6f 74 68   flags from both
bbd0: 20 69 6e 70 75 74 73 20 2a 2f 0a 20 20 75 31 36   inputs */.  u16
bbe0: 20 74 79 70 65 31 3b 20 20 20 20 20 20 2f 2a 20   type1;      /* 
bbf0: 4e 75 6d 65 72 69 63 20 74 79 70 65 20 6f 66 20  Numeric type of 
bc00: 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  left operand */.
bc10: 20 20 75 31 36 20 74 79 70 65 32 3b 20 20 20 20    u16 type2;    
bc20: 20 20 2f 2a 20 4e 75 6d 65 72 69 63 20 74 79 70    /* Numeric typ
bc30: 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61  e of right opera
bc40: 6e 64 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b 20  nd */.  i64 iA; 
bc50: 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67          /* Integ
bc60: 65 72 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74  er value of left
bc70: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36   operand */.  i6
bc80: 34 20 69 42 3b 20 20 20 20 20 20 20 20 20 2f 2a  4 iB;         /*
bc90: 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f   Integer value o
bca0: 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20  f right operand 
bcb0: 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72 41 3b 20  */.  double rA; 
bcc0: 20 20 20 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c       /* Real val
bcd0: 75 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61  ue of left opera
bce0: 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72  nd */.  double r
bcf0: 42 3b 20 20 20 20 20 20 2f 2a 20 52 65 61 6c 20  B;      /* Real 
bd00: 76 61 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f  value of right o
bd10: 70 65 72 61 6e 64 20 2a 2f 0a 0a 20 20 70 49 6e  perand */..  pIn
bd20: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
bd30: 31 5d 3b 0a 20 20 74 79 70 65 31 20 3d 20 6e 75  1];.  type1 = nu
bd40: 6d 65 72 69 63 54 79 70 65 28 70 49 6e 31 29 3b  mericType(pIn1);
bd50: 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
bd60: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 74 79 70 65  pOp->p2];.  type
bd70: 32 20 3d 20 6e 75 6d 65 72 69 63 54 79 70 65 28  2 = numericType(
bd80: 70 49 6e 32 29 3b 0a 20 20 70 4f 75 74 20 3d 20  pIn2);.  pOut = 
bd90: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
bda0: 20 20 66 6c 61 67 73 20 3d 20 70 49 6e 31 2d 3e    flags = pIn1->
bdb0: 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c  flags | pIn2->fl
bdc0: 61 67 73 3b 0a 20 20 69 66 28 20 28 66 6c 61 67  ags;.  if( (flag
bdd0: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30  s & MEM_Null)!=0
bde0: 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74   ) goto arithmet
bdf0: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
be00: 6c 3b 0a 20 20 69 66 28 20 28 74 79 70 65 31 20  l;.  if( (type1 
be10: 26 20 74 79 70 65 32 20 26 20 4d 45 4d 5f 49 6e  & type2 & MEM_In
be20: 74 29 21 3d 30 20 29 7b 0a 20 20 20 20 69 41 20  t)!=0 ){.    iA 
be30: 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 20  = pIn1->u.i;.   
be40: 20 69 42 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b   iB = pIn2->u.i;
be50: 0a 20 20 20 20 62 49 6e 74 69 6e 74 20 3d 20 31  .    bIntint = 1
be60: 3b 0a 20 20 20 20 73 77 69 74 63 68 28 20 70 4f  ;.    switch( pO
be70: 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20  p->opcode ){.   
be80: 20 20 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20     case OP_Add: 
be90: 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
bea0: 33 41 64 64 49 6e 74 36 34 28 26 69 42 2c 69 41  3AddInt64(&iB,iA
beb0: 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68  ) ) goto fp_math
bec0: 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20  ;  break;.      
bed0: 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74  case OP_Subtract
bee0: 3a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 75  :  if( sqlite3Su
bef0: 62 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20 29  bInt64(&iB,iA) )
bf00: 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20   goto fp_math;  
bf10: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
bf20: 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20  e OP_Multiply:  
bf30: 69 66 28 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e  if( sqlite3MulIn
bf40: 74 36 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f  t64(&iB,iA) ) go
bf50: 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65  to fp_math;  bre
bf60: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
bf70: 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20 20 20  P_Divide: {.    
bf80: 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20      if( iA==0 ) 
bf90: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
bfa0: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
bfb0: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
bfc0: 2d 31 20 26 26 20 69 42 3d 3d 53 4d 41 4c 4c 45  -1 && iB==SMALLE
bfd0: 53 54 5f 49 4e 54 36 34 20 29 20 67 6f 74 6f 20  ST_INT64 ) goto 
bfe0: 66 70 5f 6d 61 74 68 3b 0a 20 20 20 20 20 20 20  fp_math;.       
bff0: 20 69 42 20 2f 3d 20 69 41 3b 0a 20 20 20 20 20   iB /= iA;.     
c000: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
c010: 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a  }.      default:
c020: 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69   {.        if( i
c030: 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74  A==0 ) goto arit
c040: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
c050: 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69  _null;.        i
c060: 66 28 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d  f( iA==-1 ) iA =
c070: 20 31 3b 0a 20 20 20 20 20 20 20 20 69 42 20 25   1;.        iB %
c080: 3d 20 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72  = iA;.        br
c090: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
c0a0: 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69   }.    pOut->u.i
c0b0: 20 3d 20 69 42 3b 0a 20 20 20 20 4d 65 6d 53 65   = iB;.    MemSe
c0c0: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
c0d0: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73  MEM_Int);.  }els
c0e0: 65 7b 0a 20 20 20 20 62 49 6e 74 69 6e 74 20 3d  e{.    bIntint =
c0f0: 20 30 3b 0a 66 70 5f 6d 61 74 68 3a 0a 20 20 20   0;.fp_math:.   
c100: 20 72 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rA = sqlite3Vdb
c110: 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29  eRealValue(pIn1)
c120: 3b 0a 20 20 20 20 72 42 20 3d 20 73 71 6c 69 74  ;.    rB = sqlit
c130: 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28  e3VdbeRealValue(
c140: 70 49 6e 32 29 3b 0a 20 20 20 20 73 77 69 74 63  pIn2);.    switc
c150: 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29  h( pOp->opcode )
c160: 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  {.      case OP_
c170: 41 64 64 3a 20 20 20 20 20 20 20 20 20 72 42 20  Add:         rB 
c180: 2b 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72 65  += rA;       bre
c190: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
c1a0: 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 72  P_Subtract:    r
c1b0: 42 20 2d 3d 20 72 41 3b 20 20 20 20 20 20 20 62  B -= rA;       b
c1c0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
c1d0: 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20   OP_Multiply:   
c1e0: 20 72 42 20 2a 3d 20 72 41 3b 20 20 20 20 20 20   rB *= rA;      
c1f0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
c200: 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a  se OP_Divide: {.
c210: 20 20 20 20 20 20 20 20 2f 2a 20 28 64 6f 75 62          /* (doub
c220: 6c 65 29 30 20 49 6e 20 63 61 73 65 20 6f 66 20  le)0 In case of 
c230: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
c240: 54 49 4e 47 5f 50 4f 49 4e 54 2e 2e 2e 20 2a 2f  TING_POINT... */
c250: 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 41 3d  .        if( rA=
c260: 3d 28 64 6f 75 62 6c 65 29 30 20 29 20 67 6f 74  =(double)0 ) got
c270: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
c280: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
c290: 20 20 20 20 20 72 42 20 2f 3d 20 72 41 3b 0a 20       rB /= rA;. 
c2a0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
c2b0: 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61      }.      defa
c2c0: 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69  ult: {.        i
c2d0: 41 20 3d 20 28 69 36 34 29 72 41 3b 0a 20 20 20  A = (i64)rA;.   
c2e0: 20 20 20 20 20 69 42 20 3d 20 28 69 36 34 29 72       iB = (i64)r
c2f0: 42 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69  B;.        if( i
c300: 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74  A==0 ) goto arit
c310: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
c320: 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69  _null;.        i
c330: 66 28 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d  f( iA==-1 ) iA =
c340: 20 31 3b 0a 20 20 20 20 20 20 20 20 72 42 20 3d   1;.        rB =
c350: 20 28 64 6f 75 62 6c 65 29 28 69 42 20 25 20 69   (double)(iB % i
c360: 41 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  A);.        brea
c370: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  k;.      }.    }
c380: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
c390: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
c3a0: 4e 54 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  NT.    pOut->u.i
c3b0: 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65   = rB;.    MemSe
c3c0: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
c3d0: 4d 45 4d 5f 49 6e 74 29 3b 0a 23 65 6c 73 65 0a  MEM_Int);.#else.
c3e0: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 49      if( sqlite3I
c3f0: 73 4e 61 4e 28 72 42 29 20 29 7b 0a 20 20 20 20  sNaN(rB) ){.    
c400: 20 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69    goto arithmeti
c410: 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c  c_result_is_null
c420: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74  ;.    }.    pOut
c430: 2d 3e 75 2e 72 20 3d 20 72 42 3b 0a 20 20 20 20  ->u.r = rB;.    
c440: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
c450: 4f 75 74 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b 0a  Out, MEM_Real);.
c460: 20 20 20 20 69 66 28 20 28 28 74 79 70 65 31 7c      if( ((type1|
c470: 74 79 70 65 32 29 26 4d 45 4d 5f 52 65 61 6c 29  type2)&MEM_Real)
c480: 3d 3d 30 20 26 26 20 21 62 49 6e 74 69 6e 74 20  ==0 && !bIntint 
c490: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
c4a0: 56 64 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e  VdbeIntegerAffin
c4b0: 69 74 79 28 70 4f 75 74 29 3b 0a 20 20 20 20 7d  ity(pOut);.    }
c4c0: 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72  .#endif.  }.  br
c4d0: 65 61 6b 3b 0a 0a 61 72 69 74 68 6d 65 74 69 63  eak;..arithmetic
c4e0: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3a  _result_is_null:
c4f0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
c500: 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
c510: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
c520: 70 63 6f 64 65 3a 20 43 6f 6c 6c 53 65 71 20 50  pcode: CollSeq P
c530: 31 20 2a 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50  1 * * P4.**.** P
c540: 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
c550: 6f 20 61 20 43 6f 6c 6c 53 65 71 20 73 74 72 75  o a CollSeq stru
c560: 63 74 2e 20 49 66 20 74 68 65 20 6e 65 78 74 20  ct. If the next 
c570: 63 61 6c 6c 20 74 6f 20 61 20 75 73 65 72 20 66  call to a user f
c580: 75 6e 63 74 69 6f 6e 0a 2a 2a 20 6f 72 20 61 67  unction.** or ag
c590: 67 72 65 67 61 74 65 20 63 61 6c 6c 73 20 73 71  gregate calls sq
c5a0: 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c  lite3GetFuncColl
c5b0: 53 65 71 28 29 2c 20 74 68 69 73 20 63 6f 6c 6c  Seq(), this coll
c5c0: 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 77  ation sequence w
c5d0: 69 6c 6c 0a 2a 2a 20 62 65 20 72 65 74 75 72 6e  ill.** be return
c5e0: 65 64 2e 20 54 68 69 73 20 69 73 20 75 73 65 64  ed. This is used
c5f0: 20 62 79 20 74 68 65 20 62 75 69 6c 74 2d 69 6e   by the built-in
c600: 20 6d 69 6e 28 29 2c 20 6d 61 78 28 29 20 61 6e   min(), max() an
c610: 64 20 6e 75 6c 6c 69 66 28 29 0a 2a 2a 20 66 75  d nullif().** fu
c620: 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49  nctions..**.** I
c630: 66 20 50 31 20 69 73 20 6e 6f 74 20 7a 65 72 6f  f P1 is not zero
c640: 2c 20 74 68 65 6e 20 69 74 20 69 73 20 61 20 72  , then it is a r
c650: 65 67 69 73 74 65 72 20 74 68 61 74 20 61 20 73  egister that a s
c660: 75 62 73 65 71 75 65 6e 74 20 6d 69 6e 28 29 20  ubsequent min() 
c670: 6f 72 0a 2a 2a 20 6d 61 78 28 29 20 61 67 67 72  or.** max() aggr
c680: 65 67 61 74 65 20 77 69 6c 6c 20 73 65 74 20 74  egate will set t
c690: 6f 20 31 20 69 66 20 74 68 65 20 63 75 72 72 65  o 1 if the curre
c6a0: 6e 74 20 72 6f 77 20 69 73 20 6e 6f 74 20 74 68  nt row is not th
c6b0: 65 20 6d 69 6e 69 6d 75 6d 20 6f 72 0a 2a 2a 20  e minimum or.** 
c6c0: 6d 61 78 69 6d 75 6d 2e 20 20 54 68 65 20 50 31  maximum.  The P1
c6d0: 20 72 65 67 69 73 74 65 72 20 69 73 20 69 6e 69   register is ini
c6e0: 74 69 61 6c 69 7a 65 64 20 74 6f 20 30 20 62 79  tialized to 0 by
c6f0: 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
c700: 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 74  n..**.** The int
c710: 65 72 66 61 63 65 20 75 73 65 64 20 62 79 20 74  erface used by t
c720: 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
c730: 6e 20 6f 66 20 74 68 65 20 61 66 6f 72 65 6d 65  n of the aforeme
c740: 6e 74 69 6f 6e 65 64 20 66 75 6e 63 74 69 6f 6e  ntioned function
c750: 73 0a 2a 2a 20 74 6f 20 72 65 74 72 69 65 76 65  s.** to retrieve
c760: 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73   the collation s
c770: 65 71 75 65 6e 63 65 20 73 65 74 20 62 79 20 74  equence set by t
c780: 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6e 6f  his opcode is no
c790: 74 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 70  t available.** p
c7a0: 75 62 6c 69 63 6c 79 2e 20 20 4f 6e 6c 79 20 62  ublicly.  Only b
c7b0: 75 69 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e  uilt-in function
c7c0: 73 20 68 61 76 65 20 61 63 63 65 73 73 20 74 6f  s have access to
c7d0: 20 74 68 69 73 20 66 65 61 74 75 72 65 2e 0a 2a   this feature..*
c7e0: 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 6c 53 65  /.case OP_CollSe
c7f0: 71 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70  q: {.  assert( p
c800: 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43  Op->p4type==P4_C
c810: 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 69 66 28 20  OLLSEQ );.  if( 
c820: 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73  pOp->p1 ){.    s
c830: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
c840: 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d  Int64(&aMem[pOp-
c850: 3e 70 31 5d 2c 20 30 29 3b 0a 20 20 7d 0a 20 20  >p1], 0);.  }.  
c860: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
c870: 6f 64 65 3a 20 46 75 6e 63 74 69 6f 6e 30 20 50  ode: Function0 P
c880: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
c890: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
c8a0: 3d 66 75 6e 63 28 72 5b 50 32 40 50 35 5d 29 0a  =func(r[P2@P5]).
c8b0: 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 61 20 75  **.** Invoke a u
c8c0: 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 28 50 34  ser function (P4
c8d0: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
c8e0: 20 61 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63   a FuncDef objec
c8f0: 74 20 74 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65  t that.** define
c900: 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 29 20  s the function) 
c910: 77 69 74 68 20 50 35 20 61 72 67 75 6d 65 6e 74  with P5 argument
c920: 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67  s taken from reg
c930: 69 73 74 65 72 20 50 32 20 61 6e 64 0a 2a 2a 20  ister P2 and.** 
c940: 73 75 63 63 65 73 73 6f 72 73 2e 20 20 54 68 65  successors.  The
c950: 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66   result of the f
c960: 75 6e 63 74 69 6f 6e 20 69 73 20 73 74 6f 72 65  unction is store
c970: 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  d in register P3
c980: 2e 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 33  ..** Register P3
c990: 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 6f 6e 65   must not be one
c9a0: 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
c9b0: 20 69 6e 70 75 74 73 2e 0a 2a 2a 0a 2a 2a 20 50   inputs..**.** P
c9c0: 31 20 69 73 20 61 20 33 32 2d 62 69 74 20 62 69  1 is a 32-bit bi
c9d0: 74 6d 61 73 6b 20 69 6e 64 69 63 61 74 69 6e 67  tmask indicating
c9e0: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
c9f0: 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 74 6f  each argument to
ca00: 20 74 68 65 20 0a 2a 2a 20 66 75 6e 63 74 69 6f   the .** functio
ca10: 6e 20 77 61 73 20 64 65 74 65 72 6d 69 6e 65 64  n was determined
ca20: 20 74 6f 20 62 65 20 63 6f 6e 73 74 61 6e 74 20   to be constant 
ca30: 61 74 20 63 6f 6d 70 69 6c 65 20 74 69 6d 65 2e  at compile time.
ca40: 20 49 66 20 74 68 65 20 66 69 72 73 74 0a 2a 2a   If the first.**
ca50: 20 61 72 67 75 6d 65 6e 74 20 77 61 73 20 63 6f   argument was co
ca60: 6e 73 74 61 6e 74 20 74 68 65 6e 20 62 69 74 20  nstant then bit 
ca70: 30 20 6f 66 20 50 31 20 69 73 20 73 65 74 2e 20  0 of P1 is set. 
ca80: 54 68 69 73 20 69 73 20 75 73 65 64 20 74 6f 20  This is used to 
ca90: 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65  determine.** whe
caa0: 74 68 65 72 20 6d 65 74 61 20 64 61 74 61 20 61  ther meta data a
cab0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
cac0: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 61   user function a
cad0: 72 67 75 6d 65 6e 74 20 75 73 69 6e 67 20 74 68  rgument using th
cae0: 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 73 65 74  e.** sqlite3_set
caf0: 5f 61 75 78 64 61 74 61 28 29 20 41 50 49 20 6d  _auxdata() API m
cb00: 61 79 20 62 65 20 73 61 66 65 6c 79 20 72 65 74  ay be safely ret
cb10: 61 69 6e 65 64 20 75 6e 74 69 6c 20 74 68 65 20  ained until the 
cb20: 6e 65 78 74 0a 2a 2a 20 69 6e 76 6f 63 61 74 69  next.** invocati
cb30: 6f 6e 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64  on of this opcod
cb40: 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  e..**.** See als
cb50: 6f 3a 20 46 75 6e 63 74 69 6f 6e 2c 20 41 67 67  o: Function, Agg
cb60: 53 74 65 70 2c 20 41 67 67 46 69 6e 61 6c 0a 2a  Step, AggFinal.*
cb70: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 75 6e  /./* Opcode: Fun
cb80: 63 74 69 6f 6e 20 50 31 20 50 32 20 50 33 20 50  ction P1 P2 P3 P
cb90: 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
cba0: 3a 20 72 5b 50 33 5d 3d 66 75 6e 63 28 72 5b 50  : r[P3]=func(r[P
cbb0: 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 49 6e 76  2@P5]).**.** Inv
cbc0: 6f 6b 65 20 61 20 75 73 65 72 20 66 75 6e 63 74  oke a user funct
cbd0: 69 6f 6e 20 28 50 34 20 69 73 20 61 20 70 6f 69  ion (P4 is a poi
cbe0: 6e 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74  nter to an sqlit
cbf0: 65 33 5f 63 6f 6e 74 65 78 74 20 6f 62 6a 65 63  e3_context objec
cc00: 74 20 74 68 61 74 0a 2a 2a 20 63 6f 6e 74 61 69  t that.** contai
cc10: 6e 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  ns a pointer to 
cc20: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20  the function to 
cc30: 62 65 20 72 75 6e 29 20 77 69 74 68 20 50 35 20  be run) with P5 
cc40: 61 72 67 75 6d 65 6e 74 73 20 74 61 6b 65 6e 0a  arguments taken.
cc50: 2a 2a 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72  ** from register
cc60: 20 50 32 20 61 6e 64 20 73 75 63 63 65 73 73 6f   P2 and successo
cc70: 72 73 2e 20 20 54 68 65 20 72 65 73 75 6c 74 20  rs.  The result 
cc80: 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  of the function 
cc90: 69 73 20 73 74 6f 72 65 64 0a 2a 2a 20 69 6e 20  is stored.** in 
cca0: 72 65 67 69 73 74 65 72 20 50 33 2e 20 20 52 65  register P3.  Re
ccb0: 67 69 73 74 65 72 20 50 33 20 6d 75 73 74 20 6e  gister P3 must n
ccc0: 6f 74 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65  ot be one of the
ccd0: 20 66 75 6e 63 74 69 6f 6e 20 69 6e 70 75 74 73   function inputs
cce0: 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20  ..**.** P1 is a 
ccf0: 33 32 2d 62 69 74 20 62 69 74 6d 61 73 6b 20 69  32-bit bitmask i
cd00: 6e 64 69 63 61 74 69 6e 67 20 77 68 65 74 68 65  ndicating whethe
cd10: 72 20 6f 72 20 6e 6f 74 20 65 61 63 68 20 61 72  r or not each ar
cd20: 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 0a 2a  gument to the .*
cd30: 2a 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 64  * function was d
cd40: 65 74 65 72 6d 69 6e 65 64 20 74 6f 20 62 65 20  etermined to be 
cd50: 63 6f 6e 73 74 61 6e 74 20 61 74 20 63 6f 6d 70  constant at comp
cd60: 69 6c 65 20 74 69 6d 65 2e 20 49 66 20 74 68 65  ile time. If the
cd70: 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65   first.** argume
cd80: 6e 74 20 77 61 73 20 63 6f 6e 73 74 61 6e 74 20  nt was constant 
cd90: 74 68 65 6e 20 62 69 74 20 30 20 6f 66 20 50 31  then bit 0 of P1
cda0: 20 69 73 20 73 65 74 2e 20 54 68 69 73 20 69 73   is set. This is
cdb0: 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69   used to determi
cdc0: 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72 20 6d 65  ne.** whether me
cdd0: 74 61 20 64 61 74 61 20 61 73 73 6f 63 69 61 74  ta data associat
cde0: 65 64 20 77 69 74 68 20 61 20 75 73 65 72 20 66  ed with a user f
cdf0: 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74  unction argument
ce00: 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 73 71   using the.** sq
ce10: 6c 69 74 65 33 5f 73 65 74 5f 61 75 78 64 61 74  lite3_set_auxdat
ce20: 61 28 29 20 41 50 49 20 6d 61 79 20 62 65 20 73  a() API may be s
ce30: 61 66 65 6c 79 20 72 65 74 61 69 6e 65 64 20 75  afely retained u
ce40: 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 0a 2a 2a  ntil the next.**
ce50: 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74   invocation of t
ce60: 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a  his opcode..**.*
ce70: 2a 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 73 20  * SQL functions 
ce80: 61 72 65 20 69 6e 69 74 69 61 6c 6c 79 20 63 6f  are initially co
ce90: 64 65 64 20 61 73 20 4f 50 5f 46 75 6e 63 74 69  ded as OP_Functi
cea0: 6f 6e 30 20 77 69 74 68 20 50 34 20 70 6f 69 6e  on0 with P4 poin
ceb0: 74 69 6e 67 0a 2a 2a 20 74 6f 20 61 20 46 75 6e  ting.** to a Fun
cec0: 63 44 65 66 20 6f 62 6a 65 63 74 2e 20 20 42 75  cDef object.  Bu
ced0: 74 20 6f 6e 20 66 69 72 73 74 20 65 76 61 6c 75  t on first evalu
cee0: 61 74 69 6f 6e 2c 20 74 68 65 20 50 34 20 6f 70  ation, the P4 op
cef0: 65 72 61 6e 64 20 69 73 0a 2a 2a 20 61 75 74 6f  erand is.** auto
cf00: 6d 61 74 69 63 61 6c 6c 79 20 63 6f 6e 76 65 72  matically conver
cf10: 74 65 64 20 69 6e 74 6f 20 61 6e 20 73 71 6c 69  ted into an sqli
cf20: 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f 62 6a 65  te3_context obje
cf30: 63 74 20 61 6e 64 20 74 68 65 20 6f 70 65 72 61  ct and the opera
cf40: 74 69 6f 6e 0a 2a 2a 20 63 68 61 6e 67 65 64 20  tion.** changed 
cf50: 74 6f 20 74 68 69 73 20 4f 50 5f 46 75 6e 63 74  to this OP_Funct
cf60: 69 6f 6e 20 6f 70 63 6f 64 65 2e 20 20 49 6e 20  ion opcode.  In 
cf70: 74 68 69 73 20 77 61 79 2c 20 74 68 65 20 69 6e  this way, the in
cf80: 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 6f 66 0a  itialization of.
cf90: 2a 2a 20 74 68 65 20 73 71 6c 69 74 65 33 5f 63  ** the sqlite3_c
cfa0: 6f 6e 74 65 78 74 20 6f 62 6a 65 63 74 20 6f 63  ontext object oc
cfb0: 63 75 72 73 20 6f 6e 6c 79 20 6f 6e 63 65 2c 20  curs only once, 
cfc0: 72 61 74 68 65 72 20 74 68 61 6e 20 6f 6e 63 65  rather than once
cfd0: 20 66 6f 72 20 65 61 63 68 0a 2a 2a 20 65 76 61   for each.** eva
cfe0: 6c 75 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 66  luation of the f
cff0: 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53  unction..**.** S
d000: 65 65 20 61 6c 73 6f 3a 20 46 75 6e 63 74 69 6f  ee also: Functio
d010: 6e 30 2c 20 41 67 67 53 74 65 70 2c 20 41 67 67  n0, AggStep, Agg
d020: 46 69 6e 61 6c 0a 2a 2f 0a 63 61 73 65 20 4f 50  Final.*/.case OP
d030: 5f 46 75 6e 63 74 69 6f 6e 30 3a 20 7b 0a 20 20  _Function0: {.  
d040: 69 6e 74 20 6e 3b 0a 20 20 73 71 6c 69 74 65 33  int n;.  sqlite3
d050: 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 3b 0a  _context *pCtx;.
d060: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
d070: 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44  p4type==P4_FUNCD
d080: 45 46 20 29 3b 0a 20 20 6e 20 3d 20 70 4f 70 2d  EF );.  n = pOp-
d090: 3e 70 35 3b 0a 20 20 61 73 73 65 72 74 28 20 70  >p5;.  assert( p
d0a0: 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d  Op->p3>0 && pOp-
d0b0: 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  >p3<=(p->nMem+1 
d0c0: 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  - p->nCursor) );
d0d0: 0a 20 20 61 73 73 65 72 74 28 20 6e 3d 3d 30 20  .  assert( n==0 
d0e0: 7c 7c 20 28 70 4f 70 2d 3e 70 32 3e 30 20 26 26  || (pOp->p2>0 &&
d0f0: 20 70 4f 70 2d 3e 70 32 2b 6e 3c 3d 28 70 2d 3e   pOp->p2+n<=(p->
d100: 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
d110: 73 6f 72 29 2b 31 29 20 29 3b 0a 20 20 61 73 73  sor)+1) );.  ass
d120: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70  ert( pOp->p3<pOp
d130: 2d 3e 70 32 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e  ->p2 || pOp->p3>
d140: 3d 70 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a 20 20  =pOp->p2+n );.  
d150: 70 43 74 78 20 3d 20 73 71 6c 69 74 65 33 44 62  pCtx = sqlite3Db
d160: 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28 64 62 2c 20  MallocRawNN(db, 
d170: 73 69 7a 65 6f 66 28 2a 70 43 74 78 29 20 2b 20  sizeof(*pCtx) + 
d180: 28 6e 2d 31 29 2a 73 69 7a 65 6f 66 28 73 71 6c  (n-1)*sizeof(sql
d190: 69 74 65 33 5f 76 61 6c 75 65 2a 29 29 3b 0a 20  ite3_value*));. 
d1a0: 20 69 66 28 20 70 43 74 78 3d 3d 30 20 29 20 67   if( pCtx==0 ) g
d1b0: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43  oto no_mem;.  pC
d1c0: 74 78 2d 3e 70 4f 75 74 20 3d 20 30 3b 0a 20 20  tx->pOut = 0;.  
d1d0: 70 43 74 78 2d 3e 70 46 75 6e 63 20 3d 20 70 4f  pCtx->pFunc = pO
d1e0: 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20 70  p->p4.pFunc;.  p
d1f0: 43 74 78 2d 3e 69 4f 70 20 3d 20 28 69 6e 74 29  Ctx->iOp = (int)
d200: 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 70  (pOp - aOp);.  p
d210: 43 74 78 2d 3e 70 56 64 62 65 20 3d 20 70 3b 0a  Ctx->pVdbe = p;.
d220: 20 20 70 43 74 78 2d 3e 61 72 67 63 20 3d 20 6e    pCtx->argc = n
d230: 3b 0a 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20  ;.  pOp->p4type 
d240: 3d 20 50 34 5f 46 55 4e 43 43 54 58 3b 0a 20 20  = P4_FUNCCTX;.  
d250: 70 4f 70 2d 3e 70 34 2e 70 43 74 78 20 3d 20 70  pOp->p4.pCtx = p
d260: 43 74 78 3b 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f  Ctx;.  pOp->opco
d270: 64 65 20 3d 20 4f 50 5f 46 75 6e 63 74 69 6f 6e  de = OP_Function
d280: 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f  ;.  /* Fall thro
d290: 75 67 68 20 69 6e 74 6f 20 4f 50 5f 46 75 6e 63  ugh into OP_Func
d2a0: 74 69 6f 6e 20 2a 2f 0a 7d 0a 63 61 73 65 20 4f  tion */.}.case O
d2b0: 50 5f 46 75 6e 63 74 69 6f 6e 3a 20 7b 0a 20 20  P_Function: {.  
d2c0: 69 6e 74 20 69 3b 0a 20 20 73 71 6c 69 74 65 33  int i;.  sqlite3
d2d0: 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 3b 0a  _context *pCtx;.
d2e0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
d2f0: 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43 43  p4type==P4_FUNCC
d300: 54 58 20 29 3b 0a 20 20 70 43 74 78 20 3d 20 70  TX );.  pCtx = p
d310: 4f 70 2d 3e 70 34 2e 70 43 74 78 3b 0a 0a 20 20  Op->p4.pCtx;..  
d320: 2f 2a 20 49 66 20 74 68 69 73 20 66 75 6e 63 74  /* If this funct
d330: 69 6f 6e 20 69 73 20 69 6e 73 69 64 65 20 6f 66  ion is inside of
d340: 20 61 20 74 72 69 67 67 65 72 2c 20 74 68 65 20   a trigger, the 
d350: 72 65 67 69 73 74 65 72 20 61 72 72 61 79 20 69  register array i
d360: 6e 20 61 4d 65 6d 5b 5d 0a 20 20 2a 2a 20 6d 69  n aMem[].  ** mi
d370: 67 68 74 20 63 68 61 6e 67 65 20 66 72 6f 6d 20  ght change from 
d380: 6f 6e 65 20 65 76 61 6c 75 61 74 69 6f 6e 20 74  one evaluation t
d390: 6f 20 74 68 65 20 6e 65 78 74 2e 20 20 54 68 65  o the next.  The
d3a0: 20 6e 65 78 74 20 62 6c 6f 63 6b 20 6f 66 20 63   next block of c
d3b0: 6f 64 65 0a 20 20 2a 2a 20 63 68 65 63 6b 73 20  ode.  ** checks 
d3c0: 74 6f 20 73 65 65 20 69 66 20 74 68 65 20 72 65  to see if the re
d3d0: 67 69 73 74 65 72 20 61 72 72 61 79 20 68 61 73  gister array has
d3e0: 20 63 68 61 6e 67 65 64 2c 20 61 6e 64 20 69 66   changed, and if
d3f0: 20 73 6f 20 69 74 0a 20 20 2a 2a 20 72 65 69 6e   so it.  ** rein
d400: 69 74 69 61 6c 69 7a 65 73 20 74 68 65 20 72 65  itializes the re
d410: 6c 61 76 61 6e 74 20 70 61 72 74 73 20 6f 66 20  lavant parts of 
d420: 74 68 65 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  the sqlite3_cont
d430: 65 78 74 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20  ext object */.  
d440: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
d450: 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 70 43 74  ->p3];.  if( pCt
d460: 78 2d 3e 70 4f 75 74 20 21 3d 20 70 4f 75 74 20  x->pOut != pOut 
d470: 29 7b 0a 20 20 20 20 70 43 74 78 2d 3e 70 4f 75  ){.    pCtx->pOu
d480: 74 20 3d 20 70 4f 75 74 3b 0a 20 20 20 20 66 6f  t = pOut;.    fo
d490: 72 28 69 3d 70 43 74 78 2d 3e 61 72 67 63 2d 31  r(i=pCtx->argc-1
d4a0: 3b 20 69 3e 3d 30 3b 20 69 2d 2d 29 20 70 43 74  ; i>=0; i--) pCt
d4b0: 78 2d 3e 61 72 67 76 5b 69 5d 20 3d 20 26 61 4d  x->argv[i] = &aM
d4c0: 65 6d 5b 70 4f 70 2d 3e 70 32 2b 69 5d 3b 0a 20  em[pOp->p2+i];. 
d4d0: 20 7d 0a 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f   }..  memAboutTo
d4e0: 43 68 61 6e 67 65 28 70 2c 20 70 43 74 78 2d 3e  Change(p, pCtx->
d4f0: 70 4f 75 74 29 3b 0a 23 69 66 64 65 66 20 53 51  pOut);.#ifdef SQ
d500: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 66 6f 72  LITE_DEBUG.  for
d510: 28 69 3d 30 3b 20 69 3c 70 43 74 78 2d 3e 61 72  (i=0; i<pCtx->ar
d520: 67 63 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 73  gc; i++){.    as
d530: 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
d540: 28 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d 29 20  (pCtx->argv[i]) 
d550: 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  );.    REGISTER_
d560: 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b 69 2c  TRACE(pOp->p2+i,
d570: 20 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d 29 3b   pCtx->argv[i]);
d580: 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 4d 65  .  }.#endif.  Me
d590: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 43 74  mSetTypeFlag(pCt
d5a0: 78 2d 3e 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c  x->pOut, MEM_Nul
d5b0: 6c 29 3b 0a 20 20 70 43 74 78 2d 3e 66 45 72 72  l);.  pCtx->fErr
d5c0: 6f 72 4f 72 41 75 78 20 3d 20 30 3b 0a 20 20 64  orOrAux = 0;.  d
d5d0: 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c  b->lastRowid = l
d5e0: 61 73 74 52 6f 77 69 64 3b 0a 20 20 28 2a 70 43  astRowid;.  (*pC
d5f0: 74 78 2d 3e 70 46 75 6e 63 2d 3e 78 53 46 75 6e  tx->pFunc->xSFun
d600: 63 29 28 70 43 74 78 2c 20 70 43 74 78 2d 3e 61  c)(pCtx, pCtx->a
d610: 72 67 63 2c 20 70 43 74 78 2d 3e 61 72 67 76 29  rgc, pCtx->argv)
d620: 3b 2f 2a 20 49 4d 50 3a 20 52 2d 32 34 35 30 35  ;/* IMP: R-24505
d630: 2d 32 33 32 33 30 20 2a 2f 0a 20 20 6c 61 73 74  -23230 */.  last
d640: 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74  Rowid = db->last
d650: 52 6f 77 69 64 3b 20 20 2f 2a 20 52 65 6d 65 6d  Rowid;  /* Remem
d660: 62 65 72 20 72 6f 77 69 64 20 63 68 61 6e 67 65  ber rowid change
d670: 73 20 6d 61 64 65 20 62 79 20 78 53 46 75 6e 63  s made by xSFunc
d680: 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65   */..  /* If the
d690: 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
d6a0: 65 64 20 61 6e 20 65 72 72 6f 72 2c 20 74 68 72  ed an error, thr
d6b0: 6f 77 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20  ow an exception 
d6c0: 2a 2f 0a 20 20 69 66 28 20 70 43 74 78 2d 3e 66  */.  if( pCtx->f
d6d0: 45 72 72 6f 72 4f 72 41 75 78 20 29 7b 0a 20 20  ErrorOrAux ){.  
d6e0: 20 20 69 66 28 20 70 43 74 78 2d 3e 69 73 45 72    if( pCtx->isEr
d6f0: 72 6f 72 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ror ){.      sql
d700: 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
d710: 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76   "%s", sqlite3_v
d720: 61 6c 75 65 5f 74 65 78 74 28 70 43 74 78 2d 3e  alue_text(pCtx->
d730: 70 4f 75 74 29 29 3b 0a 20 20 20 20 20 20 72 63  pOut));.      rc
d740: 20 3d 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72   = pCtx->isError
d750: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
d760: 74 65 33 56 64 62 65 44 65 6c 65 74 65 41 75 78  te3VdbeDeleteAux
d770: 44 61 74 61 28 64 62 2c 20 26 70 2d 3e 70 41 75  Data(db, &p->pAu
d780: 78 44 61 74 61 2c 20 70 43 74 78 2d 3e 69 4f 70  xData, pCtx->iOp
d790: 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20  , pOp->p1);.    
d7a0: 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
d7b0: 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
d7c0: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43 6f 70 79  ;.  }..  /* Copy
d7d0: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
d7e0: 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 6e 74 6f  he function into
d7f0: 20 72 65 67 69 73 74 65 72 20 50 33 20 2a 2f 0a   register P3 */.
d800: 20 20 69 66 28 20 70 4f 75 74 2d 3e 66 6c 61 67    if( pOut->flag
d810: 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  s & (MEM_Str|MEM
d820: 5f 42 6c 6f 62 29 20 29 7b 0a 20 20 20 20 73 71  _Blob) ){.    sq
d830: 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45  lite3VdbeChangeE
d840: 6e 63 6f 64 69 6e 67 28 70 43 74 78 2d 3e 70 4f  ncoding(pCtx->pO
d850: 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  ut, encoding);. 
d860: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64     if( sqlite3Vd
d870: 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 43 74 78  beMemTooBig(pCtx
d880: 2d 3e 70 4f 75 74 29 20 29 20 67 6f 74 6f 20 74  ->pOut) ) goto t
d890: 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 52  oo_big;.  }..  R
d8a0: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
d8b0: 70 2d 3e 70 33 2c 20 70 43 74 78 2d 3e 70 4f 75  p->p3, pCtx->pOu
d8c0: 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  t);.  UPDATE_MAX
d8d0: 5f 42 4c 4f 42 53 49 5a 45 28 70 43 74 78 2d 3e  _BLOBSIZE(pCtx->
d8e0: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
d8f0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69  }../* Opcode: Bi
d900: 74 41 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20  tAnd P1 P2 P3 * 
d910: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
d920: 72 5b 50 33 5d 3d 72 5b 50 31 5d 26 72 5b 50 32  r[P3]=r[P1]&r[P2
d930: 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65  ].**.** Take the
d940: 20 62 69 74 2d 77 69 73 65 20 41 4e 44 20 6f 66   bit-wise AND of
d950: 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72   the values in r
d960: 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50  egister P1 and P
d970: 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74  2 and.** store t
d980: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
d990: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
d9a0: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
d9b0: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
d9c0: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
d9d0: 4f 70 63 6f 64 65 3a 20 42 69 74 4f 72 20 50 31  Opcode: BitOr P1
d9e0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
d9f0: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72  nopsis:  r[P3]=r
da00: 5b 50 31 5d 7c 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  [P1]|r[P2].**.**
da10: 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69   Take the bit-wi
da20: 73 65 20 4f 52 20 6f 66 20 74 68 65 20 76 61 6c  se OR of the val
da30: 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ues in register 
da40: 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a  P1 and P2 and.**
da50: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
da60: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
da70: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
da80: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
da90: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
daa0: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
dab0: 53 68 69 66 74 4c 65 66 74 20 50 31 20 50 32 20  ShiftLeft P1 P2 
dac0: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
dad0: 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d  is:  r[P3]=r[P2]
dae0: 3c 3c 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68  <<r[P1].**.** Sh
daf0: 69 66 74 20 74 68 65 20 69 6e 74 65 67 65 72 20  ift the integer 
db00: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
db10: 72 20 50 32 20 74 6f 20 74 68 65 20 6c 65 66 74  r P2 to the left
db20: 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65   by the.** numbe
db30: 72 20 6f 66 20 62 69 74 73 20 73 70 65 63 69 66  r of bits specif
db40: 69 65 64 20 62 79 20 74 68 65 20 69 6e 74 65 67  ied by the integ
db50: 65 72 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  er in register P
db60: 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20  1..** Store the 
db70: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
db80: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
db90: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
dba0: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
dbb0: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
dbc0: 6f 64 65 3a 20 53 68 69 66 74 52 69 67 68 74 20  ode: ShiftRight 
dbd0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
dbe0: 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d  Synopsis:  r[P3]
dbf0: 3d 72 5b 50 32 5d 3e 3e 72 5b 50 31 5d 0a 2a 2a  =r[P2]>>r[P1].**
dc00: 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20 69 6e  .** Shift the in
dc10: 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72  teger value in r
dc20: 65 67 69 73 74 65 72 20 50 32 20 74 6f 20 74 68  egister P2 to th
dc30: 65 20 72 69 67 68 74 20 62 79 20 74 68 65 0a 2a  e right by the.*
dc40: 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73  * number of bits
dc50: 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68   specified by th
dc60: 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65 67  e integer in reg
dc70: 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f  ister P1..** Sto
dc80: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
dc90: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
dca0: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
dcb0: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
dcc0: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
dcd0: 0a 63 61 73 65 20 4f 50 5f 42 69 74 41 6e 64 3a  .case OP_BitAnd:
dce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dcf0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42   /* same as TK_B
dd00: 49 54 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c  ITAND, in1, in2,
dd10: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
dd20: 5f 42 69 74 4f 72 3a 20 20 20 20 20 20 20 20 20  _BitOr:         
dd30: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
dd40: 20 61 73 20 54 4b 5f 42 49 54 4f 52 2c 20 69 6e   as TK_BITOR, in
dd50: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
dd60: 63 61 73 65 20 4f 50 5f 53 68 69 66 74 4c 65 66  case OP_ShiftLef
dd70: 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t:              
dd80: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 53  /* same as TK_LS
dd90: 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  HIFT, in1, in2, 
dda0: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
ddb0: 53 68 69 66 74 52 69 67 68 74 3a 20 7b 20 20 20  ShiftRight: {   
ddc0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
ddd0: 61 73 20 54 4b 5f 52 53 48 49 46 54 2c 20 69 6e  as TK_RSHIFT, in
dde0: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
ddf0: 20 20 69 36 34 20 69 41 3b 0a 20 20 75 36 34 20    i64 iA;.  u64 
de00: 75 41 3b 0a 20 20 69 36 34 20 69 42 3b 0a 20 20  uA;.  i64 iB;.  
de10: 75 38 20 6f 70 3b 0a 0a 20 20 70 49 6e 31 20 3d  u8 op;..  pIn1 =
de20: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
de30: 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
de40: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74  pOp->p2];.  pOut
de50: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
de60: 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  ];.  if( (pIn1->
de70: 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c  flags | pIn2->fl
de80: 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  ags) & MEM_Null 
de90: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
dea0: 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
deb0: 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  t);.    break;. 
dec0: 20 7d 0a 20 20 69 41 20 3d 20 73 71 6c 69 74 65   }.  iA = sqlite
ded0: 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
dee0: 6e 32 29 3b 0a 20 20 69 42 20 3d 20 73 71 6c 69  n2);.  iB = sqli
def0: 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
df00: 70 49 6e 31 29 3b 0a 20 20 6f 70 20 3d 20 70 4f  pIn1);.  op = pO
df10: 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 69 66 28  p->opcode;.  if(
df20: 20 6f 70 3d 3d 4f 50 5f 42 69 74 41 6e 64 20 29   op==OP_BitAnd )
df30: 7b 0a 20 20 20 20 69 41 20 26 3d 20 69 42 3b 0a  {.    iA &= iB;.
df40: 20 20 7d 65 6c 73 65 20 69 66 28 20 6f 70 3d 3d    }else if( op==
df50: 4f 50 5f 42 69 74 4f 72 20 29 7b 0a 20 20 20 20  OP_BitOr ){.    
df60: 69 41 20 7c 3d 20 69 42 3b 0a 20 20 7d 65 6c 73  iA |= iB;.  }els
df70: 65 20 69 66 28 20 69 42 21 3d 30 20 29 7b 0a 20  e if( iB!=0 ){. 
df80: 20 20 20 61 73 73 65 72 74 28 20 6f 70 3d 3d 4f     assert( op==O
df90: 50 5f 53 68 69 66 74 52 69 67 68 74 20 7c 7c 20  P_ShiftRight || 
dfa0: 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74  op==OP_ShiftLeft
dfb0: 20 29 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 73   );..    /* If s
dfc0: 68 69 66 74 69 6e 67 20 62 79 20 61 20 6e 65 67  hifting by a neg
dfd0: 61 74 69 76 65 20 61 6d 6f 75 6e 74 2c 20 73 68  ative amount, sh
dfe0: 69 66 74 20 69 6e 20 74 68 65 20 6f 74 68 65 72  ift in the other
dff0: 20 64 69 72 65 63 74 69 6f 6e 20 2a 2f 0a 20 20   direction */.  
e000: 20 20 69 66 28 20 69 42 3c 30 20 29 7b 0a 20 20    if( iB<0 ){.  
e010: 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53      assert( OP_S
e020: 68 69 66 74 52 69 67 68 74 3d 3d 4f 50 5f 53 68  hiftRight==OP_Sh
e030: 69 66 74 4c 65 66 74 2b 31 20 29 3b 0a 20 20 20  iftLeft+1 );.   
e040: 20 20 20 6f 70 20 3d 20 32 2a 4f 50 5f 53 68 69     op = 2*OP_Shi
e050: 66 74 4c 65 66 74 20 2b 20 31 20 2d 20 6f 70 3b  ftLeft + 1 - op;
e060: 0a 20 20 20 20 20 20 69 42 20 3d 20 69 42 3e 28  .      iB = iB>(
e070: 2d 36 34 29 20 3f 20 2d 69 42 20 3a 20 36 34 3b  -64) ? -iB : 64;
e080: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20  .    }..    if( 
e090: 69 42 3e 3d 36 34 20 29 7b 0a 20 20 20 20 20 20  iB>=64 ){.      
e0a0: 69 41 20 3d 20 28 69 41 3e 3d 30 20 7c 7c 20 6f  iA = (iA>=0 || o
e0b0: 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 29  p==OP_ShiftLeft)
e0c0: 20 3f 20 30 20 3a 20 2d 31 3b 0a 20 20 20 20 7d   ? 0 : -1;.    }
e0d0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 6d 65 6d 63  else{.      memc
e0e0: 70 79 28 26 75 41 2c 20 26 69 41 2c 20 73 69 7a  py(&uA, &iA, siz
e0f0: 65 6f 66 28 75 41 29 29 3b 0a 20 20 20 20 20 20  eof(uA));.      
e100: 69 66 28 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74  if( op==OP_Shift
e110: 4c 65 66 74 20 29 7b 0a 20 20 20 20 20 20 20 20  Left ){.        
e120: 75 41 20 3c 3c 3d 20 69 42 3b 0a 20 20 20 20 20  uA <<= iB;.     
e130: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
e140: 75 41 20 3e 3e 3d 20 69 42 3b 0a 20 20 20 20 20  uA >>= iB;.     
e150: 20 20 20 2f 2a 20 53 69 67 6e 2d 65 78 74 65 6e     /* Sign-exten
e160: 64 20 6f 6e 20 61 20 72 69 67 68 74 20 73 68 69  d on a right shi
e170: 66 74 20 6f 66 20 61 20 6e 65 67 61 74 69 76 65  ft of a negative
e180: 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 20   number */.     
e190: 20 20 20 69 66 28 20 69 41 3c 30 20 29 20 75 41     if( iA<0 ) uA
e1a0: 20 7c 3d 20 28 28 28 28 75 36 34 29 30 78 66 66   |= ((((u64)0xff
e1b0: 66 66 66 66 66 66 29 3c 3c 33 32 29 7c 30 78 66  ffffff)<<32)|0xf
e1c0: 66 66 66 66 66 66 66 29 20 3c 3c 20 28 36 34 2d  fffffff) << (64-
e1d0: 69 42 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  iB);.      }.   
e1e0: 20 20 20 6d 65 6d 63 70 79 28 26 69 41 2c 20 26     memcpy(&iA, &
e1f0: 75 41 2c 20 73 69 7a 65 6f 66 28 69 41 29 29 3b  uA, sizeof(iA));
e200: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 4f 75  .    }.  }.  pOu
e210: 74 2d 3e 75 2e 69 20 3d 20 69 41 3b 0a 20 20 4d  t->u.i = iA;.  M
e220: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
e230: 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ut, MEM_Int);.  
e240: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
e250: 6f 64 65 3a 20 41 64 64 49 6d 6d 20 20 50 31 20  ode: AddImm  P1 
e260: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
e270: 70 73 69 73 3a 20 20 72 5b 50 31 5d 3d 72 5b 50  psis:  r[P1]=r[P
e280: 31 5d 2b 50 32 0a 2a 2a 20 0a 2a 2a 20 41 64 64  1]+P2.** .** Add
e290: 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 50 32   the constant P2
e2a0: 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e   to the value in
e2b0: 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
e2c0: 20 54 68 65 20 72 65 73 75 6c 74 20 69 73 20 61   The result is a
e2d0: 6c 77 61 79 73 20 61 6e 20 69 6e 74 65 67 65 72  lways an integer
e2e0: 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 66 6f 72 63 65  ..**.** To force
e2f0: 20 61 6e 79 20 72 65 67 69 73 74 65 72 20 74 6f   any register to
e300: 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2c 20   be an integer, 
e310: 6a 75 73 74 20 61 64 64 20 30 2e 0a 2a 2f 0a 63  just add 0..*/.c
e320: 61 73 65 20 4f 50 5f 41 64 64 49 6d 6d 3a 20 7b  ase OP_AddImm: {
e330: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
e340: 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
e350: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
e360: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
e370: 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 73 71  e(p, pIn1);.  sq
e380: 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
e390: 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20  gerify(pIn1);.  
e3a0: 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70  pIn1->u.i += pOp
e3b0: 2d 3e 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ->p2;.  break;.}
e3c0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 73  ../* Opcode: Mus
e3d0: 74 42 65 49 6e 74 20 50 31 20 50 32 20 2a 20 2a  tBeInt P1 P2 * *
e3e0: 20 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f 72 63 65 20   *.** .** Force 
e3f0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
e400: 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 61  ister P1 to be a
e410: 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66 20 74  n integer.  If t
e420: 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50  he value.** in P
e430: 31 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65  1 is not an inte
e440: 67 65 72 20 61 6e 64 20 63 61 6e 6e 6f 74 20 62  ger and cannot b
e450: 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f  e converted into
e460: 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 77   an integer.** w
e470: 69 74 68 6f 75 74 20 64 61 74 61 20 6c 6f 73 73  ithout data loss
e480: 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65  , then jump imme
e490: 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2c 20 6f  diately to P2, o
e4a0: 72 20 69 66 20 50 32 3d 3d 30 0a 2a 2a 20 72 61  r if P2==0.** ra
e4b0: 69 73 65 20 61 6e 20 53 51 4c 49 54 45 5f 4d 49  ise an SQLITE_MI
e4c0: 53 4d 41 54 43 48 20 65 78 63 65 70 74 69 6f 6e  SMATCH exception
e4d0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 73  ..*/.case OP_Mus
e4e0: 74 42 65 49 6e 74 3a 20 7b 20 20 20 20 20 20 20  tBeInt: {       
e4f0: 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
e500: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
e510: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
e520: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
e530: 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29   & MEM_Int)==0 )
e540: 7b 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e  {.    applyAffin
e550: 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45  ity(pIn1, SQLITE
e560: 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20 65 6e  _AFF_NUMERIC, en
e570: 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 56 64 62  coding);.    Vdb
e580: 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 28 70 49  eBranchTaken((pI
e590: 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e  n1->flags&MEM_In
e5a0: 74 29 3d 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69  t)==0, 2);.    i
e5b0: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
e5c0: 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b  & MEM_Int)==0 ){
e5d0: 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  .      if( pOp->
e5e0: 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  p2==0 ){.       
e5f0: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53   rc = SQLITE_MIS
e600: 4d 41 54 43 48 3b 0a 20 20 20 20 20 20 20 20 67  MATCH;.        g
e610: 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
e620: 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 65  _error;.      }e
e630: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 67 6f 74  lse{.        got
e640: 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
e650: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
e660: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
e670: 28 70 49 6e 31 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pIn1, MEM_Int);
e680: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66  .  break;.}..#if
e690: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
e6a0: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
e6b0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c 41  /* Opcode: RealA
e6c0: 66 66 69 6e 69 74 79 20 50 31 20 2a 20 2a 20 2a  ffinity P1 * * *
e6d0: 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 72 65 67 69   *.**.** If regi
e6e0: 73 74 65 72 20 50 31 20 68 6f 6c 64 73 20 61 6e  ster P1 holds an
e6f0: 20 69 6e 74 65 67 65 72 20 63 6f 6e 76 65 72 74   integer convert
e700: 20 69 74 20 74 6f 20 61 20 72 65 61 6c 20 76 61   it to a real va
e710: 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  lue..**.** This 
e720: 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 77  opcode is used w
e730: 68 65 6e 20 65 78 74 72 61 63 74 69 6e 67 20 69  hen extracting i
e740: 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20  nformation from 
e750: 61 20 63 6f 6c 75 6d 6e 20 74 68 61 74 0a 2a 2a  a column that.**
e760: 20 68 61 73 20 52 45 41 4c 20 61 66 66 69 6e 69   has REAL affini
e770: 74 79 2e 20 20 53 75 63 68 20 63 6f 6c 75 6d 6e  ty.  Such column
e780: 20 76 61 6c 75 65 73 20 6d 61 79 20 73 74 69 6c   values may stil
e790: 6c 20 62 65 20 73 74 6f 72 65 64 20 61 73 0a 2a  l be stored as.*
e7a0: 2a 20 69 6e 74 65 67 65 72 73 2c 20 66 6f 72 20  * integers, for 
e7b0: 73 70 61 63 65 20 65 66 66 69 63 69 65 6e 63 79  space efficiency
e7c0: 2c 20 62 75 74 20 61 66 74 65 72 20 65 78 74 72  , but after extr
e7d0: 61 63 74 69 6f 6e 20 77 65 20 77 61 6e 74 20 74  action we want t
e7e0: 68 65 6d 0a 2a 2a 20 74 6f 20 68 61 76 65 20 6f  hem.** to have o
e7f0: 6e 6c 79 20 61 20 72 65 61 6c 20 76 61 6c 75 65  nly a real value
e800: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61  ..*/.case OP_Rea
e810: 6c 41 66 66 69 6e 69 74 79 3a 20 7b 20 20 20 20  lAffinity: {    
e820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
e830: 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
e840: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
e850: 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61  .  if( pIn1->fla
e860: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a  gs & MEM_Int ){.
e870: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
e880: 65 6d 52 65 61 6c 69 66 79 28 70 49 6e 31 29 3b  emRealify(pIn1);
e890: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
e8a0: 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
e8b0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54  SQLITE_OMIT_CAST
e8c0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 61 73 74  ./* Opcode: Cast
e8d0: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
e8e0: 53 79 6e 6f 70 73 69 73 3a 20 61 66 66 69 6e 69  Synopsis: affini
e8f0: 74 79 28 72 5b 50 31 5d 29 0a 2a 2a 0a 2a 2a 20  ty(r[P1]).**.** 
e900: 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20  Force the value 
e910: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
e920: 6f 20 62 65 20 74 68 65 20 74 79 70 65 20 64 65  o be the type de
e930: 66 69 6e 65 64 20 62 79 20 50 32 2e 0a 2a 2a 20  fined by P2..** 
e940: 0a 2a 2a 20 3c 75 6c 3e 0a 2a 2a 20 3c 6c 69 20  .** <ul>.** <li 
e950: 76 61 6c 75 65 3d 22 39 37 22 3e 20 54 45 58 54  value="97"> TEXT
e960: 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22 39  .** <li value="9
e970: 38 22 3e 20 42 4c 4f 42 0a 2a 2a 20 3c 6c 69 20  8"> BLOB.** <li 
e980: 76 61 6c 75 65 3d 22 39 39 22 3e 20 4e 55 4d 45  value="99"> NUME
e990: 52 49 43 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65  RIC.** <li value
e9a0: 3d 22 31 30 30 22 3e 20 49 4e 54 45 47 45 52 0a  ="100"> INTEGER.
e9b0: 2a 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22 31 30  ** <li value="10
e9c0: 31 22 3e 20 52 45 41 4c 0a 2a 2a 20 3c 2f 75 6c  1"> REAL.** </ul
e9d0: 3e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76  >.**.** A NULL v
e9e0: 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e  alue is not chan
e9f0: 67 65 64 20 62 79 20 74 68 69 73 20 72 6f 75 74  ged by this rout
ea00: 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73  ine.  It remains
ea10: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
ea20: 50 5f 43 61 73 74 3a 20 7b 20 20 20 20 20 20 20  P_Cast: {       
ea30: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
ea40: 31 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  1 */.  assert( p
ea50: 4f 70 2d 3e 70 32 3e 3d 53 51 4c 49 54 45 5f 41  Op->p2>=SQLITE_A
ea60: 46 46 5f 42 4c 4f 42 20 26 26 20 70 4f 70 2d 3e  FF_BLOB && pOp->
ea70: 70 32 3c 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52  p2<=SQLITE_AFF_R
ea80: 45 41 4c 20 29 3b 0a 20 20 74 65 73 74 63 61 73  EAL );.  testcas
ea90: 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49  e( pOp->p2==SQLI
eaa0: 54 45 5f 41 46 46 5f 54 45 58 54 20 29 3b 0a 20  TE_AFF_TEXT );. 
eab0: 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e   testcase( pOp->
eac0: 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 42  p2==SQLITE_AFF_B
ead0: 4c 4f 42 20 29 3b 0a 20 20 74 65 73 74 63 61 73  LOB );.  testcas
eae0: 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49  e( pOp->p2==SQLI
eaf0: 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 29  TE_AFF_NUMERIC )
eb00: 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f  ;.  testcase( pO
eb10: 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46  p->p2==SQLITE_AF
eb20: 46 5f 49 4e 54 45 47 45 52 20 29 3b 0a 20 20 74  F_INTEGER );.  t
eb30: 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32  estcase( pOp->p2
eb40: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41  ==SQLITE_AFF_REA
eb50: 4c 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  L );.  pIn1 = &a
eb60: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
eb70: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
eb80: 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 72 63 20  (p, pIn1);.  rc 
eb90: 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e  = ExpandBlob(pIn
eba0: 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  1);.  sqlite3Vdb
ebb0: 65 4d 65 6d 43 61 73 74 28 70 49 6e 31 2c 20 70  eMemCast(pIn1, p
ebc0: 4f 70 2d 3e 70 32 2c 20 65 6e 63 6f 64 69 6e 67  Op->p2, encoding
ebd0: 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
ebe0: 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a  BLOBSIZE(pIn1);.
ebf0: 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
ec00: 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
ec10: 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  or;.  break;.}.#
ec20: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
ec30: 4f 4d 49 54 5f 43 41 53 54 20 2a 2f 0a 0a 2f 2a  OMIT_CAST */../*
ec40: 20 4f 70 63 6f 64 65 3a 20 45 71 20 50 31 20 50   Opcode: Eq P1 P
ec50: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
ec60: 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d  nopsis: if r[P1]
ec70: 3d 3d 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a  ==r[P3] goto P2.
ec80: 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 68  **.** Compare th
ec90: 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
eca0: 73 74 65 72 20 50 31 20 61 6e 64 20 50 33 2e 20  ster P1 and P3. 
ecb0: 20 49 66 20 72 65 67 28 50 33 29 3d 3d 72 65 67   If reg(P3)==reg
ecc0: 28 50 31 29 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d  (P1) then.** jum
ecd0: 70 20 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e  p to address P2.
ece0: 20 20 4f 72 20 69 66 20 74 68 65 20 53 51 4c 49    Or if the SQLI
ecf0: 54 45 5f 53 54 4f 52 45 50 32 20 66 6c 61 67 20  TE_STOREP2 flag 
ed00: 69 73 20 73 65 74 20 69 6e 20 50 35 2c 20 74 68  is set in P5, th
ed10: 65 6e 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20  en.** store the 
ed20: 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72  result of compar
ed30: 69 73 6f 6e 20 69 6e 20 72 65 67 69 73 74 65 72  ison in register
ed40: 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53   P2..**.** The S
ed50: 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 70  QLITE_AFF_MASK p
ed60: 6f 72 74 69 6f 6e 20 6f 66 20 50 35 20 6d 75 73  ortion of P5 mus
ed70: 74 20 62 65 20 61 6e 20 61 66 66 69 6e 69 74 79  t be an affinity
ed80: 20 63 68 61 72 61 63 74 65 72 20 2d 0a 2a 2a 20   character -.** 
ed90: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c  SQLITE_AFF_TEXT,
eda0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45   SQLITE_AFF_INTE
edb0: 47 45 52 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74  GER, and so fort
edc0: 68 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 69 73  h. An attempt is
edd0: 20 6d 61 64 65 20 0a 2a 2a 20 74 6f 20 63 6f 65   made .** to coe
ede0: 72 63 65 20 62 6f 74 68 20 69 6e 70 75 74 73 20  rce both inputs 
edf0: 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 69  according to thi
ee00: 73 20 61 66 66 69 6e 69 74 79 20 62 65 66 6f 72  s affinity befor
ee10: 65 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69  e the.** compari
ee20: 73 6f 6e 20 69 73 20 6d 61 64 65 2e 20 49 66 20  son is made. If 
ee30: 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  the SQLITE_AFF_M
ee40: 41 53 4b 20 69 73 20 30 78 30 30 2c 20 74 68 65  ASK is 0x00, the
ee50: 6e 20 6e 75 6d 65 72 69 63 0a 2a 2a 20 61 66 66  n numeric.** aff
ee60: 69 6e 69 74 79 20 69 73 20 75 73 65 64 2e 20 4e  inity is used. N
ee70: 6f 74 65 20 74 68 61 74 20 74 68 65 20 61 66 66  ote that the aff
ee80: 69 6e 69 74 79 20 63 6f 6e 76 65 72 73 69 6f 6e  inity conversion
ee90: 73 20 61 72 65 20 73 74 6f 72 65 64 0a 2a 2a 20  s are stored.** 
eea0: 62 61 63 6b 20 69 6e 74 6f 20 74 68 65 20 69 6e  back into the in
eeb0: 70 75 74 20 72 65 67 69 73 74 65 72 73 20 50 31  put registers P1
eec0: 20 61 6e 64 20 50 33 2e 20 20 53 6f 20 74 68 69   and P3.  So thi
eed0: 73 20 6f 70 63 6f 64 65 20 63 61 6e 20 63 61 75  s opcode can cau
eee0: 73 65 0a 2a 2a 20 70 65 72 73 69 73 74 65 6e 74  se.** persistent
eef0: 20 63 68 61 6e 67 65 73 20 74 6f 20 72 65 67 69   changes to regi
ef00: 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e  sters P1 and P3.
ef10: 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79 20  .**.** Once any 
ef20: 63 6f 6e 76 65 72 73 69 6f 6e 73 20 68 61 76 65  conversions have
ef30: 20 74 61 6b 65 6e 20 70 6c 61 63 65 2c 20 61 6e   taken place, an
ef40: 64 20 6e 65 69 74 68 65 72 20 76 61 6c 75 65 20  d neither value 
ef50: 69 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65  is NULL, .** the
ef60: 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6d 70   values are comp
ef70: 61 72 65 64 2e 20 49 66 20 62 6f 74 68 20 76 61  ared. If both va
ef80: 6c 75 65 73 20 61 72 65 20 62 6c 6f 62 73 20 74  lues are blobs t
ef90: 68 65 6e 20 6d 65 6d 63 6d 70 28 29 20 69 73 0a  hen memcmp() is.
efa0: 2a 2a 20 75 73 65 64 20 74 6f 20 64 65 74 65 72  ** used to deter
efb0: 6d 69 6e 65 20 74 68 65 20 72 65 73 75 6c 74 73  mine the results
efc0: 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73   of the comparis
efd0: 6f 6e 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c  on.  If both val
efe0: 75 65 73 0a 2a 2a 20 61 72 65 20 74 65 78 74 2c  ues.** are text,
eff0: 20 74 68 65 6e 20 74 68 65 20 61 70 70 72 6f 70   then the approp
f000: 72 69 61 74 65 20 63 6f 6c 6c 61 74 69 6e 67 20  riate collating 
f010: 66 75 6e 63 74 69 6f 6e 20 73 70 65 63 69 66 69  function specifi
f020: 65 64 20 69 6e 0a 2a 2a 20 50 34 20 69 73 20 75  ed in.** P4 is u
f030: 73 65 64 20 74 6f 20 64 6f 20 74 68 65 20 63 6f  sed to do the co
f040: 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 50 34  mparison.  If P4
f050: 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66 69 65   is not specifie
f060: 64 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70  d then.** memcmp
f070: 28 29 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f  () is used to co
f080: 6d 70 61 72 65 20 74 65 78 74 20 73 74 72 69 6e  mpare text strin
f090: 67 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75  g.  If both valu
f0a0: 65 73 20 61 72 65 0a 2a 2a 20 6e 75 6d 65 72 69  es are.** numeri
f0b0: 63 2c 20 74 68 65 6e 20 61 20 6e 75 6d 65 72 69  c, then a numeri
f0c0: 63 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  c comparison is 
f0d0: 75 73 65 64 2e 20 49 66 20 74 68 65 20 74 77 6f  used. If the two
f0e0: 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 6f   values.** are o
f0f0: 66 20 64 69 66 66 65 72 65 6e 74 20 74 79 70 65  f different type
f100: 73 2c 20 74 68 65 6e 20 6e 75 6d 62 65 72 73 20  s, then numbers 
f110: 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c  are considered l
f120: 65 73 73 20 74 68 61 6e 0a 2a 2a 20 73 74 72 69  ess than.** stri
f130: 6e 67 73 20 61 6e 64 20 73 74 72 69 6e 67 73 20  ngs and strings 
f140: 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c  are considered l
f150: 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a  ess than blobs..
f160: 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f  **.** If SQLITE_
f170: 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20 69 6e  NULLEQ is set in
f180: 20 50 35 20 74 68 65 6e 20 74 68 65 20 72 65 73   P5 then the res
f190: 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f  ult of compariso
f1a0: 6e 20 69 73 20 61 6c 77 61 79 73 20 65 69 74 68  n is always eith
f1b0: 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72 20 66 61  er.** true or fa
f1c0: 6c 73 65 20 61 6e 64 20 69 73 20 6e 65 76 65 72  lse and is never
f1d0: 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f 74 68 20   NULL.  If both 
f1e0: 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c  operands are NUL
f1f0: 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  L then the resul
f200: 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61 72 69 73  t.** of comparis
f210: 6f 6e 20 69 73 20 74 72 75 65 2e 20 20 49 66 20  on is true.  If 
f220: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
f230: 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20  s NULL then the 
f240: 72 65 73 75 6c 74 20 69 73 20 66 61 6c 73 65 2e  result is false.
f250: 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65 72 20 6f  .** If neither o
f260: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74  perand is NULL t
f270: 68 65 20 72 65 73 75 6c 74 20 69 73 20 74 68 65  he result is the
f280: 20 73 61 6d 65 20 61 73 20 69 74 20 77 6f 75 6c   same as it woul
f290: 64 20 62 65 20 69 66 0a 2a 2a 20 74 68 65 20 53  d be if.** the S
f2a0: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 66 6c 61  QLITE_NULLEQ fla
f2b0: 67 20 77 65 72 65 20 6f 6d 69 74 74 65 64 20 66  g were omitted f
f2c0: 72 6f 6d 20 50 35 2e 0a 2a 2a 0a 2a 2a 20 49 66  rom P5..**.** If
f2d0: 20 62 6f 74 68 20 53 51 4c 49 54 45 5f 53 54 4f   both SQLITE_STO
f2e0: 52 45 50 32 20 61 6e 64 20 53 51 4c 49 54 45 5f  REP2 and SQLITE_
f2f0: 4b 45 45 50 4e 55 4c 4c 20 66 6c 61 67 73 20 61  KEEPNULL flags a
f300: 72 65 20 73 65 74 20 74 68 65 6e 20 74 68 65 0a  re set then the.
f310: 2a 2a 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 5b  ** content of r[
f320: 50 32 5d 20 69 73 20 6f 6e 6c 79 20 73 65 74 20  P2] is only set 
f330: 74 6f 20 31 20 28 74 72 75 65 29 20 69 66 20 69  to 1 (true) if i
f340: 74 20 77 61 73 20 6e 6f 74 20 70 72 65 76 69 6f  t was not previo
f350: 75 73 6c 79 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  usly NULL..*/./*
f360: 20 4f 70 63 6f 64 65 3a 20 4e 65 20 50 31 20 50   Opcode: Ne P1 P
f370: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
f380: 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d  nopsis: if r[P1]
f390: 21 3d 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a  !=r[P3] goto P2.
f3a0: 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73  **.** This works
f3b0: 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 45   just like the E
f3c0: 71 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20  q opcode except 
f3d0: 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73  that the jump is
f3e0: 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65   taken if.** the
f3f0: 20 6f 70 65 72 61 6e 64 73 20 69 6e 20 72 65 67   operands in reg
f400: 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33  isters P1 and P3
f410: 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c 2e 20   are not equal. 
f420: 20 53 65 65 20 74 68 65 20 45 71 20 6f 70 63 6f   See the Eq opco
f430: 64 65 20 66 6f 72 0a 2a 2a 20 61 64 64 69 74 69  de for.** additi
f440: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
f450: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 62 6f 74 68 20  ..**.** If both 
f460: 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 61  SQLITE_STOREP2 a
f470: 6e 64 20 53 51 4c 49 54 45 5f 4b 45 45 50 4e 55  nd SQLITE_KEEPNU
f480: 4c 4c 20 66 6c 61 67 73 20 61 72 65 20 73 65 74  LL flags are set
f490: 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 63 6f 6e   then the.** con
f4a0: 74 65 6e 74 20 6f 66 20 72 5b 50 32 5d 20 69 73  tent of r[P2] is
f4b0: 20 6f 6e 6c 79 20 73 65 74 20 74 6f 20 30 20 28   only set to 0 (
f4c0: 66 61 6c 73 65 29 20 69 66 20 69 74 20 77 61 73  false) if it was
f4d0: 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20   not previously 
f4e0: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
f4f0: 64 65 3a 20 4c 74 20 50 31 20 50 32 20 50 33 20  de: Lt P1 P2 P3 
f500: 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
f510: 73 3a 20 69 66 20 72 5b 50 31 5d 3c 72 5b 50 33  s: if r[P1]<r[P3
f520: 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  ] goto P2.**.** 
f530: 43 6f 6d 70 61 72 65 20 74 68 65 20 76 61 6c 75  Compare the valu
f540: 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  es in register P
f550: 31 20 61 6e 64 20 50 33 2e 20 20 49 66 20 72 65  1 and P3.  If re
f560: 67 28 50 33 29 3c 72 65 67 28 50 31 29 20 74 68  g(P3)<reg(P1) th
f570: 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 61 64  en.** jump to ad
f580: 64 72 65 73 73 20 50 32 2e 20 20 4f 72 20 69 66  dress P2.  Or if
f590: 20 74 68 65 20 53 51 4c 49 54 45 5f 53 54 4f 52   the SQLITE_STOR
f5a0: 45 50 32 20 66 6c 61 67 20 69 73 20 73 65 74 20  EP2 flag is set 
f5b0: 69 6e 20 50 35 20 73 74 6f 72 65 0a 2a 2a 20 74  in P5 store.** t
f5c0: 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d  he result of com
f5d0: 70 61 72 69 73 6f 6e 20 28 30 20 6f 72 20 31 20  parison (0 or 1 
f5e0: 6f 72 20 4e 55 4c 4c 29 20 69 6e 74 6f 20 72 65  or NULL) into re
f5f0: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
f600: 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a   If the SQLITE_J
f610: 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20 6f 66  UMPIFNULL bit of
f620: 20 50 35 20 69 73 20 73 65 74 20 61 6e 64 20 65   P5 is set and e
f630: 69 74 68 65 72 20 72 65 67 28 50 31 29 20 6f 72  ither reg(P1) or
f640: 0a 2a 2a 20 72 65 67 28 50 33 29 20 69 73 20 4e  .** reg(P3) is N
f650: 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 74 61 6b  ULL then the tak
f660: 65 20 74 68 65 20 6a 75 6d 70 2e 20 20 49 66 20  e the jump.  If 
f670: 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  the SQLITE_JUMPI
f680: 46 4e 55 4c 4c 20 0a 2a 2a 20 62 69 74 20 69 73  FNULL .** bit is
f690: 20 63 6c 65 61 72 20 74 68 65 6e 20 66 61 6c 6c   clear then fall
f6a0: 20 74 68 72 6f 75 67 68 20 69 66 20 65 69 74 68   through if eith
f6b0: 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
f6c0: 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51  LL..**.** The SQ
f6d0: 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 70 6f  LITE_AFF_MASK po
f6e0: 72 74 69 6f 6e 20 6f 66 20 50 35 20 6d 75 73 74  rtion of P5 must
f6f0: 20 62 65 20 61 6e 20 61 66 66 69 6e 69 74 79 20   be an affinity 
f700: 63 68 61 72 61 63 74 65 72 20 2d 0a 2a 2a 20 53  character -.** S
f710: 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20  QLITE_AFF_TEXT, 
f720: 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47  SQLITE_AFF_INTEG
f730: 45 52 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68  ER, and so forth
f740: 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 69 73 20  . An attempt is 
f750: 6d 61 64 65 20 0a 2a 2a 20 74 6f 20 63 6f 65 72  made .** to coer
f760: 63 65 20 62 6f 74 68 20 69 6e 70 75 74 73 20 61  ce both inputs a
f770: 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 69 73  ccording to this
f780: 20 61 66 66 69 6e 69 74 79 20 62 65 66 6f 72 65   affinity before
f790: 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73   the.** comparis
f7a0: 6f 6e 20 69 73 20 6d 61 64 65 2e 20 49 66 20 74  on is made. If t
f7b0: 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41  he SQLITE_AFF_MA
f7c0: 53 4b 20 69 73 20 30 78 30 30 2c 20 74 68 65 6e  SK is 0x00, then
f7d0: 20 6e 75 6d 65 72 69 63 0a 2a 2a 20 61 66 66 69   numeric.** affi
f7e0: 6e 69 74 79 20 69 73 20 75 73 65 64 2e 20 4e 6f  nity is used. No
f7f0: 74 65 20 74 68 61 74 20 74 68 65 20 61 66 66 69  te that the affi
f800: 6e 69 74 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73  nity conversions
f810: 20 61 72 65 20 73 74 6f 72 65 64 0a 2a 2a 20 62   are stored.** b
f820: 61 63 6b 20 69 6e 74 6f 20 74 68 65 20 69 6e 70  ack into the inp
f830: 75 74 20 72 65 67 69 73 74 65 72 73 20 50 31 20  ut registers P1 
f840: 61 6e 64 20 50 33 2e 20 20 53 6f 20 74 68 69 73  and P3.  So this
f850: 20 6f 70 63 6f 64 65 20 63 61 6e 20 63 61 75 73   opcode can caus
f860: 65 0a 2a 2a 20 70 65 72 73 69 73 74 65 6e 74 20  e.** persistent 
f870: 63 68 61 6e 67 65 73 20 74 6f 20 72 65 67 69 73  changes to regis
f880: 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e 0a  ters P1 and P3..
f890: 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79 20 63  **.** Once any c
f8a0: 6f 6e 76 65 72 73 69 6f 6e 73 20 68 61 76 65 20  onversions have 
f8b0: 74 61 6b 65 6e 20 70 6c 61 63 65 2c 20 61 6e 64  taken place, and
f8c0: 20 6e 65 69 74 68 65 72 20 76 61 6c 75 65 20 69   neither value i
f8d0: 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20  s NULL, .** the 
f8e0: 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6d 70 61  values are compa
f8f0: 72 65 64 2e 20 49 66 20 62 6f 74 68 20 76 61 6c  red. If both val
f900: 75 65 73 20 61 72 65 20 62 6c 6f 62 73 20 74 68  ues are blobs th
f910: 65 6e 20 6d 65 6d 63 6d 70 28 29 20 69 73 0a 2a  en memcmp() is.*
f920: 2a 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d  * used to determ
f930: 69 6e 65 20 74 68 65 20 72 65 73 75 6c 74 73 20  ine the results 
f940: 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  of the compariso
f950: 6e 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75  n.  If both valu
f960: 65 73 0a 2a 2a 20 61 72 65 20 74 65 78 74 2c 20  es.** are text, 
f970: 74 68 65 6e 20 74 68 65 20 61 70 70 72 6f 70 72  then the appropr
f980: 69 61 74 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66  iate collating f
f990: 75 6e 63 74 69 6f 6e 20 73 70 65 63 69 66 69 65  unction specifie
f9a0: 64 20 69 6e 0a 2a 2a 20 50 34 20 69 73 20 20 75  d in.** P4 is  u
f9b0: 73 65 64 20 74 6f 20 64 6f 20 74 68 65 20 63 6f  sed to do the co
f9c0: 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 50 34  mparison.  If P4
f9d0: 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66 69 65   is not specifie
f9e0: 64 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70  d then.** memcmp
f9f0: 28 29 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f  () is used to co
fa00: 6d 70 61 72 65 20 74 65 78 74 20 73 74 72 69 6e  mpare text strin
fa10: 67 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75  g.  If both valu
fa20: 65 73 20 61 72 65 0a 2a 2a 20 6e 75 6d 65 72 69  es are.** numeri
fa30: 63 2c 20 74 68 65 6e 20 61 20 6e 75 6d 65 72 69  c, then a numeri
fa40: 63 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  c comparison is 
fa50: 75 73 65 64 2e 20 49 66 20 74 68 65 20 74 77 6f  used. If the two
fa60: 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 6f   values.** are o
fa70: 66 20 64 69 66 66 65 72 65 6e 74 20 74 79 70 65  f different type
fa80: 73 2c 20 74 68 65 6e 20 6e 75 6d 62 65 72 73 20  s, then numbers 
fa90: 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c  are considered l
faa0: 65 73 73 20 74 68 61 6e 0a 2a 2a 20 73 74 72 69  ess than.** stri
fab0: 6e 67 73 20 61 6e 64 20 73 74 72 69 6e 67 73 20  ngs and strings 
fac0: 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c  are considered l
fad0: 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a  ess than blobs..
fae0: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 65  */./* Opcode: Le
faf0: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
fb00: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
fb10: 72 5b 50 31 5d 3c 3d 72 5b 50 33 5d 20 67 6f 74  r[P1]<=r[P3] got
fb20: 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  o P2.**.** This 
fb30: 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
fb40: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78  the Lt opcode ex
fb50: 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75  cept that the ju
fb60: 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a  mp is taken if.*
fb70: 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  * the content of
fb80: 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
fb90: 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75  less than or equ
fba0: 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e  al to the conten
fbb0: 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72  t of.** register
fbc0: 20 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74   P1.  See the Lt
fbd0: 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69   opcode for addi
fbe0: 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
fbf0: 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  on..*/./* Opcode
fc00: 3a 20 47 74 20 50 31 20 50 32 20 50 33 20 50 34  : Gt P1 P2 P3 P4
fc10: 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
fc20: 20 69 66 20 72 5b 50 31 5d 3e 72 5b 50 33 5d 20   if r[P1]>r[P3] 
fc30: 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68  goto P2.**.** Th
fc40: 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69  is works just li
fc50: 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ke the Lt opcode
fc60: 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65   except that the
fc70: 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
fc80: 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74  f.** the content
fc90: 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20   of register P3 
fca0: 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
fcb0: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a  the content of.*
fcc0: 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20  * register P1.  
fcd0: 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  See the Lt opcod
fce0: 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  e for additional
fcf0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
fd00: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 65 20 50  ./* Opcode: Ge P
fd10: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
fd20: 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b   Synopsis: if r[
fd30: 50 31 5d 3e 3d 72 5b 50 33 5d 20 67 6f 74 6f 20  P1]>=r[P3] goto 
fd40: 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f  P2.**.** This wo
fd50: 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68  rks just like th
fd60: 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65  e Lt opcode exce
fd70: 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70  pt that the jump
fd80: 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20   is taken if.** 
fd90: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
fda0: 65 67 69 73 74 65 72 20 50 33 20 69 73 20 67 72  egister P3 is gr
fdb0: 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71  eater than or eq
fdc0: 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74 65  ual to the conte
fdd0: 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65  nt of.** registe
fde0: 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c  r P1.  See the L
fdf0: 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64  t opcode for add
fe00: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
fe10: 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
fe20: 45 71 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  Eq:             
fe30: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
fe40: 45 51 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69  EQ, jump, in1, i
fe50: 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65  n3 */.case OP_Ne
fe60: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
fe70: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 45  /* same as TK_NE
fe80: 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  , jump, in1, in3
fe90: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 74 3a 20   */.case OP_Lt: 
fea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
feb0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 54 2c 20   same as TK_LT, 
fec0: 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a  jump, in1, in3 *
fed0: 2f 0a 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20  /.case OP_Le:   
fee0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
fef0: 61 6d 65 20 61 73 20 54 4b 5f 4c 45 2c 20 6a 75  ame as TK_LE, ju
ff00: 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
ff10: 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20 20 20  case OP_Gt:     
ff20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
ff30: 65 20 61 73 20 54 4b 5f 47 54 2c 20 6a 75 6d 70  e as TK_GT, jump
ff40: 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61  , in1, in3 */.ca
ff50: 73 65 20 4f 50 5f 47 65 3a 20 7b 20 20 20 20 20  se OP_Ge: {     
ff60: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
ff70: 61 73 20 54 4b 5f 47 45 2c 20 6a 75 6d 70 2c 20  as TK_GE, jump, 
ff80: 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e  in1, in3 */.  in
ff90: 74 20 72 65 73 3b 20 20 20 20 20 20 20 20 20 20  t res;          
ffa0: 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 74    /* Result of t
ffb0: 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66  he comparison of
ffc0: 20 70 49 6e 31 20 61 67 61 69 6e 73 74 20 70 49   pIn1 against pI
ffd0: 6e 33 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66  n3 */.  char aff
ffe0: 69 6e 69 74 79 3b 20 20 20 20 20 20 2f 2a 20 41  inity;      /* A
fff0: 66 66 69 6e 69 74 79 20 74 6f 20 75 73 65 20 66  ffinity to use f
10000 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e 20 2a 2f  or comparison */
10010 0a 20 20 75 31 36 20 66 6c 61 67 73 31 3b 20 20  .  u16 flags1;  
10020 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f         /* Copy o
10030 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20  f initial value 
10040 6f 66 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 2a  of pIn1->flags *
10050 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 33 3b 20  /.  u16 flags3; 
10060 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20          /* Copy 
10070 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65  of initial value
10080 20 6f 66 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20   of pIn3->flags 
10090 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  */..  pIn1 = &aM
100a0 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
100b0 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
100c0 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 31 20 3d  >p3];.  flags1 =
100d0 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3b 0a 20 20   pIn1->flags;.  
100e0 66 6c 61 67 73 33 20 3d 20 70 49 6e 33 2d 3e 66  flags3 = pIn3->f
100f0 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 66 6c 61  lags;.  if( (fla
10100 67 73 31 20 7c 20 66 6c 61 67 73 33 29 26 4d 45  gs1 | flags3)&ME
10110 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 2f 2a  M_Null ){.    /*
10120 20 4f 6e 65 20 6f 72 20 62 6f 74 68 20 6f 70 65   One or both ope
10130 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20 2a  rands are NULL *
10140 2f 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  /.    if( pOp->p
10150 35 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45  5 & SQLITE_NULLE
10160 51 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66  Q ){.      /* If
10170 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69   SQLITE_NULLEQ i
10180 73 20 73 65 74 20 28 77 68 69 63 68 20 77 69 6c  s set (which wil
10190 6c 20 6f 6e 6c 79 20 68 61 70 70 65 6e 20 69 66  l only happen if
101a0 20 74 68 65 20 6f 70 65 72 61 74 6f 72 20 69 73   the operator is
101b0 0a 20 20 20 20 20 20 2a 2a 20 4f 50 5f 45 71 20  .      ** OP_Eq 
101c0 6f 72 20 4f 50 5f 4e 65 29 20 74 68 65 6e 20 74  or OP_Ne) then t
101d0 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 6f 72 20  ake the jump or 
101e0 6e 6f 74 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  not depending on
101f0 20 77 68 65 74 68 65 72 0a 20 20 20 20 20 20 2a   whether.      *
10200 2a 20 6f 72 20 6e 6f 74 20 62 6f 74 68 20 6f 70  * or not both op
10210 65 72 61 6e 64 73 20 61 72 65 20 6e 75 6c 6c 2e  erands are null.
10220 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
10230 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
10240 6f 64 65 3d 3d 4f 50 5f 45 71 20 7c 7c 20 70 4f  ode==OP_Eq || pO
10250 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65  p->opcode==OP_Ne
10260 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
10270 28 20 28 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f  ( (flags1 & MEM_
10280 43 6c 65 61 72 65 64 29 3d 3d 30 20 29 3b 0a 20  Cleared)==0 );. 
10290 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70 4f       assert( (pO
102a0 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4a  p->p5 & SQLITE_J
102b0 55 4d 50 49 46 4e 55 4c 4c 29 3d 3d 30 20 29 3b  UMPIFNULL)==0 );
102c0 0a 20 20 20 20 20 20 69 66 28 20 28 66 6c 61 67  .      if( (flag
102d0 73 31 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 0a  s1&MEM_Null)!=0.
102e0 20 20 20 20 20 20 20 26 26 20 28 66 6c 61 67 73         && (flags
102f0 33 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 0a 20  3&MEM_Null)!=0. 
10300 20 20 20 20 20 20 26 26 20 28 66 6c 61 67 73 33        && (flags3
10310 26 4d 45 4d 5f 43 6c 65 61 72 65 64 29 3d 3d 30  &MEM_Cleared)==0
10320 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20 20  .      ){.      
10330 20 20 63 6d 70 52 65 73 20 3d 20 30 3b 20 20 2f    cmpRes = 0;  /
10340 2a 20 4f 70 65 72 61 6e 64 73 20 61 72 65 20 65  * Operands are e
10350 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 65  qual */.      }e
10360 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 63 6d 70  lse{.        cmp
10370 52 65 73 20 3d 20 31 3b 20 20 2f 2a 20 4f 70 65  Res = 1;  /* Ope
10380 72 61 6e 64 73 20 61 72 65 20 6e 6f 74 20 65 71  rands are not eq
10390 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 0a 20  ual */.      }. 
103a0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
103b0 2f 2a 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  /* SQLITE_NULLEQ
103c0 20 69 73 20 63 6c 65 61 72 20 61 6e 64 20 61 74   is clear and at
103d0 20 6c 65 61 73 74 20 6f 6e 65 20 6f 70 65 72 61   least one opera
103e0 6e 64 20 69 73 20 4e 55 4c 4c 2c 0a 20 20 20 20  nd is NULL,.    
103f0 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 20 72 65    ** then the re
10400 73 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20 4e  sult is always N
10410 55 4c 4c 2e 0a 20 20 20 20 20 20 2a 2a 20 54 68  ULL..      ** Th
10420 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
10430 69 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55  if the SQLITE_JU
10440 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20 69 73 20  MPIFNULL bit is 
10450 73 65 74 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  set..      */.  
10460 20 20 20 20 63 6d 70 52 65 73 20 3d 20 31 3b 20      cmpRes = 1; 
10470 20 20 20 2f 2a 20 4f 70 65 72 61 6e 64 73 20 61     /* Operands a
10480 72 65 20 6e 6f 74 20 65 71 75 61 6c 20 2a 2f 0a  re not equal */.
10490 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70        if( pOp->p
104a0 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f 52 45  5 & SQLITE_STORE
104b0 50 32 20 29 7b 0a 20 20 20 20 20 20 20 20 70 4f  P2 ){.        pO
104c0 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
104d0 70 32 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d  p2];.        mem
104e0 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
104f0 20 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 20 20   pOut);.        
10500 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
10510 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a  Out, MEM_Null);.
10520 20 20 20 20 20 20 20 20 52 45 47 49 53 54 45 52          REGISTER
10530 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20  _TRACE(pOp->p2, 
10540 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c  pOut);.      }el
10550 73 65 7b 0a 20 20 20 20 20 20 20 20 56 64 62 65  se{.        Vdbe
10560 42 72 61 6e 63 68 54 61 6b 65 6e 28 32 2c 33 29  BranchTaken(2,3)
10570 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 4f  ;.        if( pO
10580 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4a  p->p5 & SQLITE_J
10590 55 4d 50 49 46 4e 55 4c 4c 20 29 7b 0a 20 20 20  UMPIFNULL ){.   
105a0 20 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70         goto jump
105b0 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 20 20 20 20  _to_p2;.        
105c0 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  }.      }.      
105d0 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d  break;.    }.  }
105e0 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 4e 65 69  else{.    /* Nei
105f0 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
10600 4e 55 4c 4c 2e 20 20 44 6f 20 61 20 63 6f 6d 70  NULL.  Do a comp
10610 61 72 69 73 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61  arison. */.    a
10620 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70  ffinity = pOp->p
10630 35 20 26 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  5 & SQLITE_AFF_M
10640 41 53 4b 3b 0a 20 20 20 20 69 66 28 20 61 66 66  ASK;.    if( aff
10650 69 6e 69 74 79 3e 3d 53 51 4c 49 54 45 5f 41 46  inity>=SQLITE_AF
10660 46 5f 4e 55 4d 45 52 49 43 20 29 7b 0a 20 20 20  F_NUMERIC ){.   
10670 20 20 20 69 66 28 20 28 66 6c 61 67 73 31 20 7c     if( (flags1 |
10680 20 66 6c 61 67 73 33 29 26 4d 45 4d 5f 53 74 72   flags3)&MEM_Str
10690 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20   ){.        if( 
106a0 28 66 6c 61 67 73 31 20 26 20 28 4d 45 4d 5f 49  (flags1 & (MEM_I
106b0 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f  nt|MEM_Real|MEM_
106c0 53 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29  Str))==MEM_Str )
106d0 7b 0a 20 20 20 20 20 20 20 20 20 20 61 70 70 6c  {.          appl
106e0 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  yNumericAffinity
106f0 28 70 49 6e 31 2c 30 29 3b 0a 20 20 20 20 20 20  (pIn1,0);.      
10700 20 20 20 20 66 6c 61 67 73 33 20 3d 20 70 49 6e      flags3 = pIn
10710 33 2d 3e 66 6c 61 67 73 3b 0a 20 20 20 20 20 20  3->flags;.      
10720 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20    }.        if( 
10730 28 66 6c 61 67 73 33 20 26 20 28 4d 45 4d 5f 49  (flags3 & (MEM_I
10740 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f  nt|MEM_Real|MEM_
10750 53 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29  Str))==MEM_Str )
10760 7b 0a 20 20 20 20 20 20 20 20 20 20 61 70 70 6c  {.          appl
10770 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  yNumericAffinity
10780 28 70 49 6e 33 2c 30 29 3b 0a 20 20 20 20 20 20  (pIn3,0);.      
10790 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
107a0 7d 65 6c 73 65 20 69 66 28 20 61 66 66 69 6e 69  }else if( affini
107b0 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54  ty==SQLITE_AFF_T
107c0 45 58 54 20 29 7b 0a 20 20 20 20 20 20 69 66 28  EXT ){.      if(
107d0 20 28 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f 53   (flags1 & MEM_S
107e0 74 72 29 3d 3d 30 20 26 26 20 28 66 6c 61 67 73  tr)==0 && (flags
107f0 31 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d  1 & (MEM_Int|MEM
10800 5f 52 65 61 6c 29 29 21 3d 30 20 29 7b 0a 20 20  _Real))!=0 ){.  
10810 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
10820 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
10830 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 20 20 20  M_Int );.       
10840 20 74 65 73 74 63 61 73 65 28 20 70 49 6e 31 2d   testcase( pIn1-
10850 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61  >flags & MEM_Rea
10860 6c 20 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  l );.        sql
10870 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69 6e  ite3VdbeMemStrin
10880 67 69 66 79 28 70 49 6e 31 2c 20 65 6e 63 6f 64  gify(pIn1, encod
10890 69 6e 67 2c 20 31 29 3b 0a 20 20 20 20 20 20 20  ing, 1);.       
108a0 20 74 65 73 74 63 61 73 65 28 20 28 66 6c 61 67   testcase( (flag
108b0 73 31 26 4d 45 4d 5f 44 79 6e 29 20 21 3d 20 28  s1&MEM_Dyn) != (
108c0 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn1->flags&MEM_
108d0 44 79 6e 29 20 29 3b 0a 20 20 20 20 20 20 20 20  Dyn) );.        
108e0 66 6c 61 67 73 31 20 3d 20 28 70 49 6e 31 2d 3e  flags1 = (pIn1->
108f0 66 6c 61 67 73 20 26 20 7e 4d 45 4d 5f 54 79 70  flags & ~MEM_Typ
10900 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67 73 31  eMask) | (flags1
10910 20 26 20 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29   & MEM_TypeMask)
10920 3b 0a 20 20 20 20 20 20 20 20 66 6c 61 67 73 33  ;.        flags3
10930 20 3d 20 70 49 6e 33 2d 3e 66 6c 61 67 73 3b 0a   = pIn3->flags;.
10940 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
10950 28 20 28 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f  ( (flags3 & MEM_
10960 53 74 72 29 3d 3d 30 20 26 26 20 28 66 6c 61 67  Str)==0 && (flag
10970 73 33 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45  s3 & (MEM_Int|ME
10980 4d 5f 52 65 61 6c 29 29 21 3d 30 20 29 7b 0a 20  M_Real))!=0 ){. 
10990 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28         testcase(
109a0 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn3->flags & M
109b0 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 20 20  EM_Int );.      
109c0 20 20 74 65 73 74 63 61 73 65 28 20 70 49 6e 33    testcase( pIn3
109d0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65  ->flags & MEM_Re
109e0 61 6c 20 29 3b 0a 20 20 20 20 20 20 20 20 73 71  al );.        sq
109f0 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69  lite3VdbeMemStri
10a00 6e 67 69 66 79 28 70 49 6e 33 2c 20 65 6e 63 6f  ngify(pIn3, enco
10a10 64 69 6e 67 2c 20 31 29 3b 0a 20 20 20 20 20 20  ding, 1);.      
10a20 20 20 74 65 73 74 63 61 73 65 28 20 28 66 6c 61    testcase( (fla
10a30 67 73 33 26 4d 45 4d 5f 44 79 6e 29 20 21 3d 20  gs3&MEM_Dyn) != 
10a40 28 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45 4d  (pIn3->flags&MEM
10a50 5f 44 79 6e 29 20 29 3b 0a 20 20 20 20 20 20 20  _Dyn) );.       
10a60 20 66 6c 61 67 73 33 20 3d 20 28 70 49 6e 33 2d   flags3 = (pIn3-
10a70 3e 66 6c 61 67 73 20 26 20 7e 4d 45 4d 5f 54 79  >flags & ~MEM_Ty
10a80 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67 73  peMask) | (flags
10a90 33 20 26 20 4d 45 4d 5f 54 79 70 65 4d 61 73 6b  3 & MEM_TypeMask
10aa0 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
10ab0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
10ac0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c  ->p4type==P4_COL
10ad0 4c 53 45 51 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e  LSEQ || pOp->p4.
10ae0 70 43 6f 6c 6c 3d 3d 30 20 29 3b 0a 20 20 20 20  pColl==0 );.    
10af0 69 66 28 20 66 6c 61 67 73 31 20 26 20 4d 45 4d  if( flags1 & MEM
10b00 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 73  _Zero ){.      s
10b10 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70  qlite3VdbeMemExp
10b20 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20  andBlob(pIn1);. 
10b30 20 20 20 20 20 66 6c 61 67 73 31 20 26 3d 20 7e       flags1 &= ~
10b40 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20 20 20 7d 0a  MEM_Zero;.    }.
10b50 20 20 20 20 69 66 28 20 66 6c 61 67 73 33 20 26      if( flags3 &
10b60 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20   MEM_Zero ){.   
10b70 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
10b80 6d 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 33  mExpandBlob(pIn3
10b90 29 3b 0a 20 20 20 20 20 20 66 6c 61 67 73 33 20  );.      flags3 
10ba0 26 3d 20 7e 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20  &= ~MEM_Zero;.  
10bb0 20 20 7d 0a 20 20 20 20 63 6d 70 52 65 73 20 3d    }.    cmpRes =
10bc0 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61   sqlite3MemCompa
10bd0 72 65 28 70 49 6e 33 2c 20 70 49 6e 31 2c 20 70  re(pIn3, pIn1, p
10be0 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 29 3b 0a 20  Op->p4.pColl);. 
10bf0 20 7d 0a 20 20 73 77 69 74 63 68 28 20 70 4f 70   }.  switch( pOp
10c00 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20  ->opcode ){.    
10c10 63 61 73 65 20 4f 50 5f 45 71 3a 20 20 20 20 72  case OP_Eq:    r
10c20 65 73 20 3d 20 63 6d 70 52 65 73 3d 3d 30 3b 20  es = cmpRes==0; 
10c30 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
10c40 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20 72 65  ase OP_Ne:    re
10c50 73 20 3d 20 63 6d 70 52 65 73 21 3d 30 3b 20 20  s = cmpRes!=0;  
10c60 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
10c70 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20 72 65 73  se OP_Lt:    res
10c80 20 3d 20 63 6d 70 52 65 73 3c 30 3b 20 20 20 20   = cmpRes<0;    
10c90 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
10ca0 65 20 4f 50 5f 4c 65 3a 20 20 20 20 72 65 73 20  e OP_Le:    res 
10cb0 3d 20 63 6d 70 52 65 73 3c 3d 30 3b 20 20 20 20  = cmpRes<=0;    
10cc0 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
10cd0 20 4f 50 5f 47 74 3a 20 20 20 20 72 65 73 20 3d   OP_Gt:    res =
10ce0 20 63 6d 70 52 65 73 3e 30 3b 20 20 20 20 20 20   cmpRes>0;      
10cf0 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
10d00 4f 50 5f 47 65 3a 20 20 20 20 72 65 73 20 3d 20  OP_Ge:    res = 
10d10 63 6d 70 52 65 73 3e 3d 30 3b 20 20 20 20 20 62  cmpRes>=0;     b
10d20 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  reak;.  }..  /* 
10d30 55 6e 64 6f 20 61 6e 79 20 63 68 61 6e 67 65 73  Undo any changes
10d40 20 6d 61 64 65 20 62 79 20 61 70 70 6c 79 41 66   made by applyAf
10d50 66 69 6e 69 74 79 28 29 20 74 6f 20 74 68 65 20  finity() to the 
10d60 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 2e  input registers.
10d70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 28 70   */.  assert( (p
10d80 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
10d90 5f 44 79 6e 29 20 3d 3d 20 28 66 6c 61 67 73 31  _Dyn) == (flags1
10da0 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20   & MEM_Dyn) );. 
10db0 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 66   pIn1->flags = f
10dc0 6c 61 67 73 31 3b 0a 20 20 61 73 73 65 72 74 28  lags1;.  assert(
10dd0 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20   (pIn3->flags & 
10de0 4d 45 4d 5f 44 79 6e 29 20 3d 3d 20 28 66 6c 61  MEM_Dyn) == (fla
10df0 67 73 33 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29  gs3 & MEM_Dyn) )
10e00 3b 0a 20 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20  ;.  pIn3->flags 
10e10 3d 20 66 6c 61 67 73 33 3b 0a 0a 20 20 69 66 28  = flags3;..  if(
10e20 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54   pOp->p5 & SQLIT
10e30 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20  E_STOREP2 ){.   
10e40 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
10e50 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 69 66 28 20  p->p2];.    if( 
10e60 28 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54  (pOp->p5 & SQLIT
10e70 45 5f 4b 45 45 50 4e 55 4c 4c 29 21 3d 30 20 26  E_KEEPNULL)!=0 &
10e80 26 20 28 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26  & (pOut->flags &
10e90 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 7b   MEM_Null)!=0 ){
10ea0 0a 20 20 20 20 20 20 2f 2a 20 54 68 65 20 4b 45  .      /* The KE
10eb0 45 50 4e 55 4c 4c 20 66 6c 61 67 20 70 72 65 76  EPNULL flag prev
10ec0 65 6e 74 73 20 4f 50 5f 45 71 20 66 72 6f 6d 20  ents OP_Eq from 
10ed0 6f 76 65 72 77 72 69 74 69 6e 67 20 61 20 4e 55  overwriting a NU
10ee0 4c 4c 20 77 69 74 68 20 31 0a 20 20 20 20 20 20  LL with 1.      
10ef0 2a 2a 20 61 6e 64 20 70 72 65 76 65 6e 74 73 20  ** and prevents 
10f00 4f 50 5f 4e 65 20 66 72 6f 6d 20 6f 76 65 72 77  OP_Ne from overw
10f10 72 69 74 69 6e 67 20 4e 55 4c 4c 20 77 69 74 68  riting NULL with
10f20 20 30 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73 73   0. */.      ass
10f30 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
10f40 3d 3d 4f 50 5f 4e 65 20 7c 7c 20 70 4f 70 2d 3e  ==OP_Ne || pOp->
10f50 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 29 3b  opcode==OP_Eq );
10f60 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72  .      assert( r
10f70 65 73 3d 3d 30 20 7c 7c 20 72 65 73 3d 3d 31 20  es==0 || res==1 
10f80 29 3b 0a 20 20 20 20 20 20 69 66 28 20 28 70 4f  );.      if( (pO
10f90 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71  p->opcode==OP_Eq
10fa0 29 3d 3d 72 65 73 20 29 20 62 72 65 61 6b 3b 0a  )==res ) break;.
10fb0 20 20 20 20 7d 0a 20 20 20 20 6d 65 6d 41 62 6f      }.    memAbo
10fc0 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f  utToChange(p, pO
10fd0 75 74 29 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54  ut);.    MemSetT
10fe0 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
10ff0 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 70 4f 75 74  M_Int);.    pOut
11000 2d 3e 75 2e 69 20 3d 20 72 65 73 3b 0a 20 20 20  ->u.i = res;.   
11010 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
11020 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a  pOp->p2, pOut);.
11030 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62    }else{.    Vdb
11040 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73  eBranchTaken(res
11050 21 3d 30 2c 20 28 70 4f 70 2d 3e 70 35 20 26 20  !=0, (pOp->p5 & 
11060 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 29 3f 32  SQLITE_NULLEQ)?2
11070 3a 33 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73  :3);.    if( res
11080 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6a   ){.      goto j
11090 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 7d  ump_to_p2;.    }
110a0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
110b0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 6c 73 65  ./* Opcode: Else
110c0 4e 6f 74 45 71 20 2a 20 50 32 20 2a 20 2a 20 2a  NotEq * P2 * * *
110d0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
110e0 64 65 20 6d 75 73 74 20 69 6d 6d 65 64 69 61 74  de must immediat
110f0 65 6c 79 20 66 6f 6c 6c 6f 77 20 61 6e 20 4c 74  ely follow an Lt
11100 20 6f 72 20 47 74 20 63 6f 6d 70 61 72 69 73 6f   or Gt compariso
11110 6e 20 6f 70 65 72 61 74 6f 72 2e 0a 2a 2a 20 49  n operator..** I
11120 66 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20 69  f the operands i
11130 6e 20 74 68 61 74 20 70 72 65 76 69 6f 75 73 20  n that previous 
11140 63 6f 6d 70 61 72 69 73 6f 6e 20 68 61 64 20 62  comparison had b
11150 65 65 6e 20 75 73 65 64 20 77 69 74 68 20 61 6e  een used with an
11160 20 45 71 0a 2a 2a 20 6f 70 65 72 61 74 6f 72 20   Eq.** operator 
11170 61 6e 64 20 69 66 20 74 68 65 20 72 65 73 75 6c  and if the resul
11180 74 20 6f 66 20 74 68 61 74 20 45 71 20 77 6f 75  t of that Eq wou
11190 6c 64 20 62 65 20 4e 55 4c 4c 20 6f 72 20 66 61  ld be NULL or fa
111a0 6c 73 65 20 28 30 29 2c 20 74 68 65 6e 0a 2a 2a  lse (0), then.**
111b0 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
111c0 2e 20 20 49 66 20 74 68 65 20 72 65 73 75 6c 74  .  If the result
111d0 20 6f 66 20 63 6f 6d 70 61 72 69 6e 67 20 74 68   of comparing th
111e0 65 20 74 77 6f 20 70 72 65 76 69 6f 75 73 20 6f  e two previous o
111f0 70 65 72 61 6e 64 73 0a 2a 2a 20 75 73 69 6e 67  perands.** using
11200 20 45 71 20 77 6f 75 6c 64 20 68 61 76 65 20 62   Eq would have b
11210 65 65 6e 20 74 72 75 65 20 28 31 29 2c 20 74 68  een true (1), th
11220 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 2e  en fall through.
11230 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 6c 73 65  .*/.case OP_Else
11240 4e 6f 74 45 71 3a 20 7b 20 20 20 20 20 20 20 2f  NotEq: {       /
11250 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 45 53 43  * same as TK_ESC
11260 41 50 45 2c 20 6a 75 6d 70 20 2a 2f 0a 20 20 61  APE, jump */.  a
11270 73 73 65 72 74 28 20 70 4f 70 3e 61 4f 70 20 29  ssert( pOp>aOp )
11280 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b  ;.  assert( pOp[
11290 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4c  -1].opcode==OP_L
112a0 74 20 7c 7c 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63  t || pOp[-1].opc
112b0 6f 64 65 3d 3d 4f 50 5f 47 74 20 29 3b 0a 20 20  ode==OP_Gt );.  
112c0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
112d0 63 6d 70 52 65 73 21 3d 30 2c 20 32 29 3b 0a 20  cmpRes!=0, 2);. 
112e0 20 69 66 28 20 63 6d 70 52 65 73 21 3d 30 20 29   if( cmpRes!=0 )
112f0 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
11300 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f  ;.  break;.}.../
11310 2a 20 4f 70 63 6f 64 65 3a 20 50 65 72 6d 75 74  * Opcode: Permut
11320 61 74 69 6f 6e 20 2a 20 2a 20 2a 20 50 34 20 2a  ation * * * P4 *
11330 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 70  .**.** Set the p
11340 65 72 6d 75 74 61 74 69 6f 6e 20 75 73 65 64 20  ermutation used 
11350 62 79 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72  by the OP_Compar
11360 65 20 6f 70 65 72 61 74 6f 72 20 74 6f 20 62 65  e operator to be
11370 20 74 68 65 20 61 72 72 61 79 0a 2a 2a 20 6f 66   the array.** of
11380 20 69 6e 74 65 67 65 72 73 20 69 6e 20 50 34 2e   integers in P4.
11390 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 65 72 6d 75  .**.** The permu
113a0 74 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 76  tation is only v
113b0 61 6c 69 64 20 75 6e 74 69 6c 20 74 68 65 20 6e  alid until the n
113c0 65 78 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 74  ext OP_Compare t
113d0 68 61 74 20 68 61 73 0a 2a 2a 20 74 68 65 20 4f  hat has.** the O
113e0 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69  PFLAG_PERMUTE bi
113f0 74 20 73 65 74 20 69 6e 20 50 35 2e 20 54 79 70  t set in P5. Typ
11400 69 63 61 6c 6c 79 20 74 68 65 20 4f 50 5f 50 65  ically the OP_Pe
11410 72 6d 75 74 61 74 69 6f 6e 20 73 68 6f 75 6c 64  rmutation should
11420 20 0a 2a 2a 20 6f 63 63 75 72 20 69 6d 6d 65 64   .** occur immed
11430 69 61 74 65 6c 79 20 70 72 69 6f 72 20 74 6f 20  iately prior to 
11440 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 2e 0a  the OP_Compare..
11450 2a 2a 0a 2a 2a 20 54 68 65 20 66 69 72 73 74 20  **.** The first 
11460 69 6e 74 65 67 65 72 20 69 6e 20 74 68 65 20 50  integer in the P
11470 34 20 69 6e 74 65 67 65 72 20 61 72 72 61 79 20  4 integer array 
11480 69 73 20 74 68 65 20 6c 65 6e 67 74 68 20 6f 66  is the length of
11490 20 74 68 65 20 61 72 72 61 79 0a 2a 2a 20 61 6e   the array.** an
114a0 64 20 64 6f 65 73 20 6e 6f 74 20 62 65 63 6f 6d  d does not becom
114b0 65 20 70 61 72 74 20 6f 66 20 74 68 65 20 70 65  e part of the pe
114c0 72 6d 75 74 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  rmutation..*/.ca
114d0 73 65 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f  se OP_Permutatio
114e0 6e 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70  n: {.  assert( p
114f0 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
11500 4e 54 41 52 52 41 59 20 29 3b 0a 20 20 61 73 73  NTARRAY );.  ass
11510 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 61 69 20  ert( pOp->p4.ai 
11520 29 3b 0a 20 20 61 50 65 72 6d 75 74 65 20 3d 20  );.  aPermute = 
11530 70 4f 70 2d 3e 70 34 2e 61 69 20 2b 20 31 3b 0a  pOp->p4.ai + 1;.
11540 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
11550 70 63 6f 64 65 3a 20 43 6f 6d 70 61 72 65 20 50  pcode: Compare P
11560 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
11570 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 40   Synopsis: r[P1@
11580 50 33 5d 20 3c 2d 3e 20 72 5b 50 32 40 50 33 5d  P3] <-> r[P2@P3]
11590 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74  .**.** Compare t
115a0 77 6f 20 76 65 63 74 6f 72 73 20 6f 66 20 72 65  wo vectors of re
115b0 67 69 73 74 65 72 73 20 69 6e 20 72 65 67 28 50  gisters in reg(P
115c0 31 29 2e 2e 72 65 67 28 50 31 2b 50 33 2d 31 29  1)..reg(P1+P3-1)
115d0 20 28 63 61 6c 6c 20 74 68 69 73 0a 2a 2a 20 76   (call this.** v
115e0 65 63 74 6f 72 20 22 41 22 29 20 61 6e 64 20 69  ector "A") and i
115f0 6e 20 72 65 67 28 50 32 29 2e 2e 72 65 67 28 50  n reg(P2)..reg(P
11600 32 2b 50 33 2d 31 29 20 28 22 42 22 29 2e 20 20  2+P3-1) ("B").  
11610 53 61 76 65 20 74 68 65 20 72 65 73 75 6c 74 20  Save the result 
11620 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72  of.** the compar
11630 69 73 6f 6e 20 66 6f 72 20 75 73 65 20 62 79 20  ison for use by 
11640 74 68 65 20 6e 65 78 74 20 4f 50 5f 4a 75 6d 70  the next OP_Jump
11650 20 69 6e 73 74 72 75 63 74 2e 0a 2a 2a 0a 2a 2a   instruct..**.**
11660 20 49 66 20 50 35 20 68 61 73 20 74 68 65 20 4f   If P5 has the O
11670 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69  PFLAG_PERMUTE bi
11680 74 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20  t set, then the 
11690 6f 72 64 65 72 20 6f 66 20 63 6f 6d 70 61 72 69  order of compari
116a0 73 6f 6e 20 69 73 0a 2a 2a 20 64 65 74 65 72 6d  son is.** determ
116b0 69 6e 65 64 20 62 79 20 74 68 65 20 6d 6f 73 74  ined by the most
116c0 20 72 65 63 65 6e 74 20 4f 50 5f 50 65 72 6d 75   recent OP_Permu
116d0 74 61 74 69 6f 6e 20 6f 70 65 72 61 74 6f 72 2e  tation operator.
116e0 20 20 49 66 20 74 68 65 0a 2a 2a 20 4f 50 46 4c    If the.** OPFL
116f0 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20 69  AG_PERMUTE bit i
11700 73 20 63 6c 65 61 72 2c 20 74 68 65 6e 20 72 65  s clear, then re
11710 67 69 73 74 65 72 20 61 72 65 20 63 6f 6d 70 61  gister are compa
11720 72 65 64 20 69 6e 20 73 65 71 75 65 6e 74 69 61  red in sequentia
11730 6c 0a 2a 2a 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a  l.** order..**.*
11740 2a 20 50 34 20 69 73 20 61 20 4b 65 79 49 6e 66  * P4 is a KeyInf
11750 6f 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74  o structure that
11760 20 64 65 66 69 6e 65 73 20 63 6f 6c 6c 61 74 69   defines collati
11770 6e 67 20 73 65 71 75 65 6e 63 65 73 20 61 6e 64  ng sequences and
11780 20 73 6f 72 74 0a 2a 2a 20 6f 72 64 65 72 73 20   sort.** orders 
11790 66 6f 72 20 74 68 65 20 63 6f 6d 70 61 72 69 73  for the comparis
117a0 6f 6e 2e 20 20 54 68 65 20 70 65 72 6d 75 74 61  on.  The permuta
117b0 74 69 6f 6e 20 61 70 70 6c 69 65 73 20 74 6f 20  tion applies to 
117c0 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 6f 6e 6c  registers.** onl
117d0 79 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20  y.  The KeyInfo 
117e0 65 6c 65 6d 65 6e 74 73 20 61 72 65 20 75 73 65  elements are use
117f0 64 20 73 65 71 75 65 6e 74 69 61 6c 6c 79 2e 0a  d sequentially..
11800 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 70 61 72  **.** The compar
11810 69 73 6f 6e 20 69 73 20 61 20 73 6f 72 74 20 63  ison is a sort c
11820 6f 6d 70 61 72 69 73 6f 6e 2c 20 73 6f 20 4e 55  omparison, so NU
11830 4c 4c 73 20 63 6f 6d 70 61 72 65 20 65 71 75 61  LLs compare equa
11840 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73 20 61 72 65 20  l,.** NULLs are 
11850 6c 65 73 73 20 74 68 61 6e 20 6e 75 6d 62 65 72  less than number
11860 73 2c 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6c  s, numbers are l
11870 65 73 73 20 74 68 61 6e 20 73 74 72 69 6e 67 73  ess than strings
11880 2c 0a 2a 2a 20 61 6e 64 20 73 74 72 69 6e 67 73  ,.** and strings
11890 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 62   are less than b
118a0 6c 6f 62 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  lobs..*/.case OP
118b0 5f 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 69 6e  _Compare: {.  in
118c0 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  t n;.  int i;.  
118d0 69 6e 74 20 70 31 3b 0a 20 20 69 6e 74 20 70 32  int p1;.  int p2
118e0 3b 0a 20 20 63 6f 6e 73 74 20 4b 65 79 49 6e 66  ;.  const KeyInf
118f0 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69  o *pKeyInfo;.  i
11900 6e 74 20 69 64 78 3b 0a 20 20 43 6f 6c 6c 53 65  nt idx;.  CollSe
11910 71 20 2a 70 43 6f 6c 6c 3b 20 20 20 20 2f 2a 20  q *pColl;    /* 
11920 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  Collating sequen
11930 63 65 20 74 6f 20 75 73 65 20 6f 6e 20 74 68 69  ce to use on thi
11940 73 20 74 65 72 6d 20 2a 2f 0a 20 20 69 6e 74 20  s term */.  int 
11950 62 52 65 76 3b 20 20 20 20 20 20 20 20 20 20 2f  bRev;          /
11960 2a 20 54 72 75 65 20 66 6f 72 20 44 45 53 43 45  * True for DESCE
11970 4e 44 49 4e 47 20 73 6f 72 74 20 6f 72 64 65 72  NDING sort order
11980 20 2a 2f 0a 0a 20 20 69 66 28 20 28 70 4f 70 2d   */..  if( (pOp-
11990 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 45 52  >p5 & OPFLAG_PER
119a0 4d 55 54 45 29 3d 3d 30 20 29 20 61 50 65 72 6d  MUTE)==0 ) aPerm
119b0 75 74 65 20 3d 20 30 3b 0a 20 20 6e 20 3d 20 70  ute = 0;.  n = p
119c0 4f 70 2d 3e 70 33 3b 0a 20 20 70 4b 65 79 49 6e  Op->p3;.  pKeyIn
119d0 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65  fo = pOp->p4.pKe
119e0 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28  yInfo;.  assert(
119f0 20 6e 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74   n>0 );.  assert
11a00 28 20 70 4b 65 79 49 6e 66 6f 21 3d 30 20 29 3b  ( pKeyInfo!=0 );
11a10 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b  .  p1 = pOp->p1;
11a20 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b  .  p2 = pOp->p2;
11a30 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55  .#if SQLITE_DEBU
11a40 47 0a 20 20 69 66 28 20 61 50 65 72 6d 75 74 65  G.  if( aPermute
11a50 20 29 7b 0a 20 20 20 20 69 6e 74 20 6b 2c 20 6d   ){.    int k, m
11a60 78 20 3d 20 30 3b 0a 20 20 20 20 66 6f 72 28 6b  x = 0;.    for(k
11a70 3d 30 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29 20 69 66  =0; k<n; k++) if
11a80 28 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3e 6d 78  ( aPermute[k]>mx
11a90 20 29 20 6d 78 20 3d 20 61 50 65 72 6d 75 74 65   ) mx = aPermute
11aa0 5b 6b 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28  [k];.    assert(
11ab0 20 70 31 3e 30 20 26 26 20 70 31 2b 6d 78 3c 3d   p1>0 && p1+mx<=
11ac0 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
11ad0 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20  nCursor)+1 );.  
11ae0 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20 26    assert( p2>0 &
11af0 26 20 70 32 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65  & p2+mx<=(p->nMe
11b00 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
11b10 29 2b 31 20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  )+1 );.  }else{.
11b20 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3e 30      assert( p1>0
11b30 20 26 26 20 70 31 2b 6e 3c 3d 28 70 2d 3e 6e 4d   && p1+n<=(p->nM
11b40 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
11b50 72 29 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65  r)+1 );.    asse
11b60 72 74 28 20 70 32 3e 30 20 26 26 20 70 32 2b 6e  rt( p2>0 && p2+n
11b70 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
11b80 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a  ->nCursor)+1 );.
11b90 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51    }.#endif /* SQ
11ba0 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 20 20  LITE_DEBUG */.  
11bb0 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b  for(i=0; i<n; i+
11bc0 2b 29 7b 0a 20 20 20 20 69 64 78 20 3d 20 61 50  +){.    idx = aP
11bd0 65 72 6d 75 74 65 20 3f 20 61 50 65 72 6d 75 74  ermute ? aPermut
11be0 65 5b 69 5d 20 3a 20 69 3b 0a 20 20 20 20 61 73  e[i] : i;.    as
11bf0 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
11c00 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 20  (&aMem[p1+idx]) 
11c10 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  );.    assert( m
11c20 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b  emIsValid(&aMem[
11c30 70 32 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20 20  p2+idx]) );.    
11c40 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
11c50 31 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70 31 2b  1+idx, &aMem[p1+
11c60 69 64 78 5d 29 3b 0a 20 20 20 20 52 45 47 49 53  idx]);.    REGIS
11c70 54 45 52 5f 54 52 41 43 45 28 70 32 2b 69 64 78  TER_TRACE(p2+idx
11c80 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29  , &aMem[p2+idx])
11c90 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 3c  ;.    assert( i<
11ca0 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64  pKeyInfo->nField
11cb0 20 29 3b 0a 20 20 20 20 70 43 6f 6c 6c 20 3d 20   );.    pColl = 
11cc0 70 4b 65 79 49 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b  pKeyInfo->aColl[
11cd0 69 5d 3b 0a 20 20 20 20 62 52 65 76 20 3d 20 70  i];.    bRev = p
11ce0 4b 65 79 49 6e 66 6f 2d 3e 61 53 6f 72 74 4f 72  KeyInfo->aSortOr
11cf0 64 65 72 5b 69 5d 3b 0a 20 20 20 20 69 43 6f 6d  der[i];.    iCom
11d00 70 61 72 65 20 3d 20 73 71 6c 69 74 65 33 4d 65  pare = sqlite3Me
11d10 6d 43 6f 6d 70 61 72 65 28 26 61 4d 65 6d 5b 70  mCompare(&aMem[p
11d20 31 2b 69 64 78 5d 2c 20 26 61 4d 65 6d 5b 70 32  1+idx], &aMem[p2
11d30 2b 69 64 78 5d 2c 20 70 43 6f 6c 6c 29 3b 0a 20  +idx], pColl);. 
11d40 20 20 20 69 66 28 20 69 43 6f 6d 70 61 72 65 20     if( iCompare 
11d50 29 7b 0a 20 20 20 20 20 20 69 66 28 20 62 52 65  ){.      if( bRe
11d60 76 20 29 20 69 43 6f 6d 70 61 72 65 20 3d 20 2d  v ) iCompare = -
11d70 69 43 6f 6d 70 61 72 65 3b 0a 20 20 20 20 20 20  iCompare;.      
11d80 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d  break;.    }.  }
11d90 0a 20 20 61 50 65 72 6d 75 74 65 20 3d 20 30 3b  .  aPermute = 0;
11da0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
11db0 4f 70 63 6f 64 65 3a 20 4a 75 6d 70 20 50 31 20  Opcode: Jump P1 
11dc0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
11dd0 4a 75 6d 70 20 74 6f 20 74 68 65 20 69 6e 73 74  Jump to the inst
11de0 72 75 63 74 69 6f 6e 20 61 74 20 61 64 64 72 65  ruction at addre
11df0 73 73 20 50 31 2c 20 50 32 2c 20 6f 72 20 50 33  ss P1, P2, or P3
11e00 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68   depending on wh
11e10 65 74 68 65 72 0a 2a 2a 20 69 6e 20 74 68 65 20  ether.** in the 
11e20 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f 50 5f 43  most recent OP_C
11e30 6f 6d 70 61 72 65 20 69 6e 73 74 72 75 63 74 69  ompare instructi
11e40 6f 6e 20 74 68 65 20 50 31 20 76 65 63 74 6f 72  on the P1 vector
11e50 20 77 61 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a   was less than.*
11e60 2a 20 65 71 75 61 6c 20 74 6f 2c 20 6f 72 20 67  * equal to, or g
11e70 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20  reater than the 
11e80 50 32 20 76 65 63 74 6f 72 2c 20 72 65 73 70 65  P2 vector, respe
11e90 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 63 61 73 65  ctively..*/.case
11ea0 20 4f 50 5f 4a 75 6d 70 3a 20 7b 20 20 20 20 20   OP_Jump: {     
11eb0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
11ec0 2a 2f 0a 20 20 69 66 28 20 69 43 6f 6d 70 61 72  */.  if( iCompar
11ed0 65 3c 30 20 29 7b 0a 20 20 20 20 56 64 62 65 42  e<0 ){.    VdbeB
11ee0 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c 33 29 3b  ranchTaken(0,3);
11ef0 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d   pOp = &aOp[pOp-
11f00 3e 70 31 20 2d 20 31 5d 3b 0a 20 20 7d 65 6c 73  >p1 - 1];.  }els
11f10 65 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3d 3d  e if( iCompare==
11f20 30 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61  0 ){.    VdbeBra
11f30 6e 63 68 54 61 6b 65 6e 28 31 2c 33 29 3b 20 70  nchTaken(1,3); p
11f40 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70  Op = &aOp[pOp->p
11f50 32 20 2d 20 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b  2 - 1];.  }else{
11f60 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
11f70 61 6b 65 6e 28 32 2c 33 29 3b 20 70 4f 70 20 3d  aken(2,3); pOp =
11f80 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 33 20 2d 20   &aOp[pOp->p3 - 
11f90 31 5d 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  1];.  }.  break;
11fa0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
11fb0 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  nd P1 P2 P3 * *.
11fc0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
11fd0 33 5d 3d 28 72 5b 50 31 5d 20 26 26 20 72 5b 50  3]=(r[P1] && r[P
11fe0 32 5d 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74  2]).**.** Take t
11ff0 68 65 20 6c 6f 67 69 63 61 6c 20 41 4e 44 20 6f  he logical AND o
12000 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  f the values in 
12010 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64  registers P1 and
12020 20 50 32 20 61 6e 64 0a 2a 2a 20 77 72 69 74 65   P2 and.** write
12030 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 74 6f   the result into
12040 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
12050 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50 31  .** If either P1
12060 20 6f 72 20 50 32 20 69 73 20 30 20 28 66 61 6c   or P2 is 0 (fal
12070 73 65 29 20 74 68 65 6e 20 74 68 65 20 72 65 73  se) then the res
12080 75 6c 74 20 69 73 20 30 20 65 76 65 6e 20 69 66  ult is 0 even if
12090 0a 2a 2a 20 74 68 65 20 6f 74 68 65 72 20 69 6e  .** the other in
120a0 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20  put is NULL.  A 
120b0 4e 55 4c 4c 20 61 6e 64 20 74 72 75 65 20 6f 72  NULL and true or
120c0 20 74 77 6f 20 4e 55 4c 4c 73 20 67 69 76 65 0a   two NULLs give.
120d0 2a 2a 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74  ** a NULL output
120e0 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
120f0 4f 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  Or P1 P2 P3 * *.
12100 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
12110 33 5d 3d 28 72 5b 50 31 5d 20 7c 7c 20 72 5b 50  3]=(r[P1] || r[P
12120 32 5d 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74  2]).**.** Take t
12130 68 65 20 6c 6f 67 69 63 61 6c 20 4f 52 20 6f 66  he logical OR of
12140 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72   the values in r
12150 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50  egister P1 and P
12160 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74  2 and.** store t
12170 68 65 20 61 6e 73 77 65 72 20 69 6e 20 72 65 67  he answer in reg
12180 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  ister P3..**.** 
12190 49 66 20 65 69 74 68 65 72 20 50 31 20 6f 72 20  If either P1 or 
121a0 50 32 20 69 73 20 6e 6f 6e 7a 65 72 6f 20 28 74  P2 is nonzero (t
121b0 72 75 65 29 20 74 68 65 6e 20 74 68 65 20 72 65  rue) then the re
121c0 73 75 6c 74 20 69 73 20 31 20 28 74 72 75 65 29  sult is 1 (true)
121d0 0a 2a 2a 20 65 76 65 6e 20 69 66 20 74 68 65 20  .** even if the 
121e0 6f 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  other input is N
121f0 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64  ULL.  A NULL and
12200 20 66 61 6c 73 65 20 6f 72 20 74 77 6f 20 4e 55   false or two NU
12210 4c 4c 73 0a 2a 2a 20 67 69 76 65 20 61 20 4e 55  LLs.** give a NU
12220 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61  LL output..*/.ca
12230 73 65 20 4f 50 5f 41 6e 64 3a 20 20 20 20 20 20  se OP_And:      
12240 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
12250 61 73 20 54 4b 5f 41 4e 44 2c 20 69 6e 31 2c 20  as TK_AND, in1, 
12260 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
12270 65 20 4f 50 5f 4f 72 3a 20 7b 20 20 20 20 20 20  e OP_Or: {      
12280 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
12290 73 20 54 4b 5f 4f 52 2c 20 69 6e 31 2c 20 69 6e  s TK_OR, in1, in
122a0 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 6e 74  2, out3 */.  int
122b0 20 76 31 3b 20 20 20 20 2f 2a 20 4c 65 66 74 20   v1;    /* Left 
122c0 6f 70 65 72 61 6e 64 3a 20 20 30 3d 3d 46 41 4c  operand:  0==FAL
122d0 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d  SE, 1==TRUE, 2==
122e0 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20  UNKNOWN or NULL 
122f0 2a 2f 0a 20 20 69 6e 74 20 76 32 3b 20 20 20 20  */.  int v2;    
12300 2f 2a 20 52 69 67 68 74 20 6f 70 65 72 61 6e 64  /* Right operand
12310 3a 20 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54  : 0==FALSE, 1==T
12320 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20  RUE, 2==UNKNOWN 
12330 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 20 20 70 49  or NULL */..  pI
12340 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
12350 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d  p1];.  if( pIn1-
12360 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
12370 6c 20 29 7b 0a 20 20 20 20 76 31 20 3d 20 32 3b  l ){.    v1 = 2;
12380 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76 31  .  }else{.    v1
12390 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
123a0 74 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b  tValue(pIn1)!=0;
123b0 0a 20 20 7d 0a 20 20 70 49 6e 32 20 3d 20 26 61  .  }.  pIn2 = &a
123c0 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
123d0 69 66 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20  if( pIn2->flags 
123e0 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
123f0 20 20 76 32 20 3d 20 32 3b 0a 20 20 7d 65 6c 73    v2 = 2;.  }els
12400 65 7b 0a 20 20 20 20 76 32 20 3d 20 73 71 6c 69  e{.    v2 = sqli
12410 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
12420 70 49 6e 32 29 21 3d 30 3b 0a 20 20 7d 0a 20 20  pIn2)!=0;.  }.  
12430 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
12440 3d 4f 50 5f 41 6e 64 20 29 7b 0a 20 20 20 20 73  =OP_And ){.    s
12450 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69  tatic const unsi
12460 67 6e 65 64 20 63 68 61 72 20 61 6e 64 5f 6c 6f  gned char and_lo
12470 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 30 2c 20  gic[] = { 0, 0, 
12480 30 2c 20 30 2c 20 31 2c 20 32 2c 20 30 2c 20 32  0, 0, 1, 2, 0, 2
12490 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20  , 2 };.    v1 = 
124a0 61 6e 64 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76  and_logic[v1*3+v
124b0 32 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  2];.  }else{.   
124c0 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e   static const un
124d0 73 69 67 6e 65 64 20 63 68 61 72 20 6f 72 5f 6c  signed char or_l
124e0 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 31 2c  ogic[] = { 0, 1,
124f0 20 32 2c 20 31 2c 20 31 2c 20 31 2c 20 32 2c 20   2, 1, 1, 1, 2, 
12500 31 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d  1, 2 };.    v1 =
12510 20 6f 72 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76   or_logic[v1*3+v
12520 32 5d 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 20 3d  2];.  }.  pOut =
12530 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
12540 0a 20 20 69 66 28 20 76 31 3d 3d 32 20 29 7b 0a  .  if( v1==2 ){.
12550 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
12560 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c  ag(pOut, MEM_Nul
12570 6c 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  l);.  }else{.   
12580 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 31 3b   pOut->u.i = v1;
12590 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46  .    MemSetTypeF
125a0 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e  lag(pOut, MEM_In
125b0 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  t);.  }.  break;
125c0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
125d0 6f 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ot P1 P2 * * *.*
125e0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
125f0 5d 3d 20 21 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  ]= !r[P1].**.** 
12600 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 76 61  Interpret the va
12610 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
12620 50 31 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20  P1 as a boolean 
12630 76 61 6c 75 65 2e 20 20 53 74 6f 72 65 20 74 68  value.  Store th
12640 65 0a 2a 2a 20 62 6f 6f 6c 65 61 6e 20 63 6f 6d  e.** boolean com
12650 70 6c 65 6d 65 6e 74 20 69 6e 20 72 65 67 69 73  plement in regis
12660 74 65 72 20 50 32 2e 20 20 49 66 20 74 68 65 20  ter P2.  If the 
12670 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
12680 72 20 50 31 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c  r P1 is .** NULL
12690 2c 20 74 68 65 6e 20 61 20 4e 55 4c 4c 20 69 73  , then a NULL is
126a0 20 73 74 6f 72 65 64 20 69 6e 20 50 32 2e 0a 2a   stored in P2..*
126b0 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 3a 20 7b  /.case OP_Not: {
126c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
126d0 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f  /* same as TK_NO
126e0 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a  T, in1, out2 */.
126f0 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
12700 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20  Op->p1];.  pOut 
12710 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
12720 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
12730 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b  emSetNull(pOut);
12740 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
12750 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d  ags & MEM_Null)=
12760 3d 30 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e  =0 ){.    pOut->
12770 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
12780 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
12790 20 21 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74   !sqlite3VdbeInt
127a0 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 7d  Value(pIn1);.  }
127b0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
127c0 4f 70 63 6f 64 65 3a 20 42 69 74 4e 6f 74 20 50  Opcode: BitNot P
127d0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
127e0 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d 20 7e  nopsis: r[P1]= ~
127f0 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65  r[P1].**.** Inte
12800 72 70 72 65 74 20 74 68 65 20 63 6f 6e 74 65 6e  rpret the conten
12810 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31  t of register P1
12820 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72 2e 20   as an integer. 
12830 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20 6f 6e   Store the.** on
12840 65 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 6f 66  es-complement of
12850 20 74 68 65 20 50 31 20 76 61 6c 75 65 20 69 6e   the P1 value in
12860 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 20  to register P2. 
12870 20 49 66 20 50 31 20 68 6f 6c 64 73 0a 2a 2a 20   If P1 holds.** 
12880 61 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f 72  a NULL then stor
12890 65 20 61 20 4e 55 4c 4c 20 69 6e 20 50 32 2e 0a  e a NULL in P2..
128a0 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 4e 6f  */.case OP_BitNo
128b0 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
128c0 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42   /* same as TK_B
128d0 49 54 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32  ITNOT, in1, out2
128e0 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
128f0 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
12900 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
12910 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56  >p2];.  sqlite3V
12920 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f  dbeMemSetNull(pO
12930 75 74 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  ut);.  if( (pIn1
12940 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
12950 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70 4f  ll)==0 ){.    pO
12960 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
12970 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75  Int;.    pOut->u
12980 2e 69 20 3d 20 7e 73 71 6c 69 74 65 33 56 64 62  .i = ~sqlite3Vdb
12990 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 3b  eIntValue(pIn1);
129a0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
129b0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 6e 63 65  ./* Opcode: Once
129c0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
129d0 2a 2a 20 43 68 65 63 6b 20 74 68 65 20 22 6f 6e  ** Check the "on
129e0 63 65 22 20 66 6c 61 67 20 6e 75 6d 62 65 72 20  ce" flag number 
129f0 50 31 2e 20 49 66 20 69 74 20 69 73 20 73 65 74  P1. If it is set
12a00 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75  , jump to instru
12a10 63 74 69 6f 6e 20 50 32 2e 20 0a 2a 2a 20 4f 74  ction P2. .** Ot
12a20 68 65 72 77 69 73 65 2c 20 73 65 74 20 74 68 65  herwise, set the
12a30 20 66 6c 61 67 20 61 6e 64 20 66 61 6c 6c 20 74   flag and fall t
12a40 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
12a50 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  xt instruction..
12a60 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  ** In other word
12a70 73 2c 20 74 68 69 73 20 6f 70 63 6f 64 65 20 63  s, this opcode c
12a80 61 75 73 65 73 20 61 6c 6c 20 66 6f 6c 6c 6f 77  auses all follow
12a90 69 6e 67 20 6f 70 63 6f 64 65 73 20 75 70 20 74  ing opcodes up t
12aa0 68 72 6f 75 67 68 20 50 32 0a 2a 2a 20 28 62 75  hrough P2.** (bu
12ab0 74 20 6e 6f 74 20 69 6e 63 6c 75 64 69 6e 67 20  t not including 
12ac0 50 32 29 20 74 6f 20 72 75 6e 20 6a 75 73 74 20  P2) to run just 
12ad0 6f 6e 63 65 20 61 6e 64 20 74 6f 20 62 65 20 73  once and to be s
12ae0 6b 69 70 70 65 64 20 6f 6e 20 73 75 62 73 65 71  kipped on subseq
12af0 75 65 6e 74 0a 2a 2a 20 74 69 6d 65 73 20 74 68  uent.** times th
12b00 72 6f 75 67 68 20 74 68 65 20 6c 6f 6f 70 2e 0a  rough the loop..
12b10 2a 2a 0a 2a 2a 20 41 6c 6c 20 22 6f 6e 63 65 22  **.** All "once"
12b20 20 66 6c 61 67 73 20 61 72 65 20 69 6e 69 74 69   flags are initi
12b30 61 6c 6c 79 20 63 6c 65 61 72 65 64 20 77 68 65  ally cleared whe
12b40 6e 65 76 65 72 20 61 20 70 72 65 70 61 72 65 64  never a prepared
12b50 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 66 69   statement.** fi
12b60 72 73 74 20 62 65 67 69 6e 73 20 74 6f 20 72 75  rst begins to ru
12b70 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 6e  n..*/.case OP_On
12b80 63 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ce: {           
12b90 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61    /* jump */.  a
12ba0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c 70  ssert( pOp->p1<p
12bb0 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20 29 3b 0a 20  ->nOnceFlag );. 
12bc0 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
12bd0 28 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 5b 70 4f  (p->aOnceFlag[pO
12be0 70 2d 3e 70 31 5d 21 3d 30 2c 20 32 29 3b 0a 20  p->p1]!=0, 2);. 
12bf0 20 69 66 28 20 70 2d 3e 61 4f 6e 63 65 46 6c 61   if( p->aOnceFla
12c00 67 5b 70 4f 70 2d 3e 70 31 5d 20 29 7b 0a 20 20  g[pOp->p1] ){.  
12c10 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
12c20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  2;.  }else{.    
12c30 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 5b 70 4f 70  p->aOnceFlag[pOp
12c40 2d 3e 70 31 5d 20 3d 20 31 3b 0a 20 20 7d 0a 20  ->p1] = 1;.  }. 
12c50 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
12c60 63 6f 64 65 3a 20 49 66 20 50 31 20 50 32 20 50  code: If P1 P2 P
12c70 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  3 * *.**.** Jump
12c80 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61   to P2 if the va
12c90 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
12ca0 50 31 20 69 73 20 74 72 75 65 2e 20 20 54 68 65  P1 is true.  The
12cb0 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e   value.** is con
12cc0 73 69 64 65 72 65 64 20 74 72 75 65 20 69 66 20  sidered true if 
12cd0 69 74 20 69 73 20 6e 75 6d 65 72 69 63 20 61 6e  it is numeric an
12ce0 64 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 49 66 20  d non-zero.  If 
12cf0 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20  the value.** in 
12d00 50 31 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  P1 is NULL then 
12d10 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66  take the jump if
12d20 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 50 33 20   and only if P3 
12d30 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a  is non-zero..*/.
12d40 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 74  /* Opcode: IfNot
12d50 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
12d60 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69  .** Jump to P2 i
12d70 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
12d80 65 67 69 73 74 65 72 20 50 31 20 69 73 20 46 61  egister P1 is Fa
12d90 6c 73 65 2e 20 20 54 68 65 20 76 61 6c 75 65 0a  lse.  The value.
12da0 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64  ** is considered
12db0 20 66 61 6c 73 65 20 69 66 20 69 74 20 68 61 73   false if it has
12dc0 20 61 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65   a numeric value
12dd0 20 6f 66 20 7a 65 72 6f 2e 20 20 49 66 20 74 68   of zero.  If th
12de0 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31  e value.** in P1
12df0 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61   is NULL then ta
12e00 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20 61  ke the jump if a
12e10 6e 64 20 6f 6e 6c 79 20 69 66 20 50 33 20 69 73  nd only if P3 is
12e20 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a 63 61   non-zero..*/.ca
12e30 73 65 20 4f 50 5f 49 66 3a 20 20 20 20 20 20 20  se OP_If:       
12e40 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
12e50 70 2c 20 69 6e 31 20 2a 2f 0a 63 61 73 65 20 4f  p, in1 */.case O
12e60 50 5f 49 66 4e 6f 74 3a 20 7b 20 20 20 20 20 20  P_IfNot: {      
12e70 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
12e80 6e 31 20 2a 2f 0a 20 20 69 6e 74 20 63 3b 0a 20  n1 */.  int c;. 
12e90 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
12ea0 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49  p->p1];.  if( pI
12eb0 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
12ec0 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 63 20 3d 20  Null ){.    c = 
12ed0 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 65 6c 73 65  pOp->p3;.  }else
12ee0 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  {.#ifdef SQLITE_
12ef0 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
12f00 49 4e 54 0a 20 20 20 20 63 20 3d 20 73 71 6c 69  INT.    c = sqli
12f10 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
12f20 70 49 6e 31 29 21 3d 30 3b 0a 23 65 6c 73 65 0a  pIn1)!=0;.#else.
12f30 20 20 20 20 63 20 3d 20 73 71 6c 69 74 65 33 56      c = sqlite3V
12f40 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e  dbeRealValue(pIn
12f50 31 29 21 3d 30 2e 30 3b 0a 23 65 6e 64 69 66 0a  1)!=0.0;.#endif.
12f60 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63      if( pOp->opc
12f70 6f 64 65 3d 3d 4f 50 5f 49 66 4e 6f 74 20 29 20  ode==OP_IfNot ) 
12f80 63 20 3d 20 21 63 3b 0a 20 20 7d 0a 20 20 56 64  c = !c;.  }.  Vd
12f90 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 63 21  beBranchTaken(c!
12fa0 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 63 20  =0, 2);.  if( c 
12fb0 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  ){.    goto jump
12fc0 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72  _to_p2;.  }.  br
12fd0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
12fe0 65 3a 20 49 73 4e 75 6c 6c 20 50 31 20 50 32 20  e: IsNull P1 P2 
12ff0 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
13000 73 3a 20 20 69 66 20 72 5b 50 31 5d 3d 3d 4e 55  s:  if r[P1]==NU
13010 4c 4c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  LL goto P2.**.**
13020 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74   Jump to P2 if t
13030 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
13040 73 74 65 72 20 50 31 20 69 73 20 4e 55 4c 4c 2e  ster P1 is NULL.
13050 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 73 4e 75  .*/.case OP_IsNu
13060 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ll: {           
13070 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 49   /* same as TK_I
13080 53 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31  SNULL, jump, in1
13090 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
130a0 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 56  em[pOp->p1];.  V
130b0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 20  dbeBranchTaken( 
130c0 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
130d0 45 4d 5f 4e 75 6c 6c 29 21 3d 30 2c 20 32 29 3b  EM_Null)!=0, 2);
130e0 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
130f0 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21  ags & MEM_Null)!
13100 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a  =0 ){.    goto j
13110 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20  ump_to_p2;.  }. 
13120 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
13130 63 6f 64 65 3a 20 4e 6f 74 4e 75 6c 6c 20 50 31  code: NotNull P1
13140 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
13150 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 21  opsis: if r[P1]!
13160 3d 4e 55 4c 4c 20 67 6f 74 6f 20 50 32 0a 2a 2a  =NULL goto P2.**
13170 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69  .** Jump to P2 i
13180 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
13190 65 67 69 73 74 65 72 20 50 31 20 69 73 20 6e 6f  egister P1 is no
131a0 74 20 4e 55 4c 4c 2e 20 20 0a 2a 2f 0a 63 61 73  t NULL.  .*/.cas
131b0 65 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b 20  e OP_NotNull: { 
131c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
131d0 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 4e 55 4c 4c  me as TK_NOTNULL
131e0 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  , jump, in1 */. 
131f0 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
13200 70 2d 3e 70 31 5d 3b 0a 20 20 56 64 62 65 42 72  p->p1];.  VdbeBr
13210 61 6e 63 68 54 61 6b 65 6e 28 20 28 70 49 6e 31  anchTaken( (pIn1
13220 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
13230 6c 6c 29 3d 3d 30 2c 20 32 29 3b 0a 20 20 69 66  ll)==0, 2);.  if
13240 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
13250 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b   MEM_Null)==0 ){
13260 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  .    goto jump_t
13270 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61  o_p2;.  }.  brea
13280 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
13290 20 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33   Column P1 P2 P3
132a0 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
132b0 69 73 3a 20 20 72 5b 50 33 5d 3d 50 58 0a 2a 2a  is:  r[P3]=PX.**
132c0 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68  .** Interpret th
132d0 65 20 64 61 74 61 20 74 68 61 74 20 63 75 72 73  e data that curs
132e0 6f 72 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 20  or P1 points to 
132f0 61 73 20 61 20 73 74 72 75 63 74 75 72 65 20 62  as a structure b
13300 75 69 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 74 68  uilt using.** th
13310 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73  e MakeRecord ins
13320 74 72 75 63 74 69 6f 6e 2e 20 20 28 53 65 65 20  truction.  (See 
13330 74 68 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 6f  the MakeRecord o
13340 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69  pcode for additi
13350 6f 6e 61 6c 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74  onal.** informat
13360 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 66 6f  ion about the fo
13370 72 6d 61 74 20 6f 66 20 74 68 65 20 64 61 74 61  rmat of the data
13380 2e 29 20 20 45 78 74 72 61 63 74 20 74 68 65 20  .)  Extract the 
13390 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 0a 2a 2a 20  P2-th column.** 
133a0 66 72 6f 6d 20 74 68 69 73 20 72 65 63 6f 72 64  from this record
133b0 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65 20  .  If there are 
133c0 6c 65 73 73 20 74 68 61 74 20 28 50 32 2b 31 29  less that (P2+1)
133d0 20 0a 2a 2a 20 76 61 6c 75 65 73 20 69 6e 20 74   .** values in t
133e0 68 65 20 72 65 63 6f 72 64 2c 20 65 78 74 72 61  he record, extra
133f0 63 74 20 61 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a  ct a NULL..**.**
13400 20 54 68 65 20 76 61 6c 75 65 20 65 78 74 72 61   The value extra
13410 63 74 65 64 20 69 73 20 73 74 6f 72 65 64 20 69  cted is stored i
13420 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
13430 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 6f 6c 75  *.** If the colu
13440 6d 6e 20 63 6f 6e 74 61 69 6e 73 20 66 65 77 65  mn contains fewe
13450 72 20 74 68 61 6e 20 50 32 20 66 69 65 6c 64 73  r than P2 fields
13460 2c 20 74 68 65 6e 20 65 78 74 72 61 63 74 20 61  , then extract a
13470 20 4e 55 4c 4c 2e 20 20 4f 72 2c 0a 2a 2a 20 69   NULL.  Or,.** i
13480 66 20 74 68 65 20 50 34 20 61 72 67 75 6d 65 6e  f the P4 argumen
13490 74 20 69 73 20 61 20 50 34 5f 4d 45 4d 20 75 73  t is a P4_MEM us
134a0 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  e the value of t
134b0 68 65 20 50 34 20 61 72 67 75 6d 65 6e 74 20 61  he P4 argument a
134c0 73 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 2e  s.** the result.
134d0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
134e0 46 4c 41 47 5f 43 4c 45 41 52 43 41 43 48 45 20  FLAG_CLEARCACHE 
134f0 62 69 74 20 69 73 20 73 65 74 20 6f 6e 20 50 35  bit is set on P5
13500 20 61 6e 64 20 50 31 20 69 73 20 61 20 70 73 65   and P1 is a pse
13510 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f 72  udo-table cursor
13520 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 63 61  ,.** then the ca
13530 63 68 65 20 6f 66 20 74 68 65 20 63 75 72 73 6f  che of the curso
13540 72 20 69 73 20 72 65 73 65 74 20 70 72 69 6f 72  r is reset prior
13550 20 74 6f 20 65 78 74 72 61 63 74 69 6e 67 20 74   to extracting t
13560 68 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 54 68  he column..** Th
13570 65 20 66 69 72 73 74 20 4f 50 5f 43 6f 6c 75 6d  e first OP_Colum
13580 6e 20 61 67 61 69 6e 73 74 20 61 20 70 73 65 75  n against a pseu
13590 64 6f 2d 74 61 62 6c 65 20 61 66 74 65 72 20 74  do-table after t
135a0 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
135b0 63 6f 6e 74 65 6e 74 0a 2a 2a 20 72 65 67 69 73  content.** regis
135c0 74 65 72 20 68 61 73 20 63 68 61 6e 67 65 64 20  ter has changed 
135d0 73 68 6f 75 6c 64 20 68 61 76 65 20 74 68 69 73  should have this
135e0 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20   bit set..**.** 
135f0 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c 45  If the OPFLAG_LE
13600 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50 46 4c  NGTHARG and OPFL
13610 41 47 5f 54 59 50 45 4f 46 41 52 47 20 62 69 74  AG_TYPEOFARG bit
13620 73 20 61 72 65 20 73 65 74 20 6f 6e 20 50 35 20  s are set on P5 
13630 77 68 65 6e 0a 2a 2a 20 74 68 65 20 72 65 73 75  when.** the resu
13640 6c 74 20 69 73 20 67 75 61 72 61 6e 74 65 65 64  lt is guaranteed
13650 20 74 6f 20 6f 6e 6c 79 20 62 65 20 75 73 65 64   to only be used
13660 20 61 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74   as the argument
13670 20 6f 66 20 61 20 6c 65 6e 67 74 68 28 29 0a 2a   of a length().*
13680 2a 20 6f 72 20 74 79 70 65 6f 66 28 29 20 66 75  * or typeof() fu
13690 6e 63 74 69 6f 6e 2c 20 72 65 73 70 65 63 74 69  nction, respecti
136a0 76 65 6c 79 2e 20 20 54 68 65 20 6c 6f 61 64 69  vely.  The loadi
136b0 6e 67 20 6f 66 20 6c 61 72 67 65 20 62 6c 6f 62  ng of large blob
136c0 73 20 63 61 6e 20 62 65 0a 2a 2a 20 73 6b 69 70  s can be.** skip
136d0 70 65 64 20 66 6f 72 20 6c 65 6e 67 74 68 28 29  ped for length()
136e0 20 61 6e 64 20 61 6c 6c 20 63 6f 6e 74 65 6e 74   and all content
136f0 20 6c 6f 61 64 69 6e 67 20 63 61 6e 20 62 65 20   loading can be 
13700 73 6b 69 70 70 65 64 20 66 6f 72 20 74 79 70 65  skipped for type
13710 6f 66 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  of()..*/.case OP
13720 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 69 6e 74  _Column: {.  int
13730 20 70 32 3b 20 20 20 20 20 20 20 20 20 20 20 20   p2;            
13740 2f 2a 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72  /* column number
13750 20 74 6f 20 72 65 74 72 69 65 76 65 20 2a 2f 0a   to retrieve */.
13760 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
13770 3b 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45  ;    /* The VDBE
13780 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 42 74 43   cursor */.  BtC
13790 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 20 20 20  ursor *pCrsr;   
137a0 2f 2a 20 54 68 65 20 42 54 72 65 65 20 63 75 72  /* The BTree cur
137b0 73 6f 72 20 2a 2f 0a 20 20 75 33 32 20 2a 61 4f  sor */.  u32 *aO
137c0 66 66 73 65 74 3b 20 20 20 20 20 20 2f 2a 20 61  ffset;      /* a
137d0 4f 66 66 73 65 74 5b 69 5d 20 69 73 20 6f 66 66  Offset[i] is off
137e0 73 65 74 20 74 6f 20 73 74 61 72 74 20 6f 66 20  set to start of 
137f0 64 61 74 61 20 66 6f 72 20 69 2d 74 68 20 63 6f  data for i-th co
13800 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 6c 65  lumn */.  int le
13810 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  n;           /* 
13820 54 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68  The length of th
13830 65 20 73 65 72 69 61 6c 69 7a 65 64 20 64 61 74  e serialized dat
13840 61 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e  a for the column
13850 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20   */.  int i;    
13860 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70           /* Loop
13870 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 4d 65   counter */.  Me
13880 6d 20 2a 70 44 65 73 74 3b 20 20 20 20 20 20 20  m *pDest;       
13890 20 2f 2a 20 57 68 65 72 65 20 74 6f 20 77 72 69   /* Where to wri
138a0 74 65 20 74 68 65 20 65 78 74 72 61 63 74 65 64  te the extracted
138b0 20 76 61 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d 20   value */.  Mem 
138c0 73 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f  sMem;          /
138d0 2a 20 46 6f 72 20 73 74 6f 72 69 6e 67 20 74 68  * For storing th
138e0 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64  e record being d
138f0 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73  ecoded */.  cons
13900 74 20 75 38 20 2a 7a 44 61 74 61 3b 20 20 20 2f  t u8 *zData;   /
13910 2a 20 50 61 72 74 20 6f 66 20 74 68 65 20 72 65  * Part of the re
13920 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64  cord being decod
13930 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38  ed */.  const u8
13940 20 2a 7a 48 64 72 3b 20 20 20 20 2f 2a 20 4e 65   *zHdr;    /* Ne
13950 78 74 20 75 6e 70 61 72 73 65 64 20 62 79 74 65  xt unparsed byte
13960 20 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 2a   of the header *
13970 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 45  /.  const u8 *zE
13980 6e 64 48 64 72 3b 20 2f 2a 20 50 6f 69 6e 74 65  ndHdr; /* Pointe
13990 72 20 74 6f 20 66 69 72 73 74 20 62 79 74 65 20  r to first byte 
139a0 61 66 74 65 72 20 74 68 65 20 68 65 61 64 65 72  after the header
139b0 20 2a 2f 0a 20 20 75 33 32 20 6f 66 66 73 65 74   */.  u32 offset
139c0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 66 66 73  ;        /* Offs
139d0 65 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61  et into the data
139e0 20 2a 2f 0a 20 20 75 36 34 20 6f 66 66 73 65 74   */.  u64 offset
139f0 36 34 3b 20 20 20 20 20 20 2f 2a 20 36 34 2d 62  64;      /* 64-b
13a00 69 74 20 6f 66 66 73 65 74 20 2a 2f 0a 20 20 75  it offset */.  u
13a10 33 32 20 61 76 61 69 6c 3b 20 20 20 20 20 20 20  32 avail;       
13a20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
13a30 79 74 65 73 20 6f 66 20 61 76 61 69 6c 61 62 6c  ytes of availabl
13a40 65 20 64 61 74 61 20 2a 2f 0a 20 20 75 33 32 20  e data */.  u32 
13a50 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  t;             /
13a60 2a 20 41 20 74 79 70 65 20 63 6f 64 65 20 66 72  * A type code fr
13a70 6f 6d 20 74 68 65 20 72 65 63 6f 72 64 20 68 65  om the record he
13a80 61 64 65 72 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  ader */.  Mem *p
13a90 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Reg;         /* 
13aa0 50 73 65 75 64 6f 54 61 62 6c 65 20 69 6e 70 75  PseudoTable inpu
13ab0 74 20 72 65 67 69 73 74 65 72 20 2a 2f 0a 0a 20  t register */.. 
13ac0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
13ad0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 32 20 3d 20  Op->p1];.  p2 = 
13ae0 70 4f 70 2d 3e 70 32 3b 0a 0a 20 20 2f 2a 20 49  pOp->p2;..  /* I
13af0 66 20 74 68 65 20 63 75 72 73 6f 72 20 63 61 63  f the cursor cac
13b00 68 65 20 69 73 20 73 74 61 6c 65 2c 20 62 72 69  he is stale, bri
13b10 6e 67 20 69 74 20 75 70 2d 74 6f 2d 64 61 74 65  ng it up-to-date
13b20 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   */.  rc = sqlit
13b30 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
13b40 74 6f 28 26 70 43 2c 20 26 70 32 29 3b 0a 20 20  to(&pC, &p2);.  
13b50 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
13b60 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
13b70 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
13b80 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p3>0 && pOp->p
13b90 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  3<=(p->nMem+1 - 
13ba0 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
13bb0 20 70 44 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70   pDest = &aMem[p
13bc0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62  Op->p3];.  memAb
13bd0 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
13be0 44 65 73 74 29 3b 0a 20 20 61 73 73 65 72 74 28  Dest);.  assert(
13bf0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
13c00 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
13c10 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
13c20 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
13c30 28 20 70 32 3c 70 43 2d 3e 6e 46 69 65 6c 64 20  ( p2<pC->nField 
13c40 29 3b 0a 20 20 61 4f 66 66 73 65 74 20 3d 20 70  );.  aOffset = p
13c50 43 2d 3e 61 4f 66 66 73 65 74 3b 0a 20 20 61 73  C->aOffset;.  as
13c60 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
13c70 70 65 21 3d 43 55 52 54 59 50 45 5f 56 54 41 42  pe!=CURTYPE_VTAB
13c80 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
13c90 2d 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52 54  ->eCurType!=CURT
13ca0 59 50 45 5f 50 53 45 55 44 4f 20 7c 7c 20 70 43  YPE_PSEUDO || pC
13cb0 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20 20 61  ->nullRow );.  a
13cc0 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
13cd0 79 70 65 21 3d 43 55 52 54 59 50 45 5f 53 4f 52  ype!=CURTYPE_SOR
13ce0 54 45 52 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  TER );.  pCrsr =
13cf0 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b   pC->uc.pCursor;
13d00 0a 0a 20 20 69 66 28 20 70 43 2d 3e 63 61 63 68  ..  if( pC->cach
13d10 65 53 74 61 74 75 73 21 3d 70 2d 3e 63 61 63 68  eStatus!=p->cach
13d20 65 43 74 72 20 29 7b 20 20 20 20 20 20 20 20 20  eCtr ){         
13d30 20 20 20 20 20 20 20 2f 2a 4f 50 54 49 4d 49 5a         /*OPTIMIZ
13d40 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f  ATION-IF-FALSE*/
13d50 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c  .    if( pC->nul
13d60 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20 20 69 66  lRow ){.      if
13d70 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
13d80 43 55 52 54 59 50 45 5f 50 53 45 55 44 4f 20 29  CURTYPE_PSEUDO )
13d90 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
13da0 28 20 70 43 2d 3e 75 63 2e 70 73 65 75 64 6f 54  ( pC->uc.pseudoT
13db0 61 62 6c 65 52 65 67 3e 30 20 29 3b 0a 20 20 20  ableReg>0 );.   
13dc0 20 20 20 20 20 70 52 65 67 20 3d 20 26 61 4d 65       pReg = &aMe
13dd0 6d 5b 70 43 2d 3e 75 63 2e 70 73 65 75 64 6f 54  m[pC->uc.pseudoT
13de0 61 62 6c 65 52 65 67 5d 3b 0a 20 20 20 20 20 20  ableReg];.      
13df0 20 20 61 73 73 65 72 74 28 20 70 52 65 67 2d 3e    assert( pReg->
13e00 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62  flags & MEM_Blob
13e10 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
13e20 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
13e30 52 65 67 29 20 29 3b 0a 20 20 20 20 20 20 20 20  Reg) );.        
13e40 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20  pC->payloadSize 
13e50 3d 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 61 76  = pC->szRow = av
13e60 61 69 6c 20 3d 20 70 52 65 67 2d 3e 6e 3b 0a 20  ail = pReg->n;. 
13e70 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20         pC->aRow 
13e80 3d 20 28 75 38 2a 29 70 52 65 67 2d 3e 7a 3b 0a  = (u8*)pReg->z;.
13e90 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
13ea0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
13eb0 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73 74  MemSetNull(pDest
13ec0 29 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  );.        goto 
13ed0 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20  op_column_out;. 
13ee0 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
13ef0 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
13f00 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
13f10 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
13f20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43 72       assert( pCr
13f30 73 72 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  sr );.      asse
13f40 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65  rt( sqlite3Btree
13f50 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43  CursorIsValid(pC
13f60 72 73 72 29 20 29 3b 0a 20 20 20 20 20 20 70 43  rsr) );.      pC
13f70 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20  ->payloadSize = 
13f80 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 79 6c  sqlite3BtreePayl
13f90 6f 61 64 53 69 7a 65 28 70 43 72 73 72 29 3b 0a  oadSize(pCrsr);.
13fa0 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d        pC->aRow =
13fb0 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 79   sqlite3BtreePay
13fc0 6c 6f 61 64 46 65 74 63 68 28 70 43 72 73 72 2c  loadFetch(pCrsr,
13fd0 20 26 61 76 61 69 6c 29 3b 0a 20 20 20 20 20 20   &avail);.      
13fe0 61 73 73 65 72 74 28 20 61 76 61 69 6c 3c 3d 36  assert( avail<=6
13ff0 35 35 33 36 20 29 3b 20 20 2f 2a 20 4d 61 78 69  5536 );  /* Maxi
14000 6d 75 6d 20 70 61 67 65 20 73 69 7a 65 20 69 73  mum page size is
14010 20 36 34 4b 69 42 20 2a 2f 0a 20 20 20 20 20 20   64KiB */.      
14020 69 66 28 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53  if( pC->payloadS
14030 69 7a 65 20 3c 3d 20 28 75 33 32 29 61 76 61 69  ize <= (u32)avai
14040 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 70 43 2d  l ){.        pC-
14050 3e 73 7a 52 6f 77 20 3d 20 70 43 2d 3e 70 61 79  >szRow = pC->pay
14060 6c 6f 61 64 53 69 7a 65 3b 0a 20 20 20 20 20 20  loadSize;.      
14070 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 70 61  }else if( pC->pa
14080 79 6c 6f 61 64 53 69 7a 65 20 3e 20 28 75 33 32  yloadSize > (u32
14090 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  )db->aLimit[SQLI
140a0 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
140b0 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   ){.        goto
140c0 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 20 20   too_big;.      
140d0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70  }else{.        p
140e0 43 2d 3e 73 7a 52 6f 77 20 3d 20 61 76 61 69 6c  C->szRow = avail
140f0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
14100 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61      pC->cacheSta
14110 74 75 73 20 3d 20 70 2d 3e 63 61 63 68 65 43 74  tus = p->cacheCt
14120 72 3b 0a 20 20 20 20 70 43 2d 3e 69 48 64 72 4f  r;.    pC->iHdrO
14130 66 66 73 65 74 20 3d 20 67 65 74 56 61 72 69 6e  ffset = getVarin
14140 74 33 32 28 70 43 2d 3e 61 52 6f 77 2c 20 6f 66  t32(pC->aRow, of
14150 66 73 65 74 29 3b 0a 20 20 20 20 70 43 2d 3e 6e  fset);.    pC->n
14160 48 64 72 50 61 72 73 65 64 20 3d 20 30 3b 0a 20  HdrParsed = 0;. 
14170 20 20 20 61 4f 66 66 73 65 74 5b 30 5d 20 3d 20     aOffset[0] = 
14180 6f 66 66 73 65 74 3b 0a 0a 0a 20 20 20 20 69 66  offset;...    if
14190 28 20 61 76 61 69 6c 3c 6f 66 66 73 65 74 20 29  ( avail<offset )
141a0 7b 20 20 20 20 20 20 2f 2a 4f 50 54 49 4d 49 5a  {      /*OPTIMIZ
141b0 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f  ATION-IF-FALSE*/
141c0 0a 20 20 20 20 20 20 2f 2a 20 70 43 2d 3e 61 52  .      /* pC->aR
141d0 6f 77 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65  ow does not have
141e0 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 65 6e 74   to hold the ent
141f0 69 72 65 20 72 6f 77 2c 20 62 75 74 20 69 74 20  ire row, but it 
14200 64 6f 65 73 20 61 74 20 6c 65 61 73 74 0a 20 20  does at least.  
14210 20 20 20 20 2a 2a 20 6e 65 65 64 20 74 6f 20 63      ** need to c
14220 6f 76 65 72 20 74 68 65 20 68 65 61 64 65 72 20  over the header 
14230 6f 66 20 74 68 65 20 72 65 63 6f 72 64 2e 20 20  of the record.  
14240 49 66 20 70 43 2d 3e 61 52 6f 77 20 64 6f 65 73  If pC->aRow does
14250 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 0a 20 20 20   not contain.   
14260 20 20 20 2a 2a 20 74 68 65 20 63 6f 6d 70 6c 65     ** the comple
14270 74 65 20 68 65 61 64 65 72 2c 20 74 68 65 6e 20  te header, then 
14280 73 65 74 20 69 74 20 74 6f 20 7a 65 72 6f 2c 20  set it to zero, 
14290 66 6f 72 63 69 6e 67 20 74 68 65 20 68 65 61 64  forcing the head
142a0 65 72 20 74 6f 20 62 65 0a 20 20 20 20 20 20 2a  er to be.      *
142b0 2a 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c  * dynamically al
142c0 6c 6f 63 61 74 65 64 2e 20 2a 2f 0a 20 20 20 20  located. */.    
142d0 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 30 3b 0a    pC->aRow = 0;.
142e0 20 20 20 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20        pC->szRow 
142f0 3d 20 30 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 4d  = 0;..      /* M
14300 61 6b 65 20 73 75 72 65 20 61 20 63 6f 72 72 75  ake sure a corru
14310 70 74 20 64 61 74 61 62 61 73 65 20 68 61 73 20  pt database has 
14320 6e 6f 74 20 67 69 76 65 6e 20 75 73 20 61 6e 20  not given us an 
14330 6f 76 65 72 73 69 7a 65 20 68 65 61 64 65 72 2e  oversize header.
14340 0a 20 20 20 20 20 20 2a 2a 20 44 6f 20 74 68 69  .      ** Do thi
14350 73 20 6e 6f 77 20 74 6f 20 61 76 6f 69 64 20 61  s now to avoid a
14360 6e 20 6f 76 65 72 73 69 7a 65 20 6d 65 6d 6f 72  n oversize memor
14370 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 0a 20 20  y allocation..  
14380 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20      **.      ** 
14390 54 79 70 65 20 65 6e 74 72 69 65 73 20 63 61 6e  Type entries can
143a0 20 62 65 20 62 65 74 77 65 65 6e 20 31 20 61 6e   be between 1 an
143b0 64 20 35 20 62 79 74 65 73 20 65 61 63 68 2e 20  d 5 bytes each. 
143c0 20 42 75 74 20 34 20 61 6e 64 20 35 20 62 79 74   But 4 and 5 byt
143d0 65 0a 20 20 20 20 20 20 2a 2a 20 74 79 70 65 73  e.      ** types
143e0 20 75 73 65 20 73 6f 20 6d 75 63 68 20 64 61 74   use so much dat
143f0 61 20 73 70 61 63 65 20 74 68 61 74 20 74 68 65  a space that the
14400 72 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 34  re can only be 4
14410 30 39 36 20 61 6e 64 20 33 32 20 6f 66 0a 20 20  096 and 32 of.  
14420 20 20 20 20 2a 2a 20 74 68 65 6d 2c 20 72 65 73      ** them, res
14430 70 65 63 74 69 76 65 6c 79 2e 20 20 53 6f 20 74  pectively.  So t
14440 68 65 20 6d 61 78 69 6d 75 6d 20 68 65 61 64 65  he maximum heade
14450 72 20 6c 65 6e 67 74 68 20 72 65 73 75 6c 74 73  r length results
14460 20 66 72 6f 6d 20 61 0a 20 20 20 20 20 20 2a 2a   from a.      **
14470 20 33 2d 62 79 74 65 20 74 79 70 65 20 66 6f 72   3-byte type for
14480 20 65 61 63 68 20 6f 66 20 74 68 65 20 6d 61 78   each of the max
14490 69 6d 75 6d 20 6f 66 20 33 32 37 36 38 20 63 6f  imum of 32768 co
144a0 6c 75 6d 6e 73 20 70 6c 75 73 20 74 68 72 65 65  lumns plus three
144b0 0a 20 20 20 20 20 20 2a 2a 20 65 78 74 72 61 20  .      ** extra 
144c0 62 79 74 65 73 20 66 6f 72 20 74 68 65 20 68 65  bytes for the he
144d0 61 64 65 72 20 6c 65 6e 67 74 68 20 69 74 73 65  ader length itse
144e0 6c 66 2e 20 20 33 32 37 36 38 2a 33 20 2b 20 33  lf.  32768*3 + 3
144f0 20 3d 20 39 38 33 30 37 2e 0a 20 20 20 20 20 20   = 98307..      
14500 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 6f 66 66  */.      if( off
14510 73 65 74 20 3e 20 39 38 33 30 37 20 7c 7c 20 6f  set > 98307 || o
14520 66 66 73 65 74 20 3e 20 70 43 2d 3e 70 61 79 6c  ffset > pC->payl
14530 6f 61 64 53 69 7a 65 20 29 7b 0a 20 20 20 20 20  oadSize ){.     
14540 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43     rc = SQLITE_C
14550 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20  ORRUPT_BKPT;.   
14560 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
14570 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
14580 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 20      }.    }else 
14590 69 66 28 20 6f 66 66 73 65 74 3e 30 20 29 7b 20  if( offset>0 ){ 
145a0 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49  /*OPTIMIZATION-I
145b0 46 2d 54 52 55 45 2a 2f 0a 20 20 20 20 20 20 2f  F-TRUE*/.      /
145c0 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
145d0 67 6f 74 6f 20 69 73 20 61 6e 20 6f 70 74 69 6d  goto is an optim
145e0 69 7a 61 74 69 6f 6e 2e 20 20 49 74 20 63 61 6e  ization.  It can
145f0 20 62 65 20 6f 6d 69 74 74 65 64 20 61 6e 64 0a   be omitted and.
14600 20 20 20 20 20 20 2a 2a 20 65 76 65 72 79 74 68        ** everyth
14610 69 6e 67 20 77 69 6c 6c 20 73 74 69 6c 6c 20 77  ing will still w
14620 6f 72 6b 2e 20 20 42 75 74 20 4f 50 5f 43 6f 6c  ork.  But OP_Col
14630 75 6d 6e 20 69 73 20 6d 65 61 73 75 72 61 62 6c  umn is measurabl
14640 79 20 66 61 73 74 65 72 0a 20 20 20 20 20 20 2a  y faster.      *
14650 2a 20 62 79 20 73 6b 69 70 70 69 6e 67 20 74 68  * by skipping th
14660 65 20 73 75 62 73 65 71 75 65 6e 74 20 63 6f 6e  e subsequent con
14670 64 69 74 69 6f 6e 61 6c 2c 20 77 68 69 63 68 20  ditional, which 
14680 69 73 20 61 6c 77 61 79 73 20 74 72 75 65 2e 0a  is always true..
14690 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 7a        */.      z
146a0 44 61 74 61 20 3d 20 70 43 2d 3e 61 52 6f 77 3b  Data = pC->aRow;
146b0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
146c0 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d 70  C->nHdrParsed<=p
146d0 32 20 29 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  2 );         /* 
146e0 43 6f 6e 64 69 74 69 6f 6e 61 6c 20 73 6b 69 70  Conditional skip
146f0 70 65 64 20 2a 2f 0a 20 20 20 20 20 20 67 6f 74  ped */.      got
14700 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 72 65 61 64  o op_column_read
14710 5f 68 65 61 64 65 72 3b 0a 20 20 20 20 7d 0a 20  _header;.    }. 
14720 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75   }..  /* Make su
14730 72 65 20 61 74 20 6c 65 61 73 74 20 74 68 65 20  re at least the 
14740 66 69 72 73 74 20 70 32 2b 31 20 65 6e 74 72 69  first p2+1 entri
14750 65 73 20 6f 66 20 74 68 65 20 68 65 61 64 65 72  es of the header
14760 20 68 61 76 65 20 62 65 65 6e 0a 20 20 2a 2a 20   have been.  ** 
14770 70 61 72 73 65 64 20 61 6e 64 20 76 61 6c 69 64  parsed and valid
14780 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20   information is 
14790 69 6e 20 61 4f 66 66 73 65 74 5b 5d 20 61 6e 64  in aOffset[] and
147a0 20 70 43 2d 3e 61 54 79 70 65 5b 5d 2e 0a 20 20   pC->aType[]..  
147b0 2a 2f 0a 20 20 69 66 28 20 70 43 2d 3e 6e 48 64  */.  if( pC->nHd
147c0 72 50 61 72 73 65 64 3c 3d 70 32 20 29 7b 0a 20  rParsed<=p2 ){. 
147d0 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69     /* If there i
147e0 73 20 6d 6f 72 65 20 68 65 61 64 65 72 20 61 76  s more header av
147f0 61 69 6c 61 62 6c 65 20 66 6f 72 20 70 61 72 73  ailable for pars
14800 69 6e 67 20 69 6e 20 74 68 65 20 72 65 63 6f 72  ing in the recor
14810 64 2c 20 74 72 79 0a 20 20 20 20 2a 2a 20 74 6f  d, try.    ** to
14820 20 65 78 74 72 61 63 74 20 61 64 64 69 74 69 6f   extract additio
14830 6e 61 6c 20 66 69 65 6c 64 73 20 75 70 20 74 68  nal fields up th
14840 72 6f 75 67 68 20 74 68 65 20 70 32 2b 31 2d 74  rough the p2+1-t
14850 68 20 66 69 65 6c 64 20 0a 20 20 20 20 2a 2f 0a  h field .    */.
14860 20 20 20 20 69 66 28 20 70 43 2d 3e 69 48 64 72      if( pC->iHdr
14870 4f 66 66 73 65 74 3c 61 4f 66 66 73 65 74 5b 30  Offset<aOffset[0
14880 5d 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 4d 61  ] ){.      /* Ma
14890 6b 65 20 73 75 72 65 20 7a 44 61 74 61 20 70 6f  ke sure zData po
148a0 69 6e 74 73 20 74 6f 20 65 6e 6f 75 67 68 20 6f  ints to enough o
148b0 66 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20  f the record to 
148c0 63 6f 76 65 72 20 74 68 65 20 68 65 61 64 65 72  cover the header
148d0 2e 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70  . */.      if( p
148e0 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 7b 0a 20 20  C->aRow==0 ){.  
148f0 20 20 20 20 20 20 6d 65 6d 73 65 74 28 26 73 4d        memset(&sM
14900 65 6d 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 4d  em, 0, sizeof(sM
14910 65 6d 29 29 3b 0a 20 20 20 20 20 20 20 20 72 63  em));.        rc
14920 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   = sqlite3VdbeMe
14930 6d 46 72 6f 6d 42 74 72 65 65 28 70 43 72 73 72  mFromBtree(pCrsr
14940 2c 20 30 2c 20 61 4f 66 66 73 65 74 5b 30 5d 2c  , 0, aOffset[0],
14950 20 21 70 43 2d 3e 69 73 54 61 62 6c 65 2c 20 26   !pC->isTable, &
14960 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 69  sMem);.        i
14970 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
14980 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
14990 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
149a0 20 20 20 20 7a 44 61 74 61 20 3d 20 28 75 38 2a      zData = (u8*
149b0 29 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 20 20 7d  )sMem.z;.      }
149c0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 44  else{.        zD
149d0 61 74 61 20 3d 20 70 43 2d 3e 61 52 6f 77 3b 0a  ata = pC->aRow;.
149e0 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20        }.  .     
149f0 20 2f 2a 20 46 69 6c 6c 20 69 6e 20 70 43 2d 3e   /* Fill in pC->
14a00 61 54 79 70 65 5b 69 5d 20 61 6e 64 20 61 4f 66  aType[i] and aOf
14a10 66 73 65 74 5b 69 5d 20 76 61 6c 75 65 73 20 74  fset[i] values t
14a20 68 72 6f 75 67 68 20 74 68 65 20 70 32 2d 74 68  hrough the p2-th
14a30 20 66 69 65 6c 64 2e 20 2a 2f 0a 20 20 20 20 6f   field. */.    o
14a40 70 5f 63 6f 6c 75 6d 6e 5f 72 65 61 64 5f 68 65  p_column_read_he
14a50 61 64 65 72 3a 0a 20 20 20 20 20 20 69 20 3d 20  ader:.      i = 
14a60 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 3b 0a  pC->nHdrParsed;.
14a70 20 20 20 20 20 20 6f 66 66 73 65 74 36 34 20 3d        offset64 =
14a80 20 61 4f 66 66 73 65 74 5b 69 5d 3b 0a 20 20 20   aOffset[i];.   
14a90 20 20 20 7a 48 64 72 20 3d 20 7a 44 61 74 61 20     zHdr = zData 
14aa0 2b 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74  + pC->iHdrOffset
14ab0 3b 0a 20 20 20 20 20 20 7a 45 6e 64 48 64 72 20  ;.      zEndHdr 
14ac0 3d 20 7a 44 61 74 61 20 2b 20 61 4f 66 66 73 65  = zData + aOffse
14ad0 74 5b 30 5d 3b 0a 20 20 20 20 20 20 64 6f 7b 0a  t[0];.      do{.
14ae0 20 20 20 20 20 20 20 20 69 66 28 20 28 74 20 3d          if( (t =
14af0 20 7a 48 64 72 5b 30 5d 29 3c 30 78 38 30 20 29   zHdr[0])<0x80 )
14b00 7b 0a 20 20 20 20 20 20 20 20 20 20 7a 48 64 72  {.          zHdr
14b10 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20 20 6f 66  ++;.          of
14b20 66 73 65 74 36 34 20 2b 3d 20 73 71 6c 69 74 65  fset64 += sqlite
14b30 33 56 64 62 65 4f 6e 65 42 79 74 65 53 65 72 69  3VdbeOneByteSeri
14b40 61 6c 54 79 70 65 4c 65 6e 28 74 29 3b 0a 20 20  alTypeLen(t);.  
14b50 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
14b60 20 20 20 20 20 20 20 7a 48 64 72 20 2b 3d 20 73         zHdr += s
14b70 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33  qlite3GetVarint3
14b80 32 28 7a 48 64 72 2c 20 26 74 29 3b 0a 20 20 20  2(zHdr, &t);.   
14b90 20 20 20 20 20 20 20 6f 66 66 73 65 74 36 34 20         offset64 
14ba0 2b 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  += sqlite3VdbeSe
14bb0 72 69 61 6c 54 79 70 65 4c 65 6e 28 74 29 3b 0a  rialTypeLen(t);.
14bc0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
14bd0 20 20 70 43 2d 3e 61 54 79 70 65 5b 69 2b 2b 5d    pC->aType[i++]
14be0 20 3d 20 74 3b 0a 20 20 20 20 20 20 20 20 61 4f   = t;.        aO
14bf0 66 66 73 65 74 5b 69 5d 20 3d 20 28 75 33 32 29  ffset[i] = (u32)
14c00 28 6f 66 66 73 65 74 36 34 20 26 20 30 78 66 66  (offset64 & 0xff
14c10 66 66 66 66 66 66 29 3b 0a 20 20 20 20 20 20 7d  ffffff);.      }
14c20 77 68 69 6c 65 28 20 69 3c 3d 70 32 20 26 26 20  while( i<=p2 && 
14c30 7a 48 64 72 3c 7a 45 6e 64 48 64 72 20 29 3b 0a  zHdr<zEndHdr );.
14c40 0a 20 20 20 20 20 20 2f 2a 20 54 68 65 20 72 65  .      /* The re
14c50 63 6f 72 64 20 69 73 20 63 6f 72 72 75 70 74 20  cord is corrupt 
14c60 69 66 20 61 6e 79 20 6f 66 20 74 68 65 20 66 6f  if any of the fo
14c70 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 72 75 65  llowing are true
14c80 3a 0a 20 20 20 20 20 20 2a 2a 20 28 31 29 20 74  :.      ** (1) t
14c90 68 65 20 62 79 74 65 73 20 6f 66 20 74 68 65 20  he bytes of the 
14ca0 68 65 61 64 65 72 20 65 78 74 65 6e 64 20 70 61  header extend pa
14cb0 73 74 20 74 68 65 20 64 65 63 6c 61 72 65 64 20  st the declared 
14cc0 68 65 61 64 65 72 20 73 69 7a 65 0a 20 20 20 20  header size.    
14cd0 20 20 2a 2a 20 28 32 29 20 74 68 65 20 65 6e 74    ** (2) the ent
14ce0 69 72 65 20 68 65 61 64 65 72 20 77 61 73 20 75  ire header was u
14cf0 73 65 64 20 62 75 74 20 6e 6f 74 20 61 6c 6c 20  sed but not all 
14d00 64 61 74 61 20 77 61 73 20 75 73 65 64 0a 20 20  data was used.  
14d10 20 20 20 20 2a 2a 20 28 33 29 20 74 68 65 20 65      ** (3) the e
14d20 6e 64 20 6f 66 20 74 68 65 20 64 61 74 61 20 65  nd of the data e
14d30 78 74 65 6e 64 73 20 62 65 79 6f 6e 64 20 74 68  xtends beyond th
14d40 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63  e end of the rec
14d50 6f 72 64 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  ord..      */.  
14d60 20 20 20 20 69 66 28 20 28 7a 48 64 72 3e 3d 7a      if( (zHdr>=z
14d70 45 6e 64 48 64 72 20 26 26 20 28 7a 48 64 72 3e  EndHdr && (zHdr>
14d80 7a 45 6e 64 48 64 72 20 7c 7c 20 6f 66 66 73 65  zEndHdr || offse
14d90 74 36 34 21 3d 70 43 2d 3e 70 61 79 6c 6f 61 64  t64!=pC->payload
14da0 53 69 7a 65 29 29 0a 20 20 20 20 20 20 20 7c 7c  Size)).       ||
14db0 20 28 6f 66 66 73 65 74 36 34 20 3e 20 70 43 2d   (offset64 > pC-
14dc0 3e 70 61 79 6c 6f 61 64 53 69 7a 65 29 0a 20 20  >payloadSize).  
14dd0 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 69      ){.        i
14de0 66 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29  f( pC->aRow==0 )
14df0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
14e00 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20  elease(&sMem);. 
14e10 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
14e20 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b  TE_CORRUPT_BKPT;
14e30 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62  .        goto ab
14e40 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
14e50 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ;.      }..     
14e60 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 20   pC->nHdrParsed 
14e70 3d 20 69 3b 0a 20 20 20 20 20 20 70 43 2d 3e 69  = i;.      pC->i
14e80 48 64 72 4f 66 66 73 65 74 20 3d 20 28 75 33 32  HdrOffset = (u32
14e90 29 28 7a 48 64 72 20 2d 20 7a 44 61 74 61 29 3b  )(zHdr - zData);
14ea0 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61  .      if( pC->a
14eb0 52 6f 77 3d 3d 30 20 29 20 73 71 6c 69 74 65 33  Row==0 ) sqlite3
14ec0 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26  VdbeMemRelease(&
14ed0 73 4d 65 6d 29 3b 0a 20 20 20 20 7d 65 6c 73 65  sMem);.    }else
14ee0 7b 0a 20 20 20 20 20 20 74 20 3d 20 30 3b 0a 20  {.      t = 0;. 
14ef0 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 49 66 20     }..    /* If 
14f00 61 66 74 65 72 20 74 72 79 69 6e 67 20 74 6f 20  after trying to 
14f10 65 78 74 72 61 63 74 20 6e 65 77 20 65 6e 74 72  extract new entr
14f20 69 65 73 20 66 72 6f 6d 20 74 68 65 20 68 65 61  ies from the hea
14f30 64 65 72 2c 20 6e 48 64 72 50 61 72 73 65 64 20  der, nHdrParsed 
14f40 69 73 0a 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20  is.    ** still 
14f50 6e 6f 74 20 75 70 20 74 6f 20 70 32 2c 20 74 68  not up to p2, th
14f60 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  at means that th
14f70 65 20 72 65 63 6f 72 64 20 68 61 73 20 66 65 77  e record has few
14f80 65 72 20 74 68 61 6e 20 70 32 0a 20 20 20 20 2a  er than p2.    *
14f90 2a 20 63 6f 6c 75 6d 6e 73 2e 20 20 53 6f 20 74  * columns.  So t
14fa0 68 65 20 72 65 73 75 6c 74 20 77 69 6c 6c 20 62  he result will b
14fb0 65 20 65 69 74 68 65 72 20 74 68 65 20 64 65 66  e either the def
14fc0 61 75 6c 74 20 76 61 6c 75 65 20 6f 72 20 61 20  ault value or a 
14fd0 4e 55 4c 4c 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  NULL..    */.   
14fe0 20 69 66 28 20 70 43 2d 3e 6e 48 64 72 50 61 72   if( pC->nHdrPar
14ff0 73 65 64 3c 3d 70 32 20 29 7b 0a 20 20 20 20 20  sed<=p2 ){.     
15000 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65   if( pOp->p4type
15010 3d 3d 50 34 5f 4d 45 4d 20 29 7b 0a 20 20 20 20  ==P4_MEM ){.    
15020 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
15030 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70 44  emShallowCopy(pD
15040 65 73 74 2c 20 70 4f 70 2d 3e 70 34 2e 70 4d 65  est, pOp->p4.pMe
15050 6d 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a  m, MEM_Static);.
15060 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
15070 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
15080 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73 74  MemSetNull(pDest
15090 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
150a0 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f   goto op_column_
150b0 6f 75 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  out;.    }.  }el
150c0 73 65 7b 0a 20 20 20 20 74 20 3d 20 70 43 2d 3e  se{.    t = pC->
150d0 61 54 79 70 65 5b 70 32 5d 3b 0a 20 20 7d 0a 0a  aType[p2];.  }..
150e0 20 20 2f 2a 20 45 78 74 72 61 63 74 20 74 68 65    /* Extract the
150f0 20 63 6f 6e 74 65 6e 74 20 66 6f 72 20 74 68 65   content for the
15100 20 70 32 2b 31 2d 74 68 20 63 6f 6c 75 6d 6e 2e   p2+1-th column.
15110 20 20 43 6f 6e 74 72 6f 6c 20 63 61 6e 20 6f 6e    Control can on
15120 6c 79 0a 20 20 2a 2a 20 72 65 61 63 68 20 74 68  ly.  ** reach th
15130 69 73 20 70 6f 69 6e 74 20 69 66 20 61 4f 66 66  is point if aOff
15140 73 65 74 5b 70 32 5d 2c 20 61 4f 66 66 73 65 74  set[p2], aOffset
15150 5b 70 32 2b 31 5d 2c 20 61 6e 64 20 70 43 2d 3e  [p2+1], and pC->
15160 61 54 79 70 65 5b 70 32 5d 20 61 72 65 0a 20 20  aType[p2] are.  
15170 2a 2a 20 61 6c 6c 20 76 61 6c 69 64 2e 0a 20 20  ** all valid..  
15180 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 32 3c  */.  assert( p2<
15190 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 20 29  pC->nHdrParsed )
151a0 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d  ;.  assert( rc==
151b0 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 61  SQLITE_OK );.  a
151c0 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 56 64  ssert( sqlite3Vd
151d0 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69  beCheckMemInvari
151e0 61 6e 74 73 28 70 44 65 73 74 29 20 29 3b 0a 20  ants(pDest) );. 
151f0 20 69 66 28 20 56 64 62 65 4d 65 6d 44 79 6e 61   if( VdbeMemDyna
15200 6d 69 63 28 70 44 65 73 74 29 20 29 7b 0a 20 20  mic(pDest) ){.  
15210 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
15220 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a  SetNull(pDest);.
15230 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 74 3d    }.  assert( t=
15240 3d 70 43 2d 3e 61 54 79 70 65 5b 70 32 5d 20 29  =pC->aType[p2] )
15250 3b 0a 20 20 69 66 28 20 70 43 2d 3e 73 7a 52 6f  ;.  if( pC->szRo
15260 77 3e 3d 61 4f 66 66 73 65 74 5b 70 32 2b 31 5d  w>=aOffset[p2+1]
15270 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20   ){.    /* This 
15280 69 73 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61  is the common ca
15290 73 65 20 77 68 65 72 65 20 74 68 65 20 64 65 73  se where the des
152a0 69 72 65 64 20 63 6f 6e 74 65 6e 74 20 66 69 74  ired content fit
152b0 73 20 6f 6e 20 74 68 65 20 6f 72 69 67 69 6e 61  s on the origina
152c0 6c 0a 20 20 20 20 2a 2a 20 70 61 67 65 20 2d 20  l.    ** page - 
152d0 77 68 65 72 65 20 74 68 65 20 63 6f 6e 74 65 6e  where the conten
152e0 74 20 69 73 20 6e 6f 74 20 6f 6e 20 61 6e 20 6f  t is not on an o
152f0 76 65 72 66 6c 6f 77 20 70 61 67 65 20 2a 2f 0a  verflow page */.
15300 20 20 20 20 7a 44 61 74 61 20 3d 20 70 43 2d 3e      zData = pC->
15310 61 52 6f 77 20 2b 20 61 4f 66 66 73 65 74 5b 70  aRow + aOffset[p
15320 32 5d 3b 0a 20 20 20 20 69 66 28 20 74 3c 31 32  2];.    if( t<12
15330 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
15340 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 7a  3VdbeSerialGet(z
15350 44 61 74 61 2c 20 74 2c 20 70 44 65 73 74 29 3b  Data, t, pDest);
15360 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
15370 20 20 2f 2a 20 49 66 20 74 68 65 20 63 6f 6c 75    /* If the colu
15380 6d 6e 20 76 61 6c 75 65 20 69 73 20 61 20 73 74  mn value is a st
15390 72 69 6e 67 2c 20 77 65 20 6e 65 65 64 20 61 20  ring, we need a 
153a0 70 65 72 73 69 73 74 65 6e 74 20 76 61 6c 75 65  persistent value
153b0 2c 20 6e 6f 74 0a 20 20 20 20 20 20 2a 2a 20 61  , not.      ** a
153c0 20 4d 45 4d 5f 45 70 68 65 6d 20 76 61 6c 75 65   MEM_Ephem value
153d0 2e 20 20 54 68 69 73 20 62 72 61 6e 63 68 20 69  .  This branch i
153e0 73 20 61 20 66 61 73 74 20 73 68 6f 72 74 2d 63  s a fast short-c
153f0 75 74 20 74 68 61 74 20 69 73 20 65 71 75 69 76  ut that is equiv
15400 61 6c 65 6e 74 0a 20 20 20 20 20 20 2a 2a 20 74  alent.      ** t
15410 6f 20 63 61 6c 6c 69 6e 67 20 73 71 6c 69 74 65  o calling sqlite
15420 33 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 29  3VdbeSerialGet()
15430 20 61 6e 64 20 73 71 6c 69 74 65 33 56 64 62 65   and sqlite3Vdbe
15440 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 29  Deephemeralize()
15450 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
15460 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 31   static const u1
15470 36 20 61 46 6c 61 67 5b 5d 20 3d 20 7b 20 4d 45  6 aFlag[] = { ME
15480 4d 5f 42 6c 6f 62 2c 20 4d 45 4d 5f 53 74 72 7c  M_Blob, MEM_Str|
15490 4d 45 4d 5f 54 65 72 6d 20 7d 3b 0a 20 20 20 20  MEM_Term };.    
154a0 20 20 70 44 65 73 74 2d 3e 6e 20 3d 20 6c 65 6e    pDest->n = len
154b0 20 3d 20 28 74 2d 31 32 29 2f 32 3b 0a 20 20 20   = (t-12)/2;.   
154c0 20 20 20 70 44 65 73 74 2d 3e 65 6e 63 20 3d 20     pDest->enc = 
154d0 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 20 20 20 20  encoding;.      
154e0 69 66 28 20 70 44 65 73 74 2d 3e 73 7a 4d 61 6c  if( pDest->szMal
154f0 6c 6f 63 20 3c 20 6c 65 6e 2b 32 20 29 7b 0a 20  loc < len+2 ){. 
15500 20 20 20 20 20 20 20 70 44 65 73 74 2d 3e 66 6c         pDest->fl
15510 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
15520 20 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69          if( sqli
15530 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70  te3VdbeMemGrow(p
15540 44 65 73 74 2c 20 6c 65 6e 2b 32 2c 20 30 29 20  Dest, len+2, 0) 
15550 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
15560 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
15570 20 20 20 20 70 44 65 73 74 2d 3e 7a 20 3d 20 70      pDest->z = p
15580 44 65 73 74 2d 3e 7a 4d 61 6c 6c 6f 63 3b 0a 20  Dest->zMalloc;. 
15590 20 20 20 20 20 7d 0a 20 20 20 20 20 20 6d 65 6d       }.      mem
155a0 63 70 79 28 70 44 65 73 74 2d 3e 7a 2c 20 7a 44  cpy(pDest->z, zD
155b0 61 74 61 2c 20 6c 65 6e 29 3b 0a 20 20 20 20 20  ata, len);.     
155c0 20 70 44 65 73 74 2d 3e 7a 5b 6c 65 6e 5d 20 3d   pDest->z[len] =
155d0 20 30 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d   0;.      pDest-
155e0 3e 7a 5b 6c 65 6e 2b 31 5d 20 3d 20 30 3b 0a 20  >z[len+1] = 0;. 
155f0 20 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67       pDest->flag
15600 73 20 3d 20 61 46 6c 61 67 5b 74 26 31 5d 3b 0a  s = aFlag[t&1];.
15610 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
15620 20 20 20 70 44 65 73 74 2d 3e 65 6e 63 20 3d 20     pDest->enc = 
15630 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 20 20 2f 2a  encoding;.    /*
15640 20 54 68 69 73 20 62 72 61 6e 63 68 20 68 61 70   This branch hap
15650 70 65 6e 73 20 6f 6e 6c 79 20 77 68 65 6e 20 63  pens only when c
15660 6f 6e 74 65 6e 74 20 69 73 20 6f 6e 20 6f 76 65  ontent is on ove
15670 72 66 6c 6f 77 20 70 61 67 65 73 20 2a 2f 0a 20  rflow pages */. 
15680 20 20 20 69 66 28 20 28 28 70 4f 70 2d 3e 70 35     if( ((pOp->p5
15690 20 26 20 28 4f 50 46 4c 41 47 5f 4c 45 4e 47 54   & (OPFLAG_LENGT
156a0 48 41 52 47 7c 4f 50 46 4c 41 47 5f 54 59 50 45  HARG|OPFLAG_TYPE
156b0 4f 46 41 52 47 29 29 21 3d 30 0a 20 20 20 20 20  OFARG))!=0.     
156c0 20 20 20 20 20 26 26 20 28 28 74 3e 3d 31 32 20       && ((t>=12 
156d0 26 26 20 28 74 26 31 29 3d 3d 30 29 20 7c 7c 20  && (t&1)==0) || 
156e0 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
156f0 47 5f 54 59 50 45 4f 46 41 52 47 29 21 3d 30 29  G_TYPEOFARG)!=0)
15700 29 0a 20 20 20 20 20 7c 7c 20 28 6c 65 6e 20 3d  ).     || (len =
15710 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
15720 61 6c 54 79 70 65 4c 65 6e 28 74 29 29 3d 3d 30  alTypeLen(t))==0
15730 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 2f 2a  .    ){.      /*
15740 20 43 6f 6e 74 65 6e 74 20 69 73 20 69 72 72 65   Content is irre
15750 6c 65 76 61 6e 74 20 66 6f 72 0a 20 20 20 20 20  levant for.     
15760 20 2a 2a 20 20 20 20 31 2e 20 74 68 65 20 74 79   **    1. the ty
15770 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 2c  peof() function,
15780 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 32 2e 20  .      **    2. 
15790 74 68 65 20 6c 65 6e 67 74 68 28 58 29 20 66 75  the length(X) fu
157a0 6e 63 74 69 6f 6e 20 69 66 20 58 20 69 73 20 61  nction if X is a
157b0 20 62 6c 6f 62 2c 20 61 6e 64 0a 20 20 20 20 20   blob, and.     
157c0 20 2a 2a 20 20 20 20 33 2e 20 69 66 20 74 68 65   **    3. if the
157d0 20 63 6f 6e 74 65 6e 74 20 6c 65 6e 67 74 68 20   content length 
157e0 69 73 20 7a 65 72 6f 2e 0a 20 20 20 20 20 20 2a  is zero..      *
157f0 2a 20 53 6f 20 77 65 20 6d 69 67 68 74 20 61 73  * So we might as
15800 20 77 65 6c 6c 20 75 73 65 20 62 6f 67 75 73 20   well use bogus 
15810 63 6f 6e 74 65 6e 74 20 72 61 74 68 65 72 20 74  content rather t
15820 68 61 6e 20 72 65 61 64 69 6e 67 0a 20 20 20 20  han reading.    
15830 20 20 2a 2a 20 63 6f 6e 74 65 6e 74 20 66 72 6f    ** content fro
15840 6d 20 64 69 73 6b 2e 20 2a 2f 0a 20 20 20 20 20  m disk. */.     
15850 20 73 74 61 74 69 63 20 75 38 20 61 5a 65 72 6f   static u8 aZero
15860 5b 38 5d 3b 20 20 2f 2a 20 54 68 69 73 20 69 73  [8];  /* This is
15870 20 74 68 65 20 62 6f 67 75 73 20 63 6f 6e 74 65   the bogus conte
15880 6e 74 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69  nt */.      sqli
15890 74 65 33 56 64 62 65 53 65 72 69 61 6c 47 65 74  te3VdbeSerialGet
158a0 28 61 5a 65 72 6f 2c 20 74 2c 20 70 44 65 73 74  (aZero, t, pDest
158b0 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
158c0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
158d0 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65  VdbeMemFromBtree
158e0 28 70 43 72 73 72 2c 20 61 4f 66 66 73 65 74 5b  (pCrsr, aOffset[
158f0 70 32 5d 2c 20 6c 65 6e 2c 20 21 70 43 2d 3e 69  p2], len, !pC->i
15900 73 54 61 62 6c 65 2c 0a 20 20 20 20 20 20 20 20  sTable,.        
15910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15920 20 20 20 20 20 20 20 20 20 20 20 70 44 65 73 74             pDest
15930 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21  );.      if( rc!
15940 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74  =SQLITE_OK ) got
15950 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
15960 72 72 6f 72 3b 0a 20 20 20 20 20 20 73 71 6c 69  rror;.      sqli
15970 74 65 33 56 64 62 65 53 65 72 69 61 6c 47 65 74  te3VdbeSerialGet
15980 28 28 63 6f 6e 73 74 20 75 38 2a 29 70 44 65 73  ((const u8*)pDes
15990 74 2d 3e 7a 2c 20 74 2c 20 70 44 65 73 74 29 3b  t->z, t, pDest);
159a0 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e 66 6c  .      pDest->fl
159b0 61 67 73 20 26 3d 20 7e 4d 45 4d 5f 45 70 68 65  ags &= ~MEM_Ephe
159c0 6d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 6f 70  m;.    }.  }..op
159d0 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3a 0a 20 20 55  _column_out:.  U
159e0 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
159f0 5a 45 28 70 44 65 73 74 29 3b 0a 20 20 52 45 47  ZE(pDest);.  REG
15a00 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
15a10 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 62  >p3, pDest);.  b
15a20 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
15a30 64 65 3a 20 41 66 66 69 6e 69 74 79 20 50 31 20  de: Affinity P1 
15a40 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  P2 * P4 *.** Syn
15a50 6f 70 73 69 73 3a 20 61 66 66 69 6e 69 74 79 28  opsis: affinity(
15a60 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20  r[P1@P2]).**.** 
15a70 41 70 70 6c 79 20 61 66 66 69 6e 69 74 69 65 73  Apply affinities
15a80 20 74 6f 20 61 20 72 61 6e 67 65 20 6f 66 20 50   to a range of P
15a90 32 20 72 65 67 69 73 74 65 72 73 20 73 74 61 72  2 registers star
15aa0 74 69 6e 67 20 77 69 74 68 20 50 31 2e 0a 2a 2a  ting with P1..**
15ab0 0a 2a 2a 20 50 34 20 69 73 20 61 20 73 74 72 69  .** P4 is a stri
15ac0 6e 67 20 74 68 61 74 20 69 73 20 50 32 20 63 68  ng that is P2 ch
15ad0 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 54  aracters long. T
15ae0 68 65 20 6e 74 68 20 63 68 61 72 61 63 74 65 72  he nth character
15af0 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e   of the.** strin
15b00 67 20 69 6e 64 69 63 61 74 65 73 20 74 68 65 20  g indicates the 
15b10 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20  column affinity 
15b20 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75  that should be u
15b30 73 65 64 20 66 6f 72 20 74 68 65 20 6e 74 68 0a  sed for the nth.
15b40 2a 2a 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69  ** memory cell i
15b50 6e 20 74 68 65 20 72 61 6e 67 65 2e 0a 2a 2f 0a  n the range..*/.
15b60 63 61 73 65 20 4f 50 5f 41 66 66 69 6e 69 74 79  case OP_Affinity
15b70 3a 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  : {.  const char
15b80 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 2f   *zAffinity;   /
15b90 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 74  * The affinity t
15ba0 6f 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a  o be applied */.
15bb0 20 20 63 68 61 72 20 63 41 66 66 3b 20 20 20 20    char cAff;    
15bc0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20             /* A 
15bd0 73 69 6e 67 6c 65 20 63 68 61 72 61 63 74 65 72  single character
15be0 20 6f 66 20 61 66 66 69 6e 69 74 79 20 2a 2f 0a   of affinity */.
15bf0 0a 20 20 7a 41 66 66 69 6e 69 74 79 20 3d 20 70  .  zAffinity = p
15c00 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73 65  Op->p4.z;.  asse
15c10 72 74 28 20 7a 41 66 66 69 6e 69 74 79 21 3d 30  rt( zAffinity!=0
15c20 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 41   );.  assert( zA
15c30 66 66 69 6e 69 74 79 5b 70 4f 70 2d 3e 70 32 5d  ffinity[pOp->p2]
15c40 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20  ==0 );.  pIn1 = 
15c50 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
15c60 20 20 77 68 69 6c 65 28 20 28 63 41 66 66 20 3d    while( (cAff =
15c70 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29 29   *(zAffinity++))
15c80 21 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72  !=0 ){.    asser
15c90 74 28 20 70 49 6e 31 20 3c 3d 20 26 70 2d 3e 61  t( pIn1 <= &p->a
15ca0 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  Mem[(p->nMem+1 -
15cb0 20 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b   p->nCursor)] );
15cc0 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
15cd0 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b  IsValid(pIn1) );
15ce0 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69  .    applyAffini
15cf0 74 79 28 70 49 6e 31 2c 20 63 41 66 66 2c 20 65  ty(pIn1, cAff, e
15d00 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 70 49  ncoding);.    pI
15d10 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61  n1++;.  }.  brea
15d20 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
15d30 20 4d 61 6b 65 52 65 63 6f 72 64 20 50 31 20 50   MakeRecord P1 P
15d40 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
15d50 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 6d 6b 72  opsis: r[P3]=mkr
15d60 65 63 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a  ec(r[P1@P2]).**.
15d70 2a 2a 20 43 6f 6e 76 65 72 74 20 50 32 20 72 65  ** Convert P2 re
15d80 67 69 73 74 65 72 73 20 62 65 67 69 6e 6e 69 6e  gisters beginnin
15d90 67 20 77 69 74 68 20 50 31 20 69 6e 74 6f 20 74  g with P1 into t
15da0 68 65 20 5b 72 65 63 6f 72 64 20 66 6f 72 6d 61  he [record forma
15db0 74 5d 0a 2a 2a 20 75 73 65 20 61 73 20 61 20 64  t].** use as a d
15dc0 61 74 61 20 72 65 63 6f 72 64 20 69 6e 20 61 20  ata record in a 
15dd0 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f  database table o
15de0 72 20 61 73 20 61 20 6b 65 79 0a 2a 2a 20 69 6e  r as a key.** in
15df0 20 61 6e 20 69 6e 64 65 78 2e 20 20 54 68 65 20   an index.  The 
15e00 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65  OP_Column opcode
15e10 20 63 61 6e 20 64 65 63 6f 64 65 20 74 68 65 20   can decode the 
15e20 72 65 63 6f 72 64 20 6c 61 74 65 72 2e 0a 2a 2a  record later..**
15e30 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20  .** P4 may be a 
15e40 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20 50  string that is P
15e50 32 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e  2 characters lon
15e60 67 2e 20 20 54 68 65 20 6e 74 68 20 63 68 61 72  g.  The nth char
15e70 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20  acter of the.** 
15e80 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73  string indicates
15e90 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69   the column affi
15ea0 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64  nity that should
15eb0 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65   be used for the
15ec0 20 6e 74 68 0a 2a 2a 20 66 69 65 6c 64 20 6f 66   nth.** field of
15ed0 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79 2e 0a   the index key..
15ee0 2a 2a 0a 2a 2a 20 54 68 65 20 6d 61 70 70 69 6e  **.** The mappin
15ef0 67 20 66 72 6f 6d 20 63 68 61 72 61 63 74 65 72  g from character
15f00 20 74 6f 20 61 66 66 69 6e 69 74 79 20 69 73 20   to affinity is 
15f10 67 69 76 65 6e 20 62 79 20 74 68 65 20 53 51 4c  given by the SQL
15f20 49 54 45 5f 41 46 46 5f 0a 2a 2a 20 6d 61 63 72  ITE_AFF_.** macr
15f30 6f 73 20 64 65 66 69 6e 65 64 20 69 6e 20 73 71  os defined in sq
15f40 6c 69 74 65 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a  liteInt.h..**.**
15f50 20 49 66 20 50 34 20 69 73 20 4e 55 4c 4c 20 74   If P4 is NULL t
15f60 68 65 6e 20 61 6c 6c 20 69 6e 64 65 78 20 66 69  hen all index fi
15f70 65 6c 64 73 20 68 61 76 65 20 74 68 65 20 61 66  elds have the af
15f80 66 69 6e 69 74 79 20 42 4c 4f 42 2e 0a 2a 2f 0a  finity BLOB..*/.
15f90 63 61 73 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f  case OP_MakeReco
15fa0 72 64 3a 20 7b 0a 20 20 75 38 20 2a 7a 4e 65 77  rd: {.  u8 *zNew
15fb0 52 65 63 6f 72 64 3b 20 20 20 20 20 20 20 20 2f  Record;        /
15fc0 2a 20 41 20 62 75 66 66 65 72 20 74 6f 20 68 6f  * A buffer to ho
15fd0 6c 64 20 74 68 65 20 64 61 74 61 20 66 6f 72 20  ld the data for 
15fe0 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a  the new record *
15ff0 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 20 20  /.  Mem *pRec;  
16000 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
16010 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a  e new record */.
16020 20 20 75 36 34 20 6e 44 61 74 61 3b 20 20 20 20    u64 nData;    
16030 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
16040 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64  er of bytes of d
16050 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 69  ata space */.  i
16060 6e 74 20 6e 48 64 72 3b 20 20 20 20 20 20 20 20  nt nHdr;        
16070 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
16080 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61 64  of bytes of head
16090 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 36  er space */.  i6
160a0 34 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20  4 nByte;        
160b0 20 20 20 20 20 2f 2a 20 44 61 74 61 20 73 70 61       /* Data spa
160c0 63 65 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  ce required for 
160d0 74 68 69 73 20 72 65 63 6f 72 64 20 2a 2f 0a 20  this record */. 
160e0 20 69 36 34 20 6e 5a 65 72 6f 3b 20 20 20 20 20   i64 nZero;     
160f0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
16100 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73 20  r of zero bytes 
16110 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
16120 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
16130 74 20 6e 56 61 72 69 6e 74 3b 20 20 20 20 20 20  t nVarint;      
16140 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
16150 66 20 62 79 74 65 73 20 69 6e 20 61 20 76 61 72  f bytes in a var
16160 69 6e 74 20 2a 2f 0a 20 20 75 33 32 20 73 65 72  int */.  u32 ser
16170 69 61 6c 5f 74 79 70 65 3b 20 20 20 20 20 20 20  ial_type;       
16180 2f 2a 20 54 79 70 65 20 66 69 65 6c 64 20 2a 2f  /* Type field */
16190 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 30 3b 20  .  Mem *pData0; 
161a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
161b0 73 74 20 66 69 65 6c 64 20 74 6f 20 62 65 20 63  st field to be c
161c0 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20 74 68 65  ombined into the
161d0 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d   record */.  Mem
161e0 20 2a 70 4c 61 73 74 3b 20 20 20 20 20 20 20 20   *pLast;        
161f0 20 20 20 20 2f 2a 20 4c 61 73 74 20 66 69 65 6c      /* Last fiel
16200 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  d of the record 
16210 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b  */.  int nField;
16220 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
16230 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20  umber of fields 
16240 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  in the record */
16250 0a 20 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69  .  char *zAffini
16260 74 79 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ty;       /* The
16270 20 61 66 66 69 6e 69 74 79 20 73 74 72 69 6e 67   affinity string
16280 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20   for the record 
16290 2a 2f 0a 20 20 69 6e 74 20 66 69 6c 65 5f 66 6f  */.  int file_fo
162a0 72 6d 61 74 3b 20 20 20 20 20 20 20 2f 2a 20 46  rmat;       /* F
162b0 69 6c 65 20 66 6f 72 6d 61 74 20 74 6f 20 75 73  ile format to us
162c0 65 20 66 6f 72 20 65 6e 63 6f 64 69 6e 67 20 2a  e for encoding *
162d0 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20  /.  int i;      
162e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70             /* Sp
162f0 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65 77  ace used in zNew
16300 52 65 63 6f 72 64 5b 5d 20 68 65 61 64 65 72 20  Record[] header 
16310 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20 20  */.  int j;     
16320 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
16330 70 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65  pace used in zNe
16340 77 52 65 63 6f 72 64 5b 5d 20 63 6f 6e 74 65 6e  wRecord[] conten
16350 74 20 2a 2f 0a 20 20 75 33 32 20 6c 65 6e 3b 20  t */.  u32 len; 
16360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
16370 20 4c 65 6e 67 74 68 20 6f 66 20 61 20 66 69 65   Length of a fie
16380 6c 64 20 2a 2f 0a 0a 20 20 2f 2a 20 41 73 73 75  ld */..  /* Assu
16390 6d 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20  ming the record 
163a0 63 6f 6e 74 61 69 6e 73 20 4e 20 66 69 65 6c 64  contains N field
163b0 73 2c 20 74 68 65 20 72 65 63 6f 72 64 20 66 6f  s, the record fo
163c0 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20  rmat looks.  ** 
163d0 6c 69 6b 65 20 74 68 69 73 3a 0a 20 20 2a 2a 0a  like this:.  **.
163e0 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d    ** -----------
163f0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16400 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16410 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16420 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20  -------------.  
16430 2a 2a 20 7c 20 68 64 72 2d 73 69 7a 65 20 7c 20  ** | hdr-size | 
16440 74 79 70 65 20 30 20 7c 20 74 79 70 65 20 31 20  type 0 | type 1 
16450 7c 20 2e 2e 2e 20 7c 20 74 79 70 65 20 4e 2d 31  | ... | type N-1
16460 20 7c 20 64 61 74 61 30 20 7c 20 2e 2e 2e 20 7c   | data0 | ... |
16470 20 64 61 74 61 20 4e 2d 31 20 7c 20 0a 20 20 2a   data N-1 | .  *
16480 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  * --------------
16490 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
164a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
164b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
164c0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a  ----------.  **.
164d0 20 20 2a 2a 20 44 61 74 61 28 30 29 20 69 73 20    ** Data(0) is 
164e0 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73  taken from regis
164f0 74 65 72 20 50 31 2e 20 20 44 61 74 61 28 31 29  ter P1.  Data(1)
16500 20 63 6f 6d 65 73 20 66 72 6f 6d 20 72 65 67 69   comes from regi
16510 73 74 65 72 20 50 31 2b 31 0a 20 20 2a 2a 20 61  ster P1+1.  ** a
16520 6e 64 20 73 6f 20 66 6f 72 74 68 2e 0a 20 20 2a  nd so forth..  *
16530 2a 0a 20 20 2a 2a 20 45 61 63 68 20 74 79 70 65  *.  ** Each type
16540 20 66 69 65 6c 64 20 69 73 20 61 20 76 61 72 69   field is a vari
16550 6e 74 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20  nt representing 
16560 74 68 65 20 73 65 72 69 61 6c 20 74 79 70 65 20  the serial type 
16570 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20 63 6f 72  of the .  ** cor
16580 72 65 73 70 6f 6e 64 69 6e 67 20 64 61 74 61 20  responding data 
16590 65 6c 65 6d 65 6e 74 20 28 73 65 65 20 73 71 6c  element (see sql
165a0 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
165b0 70 65 28 29 29 2e 20 54 68 65 0a 20 20 2a 2a 20  pe()). The.  ** 
165c0 68 64 72 2d 73 69 7a 65 20 66 69 65 6c 64 20 69  hdr-size field i
165d0 73 20 61 6c 73 6f 20 61 20 76 61 72 69 6e 74 20  s also a varint 
165e0 77 68 69 63 68 20 69 73 20 74 68 65 20 6f 66 66  which is the off
165f0 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67  set from the beg
16600 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66 20 74  inning.  ** of t
16610 68 65 20 72 65 63 6f 72 64 20 74 6f 20 64 61 74  he record to dat
16620 61 30 2e 0a 20 20 2a 2f 0a 20 20 6e 44 61 74 61  a0..  */.  nData
16630 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a   = 0;         /*
16640 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
16650 20 6f 66 20 64 61 74 61 20 73 70 61 63 65 20 2a   of data space *
16660 2f 0a 20 20 6e 48 64 72 20 3d 20 30 3b 20 20 20  /.  nHdr = 0;   
16670 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
16680 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61   of bytes of hea
16690 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e  der space */.  n
166a0 5a 65 72 6f 20 3d 20 30 3b 20 20 20 20 20 20 20  Zero = 0;       
166b0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a    /* Number of z
166c0 65 72 6f 20 62 79 74 65 73 20 61 74 20 74 68 65  ero bytes at the
166d0 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f   end of the reco
166e0 72 64 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20 3d  rd */.  nField =
166f0 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41 66 66   pOp->p1;.  zAff
16700 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e  inity = pOp->p4.
16710 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69  z;.  assert( nFi
16720 65 6c 64 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32  eld>0 && pOp->p2
16730 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 46  >0 && pOp->p2+nF
16740 69 65 6c 64 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ield<=(p->nMem+1
16750 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31   - p->nCursor)+1
16760 20 29 3b 0a 20 20 70 44 61 74 61 30 20 3d 20 26   );.  pData0 = &
16770 61 4d 65 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20  aMem[nField];.  
16780 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 32  nField = pOp->p2
16790 3b 0a 20 20 70 4c 61 73 74 20 3d 20 26 70 44 61  ;.  pLast = &pDa
167a0 74 61 30 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20  ta0[nField-1];. 
167b0 20 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70   file_format = p
167c0 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f  ->minWriteFileFo
167d0 72 6d 61 74 3b 0a 0a 20 20 2f 2a 20 49 64 65 6e  rmat;..  /* Iden
167e0 74 69 66 79 20 74 68 65 20 6f 75 74 70 75 74 20  tify the output 
167f0 72 65 67 69 73 74 65 72 20 2a 2f 0a 20 20 61 73  register */.  as
16800 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f  sert( pOp->p3<pO
16810 70 2d 3e 70 31 20 7c 7c 20 70 4f 70 2d 3e 70 33  p->p1 || pOp->p3
16820 3e 3d 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70  >=pOp->p1+pOp->p
16830 32 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  2 );.  pOut = &a
16840 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
16850 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
16860 28 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a  (p, pOut);..  /*
16870 20 41 70 70 6c 79 20 74 68 65 20 72 65 71 75 65   Apply the reque
16880 73 74 65 64 20 61 66 66 69 6e 69 74 79 20 74 6f  sted affinity to
16890 20 61 6c 6c 20 69 6e 70 75 74 73 0a 20 20 2a 2f   all inputs.  */
168a0 0a 20 20 61 73 73 65 72 74 28 20 70 44 61 74 61  .  assert( pData
168b0 30 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 69 66  0<=pLast );.  if
168c0 28 20 7a 41 66 66 69 6e 69 74 79 20 29 7b 0a 20  ( zAffinity ){. 
168d0 20 20 20 70 52 65 63 20 3d 20 70 44 61 74 61 30     pRec = pData0
168e0 3b 0a 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20  ;.    do{.      
168f0 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 52  applyAffinity(pR
16900 65 63 2b 2b 2c 20 2a 28 7a 41 66 66 69 6e 69 74  ec++, *(zAffinit
16910 79 2b 2b 29 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  y++), encoding);
16920 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 7a  .      assert( z
16930 41 66 66 69 6e 69 74 79 5b 30 5d 3d 3d 30 20 7c  Affinity[0]==0 |
16940 7c 20 70 52 65 63 3c 3d 70 4c 61 73 74 20 29 3b  | pRec<=pLast );
16950 0a 20 20 20 20 7d 77 68 69 6c 65 28 20 7a 41 66  .    }while( zAf
16960 66 69 6e 69 74 79 5b 30 5d 20 29 3b 0a 20 20 7d  finity[0] );.  }
16970 0a 0a 20 20 2f 2a 20 4c 6f 6f 70 20 74 68 72 6f  ..  /* Loop thro
16980 75 67 68 20 74 68 65 20 65 6c 65 6d 65 6e 74 73  ugh the elements
16990 20 74 68 61 74 20 77 69 6c 6c 20 6d 61 6b 65 20   that will make 
169a0 75 70 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f  up the record to
169b0 20 66 69 67 75 72 65 0a 20 20 2a 2a 20 6f 75 74   figure.  ** out
169c0 20 68 6f 77 20 6d 75 63 68 20 73 70 61 63 65 20   how much space 
169d0 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  is required for 
169e0 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 2e 0a  the new record..
169f0 20 20 2a 2f 0a 20 20 70 52 65 63 20 3d 20 70 4c    */.  pRec = pL
16a00 61 73 74 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 61  ast;.  do{.    a
16a10 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
16a20 64 28 70 52 65 63 29 20 29 3b 0a 20 20 20 20 70  d(pRec) );.    p
16a30 52 65 63 2d 3e 75 54 65 6d 70 20 3d 20 73 65 72  Rec->uTemp = ser
16a40 69 61 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69 74  ial_type = sqlit
16a50 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65  e3VdbeSerialType
16a60 28 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d  (pRec, file_form
16a70 61 74 2c 20 26 6c 65 6e 29 3b 0a 20 20 20 20 69  at, &len);.    i
16a80 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26  f( pRec->flags &
16a90 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20   MEM_Zero ){.   
16aa0 20 20 20 69 66 28 20 6e 44 61 74 61 20 29 7b 0a     if( nData ){.
16ab0 20 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69          if( sqli
16ac0 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64  te3VdbeMemExpand
16ad0 42 6c 6f 62 28 70 52 65 63 29 20 29 20 67 6f 74  Blob(pRec) ) got
16ae0 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20 20  o no_mem;.      
16af0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 6e  }else{.        n
16b00 5a 65 72 6f 20 2b 3d 20 70 52 65 63 2d 3e 75 2e  Zero += pRec->u.
16b10 6e 5a 65 72 6f 3b 0a 20 20 20 20 20 20 20 20 6c  nZero;.        l
16b20 65 6e 20 2d 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a  en -= pRec->u.nZ
16b30 65 72 6f 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ero;.      }.   
16b40 20 7d 0a 20 20 20 20 6e 44 61 74 61 20 2b 3d 20   }.    nData += 
16b50 6c 65 6e 3b 0a 20 20 20 20 74 65 73 74 63 61 73  len;.    testcas
16b60 65 28 20 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d  e( serial_type==
16b70 31 32 37 20 29 3b 0a 20 20 20 20 74 65 73 74 63  127 );.    testc
16b80 61 73 65 28 20 73 65 72 69 61 6c 5f 74 79 70 65  ase( serial_type
16b90 3d 3d 31 32 38 20 29 3b 0a 20 20 20 20 6e 48 64  ==128 );.    nHd
16ba0 72 20 2b 3d 20 73 65 72 69 61 6c 5f 74 79 70 65  r += serial_type
16bb0 3c 3d 31 32 37 20 3f 20 31 20 3a 20 73 71 6c 69  <=127 ? 1 : sqli
16bc0 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 73 65 72  te3VarintLen(ser
16bd0 69 61 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20 69  ial_type);.    i
16be0 66 28 20 70 52 65 63 3d 3d 70 44 61 74 61 30 20  f( pRec==pData0 
16bf0 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 70 52 65  ) break;.    pRe
16c00 63 2d 2d 3b 0a 20 20 7d 77 68 69 6c 65 28 31 29  c--;.  }while(1)
16c10 3b 0a 0a 20 20 2f 2a 20 45 56 49 44 45 4e 43 45  ;..  /* EVIDENCE
16c20 2d 4f 46 3a 20 52 2d 32 32 35 36 34 2d 31 31 36  -OF: R-22564-116
16c30 34 37 20 54 68 65 20 68 65 61 64 65 72 20 62 65  47 The header be
16c40 67 69 6e 73 20 77 69 74 68 20 61 20 73 69 6e 67  gins with a sing
16c50 6c 65 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20 77  le varint.  ** w
16c60 68 69 63 68 20 64 65 74 65 72 6d 69 6e 65 73 20  hich determines 
16c70 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72  the total number
16c80 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65   of bytes in the
16c90 20 68 65 61 64 65 72 2e 20 54 68 65 20 76 61 72   header. The var
16ca0 69 6e 74 0a 20 20 2a 2a 20 76 61 6c 75 65 20 69  int.  ** value i
16cb0 73 20 74 68 65 20 73 69 7a 65 20 6f 66 20 74 68  s the size of th
16cc0 65 20 68 65 61 64 65 72 20 69 6e 20 62 79 74 65  e header in byte
16cd0 73 20 69 6e 63 6c 75 64 69 6e 67 20 74 68 65 20  s including the 
16ce0 73 69 7a 65 20 76 61 72 69 6e 74 0a 20 20 2a 2a  size varint.  **
16cf0 20 69 74 73 65 6c 66 2e 20 2a 2f 0a 20 20 74 65   itself. */.  te
16d00 73 74 63 61 73 65 28 20 6e 48 64 72 3d 3d 31 32  stcase( nHdr==12
16d10 36 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  6 );.  testcase(
16d20 20 6e 48 64 72 3d 3d 31 32 37 20 29 3b 0a 20 20   nHdr==127 );.  
16d30 69 66 28 20 6e 48 64 72 3c 3d 31 32 36 20 29 7b  if( nHdr<=126 ){
16d40 0a 20 20 20 20 2f 2a 20 54 68 65 20 63 6f 6d 6d  .    /* The comm
16d50 6f 6e 20 63 61 73 65 20 2a 2f 0a 20 20 20 20 6e  on case */.    n
16d60 48 64 72 20 2b 3d 20 31 3b 0a 20 20 7d 65 6c 73  Hdr += 1;.  }els
16d70 65 7b 0a 20 20 20 20 2f 2a 20 52 61 72 65 20 63  e{.    /* Rare c
16d80 61 73 65 20 6f 66 20 61 20 72 65 61 6c 6c 79 20  ase of a really 
16d90 6c 61 72 67 65 20 68 65 61 64 65 72 20 2a 2f 0a  large header */.
16da0 20 20 20 20 6e 56 61 72 69 6e 74 20 3d 20 73 71      nVarint = sq
16db0 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e  lite3VarintLen(n
16dc0 48 64 72 29 3b 0a 20 20 20 20 6e 48 64 72 20 2b  Hdr);.    nHdr +
16dd0 3d 20 6e 56 61 72 69 6e 74 3b 0a 20 20 20 20 69  = nVarint;.    i
16de0 66 28 20 6e 56 61 72 69 6e 74 3c 73 71 6c 69 74  f( nVarint<sqlit
16df0 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72  e3VarintLen(nHdr
16e00 29 20 29 20 6e 48 64 72 2b 2b 3b 0a 20 20 7d 0a  ) ) nHdr++;.  }.
16e10 20 20 6e 42 79 74 65 20 3d 20 6e 48 64 72 2b 6e    nByte = nHdr+n
16e20 44 61 74 61 3b 0a 20 20 69 66 28 20 6e 42 79 74  Data;.  if( nByt
16e30 65 2b 6e 5a 65 72 6f 3e 64 62 2d 3e 61 4c 69 6d  e+nZero>db->aLim
16e40 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
16e50 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67  LENGTH] ){.    g
16e60 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d  oto too_big;.  }
16e70 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65  ..  /* Make sure
16e80 20 74 68 65 20 6f 75 74 70 75 74 20 72 65 67 69   the output regi
16e90 73 74 65 72 20 68 61 73 20 61 20 62 75 66 66 65  ster has a buffe
16ea0 72 20 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74  r large enough t
16eb0 6f 20 73 74 6f 72 65 20 0a 20 20 2a 2a 20 74 68  o store .  ** th
16ec0 65 20 6e 65 77 20 72 65 63 6f 72 64 2e 20 54 68  e new record. Th
16ed0 65 20 6f 75 74 70 75 74 20 72 65 67 69 73 74 65  e output registe
16ee0 72 20 28 70 4f 70 2d 3e 70 33 29 20 69 73 20 6e  r (pOp->p3) is n
16ef0 6f 74 20 61 6c 6c 6f 77 65 64 20 74 6f 0a 20 20  ot allowed to.  
16f00 2a 2a 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65  ** be one of the
16f10 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73   input registers
16f20 20 28 62 65 63 61 75 73 65 20 74 68 65 20 66 6f   (because the fo
16f30 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 20 74 6f 0a  llowing call to.
16f40 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65    ** sqlite3Vdbe
16f50 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65 73 69 7a  MemClearAndResiz
16f60 65 28 29 20 63 6f 75 6c 64 20 63 6c 6f 62 62 65  e() could clobbe
16f70 72 20 74 68 65 20 76 61 6c 75 65 20 62 65 66 6f  r the value befo
16f80 72 65 20 69 74 20 69 73 20 75 73 65 64 29 2e 0a  re it is used)..
16f90 20 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74    */.  if( sqlit
16fa0 65 33 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e  e3VdbeMemClearAn
16fb0 64 52 65 73 69 7a 65 28 70 4f 75 74 2c 20 28 69  dResize(pOut, (i
16fc0 6e 74 29 6e 42 79 74 65 29 20 29 7b 0a 20 20 20  nt)nByte) ){.   
16fd0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
16fe0 7d 0a 20 20 7a 4e 65 77 52 65 63 6f 72 64 20 3d  }.  zNewRecord =
16ff0 20 28 75 38 20 2a 29 70 4f 75 74 2d 3e 7a 3b 0a   (u8 *)pOut->z;.
17000 0a 20 20 2f 2a 20 57 72 69 74 65 20 74 68 65 20  .  /* Write the 
17010 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 20 3d 20  record */.  i = 
17020 70 75 74 56 61 72 69 6e 74 33 32 28 7a 4e 65 77  putVarint32(zNew
17030 52 65 63 6f 72 64 2c 20 6e 48 64 72 29 3b 0a 20  Record, nHdr);. 
17040 20 6a 20 3d 20 6e 48 64 72 3b 0a 20 20 61 73 73   j = nHdr;.  ass
17050 65 72 74 28 20 70 44 61 74 61 30 3c 3d 70 4c 61  ert( pData0<=pLa
17060 73 74 20 29 3b 0a 20 20 70 52 65 63 20 3d 20 70  st );.  pRec = p
17070 44 61 74 61 30 3b 0a 20 20 64 6f 7b 0a 20 20 20  Data0;.  do{.   
17080 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20 70   serial_type = p
17090 52 65 63 2d 3e 75 54 65 6d 70 3b 0a 20 20 20 20  Rec->uTemp;.    
170a0 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20  /* EVIDENCE-OF: 
170b0 52 2d 30 36 35 32 39 2d 34 37 33 36 32 20 46 6f  R-06529-47362 Fo
170c0 6c 6c 6f 77 69 6e 67 20 74 68 65 20 73 69 7a 65  llowing the size
170d0 20 76 61 72 69 6e 74 20 61 72 65 20 6f 6e 65 20   varint are one 
170e0 6f 72 20 6d 6f 72 65 0a 20 20 20 20 2a 2a 20 61  or more.    ** a
170f0 64 64 69 74 69 6f 6e 61 6c 20 76 61 72 69 6e 74  dditional varint
17100 73 2c 20 6f 6e 65 20 70 65 72 20 63 6f 6c 75 6d  s, one per colum
17110 6e 2e 20 2a 2f 0a 20 20 20 20 69 20 2b 3d 20 70  n. */.    i += p
17120 75 74 56 61 72 69 6e 74 33 32 28 26 7a 4e 65 77  utVarint32(&zNew
17130 52 65 63 6f 72 64 5b 69 5d 2c 20 73 65 72 69 61  Record[i], seria
17140 6c 5f 74 79 70 65 29 3b 20 20 20 20 20 20 20 20  l_type);        
17150 20 20 20 20 2f 2a 20 73 65 72 69 61 6c 20 74 79      /* serial ty
17160 70 65 20 2a 2f 0a 20 20 20 20 2f 2a 20 45 56 49  pe */.    /* EVI
17170 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 36 34 35 33  DENCE-OF: R-6453
17180 36 2d 35 31 37 32 38 20 54 68 65 20 76 61 6c 75  6-51728 The valu
17190 65 73 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75  es for each colu
171a0 6d 6e 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  mn in the record
171b0 0a 20 20 20 20 2a 2a 20 69 6d 6d 65 64 69 61 74  .    ** immediat
171c0 65 6c 79 20 66 6f 6c 6c 6f 77 20 74 68 65 20 68  ely follow the h
171d0 65 61 64 65 72 2e 20 2a 2f 0a 20 20 20 20 6a 20  eader. */.    j 
171e0 2b 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  += sqlite3VdbeSe
171f0 72 69 61 6c 50 75 74 28 26 7a 4e 65 77 52 65 63  rialPut(&zNewRec
17200 6f 72 64 5b 6a 5d 2c 20 70 52 65 63 2c 20 73 65  ord[j], pRec, se
17210 72 69 61 6c 5f 74 79 70 65 29 3b 20 2f 2a 20 63  rial_type); /* c
17220 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20 7d 77 68 69  ontent */.  }whi
17230 6c 65 28 20 28 2b 2b 70 52 65 63 29 3c 3d 70 4c  le( (++pRec)<=pL
17240 61 73 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ast );.  assert(
17250 20 69 3d 3d 6e 48 64 72 20 29 3b 0a 20 20 61 73   i==nHdr );.  as
17260 73 65 72 74 28 20 6a 3d 3d 6e 42 79 74 65 20 29  sert( j==nByte )
17270 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
17280 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p3>0 && pOp->p
17290 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  3<=(p->nMem+1 - 
172a0 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
172b0 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29   pOut->n = (int)
172c0 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 66  nByte;.  pOut->f
172d0 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f 62 3b  lags = MEM_Blob;
172e0 0a 20 20 69 66 28 20 6e 5a 65 72 6f 20 29 7b 0a  .  if( nZero ){.
172f0 20 20 20 20 70 4f 75 74 2d 3e 75 2e 6e 5a 65 72      pOut->u.nZer
17300 6f 20 3d 20 6e 5a 65 72 6f 3b 0a 20 20 20 20 70  o = nZero;.    p
17310 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45  Out->flags |= ME
17320 4d 5f 5a 65 72 6f 3b 0a 20 20 7d 0a 20 20 70 4f  M_Zero;.  }.  pO
17330 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45  ut->enc = SQLITE
17340 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61  _UTF8;  /* In ca
17350 73 65 20 74 68 65 20 62 6c 6f 62 20 69 73 20 65  se the blob is e
17360 76 65 72 20 63 6f 6e 76 65 72 74 65 64 20 74 6f  ver converted to
17370 20 74 65 78 74 20 2a 2f 0a 20 20 52 45 47 49 53   text */.  REGIS
17380 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
17390 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50 44 41  3, pOut);.  UPDA
173a0 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
173b0 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
173c0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
173d0 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  unt P1 P2 * * *.
173e0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
173f0 32 5d 3d 63 6f 75 6e 74 28 29 0a 2a 2a 0a 2a 2a  2]=count().**.**
17400 20 53 74 6f 72 65 20 74 68 65 20 6e 75 6d 62 65   Store the numbe
17410 72 20 6f 66 20 65 6e 74 72 69 65 73 20 28 61 6e  r of entries (an
17420 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 29 20   integer value) 
17430 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  in the table or 
17440 69 6e 64 65 78 20 0a 2a 2a 20 6f 70 65 6e 65 64  index .** opened
17450 20 62 79 20 63 75 72 73 6f 72 20 50 31 20 69 6e   by cursor P1 in
17460 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2f 0a   register P2.*/.
17470 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
17480 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a 63  MIT_BTREECOUNT.c
17490 61 73 65 20 4f 50 5f 43 6f 75 6e 74 3a 20 7b 20  ase OP_Count: { 
174a0 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
174b0 2a 2f 0a 20 20 69 36 34 20 6e 45 6e 74 72 79 3b  */.  i64 nEntry;
174c0 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
174d0 73 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  sr;..  assert( p
174e0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
174f0 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
17500 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 70  YPE_BTREE );.  p
17510 43 72 73 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b  Crsr = p->apCsr[
17520 70 4f 70 2d 3e 70 31 5d 2d 3e 75 63 2e 70 43 75  pOp->p1]->uc.pCu
17530 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20  rsor;.  assert( 
17540 70 43 72 73 72 20 29 3b 0a 20 20 6e 45 6e 74 72  pCrsr );.  nEntr
17550 79 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e  y = 0;  /* Not n
17560 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65  eeded.  Only use
17570 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77  d to silence a w
17580 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72 63 20  arning. */.  rc 
17590 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6f  = sqlite3BtreeCo
175a0 75 6e 74 28 70 43 72 73 72 2c 20 26 6e 45 6e 74  unt(pCrsr, &nEnt
175b0 72 79 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  ry);.  if( rc ) 
175c0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
175d0 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 4f 75 74 20  o_error;.  pOut 
175e0 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
175f0 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74  (p, pOp);.  pOut
17600 2d 3e 75 2e 69 20 3d 20 6e 45 6e 74 72 79 3b 0a  ->u.i = nEntry;.
17610 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
17620 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 61  f../* Opcode: Sa
17630 76 65 70 6f 69 6e 74 20 50 31 20 2a 20 2a 20 50  vepoint P1 * * P
17640 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c 20  4 *.**.** Open, 
17650 72 65 6c 65 61 73 65 20 6f 72 20 72 6f 6c 6c 62  release or rollb
17660 61 63 6b 20 74 68 65 20 73 61 76 65 70 6f 69 6e  ack the savepoin
17670 74 20 6e 61 6d 65 64 20 62 79 20 70 61 72 61 6d  t named by param
17680 65 74 65 72 20 50 34 2c 20 64 65 70 65 6e 64 69  eter P4, dependi
17690 6e 67 0a 2a 2a 20 6f 6e 20 74 68 65 20 76 61 6c  ng.** on the val
176a0 75 65 20 6f 66 20 50 31 2e 20 54 6f 20 6f 70 65  ue of P1. To ope
176b0 6e 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e  n a new savepoin
176c0 74 2c 20 50 31 3d 3d 30 2e 20 54 6f 20 72 65 6c  t, P1==0. To rel
176d0 65 61 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 6e  ease (commit) an
176e0 0a 2a 2a 20 65 78 69 73 74 69 6e 67 20 73 61 76  .** existing sav
176f0 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 31 2c 20 6f  epoint, P1==1, o
17700 72 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e  r to rollback an
17710 20 65 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f   existing savepo
17720 69 6e 74 20 50 31 3d 3d 32 2e 0a 2a 2f 0a 63 61  int P1==2..*/.ca
17730 73 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 3a  se OP_Savepoint:
17740 20 7b 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20   {.  int p1;    
17750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17760 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f 66       /* Value of
17770 20 50 31 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20   P1 operand */. 
17780 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
17790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177a0 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 73 61 76 65   /* Name of save
177b0 70 6f 69 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e  point */.  int n
177c0 4e 61 6d 65 3b 0a 20 20 53 61 76 65 70 6f 69 6e  Name;.  Savepoin
177d0 74 20 2a 70 4e 65 77 3b 0a 20 20 53 61 76 65 70  t *pNew;.  Savep
177e0 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74  oint *pSavepoint
177f0 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70  ;.  Savepoint *p
17800 54 6d 70 3b 0a 20 20 69 6e 74 20 69 53 61 76 65  Tmp;.  int iSave
17810 70 6f 69 6e 74 3b 0a 20 20 69 6e 74 20 69 69 3b  point;.  int ii;
17820 0a 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31  ..  p1 = pOp->p1
17830 3b 0a 20 20 7a 4e 61 6d 65 20 3d 20 70 4f 70 2d  ;.  zName = pOp-
17840 3e 70 34 2e 7a 3b 0a 0a 20 20 2f 2a 20 41 73 73  >p4.z;..  /* Ass
17850 65 72 74 20 74 68 61 74 20 74 68 65 20 70 31 20  ert that the p1 
17860 70 61 72 61 6d 65 74 65 72 20 69 73 20 76 61 6c  parameter is val
17870 69 64 2e 20 41 6c 73 6f 20 74 68 61 74 20 69 66  id. Also that if
17880 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65   there is no ope
17890 6e 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63 74 69  n.  ** transacti
178a0 6f 6e 2c 20 74 68 65 6e 20 74 68 65 72 65 20 63  on, then there c
178b0 61 6e 6e 6f 74 20 62 65 20 61 6e 79 20 73 61 76  annot be any sav
178c0 65 70 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f 0a 20  epoints. .  */. 
178d0 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61   assert( db->pSa
178e0 76 65 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20 64 62  vepoint==0 || db
178f0 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20  ->autoCommit==0 
17900 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31 3d  );.  assert( p1=
17910 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e  =SAVEPOINT_BEGIN
17920 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ||p1==SAVEPOINT_
17930 52 45 4c 45 41 53 45 7c 7c 70 31 3d 3d 53 41 56  RELEASE||p1==SAV
17940 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20  EPOINT_ROLLBACK 
17950 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  );.  assert( db-
17960 3e 70 53 61 76 65 70 6f 69 6e 74 20 7c 7c 20 64  >pSavepoint || d
17970 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  b->isTransaction
17980 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a  Savepoint==0 );.
17990 20 20 61 73 73 65 72 74 28 20 63 68 65 63 6b 53    assert( checkS
179a0 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62  avepointCount(db
179b0 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ) );.  assert( p
179c0 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 0a  ->bIsReader );..
179d0 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f    if( p1==SAVEPO
179e0 49 4e 54 5f 42 45 47 49 4e 20 29 7b 0a 20 20 20  INT_BEGIN ){.   
179f0 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 57 72   if( db->nVdbeWr
17a00 69 74 65 3e 30 20 29 7b 0a 20 20 20 20 20 20 2f  ite>0 ){.      /
17a10 2a 20 41 20 6e 65 77 20 73 61 76 65 70 6f 69 6e  * A new savepoin
17a20 74 20 63 61 6e 6e 6f 74 20 62 65 20 63 72 65 61  t cannot be crea
17a30 74 65 64 20 69 66 20 74 68 65 72 65 20 61 72 65  ted if there are
17a40 20 61 63 74 69 76 65 20 77 72 69 74 65 20 0a 20   active write . 
17a50 20 20 20 20 20 2a 2a 20 73 74 61 74 65 6d 65 6e       ** statemen
17a60 74 73 20 28 69 2e 65 2e 20 6f 70 65 6e 20 72 65  ts (i.e. open re
17a70 61 64 2f 77 72 69 74 65 20 69 6e 63 72 65 6d 65  ad/write increme
17a80 6e 74 61 6c 20 62 6c 6f 62 20 68 61 6e 64 6c 65  ntal blob handle
17a90 73 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  s)..      */.   
17aa0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
17ab0 72 6f 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20 6f  ror(p, "cannot o
17ac0 70 65 6e 20 73 61 76 65 70 6f 69 6e 74 20 2d 20  pen savepoint - 
17ad0 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69  SQL statements i
17ae0 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20  n progress");.  
17af0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
17b00 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  BUSY;.    }else{
17b10 0a 20 20 20 20 20 20 6e 4e 61 6d 65 20 3d 20 73  .      nName = s
17b20 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
17b30 4e 61 6d 65 29 3b 0a 0a 23 69 66 6e 64 65 66 20  Name);..#ifndef 
17b40 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
17b50 55 41 4c 54 41 42 4c 45 0a 20 20 20 20 20 20 2f  UALTABLE.      /
17b60 2a 20 54 68 69 73 20 63 61 6c 6c 20 69 73 20 4f  * This call is O
17b70 6b 20 65 76 65 6e 20 69 66 20 74 68 69 73 20 73  k even if this s
17b80 61 76 65 70 6f 69 6e 74 20 69 73 20 61 63 74 75  avepoint is actu
17b90 61 6c 6c 79 20 61 20 74 72 61 6e 73 61 63 74 69  ally a transacti
17ba0 6f 6e 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65  on.      ** save
17bb0 70 6f 69 6e 74 20 28 61 6e 64 20 74 68 65 72 65  point (and there
17bc0 66 6f 72 65 20 73 68 6f 75 6c 64 20 6e 6f 74 20  fore should not 
17bd0 70 72 6f 6d 70 74 20 78 53 61 76 65 70 6f 69 6e  prompt xSavepoin
17be0 74 28 29 29 20 63 61 6c 6c 62 61 63 6b 73 2e 0a  t()) callbacks..
17bf0 20 20 20 20 20 20 2a 2a 20 49 66 20 74 68 69 73        ** If this
17c00 20 69 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f   is a transactio
17c10 6e 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e  n savepoint bein
17c20 67 20 6f 70 65 6e 65 64 2c 20 69 74 20 69 73 20  g opened, it is 
17c30 67 75 61 72 61 6e 74 65 65 64 0a 20 20 20 20 20  guaranteed.     
17c40 20 2a 2a 20 74 68 61 74 20 74 68 65 20 64 62 2d   ** that the db-
17c50 3e 61 56 54 72 61 6e 73 5b 5d 20 61 72 72 61 79  >aVTrans[] array
17c60 20 69 73 20 65 6d 70 74 79 2e 20 20 2a 2f 0a 20   is empty.  */. 
17c70 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d       assert( db-
17c80 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c  >autoCommit==0 |
17c90 7c 20 64 62 2d 3e 6e 56 54 72 61 6e 73 3d 3d 30  | db->nVTrans==0
17ca0 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   );.      rc = s
17cb0 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f  qlite3VtabSavepo
17cc0 69 6e 74 28 64 62 2c 20 53 41 56 45 50 4f 49 4e  int(db, SAVEPOIN
17cd0 54 5f 42 45 47 49 4e 2c 0a 20 20 20 20 20 20 20  T_BEGIN,.       
17ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17cf0 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 74           db->nSt
17d00 61 74 65 6d 65 6e 74 2b 64 62 2d 3e 6e 53 61 76  atement+db->nSav
17d10 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 69  epoint);.      i
17d20 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
17d30 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
17d40 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64  e_to_error;.#end
17d50 69 66 0a 0a 20 20 20 20 20 20 2f 2a 20 43 72 65  if..      /* Cre
17d60 61 74 65 20 61 20 6e 65 77 20 73 61 76 65 70 6f  ate a new savepo
17d70 69 6e 74 20 73 74 72 75 63 74 75 72 65 2e 20 2a  int structure. *
17d80 2f 0a 20 20 20 20 20 20 70 4e 65 77 20 3d 20 73  /.      pNew = s
17d90 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
17da0 77 4e 4e 28 64 62 2c 20 73 69 7a 65 6f 66 28 53  wNN(db, sizeof(S
17db0 61 76 65 70 6f 69 6e 74 29 2b 6e 4e 61 6d 65 2b  avepoint)+nName+
17dc0 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4e  1);.      if( pN
17dd0 65 77 20 29 7b 0a 20 20 20 20 20 20 20 20 70 4e  ew ){.        pN
17de0 65 77 2d 3e 7a 4e 61 6d 65 20 3d 20 28 63 68 61  ew->zName = (cha
17df0 72 20 2a 29 26 70 4e 65 77 5b 31 5d 3b 0a 20 20  r *)&pNew[1];.  
17e00 20 20 20 20 20 20 6d 65 6d 63 70 79 28 70 4e 65        memcpy(pNe
17e10 77 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 2c  w->zName, zName,
17e20 20 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 0a   nName+1);.    .
17e30 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68          /* If th
17e40 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 20 74  ere is no open t
17e50 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e  ransaction, then
17e60 20 6d 61 72 6b 20 74 68 69 73 20 61 73 20 61 20   mark this as a 
17e70 73 70 65 63 69 61 6c 0a 20 20 20 20 20 20 20 20  special.        
17e80 2a 2a 20 22 74 72 61 6e 73 61 63 74 69 6f 6e 20  ** "transaction 
17e90 73 61 76 65 70 6f 69 6e 74 22 2e 20 2a 2f 0a 20  savepoint". */. 
17ea0 20 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61         if( db->a
17eb0 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20  utoCommit ){.   
17ec0 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43         db->autoC
17ed0 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20 20  ommit = 0;.     
17ee0 20 20 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73       db->isTrans
17ef0 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20  actionSavepoint 
17f00 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  = 1;.        }el
17f10 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62  se{.          db
17f20 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a  ->nSavepoint++;.
17f30 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20          }..     
17f40 20 20 20 2f 2a 20 4c 69 6e 6b 20 74 68 65 20 6e     /* Link the n
17f50 65 77 20 73 61 76 65 70 6f 69 6e 74 20 69 6e 74  ew savepoint int
17f60 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  o the database h
17f70 61 6e 64 6c 65 27 73 20 6c 69 73 74 2e 20 2a 2f  andle's list. */
17f80 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 70  .        pNew->p
17f90 4e 65 78 74 20 3d 20 64 62 2d 3e 70 53 61 76 65  Next = db->pSave
17fa0 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20 20 64  point;.        d
17fb0 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20  b->pSavepoint = 
17fc0 70 4e 65 77 3b 0a 20 20 20 20 20 20 20 20 70 4e  pNew;.        pN
17fd0 65 77 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  ew->nDeferredCon
17fe0 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65  s = db->nDeferre
17ff0 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 20 20 70  dCons;.        p
18000 4e 65 77 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d  New->nDeferredIm
18010 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66  mCons = db->nDef
18020 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20  erredImmCons;.  
18030 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65      }.    }.  }e
18040 6c 73 65 7b 0a 20 20 20 20 69 53 61 76 65 70 6f  lse{.    iSavepo
18050 69 6e 74 20 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a  int = 0;..    /*
18060 20 46 69 6e 64 20 74 68 65 20 6e 61 6d 65 64 20   Find the named 
18070 73 61 76 65 70 6f 69 6e 74 2e 20 49 66 20 74 68  savepoint. If th
18080 65 72 65 20 69 73 20 6e 6f 20 73 75 63 68 20 73  ere is no such s
18090 61 76 65 70 6f 69 6e 74 2c 20 74 68 65 6e 20 61  avepoint, then a
180a0 6e 0a 20 20 20 20 2a 2a 20 61 6e 20 65 72 72 6f  n.    ** an erro
180b0 72 20 69 73 20 72 65 74 75 72 6e 65 64 20 74 6f  r is returned to
180c0 20 74 68 65 20 75 73 65 72 2e 20 20 2a 2f 0a 20   the user.  */. 
180d0 20 20 20 66 6f 72 28 0a 20 20 20 20 20 20 70 53     for(.      pS
180e0 61 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 70  avepoint = db->p
180f0 53 61 76 65 70 6f 69 6e 74 3b 20 0a 20 20 20 20  Savepoint; .    
18100 20 20 70 53 61 76 65 70 6f 69 6e 74 20 26 26 20    pSavepoint && 
18110 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 70  sqlite3StrICmp(p
18120 53 61 76 65 70 6f 69 6e 74 2d 3e 7a 4e 61 6d 65  Savepoint->zName
18130 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20  , zName);.      
18140 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61  pSavepoint = pSa
18150 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 0a 20  vepoint->pNext. 
18160 20 20 20 29 7b 0a 20 20 20 20 20 20 69 53 61 76     ){.      iSav
18170 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a  epoint++;.    }.
18180 20 20 20 20 69 66 28 20 21 70 53 61 76 65 70 6f      if( !pSavepo
18190 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  int ){.      sql
181a0 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
181b0 20 22 6e 6f 20 73 75 63 68 20 73 61 76 65 70 6f   "no such savepo
181c0 69 6e 74 3a 20 25 73 22 2c 20 7a 4e 61 6d 65 29  int: %s", zName)
181d0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  ;.      rc = SQL
181e0 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d  ITE_ERROR;.    }
181f0 65 6c 73 65 20 69 66 28 20 64 62 2d 3e 6e 56 64  else if( db->nVd
18200 62 65 57 72 69 74 65 3e 30 20 26 26 20 70 31 3d  beWrite>0 && p1=
18210 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41  =SAVEPOINT_RELEA
18220 53 45 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49  SE ){.      /* I
18230 74 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c  t is not possibl
18240 65 20 74 6f 20 72 65 6c 65 61 73 65 20 28 63 6f  e to release (co
18250 6d 6d 69 74 29 20 61 20 73 61 76 65 70 6f 69 6e  mmit) a savepoin
18260 74 20 69 66 20 74 68 65 72 65 20 61 72 65 20 0a  t if there are .
18270 20 20 20 20 20 20 2a 2a 20 61 63 74 69 76 65 20        ** active 
18280 77 72 69 74 65 20 73 74 61 74 65 6d 65 6e 74 73  write statements
18290 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
182a0 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f   sqlite3VdbeErro
182b0 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20 72 65 6c  r(p, "cannot rel
182c0 65 61 73 65 20 73 61 76 65 70 6f 69 6e 74 20 2d  ease savepoint -
182d0 20 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   ".             
182e0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53 51               "SQ
182f0 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  L statements in 
18300 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20  progress");.    
18310 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55    rc = SQLITE_BU
18320 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 0a  SY;.    }else{..
18330 20 20 20 20 20 20 2f 2a 20 44 65 74 65 72 6d 69        /* Determi
18340 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ne whether or no
18350 74 20 74 68 69 73 20 69 73 20 61 20 74 72 61 6e  t this is a tran
18360 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e  saction savepoin
18370 74 2e 20 49 66 20 73 6f 2c 0a 20 20 20 20 20 20  t. If so,.      
18380 2a 2a 20 61 6e 64 20 74 68 69 73 20 69 73 20 61  ** and this is a
18390 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64   RELEASE command
183a0 2c 20 74 68 65 6e 20 74 68 65 20 63 75 72 72 65  , then the curre
183b0 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 0a  nt transaction .
183c0 20 20 20 20 20 20 2a 2a 20 69 73 20 63 6f 6d 6d        ** is comm
183d0 69 74 74 65 64 2e 20 0a 20 20 20 20 20 20 2a 2f  itted. .      */
183e0 0a 20 20 20 20 20 20 69 6e 74 20 69 73 54 72 61  .      int isTra
183f0 6e 73 61 63 74 69 6f 6e 20 3d 20 70 53 61 76 65  nsaction = pSave
18400 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3d 3d 30 20  point->pNext==0 
18410 26 26 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63  && db->isTransac
18420 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 0a 20  tionSavepoint;. 
18430 20 20 20 20 20 69 66 28 20 69 73 54 72 61 6e 73       if( isTrans
18440 61 63 74 69 6f 6e 20 26 26 20 70 31 3d 3d 53 41  action && p1==SA
18450 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20  VEPOINT_RELEASE 
18460 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28  ){.        if( (
18470 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
18480 43 68 65 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d  CheckFk(p, 1))!=
18490 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
184a0 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65         goto vdbe
184b0 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20  _return;.       
184c0 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 61   }.        db->a
184d0 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20  utoCommit = 1;. 
184e0 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74         if( sqlit
184f0 65 33 56 64 62 65 48 61 6c 74 28 70 29 3d 3d 53  e3VdbeHalt(p)==S
18500 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20  QLITE_BUSY ){.  
18510 20 20 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20          p->pc = 
18520 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29  (int)(pOp - aOp)
18530 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  ;.          db->
18540 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a  autoCommit = 0;.
18550 20 20 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20            p->rc 
18560 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55  = rc = SQLITE_BU
18570 53 59 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f  SY;.          go
18580 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
18590 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
185a0 20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74    db->isTransact
185b0 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20 30  ionSavepoint = 0
185c0 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 70  ;.        rc = p
185d0 2d 3e 72 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73  ->rc;.      }els
185e0 65 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69  e{.        int i
185f0 73 53 63 68 65 6d 61 43 68 61 6e 67 65 3b 0a 20  sSchemaChange;. 
18600 20 20 20 20 20 20 20 69 53 61 76 65 70 6f 69 6e         iSavepoin
18610 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69  t = db->nSavepoi
18620 6e 74 20 2d 20 69 53 61 76 65 70 6f 69 6e 74 20  nt - iSavepoint 
18630 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28  - 1;.        if(
18640 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52   p1==SAVEPOINT_R
18650 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20 20 20 20 20  OLLBACK ){.     
18660 20 20 20 20 20 69 73 53 63 68 65 6d 61 43 68 61       isSchemaCha
18670 6e 67 65 20 3d 20 28 64 62 2d 3e 66 6c 61 67 73  nge = (db->flags
18680 20 26 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e   & SQLITE_Intern
18690 43 68 61 6e 67 65 73 29 21 3d 30 3b 0a 20 20 20  Changes)!=0;.   
186a0 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d 30 3b         for(ii=0;
186b0 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b   ii<db->nDb; ii+
186c0 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  +){.            
186d0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
186e0 65 54 72 69 70 41 6c 6c 43 75 72 73 6f 72 73 28  eTripAllCursors(
186f0 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c  db->aDb[ii].pBt,
18700 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18720 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 41          SQLITE_A
18730 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 2c 0a 20  BORT_ROLLBACK,. 
18740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18760 20 20 20 20 20 20 69 73 53 63 68 65 6d 61 43 68        isSchemaCh
18770 61 6e 67 65 3d 3d 30 29 3b 0a 20 20 20 20 20 20  ange==0);.      
18780 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
18790 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
187a0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
187b0 72 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  r;.          }. 
187c0 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
187d0 20 20 20 20 20 20 20 20 69 73 53 63 68 65 6d 61          isSchema
187e0 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 20 20  Change = 0;.    
187f0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 66 6f      }.        fo
18800 72 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e  r(ii=0; ii<db->n
18810 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20  Db; ii++){.     
18820 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
18830 33 42 74 72 65 65 53 61 76 65 70 6f 69 6e 74 28  3BtreeSavepoint(
18840 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c  db->aDb[ii].pBt,
18850 20 70 31 2c 20 69 53 61 76 65 70 6f 69 6e 74 29   p1, iSavepoint)
18860 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  ;.          if( 
18870 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
18880 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 6f 74  .            got
18890 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
188a0 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20  rror;.          
188b0 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  }.        }.    
188c0 20 20 20 20 69 66 28 20 69 73 53 63 68 65 6d 61      if( isSchema
188d0 43 68 61 6e 67 65 20 29 7b 0a 20 20 20 20 20 20  Change ){.      
188e0 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72      sqlite3Expir
188f0 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65  ePreparedStateme
18900 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 20 20 20  nts(db);.       
18910 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 41     sqlite3ResetA
18920 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65  llSchemasOfConne
18930 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20 20 20 20  ction(db);.     
18940 20 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 3d       db->flags =
18950 20 28 64 62 2d 3e 66 6c 61 67 73 20 7c 20 53 51   (db->flags | SQ
18960 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67  LITE_InternChang
18970 65 73 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  es);.        }. 
18980 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20       }.  .      
18990 2f 2a 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66  /* Regardless of
189a0 20 77 68 65 74 68 65 72 20 74 68 69 73 20 69 73   whether this is
189b0 20 61 20 52 45 4c 45 41 53 45 20 6f 72 20 52 4f   a RELEASE or RO
189c0 4c 4c 42 41 43 4b 2c 20 64 65 73 74 72 6f 79 20  LLBACK, destroy 
189d0 61 6c 6c 20 0a 20 20 20 20 20 20 2a 2a 20 73 61  all .      ** sa
189e0 76 65 70 6f 69 6e 74 73 20 6e 65 73 74 65 64 20  vepoints nested 
189f0 69 6e 73 69 64 65 20 6f 66 20 74 68 65 20 73 61  inside of the sa
18a00 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70  vepoint being op
18a10 65 72 61 74 65 64 20 6f 6e 2e 20 2a 2f 0a 20 20  erated on. */.  
18a20 20 20 20 20 77 68 69 6c 65 28 20 64 62 2d 3e 70      while( db->p
18a30 53 61 76 65 70 6f 69 6e 74 21 3d 70 53 61 76 65  Savepoint!=pSave
18a40 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 20  point ){.       
18a50 20 70 54 6d 70 20 3d 20 64 62 2d 3e 70 53 61 76   pTmp = db->pSav
18a60 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20 20  epoint;.        
18a70 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d  db->pSavepoint =
18a80 20 70 54 6d 70 2d 3e 70 4e 65 78 74 3b 0a 20 20   pTmp->pNext;.  
18a90 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46        sqlite3DbF
18aa0 72 65 65 28 64 62 2c 20 70 54 6d 70 29 3b 0a 20  ree(db, pTmp);. 
18ab0 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65         db->nSave
18ac0 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 7d  point--;.      }
18ad0 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 69 74  ..      /* If it
18ae0 20 69 73 20 61 20 52 45 4c 45 41 53 45 2c 20 74   is a RELEASE, t
18af0 68 65 6e 20 64 65 73 74 72 6f 79 20 74 68 65 20  hen destroy the 
18b00 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20  savepoint being 
18b10 6f 70 65 72 61 74 65 64 20 6f 6e 20 0a 20 20 20  operated on .   
18b20 20 20 20 2a 2a 20 74 6f 6f 2e 20 49 66 20 69 74     ** too. If it
18b30 20 69 73 20 61 20 52 4f 4c 4c 42 41 43 4b 20 54   is a ROLLBACK T
18b40 4f 2c 20 74 68 65 6e 20 73 65 74 20 74 68 65 20  O, then set the 
18b50 6e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72  number of deferr
18b60 65 64 20 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6e  ed .      ** con
18b70 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
18b80 6e 73 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68  ns present in th
18b90 65 20 64 61 74 61 62 61 73 65 20 74 6f 20 74 68  e database to th
18ba0 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 0a 20  e value stored. 
18bb0 20 20 20 20 20 2a 2a 20 77 68 65 6e 20 74 68 65       ** when the
18bc0 20 73 61 76 65 70 6f 69 6e 74 20 77 61 73 20 63   savepoint was c
18bd0 72 65 61 74 65 64 2e 20 20 2a 2f 0a 20 20 20 20  reated.  */.    
18be0 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f    if( p1==SAVEPO
18bf0 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20  INT_RELEASE ){. 
18c00 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
18c10 53 61 76 65 70 6f 69 6e 74 3d 3d 64 62 2d 3e 70  Savepoint==db->p
18c20 53 61 76 65 70 6f 69 6e 74 20 29 3b 0a 20 20 20  Savepoint );.   
18c30 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f       db->pSavepo
18c40 69 6e 74 20 3d 20 70 53 61 76 65 70 6f 69 6e 74  int = pSavepoint
18c50 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 20  ->pNext;.       
18c60 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
18c70 62 2c 20 70 53 61 76 65 70 6f 69 6e 74 29 3b 0a  b, pSavepoint);.
18c80 20 20 20 20 20 20 20 20 69 66 28 20 21 69 73 54          if( !isT
18c90 72 61 6e 73 61 63 74 69 6f 6e 20 29 7b 0a 20 20  ransaction ){.  
18ca0 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76          db->nSav
18cb0 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20  epoint--;.      
18cc0 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b    }.      }else{
18cd0 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 44 65  .        db->nDe
18ce0 66 65 72 72 65 64 43 6f 6e 73 20 3d 20 70 53 61  ferredCons = pSa
18cf0 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66 65 72 72  vepoint->nDeferr
18d00 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 20 20  edCons;.        
18d10 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  db->nDeferredImm
18d20 43 6f 6e 73 20 3d 20 70 53 61 76 65 70 6f 69 6e  Cons = pSavepoin
18d30 74 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  t->nDeferredImmC
18d40 6f 6e 73 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  ons;.      }..  
18d50 20 20 20 20 69 66 28 20 21 69 73 54 72 61 6e 73      if( !isTrans
18d60 61 63 74 69 6f 6e 20 7c 7c 20 70 31 3d 3d 53 41  action || p1==SA
18d70 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b  VEPOINT_ROLLBACK
18d80 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
18d90 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65   sqlite3VtabSave
18da0 70 6f 69 6e 74 28 64 62 2c 20 70 31 2c 20 69 53  point(db, p1, iS
18db0 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20  avepoint);.     
18dc0 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
18dd0 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72  E_OK ) goto abor
18de0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
18df0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
18e00 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  }.  if( rc ) got
18e10 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
18e20 72 72 6f 72 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a  rror;..  break;.
18e30 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 75  }../* Opcode: Au
18e40 74 6f 43 6f 6d 6d 69 74 20 50 31 20 50 32 20 2a  toCommit P1 P2 *
18e50 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74   * *.**.** Set t
18e60 68 65 20 64 61 74 61 62 61 73 65 20 61 75 74 6f  he database auto
18e70 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 20 74 6f 20  -commit flag to 
18e80 50 31 20 28 31 20 6f 72 20 30 29 2e 20 49 66 20  P1 (1 or 0). If 
18e90 50 32 20 69 73 20 74 72 75 65 2c 20 72 6f 6c 6c  P2 is true, roll
18ea0 0a 2a 2a 20 62 61 63 6b 20 61 6e 79 20 63 75 72  .** back any cur
18eb0 72 65 6e 74 6c 79 20 61 63 74 69 76 65 20 62 74  rently active bt
18ec0 72 65 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  ree transactions
18ed0 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20 61  . If there are a
18ee0 6e 79 20 61 63 74 69 76 65 0a 2a 2a 20 56 4d 73  ny active.** VMs
18ef0 20 28 61 70 61 72 74 20 66 72 6f 6d 20 74 68 69   (apart from thi
18f00 73 20 6f 6e 65 29 2c 20 74 68 65 6e 20 61 20 52  s one), then a R
18f10 4f 4c 4c 42 41 43 4b 20 66 61 69 6c 73 2e 20 20  OLLBACK fails.  
18f20 41 20 43 4f 4d 4d 49 54 20 66 61 69 6c 73 20 69  A COMMIT fails i
18f30 66 0a 2a 2a 20 74 68 65 72 65 20 61 72 65 20 61  f.** there are a
18f40 63 74 69 76 65 20 77 72 69 74 69 6e 67 20 56 4d  ctive writing VM
18f50 73 20 6f 72 20 61 63 74 69 76 65 20 56 4d 73 20  s or active VMs 
18f60 74 68 61 74 20 75 73 65 20 73 68 61 72 65 64 20  that use shared 
18f70 63 61 63 68 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  cache..**.** Thi
18f80 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 61  s instruction ca
18f90 75 73 65 73 20 74 68 65 20 56 4d 20 74 6f 20 68  uses the VM to h
18fa0 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  alt..*/.case OP_
18fb0 41 75 74 6f 43 6f 6d 6d 69 74 3a 20 7b 0a 20 20  AutoCommit: {.  
18fc0 69 6e 74 20 64 65 73 69 72 65 64 41 75 74 6f 43  int desiredAutoC
18fd0 6f 6d 6d 69 74 3b 0a 20 20 69 6e 74 20 69 52 6f  ommit;.  int iRo
18fe0 6c 6c 62 61 63 6b 3b 0a 0a 20 20 64 65 73 69 72  llback;..  desir
18ff0 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 70  edAutoCommit = p
19000 4f 70 2d 3e 70 31 3b 0a 20 20 69 52 6f 6c 6c 62  Op->p1;.  iRollb
19010 61 63 6b 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  ack = pOp->p2;. 
19020 20 61 73 73 65 72 74 28 20 64 65 73 69 72 65 64   assert( desired
19030 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c  AutoCommit==1 ||
19040 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
19050 69 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  it==0 );.  asser
19060 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  t( desiredAutoCo
19070 6d 6d 69 74 3d 3d 31 20 7c 7c 20 69 52 6f 6c 6c  mmit==1 || iRoll
19080 62 61 63 6b 3d 3d 30 20 29 3b 0a 20 20 61 73 73  back==0 );.  ass
19090 65 72 74 28 20 64 62 2d 3e 6e 56 64 62 65 41 63  ert( db->nVdbeAc
190a0 74 69 76 65 3e 30 20 29 3b 20 20 2f 2a 20 41 74  tive>0 );  /* At
190b0 20 6c 65 61 73 74 20 74 68 69 73 20 6f 6e 65 20   least this one 
190c0 56 4d 20 69 73 20 61 63 74 69 76 65 20 2a 2f 0a  VM is active */.
190d0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73    assert( p->bIs
190e0 52 65 61 64 65 72 20 29 3b 0a 0a 20 20 69 66 28  Reader );..  if(
190f0 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
19100 69 74 21 3d 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  it!=db->autoComm
19110 69 74 20 29 7b 0a 20 20 20 20 69 66 28 20 69 52  it ){.    if( iR
19120 6f 6c 6c 62 61 63 6b 20 29 7b 0a 20 20 20 20 20  ollback ){.     
19130 20 61 73 73 65 72 74 28 20 64 65 73 69 72 65 64   assert( desired
19140 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 29 3b  AutoCommit==1 );
19150 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 6f  .      sqlite3Ro
19160 6c 6c 62 61 63 6b 41 6c 6c 28 64 62 2c 20 53 51  llbackAll(db, SQ
19170 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42  LITE_ABORT_ROLLB
19180 41 43 4b 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e  ACK);.      db->
19190 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a  autoCommit = 1;.
191a0 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 64 65      }else if( de
191b0 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20  siredAutoCommit 
191c0 26 26 20 64 62 2d 3e 6e 56 64 62 65 57 72 69 74  && db->nVdbeWrit
191d0 65 3e 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  e>0 ){.      /* 
191e0 49 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  If this instruct
191f0 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61  ion implements a
19200 20 43 4f 4d 4d 49 54 20 61 6e 64 20 6f 74 68 65   COMMIT and othe
19210 72 20 56 4d 73 20 61 72 65 20 77 72 69 74 69 6e  r VMs are writin
19220 67 0a 20 20 20 20 20 20 2a 2a 20 72 65 74 75 72  g.      ** retur
19230 6e 20 61 6e 20 65 72 72 6f 72 20 69 6e 64 69 63  n an error indic
19240 61 74 69 6e 67 20 74 68 61 74 20 74 68 65 20 6f  ating that the o
19250 74 68 65 72 20 56 4d 73 20 6d 75 73 74 20 63 6f  ther VMs must co
19260 6d 70 6c 65 74 65 20 66 69 72 73 74 2e 20 0a 20  mplete first. . 
19270 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71       */.      sq
19280 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70  lite3VdbeError(p
19290 2c 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74  , "cannot commit
192a0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20 22   transaction - "
192b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
192c0 20 20 20 20 20 20 20 20 20 20 20 22 53 51 4c 20             "SQL 
192d0 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72  statements in pr
192e0 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20 20 20  ogress");.      
192f0 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
19300 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f  ;.      goto abo
19310 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
19320 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 28  .    }else if( (
19330 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
19340 43 68 65 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d  CheckFk(p, 1))!=
19350 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
19360 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74     goto vdbe_ret
19370 75 72 6e 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  urn;.    }else{.
19380 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
19390 6d 6d 69 74 20 3d 20 28 75 38 29 64 65 73 69 72  mmit = (u8)desir
193a0 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20  edAutoCommit;.  
193b0 20 20 7d 0a 20 20 20 20 69 66 28 20 73 71 6c 69    }.    if( sqli
193c0 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3d 3d  te3VdbeHalt(p)==
193d0 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20  SQLITE_BUSY ){. 
193e0 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e       p->pc = (in
193f0 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20  t)(pOp - aOp);. 
19400 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d       db->autoCom
19410 6d 69 74 20 3d 20 28 75 38 29 28 31 2d 64 65 73  mit = (u8)(1-des
19420 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3b  iredAutoCommit);
19430 0a 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72  .      p->rc = r
19440 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
19450 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65  .      goto vdbe
19460 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a 20  _return;.    }. 
19470 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e     assert( db->n
19480 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29 3b 0a  Statement==0 );.
19490 20 20 20 20 73 71 6c 69 74 65 33 43 6c 6f 73 65      sqlite3Close
194a0 53 61 76 65 70 6f 69 6e 74 73 28 64 62 29 3b 0a  Savepoints(db);.
194b0 20 20 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53      if( p->rc==S
194c0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
194d0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 44 4f    rc = SQLITE_DO
194e0 4e 45 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  NE;.    }else{. 
194f0 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
19500 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20  _ERROR;.    }.  
19510 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75    goto vdbe_retu
19520 72 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  rn;.  }else{.   
19530 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f   sqlite3VdbeErro
19540 72 28 70 2c 0a 20 20 20 20 20 20 20 20 28 21 64  r(p,.        (!d
19550 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
19560 29 3f 22 63 61 6e 6e 6f 74 20 73 74 61 72 74 20  )?"cannot start 
19570 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 69  a transaction wi
19580 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69  thin a transacti
19590 6f 6e 22 3a 28 0a 20 20 20 20 20 20 20 20 28 69  on":(.        (i
195a0 52 6f 6c 6c 62 61 63 6b 29 3f 22 63 61 6e 6e 6f  Rollback)?"canno
195b0 74 20 72 6f 6c 6c 62 61 63 6b 20 2d 20 6e 6f 20  t rollback - no 
195c0 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61  transaction is a
195d0 63 74 69 76 65 22 3a 0a 20 20 20 20 20 20 20 20  ctive":.        
195e0 20 20 20 20 20 20 20 20 20 20 20 22 63 61 6e 6e             "cann
195f0 6f 74 20 63 6f 6d 6d 69 74 20 2d 20 6e 6f 20 74  ot commit - no t
19600 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63  ransaction is ac
19610 74 69 76 65 22 29 29 3b 0a 20 20 20 20 20 20 20  tive"));.       
19620 20 20 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49    .    rc = SQLI
19630 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 67 6f  TE_ERROR;.    go
19640 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
19650 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 62 72 65  error;.  }.  bre
19660 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
19670 3a 20 54 72 61 6e 73 61 63 74 69 6f 6e 20 50 31  : Transaction P1
19680 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
19690 2a 2a 20 42 65 67 69 6e 20 61 20 74 72 61 6e 73  ** Begin a trans
196a0 61 63 74 69 6f 6e 20 6f 6e 20 64 61 74 61 62 61  action on databa
196b0 73 65 20 50 31 20 69 66 20 61 20 74 72 61 6e 73  se P1 if a trans
196c0 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 61 6c  action is not al
196d0 72 65 61 64 79 0a 2a 2a 20 61 63 74 69 76 65 2e  ready.** active.
196e0 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 6e 6f 6e  .** If P2 is non
196f0 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20 77 72  -zero, then a wr
19700 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20  ite-transaction 
19710 69 73 20 73 74 61 72 74 65 64 2c 20 6f 72 20 69  is started, or i
19720 66 20 61 20 0a 2a 2a 20 72 65 61 64 2d 74 72 61  f a .** read-tra
19730 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 6c 72 65  nsaction is alre
19740 61 64 79 20 61 63 74 69 76 65 2c 20 69 74 20 69  ady active, it i
19750 73 20 75 70 67 72 61 64 65 64 20 74 6f 20 61 20  s upgraded to a 
19760 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f  write-transactio
19770 6e 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 7a  n..** If P2 is z
19780 65 72 6f 2c 20 74 68 65 6e 20 61 20 72 65 61 64  ero, then a read
19790 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20  -transaction is 
197a0 73 74 61 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 50  started..**.** P
197b0 31 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f  1 is the index o
197c0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  f the database f
197d0 69 6c 65 20 6f 6e 20 77 68 69 63 68 20 74 68 65  ile on which the
197e0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a   transaction is.
197f0 2a 2a 20 73 74 61 72 74 65 64 2e 20 20 49 6e 64  ** started.  Ind
19800 65 78 20 30 20 69 73 20 74 68 65 20 6d 61 69 6e  ex 0 is the main
19810 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61   database file a
19820 6e 64 20 69 6e 64 65 78 20 31 20 69 73 20 74 68  nd index 1 is th
19830 65 0a 2a 2a 20 66 69 6c 65 20 75 73 65 64 20 66  e.** file used f
19840 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  or temporary tab
19850 6c 65 73 2e 20 20 49 6e 64 69 63 65 73 20 6f 66  les.  Indices of
19860 20 32 20 6f 72 20 6d 6f 72 65 20 61 72 65 20 75   2 or more are u
19870 73 65 64 20 66 6f 72 0a 2a 2a 20 61 74 74 61 63  sed for.** attac
19880 68 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a  hed databases..*
19890 2a 0a 2a 2a 20 49 66 20 61 20 77 72 69 74 65 2d  *.** If a write-
198a0 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73  transaction is s
198b0 74 61 72 74 65 64 20 61 6e 64 20 74 68 65 20 56  tarted and the V
198c0 64 62 65 2e 75 73 65 73 53 74 6d 74 4a 6f 75 72  dbe.usesStmtJour
198d0 6e 61 6c 20 66 6c 61 67 20 69 73 0a 2a 2a 20 74  nal flag is.** t
198e0 72 75 65 20 28 74 68 69 73 20 66 6c 61 67 20 69  rue (this flag i
198f0 73 20 73 65 74 20 69 66 20 74 68 65 20 56 64 62  s set if the Vdb
19900 65 20 6d 61 79 20 6d 6f 64 69 66 79 20 6d 6f 72  e may modify mor
19910 65 20 74 68 61 6e 20 6f 6e 65 20 72 6f 77 20 61  e than one row a
19920 6e 64 20 6d 61 79 0a 2a 2a 20 74 68 72 6f 77 20  nd may.** throw 
19930 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70 74 69  an ABORT excepti
19940 6f 6e 29 2c 20 61 20 73 74 61 74 65 6d 65 6e 74  on), a statement
19950 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79   transaction may
19960 20 61 6c 73 6f 20 62 65 20 6f 70 65 6e 65 64 2e   also be opened.
19970 0a 2a 2a 20 4d 6f 72 65 20 73 70 65 63 69 66 69  .** More specifi
19980 63 61 6c 6c 79 2c 20 61 20 73 74 61 74 65 6d 65  cally, a stateme
19990 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  nt transaction i
199a0 73 20 6f 70 65 6e 65 64 20 69 66 66 20 74 68 65  s opened iff the
199b0 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e   database.** con
199c0 6e 65 63 74 69 6f 6e 20 69 73 20 63 75 72 72 65  nection is curre
199d0 6e 74 6c 79 20 6e 6f 74 20 69 6e 20 61 75 74 6f  ntly not in auto
199e0 63 6f 6d 6d 69 74 20 6d 6f 64 65 2c 20 6f 72 20  commit mode, or 
199f0 69 66 20 74 68 65 72 65 20 61 72 65 20 6f 74 68  if there are oth
19a00 65 72 0a 2a 2a 20 61 63 74 69 76 65 20 73 74 61  er.** active sta
19a10 74 65 6d 65 6e 74 73 2e 20 41 20 73 74 61 74 65  tements. A state
19a20 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
19a30 20 61 6c 6c 6f 77 73 20 74 68 65 20 63 68 61 6e   allows the chan
19a40 67 65 73 20 6d 61 64 65 20 62 79 20 74 68 69 73  ges made by this
19a50 0a 2a 2a 20 56 44 42 45 20 74 6f 20 62 65 20 72  .** VDBE to be r
19a60 6f 6c 6c 65 64 20 62 61 63 6b 20 61 66 74 65 72  olled back after
19a70 20 61 6e 20 65 72 72 6f 72 20 77 69 74 68 6f 75   an error withou
19a80 74 20 68 61 76 69 6e 67 20 74 6f 20 72 6f 6c 6c  t having to roll
19a90 20 62 61 63 6b 20 74 68 65 0a 2a 2a 20 65 6e 74   back the.** ent
19aa0 69 72 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  ire transaction.
19ab0 20 49 66 20 6e 6f 20 65 72 72 6f 72 20 69 73 20   If no error is 
19ac0 65 6e 63 6f 75 6e 74 65 72 65 64 2c 20 74 68 65  encountered, the
19ad0 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
19ae0 61 63 74 69 6f 6e 0a 2a 2a 20 77 69 6c 6c 20 61  action.** will a
19af0 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 6f 6d  utomatically com
19b00 6d 69 74 20 77 68 65 6e 20 74 68 65 20 56 44 42  mit when the VDB
19b10 45 20 68 61 6c 74 73 2e 0a 2a 2a 0a 2a 2a 20 49  E halts..**.** I
19b20 66 20 50 35 21 3d 30 20 74 68 65 6e 20 74 68 69  f P5!=0 then thi
19b30 73 20 6f 70 63 6f 64 65 20 61 6c 73 6f 20 63 68  s opcode also ch
19b40 65 63 6b 73 20 74 68 65 20 73 63 68 65 6d 61 20  ecks the schema 
19b50 63 6f 6f 6b 69 65 20 61 67 61 69 6e 73 74 20 50  cookie against P
19b60 33 0a 2a 2a 20 61 6e 64 20 74 68 65 20 73 63 68  3.** and the sch
19b70 65 6d 61 20 67 65 6e 65 72 61 74 69 6f 6e 20 63  ema generation c
19b80 6f 75 6e 74 65 72 20 61 67 61 69 6e 73 74 20 50  ounter against P
19b90 34 2e 0a 2a 2a 20 54 68 65 20 63 6f 6f 6b 69 65  4..** The cookie
19ba0 20 63 68 61 6e 67 65 73 20 69 74 73 20 76 61 6c   changes its val
19bb0 75 65 20 77 68 65 6e 65 76 65 72 20 74 68 65 20  ue whenever the 
19bc0 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
19bd0 63 68 61 6e 67 65 73 2e 0a 2a 2a 20 54 68 69 73  changes..** This
19be0 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 75 73   operation is us
19bf0 65 64 20 74 6f 20 64 65 74 65 63 74 20 77 68 65  ed to detect whe
19c00 6e 20 74 68 61 74 20 74 68 65 20 63 6f 6f 6b 69  n that the cooki
19c10 65 20 68 61 73 20 63 68 61 6e 67 65 64 0a 2a 2a  e has changed.**
19c20 20 61 6e 64 20 74 68 61 74 20 74 68 65 20 63 75   and that the cu
19c30 72 72 65 6e 74 20 70 72 6f 63 65 73 73 20 6e 65  rrent process ne
19c40 65 64 73 20 74 6f 20 72 65 72 65 61 64 20 74 68  eds to reread th
19c50 65 20 73 63 68 65 6d 61 2e 20 20 49 66 20 74 68  e schema.  If th
19c60 65 20 73 63 68 65 6d 61 0a 2a 2a 20 63 6f 6f 6b  e schema.** cook
19c70 69 65 20 69 6e 20 50 33 20 64 69 66 66 65 72 73  ie in P3 differs
19c80 20 66 72 6f 6d 20 74 68 65 20 73 63 68 65 6d 61   from the schema
19c90 20 63 6f 6f 6b 69 65 20 69 6e 20 74 68 65 20 64   cookie in the d
19ca0 61 74 61 62 61 73 65 20 68 65 61 64 65 72 20 6f  atabase header o
19cb0 72 0a 2a 2a 20 69 66 20 74 68 65 20 73 63 68 65  r.** if the sche
19cc0 6d 61 20 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f  ma generation co
19cd0 75 6e 74 65 72 20 69 6e 20 50 34 20 64 69 66 66  unter in P4 diff
19ce0 65 72 73 20 66 72 6f 6d 20 74 68 65 20 63 75 72  ers from the cur
19cf0 72 65 6e 74 0a 2a 2a 20 67 65 6e 65 72 61 74 69  rent.** generati
19d00 6f 6e 20 63 6f 75 6e 74 65 72 2c 20 74 68 65 6e  on counter, then
19d10 20 61 6e 20 53 51 4c 49 54 45 5f 53 43 48 45 4d   an SQLITE_SCHEM
19d20 41 20 65 72 72 6f 72 20 69 73 20 72 61 69 73 65  A error is raise
19d30 64 20 61 6e 64 20 65 78 65 63 75 74 69 6f 6e 0a  d and execution.
19d40 2a 2a 20 68 61 6c 74 73 2e 20 20 54 68 65 20 73  ** halts.  The s
19d50 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 77 72  qlite3_step() wr
19d60 61 70 70 65 72 20 66 75 6e 63 74 69 6f 6e 20 6d  apper function m
19d70 69 67 68 74 20 74 68 65 6e 20 72 65 70 72 65 70  ight then reprep
19d80 61 72 65 20 74 68 65 0a 2a 2a 20 73 74 61 74 65  are the.** state
19d90 6d 65 6e 74 20 61 6e 64 20 72 65 72 75 6e 20 69  ment and rerun i
19da0 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e  t from the begin
19db0 6e 69 6e 67 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ning..*/.case OP
19dc0 5f 54 72 61 6e 73 61 63 74 69 6f 6e 3a 20 7b 0a  _Transaction: {.
19dd0 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 20 20    Btree *pBt;.  
19de0 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69 6e 74  int iMeta;.  int
19df0 20 69 47 65 6e 3b 0a 0a 20 20 61 73 73 65 72 74   iGen;..  assert
19e00 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29  ( p->bIsReader )
19e10 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  ;.  assert( p->r
19e20 65 61 64 4f 6e 6c 79 3d 3d 30 20 7c 7c 20 70 4f  eadOnly==0 || pO
19e30 70 2d 3e 70 32 3d 3d 30 20 29 3b 0a 20 20 61 73  p->p2==0 );.  as
19e40 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
19e50 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
19e60 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
19e70 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
19e80 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70  treeMask, pOp->p
19e90 31 29 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  1) );.  if( pOp-
19ea0 3e 70 32 20 26 26 20 28 64 62 2d 3e 66 6c 61 67  >p2 && (db->flag
19eb0 73 20 26 20 53 51 4c 49 54 45 5f 51 75 65 72 79  s & SQLITE_Query
19ec0 4f 6e 6c 79 29 21 3d 30 20 29 7b 0a 20 20 20 20  Only)!=0 ){.    
19ed0 72 63 20 3d 20 53 51 4c 49 54 45 5f 52 45 41 44  rc = SQLITE_READ
19ee0 4f 4e 4c 59 3b 0a 20 20 20 20 67 6f 74 6f 20 61  ONLY;.    goto a
19ef0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
19f00 72 3b 0a 20 20 7d 0a 20 20 70 42 74 20 3d 20 64  r;.  }.  pBt = d
19f10 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
19f20 70 42 74 3b 0a 0a 20 20 69 66 28 20 70 42 74 20  pBt;..  if( pBt 
19f30 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
19f40 74 65 33 42 74 72 65 65 42 65 67 69 6e 54 72 61  te3BtreeBeginTra
19f50 6e 73 28 70 42 74 2c 20 70 4f 70 2d 3e 70 32 29  ns(pBt, pOp->p2)
19f60 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20  ;.    testcase( 
19f70 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 5f  rc==SQLITE_BUSY_
19f80 53 4e 41 50 53 48 4f 54 20 29 3b 0a 20 20 20 20  SNAPSHOT );.    
19f90 74 65 73 74 63 61 73 65 28 20 72 63 3d 3d 53 51  testcase( rc==SQ
19fa0 4c 49 54 45 5f 42 55 53 59 5f 52 45 43 4f 56 45  LITE_BUSY_RECOVE
19fb0 52 59 20 29 3b 0a 20 20 20 20 69 66 28 20 28 72  RY );.    if( (r
19fc0 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f  c&0xff)==SQLITE_
19fd0 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 70 2d  BUSY ){.      p-
19fe0 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f 70 20  >pc = (int)(pOp 
19ff0 2d 20 61 4f 70 29 3b 0a 20 20 20 20 20 20 70 2d  - aOp);.      p-
1a000 3e 72 63 20 3d 20 72 63 3b 0a 20 20 20 20 20 20  >rc = rc;.      
1a010 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
1a020 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
1a030 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
1a040 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  .      goto abor
1a050 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1a060 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 70      }..    if( p
1a070 4f 70 2d 3e 70 32 20 26 26 20 70 2d 3e 75 73 65  Op->p2 && p->use
1a080 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 0a 20 20  sStmtJournal .  
1a090 20 20 20 26 26 20 28 64 62 2d 3e 61 75 74 6f 43     && (db->autoC
1a0a0 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e  ommit==0 || db->
1a0b0 6e 56 64 62 65 52 65 61 64 3e 31 29 20 0a 20 20  nVdbeRead>1) .  
1a0c0 20 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72    ){.      asser
1a0d0 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 49  t( sqlite3BtreeI
1a0e0 73 49 6e 54 72 61 6e 73 28 70 42 74 29 20 29 3b  sInTrans(pBt) );
1a0f0 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 69 53  .      if( p->iS
1a100 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29 7b 0a 20  tatement==0 ){. 
1a110 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64         assert( d
1a120 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3e 3d 30  b->nStatement>=0
1a130 20 26 26 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69   && db->nSavepoi
1a140 6e 74 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20 20  nt>=0 );.       
1a150 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b   db->nStatement+
1a160 2b 3b 20 0a 20 20 20 20 20 20 20 20 70 2d 3e 69  +; .        p->i
1a170 53 74 61 74 65 6d 65 6e 74 20 3d 20 64 62 2d 3e  Statement = db->
1a180 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d  nSavepoint + db-
1a190 3e 6e 53 74 61 74 65 6d 65 6e 74 3b 0a 20 20 20  >nStatement;.   
1a1a0 20 20 20 7d 0a 0a 20 20 20 20 20 20 72 63 20 3d     }..      rc =
1a1b0 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65   sqlite3VtabSave
1a1c0 70 6f 69 6e 74 28 64 62 2c 20 53 41 56 45 50 4f  point(db, SAVEPO
1a1d0 49 4e 54 5f 42 45 47 49 4e 2c 20 70 2d 3e 69 53  INT_BEGIN, p->iS
1a1e0 74 61 74 65 6d 65 6e 74 2d 31 29 3b 0a 20 20 20  tatement-1);.   
1a1f0 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
1a200 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
1a210 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1a220 65 42 65 67 69 6e 53 74 6d 74 28 70 42 74 2c 20  eBeginStmt(pBt, 
1a230 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 29 3b 0a  p->iStatement);.
1a240 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f        }..      /
1a250 2a 20 53 74 6f 72 65 20 74 68 65 20 63 75 72 72  * Store the curr
1a260 65 6e 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65  ent value of the
1a270 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
1a280 73 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74  s deferred const
1a290 72 61 69 6e 74 0a 20 20 20 20 20 20 2a 2a 20 63  raint.      ** c
1a2a0 6f 75 6e 74 65 72 2e 20 49 66 20 74 68 65 20 73  ounter. If the s
1a2b0 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
1a2c0 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20 62 65  tion needs to be
1a2d0 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2c 0a 20 20   rolled back,.  
1a2e0 20 20 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65      ** the value
1a2f0 20 6f 66 20 74 68 69 73 20 63 6f 75 6e 74 65 72   of this counter
1a300 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 65 73   needs to be res
1a310 74 6f 72 65 64 20 74 6f 6f 2e 20 20 2a 2f 0a 20  tored too.  */. 
1a320 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66       p->nStmtDef
1a330 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65  Cons = db->nDefe
1a340 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20  rredCons;.      
1a350 70 2d 3e 6e 53 74 6d 74 44 65 66 49 6d 6d 43 6f  p->nStmtDefImmCo
1a360 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72  ns = db->nDeferr
1a370 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 7d  edImmCons;.    }
1a380 0a 0a 20 20 20 20 2f 2a 20 47 61 74 68 65 72 20  ..    /* Gather 
1a390 74 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69  the schema versi
1a3a0 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 63 68  on number for ch
1a3b0 65 63 6b 69 6e 67 3a 0a 20 20 20 20 2a 2a 20 49  ecking:.    ** I
1a3c0 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46  MPLEMENTATION-OF
1a3d0 3a 20 52 2d 33 32 31 39 35 2d 31 39 34 36 35 20  : R-32195-19465 
1a3e0 54 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69  The schema versi
1a3f0 6f 6e 20 69 73 20 75 73 65 64 20 62 79 20 53 51  on is used by SQ
1a400 4c 69 74 65 0a 20 20 20 20 2a 2a 20 65 61 63 68  Lite.    ** each
1a410 20 74 69 6d 65 20 61 20 71 75 65 72 79 20 69 73   time a query is
1a420 20 65 78 65 63 75 74 65 64 20 74 6f 20 65 6e 73   executed to ens
1a430 75 72 65 20 74 68 61 74 20 74 68 65 20 69 6e 74  ure that the int
1a440 65 72 6e 61 6c 20 63 61 63 68 65 20 6f 66 20 74  ernal cache of t
1a450 68 65 0a 20 20 20 20 2a 2a 20 73 63 68 65 6d 61  he.    ** schema
1a460 20 75 73 65 64 20 77 68 65 6e 20 63 6f 6d 70 69   used when compi
1a470 6c 69 6e 67 20 74 68 65 20 53 51 4c 20 71 75 65  ling the SQL que
1a480 72 79 20 6d 61 74 63 68 65 73 20 74 68 65 20 73  ry matches the s
1a490 63 68 65 6d 61 20 6f 66 20 74 68 65 0a 20 20 20  chema of the.   
1a4a0 20 2a 2a 20 64 61 74 61 62 61 73 65 20 61 67 61   ** database aga
1a4b0 69 6e 73 74 20 77 68 69 63 68 20 74 68 65 20 63  inst which the c
1a4c0 6f 6d 70 69 6c 65 64 20 71 75 65 72 79 20 69 73  ompiled query is
1a4d0 20 61 63 74 75 61 6c 6c 79 20 65 78 65 63 75 74   actually execut
1a4e0 65 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73  ed..    */.    s
1a4f0 71 6c 69 74 65 33 42 74 72 65 65 47 65 74 4d 65  qlite3BtreeGetMe
1a500 74 61 28 70 42 74 2c 20 42 54 52 45 45 5f 53 43  ta(pBt, BTREE_SC
1a510 48 45 4d 41 5f 56 45 52 53 49 4f 4e 2c 20 28 75  HEMA_VERSION, (u
1a520 33 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20  32 *)&iMeta);.  
1a530 20 20 69 47 65 6e 20 3d 20 64 62 2d 3e 61 44 62    iGen = db->aDb
1a540 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d  [pOp->p1].pSchem
1a550 61 2d 3e 69 47 65 6e 65 72 61 74 69 6f 6e 3b 0a  a->iGeneration;.
1a560 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 47 65    }else{.    iGe
1a570 6e 20 3d 20 69 4d 65 74 61 20 3d 20 30 3b 0a 20  n = iMeta = 0;. 
1a580 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   }.  assert( pOp
1a590 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e  ->p5==0 || pOp->
1a5a0 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
1a5b0 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   );.  if( pOp->p
1a5c0 35 20 26 26 20 28 69 4d 65 74 61 21 3d 70 4f 70  5 && (iMeta!=pOp
1a5d0 2d 3e 70 33 20 7c 7c 20 69 47 65 6e 21 3d 70 4f  ->p3 || iGen!=pO
1a5e0 70 2d 3e 70 34 2e 69 29 20 29 7b 0a 20 20 20 20  p->p4.i) ){.    
1a5f0 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
1a600 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20  , p->zErrMsg);. 
1a610 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20     p->zErrMsg = 
1a620 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70 28  sqlite3DbStrDup(
1a630 64 62 2c 20 22 64 61 74 61 62 61 73 65 20 73 63  db, "database sc
1a640 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65 64  hema has changed
1a650 22 29 3b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68  ");.    /* If th
1a660 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69 65 20  e schema-cookie 
1a670 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
1a680 65 20 66 69 6c 65 20 6d 61 74 63 68 65 73 20 74  e file matches t
1a690 68 65 20 63 6f 6f 6b 69 65 20 0a 20 20 20 20 2a  he cookie .    *
1a6a0 2a 20 73 74 6f 72 65 64 20 77 69 74 68 20 74 68  * stored with th
1a6b0 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 72 65 70 72  e in-memory repr
1a6c0 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
1a6d0 65 20 73 63 68 65 6d 61 2c 20 64 6f 0a 20 20 20  e schema, do.   
1a6e0 20 2a 2a 20 6e 6f 74 20 72 65 6c 6f 61 64 20 74   ** not reload t
1a6f0 68 65 20 73 63 68 65 6d 61 20 66 72 6f 6d 20 74  he schema from t
1a700 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
1a710 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  ..    **.    ** 
1a720 49 66 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65  If virtual-table
1a730 73 20 61 72 65 20 69 6e 20 75 73 65 2c 20 74 68  s are in use, th
1a740 69 73 20 69 73 20 6e 6f 74 20 6a 75 73 74 20 61  is is not just a
1a750 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a  n optimization..
1a760 20 20 20 20 2a 2a 20 4f 66 74 65 6e 2c 20 76 2d      ** Often, v-
1a770 74 61 62 6c 65 73 20 73 74 6f 72 65 20 74 68 65  tables store the
1a780 69 72 20 64 61 74 61 20 69 6e 20 6f 74 68 65 72  ir data in other
1a790 20 53 51 4c 69 74 65 20 74 61 62 6c 65 73 2c 20   SQLite tables, 
1a7a0 77 68 69 63 68 0a 20 20 20 20 2a 2a 20 61 72 65  which.    ** are
1a7b0 20 71 75 65 72 69 65 64 20 66 72 6f 6d 20 77 69   queried from wi
1a7c0 74 68 69 6e 20 78 4e 65 78 74 28 29 20 61 6e 64  thin xNext() and
1a7d0 20 6f 74 68 65 72 20 76 2d 74 61 62 6c 65 20 6d   other v-table m
1a7e0 65 74 68 6f 64 73 20 75 73 69 6e 67 0a 20 20 20  ethods using.   
1a7f0 20 2a 2a 20 70 72 65 70 61 72 65 64 20 71 75 65   ** prepared que
1a800 72 69 65 73 2e 20 49 66 20 73 75 63 68 20 61 20  ries. If such a 
1a810 71 75 65 72 79 20 69 73 20 6f 75 74 2d 6f 66 2d  query is out-of-
1a820 64 61 74 65 2c 20 77 65 20 64 6f 20 6e 6f 74 20  date, we do not 
1a830 77 61 6e 74 20 74 6f 0a 20 20 20 20 2a 2a 20 64  want to.    ** d
1a840 69 73 63 61 72 64 20 74 68 65 20 64 61 74 61 62  iscard the datab
1a850 61 73 65 20 73 63 68 65 6d 61 2c 20 61 73 20 74  ase schema, as t
1a860 68 65 20 75 73 65 72 20 63 6f 64 65 20 69 6d 70  he user code imp
1a870 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65 0a 20 20  lementing the.  
1a880 20 20 2a 2a 20 76 2d 74 61 62 6c 65 20 77 6f 75    ** v-table wou
1a890 6c 64 20 68 61 76 65 20 74 6f 20 62 65 20 72 65  ld have to be re
1a8a0 61 64 79 20 66 6f 72 20 74 68 65 20 73 71 6c 69  ady for the sqli
1a8b0 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75  te3_vtab structu
1a8c0 72 65 20 69 74 73 65 6c 66 0a 20 20 20 20 2a 2a  re itself.    **
1a8d0 20 74 6f 20 62 65 20 69 6e 76 61 6c 69 64 61 74   to be invalidat
1a8e0 65 64 20 77 68 65 6e 65 76 65 72 20 73 71 6c 69  ed whenever sqli
1a8f0 74 65 33 5f 73 74 65 70 28 29 20 69 73 20 63 61  te3_step() is ca
1a900 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  lled from within
1a910 20 0a 20 20 20 20 2a 2a 20 61 20 76 2d 74 61 62   .    ** a v-tab
1a920 6c 65 20 6d 65 74 68 6f 64 2e 0a 20 20 20 20 2a  le method..    *
1a930 2f 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44  /.    if( db->aD
1a940 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65  b[pOp->p1].pSche
1a950 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69  ma->schema_cooki
1a960 65 21 3d 69 4d 65 74 61 20 29 7b 0a 20 20 20 20  e!=iMeta ){.    
1a970 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e    sqlite3ResetOn
1a980 65 53 63 68 65 6d 61 28 64 62 2c 20 70 4f 70 2d  eSchema(db, pOp-
1a990 3e 70 31 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  >p1);.    }.    
1a9a0 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31 3b 0a  p->expired = 1;.
1a9b0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
1a9c0 53 43 48 45 4d 41 3b 0a 20 20 7d 0a 20 20 69 66  SCHEMA;.  }.  if
1a9d0 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
1a9e0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1a9f0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1aa00 70 63 6f 64 65 3a 20 52 65 61 64 43 6f 6f 6b 69  pcode: ReadCooki
1aa10 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  e P1 P2 P3 * *.*
1aa20 2a 0a 2a 2a 20 52 65 61 64 20 63 6f 6f 6b 69 65  *.** Read cookie
1aa30 20 6e 75 6d 62 65 72 20 50 33 20 66 72 6f 6d 20   number P3 from 
1aa40 64 61 74 61 62 61 73 65 20 50 31 20 61 6e 64 20  database P1 and 
1aa50 77 72 69 74 65 20 69 74 20 69 6e 74 6f 20 72 65  write it into re
1aa60 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 50 33  gister P2..** P3
1aa70 3d 3d 31 20 69 73 20 74 68 65 20 73 63 68 65 6d  ==1 is the schem
1aa80 61 20 76 65 72 73 69 6f 6e 2e 20 20 50 33 3d 3d  a version.  P3==
1aa90 32 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73  2 is the databas
1aaa0 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50 33 3d  e format..** P3=
1aab0 3d 33 20 69 73 20 74 68 65 20 72 65 63 6f 6d 6d  =3 is the recomm
1aac0 65 6e 64 65 64 20 70 61 67 65 72 20 63 61 63 68  ended pager cach
1aad0 65 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66  e size, and so f
1aae0 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69 73 0a  orth.  P1==0 is.
1aaf0 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  ** the main data
1ab00 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50 31  base file and P1
1ab10 3d 3d 31 20 69 73 20 74 68 65 20 64 61 74 61 62  ==1 is the datab
1ab20 61 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f  ase file used to
1ab30 20 73 74 6f 72 65 0a 2a 2a 20 74 65 6d 70 6f 72   store.** tempor
1ab40 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a  ary tables..**.*
1ab50 2a 20 54 68 65 72 65 20 6d 75 73 74 20 62 65 20  * There must be 
1ab60 61 20 72 65 61 64 2d 6c 6f 63 6b 20 6f 6e 20 74  a read-lock on t
1ab70 68 65 20 64 61 74 61 62 61 73 65 20 28 65 69 74  he database (eit
1ab80 68 65 72 20 61 20 74 72 61 6e 73 61 63 74 69 6f  her a transactio
1ab90 6e 0a 2a 2a 20 6d 75 73 74 20 62 65 20 73 74 61  n.** must be sta
1aba0 72 74 65 64 20 6f 72 20 74 68 65 72 65 20 6d 75  rted or there mu
1abb0 73 74 20 62 65 20 61 6e 20 6f 70 65 6e 20 63 75  st be an open cu
1abc0 72 73 6f 72 29 20 62 65 66 6f 72 65 0a 2a 2a 20  rsor) before.** 
1abd0 65 78 65 63 75 74 69 6e 67 20 74 68 69 73 20 69  executing this i
1abe0 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63  nstruction..*/.c
1abf0 61 73 65 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69  ase OP_ReadCooki
1ac00 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  e: {            
1ac10 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
1ac20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69 6e 74  int iMeta;.  int
1ac30 20 69 44 62 3b 0a 20 20 69 6e 74 20 69 43 6f 6f   iDb;.  int iCoo
1ac40 6b 69 65 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  kie;..  assert( 
1ac50 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a  p->bIsReader );.
1ac60 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b    iDb = pOp->p1;
1ac70 0a 20 20 69 43 6f 6f 6b 69 65 20 3d 20 70 4f 70  .  iCookie = pOp
1ac80 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p3;.  assert( 
1ac90 70 4f 70 2d 3e 70 33 3c 53 51 4c 49 54 45 5f 4e  pOp->p3<SQLITE_N
1aca0 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20  _BTREE_META );. 
1acb0 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20   assert( iDb>=0 
1acc0 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29  && iDb<db->nDb )
1acd0 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e  ;.  assert( db->
1ace0 61 44 62 5b 69 44 62 5d 2e 70 42 74 21 3d 30 20  aDb[iDb].pBt!=0 
1acf0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d  );.  assert( DbM
1ad00 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65  askTest(p->btree
1ad10 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a 0a 20  Mask, iDb) );.. 
1ad20 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65 74   sqlite3BtreeGet
1ad30 4d 65 74 61 28 64 62 2d 3e 61 44 62 5b 69 44 62  Meta(db->aDb[iDb
1ad40 5d 2e 70 42 74 2c 20 69 43 6f 6f 6b 69 65 2c 20  ].pBt, iCookie, 
1ad50 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a  (u32 *)&iMeta);.
1ad60 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
1ad70 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
1ad80 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69  .  pOut->u.i = i
1ad90 4d 65 74 61 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Meta;.  break;.}
1ada0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 74  ../* Opcode: Set
1adb0 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33 20  Cookie P1 P2 P3 
1adc0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  * *.**.** Write 
1add0 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  the integer valu
1ade0 65 20 50 33 20 69 6e 74 6f 20 63 6f 6f 6b 69 65  e P3 into cookie
1adf0 20 6e 75 6d 62 65 72 20 50 32 20 6f 66 20 64 61   number P2 of da
1ae00 74 61 62 61 73 65 20 50 31 2e 0a 2a 2a 20 50 32  tabase P1..** P2
1ae10 3d 3d 31 20 69 73 20 74 68 65 20 73 63 68 65 6d  ==1 is the schem
1ae20 61 20 76 65 72 73 69 6f 6e 2e 20 20 50 32 3d 3d  a version.  P2==
1ae30 32 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73  2 is the databas
1ae40 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50 32 3d  e format..** P2=
1ae50 3d 33 20 69 73 20 74 68 65 20 72 65 63 6f 6d 6d  =3 is the recomm
1ae60 65 6e 64 65 64 20 70 61 67 65 72 20 63 61 63 68  ended pager cach
1ae70 65 20 0a 2a 2a 20 73 69 7a 65 2c 20 61 6e 64 20  e .** size, and 
1ae80 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30  so forth.  P1==0
1ae90 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74   is the main dat
1aea0 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50  abase file and P
1aeb0 31 3d 3d 31 20 69 73 20 74 68 65 20 0a 2a 2a 20  1==1 is the .** 
1aec0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 75 73  database file us
1aed0 65 64 20 74 6f 20 73 74 6f 72 65 20 74 65 6d 70  ed to store temp
1aee0 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a  orary tables..**
1aef0 0a 2a 2a 20 41 20 74 72 61 6e 73 61 63 74 69 6f  .** A transactio
1af00 6e 20 6d 75 73 74 20 62 65 20 73 74 61 72 74 65  n must be starte
1af10 64 20 62 65 66 6f 72 65 20 65 78 65 63 75 74 69  d before executi
1af20 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a  ng this opcode..
1af30 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 74 43 6f  */.case OP_SetCo
1af40 6f 6b 69 65 3a 20 7b 0a 20 20 44 62 20 2a 70 44  okie: {.  Db *pD
1af50 62 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  b;.  assert( pOp
1af60 2d 3e 70 32 3c 53 51 4c 49 54 45 5f 4e 5f 42 54  ->p2<SQLITE_N_BT
1af70 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73  REE_META );.  as
1af80 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1af90 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
1afa0 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
1afb0 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
1afc0 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70  treeMask, pOp->p
1afd0 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  1) );.  assert( 
1afe0 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
1aff0 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61  ;.  pDb = &db->a
1b000 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  Db[pOp->p1];.  a
1b010 73 73 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21  ssert( pDb->pBt!
1b020 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1b030 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74  sqlite3SchemaMut
1b040 65 78 48 65 6c 64 28 64 62 2c 20 70 4f 70 2d 3e  exHeld(db, pOp->
1b050 70 31 2c 20 30 29 20 29 3b 0a 20 20 2f 2a 20 53  p1, 0) );.  /* S
1b060 65 65 20 6e 6f 74 65 20 61 62 6f 75 74 20 69 6e  ee note about in
1b070 64 65 78 20 73 68 69 66 74 69 6e 67 20 6f 6e 20  dex shifting on 
1b080 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 20 2a 2f  OP_ReadCookie */
1b090 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
1b0a0 74 72 65 65 55 70 64 61 74 65 4d 65 74 61 28 70  treeUpdateMeta(p
1b0b0 44 62 2d 3e 70 42 74 2c 20 70 4f 70 2d 3e 70 32  Db->pBt, pOp->p2
1b0c0 2c 20 70 4f 70 2d 3e 70 33 29 3b 0a 20 20 69 66  , pOp->p3);.  if
1b0d0 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45  ( pOp->p2==BTREE
1b0e0 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 20  _SCHEMA_VERSION 
1b0f0 29 7b 0a 20 20 20 20 2f 2a 20 57 68 65 6e 20 74  ){.    /* When t
1b100 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65  he schema cookie
1b110 20 63 68 61 6e 67 65 73 2c 20 72 65 63 6f 72 64   changes, record
1b120 20 74 68 65 20 6e 65 77 20 63 6f 6f 6b 69 65 20   the new cookie 
1b130 69 6e 74 65 72 6e 61 6c 6c 79 20 2a 2f 0a 20 20  internally */.  
1b140 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e    pDb->pSchema->
1b150 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 20 3d 20  schema_cookie = 
1b160 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 64 62 2d  pOp->p3;.    db-
1b170 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45  >flags |= SQLITE
1b180 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 3b 0a  _InternChanges;.
1b190 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d    }else if( pOp-
1b1a0 3e 70 32 3d 3d 42 54 52 45 45 5f 46 49 4c 45 5f  >p2==BTREE_FILE_
1b1b0 46 4f 52 4d 41 54 20 29 7b 0a 20 20 20 20 2f 2a  FORMAT ){.    /*
1b1c0 20 52 65 63 6f 72 64 20 63 68 61 6e 67 65 73 20   Record changes 
1b1d0 69 6e 20 74 68 65 20 66 69 6c 65 20 66 6f 72 6d  in the file form
1b1e0 61 74 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70  at */.    pDb->p
1b1f0 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72  Schema->file_for
1b200 6d 61 74 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  mat = pOp->p3;. 
1b210 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31   }.  if( pOp->p1
1b220 3d 3d 31 20 29 7b 0a 20 20 20 20 2f 2a 20 49 6e  ==1 ){.    /* In
1b230 76 61 6c 69 64 61 74 65 20 61 6c 6c 20 70 72 65  validate all pre
1b240 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73  pared statements
1b250 20 77 68 65 6e 65 76 65 72 20 74 68 65 20 54 45   whenever the TE
1b260 4d 50 20 64 61 74 61 62 61 73 65 0a 20 20 20 20  MP database.    
1b270 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 63 68 61  ** schema is cha
1b280 6e 67 65 64 2e 20 20 54 69 63 6b 65 74 20 23 31  nged.  Ticket #1
1b290 36 34 34 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74  644 */.    sqlit
1b2a0 65 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64  e3ExpirePrepared
1b2b0 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a  Statements(db);.
1b2c0 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d      p->expired =
1b2d0 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63   0;.  }.  if( rc
1b2e0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
1b2f0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72  e_to_error;.  br
1b300 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1b310 65 3a 20 4f 70 65 6e 52 65 61 64 20 50 31 20 50  e: OpenRead P1 P
1b320 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
1b330 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20  nopsis: root=P2 
1b340 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 70 65  iDb=P3.**.** Ope
1b350 6e 20 61 20 72 65 61 64 2d 6f 6e 6c 79 20 63 75  n a read-only cu
1b360 72 73 6f 72 20 66 6f 72 20 74 68 65 20 64 61 74  rsor for the dat
1b370 61 62 61 73 65 20 74 61 62 6c 65 20 77 68 6f 73  abase table whos
1b380 65 20 72 6f 6f 74 20 70 61 67 65 20 69 73 0a 2a  e root page is.*
1b390 2a 20 50 32 20 69 6e 20 61 20 64 61 74 61 62 61  * P2 in a databa
1b3a0 73 65 20 66 69 6c 65 2e 20 20 54 68 65 20 64 61  se file.  The da
1b3b0 74 61 62 61 73 65 20 66 69 6c 65 20 69 73 20 64  tabase file is d
1b3c0 65 74 65 72 6d 69 6e 65 64 20 62 79 20 50 33 2e  etermined by P3.
1b3d0 20 0a 2a 2a 20 50 33 3d 3d 30 20 6d 65 61 6e 73   .** P3==0 means
1b3e0 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
1b3f0 73 65 2c 20 50 33 3d 3d 31 20 6d 65 61 6e 73 20  se, P3==1 means 
1b400 74 68 65 20 64 61 74 61 62 61 73 65 20 75 73 65  the database use
1b410 64 20 66 6f 72 20 0a 2a 2a 20 74 65 6d 70 6f 72  d for .** tempor
1b420 61 72 79 20 74 61 62 6c 65 73 2c 20 61 6e 64 20  ary tables, and 
1b430 50 33 3e 31 20 6d 65 61 6e 73 20 75 73 65 64 20  P3>1 means used 
1b440 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
1b450 67 20 61 74 74 61 63 68 65 64 0a 2a 2a 20 64 61  g attached.** da
1b460 74 61 62 61 73 65 2e 20 20 47 69 76 65 20 74 68  tabase.  Give th
1b470 65 20 6e 65 77 20 63 75 72 73 6f 72 20 61 6e 20  e new cursor an 
1b480 69 64 65 6e 74 69 66 69 65 72 20 6f 66 20 50 31  identifier of P1
1b490 2e 20 20 54 68 65 20 50 31 0a 2a 2a 20 76 61 6c  .  The P1.** val
1b4a0 75 65 73 20 6e 65 65 64 20 6e 6f 74 20 62 65 20  ues need not be 
1b4b0 63 6f 6e 74 69 67 75 6f 75 73 20 62 75 74 20 61  contiguous but a
1b4c0 6c 6c 20 50 31 20 76 61 6c 75 65 73 20 73 68 6f  ll P1 values sho
1b4d0 75 6c 64 20 62 65 20 73 6d 61 6c 6c 20 69 6e 74  uld be small int
1b4e0 65 67 65 72 73 2e 0a 2a 2a 20 49 74 20 69 73 20  egers..** It is 
1b4f0 61 6e 20 65 72 72 6f 72 20 66 6f 72 20 50 31 20  an error for P1 
1b500 74 6f 20 62 65 20 6e 65 67 61 74 69 76 65 2e 0a  to be negative..
1b510 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20 74  **.** If P5!=0 t
1b520 68 65 6e 20 75 73 65 20 74 68 65 20 63 6f 6e 74  hen use the cont
1b530 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
1b540 50 32 20 61 73 20 74 68 65 20 72 6f 6f 74 20 70  P2 as the root p
1b550 61 67 65 2c 20 6e 6f 74 0a 2a 2a 20 74 68 65 20  age, not.** the 
1b560 76 61 6c 75 65 20 6f 66 20 50 32 20 69 74 73 65  value of P2 itse
1b570 6c 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20  lf..**.** There 
1b580 77 69 6c 6c 20 62 65 20 61 20 72 65 61 64 20 6c  will be a read l
1b590 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62  ock on the datab
1b5a0 61 73 65 20 77 68 65 6e 65 76 65 72 20 74 68 65  ase whenever the
1b5b0 72 65 20 69 73 20 61 6e 0a 2a 2a 20 6f 70 65 6e  re is an.** open
1b5c0 20 63 75 72 73 6f 72 2e 20 20 49 66 20 74 68 65   cursor.  If the
1b5d0 20 64 61 74 61 62 61 73 65 20 77 61 73 20 75 6e   database was un
1b5e0 6c 6f 63 6b 65 64 20 70 72 69 6f 72 20 74 6f 20  locked prior to 
1b5f0 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
1b600 0a 2a 2a 20 74 68 65 6e 20 61 20 72 65 61 64 20  .** then a read 
1b610 6c 6f 63 6b 20 69 73 20 61 63 71 75 69 72 65 64  lock is acquired
1b620 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 69 73   as part of this
1b630 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 41   instruction.  A
1b640 20 72 65 61 64 0a 2a 2a 20 6c 6f 63 6b 20 61 6c   read.** lock al
1b650 6c 6f 77 73 20 6f 74 68 65 72 20 70 72 6f 63 65  lows other proce
1b660 73 73 65 73 20 74 6f 20 72 65 61 64 20 74 68 65  sses to read the
1b670 20 64 61 74 61 62 61 73 65 20 62 75 74 20 70 72   database but pr
1b680 6f 68 69 62 69 74 73 0a 2a 2a 20 61 6e 79 20 6f  ohibits.** any o
1b690 74 68 65 72 20 70 72 6f 63 65 73 73 20 66 72 6f  ther process fro
1b6a0 6d 20 6d 6f 64 69 66 79 69 6e 67 20 74 68 65 20  m modifying the 
1b6b0 64 61 74 61 62 61 73 65 2e 20 20 54 68 65 20 72  database.  The r
1b6c0 65 61 64 20 6c 6f 63 6b 20 69 73 0a 2a 2a 20 72  ead lock is.** r
1b6d0 65 6c 65 61 73 65 64 20 77 68 65 6e 20 61 6c 6c  eleased when all
1b6e0 20 63 75 72 73 6f 72 73 20 61 72 65 20 63 6c 6f   cursors are clo
1b6f0 73 65 64 2e 20 20 49 66 20 74 68 69 73 20 69 6e  sed.  If this in
1b700 73 74 72 75 63 74 69 6f 6e 20 61 74 74 65 6d 70  struction attemp
1b710 74 73 0a 2a 2a 20 74 6f 20 67 65 74 20 61 20 72  ts.** to get a r
1b720 65 61 64 20 6c 6f 63 6b 20 62 75 74 20 66 61 69  ead lock but fai
1b730 6c 73 2c 20 74 68 65 20 73 63 72 69 70 74 20 74  ls, the script t
1b740 65 72 6d 69 6e 61 74 65 73 20 77 69 74 68 20 61  erminates with a
1b750 6e 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53 59  n.** SQLITE_BUSY
1b760 20 65 72 72 6f 72 20 63 6f 64 65 2e 0a 2a 2a 0a   error code..**.
1b770 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65 20  ** The P4 value 
1b780 6d 61 79 20 62 65 20 65 69 74 68 65 72 20 61 6e  may be either an
1b790 20 69 6e 74 65 67 65 72 20 28 50 34 5f 49 4e 54   integer (P4_INT
1b7a0 33 32 29 20 6f 72 20 61 20 70 6f 69 6e 74 65 72  32) or a pointer
1b7b0 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f   to.** a KeyInfo
1b7c0 20 73 74 72 75 63 74 75 72 65 20 28 50 34 5f 4b   structure (P4_K
1b7d0 45 59 49 4e 46 4f 29 2e 20 49 66 20 69 74 20 69  EYINFO). If it i
1b7e0 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
1b7f0 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 73 74 72   KeyInfo .** str
1b800 75 63 74 75 72 65 2c 20 74 68 65 6e 20 73 61 69  ucture, then sai
1b810 64 20 73 74 72 75 63 74 75 72 65 20 64 65 66 69  d structure defi
1b820 6e 65 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  nes the content 
1b830 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a  and collating .*
1b840 2a 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68  * sequence of th
1b850 65 20 69 6e 64 65 78 20 62 65 69 6e 67 20 6f 70  e index being op
1b860 65 6e 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c  ened. Otherwise,
1b870 20 69 66 20 50 34 20 69 73 20 61 6e 20 69 6e 74   if P4 is an int
1b880 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20  eger .** value, 
1b890 69 74 20 69 73 20 73 65 74 20 74 6f 20 74 68 65  it is set to the
1b8a0 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   number of colum
1b8b0 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  ns in the table.
1b8c0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
1b8d0 20 4f 70 65 6e 57 72 69 74 65 2c 20 52 65 6f 70   OpenWrite, Reop
1b8e0 65 6e 49 64 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  enIdx.*/./* Opco
1b8f0 64 65 3a 20 52 65 6f 70 65 6e 49 64 78 20 50 31  de: ReopenIdx P1
1b900 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
1b910 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50  Synopsis: root=P
1b920 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 54  2 iDb=P3.**.** T
1b930 68 65 20 52 65 6f 70 65 6e 49 64 78 20 6f 70 63  he ReopenIdx opc
1b940 6f 64 65 20 77 6f 72 6b 73 20 65 78 61 63 74 6c  ode works exactl
1b950 79 20 6c 69 6b 65 20 52 65 61 64 4f 70 65 6e 20  y like ReadOpen 
1b960 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20 66  except that it f
1b970 69 72 73 74 0a 2a 2a 20 63 68 65 63 6b 73 20 74  irst.** checks t
1b980 6f 20 73 65 65 20 69 66 20 74 68 65 20 63 75 72  o see if the cur
1b990 73 6f 72 20 6f 6e 20 50 31 20 69 73 20 61 6c 72  sor on P1 is alr
1b9a0 65 61 64 79 20 6f 70 65 6e 20 77 69 74 68 20 61  eady open with a
1b9b0 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 6e 75   root page.** nu
1b9c0 6d 62 65 72 20 6f 66 20 50 32 20 61 6e 64 20 69  mber of P2 and i
1b9d0 66 20 69 74 20 69 73 20 74 68 69 73 20 6f 70 63  f it is this opc
1b9e0 6f 64 65 20 62 65 63 6f 6d 65 73 20 61 20 6e 6f  ode becomes a no
1b9f0 2d 6f 70 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  -op.  In other w
1ba00 6f 72 64 73 2c 0a 2a 2a 20 69 66 20 74 68 65 20  ords,.** if the 
1ba10 63 75 72 73 6f 72 20 69 73 20 61 6c 72 65 61 64  cursor is alread
1ba20 79 20 6f 70 65 6e 2c 20 64 6f 20 6e 6f 74 20 72  y open, do not r
1ba30 65 6f 70 65 6e 20 69 74 2e 0a 2a 2a 0a 2a 2a 20  eopen it..**.** 
1ba40 54 68 65 20 52 65 6f 70 65 6e 49 64 78 20 6f 70  The ReopenIdx op
1ba50 63 6f 64 65 20 6d 61 79 20 6f 6e 6c 79 20 62 65  code may only be
1ba60 20 75 73 65 64 20 77 69 74 68 20 50 35 3d 3d 30   used with P5==0
1ba70 20 61 6e 64 20 77 69 74 68 20 50 34 20 62 65 69   and with P4 bei
1ba80 6e 67 0a 2a 2a 20 61 20 50 34 5f 4b 45 59 49 4e  ng.** a P4_KEYIN
1ba90 46 4f 20 6f 62 6a 65 63 74 2e 20 20 46 75 72 74  FO object.  Furt
1baa0 68 65 72 6d 6f 72 65 2c 20 74 68 65 20 50 33 20  hermore, the P3 
1bab0 76 61 6c 75 65 20 6d 75 73 74 20 62 65 20 74 68  value must be th
1bac0 65 20 73 61 6d 65 20 61 73 0a 2a 2a 20 65 76 65  e same as.** eve
1bad0 72 79 20 6f 74 68 65 72 20 52 65 6f 70 65 6e 49  ry other ReopenI
1bae0 64 78 20 6f 72 20 4f 70 65 6e 52 65 61 64 20 66  dx or OpenRead f
1baf0 6f 72 20 74 68 65 20 73 61 6d 65 20 63 75 72 73  or the same curs
1bb00 6f 72 20 6e 75 6d 62 65 72 2e 0a 2a 2a 0a 2a 2a  or number..**.**
1bb10 20 53 65 65 20 74 68 65 20 4f 70 65 6e 52 65 61   See the OpenRea
1bb20 64 20 6f 70 63 6f 64 65 20 64 6f 63 75 6d 65 6e  d opcode documen
1bb30 74 61 74 69 6f 6e 20 66 6f 72 20 61 64 64 69 74  tation for addit
1bb40 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
1bb50 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  n..*/./* Opcode:
1bb60 20 4f 70 65 6e 57 72 69 74 65 20 50 31 20 50 32   OpenWrite P1 P2
1bb70 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
1bb80 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69  opsis: root=P2 i
1bb90 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e  Db=P3.**.** Open
1bba0 20 61 20 72 65 61 64 2f 77 72 69 74 65 20 63 75   a read/write cu
1bbb0 72 73 6f 72 20 6e 61 6d 65 64 20 50 31 20 6f 6e  rsor named P1 on
1bbc0 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
1bbd0 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 0a 2a  dex whose root.*
1bbe0 2a 20 70 61 67 65 20 69 73 20 50 32 2e 20 20 4f  * page is P2.  O
1bbf0 72 20 69 66 20 50 35 21 3d 30 20 75 73 65 20 74  r if P5!=0 use t
1bc00 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
1bc10 67 69 73 74 65 72 20 50 32 20 74 6f 20 66 69 6e  gister P2 to fin
1bc20 64 20 74 68 65 0a 2a 2a 20 72 6f 6f 74 20 70 61  d the.** root pa
1bc30 67 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34  ge..**.** The P4
1bc40 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69   value may be ei
1bc50 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20  ther an integer 
1bc60 28 50 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20  (P4_INT32) or a 
1bc70 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20  pointer to.** a 
1bc80 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72  KeyInfo structur
1bc90 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20  e (P4_KEYINFO). 
1bca0 49 66 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74  If it is a point
1bcb0 65 72 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20  er to a KeyInfo 
1bcc0 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2c 20 74  .** structure, t
1bcd0 68 65 6e 20 73 61 69 64 20 73 74 72 75 63 74 75  hen said structu
1bce0 72 65 20 64 65 66 69 6e 65 73 20 74 68 65 20 63  re defines the c
1bcf0 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61  ontent and colla
1bd00 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63  ting .** sequenc
1bd10 65 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 62  e of the index b
1bd20 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68  eing opened. Oth
1bd30 65 72 77 69 73 65 2c 20 69 66 20 50 34 20 69 73  erwise, if P4 is
1bd40 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20   an integer .** 
1bd50 76 61 6c 75 65 2c 20 69 74 20 69 73 20 73 65 74  value, it is set
1bd60 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   to the number o
1bd70 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  f columns in the
1bd80 20 74 61 62 6c 65 2c 20 6f 72 20 74 6f 20 74 68   table, or to th
1bd90 65 0a 2a 2a 20 6c 61 72 67 65 73 74 20 69 6e 64  e.** largest ind
1bda0 65 78 20 6f 66 20 61 6e 79 20 63 6f 6c 75 6d 6e  ex of any column
1bdb0 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 68   of the table th
1bdc0 61 74 20 69 73 20 61 63 74 75 61 6c 6c 79 20 75  at is actually u
1bdd0 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  sed..**.** This 
1bde0 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 6f 72 6b  instruction work
1bdf0 73 20 6a 75 73 74 20 6c 69 6b 65 20 4f 70 65 6e  s just like Open
1be00 52 65 61 64 20 65 78 63 65 70 74 20 74 68 61 74  Read except that
1be10 20 69 74 20 6f 70 65 6e 73 20 74 68 65 20 63 75   it opens the cu
1be20 72 73 6f 72 0a 2a 2a 20 69 6e 20 72 65 61 64 2f  rsor.** in read/
1be30 77 72 69 74 65 20 6d 6f 64 65 2e 20 20 46 6f 72  write mode.  For
1be40 20 61 20 67 69 76 65 6e 20 74 61 62 6c 65 2c 20   a given table, 
1be50 74 68 65 72 65 20 63 61 6e 20 62 65 20 6f 6e 65  there can be one
1be60 20 6f 72 20 6d 6f 72 65 20 72 65 61 64 2d 6f 6e   or more read-on
1be70 6c 79 0a 2a 2a 20 63 75 72 73 6f 72 73 20 6f 72  ly.** cursors or
1be80 20 61 20 73 69 6e 67 6c 65 20 72 65 61 64 2f 77   a single read/w
1be90 72 69 74 65 20 63 75 72 73 6f 72 20 62 75 74 20  rite cursor but 
1bea0 6e 6f 74 20 62 6f 74 68 2e 0a 2a 2a 0a 2a 2a 20  not both..**.** 
1beb0 53 65 65 20 61 6c 73 6f 20 4f 70 65 6e 52 65 61  See also OpenRea
1bec0 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  d..*/.case OP_Re
1bed0 6f 70 65 6e 49 64 78 3a 20 7b 0a 20 20 69 6e 74  openIdx: {.  int
1bee0 20 6e 46 69 65 6c 64 3b 0a 20 20 4b 65 79 49 6e   nField;.  KeyIn
1bef0 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  fo *pKeyInfo;.  
1bf00 69 6e 74 20 70 32 3b 0a 20 20 69 6e 74 20 69 44  int p2;.  int iD
1bf10 62 3b 0a 20 20 69 6e 74 20 77 72 46 6c 61 67 3b  b;.  int wrFlag;
1bf20 0a 20 20 42 74 72 65 65 20 2a 70 58 3b 0a 20 20  .  Btree *pX;.  
1bf30 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72  VdbeCursor *pCur
1bf40 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20  ;.  Db *pDb;..  
1bf50 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d  assert( pOp->p5=
1bf60 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f  =0 || pOp->p5==O
1bf70 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 29 3b 0a  PFLAG_SEEKEQ );.
1bf80 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1bf90 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46  4type==P4_KEYINF
1bfa0 4f 20 29 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d  O );.  pCur = p-
1bfb0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
1bfc0 0a 20 20 69 66 28 20 70 43 75 72 20 26 26 20 70  .  if( pCur && p
1bfd0 43 75 72 2d 3e 70 67 6e 6f 52 6f 6f 74 3d 3d 28  Cur->pgnoRoot==(
1bfe0 75 33 32 29 70 4f 70 2d 3e 70 32 20 29 7b 0a 20  u32)pOp->p2 ){. 
1bff0 20 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d     assert( pCur-
1c000 3e 69 44 62 3d 3d 70 4f 70 2d 3e 70 33 20 29 3b  >iDb==pOp->p3 );
1c010 20 20 20 20 20 20 2f 2a 20 47 75 61 72 61 6e 74        /* Guarant
1c020 65 65 64 20 62 79 20 74 68 65 20 63 6f 64 65 20  eed by the code 
1c030 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20 20  generator */.   
1c040 20 67 6f 74 6f 20 6f 70 65 6e 5f 63 75 72 73 6f   goto open_curso
1c050 72 5f 73 65 74 5f 68 69 6e 74 73 3b 0a 20 20 7d  r_set_hints;.  }
1c060 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 63 75 72  .  /* If the cur
1c070 73 6f 72 20 69 73 20 6e 6f 74 20 63 75 72 72 65  sor is not curre
1c080 6e 74 6c 79 20 6f 70 65 6e 20 6f 72 20 69 73 20  ntly open or is 
1c090 6f 70 65 6e 20 6f 6e 20 61 20 64 69 66 66 65 72  open on a differ
1c0a0 65 6e 74 0a 20 20 2a 2a 20 69 6e 64 65 78 2c 20  ent.  ** index, 
1c0b0 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67  then fall throug
1c0c0 68 20 69 6e 74 6f 20 4f 50 5f 4f 70 65 6e 52 65  h into OP_OpenRe
1c0d0 61 64 20 74 6f 20 66 6f 72 63 65 20 61 20 72 65  ad to force a re
1c0e0 6f 70 65 6e 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  open */.case OP_
1c0f0 4f 70 65 6e 52 65 61 64 3a 0a 63 61 73 65 20 4f  OpenRead:.case O
1c100 50 5f 4f 70 65 6e 57 72 69 74 65 3a 0a 0a 20 20  P_OpenWrite:..  
1c110 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
1c120 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74  ode==OP_OpenWrit
1c130 65 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 30 20  e || pOp->p5==0 
1c140 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 50 46 4c  || pOp->p5==OPFL
1c150 41 47 5f 53 45 45 4b 45 51 20 29 3b 0a 20 20 61  AG_SEEKEQ );.  a
1c160 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61  ssert( p->bIsRea
1c170 64 65 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  der );.  assert(
1c180 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
1c190 5f 4f 70 65 6e 52 65 61 64 20 7c 7c 20 70 4f 70  _OpenRead || pOp
1c1a0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 65 6f  ->opcode==OP_Reo
1c1b0 70 65 6e 49 64 78 0a 20 20 20 20 20 20 20 20 20  penIdx.         
1c1c0 20 7c 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d   || p->readOnly=
1c1d0 3d 30 20 29 3b 0a 0a 20 20 69 66 28 20 70 2d 3e  =0 );..  if( p->
1c1e0 65 78 70 69 72 65 64 20 29 7b 0a 20 20 20 20 72  expired ){.    r
1c1f0 63 20 3d 20 53 51 4c 49 54 45 5f 41 42 4f 52 54  c = SQLITE_ABORT
1c200 5f 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20 20 67  _ROLLBACK;.    g
1c210 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1c220 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 6e  _error;.  }..  n
1c230 46 69 65 6c 64 20 3d 20 30 3b 0a 20 20 70 4b 65  Field = 0;.  pKe
1c240 79 49 6e 66 6f 20 3d 20 30 3b 0a 20 20 70 32 20  yInfo = 0;.  p2 
1c250 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 69 44 62  = pOp->p2;.  iDb
1c260 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73   = pOp->p3;.  as
1c270 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20  sert( iDb>=0 && 
1c280 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  iDb<db->nDb );. 
1c290 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
1c2a0 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
1c2b0 2c 20 69 44 62 29 20 29 3b 0a 20 20 70 44 62 20  , iDb) );.  pDb 
1c2c0 3d 20 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d 3b  = &db->aDb[iDb];
1c2d0 0a 20 20 70 58 20 3d 20 70 44 62 2d 3e 70 42 74  .  pX = pDb->pBt
1c2e0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 58 21 3d  ;.  assert( pX!=
1c2f0 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  0 );.  if( pOp->
1c300 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57  opcode==OP_OpenW
1c310 72 69 74 65 20 29 7b 0a 20 20 20 20 61 73 73 65  rite ){.    asse
1c320 72 74 28 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45  rt( OPFLAG_FORDE
1c330 4c 45 54 45 3d 3d 42 54 52 45 45 5f 46 4f 52 44  LETE==BTREE_FORD
1c340 45 4c 45 54 45 20 29 3b 0a 20 20 20 20 77 72 46  ELETE );.    wrF
1c350 6c 61 67 20 3d 20 42 54 52 45 45 5f 57 52 43 53  lag = BTREE_WRCS
1c360 52 20 7c 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f  R | (pOp->p5 & O
1c370 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 29  PFLAG_FORDELETE)
1c380 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 73 71  ;.    assert( sq
1c390 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78  lite3SchemaMutex
1c3a0 48 65 6c 64 28 64 62 2c 20 69 44 62 2c 20 30 29  Held(db, iDb, 0)
1c3b0 20 29 3b 0a 20 20 20 20 69 66 28 20 70 44 62 2d   );.    if( pDb-
1c3c0 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66  >pSchema->file_f
1c3d0 6f 72 6d 61 74 20 3c 20 70 2d 3e 6d 69 6e 57 72  ormat < p->minWr
1c3e0 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20 29 7b  iteFileFormat ){
1c3f0 0a 20 20 20 20 20 20 70 2d 3e 6d 69 6e 57 72 69  .      p->minWri
1c400 74 65 46 69 6c 65 46 6f 72 6d 61 74 20 3d 20 70  teFileFormat = p
1c410 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c  Db->pSchema->fil
1c420 65 5f 66 6f 72 6d 61 74 3b 0a 20 20 20 20 7d 0a  e_format;.    }.
1c430 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 77 72 46    }else{.    wrF
1c440 6c 61 67 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69  lag = 0;.  }.  i
1c450 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  f( pOp->p5 & OPF
1c460 4c 41 47 5f 50 32 49 53 52 45 47 20 29 7b 0a 20  LAG_P2ISREG ){. 
1c470 20 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20     assert( p2>0 
1c480 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
1c490 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  2<=(p->nMem+1 - 
1c4a0 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
1c4b0 20 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b     pIn2 = &aMem[
1c4c0 70 32 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28  p2];.    assert(
1c4d0 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 32   memIsValid(pIn2
1c4e0 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ) );.    assert(
1c4f0 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20   (pIn2->flags & 
1c500 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20  MEM_Int)!=0 );. 
1c510 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
1c520 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 32  mIntegerify(pIn2
1c530 29 3b 0a 20 20 20 20 70 32 20 3d 20 28 69 6e 74  );.    p2 = (int
1c540 29 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20  )pIn2->u.i;.    
1c550 2f 2a 20 54 68 65 20 70 32 20 76 61 6c 75 65 20  /* The p2 value 
1c560 61 6c 77 61 79 73 20 63 6f 6d 65 73 20 66 72 6f  always comes fro
1c570 6d 20 61 20 70 72 69 6f 72 20 4f 50 5f 43 72 65  m a prior OP_Cre
1c580 61 74 65 54 61 62 6c 65 20 6f 70 63 6f 64 65 20  ateTable opcode 
1c590 61 6e 64 0a 20 20 20 20 2a 2a 20 74 68 61 74 20  and.    ** that 
1c5a0 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61  opcode will alwa
1c5b0 79 73 20 73 65 74 20 74 68 65 20 70 32 20 76 61  ys set the p2 va
1c5c0 6c 75 65 20 74 6f 20 32 20 6f 72 20 6d 6f 72 65  lue to 2 or more
1c5d0 20 6f 72 20 65 6c 73 65 20 66 61 69 6c 2e 0a 20   or else fail.. 
1c5e0 20 20 20 2a 2a 20 49 66 20 74 68 65 72 65 20 77     ** If there w
1c5f0 65 72 65 20 61 20 66 61 69 6c 75 72 65 2c 20 74  ere a failure, t
1c600 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74  he prepared stat
1c610 65 6d 65 6e 74 20 77 6f 75 6c 64 20 68 61 76 65  ement would have
1c620 20 68 61 6c 74 65 64 0a 20 20 20 20 2a 2a 20 62   halted.    ** b
1c630 65 66 6f 72 65 20 72 65 61 63 68 69 6e 67 20 74  efore reaching t
1c640 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  his instruction.
1c650 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20   */.    assert( 
1c660 70 32 3e 3d 32 20 29 3b 0a 20 20 7d 0a 20 20 69  p2>=2 );.  }.  i
1c670 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  f( pOp->p4type==
1c680 50 34 5f 4b 45 59 49 4e 46 4f 20 29 7b 0a 20 20  P4_KEYINFO ){.  
1c690 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70    pKeyInfo = pOp
1c6a0 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20  ->p4.pKeyInfo;. 
1c6b0 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49     assert( pKeyI
1c6c0 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62  nfo->enc==ENC(db
1c6d0 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ) );.    assert(
1c6e0 20 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64   pKeyInfo->db==d
1c6f0 62 20 29 3b 0a 20 20 20 20 6e 46 69 65 6c 64 20  b );.    nField 
1c700 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65  = pKeyInfo->nFie
1c710 6c 64 2b 70 4b 65 79 49 6e 66 6f 2d 3e 6e 58 46  ld+pKeyInfo->nXF
1c720 69 65 6c 64 3b 0a 20 20 7d 65 6c 73 65 20 69 66  ield;.  }else if
1c730 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
1c740 34 5f 49 4e 54 33 32 20 29 7b 0a 20 20 20 20 6e  4_INT32 ){.    n
1c750 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e  Field = pOp->p4.
1c760 69 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28  i;.  }.  assert(
1c770 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20   pOp->p1>=0 );. 
1c780 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e   assert( nField>
1c790 3d 30 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  =0 );.  testcase
1c7a0 28 20 6e 46 69 65 6c 64 3d 3d 30 20 29 3b 20 20  ( nField==0 );  
1c7b0 2f 2a 20 54 61 62 6c 65 20 77 69 74 68 20 49 4e  /* Table with IN
1c7c0 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
1c7d0 59 20 61 6e 64 20 6e 6f 74 68 69 6e 67 20 65 6c  Y and nothing el
1c7e0 73 65 20 2a 2f 0a 20 20 70 43 75 72 20 3d 20 61  se */.  pCur = a
1c7f0 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c  llocateCursor(p,
1c800 20 70 4f 70 2d 3e 70 31 2c 20 6e 46 69 65 6c 64   pOp->p1, nField
1c810 2c 20 69 44 62 2c 20 43 55 52 54 59 50 45 5f 42  , iDb, CURTYPE_B
1c820 54 52 45 45 29 3b 0a 20 20 69 66 28 20 70 43 75  TREE);.  if( pCu
1c830 72 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  r==0 ) goto no_m
1c840 65 6d 3b 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c  em;.  pCur->null
1c850 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 75 72 2d  Row = 1;.  pCur-
1c860 3e 69 73 4f 72 64 65 72 65 64 20 3d 20 31 3b 0a  >isOrdered = 1;.
1c870 20 20 70 43 75 72 2d 3e 70 67 6e 6f 52 6f 6f 74    pCur->pgnoRoot
1c880 20 3d 20 70 32 3b 0a 23 69 66 64 65 66 20 53 51   = p2;.#ifdef SQ
1c890 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 75  LITE_DEBUG.  pCu
1c8a0 72 2d 3e 77 72 46 6c 61 67 20 3d 20 77 72 46 6c  r->wrFlag = wrFl
1c8b0 61 67 3b 0a 23 65 6e 64 69 66 0a 20 20 72 63 20  ag;.#endif.  rc 
1c8c0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  = sqlite3BtreeCu
1c8d0 72 73 6f 72 28 70 58 2c 20 70 32 2c 20 77 72 46  rsor(pX, p2, wrF
1c8e0 6c 61 67 2c 20 70 4b 65 79 49 6e 66 6f 2c 20 70  lag, pKeyInfo, p
1c8f0 43 75 72 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29  Cur->uc.pCursor)
1c900 3b 0a 20 20 70 43 75 72 2d 3e 70 4b 65 79 49 6e  ;.  pCur->pKeyIn
1c910 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f 3b 0a 20  fo = pKeyInfo;. 
1c920 20 2f 2a 20 53 65 74 20 74 68 65 20 56 64 62 65   /* Set the Vdbe
1c930 43 75 72 73 6f 72 2e 69 73 54 61 62 6c 65 20 76  Cursor.isTable v
1c940 61 72 69 61 62 6c 65 2e 20 50 72 65 76 69 6f 75  ariable. Previou
1c950 73 20 76 65 72 73 69 6f 6e 73 20 6f 66 0a 20 20  s versions of.  
1c960 2a 2a 20 53 51 4c 69 74 65 20 75 73 65 64 20 74  ** SQLite used t
1c970 6f 20 63 68 65 63 6b 20 69 66 20 74 68 65 20 72  o check if the r
1c980 6f 6f 74 2d 70 61 67 65 20 66 6c 61 67 73 20 77  oot-page flags w
1c990 65 72 65 20 73 61 6e 65 20 61 74 20 74 68 69 73  ere sane at this
1c9a0 20 70 6f 69 6e 74 0a 20 20 2a 2a 20 61 6e 64 20   point.  ** and 
1c9b0 72 65 70 6f 72 74 20 64 61 74 61 62 61 73 65 20  report database 
1c9c0 63 6f 72 72 75 70 74 69 6f 6e 20 69 66 20 74 68  corruption if th
1c9d0 65 79 20 77 65 72 65 20 6e 6f 74 2c 20 62 75 74  ey were not, but
1c9e0 20 74 68 69 73 20 63 68 65 63 6b 20 68 61 73 0a   this check has.
1c9f0 20 20 2a 2a 20 73 69 6e 63 65 20 6d 6f 76 65 64    ** since moved
1ca00 20 69 6e 74 6f 20 74 68 65 20 62 74 72 65 65 20   into the btree 
1ca10 6c 61 79 65 72 2e 20 20 2a 2f 20 20 0a 20 20 70  layer.  */  .  p
1ca20 43 75 72 2d 3e 69 73 54 61 62 6c 65 20 3d 20 70  Cur->isTable = p
1ca30 4f 70 2d 3e 70 34 74 79 70 65 21 3d 50 34 5f 4b  Op->p4type!=P4_K
1ca40 45 59 49 4e 46 4f 3b 0a 0a 6f 70 65 6e 5f 63 75  EYINFO;..open_cu
1ca50 72 73 6f 72 5f 73 65 74 5f 68 69 6e 74 73 3a 0a  rsor_set_hints:.
1ca60 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47    assert( OPFLAG
1ca70 5f 42 55 4c 4b 43 53 52 3d 3d 42 54 52 45 45 5f  _BULKCSR==BTREE_
1ca80 42 55 4c 4b 4c 4f 41 44 20 29 3b 0a 20 20 61 73  BULKLOAD );.  as
1ca90 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 53 45 45  sert( OPFLAG_SEE
1caa0 4b 45 51 3d 3d 42 54 52 45 45 5f 53 45 45 4b 5f  KEQ==BTREE_SEEK_
1cab0 45 51 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  EQ );.  testcase
1cac0 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ( pOp->p5 & OPFL
1cad0 41 47 5f 42 55 4c 4b 43 53 52 20 29 3b 0a 23 69  AG_BULKCSR );.#i
1cae0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
1caf0 4c 45 5f 43 55 52 53 4f 52 5f 48 49 4e 54 53 0a  LE_CURSOR_HINTS.
1cb00 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
1cb10 3e 70 32 20 26 20 4f 50 46 4c 41 47 5f 53 45 45  >p2 & OPFLAG_SEE
1cb20 4b 45 51 20 29 3b 0a 23 65 6e 64 69 66 0a 20 20  KEQ );.#endif.  
1cb30 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
1cb40 6f 72 48 69 6e 74 46 6c 61 67 73 28 70 43 75 72  orHintFlags(pCur
1cb50 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 0a 20 20  ->uc.pCursor,.  
1cb60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb70 20 20 20 20 20 20 20 20 20 20 20 20 20 28 70 4f               (pO
1cb80 70 2d 3e 70 35 20 26 20 28 4f 50 46 4c 41 47 5f  p->p5 & (OPFLAG_
1cb90 42 55 4c 4b 43 53 52 7c 4f 50 46 4c 41 47 5f 53  BULKCSR|OPFLAG_S
1cba0 45 45 4b 45 51 29 29 29 3b 0a 20 20 69 66 28 20  EEKEQ)));.  if( 
1cbb0 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
1cbc0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1cbd0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1cbe0 6f 64 65 3a 20 4f 70 65 6e 45 70 68 65 6d 65 72  ode: OpenEphemer
1cbf0 61 6c 20 50 31 20 50 32 20 2a 20 50 34 20 50 35  al P1 P2 * P4 P5
1cc00 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6e 43  .** Synopsis: nC
1cc10 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 4f  olumn=P2.**.** O
1cc20 70 65 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72  pen a new cursor
1cc30 20 50 31 20 74 6f 20 61 20 74 72 61 6e 73 69 65   P1 to a transie
1cc40 6e 74 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65  nt table..** The
1cc50 20 63 75 72 73 6f 72 20 69 73 20 61 6c 77 61 79   cursor is alway
1cc60 73 20 6f 70 65 6e 65 64 20 72 65 61 64 2f 77 72  s opened read/wr
1cc70 69 74 65 20 65 76 65 6e 20 69 66 20 0a 2a 2a 20  ite even if .** 
1cc80 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
1cc90 65 20 69 73 20 72 65 61 64 2d 6f 6e 6c 79 2e 20  e is read-only. 
1cca0 20 54 68 65 20 65 70 68 65 6d 65 72 61 6c 0a 2a   The ephemeral.*
1ccb0 2a 20 74 61 62 6c 65 20 69 73 20 64 65 6c 65 74  * table is delet
1ccc0 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ed automatically
1ccd0 20 77 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72   when the cursor
1cce0 20 69 73 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a   is closed..**.*
1ccf0 2a 20 50 32 20 69 73 20 74 68 65 20 6e 75 6d 62  * P2 is the numb
1cd00 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
1cd10 20 74 68 65 20 65 70 68 65 6d 65 72 61 6c 20 74   the ephemeral t
1cd20 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72  able..** The cur
1cd30 73 6f 72 20 70 6f 69 6e 74 73 20 74 6f 20 61 20  sor points to a 
1cd40 42 54 72 65 65 20 74 61 62 6c 65 20 69 66 20 50  BTree table if P
1cd50 34 3d 3d 30 20 61 6e 64 20 74 6f 20 61 20 42 54  4==0 and to a BT
1cd60 72 65 65 20 69 6e 64 65 78 0a 2a 2a 20 69 66 20  ree index.** if 
1cd70 50 34 20 69 73 20 6e 6f 74 20 30 2e 20 20 49 66  P4 is not 0.  If
1cd80 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c   P4 is not NULL,
1cd90 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20   it points to a 
1cda0 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72  KeyInfo structur
1cdb0 65 0a 2a 2a 20 74 68 61 74 20 64 65 66 69 6e 65  e.** that define
1cdc0 73 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20  s the format of 
1cdd0 6b 65 79 73 20 69 6e 20 74 68 65 20 69 6e 64 65  keys in the inde
1cde0 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20  x..**.** The P5 
1cdf0 70 61 72 61 6d 65 74 65 72 20 63 61 6e 20 62 65  parameter can be
1ce00 20 61 20 6d 61 73 6b 20 6f 66 20 74 68 65 20 42   a mask of the B
1ce10 54 52 45 45 5f 2a 20 66 6c 61 67 73 20 64 65 66  TREE_* flags def
1ce20 69 6e 65 64 0a 2a 2a 20 69 6e 20 62 74 72 65 65  ined.** in btree
1ce30 2e 68 2e 20 20 54 68 65 73 65 20 66 6c 61 67 73  .h.  These flags
1ce40 20 63 6f 6e 74 72 6f 6c 20 61 73 70 65 63 74 73   control aspects
1ce50 20 6f 66 20 74 68 65 20 6f 70 65 72 61 74 69 6f   of the operatio
1ce60 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 62 74 72 65  n of.** the btre
1ce70 65 2e 20 20 54 68 65 20 42 54 52 45 45 5f 4f 4d  e.  The BTREE_OM
1ce80 49 54 5f 4a 4f 55 52 4e 41 4c 20 61 6e 64 20 42  IT_JOURNAL and B
1ce90 54 52 45 45 5f 53 49 4e 47 4c 45 20 66 6c 61 67  TREE_SINGLE flag
1cea0 73 20 61 72 65 0a 2a 2a 20 61 64 64 65 64 20 61  s are.** added a
1ceb0 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2f  utomatically..*/
1cec0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e  ./* Opcode: Open
1ced0 41 75 74 6f 69 6e 64 65 78 20 50 31 20 50 32 20  Autoindex P1 P2 
1cee0 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  * P4 *.** Synops
1cef0 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a  is: nColumn=P2.*
1cf00 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
1cf10 20 77 6f 72 6b 73 20 74 68 65 20 73 61 6d 65 20   works the same 
1cf20 61 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65  as OP_OpenEpheme
1cf30 72 61 6c 2e 20 20 49 74 20 68 61 73 20 61 0a 2a  ral.  It has a.*
1cf40 2a 20 64 69 66 66 65 72 65 6e 74 20 6e 61 6d 65  * different name
1cf50 20 74 6f 20 64 69 73 74 69 6e 67 75 69 73 68 20   to distinguish 
1cf60 69 74 73 20 75 73 65 2e 20 20 54 61 62 6c 65 73  its use.  Tables
1cf70 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 0a 2a   created using.*
1cf80 2a 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65  * by this opcode
1cf90 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 66 6f   will be used fo
1cfa0 72 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  r automatically 
1cfb0 63 72 65 61 74 65 64 20 74 72 61 6e 73 69 65 6e  created transien
1cfc0 74 0a 2a 2a 20 69 6e 64 69 63 65 73 20 69 6e 20  t.** indices in 
1cfd0 6a 6f 69 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  joins..*/.case O
1cfe0 50 5f 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78 3a  P_OpenAutoindex:
1cff0 20 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 45 70   .case OP_OpenEp
1d000 68 65 6d 65 72 61 6c 3a 20 7b 0a 20 20 56 64 62  hemeral: {.  Vdb
1d010 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20  eCursor *pCx;.  
1d020 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66  KeyInfo *pKeyInf
1d030 6f 3b 0a 0a 20 20 73 74 61 74 69 63 20 63 6f 6e  o;..  static con
1d040 73 74 20 69 6e 74 20 76 66 73 46 6c 61 67 73 20  st int vfsFlags 
1d050 3d 20 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f  = .      SQLITE_
1d060 4f 50 45 4e 5f 52 45 41 44 57 52 49 54 45 20 7c  OPEN_READWRITE |
1d070 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50  .      SQLITE_OP
1d080 45 4e 5f 43 52 45 41 54 45 20 7c 0a 20 20 20 20  EN_CREATE |.    
1d090 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 45 58    SQLITE_OPEN_EX
1d0a0 43 4c 55 53 49 56 45 20 7c 0a 20 20 20 20 20 20  CLUSIVE |.      
1d0b0 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 44 45 4c 45  SQLITE_OPEN_DELE
1d0c0 54 45 4f 4e 43 4c 4f 53 45 20 7c 0a 20 20 20 20  TEONCLOSE |.    
1d0d0 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 54 52    SQLITE_OPEN_TR
1d0e0 41 4e 53 49 45 4e 54 5f 44 42 3b 0a 20 20 61 73  ANSIENT_DB;.  as
1d0f0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1d100 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1d110 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a 20 20 70 43  p->p2>=0 );.  pC
1d120 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73  x = allocateCurs
1d130 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  or(p, pOp->p1, p
1d140 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 43 55 52 54  Op->p2, -1, CURT
1d150 59 50 45 5f 42 54 52 45 45 29 3b 0a 20 20 69 66  YPE_BTREE);.  if
1d160 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20  ( pCx==0 ) goto 
1d170 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e  no_mem;.  pCx->n
1d180 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43  ullRow = 1;.  pC
1d190 78 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c 20 3d  x->isEphemeral =
1d1a0 20 31 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   1;.  rc = sqlit
1d1b0 65 33 42 74 72 65 65 4f 70 65 6e 28 64 62 2d 3e  e3BtreeOpen(db->
1d1c0 70 56 66 73 2c 20 30 2c 20 64 62 2c 20 26 70 43  pVfs, 0, db, &pC
1d1d0 78 2d 3e 70 42 74 2c 20 0a 20 20 20 20 20 20 20  x->pBt, .       
1d1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d1f0 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52   BTREE_OMIT_JOUR
1d200 4e 41 4c 20 7c 20 42 54 52 45 45 5f 53 49 4e 47  NAL | BTREE_SING
1d210 4c 45 20 7c 20 70 4f 70 2d 3e 70 35 2c 20 76 66  LE | pOp->p5, vf
1d220 73 46 6c 61 67 73 29 3b 0a 20 20 69 66 28 20 72  sFlags);.  if( r
1d230 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
1d240 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1d250 42 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28  BtreeBeginTrans(
1d260 70 43 78 2d 3e 70 42 74 2c 20 31 29 3b 0a 20 20  pCx->pBt, 1);.  
1d270 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  }.  if( rc==SQLI
1d280 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 2f 2a 20  TE_OK ){.    /* 
1d290 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20 69  If a transient i
1d2a0 6e 64 65 78 20 69 73 20 72 65 71 75 69 72 65 64  ndex is required
1d2b0 2c 20 63 72 65 61 74 65 20 69 74 20 62 79 20 63  , create it by c
1d2c0 61 6c 6c 69 6e 67 0a 20 20 20 20 2a 2a 20 73 71  alling.    ** sq
1d2d0 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65  lite3BtreeCreate
1d2e0 54 61 62 6c 65 28 29 20 77 69 74 68 20 74 68 65  Table() with the
1d2f0 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 66   BTREE_BLOBKEY f
1d300 6c 61 67 20 62 65 66 6f 72 65 0a 20 20 20 20 2a  lag before.    *
1d310 2a 20 6f 70 65 6e 69 6e 67 20 69 74 2e 20 49 66  * opening it. If
1d320 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62   a transient tab
1d330 6c 65 20 69 73 20 72 65 71 75 69 72 65 64 2c 20  le is required, 
1d340 6a 75 73 74 20 75 73 65 20 74 68 65 0a 20 20 20  just use the.   
1d350 20 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c   ** automaticall
1d360 79 20 63 72 65 61 74 65 64 20 74 61 62 6c 65 20  y created table 
1d370 77 69 74 68 20 72 6f 6f 74 2d 70 61 67 65 20 31  with root-page 1
1d380 20 28 61 6e 20 42 4c 4f 42 5f 49 4e 54 4b 45 59   (an BLOB_INTKEY
1d390 20 74 61 62 6c 65 29 2e 0a 20 20 20 20 2a 2f 0a   table)..    */.
1d3a0 20 20 20 20 69 66 28 20 28 70 4b 65 79 49 6e 66      if( (pKeyInf
1d3b0 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79  o = pOp->p4.pKey
1d3c0 49 6e 66 6f 29 21 3d 30 20 29 7b 0a 20 20 20 20  Info)!=0 ){.    
1d3d0 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 20 20    int pgno;.    
1d3e0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1d3f0 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46  4type==P4_KEYINF
1d400 4f 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  O );.      rc = 
1d410 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65 61  sqlite3BtreeCrea
1d420 74 65 54 61 62 6c 65 28 70 43 78 2d 3e 70 42 74  teTable(pCx->pBt
1d430 2c 20 26 70 67 6e 6f 2c 20 42 54 52 45 45 5f 42  , &pgno, BTREE_B
1d440 4c 4f 42 4b 45 59 20 7c 20 70 4f 70 2d 3e 70 35  LOBKEY | pOp->p5
1d450 29 3b 20 0a 20 20 20 20 20 20 69 66 28 20 72 63  ); .      if( rc
1d460 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
1d470 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
1d480 67 6e 6f 3d 3d 4d 41 53 54 45 52 5f 52 4f 4f 54  gno==MASTER_ROOT
1d490 2b 31 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  +1 );.        as
1d4a0 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e  sert( pKeyInfo->
1d4b0 64 62 3d 3d 64 62 20 29 3b 0a 20 20 20 20 20 20  db==db );.      
1d4c0 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e    assert( pKeyIn
1d4d0 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29  fo->enc==ENC(db)
1d4e0 20 29 3b 0a 20 20 20 20 20 20 20 20 70 43 78 2d   );.        pCx-
1d4f0 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79  >pKeyInfo = pKey
1d500 49 6e 66 6f 3b 0a 20 20 20 20 20 20 20 20 72 63  Info;.        rc
1d510 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
1d520 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74 2c 20  ursor(pCx->pBt, 
1d530 70 67 6e 6f 2c 20 42 54 52 45 45 5f 57 52 43 53  pgno, BTREE_WRCS
1d540 52 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  R,.             
1d550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d560 20 20 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43 78     pKeyInfo, pCx
1d570 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20  ->uc.pCursor);. 
1d580 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 43 78       }.      pCx
1d590 2d 3e 69 73 54 61 62 6c 65 20 3d 20 30 3b 0a 20  ->isTable = 0;. 
1d5a0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1d5b0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1d5c0 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74  eCursor(pCx->pBt
1d5d0 2c 20 4d 41 53 54 45 52 5f 52 4f 4f 54 2c 20 42  , MASTER_ROOT, B
1d5e0 54 52 45 45 5f 57 52 43 53 52 2c 0a 20 20 20 20  TREE_WRCSR,.    
1d5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d600 20 20 20 20 20 20 20 20 20 20 30 2c 20 70 43 78            0, pCx
1d610 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20  ->uc.pCursor);. 
1d620 20 20 20 20 20 70 43 78 2d 3e 69 73 54 61 62 6c       pCx->isTabl
1d630 65 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d  e = 1;.    }.  }
1d640 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
1d650 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1d660 72 6f 72 3b 0a 20 20 70 43 78 2d 3e 69 73 4f 72  ror;.  pCx->isOr
1d670 64 65 72 65 64 20 3d 20 28 70 4f 70 2d 3e 70 35  dered = (pOp->p5
1d680 21 3d 42 54 52 45 45 5f 55 4e 4f 52 44 45 52 45  !=BTREE_UNORDERE
1d690 44 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  D);.  break;.}..
1d6a0 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65  /* Opcode: Sorte
1d6b0 72 4f 70 65 6e 20 50 31 20 50 32 20 50 33 20 50  rOpen P1 P2 P3 P
1d6c0 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  4 *.**.** This o
1d6d0 70 63 6f 64 65 20 77 6f 72 6b 73 20 6c 69 6b 65  pcode works like
1d6e0 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
1d6f0 6c 20 65 78 63 65 70 74 20 74 68 61 74 20 69 74  l except that it
1d700 20 6f 70 65 6e 73 0a 2a 2a 20 61 20 74 72 61 6e   opens.** a tran
1d710 73 69 65 6e 74 20 69 6e 64 65 78 20 74 68 61 74  sient index that
1d720 20 69 73 20 73 70 65 63 69 66 69 63 61 6c 6c 79   is specifically
1d730 20 64 65 73 69 67 6e 65 64 20 74 6f 20 73 6f 72   designed to sor
1d740 74 20 6c 61 72 67 65 0a 2a 2a 20 74 61 62 6c 65  t large.** table
1d750 73 20 75 73 69 6e 67 20 61 6e 20 65 78 74 65 72  s using an exter
1d760 6e 61 6c 20 6d 65 72 67 65 2d 73 6f 72 74 20 61  nal merge-sort a
1d770 6c 67 6f 72 69 74 68 6d 2e 0a 2a 2a 0a 2a 2a 20  lgorithm..**.** 
1d780 49 66 20 61 72 67 75 6d 65 6e 74 20 50 33 20 69  If argument P3 i
1d790 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
1d7a0 20 69 74 20 69 6e 64 69 63 61 74 65 73 20 74 68   it indicates th
1d7b0 61 74 20 74 68 65 20 73 6f 72 74 65 72 20 6d 61  at the sorter ma
1d7c0 79 0a 2a 2a 20 61 73 73 75 6d 65 20 74 68 61 74  y.** assume that
1d7d0 20 61 20 73 74 61 62 6c 65 20 73 6f 72 74 20 63   a stable sort c
1d7e0 6f 6e 73 69 64 65 72 69 6e 67 20 74 68 65 20 66  onsidering the f
1d7f0 69 72 73 74 20 50 33 20 66 69 65 6c 64 73 20 6f  irst P3 fields o
1d800 66 20 65 61 63 68 0a 2a 2a 20 6b 65 79 20 69 73  f each.** key is
1d810 20 73 75 66 66 69 63 69 65 6e 74 20 74 6f 20 70   sufficient to p
1d820 72 6f 64 75 63 65 20 74 68 65 20 72 65 71 75 69  roduce the requi
1d830 72 65 64 20 72 65 73 75 6c 74 73 2e 0a 2a 2f 0a  red results..*/.
1d840 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 4f 70  case OP_SorterOp
1d850 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  en: {.  VdbeCurs
1d860 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 61 73 73 65  or *pCx;..  asse
1d870 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29  rt( pOp->p1>=0 )
1d880 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1d890 3e 70 32 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20  >p2>=0 );.  pCx 
1d8a0 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72  = allocateCursor
1d8b0 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  (p, pOp->p1, pOp
1d8c0 2d 3e 70 32 2c 20 2d 31 2c 20 43 55 52 54 59 50  ->p2, -1, CURTYP
1d8d0 45 5f 53 4f 52 54 45 52 29 3b 0a 20 20 69 66 28  E_SORTER);.  if(
1d8e0 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e   pCx==0 ) goto n
1d8f0 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 70 4b  o_mem;.  pCx->pK
1d900 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34  eyInfo = pOp->p4
1d910 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73  .pKeyInfo;.  ass
1d920 65 72 74 28 20 70 43 78 2d 3e 70 4b 65 79 49 6e  ert( pCx->pKeyIn
1d930 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20  fo->db==db );.  
1d940 61 73 73 65 72 74 28 20 70 43 78 2d 3e 70 4b 65  assert( pCx->pKe
1d950 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28  yInfo->enc==ENC(
1d960 64 62 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  db) );.  rc = sq
1d970 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 49  lite3VdbeSorterI
1d980 6e 69 74 28 64 62 2c 20 70 4f 70 2d 3e 70 33 2c  nit(db, pOp->p3,
1d990 20 70 43 78 29 3b 0a 20 20 69 66 28 20 72 63 20   pCx);.  if( rc 
1d9a0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
1d9b0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65  _to_error;.  bre
1d9c0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1d9d0 3a 20 53 65 71 75 65 6e 63 65 54 65 73 74 20 50  : SequenceTest P
1d9e0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
1d9f0 6e 6f 70 73 69 73 3a 20 69 66 28 20 63 75 72 73  nopsis: if( curs
1da00 6f 72 5b 50 31 5d 2e 63 74 72 2b 2b 20 29 20 70  or[P1].ctr++ ) p
1da10 63 20 3d 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20  c = P2.**.** P1 
1da20 69 73 20 61 20 73 6f 72 74 65 72 20 63 75 72 73  is a sorter curs
1da30 6f 72 2e 20 49 66 20 74 68 65 20 73 65 71 75 65  or. If the seque
1da40 6e 63 65 20 63 6f 75 6e 74 65 72 20 69 73 20 63  nce counter is c
1da50 75 72 72 65 6e 74 6c 79 20 7a 65 72 6f 2c 20 6a  urrently zero, j
1da60 75 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e 20 52 65  ump.** to P2. Re
1da70 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74  gardless of whet
1da80 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 6a  her or not the j
1da90 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 69 6e  ump is taken, in
1daa0 63 72 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 74  crement the.** t
1dab0 68 65 20 73 65 71 75 65 6e 63 65 20 76 61 6c 75  he sequence valu
1dac0 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  e..*/.case OP_Se
1dad0 71 75 65 6e 63 65 54 65 73 74 3a 20 7b 0a 20 20  quenceTest: {.  
1dae0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
1daf0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1db00 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
1db10 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1db20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
1db30 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
1db40 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29  ( isSorter(pC) )
1db50 3b 0a 20 20 69 66 28 20 28 70 43 2d 3e 73 65 71  ;.  if( (pC->seq
1db60 43 6f 75 6e 74 2b 2b 29 3d 3d 30 20 29 7b 0a 20  Count++)==0 ){. 
1db70 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
1db80 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  p2;.  }.  break;
1db90 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .}../* Opcode: O
1dba0 70 65 6e 50 73 65 75 64 6f 20 50 31 20 50 32 20  penPseudo P1 P2 
1dbb0 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
1dbc0 69 73 3a 20 50 33 20 63 6f 6c 75 6d 6e 73 20 69  is: P3 columns i
1dbd0 6e 20 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 4f 70  n r[P2].**.** Op
1dbe0 65 6e 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20  en a new cursor 
1dbf0 74 68 61 74 20 70 6f 69 6e 74 73 20 74 6f 20 61  that points to a
1dc00 20 66 61 6b 65 20 74 61 62 6c 65 20 74 68 61 74   fake table that
1dc10 20 63 6f 6e 74 61 69 6e 73 20 61 20 73 69 6e 67   contains a sing
1dc20 6c 65 0a 2a 2a 20 72 6f 77 20 6f 66 20 64 61 74  le.** row of dat
1dc30 61 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e 74 20  a.  The content 
1dc40 6f 66 20 74 68 61 74 20 6f 6e 65 20 72 6f 77 20  of that one row 
1dc50 69 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  is the content o
1dc60 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 72 65 67 69  f memory.** regi
1dc70 73 74 65 72 20 50 32 2e 20 20 49 6e 20 6f 74 68  ster P2.  In oth
1dc80 65 72 20 77 6f 72 64 73 2c 20 63 75 72 73 6f 72  er words, cursor
1dc90 20 50 31 20 62 65 63 6f 6d 65 73 20 61 6e 20 61   P1 becomes an a
1dca0 6c 69 61 73 20 66 6f 72 20 74 68 65 20 0a 2a 2a  lias for the .**
1dcb0 20 4d 45 4d 5f 42 6c 6f 62 20 63 6f 6e 74 65 6e   MEM_Blob conten
1dcc0 74 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 72  t contained in r
1dcd0 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
1dce0 2a 20 41 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  * A pseudo-table
1dcf0 20 63 72 65 61 74 65 64 20 62 79 20 74 68 69 73   created by this
1dd00 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20   opcode is used 
1dd10 74 6f 20 68 6f 6c 64 20 61 20 73 69 6e 67 6c 65  to hold a single
1dd20 0a 2a 2a 20 72 6f 77 20 6f 75 74 70 75 74 20 66  .** row output f
1dd30 72 6f 6d 20 74 68 65 20 73 6f 72 74 65 72 20 73  rom the sorter s
1dd40 6f 20 74 68 61 74 20 74 68 65 20 72 6f 77 20 63  o that the row c
1dd50 61 6e 20 62 65 20 64 65 63 6f 6d 70 6f 73 65 64  an be decomposed
1dd60 20 69 6e 74 6f 0a 2a 2a 20 69 6e 64 69 76 69 64   into.** individ
1dd70 75 61 6c 20 63 6f 6c 75 6d 6e 73 20 75 73 69 6e  ual columns usin
1dd80 67 20 74 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20  g the OP_Column 
1dd90 6f 70 63 6f 64 65 2e 20 20 54 68 65 20 4f 50 5f  opcode.  The OP_
1dda0 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 0a 2a 2a  Column opcode.**
1ddb0 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 63 75 72   is the only cur
1ddc0 73 6f 72 20 6f 70 63 6f 64 65 20 74 68 61 74 20  sor opcode that 
1ddd0 77 6f 72 6b 73 20 77 69 74 68 20 61 20 70 73 65  works with a pse
1dde0 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a  udo-table..**.**
1ddf0 20 50 33 20 69 73 20 74 68 65 20 6e 75 6d 62 65   P3 is the numbe
1de00 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74  r of fields in t
1de10 68 65 20 72 65 63 6f 72 64 73 20 74 68 61 74 20  he records that 
1de20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 62  will be stored b
1de30 79 0a 2a 2a 20 74 68 65 20 70 73 65 75 64 6f 2d  y.** the pseudo-
1de40 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  table..*/.case O
1de50 50 5f 4f 70 65 6e 50 73 65 75 64 6f 3a 20 7b 0a  P_OpenPseudo: {.
1de60 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1de70 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  x;..  assert( pO
1de80 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73  p->p1>=0 );.  as
1de90 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30  sert( pOp->p3>=0
1dea0 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f   );.  pCx = allo
1deb0 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f  cateCursor(p, pO
1dec0 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 33 2c 20  p->p1, pOp->p3, 
1ded0 2d 31 2c 20 43 55 52 54 59 50 45 5f 50 53 45 55  -1, CURTYPE_PSEU
1dee0 44 4f 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d  DO);.  if( pCx==
1def0 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
1df00 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20  .  pCx->nullRow 
1df10 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 75 63 2e 70  = 1;.  pCx->uc.p
1df20 73 65 75 64 6f 54 61 62 6c 65 52 65 67 20 3d 20  seudoTableReg = 
1df30 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 43 78 2d 3e  pOp->p2;.  pCx->
1df40 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 61  isTable = 1;.  a
1df50 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d  ssert( pOp->p5==
1df60 30 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  0 );.  break;.}.
1df70 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 6f 73  ./* Opcode: Clos
1df80 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  e P1 * * * *.**.
1df90 2a 2a 20 43 6c 6f 73 65 20 61 20 63 75 72 73 6f  ** Close a curso
1dfa0 72 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65  r previously ope
1dfb0 6e 65 64 20 61 73 20 50 31 2e 20 20 49 66 20 50  ned as P1.  If P
1dfc0 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 63 75 72 72  1 is not.** curr
1dfd0 65 6e 74 6c 79 20 6f 70 65 6e 2c 20 74 68 69 73  ently open, this
1dfe0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20   instruction is 
1dff0 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65  a no-op..*/.case
1e000 20 4f 50 5f 43 6c 6f 73 65 3a 20 7b 0a 20 20 61   OP_Close: {.  a
1e010 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1e020 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
1e030 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 73 71 6c  nCursor );.  sql
1e040 69 74 65 33 56 64 62 65 46 72 65 65 43 75 72 73  ite3VdbeFreeCurs
1e050 6f 72 28 70 2c 20 70 2d 3e 61 70 43 73 72 5b 70  or(p, p->apCsr[p
1e060 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20 70 2d 3e 61  Op->p1]);.  p->a
1e070 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20  pCsr[pOp->p1] = 
1e080 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23  0;.  break;.}..#
1e090 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
1e0a0 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 55 53 45 44 5f  BLE_COLUMN_USED_
1e0b0 4d 41 53 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  MASK./* Opcode: 
1e0c0 43 6f 6c 75 6d 6e 73 55 73 65 64 20 50 31 20 2a  ColumnsUsed P1 *
1e0d0 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68   * P4 *.**.** Th
1e0e0 69 73 20 6f 70 63 6f 64 65 20 28 77 68 69 63 68  is opcode (which
1e0f0 20 6f 6e 6c 79 20 65 78 69 73 74 73 20 69 66 20   only exists if 
1e100 53 51 4c 69 74 65 20 77 61 73 20 63 6f 6d 70 69  SQLite was compi
1e110 6c 65 64 20 77 69 74 68 0a 2a 2a 20 53 51 4c 49  led with.** SQLI
1e120 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e  TE_ENABLE_COLUMN
1e130 5f 55 53 45 44 5f 4d 41 53 4b 29 20 69 64 65 6e  _USED_MASK) iden
1e140 74 69 66 69 65 73 20 77 68 69 63 68 20 63 6f 6c  tifies which col
1e150 75 6d 6e 73 20 6f 66 20 74 68 65 0a 2a 2a 20 74  umns of the.** t
1e160 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 66 6f  able or index fo
1e170 72 20 63 75 72 73 6f 72 20 50 31 20 61 72 65 20  r cursor P1 are 
1e180 75 73 65 64 2e 20 20 50 34 20 69 73 20 61 20 36  used.  P4 is a 6
1e190 34 2d 62 69 74 20 69 6e 74 65 67 65 72 0a 2a 2a  4-bit integer.**
1e1a0 20 28 50 34 5f 49 4e 54 36 34 29 20 69 6e 20 77   (P4_INT64) in w
1e1b0 68 69 63 68 20 74 68 65 20 66 69 72 73 74 20 36  hich the first 6
1e1c0 33 20 62 69 74 73 20 61 72 65 20 6f 6e 65 20 66  3 bits are one f
1e1d0 6f 72 20 65 61 63 68 20 6f 66 20 74 68 65 0a 2a  or each of the.*
1e1e0 2a 20 66 69 72 73 74 20 36 33 20 63 6f 6c 75 6d  * first 63 colum
1e1f0 6e 73 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  ns of the table 
1e200 6f 72 20 69 6e 64 65 78 20 74 68 61 74 20 61 72  or index that ar
1e210 65 20 61 63 74 75 61 6c 6c 79 20 75 73 65 64 0a  e actually used.
1e220 2a 2a 20 62 79 20 74 68 65 20 63 75 72 73 6f 72  ** by the cursor
1e230 2e 20 20 54 68 65 20 68 69 67 68 2d 6f 72 64 65  .  The high-orde
1e240 72 20 62 69 74 20 69 73 20 73 65 74 20 69 66 20  r bit is set if 
1e250 61 6e 79 20 63 6f 6c 75 6d 6e 20 61 66 74 65 72  any column after
1e260 0a 2a 2a 20 74 68 65 20 36 34 74 68 20 69 73 20  .** the 64th is 
1e270 75 73 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  used..*/.case OP
1e280 5f 43 6f 6c 75 6d 6e 73 55 73 65 64 3a 20 7b 0a  _ColumnsUsed: {.
1e290 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1e2a0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
1e2b0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
1e2c0 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
1e2d0 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
1e2e0 45 20 29 3b 0a 20 20 70 43 2d 3e 6d 61 73 6b 55  E );.  pC->maskU
1e2f0 73 65 64 20 3d 20 2a 28 75 36 34 2a 29 70 4f 70  sed = *(u64*)pOp
1e300 2d 3e 70 34 2e 70 49 36 34 3b 0a 20 20 62 72 65  ->p4.pI64;.  bre
1e310 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ak;.}.#endif../*
1e320 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 45 20   Opcode: SeekGE 
1e330 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
1e340 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
1e350 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66  [P3@P4].**.** If
1e360 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
1e370 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c  s to an SQL tabl
1e380 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75  e (B-Tree that u
1e390 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73  ses integer keys
1e3a0 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76  ), .** use the v
1e3b0 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
1e3c0 20 50 33 20 61 73 20 74 68 65 20 6b 65 79 2e 20   P3 as the key. 
1e3d0 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
1e3e0 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53  fers .** to an S
1e3f0 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50  QL index, then P
1e400 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69  3 is the first i
1e410 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34  n an array of P4
1e420 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74   registers .** t
1e430 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20  hat are used as 
1e440 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
1e450 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65  x key. .**.** Re
1e460 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20  position cursor 
1e470 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70  P1 so that  it p
1e480 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61  oints to the sma
1e490 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61 74  llest entry that
1e4a0 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20   .** is greater 
1e4b0 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
1e4c0 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20   the key value. 
1e4d0 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
1e4e0 72 65 63 6f 72 64 73 20 0a 2a 2a 20 67 72 65 61  records .** grea
1e4f0 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ter than or equa
1e500 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64  l to the key and
1e510 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P2 is not zero,
1e520 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
1e530 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63  ..**.** If the c
1e540 75 72 73 6f 72 20 50 31 20 77 61 73 20 6f 70 65  ursor P1 was ope
1e550 6e 65 64 20 75 73 69 6e 67 20 74 68 65 20 4f 50  ned using the OP
1e560 46 4c 41 47 5f 53 45 45 4b 45 51 20 66 6c 61 67  FLAG_SEEKEQ flag
1e570 2c 20 74 68 65 6e 20 74 68 69 73 0a 2a 2a 20 6f  , then this.** o
1e580 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61 79  pcode will alway
1e590 73 20 6c 61 6e 64 20 6f 6e 20 61 20 72 65 63 6f  s land on a reco
1e5a0 72 64 20 74 68 61 74 20 65 71 75 61 6c 6c 79 20  rd that equally 
1e5b0 65 71 75 61 6c 73 20 74 68 65 20 6b 65 79 2c 20  equals the key, 
1e5c0 6f 72 0a 2a 2a 20 65 6c 73 65 20 6a 75 6d 70 20  or.** else jump 
1e5d0 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
1e5e0 32 2e 20 20 57 68 65 6e 20 74 68 65 20 63 75 72  2.  When the cur
1e5f0 73 6f 72 20 69 73 20 4f 50 46 4c 41 47 5f 53 45  sor is OPFLAG_SE
1e600 45 4b 45 51 2c 20 74 68 69 73 0a 2a 2a 20 6f 70  EKEQ, this.** op
1e610 63 6f 64 65 20 6d 75 73 74 20 62 65 20 66 6f 6c  code must be fol
1e620 6c 6f 77 65 64 20 62 79 20 61 6e 20 49 64 78 4c  lowed by an IdxL
1e630 45 20 6f 70 63 6f 64 65 20 77 69 74 68 20 74 68  E opcode with th
1e640 65 20 73 61 6d 65 20 61 72 67 75 6d 65 6e 74 73  e same arguments
1e650 2e 0a 2a 2a 20 54 68 65 20 49 64 78 4c 45 20 6f  ..** The IdxLE o
1e660 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 73 6b  pcode will be sk
1e670 69 70 70 65 64 20 69 66 20 74 68 69 73 20 6f 70  ipped if this op
1e680 63 6f 64 65 20 73 75 63 63 65 65 64 73 2c 20 62  code succeeds, b
1e690 75 74 20 74 68 65 0a 2a 2a 20 49 64 78 4c 45 20  ut the.** IdxLE 
1e6a0 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 75  opcode will be u
1e6b0 73 65 64 20 6f 6e 20 73 75 62 73 65 71 75 65 6e  sed on subsequen
1e6c0 74 20 6c 6f 6f 70 20 69 74 65 72 61 74 69 6f 6e  t loop iteration
1e6d0 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  s..**.** This op
1e6e0 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20  code leaves the 
1e6f0 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65  cursor configure
1e700 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66 6f 72  d to move in for
1e710 77 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a 20 66  ward order,.** f
1e720 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  rom the beginnin
1e730 67 20 74 6f 77 61 72 64 20 74 68 65 20 65 6e 64  g toward the end
1e740 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
1e750 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  s, the cursor is
1e760 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74  .** configured t
1e770 6f 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f 74 20  o use Next, not 
1e780 50 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  Prev..**.** See 
1e790 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
1e7a0 46 6f 75 6e 64 2c 20 53 65 65 6b 4c 74 2c 20 53  Found, SeekLt, S
1e7b0 65 65 6b 47 74 2c 20 53 65 65 6b 4c 65 0a 2a 2f  eekGt, SeekLe.*/
1e7c0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b  ./* Opcode: Seek
1e7d0 47 54 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  GT P1 P2 P3 P4 *
1e7e0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
1e7f0 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
1e800 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
1e810 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74  fers to an SQL t
1e820 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61  able (B-Tree tha
1e830 74 20 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b  t uses integer k
1e840 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68  eys), .** use th
1e850 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
1e860 74 65 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e  ter P3 as a key.
1e870 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 72 65   If cursor P1 re
1e880 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53  fers .** to an S
1e890 51 4c 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50  QL index, then P
1e8a0 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 69  3 is the first i
1e8b0 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34  n an array of P4
1e8c0 20 72 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74   registers .** t
1e8d0 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20  hat are used as 
1e8e0 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
1e8f0 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65  x key. .**.** Re
1e900 70 6f 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20  position cursor 
1e910 50 31 20 73 6f 20 74 68 61 74 20 20 69 74 20 70  P1 so that  it p
1e920 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61  oints to the sma
1e930 6c 6c 65 73 74 20 65 6e 74 72 79 20 74 68 61 74  llest entry that
1e940 20 0a 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20   .** is greater 
1e950 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c  than the key val
1e960 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65  ue. If there are
1e970 20 6e 6f 20 72 65 63 6f 72 64 73 20 67 72 65 61   no records grea
1e980 74 65 72 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65  ter than .** the
1e990 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e   key and P2 is n
1e9a0 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75  ot zero, then ju
1e9b0 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  mp to P2..**.** 
1e9c0 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76  This opcode leav
1e9d0 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f  es the cursor co
1e9e0 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65  nfigured to move
1e9f0 20 69 6e 20 66 6f 72 77 61 72 64 20 6f 72 64 65   in forward orde
1ea00 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62  r,.** from the b
1ea10 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20  eginning toward 
1ea20 74 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68  the end.  In oth
1ea30 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75  er words, the cu
1ea40 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69  rsor is.** confi
1ea50 67 75 72 65 64 20 74 6f 20 75 73 65 20 4e 65 78  gured to use Nex
1ea60 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2a 0a  t, not Prev..**.
1ea70 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
1ea80 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65  nd, NotFound, Se
1ea90 65 6b 4c 74 2c 20 53 65 65 6b 47 65 2c 20 53 65  ekLt, SeekGe, Se
1eaa0 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ekLe.*/./* Opcod
1eab0 65 3a 20 53 65 65 6b 4c 54 20 50 31 20 50 32 20  e: SeekLT P1 P2 
1eac0 50 33 20 50 34 20 2a 20 0a 2a 2a 20 53 79 6e 6f  P3 P4 * .** Syno
1ead0 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
1eae0 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73  4].**.** If curs
1eaf0 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20  or P1 refers to 
1eb00 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d  an SQL table (B-
1eb10 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69  Tree that uses i
1eb20 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a  nteger keys), .*
1eb30 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20  * use the value 
1eb40 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61  in register P3 a
1eb50 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73  s a key. If curs
1eb60 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a  or P1 refers .**
1eb70 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78   to an SQL index
1eb80 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65  , then P3 is the
1eb90 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72   first in an arr
1eba0 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  ay of P4 registe
1ebb0 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20  rs .** that are 
1ebc0 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63  used as an unpac
1ebd0 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a  ked index key. .
1ebe0 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e  **.** Reposition
1ebf0 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
1ec00 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  at  it points to
1ec10 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74   the largest ent
1ec20 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c  ry that .** is l
1ec30 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79  ess than the key
1ec40 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65   value. If there
1ec50 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20   are no records 
1ec60 6c 65 73 73 20 74 68 61 6e 20 0a 2a 2a 20 74 68  less than .** th
1ec70 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69 73 20  e key and P2 is 
1ec80 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a  not zero, then j
1ec90 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a  ump to P2..**.**
1eca0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61   This opcode lea
1ecb0 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63  ves the cursor c
1ecc0 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76  onfigured to mov
1ecd0 65 20 69 6e 20 72 65 76 65 72 73 65 20 6f 72 64  e in reverse ord
1ece0 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20  er,.** from the 
1ecf0 65 6e 64 20 74 6f 77 61 72 64 20 74 68 65 20 62  end toward the b
1ed00 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74  eginning.  In ot
1ed10 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63  her words, the c
1ed20 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66  ursor is.** conf
1ed30 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 50 72  igured to use Pr
1ed40 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2a  ev, not Next..**
1ed50 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
1ed60 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53  und, NotFound, S
1ed70 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53  eekGt, SeekGe, S
1ed80 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  eekLe.*/./* Opco
1ed90 64 65 3a 20 53 65 65 6b 4c 45 20 50 31 20 50 32  de: SeekLE P1 P2
1eda0 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
1edb0 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
1edc0 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73  4].**.** If curs
1edd0 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20  or P1 refers to 
1ede0 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d  an SQL table (B-
1edf0 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69  Tree that uses i
1ee00 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a  nteger keys), .*
1ee10 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20  * use the value 
1ee20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61  in register P3 a
1ee30 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73  s a key. If curs
1ee40 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a  or P1 refers .**
1ee50 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78   to an SQL index
1ee60 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74 68 65  , then P3 is the
1ee70 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72   first in an arr
1ee80 61 79 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  ay of P4 registe
1ee90 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20  rs .** that are 
1eea0 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63  used as an unpac
1eeb0 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a  ked index key. .
1eec0 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e  **.** Reposition
1eed0 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
1eee0 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  at it points to 
1eef0 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72  the largest entr
1ef00 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65  y that .** is le
1ef10 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  ss than or equal
1ef20 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75   to the key valu
1ef30 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  e. If there are 
1ef40 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a 20 6c  no records .** l
1ef50 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ess than or equa
1ef60 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64  l to the key and
1ef70 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P2 is not zero,
1ef80 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
1ef90 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
1efa0 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63  ode leaves the c
1efb0 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64  ursor configured
1efc0 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76 65   to move in reve
1efd0 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72  rse order,.** fr
1efe0 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f 77 61 72  om the end towar
1eff0 64 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e  d the beginning.
1f000 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
1f010 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a  , the cursor is.
1f020 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  ** configured to
1f030 20 75 73 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e   use Prev, not N
1f040 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ext..**.** If th
1f050 65 20 63 75 72 73 6f 72 20 50 31 20 77 61 73 20  e cursor P1 was 
1f060 6f 70 65 6e 65 64 20 75 73 69 6e 67 20 74 68 65  opened using the
1f070 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 66   OPFLAG_SEEKEQ f
1f080 6c 61 67 2c 20 74 68 65 6e 20 74 68 69 73 0a 2a  lag, then this.*
1f090 2a 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c  * opcode will al
1f0a0 77 61 79 73 20 6c 61 6e 64 20 6f 6e 20 61 20 72  ways land on a r
1f0b0 65 63 6f 72 64 20 74 68 61 74 20 65 71 75 61 6c  ecord that equal
1f0c0 6c 79 20 65 71 75 61 6c 73 20 74 68 65 20 6b 65  ly equals the ke
1f0d0 79 2c 20 6f 72 0a 2a 2a 20 65 6c 73 65 20 6a 75  y, or.** else ju
1f0e0 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
1f0f0 6f 20 50 32 2e 20 20 57 68 65 6e 20 74 68 65 20  o P2.  When the 
1f100 63 75 72 73 6f 72 20 69 73 20 4f 50 46 4c 41 47  cursor is OPFLAG
1f110 5f 53 45 45 4b 45 51 2c 20 74 68 69 73 0a 2a 2a  _SEEKEQ, this.**
1f120 20 6f 70 63 6f 64 65 20 6d 75 73 74 20 62 65 20   opcode must be 
1f130 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 6e 20 49  followed by an I
1f140 64 78 47 45 20 6f 70 63 6f 64 65 20 77 69 74 68  dxGE opcode with
1f150 20 74 68 65 20 73 61 6d 65 20 61 72 67 75 6d 65   the same argume
1f160 6e 74 73 2e 0a 2a 2a 20 54 68 65 20 49 64 78 47  nts..** The IdxG
1f170 45 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65  E opcode will be
1f180 20 73 6b 69 70 70 65 64 20 69 66 20 74 68 69 73   skipped if this
1f190 20 6f 70 63 6f 64 65 20 73 75 63 63 65 65 64 73   opcode succeeds
1f1a0 2c 20 62 75 74 20 74 68 65 0a 2a 2a 20 49 64 78  , but the.** Idx
1f1b0 47 45 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62  GE opcode will b
1f1c0 65 20 75 73 65 64 20 6f 6e 20 73 75 62 73 65 71  e used on subseq
1f1d0 75 65 6e 74 20 6c 6f 6f 70 20 69 74 65 72 61 74  uent loop iterat
1f1e0 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  ions..**.** See 
1f1f0 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74  also: Found, Not
1f200 46 6f 75 6e 64 2c 20 53 65 65 6b 47 74 2c 20 53  Found, SeekGt, S
1f210 65 65 6b 47 65 2c 20 53 65 65 6b 4c 74 0a 2a 2f  eekGe, SeekLt.*/
1f220 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c 54 3a  .case OP_SeekLT:
1f230 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
1f240 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
1f250 5f 53 65 65 6b 4c 45 3a 20 20 20 20 20 20 20 20  _SeekLE:        
1f260 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1f270 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 47 45 3a  .case OP_SeekGE:
1f280 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
1f290 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
1f2a0 5f 53 65 65 6b 47 54 3a 20 7b 20 20 20 20 20 20  _SeekGT: {      
1f2b0 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1f2c0 0a 20 20 69 6e 74 20 72 65 73 3b 20 20 20 20 20  .  int res;     
1f2d0 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 61 72 69        /* Compari
1f2e0 73 6f 6e 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20  son result */.  
1f2f0 69 6e 74 20 6f 63 3b 20 20 20 20 20 20 20 20 20  int oc;         
1f300 20 20 20 2f 2a 20 4f 70 63 6f 64 65 20 2a 2f 0a     /* Opcode */.
1f310 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1f320 3b 20 20 20 20 2f 2a 20 54 68 65 20 63 75 72 73  ;    /* The curs
1f330 6f 72 20 74 6f 20 73 65 65 6b 20 2a 2f 0a 20 20  or to seek */.  
1f340 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72  UnpackedRecord r
1f350 3b 20 20 2f 2a 20 54 68 65 20 6b 65 79 20 74 6f  ;  /* The key to
1f360 20 73 65 65 6b 20 66 6f 72 20 2a 2f 0a 20 20 69   seek for */.  i
1f370 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20  nt nField;      
1f380 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
1f390 6f 6c 75 6d 6e 73 20 6f 72 20 66 69 65 6c 64 73  olumns or fields
1f3a0 20 69 6e 20 74 68 65 20 6b 65 79 20 2a 2f 0a 20   in the key */. 
1f3b0 20 69 36 34 20 69 4b 65 79 3b 20 20 20 20 20 20   i64 iKey;      
1f3c0 20 20 20 20 2f 2a 20 54 68 65 20 72 6f 77 69 64      /* The rowid
1f3d0 20 77 65 20 61 72 65 20 74 6f 20 73 65 65 6b 20   we are to seek 
1f3e0 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 65 71 4f 6e  to */.  int eqOn
1f3f0 6c 79 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e  ly;        /* On
1f400 6c 79 20 69 6e 74 65 72 65 73 74 65 64 20 69 6e  ly interested in
1f410 20 3d 3d 20 72 65 73 75 6c 74 73 20 2a 2f 0a 0a   == results */..
1f420 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1f430 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
1f440 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
1f450 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 21  assert( pOp->p2!
1f460 3d 30 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  =0 );.  pC = p->
1f470 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
1f480 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
1f490 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
1f4a0 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
1f4b0 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73  PE_BTREE );.  as
1f4c0 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 45 20  sert( OP_SeekLE 
1f4d0 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 31 20 29  == OP_SeekLT+1 )
1f4e0 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53  ;.  assert( OP_S
1f4f0 65 65 6b 47 45 20 3d 3d 20 4f 50 5f 53 65 65 6b  eekGE == OP_Seek
1f500 4c 54 2b 32 20 29 3b 0a 20 20 61 73 73 65 72 74  LT+2 );.  assert
1f510 28 20 4f 50 5f 53 65 65 6b 47 54 20 3d 3d 20 4f  ( OP_SeekGT == O
1f520 50 5f 53 65 65 6b 4c 54 2b 33 20 29 3b 0a 20 20  P_SeekLT+3 );.  
1f530 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 4f 72  assert( pC->isOr
1f540 64 65 72 65 64 20 29 3b 0a 20 20 61 73 73 65 72  dered );.  asser
1f550 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  t( pC->uc.pCurso
1f560 72 21 3d 30 20 29 3b 0a 20 20 6f 63 20 3d 20 70  r!=0 );.  oc = p
1f570 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 65 71  Op->opcode;.  eq
1f580 4f 6e 6c 79 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  Only = 0;.  pC->
1f590 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 23 69 66  nullRow = 0;.#if
1f5a0 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
1f5b0 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20  .  pC->seekOp = 
1f5c0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e  pOp->opcode;.#en
1f5d0 64 69 66 0a 0a 20 20 69 66 28 20 70 43 2d 3e 69  dif..  if( pC->i
1f5e0 73 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a  sTable ){.    /*
1f5f0 20 54 68 65 20 42 54 52 45 45 5f 53 45 45 4b 5f   The BTREE_SEEK_
1f600 45 51 20 66 6c 61 67 20 69 73 20 6f 6e 6c 79 20  EQ flag is only 
1f610 73 65 74 20 6f 6e 20 69 6e 64 65 78 20 63 75 72  set on index cur
1f620 73 6f 72 73 20 2a 2f 0a 20 20 20 20 61 73 73 65  sors */.    asse
1f630 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65  rt( sqlite3Btree
1f640 43 75 72 73 6f 72 48 61 73 48 69 6e 74 28 70 43  CursorHasHint(pC
1f650 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 42 54  ->uc.pCursor, BT
1f660 52 45 45 5f 53 45 45 4b 5f 45 51 29 3d 3d 30 20  REE_SEEK_EQ)==0 
1f670 29 3b 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 69  );..    /* The i
1f680 6e 70 75 74 20 76 61 6c 75 65 20 69 6e 20 50 33  nput value in P3
1f690 20 6d 69 67 68 74 20 62 65 20 6f 66 20 61 6e 79   might be of any
1f6a0 20 74 79 70 65 3a 20 69 6e 74 65 67 65 72 2c 20   type: integer, 
1f6b0 72 65 61 6c 2c 20 73 74 72 69 6e 67 2c 0a 20 20  real, string,.  
1f6c0 20 20 2a 2a 20 62 6c 6f 62 2c 20 6f 72 20 4e 55    ** blob, or NU
1f6d0 4c 4c 2e 20 20 42 75 74 20 69 74 20 6e 65 65 64  LL.  But it need
1f6e0 73 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67  s to be an integ
1f6f0 65 72 20 62 65 66 6f 72 65 20 77 65 20 63 61 6e  er before we can
1f700 20 64 6f 0a 20 20 20 20 2a 2a 20 74 68 65 20 73   do.    ** the s
1f710 65 65 6b 2c 20 73 6f 20 63 6f 6e 76 65 72 74 20  eek, so convert 
1f720 69 74 2e 20 2a 2f 0a 20 20 20 20 70 49 6e 33 20  it. */.    pIn3 
1f730 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
1f740 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d  ;.    if( (pIn3-
1f750 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e  >flags & (MEM_In
1f760 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53  t|MEM_Real|MEM_S
1f770 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b  tr))==MEM_Str ){
1f780 0a 20 20 20 20 20 20 61 70 70 6c 79 4e 75 6d 65  .      applyNume
1f790 72 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e 33  ricAffinity(pIn3
1f7a0 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  , 0);.    }.    
1f7b0 69 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 56 64  iKey = sqlite3Vd
1f7c0 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 33 29  beIntValue(pIn3)
1f7d0 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65  ;..    /* If the
1f7e0 20 50 33 20 76 61 6c 75 65 20 63 6f 75 6c 64 20   P3 value could 
1f7f0 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64  not be converted
1f800 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72   into an integer
1f810 20 77 69 74 68 6f 75 74 0a 20 20 20 20 2a 2a 20   without.    ** 
1f820 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74  loss of informat
1f830 69 6f 6e 2c 20 74 68 65 6e 20 73 70 65 63 69 61  ion, then specia
1f840 6c 20 70 72 6f 63 65 73 73 69 6e 67 20 69 73 20  l processing is 
1f850 72 65 71 75 69 72 65 64 2e 2e 2e 20 2a 2f 0a 20  required... */. 
1f860 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c     if( (pIn3->fl
1f870 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d  ags & MEM_Int)==
1f880 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28  0 ){.      if( (
1f890 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn3->flags & ME
1f8a0 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b 0a 20 20  M_Real)==0 ){.  
1f8b0 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20        /* If the 
1f8c0 50 33 20 76 61 6c 75 65 20 63 61 6e 6e 6f 74 20  P3 value cannot 
1f8d0 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74  be converted int
1f8e0 6f 20 61 6e 79 20 6b 69 6e 64 20 6f 66 20 61 20  o any kind of a 
1f8f0 6e 75 6d 62 65 72 2c 0a 20 20 20 20 20 20 20 20  number,.        
1f900 2a 2a 20 74 68 65 6e 20 74 68 65 20 73 65 65 6b  ** then the seek
1f910 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65   is not possible
1f920 2c 20 73 6f 20 6a 75 6d 70 20 74 6f 20 50 32 20  , so jump to P2 
1f930 2a 2f 0a 20 20 20 20 20 20 20 20 56 64 62 65 42  */.        VdbeB
1f940 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 32 29 3b  ranchTaken(1,2);
1f950 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
1f960 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
1f970 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
1f980 2f 2a 20 49 66 20 74 68 65 20 61 70 70 72 6f 78  /* If the approx
1f990 69 6d 61 74 69 6f 6e 20 69 4b 65 79 20 69 73 20  imation iKey is 
1f9a0 6c 61 72 67 65 72 20 74 68 61 6e 20 74 68 65 20  larger than the 
1f9b0 61 63 74 75 61 6c 20 72 65 61 6c 20 73 65 61 72  actual real sear
1f9c0 63 68 0a 20 20 20 20 20 20 2a 2a 20 74 65 72 6d  ch.      ** term
1f9d0 2c 20 73 75 62 73 74 69 74 75 74 65 20 3e 3d 20  , substitute >= 
1f9e0 66 6f 72 20 3e 20 61 6e 64 20 3c 20 66 6f 72 20  for > and < for 
1f9f0 3c 3d 2e 20 65 2e 67 2e 20 69 66 20 74 68 65 20  <=. e.g. if the 
1fa00 73 65 61 72 63 68 20 74 65 72 6d 0a 20 20 20 20  search term.    
1fa10 20 20 2a 2a 20 69 73 20 34 2e 39 20 61 6e 64 20    ** is 4.9 and 
1fa20 74 68 65 20 69 6e 74 65 67 65 72 20 61 70 70 72  the integer appr
1fa30 6f 78 69 6d 61 74 69 6f 6e 20 35 3a 0a 20 20 20  oximation 5:.   
1fa40 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 20     **.      **  
1fa50 20 20 20 20 20 20 28 78 20 3e 20 20 34 2e 39 29        (x >  4.9)
1fa60 20 20 20 20 2d 3e 20 20 20 20 20 28 78 20 3e 3d      ->     (x >=
1fa70 20 35 29 0a 20 20 20 20 20 20 2a 2a 20 20 20 20   5).      **    
1fa80 20 20 20 20 28 78 20 3c 3d 20 34 2e 39 29 20 20      (x <= 4.9)  
1fa90 20 20 2d 3e 20 20 20 20 20 28 78 20 3c 20 20 35    ->     (x <  5
1faa0 29 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ).      */.     
1fab0 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e 72 3c 28   if( pIn3->u.r<(
1fac0 64 6f 75 62 6c 65 29 69 4b 65 79 20 29 7b 0a 20  double)iKey ){. 
1fad0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f         assert( O
1fae0 50 5f 53 65 65 6b 47 45 3d 3d 28 4f 50 5f 53 65  P_SeekGE==(OP_Se
1faf0 65 6b 47 54 2d 31 29 20 29 3b 0a 20 20 20 20 20  ekGT-1) );.     
1fb00 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65     assert( OP_Se
1fb10 65 6b 4c 54 3d 3d 28 4f 50 5f 53 65 65 6b 4c 45  ekLT==(OP_SeekLE
1fb20 2d 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61  -1) );.        a
1fb30 73 73 65 72 74 28 20 28 4f 50 5f 53 65 65 6b 4c  ssert( (OP_SeekL
1fb40 45 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50  E & 0x0001)==(OP
1fb50 5f 53 65 65 6b 47 54 20 26 20 30 78 30 30 30 31  _SeekGT & 0x0001
1fb60 29 20 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ) );.        if(
1fb70 20 28 6f 63 20 26 20 30 78 30 30 30 31 29 3d 3d   (oc & 0x0001)==
1fb80 28 4f 50 5f 53 65 65 6b 47 54 20 26 20 30 78 30  (OP_SeekGT & 0x0
1fb90 30 30 31 29 20 29 20 6f 63 2d 2d 3b 0a 20 20 20  001) ) oc--;.   
1fba0 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49     }..      /* I
1fbb0 66 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74  f the approximat
1fbc0 69 6f 6e 20 69 4b 65 79 20 69 73 20 73 6d 61 6c  ion iKey is smal
1fbd0 6c 65 72 20 74 68 61 6e 20 74 68 65 20 61 63 74  ler than the act
1fbe0 75 61 6c 20 72 65 61 6c 20 73 65 61 72 63 68 0a  ual real search.
1fbf0 20 20 20 20 20 20 2a 2a 20 74 65 72 6d 2c 20 73        ** term, s
1fc00 75 62 73 74 69 74 75 74 65 20 3c 3d 20 66 6f 72  ubstitute <= for
1fc10 20 3c 20 61 6e 64 20 3e 20 66 6f 72 20 3e 3d 2e   < and > for >=.
1fc20 20 20 2a 2f 0a 20 20 20 20 20 20 65 6c 73 65 20    */.      else 
1fc30 69 66 28 20 70 49 6e 33 2d 3e 75 2e 72 3e 28 64  if( pIn3->u.r>(d
1fc40 6f 75 62 6c 65 29 69 4b 65 79 20 29 7b 0a 20 20  ouble)iKey ){.  
1fc50 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f 50        assert( OP
1fc60 5f 53 65 65 6b 4c 45 3d 3d 28 4f 50 5f 53 65 65  _SeekLE==(OP_See
1fc70 6b 4c 54 2b 31 29 20 29 3b 0a 20 20 20 20 20 20  kLT+1) );.      
1fc80 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65    assert( OP_See
1fc90 6b 47 54 3d 3d 28 4f 50 5f 53 65 65 6b 47 45 2b  kGT==(OP_SeekGE+
1fca0 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  1) );.        as
1fcb0 73 65 72 74 28 20 28 4f 50 5f 53 65 65 6b 4c 54  sert( (OP_SeekLT
1fcc0 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f   & 0x0001)==(OP_
1fcd0 53 65 65 6b 47 45 20 26 20 30 78 30 30 30 31 29  SeekGE & 0x0001)
1fce0 20 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20   );.        if( 
1fcf0 28 6f 63 20 26 20 30 78 30 30 30 31 29 3d 3d 28  (oc & 0x0001)==(
1fd00 4f 50 5f 53 65 65 6b 4c 54 20 26 20 30 78 30 30  OP_SeekLT & 0x00
1fd10 30 31 29 20 29 20 6f 63 2b 2b 3b 0a 20 20 20 20  01) ) oc++;.    
1fd20 20 20 7d 0a 20 20 20 20 7d 20 0a 20 20 20 20 72    }.    } .    r
1fd30 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1fd40 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
1fd50 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 30  C->uc.pCursor, 0
1fd60 2c 20 28 75 36 34 29 69 4b 65 79 2c 20 30 2c 20  , (u64)iKey, 0, 
1fd70 26 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e 6d  &res);.    pC->m
1fd80 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20 69 4b  ovetoTarget = iK
1fd90 65 79 3b 20 20 2f 2a 20 55 73 65 64 20 62 79 20  ey;  /* Used by 
1fda0 4f 50 5f 44 65 6c 65 74 65 20 2a 2f 0a 20 20 20  OP_Delete */.   
1fdb0 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
1fdc0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  OK ){.      goto
1fdd0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
1fde0 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  ror;.    }.  }el
1fdf0 73 65 7b 0a 20 20 20 20 2f 2a 20 46 6f 72 20 61  se{.    /* For a
1fe00 20 63 75 72 73 6f 72 20 77 69 74 68 20 74 68 65   cursor with the
1fe10 20 42 54 52 45 45 5f 53 45 45 4b 5f 45 51 20 68   BTREE_SEEK_EQ h
1fe20 69 6e 74 2c 20 6f 6e 6c 79 20 74 68 65 20 4f 50  int, only the OP
1fe30 5f 53 65 65 6b 47 45 20 61 6e 64 0a 20 20 20 20  _SeekGE and.    
1fe40 2a 2a 20 4f 50 5f 53 65 65 6b 4c 45 20 6f 70 63  ** OP_SeekLE opc
1fe50 6f 64 65 73 20 61 72 65 20 61 6c 6c 6f 77 65 64  odes are allowed
1fe60 2c 20 61 6e 64 20 74 68 65 73 65 20 6d 75 73 74  , and these must
1fe70 20 62 65 20 69 6d 6d 65 64 69 61 74 65 6c 79 20   be immediately 
1fe80 66 6f 6c 6c 6f 77 65 64 0a 20 20 20 20 2a 2a 20  followed.    ** 
1fe90 62 79 20 61 6e 20 4f 50 5f 49 64 78 47 54 20 6f  by an OP_IdxGT o
1fea0 72 20 4f 50 5f 49 64 78 4c 54 20 6f 70 63 6f 64  r OP_IdxLT opcod
1feb0 65 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2c  e, respectively,
1fec0 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 6b   with the same k
1fed0 65 79 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  ey..    */.    i
1fee0 66 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  f( sqlite3BtreeC
1fef0 75 72 73 6f 72 48 61 73 48 69 6e 74 28 70 43 2d  ursorHasHint(pC-
1ff00 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 42 54 52  >uc.pCursor, BTR
1ff10 45 45 5f 53 45 45 4b 5f 45 51 29 20 29 7b 0a 20  EE_SEEK_EQ) ){. 
1ff20 20 20 20 20 20 65 71 4f 6e 6c 79 20 3d 20 31 3b       eqOnly = 1;
1ff30 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
1ff40 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53  Op->opcode==OP_S
1ff50 65 65 6b 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70  eekGE || pOp->op
1ff60 63 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20  code==OP_SeekLE 
1ff70 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
1ff80 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d   pOp[1].opcode==
1ff90 4f 50 5f 49 64 78 4c 54 20 7c 7c 20 70 4f 70 5b  OP_IdxLT || pOp[
1ffa0 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  1].opcode==OP_Id
1ffb0 78 47 54 20 29 3b 0a 20 20 20 20 20 20 61 73 73  xGT );.      ass
1ffc0 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70 31 3d 3d  ert( pOp[1].p1==
1ffd0 70 4f 70 5b 30 5d 2e 70 31 20 29 3b 0a 20 20 20  pOp[0].p1 );.   
1ffe0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31     assert( pOp[1
1fff0 5d 2e 70 32 3d 3d 70 4f 70 5b 30 5d 2e 70 32 20  ].p2==pOp[0].p2 
20000 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
20010 20 70 4f 70 5b 31 5d 2e 70 33 3d 3d 70 4f 70 5b   pOp[1].p3==pOp[
20020 30 5d 2e 70 33 20 29 3b 0a 20 20 20 20 20 20 61  0].p3 );.      a
20030 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70 34  ssert( pOp[1].p4
20040 2e 69 3d 3d 70 4f 70 5b 30 5d 2e 70 34 2e 69 20  .i==pOp[0].p4.i 
20050 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6e 46  );.    }..    nF
20060 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69  ield = pOp->p4.i
20070 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  ;.    assert( pO
20080 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
20090 54 33 32 20 29 3b 0a 20 20 20 20 61 73 73 65 72  T32 );.    asser
200a0 74 28 20 6e 46 69 65 6c 64 3e 30 20 29 3b 0a 20  t( nField>0 );. 
200b0 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20     r.pKeyInfo = 
200c0 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  pC->pKeyInfo;.  
200d0 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31    r.nField = (u1
200e0 36 29 6e 46 69 65 6c 64 3b 0a 0a 20 20 20 20 2f  6)nField;..    /
200f0 2a 20 54 68 65 20 6e 65 78 74 20 6c 69 6e 65 20  * The next line 
20100 6f 66 20 63 6f 64 65 20 63 6f 6d 70 75 74 65 73  of code computes
20110 20 61 73 20 66 6f 6c 6c 6f 77 73 2c 20 6f 6e 6c   as follows, onl
20120 79 20 66 61 73 74 65 72 3a 0a 20 20 20 20 2a 2a  y faster:.    **
20130 20 20 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65     if( oc==OP_Se
20140 65 6b 47 54 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53  ekGT || oc==OP_S
20150 65 65 6b 4c 45 20 29 7b 0a 20 20 20 20 2a 2a 20  eekLE ){.    ** 
20160 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63      r.default_rc
20170 20 3d 20 2d 31 3b 0a 20 20 20 20 2a 2a 20 20 20   = -1;.    **   
20180 7d 65 6c 73 65 7b 0a 20 20 20 20 2a 2a 20 20 20  }else{.    **   
20190 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d    r.default_rc =
201a0 20 2b 31 3b 0a 20 20 20 20 2a 2a 20 20 20 7d 0a   +1;.    **   }.
201b0 20 20 20 20 2a 2f 0a 20 20 20 20 72 2e 64 65 66      */.    r.def
201c0 61 75 6c 74 5f 72 63 20 3d 20 28 28 31 20 26 20  ault_rc = ((1 & 
201d0 28 6f 63 20 2d 20 4f 50 5f 53 65 65 6b 4c 54 29  (oc - OP_SeekLT)
201e0 29 20 3f 20 2d 31 20 3a 20 2b 31 29 3b 0a 20 20  ) ? -1 : +1);.  
201f0 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50    assert( oc!=OP
20200 5f 53 65 65 6b 47 54 20 7c 7c 20 72 2e 64 65 66  _SeekGT || r.def
20210 61 75 6c 74 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20  ault_rc==-1 );. 
20220 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f     assert( oc!=O
20230 50 5f 53 65 65 6b 4c 45 20 7c 7c 20 72 2e 64 65  P_SeekLE || r.de
20240 66 61 75 6c 74 5f 72 63 3d 3d 2d 31 20 29 3b 0a  fault_rc==-1 );.
20250 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d      assert( oc!=
20260 4f 50 5f 53 65 65 6b 47 45 20 7c 7c 20 72 2e 64  OP_SeekGE || r.d
20270 65 66 61 75 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b  efault_rc==+1 );
20280 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 63 21  .    assert( oc!
20290 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 72 2e  =OP_SeekLT || r.
202a0 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2b 31 20 29  default_rc==+1 )
202b0 3b 0a 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20  ;..    r.aMem = 
202c0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
202d0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
202e0 42 55 47 0a 20 20 20 20 7b 20 69 6e 74 20 69 3b  BUG.    { int i;
202f0 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46   for(i=0; i<r.nF
20300 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72  ield; i++) asser
20310 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72  t( memIsValid(&r
20320 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23  .aMem[i]) ); }.#
20330 65 6e 64 69 66 0a 20 20 20 20 45 78 70 61 6e 64  endif.    Expand
20340 42 6c 6f 62 28 72 2e 61 4d 65 6d 29 3b 0a 20 20  Blob(r.aMem);.  
20350 20 20 72 2e 65 71 53 65 65 6e 20 3d 20 30 3b 0a    r.eqSeen = 0;.
20360 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
20370 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
20380 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  ked(pC->uc.pCurs
20390 6f 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72  or, &r, 0, 0, &r
203a0 65 73 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21  es);.    if( rc!
203b0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
203c0 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
203d0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
203e0 20 7d 0a 20 20 20 20 69 66 28 20 65 71 4f 6e 6c   }.    if( eqOnl
203f0 79 20 26 26 20 72 2e 65 71 53 65 65 6e 3d 3d 30  y && r.eqSeen==0
20400 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
20410 28 20 72 65 73 21 3d 30 20 29 3b 0a 20 20 20 20  ( res!=0 );.    
20420 20 20 67 6f 74 6f 20 73 65 65 6b 5f 6e 6f 74 5f    goto seek_not_
20430 66 6f 75 6e 64 3b 0a 20 20 20 20 7d 0a 20 20 7d  found;.    }.  }
20440 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  .  pC->deferredM
20450 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d  oveto = 0;.  pC-
20460 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
20470 41 43 48 45 5f 53 54 41 4c 45 3b 0a 23 69 66 64  ACHE_STALE;.#ifd
20480 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
20490 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
204a0 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a  count++;.#endif.
204b0 20 20 69 66 28 20 6f 63 3e 3d 4f 50 5f 53 65 65    if( oc>=OP_See
204c0 6b 47 45 20 29 7b 20 20 61 73 73 65 72 74 28 20  kGE ){  assert( 
204d0 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c  oc==OP_SeekGE ||
204e0 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 29   oc==OP_SeekGT )
204f0 3b 0a 20 20 20 20 69 66 28 20 72 65 73 3c 30 20  ;.    if( res<0 
20500 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26 20 6f 63  || (res==0 && oc
20510 3d 3d 4f 50 5f 53 65 65 6b 47 54 29 20 29 7b 0a  ==OP_SeekGT) ){.
20520 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20        res = 0;. 
20530 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
20540 33 42 74 72 65 65 4e 65 78 74 28 70 43 2d 3e 75  3BtreeNext(pC->u
20550 63 2e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29  c.pCursor, &res)
20560 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  ;.      if( rc!=
20570 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
20580 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
20590 72 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ror;.    }else{.
205a0 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20        res = 0;. 
205b0 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
205c0 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50    assert( oc==OP
205d0 5f 53 65 65 6b 4c 54 20 7c 7c 20 6f 63 3d 3d 4f  _SeekLT || oc==O
205e0 50 5f 53 65 65 6b 4c 45 20 29 3b 0a 20 20 20 20  P_SeekLE );.    
205f0 69 66 28 20 72 65 73 3e 30 20 7c 7c 20 28 72 65  if( res>0 || (re
20600 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53  s==0 && oc==OP_S
20610 65 65 6b 4c 54 29 20 29 7b 0a 20 20 20 20 20 20  eekLT) ){.      
20620 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 72  res = 0;.      r
20630 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
20640 50 72 65 76 69 6f 75 73 28 70 43 2d 3e 75 63 2e  Previous(pC->uc.
20650 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a  pCursor, &res);.
20660 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
20670 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
20680 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
20690 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  r;.    }else{.  
206a0 20 20 20 20 2f 2a 20 72 65 73 20 6d 69 67 68 74      /* res might
206b0 20 62 65 20 6e 65 67 61 74 69 76 65 20 62 65 63   be negative bec
206c0 61 75 73 65 20 74 68 65 20 74 61 62 6c 65 20 69  ause the table i
206d0 73 20 65 6d 70 74 79 2e 20 20 43 68 65 63 6b 20  s empty.  Check 
206e0 74 6f 0a 20 20 20 20 20 20 2a 2a 20 73 65 65 20  to.      ** see 
206f0 69 66 20 74 68 69 73 20 69 73 20 74 68 65 20 63  if this is the c
20700 61 73 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  ase..      */.  
20710 20 20 20 20 72 65 73 20 3d 20 73 71 6c 69 74 65      res = sqlite
20720 33 42 74 72 65 65 45 6f 66 28 70 43 2d 3e 75 63  3BtreeEof(pC->uc
20730 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d  .pCursor);.    }
20740 0a 20 20 7d 0a 73 65 65 6b 5f 6e 6f 74 5f 66 6f  .  }.seek_not_fo
20750 75 6e 64 3a 0a 20 20 61 73 73 65 72 74 28 20 70  und:.  assert( p
20760 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 56 64  Op->p2>0 );.  Vd
20770 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65  beBranchTaken(re
20780 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72  s!=0,2);.  if( r
20790 65 73 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a  es ){.    goto j
207a0 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c  ump_to_p2;.  }el
207b0 73 65 20 69 66 28 20 65 71 4f 6e 6c 79 20 29 7b  se if( eqOnly ){
207c0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
207d0 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  [1].opcode==OP_I
207e0 64 78 4c 54 20 7c 7c 20 70 4f 70 5b 31 5d 2e 6f  dxLT || pOp[1].o
207f0 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20  pcode==OP_IdxGT 
20800 29 3b 0a 20 20 20 20 70 4f 70 2b 2b 3b 20 2f 2a  );.    pOp++; /*
20810 20 53 6b 69 70 20 74 68 65 20 4f 50 5f 49 64 78   Skip the OP_Idx
20820 4c 74 20 6f 72 20 4f 50 5f 49 64 78 47 54 20 74  Lt or OP_IdxGT t
20830 68 61 74 20 66 6f 6c 6c 6f 77 73 20 2a 2f 0a 20  hat follows */. 
20840 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
20850 2a 20 4f 70 63 6f 64 65 3a 20 46 6f 75 6e 64 20  * Opcode: Found 
20860 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
20870 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
20880 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66  [P3@P4].**.** If
20890 20 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69   P4==0 then regi
208a0 73 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20  ster P3 holds a 
208b0 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64  blob constructed
208c0 20 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20   by MakeRecord. 
208d0 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e   If.** P4>0 then
208e0 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20   register P3 is 
208f0 74 68 65 20 66 69 72 73 74 20 6f 66 20 50 34 20  the first of P4 
20900 72 65 67 69 73 74 65 72 73 20 74 68 61 74 20 66  registers that f
20910 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a  orm an unpacked.
20920 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a  ** record..**.**
20930 20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e   Cursor P1 is on
20940 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e   an index btree.
20950 20 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20    If the record 
20960 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 50 33  identified by P3
20970 20 61 6e 64 20 50 34 0a 2a 2a 20 69 73 20 61 20   and P4.** is a 
20980 70 72 65 66 69 78 20 6f 66 20 61 6e 79 20 65 6e  prefix of any en
20990 74 72 79 20 69 6e 20 50 31 20 74 68 65 6e 20 61  try in P1 then a
209a0 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f   jump is made to
209b0 20 50 32 20 61 6e 64 0a 2a 2a 20 50 31 20 69 73   P2 and.** P1 is
209c0 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61   left pointing a
209d0 74 20 74 68 65 20 6d 61 74 63 68 69 6e 67 20 65  t the matching e
209e0 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  ntry..**.** This
209f0 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61 76 65   operation leave
20a00 73 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20  s the cursor in 
20a10 61 20 73 74 61 74 65 20 77 68 65 72 65 20 69 74  a state where it
20a20 20 63 61 6e 20 62 65 0a 2a 2a 20 61 64 76 61 6e   can be.** advan
20a30 63 65 64 20 69 6e 20 74 68 65 20 66 6f 72 77 61  ced in the forwa
20a40 72 64 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 54  rd direction.  T
20a50 68 65 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74  he Next instruct
20a60 69 6f 6e 20 77 69 6c 6c 20 77 6f 72 6b 2c 0a 2a  ion will work,.*
20a70 2a 20 62 75 74 20 6e 6f 74 20 74 68 65 20 50 72  * but not the Pr
20a80 65 76 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  ev instruction..
20a90 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
20aa0 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66  NotFound, NoConf
20ab0 6c 69 63 74 2c 20 4e 6f 74 45 78 69 73 74 73 2e  lict, NotExists.
20ac0 20 53 65 65 6b 47 65 0a 2a 2f 0a 2f 2a 20 4f 70   SeekGe.*/./* Op
20ad0 63 6f 64 65 3a 20 4e 6f 74 46 6f 75 6e 64 20 50  code: NotFound P
20ae0 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20  1 P2 P3 P4 *.** 
20af0 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
20b00 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20  P3@P4].**.** If 
20b10 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73  P4==0 then regis
20b20 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62  ter P3 holds a b
20b30 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20  lob constructed 
20b40 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20  by MakeRecord.  
20b50 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20  If.** P4>0 then 
20b60 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74  register P3 is t
20b70 68 65 20 66 69 72 73 74 20 6f 66 20 50 34 20 72  he first of P4 r
20b80 65 67 69 73 74 65 72 73 20 74 68 61 74 20 66 6f  egisters that fo
20b90 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a  rm an unpacked.*
20ba0 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a  * record..** .**
20bb0 20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e   Cursor P1 is on
20bc0 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e   an index btree.
20bd0 20 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20    If the record 
20be0 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 50 33  identified by P3
20bf0 20 61 6e 64 20 50 34 0a 2a 2a 20 69 73 20 6e 6f   and P4.** is no
20c00 74 20 74 68 65 20 70 72 65 66 69 78 20 6f 66 20  t the prefix of 
20c10 61 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20  any entry in P1 
20c20 74 68 65 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d  then a jump is m
20c30 61 64 65 20 74 6f 20 50 32 2e 20 20 49 66 20 50  ade to P2.  If P
20c40 31 20 0a 2a 2a 20 64 6f 65 73 20 63 6f 6e 74 61  1 .** does conta
20c50 69 6e 20 61 6e 20 65 6e 74 72 79 20 77 68 6f 73  in an entry whos
20c60 65 20 70 72 65 66 69 78 20 6d 61 74 63 68 65 73  e prefix matches
20c70 20 74 68 65 20 50 33 2f 50 34 20 72 65 63 6f 72   the P3/P4 recor
20c80 64 20 74 68 65 6e 20 63 6f 6e 74 72 6f 6c 0a 2a  d then control.*
20c90 2a 20 66 61 6c 6c 73 20 74 68 72 6f 75 67 68 20  * falls through 
20ca0 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
20cb0 72 75 63 74 69 6f 6e 20 61 6e 64 20 50 31 20 69  ruction and P1 i
20cc0 73 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20  s left pointing 
20cd0 61 74 20 74 68 65 0a 2a 2a 20 6d 61 74 63 68 69  at the.** matchi
20ce0 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20  ng entry..**.** 
20cf0 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c  This operation l
20d00 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
20d10 20 69 6e 20 61 20 73 74 61 74 65 20 77 68 65 72   in a state wher
20d20 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 0a 2a  e it cannot be.*
20d30 2a 20 61 64 76 61 6e 63 65 64 20 69 6e 20 65 69  * advanced in ei
20d40 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e 20  ther direction. 
20d50 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
20d60 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50 72   the Next and Pr
20d70 65 76 0a 2a 2a 20 6f 70 63 6f 64 65 73 20 64 6f  ev.** opcodes do
20d80 20 6e 6f 74 20 77 6f 72 6b 20 61 66 74 65 72 20   not work after 
20d90 74 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 2e 0a  this operation..
20da0 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
20db0 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73  Found, NotExists
20dc0 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 0a 2a 2f 0a  , NoConflict.*/.
20dd0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 43 6f 6e  /* Opcode: NoCon
20de0 66 6c 69 63 74 20 50 31 20 50 32 20 50 33 20 50  flict P1 P2 P3 P
20df0 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
20e00 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
20e10 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65  .** If P4==0 the
20e20 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 68 6f  n register P3 ho
20e30 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74  lds a blob const
20e40 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65  ructed by MakeRe
20e50 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e  cord.  If.** P4>
20e60 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20  0 then register 
20e70 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P3 is the first 
20e80 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
20e90 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70  that form an unp
20ea0 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e  acked.** record.
20eb0 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50  .** .** Cursor P
20ec0 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78  1 is on an index
20ed0 20 62 74 72 65 65 2e 20 20 49 66 20 74 68 65 20   btree.  If the 
20ee0 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65  record identifie
20ef0 64 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a  d by P3 and P4.*
20f00 2a 20 63 6f 6e 74 61 69 6e 73 20 61 6e 79 20 4e  * contains any N
20f10 55 4c 4c 20 76 61 6c 75 65 2c 20 6a 75 6d 70 20  ULL value, jump 
20f20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
20f30 32 2e 20 20 49 66 20 61 6c 6c 20 74 65 72 6d 73  2.  If all terms
20f40 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 63 6f 72   of the.** recor
20f50 64 20 61 72 65 20 6e 6f 74 2d 4e 55 4c 4c 20 74  d are not-NULL t
20f60 68 65 6e 20 61 20 63 68 65 63 6b 20 69 73 20 64  hen a check is d
20f70 6f 6e 65 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  one to determine
20f80 20 69 66 20 61 6e 79 20 72 6f 77 20 69 6e 20 74   if any row in t
20f90 68 65 0a 2a 2a 20 50 31 20 69 6e 64 65 78 20 62  he.** P1 index b
20fa0 74 72 65 65 20 68 61 73 20 61 20 6d 61 74 63 68  tree has a match
20fb0 69 6e 67 20 6b 65 79 20 70 72 65 66 69 78 2e 20  ing key prefix. 
20fc0 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   If there are no
20fd0 20 6d 61 74 63 68 65 73 2c 20 6a 75 6d 70 0a 2a   matches, jump.*
20fe0 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  * immediately to
20ff0 20 50 32 2e 20 20 49 66 20 74 68 65 72 65 20 69   P2.  If there i
21000 73 20 61 20 6d 61 74 63 68 2c 20 66 61 6c 6c 20  s a match, fall 
21010 74 68 72 6f 75 67 68 20 61 6e 64 20 6c 65 61 76  through and leav
21020 65 20 74 68 65 20 50 31 0a 2a 2a 20 63 75 72 73  e the P1.** curs
21030 6f 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74  or pointing to t
21040 68 65 20 6d 61 74 63 68 69 6e 67 20 72 6f 77 2e  he matching row.
21050 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
21060 64 65 20 69 73 20 73 69 6d 69 6c 61 72 20 74 6f  de is similar to
21070 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 77 69 74   OP_NotFound wit
21080 68 20 74 68 65 20 65 78 63 65 70 74 69 6f 6e 73  h the exceptions
21090 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 62 72 61   that the.** bra
210a0 6e 63 68 20 69 73 20 61 6c 77 61 79 73 20 74 61  nch is always ta
210b0 6b 65 6e 20 69 66 20 61 6e 79 20 70 61 72 74 20  ken if any part 
210c0 6f 66 20 74 68 65 20 73 65 61 72 63 68 20 6b 65  of the search ke
210d0 79 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e  y input is NULL.
210e0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72  .**.** This oper
210f0 61 74 69 6f 6e 20 6c 65 61 76 65 73 20 74 68 65  ation leaves the
21100 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61   cursor in a sta
21110 74 65 20 77 68 65 72 65 20 69 74 20 63 61 6e 6e  te where it cann
21120 6f 74 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65  ot be.** advance
21130 64 20 69 6e 20 65 69 74 68 65 72 20 64 69 72 65  d in either dire
21140 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72  ction.  In other
21150 20 77 6f 72 64 73 2c 20 74 68 65 20 4e 65 78 74   words, the Next
21160 20 61 6e 64 20 50 72 65 76 0a 2a 2a 20 6f 70 63   and Prev.** opc
21170 6f 64 65 73 20 64 6f 20 6e 6f 74 20 77 6f 72 6b  odes do not work
21180 20 61 66 74 65 72 20 74 68 69 73 20 6f 70 65 72   after this oper
21190 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  ation..**.** See
211a0 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c   also: NotFound,
211b0 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74   Found, NotExist
211c0 73 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 43  s.*/.case OP_NoC
211d0 6f 6e 66 6c 69 63 74 3a 20 20 20 20 20 2f 2a 20  onflict:     /* 
211e0 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73  jump, in3 */.cas
211f0 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 3a 20 20  e OP_NotFound:  
21200 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
21210 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6f 75  3 */.case OP_Fou
21220 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  nd: {        /* 
21230 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69  jump, in3 */.  i
21240 6e 74 20 61 6c 72 65 61 64 79 45 78 69 73 74 73  nt alreadyExists
21250 3b 0a 20 20 69 6e 74 20 74 61 6b 65 4a 75 6d 70  ;.  int takeJump
21260 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 20 20 56 64  ;.  int ii;.  Vd
21270 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
21280 69 6e 74 20 72 65 73 3b 0a 20 20 63 68 61 72 20  int res;.  char 
21290 2a 70 46 72 65 65 3b 0a 20 20 55 6e 70 61 63 6b  *pFree;.  Unpack
212a0 65 64 52 65 63 6f 72 64 20 2a 70 49 64 78 4b 65  edRecord *pIdxKe
212b0 79 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63  y;.  UnpackedRec
212c0 6f 72 64 20 72 3b 0a 20 20 63 68 61 72 20 61 54  ord r;.  char aT
212d0 65 6d 70 52 65 63 5b 52 4f 55 4e 44 38 28 73 69  empRec[ROUND8(si
212e0 7a 65 6f 66 28 55 6e 70 61 63 6b 65 64 52 65 63  zeof(UnpackedRec
212f0 6f 72 64 29 29 20 2b 20 73 69 7a 65 6f 66 28 4d  ord)) + sizeof(M
21300 65 6d 29 2a 34 20 2b 20 37 5d 3b 0a 0a 23 69 66  em)*4 + 7];..#if
21310 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
21320 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
21330 65 21 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74  e!=OP_NoConflict
21340 20 29 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64   ) sqlite3_found
21350 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66  _count++;.#endif
21360 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
21370 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
21380 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
21390 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
213a0 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
213b0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
213c0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
213d0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
213e0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
213f0 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70  BUG.  pC->seekOp
21400 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a   = pOp->opcode;.
21410 23 65 6e 64 69 66 0a 20 20 70 49 6e 33 20 3d 20  #endif.  pIn3 = 
21420 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
21430 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
21440 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
21450 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72  BTREE );.  asser
21460 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  t( pC->uc.pCurso
21470 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  r!=0 );.  assert
21480 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30  ( pC->isTable==0
21490 20 29 3b 0a 20 20 70 46 72 65 65 20 3d 20 30 3b   );.  pFree = 0;
214a0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 69  .  if( pOp->p4.i
214b0 3e 30 20 29 7b 0a 20 20 20 20 72 2e 70 4b 65 79  >0 ){.    r.pKey
214c0 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49  Info = pC->pKeyI
214d0 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c  nfo;.    r.nFiel
214e0 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 34  d = (u16)pOp->p4
214f0 2e 69 3b 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d  .i;.    r.aMem =
21500 20 70 49 6e 33 3b 0a 20 20 20 20 66 6f 72 28 69   pIn3;.    for(i
21510 69 3d 30 3b 20 69 69 3c 72 2e 6e 46 69 65 6c 64  i=0; ii<r.nField
21520 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61  ; ii++){.      a
21530 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
21540 64 28 26 72 2e 61 4d 65 6d 5b 69 69 5d 29 20 29  d(&r.aMem[ii]) )
21550 3b 0a 20 20 20 20 20 20 45 78 70 61 6e 64 42 6c  ;.      ExpandBl
21560 6f 62 28 26 72 2e 61 4d 65 6d 5b 69 69 5d 29 3b  ob(&r.aMem[ii]);
21570 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
21580 45 42 55 47 0a 20 20 20 20 20 20 69 66 28 20 69  EBUG.      if( i
21590 69 20 29 20 52 45 47 49 53 54 45 52 5f 54 52 41  i ) REGISTER_TRA
215a0 43 45 28 70 4f 70 2d 3e 70 33 2b 69 69 2c 20 26  CE(pOp->p3+ii, &
215b0 72 2e 61 4d 65 6d 5b 69 69 5d 29 3b 0a 23 65 6e  r.aMem[ii]);.#en
215c0 64 69 66 0a 20 20 20 20 7d 0a 20 20 20 20 70 49  dif.    }.    pI
215d0 64 78 4b 65 79 20 3d 20 26 72 3b 0a 20 20 7d 65  dxKey = &r;.  }e
215e0 6c 73 65 7b 0a 20 20 20 20 70 49 64 78 4b 65 79  lse{.    pIdxKey
215f0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 6c   = sqlite3VdbeAl
21600 6c 6f 63 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  locUnpackedRecor
21610 64 28 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 70  d(.        pC->p
21620 4b 65 79 49 6e 66 6f 2c 20 61 54 65 6d 70 52 65  KeyInfo, aTempRe
21630 63 2c 20 73 69 7a 65 6f 66 28 61 54 65 6d 70 52  c, sizeof(aTempR
21640 65 63 29 2c 20 26 70 46 72 65 65 0a 20 20 20 20  ec), &pFree.    
21650 29 3b 0a 20 20 20 20 69 66 28 20 70 49 64 78 4b  );.    if( pIdxK
21660 65 79 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  ey==0 ) goto no_
21670 6d 65 6d 3b 0a 20 20 20 20 61 73 73 65 72 74 28  mem;.    assert(
21680 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn3->flags & M
21690 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 45  EM_Blob );.    E
216a0 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 33 29 3b  xpandBlob(pIn3);
216b0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
216c0 52 65 63 6f 72 64 55 6e 70 61 63 6b 28 70 43 2d  RecordUnpack(pC-
216d0 3e 70 4b 65 79 49 6e 66 6f 2c 20 70 49 6e 33 2d  >pKeyInfo, pIn3-
216e0 3e 6e 2c 20 70 49 6e 33 2d 3e 7a 2c 20 70 49 64  >n, pIn3->z, pId
216f0 78 4b 65 79 29 3b 0a 20 20 7d 0a 20 20 70 49 64  xKey);.  }.  pId
21700 78 4b 65 79 2d 3e 64 65 66 61 75 6c 74 5f 72 63  xKey->default_rc
21710 20 3d 20 30 3b 0a 20 20 74 61 6b 65 4a 75 6d 70   = 0;.  takeJump
21720 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 4f 70 2d   = 0;.  if( pOp-
21730 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 43 6f  >opcode==OP_NoCo
21740 6e 66 6c 69 63 74 20 29 7b 0a 20 20 20 20 2f 2a  nflict ){.    /*
21750 20 46 6f 72 20 74 68 65 20 4f 50 5f 4e 6f 43 6f   For the OP_NoCo
21760 6e 66 6c 69 63 74 20 6f 70 63 6f 64 65 2c 20 74  nflict opcode, t
21770 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20  ake the jump if 
21780 61 6e 79 20 6f 66 20 74 68 65 0a 20 20 20 20 2a  any of the.    *
21790 2a 20 69 6e 70 75 74 20 66 69 65 6c 64 73 20 61  * input fields a
217a0 72 65 20 4e 55 4c 4c 2c 20 73 69 6e 63 65 20 61  re NULL, since a
217b0 6e 79 20 6b 65 79 20 77 69 74 68 20 61 20 4e 55  ny key with a NU
217c0 4c 4c 20 77 69 6c 6c 20 6e 6f 74 0a 20 20 20 20  LL will not.    
217d0 2a 2a 20 63 6f 6e 66 6c 69 63 74 20 2a 2f 0a 20  ** conflict */. 
217e0 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c     for(ii=0; ii<
217f0 70 49 64 78 4b 65 79 2d 3e 6e 46 69 65 6c 64 3b  pIdxKey->nField;
21800 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66   ii++){.      if
21810 28 20 70 49 64 78 4b 65 79 2d 3e 61 4d 65 6d 5b  ( pIdxKey->aMem[
21820 69 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ii].flags & MEM_
21830 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 20 20 20 20  Null ){.        
21840 74 61 6b 65 4a 75 6d 70 20 3d 20 31 3b 0a 20 20  takeJump = 1;.  
21850 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
21860 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20     }.    }.  }. 
21870 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
21880 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64  eeMovetoUnpacked
21890 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
218a0 20 70 49 64 78 4b 65 79 2c 20 30 2c 20 30 2c 20   pIdxKey, 0, 0, 
218b0 26 72 65 73 29 3b 0a 20 20 73 71 6c 69 74 65 33  &res);.  sqlite3
218c0 44 62 46 72 65 65 28 64 62 2c 20 70 46 72 65 65  DbFree(db, pFree
218d0 29 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c  );.  if( rc!=SQL
218e0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 67 6f  ITE_OK ){.    go
218f0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
21900 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 70 43 2d  error;.  }.  pC-
21910 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 72 65  >seekResult = re
21920 73 3b 0a 20 20 61 6c 72 65 61 64 79 45 78 69 73  s;.  alreadyExis
21930 74 73 20 3d 20 28 72 65 73 3d 3d 30 29 3b 0a 20  ts = (res==0);. 
21940 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31   pC->nullRow = 1
21950 2d 61 6c 72 65 61 64 79 45 78 69 73 74 73 3b 0a  -alreadyExists;.
21960 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
21970 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  veto = 0;.  pC->
21980 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
21990 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66 28  CHE_STALE;.  if(
219a0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
219b0 5f 46 6f 75 6e 64 20 29 7b 0a 20 20 20 20 56 64  _Found ){.    Vd
219c0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 61 6c  beBranchTaken(al
219d0 72 65 61 64 79 45 78 69 73 74 73 21 3d 30 2c 32  readyExists!=0,2
219e0 29 3b 0a 20 20 20 20 69 66 28 20 61 6c 72 65 61  );.    if( alrea
219f0 64 79 45 78 69 73 74 73 20 29 20 67 6f 74 6f 20  dyExists ) goto 
21a00 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65  jump_to_p2;.  }e
21a10 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61  lse{.    VdbeBra
21a20 6e 63 68 54 61 6b 65 6e 28 74 61 6b 65 4a 75 6d  nchTaken(takeJum
21a30 70 7c 7c 61 6c 72 65 61 64 79 45 78 69 73 74 73  p||alreadyExists
21a40 3d 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20  ==0,2);.    if( 
21a50 74 61 6b 65 4a 75 6d 70 20 7c 7c 20 21 61 6c 72  takeJump || !alr
21a60 65 61 64 79 45 78 69 73 74 73 20 29 20 67 6f 74  eadyExists ) got
21a70 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
21a80 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
21a90 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 52 6f 77   Opcode: SeekRow
21aa0 69 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  id P1 P2 P3 * *.
21ab0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74  ** Synopsis: int
21ac0 6b 65 79 3d 72 5b 50 33 5d 0a 2a 2a 0a 2a 2a 20  key=r[P3].**.** 
21ad0 50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78 20  P1 is the index 
21ae0 6f 66 20 61 20 63 75 72 73 6f 72 20 6f 70 65 6e  of a cursor open
21af0 20 6f 6e 20 61 6e 20 53 51 4c 20 74 61 62 6c 65   on an SQL table
21b00 20 62 74 72 65 65 20 28 77 69 74 68 20 69 6e 74   btree (with int
21b10 65 67 65 72 0a 2a 2a 20 6b 65 79 73 29 2e 20 20  eger.** keys).  
21b20 49 66 20 72 65 67 69 73 74 65 72 20 50 33 20 64  If register P3 d
21b30 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20  oes not contain 
21b40 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20 69 66  an integer or if
21b50 20 50 31 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20   P1 does not.** 
21b60 63 6f 6e 74 61 69 6e 20 61 20 72 65 63 6f 72 64  contain a record
21b70 20 77 69 74 68 20 72 6f 77 69 64 20 50 33 20 74   with rowid P3 t
21b80 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  hen jump immedia
21b90 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 0a 2a 2a  tely to P2.  .**
21ba0 20 4f 72 2c 20 69 66 20 50 32 20 69 73 20 30 2c   Or, if P2 is 0,
21bb0 20 72 61 69 73 65 20 61 6e 20 53 51 4c 49 54 45   raise an SQLITE
21bc0 5f 43 4f 52 52 55 50 54 20 65 72 72 6f 72 2e 20  _CORRUPT error. 
21bd0 49 66 20 50 31 20 64 6f 65 73 20 63 6f 6e 74 61  If P1 does conta
21be0 69 6e 0a 2a 2a 20 61 20 72 65 63 6f 72 64 20 77  in.** a record w
21bf0 69 74 68 20 72 6f 77 69 64 20 50 33 20 74 68 65  ith rowid P3 the
21c00 6e 20 0a 2a 2a 20 6c 65 61 76 65 20 74 68 65 20  n .** leave the 
21c10 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20  cursor pointing 
21c20 61 74 20 74 68 61 74 20 72 65 63 6f 72 64 20 61  at that record a
21c30 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  nd fall through 
21c40 74 6f 20 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69  to the next.** i
21c50 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
21c60 2a 20 54 68 65 20 4f 50 5f 4e 6f 74 45 78 69 73  * The OP_NotExis
21c70 74 73 20 6f 70 63 6f 64 65 20 70 65 72 66 6f 72  ts opcode perfor
21c80 6d 73 20 74 68 65 20 73 61 6d 65 20 6f 70 65 72  ms the same oper
21c90 61 74 69 6f 6e 2c 20 62 75 74 20 77 69 74 68 20  ation, but with 
21ca0 4f 50 5f 4e 6f 74 45 78 69 73 74 73 0a 2a 2a 20  OP_NotExists.** 
21cb0 74 68 65 20 50 33 20 72 65 67 69 73 74 65 72 20  the P3 register 
21cc0 6d 75 73 74 20 62 65 20 67 75 61 72 61 6e 74 65  must be guarante
21cd0 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 61 6e  ed to contain an
21ce0 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 20   integer value. 
21cf0 20 57 69 74 68 20 74 68 69 73 0a 2a 2a 20 6f 70   With this.** op
21d00 63 6f 64 65 2c 20 72 65 67 69 73 74 65 72 20 50  code, register P
21d10 33 20 6d 69 67 68 74 20 6e 6f 74 20 63 6f 6e 74  3 might not cont
21d20 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a  ain an integer..
21d30 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e 6f 74  **.** The OP_Not
21d40 46 6f 75 6e 64 20 6f 70 63 6f 64 65 20 70 65 72  Found opcode per
21d50 66 6f 72 6d 73 20 74 68 65 20 73 61 6d 65 20 6f  forms the same o
21d60 70 65 72 61 74 69 6f 6e 20 6f 6e 20 69 6e 64 65  peration on inde
21d70 78 20 62 74 72 65 65 73 0a 2a 2a 20 28 77 69 74  x btrees.** (wit
21d80 68 20 61 72 62 69 74 72 61 72 79 20 6d 75 6c 74  h arbitrary mult
21d90 69 2d 76 61 6c 75 65 20 6b 65 79 73 29 2e 0a 2a  i-value keys)..*
21da0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
21db0 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73   leaves the curs
21dc0 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20 77 68  or in a state wh
21dd0 65 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65  ere it cannot be
21de0 20 61 64 76 61 6e 63 65 64 0a 2a 2a 20 69 6e 20   advanced.** in 
21df0 65 69 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e  either direction
21e00 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
21e10 73 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20  s, the Next and 
21e20 50 72 65 76 20 6f 70 63 6f 64 65 73 20 77 69 6c  Prev opcodes wil
21e30 6c 0a 2a 2a 20 6e 6f 74 20 77 6f 72 6b 20 66 6f  l.** not work fo
21e40 6c 6c 6f 77 69 6e 67 20 74 68 69 73 20 6f 70 63  llowing this opc
21e50 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ode..**.** See a
21e60 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46  lso: Found, NotF
21e70 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74  ound, NoConflict
21e80 2c 20 53 65 65 6b 52 6f 77 69 64 0a 2a 2f 0a 2f  , SeekRowid.*/./
21e90 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 45 78 69  * Opcode: NotExi
21ea0 73 74 73 20 50 31 20 50 32 20 50 33 20 2a 20 2a  sts P1 P2 P3 * *
21eb0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e  .** Synopsis: in
21ec0 74 6b 65 79 3d 72 5b 50 33 5d 0a 2a 2a 0a 2a 2a  tkey=r[P3].**.**
21ed0 20 50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78   P1 is the index
21ee0 20 6f 66 20 61 20 63 75 72 73 6f 72 20 6f 70 65   of a cursor ope
21ef0 6e 20 6f 6e 20 61 6e 20 53 51 4c 20 74 61 62 6c  n on an SQL tabl
21f00 65 20 62 74 72 65 65 20 28 77 69 74 68 20 69 6e  e btree (with in
21f10 74 65 67 65 72 0a 2a 2a 20 6b 65 79 73 29 2e 20  teger.** keys). 
21f20 20 50 33 20 69 73 20 61 6e 20 69 6e 74 65 67 65   P3 is an intege
21f30 72 20 72 6f 77 69 64 2e 20 20 49 66 20 50 31 20  r rowid.  If P1 
21f40 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69 6e  does not contain
21f50 20 61 20 72 65 63 6f 72 64 20 77 69 74 68 0a 2a   a record with.*
21f60 2a 20 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20  * rowid P3 then 
21f70 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
21f80 20 74 6f 20 50 32 2e 20 20 4f 72 2c 20 69 66 20   to P2.  Or, if 
21f90 50 32 20 69 73 20 30 2c 20 72 61 69 73 65 20 61  P2 is 0, raise a
21fa0 6e 0a 2a 2a 20 53 51 4c 49 54 45 5f 43 4f 52 52  n.** SQLITE_CORR
21fb0 55 50 54 20 65 72 72 6f 72 2e 20 49 66 20 50 31  UPT error. If P1
21fc0 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61 20   does contain a 
21fd0 72 65 63 6f 72 64 20 77 69 74 68 20 72 6f 77 69  record with rowi
21fe0 64 20 50 33 20 74 68 65 6e 20 0a 2a 2a 20 6c 65  d P3 then .** le
21ff0 61 76 65 20 74 68 65 20 63 75 72 73 6f 72 20 70  ave the cursor p
22000 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 61 74 20  ointing at that 
22010 72 65 63 6f 72 64 20 61 6e 64 20 66 61 6c 6c 20  record and fall 
22020 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
22030 65 78 74 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69  ext.** instructi
22040 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50  on..**.** The OP
22050 5f 53 65 65 6b 52 6f 77 69 64 20 6f 70 63 6f 64  _SeekRowid opcod
22060 65 20 70 65 72 66 6f 72 6d 73 20 74 68 65 20 73  e performs the s
22070 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 62 75  ame operation bu
22080 74 20 61 6c 73 6f 20 61 6c 6c 6f 77 73 20 74 68  t also allows th
22090 65 0a 2a 2a 20 50 33 20 72 65 67 69 73 74 65 72  e.** P3 register
220a0 20 74 6f 20 63 6f 6e 74 61 69 6e 20 61 20 6e 6f   to contain a no
220b0 6e 2d 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2c  n-integer value,
220c0 20 69 6e 20 77 68 69 63 68 20 63 61 73 65 20 74   in which case t
220d0 68 65 20 6a 75 6d 70 20 69 73 0a 2a 2a 20 61 6c  he jump is.** al
220e0 77 61 79 73 20 74 61 6b 65 6e 2e 20 20 54 68 69  ways taken.  Thi
220f0 73 20 6f 70 63 6f 64 65 20 72 65 71 75 69 72 65  s opcode require
22100 73 20 74 68 61 74 20 50 33 20 61 6c 77 61 79 73  s that P3 always
22110 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65   contain an inte
22120 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f  ger..**.** The O
22130 50 5f 4e 6f 74 46 6f 75 6e 64 20 6f 70 63 6f 64  P_NotFound opcod
22140 65 20 70 65 72 66 6f 72 6d 73 20 74 68 65 20 73  e performs the s
22150 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 6e  ame operation on
22160 20 69 6e 64 65 78 20 62 74 72 65 65 73 0a 2a 2a   index btrees.**
22170 20 28 77 69 74 68 20 61 72 62 69 74 72 61 72 79   (with arbitrary
22180 20 6d 75 6c 74 69 2d 76 61 6c 75 65 20 6b 65 79   multi-value key
22190 73 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  s)..**.** This o
221a0 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65  pcode leaves the
221b0 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61   cursor in a sta
221c0 74 65 20 77 68 65 72 65 20 69 74 20 63 61 6e 6e  te where it cann
221d0 6f 74 20 62 65 20 61 64 76 61 6e 63 65 64 0a 2a  ot be advanced.*
221e0 2a 20 69 6e 20 65 69 74 68 65 72 20 64 69 72 65  * in either dire
221f0 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72  ction.  In other
22200 20 77 6f 72 64 73 2c 20 74 68 65 20 4e 65 78 74   words, the Next
22210 20 61 6e 64 20 50 72 65 76 20 6f 70 63 6f 64 65   and Prev opcode
22220 73 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 77 6f  s will.** not wo
22230 72 6b 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 69  rk following thi
22240 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  s opcode..**.** 
22250 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
22260 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e   NotFound, NoCon
22270 66 6c 69 63 74 2c 20 53 65 65 6b 52 6f 77 69 64  flict, SeekRowid
22280 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b  .*/.case OP_Seek
22290 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20  Rowid: {        
222a0 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a  /* jump, in3 */.
222b0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
222c0 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  ;.  BtCursor *pC
222d0 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  rsr;.  int res;.
222e0 20 20 75 36 34 20 69 4b 65 79 3b 0a 0a 20 20 70    u64 iKey;..  p
222f0 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
22300 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e  >p3];.  if( (pIn
22310 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  3->flags & MEM_I
22320 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61 70  nt)==0 ){.    ap
22330 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 33  plyAffinity(pIn3
22340 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  , SQLITE_AFF_NUM
22350 45 52 49 43 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  ERIC, encoding);
22360 0a 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e  .    if( (pIn3->
22370 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
22380 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  ==0 ) goto jump_
22390 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 2f 2a 20  to_p2;.  }.  /* 
223a0 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74  Fall through int
223b0 6f 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 2a  o OP_NotExists *
223c0 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 45 78 69  /.case OP_NotExi
223d0 73 74 73 3a 20 20 20 20 20 20 20 20 20 20 2f 2a  sts:          /*
223e0 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20   jump, in3 */.  
223f0 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
22400 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p3];.  assert(
22410 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn3->flags & M
22420 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65  EM_Int );.  asse
22430 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
22440 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
22450 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
22460 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
22470 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
22480 30 20 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  0 );.#ifdef SQLI
22490 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73  TE_DEBUG.  pC->s
224a0 65 65 6b 4f 70 20 3d 20 30 3b 0a 23 65 6e 64 69  eekOp = 0;.#endi
224b0 66 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  f.  assert( pC->
224c0 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 61 73 73  isTable );.  ass
224d0 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
224e0 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
224f0 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43   );.  pCrsr = pC
22500 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20  ->uc.pCursor;.  
22510 61 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30  assert( pCrsr!=0
22520 20 29 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20   );.  res = 0;. 
22530 20 69 4b 65 79 20 3d 20 70 49 6e 33 2d 3e 75 2e   iKey = pIn3->u.
22540 69 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  i;.  rc = sqlite
22550 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61  3BtreeMovetoUnpa
22560 63 6b 65 64 28 70 43 72 73 72 2c 20 30 2c 20 69  cked(pCrsr, 0, i
22570 4b 65 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20  Key, 0, &res);. 
22580 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
22590 49 54 45 5f 4f 4b 20 7c 7c 20 72 65 73 3d 3d 30  ITE_OK || res==0
225a0 20 29 3b 0a 20 20 70 43 2d 3e 6d 6f 76 65 74 6f   );.  pC->moveto
225b0 54 61 72 67 65 74 20 3d 20 69 4b 65 79 3b 20 20  Target = iKey;  
225c0 2f 2a 20 55 73 65 64 20 62 79 20 4f 50 5f 44 65  /* Used by OP_De
225d0 6c 65 74 65 20 2a 2f 0a 20 20 70 43 2d 3e 6e 75  lete */.  pC->nu
225e0 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 70 43 2d  llRow = 0;.  pC-
225f0 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
22600 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43  ACHE_STALE;.  pC
22610 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
22620 20 3d 20 30 3b 0a 20 20 56 64 62 65 42 72 61 6e   = 0;.  VdbeBran
22630 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32  chTaken(res!=0,2
22640 29 3b 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73  );.  pC->seekRes
22650 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20 69 66 28  ult = res;.  if(
22660 20 72 65 73 21 3d 30 20 29 7b 0a 20 20 20 20 61   res!=0 ){.    a
22670 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
22680 45 5f 4f 4b 20 29 3b 0a 20 20 20 20 69 66 28 20  E_OK );.    if( 
22690 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20 20  pOp->p2==0 ){.  
226a0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
226b0 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20  CORRUPT_BKPT;.  
226c0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 67    }else{.      g
226d0 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
226e0 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20      }.  }.  if( 
226f0 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
22700 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
22710 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
22720 6f 64 65 3a 20 53 65 71 75 65 6e 63 65 20 50 31  ode: Sequence P1
22730 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
22740 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 63 75 72  opsis: r[P2]=cur
22750 73 6f 72 5b 50 31 5d 2e 63 74 72 2b 2b 0a 2a 2a  sor[P1].ctr++.**
22760 0a 2a 2a 20 46 69 6e 64 20 74 68 65 20 6e 65 78  .** Find the nex
22770 74 20 61 76 61 69 6c 61 62 6c 65 20 73 65 71 75  t available sequ
22780 65 6e 63 65 20 6e 75 6d 62 65 72 20 66 6f 72 20  ence number for 
22790 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 57 72  cursor P1..** Wr
227a0 69 74 65 20 74 68 65 20 73 65 71 75 65 6e 63 65  ite the sequence
227b0 20 6e 75 6d 62 65 72 20 69 6e 74 6f 20 72 65 67   number into reg
227c0 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 54 68 65  ister P2..** The
227d0 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72   sequence number
227e0 20 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69   on the cursor i
227f0 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 66  s incremented af
22800 74 65 72 20 74 68 69 73 0a 2a 2a 20 69 6e 73 74  ter this.** inst
22810 72 75 63 74 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61  ruction.  .*/.ca
22820 73 65 20 4f 50 5f 53 65 71 75 65 6e 63 65 3a 20  se OP_Sequence: 
22830 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  {           /* o
22840 75 74 32 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ut2 */.  assert(
22850 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
22860 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
22870 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
22880 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
22890 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
228a0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
228b0 31 5d 2d 3e 65 43 75 72 54 79 70 65 21 3d 43 55  1]->eCurType!=CU
228c0 52 54 59 50 45 5f 56 54 41 42 20 29 3b 0a 20 20  RTYPE_VTAB );.  
228d0 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
228e0 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
228f0 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 2d 3e   pOut->u.i = p->
22900 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e  apCsr[pOp->p1]->
22910 73 65 71 43 6f 75 6e 74 2b 2b 3b 0a 20 20 62 72  seqCount++;.  br
22920 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f  eak;.}.../* Opco
22930 64 65 3a 20 4e 65 77 52 6f 77 69 64 20 50 31 20  de: NewRowid P1 
22940 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
22950 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77  opsis: r[P2]=row
22960 69 64 0a 2a 2a 0a 2a 2a 20 47 65 74 20 61 20 6e  id.**.** Get a n
22970 65 77 20 69 6e 74 65 67 65 72 20 72 65 63 6f 72  ew integer recor
22980 64 20 6e 75 6d 62 65 72 20 28 61 2e 6b 2e 61 20  d number (a.k.a 
22990 22 72 6f 77 69 64 22 29 20 75 73 65 64 20 61 73  "rowid") used as
229a0 20 74 68 65 20 6b 65 79 20 74 6f 20 61 20 74 61   the key to a ta
229b0 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 72 65 63 6f  ble..** The reco
229c0 72 64 20 6e 75 6d 62 65 72 20 69 73 20 6e 6f 74  rd number is not
229d0 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73 65 64   previously used
229e0 20 61 73 20 61 20 6b 65 79 20 69 6e 20 74 68 65   as a key in the
229f0 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 74 61 62   database.** tab
22a00 6c 65 20 74 68 61 74 20 63 75 72 73 6f 72 20 50  le that cursor P
22a10 31 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20 54 68  1 points to.  Th
22a20 65 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d  e new record num
22a30 62 65 72 20 69 73 20 77 72 69 74 74 65 6e 0a 2a  ber is written.*
22a40 2a 20 77 72 69 74 74 65 6e 20 74 6f 20 72 65 67  * written to reg
22a50 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
22a60 49 66 20 50 33 3e 30 20 74 68 65 6e 20 50 33 20  If P3>0 then P3 
22a70 69 73 20 61 20 72 65 67 69 73 74 65 72 20 69 6e  is a register in
22a80 20 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20   the root frame 
22a90 6f 66 20 74 68 69 73 20 56 44 42 45 20 74 68 61  of this VDBE tha
22aa0 74 20 68 6f 6c 64 73 20 0a 2a 2a 20 74 68 65 20  t holds .** the 
22ab0 6c 61 72 67 65 73 74 20 70 72 65 76 69 6f 75 73  largest previous
22ac0 6c 79 20 67 65 6e 65 72 61 74 65 64 20 72 65 63  ly generated rec
22ad0 6f 72 64 20 6e 75 6d 62 65 72 2e 20 4e 6f 20 6e  ord number. No n
22ae0 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  ew record number
22af0 73 20 61 72 65 0a 2a 2a 20 61 6c 6c 6f 77 65 64  s are.** allowed
22b00 20 74 6f 20 62 65 20 6c 65 73 73 20 74 68 61 6e   to be less than
22b10 20 74 68 69 73 20 76 61 6c 75 65 2e 20 57 68 65   this value. Whe
22b20 6e 20 74 68 69 73 20 76 61 6c 75 65 20 72 65 61  n this value rea
22b30 63 68 65 73 20 69 74 73 20 6d 61 78 69 6d 75 6d  ches its maximum
22b40 2c 20 0a 2a 2a 20 61 6e 20 53 51 4c 49 54 45 5f  , .** an SQLITE_
22b50 46 55 4c 4c 20 65 72 72 6f 72 20 69 73 20 67 65  FULL error is ge
22b60 6e 65 72 61 74 65 64 2e 20 54 68 65 20 50 33 20  nerated. The P3 
22b70 72 65 67 69 73 74 65 72 20 69 73 20 75 70 64 61  register is upda
22b80 74 65 64 20 77 69 74 68 20 74 68 65 20 27 0a 2a  ted with the '.*
22b90 2a 20 67 65 6e 65 72 61 74 65 64 20 72 65 63 6f  * generated reco
22ba0 72 64 20 6e 75 6d 62 65 72 2e 20 54 68 69 73 20  rd number. This 
22bb0 50 33 20 6d 65 63 68 61 6e 69 73 6d 20 69 73 20  P3 mechanism is 
22bc0 75 73 65 64 20 74 6f 20 68 65 6c 70 20 69 6d 70  used to help imp
22bd0 6c 65 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 41 55  lement the.** AU
22be0 54 4f 49 4e 43 52 45 4d 45 4e 54 20 66 65 61 74  TOINCREMENT feat
22bf0 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ure..*/.case OP_
22c00 4e 65 77 52 6f 77 69 64 3a 20 7b 20 20 20 20 20  NewRowid: {     
22c10 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
22c20 0a 20 20 69 36 34 20 76 3b 20 20 20 20 20 20 20  .  i64 v;       
22c30 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
22c40 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20   new rowid */.  
22c50 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20  VdbeCursor *pC; 
22c60 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72         /* Cursor
22c70 20 6f 66 20 74 61 62 6c 65 20 74 6f 20 67 65 74   of table to get
22c80 20 74 68 65 20 6e 65 77 20 72 6f 77 69 64 20 2a   the new rowid *
22c90 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20 20 20 20  /.  int res;    
22ca0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
22cb0 73 75 6c 74 20 6f 66 20 61 6e 20 73 71 6c 69 74  sult of an sqlit
22cc0 65 33 42 74 72 65 65 4c 61 73 74 28 29 20 2a 2f  e3BtreeLast() */
22cd0 0a 20 20 69 6e 74 20 63 6e 74 3b 20 20 20 20 20  .  int cnt;     
22ce0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 75            /* Cou
22cf0 6e 74 65 72 20 74 6f 20 6c 69 6d 69 74 20 74 68  nter to limit th
22d00 65 20 6e 75 6d 62 65 72 20 6f 66 20 73 65 61 72  e number of sear
22d10 63 68 65 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  ches */.  Mem *p
22d20 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
22d30 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c   /* Register hol
22d40 64 69 6e 67 20 6c 61 72 67 65 73 74 20 72 6f 77  ding largest row
22d50 69 64 20 66 6f 72 20 41 55 54 4f 49 4e 43 52 45  id for AUTOINCRE
22d60 4d 45 4e 54 20 2a 2f 0a 20 20 56 64 62 65 46 72  MENT */.  VdbeFr
22d70 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20 20 20  ame *pFrame;    
22d80 20 2f 2a 20 52 6f 6f 74 20 66 72 61 6d 65 20 6f   /* Root frame o
22d90 66 20 56 44 42 45 20 2a 2f 0a 0a 20 20 76 20 3d  f VDBE */..  v =
22da0 20 30 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20   0;.  res = 0;. 
22db0 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
22dc0 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
22dd0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
22de0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
22df0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
22e00 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
22e10 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
22e20 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
22e30 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
22e40 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
22e50 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
22e60 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20  ->uc.pCursor!=0 
22e70 29 3b 0a 20 20 7b 0a 20 20 20 20 2f 2a 20 54 68  );.  {.    /* Th
22e80 65 20 6e 65 78 74 20 72 6f 77 69 64 20 6f 72 20  e next rowid or 
22e90 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 28 64  record number (d
22ea0 69 66 66 65 72 65 6e 74 20 74 65 72 6d 73 20 66  ifferent terms f
22eb0 6f 72 20 74 68 65 20 73 61 6d 65 0a 20 20 20 20  or the same.    
22ec0 2a 2a 20 74 68 69 6e 67 29 20 69 73 20 6f 62 74  ** thing) is obt
22ed0 61 69 6e 65 64 20 69 6e 20 61 20 74 77 6f 2d 73  ained in a two-s
22ee0 74 65 70 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 20  tep algorithm.. 
22ef0 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 46 69 72     **.    ** Fir
22f00 73 74 20 77 65 20 61 74 74 65 6d 70 74 20 74 6f  st we attempt to
22f10 20 66 69 6e 64 20 74 68 65 20 6c 61 72 67 65 73   find the larges
22f20 74 20 65 78 69 73 74 69 6e 67 20 72 6f 77 69 64  t existing rowid
22f30 20 61 6e 64 20 61 64 64 20 6f 6e 65 0a 20 20 20   and add one.   
22f40 20 2a 2a 20 74 6f 20 74 68 61 74 2e 20 20 42 75   ** to that.  Bu
22f50 74 20 69 66 20 74 68 65 20 6c 61 72 67 65 73 74  t if the largest
22f60 20 65 78 69 73 74 69 6e 67 20 72 6f 77 69 64 20   existing rowid 
22f70 69 73 20 61 6c 72 65 61 64 79 20 74 68 65 20 6d  is already the m
22f80 61 78 69 6d 75 6d 0a 20 20 20 20 2a 2a 20 70 6f  aximum.    ** po
22f90 73 69 74 69 76 65 20 69 6e 74 65 67 65 72 2c 20  sitive integer, 
22fa0 77 65 20 68 61 76 65 20 74 6f 20 66 61 6c 6c 20  we have to fall 
22fb0 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 73  through to the s
22fc0 65 63 6f 6e 64 0a 20 20 20 20 2a 2a 20 70 72 6f  econd.    ** pro
22fd0 62 61 62 69 6c 69 73 74 69 63 20 61 6c 67 6f 72  babilistic algor
22fe0 69 74 68 6d 0a 20 20 20 20 2a 2a 0a 20 20 20 20  ithm.    **.    
22ff0 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 61 6c  ** The second al
23000 67 6f 72 69 74 68 6d 20 69 73 20 74 6f 20 73 65  gorithm is to se
23010 6c 65 63 74 20 61 20 72 6f 77 69 64 20 61 74 20  lect a rowid at 
23020 72 61 6e 64 6f 6d 20 61 6e 64 20 73 65 65 20 69  random and see i
23030 66 0a 20 20 20 20 2a 2a 20 69 74 20 61 6c 72 65  f.    ** it alre
23040 61 64 79 20 65 78 69 73 74 73 20 69 6e 20 74 68  ady exists in th
23050 65 20 74 61 62 6c 65 2e 20 20 49 66 20 69 74 20  e table.  If it 
23060 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c 20  does not exist, 
23070 77 65 20 68 61 76 65 0a 20 20 20 20 2a 2a 20 73  we have.    ** s
23080 75 63 63 65 65 64 65 64 2e 20 20 49 66 20 74 68  ucceeded.  If th
23090 65 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 64  e random rowid d
230a0 6f 65 73 20 65 78 69 73 74 2c 20 77 65 20 73 65  oes exist, we se
230b0 6c 65 63 74 20 61 20 6e 65 77 20 6f 6e 65 0a 20  lect a new one. 
230c0 20 20 20 2a 2a 20 61 6e 64 20 74 72 79 20 61 67     ** and try ag
230d0 61 69 6e 2c 20 75 70 20 74 6f 20 31 30 30 20 74  ain, up to 100 t
230e0 69 6d 65 73 2e 0a 20 20 20 20 2a 2f 0a 20 20 20  imes..    */.   
230f0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
23100 61 62 6c 65 20 29 3b 0a 0a 23 69 66 64 65 66 20  able );..#ifdef 
23110 53 51 4c 49 54 45 5f 33 32 42 49 54 5f 52 4f 57  SQLITE_32BIT_ROW
23120 49 44 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41  ID.#   define MA
23130 58 5f 52 4f 57 49 44 20 30 78 37 66 66 66 66 66  X_ROWID 0x7fffff
23140 66 66 0a 23 65 6c 73 65 0a 20 20 20 20 2f 2a 20  ff.#else.    /* 
23150 53 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 20 63  Some compilers c
23160 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 63 6f  omplain about co
23170 6e 73 74 61 6e 74 73 20 6f 66 20 74 68 65 20 66  nstants of the f
23180 6f 72 6d 20 30 78 37 66 66 66 66 66 66 66 66 66  orm 0x7fffffffff
23190 66 66 66 66 66 66 2e 0a 20 20 20 20 2a 2a 20 4f  ffffff..    ** O
231a0 74 68 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61  thers complain a
231b0 62 6f 75 74 20 30 78 37 66 66 66 66 66 66 66 66  bout 0x7ffffffff
231c0 66 66 66 66 66 66 66 66 4c 4c 2e 20 20 54 68 65  ffffffffLL.  The
231d0 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f   following macro
231e0 20 73 65 65 6d 73 0a 20 20 20 20 2a 2a 20 74 6f   seems.    ** to
231f0 20 70 72 6f 76 69 64 65 20 74 68 65 20 63 6f 6e   provide the con
23200 73 74 61 6e 74 20 77 68 69 6c 65 20 6d 61 6b 69  stant while maki
23210 6e 67 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72 73  ng all compilers
23220 20 68 61 70 70 79 2e 0a 20 20 20 20 2a 2f 0a 23   happy..    */.#
23230 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f     define MAX_RO
23240 57 49 44 20 20 28 69 36 34 29 28 20 28 28 28 75  WID  (i64)( (((u
23250 36 34 29 30 78 37 66 66 66 66 66 66 66 29 3c 3c  64)0x7fffffff)<<
23260 33 32 29 20 7c 20 28 75 36 34 29 30 78 66 66 66  32) | (u64)0xfff
23270 66 66 66 66 66 20 29 0a 23 65 6e 64 69 66 0a 0a  fffff ).#endif..
23280 20 20 20 20 69 66 28 20 21 70 43 2d 3e 75 73 65      if( !pC->use
23290 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20  RandomRowid ){. 
232a0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
232b0 33 42 74 72 65 65 4c 61 73 74 28 70 43 2d 3e 75  3BtreeLast(pC->u
232c0 63 2e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29  c.pCursor, &res)
232d0 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  ;.      if( rc!=
232e0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
232f0 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
23300 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
23310 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
23320 72 65 73 20 29 7b 0a 20 20 20 20 20 20 20 20 76  res ){.        v
23330 20 3d 20 31 3b 20 20 20 2f 2a 20 49 4d 50 3a 20   = 1;   /* IMP: 
23340 52 2d 36 31 39 31 34 2d 34 38 30 37 34 20 2a 2f  R-61914-48074 */
23350 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
23360 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
23370 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
23380 49 73 56 61 6c 69 64 28 70 43 2d 3e 75 63 2e 70  IsValid(pC->uc.p
23390 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20  Cursor) );.     
233a0 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33 42 74     v = sqlite3Bt
233b0 72 65 65 49 6e 74 65 67 65 72 4b 65 79 28 70 43  reeIntegerKey(pC
233c0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20  ->uc.pCursor);. 
233d0 20 20 20 20 20 20 20 69 66 28 20 76 3e 3d 4d 41         if( v>=MA
233e0 58 5f 52 4f 57 49 44 20 29 7b 0a 20 20 20 20 20  X_ROWID ){.     
233f0 20 20 20 20 20 70 43 2d 3e 75 73 65 52 61 6e 64       pC->useRand
23400 6f 6d 52 6f 77 69 64 20 3d 20 31 3b 0a 20 20 20  omRowid = 1;.   
23410 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
23420 20 20 20 20 20 20 76 2b 2b 3b 20 20 20 2f 2a 20        v++;   /* 
23430 49 4d 50 3a 20 52 2d 32 39 35 33 38 2d 33 34 39  IMP: R-29538-349
23440 38 37 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d 0a  87 */.        }.
23450 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 23        }.    }..#
23460 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
23470 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  IT_AUTOINCREMENT
23480 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33  .    if( pOp->p3
23490 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41 73 73   ){.      /* Ass
234a0 65 72 74 20 74 68 61 74 20 50 33 20 69 73 20 61  ert that P3 is a
234b0 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65   valid memory ce
234c0 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73 73  ll. */.      ass
234d0 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29  ert( pOp->p3>0 )
234e0 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 70  ;.      if( p->p
234f0 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 20  Frame ){.       
23500 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70   for(pFrame=p->p
23510 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70  Frame; pFrame->p
23520 50 61 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70  Parent; pFrame=p
23530 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b  Frame->pParent);
23540 0a 20 20 20 20 20 20 20 20 2f 2a 20 41 73 73 65  .        /* Asse
23550 72 74 20 74 68 61 74 20 50 33 20 69 73 20 61 20  rt that P3 is a 
23560 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c  valid memory cel
23570 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73  l. */.        as
23580 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70  sert( pOp->p3<=p
23590 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  Frame->nMem );. 
235a0 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 70         pMem = &p
235b0 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d  Frame->aMem[pOp-
235c0 3e 70 33 5d 3b 0a 20 20 20 20 20 20 7d 65 6c 73  >p3];.      }els
235d0 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 41 73  e{.        /* As
235e0 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73 20  sert that P3 is 
235f0 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63  a valid memory c
23600 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  ell. */.        
23610 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
23620 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
23630 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
23640 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65       pMem = &aMe
23650 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20  m[pOp->p3];.    
23660 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
23670 61 6e 67 65 28 70 2c 20 70 4d 65 6d 29 3b 0a 20  ange(p, pMem);. 
23680 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73       }.      ass
23690 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
236a0 70 4d 65 6d 29 20 29 3b 0a 0a 20 20 20 20 20 20  pMem) );..      
236b0 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
236c0 4f 70 2d 3e 70 33 2c 20 70 4d 65 6d 29 3b 0a 20  Op->p3, pMem);. 
236d0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
236e0 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 4d  MemIntegerify(pM
236f0 65 6d 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  em);.      asser
23700 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  t( (pMem->flags 
23710 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b  & MEM_Int)!=0 );
23720 20 20 2f 2a 20 6d 65 6d 28 50 33 29 20 68 6f 6c    /* mem(P3) hol
23730 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 2a 2f  ds an integer */
23740 0a 20 20 20 20 20 20 69 66 28 20 70 4d 65 6d 2d  .      if( pMem-
23750 3e 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57 49 44 20  >u.i==MAX_ROWID 
23760 7c 7c 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d  || pC->useRandom
23770 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 20  Rowid ){.       
23780 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c   rc = SQLITE_FUL
23790 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 31  L;   /* IMP: R-1
237a0 32 32 37 35 2d 36 31 33 33 38 20 2a 2f 0a 20 20  2275-61338 */.  
237b0 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
237c0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
237d0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
237e0 20 76 3c 70 4d 65 6d 2d 3e 75 2e 69 2b 31 20 29   v<pMem->u.i+1 )
237f0 7b 0a 20 20 20 20 20 20 20 20 76 20 3d 20 70 4d  {.        v = pM
23800 65 6d 2d 3e 75 2e 69 20 2b 20 31 3b 0a 20 20 20  em->u.i + 1;.   
23810 20 20 20 7d 0a 20 20 20 20 20 20 70 4d 65 6d 2d     }.      pMem-
23820 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 20 20 7d 0a  >u.i = v;.    }.
23830 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20 70  #endif.    if( p
23840 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69  C->useRandomRowi
23850 64 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 4d  d ){.      /* IM
23860 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a  PLEMENTATION-OF:
23870 20 52 2d 30 37 36 37 37 2d 34 31 38 38 31 20 49   R-07677-41881 I
23880 66 20 74 68 65 20 6c 61 72 67 65 73 74 20 52 4f  f the largest RO
23890 57 49 44 20 69 73 20 65 71 75 61 6c 20 74 6f 20  WID is equal to 
238a0 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 6c 61 72  the.      ** lar
238b0 67 65 73 74 20 70 6f 73 73 69 62 6c 65 20 69 6e  gest possible in
238c0 74 65 67 65 72 20 28 39 32 32 33 33 37 32 30 33  teger (922337203
238d0 36 38 35 34 37 37 35 38 30 37 29 20 74 68 65 6e  6854775807) then
238e0 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 20 20   the database.  
238f0 20 20 20 20 2a 2a 20 65 6e 67 69 6e 65 20 73 74      ** engine st
23900 61 72 74 73 20 70 69 63 6b 69 6e 67 20 70 6f 73  arts picking pos
23910 69 74 69 76 65 20 63 61 6e 64 69 64 61 74 65 20  itive candidate 
23920 52 4f 57 49 44 73 20 61 74 20 72 61 6e 64 6f 6d  ROWIDs at random
23930 20 75 6e 74 69 6c 0a 20 20 20 20 20 20 2a 2a 20   until.      ** 
23940 69 74 20 66 69 6e 64 73 20 6f 6e 65 20 74 68 61  it finds one tha
23950 74 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75  t is not previou
23960 73 6c 79 20 75 73 65 64 2e 20 2a 2f 0a 20 20 20  sly used. */.   
23970 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
23980 70 33 3d 3d 30 20 29 3b 20 20 2f 2a 20 57 65 20  p3==0 );  /* We 
23990 63 61 6e 6e 6f 74 20 62 65 20 69 6e 20 72 61 6e  cannot be in ran
239a0 64 6f 6d 20 72 6f 77 69 64 20 6d 6f 64 65 20 69  dom rowid mode i
239b0 66 20 74 68 69 73 20 69 73 0a 20 20 20 20 20 20  f this is.      
239c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
239d0 20 20 20 20 20 20 20 2a 2a 20 61 6e 20 41 55 54         ** an AUT
239e0 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c 65  OINCREMENT table
239f0 2e 20 2a 2f 0a 20 20 20 20 20 20 63 6e 74 20 3d  . */.      cnt =
23a00 20 30 3b 0a 20 20 20 20 20 20 64 6f 7b 0a 20 20   0;.      do{.  
23a10 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 61        sqlite3_ra
23a20 6e 64 6f 6d 6e 65 73 73 28 73 69 7a 65 6f 66 28  ndomness(sizeof(
23a30 76 29 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 20  v), &v);.       
23a40 20 76 20 26 3d 20 28 4d 41 58 5f 52 4f 57 49 44   v &= (MAX_ROWID
23a50 3e 3e 31 29 3b 20 76 2b 2b 3b 20 20 2f 2a 20 45  >>1); v++;  /* E
23a60 6e 73 75 72 65 20 74 68 61 74 20 76 20 69 73 20  nsure that v is 
23a70 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72  greater than zer
23a80 6f 20 2a 2f 0a 20 20 20 20 20 20 7d 77 68 69 6c  o */.      }whil
23a90 65 28 20 20 28 28 72 63 20 3d 20 73 71 6c 69 74  e(  ((rc = sqlit
23aa0 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
23ab0 61 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43 75  acked(pC->uc.pCu
23ac0 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 76 2c  rsor, 0, (u64)v,
23ad0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b00 20 20 30 2c 20 26 72 65 73 29 29 3d 3d 53 51 4c    0, &res))==SQL
23b10 49 54 45 5f 4f 4b 29 0a 20 20 20 20 20 20 20 20  ITE_OK).        
23b20 20 20 20 20 26 26 20 28 72 65 73 3d 3d 30 29 0a      && (res==0).
23b30 20 20 20 20 20 20 20 20 20 20 20 20 26 26 20 28              && (
23b40 2b 2b 63 6e 74 3c 31 30 30 29 29 3b 0a 20 20 20  ++cnt<100));.   
23b50 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f     if( rc ) goto
23b60 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
23b70 72 6f 72 3b 0a 20 20 20 20 20 20 69 66 28 20 72  ror;.      if( r
23b80 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  es==0 ){.       
23b90 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c   rc = SQLITE_FUL
23ba0 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 33  L;   /* IMP: R-3
23bb0 38 32 31 39 2d 35 33 30 30 32 20 2a 2f 0a 20 20  8219-53002 */.  
23bc0 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
23bd0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
23be0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73       }.      ass
23bf0 65 72 74 28 20 76 3e 30 20 29 3b 20 20 2f 2a 20  ert( v>0 );  /* 
23c00 45 56 3a 20 52 2d 34 30 38 31 32 2d 30 33 35 37  EV: R-40812-0357
23c10 30 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 20 20 70  0 */.    }.    p
23c20 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
23c30 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63  o = 0;.    pC->c
23c40 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
23c50 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20  HE_STALE;.  }.  
23c60 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20  pOut->u.i = v;. 
23c70 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
23c80 63 6f 64 65 3a 20 49 6e 73 65 72 74 20 50 31 20  code: Insert P1 
23c90 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
23ca0 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d  ynopsis: intkey=
23cb0 72 5b 50 33 5d 20 64 61 74 61 3d 72 5b 50 32 5d  r[P3] data=r[P2]
23cc0 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 6e 20  .**.** Write an 
23cd0 65 6e 74 72 79 20 69 6e 74 6f 20 74 68 65 20 74  entry into the t
23ce0 61 62 6c 65 20 6f 66 20 63 75 72 73 6f 72 20 50  able of cursor P
23cf0 31 2e 20 20 41 20 6e 65 77 20 65 6e 74 72 79 20  1.  A new entry 
23d00 69 73 0a 2a 2a 20 63 72 65 61 74 65 64 20 69 66  is.** created if
23d10 20 69 74 20 64 6f 65 73 6e 27 74 20 61 6c 72 65   it doesn't alre
23d20 61 64 79 20 65 78 69 73 74 20 6f 72 20 74 68 65  ady exist or the
23d30 20 64 61 74 61 20 66 6f 72 20 61 6e 20 65 78 69   data for an exi
23d40 73 74 69 6e 67 0a 2a 2a 20 65 6e 74 72 79 20 69  sting.** entry i
23d50 73 20 6f 76 65 72 77 72 69 74 74 65 6e 2e 20 20  s overwritten.  
23d60 54 68 65 20 64 61 74 61 20 69 73 20 74 68 65 20  The data is the 
23d70 76 61 6c 75 65 20 4d 45 4d 5f 42 6c 6f 62 20 73  value MEM_Blob s
23d80 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
23d90 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 32 2e 20  r.** number P2. 
23da0 54 68 65 20 6b 65 79 20 69 73 20 73 74 6f 72 65  The key is store
23db0 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  d in register P3
23dc0 2e 20 54 68 65 20 6b 65 79 20 6d 75 73 74 0a 2a  . The key must.*
23dd0 2a 20 62 65 20 61 20 4d 45 4d 5f 49 6e 74 2e 0a  * be a MEM_Int..
23de0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
23df0 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67  LAG_NCHANGE flag
23e00 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20 74   of P5 is set, t
23e10 68 65 6e 20 74 68 65 20 72 6f 77 20 63 68 61 6e  hen the row chan
23e20 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20 69  ge count is.** i
23e30 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68 65  ncremented (othe
23e40 72 77 69 73 65 20 6e 6f 74 29 2e 20 20 49 66 20  rwise not).  If 
23e50 74 68 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52  the OPFLAG_LASTR
23e60 4f 57 49 44 20 66 6c 61 67 20 6f 66 20 50 35 20  OWID flag of P5 
23e70 69 73 20 73 65 74 2c 0a 2a 2a 20 74 68 65 6e 20  is set,.** then 
23e80 72 6f 77 69 64 20 69 73 20 73 74 6f 72 65 64 20  rowid is stored 
23e90 66 6f 72 20 73 75 62 73 65 71 75 65 6e 74 20 72  for subsequent r
23ea0 65 74 75 72 6e 20 62 79 20 74 68 65 0a 2a 2a 20  eturn by the.** 
23eb0 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73  sqlite3_last_ins
23ec0 65 72 74 5f 72 6f 77 69 64 28 29 20 66 75 6e 63  ert_rowid() func
23ed0 74 69 6f 6e 20 28 6f 74 68 65 72 77 69 73 65 20  tion (otherwise 
23ee0 69 74 20 69 73 20 75 6e 6d 6f 64 69 66 69 65 64  it is unmodified
23ef0 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  )..**.** If the 
23f00 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45  OPFLAG_USESEEKRE
23f10 53 55 4c 54 20 66 6c 61 67 20 6f 66 20 50 35 20  SULT flag of P5 
23f20 69 73 20 73 65 74 20 61 6e 64 20 69 66 20 74 68  is set and if th
23f30 65 20 72 65 73 75 6c 74 20 6f 66 0a 2a 2a 20 74  e result of.** t
23f40 68 65 20 6c 61 73 74 20 73 65 65 6b 20 6f 70 65  he last seek ope
23f50 72 61 74 69 6f 6e 20 28 4f 50 5f 4e 6f 74 45 78  ration (OP_NotEx
23f60 69 73 74 73 20 6f 72 20 4f 50 5f 53 65 65 6b 52  ists or OP_SeekR
23f70 6f 77 69 64 29 20 77 61 73 20 61 20 73 75 63 63  owid) was a succ
23f80 65 73 73 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 69  ess,.** then thi
23f90 73 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 20 77  s.** operation w
23fa0 69 6c 6c 20 6e 6f 74 20 61 74 74 65 6d 70 74 20  ill not attempt 
23fb0 74 6f 20 66 69 6e 64 20 74 68 65 20 61 70 70 72  to find the appr
23fc0 6f 70 72 69 61 74 65 20 72 6f 77 20 62 65 66 6f  opriate row befo
23fd0 72 65 20 64 6f 69 6e 67 0a 2a 2a 20 74 68 65 20  re doing.** the 
23fe0 69 6e 73 65 72 74 20 62 75 74 20 77 69 6c 6c 20  insert but will 
23ff0 69 6e 73 74 65 61 64 20 6f 76 65 72 77 72 69 74  instead overwrit
24000 65 20 74 68 65 20 72 6f 77 20 74 68 61 74 20 74  e the row that t
24010 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20  he cursor is.** 
24020 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
24030 6e 67 20 74 6f 2e 20 20 50 72 65 73 75 6d 61 62  ng to.  Presumab
24040 6c 79 2c 20 74 68 65 20 70 72 69 6f 72 20 4f 50  ly, the prior OP
24050 5f 4e 6f 74 45 78 69 73 74 73 20 6f 72 0a 2a 2a  _NotExists or.**
24060 20 4f 50 5f 53 65 65 6b 52 6f 77 69 64 20 6f 70   OP_SeekRowid op
24070 63 6f 64 65 0a 2a 2a 20 68 61 73 20 61 6c 72 65  code.** has alre
24080 61 64 79 20 70 6f 73 69 74 69 6f 6e 65 64 20 74  ady positioned t
24090 68 65 20 63 75 72 73 6f 72 20 63 6f 72 72 65 63  he cursor correc
240a0 74 6c 79 2e 20 20 54 68 69 73 20 69 73 20 61 6e  tly.  This is an
240b0 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 0a 2a 2a   optimization.**
240c0 20 74 68 61 74 20 62 6f 6f 73 74 73 20 70 65 72   that boosts per
240d0 66 6f 72 6d 61 6e 63 65 20 62 79 20 61 76 6f 69  formance by avoi
240e0 64 69 6e 67 20 72 65 64 75 6e 64 61 6e 74 20 73  ding redundant s
240f0 65 65 6b 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  eeks..**.** If t
24100 68 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41  he OPFLAG_ISUPDA
24110 54 45 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20  TE flag is set, 
24120 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65  then this opcode
24130 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e 0a 2a   is part of an.*
24140 2a 20 55 50 44 41 54 45 20 6f 70 65 72 61 74 69  * UPDATE operati
24150 6f 6e 2e 20 20 4f 74 68 65 72 77 69 73 65 20 28  on.  Otherwise (
24160 69 66 20 74 68 65 20 66 6c 61 67 20 69 73 20 63  if the flag is c
24170 6c 65 61 72 29 20 74 68 65 6e 20 74 68 69 73 20  lear) then this 
24180 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 70 61 72  opcode.** is par
24190 74 20 6f 66 20 61 6e 20 49 4e 53 45 52 54 20 6f  t of an INSERT o
241a0 70 65 72 61 74 69 6f 6e 2e 20 20 54 68 65 20 64  peration.  The d
241b0 69 66 66 65 72 65 6e 63 65 20 69 73 20 6f 6e 6c  ifference is onl
241c0 79 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 0a 2a  y important to.*
241d0 2a 20 74 68 65 20 75 70 64 61 74 65 20 68 6f 6f  * the update hoo
241e0 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61 6d 65 74  k..**.** Paramet
241f0 65 72 20 50 34 20 6d 61 79 20 70 6f 69 6e 74 20  er P4 may point 
24200 74 6f 20 61 20 54 61 62 6c 65 20 73 74 72 75 63  to a Table struc
24210 74 75 72 65 2c 20 6f 72 20 6d 61 79 20 62 65 20  ture, or may be 
24220 4e 55 4c 4c 2e 20 49 66 20 69 74 20 69 73 20 0a  NULL. If it is .
24230 2a 2a 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65  ** not NULL, the
24240 6e 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f  n the update-hoo
24250 6b 20 28 73 71 6c 69 74 65 33 2e 78 55 70 64 61  k (sqlite3.xUpda
24260 74 65 43 61 6c 6c 62 61 63 6b 29 20 69 73 20 69  teCallback) is i
24270 6e 76 6f 6b 65 64 20 0a 2a 2a 20 66 6f 6c 6c 6f  nvoked .** follo
24280 77 69 6e 67 20 61 20 73 75 63 63 65 73 73 66 75  wing a successfu
24290 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20  l insert..**.** 
242a0 28 57 41 52 4e 49 4e 47 2f 54 4f 44 4f 3a 20 49  (WARNING/TODO: I
242b0 66 20 50 31 20 69 73 20 61 20 70 73 65 75 64 6f  f P1 is a pseudo
242c0 2d 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20 69  -cursor and P2 i
242d0 73 20 64 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a 2a  s dynamically.**
242e0 20 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 6e   allocated, then
242f0 20 6f 77 6e 65 72 73 68 69 70 20 6f 66 20 50 32   ownership of P2
24300 20 69 73 20 74 72 61 6e 73 66 65 72 72 65 64 20   is transferred 
24310 74 6f 20 74 68 65 20 70 73 65 75 64 6f 2d 63 75  to the pseudo-cu
24320 72 73 6f 72 0a 2a 2a 20 61 6e 64 20 72 65 67 69  rsor.** and regi
24330 73 74 65 72 20 50 32 20 62 65 63 6f 6d 65 73 20  ster P2 becomes 
24340 65 70 68 65 6d 65 72 61 6c 2e 20 20 49 66 20 74  ephemeral.  If t
24350 68 65 20 63 75 72 73 6f 72 20 69 73 20 63 68 61  he cursor is cha
24360 6e 67 65 64 2c 20 74 68 65 0a 2a 2a 20 76 61 6c  nged, the.** val
24370 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  ue of register P
24380 32 20 77 69 6c 6c 20 74 68 65 6e 20 63 68 61 6e  2 will then chan
24390 67 65 2e 20 20 4d 61 6b 65 20 73 75 72 65 20 74  ge.  Make sure t
243a0 68 69 73 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20  his does not.** 
243b0 63 61 75 73 65 20 61 6e 79 20 70 72 6f 62 6c 65  cause any proble
243c0 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ms.).**.** This 
243d0 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79  instruction only
243e0 20 77 6f 72 6b 73 20 6f 6e 20 74 61 62 6c 65 73   works on tables
243f0 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c 65 6e  .  The equivalen
24400 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a  t instruction.**
24410 20 66 6f 72 20 69 6e 64 69 63 65 73 20 69 73 20   for indices is 
24420 4f 50 5f 49 64 78 49 6e 73 65 72 74 2e 0a 2a 2f  OP_IdxInsert..*/
24430 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65  ./* Opcode: Inse
24440 72 74 49 6e 74 20 50 31 20 50 32 20 50 33 20 50  rtInt P1 P2 P3 P
24450 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
24460 3a 20 20 69 6e 74 6b 65 79 3d 50 33 20 64 61 74  :  intkey=P3 dat
24470 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 68  a=r[P2].**.** Th
24480 69 73 20 77 6f 72 6b 73 20 65 78 61 63 74 6c 79  is works exactly
24490 20 6c 69 6b 65 20 4f 50 5f 49 6e 73 65 72 74 20   like OP_Insert 
244a0 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
244b0 6b 65 79 20 69 73 20 74 68 65 0a 2a 2a 20 69 6e  key is the.** in
244c0 74 65 67 65 72 20 76 61 6c 75 65 20 50 33 2c 20  teger value P3, 
244d0 6e 6f 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66  not the value of
244e0 20 74 68 65 20 69 6e 74 65 67 65 72 20 73 74 6f   the integer sto
244f0 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
24500 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  P3..*/.case OP_I
24510 6e 73 65 72 74 3a 20 0a 63 61 73 65 20 4f 50 5f  nsert: .case OP_
24520 49 6e 73 65 72 74 49 6e 74 3a 20 7b 0a 20 20 4d  InsertInt: {.  M
24530 65 6d 20 2a 70 44 61 74 61 3b 20 20 20 20 20 20  em *pData;      
24540 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c   /* MEM cell hol
24550 64 69 6e 67 20 64 61 74 61 20 66 6f 72 20 74 68  ding data for th
24560 65 20 72 65 63 6f 72 64 20 74 6f 20 62 65 20 69  e record to be i
24570 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20 4d 65 6d  nserted */.  Mem
24580 20 2a 70 4b 65 79 3b 20 20 20 20 20 20 20 20 2f   *pKey;        /
24590 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69  * MEM cell holdi
245a0 6e 67 20 6b 65 79 20 20 66 6f 72 20 74 68 65 20  ng key  for the 
245b0 72 65 63 6f 72 64 20 2a 2f 0a 20 20 56 64 62 65  record */.  Vdbe
245c0 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 2f 2a  Cursor *pC;   /*
245d0 20 43 75 72 73 6f 72 20 74 6f 20 74 61 62 6c 65   Cursor to table
245e0 20 69 6e 74 6f 20 77 68 69 63 68 20 69 6e 73 65   into which inse
245f0 72 74 20 69 73 20 77 72 69 74 74 65 6e 20 2a 2f  rt is written */
24600 0a 20 20 69 6e 74 20 73 65 65 6b 52 65 73 75 6c  .  int seekResul
24610 74 3b 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f  t;   /* Result o
24620 66 20 70 72 69 6f 72 20 73 65 65 6b 20 6f 72 20  f prior seek or 
24630 30 20 69 66 20 6e 6f 20 55 53 45 53 45 45 4b 52  0 if no USESEEKR
24640 45 53 55 4c 54 20 66 6c 61 67 20 2a 2f 0a 20 20  ESULT flag */.  
24650 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b  const char *zDb;
24660 20 20 2f 2a 20 64 61 74 61 62 61 73 65 20 6e 61    /* database na
24670 6d 65 20 2d 20 75 73 65 64 20 62 79 20 74 68 65  me - used by the
24680 20 75 70 64 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a   update hook */.
24690 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20    Table *pTab;  
246a0 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 73 74 72      /* Table str
246b0 75 63 74 75 72 65 20 2d 20 75 73 65 64 20 62 79  ucture - used by
246c0 20 75 70 64 61 74 65 20 61 6e 64 20 70 72 65 2d   update and pre-
246d0 75 70 64 61 74 65 20 68 6f 6f 6b 73 20 2a 2f 0a  update hooks */.
246e0 20 20 69 6e 74 20 6f 70 3b 20 20 20 20 20 20 20    int op;       
246f0 20 20 20 20 2f 2a 20 4f 70 63 6f 64 65 20 66 6f      /* Opcode fo
24700 72 20 75 70 64 61 74 65 20 68 6f 6f 6b 3a 20 53  r update hook: S
24710 51 4c 49 54 45 5f 55 50 44 41 54 45 20 6f 72 20  QLITE_UPDATE or 
24720 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 20 2a 2f  SQLITE_INSERT */
24730 0a 20 20 42 74 72 65 65 50 61 79 6c 6f 61 64 20  .  BtreePayload 
24740 78 3b 20 20 20 2f 2a 20 50 61 79 6c 6f 61 64 20  x;   /* Payload 
24750 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 20 2a  to be inserted *
24760 2f 0a 0a 20 20 6f 70 20 3d 20 30 3b 0a 20 20 70  /..  op = 0;.  p
24770 44 61 74 61 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  Data = &aMem[pOp
24780 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p2];.  assert(
24790 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
247a0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
247b0 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6d  r );.  assert( m
247c0 65 6d 49 73 56 61 6c 69 64 28 70 44 61 74 61 29  emIsValid(pData)
247d0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
247e0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
247f0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
24800 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65  .  assert( pC->e
24810 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
24820 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65  _BTREE );.  asse
24830 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  rt( pC->uc.pCurs
24840 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  or!=0 );.  asser
24850 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  t( pC->isTable )
24860 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
24870 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c  >p4type==P4_TABL
24880 45 20 7c 7c 20 70 4f 70 2d 3e 70 34 74 79 70 65  E || pOp->p4type
24890 3e 3d 50 34 5f 53 54 41 54 49 43 20 29 3b 0a 20  >=P4_STATIC );. 
248a0 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
248b0 70 4f 70 2d 3e 70 32 2c 20 70 44 61 74 61 29 3b  pOp->p2, pData);
248c0 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  ..  if( pOp->opc
248d0 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 20 29  ode==OP_Insert )
248e0 7b 0a 20 20 20 20 70 4b 65 79 20 3d 20 26 61 4d  {.    pKey = &aM
248f0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  em[pOp->p3];.   
24900 20 61 73 73 65 72 74 28 20 70 4b 65 79 2d 3e 66   assert( pKey->f
24910 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
24920 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  ;.    assert( me
24930 6d 49 73 56 61 6c 69 64 28 70 4b 65 79 29 20 29  mIsValid(pKey) )
24940 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
24950 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4b  RACE(pOp->p3, pK
24960 65 79 29 3b 0a 20 20 20 20 78 2e 6e 4b 65 79 20  ey);.    x.nKey 
24970 3d 20 70 4b 65 79 2d 3e 75 2e 69 3b 0a 20 20 7d  = pKey->u.i;.  }
24980 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
24990 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
249a0 50 5f 49 6e 73 65 72 74 49 6e 74 20 29 3b 0a 20  P_InsertInt );. 
249b0 20 20 20 78 2e 6e 4b 65 79 20 3d 20 70 4f 70 2d     x.nKey = pOp-
249c0 3e 70 33 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  >p3;.  }..  if( 
249d0 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
249e0 54 41 42 4c 45 20 26 26 20 48 41 53 5f 55 50 44  TABLE && HAS_UPD
249f0 41 54 45 5f 48 4f 4f 4b 28 64 62 29 20 29 7b 0a  ATE_HOOK(db) ){.
24a00 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
24a10 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 61  isTable );.    a
24a20 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d  ssert( pC->iDb>=
24a30 30 20 29 3b 0a 20 20 20 20 7a 44 62 20 3d 20 64  0 );.    zDb = d
24a40 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e  b->aDb[pC->iDb].
24a50 7a 4e 61 6d 65 3b 0a 20 20 20 20 70 54 61 62 20  zName;.    pTab 
24a60 3d 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62 3b 0a  = pOp->p4.pTab;.
24a70 20 20 20 20 61 73 73 65 72 74 28 20 48 61 73 52      assert( HasR
24a80 6f 77 69 64 28 70 54 61 62 29 20 29 3b 0a 20 20  owid(pTab) );.  
24a90 20 20 6f 70 20 3d 20 28 28 70 4f 70 2d 3e 70 35    op = ((pOp->p5
24aa0 20 26 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41   & OPFLAG_ISUPDA
24ab0 54 45 29 20 3f 20 53 51 4c 49 54 45 5f 55 50 44  TE) ? SQLITE_UPD
24ac0 41 54 45 20 3a 20 53 51 4c 49 54 45 5f 49 4e 53  ATE : SQLITE_INS
24ad0 45 52 54 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  ERT);.  }else{. 
24ae0 20 20 20 70 54 61 62 20 3d 20 30 3b 20 2f 2a 20     pTab = 0; /* 
24af0 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 53 69 6c  Not needed.  Sil
24b00 65 6e 63 65 20 61 20 63 6f 6d 69 6c 65 72 20 77  ence a comiler w
24b10 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 7a  arning. */.    z
24b20 44 62 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20  Db = 0;  /* Not 
24b30 6e 65 65 64 65 64 2e 20 20 53 69 6c 65 6e 63 65  needed.  Silence
24b40 20 61 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e   a compiler warn
24b50 69 6e 67 2e 20 2a 2f 0a 20 20 7d 0a 0a 23 69 66  ing. */.  }..#if
24b60 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
24b70 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b  E_PREUPDATE_HOOK
24b80 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65  .  /* Invoke the
24b90 20 70 72 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b   pre-update hook
24ba0 2c 20 69 66 20 61 6e 79 20 2a 2f 0a 20 20 69 66  , if any */.  if
24bb0 28 20 64 62 2d 3e 78 50 72 65 55 70 64 61 74 65  ( db->xPreUpdate
24bc0 43 61 6c 6c 62 61 63 6b 20 0a 20 20 20 26 26 20  Callback .   && 
24bd0 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
24be0 54 41 42 4c 45 0a 20 20 20 26 26 20 21 28 70 4f  TABLE.   && !(pO
24bf0 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49  p->p5 & OPFLAG_I
24c00 53 55 50 44 41 54 45 29 0a 20 20 29 7b 0a 20 20  SUPDATE).  ){.  
24c10 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 65    sqlite3VdbePre
24c20 55 70 64 61 74 65 48 6f 6f 6b 28 70 2c 20 70 43  UpdateHook(p, pC
24c30 2c 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 2c  , SQLITE_INSERT,
24c40 20 7a 44 62 2c 20 70 54 61 62 2c 20 78 2e 6e 4b   zDb, pTab, x.nK
24c50 65 79 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20  ey, pOp->p2);.  
24c60 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66 28 20  }.#endif..  if( 
24c70 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
24c80 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43  _NCHANGE ) p->nC
24c90 68 61 6e 67 65 2b 2b 3b 0a 20 20 69 66 28 20 70  hange++;.  if( p
24ca0 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
24cb0 4c 41 53 54 52 4f 57 49 44 20 29 20 64 62 2d 3e  LASTROWID ) db->
24cc0 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74  lastRowid = last
24cd0 52 6f 77 69 64 20 3d 20 78 2e 6e 4b 65 79 3b 0a  Rowid = x.nKey;.
24ce0 20 20 69 66 28 20 70 44 61 74 61 2d 3e 66 6c 61    if( pData->fla
24cf0 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs & MEM_Null ){
24d00 0a 20 20 20 20 78 2e 70 44 61 74 61 20 3d 20 30  .    x.pData = 0
24d10 3b 0a 20 20 20 20 78 2e 6e 44 61 74 61 20 3d 20  ;.    x.nData = 
24d20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  0;.  }else{.    
24d30 61 73 73 65 72 74 28 20 70 44 61 74 61 2d 3e 66  assert( pData->f
24d40 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62  lags & (MEM_Blob
24d50 7c 4d 45 4d 5f 53 74 72 29 20 29 3b 0a 20 20 20  |MEM_Str) );.   
24d60 20 78 2e 70 44 61 74 61 20 3d 20 70 44 61 74 61   x.pData = pData
24d70 2d 3e 7a 3b 0a 20 20 20 20 78 2e 6e 44 61 74 61  ->z;.    x.nData
24d80 20 3d 20 70 44 61 74 61 2d 3e 6e 3b 0a 20 20 7d   = pData->n;.  }
24d90 0a 20 20 73 65 65 6b 52 65 73 75 6c 74 20 3d 20  .  seekResult = 
24da0 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ((pOp->p5 & OPFL
24db0 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54  AG_USESEEKRESULT
24dc0 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73 75  ) ? pC->seekResu
24dd0 6c 74 20 3a 20 30 29 3b 0a 20 20 69 66 28 20 70  lt : 0);.  if( p
24de0 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45  Data->flags & ME
24df0 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 78 2e  M_Zero ){.    x.
24e00 6e 5a 65 72 6f 20 3d 20 70 44 61 74 61 2d 3e 75  nZero = pData->u
24e10 2e 6e 5a 65 72 6f 3b 0a 20 20 7d 65 6c 73 65 7b  .nZero;.  }else{
24e20 0a 20 20 20 20 78 2e 6e 5a 65 72 6f 20 3d 20 30  .    x.nZero = 0
24e30 3b 0a 20 20 7d 0a 20 20 78 2e 70 4b 65 79 20 3d  ;.  }.  x.pKey =
24e40 20 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   0;.  rc = sqlit
24e50 65 33 42 74 72 65 65 49 6e 73 65 72 74 28 70 43  e3BtreeInsert(pC
24e60 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 78  ->uc.pCursor, &x
24e70 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
24e80 20 20 20 20 20 20 20 20 20 20 20 20 28 70 4f 70              (pOp
24e90 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 41 50  ->p5 & OPFLAG_AP
24ea0 50 45 4e 44 29 21 3d 30 2c 20 73 65 65 6b 52 65  PEND)!=0, seekRe
24eb0 73 75 6c 74 0a 20 20 29 3b 0a 20 20 70 43 2d 3e  sult.  );.  pC->
24ec0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
24ed0 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   0;.  pC->cacheS
24ee0 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
24ef0 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b  ALE;..  /* Invok
24f00 65 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f  e the update-hoo
24f10 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a  k if required. *
24f20 2f 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  /.  if( rc ) got
24f30 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
24f40 72 72 6f 72 3b 0a 20 20 69 66 28 20 64 62 2d 3e  rror;.  if( db->
24f50 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20  xUpdateCallback 
24f60 26 26 20 6f 70 20 29 7b 0a 20 20 20 20 64 62 2d  && op ){.    db-
24f70 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  >xUpdateCallback
24f80 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c  (db->pUpdateArg,
24f90 20 6f 70 2c 20 7a 44 62 2c 20 70 54 61 62 2d 3e   op, zDb, pTab->
24fa0 7a 4e 61 6d 65 2c 20 78 2e 6e 4b 65 79 29 3b 0a  zName, x.nKey);.
24fb0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
24fc0 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 6c 65 74  /* Opcode: Delet
24fd0 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
24fe0 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 74 68  .**.** Delete th
24ff0 65 20 72 65 63 6f 72 64 20 61 74 20 77 68 69 63  e record at whic
25000 68 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20  h the P1 cursor 
25010 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
25020 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  nting..**.** If 
25030 74 68 65 20 4f 50 46 4c 41 47 5f 53 41 56 45 50  the OPFLAG_SAVEP
25040 4f 53 49 54 49 4f 4e 20 62 69 74 20 6f 66 20 74  OSITION bit of t
25050 68 65 20 50 35 20 70 61 72 61 6d 65 74 65 72 20  he P5 parameter 
25060 69 73 20 73 65 74 2c 20 74 68 65 6e 0a 2a 2a 20  is set, then.** 
25070 74 68 65 20 63 75 72 73 6f 72 20 77 69 6c 6c 20  the cursor will 
25080 62 65 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67  be left pointing
25090 20 61 74 20 20 65 69 74 68 65 72 20 74 68 65 20   at  either the 
250a0 6e 65 78 74 20 6f 72 20 74 68 65 20 70 72 65 76  next or the prev
250b0 69 6f 75 73 0a 2a 2a 20 72 65 63 6f 72 64 20 69  ious.** record i
250c0 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 49 66 20  n the table. If 
250d0 69 74 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74  it is left point
250e0 69 6e 67 20 61 74 20 74 68 65 20 6e 65 78 74 20  ing at the next 
250f0 72 65 63 6f 72 64 2c 20 74 68 65 6e 0a 2a 2a 20  record, then.** 
25100 74 68 65 20 6e 65 78 74 20 4e 65 78 74 20 69 6e  the next Next in
25110 73 74 72 75 63 74 69 6f 6e 20 77 69 6c 6c 20 62  struction will b
25120 65 20 61 20 6e 6f 2d 6f 70 2e 20 41 73 20 61 20  e a no-op. As a 
25130 72 65 73 75 6c 74 2c 20 69 6e 20 74 68 69 73 20  result, in this 
25140 63 61 73 65 0a 2a 2a 20 69 74 20 69 73 20 6f 6b  case.** it is ok
25150 20 74 6f 20 64 65 6c 65 74 65 20 61 20 72 65 63   to delete a rec
25160 6f 72 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20  ord from within 
25170 61 20 4e 65 78 74 20 6c 6f 6f 70 2e 20 49 66 20  a Next loop. If 
25180 0a 2a 2a 20 4f 50 46 4c 41 47 5f 53 41 56 45 50  .** OPFLAG_SAVEP
25190 4f 53 49 54 49 4f 4e 20 62 69 74 20 6f 66 20 50  OSITION bit of P
251a0 35 20 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e  5 is clear, then
251b0 20 74 68 65 20 63 75 72 73 6f 72 20 77 69 6c 6c   the cursor will
251c0 20 62 65 0a 2a 2a 20 6c 65 66 74 20 69 6e 20 61   be.** left in a
251d0 6e 20 75 6e 64 65 66 69 6e 65 64 20 73 74 61 74  n undefined stat
251e0 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  e..**.** If the 
251f0 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45  OPFLAG_AUXDELETE
25200 20 62 69 74 20 69 73 20 73 65 74 20 6f 6e 20 50   bit is set on P
25210 35 2c 20 74 68 61 74 20 69 6e 64 69 63 61 74 65  5, that indicate
25220 73 20 74 68 61 74 20 74 68 69 73 0a 2a 2a 20 64  s that this.** d
25230 65 6c 65 74 65 20 6f 6e 65 20 6f 66 20 73 65 76  elete one of sev
25240 65 72 61 6c 20 61 73 73 6f 63 69 61 74 65 64 20  eral associated 
25250 77 69 74 68 20 64 65 6c 65 74 69 6e 67 20 61 20  with deleting a 
25260 74 61 62 6c 65 20 72 6f 77 20 61 6e 64 20 61 6c  table row and al
25270 6c 20 69 74 73 0a 2a 2a 20 61 73 73 6f 63 69 61  l its.** associa
25280 74 65 64 20 69 6e 64 65 78 20 65 6e 74 72 69 65  ted index entrie
25290 73 2e 20 20 45 78 61 63 74 6c 79 20 6f 6e 65 20  s.  Exactly one 
252a0 6f 66 20 74 68 6f 73 65 20 64 65 6c 65 74 65 73  of those deletes
252b0 20 69 73 20 74 68 65 20 22 70 72 69 6d 61 72 79   is the "primary
252c0 22 0a 2a 2a 20 64 65 6c 65 74 65 2e 20 20 54 68  ".** delete.  Th
252d0 65 20 6f 74 68 65 72 73 20 61 72 65 20 61 6c 6c  e others are all
252e0 20 6f 6e 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45   on OPFLAG_FORDE
252f0 4c 45 54 45 20 63 75 72 73 6f 72 73 20 6f 72 20  LETE cursors or 
25300 65 6c 73 65 20 61 72 65 0a 2a 2a 20 6d 61 72 6b  else are.** mark
25310 65 64 20 77 69 74 68 20 74 68 65 20 41 55 58 44  ed with the AUXD
25320 45 4c 45 54 45 20 66 6c 61 67 2e 0a 2a 2a 0a 2a  ELETE flag..**.*
25330 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f  * If the OPFLAG_
25340 4e 43 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20  NCHANGE flag of 
25350 50 32 20 28 4e 42 3a 20 50 32 20 6e 6f 74 20 50  P2 (NB: P2 not P
25360 35 29 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  5) is set, then 
25370 74 68 65 20 72 6f 77 0a 2a 2a 20 63 68 61 6e 67  the row.** chang
25380 65 20 63 6f 75 6e 74 20 69 73 20 69 6e 63 72 65  e count is incre
25390 6d 65 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73  mented (otherwis
253a0 65 20 6e 6f 74 29 2e 0a 2a 2a 0a 2a 2a 20 50 31  e not)..**.** P1
253b0 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 70 73 65   must not be pse
253c0 75 64 6f 2d 74 61 62 6c 65 2e 20 20 49 74 20 68  udo-table.  It h
253d0 61 73 20 74 6f 20 62 65 20 61 20 72 65 61 6c 20  as to be a real 
253e0 74 61 62 6c 65 20 77 69 74 68 0a 2a 2a 20 6d 75  table with.** mu
253f0 6c 74 69 70 6c 65 20 72 6f 77 73 2e 0a 2a 2a 0a  ltiple rows..**.
25400 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20  ** If P4 is not 
25410 4e 55 4c 4c 20 74 68 65 6e 20 69 74 20 70 6f 69  NULL then it poi
25420 6e 74 73 20 74 6f 20 61 20 54 61 62 6c 65 20 73  nts to a Table s
25430 74 72 75 74 75 72 65 2e 20 49 6e 20 74 68 69 73  truture. In this
25440 20 63 61 73 65 20 65 69 74 68 65 72 20 0a 2a 2a   case either .**
25450 20 74 68 65 20 75 70 64 61 74 65 20 6f 72 20 70   the update or p
25460 72 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b 2c 20  re-update hook, 
25470 6f 72 20 62 6f 74 68 2c 20 6d 61 79 20 62 65 20  or both, may be 
25480 69 6e 76 6f 6b 65 64 2e 20 54 68 65 20 50 31 20  invoked. The P1 
25490 63 75 72 73 6f 72 20 6d 75 73 74 0a 2a 2a 20 68  cursor must.** h
254a0 61 76 65 20 62 65 65 6e 20 70 6f 73 69 74 69 6f  ave been positio
254b0 6e 65 64 20 75 73 69 6e 67 20 4f 50 5f 4e 6f 74  ned using OP_Not
254c0 46 6f 75 6e 64 20 70 72 69 6f 72 20 74 6f 20 69  Found prior to i
254d0 6e 76 6f 6b 69 6e 67 20 74 68 69 73 20 6f 70 63  nvoking this opc
254e0 6f 64 65 20 69 6e 20 0a 2a 2a 20 74 68 69 73 20  ode in .** this 
254f0 63 61 73 65 2e 20 53 70 65 63 69 66 69 63 61 6c  case. Specifical
25500 6c 79 2c 20 69 66 20 6f 6e 65 20 69 73 20 63 6f  ly, if one is co
25510 6e 66 69 67 75 72 65 64 2c 20 74 68 65 20 70 72  nfigured, the pr
25520 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b 20 69 73  e-update hook is
25530 20 0a 2a 2a 20 69 6e 76 6f 6b 65 64 20 69 66 20   .** invoked if 
25540 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20  P4 is not NULL. 
25550 54 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20  The update-hook 
25560 69 73 20 69 6e 76 6f 6b 65 64 20 69 66 20 6f 6e  is invoked if on
25570 65 20 69 73 20 63 6f 6e 66 69 67 75 72 65 64 2c  e is configured,
25580 20 0a 2a 2a 20 50 34 20 69 73 20 6e 6f 74 20 4e   .** P4 is not N
25590 55 4c 4c 2c 20 61 6e 64 20 74 68 65 20 4f 50 46  ULL, and the OPF
255a0 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67  LAG_NCHANGE flag
255b0 20 69 73 20 73 65 74 20 69 6e 20 50 32 2e 0a 2a   is set in P2..*
255c0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c  *.** If the OPFL
255d0 41 47 5f 49 53 55 50 44 41 54 45 20 66 6c 61 67  AG_ISUPDATE flag
255e0 20 69 73 20 73 65 74 20 69 6e 20 50 32 2c 20 74   is set in P2, t
255f0 68 65 6e 20 50 33 20 63 6f 6e 74 61 69 6e 73 20  hen P3 contains 
25600 74 68 65 20 61 64 64 72 65 73 73 0a 2a 2a 20 6f  the address.** o
25610 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c  f the memory cel
25620 6c 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  l that contains 
25630 74 68 65 20 76 61 6c 75 65 20 74 68 61 74 20 74  the value that t
25640 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20  he rowid of the 
25650 72 6f 77 20 77 69 6c 6c 0a 2a 2a 20 62 65 20 73  row will.** be s
25660 65 74 20 74 6f 20 62 79 20 74 68 65 20 75 70 64  et to by the upd
25670 61 74 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ate..*/.case OP_
25680 44 65 6c 65 74 65 3a 20 7b 0a 20 20 56 64 62 65  Delete: {.  Vdbe
25690 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 63 6f  Cursor *pC;.  co
256a0 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 0a 20  nst char *zDb;. 
256b0 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20   Table *pTab;.  
256c0 69 6e 74 20 6f 70 66 6c 61 67 73 3b 0a 0a 20 20  int opflags;..  
256d0 6f 70 66 6c 61 67 73 20 3d 20 70 4f 70 2d 3e 70  opflags = pOp->p
256e0 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  2;.  assert( pOp
256f0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
25700 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
25710 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
25720 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
25730 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
25740 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
25750 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
25760 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28  REE );.  assert(
25770 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21   pC->uc.pCursor!
25780 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
25790 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
257a0 74 6f 3d 3d 30 20 29 3b 0a 0a 23 69 66 64 65 66  to==0 );..#ifdef
257b0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
257c0 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  if( pOp->p4type=
257d0 3d 50 34 5f 54 41 42 4c 45 20 26 26 20 48 61 73  =P4_TABLE && Has
257e0 52 6f 77 69 64 28 70 4f 70 2d 3e 70 34 2e 70 54  Rowid(pOp->p4.pT
257f0 61 62 29 20 26 26 20 70 4f 70 2d 3e 70 35 3d 3d  ab) && pOp->p5==
25800 30 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 70  0 ){.    /* If p
25810 35 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 20 73  5 is zero, the s
25820 65 65 6b 20 6f 70 65 72 61 74 69 6f 6e 20 74 68  eek operation th
25830 61 74 20 70 6f 73 69 74 69 6f 6e 65 64 20 74 68  at positioned th
25840 65 20 63 75 72 73 6f 72 20 70 72 69 6f 72 20 74  e cursor prior t
25850 6f 0a 20 20 20 20 2a 2a 20 4f 50 5f 44 65 6c 65  o.    ** OP_Dele
25860 74 65 20 77 69 6c 6c 20 68 61 76 65 20 61 6c 73  te will have als
25870 6f 20 73 65 74 20 74 68 65 20 70 43 2d 3e 6d 6f  o set the pC->mo
25880 76 65 74 6f 54 61 72 67 65 74 20 66 69 65 6c 64  vetoTarget field
25890 20 74 6f 20 74 68 65 20 72 6f 77 69 64 20 6f 66   to the rowid of
258a0 0a 20 20 20 20 2a 2a 20 74 68 65 20 72 6f 77 20  .    ** the row 
258b0 74 68 61 74 20 69 73 20 62 65 69 6e 67 20 64 65  that is being de
258c0 6c 65 74 65 64 20 2a 2f 0a 20 20 20 20 69 36 34  leted */.    i64
258d0 20 69 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 42   iKey = sqlite3B
258e0 74 72 65 65 49 6e 74 65 67 65 72 4b 65 79 28 70  treeIntegerKey(p
258f0 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a  C->uc.pCursor);.
25900 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
25910 6d 6f 76 65 74 6f 54 61 72 67 65 74 3d 3d 69 4b  movetoTarget==iK
25920 65 79 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  ey );.  }.#endif
25930 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 75 70  ..  /* If the up
25940 64 61 74 65 2d 68 6f 6f 6b 20 6f 72 20 70 72 65  date-hook or pre
25950 2d 75 70 64 61 74 65 2d 68 6f 6f 6b 20 77 69 6c  -update-hook wil
25960 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20 73 65  l be invoked, se
25970 74 20 7a 44 62 20 74 6f 0a 20 20 2a 2a 20 74 68  t zDb to.  ** th
25980 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 62  e name of the db
25990 20 74 6f 20 70 61 73 73 20 61 73 20 74 6f 20 69   to pass as to i
259a0 74 2e 20 41 6c 73 6f 20 73 65 74 20 6c 6f 63 61  t. Also set loca
259b0 6c 20 70 54 61 62 20 74 6f 20 61 20 63 6f 70 79  l pTab to a copy
259c0 0a 20 20 2a 2a 20 6f 66 20 70 34 2e 70 54 61 62  .  ** of p4.pTab
259d0 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66 20 70 35  . Finally, if p5
259e0 20 69 73 20 74 72 75 65 2c 20 69 6e 64 69 63 61   is true, indica
259f0 74 69 6e 67 20 74 68 61 74 20 74 68 69 73 20 63  ting that this c
25a00 75 72 73 6f 72 20 77 61 73 0a 20 20 2a 2a 20 6c  ursor was.  ** l
25a10 61 73 74 20 6d 6f 76 65 64 20 77 69 74 68 20 4f  ast moved with O
25a20 50 5f 4e 65 78 74 20 6f 72 20 4f 50 5f 50 72 65  P_Next or OP_Pre
25a30 76 2c 20 6e 6f 74 20 53 65 65 6b 20 6f 72 20 4e  v, not Seek or N
25a40 6f 74 46 6f 75 6e 64 2c 20 73 65 74 20 0a 20 20  otFound, set .  
25a50 2a 2a 20 56 64 62 65 43 75 72 73 6f 72 2e 6d 6f  ** VdbeCursor.mo
25a60 76 65 74 6f 54 61 72 67 65 74 20 74 6f 20 74 68  vetoTarget to th
25a70 65 20 63 75 72 72 65 6e 74 20 72 6f 77 69 64 2e  e current rowid.
25a80 20 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e    */.  if( pOp->
25a90 70 34 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45  p4type==P4_TABLE
25aa0 20 26 26 20 48 41 53 5f 55 50 44 41 54 45 5f 48   && HAS_UPDATE_H
25ab0 4f 4f 4b 28 64 62 29 20 29 7b 0a 20 20 20 20 61  OOK(db) ){.    a
25ac0 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d  ssert( pC->iDb>=
25ad0 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  0 );.    assert(
25ae0 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62 21 3d 30   pOp->p4.pTab!=0
25af0 20 29 3b 0a 20 20 20 20 7a 44 62 20 3d 20 64 62   );.    zDb = db
25b00 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a  ->aDb[pC->iDb].z
25b10 4e 61 6d 65 3b 0a 20 20 20 20 70 54 61 62 20 3d  Name;.    pTab =
25b20 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62 3b 0a 20   pOp->p4.pTab;. 
25b30 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 70 35 20     if( (pOp->p5 
25b40 26 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53  & OPFLAG_SAVEPOS
25b50 49 54 49 4f 4e 29 21 3d 30 20 26 26 20 70 43 2d  ITION)!=0 && pC-
25b60 3e 69 73 54 61 62 6c 65 20 29 7b 0a 20 20 20 20  >isTable ){.    
25b70 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67    pC->movetoTarg
25b80 65 74 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  et = sqlite3Btre
25b90 65 49 6e 74 65 67 65 72 4b 65 79 28 70 43 2d 3e  eIntegerKey(pC->
25ba0 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20  uc.pCursor);.   
25bb0 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
25bc0 7a 44 62 20 3d 20 30 3b 20 20 20 2f 2a 20 4e 6f  zDb = 0;   /* No
25bd0 74 20 6e 65 65 64 65 64 2e 20 20 53 69 6c 65 6e  t needed.  Silen
25be0 63 65 20 61 20 63 6f 6d 70 69 6c 65 72 20 77 61  ce a compiler wa
25bf0 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 70 54  rning. */.    pT
25c00 61 62 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20  ab = 0;  /* Not 
25c10 6e 65 65 64 65 64 2e 20 20 53 69 6c 65 6e 63 65  needed.  Silence
25c20 20 61 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e   a compiler warn
25c30 69 6e 67 2e 20 2a 2f 0a 20 20 7d 0a 0a 23 69 66  ing. */.  }..#if
25c40 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
25c50 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b  E_PREUPDATE_HOOK
25c60 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65  .  /* Invoke the
25c70 20 70 72 65 2d 75 70 64 61 74 65 2d 68 6f 6f 6b   pre-update-hook
25c80 20 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f   if required. */
25c90 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72 65 55  .  if( db->xPreU
25ca0 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26  pdateCallback &&
25cb0 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62 20 26 26   pOp->p4.pTab &&
25cc0 20 48 61 73 52 6f 77 69 64 28 70 54 61 62 29 20   HasRowid(pTab) 
25cd0 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 21  ){.    assert( !
25ce0 28 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 41  (opflags & OPFLA
25cf0 47 5f 49 53 55 50 44 41 54 45 29 20 7c 7c 20 28  G_ISUPDATE) || (
25d00 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 66 6c  aMem[pOp->p3].fl
25d10 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 20 29  ags & MEM_Int) )
25d20 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
25d30 65 50 72 65 55 70 64 61 74 65 48 6f 6f 6b 28 70  ePreUpdateHook(p
25d40 2c 20 70 43 2c 0a 20 20 20 20 20 20 20 20 28 6f  , pC,.        (o
25d50 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 41 47 5f  pflags & OPFLAG_
25d60 49 53 55 50 44 41 54 45 29 20 3f 20 53 51 4c 49  ISUPDATE) ? SQLI
25d70 54 45 5f 55 50 44 41 54 45 20 3a 20 53 51 4c 49  TE_UPDATE : SQLI
25d80 54 45 5f 44 45 4c 45 54 45 2c 20 0a 20 20 20 20  TE_DELETE, .    
25d90 20 20 20 20 7a 44 62 2c 20 70 54 61 62 2c 20 70      zDb, pTab, p
25da0 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 2c  C->movetoTarget,
25db0 0a 20 20 20 20 20 20 20 20 70 4f 70 2d 3e 70 33  .        pOp->p3
25dc0 0a 20 20 20 20 29 3b 0a 20 20 7d 0a 20 20 69 66  .    );.  }.  if
25dd0 28 20 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c  ( opflags & OPFL
25de0 41 47 5f 49 53 4e 4f 4f 50 20 29 20 62 72 65 61  AG_ISNOOP ) brea
25df0 6b 3b 0a 23 65 6e 64 69 66 0a 20 0a 20 20 2f 2a  k;.#endif. .  /*
25e00 20 4f 6e 6c 79 20 66 6c 61 67 73 20 74 68 61 74   Only flags that
25e10 20 63 61 6e 20 62 65 20 73 65 74 20 61 72 65 20   can be set are 
25e20 53 41 56 45 50 4f 49 53 54 49 4f 4e 20 61 6e 64  SAVEPOISTION and
25e30 20 41 55 58 44 45 4c 45 54 45 20 2a 2f 20 0a 20   AUXDELETE */ . 
25e40 20 61 73 73 65 72 74 28 20 28 70 4f 70 2d 3e 70   assert( (pOp->p
25e50 35 20 26 20 7e 28 4f 50 46 4c 41 47 5f 53 41 56  5 & ~(OPFLAG_SAV
25e60 45 50 4f 53 49 54 49 4f 4e 7c 4f 50 46 4c 41 47  EPOSITION|OPFLAG
25e70 5f 41 55 58 44 45 4c 45 54 45 29 29 3d 3d 30 20  _AUXDELETE))==0 
25e80 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 46  );.  assert( OPF
25e90 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e  LAG_SAVEPOSITION
25ea0 3d 3d 42 54 52 45 45 5f 53 41 56 45 50 4f 53 49  ==BTREE_SAVEPOSI
25eb0 54 49 4f 4e 20 29 3b 0a 20 20 61 73 73 65 72 74  TION );.  assert
25ec0 28 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45  ( OPFLAG_AUXDELE
25ed0 54 45 3d 3d 42 54 52 45 45 5f 41 55 58 44 45 4c  TE==BTREE_AUXDEL
25ee0 45 54 45 20 29 3b 0a 0a 23 69 66 64 65 66 20 53  ETE );..#ifdef S
25ef0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66  QLITE_DEBUG.  if
25f00 28 20 70 2d 3e 70 46 72 61 6d 65 3d 3d 30 20 29  ( p->pFrame==0 )
25f10 7b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 69 73  {.    if( pC->is
25f20 45 70 68 65 6d 65 72 61 6c 3d 3d 30 0a 20 20 20  Ephemeral==0.   
25f30 20 20 20 20 20 26 26 20 28 70 4f 70 2d 3e 70 35       && (pOp->p5
25f40 20 26 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c   & OPFLAG_AUXDEL
25f50 45 54 45 29 3d 3d 30 0a 20 20 20 20 20 20 20 20  ETE)==0.        
25f60 26 26 20 28 70 43 2d 3e 77 72 46 6c 61 67 20 26  && (pC->wrFlag &
25f70 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54   OPFLAG_FORDELET
25f80 45 29 3d 3d 30 0a 20 20 20 20 20 20 29 7b 0a 20  E)==0.      ){. 
25f90 20 20 20 20 20 6e 45 78 74 72 61 44 65 6c 65 74       nExtraDelet
25fa0 65 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  e++;.    }.    i
25fb0 66 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50 46  f( pOp->p2 & OPF
25fc0 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 7b 0a 20  LAG_NCHANGE ){. 
25fd0 20 20 20 20 20 6e 45 78 74 72 61 44 65 6c 65 74       nExtraDelet
25fe0 65 2d 2d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23  e--;.    }.  }.#
25ff0 65 6e 64 69 66 0a 0a 20 20 72 63 20 3d 20 73 71  endif..  rc = sq
26000 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65 74 65  lite3BtreeDelete
26010 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  (pC->uc.pCursor,
26020 20 70 4f 70 2d 3e 70 35 29 3b 0a 20 20 70 43 2d   pOp->p5);.  pC-
26030 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
26040 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66  ACHE_STALE;.  if
26050 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
26060 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
26070 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65  .  /* Invoke the
26080 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20   update-hook if 
26090 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69  required. */.  i
260a0 66 28 20 6f 70 66 6c 61 67 73 20 26 20 4f 50 46  f( opflags & OPF
260b0 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 7b 0a 20  LAG_NCHANGE ){. 
260c0 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b     p->nChange++;
260d0 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 78 55 70  .    if( db->xUp
260e0 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20  dateCallback && 
260f0 48 61 73 52 6f 77 69 64 28 70 54 61 62 29 20 29  HasRowid(pTab) )
26100 7b 0a 20 20 20 20 20 20 64 62 2d 3e 78 55 70 64  {.      db->xUpd
26110 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e  ateCallback(db->
26120 70 55 70 64 61 74 65 41 72 67 2c 20 53 51 4c 49  pUpdateArg, SQLI
26130 54 45 5f 44 45 4c 45 54 45 2c 20 7a 44 62 2c 20  TE_DELETE, zDb, 
26140 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20  pTab->zName,.   
26150 20 20 20 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74         pC->movet
26160 6f 54 61 72 67 65 74 29 3b 0a 20 20 20 20 20 20  oTarget);.      
26170 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e  assert( pC->iDb>
26180 3d 30 20 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  =0 );.    }.  }.
26190 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 2f 2a 20 4f  .  break;.}./* O
261a0 70 63 6f 64 65 3a 20 52 65 73 65 74 43 6f 75 6e  pcode: ResetCoun
261b0 74 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  t * * * * *.**.*
261c0 2a 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20 74  * The value of t
261d0 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65  he change counte
261e0 72 20 69 73 20 63 6f 70 69 65 64 20 74 6f 20 74  r is copied to t
261f0 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  he database hand
26200 6c 65 0a 2a 2a 20 63 68 61 6e 67 65 20 63 6f 75  le.** change cou
26210 6e 74 65 72 20 28 72 65 74 75 72 6e 65 64 20 62  nter (returned b
26220 79 20 73 75 62 73 65 71 75 65 6e 74 20 63 61 6c  y subsequent cal
26230 6c 73 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 68  ls to sqlite3_ch
26240 61 6e 67 65 73 28 29 29 2e 0a 2a 2a 20 54 68 65  anges())..** The
26250 6e 20 74 68 65 20 56 4d 73 20 69 6e 74 65 72 6e  n the VMs intern
26260 61 6c 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65  al change counte
26270 72 20 72 65 73 65 74 73 20 74 6f 20 30 2e 0a 2a  r resets to 0..*
26280 2a 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62  * This is used b
26290 79 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  y trigger progra
262a0 6d 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  ms..*/.case OP_R
262b0 65 73 65 74 43 6f 75 6e 74 3a 20 7b 0a 20 20 73  esetCount: {.  s
262c0 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 68 61  qlite3VdbeSetCha
262d0 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61  nges(db, p->nCha
262e0 6e 67 65 29 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e  nge);.  p->nChan
262f0 67 65 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b  ge = 0;.  break;
26300 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
26310 6f 72 74 65 72 43 6f 6d 70 61 72 65 20 50 31 20  orterCompare P1 
26320 50 32 20 50 33 20 50 34 0a 2a 2a 20 53 79 6e 6f  P2 P3 P4.** Syno
26330 70 73 69 73 3a 20 20 69 66 20 6b 65 79 28 50 31  psis:  if key(P1
26340 29 21 3d 74 72 69 6d 28 72 5b 50 33 5d 2c 50 34  )!=trim(r[P3],P4
26350 29 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  ) goto P2.**.** 
26360 50 31 20 69 73 20 61 20 73 6f 72 74 65 72 20 63  P1 is a sorter c
26370 75 72 73 6f 72 2e 20 54 68 69 73 20 69 6e 73 74  ursor. This inst
26380 72 75 63 74 69 6f 6e 20 63 6f 6d 70 61 72 65 73  ruction compares
26390 20 61 20 70 72 65 66 69 78 20 6f 66 20 74 68 65   a prefix of the
263a0 0a 2a 2a 20 72 65 63 6f 72 64 20 62 6c 6f 62 20  .** record blob 
263b0 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61  in register P3 a
263c0 67 61 69 6e 73 74 20 61 20 70 72 65 66 69 78 20  gainst a prefix 
263d0 6f 66 20 74 68 65 20 65 6e 74 72 79 20 74 68 61  of the entry tha
263e0 74 20 0a 2a 2a 20 74 68 65 20 73 6f 72 74 65 72  t .** the sorter
263f0 20 63 75 72 73 6f 72 20 63 75 72 72 65 6e 74 6c   cursor currentl
26400 79 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20 4f 6e  y points to.  On
26410 6c 79 20 74 68 65 20 66 69 72 73 74 20 50 34 20  ly the first P4 
26420 66 69 65 6c 64 73 0a 2a 2a 20 6f 66 20 72 5b 50  fields.** of r[P
26430 33 5d 20 61 6e 64 20 74 68 65 20 73 6f 72 74 65  3] and the sorte
26440 72 20 72 65 63 6f 72 64 20 61 72 65 20 63 6f 6d  r record are com
26450 70 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  pared..**.** If 
26460 65 69 74 68 65 72 20 50 33 20 6f 72 20 74 68 65  either P3 or the
26470 20 73 6f 72 74 65 72 20 63 6f 6e 74 61 69 6e 73   sorter contains
26480 20 61 20 4e 55 4c 4c 20 69 6e 20 6f 6e 65 20 6f   a NULL in one o
26490 66 20 74 68 65 69 72 20 73 69 67 6e 69 66 69 63  f their signific
264a0 61 6e 74 0a 2a 2a 20 66 69 65 6c 64 73 20 28 6e  ant.** fields (n
264b0 6f 74 20 63 6f 75 6e 74 69 6e 67 20 74 68 65 20  ot counting the 
264c0 50 34 20 66 69 65 6c 64 73 20 61 74 20 74 68 65  P4 fields at the
264d0 20 65 6e 64 20 77 68 69 63 68 20 61 72 65 20 69   end which are i
264e0 67 6e 6f 72 65 64 29 20 74 68 65 6e 0a 2a 2a 20  gnored) then.** 
264f0 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69  the comparison i
26500 73 20 61 73 73 75 6d 65 64 20 74 6f 20 62 65 20  s assumed to be 
26510 65 71 75 61 6c 2e 0a 2a 2a 0a 2a 2a 20 46 61 6c  equal..**.** Fal
26520 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 6e 65 78  l through to nex
26530 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 66  t instruction if
26540 20 74 68 65 20 74 77 6f 20 72 65 63 6f 72 64 73   the two records
26550 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 20 74   compare equal t
26560 6f 0a 2a 2a 20 65 61 63 68 20 6f 74 68 65 72 2e  o.** each other.
26570 20 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20    Jump to P2 if 
26580 74 68 65 79 20 61 72 65 20 64 69 66 66 65 72 65  they are differe
26590 6e 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  nt..*/.case OP_S
265a0 6f 72 74 65 72 43 6f 6d 70 61 72 65 3a 20 7b 0a  orterCompare: {.
265b0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
265c0 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69  ;.  int res;.  i
265d0 6e 74 20 6e 4b 65 79 43 6f 6c 3b 0a 0a 20 20 70  nt nKeyCol;..  p
265e0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
265f0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
26600 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b   isSorter(pC) );
26610 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
26620 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
26630 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d   );.  pIn3 = &aM
26640 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6e  em[pOp->p3];.  n
26650 4b 65 79 43 6f 6c 20 3d 20 70 4f 70 2d 3e 70 34  KeyCol = pOp->p4
26660 2e 69 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20  .i;.  res = 0;. 
26670 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
26680 65 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 28 70  eSorterCompare(p
26690 43 2c 20 70 49 6e 33 2c 20 6e 4b 65 79 43 6f 6c  C, pIn3, nKeyCol
266a0 2c 20 26 72 65 73 29 3b 0a 20 20 56 64 62 65 42  , &res);.  VdbeB
266b0 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d  ranchTaken(res!=
266c0 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 63 20 29  0,2);.  if( rc )
266d0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
266e0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28 20  to_error;.  if( 
266f0 72 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  res ) goto jump_
26700 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a  to_p2;.  break;.
26710 7d 3b 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  };../* Opcode: S
26720 6f 72 74 65 72 44 61 74 61 20 50 31 20 50 32 20  orterData P1 P2 
26730 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
26740 69 73 3a 20 72 5b 50 32 5d 3d 64 61 74 61 0a 2a  is: r[P2]=data.*
26750 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20  *.** Write into 
26760 72 65 67 69 73 74 65 72 20 50 32 20 74 68 65 20  register P2 the 
26770 63 75 72 72 65 6e 74 20 73 6f 72 74 65 72 20 64  current sorter d
26780 61 74 61 20 66 6f 72 20 73 6f 72 74 65 72 20 63  ata for sorter c
26790 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65  ursor P1..** The
267a0 6e 20 63 6c 65 61 72 20 74 68 65 20 63 6f 6c 75  n clear the colu
267b0 6d 6e 20 68 65 61 64 65 72 20 63 61 63 68 65 20  mn header cache 
267c0 6f 6e 20 63 75 72 73 6f 72 20 50 33 2e 0a 2a 2a  on cursor P3..**
267d0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
267e0 69 73 20 6e 6f 72 6d 61 6c 6c 79 20 75 73 65 20  is normally use 
267f0 74 6f 20 6d 6f 76 65 20 61 20 72 65 63 6f 72 64  to move a record
26800 20 6f 75 74 20 6f 66 20 74 68 65 20 73 6f 72 74   out of the sort
26810 65 72 20 61 6e 64 20 69 6e 74 6f 0a 2a 2a 20 61  er and into.** a
26820 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20 69   register that i
26830 73 20 74 68 65 20 73 6f 75 72 63 65 20 66 6f 72  s the source for
26840 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20   a pseudo-table 
26850 63 75 72 73 6f 72 20 63 72 65 61 74 65 64 20 75  cursor created u
26860 73 69 6e 67 0a 2a 2a 20 4f 70 65 6e 50 73 65 75  sing.** OpenPseu
26870 64 6f 2e 20 20 54 68 61 74 20 70 73 65 75 64 6f  do.  That pseudo
26880 2d 74 61 62 6c 65 20 63 75 72 73 6f 72 20 69 73  -table cursor is
26890 20 74 68 65 20 6f 6e 65 20 74 68 61 74 20 69 73   the one that is
268a0 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 0a 2a   identified by.*
268b0 2a 20 70 61 72 61 6d 65 74 65 72 20 50 33 2e 20  * parameter P3. 
268c0 20 43 6c 65 61 72 69 6e 67 20 74 68 65 20 50 33   Clearing the P3
268d0 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20 61 73   column cache as
268e0 20 70 61 72 74 20 6f 66 20 74 68 69 73 20 6f 70   part of this op
268f0 63 6f 64 65 20 73 61 76 65 73 0a 2a 2a 20 75 73  code saves.** us
26900 20 66 72 6f 6d 20 68 61 76 69 6e 67 20 74 6f 20   from having to 
26910 69 73 73 75 65 20 61 20 73 65 70 61 72 61 74 65  issue a separate
26920 20 4e 75 6c 6c 52 6f 77 20 69 6e 73 74 72 75 63   NullRow instruc
26930 74 69 6f 6e 20 74 6f 20 63 6c 65 61 72 20 74 68  tion to clear th
26940 61 74 20 63 61 63 68 65 2e 0a 2a 2f 0a 63 61 73  at cache..*/.cas
26950 65 20 4f 50 5f 53 6f 72 74 65 72 44 61 74 61 3a  e OP_SorterData:
26960 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
26970 2a 70 43 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26  *pC;..  pOut = &
26980 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
26990 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
269a0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
269b0 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20  t( isSorter(pC) 
269c0 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
269d0 33 56 64 62 65 53 6f 72 74 65 72 52 6f 77 6b 65  3VdbeSorterRowke
269e0 79 28 70 43 2c 20 70 4f 75 74 29 3b 0a 20 20 61  y(pC, pOut);.  a
269f0 73 73 65 72 74 28 20 72 63 21 3d 53 51 4c 49 54  ssert( rc!=SQLIT
26a00 45 5f 4f 4b 20 7c 7c 20 28 70 4f 75 74 2d 3e 66  E_OK || (pOut->f
26a10 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 29  lags & MEM_Blob)
26a20 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
26a30 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
26a40 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
26a50 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
26a60 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
26a70 72 72 6f 72 3b 0a 20 20 70 2d 3e 61 70 43 73 72  rror;.  p->apCsr
26a80 5b 70 4f 70 2d 3e 70 33 5d 2d 3e 63 61 63 68 65  [pOp->p3]->cache
26a90 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
26aa0 54 41 4c 45 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  TALE;.  break;.}
26ab0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77  ../* Opcode: Row
26ac0 44 61 74 61 20 50 31 20 50 32 20 2a 20 2a 20 2a  Data P1 P2 * * *
26ad0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
26ae0 50 32 5d 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57  P2]=data.**.** W
26af0 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74  rite into regist
26b00 65 72 20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65  er P2 the comple
26b10 74 65 20 72 6f 77 20 64 61 74 61 20 66 6f 72 20  te row data for 
26b20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68  cursor P1..** Th
26b30 65 72 65 20 69 73 20 6e 6f 20 69 6e 74 65 72 70  ere is no interp
26b40 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  retation of the 
26b50 64 61 74 61 2e 20 20 0a 2a 2a 20 49 74 20 69 73  data.  .** It is
26b60 20 6a 75 73 74 20 63 6f 70 69 65 64 20 6f 6e 74   just copied ont
26b70 6f 20 74 68 65 20 50 32 20 72 65 67 69 73 74 65  o the P2 registe
26b80 72 20 65 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a  r exactly as .**
26b90 20 69 74 20 69 73 20 66 6f 75 6e 64 20 69 6e 20   it is found in 
26ba0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
26bb0 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  e..**.** If the 
26bc0 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62  P1 cursor must b
26bd0 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20  e pointing to a 
26be0 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61  valid row (not a
26bf0 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66   NULL row).** of
26c00 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e   a real table, n
26c10 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  ot a pseudo-tabl
26c20 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  e..*/./* Opcode:
26c30 20 52 6f 77 4b 65 79 20 50 31 20 50 32 20 2a 20   RowKey P1 P2 * 
26c40 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
26c50 20 72 5b 50 32 5d 3d 6b 65 79 0a 2a 2a 0a 2a 2a   r[P2]=key.**.**
26c60 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69   Write into regi
26c70 73 74 65 72 20 50 32 20 74 68 65 20 63 6f 6d 70  ster P2 the comp
26c80 6c 65 74 65 20 72 6f 77 20 6b 65 79 20 66 6f 72  lete row key for
26c90 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54   cursor P1..** T
26ca0 68 65 72 65 20 69 73 20 6e 6f 20 69 6e 74 65 72  here is no inter
26cb0 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  pretation of the
26cc0 20 64 61 74 61 2e 20 20 0a 2a 2a 20 54 68 65 20   data.  .** The 
26cd0 6b 65 79 20 69 73 20 63 6f 70 69 65 64 20 6f 6e  key is copied on
26ce0 74 6f 20 74 68 65 20 50 32 20 72 65 67 69 73 74  to the P2 regist
26cf0 65 72 20 65 78 61 63 74 6c 79 20 61 73 20 0a 2a  er exactly as .*
26d00 2a 20 69 74 20 69 73 20 66 6f 75 6e 64 20 69 6e  * it is found in
26d10 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
26d20 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  le..**.** If the
26d30 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20   P1 cursor must 
26d40 62 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61  be pointing to a
26d50 20 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20   valid row (not 
26d60 61 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f  a NULL row).** o
26d70 66 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20  f a real table, 
26d80 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62  not a pseudo-tab
26d90 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  le..*/.case OP_R
26da0 6f 77 4b 65 79 3a 0a 63 61 73 65 20 4f 50 5f 52  owKey:.case OP_R
26db0 6f 77 44 61 74 61 3a 20 7b 0a 20 20 56 64 62 65  owData: {.  Vdbe
26dc0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74  Cursor *pC;.  Bt
26dd0 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
26de0 20 75 33 32 20 6e 3b 0a 0a 20 20 70 4f 75 74 20   u32 n;..  pOut 
26df0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
26e00 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
26e10 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 0a  ange(p, pOut);..
26e20 20 20 2f 2a 20 4e 6f 74 65 20 74 68 61 74 20 52    /* Note that R
26e30 6f 77 4b 65 79 20 61 6e 64 20 52 6f 77 44 61 74  owKey and RowDat
26e40 61 20 61 72 65 20 72 65 61 6c 6c 79 20 65 78 61  a are really exa
26e50 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20 69 6e  ctly the same in
26e60 73 74 72 75 63 74 69 6f 6e 20 2a 2f 0a 20 20 61  struction */.  a
26e70 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
26e80 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
26e90 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
26ea0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
26eb0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
26ec0 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
26ed0 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
26ee0 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
26ef0 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72  .  assert( isSor
26f00 74 65 72 28 70 43 29 3d 3d 30 20 29 3b 0a 20 20  ter(pC)==0 );.  
26f10 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
26f20 62 6c 65 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  ble || pOp->opco
26f30 64 65 21 3d 4f 50 5f 52 6f 77 44 61 74 61 20 29  de!=OP_RowData )
26f40 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
26f50 69 73 54 61 62 6c 65 3d 3d 30 20 7c 7c 20 70 4f  isTable==0 || pO
26f60 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 6f  p->opcode==OP_Ro
26f70 77 44 61 74 61 20 29 3b 0a 20 20 61 73 73 65 72  wData );.  asser
26f80 74 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d  t( pC->nullRow==
26f90 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
26fa0 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30  C->uc.pCursor!=0
26fb0 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43   );.  pCrsr = pC
26fc0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 0a 20  ->uc.pCursor;.. 
26fd0 20 2f 2a 20 54 68 65 20 4f 50 5f 52 6f 77 4b 65   /* The OP_RowKe
26fe0 79 20 61 6e 64 20 4f 50 5f 52 6f 77 44 61 74 61  y and OP_RowData
26ff0 20 6f 70 63 6f 64 65 73 20 61 6c 77 61 79 73 20   opcodes always 
27000 66 6f 6c 6c 6f 77 20 4f 50 5f 4e 6f 74 45 78 69  follow OP_NotExi
27010 73 74 73 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f 53  sts or.  ** OP_S
27020 65 65 6b 52 6f 77 69 64 20 6f 72 20 4f 50 5f 52  eekRowid or OP_R
27030 65 77 69 6e 64 2f 4f 70 5f 4e 65 78 74 20 77 69  ewind/Op_Next wi
27040 74 68 20 6e 6f 20 69 6e 74 65 72 76 65 6e 69 6e  th no intervenin
27050 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 0a 20  g instructions. 
27060 20 2a 2a 20 74 68 61 74 20 6d 69 67 68 74 20 69   ** that might i
27070 6e 76 61 6c 69 64 61 74 65 20 74 68 65 20 63 75  nvalidate the cu
27080 72 73 6f 72 2e 0a 20 20 2a 2a 20 49 66 20 74 68  rsor..  ** If th
27090 69 73 20 77 68 65 72 65 20 6e 6f 74 20 74 68 65  is where not the
270a0 20 63 61 73 65 2c 20 6f 6e 20 6f 66 20 74 68 65   case, on of the
270b0 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 73 73 65 72   following asser
270c0 74 28 29 73 0a 20 20 2a 2a 20 77 6f 75 6c 64 20  t()s.  ** would 
270d0 66 61 69 6c 2e 20 20 53 68 6f 75 6c 64 20 74 68  fail.  Should th
270e0 69 73 20 65 76 65 72 20 63 68 61 6e 67 65 20 28  is ever change (
270f0 62 65 63 61 75 73 65 20 6f 66 20 63 68 61 6e 67  because of chang
27100 65 73 20 69 6e 20 74 68 65 20 63 6f 64 65 0a 20  es in the code. 
27110 20 2a 2a 20 67 65 6e 65 72 61 74 6f 72 29 20 74   ** generator) t
27120 68 65 6e 20 74 68 65 20 66 69 78 20 77 6f 75 6c  hen the fix woul
27130 64 20 62 65 20 74 6f 20 69 6e 73 65 72 74 20 61  d be to insert a
27140 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73 71   call to.  ** sq
27150 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
27160 6f 76 65 74 6f 28 29 2e 0a 20 20 2a 2f 0a 20 20  oveto()..  */.  
27170 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65  assert( pC->defe
27180 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
27190 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74  .  assert( sqlit
271a0 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73 56  e3BtreeCursorIsV
271b0 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a 23  alid(pCrsr) );.#
271c0 69 66 20 30 20 20 2f 2a 20 4e 6f 74 20 72 65 71  if 0  /* Not req
271d0 75 69 72 65 64 20 64 75 65 20 74 6f 20 74 68 65  uired due to the
271e0 20 70 72 65 76 69 6f 75 73 20 74 6f 20 61 73 73   previous to ass
271f0 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
27200 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   */.  rc = sqlit
27210 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65  e3VdbeCursorMove
27220 74 6f 28 70 43 29 3b 0a 20 20 69 66 28 20 72 63  to(pC);.  if( rc
27230 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f  !=SQLITE_OK ) go
27240 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
27250 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66 0a 0a 20  error;.#endif.. 
27260 20 6e 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65   n = sqlite3Btre
27270 65 50 61 79 6c 6f 61 64 53 69 7a 65 28 70 43 72  ePayloadSize(pCr
27280 73 72 29 3b 0a 20 20 69 66 28 20 6e 3e 28 75 33  sr);.  if( n>(u3
27290 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  2)db->aLimit[SQL
272a0 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
272b0 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ] ){.    goto to
272c0 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 74 65 73  o_big;.  }.  tes
272d0 74 63 61 73 65 28 20 6e 3d 3d 30 20 29 3b 0a 20  tcase( n==0 );. 
272e0 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
272f0 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65 73 69 7a  MemClearAndResiz
27300 65 28 70 4f 75 74 2c 20 4d 41 58 28 6e 2c 33 32  e(pOut, MAX(n,32
27310 29 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e  )) ){.    goto n
27320 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 70 4f 75  o_mem;.  }.  pOu
27330 74 2d 3e 6e 20 3d 20 6e 3b 0a 20 20 4d 65 6d 53  t->n = n;.  MemS
27340 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
27350 20 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 69 66   MEM_Blob);.  if
27360 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30  ( pC->isTable==0
27370 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
27380 69 74 65 33 42 74 72 65 65 4b 65 79 28 70 43 72  ite3BtreeKey(pCr
27390 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e  sr, 0, n, pOut->
273a0 7a 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  z);.  }else{.   
273b0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
273c0 65 65 44 61 74 61 28 70 43 72 73 72 2c 20 30 2c  eeData(pCrsr, 0,
273d0 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20   n, pOut->z);.  
273e0 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  }.  if( rc ) got
273f0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
27400 72 72 6f 72 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e  rror;.  pOut->en
27410 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b  c = SQLITE_UTF8;
27420 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74 68 65    /* In case the
27430 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20 63 61   blob is ever ca
27440 73 74 20 74 6f 20 74 65 78 74 20 2a 2f 0a 20 20  st to text */.  
27450 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
27460 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 52 45 47  IZE(pOut);.  REG
27470 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
27480 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 62 72  >p2, pOut);.  br
27490 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
274a0 65 3a 20 52 6f 77 69 64 20 50 31 20 50 32 20 2a  e: Rowid P1 P2 *
274b0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
274c0 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a  : r[P2]=rowid.**
274d0 0a 2a 2a 20 53 74 6f 72 65 20 69 6e 20 72 65 67  .** Store in reg
274e0 69 73 74 65 72 20 50 32 20 61 6e 20 69 6e 74 65  ister P2 an inte
274f0 67 65 72 20 77 68 69 63 68 20 69 73 20 74 68 65  ger which is the
27500 20 6b 65 79 20 6f 66 20 74 68 65 20 74 61 62 6c   key of the tabl
27510 65 20 65 6e 74 72 79 20 74 68 61 74 0a 2a 2a 20  e entry that.** 
27520 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  P1 is currently 
27530 70 6f 69 6e 74 20 74 6f 2e 0a 2a 2a 0a 2a 2a 20  point to..**.** 
27540 50 31 20 63 61 6e 20 62 65 20 65 69 74 68 65 72  P1 can be either
27550 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 74 61 62   an ordinary tab
27560 6c 65 20 6f 72 20 61 20 76 69 72 74 75 61 6c 20  le or a virtual 
27570 74 61 62 6c 65 2e 20 20 54 68 65 72 65 20 75 73  table.  There us
27580 65 64 20 74 6f 0a 2a 2a 20 62 65 20 61 20 73 65  ed to.** be a se
27590 70 61 72 61 74 65 20 4f 50 5f 56 52 6f 77 69 64  parate OP_VRowid
275a0 20 6f 70 63 6f 64 65 20 66 6f 72 20 75 73 65 20   opcode for use 
275b0 77 69 74 68 20 76 69 72 74 75 61 6c 20 74 61 62  with virtual tab
275c0 6c 65 73 2c 20 62 75 74 20 74 68 69 73 0a 2a 2a  les, but this.**
275d0 20 6f 6e 65 20 6f 70 63 6f 64 65 20 6e 6f 77 20   one opcode now 
275e0 77 6f 72 6b 73 20 66 6f 72 20 62 6f 74 68 20 74  works for both t
275f0 61 62 6c 65 20 74 79 70 65 73 2e 0a 2a 2f 0a 63  able types..*/.c
27600 61 73 65 20 4f 50 5f 52 6f 77 69 64 3a 20 7b 20  ase OP_Rowid: { 
27610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27620 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 56 64 62  /* out2 */.  Vdb
27630 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69  eCursor *pC;.  i
27640 36 34 20 76 3b 0a 20 20 73 71 6c 69 74 65 33 5f  64 v;.  sqlite3_
27650 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63  vtab *pVtab;.  c
27660 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64  onst sqlite3_mod
27670 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20  ule *pModule;.. 
27680 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
27690 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
276a0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
276b0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
276c0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
276d0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
276e0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
276f0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
27700 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
27710 65 21 3d 43 55 52 54 59 50 45 5f 50 53 45 55 44  e!=CURTYPE_PSEUD
27720 4f 20 7c 7c 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  O || pC->nullRow
27730 20 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 6e 75   );.  if( pC->nu
27740 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 70 4f 75  llRow ){.    pOu
27750 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e  t->flags = MEM_N
27760 75 6c 6c 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  ull;.    break;.
27770 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e    }else if( pC->
27780 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 29  deferredMoveto )
27790 7b 0a 20 20 20 20 76 20 3d 20 70 43 2d 3e 6d 6f  {.    v = pC->mo
277a0 76 65 74 6f 54 61 72 67 65 74 3b 0a 23 69 66 6e  vetoTarget;.#ifn
277b0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
277c0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 7d  VIRTUALTABLE.  }
277d0 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 65 43 75  else if( pC->eCu
277e0 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 56  rType==CURTYPE_V
277f0 54 41 42 20 29 7b 0a 20 20 20 20 61 73 73 65 72  TAB ){.    asser
27800 74 28 20 70 43 2d 3e 75 63 2e 70 56 43 75 72 21  t( pC->uc.pVCur!
27810 3d 30 20 29 3b 0a 20 20 20 20 70 56 74 61 62 20  =0 );.    pVtab 
27820 3d 20 70 43 2d 3e 75 63 2e 70 56 43 75 72 2d 3e  = pC->uc.pVCur->
27830 70 56 74 61 62 3b 0a 20 20 20 20 70 4d 6f 64 75  pVtab;.    pModu
27840 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64  le = pVtab->pMod
27850 75 6c 65 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ule;.    assert(
27860 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64   pModule->xRowid
27870 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f   );.    rc = pMo
27880 64 75 6c 65 2d 3e 78 52 6f 77 69 64 28 70 43 2d  dule->xRowid(pC-
27890 3e 75 63 2e 70 56 43 75 72 2c 20 26 76 29 3b 0a  >uc.pVCur, &v);.
278a0 20 20 20 20 73 71 6c 69 74 65 33 56 74 61 62 49      sqlite3VtabI
278b0 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70  mportErrmsg(p, p
278c0 56 74 61 62 29 3b 0a 20 20 20 20 69 66 28 20 72  Vtab);.    if( r
278d0 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
278e0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e  ue_to_error;.#en
278f0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
27900 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
27910 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  */.  }else{.    
27920 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
27930 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
27940 52 45 45 20 29 3b 0a 20 20 20 20 61 73 73 65 72  REE );.    asser
27950 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  t( pC->uc.pCurso
27960 72 21 3d 30 20 29 3b 0a 20 20 20 20 72 63 20 3d  r!=0 );.    rc =
27970 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
27980 6f 72 52 65 73 74 6f 72 65 28 70 43 29 3b 0a 20  orRestore(pC);. 
27990 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f     if( rc ) goto
279a0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
279b0 72 6f 72 3b 0a 20 20 20 20 69 66 28 20 70 43 2d  ror;.    if( pC-
279c0 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
279d0 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
279e0 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20  MEM_Null;.      
279f0 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20  break;.    }.   
27a00 20 76 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65   v = sqlite3Btre
27a10 65 49 6e 74 65 67 65 72 4b 65 79 28 70 43 2d 3e  eIntegerKey(pC->
27a20 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d  uc.pCursor);.  }
27a30 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76  .  pOut->u.i = v
27a40 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
27a50 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f 77   Opcode: NullRow
27a60 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
27a70 2a 20 4d 6f 76 65 20 74 68 65 20 63 75 72 73 6f  * Move the curso
27a80 72 20 50 31 20 74 6f 20 61 20 6e 75 6c 6c 20 72  r P1 to a null r
27a90 6f 77 2e 20 20 41 6e 79 20 4f 50 5f 43 6f 6c 75  ow.  Any OP_Colu
27aa0 6d 6e 20 6f 70 65 72 61 74 69 6f 6e 73 0a 2a 2a  mn operations.**
27ab0 20 74 68 61 74 20 6f 63 63 75 72 20 77 68 69 6c   that occur whil
27ac0 65 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  e the cursor is 
27ad0 6f 6e 20 74 68 65 20 6e 75 6c 6c 20 72 6f 77 20  on the null row 
27ae0 77 69 6c 6c 20 61 6c 77 61 79 73 0a 2a 2a 20 77  will always.** w
27af0 72 69 74 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a  rite a NULL..*/.
27b00 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3a  case OP_NullRow:
27b10 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
27b20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  *pC;..  assert( 
27b30 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
27b40 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
27b50 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
27b60 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
27b70 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
27b80 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  .  pC->nullRow =
27b90 20 31 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   1;.  pC->cacheS
27ba0 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
27bb0 41 4c 45 3b 0a 20 20 69 66 28 20 70 43 2d 3e 65  ALE;.  if( pC->e
27bc0 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
27bd0 5f 42 54 52 45 45 20 29 7b 0a 20 20 20 20 61 73  _BTREE ){.    as
27be0 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75  sert( pC->uc.pCu
27bf0 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 73  rsor!=0 );.    s
27c00 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61 72  qlite3BtreeClear
27c10 43 75 72 73 6f 72 28 70 43 2d 3e 75 63 2e 70 43  Cursor(pC->uc.pC
27c20 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 62 72  ursor);.  }.  br
27c30 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
27c40 65 3a 20 4c 61 73 74 20 50 31 20 50 32 20 50 33  e: Last P1 P2 P3
27c50 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e   * *.**.** The n
27c60 65 78 74 20 75 73 65 20 6f 66 20 74 68 65 20 52  ext use of the R
27c70 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f  owid or Column o
27c80 72 20 50 72 65 76 20 69 6e 73 74 72 75 63 74 69  r Prev instructi
27c90 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69  on for P1 .** wi
27ca0 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65 20  ll refer to the 
27cb0 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68  last entry in th
27cc0 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
27cd0 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66   or index..** If
27ce0 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
27cf0 64 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e 64  dex is empty and
27d00 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70   P2>0, then jump
27d10 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
27d20 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20  P2..** If P2 is 
27d30 30 20 6f 72 20 69 66 20 74 68 65 20 74 61 62 6c  0 or if the tabl
27d40 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f  e or index is no
27d50 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68  t empty, fall th
27d60 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20  rough.** to the 
27d70 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75  following instru
27d80 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  ction..**.** Thi
27d90 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20  s opcode leaves 
27da0 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69  the cursor confi
27db0 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e  gured to move in
27dc0 20 72 65 76 65 72 73 65 20 6f 72 64 65 72 2c 0a   reverse order,.
27dd0 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e 64 20  ** from the end 
27de0 74 6f 77 61 72 64 20 74 68 65 20 62 65 67 69 6e  toward the begin
27df0 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72 20  ning.  In other 
27e00 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f  words, the curso
27e10 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72  r is.** configur
27e20 65 64 20 74 6f 20 75 73 65 20 50 72 65 76 2c 20  ed to use Prev, 
27e30 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2f 0a 63 61 73  not Next..*/.cas
27e40 65 20 4f 50 5f 4c 61 73 74 3a 20 7b 20 20 20 20  e OP_Last: {    
27e50 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
27e60 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
27e70 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
27e80 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a  sr;.  int res;..
27e90 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
27ea0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
27eb0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
27ec0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
27ed0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
27ee0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
27ef0 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
27f00 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
27f10 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43   );.  pCrsr = pC
27f20 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20  ->uc.pCursor;.  
27f30 72 65 73 20 3d 20 30 3b 0a 20 20 61 73 73 65 72  res = 0;.  asser
27f40 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20  t( pCrsr!=0 );. 
27f50 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
27f60 65 65 4c 61 73 74 28 70 43 72 73 72 2c 20 26 72  eeLast(pCrsr, &r
27f70 65 73 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  es);.  pC->nullR
27f80 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20  ow = (u8)res;.  
27f90 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
27fa0 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61  to = 0;.  pC->ca
27fb0 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
27fc0 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 2d 3e 73  E_STALE;.  pC->s
27fd0 65 65 6b 52 65 73 75 6c 74 20 3d 20 70 4f 70 2d  eekResult = pOp-
27fe0 3e 70 33 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  >p3;.#ifdef SQLI
27ff0 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73  TE_DEBUG.  pC->s
28000 65 65 6b 4f 70 20 3d 20 4f 50 5f 4c 61 73 74 3b  eekOp = OP_Last;
28010 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 72 63  .#endif.  if( rc
28020 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
28030 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66  e_to_error;.  if
28040 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 7b 0a 20  ( pOp->p2>0 ){. 
28050 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
28060 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20  en(res!=0,2);.  
28070 20 20 69 66 28 20 72 65 73 20 29 20 67 6f 74 6f    if( res ) goto
28080 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d   jump_to_p2;.  }
28090 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a  .  break;.}.../*
280a0 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 20 50 31   Opcode: Sort P1
280b0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
280c0 54 68 69 73 20 6f 70 63 6f 64 65 20 64 6f 65 73  This opcode does
280d0 20 65 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d   exactly the sam
280e0 65 20 74 68 69 6e 67 20 61 73 20 4f 50 5f 52 65  e thing as OP_Re
280f0 77 69 6e 64 20 65 78 63 65 70 74 20 74 68 61 74  wind except that
28100 0a 2a 2a 20 69 74 20 69 6e 63 72 65 6d 65 6e 74  .** it increment
28110 73 20 61 6e 20 75 6e 64 6f 63 75 6d 65 6e 74 65  s an undocumente
28120 64 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  d global variabl
28130 65 20 75 73 65 64 20 66 6f 72 20 74 65 73 74 69  e used for testi
28140 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e  ng..**.** Sortin
28150 67 20 69 73 20 61 63 63 6f 6d 70 6c 69 73 68 65  g is accomplishe
28160 64 20 62 79 20 77 72 69 74 69 6e 67 20 72 65 63  d by writing rec
28170 6f 72 64 73 20 69 6e 74 6f 20 61 20 73 6f 72 74  ords into a sort
28180 69 6e 67 20 69 6e 64 65 78 2c 0a 2a 2a 20 74 68  ing index,.** th
28190 65 6e 20 72 65 77 69 6e 64 69 6e 67 20 74 68 61  en rewinding tha
281a0 74 20 69 6e 64 65 78 20 61 6e 64 20 70 6c 61 79  t index and play
281b0 69 6e 67 20 69 74 20 62 61 63 6b 20 66 72 6f 6d  ing it back from
281c0 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a   beginning to.**
281d0 20 65 6e 64 2e 20 20 57 65 20 75 73 65 20 74 68   end.  We use th
281e0 65 20 4f 50 5f 53 6f 72 74 20 6f 70 63 6f 64 65  e OP_Sort opcode
281f0 20 69 6e 73 74 65 61 64 20 6f 66 20 4f 50 5f 52   instead of OP_R
28200 65 77 69 6e 64 20 74 6f 20 64 6f 20 74 68 65 0a  ewind to do the.
28210 2a 2a 20 72 65 77 69 6e 64 69 6e 67 20 73 6f 20  ** rewinding so 
28220 74 68 61 74 20 74 68 65 20 67 6c 6f 62 61 6c 20  that the global 
28230 76 61 72 69 61 62 6c 65 20 77 69 6c 6c 20 62 65  variable will be
28240 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e 64   incremented and
28250 0a 2a 2a 20 72 65 67 72 65 73 73 69 6f 6e 20 74  .** regression t
28260 65 73 74 73 20 63 61 6e 20 64 65 74 65 72 6d 69  ests can determi
28270 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ne whether or no
28280 74 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20  t the optimizer 
28290 69 73 0a 2a 2a 20 63 6f 72 72 65 63 74 6c 79 20  is.** correctly 
282a0 6f 70 74 69 6d 69 7a 69 6e 67 20 6f 75 74 20 73  optimizing out s
282b0 6f 72 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  orts..*/.case OP
282c0 5f 53 6f 72 74 65 72 53 6f 72 74 3a 20 20 20 20  _SorterSort:    
282d0 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20  /* jump */.case 
282e0 4f 50 5f 53 6f 72 74 3a 20 7b 20 20 20 20 20 20  OP_Sort: {      
282f0 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69 66    /* jump */.#if
28300 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
28310 20 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63    sqlite3_sort_c
28320 6f 75 6e 74 2b 2b 3b 0a 20 20 73 71 6c 69 74 65  ount++;.  sqlite
28330 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2d 2d  3_search_count--
28340 3b 0a 23 65 6e 64 69 66 0a 20 20 70 2d 3e 61 43  ;.#endif.  p->aC
28350 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54  ounter[SQLITE_ST
28360 4d 54 53 54 41 54 55 53 5f 53 4f 52 54 5d 2b 2b  MTSTATUS_SORT]++
28370 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f  ;.  /* Fall thro
28380 75 67 68 20 69 6e 74 6f 20 4f 50 5f 52 65 77 69  ugh into OP_Rewi
28390 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64  nd */.}./* Opcod
283a0 65 3a 20 52 65 77 69 6e 64 20 50 31 20 50 32 20  e: Rewind P1 P2 
283b0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20  * * *.**.** The 
283c0 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65 20  next use of the 
283d0 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20  Rowid or Column 
283e0 6f 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74  or Next instruct
283f0 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77  ion for P1 .** w
28400 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65  ill refer to the
28410 20 66 69 72 73 74 20 65 6e 74 72 79 20 69 6e 20   first entry in 
28420 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62  the database tab
28430 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20  le or index..** 
28440 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  If the table or 
28450 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 2c 20  index is empty, 
28460 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
28470 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 74 68   to P2..** If th
28480 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
28490 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66   is not empty, f
284a0 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
284b0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 0a 2a 2a  he following .**
284c0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
284d0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
284e0 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f  leaves the curso
284f0 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  r configured to 
28500 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61 72 64 20  move in forward 
28510 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74  order,.** from t
28520 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77  he beginning tow
28530 61 72 64 20 74 68 65 20 65 6e 64 2e 20 20 49 6e  ard the end.  In
28540 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
28550 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63  e cursor is.** c
28560 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65  onfigured to use
28570 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e   Next, not Prev.
28580 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 77 69  .*/.case OP_Rewi
28590 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  nd: {        /* 
285a0 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75  jump */.  VdbeCu
285b0 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75  rsor *pC;.  BtCu
285c0 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69  rsor *pCrsr;.  i
285d0 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72  nt res;..  asser
285e0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
285f0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
28600 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
28610 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
28620 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
28630 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73   );.  assert( is
28640 53 6f 72 74 65 72 28 70 43 29 3d 3d 28 70 4f 70  Sorter(pC)==(pOp
28650 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72  ->opcode==OP_Sor
28660 74 65 72 53 6f 72 74 29 20 29 3b 0a 20 20 72 65  terSort) );.  re
28670 73 20 3d 20 31 3b 0a 23 69 66 64 65 66 20 53 51  s = 1;.#ifdef SQ
28680 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d  LITE_DEBUG.  pC-
28690 3e 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 52 65 77  >seekOp = OP_Rew
286a0 69 6e 64 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66  ind;.#endif.  if
286b0 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29  ( isSorter(pC) )
286c0 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
286d0 65 33 56 64 62 65 53 6f 72 74 65 72 52 65 77 69  e3VdbeSorterRewi
286e0 6e 64 28 70 43 2c 20 26 72 65 73 29 3b 0a 20 20  nd(pC, &res);.  
286f0 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
28700 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
28710 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
28720 3b 0a 20 20 20 20 70 43 72 73 72 20 3d 20 70 43  ;.    pCrsr = pC
28730 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20  ->uc.pCursor;.  
28740 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72 20    assert( pCrsr 
28750 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
28760 74 65 33 42 74 72 65 65 46 69 72 73 74 28 70 43  te3BtreeFirst(pC
28770 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  rsr, &res);.    
28780 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
28790 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e  to = 0;.    pC->
287a0 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
287b0 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20  CHE_STALE;.  }. 
287c0 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
287d0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
287e0 72 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  r;.  pC->nullRow
287f0 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 61 73   = (u8)res;.  as
28800 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
28810 26 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f  && pOp->p2<p->nO
28820 70 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  p );.  VdbeBranc
28830 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29  hTaken(res!=0,2)
28840 3b 0a 20 20 69 66 28 20 72 65 73 20 29 20 67 6f  ;.  if( res ) go
28850 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
28860 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
28870 63 6f 64 65 3a 20 4e 65 78 74 20 50 31 20 50 32  code: Next P1 P2
28880 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
28890 41 64 76 61 6e 63 65 20 63 75 72 73 6f 72 20 50  Advance cursor P
288a0 31 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69  1 so that it poi
288b0 6e 74 73 20 74 6f 20 74 68 65 20 6e 65 78 74 20  nts to the next 
288c0 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20 69 6e  key/data pair in
288d0 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72   its.** table or
288e0 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68 65 72   index.  If ther
288f0 65 20 61 72 65 20 6e 6f 20 6d 6f 72 65 20 6b 65  e are no more ke
28900 79 2f 76 61 6c 75 65 20 70 61 69 72 73 20 74 68  y/value pairs th
28910 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a  en fall through.
28920 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77  ** to the follow
28930 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ing instruction.
28940 20 20 42 75 74 20 69 66 20 74 68 65 20 63 75 72    But if the cur
28950 73 6f 72 20 61 64 76 61 6e 63 65 20 77 61 73 20  sor advance was 
28960 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a  successful,.** j
28970 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ump immediately 
28980 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  to P2..**.** The
28990 20 4e 65 78 74 20 6f 70 63 6f 64 65 20 69 73 20   Next opcode is 
289a0 6f 6e 6c 79 20 76 61 6c 69 64 20 66 6f 6c 6c 6f  only valid follo
289b0 77 69 6e 67 20 61 6e 20 53 65 65 6b 47 54 2c 20  wing an SeekGT, 
289c0 53 65 65 6b 47 45 2c 20 6f 72 0a 2a 2a 20 4f 50  SeekGE, or.** OP
289d0 5f 52 65 77 69 6e 64 20 6f 70 63 6f 64 65 20 75  _Rewind opcode u
289e0 73 65 64 20 74 6f 20 70 6f 73 69 74 69 6f 6e 20  sed to position 
289f0 74 68 65 20 63 75 72 73 6f 72 2e 20 20 4e 65 78  the cursor.  Nex
28a00 74 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64  t is not allowed
28a10 0a 2a 2a 20 74 6f 20 66 6f 6c 6c 6f 77 20 53 65  .** to follow Se
28a20 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 6f 72  ekLT, SeekLE, or
28a30 20 4f 50 5f 4c 61 73 74 2e 0a 2a 2a 0a 2a 2a 20   OP_Last..**.** 
28a40 54 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75  The P1 cursor mu
28a50 73 74 20 62 65 20 66 6f 72 20 61 20 72 65 61 6c  st be for a real
28a60 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73   table, not a ps
28a70 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20 50 31 20  eudo-table.  P1 
28a80 6d 75 73 74 20 68 61 76 65 0a 2a 2a 20 62 65 65  must have.** bee
28a90 6e 20 6f 70 65 6e 65 64 20 70 72 69 6f 72 20 74  n opened prior t
28aa0 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20 6f 72  o this opcode or
28ab0 20 74 68 65 20 70 72 6f 67 72 61 6d 20 77 69 6c   the program wil
28ac0 6c 20 73 65 67 66 61 75 6c 74 2e 0a 2a 2a 0a 2a  l segfault..**.*
28ad0 2a 20 54 68 65 20 50 33 20 76 61 6c 75 65 20 69  * The P3 value i
28ae0 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20  s a hint to the 
28af0 62 74 72 65 65 20 69 6d 70 6c 65 6d 65 6e 74 61  btree implementa
28b00 74 69 6f 6e 2e 20 49 66 20 50 33 3d 3d 31 2c 20  tion. If P3==1, 
28b10 74 68 61 74 0a 2a 2a 20 6d 65 61 6e 73 20 50 31  that.** means P1
28b20 20 69 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78   is an SQL index
28b30 20 61 6e 64 20 74 68 61 74 20 74 68 69 73 20 69   and that this i
28b40 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 75 6c 64  nstruction could
28b50 20 68 61 76 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d   have been.** om
28b60 69 74 74 65 64 20 69 66 20 74 68 61 74 20 69 6e  itted if that in
28b70 64 65 78 20 68 61 64 20 62 65 65 6e 20 75 6e 69  dex had been uni
28b80 71 75 65 2e 20 20 50 33 20 69 73 20 75 73 75 61  que.  P3 is usua
28b90 6c 6c 79 20 30 2e 20 20 50 33 20 69 73 0a 2a 2a  lly 0.  P3 is.**
28ba0 20 61 6c 77 61 79 73 20 65 69 74 68 65 72 20 30   always either 0
28bb0 20 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20   or 1..**.** P4 
28bc0 69 73 20 61 6c 77 61 79 73 20 6f 66 20 74 79 70  is always of typ
28bd0 65 20 50 34 5f 41 44 56 41 4e 43 45 2e 20 54 68  e P4_ADVANCE. Th
28be0 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74  e function point
28bf0 65 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20  er points to.** 
28c00 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74  sqlite3BtreeNext
28c10 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  ()..**.** If P5 
28c20 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e 64 20  is positive and 
28c30 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
28c40 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20 63 6f  n, then event co
28c50 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20  unter.** number 
28c60 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72 65 70  P5-1 in the prep
28c70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69  ared statement i
28c80 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a  s incremented..*
28c90 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 50  *.** See also: P
28ca0 72 65 76 2c 20 4e 65 78 74 49 66 4f 70 65 6e 0a  rev, NextIfOpen.
28cb0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65  */./* Opcode: Ne
28cc0 78 74 49 66 4f 70 65 6e 20 50 31 20 50 32 20 50  xtIfOpen P1 P2 P
28cd0 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68  3 P4 P5.**.** Th
28ce0 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20  is opcode works 
28cf0 6a 75 73 74 20 6c 69 6b 65 20 4e 65 78 74 20 65  just like Next e
28d00 78 63 65 70 74 20 74 68 61 74 20 69 66 20 63 75  xcept that if cu
28d10 72 73 6f 72 20 50 31 20 69 73 20 6e 6f 74 0a 2a  rsor P1 is not.*
28d20 2a 20 6f 70 65 6e 20 69 74 20 62 65 68 61 76 65  * open it behave
28d30 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 2f 2a  s a no-op..*/./*
28d40 20 4f 70 63 6f 64 65 3a 20 50 72 65 76 20 50 31   Opcode: Prev P1
28d50 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
28d60 2a 2a 20 42 61 63 6b 20 75 70 20 63 75 72 73 6f  ** Back up curso
28d70 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20  r P1 so that it 
28d80 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 70 72  points to the pr
28d90 65 76 69 6f 75 73 20 6b 65 79 2f 64 61 74 61 20  evious key/data 
28da0 70 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74  pair in its.** t
28db0 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20  able or index.  
28dc0 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 70  If there is no p
28dd0 72 65 76 69 6f 75 73 20 6b 65 79 2f 76 61 6c 75  revious key/valu
28de0 65 20 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c  e pairs then fal
28df0 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20  l through.** to 
28e00 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e  the following in
28e10 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20  struction.  But 
28e20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 62 61  if the cursor ba
28e30 63 6b 75 70 20 77 61 73 20 73 75 63 63 65 73 73  ckup was success
28e40 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d  ful,.** jump imm
28e50 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a  ediately to P2..
28e60 2a 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 72 65  **.**.** The Pre
28e70 76 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79  v opcode is only
28e80 20 76 61 6c 69 64 20 66 6f 6c 6c 6f 77 69 6e 67   valid following
28e90 20 61 6e 20 53 65 65 6b 4c 54 2c 20 53 65 65 6b   an SeekLT, Seek
28ea0 4c 45 2c 20 6f 72 0a 2a 2a 20 4f 50 5f 4c 61 73  LE, or.** OP_Las
28eb0 74 20 6f 70 63 6f 64 65 20 75 73 65 64 20 74 6f  t opcode used to
28ec0 20 70 6f 73 69 74 69 6f 6e 20 74 68 65 20 63 75   position the cu
28ed0 72 73 6f 72 2e 20 20 50 72 65 76 20 69 73 20 6e  rsor.  Prev is n
28ee0 6f 74 20 61 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f  ot allowed.** to
28ef0 20 66 6f 6c 6c 6f 77 20 53 65 65 6b 47 54 2c 20   follow SeekGT, 
28f00 53 65 65 6b 47 45 2c 20 6f 72 20 4f 50 5f 52 65  SeekGE, or OP_Re
28f10 77 69 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  wind..**.** The 
28f20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62  P1 cursor must b
28f30 65 20 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62  e for a real tab
28f40 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f  le, not a pseudo
28f50 2d 74 61 62 6c 65 2e 20 20 49 66 20 50 31 20 69  -table.  If P1 i
28f60 73 0a 2a 2a 20 6e 6f 74 20 6f 70 65 6e 20 74 68  s.** not open th
28f70 65 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72 20  en the behavior 
28f80 69 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a  is undefined..**
28f90 0a 2a 2a 20 54 68 65 20 50 33 20 76 61 6c 75 65  .** The P3 value
28fa0 20 69 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68   is a hint to th
28fb0 65 20 62 74 72 65 65 20 69 6d 70 6c 65 6d 65 6e  e btree implemen
28fc0 74 61 74 69 6f 6e 2e 20 49 66 20 50 33 3d 3d 31  tation. If P3==1
28fd0 2c 20 74 68 61 74 0a 2a 2a 20 6d 65 61 6e 73 20  , that.** means 
28fe0 50 31 20 69 73 20 61 6e 20 53 51 4c 20 69 6e 64  P1 is an SQL ind
28ff0 65 78 20 61 6e 64 20 74 68 61 74 20 74 68 69 73  ex and that this
29000 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 75   instruction cou
29010 6c 64 20 68 61 76 65 20 62 65 65 6e 0a 2a 2a 20  ld have been.** 
29020 6f 6d 69 74 74 65 64 20 69 66 20 74 68 61 74 20  omitted if that 
29030 69 6e 64 65 78 20 68 61 64 20 62 65 65 6e 20 75  index had been u
29040 6e 69 71 75 65 2e 20 20 50 33 20 69 73 20 75 73  nique.  P3 is us
29050 75 61 6c 6c 79 20 30 2e 20 20 50 33 20 69 73 0a  ually 0.  P3 is.
29060 2a 2a 20 61 6c 77 61 79 73 20 65 69 74 68 65 72  ** always either
29070 20 30 20 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50   0 or 1..**.** P
29080 34 20 69 73 20 61 6c 77 61 79 73 20 6f 66 20 74  4 is always of t
29090 79 70 65 20 50 34 5f 41 44 56 41 4e 43 45 2e 20  ype P4_ADVANCE. 
290a0 54 68 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69  The function poi
290b0 6e 74 65 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a  nter points to.*
290c0 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 72  * sqlite3BtreePr
290d0 65 76 69 6f 75 73 28 29 2e 0a 2a 2a 0a 2a 2a 20  evious()..**.** 
290e0 49 66 20 50 35 20 69 73 20 70 6f 73 69 74 69 76  If P5 is positiv
290f0 65 20 61 6e 64 20 74 68 65 20 6a 75 6d 70 20 69  e and the jump i
29100 73 20 74 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76  s taken, then ev
29110 65 6e 74 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e  ent counter.** n
29120 75 6d 62 65 72 20 50 35 2d 31 20 69 6e 20 74 68  umber P5-1 in th
29130 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  e prepared state
29140 6d 65 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e  ment is incremen
29150 74 65 64 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ted..*/./* Opcod
29160 65 3a 20 50 72 65 76 49 66 4f 70 65 6e 20 50 31  e: PrevIfOpen P1
29170 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
29180 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77  ** This opcode w
29190 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 50  orks just like P
291a0 72 65 76 20 65 78 63 65 70 74 20 74 68 61 74 20  rev except that 
291b0 69 66 20 63 75 72 73 6f 72 20 50 31 20 69 73 20  if cursor P1 is 
291c0 6e 6f 74 0a 2a 2a 20 6f 70 65 6e 20 69 74 20 62  not.** open it b
291d0 65 68 61 76 65 73 20 61 20 6e 6f 2d 6f 70 2e 0a  ehaves a no-op..
291e0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65  */.case OP_Sorte
291f0 72 4e 65 78 74 3a 20 7b 20 20 2f 2a 20 6a 75 6d  rNext: {  /* jum
29200 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  p */.  VdbeCurso
29210 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73  r *pC;.  int res
29220 3b 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  ;..  pC = p->apC
29230 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
29240 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28  ssert( isSorter(
29250 70 43 29 20 29 3b 0a 20 20 72 65 73 20 3d 20 30  pC) );.  res = 0
29260 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
29270 56 64 62 65 53 6f 72 74 65 72 4e 65 78 74 28 64  VdbeSorterNext(d
29280 62 2c 20 70 43 2c 20 26 72 65 73 29 3b 0a 20 20  b, pC, &res);.  
29290 67 6f 74 6f 20 6e 65 78 74 5f 74 61 69 6c 3b 0a  goto next_tail;.
292a0 63 61 73 65 20 4f 50 5f 50 72 65 76 49 66 4f 70  case OP_PrevIfOp
292b0 65 6e 3a 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a  en:    /* jump *
292c0 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74 49 66  /.case OP_NextIf
292d0 4f 70 65 6e 3a 20 20 20 20 2f 2a 20 6a 75 6d 70  Open:    /* jump
292e0 20 2a 2f 0a 20 20 69 66 28 20 70 2d 3e 61 70 43   */.  if( p->apC
292f0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3d 3d 30 20 29  sr[pOp->p1]==0 )
29300 20 62 72 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c   break;.  /* Fal
29310 6c 20 74 68 72 6f 75 67 68 20 2a 2f 0a 63 61 73  l through */.cas
29320 65 20 4f 50 5f 50 72 65 76 3a 20 20 20 20 20 20  e OP_Prev:      
29330 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63      /* jump */.c
29340 61 73 65 20 4f 50 5f 4e 65 78 74 3a 20 20 20 20  ase OP_Next:    
29350 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
29360 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
29370 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
29380 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
29390 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35   assert( pOp->p5
293a0 3c 41 72 72 61 79 53 69 7a 65 28 70 2d 3e 61 43  <ArraySize(p->aC
293b0 6f 75 6e 74 65 72 29 20 29 3b 0a 20 20 70 43 20  ounter) );.  pC 
293c0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
293d0 70 31 5d 3b 0a 20 20 72 65 73 20 3d 20 70 4f 70  p1];.  res = pOp
293e0 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p3;.  assert( 
293f0 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
29400 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
29410 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73  oveto==0 );.  as
29420 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
29430 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
29440 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72  E );.  assert( r
29450 65 73 3d 3d 30 20 7c 7c 20 28 72 65 73 3d 3d 31  es==0 || (res==1
29460 20 26 26 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d   && pC->isTable=
29470 3d 30 29 20 29 3b 0a 20 20 74 65 73 74 63 61 73  =0) );.  testcas
29480 65 28 20 72 65 73 3d 3d 31 20 29 3b 0a 20 20 61  e( res==1 );.  a
29490 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
294a0 64 65 21 3d 4f 50 5f 4e 65 78 74 20 7c 7c 20 70  de!=OP_Next || p
294b0 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d  Op->p4.xAdvance=
294c0 3d 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78  =sqlite3BtreeNex
294d0 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  t );.  assert( p
294e0 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50  Op->opcode!=OP_P
294f0 72 65 76 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78  rev || pOp->p4.x
29500 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33  Advance==sqlite3
29510 42 74 72 65 65 50 72 65 76 69 6f 75 73 20 29 3b  BtreePrevious );
29520 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
29530 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 49  opcode!=OP_NextI
29540 66 4f 70 65 6e 20 7c 7c 20 70 4f 70 2d 3e 70 34  fOpen || pOp->p4
29550 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74  .xAdvance==sqlit
29560 65 33 42 74 72 65 65 4e 65 78 74 20 29 3b 0a 20  e3BtreeNext );. 
29570 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
29580 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 49 66 4f  code!=OP_PrevIfO
29590 70 65 6e 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78  pen || pOp->p4.x
295a0 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33  Advance==sqlite3
295b0 42 74 72 65 65 50 72 65 76 69 6f 75 73 29 3b 0a  BtreePrevious);.
295c0 0a 20 20 2f 2a 20 54 68 65 20 4e 65 78 74 20 6f  .  /* The Next o
295d0 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 75 73  pcode is only us
295e0 65 64 20 61 66 74 65 72 20 53 65 65 6b 47 54 2c  ed after SeekGT,
295f0 20 53 65 65 6b 47 45 2c 20 61 6e 64 20 52 65 77   SeekGE, and Rew
29600 69 6e 64 2e 0a 20 20 2a 2a 20 54 68 65 20 50 72  ind..  ** The Pr
29610 65 76 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c  ev opcode is onl
29620 79 20 75 73 65 64 20 61 66 74 65 72 20 53 65 65  y used after See
29630 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 61 6e 64  kLT, SeekLE, and
29640 20 4c 61 73 74 2e 20 2a 2f 0a 20 20 61 73 73 65   Last. */.  asse
29650 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21  rt( pOp->opcode!
29660 3d 4f 50 5f 4e 65 78 74 20 7c 7c 20 70 4f 70 2d  =OP_Next || pOp-
29670 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74  >opcode!=OP_Next
29680 49 66 4f 70 65 6e 0a 20 20 20 20 20 20 20 7c 7c  IfOpen.       ||
29690 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f   pC->seekOp==OP_
296a0 53 65 65 6b 47 54 20 7c 7c 20 70 43 2d 3e 73 65  SeekGT || pC->se
296b0 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 47 45 0a  ekOp==OP_SeekGE.
296c0 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65         || pC->se
296d0 65 6b 4f 70 3d 3d 4f 50 5f 52 65 77 69 6e 64 20  ekOp==OP_Rewind 
296e0 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f  || pC->seekOp==O
296f0 50 5f 46 6f 75 6e 64 29 3b 0a 20 20 61 73 73 65  P_Found);.  asse
29700 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21  rt( pOp->opcode!
29710 3d 4f 50 5f 50 72 65 76 20 7c 7c 20 70 4f 70 2d  =OP_Prev || pOp-
29720 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76  >opcode!=OP_Prev
29730 49 66 4f 70 65 6e 0a 20 20 20 20 20 20 20 7c 7c  IfOpen.       ||
29740 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f   pC->seekOp==OP_
29750 53 65 65 6b 4c 54 20 7c 7c 20 70 43 2d 3e 73 65  SeekLT || pC->se
29760 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 4c 45 0a  ekOp==OP_SeekLE.
29770 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65         || pC->se
29780 65 6b 4f 70 3d 3d 4f 50 5f 4c 61 73 74 20 29 3b  ekOp==OP_Last );
29790 0a 0a 20 20 72 63 20 3d 20 70 4f 70 2d 3e 70 34  ..  rc = pOp->p4
297a0 2e 78 41 64 76 61 6e 63 65 28 70 43 2d 3e 75 63  .xAdvance(pC->uc
297b0 2e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b  .pCursor, &res);
297c0 0a 6e 65 78 74 5f 74 61 69 6c 3a 0a 20 20 70 43  .next_tail:.  pC
297d0 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
297e0 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 56  CACHE_STALE;.  V
297f0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
29800 65 73 3d 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20  es==0,2);.  if( 
29810 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
29820 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
29830 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20  if( res==0 ){.  
29840 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
29850 30 3b 0a 20 20 20 20 70 2d 3e 61 43 6f 75 6e 74  0;.    p->aCount
29860 65 72 5b 70 4f 70 2d 3e 70 35 5d 2b 2b 3b 0a 23  er[pOp->p5]++;.#
29870 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
29880 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 65  T.    sqlite3_se
29890 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65  arch_count++;.#e
298a0 6e 64 69 66 0a 20 20 20 20 67 6f 74 6f 20 6a 75  ndif.    goto ju
298b0 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68 65  mp_to_p2_and_che
298c0 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74  ck_for_interrupt
298d0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
298e0 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a  C->nullRow = 1;.
298f0 20 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b    }.  goto check
29900 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a  _for_interrupt;.
29910 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  }../* Opcode: Id
29920 78 49 6e 73 65 72 74 20 50 31 20 50 32 20 50 33  xInsert P1 P2 P3
29930 20 2a 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69   * P5.** Synopsi
29940 73 3a 20 6b 65 79 3d 72 5b 50 32 5d 0a 2a 2a 0a  s: key=r[P2].**.
29950 2a 2a 20 52 65 67 69 73 74 65 72 20 50 32 20 68  ** Register P2 h
29960 6f 6c 64 73 20 61 6e 20 53 51 4c 20 69 6e 64 65  olds an SQL inde
29970 78 20 6b 65 79 20 6d 61 64 65 20 75 73 69 6e 67  x key made using
29980 20 74 68 65 0a 2a 2a 20 4d 61 6b 65 52 65 63 6f   the.** MakeReco
29990 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 2e  rd instructions.
299a0 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 72    This opcode wr
299b0 69 74 65 73 20 74 68 61 74 20 6b 65 79 0a 2a 2a  ites that key.**
299c0 20 69 6e 74 6f 20 74 68 65 20 69 6e 64 65 78 20   into the index 
299d0 50 31 2e 20 20 44 61 74 61 20 66 6f 72 20 74 68  P1.  Data for th
299e0 65 20 65 6e 74 72 79 20 69 73 20 6e 69 6c 2e 0a  e entry is nil..
299f0 2a 2a 0a 2a 2a 20 50 33 20 69 73 20 61 20 66 6c  **.** P3 is a fl
29a00 61 67 20 74 68 61 74 20 70 72 6f 76 69 64 65 73  ag that provides
29a10 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62   a hint to the b
29a20 2d 74 72 65 65 20 6c 61 79 65 72 20 74 68 61 74  -tree layer that
29a30 20 74 68 69 73 0a 2a 2a 20 69 6e 73 65 72 74 20   this.** insert 
29a40 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20  is likely to be 
29a50 61 6e 20 61 70 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a  an append..**.**
29a60 20 49 66 20 50 35 20 68 61 73 20 74 68 65 20 4f   If P5 has the O
29a70 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 62 69  PFLAG_NCHANGE bi
29a80 74 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20  t set, then the 
29a90 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69  change counter i
29aa0 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64  s.** incremented
29ab0 20 62 79 20 74 68 69 73 20 69 6e 73 74 72 75 63   by this instruc
29ac0 74 69 6f 6e 2e 20 20 49 66 20 74 68 65 20 4f 50  tion.  If the OP
29ad0 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 62 69 74  FLAG_NCHANGE bit
29ae0 20 69 73 20 63 6c 65 61 72 2c 0a 2a 2a 20 74 68   is clear,.** th
29af0 65 6e 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f  en the change co
29b00 75 6e 74 65 72 20 69 73 20 75 6e 63 68 61 6e 67  unter is unchang
29b10 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  ed..**.** If P5 
29b20 68 61 73 20 74 68 65 20 4f 50 46 4c 41 47 5f 55  has the OPFLAG_U
29b30 53 45 53 45 45 4b 52 45 53 55 4c 54 20 62 69 74  SESEEKRESULT bit
29b40 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 63   set, then the c
29b50 75 72 73 6f 72 20 6d 75 73 74 20 68 61 76 65 0a  ursor must have.
29b60 2a 2a 20 6a 75 73 74 20 64 6f 6e 65 20 61 20 73  ** just done a s
29b70 65 65 6b 20 74 6f 20 74 68 65 20 73 70 6f 74 20  eek to the spot 
29b80 77 68 65 72 65 20 74 68 65 20 6e 65 77 20 65 6e  where the new en
29b90 74 72 79 20 69 73 20 74 6f 20 62 65 20 69 6e 73  try is to be ins
29ba0 65 72 74 65 64 2e 0a 2a 2a 20 54 68 69 73 20 66  erted..** This f
29bb0 6c 61 67 20 61 76 6f 69 64 73 20 64 6f 69 6e 67  lag avoids doing
29bc0 20 61 6e 20 65 78 74 72 61 20 73 65 65 6b 2e 0a   an extra seek..
29bd0 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
29be0 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b  uction only work
29bf0 73 20 66 6f 72 20 69 6e 64 69 63 65 73 2e 20 20  s for indices.  
29c00 54 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69  The equivalent i
29c10 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f  nstruction.** fo
29c20 72 20 74 61 62 6c 65 73 20 69 73 20 4f 50 5f 49  r tables is OP_I
29c30 6e 73 65 72 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f  nsert..*/.case O
29c40 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 3a 20  P_SorterInsert: 
29c50 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a        /* in2 */.
29c60 63 61 73 65 20 4f 50 5f 49 64 78 49 6e 73 65 72  case OP_IdxInser
29c70 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69  t: {        /* i
29c80 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  n2 */.  VdbeCurs
29c90 6f 72 20 2a 70 43 3b 0a 20 20 42 74 72 65 65 50  or *pC;.  BtreeP
29ca0 61 79 6c 6f 61 64 20 78 3b 0a 0a 20 20 61 73 73  ayload x;..  ass
29cb0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
29cc0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
29cd0 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
29ce0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
29cf0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
29d00 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
29d10 69 73 53 6f 72 74 65 72 28 70 43 29 3d 3d 28 70  isSorter(pC)==(p
29d20 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53  Op->opcode==OP_S
29d30 6f 72 74 65 72 49 6e 73 65 72 74 29 20 29 3b 0a  orterInsert) );.
29d40 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
29d50 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72  Op->p2];.  asser
29d60 74 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26  t( pIn2->flags &
29d70 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 69   MEM_Blob );.  i
29d80 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  f( pOp->p5 & OPF
29d90 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d  LAG_NCHANGE ) p-
29da0 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 61 73  >nChange++;.  as
29db0 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
29dc0 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
29dd0 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  E || pOp->opcode
29de0 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72  ==OP_SorterInser
29df0 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  t );.  assert( p
29e00 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b  C->isTable==0 );
29e10 0a 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c  .  rc = ExpandBl
29e20 6f 62 28 70 49 6e 32 29 3b 0a 20 20 69 66 28 20  ob(pIn2);.  if( 
29e30 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
29e40 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
29e50 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
29e60 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74  =OP_SorterInsert
29e70 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
29e80 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 57 72  ite3VdbeSorterWr
29e90 69 74 65 28 70 43 2c 20 70 49 6e 32 29 3b 0a 20  ite(pC, pIn2);. 
29ea0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 78 2e 6e 4b   }else{.    x.nK
29eb0 65 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20  ey = pIn2->n;.  
29ec0 20 20 78 2e 70 4b 65 79 20 3d 20 70 49 6e 32 2d    x.pKey = pIn2-
29ed0 3e 7a 3b 0a 20 20 20 20 78 2e 6e 44 61 74 61 20  >z;.    x.nData 
29ee0 3d 20 30 3b 0a 20 20 20 20 78 2e 6e 5a 65 72 6f  = 0;.    x.nZero
29ef0 20 3d 20 30 3b 0a 20 20 20 20 78 2e 70 44 61 74   = 0;.    x.pDat
29f00 61 20 3d 20 30 3b 0a 20 20 20 20 72 63 20 3d 20  a = 0;.    rc = 
29f10 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 73 65  sqlite3BtreeInse
29f20 72 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  rt(pC->uc.pCurso
29f30 72 2c 20 26 78 2c 20 70 4f 70 2d 3e 70 33 2c 20  r, &x, pOp->p3, 
29f40 0a 20 20 20 20 20 20 20 20 28 28 70 4f 70 2d 3e  .        ((pOp->
29f50 70 35 20 26 20 4f 50 46 4c 41 47 5f 55 53 45 53  p5 & OPFLAG_USES
29f60 45 45 4b 52 45 53 55 4c 54 29 20 3f 20 70 43 2d  EEKRESULT) ? pC-
29f70 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a 20 30 29  >seekResult : 0)
29f80 0a 20 20 20 20 20 20 20 20 29 3b 0a 20 20 20 20  .        );.    
29f90 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65  assert( pC->defe
29fa0 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
29fb0 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
29fc0 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
29fd0 4c 45 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63  LE;.  }.  if( rc
29fe0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
29ff0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65  _to_error;.  bre
2a000 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2a010 3a 20 49 64 78 44 65 6c 65 74 65 20 50 31 20 50  : IdxDelete P1 P
2a020 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
2a030 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 32 40 50  psis: key=r[P2@P
2a040 33 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6e  3].**.** The con
2a050 74 65 6e 74 20 6f 66 20 50 33 20 72 65 67 69 73  tent of P3 regis
2a060 74 65 72 73 20 73 74 61 72 74 69 6e 67 20 61 74  ters starting at
2a070 20 72 65 67 69 73 74 65 72 20 50 32 20 66 6f 72   register P2 for
2a080 6d 0a 2a 2a 20 61 6e 20 75 6e 70 61 63 6b 65 64  m.** an unpacked
2a090 20 69 6e 64 65 78 20 6b 65 79 2e 20 54 68 69 73   index key. This
2a0a0 20 6f 70 63 6f 64 65 20 72 65 6d 6f 76 65 73 20   opcode removes 
2a0b0 74 68 61 74 20 65 6e 74 72 79 20 66 72 6f 6d 20  that entry from 
2a0c0 74 68 65 20 0a 2a 2a 20 69 6e 64 65 78 20 6f 70  the .** index op
2a0d0 65 6e 65 64 20 62 79 20 63 75 72 73 6f 72 20 50  ened by cursor P
2a0e0 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64  1..*/.case OP_Id
2a0f0 78 44 65 6c 65 74 65 3a 20 7b 0a 20 20 56 64 62  xDelete: {.  Vdb
2a100 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
2a110 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
2a120 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70    int res;.  Unp
2a130 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a  ackedRecord r;..
2a140 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2a150 33 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  3>0 );.  assert(
2a160 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f   pOp->p2>0 && pO
2a170 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33 3c 3d 28  p->p2+pOp->p3<=(
2a180 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
2a190 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 61  Cursor)+1 );.  a
2a1a0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
2a1b0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
2a1c0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
2a1d0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
2a1e0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2a1f0 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
2a200 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
2a210 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
2a220 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75  .  pCrsr = pC->u
2a230 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73  c.pCursor;.  ass
2a240 65 72 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b  ert( pCrsr!=0 );
2a250 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2a260 70 35 3d 3d 30 20 29 3b 0a 20 20 72 2e 70 4b 65  p5==0 );.  r.pKe
2a270 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79  yInfo = pC->pKey
2a280 49 6e 66 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c 64  Info;.  r.nField
2a290 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 33 3b   = (u16)pOp->p3;
2a2a0 0a 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20  .  r.default_rc 
2a2b0 3d 20 30 3b 0a 20 20 72 2e 61 4d 65 6d 20 3d 20  = 0;.  r.aMem = 
2a2c0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
2a2d0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
2a2e0 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65  reeMovetoUnpacke
2a2f0 64 28 70 43 72 73 72 2c 20 26 72 2c 20 30 2c 20  d(pCrsr, &r, 0, 
2a300 30 2c 20 26 72 65 73 29 3b 0a 20 20 69 66 28 20  0, &res);.  if( 
2a310 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
2a320 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
2a330 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20  if( res==0 ){.  
2a340 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
2a350 72 65 65 44 65 6c 65 74 65 28 70 43 72 73 72 2c  reeDelete(pCrsr,
2a360 20 42 54 52 45 45 5f 41 55 58 44 45 4c 45 54 45   BTREE_AUXDELETE
2a370 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20  );.    if( rc ) 
2a380 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
2a390 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 61  o_error;.  }.  a
2a3a0 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
2a3b0 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
2a3c0 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
2a3d0 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
2a3e0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2a3f0 4f 70 63 6f 64 65 3a 20 53 65 65 6b 20 50 31 20  Opcode: Seek P1 
2a400 2a 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  * P3 P4 *.** Syn
2a410 6f 70 73 69 73 3a 20 20 4d 6f 76 65 20 50 33 20  opsis:  Move P3 
2a420 74 6f 20 50 31 2e 72 6f 77 69 64 0a 2a 2a 0a 2a  to P1.rowid.**.*
2a430 2a 20 50 31 20 69 73 20 61 6e 20 6f 70 65 6e 20  * P1 is an open 
2a440 69 6e 64 65 78 20 63 75 72 73 6f 72 20 61 6e 64  index cursor and
2a450 20 50 33 20 69 73 20 61 20 63 75 72 73 6f 72 20   P3 is a cursor 
2a460 6f 6e 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  on the correspon
2a470 64 69 6e 67 0a 2a 2a 20 74 61 62 6c 65 2e 20 20  ding.** table.  
2a480 54 68 69 73 20 6f 70 63 6f 64 65 20 64 6f 65 73  This opcode does
2a490 20 61 20 64 65 66 65 72 72 65 64 20 73 65 65 6b   a deferred seek
2a4a0 20 6f 66 20 74 68 65 20 50 33 20 74 61 62 6c 65   of the P3 table
2a4b0 20 63 75 72 73 6f 72 0a 2a 2a 20 74 6f 20 74 68   cursor.** to th
2a4c0 65 20 72 6f 77 20 74 68 61 74 20 63 6f 72 72 65  e row that corre
2a4d0 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 63 75  sponds to the cu
2a4e0 72 72 65 6e 74 20 72 6f 77 20 6f 66 20 50 31 2e  rrent row of P1.
2a4f0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 61  .**.** This is a
2a500 20 64 65 66 65 72 72 65 64 20 73 65 65 6b 2e 20   deferred seek. 
2a510 20 4e 6f 74 68 69 6e 67 20 61 63 74 75 61 6c 6c   Nothing actuall
2a520 79 20 68 61 70 70 65 6e 73 20 75 6e 74 69 6c 0a  y happens until.
2a530 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  ** the cursor is
2a540 20 75 73 65 64 20 74 6f 20 72 65 61 64 20 61 20   used to read a 
2a550 72 65 63 6f 72 64 2e 20 20 54 68 61 74 20 77 61  record.  That wa
2a560 79 2c 20 69 66 20 6e 6f 20 72 65 61 64 73 0a 2a  y, if no reads.*
2a570 2a 20 6f 63 63 75 72 2c 20 6e 6f 20 75 6e 6e 65  * occur, no unne
2a580 63 65 73 73 61 72 79 20 49 2f 4f 20 68 61 70 70  cessary I/O happ
2a590 65 6e 73 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61  ens..**.** P4 ma
2a5a0 79 20 62 65 20 61 6e 20 61 72 72 61 79 20 6f 66  y be an array of
2a5b0 20 69 6e 74 65 67 65 72 73 20 28 74 79 70 65 20   integers (type 
2a5c0 50 34 5f 49 4e 54 41 52 52 41 59 29 20 63 6f 6e  P4_INTARRAY) con
2a5d0 74 61 69 6e 69 6e 67 0a 2a 2a 20 6f 6e 65 20 65  taining.** one e
2a5e0 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20 63 6f  ntry for each co
2a5f0 6c 75 6d 6e 20 69 6e 20 74 68 65 20 50 33 20 74  lumn in the P3 t
2a600 61 62 6c 65 2e 20 20 49 66 20 61 72 72 61 79 20  able.  If array 
2a610 65 6e 74 72 79 20 61 28 69 29 0a 2a 2a 20 69 73  entry a(i).** is
2a620 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20   non-zero, then 
2a630 72 65 61 64 69 6e 67 20 63 6f 6c 75 6d 6e 20 61  reading column a
2a640 28 69 29 2d 31 20 66 72 6f 6d 20 63 75 72 73 6f  (i)-1 from curso
2a650 72 20 50 33 20 69 73 20 0a 2a 2a 20 65 71 75 69  r P3 is .** equi
2a660 76 61 6c 65 6e 74 20 74 6f 20 70 65 72 66 6f 72  valent to perfor
2a670 6d 69 6e 67 20 74 68 65 20 64 65 66 65 72 72 65  ming the deferre
2a680 64 20 73 65 65 6b 20 61 6e 64 20 74 68 65 6e 20  d seek and then 
2a690 72 65 61 64 69 6e 67 20 63 6f 6c 75 6d 6e 20 69  reading column i
2a6a0 20 0a 2a 2a 20 66 72 6f 6d 20 50 31 2e 20 20 54   .** from P1.  T
2a6b0 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  his information 
2a6c0 69 73 20 73 74 6f 72 65 64 20 69 6e 20 50 33 20  is stored in P3 
2a6d0 61 6e 64 20 75 73 65 64 20 74 6f 20 72 65 64 69  and used to redi
2a6e0 72 65 63 74 0a 2a 2a 20 72 65 61 64 73 20 61 67  rect.** reads ag
2a6f0 61 69 6e 73 74 20 50 33 20 6f 76 65 72 20 74 6f  ainst P3 over to
2a700 20 50 31 2c 20 74 68 75 73 20 70 6f 73 73 69 62   P1, thus possib
2a710 6c 79 20 61 76 6f 69 64 69 6e 67 20 74 68 65 20  ly avoiding the 
2a720 6e 65 65 64 20 74 6f 0a 2a 2a 20 73 65 65 6b 20  need to.** seek 
2a730 61 6e 64 20 72 65 61 64 20 63 75 72 73 6f 72 20  and read cursor 
2a740 50 33 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  P3..*/./* Opcode
2a750 3a 20 49 64 78 52 6f 77 69 64 20 50 31 20 50 32  : IdxRowid P1 P2
2a760 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
2a770 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a  is: r[P2]=rowid.
2a780 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f  **.** Write into
2a790 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 20   register P2 an 
2a7a0 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73  integer which is
2a7b0 20 74 68 65 20 6c 61 73 74 20 65 6e 74 72 79 20   the last entry 
2a7c0 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 61 74  in the record at
2a7d0 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20 74  .** the end of t
2a7e0 68 65 20 69 6e 64 65 78 20 6b 65 79 20 70 6f 69  he index key poi
2a7f0 6e 74 65 64 20 74 6f 20 62 79 20 63 75 72 73 6f  nted to by curso
2a800 72 20 50 31 2e 20 20 54 68 69 73 20 69 6e 74 65  r P1.  This inte
2a810 67 65 72 20 73 68 6f 75 6c 64 20 62 65 0a 2a 2a  ger should be.**
2a820 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68   the rowid of th
2a830 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74 6f  e table entry to
2a840 20 77 68 69 63 68 20 74 68 69 73 20 69 6e 64 65   which this inde
2a850 78 20 65 6e 74 72 79 20 70 6f 69 6e 74 73 2e 0a  x entry points..
2a860 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
2a870 52 6f 77 69 64 2c 20 4d 61 6b 65 52 65 63 6f 72  Rowid, MakeRecor
2a880 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  d..*/.case OP_Se
2a890 65 6b 3a 0a 63 61 73 65 20 4f 50 5f 49 64 78 52  ek:.case OP_IdxR
2a8a0 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20  owid: {         
2a8b0 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
2a8c0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
2a8d0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
2a8e0 20 2f 2a 20 54 68 65 20 50 31 20 69 6e 64 65 78   /* The P1 index
2a8f0 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 56 64 62   cursor */.  Vdb
2a900 65 43 75 72 73 6f 72 20 2a 70 54 61 62 43 75 72  eCursor *pTabCur
2a910 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
2a920 68 65 20 50 32 20 74 61 62 6c 65 20 63 75 72 73  he P2 table curs
2a930 6f 72 20 28 4f 50 5f 53 65 65 6b 20 6f 6e 6c 79  or (OP_Seek only
2a940 29 20 2a 2f 0a 20 20 69 36 34 20 72 6f 77 69 64  ) */.  i64 rowid
2a950 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
2a960 20 20 20 20 20 20 2f 2a 20 52 6f 77 69 64 20 74        /* Rowid t
2a970 68 61 74 20 50 31 20 63 75 72 72 65 6e 74 20 70  hat P1 current p
2a980 6f 69 6e 74 73 20 74 6f 20 2a 2f 0a 0a 20 20 61  oints to */..  a
2a990 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
2a9a0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
2a9b0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
2a9c0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
2a9d0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2a9e0 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
2a9f0 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
2aa00 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
2aa10 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75  .  assert( pC->u
2aa20 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  c.pCursor!=0 );.
2aa30 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
2aa40 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 61 73  Table==0 );.  as
2aa50 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
2aa60 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
2aa70 20 61 73 73 65 72 74 28 20 21 70 43 2d 3e 6e 75   assert( !pC->nu
2aa80 6c 6c 52 6f 77 20 7c 7c 20 70 4f 70 2d 3e 6f 70  llRow || pOp->op
2aa90 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 52 6f 77 69  code==OP_IdxRowi
2aaa0 64 20 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 49  d );..  /* The I
2aab0 64 78 52 6f 77 69 64 20 61 6e 64 20 53 65 65 6b  dxRowid and Seek
2aac0 20 6f 70 63 6f 64 65 73 20 61 72 65 20 63 6f 6d   opcodes are com
2aad0 62 69 6e 65 64 20 62 65 63 61 75 73 65 20 6f 66  bined because of
2aae0 20 74 68 65 20 63 6f 6d 6d 6f 6e 61 6c 69 74 79   the commonality
2aaf0 0a 20 20 2a 2a 20 6f 66 20 73 71 6c 69 74 65 33  .  ** of sqlite3
2ab00 56 64 62 65 43 75 72 73 6f 72 52 65 73 74 6f 72  VdbeCursorRestor
2ab10 65 28 29 20 61 6e 64 20 73 71 6c 69 74 65 33 56  e() and sqlite3V
2ab20 64 62 65 49 64 78 52 6f 77 69 64 28 29 2e 20 2a  dbeIdxRowid(). *
2ab30 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  /.  rc = sqlite3
2ab40 56 64 62 65 43 75 72 73 6f 72 52 65 73 74 6f 72  VdbeCursorRestor
2ab50 65 28 70 43 29 3b 0a 0a 20 20 2f 2a 20 73 71 6c  e(pC);..  /* sql
2ab60 69 74 65 33 56 62 65 43 75 72 73 6f 72 52 65 73  ite3VbeCursorRes
2ab70 74 6f 72 65 28 29 20 63 61 6e 20 6f 6e 6c 79 20  tore() can only 
2ab80 66 61 69 6c 20 69 66 20 74 68 65 20 72 65 63 6f  fail if the reco
2ab90 72 64 20 68 61 73 20 62 65 65 6e 20 64 65 6c 65  rd has been dele
2aba0 74 65 64 0a 20 20 2a 2a 20 6f 75 74 20 66 72 6f  ted.  ** out fro
2abb0 6d 20 75 6e 64 65 72 20 74 68 65 20 63 75 72 73  m under the curs
2abc0 6f 72 2e 20 20 54 68 61 74 20 77 69 6c 6c 20 6e  or.  That will n
2abd0 65 76 65 72 20 68 61 70 70 65 6e 73 20 66 6f 72  ever happens for
2abe0 20 61 6e 20 49 64 78 52 6f 77 69 64 0a 20 20 2a   an IdxRowid.  *
2abf0 2a 20 6f 72 20 53 65 65 6b 20 6f 70 63 6f 64 65  * or Seek opcode
2ac00 20 2a 2f 0a 20 20 69 66 28 20 4e 45 56 45 52 28   */.  if( NEVER(
2ac10 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29  rc!=SQLITE_OK) )
2ac20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
2ac30 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 69 66 28  to_error;..  if(
2ac40 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b   !pC->nullRow ){
2ac50 0a 20 20 20 20 72 6f 77 69 64 20 3d 20 30 3b 20  .    rowid = 0; 
2ac60 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20   /* Not needed. 
2ac70 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 69   Only used to si
2ac80 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e  lence a warning.
2ac90 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   */.    rc = sql
2aca0 69 74 65 33 56 64 62 65 49 64 78 52 6f 77 69 64  ite3VdbeIdxRowid
2acb0 28 64 62 2c 20 70 43 2d 3e 75 63 2e 70 43 75 72  (db, pC->uc.pCur
2acc0 73 6f 72 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20  sor, &rowid);.  
2acd0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
2ace0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  _OK ){.      got
2acf0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
2ad00 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20  rror;.    }.    
2ad10 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
2ad20 3d 4f 50 5f 53 65 65 6b 20 29 7b 0a 20 20 20 20  =OP_Seek ){.    
2ad30 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2ad40 33 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  3>=0 && pOp->p3<
2ad50 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
2ad60 20 20 20 20 70 54 61 62 43 75 72 20 3d 20 70 2d      pTabCur = p-
2ad70 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 33 5d 3b  >apCsr[pOp->p3];
2ad80 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
2ad90 54 61 62 43 75 72 21 3d 30 20 29 3b 0a 20 20 20  TabCur!=0 );.   
2ada0 20 20 20 61 73 73 65 72 74 28 20 70 54 61 62 43     assert( pTabC
2adb0 75 72 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  ur->eCurType==CU
2adc0 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
2add0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 54 61       assert( pTa
2ade0 62 43 75 72 2d 3e 75 63 2e 70 43 75 72 73 6f 72  bCur->uc.pCursor
2adf0 21 3d 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73  !=0 );.      ass
2ae00 65 72 74 28 20 70 54 61 62 43 75 72 2d 3e 69 73  ert( pTabCur->is
2ae10 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 20 20 70  Table );.      p
2ae20 54 61 62 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20  TabCur->nullRow 
2ae30 3d 20 30 3b 0a 20 20 20 20 20 20 70 54 61 62 43  = 0;.      pTabC
2ae40 75 72 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74  ur->movetoTarget
2ae50 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 20 20   = rowid;.      
2ae60 70 54 61 62 43 75 72 2d 3e 64 65 66 65 72 72 65  pTabCur->deferre
2ae70 64 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a 20 20 20  dMoveto = 1;.   
2ae80 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
2ae90 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52  p4type==P4_INTAR
2aea0 52 41 59 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 61  RAY || pOp->p4.a
2aeb0 69 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 70 54  i==0 );.      pT
2aec0 61 62 43 75 72 2d 3e 61 41 6c 74 4d 61 70 20 3d  abCur->aAltMap =
2aed0 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20 20 20   pOp->p4.ai;.   
2aee0 20 20 20 70 54 61 62 43 75 72 2d 3e 70 41 6c 74     pTabCur->pAlt
2aef0 43 75 72 73 6f 72 20 3d 20 70 43 3b 0a 20 20 20  Cursor = pC;.   
2af00 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 4f   }else{.      pO
2af10 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
2af20 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 20  ase(p, pOp);.   
2af30 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72     pOut->u.i = r
2af40 6f 77 69 64 3b 0a 20 20 20 20 20 20 70 4f 75 74  owid;.      pOut
2af50 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e  ->flags = MEM_In
2af60 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  t;.    }.  }else
2af70 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
2af80 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  p->opcode==OP_Id
2af90 78 52 6f 77 69 64 20 29 3b 0a 20 20 20 20 73 71  xRowid );.    sq
2afa0 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
2afb0 75 6c 6c 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  ull(&aMem[pOp->p
2afc0 32 5d 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  2]);.  }.  break
2afd0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2afe0 49 64 78 47 45 20 50 31 20 50 32 20 50 33 20 50  IdxGE P1 P2 P3 P
2aff0 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
2b000 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
2b010 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69  *.** The P4 regi
2b020 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69  ster values begi
2b030 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f  nning with P3 fo
2b040 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  rm an unpacked i
2b050 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61  ndex .** key tha
2b060 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d  t omits the PRIM
2b070 41 52 59 20 4b 45 59 2e 20 20 43 6f 6d 70 61 72  ARY KEY.  Compar
2b080 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65  e this key value
2b090 20 61 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64   against the ind
2b0a0 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69  ex .** that P1 i
2b0b0 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  s currently poin
2b0c0 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e  ting to, ignorin
2b0d0 67 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  g the PRIMARY KE
2b0e0 59 20 6f 72 20 52 4f 57 49 44 20 0a 2a 2a 20 66  Y or ROWID .** f
2b0f0 69 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64  ields at the end
2b100 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
2b110 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73  1 index entry is
2b120 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72   greater than or
2b130 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65   equal to the ke
2b140 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20  y value.** then 
2b150 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74 68  jump to P2.  Oth
2b160 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f  erwise fall thro
2b170 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
2b180 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
2b190 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 47 54  /* Opcode: IdxGT
2b1a0 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
2b1b0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
2b1c0 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P4].**.** 
2b1d0 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20  The P4 register 
2b1e0 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67  values beginning
2b1f0 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e   with P3 form an
2b200 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
2b210 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69  .** key that omi
2b220 74 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  ts the PRIMARY K
2b230 45 59 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69  EY.  Compare thi
2b240 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69  s key value agai
2b250 6e 73 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a  nst the index .*
2b260 2a 20 74 68 61 74 20 50 31 20 69 73 20 63 75 72  * that P1 is cur
2b270 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20  rently pointing 
2b280 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65  to, ignoring the
2b290 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20   PRIMARY KEY or 
2b2a0 52 4f 57 49 44 20 0a 2a 2a 20 66 69 65 6c 64 73  ROWID .** fields
2b2b0 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2a 0a   at the end..**.
2b2c0 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e 64  ** If the P1 ind
2b2d0 65 78 20 65 6e 74 72 79 20 69 73 20 67 72 65 61  ex entry is grea
2b2e0 74 65 72 20 74 68 61 6e 20 74 68 65 20 6b 65 79  ter than the key
2b2f0 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a   value.** then j
2b300 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74 68 65  ump to P2.  Othe
2b310 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75  rwise fall throu
2b320 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
2b330 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f  nstruction..*/./
2b340 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c 54 20  * Opcode: IdxLT 
2b350 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
2b360 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
2b370 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54  r[P3@P4].**.** T
2b380 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76  he P4 register v
2b390 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20  alues beginning 
2b3a0 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20  with P3 form an 
2b3b0 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a  unpacked index .
2b3c0 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74  ** key that omit
2b3d0 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  s the PRIMARY KE
2b3e0 59 20 6f 72 20 52 4f 57 49 44 2e 20 20 43 6f 6d  Y or ROWID.  Com
2b3f0 70 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61  pare this key va
2b400 6c 75 65 20 61 67 61 69 6e 73 74 0a 2a 2a 20 74  lue against.** t
2b410 68 65 20 69 6e 64 65 78 20 74 68 61 74 20 50 31  he index that P1
2b420 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f   is currently po
2b430 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72  inting to, ignor
2b440 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59 20  ing the PRIMARY 
2b450 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f 57 49 44 20  KEY or.** ROWID 
2b460 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e  on the P1 index.
2b470 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31  .**.** If the P1
2b480 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20   index entry is 
2b490 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65  less than the ke
2b4a0 79 20 76 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d  y value then jum
2b4b0 70 20 74 6f 20 50 32 2e 0a 2a 2a 20 4f 74 68 65  p to P2..** Othe
2b4c0 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75  rwise fall throu
2b4d0 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
2b4e0 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f  nstruction..*/./
2b4f0 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c 45 20  * Opcode: IdxLE 
2b500 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
2b510 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
2b520 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54  r[P3@P4].**.** T
2b530 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76  he P4 register v
2b540 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20  alues beginning 
2b550 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20  with P3 form an 
2b560 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a  unpacked index .
2b570 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74  ** key that omit
2b580 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  s the PRIMARY KE
2b590 59 20 6f 72 20 52 4f 57 49 44 2e 20 20 43 6f 6d  Y or ROWID.  Com
2b5a0 70 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61  pare this key va
2b5b0 6c 75 65 20 61 67 61 69 6e 73 74 0a 2a 2a 20 74  lue against.** t
2b5c0 68 65 20 69 6e 64 65 78 20 74 68 61 74 20 50 31  he index that P1
2b5d0 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f   is currently po
2b5e0 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72  inting to, ignor
2b5f0 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59 20  ing the PRIMARY 
2b600 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f 57 49 44 20  KEY or.** ROWID 
2b610 6f 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e  on the P1 index.
2b620 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31  .**.** If the P1
2b630 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20   index entry is 
2b640 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75  less than or equ
2b650 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61  al to the key va
2b660 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70 0a 2a 2a  lue then jump.**
2b670 20 74 6f 20 50 32 2e 20 4f 74 68 65 72 77 69 73   to P2. Otherwis
2b680 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  e fall through t
2b690 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
2b6a0 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
2b6b0 4f 50 5f 49 64 78 4c 45 3a 20 20 20 20 20 20 20  OP_IdxLE:       
2b6c0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61     /* jump */.ca
2b6d0 73 65 20 4f 50 5f 49 64 78 47 54 3a 20 20 20 20  se OP_IdxGT:    
2b6e0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
2b6f0 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c 54 3a 20  .case OP_IdxLT: 
2b700 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
2b710 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 47   */.case OP_IdxG
2b720 45 3a 20 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a  E:  {       /* j
2b730 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ump */.  VdbeCur
2b740 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72  sor *pC;.  int r
2b750 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65  es;.  UnpackedRe
2b760 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72  cord r;..  asser
2b770 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
2b780 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
2b790 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
2b7a0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
2b7b0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
2b7c0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
2b7d0 2d 3e 69 73 4f 72 64 65 72 65 64 20 29 3b 0a 20  ->isOrdered );. 
2b7e0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
2b7f0 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
2b800 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74  TREE );.  assert
2b810 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  ( pC->uc.pCursor
2b820 21 3d 30 29 3b 0a 20 20 61 73 73 65 72 74 28 20  !=0);.  assert( 
2b830 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
2b840 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  to==0 );.  asser
2b850 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c  t( pOp->p5==0 ||
2b860 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20   pOp->p5==1 );. 
2b870 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
2b880 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
2b890 3b 0a 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d  ;.  r.pKeyInfo =
2b8a0 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20   pC->pKeyInfo;. 
2b8b0 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36   r.nField = (u16
2b8c0 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 69 66  )pOp->p4.i;.  if
2b8d0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3c 4f 50  ( pOp->opcode<OP
2b8e0 5f 49 64 78 4c 54 20 29 7b 0a 20 20 20 20 61 73  _IdxLT ){.    as
2b8f0 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
2b900 65 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c 7c 20 70  e==OP_IdxLE || p
2b910 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
2b920 64 78 47 54 20 29 3b 0a 20 20 20 20 72 2e 64 65  dxGT );.    r.de
2b930 66 61 75 6c 74 5f 72 63 20 3d 20 2d 31 3b 0a 20  fault_rc = -1;. 
2b940 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
2b950 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
2b960 3d 4f 50 5f 49 64 78 47 45 20 7c 7c 20 70 4f 70  =OP_IdxGE || pOp
2b970 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
2b980 4c 54 20 29 3b 0a 20 20 20 20 72 2e 64 65 66 61  LT );.    r.defa
2b990 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20 7d 0a  ult_rc = 0;.  }.
2b9a0 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d    r.aMem = &aMem
2b9b0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65  [pOp->p3];.#ifde
2b9c0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
2b9d0 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d   { int i; for(i=
2b9e0 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69  0; i<r.nField; i
2b9f0 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49  ++) assert( memI
2ba00 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69  sValid(&r.aMem[i
2ba10 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20  ]) ); }.#endif. 
2ba20 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f   res = 0;  /* No
2ba30 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20  t needed.  Only 
2ba40 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20  used to silence 
2ba50 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20  a warning. */.  
2ba60 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
2ba70 49 64 78 4b 65 79 43 6f 6d 70 61 72 65 28 64 62  IdxKeyCompare(db
2ba80 2c 20 70 43 2c 20 26 72 2c 20 26 72 65 73 29 3b  , pC, &r, &res);
2ba90 0a 20 20 61 73 73 65 72 74 28 20 28 4f 50 5f 49  .  assert( (OP_I
2baa0 64 78 4c 45 26 31 29 3d 3d 28 4f 50 5f 49 64 78  dxLE&1)==(OP_Idx
2bab0 4c 54 26 31 29 20 26 26 20 28 4f 50 5f 49 64 78  LT&1) && (OP_Idx
2bac0 47 45 26 31 29 3d 3d 28 4f 50 5f 49 64 78 47 54  GE&1)==(OP_IdxGT
2bad0 26 31 29 20 29 3b 0a 20 20 69 66 28 20 28 70 4f  &1) );.  if( (pO
2bae0 70 2d 3e 6f 70 63 6f 64 65 26 31 29 3d 3d 28 4f  p->opcode&1)==(O
2baf0 50 5f 49 64 78 4c 54 26 31 29 20 29 7b 0a 20 20  P_IdxLT&1) ){.  
2bb00 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
2bb10 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45 20  pcode==OP_IdxLE 
2bb20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
2bb30 4f 50 5f 49 64 78 4c 54 20 29 3b 0a 20 20 20 20  OP_IdxLT );.    
2bb40 72 65 73 20 3d 20 2d 72 65 73 3b 0a 20 20 7d 65  res = -res;.  }e
2bb50 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
2bb60 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
2bb70 5f 49 64 78 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f  _IdxGE || pOp->o
2bb80 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20  pcode==OP_IdxGT 
2bb90 29 3b 0a 20 20 20 20 72 65 73 2b 2b 3b 0a 20 20  );.    res++;.  
2bba0 7d 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  }.  VdbeBranchTa
2bbb0 6b 65 6e 28 72 65 73 3e 30 2c 32 29 3b 0a 20 20  ken(res>0,2);.  
2bbc0 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
2bbd0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
2bbe0 3b 0a 20 20 69 66 28 20 72 65 73 3e 30 20 29 20  ;.  if( res>0 ) 
2bbf0 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
2bc00 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2bc10 4f 70 63 6f 64 65 3a 20 44 65 73 74 72 6f 79 20  Opcode: Destroy 
2bc20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
2bc30 2a 2a 20 44 65 6c 65 74 65 20 61 6e 20 65 6e 74  ** Delete an ent
2bc40 69 72 65 20 64 61 74 61 62 61 73 65 20 74 61 62  ire database tab
2bc50 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73  le or index whos
2bc60 65 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 74  e root page in t
2bc70 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 66  he database.** f
2bc80 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79 20  ile is given by 
2bc90 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61  P1..**.** The ta
2bca0 62 6c 65 20 62 65 69 6e 67 20 64 65 73 74 72 6f  ble being destro
2bcb0 79 65 64 20 69 73 20 69 6e 20 74 68 65 20 6d 61  yed is in the ma
2bcc0 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
2bcd0 20 69 66 20 50 33 3d 3d 30 2e 20 20 49 66 0a 2a   if P3==0.  If.*
2bce0 2a 20 50 33 3d 3d 31 20 74 68 65 6e 20 74 68 65  * P3==1 then the
2bcf0 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c 65   table to be cle
2bd00 61 72 20 69 73 20 69 6e 20 74 68 65 20 61 75 78  ar is in the aux
2bd10 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20  iliary database 
2bd20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73 20  file.** that is 
2bd30 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 61  used to store ta
2bd40 62 6c 65 73 20 63 72 65 61 74 65 20 75 73 69 6e  bles create usin
2bd50 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41  g CREATE TEMPORA
2bd60 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20  RY TABLE..**.** 
2bd70 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20 69 73  If AUTOVACUUM is
2bd80 20 65 6e 61 62 6c 65 64 20 74 68 65 6e 20 69 74   enabled then it
2bd90 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74 68 61   is possible tha
2bda0 74 20 61 6e 6f 74 68 65 72 20 72 6f 6f 74 20 70  t another root p
2bdb0 61 67 65 0a 2a 2a 20 6d 69 67 68 74 20 62 65 20  age.** might be 
2bdc0 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20 6e  moved into the n
2bdd0 65 77 6c 79 20 64 65 6c 65 74 65 64 20 72 6f 6f  ewly deleted roo
2bde0 74 20 70 61 67 65 20 69 6e 20 6f 72 64 65 72 20  t page in order 
2bdf0 74 6f 20 6b 65 65 70 20 61 6c 6c 0a 2a 2a 20 72  to keep all.** r
2be00 6f 6f 74 20 70 61 67 65 73 20 63 6f 6e 74 69 67  oot pages contig
2be10 75 6f 75 73 20 61 74 20 74 68 65 20 62 65 67 69  uous at the begi
2be20 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 64 61 74  nning of the dat
2be30 61 62 61 73 65 2e 20 20 54 68 65 20 66 6f 72 6d  abase.  The form
2be40 65 72 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20 74  er.** value of t
2be50 68 65 20 72 6f 6f 74 20 70 61 67 65 20 74 68 61  he root page tha
2be60 74 20 6d 6f 76 65 64 20 2d 20 69 74 73 20 76 61  t moved - its va
2be70 6c 75 65 20 62 65 66 6f 72 65 20 74 68 65 20 6d  lue before the m
2be80 6f 76 65 20 6f 63 63 75 72 72 65 64 20 2d 0a 2a  ove occurred -.*
2be90 2a 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  * is stored in r
2bea0 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66 20  egister P2.  If 
2beb0 6e 6f 20 70 61 67 65 20 0a 2a 2a 20 6d 6f 76 65  no page .** move
2bec0 6d 65 6e 74 20 77 61 73 20 72 65 71 75 69 72 65  ment was require
2bed0 64 20 28 62 65 63 61 75 73 65 20 74 68 65 20 74  d (because the t
2bee0 61 62 6c 65 20 62 65 69 6e 67 20 64 72 6f 70 70  able being dropp
2bef0 65 64 20 77 61 73 20 61 6c 72 65 61 64 79 20 0a  ed was already .
2bf00 2a 2a 20 74 68 65 20 6c 61 73 74 20 6f 6e 65 20  ** the last one 
2bf10 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 29  in the database)
2bf20 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 69 73 20   then a zero is 
2bf30 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
2bf40 65 72 20 50 32 2e 0a 2a 2a 20 49 66 20 41 55 54  er P2..** If AUT
2bf50 4f 56 41 43 55 55 4d 20 69 73 20 64 69 73 61 62  OVACUUM is disab
2bf60 6c 65 64 20 74 68 65 6e 20 61 20 7a 65 72 6f 20  led then a zero 
2bf70 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
2bf80 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
2bf90 53 65 65 20 61 6c 73 6f 3a 20 43 6c 65 61 72 0a  See also: Clear.
2bfa0 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 73 74 72  */.case OP_Destr
2bfb0 6f 79 3a 20 7b 20 20 20 20 20 2f 2a 20 6f 75 74  oy: {     /* out
2bfc0 32 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 6f 76 65  2 */.  int iMove
2bfd0 64 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 0a 20  d;.  int iDb;.. 
2bfe0 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
2bff0 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 73 73  Only==0 );.  ass
2c000 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 31 20 29  ert( pOp->p1>1 )
2c010 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ;.  pOut = out2P
2c020 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
2c030 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  );.  pOut->flags
2c040 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 69   = MEM_Null;.  i
2c050 66 28 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64  f( db->nVdbeRead
2c060 20 3e 20 64 62 2d 3e 6e 56 44 65 73 74 72 6f 79   > db->nVDestroy
2c070 2b 31 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  +1 ){.    rc = S
2c080 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20  QLITE_LOCKED;.  
2c090 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e    p->errorAction
2c0a0 20 3d 20 4f 45 5f 41 62 6f 72 74 3b 0a 20 20 20   = OE_Abort;.   
2c0b0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
2c0c0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 65 6c 73  to_error;.  }els
2c0d0 65 7b 0a 20 20 20 20 69 44 62 20 3d 20 70 4f 70  e{.    iDb = pOp
2c0e0 2d 3e 70 33 3b 0a 20 20 20 20 61 73 73 65 72 74  ->p3;.    assert
2c0f0 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e  ( DbMaskTest(p->
2c100 62 74 72 65 65 4d 61 73 6b 2c 20 69 44 62 29 20  btreeMask, iDb) 
2c110 29 3b 0a 20 20 20 20 69 4d 6f 76 65 64 20 3d 20  );.    iMoved = 
2c120 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65  0;  /* Not neede
2c130 64 2e 20 20 4f 6e 6c 79 20 74 6f 20 73 69 6c 65  d.  Only to sile
2c140 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a  nce a warning. *
2c150 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  /.    rc = sqlit
2c160 65 33 42 74 72 65 65 44 72 6f 70 54 61 62 6c 65  e3BtreeDropTable
2c170 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42  (db->aDb[iDb].pB
2c180 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 26 69 4d 6f  t, pOp->p1, &iMo
2c190 76 65 64 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  ved);.    pOut->
2c1a0 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
2c1b0 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
2c1c0 20 69 4d 6f 76 65 64 3b 0a 20 20 20 20 69 66 28   iMoved;.    if(
2c1d0 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
2c1e0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23  _due_to_error;.#
2c1f0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2c200 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20  IT_AUTOVACUUM.  
2c210 20 20 69 66 28 20 69 4d 6f 76 65 64 21 3d 30 20    if( iMoved!=0 
2c220 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
2c230 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 64 62  RootPageMoved(db
2c240 2c 20 69 44 62 2c 20 69 4d 6f 76 65 64 2c 20 70  , iDb, iMoved, p
2c250 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 20 20 2f  Op->p1);.      /
2c260 2a 20 41 6c 6c 20 4f 50 5f 44 65 73 74 72 6f 79  * All OP_Destroy
2c270 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f 63 63 75   operations occu
2c280 72 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 62 74  r on the same bt
2c290 72 65 65 20 2a 2f 0a 20 20 20 20 20 20 61 73 73  ree */.      ass
2c2a0 65 72 74 28 20 72 65 73 65 74 53 63 68 65 6d 61  ert( resetSchema
2c2b0 4f 6e 46 61 75 6c 74 3d 3d 30 20 7c 7c 20 72 65  OnFault==0 || re
2c2c0 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74  setSchemaOnFault
2c2d0 3d 3d 69 44 62 2b 31 20 29 3b 0a 20 20 20 20 20  ==iDb+1 );.     
2c2e0 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61   resetSchemaOnFa
2c2f0 75 6c 74 20 3d 20 69 44 62 2b 31 3b 0a 20 20 20  ult = iDb+1;.   
2c300 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20   }.#endif.  }.  
2c310 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2c320 6f 64 65 3a 20 43 6c 65 61 72 20 50 31 20 50 32  ode: Clear P1 P2
2c330 20 50 33 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65   P3.**.** Delete
2c340 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 6f 66   all contents of
2c350 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61   the database ta
2c360 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f  ble or index who
2c370 73 65 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20  se root page.** 
2c380 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
2c390 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79  file is given by
2c3a0 20 50 31 2e 20 20 42 75 74 2c 20 75 6e 6c 69 6b   P1.  But, unlik
2c3b0 65 20 44 65 73 74 72 6f 79 2c 20 64 6f 20 6e 6f  e Destroy, do no
2c3c0 74 0a 2a 2a 20 72 65 6d 6f 76 65 20 74 68 65 20  t.** remove the 
2c3d0 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 66  table or index f
2c3e0 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
2c3f0 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65   file..**.** The
2c400 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65   table being cle
2c410 61 72 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69  ar is in the mai
2c420 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
2c430 69 66 20 50 32 3d 3d 30 2e 20 20 49 66 0a 2a 2a  if P2==0.  If.**
2c440 20 50 32 3d 3d 31 20 74 68 65 6e 20 74 68 65 20   P2==1 then the 
2c450 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61  table to be clea
2c460 72 20 69 73 20 69 6e 20 74 68 65 20 61 75 78 69  r is in the auxi
2c470 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66  liary database f
2c480 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75  ile.** that is u
2c490 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62  sed to store tab
2c4a0 6c 65 73 20 63 72 65 61 74 65 20 75 73 69 6e 67  les create using
2c4b0 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52   CREATE TEMPORAR
2c4c0 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49  Y TABLE..**.** I
2c4d0 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 69  f the P3 value i
2c4e0 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
2c4f0 20 74 68 65 20 74 61 62 6c 65 20 72 65 66 65 72   the table refer
2c500 72 65 64 20 74 6f 20 6d 75 73 74 20 62 65 20 61  red to must be a
2c510 6e 0a 2a 2a 20 69 6e 74 6b 65 79 20 74 61 62 6c  n.** intkey tabl
2c520 65 20 28 61 6e 20 53 51 4c 20 74 61 62 6c 65 2c  e (an SQL table,
2c530 20 6e 6f 74 20 61 6e 20 69 6e 64 65 78 29 2e 20   not an index). 
2c540 49 6e 20 74 68 69 73 20 63 61 73 65 20 74 68 65  In this case the
2c550 20 72 6f 77 20 63 68 61 6e 67 65 20 0a 2a 2a 20   row change .** 
2c560 63 6f 75 6e 74 20 69 73 20 69 6e 63 72 65 6d 65  count is increme
2c570 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62  nted by the numb
2c580 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68  er of rows in th
2c590 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c  e table being cl
2c5a0 65 61 72 65 64 2e 20 0a 2a 2a 20 49 66 20 50 33  eared. .** If P3
2c5b0 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
2c5c0 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20   zero, then the 
2c5d0 76 61 6c 75 65 20 73 74 6f 72 65 64 20 69 6e 20  value stored in 
2c5e0 72 65 67 69 73 74 65 72 20 50 33 20 69 73 0a 2a  register P3 is.*
2c5f0 2a 20 61 6c 73 6f 20 69 6e 63 72 65 6d 65 6e 74  * also increment
2c600 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72  ed by the number
2c610 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20   of rows in the 
2c620 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61  table being clea
2c630 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  red..**.** See a
2c640 6c 73 6f 3a 20 44 65 73 74 72 6f 79 0a 2a 2f 0a  lso: Destroy.*/.
2c650 63 61 73 65 20 4f 50 5f 43 6c 65 61 72 3a 20 7b  case OP_Clear: {
2c660 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 0a  .  int nChange;.
2c670 20 0a 20 20 6e 43 68 61 6e 67 65 20 3d 20 30 3b   .  nChange = 0;
2c680 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65  .  assert( p->re
2c690 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61  adOnly==0 );.  a
2c6a0 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73  ssert( DbMaskTes
2c6b0 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20  t(p->btreeMask, 
2c6c0 70 4f 70 2d 3e 70 32 29 20 29 3b 0a 20 20 72 63  pOp->p2) );.  rc
2c6d0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
2c6e0 6c 65 61 72 54 61 62 6c 65 28 0a 20 20 20 20 20  learTable(.     
2c6f0 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 32   db->aDb[pOp->p2
2c700 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20  ].pBt, pOp->p1, 
2c710 28 70 4f 70 2d 3e 70 33 20 3f 20 26 6e 43 68 61  (pOp->p3 ? &nCha
2c720 6e 67 65 20 3a 20 30 29 0a 20 20 29 3b 0a 20 20  nge : 0).  );.  
2c730 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20  if( pOp->p3 ){. 
2c740 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 2b 3d     p->nChange +=
2c750 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 69 66   nChange;.    if
2c760 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20  ( pOp->p3>0 ){. 
2c770 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d       assert( mem
2c780 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f  IsValid(&aMem[pO
2c790 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20  p->p3]) );.     
2c7a0 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
2c7b0 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  e(p, &aMem[pOp->
2c7c0 70 33 5d 29 3b 0a 20 20 20 20 20 20 61 4d 65 6d  p3]);.      aMem
2c7d0 5b 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20 2b 3d  [pOp->p3].u.i +=
2c7e0 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 7d 0a   nChange;.    }.
2c7f0 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67    }.  if( rc ) g
2c800 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
2c810 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b  _error;.  break;
2c820 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
2c830 65 73 65 74 53 6f 72 74 65 72 20 50 31 20 2a 20  esetSorter P1 * 
2c840 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65  * * *.**.** Dele
2c850 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20  te all contents 
2c860 66 72 6f 6d 20 74 68 65 20 65 70 68 65 6d 65 72  from the ephemer
2c870 61 6c 20 74 61 62 6c 65 20 6f 72 20 73 6f 72 74  al table or sort
2c880 65 72 0a 2a 2a 20 74 68 61 74 20 69 73 20 6f 70  er.** that is op
2c890 65 6e 20 6f 6e 20 63 75 72 73 6f 72 20 50 31 2e  en on cursor P1.
2c8a0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
2c8b0 64 65 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f  de only works fo
2c8c0 72 20 63 75 72 73 6f 72 73 20 75 73 65 64 20 66  r cursors used f
2c8d0 6f 72 20 73 6f 72 74 69 6e 67 20 61 6e 64 0a 2a  or sorting and.*
2c8e0 2a 20 6f 70 65 6e 65 64 20 77 69 74 68 20 4f 50  * opened with OP
2c8f0 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f  _OpenEphemeral o
2c900 72 20 4f 50 5f 53 6f 72 74 65 72 4f 70 65 6e 2e  r OP_SorterOpen.
2c910 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65  .*/.case OP_Rese
2c920 74 53 6f 72 74 65 72 3a 20 7b 0a 20 20 56 64 62  tSorter: {.  Vdb
2c930 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 0a 20  eCursor *pC;. . 
2c940 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
2c950 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
2c960 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
2c970 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
2c980 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2c990 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66 28 20   pC!=0 );.  if( 
2c9a0 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 7b 0a  isSorter(pC) ){.
2c9b0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
2c9c0 6f 72 74 65 72 52 65 73 65 74 28 64 62 2c 20 70  orterReset(db, p
2c9d0 43 2d 3e 75 63 2e 70 53 6f 72 74 65 72 29 3b 0a  C->uc.pSorter);.
2c9e0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
2c9f0 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
2ca00 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
2ca10 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
2ca20 70 43 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c 20  pC->isEphemeral 
2ca30 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
2ca40 74 65 33 42 74 72 65 65 43 6c 65 61 72 54 61 62  te3BtreeClearTab
2ca50 6c 65 4f 66 43 75 72 73 6f 72 28 70 43 2d 3e 75  leOfCursor(pC->u
2ca60 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20  c.pCursor);.    
2ca70 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
2ca80 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
2ca90 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
2caa0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65  ../* Opcode: Cre
2cab0 61 74 65 54 61 62 6c 65 20 50 31 20 50 32 20 2a  ateTable P1 P2 *
2cac0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
2cad0 3a 20 72 5b 50 32 5d 3d 72 6f 6f 74 20 69 44 62  : r[P2]=root iDb
2cae0 3d 50 31 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61  =P1.**.** Alloca
2caf0 74 65 20 61 20 6e 65 77 20 74 61 62 6c 65 20 69  te a new table i
2cb00 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  n the main datab
2cb10 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d  ase file if P1==
2cb20 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61  0 or in the.** a
2cb30 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
2cb40 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 31 20  e file if P1==1 
2cb50 6f 72 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65  or in an attache
2cb60 64 20 64 61 74 61 62 61 73 65 20 69 66 0a 2a 2a  d database if.**
2cb70 20 50 31 3e 31 2e 20 20 57 72 69 74 65 20 74 68   P1>1.  Write th
2cb80 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62  e root page numb
2cb90 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20 74 61  er of the new ta
2cba0 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69  ble into.** regi
2cbb0 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68  ster P2.**.** Th
2cbc0 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74  e difference bet
2cbd0 77 65 65 6e 20 61 20 74 61 62 6c 65 20 61 6e 64  ween a table and
2cbe0 20 61 6e 20 69 6e 64 65 78 20 69 73 20 74 68 69   an index is thi
2cbf0 73 3a 20 20 41 20 74 61 62 6c 65 20 6d 75 73 74  s:  A table must
2cc00 0a 2a 2a 20 68 61 76 65 20 61 20 34 2d 62 79 74  .** have a 4-byt
2cc10 65 20 69 6e 74 65 67 65 72 20 6b 65 79 20 61 6e  e integer key an
2cc20 64 20 63 61 6e 20 68 61 76 65 20 61 72 62 69 74  d can have arbit
2cc30 72 61 72 79 20 64 61 74 61 2e 20 20 41 6e 20 69  rary data.  An i
2cc40 6e 64 65 78 0a 2a 2a 20 68 61 73 20 61 6e 20 61  ndex.** has an a
2cc50 72 62 69 74 72 61 72 79 20 6b 65 79 20 62 75 74  rbitrary key but
2cc60 20 6e 6f 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20   no data..**.** 
2cc70 53 65 65 20 61 6c 73 6f 3a 20 43 72 65 61 74 65  See also: Create
2cc80 49 6e 64 65 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  Index.*/./* Opco
2cc90 64 65 3a 20 43 72 65 61 74 65 49 6e 64 65 78 20  de: CreateIndex 
2cca0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
2ccb0 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72  ynopsis: r[P2]=r
2ccc0 6f 6f 74 20 69 44 62 3d 50 31 0a 2a 2a 0a 2a 2a  oot iDb=P1.**.**
2ccd0 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77 20   Allocate a new 
2cce0 69 6e 64 65 78 20 69 6e 20 74 68 65 20 6d 61 69  index in the mai
2ccf0 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
2cd00 69 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74  if P1==0 or in t
2cd10 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79 20  he.** auxiliary 
2cd20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
2cd30 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20   P1==1 or in an 
2cd40 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
2cd50 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57  e if.** P1>1.  W
2cd60 72 69 74 65 20 74 68 65 20 72 6f 6f 74 20 70 61  rite the root pa
2cd70 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  ge number of the
2cd80 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a   new table into.
2cd90 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  ** register P2..
2cda0 2a 2a 0a 2a 2a 20 53 65 65 20 64 6f 63 75 6d 65  **.** See docume
2cdb0 6e 74 61 74 69 6f 6e 20 6f 6e 20 4f 50 5f 43 72  ntation on OP_Cr
2cdc0 65 61 74 65 54 61 62 6c 65 20 66 6f 72 20 61 64  eateTable for ad
2cdd0 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
2cde0 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
2cdf0 5f 43 72 65 61 74 65 49 6e 64 65 78 3a 20 20 20  _CreateIndex:   
2ce00 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
2ce10 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65 61   */.case OP_Crea
2ce20 74 65 54 61 62 6c 65 3a 20 7b 20 20 20 20 20 20  teTable: {      
2ce30 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20      /* out2 */. 
2ce40 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 69 6e 74   int pgno;.  int
2ce50 20 66 6c 61 67 73 3b 0a 20 20 44 62 20 2a 70 44   flags;.  Db *pD
2ce60 62 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74  b;..  pOut = out
2ce70 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
2ce80 4f 70 29 3b 0a 20 20 70 67 6e 6f 20 3d 20 30 3b  Op);.  pgno = 0;
2ce90 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2cea0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
2ceb0 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
2cec0 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74  sert( DbMaskTest
2ced0 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70  (p->btreeMask, p
2cee0 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73 73  Op->p1) );.  ass
2cef0 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
2cf00 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26  ==0 );.  pDb = &
2cf10 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
2cf20 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44 62 2d  ;.  assert( pDb-
2cf30 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20 69 66 28  >pBt!=0 );.  if(
2cf40 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
2cf50 5f 43 72 65 61 74 65 54 61 62 6c 65 20 29 7b 0a  _CreateTable ){.
2cf60 20 20 20 20 2f 2a 20 66 6c 61 67 73 20 3d 20 42      /* flags = B
2cf70 54 52 45 45 5f 49 4e 54 4b 45 59 3b 20 2a 2f 0a  TREE_INTKEY; */.
2cf80 20 20 20 20 66 6c 61 67 73 20 3d 20 42 54 52 45      flags = BTRE
2cf90 45 5f 49 4e 54 4b 45 59 3b 0a 20 20 7d 65 6c 73  E_INTKEY;.  }els
2cfa0 65 7b 0a 20 20 20 20 66 6c 61 67 73 20 3d 20 42  e{.    flags = B
2cfb0 54 52 45 45 5f 42 4c 4f 42 4b 45 59 3b 0a 20 20  TREE_BLOBKEY;.  
2cfc0 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  }.  rc = sqlite3
2cfd0 42 74 72 65 65 43 72 65 61 74 65 54 61 62 6c 65  BtreeCreateTable
2cfe0 28 70 44 62 2d 3e 70 42 74 2c 20 26 70 67 6e 6f  (pDb->pBt, &pgno
2cff0 2c 20 66 6c 61 67 73 29 3b 0a 20 20 69 66 28 20  , flags);.  if( 
2d000 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
2d010 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
2d020 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 67 6e 6f  pOut->u.i = pgno
2d030 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
2d040 20 4f 70 63 6f 64 65 3a 20 50 61 72 73 65 53 63   Opcode: ParseSc
2d050 68 65 6d 61 20 50 31 20 2a 20 2a 20 50 34 20 2a  hema P1 * * P4 *
2d060 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 61 6e 64 20  .**.** Read and 
2d070 70 61 72 73 65 20 61 6c 6c 20 65 6e 74 72 69 65  parse all entrie
2d080 73 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 49 54  s from the SQLIT
2d090 45 5f 4d 41 53 54 45 52 20 74 61 62 6c 65 20 6f  E_MASTER table o
2d0a0 66 20 64 61 74 61 62 61 73 65 20 50 31 0a 2a 2a  f database P1.**
2d0b0 20 74 68 61 74 20 6d 61 74 63 68 20 74 68 65 20   that match the 
2d0c0 57 48 45 52 45 20 63 6c 61 75 73 65 20 50 34 2e  WHERE clause P4.
2d0d0 20 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63   .**.** This opc
2d0e0 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20  ode invokes the 
2d0f0 70 61 72 73 65 72 20 74 6f 20 63 72 65 61 74 65  parser to create
2d100 20 61 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d   a new virtual m
2d110 61 63 68 69 6e 65 2c 0a 2a 2a 20 74 68 65 6e 20  achine,.** then 
2d120 72 75 6e 73 20 74 68 65 20 6e 65 77 20 76 69 72  runs the new vir
2d130 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49  tual machine.  I
2d140 74 20 69 73 20 74 68 75 73 20 61 20 72 65 2d 65  t is thus a re-e
2d150 6e 74 72 61 6e 74 20 6f 70 63 6f 64 65 2e 0a 2a  ntrant opcode..*
2d160 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 73 65 53  /.case OP_ParseS
2d170 63 68 65 6d 61 3a 20 7b 0a 20 20 69 6e 74 20 69  chema: {.  int i
2d180 44 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  Db;.  const char
2d190 20 2a 7a 4d 61 73 74 65 72 3b 0a 20 20 63 68 61   *zMaster;.  cha
2d1a0 72 20 2a 7a 53 71 6c 3b 0a 20 20 49 6e 69 74 44  r *zSql;.  InitD
2d1b0 61 74 61 20 69 6e 69 74 44 61 74 61 3b 0a 0a 20  ata initData;.. 
2d1c0 20 2f 2a 20 41 6e 79 20 70 72 65 70 61 72 65 64   /* Any prepared
2d1d0 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20   statement that 
2d1e0 69 6e 76 6f 6b 65 73 20 74 68 69 73 20 6f 70 63  invokes this opc
2d1f0 6f 64 65 20 77 69 6c 6c 20 68 6f 6c 64 20 6d 75  ode will hold mu
2d200 74 65 78 65 73 0a 20 20 2a 2a 20 6f 6e 20 65 76  texes.  ** on ev
2d210 65 72 79 20 62 74 72 65 65 2e 20 20 54 68 69 73  ery btree.  This
2d220 20 69 73 20 61 20 70 72 65 72 65 71 75 69 73 69   is a prerequisi
2d230 74 65 20 66 6f 72 20 69 6e 76 6f 6b 69 6e 67 20  te for invoking 
2d240 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 49 6e 69  .  ** sqlite3Ini
2d250 74 43 61 6c 6c 62 61 63 6b 28 29 2e 0a 20 20 2a  tCallback()..  *
2d260 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
2d270 44 45 42 55 47 0a 20 20 66 6f 72 28 69 44 62 3d  DEBUG.  for(iDb=
2d280 30 3b 20 69 44 62 3c 64 62 2d 3e 6e 44 62 3b 20  0; iDb<db->nDb; 
2d290 69 44 62 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65  iDb++){.    asse
2d2a0 72 74 28 20 69 44 62 3d 3d 31 20 7c 7c 20 73 71  rt( iDb==1 || sq
2d2b0 6c 69 74 65 33 42 74 72 65 65 48 6f 6c 64 73 4d  lite3BtreeHoldsM
2d2c0 75 74 65 78 28 64 62 2d 3e 61 44 62 5b 69 44 62  utex(db->aDb[iDb
2d2d0 5d 2e 70 42 74 29 20 29 3b 0a 20 20 7d 0a 23 65  ].pBt) );.  }.#e
2d2e0 6e 64 69 66 0a 0a 20 20 69 44 62 20 3d 20 70 4f  ndif..  iDb = pO
2d2f0 70 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72 74 28  p->p1;.  assert(
2d300 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64   iDb>=0 && iDb<d
2d310 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
2d320 72 74 28 20 44 62 48 61 73 50 72 6f 70 65 72 74  rt( DbHasPropert
2d330 79 28 64 62 2c 20 69 44 62 2c 20 44 42 5f 53 63  y(db, iDb, DB_Sc
2d340 68 65 6d 61 4c 6f 61 64 65 64 29 20 29 3b 0a 20  hemaLoaded) );. 
2d350 20 2f 2a 20 55 73 65 64 20 74 6f 20 62 65 20 61   /* Used to be a
2d360 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 2a 2f 20   conditional */ 
2d370 7b 0a 20 20 20 20 7a 4d 61 73 74 65 72 20 3d 20  {.    zMaster = 
2d380 53 43 48 45 4d 41 5f 54 41 42 4c 45 28 69 44 62  SCHEMA_TABLE(iDb
2d390 29 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e  );.    initData.
2d3a0 64 62 20 3d 20 64 62 3b 0a 20 20 20 20 69 6e 69  db = db;.    ini
2d3b0 74 44 61 74 61 2e 69 44 62 20 3d 20 70 4f 70 2d  tData.iDb = pOp-
2d3c0 3e 70 31 3b 0a 20 20 20 20 69 6e 69 74 44 61 74  >p1;.    initDat
2d3d0 61 2e 70 7a 45 72 72 4d 73 67 20 3d 20 26 70 2d  a.pzErrMsg = &p-
2d3e0 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20 7a 53  >zErrMsg;.    zS
2d3f0 71 6c 20 3d 20 73 71 6c 69 74 65 33 4d 50 72 69  ql = sqlite3MPri
2d400 6e 74 66 28 64 62 2c 0a 20 20 20 20 20 20 20 22  ntf(db,.       "
2d410 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20 72 6f 6f  SELECT name, roo
2d420 74 70 61 67 65 2c 20 73 71 6c 20 46 52 4f 4d 20  tpage, sql FROM 
2d430 27 25 71 27 2e 25 73 20 57 48 45 52 45 20 25 73  '%q'.%s WHERE %s
2d440 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64 22   ORDER BY rowid"
2d450 2c 0a 20 20 20 20 20 20 20 64 62 2d 3e 61 44 62  ,.       db->aDb
2d460 5b 69 44 62 5d 2e 7a 4e 61 6d 65 2c 20 7a 4d 61  [iDb].zName, zMa
2d470 73 74 65 72 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  ster, pOp->p4.z)
2d480 3b 0a 20 20 20 20 69 66 28 20 7a 53 71 6c 3d 3d  ;.    if( zSql==
2d490 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  0 ){.      rc = 
2d4a0 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50  SQLITE_NOMEM_BKP
2d4b0 54 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  T;.    }else{.  
2d4c0 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
2d4d0 69 6e 69 74 2e 62 75 73 79 3d 3d 30 20 29 3b 0a  init.busy==0 );.
2d4e0 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62        db->init.b
2d4f0 75 73 79 20 3d 20 31 3b 0a 20 20 20 20 20 20 69  usy = 1;.      i
2d500 6e 69 74 44 61 74 61 2e 72 63 20 3d 20 53 51 4c  nitData.rc = SQL
2d510 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 61 73  ITE_OK;.      as
2d520 73 65 72 74 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f  sert( !db->mallo
2d530 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 20 20 20  cFailed );.     
2d540 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78   rc = sqlite3_ex
2d550 65 63 28 64 62 2c 20 7a 53 71 6c 2c 20 73 71 6c  ec(db, zSql, sql
2d560 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b  ite3InitCallback
2d570 2c 20 26 69 6e 69 74 44 61 74 61 2c 20 30 29 3b  , &initData, 0);
2d580 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53  .      if( rc==S
2d590 51 4c 49 54 45 5f 4f 4b 20 29 20 72 63 20 3d 20  QLITE_OK ) rc = 
2d5a0 69 6e 69 74 44 61 74 61 2e 72 63 3b 0a 20 20 20  initData.rc;.   
2d5b0 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
2d5c0 28 64 62 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20  (db, zSql);.    
2d5d0 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20    db->init.busy 
2d5e0 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  = 0;.    }.  }. 
2d5f0 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 73   if( rc ){.    s
2d600 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63  qlite3ResetAllSc
2d610 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f  hemasOfConnectio
2d620 6e 28 64 62 29 3b 0a 20 20 20 20 69 66 28 20 72  n(db);.    if( r
2d630 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20  c==SQLITE_NOMEM 
2d640 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f  ){.      goto no
2d650 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20  _mem;.    }.    
2d660 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
2d670 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 62  o_error;.  }.  b
2d680 72 65 61 6b 3b 20 20 0a 7d 0a 0a 23 69 66 20 21  reak;  .}..#if !
2d690 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
2d6a0 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 0a 2f 2a 20  MIT_ANALYZE)./* 
2d6b0 4f 70 63 6f 64 65 3a 20 4c 6f 61 64 41 6e 61 6c  Opcode: LoadAnal
2d6c0 79 73 69 73 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  ysis P1 * * * *.
2d6d0 2a 2a 0a 2a 2a 20 52 65 61 64 20 74 68 65 20 73  **.** Read the s
2d6e0 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c  qlite_stat1 tabl
2d6f0 65 20 66 6f 72 20 64 61 74 61 62 61 73 65 20 50  e for database P
2d700 31 20 61 6e 64 20 6c 6f 61 64 20 74 68 65 20 63  1 and load the c
2d710 6f 6e 74 65 6e 74 0a 2a 2a 20 6f 66 20 74 68 61  ontent.** of tha
2d720 74 20 74 61 62 6c 65 20 69 6e 74 6f 20 74 68 65  t table into the
2d730 20 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78 20   internal index 
2d740 68 61 73 68 20 74 61 62 6c 65 2e 20 20 54 68 69  hash table.  Thi
2d750 73 20 77 69 6c 6c 20 63 61 75 73 65 0a 2a 2a 20  s will cause.** 
2d760 74 68 65 20 61 6e 61 6c 79 73 69 73 20 74 6f 20  the analysis to 
2d770 62 65 20 75 73 65 64 20 77 68 65 6e 20 70 72 65  be used when pre
2d780 70 61 72 69 6e 67 20 61 6c 6c 20 73 75 62 73 65  paring all subse
2d790 71 75 65 6e 74 20 71 75 65 72 69 65 73 2e 0a 2a  quent queries..*
2d7a0 2f 0a 63 61 73 65 20 4f 50 5f 4c 6f 61 64 41 6e  /.case OP_LoadAn
2d7b0 61 6c 79 73 69 73 3a 20 7b 0a 20 20 61 73 73 65  alysis: {.  asse
2d7c0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
2d7d0 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
2d7e0 62 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  b );.  rc = sqli
2d7f0 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28  te3AnalysisLoad(
2d800 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20  db, pOp->p1);.  
2d810 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
2d820 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
2d830 3b 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 23  ;.  break;  .}.#
2d840 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65  endif /* !define
2d850 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e  d(SQLITE_OMIT_AN
2d860 41 4c 59 5a 45 29 20 2a 2f 0a 0a 2f 2a 20 4f 70  ALYZE) */../* Op
2d870 63 6f 64 65 3a 20 44 72 6f 70 54 61 62 6c 65 20  code: DropTable 
2d880 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
2d890 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74  * Remove the int
2d8a0 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79  ernal (in-memory
2d8b0 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65  ) data structure
2d8c0 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a  s that describe.
2d8d0 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d  ** the table nam
2d8e0 65 64 20 50 34 20 69 6e 20 64 61 74 61 62 61 73  ed P4 in databas
2d8f0 65 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63  e P1.  This is c
2d900 61 6c 6c 65 64 20 61 66 74 65 72 20 61 20 74 61  alled after a ta
2d910 62 6c 65 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65  ble.** is droppe
2d920 64 20 66 72 6f 6d 20 64 69 73 6b 20 28 75 73 69  d from disk (usi
2d930 6e 67 20 74 68 65 20 44 65 73 74 72 6f 79 20 6f  ng the Destroy o
2d940 70 63 6f 64 65 29 20 69 6e 20 6f 72 64 65 72 20  pcode) in order 
2d950 74 6f 20 6b 65 65 70 20 0a 2a 2a 20 74 68 65 20  to keep .** the 
2d960 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65  internal represe
2d970 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a  ntation of the.*
2d980 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74  * schema consist
2d990 65 6e 74 20 77 69 74 68 20 77 68 61 74 20 69 73  ent with what is
2d9a0 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73   on disk..*/.cas
2d9b0 65 20 4f 50 5f 44 72 6f 70 54 61 62 6c 65 3a 20  e OP_DropTable: 
2d9c0 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  {.  sqlite3Unlin
2d9d0 6b 41 6e 64 44 65 6c 65 74 65 54 61 62 6c 65 28  kAndDeleteTable(
2d9e0 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  db, pOp->p1, pOp
2d9f0 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b  ->p4.z);.  break
2da00 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2da10 44 72 6f 70 49 6e 64 65 78 20 50 31 20 2a 20 2a  DropIndex P1 * *
2da20 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f   P4 *.**.** Remo
2da30 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ve the internal 
2da40 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61  (in-memory) data
2da50 20 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74   structures that
2da60 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65   describe.** the
2da70 20 69 6e 64 65 78 20 6e 61 6d 65 64 20 50 34 20   index named P4 
2da80 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20  in database P1. 
2da90 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20   This is called 
2daa0 61 66 74 65 72 20 61 6e 20 69 6e 64 65 78 0a 2a  after an index.*
2dab0 2a 20 69 73 20 64 72 6f 70 70 65 64 20 66 72 6f  * is dropped fro
2dac0 6d 20 64 69 73 6b 20 28 75 73 69 6e 67 20 74 68  m disk (using th
2dad0 65 20 44 65 73 74 72 6f 79 20 6f 70 63 6f 64 65  e Destroy opcode
2dae0 29 0a 2a 2a 20 69 6e 20 6f 72 64 65 72 20 74 6f  ).** in order to
2daf0 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72 6e   keep the intern
2db00 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  al representatio
2db10 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65  n of the.** sche
2db20 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69  ma consistent wi
2db30 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69  th what is on di
2db40 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  sk..*/.case OP_D
2db50 72 6f 70 49 6e 64 65 78 3a 20 7b 0a 20 20 73 71  ropIndex: {.  sq
2db60 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
2db70 6c 65 74 65 49 6e 64 65 78 28 64 62 2c 20 70 4f  leteIndex(db, pO
2db80 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a  p->p1, pOp->p4.z
2db90 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
2dba0 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 72  * Opcode: DropTr
2dbb0 69 67 67 65 72 20 50 31 20 2a 20 2a 20 50 34 20  igger P1 * * P4 
2dbc0 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74  *.**.** Remove t
2dbd0 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d  he internal (in-
2dbe0 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72  memory) data str
2dbf0 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73  uctures that des
2dc00 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 72 69  cribe.** the tri
2dc10 67 67 65 72 20 6e 61 6d 65 64 20 50 34 20 69 6e  gger named P4 in
2dc20 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 54   database P1.  T
2dc30 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66  his is called af
2dc40 74 65 72 20 61 20 74 72 69 67 67 65 72 0a 2a 2a  ter a trigger.**
2dc50 20 69 73 20 64 72 6f 70 70 65 64 20 66 72 6f 6d   is dropped from
2dc60 20 64 69 73 6b 20 28 75 73 69 6e 67 20 74 68 65   disk (using the
2dc70 20 44 65 73 74 72 6f 79 20 6f 70 63 6f 64 65 29   Destroy opcode)
2dc80 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65   in order to kee
2dc90 70 20 0a 2a 2a 20 74 68 65 20 69 6e 74 65 72 6e  p .** the intern
2dca0 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  al representatio
2dcb0 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65  n of the.** sche
2dcc0 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69  ma consistent wi
2dcd0 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69  th what is on di
2dce0 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  sk..*/.case OP_D
2dcf0 72 6f 70 54 72 69 67 67 65 72 3a 20 7b 0a 20 20  ropTrigger: {.  
2dd00 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
2dd10 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 64 62  DeleteTrigger(db
2dd20 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
2dd30 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  p4.z);.  break;.
2dd40 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  }...#ifndef SQLI
2dd50 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54  TE_OMIT_INTEGRIT
2dd60 59 5f 43 48 45 43 4b 0a 2f 2a 20 4f 70 63 6f 64  Y_CHECK./* Opcod
2dd70 65 3a 20 49 6e 74 65 67 72 69 74 79 43 6b 20 50  e: IntegrityCk P
2dd80 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
2dd90 0a 2a 2a 20 44 6f 20 61 6e 20 61 6e 61 6c 79 73  .** Do an analys
2dda0 69 73 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  is of the curren
2ddb0 74 6c 79 20 6f 70 65 6e 20 64 61 74 61 62 61 73  tly open databas
2ddc0 65 2e 20 20 53 74 6f 72 65 20 69 6e 0a 2a 2a 20  e.  Store in.** 
2ddd0 72 65 67 69 73 74 65 72 20 50 31 20 74 68 65 20  register P1 the 
2dde0 74 65 78 74 20 6f 66 20 61 6e 20 65 72 72 6f 72  text of an error
2ddf0 20 6d 65 73 73 61 67 65 20 64 65 73 63 72 69 62   message describ
2de00 69 6e 67 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73  ing any problems
2de10 2e 0a 2a 2a 20 49 66 20 6e 6f 20 70 72 6f 62 6c  ..** If no probl
2de20 65 6d 73 20 61 72 65 20 66 6f 75 6e 64 2c 20 73  ems are found, s
2de30 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20 72  tore a NULL in r
2de40 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a  egister P1..**.*
2de50 2a 20 54 68 65 20 72 65 67 69 73 74 65 72 20 50  * The register P
2de60 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6d  3 contains the m
2de70 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66  aximum number of
2de80 20 61 6c 6c 6f 77 65 64 20 65 72 72 6f 72 73 2e   allowed errors.
2de90 0a 2a 2a 20 41 74 20 6d 6f 73 74 20 72 65 67 28  .** At most reg(
2dea0 50 33 29 20 65 72 72 6f 72 73 20 77 69 6c 6c 20  P3) errors will 
2deb0 62 65 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 20  be reported..** 
2dec0 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
2ded0 74 68 65 20 61 6e 61 6c 79 73 69 73 20 73 74 6f  the analysis sto
2dee0 70 73 20 61 73 20 73 6f 6f 6e 20 61 73 20 72 65  ps as soon as re
2def0 67 28 50 31 29 20 65 72 72 6f 72 73 20 61 72 65  g(P1) errors are
2df00 20 0a 2a 2a 20 73 65 65 6e 2e 20 20 52 65 67 28   .** seen.  Reg(
2df10 50 31 29 20 69 73 20 75 70 64 61 74 65 64 20 77  P1) is updated w
2df20 69 74 68 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ith the number o
2df30 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e 69  f errors remaini
2df40 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 6f  ng..**.** The ro
2df50 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 73 20  ot page numbers 
2df60 6f 66 20 61 6c 6c 20 74 61 62 6c 65 73 20 69 6e  of all tables in
2df70 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61 72   the database ar
2df80 65 20 69 6e 74 65 67 65 72 73 0a 2a 2a 20 73 74  e integers.** st
2df90 6f 72 65 64 20 69 6e 20 50 34 5f 49 4e 54 41 52  ored in P4_INTAR
2dfa0 52 41 59 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2a  RAY argument..**
2dfb0 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 74  .** If P5 is not
2dfc0 20 7a 65 72 6f 2c 20 74 68 65 20 63 68 65 63 6b   zero, the check
2dfd0 20 69 73 20 64 6f 6e 65 20 6f 6e 20 74 68 65 20   is done on the 
2dfe0 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61  auxiliary databa
2dff0 73 65 0a 2a 2a 20 66 69 6c 65 2c 20 6e 6f 74 20  se.** file, not 
2e000 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
2e010 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  e file..**.** Th
2e020 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65  is opcode is use
2e030 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74  d to implement t
2e040 68 65 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65  he integrity_che
2e050 63 6b 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 63 61  ck pragma..*/.ca
2e060 73 65 20 4f 50 5f 49 6e 74 65 67 72 69 74 79 43  se OP_IntegrityC
2e070 6b 3a 20 7b 0a 20 20 69 6e 74 20 6e 52 6f 6f 74  k: {.  int nRoot
2e080 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ;      /* Number
2e090 20 6f 66 20 74 61 62 6c 65 73 20 74 6f 20 63 68   of tables to ch
2e0a0 65 63 6b 2e 20 20 28 4e 75 6d 62 65 72 20 6f 66  eck.  (Number of
2e0b0 20 72 6f 6f 74 20 70 61 67 65 73 2e 29 20 2a 2f   root pages.) */
2e0c0 0a 20 20 69 6e 74 20 2a 61 52 6f 6f 74 3b 20 20  .  int *aRoot;  
2e0d0 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 72     /* Array of r
2e0e0 6f 6f 74 70 61 67 65 20 6e 75 6d 62 65 72 73 20  ootpage numbers 
2e0f0 66 6f 72 20 74 61 62 6c 65 73 20 74 6f 20 62 65  for tables to be
2e100 20 63 68 65 63 6b 65 64 20 2a 2f 0a 20 20 69 6e   checked */.  in
2e110 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 2f 2a  t nErr;       /*
2e120 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72   Number of error
2e130 73 20 72 65 70 6f 72 74 65 64 20 2a 2f 0a 20 20  s reported */.  
2e140 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 20 20 20  char *z;        
2e150 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20 65  /* Text of the e
2e160 72 72 6f 72 20 72 65 70 6f 72 74 20 2a 2f 0a 20  rror report */. 
2e170 20 4d 65 6d 20 2a 70 6e 45 72 72 3b 20 20 20 20   Mem *pnErr;    
2e180 20 2f 2a 20 52 65 67 69 73 74 65 72 20 6b 65 65   /* Register kee
2e190 70 69 6e 67 20 74 72 61 63 6b 20 6f 66 20 65 72  ping track of er
2e1a0 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67 20 2a  rors remaining *
2e1b0 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  /..  assert( p->
2e1c0 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 6e  bIsReader );.  n
2e1d0 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a  Root = pOp->p2;.
2e1e0 20 20 61 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70    aRoot = pOp->p
2e1f0 34 2e 61 69 3b 0a 20 20 61 73 73 65 72 74 28 20  4.ai;.  assert( 
2e200 6e 52 6f 6f 74 3e 30 20 29 3b 0a 20 20 61 73 73  nRoot>0 );.  ass
2e210 65 72 74 28 20 61 52 6f 6f 74 5b 6e 52 6f 6f 74  ert( aRoot[nRoot
2e220 5d 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  ]==0 );.  assert
2e230 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
2e240 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
2e250 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
2e260 20 29 3b 0a 20 20 70 6e 45 72 72 20 3d 20 26 61   );.  pnErr = &a
2e270 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
2e280 61 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d 3e  assert( (pnErr->
2e290 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
2e2a0 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
2e2b0 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26   (pnErr->flags &
2e2c0 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c   (MEM_Str|MEM_Bl
2e2d0 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e  ob))==0 );.  pIn
2e2e0 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
2e2f0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  1];.  assert( pO
2e300 70 2d 3e 70 35 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p5<db->nDb );
2e310 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73  .  assert( DbMas
2e320 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61  kTest(p->btreeMa
2e330 73 6b 2c 20 70 4f 70 2d 3e 70 35 29 20 29 3b 0a  sk, pOp->p5) );.
2e340 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 42 74 72    z = sqlite3Btr
2e350 65 65 49 6e 74 65 67 72 69 74 79 43 68 65 63 6b  eeIntegrityCheck
2e360 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 35  (db->aDb[pOp->p5
2e370 5d 2e 70 42 74 2c 20 61 52 6f 6f 74 2c 20 6e 52  ].pBt, aRoot, nR
2e380 6f 6f 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20  oot,.           
2e390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e3a0 20 20 20 20 20 20 28 69 6e 74 29 70 6e 45 72 72        (int)pnErr
2e3b0 2d 3e 75 2e 69 2c 20 26 6e 45 72 72 29 3b 0a 20  ->u.i, &nErr);. 
2e3c0 20 70 6e 45 72 72 2d 3e 75 2e 69 20 2d 3d 20 6e   pnErr->u.i -= n
2e3d0 45 72 72 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  Err;.  sqlite3Vd
2e3e0 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e  beMemSetNull(pIn
2e3f0 31 29 3b 0a 20 20 69 66 28 20 6e 45 72 72 3d 3d  1);.  if( nErr==
2e400 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  0 ){.    assert(
2e410 20 7a 3d 3d 30 20 29 3b 0a 20 20 7d 65 6c 73 65   z==0 );.  }else
2e420 20 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20   if( z==0 ){.   
2e430 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
2e440 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74  }else{.    sqlit
2e450 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28  e3VdbeMemSetStr(
2e460 70 49 6e 31 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c  pIn1, z, -1, SQL
2e470 49 54 45 5f 55 54 46 38 2c 20 73 71 6c 69 74 65  ITE_UTF8, sqlite
2e480 33 5f 66 72 65 65 29 3b 0a 20 20 7d 0a 20 20 55  3_free);.  }.  U
2e490 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
2e4a0 5a 45 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69  ZE(pIn1);.  sqli
2e4b0 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
2e4c0 6f 64 69 6e 67 28 70 49 6e 31 2c 20 65 6e 63 6f  oding(pIn1, enco
2e4d0 64 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  ding);.  break;.
2e4e0 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
2e4f0 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54  TE_OMIT_INTEGRIT
2e500 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f  Y_CHECK */../* O
2e510 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 41 64 64  pcode: RowSetAdd
2e520 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
2e530 53 79 6e 6f 70 73 69 73 3a 20 20 72 6f 77 73 65  Synopsis:  rowse
2e540 74 28 50 31 29 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a  t(P1)=r[P2].**.*
2e550 2a 20 49 6e 73 65 72 74 20 74 68 65 20 69 6e 74  * Insert the int
2e560 65 67 65 72 20 76 61 6c 75 65 20 68 65 6c 64 20  eger value held 
2e570 62 79 20 72 65 67 69 73 74 65 72 20 50 32 20 69  by register P2 i
2e580 6e 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 69 6e  nto a boolean in
2e590 64 65 78 0a 2a 2a 20 68 65 6c 64 20 69 6e 20 72  dex.** held in r
2e5a0 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a  egister P1..**.*
2e5b0 2a 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66  * An assertion f
2e5c0 61 69 6c 73 20 69 66 20 50 32 20 69 73 20 6e 6f  ails if P2 is no
2e5d0 74 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f  t an integer..*/
2e5e0 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 41  .case OP_RowSetA
2e5f0 64 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 69  dd: {       /* i
2e600 6e 31 2c 20 69 6e 32 20 2a 2f 0a 20 20 70 49 6e  n1, in2 */.  pIn
2e610 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
2e620 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d  1];.  pIn2 = &aM
2e630 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61  em[pOp->p2];.  a
2e640 73 73 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c  ssert( (pIn2->fl
2e650 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d  ags & MEM_Int)!=
2e660 30 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  0 );.  if( (pIn1
2e670 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f  ->flags & MEM_Ro
2e680 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20  wSet)==0 ){.    
2e690 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
2e6a0 74 52 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a 20  tRowSet(pIn1);. 
2e6b0 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c     if( (pIn1->fl
2e6c0 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74  ags & MEM_RowSet
2e6d0 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  )==0 ) goto no_m
2e6e0 65 6d 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  em;.  }.  sqlite
2e6f0 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49  3RowSetInsert(pI
2e700 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70  n1->u.pRowSet, p
2e710 49 6e 32 2d 3e 75 2e 69 29 3b 0a 20 20 62 72 65  In2->u.i);.  bre
2e720 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2e730 3a 20 52 6f 77 53 65 74 52 65 61 64 20 50 31 20  : RowSetRead P1 
2e740 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
2e750 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 6f  opsis:  r[P3]=ro
2e760 77 73 65 74 28 50 31 29 0a 2a 2a 0a 2a 2a 20 45  wset(P1).**.** E
2e770 78 74 72 61 63 74 20 74 68 65 20 73 6d 61 6c 6c  xtract the small
2e780 65 73 74 20 76 61 6c 75 65 20 66 72 6f 6d 20 62  est value from b
2e790 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20  oolean index P1 
2e7a0 61 6e 64 20 70 75 74 20 74 68 61 74 20 76 61 6c  and put that val
2e7b0 75 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73  ue into.** regis
2e7c0 74 65 72 20 50 33 2e 20 20 4f 72 2c 20 69 66 20  ter P3.  Or, if 
2e7d0 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31  boolean index P1
2e7e0 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 20 65 6d   is initially em
2e7f0 70 74 79 2c 20 6c 65 61 76 65 20 50 33 0a 2a 2a  pty, leave P3.**
2e800 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 20 6a   unchanged and j
2e810 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69  ump to instructi
2e820 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  on P2..*/.case O
2e830 50 5f 52 6f 77 53 65 74 52 65 61 64 3a 20 7b 20  P_RowSetRead: { 
2e840 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
2e850 6e 31 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36  n1, out3 */.  i6
2e860 34 20 76 61 6c 3b 0a 0a 20 20 70 49 6e 31 20 3d  4 val;..  pIn1 =
2e870 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
2e880 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
2e890 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74  ags & MEM_RowSet
2e8a0 29 3d 3d 30 20 0a 20 20 20 7c 7c 20 73 71 6c 69  )==0 .   || sqli
2e8b0 74 65 33 52 6f 77 53 65 74 4e 65 78 74 28 70 49  te3RowSetNext(pI
2e8c0 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 26  n1->u.pRowSet, &
2e8d0 76 61 6c 29 3d 3d 30 0a 20 20 29 7b 0a 20 20 20  val)==0.  ){.   
2e8e0 20 2f 2a 20 54 68 65 20 62 6f 6f 6c 65 61 6e 20   /* The boolean 
2e8f0 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 2a  index is empty *
2e900 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  /.    sqlite3Vdb
2e910 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31  eMemSetNull(pIn1
2e920 29 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  );.    VdbeBranc
2e930 68 54 61 6b 65 6e 28 31 2c 32 29 3b 0a 20 20 20  hTaken(1,2);.   
2e940 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
2e950 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69  _and_check_for_i
2e960 6e 74 65 72 72 75 70 74 3b 0a 20 20 7d 65 6c 73  nterrupt;.  }els
2e970 65 7b 0a 20 20 20 20 2f 2a 20 41 20 76 61 6c 75  e{.    /* A valu
2e980 65 20 77 61 73 20 70 75 6c 6c 65 64 20 66 72 6f  e was pulled fro
2e990 6d 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20  m the index */. 
2e9a0 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
2e9b0 65 6e 28 30 2c 32 29 3b 0a 20 20 20 20 73 71 6c  en(0,2);.    sql
2e9c0 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e  ite3VdbeMemSetIn
2e9d0 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t64(&aMem[pOp->p
2e9e0 33 5d 2c 20 76 61 6c 29 3b 0a 20 20 7d 0a 20 20  3], val);.  }.  
2e9f0 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69  goto check_for_i
2ea00 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20  nterrupt;.}../* 
2ea10 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 54 65  Opcode: RowSetTe
2ea20 73 74 20 50 31 20 50 32 20 50 33 20 50 34 0a 2a  st P1 P2 P3 P4.*
2ea30 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72  * Synopsis: if r
2ea40 5b 50 33 5d 20 69 6e 20 72 6f 77 73 65 74 28 50  [P3] in rowset(P
2ea50 31 29 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  1) goto P2.**.**
2ea60 20 52 65 67 69 73 74 65 72 20 50 33 20 69 73 20   Register P3 is 
2ea70 61 73 73 75 6d 65 64 20 74 6f 20 68 6f 6c 64 20  assumed to hold 
2ea80 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72  a 64-bit integer
2ea90 20 76 61 6c 75 65 2e 20 49 66 20 72 65 67 69 73   value. If regis
2eaa0 74 65 72 20 50 31 0a 2a 2a 20 63 6f 6e 74 61 69  ter P1.** contai
2eab0 6e 73 20 61 20 52 6f 77 53 65 74 20 6f 62 6a 65  ns a RowSet obje
2eac0 63 74 20 61 6e 64 20 74 68 61 74 20 52 6f 77 53  ct and that RowS
2ead0 65 74 20 6f 62 6a 65 63 74 20 63 6f 6e 74 61 69  et object contai
2eae0 6e 73 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20  ns.** the value 
2eaf0 68 65 6c 64 20 69 6e 20 50 33 2c 20 6a 75 6d 70  held in P3, jump
2eb00 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e   to register P2.
2eb10 20 4f 74 68 65 72 77 69 73 65 2c 20 69 6e 73 65   Otherwise, inse
2eb20 72 74 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65  rt the.** intege
2eb30 72 20 69 6e 20 50 33 20 69 6e 74 6f 20 74 68 65  r in P3 into the
2eb40 20 52 6f 77 53 65 74 20 61 6e 64 20 63 6f 6e 74   RowSet and cont
2eb50 69 6e 75 65 20 6f 6e 20 74 6f 20 74 68 65 0a 2a  inue on to the.*
2eb60 2a 20 6e 65 78 74 20 6f 70 63 6f 64 65 2e 0a 2a  * next opcode..*
2eb70 2a 0a 2a 2a 20 54 68 65 20 52 6f 77 53 65 74 20  *.** The RowSet 
2eb80 6f 62 6a 65 63 74 20 69 73 20 6f 70 74 69 6d 69  object is optimi
2eb90 7a 65 64 20 66 6f 72 20 74 68 65 20 63 61 73 65  zed for the case
2eba0 20 77 68 65 72 65 20 73 75 63 63 65 73 73 69 76   where successiv
2ebb0 65 20 73 65 74 73 0a 2a 2a 20 6f 66 20 69 6e 74  e sets.** of int
2ebc0 65 67 65 72 73 2c 20 77 68 65 72 65 20 65 61 63  egers, where eac
2ebd0 68 20 73 65 74 20 63 6f 6e 74 61 69 6e 73 20 6e  h set contains n
2ebe0 6f 20 64 75 70 6c 69 63 61 74 65 73 2e 20 45 61  o duplicates. Ea
2ebf0 63 68 20 73 65 74 0a 2a 2a 20 6f 66 20 76 61 6c  ch set.** of val
2ec00 75 65 73 20 69 73 20 69 64 65 6e 74 69 66 69 65  ues is identifie
2ec10 64 20 62 79 20 61 20 75 6e 69 71 75 65 20 50 34  d by a unique P4
2ec20 20 76 61 6c 75 65 2e 20 54 68 65 20 66 69 72 73   value. The firs
2ec30 74 20 73 65 74 0a 2a 2a 20 6d 75 73 74 20 68 61  t set.** must ha
2ec40 76 65 20 50 34 3d 3d 30 2c 20 74 68 65 20 66 69  ve P4==0, the fi
2ec50 6e 61 6c 20 73 65 74 20 50 34 3d 2d 31 2e 20 20  nal set P4=-1.  
2ec60 50 34 20 6d 75 73 74 20 62 65 20 65 69 74 68 65  P4 must be eithe
2ec70 72 20 2d 31 20 6f 72 0a 2a 2a 20 6e 6f 6e 2d 6e  r -1 or.** non-n
2ec80 65 67 61 74 69 76 65 2e 20 20 46 6f 72 20 6e 6f  egative.  For no
2ec90 6e 2d 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65  n-negative value
2eca0 73 20 6f 66 20 50 34 20 6f 6e 6c 79 20 74 68 65  s of P4 only the
2ecb0 20 6c 6f 77 65 72 20 34 0a 2a 2a 20 62 69 74 73   lower 4.** bits
2ecc0 20 61 72 65 20 73 69 67 6e 69 66 69 63 61 6e 74   are significant
2ecd0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 61 6c 6c  ..**.** This all
2ece0 6f 77 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  ows optimization
2ecf0 73 3a 20 28 61 29 20 77 68 65 6e 20 50 34 3d 3d  s: (a) when P4==
2ed00 30 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65  0 there is no ne
2ed10 65 64 20 74 6f 20 74 65 73 74 0a 2a 2a 20 74 68  ed to test.** th
2ed20 65 20 72 6f 77 73 65 74 20 6f 62 6a 65 63 74 20  e rowset object 
2ed30 66 6f 72 20 50 33 2c 20 61 73 20 69 74 20 69 73  for P3, as it is
2ed40 20 67 75 61 72 61 6e 74 65 65 64 20 6e 6f 74 20   guaranteed not 
2ed50 74 6f 20 63 6f 6e 74 61 69 6e 20 69 74 2c 0a 2a  to contain it,.*
2ed60 2a 20 28 62 29 20 77 68 65 6e 20 50 34 3d 3d 2d  * (b) when P4==-
2ed70 31 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65  1 there is no ne
2ed80 65 64 20 74 6f 20 69 6e 73 65 72 74 20 74 68 65  ed to insert the
2ed90 20 76 61 6c 75 65 2c 20 61 73 20 69 74 20 77 69   value, as it wi
2eda0 6c 6c 0a 2a 2a 20 6e 65 76 65 72 20 62 65 20 74  ll.** never be t
2edb0 65 73 74 65 64 20 66 6f 72 2c 20 61 6e 64 20 28  ested for, and (
2edc0 63 29 20 77 68 65 6e 20 61 20 76 61 6c 75 65 20  c) when a value 
2edd0 74 68 61 74 20 69 73 20 70 61 72 74 20 6f 66 20  that is part of 
2ede0 73 65 74 20 58 20 69 73 0a 2a 2a 20 69 6e 73 65  set X is.** inse
2edf0 72 74 65 64 2c 20 74 68 65 72 65 20 69 73 20 6e  rted, there is n
2ee00 6f 20 6e 65 65 64 20 74 6f 20 73 65 61 72 63 68  o need to search
2ee10 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 20 73   to see if the s
2ee20 61 6d 65 20 76 61 6c 75 65 20 77 61 73 0a 2a 2a  ame value was.**
2ee30 20 70 72 65 76 69 6f 75 73 6c 79 20 69 6e 73 65   previously inse
2ee40 72 74 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  rted as part of 
2ee50 73 65 74 20 58 20 28 6f 6e 6c 79 20 69 66 20 69  set X (only if i
2ee60 74 20 77 61 73 20 70 72 65 76 69 6f 75 73 6c 79  t was previously
2ee70 0a 2a 2a 20 69 6e 73 65 72 74 65 64 20 61 73 20  .** inserted as 
2ee80 70 61 72 74 20 6f 66 20 73 6f 6d 65 20 6f 74 68  part of some oth
2ee90 65 72 20 73 65 74 29 2e 0a 2a 2f 0a 63 61 73 65  er set)..*/.case
2eea0 20 4f 50 5f 52 6f 77 53 65 74 54 65 73 74 3a 20   OP_RowSetTest: 
2eeb0 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
2eec0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
2eed0 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74  n1, in3 */.  int
2eee0 20 69 53 65 74 3b 0a 20 20 69 6e 74 20 65 78 69   iSet;.  int exi
2eef0 73 74 73 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26  sts;..  pIn1 = &
2ef00 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
2ef10 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
2ef20 70 2d 3e 70 33 5d 3b 0a 20 20 69 53 65 74 20 3d  p->p3];.  iSet =
2ef30 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 61 73   pOp->p4.i;.  as
2ef40 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67  sert( pIn3->flag
2ef50 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 0a 20 20  s&MEM_Int );..  
2ef60 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 61  /* If there is a
2ef70 6e 79 74 68 69 6e 67 20 6f 74 68 65 72 20 74 68  nything other th
2ef80 61 6e 20 61 20 72 6f 77 73 65 74 20 6f 62 6a 65  an a rowset obje
2ef90 63 74 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c  ct in memory cel
2efa0 6c 20 50 31 2c 0a 20 20 2a 2a 20 64 65 6c 65 74  l P1,.  ** delet
2efb0 65 20 69 74 20 6e 6f 77 20 61 6e 64 20 69 6e 69  e it now and ini
2efc0 74 69 61 6c 69 7a 65 20 50 31 20 77 69 74 68 20  tialize P1 with 
2efd0 61 6e 20 65 6d 70 74 79 20 72 6f 77 73 65 74 0a  an empty rowset.
2efe0 20 20 2a 2f 0a 20 20 69 66 28 20 28 70 49 6e 31    */.  if( (pIn1
2eff0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f  ->flags & MEM_Ro
2f000 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20  wSet)==0 ){.    
2f010 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
2f020 74 52 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a 20  tRowSet(pIn1);. 
2f030 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c     if( (pIn1->fl
2f040 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74  ags & MEM_RowSet
2f050 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  )==0 ) goto no_m
2f060 65 6d 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72  em;.  }..  asser
2f070 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
2f080 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 61 73  P4_INT32 );.  as
2f090 73 65 72 74 28 20 69 53 65 74 3d 3d 2d 31 20 7c  sert( iSet==-1 |
2f0a0 7c 20 69 53 65 74 3e 3d 30 20 29 3b 0a 20 20 69  | iSet>=0 );.  i
2f0b0 66 28 20 69 53 65 74 20 29 7b 0a 20 20 20 20 65  f( iSet ){.    e
2f0c0 78 69 73 74 73 20 3d 20 73 71 6c 69 74 65 33 52  xists = sqlite3R
2f0d0 6f 77 53 65 74 54 65 73 74 28 70 49 6e 31 2d 3e  owSetTest(pIn1->
2f0e0 75 2e 70 52 6f 77 53 65 74 2c 20 69 53 65 74 2c  u.pRowSet, iSet,
2f0f0 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 20   pIn3->u.i);.   
2f100 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
2f110 28 65 78 69 73 74 73 21 3d 30 2c 32 29 3b 0a 20  (exists!=0,2);. 
2f120 20 20 20 69 66 28 20 65 78 69 73 74 73 20 29 20     if( exists ) 
2f130 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
2f140 0a 20 20 7d 0a 20 20 69 66 28 20 69 53 65 74 3e  .  }.  if( iSet>
2f150 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
2f160 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49  3RowSetInsert(pI
2f170 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70  n1->u.pRowSet, p
2f180 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 7d 0a 20  In3->u.i);.  }. 
2f190 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e   break;.}...#ifn
2f1a0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2f1b0 54 52 49 47 47 45 52 0a 0a 2f 2a 20 4f 70 63 6f  TRIGGER../* Opco
2f1c0 64 65 3a 20 50 72 6f 67 72 61 6d 20 50 31 20 50  de: Program P1 P
2f1d0 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
2f1e0 20 45 78 65 63 75 74 65 20 74 68 65 20 74 72 69   Execute the tri
2f1f0 67 67 65 72 20 70 72 6f 67 72 61 6d 20 70 61 73  gger program pas
2f200 73 65 64 20 61 73 20 50 34 20 28 74 79 70 65 20  sed as P4 (type 
2f210 50 34 5f 53 55 42 50 52 4f 47 52 41 4d 29 2e 20  P4_SUBPROGRAM). 
2f220 0a 2a 2a 0a 2a 2a 20 50 31 20 63 6f 6e 74 61 69  .**.** P1 contai
2f230 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20 6f  ns the address o
2f240 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c  f the memory cel
2f250 6c 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  l that contains 
2f260 74 68 65 20 66 69 72 73 74 20 6d 65 6d 6f 72 79  the first memory
2f270 20 0a 2a 2a 20 63 65 6c 6c 20 69 6e 20 61 6e 20   .** cell in an 
2f280 61 72 72 61 79 20 6f 66 20 76 61 6c 75 65 73 20  array of values 
2f290 75 73 65 64 20 61 73 20 61 72 67 75 6d 65 6e 74  used as argument
2f2a0 73 20 74 6f 20 74 68 65 20 73 75 62 2d 70 72 6f  s to the sub-pro
2f2b0 67 72 61 6d 2e 20 50 32 20 0a 2a 2a 20 63 6f 6e  gram. P2 .** con
2f2c0 74 61 69 6e 73 20 74 68 65 20 61 64 64 72 65 73  tains the addres
2f2d0 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66 20  s to jump to if 
2f2e0 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  the sub-program 
2f2f0 74 68 72 6f 77 73 20 61 6e 20 49 47 4e 4f 52 45  throws an IGNORE
2f300 20 0a 2a 2a 20 65 78 63 65 70 74 69 6f 6e 20 75   .** exception u
2f310 73 69 6e 67 20 74 68 65 20 52 41 49 53 45 28 29  sing the RAISE()
2f320 20 66 75 6e 63 74 69 6f 6e 2e 20 52 65 67 69 73   function. Regis
2f330 74 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20  ter P3 contains 
2f340 74 68 65 20 61 64 64 72 65 73 73 20 0a 2a 2a 20  the address .** 
2f350 6f 66 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  of a memory cell
2f360 20 69 6e 20 74 68 69 73 20 28 74 68 65 20 70 61   in this (the pa
2f370 72 65 6e 74 29 20 56 4d 20 74 68 61 74 20 69 73  rent) VM that is
2f380 20 75 73 65 64 20 74 6f 20 61 6c 6c 6f 63 61 74   used to allocat
2f390 65 20 74 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79  e the .** memory
2f3a0 20 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65   required by the
2f3b0 20 73 75 62 2d 76 64 62 65 20 61 74 20 72 75 6e   sub-vdbe at run
2f3c0 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69  time..**.** P4 i
2f3d0 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
2f3e0 68 65 20 56 4d 20 63 6f 6e 74 61 69 6e 69 6e 67  he VM containing
2f3f0 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f   the trigger pro
2f400 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  gram..**.** If P
2f410 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  5 is non-zero, t
2f420 68 65 6e 20 72 65 63 75 72 73 69 76 65 20 70 72  hen recursive pr
2f430 6f 67 72 61 6d 20 69 6e 76 6f 63 61 74 69 6f 6e  ogram invocation
2f440 20 69 73 20 65 6e 61 62 6c 65 64 2e 0a 2a 2f 0a   is enabled..*/.
2f450 63 61 73 65 20 4f 50 5f 50 72 6f 67 72 61 6d 3a  case OP_Program:
2f460 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
2f470 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b  p */.  int nMem;
2f480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2f490 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f  * Number of memo
2f4a0 72 79 20 72 65 67 69 73 74 65 72 73 20 66 6f 72  ry registers for
2f4b0 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a   sub-program */.
2f4c0 20 20 69 6e 74 20 6e 42 79 74 65 3b 20 20 20 20    int nByte;    
2f4d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 79 74            /* Byt
2f4e0 65 73 20 6f 66 20 72 75 6e 74 69 6d 65 20 73 70  es of runtime sp
2f4f0 61 63 65 20 72 65 71 75 69 72 65 64 20 66 6f 72  ace required for
2f500 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a   sub-program */.
2f510 20 20 4d 65 6d 20 2a 70 52 74 3b 20 20 20 20 20    Mem *pRt;     
2f520 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67            /* Reg
2f530 69 73 74 65 72 20 74 6f 20 61 6c 6c 6f 63 61 74  ister to allocat
2f540 65 20 72 75 6e 74 69 6d 65 20 73 70 61 63 65 20  e runtime space 
2f550 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20  */.  Mem *pMem; 
2f560 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2f570 55 73 65 64 20 74 6f 20 69 74 65 72 61 74 65 20  Used to iterate 
2f580 74 68 72 6f 75 67 68 20 6d 65 6d 6f 72 79 20 63  through memory c
2f590 65 6c 6c 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  ells */.  Mem *p
2f5a0 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  End;            
2f5b0 20 20 2f 2a 20 4c 61 73 74 20 6d 65 6d 6f 72 79    /* Last memory
2f5c0 20 63 65 6c 6c 20 69 6e 20 6e 65 77 20 61 72 72   cell in new arr
2f5d0 61 79 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d  ay */.  VdbeFram
2f5e0 65 20 2a 70 46 72 61 6d 65 3b 20 20 20 20 20 20  e *pFrame;      
2f5f0 2f 2a 20 4e 65 77 20 76 64 62 65 20 66 72 61 6d  /* New vdbe fram
2f600 65 20 74 6f 20 65 78 65 63 75 74 65 20 69 6e 20  e to execute in 
2f610 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72 61 6d 20  */.  SubProgram 
2f620 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20  *pProgram;   /* 
2f630 53 75 62 2d 70 72 6f 67 72 61 6d 20 74 6f 20 65  Sub-program to e
2f640 78 65 63 75 74 65 20 2a 2f 0a 20 20 76 6f 69 64  xecute */.  void
2f650 20 2a 74 3b 20 20 20 20 20 20 20 20 20 20 20 20   *t;            
2f660 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 69 64 65      /* Token ide
2f670 6e 74 69 66 79 69 6e 67 20 74 72 69 67 67 65 72  ntifying trigger
2f680 20 2a 2f 0a 0a 20 20 70 50 72 6f 67 72 61 6d 20   */..  pProgram 
2f690 3d 20 70 4f 70 2d 3e 70 34 2e 70 50 72 6f 67 72  = pOp->p4.pProgr
2f6a0 61 6d 3b 0a 20 20 70 52 74 20 3d 20 26 61 4d 65  am;.  pRt = &aMe
2f6b0 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73  m[pOp->p3];.  as
2f6c0 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e  sert( pProgram->
2f6d0 6e 4f 70 3e 30 20 29 3b 0a 20 20 0a 20 20 2f 2a  nOp>0 );.  .  /*
2f6e0 20 49 66 20 74 68 65 20 70 35 20 66 6c 61 67 20   If the p5 flag 
2f6f0 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e 20 72  is clear, then r
2f700 65 63 75 72 73 69 76 65 20 69 6e 76 6f 63 61 74  ecursive invocat
2f710 69 6f 6e 20 6f 66 20 74 72 69 67 67 65 72 73 20  ion of triggers 
2f720 69 73 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65  is .  ** disable
2f730 64 20 66 6f 72 20 62 61 63 6b 77 61 72 64 73 20  d for backwards 
2f740 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 28 70  compatibility (p
2f750 35 20 69 73 20 73 65 74 20 69 66 20 74 68 69 73  5 is set if this
2f760 20 73 75 62 2d 70 72 6f 67 72 61 6d 0a 20 20 2a   sub-program.  *
2f770 2a 20 69 73 20 72 65 61 6c 6c 79 20 61 20 74 72  * is really a tr
2f780 69 67 67 65 72 2c 20 6e 6f 74 20 61 20 66 6f 72  igger, not a for
2f790 65 69 67 6e 20 6b 65 79 20 61 63 74 69 6f 6e 2c  eign key action,
2f7a0 20 61 6e 64 20 74 68 65 20 66 6c 61 67 20 73 65   and the flag se
2f7b0 74 0a 20 20 2a 2a 20 61 6e 64 20 63 6c 65 61 72  t.  ** and clear
2f7c0 65 64 20 62 79 20 74 68 65 20 22 50 52 41 47 4d  ed by the "PRAGM
2f7d0 41 20 72 65 63 75 72 73 69 76 65 5f 74 72 69 67  A recursive_trig
2f7e0 67 65 72 73 22 20 63 6f 6d 6d 61 6e 64 20 69 73  gers" command is
2f7f0 20 63 6c 65 61 72 29 2e 0a 20 20 2a 2a 20 0a 20   clear)..  ** . 
2f800 20 2a 2a 20 49 74 20 69 73 20 72 65 63 75 72 73   ** It is recurs
2f810 69 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f  ive invocation o
2f820 66 20 74 72 69 67 67 65 72 73 2c 20 61 74 20 74  f triggers, at t
2f830 68 65 20 53 51 4c 20 6c 65 76 65 6c 2c 20 74 68  he SQL level, th
2f840 61 74 20 69 73 20 0a 20 20 2a 2a 20 64 69 73 61  at is .  ** disa
2f850 62 6c 65 64 2e 20 49 6e 20 73 6f 6d 65 20 63 61  bled. In some ca
2f860 73 65 73 20 61 20 73 69 6e 67 6c 65 20 74 72 69  ses a single tri
2f870 67 67 65 72 20 6d 61 79 20 67 65 6e 65 72 61 74  gger may generat
2f880 65 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20  e more than one 
2f890 0a 20 20 2a 2a 20 53 75 62 50 72 6f 67 72 61 6d  .  ** SubProgram
2f8a0 20 28 69 66 20 74 68 65 20 74 72 69 67 67 65 72   (if the trigger
2f8b0 20 6d 61 79 20 62 65 20 65 78 65 63 75 74 65 64   may be executed
2f8c0 20 77 69 74 68 20 6d 6f 72 65 20 74 68 61 6e 20   with more than 
2f8d0 6f 6e 65 20 64 69 66 66 65 72 65 6e 74 20 0a 20  one different . 
2f8e0 20 2a 2a 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20   ** ON CONFLICT 
2f8f0 61 6c 67 6f 72 69 74 68 6d 29 2e 20 53 75 62 50  algorithm). SubP
2f900 72 6f 67 72 61 6d 20 73 74 72 75 63 74 75 72 65  rogram structure
2f910 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
2f920 68 20 61 0a 20 20 2a 2a 20 73 69 6e 67 6c 65 20  h a.  ** single 
2f930 74 72 69 67 67 65 72 20 61 6c 6c 20 68 61 76 65  trigger all have
2f940 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20   the same value 
2f950 66 6f 72 20 74 68 65 20 53 75 62 50 72 6f 67 72  for the SubProgr
2f960 61 6d 2e 74 6f 6b 65 6e 20 0a 20 20 2a 2a 20 76  am.token .  ** v
2f970 61 72 69 61 62 6c 65 2e 20 20 2a 2f 0a 20 20 69  ariable.  */.  i
2f980 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20  f( pOp->p5 ){.  
2f990 20 20 74 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e    t = pProgram->
2f9a0 74 6f 6b 65 6e 3b 0a 20 20 20 20 66 6f 72 28 70  token;.    for(p
2f9b0 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b  Frame=p->pFrame;
2f9c0 20 70 46 72 61 6d 65 20 26 26 20 70 46 72 61 6d   pFrame && pFram
2f9d0 65 2d 3e 74 6f 6b 65 6e 21 3d 74 3b 20 70 46 72  e->token!=t; pFr
2f9e0 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72  ame=pFrame->pPar
2f9f0 65 6e 74 29 3b 0a 20 20 20 20 69 66 28 20 70 46  ent);.    if( pF
2fa00 72 61 6d 65 20 29 20 62 72 65 61 6b 3b 0a 20 20  rame ) break;.  
2fa10 7d 0a 0a 20 20 69 66 28 20 70 2d 3e 6e 46 72 61  }..  if( p->nFra
2fa20 6d 65 3e 3d 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  me>=db->aLimit[S
2fa30 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 54 52 49 47  QLITE_LIMIT_TRIG
2fa40 47 45 52 5f 44 45 50 54 48 5d 20 29 7b 0a 20 20  GER_DEPTH] ){.  
2fa50 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52    rc = SQLITE_ER
2fa60 52 4f 52 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  ROR;.    sqlite3
2fa70 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 74 6f  VdbeError(p, "to
2fa80 6f 20 6d 61 6e 79 20 6c 65 76 65 6c 73 20 6f 66  o many levels of
2fa90 20 74 72 69 67 67 65 72 20 72 65 63 75 72 73 69   trigger recursi
2faa0 6f 6e 22 29 3b 0a 20 20 20 20 67 6f 74 6f 20 61  on");.    goto a
2fab0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
2fac0 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52 65 67  r;.  }..  /* Reg
2fad0 69 73 74 65 72 20 70 52 74 20 69 73 20 75 73 65  ister pRt is use
2fae0 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 6d  d to store the m
2faf0 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20 74  emory required t
2fb00 6f 20 73 61 76 65 20 74 68 65 20 73 74 61 74 65  o save the state
2fb10 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 63 75 72  .  ** of the cur
2fb20 72 65 6e 74 20 70 72 6f 67 72 61 6d 2c 20 61 6e  rent program, an
2fb30 64 20 74 68 65 20 6d 65 6d 6f 72 79 20 72 65 71  d the memory req
2fb40 75 69 72 65 64 20 61 74 20 72 75 6e 74 69 6d 65  uired at runtime
2fb50 20 74 6f 20 65 78 65 63 75 74 65 0a 20 20 2a 2a   to execute.  **
2fb60 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f   the trigger pro
2fb70 67 72 61 6d 2e 20 49 66 20 74 68 69 73 20 74 72  gram. If this tr
2fb80 69 67 67 65 72 20 68 61 73 20 62 65 65 6e 20 66  igger has been f
2fb90 69 72 65 64 20 62 65 66 6f 72 65 2c 20 74 68 65  ired before, the
2fba0 6e 20 70 52 74 20 0a 20 20 2a 2a 20 69 73 20 61  n pRt .  ** is a
2fbb0 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61 74 65 64  lready allocated
2fbc0 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 74 20  . Otherwise, it 
2fbd0 6d 75 73 74 20 62 65 20 69 6e 69 74 69 61 6c 69  must be initiali
2fbe0 7a 65 64 2e 20 20 2a 2f 0a 20 20 69 66 28 20 28  zed.  */.  if( (
2fbf0 70 52 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 46  pRt->flags&MEM_F
2fc00 72 61 6d 65 29 3d 3d 30 20 29 7b 0a 20 20 20 20  rame)==0 ){.    
2fc10 2f 2a 20 53 75 62 50 72 6f 67 72 61 6d 2e 6e 4d  /* SubProgram.nM
2fc20 65 6d 20 69 73 20 73 65 74 20 74 6f 20 74 68 65  em is set to the
2fc30 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72   number of memor
2fc40 79 20 63 65 6c 6c 73 20 75 73 65 64 20 62 79 20  y cells used by 
2fc50 74 68 65 20 0a 20 20 20 20 2a 2a 20 70 72 6f 67  the .    ** prog
2fc60 72 61 6d 20 73 74 6f 72 65 64 20 69 6e 20 53 75  ram stored in Su
2fc70 62 50 72 6f 67 72 61 6d 2e 61 4f 70 2e 20 41 73  bProgram.aOp. As
2fc80 20 77 65 6c 6c 20 61 73 20 74 68 65 73 65 2c 20   well as these, 
2fc90 6f 6e 65 20 6d 65 6d 6f 72 79 0a 20 20 20 20 2a  one memory.    *
2fca0 2a 20 63 65 6c 6c 20 69 73 20 72 65 71 75 69 72  * cell is requir
2fcb0 65 64 20 66 6f 72 20 65 61 63 68 20 63 75 72 73  ed for each curs
2fcc0 6f 72 20 75 73 65 64 20 62 79 20 74 68 65 20 70  or used by the p
2fcd0 72 6f 67 72 61 6d 2e 20 53 65 74 20 6c 6f 63 61  rogram. Set loca
2fce0 6c 0a 20 20 20 20 2a 2a 20 76 61 72 69 61 62 6c  l.    ** variabl
2fcf0 65 20 6e 4d 65 6d 20 28 61 6e 64 20 6c 61 74 65  e nMem (and late
2fd00 72 2c 20 56 64 62 65 46 72 61 6d 65 2e 6e 43 68  r, VdbeFrame.nCh
2fd10 69 6c 64 4d 65 6d 29 20 74 6f 20 74 68 69 73 20  ildMem) to this 
2fd20 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a 20 20  value..    */.  
2fd30 20 20 6e 4d 65 6d 20 3d 20 70 50 72 6f 67 72 61    nMem = pProgra
2fd40 6d 2d 3e 6e 4d 65 6d 20 2b 20 70 50 72 6f 67 72  m->nMem + pProgr
2fd50 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 61 73  am->nCsr;.    as
2fd60 73 65 72 74 28 20 6e 4d 65 6d 3e 30 20 29 3b 0a  sert( nMem>0 );.
2fd70 20 20 20 20 69 66 28 20 70 50 72 6f 67 72 61 6d      if( pProgram
2fd80 2d 3e 6e 43 73 72 3d 3d 30 20 29 20 6e 4d 65 6d  ->nCsr==0 ) nMem
2fd90 2b 2b 3b 0a 20 20 20 20 6e 42 79 74 65 20 3d 20  ++;.    nByte = 
2fda0 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 56 64  ROUND8(sizeof(Vd
2fdb0 62 65 46 72 61 6d 65 29 29 0a 20 20 20 20 20 20  beFrame)).      
2fdc0 20 20 20 20 20 20 20 20 2b 20 6e 4d 65 6d 20 2a          + nMem *
2fdd0 20 73 69 7a 65 6f 66 28 4d 65 6d 29 0a 20 20 20   sizeof(Mem).   
2fde0 20 20 20 20 20 20 20 20 20 20 20 2b 20 70 50 72             + pPr
2fdf0 6f 67 72 61 6d 2d 3e 6e 43 73 72 20 2a 20 73 69  ogram->nCsr * si
2fe00 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72 20  zeof(VdbeCursor 
2fe10 2a 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *).             
2fe20 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 6e   + pProgram->nOn
2fe30 63 65 20 2a 20 73 69 7a 65 6f 66 28 75 38 29 3b  ce * sizeof(u8);
2fe40 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20 73 71  .    pFrame = sq
2fe50 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72  lite3DbMallocZer
2fe60 6f 28 64 62 2c 20 6e 42 79 74 65 29 3b 0a 20 20  o(db, nByte);.  
2fe70 20 20 69 66 28 20 21 70 46 72 61 6d 65 20 29 7b    if( !pFrame ){
2fe80 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  .      goto no_m
2fe90 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71  em;.    }.    sq
2fea0 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
2feb0 61 73 65 28 70 52 74 29 3b 0a 20 20 20 20 70 52  ase(pRt);.    pR
2fec0 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 46  t->flags = MEM_F
2fed0 72 61 6d 65 3b 0a 20 20 20 20 70 52 74 2d 3e 75  rame;.    pRt->u
2fee0 2e 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65  .pFrame = pFrame
2fef0 3b 0a 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 76  ;..    pFrame->v
2ff00 20 3d 20 70 3b 0a 20 20 20 20 70 46 72 61 6d 65   = p;.    pFrame
2ff10 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 3d 20 6e 4d  ->nChildMem = nM
2ff20 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  em;.    pFrame->
2ff30 6e 43 68 69 6c 64 43 73 72 20 3d 20 70 50 72 6f  nChildCsr = pPro
2ff40 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20  gram->nCsr;.    
2ff50 70 46 72 61 6d 65 2d 3e 70 63 20 3d 20 28 69 6e  pFrame->pc = (in
2ff60 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20  t)(pOp - aOp);. 
2ff70 20 20 20 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 20     pFrame->aMem 
2ff80 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 70  = p->aMem;.    p
2ff90 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 3d 20 70 2d  Frame->nMem = p-
2ffa0 3e 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d  >nMem;.    pFram
2ffb0 65 2d 3e 61 70 43 73 72 20 3d 20 70 2d 3e 61 70  e->apCsr = p->ap
2ffc0 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  Csr;.    pFrame-
2ffd0 3e 6e 43 75 72 73 6f 72 20 3d 20 70 2d 3e 6e 43  >nCursor = p->nC
2ffe0 75 72 73 6f 72 3b 0a 20 20 20 20 70 46 72 61 6d  ursor;.    pFram
2fff0 65 2d 3e 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b  e->aOp = p->aOp;
30000 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4f 70  .    pFrame->nOp
30010 20 3d 20 70 2d 3e 6e 4f 70 3b 0a 20 20 20 20 70   = p->nOp;.    p
30020 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 20 3d 20 70  Frame->token = p
30030 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a  Program->token;.
30040 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4f 6e 63      pFrame->aOnc
30050 65 46 6c 61 67 20 3d 20 70 2d 3e 61 4f 6e 63 65  eFlag = p->aOnce
30060 46 6c 61 67 3b 0a 20 20 20 20 70 46 72 61 6d 65  Flag;.    pFrame
30070 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20 3d 20 70 2d  ->nOnceFlag = p-
30080 3e 6e 4f 6e 63 65 46 6c 61 67 3b 0a 23 69 66 64  >nOnceFlag;.#ifd
30090 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
300a0 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54 55 53  _STMT_SCANSTATUS
300b0 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 6e 45  .    pFrame->anE
300c0 78 65 63 20 3d 20 70 2d 3e 61 6e 45 78 65 63 3b  xec = p->anExec;
300d0 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 70 45 6e  .#endif..    pEn
300e0 64 20 3d 20 26 56 64 62 65 46 72 61 6d 65 4d 65  d = &VdbeFrameMe
300f0 6d 28 70 46 72 61 6d 65 29 5b 70 46 72 61 6d 65  m(pFrame)[pFrame
30100 2d 3e 6e 43 68 69 6c 64 4d 65 6d 5d 3b 0a 20 20  ->nChildMem];.  
30110 20 20 66 6f 72 28 70 4d 65 6d 3d 56 64 62 65 46    for(pMem=VdbeF
30120 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 3b  rameMem(pFrame);
30130 20 70 4d 65 6d 21 3d 70 45 6e 64 3b 20 70 4d 65   pMem!=pEnd; pMe
30140 6d 2b 2b 29 7b 0a 20 20 20 20 20 20 70 4d 65 6d  m++){.      pMem
30150 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e  ->flags = MEM_Un
30160 64 65 66 69 6e 65 64 3b 0a 20 20 20 20 20 20 70  defined;.      p
30170 4d 65 6d 2d 3e 64 62 20 3d 20 64 62 3b 0a 20 20  Mem->db = db;.  
30180 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
30190 20 70 46 72 61 6d 65 20 3d 20 70 52 74 2d 3e 75   pFrame = pRt->u
301a0 2e 70 46 72 61 6d 65 3b 0a 20 20 20 20 61 73 73  .pFrame;.    ass
301b0 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  ert( pProgram->n
301c0 4d 65 6d 2b 70 50 72 6f 67 72 61 6d 2d 3e 6e 43  Mem+pProgram->nC
301d0 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69  sr==pFrame->nChi
301e0 6c 64 4d 65 6d 20 0a 20 20 20 20 20 20 20 20 7c  ldMem .        |
301f0 7c 20 28 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73  | (pProgram->nCs
30200 72 3d 3d 30 20 26 26 20 70 50 72 6f 67 72 61 6d  r==0 && pProgram
30210 2d 3e 6e 4d 65 6d 2b 31 3d 3d 70 46 72 61 6d 65  ->nMem+1==pFrame
30220 2d 3e 6e 43 68 69 6c 64 4d 65 6d 29 20 29 3b 0a  ->nChildMem) );.
30230 20 20 20 20 61 73 73 65 72 74 28 20 70 50 72 6f      assert( pPro
30240 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61  gram->nCsr==pFra
30250 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20 29 3b  me->nChildCsr );
30260 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 69 6e  .    assert( (in
30270 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3d 3d 70  t)(pOp - aOp)==p
30280 46 72 61 6d 65 2d 3e 70 63 20 29 3b 0a 20 20 7d  Frame->pc );.  }
30290 0a 0a 20 20 70 2d 3e 6e 46 72 61 6d 65 2b 2b 3b  ..  p->nFrame++;
302a0 0a 20 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65  .  pFrame->pPare
302b0 6e 74 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a  nt = p->pFrame;.
302c0 20 20 70 46 72 61 6d 65 2d 3e 6c 61 73 74 52 6f    pFrame->lastRo
302d0 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b  wid = lastRowid;
302e0 0a 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 61 6e  .  pFrame->nChan
302f0 67 65 20 3d 20 70 2d 3e 6e 43 68 61 6e 67 65 3b  ge = p->nChange;
30300 0a 20 20 70 46 72 61 6d 65 2d 3e 6e 44 62 43 68  .  pFrame->nDbCh
30310 61 6e 67 65 20 3d 20 70 2d 3e 64 62 2d 3e 6e 43  ange = p->db->nC
30320 68 61 6e 67 65 3b 0a 20 20 61 73 73 65 72 74 28  hange;.  assert(
30330 20 70 46 72 61 6d 65 2d 3e 70 41 75 78 44 61 74   pFrame->pAuxDat
30340 61 3d 3d 30 20 29 3b 0a 20 20 70 46 72 61 6d 65  a==0 );.  pFrame
30350 2d 3e 70 41 75 78 44 61 74 61 20 3d 20 70 2d 3e  ->pAuxData = p->
30360 70 41 75 78 44 61 74 61 3b 0a 20 20 70 2d 3e 70  pAuxData;.  p->p
30370 41 75 78 44 61 74 61 20 3d 20 30 3b 0a 20 20 70  AuxData = 0;.  p
30380 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20  ->nChange = 0;. 
30390 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70 46 72   p->pFrame = pFr
303a0 61 6d 65 3b 0a 20 20 70 2d 3e 61 4d 65 6d 20 3d  ame;.  p->aMem =
303b0 20 61 4d 65 6d 20 3d 20 56 64 62 65 46 72 61 6d   aMem = VdbeFram
303c0 65 4d 65 6d 28 70 46 72 61 6d 65 29 3b 0a 20 20  eMem(pFrame);.  
303d0 70 2d 3e 6e 4d 65 6d 20 3d 20 70 46 72 61 6d 65  p->nMem = pFrame
303e0 2d 3e 6e 43 68 69 6c 64 4d 65 6d 3b 0a 20 20 70  ->nChildMem;.  p
303f0 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 28 75 31 36  ->nCursor = (u16
30400 29 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43  )pFrame->nChildC
30410 73 72 3b 0a 20 20 70 2d 3e 61 70 43 73 72 20 3d  sr;.  p->apCsr =
30420 20 28 56 64 62 65 43 75 72 73 6f 72 20 2a 2a 29   (VdbeCursor **)
30430 26 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 5d 3b 0a  &aMem[p->nMem];.
30440 20 20 70 2d 3e 61 4f 70 20 3d 20 61 4f 70 20 3d    p->aOp = aOp =
30450 20 70 50 72 6f 67 72 61 6d 2d 3e 61 4f 70 3b 0a   pProgram->aOp;.
30460 20 20 70 2d 3e 6e 4f 70 20 3d 20 70 50 72 6f 67    p->nOp = pProg
30470 72 61 6d 2d 3e 6e 4f 70 3b 0a 20 20 70 2d 3e 61  ram->nOp;.  p->a
30480 4f 6e 63 65 46 6c 61 67 20 3d 20 28 75 38 20 2a  OnceFlag = (u8 *
30490 29 26 70 2d 3e 61 70 43 73 72 5b 70 2d 3e 6e 43  )&p->apCsr[p->nC
304a0 75 72 73 6f 72 5d 3b 0a 20 20 70 2d 3e 6e 4f 6e  ursor];.  p->nOn
304b0 63 65 46 6c 61 67 20 3d 20 70 50 72 6f 67 72 61  ceFlag = pProgra
304c0 6d 2d 3e 6e 4f 6e 63 65 3b 0a 23 69 66 64 65 66  m->nOnce;.#ifdef
304d0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
304e0 54 4d 54 5f 53 43 41 4e 53 54 41 54 55 53 0a 20  TMT_SCANSTATUS. 
304f0 20 70 2d 3e 61 6e 45 78 65 63 20 3d 20 30 3b 0a   p->anExec = 0;.
30500 23 65 6e 64 69 66 0a 20 20 70 4f 70 20 3d 20 26  #endif.  pOp = &
30510 61 4f 70 5b 2d 31 5d 3b 0a 20 20 6d 65 6d 73 65  aOp[-1];.  memse
30520 74 28 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 2c 20  t(p->aOnceFlag, 
30530 30 2c 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 29  0, p->nOnceFlag)
30540 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  ;..  break;.}../
30550 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 61 6d 20  * Opcode: Param 
30560 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
30570 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73  * This opcode is
30580 20 6f 6e 6c 79 20 65 76 65 72 20 70 72 65 73 65   only ever prese
30590 6e 74 20 69 6e 20 73 75 62 2d 70 72 6f 67 72 61  nt in sub-progra
305a0 6d 73 20 63 61 6c 6c 65 64 20 76 69 61 20 74 68  ms called via th
305b0 65 20 0a 2a 2a 20 4f 50 5f 50 72 6f 67 72 61 6d  e .** OP_Program
305c0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 43 6f   instruction. Co
305d0 70 79 20 61 20 76 61 6c 75 65 20 63 75 72 72 65  py a value curre
305e0 6e 74 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61  ntly stored in a
305f0 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c   memory .** cell
30600 20 6f 66 20 74 68 65 20 63 61 6c 6c 69 6e 67 20   of the calling 
30610 28 70 61 72 65 6e 74 29 20 66 72 61 6d 65 20 74  (parent) frame t
30620 6f 20 63 65 6c 6c 20 50 32 20 69 6e 20 74 68 65  o cell P2 in the
30630 20 63 75 72 72 65 6e 74 20 66 72 61 6d 65 73 20   current frames 
30640 0a 2a 2a 20 61 64 64 72 65 73 73 20 73 70 61 63  .** address spac
30650 65 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20  e. This is used 
30660 62 79 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  by trigger progr
30670 61 6d 73 20 74 6f 20 61 63 63 65 73 73 20 74 68  ams to access th
30680 65 20 6e 65 77 2e 2a 20 0a 2a 2a 20 61 6e 64 20  e new.* .** and 
30690 6f 6c 64 2e 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a  old.* values..**
306a0 0a 2a 2a 20 54 68 65 20 61 64 64 72 65 73 73 20  .** The address 
306b0 6f 66 20 74 68 65 20 63 65 6c 6c 20 69 6e 20 74  of the cell in t
306c0 68 65 20 70 61 72 65 6e 74 20 66 72 61 6d 65 20  he parent frame 
306d0 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  is determined by
306e0 20 61 64 64 69 6e 67 0a 2a 2a 20 74 68 65 20 76   adding.** the v
306f0 61 6c 75 65 20 6f 66 20 74 68 65 20 50 31 20 61  alue of the P1 a
30700 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 76  rgument to the v
30710 61 6c 75 65 20 6f 66 20 74 68 65 20 50 31 20 61  alue of the P1 a
30720 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 0a 2a  rgument to the.*
30730 2a 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f  * calling OP_Pro
30740 67 72 61 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e  gram instruction
30750 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72  ..*/.case OP_Par
30760 61 6d 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  am: {           
30770 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 56 64 62  /* out2 */.  Vdb
30780 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a  eFrame *pFrame;.
30790 20 20 4d 65 6d 20 2a 70 49 6e 3b 0a 20 20 70 4f    Mem *pIn;.  pO
307a0 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
307b0 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70  ase(p, pOp);.  p
307c0 46 72 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d  Frame = p->pFram
307d0 65 3b 0a 20 20 70 49 6e 20 3d 20 26 70 46 72 61  e;.  pIn = &pFra
307e0 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  me->aMem[pOp->p1
307f0 20 2b 20 70 46 72 61 6d 65 2d 3e 61 4f 70 5b 70   + pFrame->aOp[p
30800 46 72 61 6d 65 2d 3e 70 63 5d 2e 70 31 5d 3b 20  Frame->pc].p1]; 
30810 20 20 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65    .  sqlite3Vdbe
30820 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70  MemShallowCopy(p
30830 4f 75 74 2c 20 70 49 6e 2c 20 4d 45 4d 5f 45 70  Out, pIn, MEM_Ep
30840 68 65 6d 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  hem);.  break;.}
30850 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e  ..#endif /* #ifn
30860 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
30870 54 52 49 47 47 45 52 20 2a 2f 0a 0a 23 69 66 6e  TRIGGER */..#ifn
30880 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
30890 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 2f 2a 20 4f  FOREIGN_KEY./* O
308a0 70 63 6f 64 65 3a 20 46 6b 43 6f 75 6e 74 65 72  pcode: FkCounter
308b0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
308c0 53 79 6e 6f 70 73 69 73 3a 20 66 6b 63 74 72 5b  Synopsis: fkctr[
308d0 50 31 5d 2b 3d 50 32 0a 2a 2a 0a 2a 2a 20 49 6e  P1]+=P2.**.** In
308e0 63 72 65 6d 65 6e 74 20 61 20 22 63 6f 6e 73 74  crement a "const
308f0 72 61 69 6e 74 20 63 6f 75 6e 74 65 72 22 20 62  raint counter" b
30900 79 20 50 32 20 28 50 32 20 6d 61 79 20 62 65 20  y P2 (P2 may be 
30910 6e 65 67 61 74 69 76 65 20 6f 72 20 70 6f 73 69  negative or posi
30920 74 69 76 65 29 2e 0a 2a 2a 20 49 66 20 50 31 20  tive)..** If P1 
30930 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
30940 20 64 61 74 61 62 61 73 65 20 63 6f 6e 73 74 72   database constr
30950 61 69 6e 74 20 63 6f 75 6e 74 65 72 20 69 73 20  aint counter is 
30960 69 6e 63 72 65 6d 65 6e 74 65 64 20 0a 2a 2a 20  incremented .** 
30970 28 64 65 66 65 72 72 65 64 20 66 6f 72 65 69 67  (deferred foreig
30980 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
30990 73 29 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69  s). Otherwise, i
309a0 66 20 50 31 20 69 73 20 7a 65 72 6f 2c 20 74 68  f P1 is zero, th
309b0 65 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20  e .** statement 
309c0 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63 72 65  counter is incre
309d0 6d 65 6e 74 65 64 20 28 69 6d 6d 65 64 69 61 74  mented (immediat
309e0 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  e foreign key co
309f0 6e 73 74 72 61 69 6e 74 73 29 2e 0a 2a 2f 0a 63  nstraints)..*/.c
30a00 61 73 65 20 4f 50 5f 46 6b 43 6f 75 6e 74 65 72  ase OP_FkCounter
30a10 3a 20 7b 0a 20 20 69 66 28 20 64 62 2d 3e 66 6c  : {.  if( db->fl
30a20 61 67 73 20 26 20 53 51 4c 49 54 45 5f 44 65 66  ags & SQLITE_Def
30a30 65 72 46 4b 73 20 29 7b 0a 20 20 20 20 64 62 2d  erFKs ){.    db-
30a40 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
30a50 73 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  s += pOp->p2;.  
30a60 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70  }else if( pOp->p
30a70 31 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 44 65  1 ){.    db->nDe
30a80 66 65 72 72 65 64 43 6f 6e 73 20 2b 3d 20 70 4f  ferredCons += pO
30a90 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a  p->p2;.  }else{.
30aa0 20 20 20 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72      p->nFkConstr
30ab0 61 69 6e 74 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b  aint += pOp->p2;
30ac0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
30ad0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 49 66  ./* Opcode: FkIf
30ae0 5a 65 72 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a  Zero P1 P2 * * *
30af0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
30b00 20 66 6b 63 74 72 5b 50 31 5d 3d 3d 30 20 67 6f   fkctr[P1]==0 go
30b10 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73  to P2.**.** This
30b20 20 6f 70 63 6f 64 65 20 74 65 73 74 73 20 69 66   opcode tests if
30b30 20 61 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63   a foreign key c
30b40 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65  onstraint-counte
30b50 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 7a  r is currently z
30b60 65 72 6f 2e 0a 2a 2a 20 49 66 20 73 6f 2c 20 6a  ero..** If so, j
30b70 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69  ump to instructi
30b80 6f 6e 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65  on P2. Otherwise
30b90 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  , fall through t
30ba0 6f 20 74 68 65 20 6e 65 78 74 20 0a 2a 2a 20 69  o the next .** i
30bb0 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
30bc0 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a  * If P1 is non-z
30bd0 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 6a 75  ero, then the ju
30be0 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74  mp is taken if t
30bf0 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 73  he database cons
30c00 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 0a 2a  traint-counter.*
30c10 2a 20 69 73 20 7a 65 72 6f 20 28 74 68 65 20 6f  * is zero (the o
30c20 6e 65 20 74 68 61 74 20 63 6f 75 6e 74 73 20 64  ne that counts d
30c30 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69  eferred constrai
30c40 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 20  nt violations). 
30c50 49 66 20 50 31 20 69 73 0a 2a 2a 20 7a 65 72 6f  If P1 is.** zero
30c60 2c 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  , the jump is ta
30c70 6b 65 6e 20 69 66 20 74 68 65 20 73 74 61 74 65  ken if the state
30c80 6d 65 6e 74 20 63 6f 6e 73 74 72 61 69 6e 74 2d  ment constraint-
30c90 63 6f 75 6e 74 65 72 20 69 73 20 7a 65 72 6f 0a  counter is zero.
30ca0 2a 2a 20 28 69 6d 6d 65 64 69 61 74 65 20 66 6f  ** (immediate fo
30cb0 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
30cc0 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29  aint violations)
30cd0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 49  ..*/.case OP_FkI
30ce0 66 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 20 20  fZero: {        
30cf0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66   /* jump */.  if
30d00 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20  ( pOp->p1 ){.   
30d10 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
30d20 28 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f  (db->nDeferredCo
30d30 6e 73 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65  ns==0 && db->nDe
30d40 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30  ferredImmCons==0
30d50 2c 20 32 29 3b 0a 20 20 20 20 69 66 28 20 64 62  , 2);.    if( db
30d60 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3d  ->nDeferredCons=
30d70 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72  =0 && db->nDefer
30d80 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20  redImmCons==0 ) 
30d90 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
30da0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64  .  }else{.    Vd
30db0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 2d  beBranchTaken(p-
30dc0 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d  >nFkConstraint==
30dd0 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72  0 && db->nDeferr
30de0 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32 29  edImmCons==0, 2)
30df0 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 6e 46 6b  ;.    if( p->nFk
30e00 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20 26 26  Constraint==0 &&
30e10 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
30e20 6d 43 6f 6e 73 3d 3d 30 20 29 20 67 6f 74 6f 20  mCons==0 ) goto 
30e30 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a  jump_to_p2;.  }.
30e40 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
30e50 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53 51 4c  f /* #ifndef SQL
30e60 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
30e70 5f 4b 45 59 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  _KEY */..#ifndef
30e80 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
30e90 4f 49 4e 43 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70  OINCREMENT./* Op
30ea0 63 6f 64 65 3a 20 4d 65 6d 4d 61 78 20 50 31 20  code: MemMax P1 
30eb0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
30ec0 70 73 69 73 3a 20 72 5b 50 31 5d 3d 6d 61 78 28  psis: r[P1]=max(
30ed0 72 5b 50 31 5d 2c 72 5b 50 32 5d 29 0a 2a 2a 0a  r[P1],r[P2]).**.
30ee0 2a 2a 20 50 31 20 69 73 20 61 20 72 65 67 69 73  ** P1 is a regis
30ef0 74 65 72 20 69 6e 20 74 68 65 20 72 6f 6f 74 20  ter in the root 
30f00 66 72 61 6d 65 20 6f 66 20 74 68 69 73 20 56 4d  frame of this VM
30f10 20 28 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65   (the root frame
30f20 20 69 73 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74   is.** different
30f30 20 66 72 6f 6d 20 74 68 65 20 63 75 72 72 65 6e   from the curren
30f40 74 20 66 72 61 6d 65 20 69 66 20 74 68 69 73 20  t frame if this 
30f50 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 62  instruction is b
30f60 65 69 6e 67 20 65 78 65 63 75 74 65 64 0a 2a 2a  eing executed.**
30f70 20 77 69 74 68 69 6e 20 61 20 73 75 62 2d 70 72   within a sub-pr
30f80 6f 67 72 61 6d 29 2e 20 53 65 74 20 74 68 65 20  ogram). Set the 
30f90 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65  value of registe
30fa0 72 20 50 31 20 74 6f 20 74 68 65 20 6d 61 78 69  r P1 to the maxi
30fb0 6d 75 6d 20 6f 66 20 0a 2a 2a 20 69 74 73 20 63  mum of .** its c
30fc0 75 72 72 65 6e 74 20 76 61 6c 75 65 20 61 6e 64  urrent value and
30fd0 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
30fe0 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
30ff0 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
31000 6e 20 74 68 72 6f 77 73 20 61 6e 20 65 72 72 6f  n throws an erro
31010 72 20 69 66 20 74 68 65 20 6d 65 6d 6f 72 79 20  r if the memory 
31020 63 65 6c 6c 20 69 73 20 6e 6f 74 20 69 6e 69 74  cell is not init
31030 69 61 6c 6c 79 0a 2a 2a 20 61 6e 20 69 6e 74 65  ially.** an inte
31040 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ger..*/.case OP_
31050 4d 65 6d 4d 61 78 3a 20 7b 20 20 20 20 20 20 20  MemMax: {       
31060 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62   /* in2 */.  Vdb
31070 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a  eFrame *pFrame;.
31080 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20    if( p->pFrame 
31090 29 7b 0a 20 20 20 20 66 6f 72 28 70 46 72 61 6d  ){.    for(pFram
310a0 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72  e=p->pFrame; pFr
310b0 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46  ame->pParent; pF
310c0 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61  rame=pFrame->pPa
310d0 72 65 6e 74 29 3b 0a 20 20 20 20 70 49 6e 31 20  rent);.    pIn1 
310e0 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b  = &pFrame->aMem[
310f0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 65 6c 73  pOp->p1];.  }els
31100 65 7b 0a 20 20 20 20 70 49 6e 31 20 3d 20 26 61  e{.    pIn1 = &a
31110 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
31120 7d 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49  }.  assert( memI
31130 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a  sValid(pIn1) );.
31140 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
31150 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31 29  Integerify(pIn1)
31160 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
31170 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c  [pOp->p2];.  sql
31180 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
31190 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 69  erify(pIn2);.  i
311a0 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 49 6e  f( pIn1->u.i<pIn
311b0 32 2d 3e 75 2e 69 29 7b 0a 20 20 20 20 70 49 6e  2->u.i){.    pIn
311c0 31 2d 3e 75 2e 69 20 3d 20 70 49 6e 32 2d 3e 75  1->u.i = pIn2->u
311d0 2e 69 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  .i;.  }.  break;
311e0 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
311f0 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43  ITE_OMIT_AUTOINC
31200 52 45 4d 45 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f 70  REMENT */../* Op
31210 63 6f 64 65 3a 20 49 66 50 6f 73 20 50 31 20 50  code: IfPos P1 P
31220 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
31230 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e 30  psis: if r[P1]>0
31240 20 74 68 65 6e 20 72 5b 50 31 5d 2d 3d 50 33 2c   then r[P1]-=P3,
31250 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52   goto P2.**.** R
31260 65 67 69 73 74 65 72 20 50 31 20 6d 75 73 74 20  egister P1 must 
31270 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67  contain an integ
31280 65 72 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  er..** If the va
31290 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20  lue of register 
312a0 50 31 20 69 73 20 31 20 6f 72 20 67 72 65 61 74  P1 is 1 or great
312b0 65 72 2c 20 73 75 62 74 72 61 63 74 20 50 33 20  er, subtract P3 
312c0 66 72 6f 6d 20 74 68 65 0a 2a 2a 20 76 61 6c 75  from the.** valu
312d0 65 20 69 6e 20 50 31 20 61 6e 64 20 6a 75 6d 70  e in P1 and jump
312e0 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66   to P2..**.** If
312f0 20 74 68 65 20 69 6e 69 74 69 61 6c 20 76 61 6c   the initial val
31300 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  ue of register P
31310 31 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 31  1 is less than 1
31320 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 76 61  , then the.** va
31330 6c 75 65 20 69 73 20 75 6e 63 68 61 6e 67 65 64  lue is unchanged
31340 20 61 6e 64 20 63 6f 6e 74 72 6f 6c 20 70 61 73   and control pas
31350 73 65 73 20 74 68 72 6f 75 67 68 20 74 6f 20 74  ses through to t
31360 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
31370 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
31380 49 66 50 6f 73 3a 20 7b 20 20 20 20 20 20 20 20  IfPos: {        
31390 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  /* jump, in1 */.
313a0 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
313b0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
313c0 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d  t( pIn1->flags&M
313d0 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 56 64 62 65  EM_Int );.  Vdbe
313e0 42 72 61 6e 63 68 54 61 6b 65 6e 28 20 70 49 6e  BranchTaken( pIn
313f0 31 2d 3e 75 2e 69 3e 30 2c 20 32 29 3b 0a 20 20  1->u.i>0, 2);.  
31400 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 20  if( pIn1->u.i>0 
31410 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69  ){.    pIn1->u.i
31420 20 2d 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20   -= pOp->p3;.   
31430 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
31440 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
31450 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 66 66  ../* Opcode: Off
31460 73 65 74 4c 69 6d 69 74 20 50 31 20 50 32 20 50  setLimit P1 P2 P
31470 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
31480 73 3a 20 69 66 20 72 5b 50 31 5d 3e 30 20 74 68  s: if r[P1]>0 th
31490 65 6e 20 72 5b 50 32 5d 3d 72 5b 50 31 5d 2b 6d  en r[P2]=r[P1]+m
314a0 61 78 28 30 2c 72 5b 50 33 5d 29 20 65 6c 73 65  ax(0,r[P3]) else
314b0 20 72 5b 50 32 5d 3d 28 2d 31 29 0a 2a 2a 0a 2a   r[P2]=(-1).**.*
314c0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 70 65  * This opcode pe
314d0 72 66 6f 72 6d 73 20 61 20 63 6f 6d 6d 6f 6e 6c  rforms a commonl
314e0 79 20 75 73 65 64 20 63 6f 6d 70 75 74 61 74 69  y used computati
314f0 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  on associated wi
31500 74 68 0a 2a 2a 20 4c 49 4d 49 54 20 61 6e 64 20  th.** LIMIT and 
31510 4f 46 46 53 45 54 20 70 72 6f 63 65 73 73 2e 20  OFFSET process. 
31520 20 72 5b 50 31 5d 20 68 6f 6c 64 73 20 74 68 65   r[P1] holds the
31530 20 6c 69 6d 69 74 20 63 6f 75 6e 74 65 72 2e 20   limit counter. 
31540 20 72 5b 50 33 5d 0a 2a 2a 20 68 6f 6c 64 73 20   r[P3].** holds 
31550 74 68 65 20 6f 66 66 73 65 74 20 63 6f 75 6e 74  the offset count
31560 65 72 2e 20 20 54 68 65 20 6f 70 63 6f 64 65 20  er.  The opcode 
31570 63 6f 6d 70 75 74 65 73 20 74 68 65 20 63 6f 6d  computes the com
31580 62 69 6e 65 64 20 76 61 6c 75 65 0a 2a 2a 20 6f  bined value.** o
31590 66 20 74 68 65 20 4c 49 4d 49 54 20 61 6e 64 20  f the LIMIT and 
315a0 4f 46 46 53 45 54 20 61 6e 64 20 73 74 6f 72 65  OFFSET and store
315b0 73 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 20  s that value in 
315c0 72 5b 50 32 5d 2e 20 20 54 68 65 20 72 5b 50 32  r[P2].  The r[P2
315d0 5d 0a 2a 2a 20 76 61 6c 75 65 20 63 6f 6d 70 75  ].** value compu
315e0 74 65 64 20 69 73 20 74 68 65 20 74 6f 74 61 6c  ted is the total
315f0 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
31600 74 68 61 74 20 77 69 6c 6c 20 6e 65 65 64 20 74  that will need t
31610 6f 20 62 65 0a 2a 2a 20 76 69 73 69 74 65 64 20  o be.** visited 
31620 69 6e 20 6f 72 64 65 72 20 74 6f 20 63 6f 6d 70  in order to comp
31630 6c 65 74 65 20 74 68 65 20 71 75 65 72 79 2e 0a  lete the query..
31640 2a 2a 0a 2a 2a 20 49 66 20 72 5b 50 33 5d 20 69  **.** If r[P3] i
31650 73 20 7a 65 72 6f 20 6f 72 20 6e 65 67 61 74 69  s zero or negati
31660 76 65 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74  ve, that means t
31670 68 65 72 65 20 69 73 20 6e 6f 20 4f 46 46 53 45  here is no OFFSE
31680 54 0a 2a 2a 20 61 6e 64 20 72 5b 50 32 5d 20 69  T.** and r[P2] i
31690 73 20 73 65 74 20 74 6f 20 62 65 20 74 68 65 20  s set to be the 
316a0 76 61 6c 75 65 20 6f 66 20 74 68 65 20 4c 49 4d  value of the LIM
316b0 49 54 2c 20 72 5b 50 31 5d 2e 0a 2a 2a 0a 2a 2a  IT, r[P1]..**.**
316c0 20 69 66 20 72 5b 50 31 5d 20 69 73 20 7a 65 72   if r[P1] is zer
316d0 6f 20 6f 72 20 6e 65 67 61 74 69 76 65 2c 20 74  o or negative, t
316e0 68 61 74 20 6d 65 61 6e 73 20 74 68 65 72 65 20  hat means there 
316f0 69 73 20 6e 6f 20 4c 49 4d 49 54 0a 2a 2a 20 61  is no LIMIT.** a
31700 6e 64 20 72 5b 50 32 5d 20 69 73 20 73 65 74 20  nd r[P2] is set 
31710 74 6f 20 2d 31 2e 20 0a 2a 2a 0a 2a 2a 20 4f 74  to -1. .**.** Ot
31720 68 65 72 77 69 73 65 2c 20 72 5b 50 32 5d 20 69  herwise, r[P2] i
31730 73 20 73 65 74 20 74 6f 20 74 68 65 20 73 75 6d  s set to the sum
31740 20 6f 66 20 72 5b 50 31 5d 20 61 6e 64 20 72 5b   of r[P1] and r[
31750 50 33 5d 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  P3]..*/.case OP_
31760 4f 66 66 73 65 74 4c 69 6d 69 74 3a 20 7b 20 20  OffsetLimit: {  
31770 20 20 2f 2a 20 69 6e 31 2c 20 6f 75 74 32 2c 20    /* in1, out2, 
31780 69 6e 33 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in3 */.  pIn1 = 
31790 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
317a0 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
317b0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 4f 75 74 20  Op->p3];.  pOut 
317c0 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
317d0 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65  (p, pOp);.  asse
317e0 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  rt( pIn1->flags 
317f0 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61  & MEM_Int );.  a
31800 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61  ssert( pIn3->fla
31810 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a  gs & MEM_Int );.
31820 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 49    pOut->u.i = pI
31830 6e 31 2d 3e 75 2e 69 3c 3d 30 20 3f 20 2d 31 20  n1->u.i<=0 ? -1 
31840 3a 20 70 49 6e 31 2d 3e 75 2e 69 2b 28 70 49 6e  : pIn1->u.i+(pIn
31850 33 2d 3e 75 2e 69 3e 30 3f 70 49 6e 33 2d 3e 75  3->u.i>0?pIn3->u
31860 2e 69 3a 30 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  .i:0);.  break;.
31870 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66  }../* Opcode: If
31880 4e 6f 74 5a 65 72 6f 20 50 31 20 50 32 20 50 33  NotZero P1 P2 P3
31890 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
318a0 3a 20 69 66 20 72 5b 50 31 5d 21 3d 30 20 74 68  : if r[P1]!=0 th
318b0 65 6e 20 72 5b 50 31 5d 2d 3d 50 33 2c 20 67 6f  en r[P1]-=P3, go
318c0 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69  to P2.**.** Regi
318d0 73 74 65 72 20 50 31 20 6d 75 73 74 20 63 6f 6e  ster P1 must con
318e0 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e  tain an integer.
318f0 20 20 49 66 20 74 68 65 20 63 6f 6e 74 65 6e 74    If the content
31900 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20   of register P1 
31910 69 73 0a 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20  is.** initially 
31920 6e 6f 6e 7a 65 72 6f 2c 20 74 68 65 6e 20 73 75  nonzero, then su
31930 62 74 72 61 63 74 20 50 33 20 66 72 6f 6d 20 74  btract P3 from t
31940 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
31950 73 74 65 72 20 50 31 20 61 6e 64 0a 2a 2a 20 6a  ster P1 and.** j
31960 75 6d 70 20 74 6f 20 50 32 2e 20 20 49 66 20 72  ump to P2.  If r
31970 65 67 69 73 74 65 72 20 50 31 20 69 73 20 69 6e  egister P1 is in
31980 69 74 69 61 6c 6c 79 20 7a 65 72 6f 2c 20 6c 65  itially zero, le
31990 61 76 65 20 69 74 20 75 6e 63 68 61 6e 67 65 64  ave it unchanged
319a0 0a 2a 2a 20 61 6e 64 20 66 61 6c 6c 20 74 68 72  .** and fall thr
319b0 6f 75 67 68 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ough..*/.case OP
319c0 5f 49 66 4e 6f 74 5a 65 72 6f 3a 20 7b 20 20 20  _IfNotZero: {   
319d0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
319e0 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
319f0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
31a00 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
31a10 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  ags&MEM_Int );. 
31a20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
31a30 28 70 49 6e 31 2d 3e 75 2e 69 3c 30 2c 20 32 29  (pIn1->u.i<0, 2)
31a40 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e  ;.  if( pIn1->u.
31a50 69 20 29 7b 0a 20 20 20 20 20 70 49 6e 31 2d 3e  i ){.     pIn1->
31a60 75 2e 69 20 2d 3d 20 70 4f 70 2d 3e 70 33 3b 0a  u.i -= pOp->p3;.
31a70 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74       goto jump_t
31a80 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61  o_p2;.  }.  brea
31a90 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
31aa0 20 44 65 63 72 4a 75 6d 70 5a 65 72 6f 20 50 31   DecrJumpZero P1
31ab0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
31ac0 6f 70 73 69 73 3a 20 69 66 20 28 2d 2d 72 5b 50  opsis: if (--r[P
31ad0 31 5d 29 3d 3d 30 20 67 6f 74 6f 20 50 32 0a 2a  1])==0 goto P2.*
31ae0 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 31  *.** Register P1
31af0 20 6d 75 73 74 20 68 6f 6c 64 20 61 6e 20 69 6e   must hold an in
31b00 74 65 67 65 72 2e 20 20 44 65 63 72 65 6d 65 6e  teger.  Decremen
31b10 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  t the value in r
31b20 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 74 68  egister P1.** th
31b30 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 20 69 66  en jump to P2 if
31b40 20 74 68 65 20 6e 65 77 20 76 61 6c 75 65 20 69   the new value i
31b50 73 20 65 78 61 63 74 6c 79 20 7a 65 72 6f 2e 0a  s exactly zero..
31b60 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 63 72 4a  */.case OP_DecrJ
31b70 75 6d 70 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20  umpZero: {      
31b80 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  /* jump, in1 */.
31b90 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
31ba0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
31bb0 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d  t( pIn1->flags&M
31bc0 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 49 6e 31  EM_Int );.  pIn1
31bd0 2d 3e 75 2e 69 2d 2d 3b 0a 20 20 56 64 62 65 42  ->u.i--;.  VdbeB
31be0 72 61 6e 63 68 54 61 6b 65 6e 28 70 49 6e 31 2d  ranchTaken(pIn1-
31bf0 3e 75 2e 69 3d 3d 30 2c 20 32 29 3b 0a 20 20 69  >u.i==0, 2);.  i
31c00 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 20  f( pIn1->u.i==0 
31c10 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
31c20 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a  2;.  break;.}...
31c30 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 53 74  /* Opcode: AggSt
31c40 65 70 30 20 2a 20 50 32 20 50 33 20 50 34 20 50  ep0 * P2 P3 P4 P
31c50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61  5.** Synopsis: a
31c60 63 63 75 6d 3d 72 5b 50 33 5d 20 73 74 65 70 28  ccum=r[P3] step(
31c70 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20  r[P2@P5]).**.** 
31c80 45 78 65 63 75 74 65 20 74 68 65 20 73 74 65 70  Execute the step
31c90 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e   function for an
31ca0 20 61 67 67 72 65 67 61 74 65 2e 20 20 54 68 65   aggregate.  The
31cb0 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 68 61 73  .** function has
31cc0 20 50 35 20 61 72 67 75 6d 65 6e 74 73 2e 20 20   P5 arguments.  
31cd0 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
31ce0 20 74 6f 20 74 68 65 20 46 75 6e 63 44 65 66 0a   to the FuncDef.
31cf0 2a 2a 20 73 74 72 75 63 74 75 72 65 20 74 68 61  ** structure tha
31d00 74 20 73 70 65 63 69 66 69 65 73 20 74 68 65 20  t specifies the 
31d10 66 75 6e 63 74 69 6f 6e 2e 20 20 52 65 67 69 73  function.  Regis
31d20 74 65 72 20 50 33 20 69 73 20 74 68 65 0a 2a 2a  ter P3 is the.**
31d30 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a   accumulator..**
31d40 0a 2a 2a 20 54 68 65 20 50 35 20 61 72 67 75 6d  .** The P5 argum
31d50 65 6e 74 73 20 61 72 65 20 74 61 6b 65 6e 20 66  ents are taken f
31d60 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32 20  rom register P2 
31d70 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63 63 65  and its.** succe
31d80 73 73 6f 72 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  ssors..*/./* Opc
31d90 6f 64 65 3a 20 41 67 67 53 74 65 70 20 2a 20 50  ode: AggStep * P
31da0 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
31db0 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b  nopsis: accum=r[
31dc0 50 33 5d 20 73 74 65 70 28 72 5b 50 32 40 50 35  P3] step(r[P2@P5
31dd0 5d 29 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65  ]).**.** Execute
31de0 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69   the step functi
31df0 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67  on for an aggreg
31e00 61 74 65 2e 20 20 54 68 65 0a 2a 2a 20 66 75 6e  ate.  The.** fun
31e10 63 74 69 6f 6e 20 68 61 73 20 50 35 20 61 72 67  ction has P5 arg
31e20 75 6d 65 6e 74 73 2e 20 20 20 50 34 20 69 73 20  uments.   P4 is 
31e30 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20  a pointer to an 
31e40 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 0a  sqlite3_context.
31e50 2a 2a 20 6f 62 6a 65 63 74 20 74 68 61 74 20 69  ** object that i
31e60 73 20 75 73 65 64 20 74 6f 20 72 75 6e 20 74 68  s used to run th
31e70 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20 52 65 67  e function.  Reg
31e80 69 73 74 65 72 20 50 33 20 69 73 0a 2a 2a 20 61  ister P3 is.** a
31e90 73 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74 6f  s the accumulato
31ea0 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20  r..**.** The P5 
31eb0 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74 61  arguments are ta
31ec0 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65  ken from registe
31ed0 72 20 50 32 20 61 6e 64 20 69 74 73 0a 2a 2a 20  r P2 and its.** 
31ee0 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a 2a 0a 2a  successors..**.*
31ef0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73  * This opcode is
31f00 20 69 6e 69 74 69 61 6c 6c 79 20 63 6f 64 65 64   initially coded
31f10 20 61 73 20 4f 50 5f 41 67 67 53 74 65 70 30 2e   as OP_AggStep0.
31f20 20 20 4f 6e 20 66 69 72 73 74 20 65 76 61 6c 75    On first evalu
31f30 61 74 69 6f 6e 2c 0a 2a 2a 20 74 68 65 20 46 75  ation,.** the Fu
31f40 6e 63 44 65 66 20 73 74 6f 72 65 64 20 69 6e 20  ncDef stored in 
31f50 50 34 20 69 73 20 63 6f 6e 76 65 72 74 65 64 20  P4 is converted 
31f60 69 6e 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f  into an sqlite3_
31f70 63 6f 6e 74 65 78 74 20 61 6e 64 0a 2a 2a 20 74  context and.** t
31f80 68 65 20 6f 70 63 6f 64 65 20 69 73 20 63 68 61  he opcode is cha
31f90 6e 67 65 64 2e 20 20 49 6e 20 74 68 69 73 20 77  nged.  In this w
31fa0 61 79 2c 20 74 68 65 20 69 6e 69 74 69 61 6c 69  ay, the initiali
31fb0 7a 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  zation of the.**
31fc0 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
31fd0 20 6f 6e 6c 79 20 68 61 70 70 65 6e 73 20 6f 6e   only happens on
31fe0 63 65 2c 20 69 6e 73 74 65 61 64 20 6f 66 20 6f  ce, instead of o
31ff0 6e 20 65 61 63 68 20 63 61 6c 6c 20 74 6f 20 74  n each call to t
32000 68 65 0a 2a 2a 20 73 74 65 70 20 66 75 6e 63 74  he.** step funct
32010 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
32020 41 67 67 53 74 65 70 30 3a 20 7b 0a 20 20 69 6e  AggStep0: {.  in
32030 74 20 6e 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63  t n;.  sqlite3_c
32040 6f 6e 74 65 78 74 20 2a 70 43 74 78 3b 0a 0a 20  ontext *pCtx;.. 
32050 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
32060 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46  type==P4_FUNCDEF
32070 20 29 3b 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70   );.  n = pOp->p
32080 35 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  5;.  assert( pOp
32090 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p3>0 && pOp->p
320a0 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  3<=(p->nMem+1 - 
320b0 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
320c0 20 61 73 73 65 72 74 28 20 6e 3d 3d 30 20 7c 7c   assert( n==0 ||
320d0 20 28 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70   (pOp->p2>0 && p
320e0 4f 70 2d 3e 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d  Op->p2+n<=(p->nM
320f0 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
32100 72 29 2b 31 29 20 29 3b 0a 20 20 61 73 73 65 72  r)+1) );.  asser
32110 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e  t( pOp->p3<pOp->
32120 70 32 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70  p2 || pOp->p3>=p
32130 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a 20 20 70 43  Op->p2+n );.  pC
32140 74 78 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61  tx = sqlite3DbMa
32150 6c 6c 6f 63 52 61 77 4e 4e 28 64 62 2c 20 73 69  llocRawNN(db, si
32160 7a 65 6f 66 28 2a 70 43 74 78 29 20 2b 20 28 6e  zeof(*pCtx) + (n
32170 2d 31 29 2a 73 69 7a 65 6f 66 28 73 71 6c 69 74  -1)*sizeof(sqlit
32180 65 33 5f 76 61 6c 75 65 2a 29 29 3b 0a 20 20 69  e3_value*));.  i
32190 66 28 20 70 43 74 78 3d 3d 30 20 29 20 67 6f 74  f( pCtx==0 ) got
321a0 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 74 78  o no_mem;.  pCtx
321b0 2d 3e 70 4d 65 6d 20 3d 20 30 3b 0a 20 20 70 43  ->pMem = 0;.  pC
321c0 74 78 2d 3e 70 46 75 6e 63 20 3d 20 70 4f 70 2d  tx->pFunc = pOp-
321d0 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20 70 43 74  >p4.pFunc;.  pCt
321e0 78 2d 3e 69 4f 70 20 3d 20 28 69 6e 74 29 28 70  x->iOp = (int)(p
321f0 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 70 43 74  Op - aOp);.  pCt
32200 78 2d 3e 70 56 64 62 65 20 3d 20 70 3b 0a 20 20  x->pVdbe = p;.  
32210 70 43 74 78 2d 3e 61 72 67 63 20 3d 20 6e 3b 0a  pCtx->argc = n;.
32220 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20    pOp->p4type = 
32230 50 34 5f 46 55 4e 43 43 54 58 3b 0a 20 20 70 4f  P4_FUNCCTX;.  pO
32240 70 2d 3e 70 34 2e 70 43 74 78 20 3d 20 70 43 74  p->p4.pCtx = pCt
32250 78 3b 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  x;.  pOp->opcode
32260 20 3d 20 4f 50 5f 41 67 67 53 74 65 70 3b 0a 20   = OP_AggStep;. 
32270 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68   /* Fall through
32280 20 69 6e 74 6f 20 4f 50 5f 41 67 67 53 74 65 70   into OP_AggStep
32290 20 2a 2f 0a 7d 0a 63 61 73 65 20 4f 50 5f 41 67   */.}.case OP_Ag
322a0 67 53 74 65 70 3a 20 7b 0a 20 20 69 6e 74 20 69  gStep: {.  int i
322b0 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ;.  sqlite3_cont
322c0 65 78 74 20 2a 70 43 74 78 3b 0a 20 20 4d 65 6d  ext *pCtx;.  Mem
322d0 20 2a 70 4d 65 6d 3b 0a 20 20 4d 65 6d 20 74 3b   *pMem;.  Mem t;
322e0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
322f0 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43  >p4type==P4_FUNC
32300 43 54 58 20 29 3b 0a 20 20 70 43 74 78 20 3d 20  CTX );.  pCtx = 
32310 70 4f 70 2d 3e 70 34 2e 70 43 74 78 3b 0a 20 20  pOp->p4.pCtx;.  
32320 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pMem = &aMem[pOp
32330 2d 3e 70 33 5d 3b 0a 0a 20 20 2f 2a 20 49 66 20  ->p3];..  /* If 
32340 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73  this function is
32350 20 69 6e 73 69 64 65 20 6f 66 20 61 20 74 72 69   inside of a tri
32360 67 67 65 72 2c 20 74 68 65 20 72 65 67 69 73 74  gger, the regist
32370 65 72 20 61 72 72 61 79 20 69 6e 20 61 4d 65 6d  er array in aMem
32380 5b 5d 0a 20 20 2a 2a 20 6d 69 67 68 74 20 63 68  [].  ** might ch
32390 61 6e 67 65 20 66 72 6f 6d 20 6f 6e 65 20 65 76  ange from one ev
323a0 61 6c 75 61 74 69 6f 6e 20 74 6f 20 74 68 65 20  aluation to the 
323b0 6e 65 78 74 2e 20 20 54 68 65 20 6e 65 78 74 20  next.  The next 
323c0 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 0a 20 20  block of code.  
323d0 2a 2a 20 63 68 65 63 6b 73 20 74 6f 20 73 65 65  ** checks to see
323e0 20 69 66 20 74 68 65 20 72 65 67 69 73 74 65 72   if the register
323f0 20 61 72 72 61 79 20 68 61 73 20 63 68 61 6e 67   array has chang
32400 65 64 2c 20 61 6e 64 20 69 66 20 73 6f 20 69 74  ed, and if so it
32410 0a 20 20 2a 2a 20 72 65 69 6e 69 74 69 61 6c 69  .  ** reinitiali
32420 7a 65 73 20 74 68 65 20 72 65 6c 61 76 61 6e 74  zes the relavant
32430 20 70 61 72 74 73 20 6f 66 20 74 68 65 20 73 71   parts of the sq
32440 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f 62  lite3_context ob
32450 6a 65 63 74 20 2a 2f 0a 20 20 69 66 28 20 70 43  ject */.  if( pC
32460 74 78 2d 3e 70 4d 65 6d 20 21 3d 20 70 4d 65 6d  tx->pMem != pMem
32470 20 29 7b 0a 20 20 20 20 70 43 74 78 2d 3e 70 4d   ){.    pCtx->pM
32480 65 6d 20 3d 20 70 4d 65 6d 3b 0a 20 20 20 20 66  em = pMem;.    f
32490 6f 72 28 69 3d 70 43 74 78 2d 3e 61 72 67 63 2d  or(i=pCtx->argc-
324a0 31 3b 20 69 3e 3d 30 3b 20 69 2d 2d 29 20 70 43  1; i>=0; i--) pC
324b0 74 78 2d 3e 61 72 67 76 5b 69 5d 20 3d 20 26 61  tx->argv[i] = &a
324c0 4d 65 6d 5b 70 4f 70 2d 3e 70 32 2b 69 5d 3b 0a  Mem[pOp->p2+i];.
324d0 20 20 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49    }..#ifdef SQLI
324e0 54 45 5f 44 45 42 55 47 0a 20 20 66 6f 72 28 69  TE_DEBUG.  for(i
324f0 3d 30 3b 20 69 3c 70 43 74 78 2d 3e 61 72 67 63  =0; i<pCtx->argc
32500 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65  ; i++){.    asse
32510 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
32520 43 74 78 2d 3e 61 72 67 76 5b 69 5d 29 20 29 3b  Ctx->argv[i]) );
32530 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
32540 41 43 45 28 70 4f 70 2d 3e 70 32 2b 69 2c 20 70  ACE(pOp->p2+i, p
32550 43 74 78 2d 3e 61 72 67 76 5b 69 5d 29 3b 0a 20  Ctx->argv[i]);. 
32560 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 70 4d 65   }.#endif..  pMe
32570 6d 2d 3e 6e 2b 2b 3b 0a 20 20 73 71 6c 69 74 65  m->n++;.  sqlite
32580 33 56 64 62 65 4d 65 6d 49 6e 69 74 28 26 74 2c  3VdbeMemInit(&t,
32590 20 64 62 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a   db, MEM_Null);.
325a0 20 20 70 43 74 78 2d 3e 70 4f 75 74 20 3d 20 26    pCtx->pOut = &
325b0 74 3b 0a 20 20 70 43 74 78 2d 3e 66 45 72 72 6f  t;.  pCtx->fErro
325c0 72 4f 72 41 75 78 20 3d 20 30 3b 0a 20 20 70 43  rOrAux = 0;.  pC
325d0 74 78 2d 3e 73 6b 69 70 46 6c 61 67 20 3d 20 30  tx->skipFlag = 0
325e0 3b 0a 20 20 28 70 43 74 78 2d 3e 70 46 75 6e 63  ;.  (pCtx->pFunc
325f0 2d 3e 78 53 46 75 6e 63 29 28 70 43 74 78 2c 70  ->xSFunc)(pCtx,p
32600 43 74 78 2d 3e 61 72 67 63 2c 70 43 74 78 2d 3e  Ctx->argc,pCtx->
32610 61 72 67 76 29 3b 20 2f 2a 20 49 4d 50 3a 20 52  argv); /* IMP: R
32620 2d 32 34 35 30 35 2d 32 33 32 33 30 20 2a 2f 0a  -24505-23230 */.
32630 20 20 69 66 28 20 70 43 74 78 2d 3e 66 45 72 72    if( pCtx->fErr
32640 6f 72 4f 72 41 75 78 20 29 7b 0a 20 20 20 20 69  orOrAux ){.    i
32650 66 28 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72  f( pCtx->isError
32660 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
32670 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 25  3VdbeError(p, "%
32680 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  s", sqlite3_valu
32690 65 5f 74 65 78 74 28 26 74 29 29 3b 0a 20 20 20  e_text(&t));.   
326a0 20 20 20 72 63 20 3d 20 70 43 74 78 2d 3e 69 73     rc = pCtx->is
326b0 45 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20  Error;.    }.   
326c0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
326d0 65 6c 65 61 73 65 28 26 74 29 3b 0a 20 20 20 20  elease(&t);.    
326e0 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
326f0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
32700 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
32710 73 73 65 72 74 28 20 74 2e 66 6c 61 67 73 3d 3d  ssert( t.flags==
32720 4d 45 4d 5f 4e 75 6c 6c 20 29 3b 0a 20 20 7d 0a  MEM_Null );.  }.
32730 20 20 69 66 28 20 70 43 74 78 2d 3e 73 6b 69 70    if( pCtx->skip
32740 46 6c 61 67 20 29 7b 0a 20 20 20 20 61 73 73 65  Flag ){.    asse
32750 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f  rt( pOp[-1].opco
32760 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29  de==OP_CollSeq )
32770 3b 0a 20 20 20 20 69 20 3d 20 70 4f 70 5b 2d 31  ;.    i = pOp[-1
32780 5d 2e 70 31 3b 0a 20 20 20 20 69 66 28 20 69 20  ].p1;.    if( i 
32790 29 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ) sqlite3VdbeMem
327a0 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b 69  SetInt64(&aMem[i
327b0 5d 2c 20 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65  ], 1);.  }.  bre
327c0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
327d0 3a 20 41 67 67 46 69 6e 61 6c 20 50 31 20 50 32  : AggFinal P1 P2
327e0 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
327f0 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50 31 5d  sis: accum=r[P1]
32800 20 4e 3d 50 32 0a 2a 2a 0a 2a 2a 20 45 78 65 63   N=P2.**.** Exec
32810 75 74 65 20 74 68 65 20 66 69 6e 61 6c 69 7a 65  ute the finalize
32820 72 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61  r function for a
32830 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20 50 31  n aggregate.  P1
32840 20 69 73 0a 2a 2a 20 74 68 65 20 6d 65 6d 6f 72   is.** the memor
32850 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20  y location that 
32860 69 73 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74  is the accumulat
32870 6f 72 20 66 6f 72 20 74 68 65 20 61 67 67 72 65  or for the aggre
32880 67 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69  gate..**.** P2 i
32890 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
328a0 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20 74  arguments that t
328b0 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e  he step function
328c0 20 74 61 6b 65 73 20 61 6e 64 0a 2a 2a 20 50 34   takes and.** P4
328d0 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
328e0 20 74 68 65 20 46 75 6e 63 44 65 66 20 66 6f 72   the FuncDef for
328f0 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 2e 20   this function. 
32900 20 54 68 65 20 50 32 0a 2a 2a 20 61 72 67 75 6d   The P2.** argum
32910 65 6e 74 20 69 73 20 6e 6f 74 20 75 73 65 64 20  ent is not used 
32920 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20  by this opcode. 
32930 20 49 74 20 69 73 20 6f 6e 6c 79 20 74 68 65 72   It is only ther
32940 65 20 74 6f 20 64 69 73 61 6d 62 69 67 75 61 74  e to disambiguat
32950 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 74  e.** functions t
32960 68 61 74 20 63 61 6e 20 74 61 6b 65 20 76 61 72  hat can take var
32970 79 69 6e 67 20 6e 75 6d 62 65 72 73 20 6f 66 20  ying numbers of 
32980 61 72 67 75 6d 65 6e 74 73 2e 20 20 54 68 65 0a  arguments.  The.
32990 2a 2a 20 50 34 20 61 72 67 75 6d 65 6e 74 20 69  ** P4 argument i
329a0 73 20 6f 6e 6c 79 20 6e 65 65 64 65 64 20 66 6f  s only needed fo
329b0 72 20 74 68 65 20 64 65 67 65 6e 65 72 61 74 65  r the degenerate
329c0 20 63 61 73 65 20 77 68 65 72 65 0a 2a 2a 20 74   case where.** t
329d0 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e  he step function
329e0 20 77 61 73 20 6e 6f 74 20 70 72 65 76 69 6f 75   was not previou
329f0 73 6c 79 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 63  sly called..*/.c
32a00 61 73 65 20 4f 50 5f 41 67 67 46 69 6e 61 6c 3a  ase OP_AggFinal:
32a10 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a   {.  Mem *pMem;.
32a20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
32a30 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d  1>0 && pOp->p1<=
32a40 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
32a50 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4d  nCursor) );.  pM
32a60 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  em = &aMem[pOp->
32a70 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28  p1];.  assert( (
32a80 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 7e 28  pMem->flags & ~(
32a90 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 41 67 67  MEM_Null|MEM_Agg
32aa0 29 29 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20  ))==0 );.  rc = 
32ab0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 69  sqlite3VdbeMemFi
32ac0 6e 61 6c 69 7a 65 28 70 4d 65 6d 2c 20 70 4f 70  nalize(pMem, pOp
32ad0 2d 3e 70 34 2e 70 46 75 6e 63 29 3b 0a 20 20 69  ->p4.pFunc);.  i
32ae0 66 28 20 72 63 20 29 7b 0a 20 20 20 20 73 71 6c  f( rc ){.    sql
32af0 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
32b00 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76   "%s", sqlite3_v
32b10 61 6c 75 65 5f 74 65 78 74 28 70 4d 65 6d 29 29  alue_text(pMem))
32b20 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74  ;.    goto abort
32b30 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
32b40 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65   }.  sqlite3Vdbe
32b50 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70  ChangeEncoding(p
32b60 4d 65 6d 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  Mem, encoding);.
32b70 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
32b80 42 53 49 5a 45 28 70 4d 65 6d 29 3b 0a 20 20 69  BSIZE(pMem);.  i
32b90 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
32ba0 6d 54 6f 6f 42 69 67 28 70 4d 65 6d 29 20 29 7b  mTooBig(pMem) ){
32bb0 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
32bc0 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  g;.  }.  break;.
32bd0 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
32be0 45 5f 4f 4d 49 54 5f 57 41 4c 0a 2f 2a 20 4f 70  E_OMIT_WAL./* Op
32bf0 63 6f 64 65 3a 20 43 68 65 63 6b 70 6f 69 6e 74  code: Checkpoint
32c00 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
32c10 0a 2a 2a 20 43 68 65 63 6b 70 6f 69 6e 74 20 64  .** Checkpoint d
32c20 61 74 61 62 61 73 65 20 50 31 2e 20 54 68 69 73  atabase P1. This
32c30 20 69 73 20 61 20 6e 6f 2d 6f 70 20 69 66 20 50   is a no-op if P
32c40 31 20 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74  1 is not current
32c50 6c 79 20 69 6e 0a 2a 2a 20 57 41 4c 20 6d 6f 64  ly in.** WAL mod
32c60 65 2e 20 50 61 72 61 6d 65 74 65 72 20 50 32 20  e. Parameter P2 
32c70 69 73 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45  is one of SQLITE
32c80 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53  _CHECKPOINT_PASS
32c90 49 56 45 2c 20 46 55 4c 4c 2c 0a 2a 2a 20 52 45  IVE, FULL,.** RE
32ca0 53 54 41 52 54 2c 20 6f 72 20 54 52 55 4e 43 41  START, or TRUNCA
32cb0 54 45 2e 20 20 57 72 69 74 65 20 31 20 6f 72 20  TE.  Write 1 or 
32cc0 30 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 5d 20 69  0 into mem[P3] i
32cd0 66 20 74 68 65 20 63 68 65 63 6b 70 6f 69 6e 74  f the checkpoint
32ce0 20 72 65 74 75 72 6e 73 0a 2a 2a 20 53 51 4c 49   returns.** SQLI
32cf0 54 45 5f 42 55 53 59 20 6f 72 20 6e 6f 74 2c 20  TE_BUSY or not, 
32d00 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 57  respectively.  W
32d10 72 69 74 65 20 74 68 65 20 6e 75 6d 62 65 72 20  rite the number 
32d20 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68 65 0a  of pages in the.
32d30 2a 2a 20 57 41 4c 20 61 66 74 65 72 20 74 68 65  ** WAL after the
32d40 20 63 68 65 63 6b 70 6f 69 6e 74 20 69 6e 74 6f   checkpoint into
32d50 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 20 74   mem[P3+1] and t
32d60 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  he number of pag
32d70 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 57 41 4c  es.** in the WAL
32d80 20 74 68 61 74 20 68 61 76 65 20 62 65 65 6e 20   that have been 
32d90 63 68 65 63 6b 70 6f 69 6e 74 65 64 20 61 66 74  checkpointed aft
32da0 65 72 20 74 68 65 20 63 68 65 63 6b 70 6f 69 6e  er the checkpoin
32db0 74 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 73 20 69  t.** completes i
32dc0 6e 74 6f 20 6d 65 6d 5b 50 33 2b 32 5d 2e 20 20  nto mem[P3+2].  
32dd0 48 6f 77 65 76 65 72 20 6f 6e 20 61 6e 20 65 72  However on an er
32de0 72 6f 72 2c 20 6d 65 6d 5b 50 33 2b 31 5d 20 61  ror, mem[P3+1] a
32df0 6e 64 0a 2a 2a 20 6d 65 6d 5b 50 33 2b 32 5d 20  nd.** mem[P3+2] 
32e00 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  are initialized 
32e10 74 6f 20 2d 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f  to -1..*/.case O
32e20 50 5f 43 68 65 63 6b 70 6f 69 6e 74 3a 20 7b 0a  P_Checkpoint: {.
32e30 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20    int i;        
32e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32e50 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65    /* Loop counte
32e60 72 20 2a 2f 0a 20 20 69 6e 74 20 61 52 65 73 5b  r */.  int aRes[
32e70 33 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  3];             
32e80 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74         /* Result
32e90 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  s */.  Mem *pMem
32ea0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
32eb0 20 20 20 20 20 20 20 2f 2a 20 57 72 69 74 65 20         /* Write 
32ec0 72 65 73 75 6c 74 73 20 68 65 72 65 20 2a 2f 0a  results here */.
32ed0 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65  .  assert( p->re
32ee0 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61  adOnly==0 );.  a
32ef0 52 65 73 5b 30 5d 20 3d 20 30 3b 0a 20 20 61 52  Res[0] = 0;.  aR
32f00 65 73 5b 31 5d 20 3d 20 61 52 65 73 5b 32 5d 20  es[1] = aRes[2] 
32f10 3d 20 2d 31 3b 0a 20 20 61 73 73 65 72 74 28 20  = -1;.  assert( 
32f20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
32f30 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49  CHECKPOINT_PASSI
32f40 56 45 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f 70  VE.       || pOp
32f50 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45  ->p2==SQLITE_CHE
32f60 43 4b 50 4f 49 4e 54 5f 46 55 4c 4c 0a 20 20 20  CKPOINT_FULL.   
32f70 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d      || pOp->p2==
32f80 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e  SQLITE_CHECKPOIN
32f90 54 5f 52 45 53 54 41 52 54 0a 20 20 20 20 20 20  T_RESTART.      
32fa0 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c   || pOp->p2==SQL
32fb0 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 54  ITE_CHECKPOINT_T
32fc0 52 55 4e 43 41 54 45 0a 20 20 29 3b 0a 20 20 72  RUNCATE.  );.  r
32fd0 63 20 3d 20 73 71 6c 69 74 65 33 43 68 65 63 6b  c = sqlite3Check
32fe0 70 6f 69 6e 74 28 64 62 2c 20 70 4f 70 2d 3e 70  point(db, pOp->p
32ff0 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 26 61 52 65  1, pOp->p2, &aRe
33000 73 5b 31 5d 2c 20 26 61 52 65 73 5b 32 5d 29 3b  s[1], &aRes[2]);
33010 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20  .  if( rc ){.   
33020 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
33030 42 55 53 59 20 29 20 67 6f 74 6f 20 61 62 6f 72  BUSY ) goto abor
33040 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
33050 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
33060 4f 4b 3b 0a 20 20 20 20 61 52 65 73 5b 30 5d 20  OK;.    aRes[0] 
33070 3d 20 31 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69  = 1;.  }.  for(i
33080 3d 30 2c 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d  =0, pMem = &aMem
33090 5b 70 4f 70 2d 3e 70 33 5d 3b 20 69 3c 33 3b 20  [pOp->p3]; i<3; 
330a0 69 2b 2b 2c 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20  i++, pMem++){.  
330b0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
330c0 53 65 74 49 6e 74 36 34 28 70 4d 65 6d 2c 20 28  SetInt64(pMem, (
330d0 69 36 34 29 61 52 65 73 5b 69 5d 29 3b 0a 20 20  i64)aRes[i]);.  
330e0 7d 20 20 20 20 0a 20 20 62 72 65 61 6b 3b 0a 7d  }    .  break;.}
330f0 3b 20 20 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  ;  .#endif..#ifn
33100 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
33110 50 52 41 47 4d 41 0a 2f 2a 20 4f 70 63 6f 64 65  PRAGMA./* Opcode
33120 3a 20 4a 6f 75 72 6e 61 6c 4d 6f 64 65 20 50 31  : JournalMode P1
33130 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
33140 20 43 68 61 6e 67 65 20 74 68 65 20 6a 6f 75 72   Change the jour
33150 6e 61 6c 20 6d 6f 64 65 20 6f 66 20 64 61 74 61  nal mode of data
33160 62 61 73 65 20 50 31 20 74 6f 20 50 33 2e 20 50  base P1 to P3. P
33170 33 20 6d 75 73 74 20 62 65 20 6f 6e 65 20 6f 66  3 must be one of
33180 20 74 68 65 0a 2a 2a 20 50 41 47 45 52 5f 4a 4f   the.** PAGER_JO
33190 55 52 4e 41 4c 4d 4f 44 45 5f 58 58 58 20 76 61  URNALMODE_XXX va
331a0 6c 75 65 73 2e 20 49 66 20 63 68 61 6e 67 69 6e  lues. If changin
331b0 67 20 62 65 74 77 65 65 6e 20 74 68 65 20 76 61  g between the va
331c0 72 69 6f 75 73 20 72 6f 6c 6c 62 61 63 6b 0a 2a  rious rollback.*
331d0 2a 20 6d 6f 64 65 73 20 28 64 65 6c 65 74 65 2c  * modes (delete,
331e0 20 74 72 75 6e 63 61 74 65 2c 20 70 65 72 73 69   truncate, persi
331f0 73 74 2c 20 6f 66 66 20 61 6e 64 20 6d 65 6d 6f  st, off and memo
33200 72 79 29 2c 20 74 68 69 73 20 69 73 20 61 20 73  ry), this is a s
33210 69 6d 70 6c 65 0a 2a 2a 20 6f 70 65 72 61 74 69  imple.** operati
33220 6f 6e 2e 20 4e 6f 20 49 4f 20 69 73 20 72 65 71  on. No IO is req
33230 75 69 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  uired..**.** If 
33240 63 68 61 6e 67 69 6e 67 20 69 6e 74 6f 20 6f 72  changing into or
33250 20 6f 75 74 20 6f 66 20 57 41 4c 20 6d 6f 64 65   out of WAL mode
33260 20 74 68 65 20 70 72 6f 63 65 64 75 72 65 20 69   the procedure i
33270 73 20 6d 6f 72 65 20 63 6f 6d 70 6c 69 63 61 74  s more complicat
33280 65 64 2e 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  ed..**.** Write 
33290 61 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e  a string contain
332a0 69 6e 67 20 74 68 65 20 66 69 6e 61 6c 20 6a 6f  ing the final jo
332b0 75 72 6e 61 6c 2d 6d 6f 64 65 20 74 6f 20 72 65  urnal-mode to re
332c0 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61  gister P2..*/.ca
332d0 73 65 20 4f 50 5f 4a 6f 75 72 6e 61 6c 4d 6f 64  se OP_JournalMod
332e0 65 3a 20 7b 20 20 20 20 2f 2a 20 6f 75 74 32 20  e: {    /* out2 
332f0 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b  */.  Btree *pBt;
33300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33310 20 20 20 20 20 2f 2a 20 42 74 72 65 65 20 74 6f       /* Btree to
33320 20 63 68 61 6e 67 65 20 6a 6f 75 72 6e 61 6c 20   change journal 
33330 6d 6f 64 65 20 6f 66 20 2a 2f 0a 20 20 50 61 67  mode of */.  Pag
33340 65 72 20 2a 70 50 61 67 65 72 3b 20 20 20 20 20  er *pPager;     
33350 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
33360 50 61 67 65 72 20 61 73 73 6f 63 69 61 74 65 64  Pager associated
33370 20 77 69 74 68 20 70 42 74 20 2a 2f 0a 20 20 69   with pBt */.  i
33380 6e 74 20 65 4e 65 77 3b 20 20 20 20 20 20 20 20  nt eNew;        
33390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
333a0 2a 20 4e 65 77 20 6a 6f 75 72 6e 61 6c 20 6d 6f  * New journal mo
333b0 64 65 20 2a 2f 0a 20 20 69 6e 74 20 65 4f 6c 64  de */.  int eOld
333c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
333d0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f          /* The o
333e0 6c 64 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20  ld journal mode 
333f0 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
33400 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 63 6f 6e  E_OMIT_WAL.  con
33410 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61  st char *zFilena
33420 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  me;          /* 
33430 4e 61 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65  Name of database
33440 20 66 69 6c 65 20 66 6f 72 20 70 50 61 67 65 72   file for pPager
33450 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 20 20 70 4f   */.#endif..  pO
33460 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
33470 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 65  ase(p, pOp);.  e
33480 4e 65 77 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  New = pOp->p3;. 
33490 20 61 73 73 65 72 74 28 20 65 4e 65 77 3d 3d 50   assert( eNew==P
334a0 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
334b0 5f 44 45 4c 45 54 45 20 0a 20 20 20 20 20 20 20  _DELETE .       
334c0 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  || eNew==PAGER_J
334d0 4f 55 52 4e 41 4c 4d 4f 44 45 5f 54 52 55 4e 43  OURNALMODE_TRUNC
334e0 41 54 45 20 0a 20 20 20 20 20 20 20 7c 7c 20 65  ATE .       || e
334f0 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
33500 41 4c 4d 4f 44 45 5f 50 45 52 53 49 53 54 20 0a  ALMODE_PERSIST .
33510 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d         || eNew==
33520 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
33530 45 5f 4f 46 46 0a 20 20 20 20 20 20 20 7c 7c 20  E_OFF.       || 
33540 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
33550 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 0a 20  NALMODE_MEMORY. 
33560 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50        || eNew==P
33570 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
33580 5f 57 41 4c 0a 20 20 20 20 20 20 20 7c 7c 20 65  _WAL.       || e
33590 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  New==PAGER_JOURN
335a0 41 4c 4d 4f 44 45 5f 51 55 45 52 59 0a 20 20 29  ALMODE_QUERY.  )
335b0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
335c0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
335d0 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  1<db->nDb );.  a
335e0 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
335f0 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 70 42 74 20  ly==0 );..  pBt 
33600 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  = db->aDb[pOp->p
33610 31 5d 2e 70 42 74 3b 0a 20 20 70 50 61 67 65 72  1].pBt;.  pPager
33620 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50   = sqlite3BtreeP
33630 61 67 65 72 28 70 42 74 29 3b 0a 20 20 65 4f 6c  ager(pBt);.  eOl
33640 64 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72  d = sqlite3Pager
33650 47 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70  GetJournalMode(p
33660 50 61 67 65 72 29 3b 0a 20 20 69 66 28 20 65 4e  Pager);.  if( eN
33670 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
33680 4c 4d 4f 44 45 5f 51 55 45 52 59 20 29 20 65 4e  LMODE_QUERY ) eN
33690 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 69 66 28  ew = eOld;.  if(
336a0 20 21 73 71 6c 69 74 65 33 50 61 67 65 72 4f 6b   !sqlite3PagerOk
336b0 54 6f 43 68 61 6e 67 65 4a 6f 75 72 6e 61 6c 4d  ToChangeJournalM
336c0 6f 64 65 28 70 50 61 67 65 72 29 20 29 20 65 4e  ode(pPager) ) eN
336d0 65 77 20 3d 20 65 4f 6c 64 3b 0a 0a 23 69 66 6e  ew = eOld;..#ifn
336e0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
336f0 57 41 4c 0a 20 20 7a 46 69 6c 65 6e 61 6d 65 20  WAL.  zFilename 
33700 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 46 69  = sqlite3PagerFi
33710 6c 65 6e 61 6d 65 28 70 50 61 67 65 72 2c 20 31  lename(pPager, 1
33720 29 3b 0a 0a 20 20 2f 2a 20 44 6f 20 6e 6f 74 20  );..  /* Do not 
33730 61 6c 6c 6f 77 20 61 20 74 72 61 6e 73 69 74 69  allow a transiti
33740 6f 6e 20 74 6f 20 6a 6f 75 72 6e 61 6c 5f 6d 6f  on to journal_mo
33750 64 65 3d 57 41 4c 20 66 6f 72 20 61 20 64 61 74  de=WAL for a dat
33760 61 62 61 73 65 0a 20 20 2a 2a 20 69 6e 20 74 65  abase.  ** in te
33770 6d 70 6f 72 61 72 79 20 73 74 6f 72 61 67 65 20  mporary storage 
33780 6f 72 20 69 66 20 74 68 65 20 56 46 53 20 64 6f  or if the VFS do
33790 65 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 73  es not support s
337a0 68 61 72 65 64 20 6d 65 6d 6f 72 79 20 0a 20 20  hared memory .  
337b0 2a 2f 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d 50  */.  if( eNew==P
337c0 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
337d0 5f 57 41 4c 0a 20 20 20 26 26 20 28 73 71 6c 69  _WAL.   && (sqli
337e0 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 46 69 6c  te3Strlen30(zFil
337f0 65 6e 61 6d 65 29 3d 3d 30 20 20 20 20 20 20 20  ename)==0       
33800 20 20 20 20 2f 2a 20 54 65 6d 70 20 66 69 6c 65      /* Temp file
33810 20 2a 2f 0a 20 20 20 20 20 20 20 7c 7c 20 21 73   */.       || !s
33820 71 6c 69 74 65 33 50 61 67 65 72 57 61 6c 53 75  qlite3PagerWalSu
33830 70 70 6f 72 74 65 64 28 70 50 61 67 65 72 29 29  pported(pPager))
33840 20 20 20 2f 2a 20 4e 6f 20 73 68 61 72 65 64 2d     /* No shared-
33850 6d 65 6d 6f 72 79 20 73 75 70 70 6f 72 74 20 2a  memory support *
33860 2f 0a 20 20 29 7b 0a 20 20 20 20 65 4e 65 77 20  /.  ){.    eNew 
33870 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a 0a 20 20 69  = eOld;.  }..  i
33880 66 28 20 28 65 4e 65 77 21 3d 65 4f 6c 64 29 0a  f( (eNew!=eOld).
33890 20 20 20 26 26 20 28 65 4f 6c 64 3d 3d 50 41 47     && (eOld==PAG
338a0 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57  ER_JOURNALMODE_W
338b0 41 4c 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45  AL || eNew==PAGE
338c0 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41  R_JOURNALMODE_WA
338d0 4c 29 0a 20 20 29 7b 0a 20 20 20 20 69 66 28 20  L).  ){.    if( 
338e0 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20  !db->autoCommit 
338f0 7c 7c 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64  || db->nVdbeRead
33900 3e 31 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  >1 ){.      rc =
33910 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
33920 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
33930 45 72 72 6f 72 28 70 2c 0a 20 20 20 20 20 20 20  Error(p,.       
33940 20 20 20 22 63 61 6e 6e 6f 74 20 63 68 61 6e 67     "cannot chang
33950 65 20 25 73 20 77 61 6c 20 6d 6f 64 65 20 66 72  e %s wal mode fr
33960 6f 6d 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e  om within a tran
33970 73 61 63 74 69 6f 6e 22 2c 0a 20 20 20 20 20 20  saction",.      
33980 20 20 20 20 28 65 4e 65 77 3d 3d 50 41 47 45 52      (eNew==PAGER
33990 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c  _JOURNALMODE_WAL
339a0 20 3f 20 22 69 6e 74 6f 22 20 3a 20 22 6f 75 74   ? "into" : "out
339b0 20 6f 66 22 29 0a 20 20 20 20 20 20 29 3b 0a 20   of").      );. 
339c0 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
339d0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
339e0 20 20 7d 65 6c 73 65 7b 0a 20 0a 20 20 20 20 20    }else{. .     
339f0 20 69 66 28 20 65 4f 6c 64 3d 3d 50 41 47 45 52   if( eOld==PAGER
33a00 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c  _JOURNALMODE_WAL
33a10 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49   ){.        /* I
33a20 66 20 6c 65 61 76 69 6e 67 20 57 41 4c 20 6d 6f  f leaving WAL mo
33a30 64 65 2c 20 63 6c 6f 73 65 20 74 68 65 20 6c 6f  de, close the lo
33a40 67 20 66 69 6c 65 2e 20 49 66 20 73 75 63 63 65  g file. If succe
33a50 73 73 66 75 6c 2c 20 74 68 65 20 63 61 6c 6c 0a  ssful, the call.
33a60 20 20 20 20 20 20 20 20 2a 2a 20 74 6f 20 50 61          ** to Pa
33a70 67 65 72 43 6c 6f 73 65 57 61 6c 28 29 20 63 68  gerCloseWal() ch
33a80 65 63 6b 70 6f 69 6e 74 73 20 61 6e 64 20 64 65  eckpoints and de
33a90 6c 65 74 65 73 20 74 68 65 20 77 72 69 74 65 2d  letes the write-
33aa0 61 68 65 61 64 2d 6c 6f 67 20 0a 20 20 20 20 20  ahead-log .     
33ab0 20 20 20 2a 2a 20 66 69 6c 65 2e 20 41 6e 20 45     ** file. An E
33ac0 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b 20 6d 61  XCLUSIVE lock ma
33ad0 79 20 73 74 69 6c 6c 20 62 65 20 68 65 6c 64 20  y still be held 
33ae0 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  on the database 
33af0 66 69 6c 65 20 0a 20 20 20 20 20 20 20 20 2a 2a  file .        **
33b00 20 61 66 74 65 72 20 61 20 73 75 63 63 65 73 73   after a success
33b10 66 75 6c 20 72 65 74 75 72 6e 2e 20 0a 20 20 20  ful return. .   
33b20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20       */.        
33b30 72 63 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65  rc = sqlite3Page
33b40 72 43 6c 6f 73 65 57 61 6c 28 70 50 61 67 65 72  rCloseWal(pPager
33b50 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72  );.        if( r
33b60 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
33b70 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
33b80 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c  3PagerSetJournal
33b90 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4e 65  Mode(pPager, eNe
33ba0 77 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  w);.        }.  
33bb0 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 65 4f      }else if( eO
33bc0 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ld==PAGER_JOURNA
33bd0 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 20 29 7b 0a  LMODE_MEMORY ){.
33be0 20 20 20 20 20 20 20 20 2f 2a 20 43 61 6e 6e 6f          /* Canno
33bf0 74 20 74 72 61 6e 73 69 74 69 6f 6e 20 64 69 72  t transition dir
33c00 65 63 74 6c 79 20 66 72 6f 6d 20 4d 45 4d 4f 52  ectly from MEMOR
33c10 59 20 74 6f 20 57 41 4c 2e 20 20 55 73 65 20 6d  Y to WAL.  Use m
33c20 6f 64 65 20 4f 46 46 0a 20 20 20 20 20 20 20 20  ode OFF.        
33c30 2a 2a 20 61 73 20 61 6e 20 69 6e 74 65 72 6d 65  ** as an interme
33c40 64 69 61 74 65 20 2a 2f 0a 20 20 20 20 20 20 20  diate */.       
33c50 20 73 71 6c 69 74 65 33 50 61 67 65 72 53 65 74   sqlite3PagerSet
33c60 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67  JournalMode(pPag
33c70 65 72 2c 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41  er, PAGER_JOURNA
33c80 4c 4d 4f 44 45 5f 4f 46 46 29 3b 0a 20 20 20 20  LMODE_OFF);.    
33c90 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20    }.  .      /* 
33ca0 4f 70 65 6e 20 61 20 74 72 61 6e 73 61 63 74 69  Open a transacti
33cb0 6f 6e 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  on on the databa
33cc0 73 65 20 66 69 6c 65 2e 20 52 65 67 61 72 64 6c  se file. Regardl
33cd0 65 73 73 20 6f 66 20 74 68 65 20 6a 6f 75 72 6e  ess of the journ
33ce0 61 6c 0a 20 20 20 20 20 20 2a 2a 20 6d 6f 64 65  al.      ** mode
33cf0 2c 20 74 68 69 73 20 74 72 61 6e 73 61 63 74 69  , this transacti
33d00 6f 6e 20 61 6c 77 61 79 73 20 75 73 65 73 20 61  on always uses a
33d10 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61   rollback journa
33d20 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  l..      */.    
33d30 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
33d40 33 42 74 72 65 65 49 73 49 6e 54 72 61 6e 73 28  3BtreeIsInTrans(
33d50 70 42 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20  pBt)==0 );.     
33d60 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
33d70 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  OK ){.        rc
33d80 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 53   = sqlite3BtreeS
33d90 65 74 56 65 72 73 69 6f 6e 28 70 42 74 2c 20 28  etVersion(pBt, (
33da0 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
33db0 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 32 20  NALMODE_WAL ? 2 
33dc0 3a 20 31 29 29 3b 0a 20 20 20 20 20 20 7d 0a 20  : 1));.      }. 
33dd0 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 20     }.  }.#endif 
33de0 2f 2a 20 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /* ifndef SQLITE
33df0 5f 4f 4d 49 54 5f 57 41 4c 20 2a 2f 0a 0a 20 20  _OMIT_WAL */..  
33e00 69 66 28 20 72 63 20 29 20 65 4e 65 77 20 3d 20  if( rc ) eNew = 
33e10 65 4f 6c 64 3b 0a 20 20 65 4e 65 77 20 3d 20 73  eOld;.  eNew = s
33e20 71 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f  qlite3PagerSetJo
33e30 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72  urnalMode(pPager
33e40 2c 20 65 4e 65 77 29 3b 0a 0a 20 20 70 4f 75 74  , eNew);..  pOut
33e50 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74  ->flags = MEM_St
33e60 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d  r|MEM_Static|MEM
33e70 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a  _Term;.  pOut->z
33e80 20 3d 20 28 63 68 61 72 20 2a 29 73 71 6c 69 74   = (char *)sqlit
33e90 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d  e3JournalModenam
33ea0 65 28 65 4e 65 77 29 3b 0a 20 20 70 4f 75 74 2d  e(eNew);.  pOut-
33eb0 3e 6e 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c  >n = sqlite3Strl
33ec0 65 6e 33 30 28 70 4f 75 74 2d 3e 7a 29 3b 0a 20  en30(pOut->z);. 
33ed0 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c   pOut->enc = SQL
33ee0 49 54 45 5f 55 54 46 38 3b 0a 20 20 73 71 6c 69  ITE_UTF8;.  sqli
33ef0 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
33f00 6f 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f  oding(pOut, enco
33f10 64 69 6e 67 29 3b 0a 20 20 69 66 28 20 72 63 20  ding);.  if( rc 
33f20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
33f30 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65  _to_error;.  bre
33f40 61 6b 3b 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a  ak;.};.#endif /*
33f50 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41   SQLITE_OMIT_PRA
33f60 47 4d 41 20 2a 2f 0a 0a 23 69 66 20 21 64 65 66  GMA */..#if !def
33f70 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
33f80 5f 56 41 43 55 55 4d 29 20 26 26 20 21 64 65 66  _VACUUM) && !def
33f90 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
33fa0 5f 41 54 54 41 43 48 29 0a 2f 2a 20 4f 70 63 6f  _ATTACH)./* Opco
33fb0 64 65 3a 20 56 61 63 75 75 6d 20 2a 20 2a 20 2a  de: Vacuum * * *
33fc0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56 61 63 75 75   * *.**.** Vacuu
33fd0 6d 20 74 68 65 20 65 6e 74 69 72 65 20 64 61 74  m the entire dat
33fe0 61 62 61 73 65 2e 20 20 54 68 69 73 20 6f 70 63  abase.  This opc
33ff0 6f 64 65 20 77 69 6c 6c 20 63 61 75 73 65 20 6f  ode will cause o
34000 74 68 65 72 20 76 69 72 74 75 61 6c 0a 2a 2a 20  ther virtual.** 
34010 6d 61 63 68 69 6e 65 73 20 74 6f 20 62 65 20 63  machines to be c
34020 72 65 61 74 65 64 20 61 6e 64 20 72 75 6e 2e 20  reated and run. 
34030 20 49 74 20 6d 61 79 20 6e 6f 74 20 62 65 20 63   It may not be c
34040 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69  alled from withi
34050 6e 0a 2a 2a 20 61 20 74 72 61 6e 73 61 63 74 69  n.** a transacti
34060 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  on..*/.case OP_V
34070 61 63 75 75 6d 3a 20 7b 0a 20 20 61 73 73 65 72  acuum: {.  asser
34080 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
34090 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  0 );.  rc = sqli
340a0 74 65 33 52 75 6e 56 61 63 75 75 6d 28 26 70 2d  te3RunVacuum(&p-
340b0 3e 7a 45 72 72 4d 73 67 2c 20 64 62 29 3b 0a 20  >zErrMsg, db);. 
340c0 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
340d0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
340e0 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  r;.  break;.}.#e
340f0 6e 64 69 66 0a 0a 23 69 66 20 21 64 65 66 69 6e  ndif..#if !defin
34100 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ed(SQLITE_OMIT_A
34110 55 54 4f 56 41 43 55 55 4d 29 0a 2f 2a 20 4f 70  UTOVACUUM)./* Op
34120 63 6f 64 65 3a 20 49 6e 63 72 56 61 63 75 75 6d  code: IncrVacuum
34130 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
34140 2a 2a 20 50 65 72 66 6f 72 6d 20 61 20 73 69 6e  ** Perform a sin
34150 67 6c 65 20 73 74 65 70 20 6f 66 20 74 68 65 20  gle step of the 
34160 69 6e 63 72 65 6d 65 6e 74 61 6c 20 76 61 63 75  incremental vacu
34170 75 6d 20 70 72 6f 63 65 64 75 72 65 20 6f 6e 0a  um procedure on.
34180 2a 2a 20 74 68 65 20 50 31 20 64 61 74 61 62 61  ** the P1 databa
34190 73 65 2e 20 49 66 20 74 68 65 20 76 61 63 75 75  se. If the vacuu
341a0 6d 20 68 61 73 20 66 69 6e 69 73 68 65 64 2c 20  m has finished, 
341b0 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74  jump to instruct
341c0 69 6f 6e 0a 2a 2a 20 50 32 2e 20 4f 74 68 65 72  ion.** P2. Other
341d0 77 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75  wise, fall throu
341e0 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
341f0 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63  nstruction..*/.c
34200 61 73 65 20 4f 50 5f 49 6e 63 72 56 61 63 75 75  ase OP_IncrVacuu
34210 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  m: {        /* j
34220 75 6d 70 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a  ump */.  Btree *
34230 70 42 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  pBt;..  assert( 
34240 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
34250 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
34260 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73  .  assert( DbMas
34270 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61  kTest(p->btreeMa
34280 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a  sk, pOp->p1) );.
34290 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
342a0 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 42  dOnly==0 );.  pB
342b0 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  t = db->aDb[pOp-
342c0 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 72 63 20 3d  >p1].pBt;.  rc =
342d0 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 63   sqlite3BtreeInc
342e0 72 56 61 63 75 75 6d 28 70 42 74 29 3b 0a 20 20  rVacuum(pBt);.  
342f0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
34300 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 2c  rc==SQLITE_DONE,
34310 32 29 3b 0a 20 20 69 66 28 20 72 63 20 29 7b 0a  2);.  if( rc ){.
34320 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
34330 54 45 5f 44 4f 4e 45 20 29 20 67 6f 74 6f 20 61  TE_DONE ) goto a
34340 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
34350 72 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  r;.    rc = SQLI
34360 54 45 5f 4f 4b 3b 0a 20 20 20 20 67 6f 74 6f 20  TE_OK;.    goto 
34370 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a  jump_to_p2;.  }.
34380 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
34390 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 78  f../* Opcode: Ex
343a0 70 69 72 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  pire P1 * * * *.
343b0 2a 2a 0a 2a 2a 20 43 61 75 73 65 20 70 72 65 63  **.** Cause prec
343c0 6f 6d 70 69 6c 65 64 20 73 74 61 74 65 6d 65 6e  ompiled statemen
343d0 74 73 20 74 6f 20 65 78 70 69 72 65 2e 20 20 57  ts to expire.  W
343e0 68 65 6e 20 61 6e 20 65 78 70 69 72 65 64 20 73  hen an expired s
343f0 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 69 73 20 65  tatement.** is e
34400 78 65 63 75 74 65 64 20 75 73 69 6e 67 20 73 71  xecuted using sq
34410 6c 69 74 65 33 5f 73 74 65 70 28 29 20 69 74 20  lite3_step() it 
34420 77 69 6c 6c 20 65 69 74 68 65 72 20 61 75 74 6f  will either auto
34430 6d 61 74 69 63 61 6c 6c 79 0a 2a 2a 20 72 65 70  matically.** rep
34440 72 65 70 61 72 65 20 69 74 73 65 6c 66 20 28 69  repare itself (i
34450 66 20 69 74 20 77 61 73 20 6f 72 69 67 69 6e 61  f it was origina
34460 6c 6c 79 20 63 72 65 61 74 65 64 20 75 73 69 6e  lly created usin
34470 67 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  g sqlite3_prepar
34480 65 5f 76 32 28 29 29 0a 2a 2a 20 6f 72 20 69 74  e_v2()).** or it
34490 20 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20   will fail with 
344a0 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 2e 0a 2a  SQLITE_SCHEMA..*
344b0 2a 20 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 30  * .** If P1 is 0
344c0 2c 20 74 68 65 6e 20 61 6c 6c 20 53 51 4c 20 73  , then all SQL s
344d0 74 61 74 65 6d 65 6e 74 73 20 62 65 63 6f 6d 65  tatements become
344e0 20 65 78 70 69 72 65 64 2e 20 49 66 20 50 31 20   expired. If P1 
344f0 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20  is non-zero,.** 
34500 74 68 65 6e 20 6f 6e 6c 79 20 74 68 65 20 63 75  then only the cu
34510 72 72 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e  rrently executin
34520 67 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 65  g statement is e
34530 78 70 69 72 65 64 2e 0a 2a 2f 0a 63 61 73 65 20  xpired..*/.case 
34540 4f 50 5f 45 78 70 69 72 65 3a 20 7b 0a 20 20 69  OP_Expire: {.  i
34550 66 28 20 21 70 4f 70 2d 3e 70 31 20 29 7b 0a 20  f( !pOp->p1 ){. 
34560 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65     sqlite3Expire
34570 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e  PreparedStatemen
34580 74 73 28 64 62 29 3b 0a 20 20 7d 65 6c 73 65 7b  ts(db);.  }else{
34590 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20  .    p->expired 
345a0 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  = 1;.  }.  break
345b0 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ;.}..#ifndef SQL
345c0 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f  ITE_OMIT_SHARED_
345d0 43 41 43 48 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  CACHE./* Opcode:
345e0 20 54 61 62 6c 65 4c 6f 63 6b 20 50 31 20 50 32   TableLock P1 P2
345f0 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
34600 70 73 69 73 3a 20 69 44 62 3d 50 31 20 72 6f 6f  psis: iDb=P1 roo
34610 74 3d 50 32 20 77 72 69 74 65 3d 50 33 0a 2a 2a  t=P2 write=P3.**
34620 0a 2a 2a 20 4f 62 74 61 69 6e 20 61 20 6c 6f 63  .** Obtain a loc
34630 6b 20 6f 6e 20 61 20 70 61 72 74 69 63 75 6c 61  k on a particula
34640 72 20 74 61 62 6c 65 2e 20 54 68 69 73 20 69 6e  r table. This in
34650 73 74 72 75 63 74 69 6f 6e 20 69 73 20 6f 6e 6c  struction is onl
34660 79 20 75 73 65 64 20 77 68 65 6e 0a 2a 2a 20 74  y used when.** t
34670 68 65 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  he shared-cache 
34680 66 65 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c  feature is enabl
34690 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  ed. .**.** P1 is
346a0 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68   the index of th
346b0 65 20 64 61 74 61 62 61 73 65 20 69 6e 20 73 71  e database in sq
346c0 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 74  lite3.aDb[] of t
346d0 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 6f  he database.** o
346e0 6e 20 77 68 69 63 68 20 74 68 65 20 6c 6f 63 6b  n which the lock
346f0 20 69 73 20 61 63 71 75 69 72 65 64 2e 20 20 41   is acquired.  A
34700 20 72 65 61 64 6c 6f 63 6b 20 69 73 20 6f 62 74   readlock is obt
34710 61 69 6e 65 64 20 69 66 20 50 33 3d 3d 30 20 6f  ained if P3==0 o
34720 72 0a 2a 2a 20 61 20 77 72 69 74 65 20 6c 6f 63  r.** a write loc
34730 6b 20 69 66 20 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a  k if P3==1..**.*
34740 2a 20 50 32 20 63 6f 6e 74 61 69 6e 73 20 74 68  * P2 contains th
34750 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74  e root-page of t
34760 68 65 20 74 61 62 6c 65 20 74 6f 20 6c 6f 63 6b  he table to lock
34770 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 63 6f 6e 74 61  ..**.** P4 conta
34780 69 6e 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  ins a pointer to
34790 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
347a0 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6c 6f 63   table being loc
347b0 6b 65 64 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c  ked. This is onl
347c0 79 0a 2a 2a 20 75 73 65 64 20 74 6f 20 67 65 6e  y.** used to gen
347d0 65 72 61 74 65 20 61 6e 20 65 72 72 6f 72 20 6d  erate an error m
347e0 65 73 73 61 67 65 20 69 66 20 74 68 65 20 6c 6f  essage if the lo
347f0 63 6b 20 63 61 6e 6e 6f 74 20 62 65 20 6f 62 74  ck cannot be obt
34800 61 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ained..*/.case O
34810 50 5f 54 61 62 6c 65 4c 6f 63 6b 3a 20 7b 0a 20  P_TableLock: {. 
34820 20 75 38 20 69 73 57 72 69 74 65 4c 6f 63 6b 20   u8 isWriteLock 
34830 3d 20 28 75 38 29 70 4f 70 2d 3e 70 33 3b 0a 20  = (u8)pOp->p3;. 
34840 20 69 66 28 20 69 73 57 72 69 74 65 4c 6f 63 6b   if( isWriteLock
34850 20 7c 7c 20 30 3d 3d 28 64 62 2d 3e 66 6c 61 67   || 0==(db->flag
34860 73 26 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63  s&SQLITE_ReadUnc
34870 6f 6d 6d 69 74 74 65 64 29 20 29 7b 0a 20 20 20  ommitted) ){.   
34880 20 69 6e 74 20 70 31 20 3d 20 70 4f 70 2d 3e 70   int p1 = pOp->p
34890 31 3b 20 0a 20 20 20 20 61 73 73 65 72 74 28 20  1; .    assert( 
348a0 70 31 3e 3d 30 20 26 26 20 70 31 3c 64 62 2d 3e  p1>=0 && p1<db->
348b0 6e 44 62 20 29 3b 0a 20 20 20 20 61 73 73 65 72  nDb );.    asser
348c0 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d  t( DbMaskTest(p-
348d0 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 31 29 20  >btreeMask, p1) 
348e0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69  );.    assert( i
348f0 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 30 20 7c 7c  sWriteLock==0 ||
34900 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 31 20   isWriteLock==1 
34910 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
34920 74 65 33 42 74 72 65 65 4c 6f 63 6b 54 61 62 6c  te3BtreeLockTabl
34930 65 28 64 62 2d 3e 61 44 62 5b 70 31 5d 2e 70 42  e(db->aDb[p1].pB
34940 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 69 73 57 72  t, pOp->p2, isWr
34950 69 74 65 4c 6f 63 6b 29 3b 0a 20 20 20 20 69 66  iteLock);.    if
34960 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20 69 66  ( rc ){.      if
34970 28 20 28 72 63 26 30 78 46 46 29 3d 3d 53 51 4c  ( (rc&0xFF)==SQL
34980 49 54 45 5f 4c 4f 43 4b 45 44 20 29 7b 0a 20 20  ITE_LOCKED ){.  
34990 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
349a0 20 2a 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b   *z = pOp->p4.z;
349b0 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
349c0 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 64 61  VdbeError(p, "da
349d0 74 61 62 61 73 65 20 74 61 62 6c 65 20 69 73 20  tabase table is 
349e0 6c 6f 63 6b 65 64 3a 20 25 73 22 2c 20 7a 29 3b  locked: %s", z);
349f0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 67  .      }.      g
34a00 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
34a10 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20  _error;.    }.  
34a20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
34a30 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
34a40 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 20  IT_SHARED_CACHE 
34a50 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
34a60 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
34a70 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
34a80 56 42 65 67 69 6e 20 2a 20 2a 20 2a 20 50 34 20  VBegin * * * P4 
34a90 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62  *.**.** P4 may b
34aa0 65 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  e a pointer to a
34ab0 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73  n sqlite3_vtab s
34ac0 74 72 75 63 74 75 72 65 2e 20 49 66 20 73 6f 2c  tructure. If so,
34ad0 20 63 61 6c 6c 20 74 68 65 20 0a 2a 2a 20 78 42   call the .** xB
34ae0 65 67 69 6e 20 6d 65 74 68 6f 64 20 66 6f 72 20  egin method for 
34af0 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  that table..**.*
34b00 2a 20 41 6c 73 6f 2c 20 77 68 65 74 68 65 72 20  * Also, whether 
34b10 6f 72 20 6e 6f 74 20 50 34 20 69 73 20 73 65 74  or not P4 is set
34b20 2c 20 63 68 65 63 6b 20 74 68 61 74 20 74 68 69  , check that thi
34b30 73 20 69 73 20 6e 6f 74 20 62 65 69 6e 67 20 63  s is not being c
34b40 61 6c 6c 65 64 20 66 72 6f 6d 0a 2a 2a 20 77 69  alled from.** wi
34b50 74 68 69 6e 20 61 20 63 61 6c 6c 62 61 63 6b 20  thin a callback 
34b60 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  to a virtual tab
34b70 6c 65 20 78 53 79 6e 63 28 29 20 6d 65 74 68 6f  le xSync() metho
34b80 64 2e 20 49 66 20 69 74 20 69 73 2c 20 74 68 65  d. If it is, the
34b90 20 65 72 72 6f 72 0a 2a 2a 20 63 6f 64 65 20 77   error.** code w
34ba0 69 6c 6c 20 62 65 20 73 65 74 20 74 6f 20 53 51  ill be set to SQ
34bb0 4c 49 54 45 5f 4c 4f 43 4b 45 44 2e 0a 2a 2f 0a  LITE_LOCKED..*/.
34bc0 63 61 73 65 20 4f 50 5f 56 42 65 67 69 6e 3a 20  case OP_VBegin: 
34bd0 7b 0a 20 20 56 54 61 62 6c 65 20 2a 70 56 54 61  {.  VTable *pVTa
34be0 62 3b 0a 20 20 70 56 54 61 62 20 3d 20 70 4f 70  b;.  pVTab = pOp
34bf0 2d 3e 70 34 2e 70 56 74 61 62 3b 0a 20 20 72 63  ->p4.pVtab;.  rc
34c00 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 42 65   = sqlite3VtabBe
34c10 67 69 6e 28 64 62 2c 20 70 56 54 61 62 29 3b 0a  gin(db, pVTab);.
34c20 20 20 69 66 28 20 70 56 54 61 62 20 29 20 73 71    if( pVTab ) sq
34c30 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45  lite3VtabImportE
34c40 72 72 6d 73 67 28 70 2c 20 70 56 54 61 62 2d 3e  rrmsg(p, pVTab->
34c50 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 72 63  pVtab);.  if( rc
34c60 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
34c70 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72  e_to_error;.  br
34c80 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
34c90 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
34ca0 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
34cb0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
34cc0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
34cd0 2a 20 4f 70 63 6f 64 65 3a 20 56 43 72 65 61 74  * Opcode: VCreat
34ce0 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  e P1 P2 * * *.**
34cf0 0a 2a 2a 20 50 32 20 69 73 20 61 20 72 65 67 69  .** P2 is a regi
34d00 73 74 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20  ster that holds 
34d10 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 76 69  the name of a vi
34d20 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 20 64  rtual table in d
34d30 61 74 61 62 61 73 65 20 0a 2a 2a 20 50 31 2e 20  atabase .** P1. 
34d40 43 61 6c 6c 20 74 68 65 20 78 43 72 65 61 74 65  Call the xCreate
34d50 20 6d 65 74 68 6f 64 20 66 6f 72 20 74 68 61 74   method for that
34d60 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20   table..*/.case 
34d70 4f 50 5f 56 43 72 65 61 74 65 3a 20 7b 0a 20 20  OP_VCreate: {.  
34d80 4d 65 6d 20 73 4d 65 6d 3b 20 20 20 20 20 20 20  Mem sMem;       
34d90 20 20 20 2f 2a 20 46 6f 72 20 73 74 6f 72 69 6e     /* For storin
34da0 67 20 74 68 65 20 72 65 63 6f 72 64 20 62 65 69  g the record bei
34db0 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20  ng decoded */.  
34dc0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 62  const char *zTab
34dd0 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68  ;  /* Name of th
34de0 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
34df0 2a 2f 0a 0a 20 20 6d 65 6d 73 65 74 28 26 73 4d  */..  memset(&sM
34e00 65 6d 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 4d  em, 0, sizeof(sM
34e10 65 6d 29 29 3b 0a 20 20 73 4d 65 6d 2e 64 62 20  em));.  sMem.db 
34e20 3d 20 64 62 3b 0a 20 20 2f 2a 20 42 65 63 61 75  = db;.  /* Becau
34e30 73 65 20 50 32 20 69 73 20 61 6c 77 61 79 73 20  se P2 is always 
34e40 61 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 2c  a static string,
34e50 20 69 74 20 69 73 20 69 6d 70 6f 73 73 69 62 6c   it is impossibl
34e60 65 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 73  e for the.  ** s
34e70 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6f 70  qlite3VdbeMemCop
34e80 79 28 29 20 74 6f 20 66 61 69 6c 20 2a 2f 0a 20  y() to fail */. 
34e90 20 61 73 73 65 72 74 28 20 28 61 4d 65 6d 5b 70   assert( (aMem[p
34ea0 4f 70 2d 3e 70 32 5d 2e 66 6c 61 67 73 20 26 20  Op->p2].flags & 
34eb0 4d 45 4d 5f 53 74 72 29 21 3d 30 20 29 3b 0a 20  MEM_Str)!=0 );. 
34ec0 20 61 73 73 65 72 74 28 20 28 61 4d 65 6d 5b 70   assert( (aMem[p
34ed0 4f 70 2d 3e 70 32 5d 2e 66 6c 61 67 73 20 26 20  Op->p2].flags & 
34ee0 4d 45 4d 5f 53 74 61 74 69 63 29 21 3d 30 20 29  MEM_Static)!=0 )
34ef0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
34f00 56 64 62 65 4d 65 6d 43 6f 70 79 28 26 73 4d 65  VdbeMemCopy(&sMe
34f10 6d 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  m, &aMem[pOp->p2
34f20 5d 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63  ]);.  assert( rc
34f30 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20  ==SQLITE_OK );. 
34f40 20 7a 54 61 62 20 3d 20 28 63 6f 6e 73 74 20 63   zTab = (const c
34f50 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c  har*)sqlite3_val
34f60 75 65 5f 74 65 78 74 28 26 73 4d 65 6d 29 3b 0a  ue_text(&sMem);.
34f70 20 20 61 73 73 65 72 74 28 20 7a 54 61 62 20 7c    assert( zTab |
34f80 7c 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  | db->mallocFail
34f90 65 64 20 29 3b 0a 20 20 69 66 28 20 7a 54 61 62  ed );.  if( zTab
34fa0 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
34fb0 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61  ite3VtabCallCrea
34fc0 74 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  te(db, pOp->p1, 
34fd0 7a 54 61 62 2c 20 26 70 2d 3e 7a 45 72 72 4d 73  zTab, &p->zErrMs
34fe0 67 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  g);.  }.  sqlite
34ff0 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28  3VdbeMemRelease(
35000 26 73 4d 65 6d 29 3b 0a 20 20 69 66 28 20 72 63  &sMem);.  if( rc
35010 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
35020 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72  e_to_error;.  br
35030 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
35040 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
35050 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
35060 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
35070 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
35080 2a 20 4f 70 63 6f 64 65 3a 20 56 44 65 73 74 72  * Opcode: VDestr
35090 6f 79 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  oy P1 * * P4 *.*
350a0 2a 0a 2a 2a 20 50 34 20 69 73 20 74 68 65 20 6e  *.** P4 is the n
350b0 61 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c  ame of a virtual
350c0 20 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61   table in databa
350d0 73 65 20 50 31 2e 20 20 43 61 6c 6c 20 74 68 65  se P1.  Call the
350e0 20 78 44 65 73 74 72 6f 79 20 6d 65 74 68 6f 64   xDestroy method
350f0 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c  .** of that tabl
35100 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 44  e..*/.case OP_VD
35110 65 73 74 72 6f 79 3a 20 7b 0a 20 20 64 62 2d 3e  estroy: {.  db->
35120 6e 56 44 65 73 74 72 6f 79 2b 2b 3b 0a 20 20 72  nVDestroy++;.  r
35130 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 43  c = sqlite3VtabC
35140 61 6c 6c 44 65 73 74 72 6f 79 28 64 62 2c 20 70  allDestroy(db, p
35150 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e  Op->p1, pOp->p4.
35160 7a 29 3b 0a 20 20 64 62 2d 3e 6e 56 44 65 73 74  z);.  db->nVDest
35170 72 6f 79 2d 2d 3b 0a 20 20 69 66 28 20 72 63 20  roy--;.  if( rc 
35180 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
35190 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65  _to_error;.  bre
351a0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
351b0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
351c0 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
351d0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
351e0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
351f0 20 4f 70 63 6f 64 65 3a 20 56 4f 70 65 6e 20 50   Opcode: VOpen P
35200 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
35210 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
35220 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61   to a virtual ta
35230 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73  ble object, an s
35240 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75  qlite3_vtab stru
35250 63 74 75 72 65 2e 0a 2a 2a 20 50 31 20 69 73 20  cture..** P1 is 
35260 61 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 2e  a cursor number.
35270 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6f 70    This opcode op
35280 65 6e 73 20 61 20 63 75 72 73 6f 72 20 74 6f 20  ens a cursor to 
35290 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74  the virtual.** t
352a0 61 62 6c 65 20 61 6e 64 20 73 74 6f 72 65 73 20  able and stores 
352b0 74 68 61 74 20 63 75 72 73 6f 72 20 69 6e 20 50  that cursor in P
352c0 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 4f  1..*/.case OP_VO
352d0 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  pen: {.  VdbeCur
352e0 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 73 71 6c  sor *pCur;.  sql
352f0 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72  ite3_vtab_cursor
35300 20 2a 70 56 43 75 72 3b 0a 20 20 73 71 6c 69 74   *pVCur;.  sqlit
35310 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
35320 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
35330 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
35340 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62  ..  assert( p->b
35350 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 70 43  IsReader );.  pC
35360 75 72 20 3d 20 30 3b 0a 20 20 70 56 43 75 72 20  ur = 0;.  pVCur 
35370 3d 20 30 3b 0a 20 20 70 56 74 61 62 20 3d 20 70  = 0;.  pVtab = p
35380 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56  Op->p4.pVtab->pV
35390 74 61 62 3b 0a 20 20 69 66 28 20 70 56 74 61 62  tab;.  if( pVtab
353a0 3d 3d 30 20 7c 7c 20 4e 45 56 45 52 28 70 56 74  ==0 || NEVER(pVt
353b0 61 62 2d 3e 70 4d 6f 64 75 6c 65 3d 3d 30 29 20  ab->pModule==0) 
353c0 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
353d0 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 67  TE_LOCKED;.    g
353e0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
353f0 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 70 4d  _error;.  }.  pM
35400 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70  odule = pVtab->p
35410 4d 6f 64 75 6c 65 3b 0a 20 20 72 63 20 3d 20 70  Module;.  rc = p
35420 4d 6f 64 75 6c 65 2d 3e 78 4f 70 65 6e 28 70 56  Module->xOpen(pV
35430 74 61 62 2c 20 26 70 56 43 75 72 29 3b 0a 20 20  tab, &pVCur);.  
35440 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72  sqlite3VtabImpor
35450 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62  tErrmsg(p, pVtab
35460 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  );.  if( rc ) go
35470 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
35480 65 72 72 6f 72 3b 0a 0a 20 20 2f 2a 20 49 6e 69  error;..  /* Ini
35490 74 69 61 6c 69 7a 65 20 73 71 6c 69 74 65 33 5f  tialize sqlite3_
354a0 76 74 61 62 5f 63 75 72 73 6f 72 20 62 61 73 65  vtab_cursor base
354b0 20 63 6c 61 73 73 20 2a 2f 0a 20 20 70 56 43 75   class */.  pVCu
354c0 72 2d 3e 70 56 74 61 62 20 3d 20 70 56 74 61 62  r->pVtab = pVtab
354d0 3b 0a 0a 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69  ;..  /* Initiali
354e0 7a 65 20 76 64 62 65 20 63 75 72 73 6f 72 20 6f  ze vdbe cursor o
354f0 62 6a 65 63 74 20 2a 2f 0a 20 20 70 43 75 72 20  bject */.  pCur 
35500 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72  = allocateCursor
35510 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20  (p, pOp->p1, 0, 
35520 2d 31 2c 20 43 55 52 54 59 50 45 5f 56 54 41 42  -1, CURTYPE_VTAB
35530 29 3b 0a 20 20 69 66 28 20 70 43 75 72 20 29 7b  );.  if( pCur ){
35540 0a 20 20 20 20 70 43 75 72 2d 3e 75 63 2e 70 56  .    pCur->uc.pV
35550 43 75 72 20 3d 20 70 56 43 75 72 3b 0a 20 20 20  Cur = pVCur;.   
35560 20 70 56 74 61 62 2d 3e 6e 52 65 66 2b 2b 3b 0a   pVtab->nRef++;.
35570 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
35580 65 72 74 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46  ert( db->mallocF
35590 61 69 6c 65 64 20 29 3b 0a 20 20 20 20 70 4d 6f  ailed );.    pMo
355a0 64 75 6c 65 2d 3e 78 43 6c 6f 73 65 28 70 56 43  dule->xClose(pVC
355b0 75 72 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f  ur);.    goto no
355c0 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 62 72 65 61  _mem;.  }.  brea
355d0 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
355e0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
355f0 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
35600 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
35610 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
35620 4f 70 63 6f 64 65 3a 20 56 46 69 6c 74 65 72 20  Opcode: VFilter 
35630 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
35640 20 53 79 6e 6f 70 73 69 73 3a 20 69 70 6c 61 6e   Synopsis: iplan
35650 3d 72 5b 50 33 5d 20 7a 70 6c 61 6e 3d 27 50 34  =r[P3] zplan='P4
35660 27 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20  '.**.** P1 is a 
35670 63 75 72 73 6f 72 20 6f 70 65 6e 65 64 20 75 73  cursor opened us
35680 69 6e 67 20 56 4f 70 65 6e 2e 20 20 50 32 20 69  ing VOpen.  P2 i
35690 73 20 61 6e 20 61 64 64 72 65 73 73 20 74 6f 20  s an address to 
356a0 6a 75 6d 70 20 74 6f 20 69 66 0a 2a 2a 20 74 68  jump to if.** th
356b0 65 20 66 69 6c 74 65 72 65 64 20 72 65 73 75 6c  e filtered resul
356c0 74 20 73 65 74 20 69 73 20 65 6d 70 74 79 2e 0a  t set is empty..
356d0 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 65 69 74 68  **.** P4 is eith
356e0 65 72 20 4e 55 4c 4c 20 6f 72 20 61 20 73 74 72  er NULL or a str
356f0 69 6e 67 20 74 68 61 74 20 77 61 73 20 67 65 6e  ing that was gen
35700 65 72 61 74 65 64 20 62 79 20 74 68 65 20 78 42  erated by the xB
35710 65 73 74 49 6e 64 65 78 0a 2a 2a 20 6d 65 74 68  estIndex.** meth
35720 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65  od of the module
35730 2e 20 20 54 68 65 20 69 6e 74 65 72 70 72 65 74  .  The interpret
35740 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 50 34 20  ation of the P4 
35750 73 74 72 69 6e 67 20 69 73 20 6c 65 66 74 0a 2a  string is left.*
35760 2a 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20  * to the module 
35770 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a  implementation..
35780 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
35790 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 78 46  e invokes the xF
357a0 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 6f 6e 20  ilter method on 
357b0 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
357c0 65 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20 62  e specified.** b
357d0 79 20 50 31 2e 20 20 54 68 65 20 69 6e 74 65 67  y P1.  The integ
357e0 65 72 20 71 75 65 72 79 20 70 6c 61 6e 20 70 61  er query plan pa
357f0 72 61 6d 65 74 65 72 20 74 6f 20 78 46 69 6c 74  rameter to xFilt
35800 65 72 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  er is stored in 
35810 72 65 67 69 73 74 65 72 0a 2a 2a 20 50 33 2e 20  register.** P3. 
35820 52 65 67 69 73 74 65 72 20 50 33 2b 31 20 73 74  Register P3+1 st
35830 6f 72 65 73 20 74 68 65 20 61 72 67 63 20 70 61  ores the argc pa
35840 72 61 6d 65 74 65 72 20 74 6f 20 62 65 20 70 61  rameter to be pa
35850 73 73 65 64 20 74 6f 20 74 68 65 0a 2a 2a 20 78  ssed to the.** x
35860 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 2e 20 52  Filter method. R
35870 65 67 69 73 74 65 72 73 20 50 33 2b 32 2e 2e 50  egisters P3+2..P
35880 33 2b 31 2b 61 72 67 63 20 61 72 65 20 74 68 65  3+1+argc are the
35890 20 61 72 67 63 0a 2a 2a 20 61 64 64 69 74 69 6f   argc.** additio
358a0 6e 61 6c 20 70 61 72 61 6d 65 74 65 72 73 20 77  nal parameters w
358b0 68 69 63 68 20 61 72 65 20 70 61 73 73 65 64 20  hich are passed 
358c0 74 6f 0a 2a 2a 20 78 46 69 6c 74 65 72 20 61 73  to.** xFilter as
358d0 20 61 72 67 76 2e 20 52 65 67 69 73 74 65 72 20   argv. Register 
358e0 50 33 2b 32 20 62 65 63 6f 6d 65 73 20 61 72 67  P3+2 becomes arg
358f0 76 5b 30 5d 20 77 68 65 6e 20 70 61 73 73 65 64  v[0] when passed
35900 20 74 6f 20 78 46 69 6c 74 65 72 2e 0a 2a 2a 0a   to xFilter..**.
35910 2a 2a 20 41 20 6a 75 6d 70 20 69 73 20 6d 61 64  ** A jump is mad
35920 65 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 72  e to P2 if the r
35930 65 73 75 6c 74 20 73 65 74 20 61 66 74 65 72 20  esult set after 
35940 66 69 6c 74 65 72 69 6e 67 20 77 6f 75 6c 64 20  filtering would 
35950 62 65 20 65 6d 70 74 79 2e 0a 2a 2f 0a 63 61 73  be empty..*/.cas
35960 65 20 4f 50 5f 56 46 69 6c 74 65 72 3a 20 7b 20  e OP_VFilter: { 
35970 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69    /* jump */.  i
35980 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69  nt nArg;.  int i
35990 51 75 65 72 79 3b 0a 20 20 63 6f 6e 73 74 20 73  Query;.  const s
359a0 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
359b0 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70  Module;.  Mem *p
359c0 51 75 65 72 79 3b 0a 20 20 4d 65 6d 20 2a 70 41  Query;.  Mem *pA
359d0 72 67 63 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  rgc;.  sqlite3_v
359e0 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 43 75  tab_cursor *pVCu
359f0 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  r;.  sqlite3_vta
35a00 62 20 2a 70 56 74 61 62 3b 0a 20 20 56 64 62 65  b *pVtab;.  Vdbe
35a10 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20  Cursor *pCur;.  
35a20 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 69  int res;.  int i
35a30 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b  ;.  Mem **apArg;
35a40 0a 0a 20 20 70 51 75 65 72 79 20 3d 20 26 61 4d  ..  pQuery = &aM
35a50 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70  em[pOp->p3];.  p
35a60 41 72 67 63 20 3d 20 26 70 51 75 65 72 79 5b 31  Argc = &pQuery[1
35a70 5d 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61  ];.  pCur = p->a
35a80 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
35a90 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
35aa0 6c 69 64 28 70 51 75 65 72 79 29 20 29 3b 0a 20  lid(pQuery) );. 
35ab0 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
35ac0 70 4f 70 2d 3e 70 33 2c 20 70 51 75 65 72 79 29  pOp->p3, pQuery)
35ad0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 75 72  ;.  assert( pCur
35ae0 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
35af0 59 50 45 5f 56 54 41 42 20 29 3b 0a 20 20 70 56  YPE_VTAB );.  pV
35b00 43 75 72 20 3d 20 70 43 75 72 2d 3e 75 63 2e 70  Cur = pCur->uc.p
35b10 56 43 75 72 3b 0a 20 20 70 56 74 61 62 20 3d 20  VCur;.  pVtab = 
35b20 70 56 43 75 72 2d 3e 70 56 74 61 62 3b 0a 20 20  pVCur->pVtab;.  
35b30 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d  pModule = pVtab-
35b40 3e 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 2f 2a 20  >pModule;..  /* 
35b50 47 72 61 62 20 74 68 65 20 69 6e 64 65 78 20 6e  Grab the index n
35b60 75 6d 62 65 72 20 61 6e 64 20 61 72 67 63 20 70  umber and argc p
35b70 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20 61  arameters */.  a
35b80 73 73 65 72 74 28 20 28 70 51 75 65 72 79 2d 3e  ssert( (pQuery->
35b90 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 29 21 3d  flags&MEM_Int)!=
35ba0 30 20 26 26 20 70 41 72 67 63 2d 3e 66 6c 61 67  0 && pArgc->flag
35bb0 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  s==MEM_Int );.  
35bc0 6e 41 72 67 20 3d 20 28 69 6e 74 29 70 41 72 67  nArg = (int)pArg
35bd0 63 2d 3e 75 2e 69 3b 0a 20 20 69 51 75 65 72 79  c->u.i;.  iQuery
35be0 20 3d 20 28 69 6e 74 29 70 51 75 65 72 79 2d 3e   = (int)pQuery->
35bf0 75 2e 69 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b  u.i;..  /* Invok
35c00 65 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65  e the xFilter me
35c10 74 68 6f 64 20 2a 2f 0a 20 20 72 65 73 20 3d 20  thod */.  res = 
35c20 30 3b 0a 20 20 61 70 41 72 67 20 3d 20 70 2d 3e  0;.  apArg = p->
35c30 61 70 41 72 67 3b 0a 20 20 66 6f 72 28 69 20 3d  apArg;.  for(i =
35c40 20 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29   0; i<nArg; i++)
35c50 7b 0a 20 20 20 20 61 70 41 72 67 5b 69 5d 20 3d  {.    apArg[i] =
35c60 20 26 70 41 72 67 63 5b 69 2b 31 5d 3b 0a 20 20   &pArgc[i+1];.  
35c70 7d 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65  }.  rc = pModule
35c80 2d 3e 78 46 69 6c 74 65 72 28 70 56 43 75 72 2c  ->xFilter(pVCur,
35c90 20 69 51 75 65 72 79 2c 20 70 4f 70 2d 3e 70 34   iQuery, pOp->p4
35ca0 2e 7a 2c 20 6e 41 72 67 2c 20 61 70 41 72 67 29  .z, nArg, apArg)
35cb0 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62 49  ;.  sqlite3VtabI
35cc0 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70  mportErrmsg(p, p
35cd0 56 74 61 62 29 3b 0a 20 20 69 66 28 20 72 63 20  Vtab);.  if( rc 
35ce0 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
35cf0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 72 65 73  _to_error;.  res
35d00 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66   = pModule->xEof
35d10 28 70 56 43 75 72 29 3b 0a 20 20 70 43 75 72 2d  (pVCur);.  pCur-
35d20 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20  >nullRow = 0;.  
35d30 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
35d40 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28  res!=0,2);.  if(
35d50 20 72 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70   res ) goto jump
35d60 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b  _to_p2;.  break;
35d70 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
35d80 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
35d90 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
35da0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
35db0 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
35dc0 63 6f 64 65 3a 20 56 43 6f 6c 75 6d 6e 20 50 31  code: VColumn P1
35dd0 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
35de0 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 76 63  nopsis: r[P3]=vc
35df0 6f 6c 75 6d 6e 28 50 32 29 0a 2a 2a 0a 2a 2a 20  olumn(P2).**.** 
35e00 53 74 6f 72 65 20 74 68 65 20 76 61 6c 75 65 20  Store the value 
35e10 6f 66 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c  of the P2-th col
35e20 75 6d 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 72 6f  umn of.** the ro
35e30 77 20 6f 66 20 74 68 65 20 76 69 72 74 75 61 6c  w of the virtual
35e40 2d 74 61 62 6c 65 20 74 68 61 74 20 74 68 65 20  -table that the 
35e50 0a 2a 2a 20 50 31 20 63 75 72 73 6f 72 20 69 73  .** P1 cursor is
35e60 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 69 6e 74   pointing to int
35e70 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  o register P3..*
35e80 2f 0a 63 61 73 65 20 4f 50 5f 56 43 6f 6c 75 6d  /.case OP_VColum
35e90 6e 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76  n: {.  sqlite3_v
35ea0 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f  tab *pVtab;.  co
35eb0 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  nst sqlite3_modu
35ec0 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d  le *pModule;.  M
35ed0 65 6d 20 2a 70 44 65 73 74 3b 0a 20 20 73 71 6c  em *pDest;.  sql
35ee0 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 73 43 6f  ite3_context sCo
35ef0 6e 74 65 78 74 3b 0a 0a 20 20 56 64 62 65 43 75  ntext;..  VdbeCu
35f00 72 73 6f 72 20 2a 70 43 75 72 20 3d 20 70 2d 3e  rsor *pCur = p->
35f10 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
35f20 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e    assert( pCur->
35f30 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
35f40 45 5f 56 54 41 42 20 29 3b 0a 20 20 61 73 73 65  E_VTAB );.  asse
35f50 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26  rt( pOp->p3>0 &&
35f60 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d   pOp->p3<=(p->nM
35f70 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
35f80 72 29 20 29 3b 0a 20 20 70 44 65 73 74 20 3d 20  r) );.  pDest = 
35f90 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
35fa0 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
35fb0 67 65 28 70 2c 20 70 44 65 73 74 29 3b 0a 20 20  ge(p, pDest);.  
35fc0 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f  if( pCur->nullRo
35fd0 77 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  w ){.    sqlite3
35fe0 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
35ff0 44 65 73 74 29 3b 0a 20 20 20 20 62 72 65 61 6b  Dest);.    break
36000 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62 20 3d 20  ;.  }.  pVtab = 
36010 70 43 75 72 2d 3e 75 63 2e 70 56 43 75 72 2d 3e  pCur->uc.pVCur->
36020 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65  pVtab;.  pModule
36030 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   = pVtab->pModul
36040 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4d 6f  e;.  assert( pMo
36050 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 20 29 3b  dule->xColumn );
36060 0a 20 20 6d 65 6d 73 65 74 28 26 73 43 6f 6e 74  .  memset(&sCont
36070 65 78 74 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73  ext, 0, sizeof(s
36080 43 6f 6e 74 65 78 74 29 29 3b 0a 20 20 73 43 6f  Context));.  sCo
36090 6e 74 65 78 74 2e 70 4f 75 74 20 3d 20 70 44 65  ntext.pOut = pDe
360a0 73 74 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65  st;.  MemSetType
360b0 46 6c 61 67 28 70 44 65 73 74 2c 20 4d 45 4d 5f  Flag(pDest, MEM_
360c0 4e 75 6c 6c 29 3b 0a 20 20 72 63 20 3d 20 70 4d  Null);.  rc = pM
360d0 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 28 70  odule->xColumn(p
360e0 43 75 72 2d 3e 75 63 2e 70 56 43 75 72 2c 20 26  Cur->uc.pVCur, &
360f0 73 43 6f 6e 74 65 78 74 2c 20 70 4f 70 2d 3e 70  sContext, pOp->p
36100 32 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61  2);.  sqlite3Vta
36110 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c  bImportErrmsg(p,
36120 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 73   pVtab);.  if( s
36130 43 6f 6e 74 65 78 74 2e 69 73 45 72 72 6f 72 20  Context.isError 
36140 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 43 6f 6e  ){.    rc = sCon
36150 74 65 78 74 2e 69 73 45 72 72 6f 72 3b 0a 20 20  text.isError;.  
36160 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43  }.  sqlite3VdbeC
36170 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 44  hangeEncoding(pD
36180 65 73 74 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  est, encoding);.
36190 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
361a0 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74 29  (pOp->p3, pDest)
361b0 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
361c0 4c 4f 42 53 49 5a 45 28 70 44 65 73 74 29 3b 0a  LOBSIZE(pDest);.
361d0 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64  .  if( sqlite3Vd
361e0 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 44 65 73  beMemTooBig(pDes
361f0 74 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  t) ){.    goto t
36200 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 69 66  oo_big;.  }.  if
36210 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
36220 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
36230 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
36240 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
36250 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
36260 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
36270 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
36280 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4e  LE./* Opcode: VN
36290 65 78 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ext P1 P2 * * *.
362a0 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20 76 69  **.** Advance vi
362b0 72 74 75 61 6c 20 74 61 62 6c 65 20 50 31 20 74  rtual table P1 t
362c0 6f 20 74 68 65 20 6e 65 78 74 20 72 6f 77 20 69  o the next row i
362d0 6e 20 69 74 73 20 72 65 73 75 6c 74 20 73 65 74  n its result set
362e0 20 61 6e 64 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20   and.** jump to 
362f0 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20  instruction P2. 
36300 20 4f 72 2c 20 69 66 20 74 68 65 20 76 69 72 74   Or, if the virt
36310 75 61 6c 20 74 61 62 6c 65 20 68 61 73 20 72 65  ual table has re
36320 61 63 68 65 64 0a 2a 2a 20 74 68 65 20 65 6e 64  ached.** the end
36330 20 6f 66 20 69 74 73 20 72 65 73 75 6c 74 20 73   of its result s
36340 65 74 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  et, then fall th
36350 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
36360 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
36370 2f 0a 63 61 73 65 20 4f 50 5f 56 4e 65 78 74 3a  /.case OP_VNext:
36380 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a   {   /* jump */.
36390 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
363a0 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73  pVtab;.  const s
363b0 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
363c0 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20 72 65  Module;.  int re
363d0 73 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  s;.  VdbeCursor 
363e0 2a 70 43 75 72 3b 0a 0a 20 20 72 65 73 20 3d 20  *pCur;..  res = 
363f0 30 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61  0;.  pCur = p->a
36400 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
36410 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e 65   assert( pCur->e
36420 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
36430 5f 56 54 41 42 20 29 3b 0a 20 20 69 66 28 20 70  _VTAB );.  if( p
36440 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a  Cur->nullRow ){.
36450 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
36460 20 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e 75   pVtab = pCur->u
36470 63 2e 70 56 43 75 72 2d 3e 70 56 74 61 62 3b 0a  c.pVCur->pVtab;.
36480 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61    pModule = pVta
36490 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73  b->pModule;.  as
364a0 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78  sert( pModule->x
364b0 4e 65 78 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e  Next );..  /* In
364c0 76 6f 6b 65 20 74 68 65 20 78 4e 65 78 74 28 29  voke the xNext()
364d0 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20 6d   method of the m
364e0 6f 64 75 6c 65 2e 20 54 68 65 72 65 20 69 73 20  odule. There is 
364f0 6e 6f 20 77 61 79 20 66 6f 72 20 74 68 65 0a 20  no way for the. 
36500 20 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20 69   ** underlying i
36510 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f  mplementation to
36520 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72   return an error
36530 20 69 66 20 6f 6e 65 20 6f 63 63 75 72 73 20 64   if one occurs d
36540 75 72 69 6e 67 0a 20 20 2a 2a 20 78 4e 65 78 74  uring.  ** xNext
36550 28 29 2e 20 49 6e 73 74 65 61 64 2c 20 69 66 20  (). Instead, if 
36560 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73 2c  an error occurs,
36570 20 74 72 75 65 20 69 73 20 72 65 74 75 72 6e 65   true is returne
36580 64 20 28 69 6e 64 69 63 61 74 69 6e 67 20 74 68  d (indicating th
36590 61 74 20 0a 20 20 2a 2a 20 64 61 74 61 20 69 73  at .  ** data is
365a0 20 61 76 61 69 6c 61 62 6c 65 29 20 61 6e 64 20   available) and 
365b0 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20 72  the error code r
365c0 65 74 75 72 6e 65 64 20 77 68 65 6e 20 78 43 6f  eturned when xCo
365d0 6c 75 6d 6e 20 6f 72 0a 20 20 2a 2a 20 73 6f 6d  lumn or.  ** som
365e0 65 20 6f 74 68 65 72 20 6d 65 74 68 6f 64 20 69  e other method i
365f0 73 20 6e 65 78 74 20 69 6e 76 6f 6b 65 64 20 6f  s next invoked o
36600 6e 20 74 68 65 20 73 61 76 65 20 76 69 72 74 75  n the save virtu
36610 61 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72 2e  al table cursor.
36620 0a 20 20 2a 2f 0a 20 20 72 63 20 3d 20 70 4d 6f  .  */.  rc = pMo
36630 64 75 6c 65 2d 3e 78 4e 65 78 74 28 70 43 75 72  dule->xNext(pCur
36640 2d 3e 75 63 2e 70 56 43 75 72 29 3b 0a 20 20 73  ->uc.pVCur);.  s
36650 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74  qlite3VtabImport
36660 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29  Errmsg(p, pVtab)
36670 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
36680 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
36690 72 72 6f 72 3b 0a 20 20 72 65 73 20 3d 20 70 4d  rror;.  res = pM
366a0 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70 43 75 72  odule->xEof(pCur
366b0 2d 3e 75 63 2e 70 56 43 75 72 29 3b 0a 20 20 56  ->uc.pVCur);.  V
366c0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 21  dbeBranchTaken(!
366d0 72 65 73 2c 32 29 3b 0a 20 20 69 66 28 20 21 72  res,2);.  if( !r
366e0 65 73 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20  es ){.    /* If 
366f0 74 68 65 72 65 20 69 73 20 64 61 74 61 2c 20 6a  there is data, j
36700 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20  ump to P2 */.   
36710 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
36720 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69  _and_check_for_i
36730 6e 74 65 72 72 75 70 74 3b 0a 20 20 7d 0a 20 20  nterrupt;.  }.  
36740 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69  goto check_for_i
36750 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 23 65 6e 64  nterrupt;.}.#end
36760 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
36770 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
36780 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
36790 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
367a0 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
367b0 52 65 6e 61 6d 65 20 50 31 20 2a 20 2a 20 50 34  Rename P1 * * P4
367c0 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61   *.**.** P4 is a
367d0 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69   pointer to a vi
367e0 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65  rtual table obje
367f0 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76  ct, an sqlite3_v
36800 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a  tab structure..*
36810 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e  * This opcode in
36820 76 6f 6b 65 73 20 74 68 65 20 63 6f 72 72 65 73  vokes the corres
36830 70 6f 6e 64 69 6e 67 20 78 52 65 6e 61 6d 65 20  ponding xRename 
36840 6d 65 74 68 6f 64 2e 20 54 68 65 20 76 61 6c 75  method. The valu
36850 65 0a 2a 2a 20 69 6e 20 72 65 67 69 73 74 65 72  e.** in register
36860 20 50 31 20 69 73 20 70 61 73 73 65 64 20 61 73   P1 is passed as
36870 20 74 68 65 20 7a 4e 61 6d 65 20 61 72 67 75 6d   the zName argum
36880 65 6e 74 20 74 6f 20 74 68 65 20 78 52 65 6e 61  ent to the xRena
36890 6d 65 20 6d 65 74 68 6f 64 2e 0a 2a 2f 0a 63 61  me method..*/.ca
368a0 73 65 20 4f 50 5f 56 52 65 6e 61 6d 65 3a 20 7b  se OP_VRename: {
368b0 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
368c0 2a 70 56 74 61 62 3b 0a 20 20 4d 65 6d 20 2a 70  *pVtab;.  Mem *p
368d0 4e 61 6d 65 3b 0a 0a 20 20 70 56 74 61 62 20 3d  Name;..  pVtab =
368e0 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e   pOp->p4.pVtab->
368f0 70 56 74 61 62 3b 0a 20 20 70 4e 61 6d 65 20 3d  pVtab;.  pName =
36900 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
36910 0a 20 20 61 73 73 65 72 74 28 20 70 56 74 61 62  .  assert( pVtab
36920 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61  ->pModule->xRena
36930 6d 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  me );.  assert( 
36940 6d 65 6d 49 73 56 61 6c 69 64 28 70 4e 61 6d 65  memIsValid(pName
36950 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ) );.  assert( p
36960 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b  ->readOnly==0 );
36970 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
36980 45 28 70 4f 70 2d 3e 70 31 2c 20 70 4e 61 6d 65  E(pOp->p1, pName
36990 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4e 61  );.  assert( pNa
369a0 6d 65 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  me->flags & MEM_
369b0 53 74 72 20 29 3b 0a 20 20 74 65 73 74 63 61 73  Str );.  testcas
369c0 65 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53  e( pName->enc==S
369d0 51 4c 49 54 45 5f 55 54 46 38 20 29 3b 0a 20 20  QLITE_UTF8 );.  
369e0 74 65 73 74 63 61 73 65 28 20 70 4e 61 6d 65 2d  testcase( pName-
369f0 3e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46  >enc==SQLITE_UTF
36a00 31 36 42 45 20 29 3b 0a 20 20 74 65 73 74 63 61  16BE );.  testca
36a10 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d  se( pName->enc==
36a20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 29  SQLITE_UTF16LE )
36a30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
36a40 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
36a50 6e 67 28 70 4e 61 6d 65 2c 20 53 51 4c 49 54 45  ng(pName, SQLITE
36a60 5f 55 54 46 38 29 3b 0a 20 20 69 66 28 20 72 63  _UTF8);.  if( rc
36a70 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
36a80 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 72 63  e_to_error;.  rc
36a90 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   = pVtab->pModul
36aa0 65 2d 3e 78 52 65 6e 61 6d 65 28 70 56 74 61 62  e->xRename(pVtab
36ab0 2c 20 70 4e 61 6d 65 2d 3e 7a 29 3b 0a 20 20 73  , pName->z);.  s
36ac0 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74  qlite3VtabImport
36ad0 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29  Errmsg(p, pVtab)
36ae0 3b 0a 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d  ;.  p->expired =
36af0 20 30 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67   0;.  if( rc ) g
36b00 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
36b10 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b  _error;.  break;
36b20 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64  .}.#endif..#ifnd
36b30 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
36b40 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
36b50 70 63 6f 64 65 3a 20 56 55 70 64 61 74 65 20 50  pcode: VUpdate P
36b60 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
36b70 20 53 79 6e 6f 70 73 69 73 3a 20 64 61 74 61 3d   Synopsis: data=
36b80 72 5b 50 33 40 50 32 5d 0a 2a 2a 0a 2a 2a 20 50  r[P3@P2].**.** P
36b90 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
36ba0 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  o a virtual tabl
36bb0 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c  e object, an sql
36bc0 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74  ite3_vtab struct
36bd0 75 72 65 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ure..** This opc
36be0 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20  ode invokes the 
36bf0 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 78 55  corresponding xU
36c00 70 64 61 74 65 20 6d 65 74 68 6f 64 2e 20 50 32  pdate method. P2
36c10 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 63   values.** are c
36c20 6f 6e 74 69 67 75 6f 75 73 20 6d 65 6d 6f 72 79  ontiguous memory
36c30 20 63 65 6c 6c 73 20 73 74 61 72 74 69 6e 67 20   cells starting 
36c40 61 74 20 50 33 20 74 6f 20 70 61 73 73 20 74 6f  at P3 to pass to
36c50 20 74 68 65 20 78 55 70 64 61 74 65 20 0a 2a 2a   the xUpdate .**
36c60 20 69 6e 76 6f 63 61 74 69 6f 6e 2e 20 54 68 65   invocation. The
36c70 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
36c80 65 72 20 28 50 33 2b 50 32 2d 31 29 20 63 6f 72  er (P3+P2-1) cor
36c90 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20  responds to the 
36ca0 0a 2a 2a 20 70 32 74 68 20 65 6c 65 6d 65 6e 74  .** p2th element
36cb0 20 6f 66 20 74 68 65 20 61 72 67 76 20 61 72 72   of the argv arr
36cc0 61 79 20 70 61 73 73 65 64 20 74 6f 20 78 55 70  ay passed to xUp
36cd0 64 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  date..**.** The 
36ce0 78 55 70 64 61 74 65 20 6d 65 74 68 6f 64 20 77  xUpdate method w
36cf0 69 6c 6c 20 64 6f 20 61 20 44 45 4c 45 54 45 20  ill do a DELETE 
36d00 6f 72 20 61 6e 20 49 4e 53 45 52 54 20 6f 72 20  or an INSERT or 
36d10 62 6f 74 68 2e 0a 2a 2a 20 54 68 65 20 61 72 67  both..** The arg
36d20 76 5b 30 5d 20 65 6c 65 6d 65 6e 74 20 28 77 68  v[0] element (wh
36d30 69 63 68 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  ich corresponds 
36d40 74 6f 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50  to memory cell P
36d50 33 29 0a 2a 2a 20 69 73 20 74 68 65 20 72 6f 77  3).** is the row
36d60 69 64 20 6f 66 20 61 20 72 6f 77 20 74 6f 20 64  id of a row to d
36d70 65 6c 65 74 65 2e 20 20 49 66 20 61 72 67 76 5b  elete.  If argv[
36d80 30 5d 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  0] is NULL then 
36d90 6e 6f 20 0a 2a 2a 20 64 65 6c 65 74 69 6f 6e 20  no .** deletion 
36da0 6f 63 63 75 72 73 2e 20 20 54 68 65 20 61 72 67  occurs.  The arg
36db0 76 5b 31 5d 20 65 6c 65 6d 65 6e 74 20 69 73 20  v[1] element is 
36dc0 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65  the rowid of the
36dd0 20 6e 65 77 20 0a 2a 2a 20 72 6f 77 2e 20 20 54   new .** row.  T
36de0 68 69 73 20 63 61 6e 20 62 65 20 4e 55 4c 4c 20  his can be NULL 
36df0 74 6f 20 68 61 76 65 20 74 68 65 20 76 69 72 74  to have the virt
36e00 75 61 6c 20 74 61 62 6c 65 20 73 65 6c 65 63 74  ual table select
36e10 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72 6f 77   the new .** row
36e20 69 64 20 66 6f 72 20 69 74 73 65 6c 66 2e 20 20  id for itself.  
36e30 54 68 65 20 73 75 62 73 65 71 75 65 6e 74 20 65  The subsequent e
36e40 6c 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20 61  lements in the a
36e50 72 72 61 79 20 61 72 65 20 0a 2a 2a 20 74 68 65  rray are .** the
36e60 20 76 61 6c 75 65 73 20 6f 66 20 63 6f 6c 75 6d   values of colum
36e70 6e 73 20 69 6e 20 74 68 65 20 6e 65 77 20 72 6f  ns in the new ro
36e80 77 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 3d 3d  w..**.** If P2==
36e90 31 20 74 68 65 6e 20 6e 6f 20 69 6e 73 65 72 74  1 then no insert
36ea0 20 69 73 20 70 65 72 66 6f 72 6d 65 64 2e 20 20   is performed.  
36eb0 61 72 67 76 5b 30 5d 20 69 73 20 74 68 65 20 72  argv[0] is the r
36ec0 6f 77 69 64 20 6f 66 0a 2a 2a 20 61 20 72 6f 77  owid of.** a row
36ed0 20 74 6f 20 64 65 6c 65 74 65 2e 0a 2a 2a 0a 2a   to delete..**.*
36ee0 2a 20 50 31 20 69 73 20 61 20 62 6f 6f 6c 65 61  * P1 is a boolea
36ef0 6e 20 66 6c 61 67 2e 20 49 66 20 69 74 20 69 73  n flag. If it is
36f00 20 73 65 74 20 74 6f 20 74 72 75 65 20 61 6e 64   set to true and
36f10 20 74 68 65 20 78 55 70 64 61 74 65 20 63 61 6c   the xUpdate cal
36f20 6c 0a 2a 2a 20 69 73 20 73 75 63 63 65 73 73 66  l.** is successf
36f30 75 6c 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c  ul, then the val
36f40 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73  ue returned by s
36f50 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65  qlite3_last_inse
36f60 72 74 5f 72 6f 77 69 64 28 29 20 0a 2a 2a 20 69  rt_rowid() .** i
36f70 73 20 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c  s set to the val
36f80 75 65 20 6f 66 20 74 68 65 20 72 6f 77 69 64 20  ue of the rowid 
36f90 66 6f 72 20 74 68 65 20 72 6f 77 20 6a 75 73 74  for the row just
36fa0 20 69 6e 73 65 72 74 65 64 2e 0a 2a 2a 0a 2a 2a   inserted..**.**
36fb0 20 50 35 20 69 73 20 74 68 65 20 65 72 72 6f 72   P5 is the error
36fc0 20 61 63 74 69 6f 6e 73 20 28 4f 45 5f 52 65 70   actions (OE_Rep
36fd0 6c 61 63 65 2c 20 4f 45 5f 46 61 69 6c 2c 20 4f  lace, OE_Fail, O
36fe0 45 5f 49 67 6e 6f 72 65 2c 20 65 74 63 29 20 74  E_Ignore, etc) t
36ff0 6f 0a 2a 2a 20 61 70 70 6c 79 20 69 6e 20 74 68  o.** apply in th
37000 65 20 63 61 73 65 20 6f 66 20 61 20 63 6f 6e 73  e case of a cons
37010 74 72 61 69 6e 74 20 66 61 69 6c 75 72 65 20 6f  traint failure o
37020 6e 20 61 6e 20 69 6e 73 65 72 74 20 6f 72 20 75  n an insert or u
37030 70 64 61 74 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  pdate..*/.case O
37040 50 5f 56 55 70 64 61 74 65 3a 20 7b 0a 20 20 73  P_VUpdate: {.  s
37050 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
37060 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69  ab;.  const sqli
37070 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
37080 75 6c 65 3b 0a 20 20 69 6e 74 20 6e 41 72 67 3b  ule;.  int nArg;
37090 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73 71 6c 69  .  int i;.  sqli
370a0 74 65 5f 69 6e 74 36 34 20 72 6f 77 69 64 3b 0a  te_int64 rowid;.
370b0 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a 20    Mem **apArg;. 
370c0 20 4d 65 6d 20 2a 70 58 3b 0a 0a 20 20 61 73 73   Mem *pX;..  ass
370d0 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 31 20  ert( pOp->p2==1 
370e0 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70         || pOp->p
370f0 35 3d 3d 4f 45 5f 46 61 69 6c 20 20 20 7c 7c 20  5==OE_Fail   || 
37100 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 6f 6c 6c  pOp->p5==OE_Roll
37110 62 61 63 6b 20 0a 20 20 20 20 20 20 20 7c 7c 20  back .       || 
37120 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 41 62 6f 72  pOp->p5==OE_Abor
37130 74 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45  t || pOp->p5==OE
37140 5f 49 67 6e 6f 72 65 20 7c 7c 20 70 4f 70 2d 3e  _Ignore || pOp->
37150 70 35 3d 3d 4f 45 5f 52 65 70 6c 61 63 65 0a 20  p5==OE_Replace. 
37160 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
37170 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
37180 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70    pVtab = pOp->p
37190 34 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a  4.pVtab->pVtab;.
371a0 20 20 69 66 28 20 70 56 74 61 62 3d 3d 30 20 7c    if( pVtab==0 |
371b0 7c 20 4e 45 56 45 52 28 70 56 74 61 62 2d 3e 70  | NEVER(pVtab->p
371c0 4d 6f 64 75 6c 65 3d 3d 30 29 20 29 7b 0a 20 20  Module==0) ){.  
371d0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f    rc = SQLITE_LO
371e0 43 4b 45 44 3b 0a 20 20 20 20 67 6f 74 6f 20 61  CKED;.    goto a
371f0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
37200 72 3b 0a 20 20 7d 0a 20 20 70 4d 6f 64 75 6c 65  r;.  }.  pModule
37210 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   = pVtab->pModul
37220 65 3b 0a 20 20 6e 41 72 67 20 3d 20 70 4f 70 2d  e;.  nArg = pOp-
37230 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70  >p2;.  assert( p
37240 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 56  Op->p4type==P4_V
37250 54 41 42 20 29 3b 0a 20 20 69 66 28 20 41 4c 57  TAB );.  if( ALW
37260 41 59 53 28 70 4d 6f 64 75 6c 65 2d 3e 78 55 70  AYS(pModule->xUp
37270 64 61 74 65 29 20 29 7b 0a 20 20 20 20 75 38 20  date) ){.    u8 
37280 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d  vtabOnConflict =
37290 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c   db->vtabOnConfl
372a0 69 63 74 3b 0a 20 20 20 20 61 70 41 72 67 20 3d  ict;.    apArg =
372b0 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20 70   p->apArg;.    p
372c0 58 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  X = &aMem[pOp->p
372d0 33 5d 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b  3];.    for(i=0;
372e0 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20   i<nArg; i++){. 
372f0 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d       assert( mem
37300 49 73 56 61 6c 69 64 28 70 58 29 20 29 3b 0a 20  IsValid(pX) );. 
37310 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43       memAboutToC
37320 68 61 6e 67 65 28 70 2c 20 70 58 29 3b 0a 20 20  hange(p, pX);.  
37330 20 20 20 20 61 70 41 72 67 5b 69 5d 20 3d 20 70      apArg[i] = p
37340 58 3b 0a 20 20 20 20 20 20 70 58 2b 2b 3b 0a 20  X;.      pX++;. 
37350 20 20 20 7d 0a 20 20 20 20 64 62 2d 3e 76 74 61     }.    db->vta
37360 62 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 70 4f  bOnConflict = pO
37370 70 2d 3e 70 35 3b 0a 20 20 20 20 72 63 20 3d 20  p->p5;.    rc = 
37380 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74 65  pModule->xUpdate
37390 28 70 56 74 61 62 2c 20 6e 41 72 67 2c 20 61 70  (pVtab, nArg, ap
373a0 41 72 67 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20  Arg, &rowid);.  
373b0 20 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66    db->vtabOnConf
373c0 6c 69 63 74 20 3d 20 76 74 61 62 4f 6e 43 6f 6e  lict = vtabOnCon
373d0 66 6c 69 63 74 3b 0a 20 20 20 20 73 71 6c 69 74  flict;.    sqlit
373e0 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d  e3VtabImportErrm
373f0 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20  sg(p, pVtab);.  
37400 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
37410 5f 4f 4b 20 26 26 20 70 4f 70 2d 3e 70 31 20 29  _OK && pOp->p1 )
37420 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
37430 6e 41 72 67 3e 31 20 26 26 20 61 70 41 72 67 5b  nArg>1 && apArg[
37440 30 5d 20 26 26 20 28 61 70 41 72 67 5b 30 5d 2d  0] && (apArg[0]-
37450 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c 29  >flags&MEM_Null)
37460 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6c 61   );.      db->la
37470 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f  stRowid = lastRo
37480 77 69 64 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20  wid = rowid;.   
37490 20 7d 0a 20 20 20 20 69 66 28 20 28 72 63 26 30   }.    if( (rc&0
374a0 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e  xff)==SQLITE_CON
374b0 53 54 52 41 49 4e 54 20 26 26 20 70 4f 70 2d 3e  STRAINT && pOp->
374c0 70 34 2e 70 56 74 61 62 2d 3e 62 43 6f 6e 73 74  p4.pVtab->bConst
374d0 72 61 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 69  raint ){.      i
374e0 66 28 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 49  f( pOp->p5==OE_I
374f0 67 6e 6f 72 65 20 29 7b 0a 20 20 20 20 20 20 20  gnore ){.       
37500 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
37510 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
37520 20 20 20 20 20 20 70 2d 3e 65 72 72 6f 72 41 63        p->errorAc
37530 74 69 6f 6e 20 3d 20 28 28 70 4f 70 2d 3e 70 35  tion = ((pOp->p5
37540 3d 3d 4f 45 5f 52 65 70 6c 61 63 65 29 20 3f 20  ==OE_Replace) ? 
37550 4f 45 5f 41 62 6f 72 74 20 3a 20 70 4f 70 2d 3e  OE_Abort : pOp->
37560 70 35 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  p5);.      }.   
37570 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 2d   }else{.      p-
37580 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 20 20  >nChange++;.    
37590 7d 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67  }.    if( rc ) g
375a0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
375b0 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 62 72  _error;.  }.  br
375c0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
375d0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
375e0 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
375f0 66 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d  fndef  SQLITE_OM
37600 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
37610 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 67 65  ./* Opcode: Page
37620 63 6f 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20  count P1 P2 * * 
37630 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68  *.**.** Write th
37640 65 20 63 75 72 72 65 6e 74 20 6e 75 6d 62 65 72  e current number
37650 20 6f 66 20 70 61 67 65 73 20 69 6e 20 64 61 74   of pages in dat
37660 61 62 61 73 65 20 50 31 20 74 6f 20 6d 65 6d 6f  abase P1 to memo
37670 72 79 20 63 65 6c 6c 20 50 32 2e 0a 2a 2f 0a 63  ry cell P2..*/.c
37680 61 73 65 20 4f 50 5f 50 61 67 65 63 6f 75 6e 74  ase OP_Pagecount
37690 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
376a0 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70 4f 75 74  * out2 */.  pOut
376b0 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
376c0 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75  e(p, pOp);.  pOu
376d0 74 2d 3e 75 2e 69 20 3d 20 73 71 6c 69 74 65 33  t->u.i = sqlite3
376e0 42 74 72 65 65 4c 61 73 74 50 61 67 65 28 64 62  BtreeLastPage(db
376f0 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70  ->aDb[pOp->p1].p
37700 42 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  Bt);.  break;.}.
37710 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66  #endif...#ifndef
37720 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41    SQLITE_OMIT_PA
37730 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f  GER_PRAGMAS./* O
37740 70 63 6f 64 65 3a 20 4d 61 78 50 67 63 6e 74 20  pcode: MaxPgcnt 
37750 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
37760 2a 2a 20 54 72 79 20 74 6f 20 73 65 74 20 74 68  ** Try to set th
37770 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63  e maximum page c
37780 6f 75 6e 74 20 66 6f 72 20 64 61 74 61 62 61 73  ount for databas
37790 65 20 50 31 20 74 6f 20 74 68 65 20 76 61 6c 75  e P1 to the valu
377a0 65 20 69 6e 20 50 33 2e 0a 2a 2a 20 44 6f 20 6e  e in P3..** Do n
377b0 6f 74 20 6c 65 74 20 74 68 65 20 6d 61 78 69 6d  ot let the maxim
377c0 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 66 61  um page count fa
377d0 6c 6c 20 62 65 6c 6f 77 20 74 68 65 20 63 75 72  ll below the cur
377e0 72 65 6e 74 20 70 61 67 65 20 63 6f 75 6e 74 20  rent page count 
377f0 61 6e 64 0a 2a 2a 20 64 6f 20 6e 6f 74 20 63 68  and.** do not ch
37800 61 6e 67 65 20 74 68 65 20 6d 61 78 69 6d 75 6d  ange the maximum
37810 20 70 61 67 65 20 63 6f 75 6e 74 20 76 61 6c 75   page count valu
37820 65 20 69 66 20 50 33 3d 3d 30 2e 0a 2a 2a 0a 2a  e if P3==0..**.*
37830 2a 20 53 74 6f 72 65 20 74 68 65 20 6d 61 78 69  * Store the maxi
37840 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 61  mum page count a
37850 66 74 65 72 20 74 68 65 20 63 68 61 6e 67 65 20  fter the change 
37860 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
37870 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 61 78 50 67  */.case OP_MaxPg
37880 63 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  cnt: {          
37890 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 75    /* out2 */.  u
378a0 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e 65 77 4d  nsigned int newM
378b0 61 78 3b 0a 20 20 42 74 72 65 65 20 2a 70 42 74  ax;.  Btree *pBt
378c0 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  ;..  pOut = out2
378d0 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
378e0 70 29 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e  p);.  pBt = db->
378f0 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74  aDb[pOp->p1].pBt
37900 3b 0a 20 20 6e 65 77 4d 61 78 20 3d 20 30 3b 0a  ;.  newMax = 0;.
37910 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b    if( pOp->p3 ){
37920 0a 20 20 20 20 6e 65 77 4d 61 78 20 3d 20 73 71  .    newMax = sq
37930 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 50 61  lite3BtreeLastPa
37940 67 65 28 70 42 74 29 3b 0a 20 20 20 20 69 66 28  ge(pBt);.    if(
37950 20 6e 65 77 4d 61 78 20 3c 20 28 75 6e 73 69 67   newMax < (unsig
37960 6e 65 64 29 70 4f 70 2d 3e 70 33 20 29 20 6e 65  ned)pOp->p3 ) ne
37970 77 4d 61 78 20 3d 20 28 75 6e 73 69 67 6e 65 64  wMax = (unsigned
37980 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 20 20  )pOp->p3;.  }.  
37990 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 73 71 6c 69  pOut->u.i = sqli
379a0 74 65 33 42 74 72 65 65 4d 61 78 50 61 67 65 43  te3BtreeMaxPageC
379b0 6f 75 6e 74 28 70 42 74 2c 20 6e 65 77 4d 61 78  ount(pBt, newMax
379c0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  );.  break;.}.#e
379d0 6e 64 69 66 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ndif.../* Opcode
379e0 3a 20 49 6e 69 74 20 2a 20 50 32 20 2a 20 50 34  : Init * P2 * P4
379f0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
37a00 20 53 74 61 72 74 20 61 74 20 50 32 0a 2a 2a 0a   Start at P2.**.
37a10 2a 2a 20 50 72 6f 67 72 61 6d 73 20 63 6f 6e 74  ** Programs cont
37a20 61 69 6e 20 61 20 73 69 6e 67 6c 65 20 69 6e 73  ain a single ins
37a30 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 70  tance of this op
37a40 63 6f 64 65 20 61 73 20 74 68 65 20 76 65 72 79  code as the very
37a50 20 66 69 72 73 74 0a 2a 2a 20 6f 70 63 6f 64 65   first.** opcode
37a60 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 72 61 63 69  ..**.** If traci
37a70 6e 67 20 69 73 20 65 6e 61 62 6c 65 64 20 28 62  ng is enabled (b
37a80 79 20 74 68 65 20 73 71 6c 69 74 65 33 5f 74 72  y the sqlite3_tr
37a90 61 63 65 28 29 29 20 69 6e 74 65 72 66 61 63 65  ace()) interface
37aa0 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 55 54  , then.** the UT
37ab0 46 2d 38 20 73 74 72 69 6e 67 20 63 6f 6e 74 61  F-8 string conta
37ac0 69 6e 65 64 20 69 6e 20 50 34 20 69 73 20 65 6d  ined in P4 is em
37ad0 69 74 74 65 64 20 6f 6e 20 74 68 65 20 74 72 61  itted on the tra
37ae0 63 65 20 63 61 6c 6c 62 61 63 6b 2e 0a 2a 2a 20  ce callback..** 
37af0 4f 72 20 69 66 20 50 34 20 69 73 20 62 6c 61 6e  Or if P4 is blan
37b00 6b 2c 20 75 73 65 20 74 68 65 20 73 74 72 69 6e  k, use the strin
37b10 67 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71  g returned by sq
37b20 6c 69 74 65 33 5f 73 71 6c 28 29 2e 0a 2a 2a 0a  lite3_sql()..**.
37b30 2a 2a 20 49 66 20 50 32 20 69 73 20 6e 6f 74 20  ** If P2 is not 
37b40 7a 65 72 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e  zero, jump to in
37b50 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f  struction P2..*/
37b60 0a 63 61 73 65 20 4f 50 5f 49 6e 69 74 3a 20 7b  .case OP_Init: {
37b70 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
37b80 70 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 72  p */.  char *zTr
37b90 61 63 65 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68  ace;..  /* If th
37ba0 65 20 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73  e P4 argument is
37bb0 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20   not NULL, then 
37bc0 69 74 20 6d 75 73 74 20 62 65 20 61 6e 20 53 51  it must be an SQ
37bd0 4c 20 63 6f 6d 6d 65 6e 74 20 73 74 72 69 6e 67  L comment string
37be0 2e 0a 20 20 2a 2a 20 54 68 65 20 22 2d 2d 22 20  ..  ** The "--" 
37bf0 73 74 72 69 6e 67 20 69 73 20 62 72 6f 6b 65 6e  string is broken
37c00 20 75 70 20 74 6f 20 70 72 65 76 65 6e 74 20 66   up to prevent f
37c10 61 6c 73 65 2d 70 6f 73 69 74 69 76 65 73 20 77  alse-positives w
37c20 69 74 68 20 73 72 63 63 6b 31 2e 63 2e 0a 20 20  ith srcck1.c..  
37c30 2a 2a 0a 20 20 2a 2a 20 54 68 69 73 20 61 73 73  **.  ** This ass
37c40 65 72 74 28 29 20 70 72 6f 76 69 64 65 73 20 65  ert() provides e
37c50 76 69 64 65 6e 63 65 20 66 6f 72 3a 0a 20 20 2a  vidence for:.  *
37c60 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  * EVIDENCE-OF: R
37c70 2d 35 30 36 37 36 2d 30 39 38 36 30 20 54 68 65  -50676-09860 The
37c80 20 63 61 6c 6c 62 61 63 6b 20 63 61 6e 20 63 6f   callback can co
37c90 6d 70 75 74 65 20 74 68 65 20 73 61 6d 65 20 74  mpute the same t
37ca0 65 78 74 20 74 68 61 74 0a 20 20 2a 2a 20 77 6f  ext that.  ** wo
37cb0 75 6c 64 20 68 61 76 65 20 62 65 65 6e 20 72 65  uld have been re
37cc0 74 75 72 6e 65 64 20 62 79 20 74 68 65 20 6c 65  turned by the le
37cd0 67 61 63 79 20 73 71 6c 69 74 65 33 5f 74 72 61  gacy sqlite3_tra
37ce0 63 65 28 29 20 69 6e 74 65 72 66 61 63 65 20 62  ce() interface b
37cf0 79 0a 20 20 2a 2a 20 75 73 69 6e 67 20 74 68 65  y.  ** using the
37d00 20 58 20 61 72 67 75 6d 65 6e 74 20 77 68 65 6e   X argument when
37d10 20 58 20 62 65 67 69 6e 73 20 77 69 74 68 20 22   X begins with "
37d20 2d 2d 22 20 61 6e 64 20 69 6e 76 6f 6b 69 6e 67  --" and invoking
37d30 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f 65 78  .  ** sqlite3_ex
37d40 70 61 6e 64 65 64 5f 73 71 6c 28 50 29 20 6f 74  panded_sql(P) ot
37d50 68 65 72 77 69 73 65 2e 0a 20 20 2a 2f 0a 20 20  herwise..  */.  
37d60 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
37d70 7a 3d 3d 30 20 7c 7c 20 73 74 72 6e 63 6d 70 28  z==0 || strncmp(
37d80 70 4f 70 2d 3e 70 34 2e 7a 2c 20 22 2d 22 20 22  pOp->p4.z, "-" "
37d90 2d 20 22 2c 20 33 29 3d 3d 30 20 29 3b 0a 0a 23  - ", 3)==0 );..#
37da0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
37db0 49 54 5f 54 52 41 43 45 0a 20 20 69 66 28 20 28  IT_TRACE.  if( (
37dc0 64 62 2d 3e 6d 54 72 61 63 65 20 26 20 28 53 51  db->mTrace & (SQ
37dd0 4c 49 54 45 5f 54 52 41 43 45 5f 53 54 4d 54 7c  LITE_TRACE_STMT|
37de0 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 4c 45 47  SQLITE_TRACE_LEG
37df0 41 43 59 29 29 21 3d 30 0a 20 20 20 26 26 20 21  ACY))!=0.   && !
37e00 70 2d 3e 64 6f 69 6e 67 52 65 72 75 6e 0a 20 20  p->doingRerun.  
37e10 20 26 26 20 28 7a 54 72 61 63 65 20 3d 20 28 70   && (zTrace = (p
37e20 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e  Op->p4.z ? pOp->
37e30 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 29  p4.z : p->zSql))
37e40 21 3d 30 0a 20 20 29 7b 0a 23 69 66 6e 64 65 66  !=0.  ){.#ifndef
37e50 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50   SQLITE_OMIT_DEP
37e60 52 45 43 41 54 45 44 0a 20 20 20 20 69 66 28 20  RECATED.    if( 
37e70 64 62 2d 3e 6d 54 72 61 63 65 20 26 20 53 51 4c  db->mTrace & SQL
37e80 49 54 45 5f 54 52 41 43 45 5f 4c 45 47 41 43 59  ITE_TRACE_LEGACY
37e90 20 29 7b 0a 20 20 20 20 20 20 76 6f 69 64 20 28   ){.      void (
37ea0 2a 78 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20  *x)(void*,const 
37eb0 63 68 61 72 2a 29 20 3d 20 28 76 6f 69 64 28 2a  char*) = (void(*
37ec0 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68  )(void*,const ch
37ed0 61 72 2a 29 29 64 62 2d 3e 78 54 72 61 63 65 3b  ar*))db->xTrace;
37ee0 0a 20 20 20 20 20 20 63 68 61 72 20 2a 7a 20 3d  .      char *z =
37ef0 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 70 61   sqlite3VdbeExpa
37f00 6e 64 53 71 6c 28 70 2c 20 7a 54 72 61 63 65 29  ndSql(p, zTrace)
37f10 3b 0a 20 20 20 20 20 20 78 28 64 62 2d 3e 70 54  ;.      x(db->pT
37f20 72 61 63 65 41 72 67 2c 20 7a 29 3b 0a 20 20 20  raceArg, z);.   
37f30 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28     sqlite3_free(
37f40 7a 29 3b 0a 20 20 20 20 7d 65 6c 73 65 0a 23 65  z);.    }else.#e
37f50 6e 64 69 66 0a 20 20 20 20 7b 0a 20 20 20 20 20  ndif.    {.     
37f60 20 28 76 6f 69 64 29 64 62 2d 3e 78 54 72 61 63   (void)db->xTrac
37f70 65 28 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 53  e(SQLITE_TRACE_S
37f80 54 4d 54 2c 20 64 62 2d 3e 70 54 72 61 63 65 41  TMT, db->pTraceA
37f90 72 67 2c 20 70 2c 20 7a 54 72 61 63 65 29 3b 0a  rg, p, zTrace);.
37fa0 20 20 20 20 7d 0a 20 20 7d 0a 23 69 66 64 65 66      }.  }.#ifdef
37fb0 20 53 51 4c 49 54 45 5f 55 53 45 5f 46 43 4e 54   SQLITE_USE_FCNT
37fc0 4c 5f 54 52 41 43 45 0a 20 20 7a 54 72 61 63 65  L_TRACE.  zTrace
37fd0 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20   = (pOp->p4.z ? 
37fe0 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a  pOp->p4.z : p->z
37ff0 53 71 6c 29 3b 0a 20 20 69 66 28 20 7a 54 72 61  Sql);.  if( zTra
38000 63 65 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b  ce ){.    int i;
38010 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
38020 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20  db->nDb; i++){. 
38030 20 20 20 20 20 69 66 28 20 44 62 4d 61 73 6b 54       if( DbMaskT
38040 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
38050 2c 20 69 29 3d 3d 30 20 29 20 63 6f 6e 74 69 6e  , i)==0 ) contin
38060 75 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ue;.      sqlite
38070 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64  3_file_control(d
38080 62 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e  b, db->aDb[i].zN
38090 61 6d 65 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54  ame, SQLITE_FCNT
380a0 4c 5f 54 52 41 43 45 2c 20 7a 54 72 61 63 65 29  L_TRACE, zTrace)
380b0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64  ;.    }.  }.#end
380c0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 55 53 45  if /* SQLITE_USE
380d0 5f 46 43 4e 54 4c 5f 54 52 41 43 45 20 2a 2f 0a  _FCNTL_TRACE */.
380e0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
380f0 42 55 47 0a 20 20 69 66 28 20 28 64 62 2d 3e 66  BUG.  if( (db->f
38100 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 53 71  lags & SQLITE_Sq
38110 6c 54 72 61 63 65 29 21 3d 30 0a 20 20 20 26 26  lTrace)!=0.   &&
38120 20 28 7a 54 72 61 63 65 20 3d 20 28 70 4f 70 2d   (zTrace = (pOp-
38130 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e  >p4.z ? pOp->p4.
38140 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 29 21 3d 30  z : p->zSql))!=0
38150 0a 20 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  .  ){.    sqlite
38160 33 44 65 62 75 67 50 72 69 6e 74 66 28 22 53 51  3DebugPrintf("SQ
38170 4c 2d 74 72 61 63 65 3a 20 25 73 5c 6e 22 2c 20  L-trace: %s\n", 
38180 7a 54 72 61 63 65 29 3b 0a 20 20 7d 0a 23 65 6e  zTrace);.  }.#en
38190 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45  dif /* SQLITE_DE
381a0 42 55 47 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a  BUG */.#endif /*
381b0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41   SQLITE_OMIT_TRA
381c0 43 45 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d  CE */.  if( pOp-
381d0 3e 70 32 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  >p2 ) goto jump_
381e0 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a  to_p2;.  break;.
381f0 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  }..#ifdef SQLITE
38200 5f 45 4e 41 42 4c 45 5f 43 55 52 53 4f 52 5f 48  _ENABLE_CURSOR_H
38210 49 4e 54 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  INTS./* Opcode: 
38220 43 75 72 73 6f 72 48 69 6e 74 20 50 31 20 2a 20  CursorHint P1 * 
38230 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 72 6f  * P4 *.**.** Pro
38240 76 69 64 65 20 61 20 68 69 6e 74 20 74 6f 20 63  vide a hint to c
38250 75 72 73 6f 72 20 50 31 20 74 68 61 74 20 69 74  ursor P1 that it
38260 20 6f 6e 6c 79 20 6e 65 65 64 73 20 74 6f 20 72   only needs to r
38270 65 74 75 72 6e 20 72 6f 77 73 20 74 68 61 74 0a  eturn rows that.
38280 2a 2a 20 73 61 74 69 73 66 79 20 74 68 65 20 45  ** satisfy the E
38290 78 70 72 20 69 6e 20 50 34 2e 20 20 54 4b 5f 52  xpr in P4.  TK_R
382a0 45 47 49 53 54 45 52 20 74 65 72 6d 73 20 69 6e  EGISTER terms in
382b0 20 74 68 65 20 50 34 20 65 78 70 72 65 73 73 69   the P4 expressi
382c0 6f 6e 20 72 65 66 65 72 0a 2a 2a 20 74 6f 20 76  on refer.** to v
382d0 61 6c 75 65 73 20 63 75 72 72 65 6e 74 6c 79 20  alues currently 
382e0 68 65 6c 64 20 69 6e 20 72 65 67 69 73 74 65 72  held in register
382f0 73 2e 20 20 54 4b 5f 43 4f 4c 55 4d 4e 20 74 65  s.  TK_COLUMN te
38300 72 6d 73 20 69 6e 20 74 68 65 20 50 34 0a 2a 2a  rms in the P4.**
3831